From 3886749b1c8d79d4701bf6b8e66249c4e1491648 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Sun, 4 Jan 2026 18:06:31 +0800 Subject: dev(shell): implement basic shell tools fixed(file-system): fixed read and write bugs --- build/kernel.elf | Bin 345432 -> 0 bytes build/kernel.elf.asm | 16305 ----------------------------------- build/kernel.elf.sym | 268 - build/src/boot/entry.o | Bin 5464 -> 0 bytes build/src/drivers/plic.o | Bin 19664 -> 0 bytes build/src/drivers/uart.o | Bin 86768 -> 0 bytes build/src/drivers/virtio_dist.o | Bin 104488 -> 0 bytes build/src/fs/fat32.o | Bin 338040 -> 0 bytes build/src/fs/file.o | Bin 117760 -> 0 bytes build/src/fs/fs.o | Bin 109384 -> 0 bytes build/src/kernel/bio.o | Bin 53432 -> 0 bytes build/src/kernel/config.o | Bin 4376 -> 0 bytes build/src/kernel/cxx.o | Bin 21072 -> 0 bytes build/src/kernel/fdt.o | Bin 40344 -> 0 bytes build/src/kernel/initcode.o | Bin 31560 -> 0 bytes build/src/kernel/main.o | Bin 21904 -> 0 bytes build/src/kernel/mm/pmm.o | Bin 90344 -> 0 bytes build/src/kernel/mm/slab.o | Bin 67664 -> 0 bytes build/src/kernel/mm/vm.o | Bin 234008 -> 0 bytes build/src/kernel/proc/exec.o | Bin 64376 -> 0 bytes build/src/kernel/proc/proc.o | Bin 239968 -> 0 bytes build/src/kernel/proc/swtch.o | Bin 5024 -> 0 bytes build/src/kernel/sbi.o | Bin 19504 -> 0 bytes build/src/kernel/spinlock.o | Bin 100464 -> 0 bytes build/src/kernel/syscall.o | Bin 222232 -> 0 bytes build/src/kernel/timer.o | Bin 25808 -> 0 bytes build/src/kernel/trap/handler.o | Bin 72824 -> 0 bytes build/src/kernel/trap/trampoline.o | Bin 20960 -> 0 bytes build/src/kernel/trap/trap.o | Bin 20904 -> 0 bytes build/src/lib/string.o | Bin 31608 -> 0 bytes build/ulib/cxx.o | Bin 10232 -> 0 bytes build/ulib/iostream.o | Bin 13632 -> 0 bytes build/ulib/stdio.o | Bin 1037384 -> 0 bytes build/ulib/stdlib.o | Bin 170968 -> 0 bytes build/ulib/string.o | Bin 117952 -> 0 bytes build/user/echo | Bin 168112 -> 0 bytes build/user/echo.asm | 10641 ----------------------- build/user/echo.sym | 189 - build/user/entry.o | Bin 3184 -> 0 bytes build/user/init | Bin 168904 -> 0 bytes build/user/init.asm | 10687 ----------------------- build/user/init.o | Bin 17560 -> 0 bytes build/user/init.sym | 189 - build/user/initcode | Bin 30536 -> 0 bytes build/user/initcode.asm | 10687 ----------------------- build/user/initcode.out | Bin 168904 -> 0 bytes build/user/ls | Bin 170752 -> 0 bytes build/user/ls.asm | 10822 ----------------------- build/user/ls.sym | 191 - build/user/mkdir | Bin 168216 -> 0 bytes build/user/mkdir.asm | 10640 ----------------------- build/user/mkdir.sym | 189 - build/user/sh | Bin 204840 -> 0 bytes build/user/sh.asm | 12619 --------------------------- build/user/sh.o | Bin 287920 -> 0 bytes build/user/sh.sym | 223 - build/user/usys.o | Bin 5512 -> 0 bytes fs.img | Bin 33554432 -> 0 bytes src/fs/fat32.cc | 32 +- src/fs/file.cc | 41 + src/kernel/syscall.cc | 4 +- src/user/cat.cc | 48 + src/user/cp.cc | 48 + src/user/grep.cc | 68 + src/user/kill.cc | 23 + src/user/ln.cc | 18 + src/user/mv.cc | 26 + src/user/rm.cc | 24 + src/user/sh.cc | 26 +- src/user/touch.cc | 27 + src/user/wc.cc | 56 + 71 files changed, 421 insertions(+), 83670 deletions(-) delete mode 100755 build/kernel.elf delete mode 100644 build/kernel.elf.asm delete mode 100644 build/kernel.elf.sym delete mode 100644 build/src/boot/entry.o delete mode 100644 build/src/drivers/plic.o delete mode 100644 build/src/drivers/uart.o delete mode 100644 build/src/drivers/virtio_dist.o delete mode 100644 build/src/fs/fat32.o delete mode 100644 build/src/fs/file.o delete mode 100644 build/src/fs/fs.o delete mode 100644 build/src/kernel/bio.o delete mode 100644 build/src/kernel/config.o delete mode 100644 build/src/kernel/cxx.o delete mode 100644 build/src/kernel/fdt.o delete mode 100644 build/src/kernel/initcode.o delete mode 100644 build/src/kernel/main.o delete mode 100644 build/src/kernel/mm/pmm.o delete mode 100644 build/src/kernel/mm/slab.o delete mode 100644 build/src/kernel/mm/vm.o delete mode 100644 build/src/kernel/proc/exec.o delete mode 100644 build/src/kernel/proc/proc.o delete mode 100644 build/src/kernel/proc/swtch.o delete mode 100644 build/src/kernel/sbi.o delete mode 100644 build/src/kernel/spinlock.o delete mode 100644 build/src/kernel/syscall.o delete mode 100644 build/src/kernel/timer.o delete mode 100644 build/src/kernel/trap/handler.o delete mode 100644 build/src/kernel/trap/trampoline.o delete mode 100644 build/src/kernel/trap/trap.o delete mode 100644 build/src/lib/string.o delete mode 100644 build/ulib/cxx.o delete mode 100644 build/ulib/iostream.o delete mode 100644 build/ulib/stdio.o delete mode 100644 build/ulib/stdlib.o delete mode 100644 build/ulib/string.o delete mode 100755 build/user/echo delete mode 100644 build/user/echo.asm delete mode 100644 build/user/echo.sym delete mode 100644 build/user/entry.o delete mode 100755 build/user/init delete mode 100644 build/user/init.asm delete mode 100644 build/user/init.o delete mode 100644 build/user/init.sym delete mode 100755 build/user/initcode delete mode 100644 build/user/initcode.asm delete mode 100755 build/user/initcode.out delete mode 100755 build/user/ls delete mode 100644 build/user/ls.asm delete mode 100644 build/user/ls.sym delete mode 100755 build/user/mkdir delete mode 100644 build/user/mkdir.asm delete mode 100644 build/user/mkdir.sym delete mode 100755 build/user/sh delete mode 100644 build/user/sh.asm delete mode 100644 build/user/sh.o delete mode 100644 build/user/sh.sym delete mode 100644 build/user/usys.o delete mode 100644 fs.img create mode 100644 src/user/cat.cc create mode 100644 src/user/cp.cc create mode 100644 src/user/grep.cc create mode 100644 src/user/kill.cc create mode 100644 src/user/ln.cc create mode 100644 src/user/mv.cc create mode 100644 src/user/rm.cc create mode 100644 src/user/touch.cc create mode 100644 src/user/wc.cc diff --git a/build/kernel.elf b/build/kernel.elf deleted file mode 100755 index 41389de..0000000 Binary files a/build/kernel.elf and /dev/null differ diff --git a/build/kernel.elf.asm b/build/kernel.elf.asm deleted file mode 100644 index d5301a7..0000000 --- a/build/kernel.elf.asm +++ /dev/null @@ -1,16305 +0,0 @@ - -build/kernel.elf: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000080200000 <_start>: -.section .text.entry -.global _start - -_start: - mv tp, a0 - 80200000: 822a mv tp,a0 - - la t0, stack_base - 80200002: 00015297 auipc t0,0x15 - 80200006: a662b283 ld t0,-1434(t0) # 80214a68 <_GLOBAL_OFFSET_TABLE_+0x8> - li t1, 4096 - 8020000a: 6305 lui t1,0x1 - addi t2, a0, 1 - 8020000c: 00150393 addi t2,a0,1 - mul t1, t1, t2 - 80200010: 02730333 mul t1,t1,t2 - add sp, t0, t1 - 80200014: 00628133 add sp,t0,t1 - - bnez a0, .L_jump_main - 80200018: e50d bnez a0,80200042 <_start+0x42> - - la t0, sbss - 8020001a: 00015297 auipc t0,0x15 - 8020001e: a862b283 ld t0,-1402(t0) # 80214aa0 <_GLOBAL_OFFSET_TABLE_+0x40> - la t1, ebss - 80200022: 00015317 auipc t1,0x15 - 80200026: aa633303 ld t1,-1370(t1) # 80214ac8 <_GLOBAL_OFFSET_TABLE_+0x68> -.L_clear_bss: - bge t0, t1, .L_save_dtb - 8020002a: 0062d663 bge t0,t1,80200036 <_start+0x36> - sd zero, 0(t0) - 8020002e: 0002b023 sd zero,0(t0) - addi t0, t0, 8 - 80200032: 02a1 addi t0,t0,8 - j .L_clear_bss - 80200034: bfdd j 8020002a <_start+0x2a> - -.L_save_dtb: - la t0, g_dtb_addr - 80200036: 00015297 auipc t0,0x15 - 8020003a: a9a2b283 ld t0,-1382(t0) # 80214ad0 <_GLOBAL_OFFSET_TABLE_+0x70> - sd a1, 0(t0) - 8020003e: 00b2b023 sd a1,0(t0) - -.L_jump_main: - call kernel_main - 80200042: 0dd050ef jal 8020591e - -.L_park: - wfi - 80200046: 10500073 wfi - j .L_park - 8020004a: bff5 j 80200046 <_start+0x46> - -000000008020004c : -.global swtch - -swtch: - sd ra, 0(a0) - 8020004c: 00153023 sd ra,0(a0) - sd sp, 8(a0) - 80200050: 00253423 sd sp,8(a0) - sd s0, 16(a0) - 80200054: e900 sd s0,16(a0) - sd s1, 24(a0) - 80200056: ed04 sd s1,24(a0) - sd s2, 32(a0) - 80200058: 03253023 sd s2,32(a0) - sd s3, 40(a0) - 8020005c: 03353423 sd s3,40(a0) - sd s4, 48(a0) - 80200060: 03453823 sd s4,48(a0) - sd s5, 56(a0) - 80200064: 03553c23 sd s5,56(a0) - sd s6, 64(a0) - 80200068: 05653023 sd s6,64(a0) - sd s7, 72(a0) - 8020006c: 05753423 sd s7,72(a0) - sd s8, 80(a0) - 80200070: 05853823 sd s8,80(a0) - sd s9, 88(a0) - 80200074: 05953c23 sd s9,88(a0) - sd s10, 96(a0) - 80200078: 07a53023 sd s10,96(a0) - sd s11, 104(a0) - 8020007c: 07b53423 sd s11,104(a0) - - ld ra, 0(a1) - 80200080: 0005b083 ld ra,0(a1) - ld sp, 8(a1) - 80200084: 0085b103 ld sp,8(a1) - ld s0, 16(a1) - 80200088: 6980 ld s0,16(a1) - ld s1, 24(a1) - 8020008a: 6d84 ld s1,24(a1) - ld s2, 32(a1) - 8020008c: 0205b903 ld s2,32(a1) - ld s3, 40(a1) - 80200090: 0285b983 ld s3,40(a1) - ld s4, 48(a1) - 80200094: 0305ba03 ld s4,48(a1) - ld s5, 56(a1) - 80200098: 0385ba83 ld s5,56(a1) - ld s6, 64(a1) - 8020009c: 0405bb03 ld s6,64(a1) - ld s7, 72(a1) - 802000a0: 0485bb83 ld s7,72(a1) - ld s8, 80(a1) - 802000a4: 0505bc03 ld s8,80(a1) - ld s9, 88(a1) - 802000a8: 0585bc83 ld s9,88(a1) - ld s10, 96(a1) - 802000ac: 0605bd03 ld s10,96(a1) - ld s11, 104(a1) - 802000b0: 0685bd83 ld s11,104(a1) - - ret - 802000b4: 8082 ret - ... - -0000000080201000 : -.global uservec -.global userret -.align 12 - -kernelvec: - addi sp, sp, -288 - 80201000: 712d addi sp,sp,-288 - - sd ra, 40(sp) - 80201002: f406 sd ra,40(sp) - sd sp, 48(sp) - 80201004: f80a sd sp,48(sp) - sd gp, 56(sp) - 80201006: fc0e sd gp,56(sp) - sd tp, 64(sp) - 80201008: e092 sd tp,64(sp) - sd t0, 72(sp) - 8020100a: e496 sd t0,72(sp) - sd t1, 80(sp) - 8020100c: e89a sd t1,80(sp) - sd t2, 88(sp) - 8020100e: ec9e sd t2,88(sp) - sd s0, 96(sp) - 80201010: f0a2 sd s0,96(sp) - sd s1, 104(sp) - 80201012: f4a6 sd s1,104(sp) - sd a0, 112(sp) - 80201014: f8aa sd a0,112(sp) - sd a1, 120(sp) - 80201016: fcae sd a1,120(sp) - sd a2, 128(sp) - 80201018: e132 sd a2,128(sp) - sd a3, 136(sp) - 8020101a: e536 sd a3,136(sp) - sd a4, 144(sp) - 8020101c: e93a sd a4,144(sp) - sd a5, 152(sp) - 8020101e: ed3e sd a5,152(sp) - sd a6, 160(sp) - 80201020: f142 sd a6,160(sp) - sd a7, 168(sp) - 80201022: f546 sd a7,168(sp) - sd s2, 176(sp) - 80201024: f94a sd s2,176(sp) - sd s3, 184(sp) - 80201026: fd4e sd s3,184(sp) - sd s4, 192(sp) - 80201028: e1d2 sd s4,192(sp) - sd s5, 200(sp) - 8020102a: e5d6 sd s5,200(sp) - sd s6, 208(sp) - 8020102c: e9da sd s6,208(sp) - sd s7, 216(sp) - 8020102e: edde sd s7,216(sp) - sd s8, 224(sp) - 80201030: f1e2 sd s8,224(sp) - sd s9, 232(sp) - 80201032: f5e6 sd s9,232(sp) - sd s10, 240(sp) - 80201034: f9ea sd s10,240(sp) - sd s11, 248(sp) - 80201036: fdee sd s11,248(sp) - sd t3, 256(sp) - 80201038: e272 sd t3,256(sp) - sd t4, 264(sp) - 8020103a: e676 sd t4,264(sp) - sd t5, 272(sp) - 8020103c: ea7a sd t5,272(sp) - sd t6, 280(sp) - 8020103e: ee7e sd t6,280(sp) - - csrr t0, sepc - 80201040: 141022f3 csrr t0,sepc - csrr t1, sstatus - 80201044: 10002373 csrr t1,sstatus - sd t0, 24(sp) # Trapframe.epc - 80201048: ec16 sd t0,24(sp) - sd t1, 32(sp) # Trapframe.kernel_hartid - 8020104a: f01a sd t1,32(sp) - - mv a0, sp - 8020104c: 850a mv a0,sp - call kerneltrap - 8020104e: 1cf070ef jal 80208a1c - - ld t0, 24(sp) - 80201052: 62e2 ld t0,24(sp) - ld t1, 32(sp) - 80201054: 7302 ld t1,32(sp) - csrw sepc, t0 - 80201056: 14129073 csrw sepc,t0 - csrw sstatus, t1 - 8020105a: 10031073 csrw sstatus,t1 - - ld ra, 40(sp) - 8020105e: 70a2 ld ra,40(sp) - ld gp, 56(sp) - 80201060: 71e2 ld gp,56(sp) - ld tp, 64(sp) - 80201062: 6206 ld tp,64(sp) - ld t0, 72(sp) - 80201064: 62a6 ld t0,72(sp) - ld t1, 80(sp) - 80201066: 6346 ld t1,80(sp) - ld t2, 88(sp) - 80201068: 63e6 ld t2,88(sp) - ld s0, 96(sp) - 8020106a: 7406 ld s0,96(sp) - ld s1, 104(sp) - 8020106c: 74a6 ld s1,104(sp) - ld a0, 112(sp) - 8020106e: 7546 ld a0,112(sp) - ld a1, 120(sp) - 80201070: 75e6 ld a1,120(sp) - ld a2, 128(sp) - 80201072: 660a ld a2,128(sp) - ld a3, 136(sp) - 80201074: 66aa ld a3,136(sp) - ld a4, 144(sp) - 80201076: 674a ld a4,144(sp) - ld a5, 152(sp) - 80201078: 67ea ld a5,152(sp) - ld a6, 160(sp) - 8020107a: 780a ld a6,160(sp) - ld a7, 168(sp) - 8020107c: 78aa ld a7,168(sp) - ld s2, 176(sp) - 8020107e: 794a ld s2,176(sp) - ld s3, 184(sp) - 80201080: 79ea ld s3,184(sp) - ld s4, 192(sp) - 80201082: 6a0e ld s4,192(sp) - ld s5, 200(sp) - 80201084: 6aae ld s5,200(sp) - ld s6, 208(sp) - 80201086: 6b4e ld s6,208(sp) - ld s7, 216(sp) - 80201088: 6bee ld s7,216(sp) - ld s8, 224(sp) - 8020108a: 7c0e ld s8,224(sp) - ld s9, 232(sp) - 8020108c: 7cae ld s9,232(sp) - ld s10, 240(sp) - 8020108e: 7d4e ld s10,240(sp) - ld s11, 248(sp) - 80201090: 7dee ld s11,248(sp) - ld t3, 256(sp) - 80201092: 6e12 ld t3,256(sp) - ld t4, 264(sp) - 80201094: 6eb2 ld t4,264(sp) - ld t5, 272(sp) - 80201096: 6f52 ld t5,272(sp) - ld t6, 280(sp) - 80201098: 6ff2 ld t6,280(sp) - - addi sp, sp, 288 - 8020109a: 6115 addi sp,sp,288 - 8020109c: 10200073 sret - ... - -0000000080202000 : -.align 12 -trampoline: -.align 4 -uservec: - - csrrw a0, sscratch, a0 - 80202000: 14051573 csrrw a0,sscratch,a0 - - sd ra, 40(a0) - 80202004: 02153423 sd ra,40(a0) - sd sp, 48(a0) - 80202008: 02253823 sd sp,48(a0) - sd gp, 56(a0) - 8020200c: 02353c23 sd gp,56(a0) - sd tp, 64(a0) - 80202010: 04453023 sd tp,64(a0) - sd t0, 72(a0) - 80202014: 04553423 sd t0,72(a0) - sd t1, 80(a0) - 80202018: 04653823 sd t1,80(a0) - sd t2, 88(a0) - 8020201c: 04753c23 sd t2,88(a0) - sd s0, 96(a0) - 80202020: f120 sd s0,96(a0) - sd s1, 104(a0) - 80202022: f524 sd s1,104(a0) - sd a1, 120(a0) - 80202024: fd2c sd a1,120(a0) - sd a2, 128(a0) - 80202026: e150 sd a2,128(a0) - sd a3, 136(a0) - 80202028: e554 sd a3,136(a0) - sd a4, 144(a0) - 8020202a: e958 sd a4,144(a0) - sd a5, 152(a0) - 8020202c: ed5c sd a5,152(a0) - sd a6, 160(a0) - 8020202e: 0b053023 sd a6,160(a0) - sd a7, 168(a0) - 80202032: 0b153423 sd a7,168(a0) - sd s2, 176(a0) - 80202036: 0b253823 sd s2,176(a0) - sd s3, 184(a0) - 8020203a: 0b353c23 sd s3,184(a0) - sd s4, 192(a0) - 8020203e: 0d453023 sd s4,192(a0) - sd s5, 200(a0) - 80202042: 0d553423 sd s5,200(a0) - sd s6, 208(a0) - 80202046: 0d653823 sd s6,208(a0) - sd s7, 216(a0) - 8020204a: 0d753c23 sd s7,216(a0) - sd s8, 224(a0) - 8020204e: 0f853023 sd s8,224(a0) - sd s9, 232(a0) - 80202052: 0f953423 sd s9,232(a0) - sd s10, 240(a0) - 80202056: 0fa53823 sd s10,240(a0) - sd s11, 248(a0) - 8020205a: 0fb53c23 sd s11,248(a0) - sd t3, 256(a0) - 8020205e: 11c53023 sd t3,256(a0) - sd t4, 264(a0) - 80202062: 11d53423 sd t4,264(a0) - sd t5, 272(a0) - 80202066: 11e53823 sd t5,272(a0) - sd t6, 280(a0) - 8020206a: 11f53c23 sd t6,280(a0) - - csrr t0, sscratch - 8020206e: 140022f3 csrr t0,sscratch - sd t0, 112(a0) - 80202072: 06553823 sd t0,112(a0) - - ld sp, 8(a0) - 80202076: 00853103 ld sp,8(a0) - ld tp, 32(a0) - 8020207a: 02053203 ld tp,32(a0) - ld t0, 16(a0) - 8020207e: 01053283 ld t0,16(a0) - ld t1, 0(a0) - 80202082: 00053303 ld t1,0(a0) - - csrw satp, t1 - 80202086: 18031073 csrw satp,t1 - sfence.vma zero, zero - 8020208a: 12000073 sfence.vma - - jr t0 - 8020208e: 8282 jr t0 - -0000000080202090 : - -.align 4 -userret: - - csrw satp, a1 - 80202090: 18059073 csrw satp,a1 - sfence.vma zero, zero - 80202094: 12000073 sfence.vma - - csrw sscratch, a0 - 80202098: 14051073 csrw sscratch,a0 - - ld ra, 40(a0) - 8020209c: 02853083 ld ra,40(a0) - ld sp, 48(a0) - 802020a0: 03053103 ld sp,48(a0) - ld gp, 56(a0) - 802020a4: 03853183 ld gp,56(a0) - ld tp, 64(a0) - 802020a8: 04053203 ld tp,64(a0) - ld t0, 72(a0) - 802020ac: 04853283 ld t0,72(a0) - ld t1, 80(a0) - 802020b0: 05053303 ld t1,80(a0) - ld t2, 88(a0) - 802020b4: 05853383 ld t2,88(a0) - ld s0, 96(a0) - 802020b8: 7120 ld s0,96(a0) - ld s1, 104(a0) - 802020ba: 7524 ld s1,104(a0) - ld a1, 120(a0) - 802020bc: 7d2c ld a1,120(a0) - ld a2, 128(a0) - 802020be: 6150 ld a2,128(a0) - ld a3, 136(a0) - 802020c0: 6554 ld a3,136(a0) - ld a4, 144(a0) - 802020c2: 6958 ld a4,144(a0) - ld a5, 152(a0) - 802020c4: 6d5c ld a5,152(a0) - ld a6, 160(a0) - 802020c6: 0a053803 ld a6,160(a0) - ld a7, 168(a0) - 802020ca: 0a853883 ld a7,168(a0) - ld s2, 176(a0) - 802020ce: 0b053903 ld s2,176(a0) - ld s3, 184(a0) - 802020d2: 0b853983 ld s3,184(a0) - ld s4, 192(a0) - 802020d6: 0c053a03 ld s4,192(a0) - ld s5, 200(a0) - 802020da: 0c853a83 ld s5,200(a0) - ld s6, 208(a0) - 802020de: 0d053b03 ld s6,208(a0) - ld s7, 216(a0) - 802020e2: 0d853b83 ld s7,216(a0) - ld s8, 224(a0) - 802020e6: 0e053c03 ld s8,224(a0) - ld s9, 232(a0) - 802020ea: 0e853c83 ld s9,232(a0) - ld s10, 240(a0) - 802020ee: 0f053d03 ld s10,240(a0) - ld s11, 248(a0) - 802020f2: 0f853d83 ld s11,248(a0) - ld t3, 256(a0) - 802020f6: 10053e03 ld t3,256(a0) - ld t4, 264(a0) - 802020fa: 10853e83 ld t4,264(a0) - ld t5, 272(a0) - 802020fe: 11053f03 ld t5,272(a0) - ld t6, 280(a0) - 80202102: 11853f83 ld t6,280(a0) - - ld a0, 112(a0) - 80202106: 7928 ld a0,112(a0) - - 80202108: 10200073 sret - ... - -0000000080202fe6 <_ZN4Pipe5closeEb>: - - return 0; -} - -void Pipe::close(bool is_writer) -{ - 80202fe6: 1101 addi sp,sp,-32 - 80202fe8: e426 sd s1,8(sp) - 80202fea: 84ae mv s1,a1 - 80202fec: e822 sd s0,16(sp) - 80202fee: ec06 sd ra,24(sp) - 80202ff0: 842a mv s0,a0 - lock.acquire(); - 80202ff2: 38f020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (is_writer) - 80202ff6: cc8d beqz s1,80203030 <_ZN4Pipe5closeEb+0x4a> - { - write_open = false; - 80202ff8: 220400a3 sb zero,545(s0) - ProcManager::wakeup(&nread); // Wake up the process that is currently reading - 80202ffc: 21840513 addi a0,s0,536 - 80203000: 04a050ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - { - read_open = false; - ProcManager::wakeup(&nwrite); // Wake up the process that is writing - } - - bool empty = !read_open && !write_open; - 80203004: 22044783 lbu a5,544(s0) - lock.release(); - 80203008: 8522 mv a0,s0 - bool empty = !read_open && !write_open; - 8020300a: ef89 bnez a5,80203024 <_ZN4Pipe5closeEb+0x3e> - 8020300c: 22144783 lbu a5,545(s0) - 80203010: eb91 bnez a5,80203024 <_ZN4Pipe5closeEb+0x3e> - lock.release(); - 80203012: 307020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - if (empty) - { - this->~Pipe(); - Slab::kfree(this); - 80203016: 8522 mv a0,s0 - } -} - 80203018: 6442 ld s0,16(sp) - 8020301a: 60e2 ld ra,24(sp) - 8020301c: 64a2 ld s1,8(sp) - 8020301e: 6105 addi sp,sp,32 - Slab::kfree(this); - 80203020: 3190306f j 80206b38 <_ZN4Slab5kfreeEPv> -} - 80203024: 6442 ld s0,16(sp) - 80203026: 60e2 ld ra,24(sp) - 80203028: 64a2 ld s1,8(sp) - 8020302a: 6105 addi sp,sp,32 - lock.release(); - 8020302c: 2ed0206f j 80205b18 <_ZN8Spinlock7releaseEv> - read_open = false; - 80203030: 22040023 sb zero,544(s0) - ProcManager::wakeup(&nwrite); // Wake up the process that is writing - 80203034: 21c40513 addi a0,s0,540 - 80203038: 012050ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - 8020303c: b7e1 j 80203004 <_ZN4Pipe5closeEb+0x1e> - -000000008020303e <_ZN4Pipe5writeEyi>: - -int Pipe::write(uint64_t addr, int n) -{ - 8020303e: 711d addi sp,sp,-96 - 80203040: e8a2 sd s0,80(sp) - 80203042: e4a6 sd s1,72(sp) - 80203044: e0ca sd s2,64(sp) - 80203046: fc4e sd s3,56(sp) - 80203048: ec86 sd ra,88(sp) - 8020304a: ec5e sd s7,24(sp) - 8020304c: 842a mv s0,a0 - 8020304e: 8932 mv s2,a2 - 80203050: 89ae mv s3,a1 - int i = 0; - struct Proc *p = myproc(); - 80203052: 231020ef jal 80205a82 <_Z6myprocv> - 80203056: 84aa mv s1,a0 - - lock.acquire(); - 80203058: 8522 mv a0,s0 - 8020305a: 327020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (i < n) - 8020305e: 0b205863 blez s2,8020310e <_ZN4Pipe5writeEyi+0xd0> - 80203062: f852 sd s4,48(sp) - 80203064: f456 sd s5,40(sp) - 80203066: f05a sd s6,32(sp) - int i = 0; - 80203068: 4b81 li s7,0 - ProcManager::sleep(&nwrite, &lock); - } - else - { - char ch; - if (VM::copyin(p->pagetable, &ch, addr + i, 1) < 0) - 8020306a: 00f10a13 addi s4,sp,15 - ProcManager::wakeup(&nread); - 8020306e: 21840b13 addi s6,s0,536 - ProcManager::sleep(&nwrite, &lock); - 80203072: 21c40a93 addi s5,s0,540 - if (!read_open || p->xstate) // The read end is closed or the process is abnormal - 80203076: 22044783 lbu a5,544(s0) - if (VM::copyin(p->pagetable, &ch, addr + i, 1) < 0) - 8020307a: 4685 li a3,1 - 8020307c: 013b8633 add a2,s7,s3 - 80203080: 85d2 mv a1,s4 - if (!read_open || p->xstate) // The read end is closed or the process is abnormal - 80203082: c7b5 beqz a5,802030ee <_ZN4Pipe5writeEyi+0xb0> - 80203084: 0b84a783 lw a5,184(s1) - 80203088: e3bd bnez a5,802030ee <_ZN4Pipe5writeEyi+0xb0> - if (nwrite == nread + SIZE) // buffer is full - 8020308a: 21842783 lw a5,536(s0) - 8020308e: 21c42703 lw a4,540(s0) - 80203092: 2007879b addiw a5,a5,512 - 80203096: 04f70263 beq a4,a5,802030da <_ZN4Pipe5writeEyi+0x9c> - if (VM::copyin(p->pagetable, &ch, addr + i, 1) < 0) - 8020309a: 7ca8 ld a0,120(s1) - 8020309c: 3e4030ef jal 80206480 <_ZN2VM6copyinEPyPcyy> - 802030a0: 02054263 bltz a0,802030c4 <_ZN4Pipe5writeEyi+0x86> - break; - data[nwrite++ % SIZE] = ch; - 802030a4: 21c42783 lw a5,540(s0) - 802030a8: 00f14703 lbu a4,15(sp) - i++; - 802030ac: 2b85 addiw s7,s7,1 - data[nwrite++ % SIZE] = ch; - 802030ae: 0017869b addiw a3,a5,1 - 802030b2: 1ff7f793 andi a5,a5,511 - 802030b6: 20d42e23 sw a3,540(s0) - 802030ba: 97a2 add a5,a5,s0 - 802030bc: 00e78c23 sb a4,24(a5) - while (i < n) - 802030c0: fb2bcbe3 blt s7,s2,80203076 <_ZN4Pipe5writeEyi+0x38> - 802030c4: 7a42 ld s4,48(sp) - 802030c6: 7aa2 ld s5,40(sp) - 802030c8: 7b02 ld s6,32(sp) - } - } - ProcManager::wakeup(&nread); - 802030ca: 21840513 addi a0,s0,536 - 802030ce: 77d040ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - lock.release(); - 802030d2: 8522 mv a0,s0 - 802030d4: 245020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return i; - 802030d8: a015 j 802030fc <_ZN4Pipe5writeEyi+0xbe> - ProcManager::wakeup(&nread); - 802030da: 855a mv a0,s6 - 802030dc: 76f040ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - ProcManager::sleep(&nwrite, &lock); - 802030e0: 85a2 mv a1,s0 - 802030e2: 8556 mv a0,s5 - 802030e4: 663040ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (i < n) - 802030e8: f92bc7e3 blt s7,s2,80203076 <_ZN4Pipe5writeEyi+0x38> - 802030ec: bfe1 j 802030c4 <_ZN4Pipe5writeEyi+0x86> - lock.release(); - 802030ee: 8522 mv a0,s0 - 802030f0: 229020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return -1; - 802030f4: 7a42 ld s4,48(sp) - 802030f6: 7aa2 ld s5,40(sp) - 802030f8: 7b02 ld s6,32(sp) - 802030fa: 5bfd li s7,-1 -} - 802030fc: 60e6 ld ra,88(sp) - 802030fe: 6446 ld s0,80(sp) - 80203100: 64a6 ld s1,72(sp) - 80203102: 6906 ld s2,64(sp) - 80203104: 79e2 ld s3,56(sp) - 80203106: 855e mv a0,s7 - 80203108: 6be2 ld s7,24(sp) - 8020310a: 6125 addi sp,sp,96 - 8020310c: 8082 ret - int i = 0; - 8020310e: 4b81 li s7,0 - 80203110: bf6d j 802030ca <_ZN4Pipe5writeEyi+0x8c> - -0000000080203112 <_ZN4Pipe4readEyi>: - -int Pipe::read(uint64_t addr, int n) -{ - 80203112: 715d addi sp,sp,-80 - 80203114: e486 sd ra,72(sp) - 80203116: e0a2 sd s0,64(sp) - 80203118: fc26 sd s1,56(sp) - 8020311a: 842a mv s0,a0 - 8020311c: f84a sd s2,48(sp) - 8020311e: f44e sd s3,40(sp) - 80203120: f052 sd s4,32(sp) - 80203122: 84ae mv s1,a1 - 80203124: 8a32 mv s4,a2 - int i = 0; - struct Proc *p = myproc(); - 80203126: 15d020ef jal 80205a82 <_Z6myprocv> - 8020312a: 89aa mv s3,a0 - - lock.acquire(); - 8020312c: 8522 mv a0,s0 - 8020312e: 253020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (nread == nwrite && write_open) // The buffer is empty and the write end is not closed - 80203132: 21842783 lw a5,536(s0) - 80203136: 21c42703 lw a4,540(s0) - 8020313a: 21840913 addi s2,s0,536 - 8020313e: 00e78e63 beq a5,a4,8020315a <_ZN4Pipe4readEyi+0x48> - 80203142: a00d j 80203164 <_ZN4Pipe4readEyi+0x52> - { - if (p->xstate) - 80203144: 0b89a783 lw a5,184(s3) - 80203148: e7c9 bnez a5,802031d2 <_ZN4Pipe4readEyi+0xc0> - { - lock.release(); - return -1; - } - ProcManager::sleep(&nread, &lock); - 8020314a: 5fd040ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (nread == nwrite && write_open) // The buffer is empty and the write end is not closed - 8020314e: 21842783 lw a5,536(s0) - 80203152: 21c42703 lw a4,540(s0) - 80203156: 00e79763 bne a5,a4,80203164 <_ZN4Pipe4readEyi+0x52> - 8020315a: 22144683 lbu a3,545(s0) - ProcManager::sleep(&nread, &lock); - 8020315e: 85a2 mv a1,s0 - 80203160: 854a mv a0,s2 - while (nread == nwrite && write_open) // The buffer is empty and the write end is not closed - 80203162: f2ed bnez a3,80203144 <_ZN4Pipe4readEyi+0x32> - 80203164: ec56 sd s5,24(sp) - } - - for (i = 0; i < n; ++i) - 80203166: 4901 li s2,0 - { - if (nread == nwrite) - break; - char ch = data[nread++ % SIZE]; - if (VM::copyout(p->pagetable, addr + i, &ch, 1) < 0) - 80203168: 00f10a93 addi s5,sp,15 - for (i = 0; i < n; ++i) - 8020316c: 03404763 bgtz s4,8020319a <_ZN4Pipe4readEyi+0x88> - 80203170: a081 j 802031b0 <_ZN4Pipe4readEyi+0x9e> - char ch = data[nread++ % SIZE]; - 80203172: 20a42c23 sw a0,536(s0) - 80203176: 01884783 lbu a5,24(a6) - if (VM::copyout(p->pagetable, addr + i, &ch, 1) < 0) - 8020317a: 0789b503 ld a0,120(s3) - char ch = data[nread++ % SIZE]; - 8020317e: 00f107a3 sb a5,15(sp) - if (VM::copyout(p->pagetable, addr + i, &ch, 1) < 0) - 80203182: 520030ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 80203186: 02054563 bltz a0,802031b0 <_ZN4Pipe4readEyi+0x9e> - for (i = 0; i < n; ++i) - 8020318a: 2905 addiw s2,s2,1 - 8020318c: 0485 addi s1,s1,1 - 8020318e: 032a0163 beq s4,s2,802031b0 <_ZN4Pipe4readEyi+0x9e> - 80203192: 21842783 lw a5,536(s0) - 80203196: 21c42703 lw a4,540(s0) - char ch = data[nread++ % SIZE]; - 8020319a: 1ff7f693 andi a3,a5,511 - 8020319e: 00d40833 add a6,s0,a3 - 802031a2: 0017851b addiw a0,a5,1 - if (VM::copyout(p->pagetable, addr + i, &ch, 1) < 0) - 802031a6: 4685 li a3,1 - 802031a8: 8656 mv a2,s5 - 802031aa: 85a6 mv a1,s1 - if (nread == nwrite) - 802031ac: fcf713e3 bne a4,a5,80203172 <_ZN4Pipe4readEyi+0x60> - break; - } - ProcManager::wakeup(&nwrite); - 802031b0: 21c40513 addi a0,s0,540 - 802031b4: 697040ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - lock.release(); - 802031b8: 8522 mv a0,s0 - 802031ba: 15f020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - 802031be: 6ae2 ld s5,24(sp) - return i; -} - 802031c0: 60a6 ld ra,72(sp) - 802031c2: 6406 ld s0,64(sp) - 802031c4: 74e2 ld s1,56(sp) - 802031c6: 79a2 ld s3,40(sp) - 802031c8: 7a02 ld s4,32(sp) - 802031ca: 854a mv a0,s2 - 802031cc: 7942 ld s2,48(sp) - 802031ce: 6161 addi sp,sp,80 - 802031d0: 8082 ret - lock.release(); - 802031d2: 8522 mv a0,s0 - 802031d4: 145020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return -1; - 802031d8: 597d li s2,-1 - 802031da: b7dd j 802031c0 <_ZN4Pipe4readEyi+0xae> - -00000000802031dc <_ZN9FileTable4initEv>: - struct file files[NFILE]; - } ftable; - - void init() - { - ftable.lock.init("file_table"); - 802031dc: 0000e597 auipc a1,0xe - 802031e0: 56c58593 addi a1,a1,1388 # 80211748 - 802031e4: 0001a517 auipc a0,0x1a - 802031e8: a2450513 addi a0,a0,-1500 # 8021cc08 <_ZN9FileTable6ftableE> - 802031ec: 7ee0206f j 802059da <_ZN8Spinlock4initEPKc> - -00000000802031f0 <_ZN9FileTable5allocEv>: - } - - struct file *alloc() - { - 802031f0: 1141 addi sp,sp,-16 - struct file *f; - ftable.lock.acquire(); - 802031f2: 0001a517 auipc a0,0x1a - 802031f6: a1650513 addi a0,a0,-1514 # 8021cc08 <_ZN9FileTable6ftableE> - { - 802031fa: e022 sd s0,0(sp) - 802031fc: e406 sd ra,8(sp) - ftable.lock.acquire(); - 802031fe: 183020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (f = ftable.files; f < ftable.files + NFILE; f++) - 80203202: 0001a417 auipc s0,0x1a - 80203206: a1e40413 addi s0,s0,-1506 # 8021cc20 <_ZN9FileTable6ftableE+0x18> - 8020320a: 0001b717 auipc a4,0x1b - 8020320e: 9b670713 addi a4,a4,-1610 # 8021dbc0 <_ZZ10fat32_testvE6inited> - 80203212: a029 j 8020321c <_ZN9FileTable5allocEv+0x2c> - 80203214: 02840413 addi s0,s0,40 - 80203218: 02e40163 beq s0,a4,8020323a <_ZN9FileTable5allocEv+0x4a> - { - if (f->ref == 0) - 8020321c: 405c lw a5,4(s0) - 8020321e: fbfd bnez a5,80203214 <_ZN9FileTable5allocEv+0x24> - { - f->ref = 1; - 80203220: 4785 li a5,1 - 80203222: c05c sw a5,4(s0) - ftable.lock.release(); - 80203224: 0001a517 auipc a0,0x1a - 80203228: 9e450513 addi a0,a0,-1564 # 8021cc08 <_ZN9FileTable6ftableE> - 8020322c: 0ed020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return f; - } - } - ftable.lock.release(); - return nullptr; - } - 80203230: 60a2 ld ra,8(sp) - 80203232: 8522 mv a0,s0 - 80203234: 6402 ld s0,0(sp) - 80203236: 0141 addi sp,sp,16 - 80203238: 8082 ret - ftable.lock.release(); - 8020323a: 0001a517 auipc a0,0x1a - 8020323e: 9ce50513 addi a0,a0,-1586 # 8021cc08 <_ZN9FileTable6ftableE> - 80203242: 0d7020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return nullptr; - 80203246: 4401 li s0,0 - } - 80203248: 60a2 ld ra,8(sp) - 8020324a: 8522 mv a0,s0 - 8020324c: 6402 ld s0,0(sp) - 8020324e: 0141 addi sp,sp,16 - 80203250: 8082 ret - -0000000080203252 <_ZN9FileTable3dupEP4file>: - - struct file *dup(struct file *f) - { - 80203252: 1141 addi sp,sp,-16 - 80203254: e022 sd s0,0(sp) - 80203256: 842a mv s0,a0 - ftable.lock.acquire(); - 80203258: 0001a517 auipc a0,0x1a - 8020325c: 9b050513 addi a0,a0,-1616 # 8021cc08 <_ZN9FileTable6ftableE> - { - 80203260: e406 sd ra,8(sp) - ftable.lock.acquire(); - 80203262: 11f020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (f->ref < 1) - 80203266: 405c lw a5,4(s0) - 80203268: 00f05f63 blez a5,80203286 <_ZN9FileTable3dupEP4file+0x34> - { - Drivers::uart_puts("panic: file dup\n"); - while (1) - ; - } - f->ref++; - 8020326c: 2785 addiw a5,a5,1 - 8020326e: c05c sw a5,4(s0) - ftable.lock.release(); - 80203270: 0001a517 auipc a0,0x1a - 80203274: 99850513 addi a0,a0,-1640 # 8021cc08 <_ZN9FileTable6ftableE> - 80203278: 0a1020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return f; - } - 8020327c: 60a2 ld ra,8(sp) - 8020327e: 8522 mv a0,s0 - 80203280: 6402 ld s0,0(sp) - 80203282: 0141 addi sp,sp,16 - 80203284: 8082 ret - Drivers::uart_puts("panic: file dup\n"); - 80203286: 0000e517 auipc a0,0xe - 8020328a: 4d250513 addi a0,a0,1234 # 80211758 - 8020328e: 2dd050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80203292: a001 j 80203292 <_ZN9FileTable3dupEP4file+0x40> - -0000000080203294 <_ZN9FileTable5closeEP4file>: - - void close(struct file *f) - { - 80203294: 7179 addi sp,sp,-48 - 80203296: f022 sd s0,32(sp) - 80203298: 842a mv s0,a0 - struct file ff; - - ftable.lock.acquire(); - 8020329a: 0001a517 auipc a0,0x1a - 8020329e: 96e50513 addi a0,a0,-1682 # 8021cc08 <_ZN9FileTable6ftableE> - { - 802032a2: f406 sd ra,40(sp) - ftable.lock.acquire(); - 802032a4: 0dd020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if(f->ref < 1) - 802032a8: 405c lw a5,4(s0) - 802032aa: 04f05d63 blez a5,80203304 <_ZN9FileTable5closeEP4file+0x70> - { - Drivers::uart_puts("panic: file close\n"); - while (1) - ; - } - f->ref--; - 802032ae: fff7871b addiw a4,a5,-1 - 802032b2: c058 sw a4,4(s0) - if (f->ref > 0) - 802032b4: ef1d bnez a4,802032f2 <_ZN9FileTable5closeEP4file+0x5e> - 802032b6: ec26 sd s1,24(sp) - 802032b8: e84a sd s2,16(sp) - 802032ba: e44e sd s3,8(sp) - { - ftable.lock.release(); - return; - } - - ff = *f; - 802032bc: 4004 lw s1,0(s0) - f->ref = 0; - f->type = FD_NONE; - ftable.lock.release(); - 802032be: 0001a517 auipc a0,0x1a - 802032c2: 94a50513 addi a0,a0,-1718 # 8021cc08 <_ZN9FileTable6ftableE> - f->type = FD_NONE; - 802032c6: 00042023 sw zero,0(s0) - ff = *f; - 802032ca: 00944983 lbu s3,9(s0) - 802032ce: 01043903 ld s2,16(s0) - 802032d2: 6c00 ld s0,24(s0) - ftable.lock.release(); - 802032d4: 045020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - if (ff.type == FD_INODE) - 802032d8: 4785 li a5,1 - 802032da: 04f48963 beq s1,a5,8020332c <_ZN9FileTable5closeEP4file+0x98> - { - // Release the corresponding Inode - VFS::iput(ff.ip); - } - else if (ff.type == FD_PIPE) - 802032de: 478d li a5,3 - 802032e0: 02f48963 beq s1,a5,80203312 <_ZN9FileTable5closeEP4file+0x7e> - { - if (ff.pipe) - ff.pipe->close(ff.writable); - } - } - 802032e4: 70a2 ld ra,40(sp) - 802032e6: 7402 ld s0,32(sp) - 802032e8: 64e2 ld s1,24(sp) - 802032ea: 6942 ld s2,16(sp) - 802032ec: 69a2 ld s3,8(sp) - 802032ee: 6145 addi sp,sp,48 - 802032f0: 8082 ret - 802032f2: 7402 ld s0,32(sp) - 802032f4: 70a2 ld ra,40(sp) - ftable.lock.release(); - 802032f6: 0001a517 auipc a0,0x1a - 802032fa: 91250513 addi a0,a0,-1774 # 8021cc08 <_ZN9FileTable6ftableE> - } - 802032fe: 6145 addi sp,sp,48 - ftable.lock.release(); - 80203300: 0190206f j 80205b18 <_ZN8Spinlock7releaseEv> - Drivers::uart_puts("panic: file close\n"); - 80203304: 0000e517 auipc a0,0xe - 80203308: 46c50513 addi a0,a0,1132 # 80211770 - 8020330c: 25f050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80203310: a001 j 80203310 <_ZN9FileTable5closeEP4file+0x7c> - if (ff.pipe) - 80203312: fc0909e3 beqz s2,802032e4 <_ZN9FileTable5closeEP4file+0x50> - } - 80203316: 7402 ld s0,32(sp) - ff.pipe->close(ff.writable); - 80203318: 64e2 ld s1,24(sp) - } - 8020331a: 70a2 ld ra,40(sp) - ff.pipe->close(ff.writable); - 8020331c: 013035b3 snez a1,s3 - 80203320: 854a mv a0,s2 - 80203322: 69a2 ld s3,8(sp) - 80203324: 6942 ld s2,16(sp) - } - 80203326: 6145 addi sp,sp,48 - ff.pipe->close(ff.writable); - 80203328: cbfff06f j 80202fe6 <_ZN4Pipe5closeEb> - VFS::iput(ff.ip); - 8020332c: 8522 mv a0,s0 - } - 8020332e: 7402 ld s0,32(sp) - VFS::iput(ff.ip); - 80203330: 64e2 ld s1,24(sp) - 80203332: 6942 ld s2,16(sp) - 80203334: 69a2 ld s3,8(sp) - } - 80203336: 70a2 ld ra,40(sp) - 80203338: 6145 addi sp,sp,48 - VFS::iput(ff.ip); - 8020333a: 6a20106f j 802049dc <_ZN3VFS4iputEP5Inode> - -000000008020333e <_ZN4Pipe11create_pairEPP4fileS2_>: -{ - 8020333e: 7139 addi sp,sp,-64 - 80203340: ec4e sd s3,24(sp) - 80203342: 89aa mv s3,a0 - void *mem = Slab::kmalloc(sizeof(Pipe)); - 80203344: 22800513 li a0,552 -{ - 80203348: e852 sd s4,16(sp) - 8020334a: fc06 sd ra,56(sp) - 8020334c: f426 sd s1,40(sp) - 8020334e: 8a2e mv s4,a1 - void *mem = Slab::kmalloc(sizeof(Pipe)); - 80203350: 618030ef jal 80206968 <_ZN4Slab7kmallocEy> - if (!mem) - 80203354: 12050663 beqz a0,80203480 <_ZN4Pipe11create_pairEPP4fileS2_+0x142> - 80203358: 85aa mv a1,a0 - Pipe *pi = new (mem) Pipe(); - 8020335a: 22800513 li a0,552 - 8020335e: f822 sd s0,48(sp) - 80203360: f04a sd s2,32(sp) - 80203362: 5b8020ef jal 8020591a <_ZnwmPv> - volatile uint32 locked; // Whether it is locked (0: unlocked, 1: locked) - const char *name; // Lock Name (for debugging) - struct cpu *cpu; // The CPU holding the lock - - // Constructor - Spinlock() : locked(0), name("uninit"), cpu(nullptr) {} - 80203366: 0000e797 auipc a5,0xe - 8020336a: 42278793 addi a5,a5,1058 # 80211788 - 8020336e: e51c sd a5,8(a0) -class Pipe -{ -public: - static constexpr uint32_t SIZE = 512; - - Pipe() : nread(0), nwrite(0), read_open(true), write_open(true) - 80203370: 10100793 li a5,257 - 80203374: 22f51023 sh a5,544(a0) - 80203378: 00052023 sw zero,0(a0) - 8020337c: 00053823 sd zero,16(a0) - 80203380: 20053c23 sd zero,536(a0) - { - lock.init("pipe"); - 80203384: 0000e597 auipc a1,0xe - 80203388: 40c58593 addi a1,a1,1036 # 80211790 - 8020338c: 892a mv s2,a0 - 8020338e: 64c020ef jal 802059da <_ZN8Spinlock4initEPKc> - ftable.lock.acquire(); - 80203392: 0001a517 auipc a0,0x1a - 80203396: 87650513 addi a0,a0,-1930 # 8021cc08 <_ZN9FileTable6ftableE> - 8020339a: 7e6020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (f = ftable.files; f < ftable.files + NFILE; f++) - 8020339e: 0001a417 auipc s0,0x1a - 802033a2: 88240413 addi s0,s0,-1918 # 8021cc20 <_ZN9FileTable6ftableE+0x18> - 802033a6: 0001b717 auipc a4,0x1b - 802033aa: 81a70713 addi a4,a4,-2022 # 8021dbc0 <_ZZ10fat32_testvE6inited> - 802033ae: a029 j 802033b8 <_ZN4Pipe11create_pairEPP4fileS2_+0x7a> - 802033b0: 02840413 addi s0,s0,40 - 802033b4: 08e40963 beq s0,a4,80203446 <_ZN4Pipe11create_pairEPP4fileS2_+0x108> - if (f->ref == 0) - 802033b8: 405c lw a5,4(s0) - 802033ba: fbfd bnez a5,802033b0 <_ZN4Pipe11create_pairEPP4fileS2_+0x72> - f->ref = 1; - 802033bc: 4785 li a5,1 - 802033be: c05c sw a5,4(s0) - ftable.lock.release(); - 802033c0: 0001a517 auipc a0,0x1a - 802033c4: 84850513 addi a0,a0,-1976 # 8021cc08 <_ZN9FileTable6ftableE> - 802033c8: 750020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - *f0 = FileTable::alloc(); - 802033cc: 0089b023 sd s0,0(s3) - ftable.lock.acquire(); - 802033d0: 0001a517 auipc a0,0x1a - 802033d4: 83850513 addi a0,a0,-1992 # 8021cc08 <_ZN9FileTable6ftableE> - 802033d8: 7a8020ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (f = ftable.files; f < ftable.files + NFILE; f++) - 802033dc: 0001a417 auipc s0,0x1a - 802033e0: 84440413 addi s0,s0,-1980 # 8021cc20 <_ZN9FileTable6ftableE+0x18> - 802033e4: 0001a797 auipc a5,0x1a - 802033e8: 7dc78793 addi a5,a5,2012 # 8021dbc0 <_ZZ10fat32_testvE6inited> - 802033ec: a029 j 802033f6 <_ZN4Pipe11create_pairEPP4fileS2_+0xb8> - 802033ee: 02840413 addi s0,s0,40 - 802033f2: 06f40263 beq s0,a5,80203456 <_ZN4Pipe11create_pairEPP4fileS2_+0x118> - if (f->ref == 0) - 802033f6: 4044 lw s1,4(s0) - 802033f8: f8fd bnez s1,802033ee <_ZN4Pipe11create_pairEPP4fileS2_+0xb0> - 802033fa: e456 sd s5,8(sp) - f->ref = 1; - 802033fc: 4a85 li s5,1 - 802033fe: 01542223 sw s5,4(s0) - ftable.lock.release(); - 80203402: 0001a517 auipc a0,0x1a - 80203406: 80650513 addi a0,a0,-2042 # 8021cc08 <_ZN9FileTable6ftableE> - 8020340a: 70e020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - *f1 = FileTable::alloc(); - 8020340e: 008a3023 sd s0,0(s4) - if (*f0 == nullptr || *f1 == nullptr) - 80203412: 0009b783 ld a5,0(s3) - 80203416: c7bd beqz a5,80203484 <_ZN4Pipe11create_pairEPP4fileS2_+0x146> - (*f0)->type = FD_PIPE; - 80203418: 470d li a4,3 - (*f0)->readable = 1; - 8020341a: 01579423 sh s5,8(a5) - (*f0)->pipe = pi; - 8020341e: 0127b823 sd s2,16(a5) - (*f0)->type = FD_PIPE; - 80203422: c398 sw a4,0(a5) - (*f1)->readable = 0; - 80203424: 10000793 li a5,256 - 80203428: 00f41423 sh a5,8(s0) - (*f1)->pipe = pi; - 8020342c: 01243823 sd s2,16(s0) - (*f1)->type = FD_PIPE; - 80203430: c018 sw a4,0(s0) - (*f1)->pipe = pi; - 80203432: 7902 ld s2,32(sp) - 80203434: 7442 ld s0,48(sp) - 80203436: 6aa2 ld s5,8(sp) -} - 80203438: 70e2 ld ra,56(sp) - 8020343a: 69e2 ld s3,24(sp) - 8020343c: 6a42 ld s4,16(sp) - 8020343e: 8526 mv a0,s1 - 80203440: 74a2 ld s1,40(sp) - 80203442: 6121 addi sp,sp,64 - 80203444: 8082 ret - ftable.lock.release(); - 80203446: 00019517 auipc a0,0x19 - 8020344a: 7c250513 addi a0,a0,1986 # 8021cc08 <_ZN9FileTable6ftableE> - 8020344e: 6ca020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return nullptr; - 80203452: 4401 li s0,0 - 80203454: bfa5 j 802033cc <_ZN4Pipe11create_pairEPP4fileS2_+0x8e> - ftable.lock.release(); - 80203456: 00019517 auipc a0,0x19 - 8020345a: 7b250513 addi a0,a0,1970 # 8021cc08 <_ZN9FileTable6ftableE> - 8020345e: 6ba020ef jal 80205b18 <_ZN8Spinlock7releaseEv> - *f1 = FileTable::alloc(); - 80203462: 000a3023 sd zero,0(s4) - if (*f0 == nullptr || *f1 == nullptr) - 80203466: 0009b503 ld a0,0(s3) - 8020346a: c511 beqz a0,80203476 <_ZN4Pipe11create_pairEPP4fileS2_+0x138> - FileTable::close(*f0); - 8020346c: e29ff0ef jal 80203294 <_ZN9FileTable5closeEP4file> - if (*f1) - 80203470: 000a3403 ld s0,0(s4) - 80203474: e809 bnez s0,80203486 <_ZN4Pipe11create_pairEPP4fileS2_+0x148> - Slab::kfree(pi); - 80203476: 854a mv a0,s2 - 80203478: 6c0030ef jal 80206b38 <_ZN4Slab5kfreeEPv> - 8020347c: 7442 ld s0,48(sp) - 8020347e: 7902 ld s2,32(sp) - return -1; - 80203480: 54fd li s1,-1 - 80203482: bf5d j 80203438 <_ZN4Pipe11create_pairEPP4fileS2_+0xfa> - 80203484: 6aa2 ld s5,8(sp) - FileTable::close(*f1); - 80203486: 8522 mv a0,s0 - 80203488: e0dff0ef jal 80203294 <_ZN9FileTable5closeEP4file> - 8020348c: b7ed j 80203476 <_ZN4Pipe11create_pairEPP4fileS2_+0x138> - -000000008020348e <_ZN9FileTable4readEP4fileyi>: - - int read(struct file *f, uint64 addr, int n) - { - 8020348e: 1101 addi sp,sp,-32 - 80203490: ec06 sd ra,24(sp) - if (f->readable == 0) - 80203492: 00854783 lbu a5,8(a0) - 80203496: c7a5 beqz a5,802034fe <_ZN9FileTable4readEP4fileyi+0x70> - return -1; - if (f->type == FD_INODE) - 80203498: 411c lw a5,0(a0) - 8020349a: e822 sd s0,16(sp) - 8020349c: 4705 li a4,1 - 8020349e: 842a mv s0,a0 - 802034a0: 00e78c63 beq a5,a4,802034b8 <_ZN9FileTable4readEP4fileyi+0x2a> - f->off += r; - } - VFS::iunlock(f->ip); - return r; - } - else if (f->type == FD_PIPE) - 802034a4: 470d li a4,3 - 802034a6: 04e79863 bne a5,a4,802034f6 <_ZN9FileTable4readEP4fileyi+0x68> - { - if (f->pipe) - 802034aa: 6908 ld a0,16(a0) - 802034ac: c529 beqz a0,802034f6 <_ZN9FileTable4readEP4fileyi+0x68> - return f->pipe->read(addr, n); - 802034ae: 6442 ld s0,16(sp) - } - return -1; - } - 802034b0: 60e2 ld ra,24(sp) - 802034b2: 6105 addi sp,sp,32 - return f->pipe->read(addr, n); - 802034b4: c5fff06f j 80203112 <_ZN4Pipe4readEyi> - VFS::ilock(f->ip); - 802034b8: 6d08 ld a0,24(a0) - 802034ba: e426 sd s1,8(sp) - 802034bc: e04a sd s2,0(sp) - 802034be: 84ae mv s1,a1 - 802034c0: 8932 mv s2,a2 - 802034c2: 59e010ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - int r = f->ip->read((char*)addr, f->off, n, 1); - 802034c6: 6c08 ld a0,24(s0) - 802034c8: 5010 lw a2,32(s0) - 802034ca: 85a6 mv a1,s1 - 802034cc: 611c ld a5,0(a0) - 802034ce: 4705 li a4,1 - 802034d0: 86ca mv a3,s2 - 802034d2: 6f9c ld a5,24(a5) - 802034d4: 9782 jalr a5 - 802034d6: 84aa mv s1,a0 - if(r > 0) - 802034d8: 00a05563 blez a0,802034e2 <_ZN9FileTable4readEP4fileyi+0x54> - f->off += r; - 802034dc: 501c lw a5,32(s0) - 802034de: 9fa9 addw a5,a5,a0 - 802034e0: d01c sw a5,32(s0) - VFS::iunlock(f->ip); - 802034e2: 6c08 ld a0,24(s0) - 802034e4: 59c010ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - return r; - 802034e8: 6442 ld s0,16(sp) - 802034ea: 6902 ld s2,0(sp) - } - 802034ec: 60e2 ld ra,24(sp) - 802034ee: 8526 mv a0,s1 - 802034f0: 64a2 ld s1,8(sp) - 802034f2: 6105 addi sp,sp,32 - 802034f4: 8082 ret - 802034f6: e426 sd s1,8(sp) - return -1; - 802034f8: 6442 ld s0,16(sp) - 802034fa: 54fd li s1,-1 - 802034fc: bfc5 j 802034ec <_ZN9FileTable4readEP4fileyi+0x5e> - 802034fe: e426 sd s1,8(sp) - 80203500: 54fd li s1,-1 - 80203502: b7ed j 802034ec <_ZN9FileTable4readEP4fileyi+0x5e> - -0000000080203504 <_ZN9FileTable5writeEP4fileyi>: - - int write(struct file *f, uint64 addr, int n) - { - 80203504: 1101 addi sp,sp,-32 - 80203506: ec06 sd ra,24(sp) - if (f->writable == 0) - 80203508: 00954783 lbu a5,9(a0) - 8020350c: c7a5 beqz a5,80203574 <_ZN9FileTable5writeEP4fileyi+0x70> - return -1; - if (f->type == FD_INODE) - 8020350e: 411c lw a5,0(a0) - 80203510: e822 sd s0,16(sp) - 80203512: 4705 li a4,1 - 80203514: 842a mv s0,a0 - 80203516: 00e78c63 beq a5,a4,8020352e <_ZN9FileTable5writeEP4fileyi+0x2a> - f->off += r; - } - VFS::iunlock(f->ip); - return r; - } - else if (f->type == FD_PIPE) - 8020351a: 470d li a4,3 - 8020351c: 04e79863 bne a5,a4,8020356c <_ZN9FileTable5writeEP4fileyi+0x68> - { - if (f->pipe) - 80203520: 6908 ld a0,16(a0) - 80203522: c529 beqz a0,8020356c <_ZN9FileTable5writeEP4fileyi+0x68> - return f->pipe->write(addr, n); - 80203524: 6442 ld s0,16(sp) - } - - return -1; - } - 80203526: 60e2 ld ra,24(sp) - 80203528: 6105 addi sp,sp,32 - return f->pipe->write(addr, n); - 8020352a: b15ff06f j 8020303e <_ZN4Pipe5writeEyi> - VFS::ilock(f->ip); - 8020352e: 6d08 ld a0,24(a0) - 80203530: e426 sd s1,8(sp) - 80203532: e04a sd s2,0(sp) - 80203534: 84ae mv s1,a1 - 80203536: 8932 mv s2,a2 - 80203538: 528010ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - int r = f->ip->write((char *)addr, f->off, n, 1); - 8020353c: 6c08 ld a0,24(s0) - 8020353e: 5010 lw a2,32(s0) - 80203540: 85a6 mv a1,s1 - 80203542: 611c ld a5,0(a0) - 80203544: 4705 li a4,1 - 80203546: 86ca mv a3,s2 - 80203548: 739c ld a5,32(a5) - 8020354a: 9782 jalr a5 - 8020354c: 84aa mv s1,a0 - if (r > 0) - 8020354e: 00a05563 blez a0,80203558 <_ZN9FileTable5writeEP4fileyi+0x54> - f->off += r; - 80203552: 501c lw a5,32(s0) - 80203554: 9fa9 addw a5,a5,a0 - 80203556: d01c sw a5,32(s0) - VFS::iunlock(f->ip); - 80203558: 6c08 ld a0,24(s0) - 8020355a: 526010ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - return r; - 8020355e: 6442 ld s0,16(sp) - 80203560: 6902 ld s2,0(sp) - } - 80203562: 60e2 ld ra,24(sp) - 80203564: 8526 mv a0,s1 - 80203566: 64a2 ld s1,8(sp) - 80203568: 6105 addi sp,sp,32 - 8020356a: 8082 ret - 8020356c: e426 sd s1,8(sp) - return -1; - 8020356e: 6442 ld s0,16(sp) - 80203570: 54fd li s1,-1 - 80203572: bfc5 j 80203562 <_ZN9FileTable5writeEP4fileyi+0x5e> - 80203574: e426 sd s1,8(sp) - 80203576: 54fd li s1,-1 - 80203578: b7ed j 80203562 <_ZN9FileTable5writeEP4fileyi+0x5e> - -000000008020357a <_ZN9FileTable4statEP4filey>: - - int stat(struct file *f, uint64 addr) - { - if (f->type == FD_INODE) - 8020357a: 4118 lw a4,0(a0) - 8020357c: 4785 li a5,1 - 8020357e: 04f71663 bne a4,a5,802035ca <_ZN9FileTable4statEP4filey+0x50> - { - 80203582: 715d addi sp,sp,-80 - 80203584: e0a2 sd s0,64(sp) - 80203586: 842a mv s0,a0 - { - struct kstat st; - VFS::ilock(f->ip); - 80203588: 6d08 ld a0,24(a0) - { - 8020358a: e486 sd ra,72(sp) - 8020358c: fc26 sd s1,56(sp) - 8020358e: f84a sd s2,48(sp) - 80203590: 84ae mv s1,a1 - VFS::ilock(f->ip); - 80203592: 4ce010ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - f->ip->getattr(&st); - 80203596: 6c08 ld a0,24(s0) - 80203598: 890a mv s2,sp - 8020359a: 85ca mv a1,s2 - 8020359c: 611c ld a5,0(a0) - 8020359e: 7f9c ld a5,56(a5) - 802035a0: 9782 jalr a5 - VFS::iunlock(f->ip); - 802035a2: 6c08 ld a0,24(s0) - 802035a4: 4dc010ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - - struct Proc *p = myproc(); - 802035a8: 4da020ef jal 80205a82 <_Z6myprocv> - if (VM::copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) - 802035ac: 7d28 ld a0,120(a0) - 802035ae: 864a mv a2,s2 - 802035b0: 85a6 mv a1,s1 - 802035b2: 03000693 li a3,48 - 802035b6: 0ec030ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - return -1; - return 0; - } - return -1; - } - 802035ba: 60a6 ld ra,72(sp) - 802035bc: 6406 ld s0,64(sp) - 802035be: 74e2 ld s1,56(sp) - 802035c0: 7942 ld s2,48(sp) - if (VM::copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) - 802035c2: 41f5551b sraiw a0,a0,0x1f - } - 802035c6: 6161 addi sp,sp,80 - 802035c8: 8082 ret - return -1; - 802035ca: 557d li a0,-1 - } - 802035cc: 8082 ret - -00000000802035ce <_ZN9FileTable5lseekEP4fileii>: - - int lseek(struct file *f, int offset, int whence) - { - 802035ce: 7179 addi sp,sp,-48 - 802035d0: e44e sd s3,8(sp) - if (f->type != FD_INODE) - 802035d2: 00052983 lw s3,0(a0) - { - 802035d6: f406 sd ra,40(sp) - 802035d8: ec26 sd s1,24(sp) - if (f->type != FD_INODE) - 802035da: 4785 li a5,1 - 802035dc: 02f99863 bne s3,a5,8020360c <_ZN9FileTable5lseekEP4fileii+0x3e> - return -1; - - VFS::ilock(f->ip); - 802035e0: f022 sd s0,32(sp) - 802035e2: 842a mv s0,a0 - 802035e4: 6d08 ld a0,24(a0) - 802035e6: e84a sd s2,16(sp) - 802035e8: 84ae mv s1,a1 - 802035ea: 8932 mv s2,a2 - 802035ec: 474010ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - - int new_off = f->off; - int size = f->ip->size; - 802035f0: 6c08 ld a0,24(s0) - int new_off = f->off; - 802035f2: 501c lw a5,32(s0) - int size = f->ip->size; - 802035f4: 4938 lw a4,80(a0) - - switch (whence) - 802035f6: 05390063 beq s2,s3,80203636 <_ZN9FileTable5lseekEP4fileii+0x68> - 802035fa: 4789 li a5,2 - 802035fc: 00f90f63 beq s2,a5,8020361a <_ZN9FileTable5lseekEP4fileii+0x4c> - 80203600: 00090e63 beqz s2,8020361c <_ZN9FileTable5lseekEP4fileii+0x4e> - break; - case SEEK_END: - new_off = size + offset; - break; - default: - VFS::iunlock(f->ip); - 80203604: 47c010ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - 80203608: 7402 ld s0,32(sp) - 8020360a: 6942 ld s2,16(sp) - } - - f->off = new_off; - VFS::iunlock(f->ip); - return new_off; - } - 8020360c: 70a2 ld ra,40(sp) - return -1; - 8020360e: 54fd li s1,-1 - } - 80203610: 69a2 ld s3,8(sp) - 80203612: 8526 mv a0,s1 - 80203614: 64e2 ld s1,24(sp) - 80203616: 6145 addi sp,sp,48 - 80203618: 8082 ret - new_off = size + offset; - 8020361a: 9cb9 addw s1,s1,a4 - if (new_off < 0) - 8020361c: fe04c4e3 bltz s1,80203604 <_ZN9FileTable5lseekEP4fileii+0x36> - f->off = new_off; - 80203620: d004 sw s1,32(s0) - VFS::iunlock(f->ip); - 80203622: 45e010ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - } - 80203626: 70a2 ld ra,40(sp) - VFS::iunlock(f->ip); - 80203628: 7402 ld s0,32(sp) - 8020362a: 6942 ld s2,16(sp) - } - 8020362c: 69a2 ld s3,8(sp) - 8020362e: 8526 mv a0,s1 - 80203630: 64e2 ld s1,24(sp) - 80203632: 6145 addi sp,sp,48 - 80203634: 8082 ret - new_off += offset; - 80203636: 9cbd addw s1,s1,a5 - break; - 80203638: b7d5 j 8020361c <_ZN9FileTable5lseekEP4fileii+0x4e> - -000000008020363a <_GLOBAL__sub_I__ZN4Pipe11create_pairEPP4fileS2_>: - 8020363a: 00019797 auipc a5,0x19 - 8020363e: 5ce78793 addi a5,a5,1486 # 8021cc08 <_ZN9FileTable6ftableE> - 80203642: 0000e717 auipc a4,0xe - 80203646: 14670713 addi a4,a4,326 # 80211788 - 8020364a: 0007a023 sw zero,0(a5) - 8020364e: e798 sd a4,8(a5) - 80203650: 0007b823 sd zero,16(a5) -} // namespace FileTable - 80203654: 8082 ret - -0000000080203656 <_ZN15FAT32FileSystem4initEv>: -} - -// FAT32 FileSystem Implementation - -void FAT32FileSystem::init() -{ - 80203656: 1101 addi sp,sp,-32 - 80203658: e426 sd s1,8(sp) - struct Buf *b = BufferCache::bread(0, 0); - 8020365a: 4581 li a1,0 -{ - 8020365c: 84aa mv s1,a0 - struct Buf *b = BufferCache::bread(0, 0); - 8020365e: 4501 li a0,0 -{ - 80203660: e822 sd s0,16(sp) - 80203662: ec06 sd ra,24(sp) - 80203664: e04a sd s2,0(sp) - struct Buf *b = BufferCache::bread(0, 0); - 80203666: 65b040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - 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); - 8020366a: 03454783 lbu a5,52(a0) - 8020366e: 03354683 lbu a3,51(a0) - 80203672: 20000713 li a4,512 - 80203676: 07a2 slli a5,a5,0x8 - 80203678: 8fd5 or a5,a5,a3 - struct Buf *b = BufferCache::bread(0, 0); - 8020367a: 842a mv s0,a0 - bool is_valid_bpb = (bpb->bytesPerSector == 512) && (bpb->rootClus != 0); - 8020367c: 0ee79b63 bne a5,a4,80203772 <_ZN15FAT32FileSystem4initEv+0x11c> - 80203680: 05554683 lbu a3,85(a0) - 80203684: 05454603 lbu a2,84(a0) - 80203688: 05654703 lbu a4,86(a0) - 8020368c: 05754783 lbu a5,87(a0) - 80203690: 06a2 slli a3,a3,0x8 - 80203692: 8ed1 or a3,a3,a2 - 80203694: 0742 slli a4,a4,0x10 - 80203696: 8f55 or a4,a4,a3 - 80203698: 07e2 slli a5,a5,0x18 - 8020369a: 8fd9 or a5,a5,a4 - 8020369c: cbf9 beqz a5,80203772 <_ZN15FAT32FileSystem4initEv+0x11c> - uint8 *data = (uint8 *)b->data; - 8020369e: 02850793 addi a5,a0,40 - uint32 partition_lba = 0; - 802036a2: 4901 li s2,0 - Drivers::uart_puts("[FAT32] Panic: Invalid FAT32 BPB in partition.\n"); - while (1) - ; - } - - uint32 fat_sz = bpb->FATSz32; - 802036a4: 0257c603 lbu a2,37(a5) - 802036a8: 0247c583 lbu a1,36(a5) - 802036ac: 0267c703 lbu a4,38(a5) - 802036b0: 0277c683 lbu a3,39(a5) - 802036b4: 0622 slli a2,a2,0x8 - 802036b6: 8e4d or a2,a2,a1 - 802036b8: 0742 slli a4,a4,0x10 - 802036ba: 8f51 or a4,a4,a2 - 802036bc: 06e2 slli a3,a3,0x18 - 802036be: 8ed9 or a3,a3,a4 - 802036c0: 2681 sext.w a3,a3 - this->fat_sz = fat_sz; - 802036c2: ccd4 sw a3,28(s1) - uint32 reserved_sec = bpb->reservedSecCnt; - uint8 num_fats = bpb->numFATs; - 802036c4: 0107c603 lbu a2,16(a5) - - sectors_per_cluster = bpb->secPerClus; - 802036c8: 00d7c583 lbu a1,13(a5) - uint32 reserved_sec = bpb->reservedSecCnt; - 802036cc: 00f7c703 lbu a4,15(a5) - 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); - 802036d0: 02d606bb mulw a3,a2,a3 - bytes_per_cluster = sectors_per_cluster * 512; - 802036d4: 0095961b slliw a2,a1,0x9 - uint32 reserved_sec = bpb->reservedSecCnt; - 802036d8: 00e7c883 lbu a7,14(a5) - sectors_per_cluster = bpb->secPerClus; - 802036dc: c8cc sw a1,20(s1) - bytes_per_cluster = sectors_per_cluster * 512; - 802036de: cc90 sw a2,24(s1) - root_cluster = bpb->rootClus; - 802036e0: 02d7c503 lbu a0,45(a5) - 802036e4: 02c7c803 lbu a6,44(a5) - 802036e8: 02e7c583 lbu a1,46(a5) - uint32 reserved_sec = bpb->reservedSecCnt; - 802036ec: 0722 slli a4,a4,0x8 - root_cluster = bpb->rootClus; - 802036ee: 02f7c603 lbu a2,47(a5) - uint32 reserved_sec = bpb->reservedSecCnt; - 802036f2: 011767b3 or a5,a4,a7 - fat_start_sector = partition_lba + reserved_sec; - 802036f6: 012787bb addw a5,a5,s2 - root_cluster = bpb->rootClus; - 802036fa: 0522 slli a0,a0,0x8 - 802036fc: 01056533 or a0,a0,a6 - data_start_sector = partition_lba + reserved_sec + (fat_sz * num_fats); - 80203700: 00f6873b addw a4,a3,a5 - root_cluster = bpb->rootClus; - 80203704: 05c2 slli a1,a1,0x10 - fat_start_sector = partition_lba + reserved_sec; - 80203706: 1782 slli a5,a5,0x20 - root_cluster = bpb->rootClus; - 80203708: 8dc9 or a1,a1,a0 - 8020370a: 01861693 slli a3,a2,0x18 - fat_start_sector = partition_lba + reserved_sec; - 8020370e: 1702 slli a4,a4,0x20 - 80203710: 9381 srli a5,a5,0x20 - root_cluster = bpb->rootClus; - 80203712: 8ecd or a3,a3,a1 - fat_start_sector = partition_lba + reserved_sec; - 80203714: 8fd9 or a5,a5,a4 - root_cluster = bpb->rootClus; - 80203716: c894 sw a3,16(s1) - fat_start_sector = partition_lba + reserved_sec; - 80203718: e49c sd a5,8(s1) - - Drivers::uart_puts(ANSI_GREEN); - 8020371a: 0000e517 auipc a0,0xe - 8020371e: 16650513 addi a0,a0,358 # 80211880 - 80203722: 648050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("[FAT32] Init Success: RootClus="); - 80203726: 0000e517 auipc a0,0xe - 8020372a: 16250513 addi a0,a0,354 # 80211888 - 8020372e: 63c050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(root_cluster); - 80203732: 4888 lw a0,16(s1) - 80203734: 694050ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts(", DataStart="); - 80203738: 0000e517 auipc a0,0xe - 8020373c: 17050513 addi a0,a0,368 # 802118a8 - 80203740: 62a050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(data_start_sector); - 80203744: 44c8 lw a0,12(s1) - 80203746: 682050ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts(ANSI_RESET); - 8020374a: 0000e517 auipc a0,0xe - 8020374e: 16e50513 addi a0,a0,366 # 802118b8 - 80203752: 618050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("\n"); - 80203756: 0000e517 auipc a0,0xe - 8020375a: 0ca50513 addi a0,a0,202 # 80211820 - 8020375e: 60c050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - BufferCache::brelse(b); - 80203762: 8522 mv a0,s0 -} - 80203764: 6442 ld s0,16(sp) - 80203766: 60e2 ld ra,24(sp) - 80203768: 64a2 ld s1,8(sp) - 8020376a: 6902 ld s2,0(sp) - 8020376c: 6105 addi sp,sp,32 - BufferCache::brelse(b); - 8020376e: 6690406f j 802085d6 <_ZN11BufferCache6brelseEP3Buf> - Drivers::uart_puts("[FAT32] Sector 0 is not a valid BPB. Checking MBR...\n"); - 80203772: 0000e517 auipc a0,0xe - 80203776: 02650513 addi a0,a0,38 # 80211798 - 8020377a: 5f0050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - if (data[510] != 0x55 || data[511] != 0xAA) - 8020377e: 22644703 lbu a4,550(s0) - 80203782: 05500793 li a5,85 - 80203786: 00f71863 bne a4,a5,80203796 <_ZN15FAT32FileSystem4initEv+0x140> - 8020378a: 22744703 lbu a4,551(s0) - 8020378e: 0aa00793 li a5,170 - 80203792: 00f70963 beq a4,a5,802037a4 <_ZN15FAT32FileSystem4initEv+0x14e> - Drivers::uart_puts("[FAT32] Panic: Invalid Disk Signature!\n"); - 80203796: 0000e517 auipc a0,0xe - 8020379a: 03a50513 addi a0,a0,58 # 802117d0 - 8020379e: 5cc050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802037a2: a001 j 802037a2 <_ZN15FAT32FileSystem4initEv+0x14c> - uint32 lba = *(uint32 *)(data + 446 + 8); - 802037a4: 1ee42903 lw s2,494(s0) - if (lba > 0) - 802037a8: 04090b63 beqz s2,802037fe <_ZN15FAT32FileSystem4initEv+0x1a8> - Drivers::uart_puts("[FAT32] MBR Partition 1 found @ Sector "); - 802037ac: 0000e517 auipc a0,0xe - 802037b0: 04c50513 addi a0,a0,76 # 802117f8 - 802037b4: 5b6050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(lba); - 802037b8: 854a mv a0,s2 - 802037ba: 60e050ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts("\n"); - 802037be: 0000e517 auipc a0,0xe - 802037c2: 06250513 addi a0,a0,98 # 80211820 - 802037c6: 5a4050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - BufferCache::brelse(b); - 802037ca: 8522 mv a0,s0 - 802037cc: 60b040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - b = BufferCache::bread(0, partition_lba / 2); - 802037d0: 0019559b srliw a1,s2,0x1 - 802037d4: 4501 li a0,0 - 802037d6: 4eb040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - if (bpb->bytesPerSector != 512) - 802037da: 03454783 lbu a5,52(a0) - 802037de: 03354683 lbu a3,51(a0) - 802037e2: 20000713 li a4,512 - 802037e6: 07a2 slli a5,a5,0x8 - 802037e8: 8fd5 or a5,a5,a3 - b = BufferCache::bread(0, partition_lba / 2); - 802037ea: 842a mv s0,a0 - if (bpb->bytesPerSector != 512) - 802037ec: 02e78063 beq a5,a4,8020380c <_ZN15FAT32FileSystem4initEv+0x1b6> - Drivers::uart_puts("[FAT32] Panic: Invalid FAT32 BPB in partition.\n"); - 802037f0: 0000e517 auipc a0,0xe - 802037f4: 06050513 addi a0,a0,96 # 80211850 - 802037f8: 572050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802037fc: a001 j 802037fc <_ZN15FAT32FileSystem4initEv+0x1a6> - Drivers::uart_puts("[FAT32] Panic: No partition found.\n"); - 802037fe: 0000e517 auipc a0,0xe - 80203802: 02a50513 addi a0,a0,42 # 80211828 - 80203806: 564050ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 8020380a: a001 j 8020380a <_ZN15FAT32FileSystem4initEv+0x1b4> - bpb = (struct FAT32_BPB *)b->data; - 8020380c: 02850793 addi a5,a0,40 - 80203810: bd51 j 802036a4 <_ZN15FAT32FileSystem4initEv+0x4e> - -0000000080203812 <_ZL10match_namePKcS0_>: -} - -// FAT32 Inode Implementation - -static bool match_name(const char *disk_name, const char *target) -{ - 80203812: 1101 addi sp,sp,-32 - 80203814: 862a mv a2,a0 - 80203816: 850a mv a0,sp - 80203818: ec06 sd ra,24(sp) - 8020381a: 872a mv a4,a0 - 8020381c: 4781 li a5,0 - char temp[13]; - int i, j; - - for (i = 0; i < 8 && disk_name[i] != ' '; i++) - 8020381e: 02000813 li a6,32 - 80203822: 48a1 li a7,8 - 80203824: 00f606b3 add a3,a2,a5 - 80203828: 0006c683 lbu a3,0(a3) - 8020382c: 07068463 beq a3,a6,80203894 <_ZL10match_namePKcS0_+0x82> - temp[i] = disk_name[i]; - 80203830: 00d70023 sb a3,0(a4) - for (i = 0; i < 8 && disk_name[i] != ' '; i++) - 80203834: 0785 addi a5,a5,1 - 80203836: 0705 addi a4,a4,1 - 80203838: ff1796e3 bne a5,a7,80203824 <_ZL10match_namePKcS0_+0x12> - 8020383c: 47a1 li a5,8 - if (disk_name[8] != ' ') - 8020383e: 00864683 lbu a3,8(a2) - 80203842: 02000713 li a4,32 - 80203846: 02e68c63 beq a3,a4,8020387e <_ZL10match_namePKcS0_+0x6c> - { - temp[i++] = '.'; - 8020384a: 01078693 addi a3,a5,16 - 8020384e: 0017871b addiw a4,a5,1 - 80203852: 968a add a3,a3,sp - 80203854: 02e00813 li a6,46 - 80203858: ff068823 sb a6,-16(a3) - for (j = 0; j < 3 && disk_name[8 + j] != ' '; j++) - 8020385c: 0621 addi a2,a2,8 - 8020385e: 00e506b3 add a3,a0,a4 - 80203862: 2791 addiw a5,a5,4 - 80203864: 02000893 li a7,32 - 80203868: 00064803 lbu a6,0(a2) - 8020386c: 0605 addi a2,a2,1 - 8020386e: 03180563 beq a6,a7,80203898 <_ZL10match_namePKcS0_+0x86> - temp[i++] = disk_name[8 + j]; - 80203872: 01068023 sb a6,0(a3) - 80203876: 2705 addiw a4,a4,1 - for (j = 0; j < 3 && disk_name[8 + j] != ' '; j++) - 80203878: 0685 addi a3,a3,1 - 8020387a: fef717e3 bne a4,a5,80203868 <_ZL10match_namePKcS0_+0x56> - } - temp[i] = 0; - 8020387e: 07c1 addi a5,a5,16 - 80203880: 978a add a5,a5,sp - 80203882: fe078823 sb zero,-16(a5) - return strcasecmp(temp, target) == 0; - 80203886: 6be010ef jal 80204f44 <_Z10strcasecmpPKcS0_> -} - 8020388a: 60e2 ld ra,24(sp) - 8020388c: 00153513 seqz a0,a0 - 80203890: 6105 addi sp,sp,32 - 80203892: 8082 ret - 80203894: 2781 sext.w a5,a5 - 80203896: b765 j 8020383e <_ZL10match_namePKcS0_+0x2c> - 80203898: 87ba mv a5,a4 - 8020389a: b7d5 j 8020387e <_ZL10match_namePKcS0_+0x6c> - -000000008020389c <_ZN10FAT32Inode6updateEv>: - } - -} - -void FAT32Inode::update() -{ - 8020389c: 1101 addi sp,sp,-32 - struct Buf *b = BufferCache::bread(dev, ent_sec / 2); - 8020389e: 556c lw a1,108(a0) -{ - 802038a0: e822 sd s0,16(sp) - 802038a2: 842a mv s0,a0 - struct Buf *b = BufferCache::bread(dev, ent_sec / 2); - 802038a4: 4508 lw a0,8(a0) - 802038a6: 0015d59b srliw a1,a1,0x1 -{ - 802038aa: ec06 sd ra,24(sp) - 802038ac: e426 sd s1,8(sp) - struct Buf *b = BufferCache::bread(dev, ent_sec / 2); - 802038ae: 413040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 offset = (ent_sec % 2) * 512 + ent_off; - 802038b2: 547c lw a5,108(s0) - 802038b4: 5838 lw a4,112(s0) - - struct FAT32_DirEnt *de = (struct FAT32_DirEnt *)(b->data + offset); - - // Update file size and starting cluster - de->fileSize = size; - 802038b6: 4834 lw a3,80(s0) - uint32 offset = (ent_sec % 2) * 512 + ent_off; - 802038b8: 8b85 andi a5,a5,1 - 802038ba: 0097979b slliw a5,a5,0x9 - 802038be: 9f3d addw a4,a4,a5 - struct FAT32_DirEnt *de = (struct FAT32_DirEnt *)(b->data + offset); - 802038c0: 1702 slli a4,a4,0x20 - 802038c2: 02850793 addi a5,a0,40 - 802038c6: 9301 srli a4,a4,0x20 - 802038c8: 97ba add a5,a5,a4 - de->fileSize = size; - 802038ca: 0086d59b srliw a1,a3,0x8 - 802038ce: 0106d61b srliw a2,a3,0x10 - 802038d2: 0186d71b srliw a4,a3,0x18 - 802038d6: 00d78e23 sb a3,28(a5) - 802038da: 00b78ea3 sb a1,29(a5) - 802038de: 00c78f23 sb a2,30(a5) - 802038e2: 00e78fa3 sb a4,31(a5) - de->fstClusHI = (uint16)((first_clus >> 16) & 0xFFFF); - 802038e6: 5038 lw a4,96(s0) - struct Buf *b = BufferCache::bread(dev, ent_sec / 2); - 802038e8: 84aa mv s1,a0 - de->fstClusHI = (uint16)((first_clus >> 16) & 0xFFFF); - 802038ea: 0107559b srliw a1,a4,0x10 - 802038ee: 0187561b srliw a2,a4,0x18 - de->fstClusLO = (uint16)(first_clus & 0xFFFF); - 802038f2: 00875693 srli a3,a4,0x8 - de->fstClusHI = (uint16)((first_clus >> 16) & 0xFFFF); - 802038f6: 00b78a23 sb a1,20(a5) - 802038fa: 00c78aa3 sb a2,21(a5) - de->fstClusLO = (uint16)(first_clus & 0xFFFF); - 802038fe: 00e78d23 sb a4,26(a5) - 80203902: 00d78da3 sb a3,27(a5) - - BufferCache::bwrite(b); - 80203906: 49d040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(b); -} - 8020390a: 6442 ld s0,16(sp) - 8020390c: 60e2 ld ra,24(sp) - BufferCache::brelse(b); - 8020390e: 8526 mv a0,s1 -} - 80203910: 64a2 ld s1,8(sp) - 80203912: 6105 addi sp,sp,32 - BufferCache::brelse(b); - 80203914: 4c30406f j 802085d6 <_ZN11BufferCache6brelseEP3Buf> - -0000000080203918 <_ZN15FAT32FileSystem4rootEv>: -{ - 80203918: 1101 addi sp,sp,-32 - 8020391a: e426 sd s1,8(sp) - 8020391c: 84aa mv s1,a0 - FAT32Inode *ip = new FAT32Inode(); - 8020391e: 07800513 li a0,120 -{ - 80203922: ec06 sd ra,24(sp) - 80203924: e822 sd s0,16(sp) - FAT32Inode *ip = new FAT32Inode(); - 80203926: 771010ef jal 80205896 <_Znwm> - 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) - 8020392a: 00011797 auipc a5,0x11 - 8020392e: 1967b783 ld a5,406(a5) # 80214ac0 <_GLOBAL_OFFSET_TABLE_+0x60> - 80203932: 842a mv s0,a0 - 80203934: 07c1 addi a5,a5,16 - 80203936: e01c sd a5,0(s0) - 80203938: 0000e797 auipc a5,0xe - 8020393c: e5078793 addi a5,a5,-432 # 80211788 - 80203940: fc1c sd a5,56(s0) - { - lock.init("inode"); - 80203942: 0561 addi a0,a0,24 - Inode() : ref_cnt(0), valid(0) - 80203944: 00043823 sd zero,16(s0) - 80203948: 02042823 sw zero,48(s0) - 8020394c: 04043023 sd zero,64(s0) - lock.init("inode"); - 80203950: 0000e597 auipc a1,0xe - 80203954: f7058593 addi a1,a1,-144 # 802118c0 - 80203958: 08e020ef jal 802059e6 <_ZN5Mutex4initEPKc> - ip->inum = root_cluster; - 8020395c: 4898 lw a4,16(s1) - ip->ref_cnt = 1; - 8020395e: 4785 li a5,1 - 80203960: 1782 slli a5,a5,0x20 - 80203962: 4685 li a3,1 - 80203964: 0785 addi a5,a5,1 - uint32 parent_clus; // Starting cluster number of the parent directory - uint32 dir_offset; // The byte offset of this directory entry in the parent directory - uint32 ent_sec; // Sector number of the directory entry - uint32 ent_off; // Offset of the directory entry within the sector - - FAT32Inode() : fs(nullptr), first_clus(0) {} - 80203966: 00011617 auipc a2,0x11 - 8020396a: 03a60613 addi a2,a2,58 # 802149a0 <_ZTV10FAT32Inode+0x10> - ip->fs = this; - 8020396e: ec24 sd s1,88(s0) -} - 80203970: 60e2 ld ra,24(sp) - 80203972: e010 sd a2,0(s0) - ip->dev = 0; - 80203974: 00042423 sw zero,8(s0) - ip->inum = root_cluster; - 80203978: c458 sw a4,12(s0) - ip->ref_cnt = 1; - 8020397a: e81c sd a5,16(s0) - ip->type = T_DIR; - 8020397c: 04d41423 sh a3,72(s0) - ip->size = 0; - 80203980: 04042823 sw zero,80(s0) - ip->nlink = 1; - 80203984: 04d41723 sh a3,78(s0) - ip->first_clus = root_cluster; - 80203988: d038 sw a4,96(s0) - ip->parent_clus = 0; - 8020398a: 06042223 sw zero,100(s0) -} - 8020398e: 8522 mv a0,s0 - 80203990: 6442 ld s0,16(sp) - 80203992: 64a2 ld s1,8(sp) - 80203994: 6105 addi sp,sp,32 - 80203996: 8082 ret - -0000000080203998 <_ZN10FAT32Inode4readEPcjji>: -{ - 80203998: 7119 addi sp,sp,-128 - 8020399a: f8a2 sd s0,112(sp) - if (first_clus == 0) - 8020399c: 5120 lw s0,96(a0) -{ - 8020399e: fc86 sd ra,120(sp) - if (first_clus == 0) - 802039a0: c449 beqz s0,80203a2a <_ZN10FAT32Inode4readEPcjji+0x92> - uint32 clus_sz = fs->bytes_per_cluster; - 802039a2: 6d3c ld a5,88(a0) - 802039a4: e8d2 sd s4,80(sp) - 802039a6: f4a6 sd s1,104(sp) - 802039a8: 0187aa03 lw s4,24(a5) - uint32 skip = off / clus_sz; - 802039ac: e4d6 sd s5,72(sp) - 802039ae: e0da sd s6,64(sp) - 802039b0: fc5e sd s7,56(sp) - 802039b2: f862 sd s8,48(sp) - 802039b4: f06a sd s10,32(sp) - 802039b6: f0ca sd s2,96(sp) - 802039b8: ecce sd s3,88(sp) - 802039ba: f466 sd s9,40(sp) - 802039bc: 03465d3b divuw s10,a2,s4 - while (skip > 0) - 802039c0: 84aa mv s1,a0 - 802039c2: 8bae mv s7,a1 - 802039c4: 8b32 mv s6,a2 - 802039c6: 8ab6 mv s5,a3 - 802039c8: 8c3a mv s8,a4 - 802039ca: 07466563 bltu a2,s4,80203a34 <_ZN10FAT32Inode4readEPcjji+0x9c> - if (clus >= 0x0FFFFFF8) - 802039ce: 10000937 lui s2,0x10000 - return next & 0x0FFFFFFF; - 802039d2: 100009b7 lui s3,0x10000 - 802039d6: 19fd addi s3,s3,-1 # fffffff <_start-0x70200001> - if (clus >= 0x0FFFFFF8) - 802039d8: 195d addi s2,s2,-9 # ffffff7 <_start-0x70200009> - 802039da: a021 j 802039e2 <_ZN10FAT32Inode4readEPcjji+0x4a> - while (skip > 0) - 802039dc: 040d0c63 beqz s10,80203a34 <_ZN10FAT32Inode4readEPcjji+0x9c> - clus = fs->next_cluster(clus); - 802039e0: 6cbc ld a5,88(s1) - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802039e2: 479c lw a5,8(a5) - uint32 fat_offset = cluster * 4; - 802039e4: 00241c9b slliw s9,s0,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802039e8: 009cd41b srliw s0,s9,0x9 - 802039ec: 9c3d addw s0,s0,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802039ee: 0014559b srliw a1,s0,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802039f2: 8805 andi s0,s0,1 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802039f4: 4501 li a0,0 - uint32 ent_offset = fat_offset % 512; - 802039f6: 1ffcfc93 andi s9,s9,511 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802039fa: 0426 slli s0,s0,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802039fc: 2c5040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 80203a00: 9466 add s0,s0,s9 - 80203a02: 008507b3 add a5,a0,s0 - 80203a06: 5780 lw s0,40(a5) - skip--; - 80203a08: 3d7d addiw s10,s10,-1 - BufferCache::brelse(b); - 80203a0a: 3cd040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return next & 0x0FFFFFFF; - 80203a0e: 01347433 and s0,s0,s3 - if (clus >= 0x0FFFFFF8) - 80203a12: fc8975e3 bgeu s2,s0,802039dc <_ZN10FAT32Inode4readEPcjji+0x44> - 80203a16: 74a6 ld s1,104(sp) - 80203a18: 7906 ld s2,96(sp) - 80203a1a: 69e6 ld s3,88(sp) - 80203a1c: 6a46 ld s4,80(sp) - 80203a1e: 6aa6 ld s5,72(sp) - 80203a20: 6b06 ld s6,64(sp) - 80203a22: 7be2 ld s7,56(sp) - 80203a24: 7c42 ld s8,48(sp) - 80203a26: 7ca2 ld s9,40(sp) - 80203a28: 7d02 ld s10,32(sp) - return 0; - 80203a2a: 4501 li a0,0 -} - 80203a2c: 70e6 ld ra,120(sp) - 80203a2e: 7446 ld s0,112(sp) - 80203a30: 6109 addi sp,sp,128 - 80203a32: 8082 ret - while (tot < n) - 80203a34: 100a8e63 beqz s5,80203b50 <_ZN10FAT32Inode4readEPcjji+0x1b8> - return next & 0x0FFFFFFF; - 80203a38: 10000cb7 lui s9,0x10000 - uint32 current_off = off % clus_sz; - 80203a3c: 034b7d3b remuw s10,s6,s4 - return next & 0x0FFFFFFF; - 80203a40: fffc8793 addi a5,s9,-1 # fffffff <_start-0x70200001> - if (clus >= 0x0FFFFFF8) - 80203a44: 10000b37 lui s6,0x10000 - 80203a48: ec6e sd s11,24(sp) - uint32 tot = 0; - 80203a4a: 4981 li s3,0 - return next & 0x0FFFFFFF; - 80203a4c: e43e sd a5,8(sp) - if (clus >= 0x0FFFFFF8) - 80203a4e: 1b5d addi s6,s6,-9 # ffffff7 <_start-0x70200009> - if (sec_in_clus >= fs->sectors_per_cluster) - 80203a50: 6cb0 ld a2,88(s1) - uint32 fat_offset = cluster * 4; - 80203a52: 00241d9b slliw s11,s0,0x2 - uint32 off_in_sec = current_off % 512; - 80203a56: 1ffd7813 andi a6,s10,511 - if (sec_in_clus >= fs->sectors_per_cluster) - 80203a5a: 01462883 lw a7,20(a2) - if (n - tot < m) - 80203a5e: 413a8a3b subw s4,s5,s3 - uint32 m = 512 - off_in_sec; - 80203a62: 20000713 li a4,512 - uint32 sec_in_clus = current_off / 512; - 80203a66: 009d569b srliw a3,s10,0x9 - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80203a6a: ffe4059b addiw a1,s0,-2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203a6e: 009dd79b srliw a5,s11,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203a72: 4501 li a0,0 - uint32 m = 512 - off_in_sec; - 80203a74: 41070e3b subw t3,a4,a6 - if (n - tot < m) - 80203a78: 000a0e9b sext.w t4,s4 - uint32 sec_in_clus = current_off / 512; - 80203a7c: 009d591b srliw s2,s10,0x9 - if (sec_in_clus >= fs->sectors_per_cluster) - 80203a80: 0516e863 bltu a3,a7,80203ad0 <_ZN10FAT32Inode4readEPcjji+0x138> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203a84: 4618 lw a4,8(a2) - uint32 ent_offset = fat_offset % 512; - 80203a86: 1ffdfd93 andi s11,s11,511 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203a8a: 00e7843b addw s0,a5,a4 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203a8e: 0014559b srliw a1,s0,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203a92: 8805 andi s0,s0,1 - 80203a94: 0426 slli s0,s0,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203a96: 22b040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 80203a9a: 946e add s0,s0,s11 - 80203a9c: 008507b3 add a5,a0,s0 - 80203aa0: 5780 lw s0,40(a5) - BufferCache::brelse(b); - 80203aa2: 335040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return next & 0x0FFFFFFF; - 80203aa6: 67a2 ld a5,8(sp) - 80203aa8: 8c7d and s0,s0,a5 - if (clus >= 0x0FFFFFF8) - 80203aaa: 088b7f63 bgeu s6,s0,80203b48 <_ZN10FAT32Inode4readEPcjji+0x1b0> - return tot; - 80203aae: 0009851b sext.w a0,s3 -} - 80203ab2: 70e6 ld ra,120(sp) - 80203ab4: 7446 ld s0,112(sp) - 80203ab6: 74a6 ld s1,104(sp) - 80203ab8: 7906 ld s2,96(sp) - 80203aba: 69e6 ld s3,88(sp) - 80203abc: 6a46 ld s4,80(sp) - 80203abe: 6aa6 ld s5,72(sp) - 80203ac0: 6b06 ld s6,64(sp) - 80203ac2: 7be2 ld s7,56(sp) - 80203ac4: 7c42 ld s8,48(sp) - 80203ac6: 7ca2 ld s9,40(sp) - 80203ac8: 7d02 ld s10,32(sp) - 80203aca: 6de2 ld s11,24(sp) - 80203acc: 6109 addi sp,sp,128 - 80203ace: 8082 ret - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80203ad0: 031585bb mulw a1,a1,a7 - uint32 sec = fs->cluster_to_sector(clus) + sec_in_clus; - 80203ad4: 465c lw a5,12(a2) - 80203ad6: 00f9093b addw s2,s2,a5 - 80203ada: 00b9093b addw s2,s2,a1 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 80203ade: 0019559b srliw a1,s2,0x1 - if (n - tot < m) - 80203ae2: 01de7363 bgeu t3,t4,80203ae8 <_ZN10FAT32Inode4readEPcjji+0x150> - 80203ae6: 8a72 mv s4,t3 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 80203ae8: 4488 lw a0,8(s1) - 80203aea: e042 sd a6,0(sp) - uint32 block_offset = (sec % 2) * 512 + off_in_sec; - 80203aec: 00197913 andi s2,s2,1 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 80203af0: 1d1040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - if (VM::copyout(myproc()->pagetable, (uint64)dst, (char *)(b->data + block_offset), m) < 0) - 80203af4: 6802 ld a6,0(sp) - struct Buf *b = BufferCache::bread(dev, sec / 2); - 80203af6: 8caa mv s9,a0 - uint32 block_offset = (sec % 2) * 512 + off_in_sec; - 80203af8: 0926 slli s2,s2,0x9 - if (n - tot < m) - 80203afa: 000a0d9b sext.w s11,s4 - memmove(dst, b->data + block_offset, m); - 80203afe: 028c8593 addi a1,s9,40 - if (VM::copyout(myproc()->pagetable, (uint64)dst, (char *)(b->data + block_offset), m) < 0) - 80203b02: 9942 add s2,s2,a6 - 80203b04: 1a02 slli s4,s4,0x20 - memmove(dst, b->data + block_offset, m); - 80203b06: 866e mv a2,s11 - 80203b08: 855e mv a0,s7 - 80203b0a: 95ca add a1,a1,s2 - if (VM::copyout(myproc()->pagetable, (uint64)dst, (char *)(b->data + block_offset), m) < 0) - 80203b0c: 020a5a13 srli s4,s4,0x20 - if (isUser) - 80203b10: 020c0963 beqz s8,80203b42 <_ZN10FAT32Inode4readEPcjji+0x1aa> - if (VM::copyout(myproc()->pagetable, (uint64)dst, (char *)(b->data + block_offset), m) < 0) - 80203b14: 76f010ef jal 80205a82 <_Z6myprocv> - 80203b18: 7d28 ld a0,120(a0) - 80203b1a: 028c8613 addi a2,s9,40 - 80203b1e: 86d2 mv a3,s4 - 80203b20: 964a add a2,a2,s2 - 80203b22: 85de mv a1,s7 - 80203b24: 37f020ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 80203b28: 04054063 bltz a0,80203b68 <_ZN10FAT32Inode4readEPcjji+0x1d0> - BufferCache::brelse(b); - 80203b2c: 8566 mv a0,s9 - tot += m; - 80203b2e: 013d89bb addw s3,s11,s3 - BufferCache::brelse(b); - 80203b32: 2a5040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - dst += m; - 80203b36: 9bd2 add s7,s7,s4 - current_off += m; - 80203b38: 01ad8d3b addw s10,s11,s10 - while (tot < n) - 80203b3c: f159eae3 bltu s3,s5,80203a50 <_ZN10FAT32Inode4readEPcjji+0xb8> - 80203b40: b7bd j 80203aae <_ZN10FAT32Inode4readEPcjji+0x116> - memmove(dst, b->data + block_offset, m); - 80203b42: 332010ef jal 80204e74 <_Z7memmovePvPKvj> - 80203b46: b7dd j 80203b2c <_ZN10FAT32Inode4readEPcjji+0x194> - current_off = 0; - 80203b48: 4d01 li s10,0 - while (tot < n) - 80203b4a: f159e3e3 bltu s3,s5,80203a50 <_ZN10FAT32Inode4readEPcjji+0xb8> - 80203b4e: b785 j 80203aae <_ZN10FAT32Inode4readEPcjji+0x116> - 80203b50: 74a6 ld s1,104(sp) - 80203b52: 7906 ld s2,96(sp) - 80203b54: 69e6 ld s3,88(sp) - 80203b56: 6a46 ld s4,80(sp) - 80203b58: 6aa6 ld s5,72(sp) - 80203b5a: 6b06 ld s6,64(sp) - 80203b5c: 7be2 ld s7,56(sp) - 80203b5e: 7c42 ld s8,48(sp) - 80203b60: 7ca2 ld s9,40(sp) - 80203b62: 7d02 ld s10,32(sp) - 80203b64: 4501 li a0,0 - return tot; - 80203b66: b5d9 j 80203a2c <_ZN10FAT32Inode4readEPcjji+0x94> - BufferCache::brelse(b); - 80203b68: 8566 mv a0,s9 - 80203b6a: 26d040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return -1; - 80203b6e: 557d li a0,-1 - 80203b70: b789 j 80203ab2 <_ZN10FAT32Inode4readEPcjji+0x11a> - -0000000080203b72 <_ZN10FAT32Inode6unlinkEPKc>: - update(); -} - -int FAT32Inode::unlink(const char *name) -{ - if (type != T_DIR) - 80203b72: 04851703 lh a4,72(a0) - 80203b76: 4785 li a5,1 - 80203b78: 1af71863 bne a4,a5,80203d28 <_ZN10FAT32Inode6unlinkEPKc+0x1b6> -{ - 80203b7c: 7175 addi sp,sp,-144 - 80203b7e: f0d2 sd s4,96(sp) - 80203b80: 8a2e mv s4,a1 - 80203b82: e4de sd s7,72(sp) - return -1; - if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) - 80203b84: 0000e597 auipc a1,0xe - 80203b88: d4458593 addi a1,a1,-700 # 802118c8 - 80203b8c: 8baa mv s7,a0 - 80203b8e: 8552 mv a0,s4 -{ - 80203b90: e506 sd ra,136(sp) - if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) - 80203b92: 37a010ef jal 80204f0c <_Z6strcmpPKcS0_> - 80203b96: 10050c63 beqz a0,80203cae <_ZN10FAT32Inode6unlinkEPKc+0x13c> - 80203b9a: 0000e597 auipc a1,0xe - 80203b9e: d3658593 addi a1,a1,-714 # 802118d0 - 80203ba2: 8552 mv a0,s4 - 80203ba4: 368010ef jal 80204f0c <_Z6strcmpPKcS0_> - 80203ba8: 10050363 beqz a0,80203cae <_ZN10FAT32Inode6unlinkEPKc+0x13c> - 80203bac: f86a sd s10,48(sp) - return -1; - - uint32_t clus = first_clus; - 80203bae: 060bad03 lw s10,96(s7) - 80203bb2: fca6 sd s1,120(sp) - 80203bb4: f8ca sd s2,112(sp) - 80203bb6: f4ce sd s3,104(sp) - 80203bb8: e122 sd s0,128(sp) - 80203bba: ecd6 sd s5,88(sp) - 80203bbc: e8da sd s6,80(sp) - 80203bbe: e0e2 sd s8,64(sp) - 80203bc0: fc66 sd s9,56(sp) - 80203bc2: f46e sd s11,40(sp) - bool found = false; - struct Buf *target_buf = nullptr; - uint32_t target_offset = 0; - 80203bc4: 848a mv s1,sp - if (de.name[0] == 0x00) // end of dir - { - BufferCache::brelse(b); - return -1; // Not found - } - if (de.name[0] == 0xE5) - 80203bc6: 0e500913 li s2,229 - for (int off = 0; off < 512; off += 32) - 80203bca: 20000993 li s3,512 - uint32_t sec = fs->cluster_to_sector(clus); - 80203bce: 058bb783 ld a5,88(s7) - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80203bd2: ffed0c1b addiw s8,s10,-2 - 80203bd6: 4bd8 lw a4,20(a5) - 80203bd8: 47d4 lw a3,12(a5) - 80203bda: 02ec0c3b mulw s8,s8,a4 - 80203bde: 00dc0c3b addw s8,s8,a3 - for (uint32 i = 0; i < fs->sectors_per_cluster; ++i) - 80203be2: cb25 beqz a4,80203c52 <_ZN10FAT32Inode6unlinkEPKc+0xe0> - 80203be4: 4c81 li s9,0 - struct Buf *b = BufferCache::bread(dev, (sec + i) / 2); - 80203be6: 018c8abb addw s5,s9,s8 - 80203bea: 001ad59b srliw a1,s5,0x1 - uint8_t *data = (uint8_t *)b->data + ((sec + i) % 2) * 512; - 80203bee: 001afa93 andi s5,s5,1 - struct Buf *b = BufferCache::bread(dev, (sec + i) / 2); - 80203bf2: 008ba503 lw a0,8(s7) - uint8_t *data = (uint8_t *)b->data + ((sec + i) % 2) * 512; - 80203bf6: 009a9a9b slliw s5,s5,0x9 - 80203bfa: 028a841b addiw s0,s5,40 - 80203bfe: 1402 slli s0,s0,0x20 - struct Buf *b = BufferCache::bread(dev, (sec + i) / 2); - 80203c00: 0c1040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - 80203c04: 9001 srli s0,s0,0x20 - 80203c06: 8b2a mv s6,a0 - for (int off = 0; off < 512; off += 32) - 80203c08: 942a add s0,s0,a0 - 80203c0a: 4d81 li s11,0 - memmove(&de, data + off, 32); - 80203c0c: 02000613 li a2,32 - 80203c10: 85a2 mv a1,s0 - 80203c12: 8526 mv a0,s1 - 80203c14: 260010ef jal 80204e74 <_Z7memmovePvPKvj> - if (de.name[0] == 0x00) // end of dir - 80203c18: 00014783 lbu a5,0(sp) - 80203c1c: cfa5 beqz a5,80203c94 <_ZN10FAT32Inode6unlinkEPKc+0x122> - if (de.name[0] == 0xE5) - 80203c1e: 01278b63 beq a5,s2,80203c34 <_ZN10FAT32Inode6unlinkEPKc+0xc2> - continue; // have been unlink - if (de.attr & ATTR_LONG_NAME) - 80203c22: 00b14783 lbu a5,11(sp) - continue; - - if (match_name(de.name, name)) - 80203c26: 85d2 mv a1,s4 - 80203c28: 8526 mv a0,s1 - if (de.attr & ATTR_LONG_NAME) - 80203c2a: 8bbd andi a5,a5,15 - 80203c2c: e781 bnez a5,80203c34 <_ZN10FAT32Inode6unlinkEPKc+0xc2> - if (match_name(de.name, name)) - 80203c2e: be5ff0ef jal 80203812 <_ZL10match_namePKcS0_> - 80203c32: e541 bnez a0,80203cba <_ZN10FAT32Inode6unlinkEPKc+0x148> - for (int off = 0; off < 512; off += 32) - 80203c34: 020d8d9b addiw s11,s11,32 - 80203c38: 02040413 addi s0,s0,32 - 80203c3c: fd3d98e3 bne s11,s3,80203c0c <_ZN10FAT32Inode6unlinkEPKc+0x9a> - } - } - - if (found) - break; - BufferCache::brelse(b); - 80203c40: 855a mv a0,s6 - 80203c42: 195040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 i = 0; i < fs->sectors_per_cluster; ++i) - 80203c46: 058bb783 ld a5,88(s7) - 80203c4a: 2c85 addiw s9,s9,1 - 80203c4c: 4bd8 lw a4,20(a5) - 80203c4e: f8ecece3 bltu s9,a4,80203be6 <_ZN10FAT32Inode6unlinkEPKc+0x74> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203c52: 479c lw a5,8(a5) - uint32 fat_offset = cluster * 4; - 80203c54: 002d1d1b slliw s10,s10,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203c58: 009d541b srliw s0,s10,0x9 - 80203c5c: 9c3d addw s0,s0,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203c5e: 0014559b srliw a1,s0,0x1 - 80203c62: 4501 li a0,0 - 80203c64: 05d040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203c68: 00147793 andi a5,s0,1 - uint32 ent_offset = fat_offset % 512; - 80203c6c: 1ffd7d13 andi s10,s10,511 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203c70: 07a6 slli a5,a5,0x9 - uint32 next = *(uint32 *)(b->data + block_offset); - 80203c72: 97ea add a5,a5,s10 - 80203c74: 97aa add a5,a5,a0 - 80203c76: 5780 lw s0,40(a5) - BufferCache::brelse(b); - 80203c78: 15f040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - - if (found) - break; - - clus = fs->next_cluster(clus); - if (clus >= 0x0FFFFFF8) - 80203c7c: 100007b7 lui a5,0x10000 - return next & 0x0FFFFFFF; - 80203c80: 1412 slli s0,s0,0x24 - 80203c82: 02445d13 srli s10,s0,0x24 - if (clus >= 0x0FFFFFF8) - 80203c86: 17dd addi a5,a5,-9 # ffffff7 <_start-0x70200009> - 80203c88: f5a7f3e3 bgeu a5,s10,80203bce <_ZN10FAT32Inode6unlinkEPKc+0x5c> - 80203c8c: a039 j 80203c9a <_ZN10FAT32Inode6unlinkEPKc+0x128> - if (target_ip) - { - VFS::ilock(target_ip); - if (target_ip->type == T_DIR) - { - VFS::iunlockput(target_ip); - 80203c8e: 8522 mv a0,s0 - 80203c90: 62b000ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - BufferCache::brelse(target_buf); - 80203c94: 855a mv a0,s6 - 80203c96: 141040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - 80203c9a: 640a ld s0,128(sp) - 80203c9c: 74e6 ld s1,120(sp) - 80203c9e: 7946 ld s2,112(sp) - 80203ca0: 79a6 ld s3,104(sp) - 80203ca2: 6ae6 ld s5,88(sp) - 80203ca4: 6b46 ld s6,80(sp) - 80203ca6: 6c06 ld s8,64(sp) - 80203ca8: 7ce2 ld s9,56(sp) - 80203caa: 7d42 ld s10,48(sp) - 80203cac: 7da2 ld s11,40(sp) - return -1; - 80203cae: 557d li a0,-1 - BufferCache::brelse(target_buf); - return 0; - } - - return -1; -} - 80203cb0: 60aa ld ra,136(sp) - 80203cb2: 7a06 ld s4,96(sp) - 80203cb4: 6ba6 ld s7,72(sp) - 80203cb6: 6149 addi sp,sp,144 - 80203cb8: 8082 ret - if (found && target_buf) - 80203cba: fe0b00e3 beqz s6,80203c9a <_ZN10FAT32Inode6unlinkEPKc+0x128> - Inode *target_ip = lookup(name); - 80203cbe: 000bb783 ld a5,0(s7) - 80203cc2: 85d2 mv a1,s4 - 80203cc4: 855e mv a0,s7 - 80203cc6: 779c ld a5,40(a5) - 80203cc8: 9782 jalr a5 - 80203cca: 842a mv s0,a0 - if (target_ip) - 80203ccc: c505 beqz a0,80203cf4 <_ZN10FAT32Inode6unlinkEPKc+0x182> - VFS::ilock(target_ip); - 80203cce: 593000ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - if (target_ip->type == T_DIR) - 80203cd2: 04841703 lh a4,72(s0) - 80203cd6: 4785 li a5,1 - 80203cd8: faf70be3 beq a4,a5,80203c8e <_ZN10FAT32Inode6unlinkEPKc+0x11c> - target_ip->update(); - 80203cdc: 6018 ld a4,0(s0) - target_ip->nlink--; - 80203cde: 04e45783 lhu a5,78(s0) - target_ip->update(); - 80203ce2: 8522 mv a0,s0 - 80203ce4: 6b18 ld a4,16(a4) - target_ip->nlink--; - 80203ce6: 37fd addiw a5,a5,-1 - 80203ce8: 04f41723 sh a5,78(s0) - target_ip->update(); - 80203cec: 9702 jalr a4 - VFS::iunlockput(target_ip); - 80203cee: 8522 mv a0,s0 - 80203cf0: 5cb000ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - target_offset = ((sec + i) % 2) * 512 + off; - 80203cf4: 015d87bb addw a5,s11,s5 - uint8_t *ptr = (uint8_t *)target_buf->data + target_offset; - 80203cf8: 1782 slli a5,a5,0x20 - 80203cfa: 9381 srli a5,a5,0x20 - *ptr = 0xE5; - 80203cfc: 97da add a5,a5,s6 - 80203cfe: 5715 li a4,-27 - BufferCache::bwrite(target_buf); - 80203d00: 855a mv a0,s6 - *ptr = 0xE5; - 80203d02: 02e78423 sb a4,40(a5) - BufferCache::bwrite(target_buf); - 80203d06: 09d040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(target_buf); - 80203d0a: 855a mv a0,s6 - 80203d0c: 0cb040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return 0; - 80203d10: 4501 li a0,0 - 80203d12: 640a ld s0,128(sp) - 80203d14: 74e6 ld s1,120(sp) - 80203d16: 7946 ld s2,112(sp) - 80203d18: 79a6 ld s3,104(sp) - 80203d1a: 6ae6 ld s5,88(sp) - 80203d1c: 6b46 ld s6,80(sp) - 80203d1e: 6c06 ld s8,64(sp) - 80203d20: 7ce2 ld s9,56(sp) - 80203d22: 7d42 ld s10,48(sp) - 80203d24: 7da2 ld s11,40(sp) - 80203d26: b769 j 80203cb0 <_ZN10FAT32Inode6unlinkEPKc+0x13e> - return -1; - 80203d28: 557d li a0,-1 -} - 80203d2a: 8082 ret - -0000000080203d2c <_ZN10FAT32Inode6lookupEPKc>: - if (type != T_DIR) - 80203d2c: 04851703 lh a4,72(a0) -{ - 80203d30: 7135 addi sp,sp,-160 - 80203d32: ed06 sd ra,152(sp) - 80203d34: e922 sd s0,144(sp) - if (type != T_DIR) - 80203d36: e43a sd a4,8(sp) - 80203d38: 4785 li a5,1 - 80203d3a: 10f71663 bne a4,a5,80203e46 <_ZN10FAT32Inode6lookupEPKc+0x11a> - 80203d3e: e0ea sd s10,64(sp) - uint32 clus = first_clus; - 80203d40: 06052d03 lw s10,96(a0) - while (clus < 0x0FFFFFF8) - 80203d44: 100007b7 lui a5,0x10000 - 80203d48: f4d6 sd s5,104(sp) - 80203d4a: 17dd addi a5,a5,-9 # ffffff7 <_start-0x70200009> - 80203d4c: 8aaa mv s5,a0 - 80203d4e: 1ba7ed63 bltu a5,s10,80203f08 <_ZN10FAT32Inode6lookupEPKc+0x1dc> - 80203d52: e526 sd s1,136(sp) - 80203d54: e14a sd s2,128(sp) - 80203d56: fcce sd s3,120(sp) - 80203d58: f8d2 sd s4,112(sp) - 80203d5a: f0da sd s6,96(sp) - 80203d5c: ecde sd s7,88(sp) - 80203d5e: e8e2 sd s8,80(sp) - 80203d60: e4e6 sd s9,72(sp) - 80203d62: fc6e sd s11,56(sp) - 80203d64: 8a2e mv s4,a1 - 80203d66: 0804 addi s1,sp,16 - if (de.name[0] == 0xE5) - 80203d68: 0e500913 li s2,229 - for (int off = 0; off < 512; off += 32) - 80203d6c: 20000993 li s3,512 - uint32 sec = fs->cluster_to_sector(clus); - 80203d70: 058ab783 ld a5,88(s5) - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80203d74: ffed0b9b addiw s7,s10,-2 - 80203d78: 4bd8 lw a4,20(a5) - 80203d7a: 47d4 lw a3,12(a5) - 80203d7c: 02eb8bbb mulw s7,s7,a4 - 80203d80: 00db8bbb addw s7,s7,a3 - for (uint32 i = 0; i < fs->sectors_per_cluster; i++) - 80203d84: c72d beqz a4,80203dee <_ZN10FAT32Inode6lookupEPKc+0xc2> - 80203d86: 4c81 li s9,0 - uint32 current_sec = sec + i; - 80203d88: 019b8c3b addw s8,s7,s9 - struct Buf *b = BufferCache::bread(dev, current_sec / 2); - 80203d8c: 008aa503 lw a0,8(s5) - uint32 block_base = (current_sec % 2) * 512; - 80203d90: 001c7413 andi s0,s8,1 - struct Buf *b = BufferCache::bread(dev, current_sec / 2); - 80203d94: 001c559b srliw a1,s8,0x1 - 80203d98: 0426 slli s0,s0,0x9 - 80203d9a: 726040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - 80203d9e: 02840413 addi s0,s0,40 - 80203da2: 8b2a mv s6,a0 - for (int off = 0; off < 512; off += 32) - 80203da4: 942a add s0,s0,a0 - 80203da6: 4d81 li s11,0 - memmove(&de, b->data + block_base + off, 32); - 80203da8: 02000613 li a2,32 - 80203dac: 85a2 mv a1,s0 - 80203dae: 8526 mv a0,s1 - 80203db0: 0c4010ef jal 80204e74 <_Z7memmovePvPKvj> - if (de.name[0] == 0x00) - 80203db4: 01014783 lbu a5,16(sp) - 80203db8: cbad beqz a5,80203e2a <_ZN10FAT32Inode6lookupEPKc+0xfe> - if (de.name[0] == 0xE5) - 80203dba: 01278b63 beq a5,s2,80203dd0 <_ZN10FAT32Inode6lookupEPKc+0xa4> - if (de.attr & ATTR_LONG_NAME) - 80203dbe: 01b14783 lbu a5,27(sp) - if (match_name(de.name, name)) - 80203dc2: 85d2 mv a1,s4 - 80203dc4: 8526 mv a0,s1 - if (de.attr & ATTR_LONG_NAME) - 80203dc6: 8bbd andi a5,a5,15 - 80203dc8: e781 bnez a5,80203dd0 <_ZN10FAT32Inode6lookupEPKc+0xa4> - if (match_name(de.name, name)) - 80203dca: a49ff0ef jal 80203812 <_ZL10match_namePKcS0_> - 80203dce: e151 bnez a0,80203e52 <_ZN10FAT32Inode6lookupEPKc+0x126> - for (int off = 0; off < 512; off += 32) - 80203dd0: 020d8d9b addiw s11,s11,32 - 80203dd4: 02040413 addi s0,s0,32 - 80203dd8: fd3d98e3 bne s11,s3,80203da8 <_ZN10FAT32Inode6lookupEPKc+0x7c> - BufferCache::brelse(b); - 80203ddc: 855a mv a0,s6 - 80203dde: 7f8040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 i = 0; i < fs->sectors_per_cluster; i++) - 80203de2: 058ab783 ld a5,88(s5) - 80203de6: 2c85 addiw s9,s9,1 - 80203de8: 4bd8 lw a4,20(a5) - 80203dea: f8ecefe3 bltu s9,a4,80203d88 <_ZN10FAT32Inode6lookupEPKc+0x5c> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203dee: 479c lw a5,8(a5) - uint32 fat_offset = cluster * 4; - 80203df0: 002d1d1b slliw s10,s10,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203df4: 009d541b srliw s0,s10,0x9 - 80203df8: 9c3d addw s0,s0,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203dfa: 0014559b srliw a1,s0,0x1 - 80203dfe: 4501 li a0,0 - 80203e00: 6c0040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203e04: 00147793 andi a5,s0,1 - uint32 ent_offset = fat_offset % 512; - 80203e08: 1ffd7d13 andi s10,s10,511 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203e0c: 07a6 slli a5,a5,0x9 - uint32 next = *(uint32 *)(b->data + block_offset); - 80203e0e: 97ea add a5,a5,s10 - 80203e10: 97aa add a5,a5,a0 - 80203e12: 5780 lw s0,40(a5) - BufferCache::brelse(b); - 80203e14: 7c2040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - while (clus < 0x0FFFFFF8) - 80203e18: 100007b7 lui a5,0x10000 - return next & 0x0FFFFFFF; - 80203e1c: 1412 slli s0,s0,0x24 - 80203e1e: 02445d13 srli s10,s0,0x24 - while (clus < 0x0FFFFFF8) - 80203e22: 17dd addi a5,a5,-9 # ffffff7 <_start-0x70200009> - 80203e24: f5a7f6e3 bgeu a5,s10,80203d70 <_ZN10FAT32Inode6lookupEPKc+0x44> - 80203e28: a021 j 80203e30 <_ZN10FAT32Inode6lookupEPKc+0x104> - BufferCache::brelse(b); - 80203e2a: 855a mv a0,s6 - 80203e2c: 7aa040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return nullptr; - 80203e30: 64aa ld s1,136(sp) - 80203e32: 690a ld s2,128(sp) - 80203e34: 79e6 ld s3,120(sp) - 80203e36: 7a46 ld s4,112(sp) - 80203e38: 7aa6 ld s5,104(sp) - 80203e3a: 7b06 ld s6,96(sp) - 80203e3c: 6be6 ld s7,88(sp) - 80203e3e: 6c46 ld s8,80(sp) - 80203e40: 6ca6 ld s9,72(sp) - 80203e42: 6d06 ld s10,64(sp) - 80203e44: 7de2 ld s11,56(sp) - return nullptr; - 80203e46: 4401 li s0,0 -} - 80203e48: 60ea ld ra,152(sp) - 80203e4a: 8522 mv a0,s0 - 80203e4c: 644a ld s0,144(sp) - 80203e4e: 610d addi sp,sp,160 - 80203e50: 8082 ret - FAT32Inode *ip = new FAT32Inode(); - 80203e52: 07800513 li a0,120 - 80203e56: 241010ef jal 80205896 <_Znwm> - Inode() : ref_cnt(0), valid(0) - 80203e5a: 00011797 auipc a5,0x11 - 80203e5e: c667b783 ld a5,-922(a5) # 80214ac0 <_GLOBAL_OFFSET_TABLE_+0x60> - 80203e62: 07c1 addi a5,a5,16 - 80203e64: e11c sd a5,0(a0) - 80203e66: 0000e797 auipc a5,0xe - 80203e6a: 92278793 addi a5,a5,-1758 # 80211788 - 80203e6e: 842a mv s0,a0 - 80203e70: fd1c sd a5,56(a0) - 80203e72: 00053823 sd zero,16(a0) - 80203e76: 02052823 sw zero,48(a0) - 80203e7a: 04053023 sd zero,64(a0) - lock.init("inode"); - 80203e7e: 0000e597 auipc a1,0xe - 80203e82: a4258593 addi a1,a1,-1470 # 802118c0 - 80203e86: 0561 addi a0,a0,24 - 80203e88: 35f010ef jal 802059e6 <_ZN5Mutex4initEPKc> - ip->fs = fs; - 80203e8c: 058ab603 ld a2,88(s5) - ip->dev = dev; - 80203e90: 008aa683 lw a3,8(s5) - ip->type = (de.attr & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 80203e94: 01b14783 lbu a5,27(sp) - 80203e98: 00011597 auipc a1,0x11 - 80203e9c: b0858593 addi a1,a1,-1272 # 802149a0 <_ZTV10FAT32Inode+0x10> - 80203ea0: e00c sd a1,0(s0) - ip->fs = fs; - 80203ea2: ec30 sd a2,88(s0) - ip->dev = dev; - 80203ea4: c414 sw a3,8(s0) - ip->type = (de.attr & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 80203ea6: 8bc1 andi a5,a5,16 - 80203ea8: e399 bnez a5,80203eae <_ZN10FAT32Inode6lookupEPKc+0x182> - 80203eaa: 4789 li a5,2 - 80203eac: e43e sd a5,8(sp) - ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; - 80203eae: 02415783 lhu a5,36(sp) - 80203eb2: 02a15583 lhu a1,42(sp) - ip->size = de.fileSize; - 80203eb6: 5632 lw a2,44(sp) - ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; - 80203eb8: 0107979b slliw a5,a5,0x10 - ip->type = (de.attr & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 80203ebc: 6722 ld a4,8(sp) - ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; - 80203ebe: 8fcd or a5,a5,a1 - ip->ref_cnt = 1; - 80203ec0: 4685 li a3,1 - ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; - 80203ec2: 2781 sext.w a5,a5 - ip->ref_cnt = 1; - 80203ec4: 1682 slli a3,a3,0x20 - ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; - 80203ec6: d03c sw a5,96(s0) - ip->inum = ip->first_clus; - 80203ec8: c45c sw a5,12(s0) - ip->ref_cnt = 1; - 80203eca: 0685 addi a3,a3,1 - ip->nlink = 1; - 80203ecc: 4785 li a5,1 - ip->ent_sec = current_sec; // Log Sector - 80203ece: 07842623 sw s8,108(s0) - ip->ent_off = off; // Log Setoff - 80203ed2: 07b42823 sw s11,112(s0) - BufferCache::brelse(b); - 80203ed6: 855a mv a0,s6 - ip->type = (de.attr & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 80203ed8: 04e41423 sh a4,72(s0) - ip->size = de.fileSize; - 80203edc: c830 sw a2,80(s0) - ip->nlink = 1; - 80203ede: 04f41723 sh a5,78(s0) - ip->ref_cnt = 1; - 80203ee2: e814 sd a3,16(s0) - BufferCache::brelse(b); - 80203ee4: 6f2040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> -} - 80203ee8: 60ea ld ra,152(sp) - 80203eea: 8522 mv a0,s0 - 80203eec: 644a ld s0,144(sp) - return ip; - 80203eee: 64aa ld s1,136(sp) - 80203ef0: 690a ld s2,128(sp) - 80203ef2: 79e6 ld s3,120(sp) - 80203ef4: 7a46 ld s4,112(sp) - 80203ef6: 7aa6 ld s5,104(sp) - 80203ef8: 7b06 ld s6,96(sp) - 80203efa: 6be6 ld s7,88(sp) - 80203efc: 6c46 ld s8,80(sp) - 80203efe: 6ca6 ld s9,72(sp) - 80203f00: 6d06 ld s10,64(sp) - 80203f02: 7de2 ld s11,56(sp) -} - 80203f04: 610d addi sp,sp,160 - 80203f06: 8082 ret - 80203f08: 7aa6 ld s5,104(sp) - 80203f0a: 6d06 ld s10,64(sp) - 80203f0c: bf2d j 80203e46 <_ZN10FAT32Inode6lookupEPKc+0x11a> - -0000000080203f0e <_ZN15FAT32FileSystem17cluster_to_sectorEj>: - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80203f0e: 495c lw a5,20(a0) - 80203f10: 35f9 addiw a1,a1,-2 - 80203f12: 4548 lw a0,12(a0) - 80203f14: 02f585bb mulw a1,a1,a5 -} - 80203f18: 9d2d addw a0,a0,a1 - 80203f1a: 8082 ret - -0000000080203f1c <_ZN15FAT32FileSystem12next_clusterEj>: -{ - 80203f1c: 1101 addi sp,sp,-32 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203f1e: 451c lw a5,8(a0) -{ - 80203f20: e426 sd s1,8(sp) - uint32 fat_offset = cluster * 4; - 80203f22: 0025949b slliw s1,a1,0x2 -{ - 80203f26: e822 sd s0,16(sp) - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80203f28: 0094d41b srliw s0,s1,0x9 - 80203f2c: 9c3d addw s0,s0,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203f2e: 0014559b srliw a1,s0,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203f32: 8805 andi s0,s0,1 - uint32 ent_offset = fat_offset % 512; - 80203f34: 1ff4f493 andi s1,s1,511 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203f38: 4501 li a0,0 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80203f3a: 0426 slli s0,s0,0x9 -{ - 80203f3c: ec06 sd ra,24(sp) - uint32 next = *(uint32 *)(b->data + block_offset); - 80203f3e: 9426 add s0,s0,s1 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80203f40: 580040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 80203f44: 008507b3 add a5,a0,s0 - 80203f48: 5780 lw s0,40(a5) - BufferCache::brelse(b); - 80203f4a: 68c040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> -} - 80203f4e: 60e2 ld ra,24(sp) - return next & 0x0FFFFFFF; - 80203f50: 02441513 slli a0,s0,0x24 -} - 80203f54: 6442 ld s0,16(sp) - 80203f56: 64a2 ld s1,8(sp) - 80203f58: 9111 srli a0,a0,0x24 - 80203f5a: 6105 addi sp,sp,32 - 80203f5c: 8082 ret - -0000000080203f5e <_ZN15FAT32FileSystem13alloc_clusterEv>: - for (uint32 i = 0; i < fat_sz; i++) - 80203f5e: 4d5c lw a5,28(a0) -{ - 80203f60: 715d addi sp,sp,-80 - 80203f62: e486 sd ra,72(sp) - 80203f64: f052 sd s4,32(sp) - for (uint32 i = 0; i < fat_sz; i++) - 80203f66: cbb5 beqz a5,80203fda <_ZN15FAT32FileSystem13alloc_clusterEv+0x7c> - if ((table[j] & 0x0FFFFFFF) == 0) - 80203f68: 10000a37 lui s4,0x10000 - 80203f6c: f84a sd s2,48(sp) - 80203f6e: f44e sd s3,40(sp) - 80203f70: ec56 sd s5,24(sp) - 80203f72: e85a sd s6,16(sp) - 80203f74: e0a2 sd s0,64(sp) - 80203f76: fc26 sd s1,56(sp) - 80203f78: e45e sd s7,8(sp) - 80203f7a: 892a mv s2,a0 - for (uint32 i = 0; i < fat_sz; i++) - 80203f7c: 4981 li s3,0 - if (i == 0 && j < 2) - 80203f7e: 4b05 li s6,1 - if ((table[j] & 0x0FFFFFFF) == 0) - 80203f80: 1a7d addi s4,s4,-1 # fffffff <_start-0x70200001> - for(uint32 j = 0; j < fat_entries_per_sector; j++) - 80203f82: 08000a93 li s5,128 - uint32 current_fat_sec = fat_start_sector + i; - 80203f86: 00892403 lw s0,8(s2) - struct Buf *b = BufferCache::bread(0, current_fat_sec / 2); - 80203f8a: 4501 li a0,0 - for(uint32 j = 0; j < fat_entries_per_sector; j++) - 80203f8c: 4481 li s1,0 - uint32 current_fat_sec = fat_start_sector + i; - 80203f8e: 0134043b addw s0,s0,s3 - struct Buf *b = BufferCache::bread(0, current_fat_sec / 2); - 80203f92: 0014559b srliw a1,s0,0x1 - 80203f96: 52a040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 *table = (uint32 *)(b->data + (current_fat_sec % 2) * 512); - 80203f9a: 00147793 andi a5,s0,1 - 80203f9e: 07a6 slli a5,a5,0x9 - 80203fa0: 02878793 addi a5,a5,40 - struct Buf *b = BufferCache::bread(0, current_fat_sec / 2); - 80203fa4: 8baa mv s7,a0 - for(uint32 j = 0; j < fat_entries_per_sector; j++) - 80203fa6: 97aa add a5,a5,a0 - if (i == 0 && j < 2) - 80203fa8: 04098363 beqz s3,80203fee <_ZN15FAT32FileSystem13alloc_clusterEv+0x90> - if ((table[j] & 0x0FFFFFFF) == 0) - 80203fac: 4380 lw s0,0(a5) - 80203fae: 01447433 and s0,s0,s4 - 80203fb2: c421 beqz s0,80203ffa <_ZN15FAT32FileSystem13alloc_clusterEv+0x9c> - for(uint32 j = 0; j < fat_entries_per_sector; j++) - 80203fb4: 2485 addiw s1,s1,1 - 80203fb6: 0791 addi a5,a5,4 - 80203fb8: ff5498e3 bne s1,s5,80203fa8 <_ZN15FAT32FileSystem13alloc_clusterEv+0x4a> - BufferCache::brelse(b); - 80203fbc: 855e mv a0,s7 - 80203fbe: 618040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 i = 0; i < fat_sz; i++) - 80203fc2: 01c92783 lw a5,28(s2) - 80203fc6: 2985 addiw s3,s3,1 - 80203fc8: faf9efe3 bltu s3,a5,80203f86 <_ZN15FAT32FileSystem13alloc_clusterEv+0x28> - 80203fcc: 6406 ld s0,64(sp) - 80203fce: 74e2 ld s1,56(sp) - 80203fd0: 7942 ld s2,48(sp) - 80203fd2: 79a2 ld s3,40(sp) - 80203fd4: 6ae2 ld s5,24(sp) - 80203fd6: 6b42 ld s6,16(sp) - 80203fd8: 6ba2 ld s7,8(sp) - Drivers::uart_puts("[FAT32] Out of space!\n"); - 80203fda: 0000e517 auipc a0,0xe - 80203fde: 8fe50513 addi a0,a0,-1794 # 802118d8 - 80203fe2: 589040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - return 0; - 80203fe6: 4a01 li s4,0 - 80203fe8: a061 j 80204070 <_ZN15FAT32FileSystem13alloc_clusterEv+0x112> - for(uint32 j = 0; j < fat_entries_per_sector; j++) - 80203fea: 2485 addiw s1,s1,1 - 80203fec: 0791 addi a5,a5,4 - if (i == 0 && j < 2) - 80203fee: fe9b7ee3 bgeu s6,s1,80203fea <_ZN15FAT32FileSystem13alloc_clusterEv+0x8c> - if ((table[j] & 0x0FFFFFFF) == 0) - 80203ff2: 4380 lw s0,0(a5) - 80203ff4: 01447433 and s0,s0,s4 - 80203ff8: fc55 bnez s0,80203fb4 <_ZN15FAT32FileSystem13alloc_clusterEv+0x56> - table[j] = 0x0FFFFFFF; - 80203ffa: 0147a023 sw s4,0(a5) - BufferCache::bwrite(b); // Write back to disk - 80203ffe: 855e mv a0,s7 - 80204000: 5a2040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(b); - 80204004: 855e mv a0,s7 - 80204006: 5d0040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 8020400a: 01492783 lw a5,20(s2) - uint32 cluster_idx = i * fat_entries_per_sector + j; - 8020400e: 0079999b slliw s3,s3,0x7 - 80204012: 00998a3b addw s4,s3,s1 - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80204016: ffea0a9b addiw s5,s4,-2 - 8020401a: 02fa8abb mulw s5,s5,a5 - 8020401e: 00c92703 lw a4,12(s2) - 80204022: 00ea8abb addw s5,s5,a4 - for (uint32 k = 0; k < sectors_per_cluster; k++) - 80204026: cf95 beqz a5,80204062 <_ZN15FAT32FileSystem13alloc_clusterEv+0x104> - struct Buf *db = BufferCache::bread(0, (data_sec + k) / 2); - 80204028: 008a84bb addw s1,s5,s0 - 8020402c: 0014d59b srliw a1,s1,0x1 - 80204030: 4501 li a0,0 - 80204032: 48e040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - memset(db->data + ((data_sec + k) % 2) * 512, 0, 512); - 80204036: 8885 andi s1,s1,1 - struct Buf *db = BufferCache::bread(0, (data_sec + k) / 2); - 80204038: 89aa mv s3,a0 - memset(db->data + ((data_sec + k) % 2) * 512, 0, 512); - 8020403a: 04a6 slli s1,s1,0x9 - 8020403c: 02850513 addi a0,a0,40 - 80204040: 20000613 li a2,512 - 80204044: 4581 li a1,0 - 80204046: 9526 add a0,a0,s1 - 80204048: 5e3000ef jal 80204e2a <_Z6memsetPvij> - BufferCache::bwrite(db); - 8020404c: 854e mv a0,s3 - 8020404e: 554040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(db); - 80204052: 854e mv a0,s3 - 80204054: 582040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 k = 0; k < sectors_per_cluster; k++) - 80204058: 01492783 lw a5,20(s2) - 8020405c: 2405 addiw s0,s0,1 - 8020405e: fcf465e3 bltu s0,a5,80204028 <_ZN15FAT32FileSystem13alloc_clusterEv+0xca> - 80204062: 6406 ld s0,64(sp) - 80204064: 74e2 ld s1,56(sp) - 80204066: 7942 ld s2,48(sp) - 80204068: 79a2 ld s3,40(sp) - 8020406a: 6ae2 ld s5,24(sp) - 8020406c: 6b42 ld s6,16(sp) - 8020406e: 6ba2 ld s7,8(sp) -} - 80204070: 60a6 ld ra,72(sp) - 80204072: 8552 mv a0,s4 - 80204074: 7a02 ld s4,32(sp) - 80204076: 6161 addi sp,sp,80 - 80204078: 8082 ret - -000000008020407a <_ZN10FAT32Inode5writeEPKcjji>: - if (off > size) - 8020407a: 493c lw a5,80(a0) -{ - 8020407c: 7175 addi sp,sp,-144 - 8020407e: e506 sd ra,136(sp) - 80204080: ecd6 sd s5,88(sp) - 80204082: ec32 sd a2,24(sp) - 80204084: e03a sd a4,0(sp) - if (off > size) - 80204086: 08c7e663 bltu a5,a2,80204112 <_ZN10FAT32Inode5writeEPKcjji+0x98> - 8020408a: f0d2 sd s4,96(sp) - 8020408c: 8a2a mv s4,a0 - 8020408e: e122 sd s0,128(sp) - uint32 clus_sz = fs->bytes_per_cluster; - 80204090: 6d28 ld a0,88(a0) - uint32 clus = first_clus; - 80204092: 060a2403 lw s0,96(s4) - 80204096: e4de sd s7,72(sp) - 80204098: e0e2 sd s8,64(sp) - 8020409a: fc66 sd s9,56(sp) - 8020409c: 8bae mv s7,a1 - uint32 clus_sz = fs->bytes_per_cluster; - 8020409e: 01852c83 lw s9,24(a0) - 802040a2: 8c36 mv s8,a3 - if (clus == 0) - 802040a4: 1a040f63 beqz s0,80204262 <_ZN10FAT32Inode5writeEPKcjji+0x1e8> - 802040a8: fca6 sd s1,120(sp) - 802040aa: f8ca sd s2,112(sp) - 802040ac: f4ce sd s3,104(sp) - uint32 skip = off / clus_sz; - 802040ae: 67e2 ld a5,24(sp) - 802040b0: 0397dabb divuw s5,a5,s9 - while (skip > 0) - 802040b4: 0797e563 bltu a5,s9,8020411e <_ZN10FAT32Inode5writeEPKcjji+0xa4> - if (clus >= 0x0FFFFFF8) - 802040b8: 10000937 lui s2,0x10000 - return next & 0x0FFFFFFF; - 802040bc: 100009b7 lui s3,0x10000 - 802040c0: 19fd addi s3,s3,-1 # fffffff <_start-0x70200001> - if (clus >= 0x0FFFFFF8) - 802040c2: 195d addi s2,s2,-9 # ffffff7 <_start-0x70200009> - 802040c4: a019 j 802040ca <_ZN10FAT32Inode5writeEPKcjji+0x50> - while (skip > 0) - 802040c6: 040a8c63 beqz s5,8020411e <_ZN10FAT32Inode5writeEPKcjji+0xa4> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802040ca: 058a3783 ld a5,88(s4) - uint32 fat_offset = cluster * 4; - 802040ce: 0024141b slliw s0,s0,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802040d2: 0094549b srliw s1,s0,0x9 - 802040d6: 479c lw a5,8(a5) - uint32 ent_offset = fat_offset % 512; - 802040d8: 1ff47413 andi s0,s0,511 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802040dc: 4501 li a0,0 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802040de: 9cbd addw s1,s1,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802040e0: 0014d59b srliw a1,s1,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802040e4: 8885 andi s1,s1,1 - 802040e6: 04a6 slli s1,s1,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802040e8: 3d8040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 802040ec: 94a2 add s1,s1,s0 - 802040ee: 009507b3 add a5,a0,s1 - 802040f2: 5780 lw s0,40(a5) - skip--; - 802040f4: 3afd addiw s5,s5,-1 - BufferCache::brelse(b); - 802040f6: 4e0040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return next & 0x0FFFFFFF; - 802040fa: 01347433 and s0,s0,s3 - if (clus >= 0x0FFFFFF8) - 802040fe: fc8974e3 bgeu s2,s0,802040c6 <_ZN10FAT32Inode5writeEPKcjji+0x4c> - 80204102: 640a ld s0,128(sp) - 80204104: 74e6 ld s1,120(sp) - 80204106: 7946 ld s2,112(sp) - 80204108: 79a6 ld s3,104(sp) - 8020410a: 7a06 ld s4,96(sp) - 8020410c: 6ba6 ld s7,72(sp) - 8020410e: 6c06 ld s8,64(sp) - 80204110: 7ce2 ld s9,56(sp) - return -1; - 80204112: 5afd li s5,-1 -} - 80204114: 60aa ld ra,136(sp) - 80204116: 8556 mv a0,s5 - 80204118: 6ae6 ld s5,88(sp) - 8020411a: 6149 addi sp,sp,144 - 8020411c: 8082 ret - while (tot < n) - 8020411e: 1c0c0263 beqz s8,802042e2 <_ZN10FAT32Inode5writeEPKcjji+0x268> - uint32 current_off = off % clus_sz; - 80204122: 67e2 ld a5,24(sp) - if (next >= 0x0FFFFFF8) - 80204124: 10000737 lui a4,0x10000 - 80204128: e8da sd s6,80(sp) - uint32 current_off = off % clus_sz; - 8020412a: 0397f9bb remuw s3,a5,s9 - return next & 0x0FFFFFFF; - 8020412e: 100007b7 lui a5,0x10000 - 80204132: 17fd addi a5,a5,-1 # fffffff <_start-0x70200001> - 80204134: e43e sd a5,8(sp) - if (next >= 0x0FFFFFF8) - 80204136: ff770793 addi a5,a4,-9 # ffffff7 <_start-0x70200009> - 8020413a: f86a sd s10,48(sp) - 8020413c: f46e sd s11,40(sp) - uint32 tot = 0; - 8020413e: 4a81 li s5,0 - if (next >= 0x0FFFFFF8) - 80204140: e83e sd a5,16(sp) - 80204142: a815 j 80204176 <_ZN10FAT32Inode5writeEPKcjji+0xfc> - if (VM::copyin(myproc()->pagetable, (char *)(b->data + block_offset), (uint64)src, m) < 0) - 80204144: 13f010ef jal 80205a82 <_Z6myprocv> - 80204148: 7d28 ld a0,120(a0) - 8020414a: 02890593 addi a1,s2,40 - 8020414e: 86a6 mv a3,s1 - 80204150: 865e mv a2,s7 - 80204152: 95ee add a1,a1,s11 - 80204154: 32c020ef jal 80206480 <_ZN2VM6copyinEPyPcyy> - 80204158: 16054563 bltz a0,802042c2 <_ZN10FAT32Inode5writeEPKcjji+0x248> - BufferCache::bwrite(b); - 8020415c: 854a mv a0,s2 - 8020415e: 444040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(b); - 80204162: 854a mv a0,s2 - tot += m; - 80204164: 015b0abb addw s5,s6,s5 - BufferCache::brelse(b); - 80204168: 46e040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - src += m; - 8020416c: 9ba6 add s7,s7,s1 - current_off += m; - 8020416e: 013b09bb addw s3,s6,s3 - while (tot < n) - 80204172: 118af863 bgeu s5,s8,80204282 <_ZN10FAT32Inode5writeEPKcjji+0x208> - uint32 next = fs->next_cluster(clus); - 80204176: 058a3783 ld a5,88(s4) - if (current_off == clus_sz) - 8020417a: 073c8463 beq s9,s3,802041e2 <_ZN10FAT32Inode5writeEPKcjji+0x168> - uint32 off_in_sec = current_off % 512; - 8020417e: 1ff9fd93 andi s11,s3,511 - uint32 m = 512 - off_in_sec; - 80204182: 20000713 li a4,512 - uint32 sec_in_clus = current_off / 512; - 80204186: 0099d51b srliw a0,s3,0x9 - uint32 m = 512 - off_in_sec; - 8020418a: 41b705bb subw a1,a4,s11 - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 8020418e: 4bd8 lw a4,20(a5) - 80204190: ffe4049b addiw s1,s0,-2 - uint32 sec = fs->cluster_to_sector(clus) + sec_in_clus; - 80204194: 47d4 lw a3,12(a5) - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80204196: 02e487bb mulw a5,s1,a4 - if (n - tot < m) - 8020419a: 415c0d3b subw s10,s8,s5 - uint32 sec = fs->cluster_to_sector(clus) + sec_in_clus; - 8020419e: 9ea9 addw a3,a3,a0 - if (n - tot < m) - 802041a0: 000d051b sext.w a0,s10 - uint32 sec = fs->cluster_to_sector(clus) + sec_in_clus; - 802041a4: 00d784bb addw s1,a5,a3 - if (n - tot < m) - 802041a8: 00a5f363 bgeu a1,a0,802041ae <_ZN10FAT32Inode5writeEPKcjji+0x134> - 802041ac: 8d2e mv s10,a1 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 802041ae: 008a2503 lw a0,8(s4) - 802041b2: 0014d59b srliw a1,s1,0x1 - if (n - tot < m) - 802041b6: 000d0b1b sext.w s6,s10 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 802041ba: 306040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 block_offset = (sec % 2) * 512 + off_in_sec; - 802041be: 0014f793 andi a5,s1,1 - 802041c2: 07a6 slli a5,a5,0x9 - if (VM::copyin(myproc()->pagetable, (char *)(b->data + block_offset), (uint64)src, m) < 0) - 802041c4: 9dbe add s11,s11,a5 - if (isUser) - 802041c6: 6782 ld a5,0(sp) - if (VM::copyin(myproc()->pagetable, (char *)(b->data + block_offset), (uint64)src, m) < 0) - 802041c8: 020d1493 slli s1,s10,0x20 - struct Buf *b = BufferCache::bread(dev, sec / 2); - 802041cc: 892a mv s2,a0 - if (VM::copyin(myproc()->pagetable, (char *)(b->data + block_offset), (uint64)src, m) < 0) - 802041ce: 9081 srli s1,s1,0x20 - if (isUser) - 802041d0: fbb5 bnez a5,80204144 <_ZN10FAT32Inode5writeEPKcjji+0xca> - memmove(b->data + block_offset, src, m); - 802041d2: 02850513 addi a0,a0,40 - 802041d6: 865a mv a2,s6 - 802041d8: 85de mv a1,s7 - 802041da: 956e add a0,a0,s11 - 802041dc: 499000ef jal 80204e74 <_Z7memmovePvPKvj> - 802041e0: bfb5 j 8020415c <_ZN10FAT32Inode5writeEPKcjji+0xe2> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802041e2: 479c lw a5,8(a5) - uint32 fat_offset = cluster * 4; - 802041e4: 0024191b slliw s2,s0,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802041e8: 0099549b srliw s1,s2,0x9 - 802041ec: 00f4843b addw s0,s1,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802041f0: 0014559b srliw a1,s0,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802041f4: 8805 andi s0,s0,1 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802041f6: 4501 li a0,0 - uint32 ent_offset = fat_offset % 512; - 802041f8: 1fc97913 andi s2,s2,508 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802041fc: 0426 slli s0,s0,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802041fe: 2c2040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 80204202: 944a add s0,s0,s2 - 80204204: 008507b3 add a5,a0,s0 - 80204208: 5780 lw s0,40(a5) - BufferCache::brelse(b); - 8020420a: 3cc040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return next & 0x0FFFFFFF; - 8020420e: 67a2 ld a5,8(sp) - 80204210: 8c7d and s0,s0,a5 - if (next >= 0x0FFFFFF8) - 80204212: 67c2 ld a5,16(sp) - 80204214: 0087ea63 bltu a5,s0,80204228 <_ZN10FAT32Inode5writeEPKcjji+0x1ae> - 80204218: 058a3783 ld a5,88(s4) - 8020421c: 20000593 li a1,512 - 80204220: 4d81 li s11,0 - 80204222: 4501 li a0,0 - current_off = 0; - 80204224: 4981 li s3,0 - 80204226: b7a5 j 8020418e <_ZN10FAT32Inode5writeEPKcjji+0x114> - uint32 new_clus = fs->alloc_cluster(); - 80204228: 058a3503 ld a0,88(s4) - 8020422c: d33ff0ef jal 80203f5e <_ZN15FAT32FileSystem13alloc_clusterEv> - 80204230: 0005041b sext.w s0,a0 - if (new_clus == 0) - 80204234: c84d beqz s0,802042e6 <_ZN10FAT32Inode5writeEPKcjji+0x26c> - uint32 fat_sec = fs->fat_start_sector + (fat_offset / 512); - 80204236: 058a3783 ld a5,88(s4) - struct Buf *fat_b = BufferCache::bread(dev, fat_sec / 2); - 8020423a: 008a2503 lw a0,8(s4) - uint32 fat_sec = fs->fat_start_sector + (fat_offset / 512); - 8020423e: 479c lw a5,8(a5) - 80204240: 9cbd addw s1,s1,a5 - struct Buf *fat_b = BufferCache::bread(dev, fat_sec / 2); - 80204242: 0014d59b srliw a1,s1,0x1 - uint32 *entry = (uint32 *)(fat_b->data + (fat_sec % 2) * 512 + (fat_offset % 512)); - 80204246: 8885 andi s1,s1,1 - struct Buf *fat_b = BufferCache::bread(dev, fat_sec / 2); - 80204248: 278040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 *entry = (uint32 *)(fat_b->data + (fat_sec % 2) * 512 + (fat_offset % 512)); - 8020424c: 04a6 slli s1,s1,0x9 - *entry = new_clus; // Link - 8020424e: 94aa add s1,s1,a0 - 80204250: 94ca add s1,s1,s2 - 80204252: d480 sw s0,40(s1) - struct Buf *fat_b = BufferCache::bread(dev, fat_sec / 2); - 80204254: 89aa mv s3,a0 - BufferCache::bwrite(fat_b); - 80204256: 34c040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(fat_b); - 8020425a: 854e mv a0,s3 - 8020425c: 37a040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - clus = new_clus; - 80204260: bf65 j 80204218 <_ZN10FAT32Inode5writeEPKcjji+0x19e> - clus = fs->alloc_cluster(); - 80204262: cfdff0ef jal 80203f5e <_ZN15FAT32FileSystem13alloc_clusterEv> - 80204266: 0005041b sext.w s0,a0 - if (clus == 0) - 8020426a: c059 beqz s0,802042f0 <_ZN10FAT32Inode5writeEPKcjji+0x276> - update(); - 8020426c: 000a3783 ld a5,0(s4) - 80204270: fca6 sd s1,120(sp) - 80204272: f8ca sd s2,112(sp) - 80204274: 6b9c ld a5,16(a5) - 80204276: f4ce sd s3,104(sp) - first_clus = clus; - 80204278: 068a2023 sw s0,96(s4) - update(); - 8020427c: 8552 mv a0,s4 - 8020427e: 9782 jalr a5 - 80204280: b53d j 802040ae <_ZN10FAT32Inode5writeEPKcjji+0x34> - 80204282: 6b46 ld s6,80(sp) - 80204284: 7d42 ld s10,48(sp) - 80204286: 7da2 ld s11,40(sp) - if (off + n > size) - 80204288: 67e2 ld a5,24(sp) - 8020428a: 050a2683 lw a3,80(s4) - 8020428e: 0187873b addw a4,a5,s8 - 80204292: 87ba mv a5,a4 - 80204294: 00e6ef63 bltu a3,a4,802042b2 <_ZN10FAT32Inode5writeEPKcjji+0x238> - 80204298: 640a ld s0,128(sp) -} - 8020429a: 60aa ld ra,136(sp) - 8020429c: 74e6 ld s1,120(sp) - 8020429e: 7946 ld s2,112(sp) - 802042a0: 79a6 ld s3,104(sp) - 802042a2: 7a06 ld s4,96(sp) - 802042a4: 6ba6 ld s7,72(sp) - 802042a6: 6c06 ld s8,64(sp) - 802042a8: 7ce2 ld s9,56(sp) - 802042aa: 8556 mv a0,s5 - 802042ac: 6ae6 ld s5,88(sp) - 802042ae: 6149 addi sp,sp,144 - 802042b0: 8082 ret - update(); - 802042b2: 000a3703 ld a4,0(s4) - size = off + n; - 802042b6: 04fa2823 sw a5,80(s4) - update(); - 802042ba: 8552 mv a0,s4 - 802042bc: 6b1c ld a5,16(a4) - 802042be: 9782 jalr a5 - return tot; - 802042c0: bfe1 j 80204298 <_ZN10FAT32Inode5writeEPKcjji+0x21e> - BufferCache::brelse(b); - 802042c2: 854a mv a0,s2 - 802042c4: 312040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - return -1; - 802042c8: 5afd li s5,-1 - BufferCache::brelse(b); - 802042ca: 640a ld s0,128(sp) - 802042cc: 74e6 ld s1,120(sp) - 802042ce: 7946 ld s2,112(sp) - 802042d0: 79a6 ld s3,104(sp) - 802042d2: 7a06 ld s4,96(sp) - 802042d4: 6b46 ld s6,80(sp) - 802042d6: 6ba6 ld s7,72(sp) - 802042d8: 6c06 ld s8,64(sp) - 802042da: 7ce2 ld s9,56(sp) - 802042dc: 7d42 ld s10,48(sp) - 802042de: 7da2 ld s11,40(sp) - 802042e0: bd15 j 80204114 <_ZN10FAT32Inode5writeEPKcjji+0x9a> - while (tot < n) - 802042e2: 4a81 li s5,0 - 802042e4: b755 j 80204288 <_ZN10FAT32Inode5writeEPKcjji+0x20e> - 802042e6: 6b46 ld s6,80(sp) - 802042e8: 7d42 ld s10,48(sp) - 802042ea: 7da2 ld s11,40(sp) - return tot; - 802042ec: 2a81 sext.w s5,s5 - 802042ee: bf69 j 80204288 <_ZN10FAT32Inode5writeEPKcjji+0x20e> - 802042f0: 640a ld s0,128(sp) - 802042f2: 7a06 ld s4,96(sp) - 802042f4: 6ba6 ld s7,72(sp) - 802042f6: 6c06 ld s8,64(sp) - 802042f8: 7ce2 ld s9,56(sp) - return -1; - 802042fa: 5afd li s5,-1 - 802042fc: bd21 j 80204114 <_ZN10FAT32Inode5writeEPKcjji+0x9a> - -00000000802042fe <_ZN10FAT32Inode6createEPKcsss>: - Inode *exist = lookup(name); - 802042fe: 611c ld a5,0(a0) -{ - 80204300: 7115 addi sp,sp,-224 - 80204302: e5a6 sd s1,200(sp) - Inode *exist = lookup(name); - 80204304: 779c ld a5,40(a5) -{ - 80204306: fd4e sd s3,184(sp) - 80204308: f556 sd s5,168(sp) - 8020430a: ed86 sd ra,216(sp) - 8020430c: e032 sd a2,0(sp) - 8020430e: 84aa mv s1,a0 - 80204310: 8aae mv s5,a1 - Inode *exist = lookup(name); - 80204312: 9782 jalr a5 - 80204314: 89aa mv s3,a0 - if (exist) - 80204316: c901 beqz a0,80204326 <_ZN10FAT32Inode6createEPKcsss+0x28> -} - 80204318: 60ee ld ra,216(sp) - 8020431a: 64ae ld s1,200(sp) - 8020431c: 7aaa ld s5,168(sp) - 8020431e: 854e mv a0,s3 - 80204320: 79ea ld s3,184(sp) - 80204322: 612d addi sp,sp,224 - 80204324: 8082 ret - 80204326: f952 sd s4,176(sp) - memset(&de, 0, sizeof(de)); - 80204328: 01010a13 addi s4,sp,16 - 8020432c: 02000613 li a2,32 - 80204330: 4581 li a1,0 - 80204332: 8552 mv a0,s4 - 80204334: 2f7000ef jal 80204e2a <_Z6memsetPvij> - memset(dst, ' ', 11); - 80204338: 462d li a2,11 - 8020433a: 02000593 li a1,32 - 8020433e: 8552 mv a0,s4 - 80204340: 2eb000ef jal 80204e2a <_Z6memsetPvij> - for (; *src && *src != '.' && i < 8; src++) - 80204344: 000ac703 lbu a4,0(s5) - 80204348: c359 beqz a4,802043ce <_ZN10FAT32Inode6createEPKcsss+0xd0> - 8020434a: 85d2 mv a1,s4 - 8020434c: 008a8893 addi a7,s5,8 - 80204350: 8652 mv a2,s4 - 80204352: 87d6 mv a5,s5 - 80204354: 02e00813 li a6,46 - if (c >= 'a' && c <= 'z') - 80204358: 4365 li t1,25 - 8020435a: a821 j 80204372 <_ZN10FAT32Inode6createEPKcsss+0x74> - for (; *src && *src != '.' && i < 8; src++) - 8020435c: 0785 addi a5,a5,1 - if (c >= 'a' && c <= 'z') - 8020435e: 00d36463 bltu t1,a3,80204366 <_ZN10FAT32Inode6createEPKcsss+0x68> - c -= 32; - 80204362: 0ff57713 zext.b a4,a0 - dst[i++] = c; - 80204366: 00e60023 sb a4,0(a2) - for (; *src && *src != '.' && i < 8; src++) - 8020436a: 0007c703 lbu a4,0(a5) - 8020436e: 0605 addi a2,a2,1 - 80204370: cf39 beqz a4,802043ce <_ZN10FAT32Inode6createEPKcsss+0xd0> - if (c >= 'a' && c <= 'z') - 80204372: f9f7069b addiw a3,a4,-97 - 80204376: 0ff6f693 zext.b a3,a3 - c -= 32; - 8020437a: fe07051b addiw a0,a4,-32 - for (; *src && *src != '.' && i < 8; src++) - 8020437e: 01070463 beq a4,a6,80204386 <_ZN10FAT32Inode6createEPKcsss+0x88> - 80204382: fcf89de3 bne a7,a5,8020435c <_ZN10FAT32Inode6createEPKcsss+0x5e> - while (*src && *src != '.') - 80204386: 0007c703 lbu a4,0(a5) - 8020438a: 02e00693 li a3,46 - 8020438e: c321 beqz a4,802043ce <_ZN10FAT32Inode6createEPKcsss+0xd0> - 80204390: 22d70663 beq a4,a3,802045bc <_ZN10FAT32Inode6createEPKcsss+0x2be> - 80204394: 0017c703 lbu a4,1(a5) - src++; - 80204398: 0785 addi a5,a5,1 - while (*src && *src != '.') - 8020439a: fb7d bnez a4,80204390 <_ZN10FAT32Inode6createEPKcsss+0x92> - for (; *src && i < 11; src++) - 8020439c: 0007c703 lbu a4,0(a5) - 802043a0: c71d beqz a4,802043ce <_ZN10FAT32Inode6createEPKcsss+0xd0> - 802043a2: 00378813 addi a6,a5,3 - if (c >= 'a' && c <= 'z') - 802043a6: 4565 li a0,25 - 802043a8: f9f7069b addiw a3,a4,-97 - 802043ac: 0ff6f693 zext.b a3,a3 - for (; *src && i < 11; src++) - 802043b0: 0785 addi a5,a5,1 - c -= 32; - 802043b2: fe07061b addiw a2,a4,-32 - if (c >= 'a' && c <= 'z') - 802043b6: 00d56463 bltu a0,a3,802043be <_ZN10FAT32Inode6createEPKcsss+0xc0> - c -= 32; - 802043ba: 0ff67713 zext.b a4,a2 - dst[i++] = c; - 802043be: 00e58423 sb a4,8(a1) - for (; *src && i < 11; src++) - 802043c2: 0007c703 lbu a4,0(a5) - 802043c6: 0585 addi a1,a1,1 - 802043c8: c319 beqz a4,802043ce <_ZN10FAT32Inode6createEPKcsss+0xd0> - 802043ca: fcf81fe3 bne a6,a5,802043a8 <_ZN10FAT32Inode6createEPKcsss+0xaa> - de.attr = (type == T_DIR) ? ATTR_DIRECTORY : ATTR_ARCHIVE; - 802043ce: 6702 ld a4,0(sp) - 802043d0: 4785 li a5,1 - new_dir_clus = fs->alloc_cluster(); - 802043d2: 6ca8 ld a0,88(s1) - de.attr = (type == T_DIR) ? ATTR_DIRECTORY : ATTR_ARCHIVE; - 802043d4: 1af70963 beq a4,a5,80204586 <_ZN10FAT32Inode6createEPKcsss+0x288> - 802043d8: 02000793 li a5,32 - 802043dc: e9a2 sd s0,208(sp) - 802043de: e1ca sd s2,192(sp) - 802043e0: f15a sd s6,160(sp) - 802043e2: ed5e sd s7,152(sp) - 802043e4: e962 sd s8,144(sp) - 802043e6: e566 sd s9,136(sp) - 802043e8: e16a sd s10,128(sp) - 802043ea: fcee sd s11,120(sp) - 802043ec: 00f10da3 sb a5,27(sp) - de.fileSize = 0; - 802043f0: d602 sw zero,44(sp) - uint32 new_dir_clus = 0; - 802043f2: e402 sd zero,8(sp) - uint32 clus = first_clus; - 802043f4: 0604a903 lw s2,96(s1) - if (next >= 0x0FFFFFF8) - 802043f8: 10000bb7 lui s7,0x10000 - return next & 0x0FFFFFFF; - 802043fc: 10000c37 lui s8,0x10000 - if (data[off] == 0x00 || data[off] == 0xE5) - 80204400: 0e500d93 li s11,229 - return next & 0x0FFFFFFF; - 80204404: 1c7d addi s8,s8,-1 # fffffff <_start-0x70200001> - if (next >= 0x0FFFFFF8) - 80204406: 1bdd addi s7,s7,-9 # ffffff7 <_start-0x70200009> - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80204408: 495c lw a5,20(a0) - 8020440a: ffe9041b addiw s0,s2,-2 - 8020440e: 4558 lw a4,12(a0) - 80204410: 02f4043b mulw s0,s0,a5 - 80204414: 9c39 addw s0,s0,a4 - for (uint32 i = 0; i < fs->sectors_per_cluster; i++) - 80204416: c7b9 beqz a5,80204464 <_ZN10FAT32Inode6createEPKcsss+0x166> - 80204418: 4b01 li s6,0 - struct Buf *b = BufferCache::bread(dev, (sec + i) / 2); - 8020441a: 4488 lw a0,8(s1) - 8020441c: 01640d3b addw s10,s0,s6 - 80204420: 001d559b srliw a1,s10,0x1 - 80204424: 09c040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint8 *data = (uint8 *)b->data + ((sec + i) % 2) * 512; - 80204428: 001d7d13 andi s10,s10,1 - 8020442c: 009d1793 slli a5,s10,0x9 - 80204430: 22850713 addi a4,a0,552 - 80204434: 02878793 addi a5,a5,40 - 80204438: 0d26 slli s10,s10,0x9 - struct Buf *b = BufferCache::bread(dev, (sec + i) / 2); - 8020443a: 8caa mv s9,a0 - for (int off = 0; off < 512; off += 32) - 8020443c: 976a add a4,a4,s10 - 8020443e: 953e add a0,a0,a5 - if (data[off] == 0x00 || data[off] == 0xE5) - 80204440: 00054783 lbu a5,0(a0) - 80204444: 0e078c63 beqz a5,8020453c <_ZN10FAT32Inode6createEPKcsss+0x23e> - 80204448: 0fb78a63 beq a5,s11,8020453c <_ZN10FAT32Inode6createEPKcsss+0x23e> - for (int off = 0; off < 512; off += 32) - 8020444c: 02050513 addi a0,a0,32 - 80204450: fea718e3 bne a4,a0,80204440 <_ZN10FAT32Inode6createEPKcsss+0x142> - BufferCache::brelse(b); - 80204454: 8566 mv a0,s9 - 80204456: 180040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 i = 0; i < fs->sectors_per_cluster; i++) - 8020445a: 6ca8 ld a0,88(s1) - 8020445c: 2b05 addiw s6,s6,1 - 8020445e: 495c lw a5,20(a0) - 80204460: fafb6de3 bltu s6,a5,8020441a <_ZN10FAT32Inode6createEPKcsss+0x11c> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 80204464: 451c lw a5,8(a0) - uint32 fat_offset = cluster * 4; - 80204466: 0029141b slliw s0,s2,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 8020446a: 00945d1b srliw s10,s0,0x9 - 8020446e: 00fd093b addw s2,s10,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80204472: 0019559b srliw a1,s2,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80204476: 00197913 andi s2,s2,1 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 8020447a: 4501 li a0,0 - uint32 ent_offset = fat_offset % 512; - 8020447c: 1fc47413 andi s0,s0,508 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 80204480: 0926 slli s2,s2,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80204482: 03e040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 80204486: 9922 add s2,s2,s0 - 80204488: 012507b3 add a5,a0,s2 - 8020448c: 0287a903 lw s2,40(a5) - BufferCache::brelse(b); - 80204490: 146040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - uint32 new_parent_clus = fs->alloc_cluster(); - 80204494: 6ca8 ld a0,88(s1) - return next & 0x0FFFFFFF; - 80204496: 01897933 and s2,s2,s8 - if (next >= 0x0FFFFFF8) - 8020449a: f72bf7e3 bgeu s7,s2,80204408 <_ZN10FAT32Inode6createEPKcsss+0x10a> - uint32 new_parent_clus = fs->alloc_cluster(); - 8020449e: ac1ff0ef jal 80203f5e <_ZN15FAT32FileSystem13alloc_clusterEv> - 802044a2: 00050b9b sext.w s7,a0 - if (new_parent_clus == 0) - 802044a6: 0c0b8063 beqz s7,80204566 <_ZN10FAT32Inode6createEPKcsss+0x268> - uint32 fat_sec = fs->fat_start_sector + (fat_off / 512); - 802044aa: 6cbc ld a5,88(s1) - struct Buf *fb = BufferCache::bread(dev, fat_sec / 2); - 802044ac: 4488 lw a0,8(s1) - uint32 fat_sec = fs->fat_start_sector + (fat_off / 512); - 802044ae: 479c lw a5,8(a5) - 802044b0: 00fd0d3b addw s10,s10,a5 - struct Buf *fb = BufferCache::bread(dev, fat_sec / 2); - 802044b4: 001d559b srliw a1,s10,0x1 - 802044b8: 008040ef jal 802084c0 <_ZN11BufferCache5breadEjj> - *(uint32 *)(fb->data + (fat_sec % 2) * 512 + (fat_off % 512)) = new_parent_clus; - 802044bc: 001d7d13 andi s10,s10,1 - 802044c0: 009d1793 slli a5,s10,0x9 - 802044c4: 97aa add a5,a5,a0 - 802044c6: 97a2 add a5,a5,s0 - 802044c8: 0377a423 sw s7,40(a5) - struct Buf *fb = BufferCache::bread(dev, fat_sec / 2); - 802044cc: 89aa mv s3,a0 - BufferCache::bwrite(fb); - 802044ce: 0d4040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(fb); - 802044d2: 854e mv a0,s3 - 802044d4: 102040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - uint32 s = fs->cluster_to_sector(new_parent_clus); - 802044d8: 6cb8 ld a4,88(s1) - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 802044da: 3bf9 addiw s7,s7,-2 - for (uint32 k = 0; k < fs->sectors_per_cluster; k++) - 802044dc: 4981 li s3,0 - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 802044de: 4b5c lw a5,20(a4) - 802044e0: 4758 lw a4,12(a4) - 802044e2: 02fb8bbb mulw s7,s7,a5 - 802044e6: 00eb8bbb addw s7,s7,a4 - for (uint32 k = 0; k < fs->sectors_per_cluster; k++) - 802044ea: ef89 bnez a5,80204504 <_ZN10FAT32Inode6createEPKcsss+0x206> - 802044ec: a09d j 80204552 <_ZN10FAT32Inode6createEPKcsss+0x254> - BufferCache::bwrite(zb); - 802044ee: 854a mv a0,s2 - 802044f0: 0b2040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(zb); - 802044f4: 854a mv a0,s2 - 802044f6: 0e0040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - for (uint32 k = 0; k < fs->sectors_per_cluster; k++) - 802044fa: 6cbc ld a5,88(s1) - 802044fc: 2985 addiw s3,s3,1 - 802044fe: 4bdc lw a5,20(a5) - 80204500: 04f9f963 bgeu s3,a5,80204552 <_ZN10FAT32Inode6createEPKcsss+0x254> - struct Buf *zb = BufferCache::bread(dev, (s + k) / 2); - 80204504: 4488 lw a0,8(s1) - 80204506: 013b843b addw s0,s7,s3 - 8020450a: 0014559b srliw a1,s0,0x1 - 8020450e: 7b3030ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint8 *zdata = (uint8 *)zb->data + ((s + k) % 2) * 512; - 80204512: 8805 andi s0,s0,1 - 80204514: 02850793 addi a5,a0,40 - 80204518: 0426 slli s0,s0,0x9 - 8020451a: 943e add s0,s0,a5 - struct Buf *zb = BufferCache::bread(dev, (s + k) / 2); - 8020451c: 892a mv s2,a0 - memset(zdata, 0, 512); - 8020451e: 20000613 li a2,512 - 80204522: 4581 li a1,0 - 80204524: 8522 mv a0,s0 - 80204526: 105000ef jal 80204e2a <_Z6memsetPvij> - if (k == 0) - 8020452a: fc0992e3 bnez s3,802044ee <_ZN10FAT32Inode6createEPKcsss+0x1f0> - memmove(zdata, &de, 32); - 8020452e: 02000613 li a2,32 - 80204532: 85d2 mv a1,s4 - 80204534: 8522 mv a0,s0 - 80204536: 13f000ef jal 80204e74 <_Z7memmovePvPKvj> - 8020453a: bf55 j 802044ee <_ZN10FAT32Inode6createEPKcsss+0x1f0> - memmove(data + off, &de, 32); - 8020453c: 02000613 li a2,32 - 80204540: 85d2 mv a1,s4 - 80204542: 133000ef jal 80204e74 <_Z7memmovePvPKvj> - BufferCache::bwrite(b); - 80204546: 8566 mv a0,s9 - 80204548: 05a040ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(b); - 8020454c: 8566 mv a0,s9 - 8020454e: 088040ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - if (written && type == T_DIR) - 80204552: 6702 ld a4,0(sp) - 80204554: 4785 li a5,1 - 80204556: 06f70563 beq a4,a5,802045c0 <_ZN10FAT32Inode6createEPKcsss+0x2c2> - return lookup(name); - 8020455a: 609c ld a5,0(s1) - 8020455c: 85d6 mv a1,s5 - 8020455e: 8526 mv a0,s1 - 80204560: 779c ld a5,40(a5) - 80204562: 9782 jalr a5 - 80204564: 89aa mv s3,a0 - 80204566: 644e ld s0,208(sp) -} - 80204568: 60ee ld ra,216(sp) - 8020456a: 690e ld s2,192(sp) - 8020456c: 7a4a ld s4,176(sp) - 8020456e: 7b0a ld s6,160(sp) - 80204570: 6bea ld s7,152(sp) - 80204572: 6c4a ld s8,144(sp) - 80204574: 6caa ld s9,136(sp) - 80204576: 6d0a ld s10,128(sp) - 80204578: 7de6 ld s11,120(sp) - 8020457a: 64ae ld s1,200(sp) - 8020457c: 7aaa ld s5,168(sp) - 8020457e: 854e mv a0,s3 - 80204580: 79ea ld s3,184(sp) - 80204582: 612d addi sp,sp,224 - 80204584: 8082 ret - de.attr = (type == T_DIR) ? ATTR_DIRECTORY : ATTR_ARCHIVE; - 80204586: 47c1 li a5,16 - 80204588: 00f10da3 sb a5,27(sp) - new_dir_clus = fs->alloc_cluster(); - 8020458c: 9d3ff0ef jal 80203f5e <_ZN15FAT32FileSystem13alloc_clusterEv> - 80204590: 0005079b sext.w a5,a0 - 80204594: e43e sd a5,8(sp) - if (new_dir_clus == 0) - 80204596: 0e078b63 beqz a5,8020468c <_ZN10FAT32Inode6createEPKcsss+0x38e> - de.fstClusHI = (uint16)((new_dir_clus >> 16) & 0xFFFF); - 8020459a: 6722 ld a4,8(sp) - 8020459c: 6ca8 ld a0,88(s1) - 8020459e: e9a2 sd s0,208(sp) - 802045a0: 0107579b srliw a5,a4,0x10 - 802045a4: e1ca sd s2,192(sp) - 802045a6: f15a sd s6,160(sp) - 802045a8: ed5e sd s7,152(sp) - 802045aa: e962 sd s8,144(sp) - 802045ac: e566 sd s9,136(sp) - 802045ae: e16a sd s10,128(sp) - 802045b0: fcee sd s11,120(sp) - 802045b2: 02f11223 sh a5,36(sp) - de.fstClusLO = (uint16)(new_dir_clus & 0xFFFF); - 802045b6: 02e11523 sh a4,42(sp) - 802045ba: bd2d j 802043f4 <_ZN10FAT32Inode6createEPKcsss+0xf6> - src++; - 802045bc: 0785 addi a5,a5,1 - 802045be: bbf9 j 8020439c <_ZN10FAT32Inode6createEPKcsss+0x9e> - memset(&dot, 0, 32); - 802045c0: 03010993 addi s3,sp,48 - 802045c4: 02000613 li a2,32 - 802045c8: 4581 li a1,0 - 802045ca: 854e mv a0,s3 - 802045cc: 05f000ef jal 80204e2a <_Z6memsetPvij> - memset(dot.name, ' ', 11); - 802045d0: 462d li a2,11 - 802045d2: 02000593 li a1,32 - 802045d6: 854e mv a0,s3 - 802045d8: 053000ef jal 80204e2a <_Z6memsetPvij> - dot.fstClusHI = (uint16)((new_dir_clus >> 16) & 0xFFFF); - 802045dc: 66a2 ld a3,8(sp) - memset(&dotdot, 0, 32); - 802045de: 05010913 addi s2,sp,80 - dot.name[0] = '.'; - 802045e2: 02e00713 li a4,46 - dot.fstClusHI = (uint16)((new_dir_clus >> 16) & 0xFFFF); - 802045e6: 0106d79b srliw a5,a3,0x10 - dot.attr = ATTR_DIRECTORY; - 802045ea: 4441 li s0,16 - memset(&dotdot, 0, 32); - 802045ec: 02000613 li a2,32 - 802045f0: 4581 li a1,0 - 802045f2: 854a mv a0,s2 - dot.name[0] = '.'; - 802045f4: 02e10823 sb a4,48(sp) - dot.fstClusHI = (uint16)((new_dir_clus >> 16) & 0xFFFF); - 802045f8: 04f11223 sh a5,68(sp) - dot.fstClusLO = (uint16)(new_dir_clus & 0xFFFF); - 802045fc: 04d11523 sh a3,74(sp) - dot.attr = ATTR_DIRECTORY; - 80204600: 02810da3 sb s0,59(sp) - memset(&dotdot, 0, 32); - 80204604: 027000ef jal 80204e2a <_Z6memsetPvij> - memset(dotdot.name, ' ', 11); - 80204608: 462d li a2,11 - 8020460a: 02000593 li a1,32 - 8020460e: 854a mv a0,s2 - 80204610: 01b000ef jal 80204e2a <_Z6memsetPvij> - if (parent_clus_num == fs->root_cluster) - 80204614: 6cb8 ld a4,88(s1) - dotdot.name[0] = '.'; - 80204616: 668d lui a3,0x3 - uint32 parent_clus_num = this->first_clus; - 80204618: 50bc lw a5,96(s1) - if (parent_clus_num == fs->root_cluster) - 8020461a: 4b10 lw a2,16(a4) - dotdot.name[0] = '.'; - 8020461c: e2e68693 addi a3,a3,-466 # 2e2e <_start-0x801fd1d2> - 80204620: 04d11823 sh a3,80(sp) - dotdot.attr = ATTR_DIRECTORY; - 80204624: 04810da3 sb s0,91(sp) - if (parent_clus_num == fs->root_cluster) - 80204628: 06f60463 beq a2,a5,80204690 <_ZN10FAT32Inode6createEPKcsss+0x392> - dotdot.fstClusHI = (uint16)((parent_clus_num >> 16) & 0xFFFF); - 8020462c: 0107d69b srliw a3,a5,0x10 - dotdot.fstClusLO = (uint16)(parent_clus_num & 0xFFFF); - 80204630: 17c2 slli a5,a5,0x30 - 80204632: 93c1 srli a5,a5,0x30 - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 80204634: 65a2 ld a1,8(sp) - 80204636: 4b50 lw a2,20(a4) - 80204638: 4758 lw a4,12(a4) - 8020463a: ffe5841b addiw s0,a1,-2 - 8020463e: 02c4043b mulw s0,s0,a2 - struct Buf *zb = BufferCache::bread(dev, s / 2); - 80204642: 4488 lw a0,8(s1) - dotdot.fstClusHI = (uint16)((parent_clus_num >> 16) & 0xFFFF); - 80204644: 06d11223 sh a3,100(sp) - dotdot.fstClusLO = (uint16)(parent_clus_num & 0xFFFF); - 80204648: 06f11523 sh a5,106(sp) - return data_start_sector + (cluster - 2) * sectors_per_cluster; - 8020464c: 9c39 addw s0,s0,a4 - struct Buf *zb = BufferCache::bread(dev, s / 2); - 8020464e: 0014559b srliw a1,s0,0x1 - 80204652: 66f030ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint8 *zdata = (uint8 *)zb->data + (s % 2) * 512; - 80204656: 00147793 andi a5,s0,1 - 8020465a: 07a6 slli a5,a5,0x9 - 8020465c: 02850413 addi s0,a0,40 - 80204660: 943e add s0,s0,a5 - struct Buf *zb = BufferCache::bread(dev, s / 2); - 80204662: 8a2a mv s4,a0 - memmove(zdata, &dot, 32); // Offset 0 - 80204664: 85ce mv a1,s3 - 80204666: 02000613 li a2,32 - 8020466a: 8522 mv a0,s0 - 8020466c: 009000ef jal 80204e74 <_Z7memmovePvPKvj> - memmove(zdata + 32, &dotdot, 32); // Offset 32 - 80204670: 02000613 li a2,32 - 80204674: 85ca mv a1,s2 - 80204676: 02040513 addi a0,s0,32 - 8020467a: 7fa000ef jal 80204e74 <_Z7memmovePvPKvj> - BufferCache::bwrite(zb); - 8020467e: 8552 mv a0,s4 - 80204680: 723030ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(zb); - 80204684: 8552 mv a0,s4 - 80204686: 751030ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - 8020468a: bdc1 j 8020455a <_ZN10FAT32Inode6createEPKcsss+0x25c> - 8020468c: 7a4a ld s4,176(sp) - 8020468e: b169 j 80204318 <_ZN10FAT32Inode6createEPKcsss+0x1a> - 80204690: 4781 li a5,0 - 80204692: 4681 li a3,0 - 80204694: b745 j 80204634 <_ZN10FAT32Inode6createEPKcsss+0x336> - -0000000080204696 <_ZN15FAT32FileSystem18free_cluster_chainEj>: -{ - 80204696: 7139 addi sp,sp,-64 - 80204698: ec4e sd s3,24(sp) - while (cluster >= 2 && cluster < 0x0FFFFFF8) - 8020469a: 100009b7 lui s3,0x10000 -{ - 8020469e: fc06 sd ra,56(sp) - while (cluster >= 2 && cluster < 0x0FFFFFF8) - 802046a0: ffe5879b addiw a5,a1,-2 - 802046a4: 19d5 addi s3,s3,-11 # ffffff5 <_start-0x7020000b> - 802046a6: 08f9e463 bltu s3,a5,8020472e <_ZN15FAT32FileSystem18free_cluster_chainEj+0x98> - 802046aa: e852 sd s4,16(sp) - return next & 0x0FFFFFFF; - 802046ac: 10000a37 lui s4,0x10000 - 802046b0: f04a sd s2,32(sp) - 802046b2: e05a sd s6,0(sp) - 802046b4: f822 sd s0,48(sp) - 802046b6: f426 sd s1,40(sp) - 802046b8: e456 sd s5,8(sp) - 802046ba: 8b2e mv s6,a1 - 802046bc: 892a mv s2,a0 - 802046be: 1a7d addi s4,s4,-1 # fffffff <_start-0x70200001> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802046c0: 00892483 lw s1,8(s2) - uint32 fat_offset = cluster * 4; - 802046c4: 002b1b1b slliw s6,s6,0x2 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802046c8: 009b541b srliw s0,s6,0x9 - 802046cc: 9ca1 addw s1,s1,s0 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802046ce: 0014d59b srliw a1,s1,0x1 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802046d2: 8885 andi s1,s1,1 - uint32 ent_offset = fat_offset % 512; - 802046d4: 1fcb7a93 andi s5,s6,508 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802046d8: 4501 li a0,0 - uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; - 802046da: 04a6 slli s1,s1,0x9 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802046dc: 5e5030ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 next = *(uint32 *)(b->data + block_offset); - 802046e0: 94d6 add s1,s1,s5 - 802046e2: 009507b3 add a5,a0,s1 - 802046e6: 0287ab03 lw s6,40(a5) - BufferCache::brelse(b); - 802046ea: 6ed030ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802046ee: 00892783 lw a5,8(s2) - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802046f2: 4501 li a0,0 - return next & 0x0FFFFFFF; - 802046f4: 014b7b33 and s6,s6,s4 - uint32 fat_sector = fat_start_sector + (fat_offset / 512); - 802046f8: 9c3d addw s0,s0,a5 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 802046fa: 0014559b srliw a1,s0,0x1 - uint32 *entry = (uint32 *)(b->data + (fat_sector % 2) * 512 + ent_offset); - 802046fe: 8805 andi s0,s0,1 - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 80204700: 5c1030ef jal 802084c0 <_ZN11BufferCache5breadEjj> - uint32 *entry = (uint32 *)(b->data + (fat_sector % 2) * 512 + ent_offset); - 80204704: 0426 slli s0,s0,0x9 - *entry = 0; - 80204706: 942a add s0,s0,a0 - 80204708: 9456 add s0,s0,s5 - 8020470a: 02042423 sw zero,40(s0) - struct Buf *b = BufferCache::bread(0, fat_sector / 2); - 8020470e: 84aa mv s1,a0 - BufferCache::bwrite(b); - 80204710: 693030ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - BufferCache::brelse(b); - 80204714: 8526 mv a0,s1 - 80204716: 6c1030ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - while (cluster >= 2 && cluster < 0x0FFFFFF8) - 8020471a: ffeb079b addiw a5,s6,-2 - 8020471e: faf9f1e3 bgeu s3,a5,802046c0 <_ZN15FAT32FileSystem18free_cluster_chainEj+0x2a> - 80204722: 7442 ld s0,48(sp) - 80204724: 74a2 ld s1,40(sp) - 80204726: 7902 ld s2,32(sp) - 80204728: 6a42 ld s4,16(sp) - 8020472a: 6aa2 ld s5,8(sp) - 8020472c: 6b02 ld s6,0(sp) -} - 8020472e: 70e2 ld ra,56(sp) - 80204730: 69e2 ld s3,24(sp) - 80204732: 6121 addi sp,sp,64 - 80204734: 8082 ret - -0000000080204736 <_ZN10FAT32Inode8truncateEv>: - if (first_clus == 0) - 80204736: 512c lw a1,96(a0) -{ - 80204738: 1141 addi sp,sp,-16 - 8020473a: e022 sd s0,0(sp) - 8020473c: e406 sd ra,8(sp) - 8020473e: 842a mv s0,a0 - if (first_clus == 0) - 80204740: ed99 bnez a1,8020475e <_ZN10FAT32Inode8truncateEv+0x28> - if (size != 0) - 80204742: 493c lw a5,80(a0) - 80204744: cb89 beqz a5,80204756 <_ZN10FAT32Inode8truncateEv+0x20> - update(); - 80204746: 611c ld a5,0(a0) -} - 80204748: 6402 ld s0,0(sp) - 8020474a: 60a2 ld ra,8(sp) - update(); - 8020474c: 6b9c ld a5,16(a5) - size = 0; - 8020474e: 04052823 sw zero,80(a0) -} - 80204752: 0141 addi sp,sp,16 - update(); - 80204754: 8782 jr a5 -} - 80204756: 60a2 ld ra,8(sp) - 80204758: 6402 ld s0,0(sp) - 8020475a: 0141 addi sp,sp,16 - 8020475c: 8082 ret - fs->free_cluster_chain(first_clus); - 8020475e: 6d28 ld a0,88(a0) - 80204760: f37ff0ef jal 80204696 <_ZN15FAT32FileSystem18free_cluster_chainEj> - update(); - 80204764: 601c ld a5,0(s0) - size = 0; - 80204766: 04042823 sw zero,80(s0) - first_clus = 0; - 8020476a: 06042023 sw zero,96(s0) - update(); - 8020476e: 8522 mv a0,s0 -} - 80204770: 6402 ld s0,0(sp) - 80204772: 60a2 ld ra,8(sp) - update(); - 80204774: 6b9c ld a5,16(a5) -} - 80204776: 0141 addi sp,sp,16 - update(); - 80204778: 8782 jr a5 - -000000008020477a <_Z10fat32_testv>: - -// Test Function -void fat32_test() -{ - 8020477a: 7135 addi sp,sp,-160 - 8020477c: e922 sd s0,144(sp) - static bool inited = false; - if (!inited) - 8020477e: 00019417 auipc s0,0x19 - 80204782: 44240413 addi s0,s0,1090 # 8021dbc0 <_ZZ10fat32_testvE6inited> - 80204786: 00044783 lbu a5,0(s0) -{ - 8020478a: ed06 sd ra,152(sp) - if (!inited) - 8020478c: 0e078963 beqz a5,8020487e <_Z10fat32_testv+0x104> - { - fat32_fs.init(); - inited = true; - } - - Drivers::uart_puts("\n[FAT32] Starting Test via Syscall...\n"); - 80204790: 0000d517 auipc a0,0xd - 80204794: 16050513 addi a0,a0,352 # 802118f0 - 80204798: 5d2040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - Inode *root = fat32_fs.root(); - 8020479c: 00019517 auipc a0,0x19 - 802047a0: 42c50513 addi a0,a0,1068 # 8021dbc8 - 802047a4: 974ff0ef jal 80203918 <_ZN15FAT32FileSystem4rootEv> - 802047a8: 842a mv s0,a0 - if (root) - 802047aa: 10050263 beqz a0,802048ae <_Z10fat32_testv+0x134> - { - Drivers::uart_puts("[FAT32] Root Inode retrieved. Inum: "); - 802047ae: 0000d517 auipc a0,0xd - 802047b2: 16a50513 addi a0,a0,362 # 80211918 - 802047b6: e526 sd s1,136(sp) - 802047b8: 5b2040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(root->inum); - 802047bc: 4448 lw a0,12(s0) - 802047be: 60a040ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts("\n"); - 802047c2: 0000d517 auipc a0,0xd - 802047c6: 05e50513 addi a0,a0,94 # 80211820 - 802047ca: 5a0040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - Drivers::uart_puts("[FAT32] Looking for TEST.TXT...\n"); - 802047ce: 0000d517 auipc a0,0xd - 802047d2: 17250513 addi a0,a0,370 # 80211940 - 802047d6: 594040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Inode *node = root->lookup("test.txt"); - 802047da: 601c ld a5,0(s0) - 802047dc: 0000d597 auipc a1,0xd - 802047e0: 18c58593 addi a1,a1,396 # 80211968 - 802047e4: 8522 mv a0,s0 - 802047e6: 779c ld a5,40(a5) - 802047e8: 9782 jalr a5 - 802047ea: 84aa mv s1,a0 - - if (node) - 802047ec: c151 beqz a0,80204870 <_Z10fat32_testv+0xf6> - { - Drivers::uart_puts("[FAT32] Found TEST.TXT! Size: "); - 802047ee: 0000d517 auipc a0,0xd - 802047f2: 18a50513 addi a0,a0,394 # 80211978 - 802047f6: e14a sd s2,128(sp) - 802047f8: 572040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(node->size); - 802047fc: 48a8 lw a0,80(s1) - Drivers::uart_puts("\n"); - - char buf[128]; - int n = node->read(buf, 0, 127, 0); - 802047fe: 890a mv s2,sp - Drivers::uart_put_int(node->size); - 80204800: 5c8040ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts("\n"); - 80204804: 0000d517 auipc a0,0xd - 80204808: 01c50513 addi a0,a0,28 # 80211820 - 8020480c: 55e040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - int n = node->read(buf, 0, 127, 0); - 80204810: 609c ld a5,0(s1) - 80204812: 4701 li a4,0 - 80204814: 07f00693 li a3,127 - 80204818: 6f9c ld a5,24(a5) - 8020481a: 4601 li a2,0 - 8020481c: 85ca mv a1,s2 - 8020481e: 8526 mv a0,s1 - 80204820: 9782 jalr a5 - if (n > 0) - 80204822: 0aa05563 blez a0,802048cc <_Z10fat32_testv+0x152> - { - buf[n] = 0; - 80204826: 08050793 addi a5,a0,128 - 8020482a: 978a add a5,a5,sp - Drivers::uart_puts("[FAT32] Content:\n>> "); - 8020482c: 0000d517 auipc a0,0xd - 80204830: 16c50513 addi a0,a0,364 # 80211998 - buf[n] = 0; - 80204834: f8078023 sb zero,-128(a5) - Drivers::uart_puts("[FAT32] Content:\n>> "); - 80204838: 532040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(buf); - 8020483c: 854a mv a0,s2 - 8020483e: 52c040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("\n"); - 80204842: 0000d517 auipc a0,0xd - 80204846: fde50513 addi a0,a0,-34 # 80211820 - 8020484a: 520040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - else - { - Drivers::uart_puts("[FAT32] Read returned 0.\n"); - } - VFS::iput(node); - 8020484e: 8526 mv a0,s1 - 80204850: 18c000ef jal 802049dc <_ZN3VFS4iputEP5Inode> - 80204854: 690a ld s2,128(sp) - } - else - { - Drivers::uart_puts("[FAT32] TEST.TXT not found.\n"); - } - VFS::iput(root); - 80204856: 8522 mv a0,s0 - 80204858: 184000ef jal 802049dc <_ZN3VFS4iputEP5Inode> - { - Drivers::uart_puts("[FAT32] Failed to get root inode.\n"); - } - - Drivers::uart_puts("[FAT32] Test Finished.\n"); - 8020485c: 644a ld s0,144(sp) - 8020485e: 64aa ld s1,136(sp) - 80204860: 60ea ld ra,152(sp) - Drivers::uart_puts("[FAT32] Test Finished.\n"); - 80204862: 0000d517 auipc a0,0xd - 80204866: 1b650513 addi a0,a0,438 # 80211a18 - 8020486a: 610d addi sp,sp,160 - Drivers::uart_puts("[FAT32] Test Finished.\n"); - 8020486c: 4fe0406f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("[FAT32] TEST.TXT not found.\n"); - 80204870: 0000d517 auipc a0,0xd - 80204874: 16050513 addi a0,a0,352 # 802119d0 - 80204878: 4f2040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 8020487c: bfe9 j 80204856 <_Z10fat32_testv+0xdc> - fat32_fs.init(); - 8020487e: 00019517 auipc a0,0x19 - 80204882: 34a50513 addi a0,a0,842 # 8021dbc8 - 80204886: dd1fe0ef jal 80203656 <_ZN15FAT32FileSystem4initEv> - inited = true; - 8020488a: 4785 li a5,1 - Drivers::uart_puts("\n[FAT32] Starting Test via Syscall...\n"); - 8020488c: 0000d517 auipc a0,0xd - 80204890: 06450513 addi a0,a0,100 # 802118f0 - inited = true; - 80204894: 00f40023 sb a5,0(s0) - Drivers::uart_puts("\n[FAT32] Starting Test via Syscall...\n"); - 80204898: 4d2040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Inode *root = fat32_fs.root(); - 8020489c: 00019517 auipc a0,0x19 - 802048a0: 32c50513 addi a0,a0,812 # 8021dbc8 - 802048a4: 874ff0ef jal 80203918 <_ZN15FAT32FileSystem4rootEv> - 802048a8: 842a mv s0,a0 - if (root) - 802048aa: f00512e3 bnez a0,802047ae <_Z10fat32_testv+0x34> - Drivers::uart_puts("[FAT32] Failed to get root inode.\n"); - 802048ae: 0000d517 auipc a0,0xd - 802048b2: 14250513 addi a0,a0,322 # 802119f0 - 802048b6: 4b4040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 802048ba: 644a ld s0,144(sp) - 802048bc: 60ea ld ra,152(sp) - Drivers::uart_puts("[FAT32] Test Finished.\n"); - 802048be: 0000d517 auipc a0,0xd - 802048c2: 15a50513 addi a0,a0,346 # 80211a18 - 802048c6: 610d addi sp,sp,160 - Drivers::uart_puts("[FAT32] Test Finished.\n"); - 802048c8: 4a20406f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("[FAT32] Read returned 0.\n"); - 802048cc: 0000d517 auipc a0,0xd - 802048d0: 0e450513 addi a0,a0,228 # 802119b0 - 802048d4: 496040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 802048d8: bf9d j 8020484e <_Z10fat32_testv+0xd4> - -00000000802048da <_ZN10FAT32InodeD1Ev>: - partition_lba = lba; - 802048da: 8082 ret - -00000000802048dc <_ZN15FAT32FileSystemD1Ev>: - this->fat_sz = fat_sz; - 802048dc: 8082 ret - -00000000802048de <_ZN10FAT32InodeD0Ev>: - partition_lba = lba; - 802048de: 07800593 li a1,120 - 802048e2: 0280106f j 8020590a <_ZdlPvm> - -00000000802048e6 <_ZN15FAT32FileSystemD0Ev>: - this->fat_sz = fat_sz; - 802048e6: 02000593 li a1,32 - 802048ea: 0200106f j 8020590a <_ZdlPvm> - -00000000802048ee <_GLOBAL__sub_I_fat32_fs>: - Inode *create(const char *name, short type, short major, short minor) override; - void truncate() override; - int unlink(const char *name) override; -}; - -class FAT32FileSystem : public FileSystem - 802048ee: 00010797 auipc a5,0x10 - 802048f2: 08278793 addi a5,a5,130 # 80214970 <_ZTV15FAT32FileSystem+0x10> - 802048f6: 00019717 auipc a4,0x19 - 802048fa: 2cf73923 sd a5,722(a4) # 8021dbc8 - 802048fe: 8082 ret - -0000000080204900 <_ZN5Inode7getattrEP5kstat>: - -void Inode::getattr(struct kstat *st) -{ - st->dev = dev; - st->ino = inum; - st->type = type; - 80204900: 04e55703 lhu a4,78(a0) - 80204904: 04855783 lhu a5,72(a0) - st->dev = dev; - 80204908: 00852803 lw a6,8(a0) - st->ino = inum; - 8020490c: 4550 lw a2,12(a0) - st->nlink = nlink; - st->size = size; - 8020490e: 05056683 lwu a3,80(a0) - st->type = type; - 80204912: 0107171b slliw a4,a4,0x10 - 80204916: 8fd9 or a5,a5,a4 - st->dev = dev; - 80204918: 0105a023 sw a6,0(a1) - st->ino = inum; - 8020491c: c1d0 sw a2,4(a1) - st->type = type; - 8020491e: c59c sw a5,8(a1) - st->size = size; - 80204920: e994 sd a3,16(a1) - - st->uid = 0; - st->gid = 0; - 80204922: 0205a023 sw zero,32(a1) - st->mode = 0; - 80204926: 0005bc23 sd zero,24(a1) -} - 8020492a: 8082 ret - -000000008020492c <_ZL8skipelemPKcPc>: -{ - 8020492c: 1101 addi sp,sp,-32 - 8020492e: e822 sd s0,16(sp) - 80204930: ec06 sd ra,24(sp) - 80204932: e426 sd s1,8(sp) - 80204934: e04a sd s2,0(sp) - while (*path == '/') - 80204936: 00054783 lbu a5,0(a0) - 8020493a: 02f00713 li a4,47 -{ - 8020493e: 842a mv s0,a0 - 80204940: 852e mv a0,a1 - while (*path == '/') - 80204942: 06e79d63 bne a5,a4,802049bc <_ZL8skipelemPKcPc+0x90> - 80204946: 00144783 lbu a5,1(s0) - path++; - 8020494a: 0405 addi s0,s0,1 - while (*path == '/') - 8020494c: fee78de3 beq a5,a4,80204946 <_ZL8skipelemPKcPc+0x1a> - if (*path == 0) - 80204950: cba5 beqz a5,802049c0 <_ZL8skipelemPKcPc+0x94> - while (*path != '/' && *path != 0) - 80204952: 85a2 mv a1,s0 - 80204954: 892a mv s2,a0 - 80204956: 84a2 mv s1,s0 - 80204958: 4601 li a2,0 - 8020495a: 02e78663 beq a5,a4,80204986 <_ZL8skipelemPKcPc+0x5a> - 8020495e: 02f00713 li a4,47 - 80204962: c791 beqz a5,8020496e <_ZL8skipelemPKcPc+0x42> - 80204964: 00144783 lbu a5,1(s0) - path++; - 80204968: 0405 addi s0,s0,1 - while (*path != '/' && *path != 0) - 8020496a: fee79ce3 bne a5,a4,80204962 <_ZL8skipelemPKcPc+0x36> - len = path - s; - 8020496e: 40b40633 sub a2,s0,a1 - if (len >= 128) - 80204972: 0006071b sext.w a4,a2 - 80204976: 07f00793 li a5,127 - 8020497a: 02e7ce63 blt a5,a4,802049b6 <_ZL8skipelemPKcPc+0x8a> - 8020497e: 2601 sext.w a2,a2 - name[len] = 0; - 80204980: 00c50933 add s2,a0,a2 - 80204984: 84a2 mv s1,s0 - memmove(name, s, len); - 80204986: 4ee000ef jal 80204e74 <_Z7memmovePvPKvj> - name[len] = 0; - 8020498a: 00090023 sb zero,0(s2) - while (*path == '/') - 8020498e: 00044703 lbu a4,0(s0) - 80204992: 02f00793 li a5,47 - 80204996: 00f71963 bne a4,a5,802049a8 <_ZL8skipelemPKcPc+0x7c> - 8020499a: 02f00713 li a4,47 - 8020499e: 0014c783 lbu a5,1(s1) - path++; - 802049a2: 0485 addi s1,s1,1 - while (*path == '/') - 802049a4: fee78de3 beq a5,a4,8020499e <_ZL8skipelemPKcPc+0x72> -} - 802049a8: 60e2 ld ra,24(sp) - 802049aa: 6442 ld s0,16(sp) - 802049ac: 6902 ld s2,0(sp) - 802049ae: 8526 mv a0,s1 - 802049b0: 64a2 ld s1,8(sp) - 802049b2: 6105 addi sp,sp,32 - 802049b4: 8082 ret - if (len >= 128) - 802049b6: 07f00613 li a2,127 - 802049ba: b7d1 j 8020497e <_ZL8skipelemPKcPc+0x52> - while (*path != '/' && *path != 0) - 802049bc: 85a2 mv a1,s0 - if (*path == 0) - 802049be: f3c5 bnez a5,8020495e <_ZL8skipelemPKcPc+0x32> -} - 802049c0: 60e2 ld ra,24(sp) - 802049c2: 6442 ld s0,16(sp) - return nullptr; - 802049c4: 4481 li s1,0 -} - 802049c6: 6902 ld s2,0(sp) - 802049c8: 8526 mv a0,s1 - 802049ca: 64a2 ld s1,8(sp) - 802049cc: 6105 addi sp,sp,32 - 802049ce: 8082 ret - -00000000802049d0 <_ZN3VFS4initEv>: - -namespace VFS -{ - void init() - { - Drivers::uart_puts("[VFS] Inode subsystem initialized.\n"); - 802049d0: 0000d517 auipc a0,0xd - 802049d4: 06050513 addi a0,a0,96 # 80211a30 - 802049d8: 3920406f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -00000000802049dc <_ZN3VFS4iputEP5Inode>: - } - - void iput(Inode *ip) - { - if (ip == nullptr) - 802049dc: c931 beqz a0,80204a30 <_ZN3VFS4iputEP5Inode+0x54> - { - 802049de: 1101 addi sp,sp,-32 - 802049e0: e426 sd s1,8(sp) - return; - - ip->lock.acquire(); - 802049e2: 01850493 addi s1,a0,24 - { - 802049e6: e822 sd s0,16(sp) - 802049e8: 842a mv s0,a0 - ip->lock.acquire(); - 802049ea: 8526 mv a0,s1 - { - 802049ec: ec06 sd ra,24(sp) - ip->lock.acquire(); - 802049ee: 240010ef jal 80205c2e <_ZN5Mutex7acquireEv> - if(ip->ref_cnt < 1) - 802049f2: 481c lw a5,16(s0) - 802049f4: 02f05263 blez a5,80204a18 <_ZN3VFS4iputEP5Inode+0x3c> - { - Drivers::uart_puts("panic: iput ref\n"); - while (1) - ; - } - ip->ref_cnt--; - 802049f8: 37fd addiw a5,a5,-1 - int ref = ip->ref_cnt; - ip->lock.release(); - 802049fa: 8526 mv a0,s1 - ip->ref_cnt--; - 802049fc: c81c sw a5,16(s0) - 802049fe: 0007849b sext.w s1,a5 - ip->lock.release(); - 80204a02: 29e010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - - if (ref == 0) - 80204a06: e085 bnez s1,80204a26 <_ZN3VFS4iputEP5Inode+0x4a> - { - delete ip; - 80204a08: 601c ld a5,0(s0) - 80204a0a: 8522 mv a0,s0 - } - } - 80204a0c: 6442 ld s0,16(sp) - 80204a0e: 60e2 ld ra,24(sp) - 80204a10: 64a2 ld s1,8(sp) - delete ip; - 80204a12: 679c ld a5,8(a5) - } - 80204a14: 6105 addi sp,sp,32 - delete ip; - 80204a16: 8782 jr a5 - Drivers::uart_puts("panic: iput ref\n"); - 80204a18: 0000d517 auipc a0,0xd - 80204a1c: 04050513 addi a0,a0,64 # 80211a58 - 80204a20: 34a040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204a24: a001 j 80204a24 <_ZN3VFS4iputEP5Inode+0x48> - } - 80204a26: 60e2 ld ra,24(sp) - 80204a28: 6442 ld s0,16(sp) - 80204a2a: 64a2 ld s1,8(sp) - 80204a2c: 6105 addi sp,sp,32 - 80204a2e: 8082 ret - 80204a30: 8082 ret - -0000000080204a32 <_ZN3VFS4idupEP5Inode>: - - Inode* idup(Inode *ip) - { - 80204a32: 1101 addi sp,sp,-32 - 80204a34: e822 sd s0,16(sp) - 80204a36: ec06 sd ra,24(sp) - 80204a38: 842a mv s0,a0 - if (ip == nullptr) - 80204a3a: cd11 beqz a0,80204a56 <_ZN3VFS4idupEP5Inode+0x24> - 80204a3c: e426 sd s1,8(sp) - return nullptr; - - ip->lock.acquire(); - 80204a3e: 01850493 addi s1,a0,24 - 80204a42: 8526 mv a0,s1 - 80204a44: 1ea010ef jal 80205c2e <_ZN5Mutex7acquireEv> - ip->ref_cnt++; - 80204a48: 481c lw a5,16(s0) - ip->lock.release(); - 80204a4a: 8526 mv a0,s1 - ip->ref_cnt++; - 80204a4c: 2785 addiw a5,a5,1 - 80204a4e: c81c sw a5,16(s0) - ip->lock.release(); - 80204a50: 250010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - 80204a54: 64a2 ld s1,8(sp) - return ip; - } - 80204a56: 60e2 ld ra,24(sp) - 80204a58: 8522 mv a0,s0 - 80204a5a: 6442 ld s0,16(sp) - 80204a5c: 6105 addi sp,sp,32 - 80204a5e: 8082 ret - -0000000080204a60 <_ZN3VFS5ilockEP5Inode>: - - void ilock(Inode *ip) - { - if (ip == 0 || ip->ref_cnt < 1) - 80204a60: c501 beqz a0,80204a68 <_ZN3VFS5ilockEP5Inode+0x8> - 80204a62: 491c lw a5,16(a0) - 80204a64: 00f04b63 bgtz a5,80204a7a <_ZN3VFS5ilockEP5Inode+0x1a> - { - 80204a68: 1141 addi sp,sp,-16 - { - Drivers::uart_puts("panic: ilock\n"); - 80204a6a: 0000d517 auipc a0,0xd - 80204a6e: 00650513 addi a0,a0,6 # 80211a70 - { - 80204a72: e406 sd ra,8(sp) - Drivers::uart_puts("panic: ilock\n"); - 80204a74: 2f6040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204a78: a001 j 80204a78 <_ZN3VFS5ilockEP5Inode+0x18> - ; - } - - ip->lock.acquire(); - 80204a7a: 0561 addi a0,a0,24 - 80204a7c: 1b20106f j 80205c2e <_ZN5Mutex7acquireEv> - -0000000080204a80 <_ZN3VFS7iunlockEP5Inode>: - - } - - void iunlock(Inode *ip) - { - 80204a80: 1101 addi sp,sp,-32 - 80204a82: ec06 sd ra,24(sp) - 80204a84: e822 sd s0,16(sp) - 80204a86: e426 sd s1,8(sp) - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204a88: c901 beqz a0,80204a98 <_ZN3VFS7iunlockEP5Inode+0x18> - 80204a8a: 01850493 addi s1,a0,24 - 80204a8e: 842a mv s0,a0 - 80204a90: 8526 mv a0,s1 - 80204a92: 23e010ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204a96: e901 bnez a0,80204aa6 <_ZN3VFS7iunlockEP5Inode+0x26> - { - Drivers::uart_puts("panic: iunlock\n"); - 80204a98: 0000d517 auipc a0,0xd - 80204a9c: fe850513 addi a0,a0,-24 # 80211a80 - 80204aa0: 2ca040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204aa4: a001 j 80204aa4 <_ZN3VFS7iunlockEP5Inode+0x24> - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204aa6: 481c lw a5,16(s0) - 80204aa8: fef058e3 blez a5,80204a98 <_ZN3VFS7iunlockEP5Inode+0x18> - ; - } - ip->lock.release(); - } - 80204aac: 6442 ld s0,16(sp) - 80204aae: 60e2 ld ra,24(sp) - ip->lock.release(); - 80204ab0: 8526 mv a0,s1 - } - 80204ab2: 64a2 ld s1,8(sp) - 80204ab4: 6105 addi sp,sp,32 - ip->lock.release(); - 80204ab6: 1ea0106f j 80205ca0 <_ZN5Mutex7releaseEv> - -0000000080204aba <_ZN3VFS10iunlockputEP5Inode>: - - void iunlockput(Inode *ip) - { - if (!ip) - 80204aba: c121 beqz a0,80204afa <_ZN3VFS10iunlockputEP5Inode+0x40> - { - 80204abc: 1101 addi sp,sp,-32 - 80204abe: e426 sd s1,8(sp) - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204ac0: 01850493 addi s1,a0,24 - { - 80204ac4: e822 sd s0,16(sp) - 80204ac6: 842a mv s0,a0 - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204ac8: 8526 mv a0,s1 - { - 80204aca: ec06 sd ra,24(sp) - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204acc: 204010ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204ad0: e901 bnez a0,80204ae0 <_ZN3VFS10iunlockputEP5Inode+0x26> - Drivers::uart_puts("panic: iunlock\n"); - 80204ad2: 0000d517 auipc a0,0xd - 80204ad6: fae50513 addi a0,a0,-82 # 80211a80 - 80204ada: 290040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204ade: a001 j 80204ade <_ZN3VFS10iunlockputEP5Inode+0x24> - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204ae0: 481c lw a5,16(s0) - 80204ae2: fef058e3 blez a5,80204ad2 <_ZN3VFS10iunlockputEP5Inode+0x18> - ip->lock.release(); - 80204ae6: 8526 mv a0,s1 - 80204ae8: 1b8010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - return; - iunlock(ip); - iput(ip); - 80204aec: 8522 mv a0,s0 - } - 80204aee: 6442 ld s0,16(sp) - 80204af0: 60e2 ld ra,24(sp) - 80204af2: 64a2 ld s1,8(sp) - 80204af4: 6105 addi sp,sp,32 - iput(ip); - 80204af6: ee7ff06f j 802049dc <_ZN3VFS4iputEP5Inode> - 80204afa: 8082 ret - -0000000080204afc <_ZN3VFS10mount_rootEP5Inode>: - - void mount_root(Inode *root) - { - if (global_root_inode) - 80204afc: 00019717 auipc a4,0x19 - 80204b00: 0ec70713 addi a4,a4,236 # 8021dbe8 <_ZL17global_root_inode> - 80204b04: 6314 ld a3,0(a4) - { - 80204b06: 87aa mv a5,a0 - if (global_root_inode) - 80204b08: c699 beqz a3,80204b16 <_ZN3VFS10mount_rootEP5Inode+0x1a> - { - Drivers::uart_puts("VFS: Root already mounted!\n"); - 80204b0a: 0000d517 auipc a0,0xd - 80204b0e: f8650513 addi a0,a0,-122 # 80211a90 - 80204b12: 2580406f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - return; - } - global_root_inode = root; - Drivers::uart_puts("[VFS] Root filesystem mounted.\n"); - 80204b16: 0000d517 auipc a0,0xd - 80204b1a: f9a50513 addi a0,a0,-102 # 80211ab0 - global_root_inode = root; - 80204b1e: e31c sd a5,0(a4) - Drivers::uart_puts("[VFS] Root filesystem mounted.\n"); - 80204b20: 24a0406f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -0000000080204b24 <_ZN3VFS8get_rootEv>: - } - - Inode *get_root() - { - 80204b24: 1101 addi sp,sp,-32 - 80204b26: e426 sd s1,8(sp) - if (global_root_inode == nullptr) - 80204b28: 00019497 auipc s1,0x19 - 80204b2c: 0c048493 addi s1,s1,192 # 8021dbe8 <_ZL17global_root_inode> - { - 80204b30: e822 sd s0,16(sp) - if (global_root_inode == nullptr) - 80204b32: 6080 ld s0,0(s1) - { - 80204b34: ec06 sd ra,24(sp) - if (global_root_inode == nullptr) - 80204b36: c015 beqz s0,80204b5a <_ZN3VFS8get_rootEv+0x36> - ip->lock.acquire(); - 80204b38: 01840493 addi s1,s0,24 - 80204b3c: 8526 mv a0,s1 - 80204b3e: 0f0010ef jal 80205c2e <_ZN5Mutex7acquireEv> - ip->ref_cnt++; - 80204b42: 481c lw a5,16(s0) - ip->lock.release(); - 80204b44: 8526 mv a0,s1 - ip->ref_cnt++; - 80204b46: 2785 addiw a5,a5,1 - 80204b48: c81c sw a5,16(s0) - ip->lock.release(); - 80204b4a: 156010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - mount_root(fat32_fs.root()); - } - if (!global_root_inode) - return nullptr; - return idup(global_root_inode); - } - 80204b4e: 60e2 ld ra,24(sp) - 80204b50: 8522 mv a0,s0 - 80204b52: 6442 ld s0,16(sp) - 80204b54: 64a2 ld s1,8(sp) - 80204b56: 6105 addi sp,sp,32 - 80204b58: 8082 ret - Drivers::uart_puts("[VFS] Lazy init: Mounting FAT32...\n"); - 80204b5a: 0000d517 auipc a0,0xd - 80204b5e: f7650513 addi a0,a0,-138 # 80211ad0 - 80204b62: 208040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - fat32_fs.init(); - 80204b66: 00010517 auipc a0,0x10 - 80204b6a: f2253503 ld a0,-222(a0) # 80214a88 <_GLOBAL_OFFSET_TABLE_+0x28> - 80204b6e: ae9fe0ef jal 80203656 <_ZN15FAT32FileSystem4initEv> - mount_root(fat32_fs.root()); - 80204b72: 00010517 auipc a0,0x10 - 80204b76: f1653503 ld a0,-234(a0) # 80214a88 <_GLOBAL_OFFSET_TABLE_+0x28> - 80204b7a: d9ffe0ef jal 80203918 <_ZN15FAT32FileSystem4rootEv> - if (global_root_inode) - 80204b7e: 6098 ld a4,0(s1) - mount_root(fat32_fs.root()); - 80204b80: 87aa mv a5,a0 - if (global_root_inode) - 80204b82: cf19 beqz a4,80204ba0 <_ZN3VFS8get_rootEv+0x7c> - Drivers::uart_puts("VFS: Root already mounted!\n"); - 80204b84: 0000d517 auipc a0,0xd - 80204b88: f0c50513 addi a0,a0,-244 # 80211a90 - 80204b8c: 1de040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - if (!global_root_inode) - 80204b90: 6080 ld s0,0(s1) - 80204b92: f05d bnez s0,80204b38 <_ZN3VFS8get_rootEv+0x14> - } - 80204b94: 60e2 ld ra,24(sp) - 80204b96: 8522 mv a0,s0 - 80204b98: 6442 ld s0,16(sp) - 80204b9a: 64a2 ld s1,8(sp) - 80204b9c: 6105 addi sp,sp,32 - 80204b9e: 8082 ret - Drivers::uart_puts("[VFS] Root filesystem mounted.\n"); - 80204ba0: 0000d517 auipc a0,0xd - 80204ba4: f1050513 addi a0,a0,-240 # 80211ab0 - global_root_inode = root; - 80204ba8: e09c sd a5,0(s1) - Drivers::uart_puts("[VFS] Root filesystem mounted.\n"); - 80204baa: 1c0040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 80204bae: b7cd j 80204b90 <_ZN3VFS8get_rootEv+0x6c> - -0000000080204bb0 <_ZN3VFS5nameiEPKc>: - - Inode *namei(const char *path) - { - 80204bb0: 7131 addi sp,sp,-192 - 80204bb2: f922 sd s0,176(sp) - 80204bb4: fd06 sd ra,184(sp) - 80204bb6: 842a mv s0,a0 - 80204bb8: f526 sd s1,168(sp) - 80204bba: f14a sd s2,160(sp) - char name[128]; - Inode *ip, *next; - struct Proc *p = myproc(); - 80204bbc: 6c7000ef jal 80205a82 <_Z6myprocv> - - // 1. 确定起点 - if (*path == '/') - 80204bc0: 00044703 lbu a4,0(s0) - 80204bc4: 02f00793 li a5,47 - 80204bc8: 0cf70063 beq a4,a5,80204c88 <_ZN3VFS5nameiEPKc+0xd8> - { - ip = get_root(); - } - else - { - if (p->cwd == nullptr) - 80204bcc: 6164 ld s1,192(a0) - 80204bce: cccd beqz s1,80204c88 <_ZN3VFS5nameiEPKc+0xd8> - ip->lock.acquire(); - 80204bd0: 01848913 addi s2,s1,24 - 80204bd4: 854a mv a0,s2 - 80204bd6: ed4e sd s3,152(sp) - 80204bd8: e952 sd s4,144(sp) - 80204bda: 054010ef jal 80205c2e <_ZN5Mutex7acquireEv> - ip->ref_cnt++; - 80204bde: 489c lw a5,16(s1) - ip->lock.release(); - 80204be0: 854a mv a0,s2 - ip->ref_cnt++; - 80204be2: 2785 addiw a5,a5,1 - 80204be4: c89c sw a5,16(s1) - ip->lock.release(); - 80204be6: 0ba010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - { - ip = idup(p->cwd); - } - } - - if (ip == nullptr) - 80204bea: 890a mv s2,sp - return nullptr; - - while ((path = skipelem(path, name)) != nullptr) - { - if (strcmp(name, ".") == 0) - 80204bec: 0000d997 auipc s3,0xd - 80204bf0: cdc98993 addi s3,s3,-804 # 802118c8 - { - continue; - } - - if (strcmp(name, "..") == 0) - 80204bf4: 0000da17 auipc s4,0xd - 80204bf8: cdca0a13 addi s4,s4,-804 # 802118d0 - while ((path = skipelem(path, name)) != nullptr) - 80204bfc: 8522 mv a0,s0 - 80204bfe: 85ca mv a1,s2 - 80204c00: d2dff0ef jal 8020492c <_ZL8skipelemPKcPc> - 80204c04: 842a mv s0,a0 - 80204c06: c955 beqz a0,80204cba <_ZN3VFS5nameiEPKc+0x10a> - if (strcmp(name, ".") == 0) - 80204c08: 85ce mv a1,s3 - 80204c0a: 854a mv a0,s2 - 80204c0c: 300000ef jal 80204f0c <_Z6strcmpPKcS0_> - 80204c10: d575 beqz a0,80204bfc <_ZN3VFS5nameiEPKc+0x4c> - if (strcmp(name, "..") == 0) - 80204c12: 85d2 mv a1,s4 - 80204c14: 854a mv a0,s2 - 80204c16: 2f6000ef jal 80204f0c <_Z6strcmpPKcS0_> - 80204c1a: ed39 bnez a0,80204c78 <_ZN3VFS5nameiEPKc+0xc8> - { - Inode *root = get_root(); - 80204c1c: e556 sd s5,136(sp) - 80204c1e: e15a sd s6,128(sp) - 80204c20: f05ff0ef jal 80204b24 <_ZN3VFS8get_rootEv> - bool is_root = (ip->inum == root->inum); - 80204c24: 00c52a83 lw s5,12(a0) - 80204c28: 00c4ab03 lw s6,12(s1) - iput(root); - 80204c2c: db1ff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - - if (is_root) - 80204c30: 095b0263 beq s6,s5,80204cb4 <_ZN3VFS5nameiEPKc+0x104> - 80204c34: 6aaa ld s5,136(sp) - 80204c36: 6b0a ld s6,128(sp) - if (ip == 0 || ip->ref_cnt < 1) - 80204c38: 489c lw a5,16(s1) - 80204c3a: 04f05063 blez a5,80204c7a <_ZN3VFS5nameiEPKc+0xca> - ip->lock.acquire(); - 80204c3e: e556 sd s5,136(sp) - 80204c40: 01848a93 addi s5,s1,24 - 80204c44: 8556 mv a0,s5 - 80204c46: 7e9000ef jal 80205c2e <_ZN5Mutex7acquireEv> - } - } - - ilock(ip); - - if (ip->type != T_DIR) - 80204c4a: 04849703 lh a4,72(s1) - 80204c4e: 4785 li a5,1 - 80204c50: 06f71e63 bne a4,a5,80204ccc <_ZN3VFS5nameiEPKc+0x11c> - { - iunlockput(ip); - return nullptr; - } - - next = ip->lookup(name); - 80204c54: 609c ld a5,0(s1) - 80204c56: e15a sd s6,128(sp) - 80204c58: 85ca mv a1,s2 - 80204c5a: 779c ld a5,40(a5) - 80204c5c: 8526 mv a0,s1 - 80204c5e: 9782 jalr a5 - 80204c60: 8b2a mv s6,a0 - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204c62: 8556 mv a0,s5 - 80204c64: 06c010ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204c68: e51d bnez a0,80204c96 <_ZN3VFS5nameiEPKc+0xe6> - Drivers::uart_puts("panic: iunlock\n"); - 80204c6a: 0000d517 auipc a0,0xd - 80204c6e: e1650513 addi a0,a0,-490 # 80211a80 - 80204c72: 0f8040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204c76: a001 j 80204c76 <_ZN3VFS5nameiEPKc+0xc6> - if (ip == 0 || ip->ref_cnt < 1) - 80204c78: f0e1 bnez s1,80204c38 <_ZN3VFS5nameiEPKc+0x88> - Drivers::uart_puts("panic: ilock\n"); - 80204c7a: 0000d517 auipc a0,0xd - 80204c7e: df650513 addi a0,a0,-522 # 80211a70 - 80204c82: 0e8040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204c86: a001 j 80204c86 <_ZN3VFS5nameiEPKc+0xd6> - ip = get_root(); - 80204c88: e9dff0ef jal 80204b24 <_ZN3VFS8get_rootEv> - 80204c8c: 84aa mv s1,a0 - if (ip == nullptr) - 80204c8e: c535 beqz a0,80204cfa <_ZN3VFS5nameiEPKc+0x14a> - 80204c90: ed4e sd s3,152(sp) - 80204c92: e952 sd s4,144(sp) - 80204c94: bf99 j 80204bea <_ZN3VFS5nameiEPKc+0x3a> - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204c96: 489c lw a5,16(s1) - 80204c98: fcf059e3 blez a5,80204c6a <_ZN3VFS5nameiEPKc+0xba> - ip->lock.release(); - 80204c9c: 8556 mv a0,s5 - 80204c9e: 002010ef jal 80205ca0 <_ZN5Mutex7releaseEv> - iput(ip); - 80204ca2: 8526 mv a0,s1 - 80204ca4: d39ff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - iunlockput(ip); - - ip = next; - if (ip == nullptr) - 80204ca8: 040b0b63 beqz s6,80204cfe <_ZN3VFS5nameiEPKc+0x14e> - ip = next; - 80204cac: 84da mv s1,s6 - 80204cae: 6aaa ld s5,136(sp) - 80204cb0: 6b0a ld s6,128(sp) - 80204cb2: b7a9 j 80204bfc <_ZN3VFS5nameiEPKc+0x4c> - 80204cb4: 6aaa ld s5,136(sp) - 80204cb6: 6b0a ld s6,128(sp) - 80204cb8: b791 j 80204bfc <_ZN3VFS5nameiEPKc+0x4c> - 80204cba: 69ea ld s3,152(sp) - 80204cbc: 6a4a ld s4,144(sp) - return nullptr; - } - - return ip; - } - 80204cbe: 70ea ld ra,184(sp) - 80204cc0: 744a ld s0,176(sp) - 80204cc2: 790a ld s2,160(sp) - 80204cc4: 8526 mv a0,s1 - 80204cc6: 74aa ld s1,168(sp) - 80204cc8: 6129 addi sp,sp,192 - 80204cca: 8082 ret - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204ccc: 8556 mv a0,s5 - 80204cce: 002010ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204cd2: c501 beqz a0,80204cda <_ZN3VFS5nameiEPKc+0x12a> - 80204cd4: 489c lw a5,16(s1) - 80204cd6: 00f04963 bgtz a5,80204ce8 <_ZN3VFS5nameiEPKc+0x138> - Drivers::uart_puts("panic: iunlock\n"); - 80204cda: 0000d517 auipc a0,0xd - 80204cde: da650513 addi a0,a0,-602 # 80211a80 - 80204ce2: 088040ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204ce6: a001 j 80204ce6 <_ZN3VFS5nameiEPKc+0x136> - ip->lock.release(); - 80204ce8: 8556 mv a0,s5 - 80204cea: 7b7000ef jal 80205ca0 <_ZN5Mutex7releaseEv> - iput(ip); - 80204cee: 8526 mv a0,s1 - 80204cf0: cedff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - 80204cf4: 69ea ld s3,152(sp) - 80204cf6: 6a4a ld s4,144(sp) - 80204cf8: 6aaa ld s5,136(sp) - return nullptr; - 80204cfa: 4481 li s1,0 - 80204cfc: b7c9 j 80204cbe <_ZN3VFS5nameiEPKc+0x10e> - 80204cfe: 69ea ld s3,152(sp) - 80204d00: 6a4a ld s4,144(sp) - 80204d02: 6aaa ld s5,136(sp) - 80204d04: 6b0a ld s6,128(sp) - 80204d06: 4481 li s1,0 - 80204d08: bf5d j 80204cbe <_ZN3VFS5nameiEPKc+0x10e> - -0000000080204d0a <_ZN3VFS11nameiparentEPKcPc>: - - Inode *nameiparent(const char* path, char* name) - { - 80204d0a: 7179 addi sp,sp,-48 - 80204d0c: f022 sd s0,32(sp) - 80204d0e: e84a sd s2,16(sp) - 80204d10: f406 sd ra,40(sp) - 80204d12: ec26 sd s1,24(sp) - Inode* ip; - Inode* next; - - if (*path == '/') - 80204d14: 00054703 lbu a4,0(a0) - 80204d18: 02f00793 li a5,47 - { - 80204d1c: 842a mv s0,a0 - 80204d1e: 892e mv s2,a1 - if (*path == '/') - 80204d20: 08f70863 beq a4,a5,80204db0 <_ZN3VFS11nameiparentEPKcPc+0xa6> - ip = get_root(); - else - ip = idup(myproc()->cwd ? myproc()->cwd : get_root()); - 80204d24: 55f000ef jal 80205a82 <_Z6myprocv> - 80204d28: 617c ld a5,192(a0) - 80204d2a: c7d9 beqz a5,80204db8 <_ZN3VFS11nameiparentEPKcPc+0xae> - 80204d2c: 557000ef jal 80205a82 <_Z6myprocv> - 80204d30: 6164 ld s1,192(a0) - if (ip == nullptr) - 80204d32: cc91 beqz s1,80204d4e <_ZN3VFS11nameiparentEPKcPc+0x44> - 80204d34: e44e sd s3,8(sp) - ip->lock.acquire(); - 80204d36: 01848993 addi s3,s1,24 - 80204d3a: 854e mv a0,s3 - 80204d3c: 6f3000ef jal 80205c2e <_ZN5Mutex7acquireEv> - ip->ref_cnt++; - 80204d40: 489c lw a5,16(s1) - ip->lock.release(); - 80204d42: 854e mv a0,s3 - ip->ref_cnt++; - 80204d44: 2785 addiw a5,a5,1 - 80204d46: c89c sw a5,16(s1) - ip->lock.release(); - 80204d48: 759000ef jal 80205ca0 <_ZN5Mutex7releaseEv> - return ip; - 80204d4c: 69a2 ld s3,8(sp) - - while ((path = skipelem(path, name)) != nullptr) - 80204d4e: 8522 mv a0,s0 - 80204d50: 85ca mv a1,s2 - 80204d52: bdbff0ef jal 8020492c <_ZL8skipelemPKcPc> - 80204d56: 842a mv s0,a0 - 80204d58: c159 beqz a0,80204dde <_ZN3VFS11nameiparentEPKcPc+0xd4> - { - if (*path == 0) - 80204d5a: 00044783 lbu a5,0(s0) - 80204d5e: c7c1 beqz a5,80204de6 <_ZN3VFS11nameiparentEPKcPc+0xdc> - if (ip == 0 || ip->ref_cnt < 1) - 80204d60: c481 beqz s1,80204d68 <_ZN3VFS11nameiparentEPKcPc+0x5e> - 80204d62: 489c lw a5,16(s1) - 80204d64: 00f04963 bgtz a5,80204d76 <_ZN3VFS11nameiparentEPKcPc+0x6c> - Drivers::uart_puts("panic: ilock\n"); - 80204d68: 0000d517 auipc a0,0xd - 80204d6c: d0850513 addi a0,a0,-760 # 80211a70 - 80204d70: 7fb030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204d74: a001 j 80204d74 <_ZN3VFS11nameiparentEPKcPc+0x6a> - ip->lock.acquire(); - 80204d76: e44e sd s3,8(sp) - 80204d78: 01848993 addi s3,s1,24 - 80204d7c: 854e mv a0,s3 - 80204d7e: 6b1000ef jal 80205c2e <_ZN5Mutex7acquireEv> - { - return ip; - } - - ilock(ip); - if (ip->type != T_DIR) - 80204d82: 04849703 lh a4,72(s1) - 80204d86: 4785 li a5,1 - { - iunlockput(ip); - return nullptr; - } - - next = ip->lookup(name); - 80204d88: 85ca mv a1,s2 - 80204d8a: 8526 mv a0,s1 - if (ip->type != T_DIR) - 80204d8c: 06f71463 bne a4,a5,80204df4 <_ZN3VFS11nameiparentEPKcPc+0xea> - next = ip->lookup(name); - 80204d90: 609c ld a5,0(s1) - 80204d92: e052 sd s4,0(sp) - 80204d94: 779c ld a5,40(a5) - 80204d96: 9782 jalr a5 - 80204d98: 8a2a mv s4,a0 - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204d9a: 854e mv a0,s3 - 80204d9c: 735000ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204da0: e105 bnez a0,80204dc0 <_ZN3VFS11nameiparentEPKcPc+0xb6> - Drivers::uart_puts("panic: iunlock\n"); - 80204da2: 0000d517 auipc a0,0xd - 80204da6: cde50513 addi a0,a0,-802 # 80211a80 - 80204daa: 7c1030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204dae: a001 j 80204dae <_ZN3VFS11nameiparentEPKcPc+0xa4> - ip = get_root(); - 80204db0: d75ff0ef jal 80204b24 <_ZN3VFS8get_rootEv> - 80204db4: 84aa mv s1,a0 - 80204db6: bf61 j 80204d4e <_ZN3VFS11nameiparentEPKcPc+0x44> - ip = idup(myproc()->cwd ? myproc()->cwd : get_root()); - 80204db8: d6dff0ef jal 80204b24 <_ZN3VFS8get_rootEv> - 80204dbc: 84aa mv s1,a0 - 80204dbe: bf95 j 80204d32 <_ZN3VFS11nameiparentEPKcPc+0x28> - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204dc0: 489c lw a5,16(s1) - ip->lock.release(); - 80204dc2: 854e mv a0,s3 - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204dc4: fcf05fe3 blez a5,80204da2 <_ZN3VFS11nameiparentEPKcPc+0x98> - ip->lock.release(); - 80204dc8: 6d9000ef jal 80205ca0 <_ZN5Mutex7releaseEv> - iput(ip); - 80204dcc: 8526 mv a0,s1 - 80204dce: c0fff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - iunlockput(ip); - - ip = next; - if (!ip) - 80204dd2: 020a0f63 beqz s4,80204e10 <_ZN3VFS11nameiparentEPKcPc+0x106> - ip = next; - 80204dd6: 84d2 mv s1,s4 - 80204dd8: 69a2 ld s3,8(sp) - 80204dda: 6a02 ld s4,0(sp) - 80204ddc: bf8d j 80204d4e <_ZN3VFS11nameiparentEPKcPc+0x44> - return nullptr; - } - iput(ip); - 80204dde: 8526 mv a0,s1 - 80204de0: bfdff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return nullptr; - 80204de4: 4481 li s1,0 - return nullptr; - } - 80204de6: 70a2 ld ra,40(sp) - 80204de8: 7402 ld s0,32(sp) - 80204dea: 6942 ld s2,16(sp) - 80204dec: 8526 mv a0,s1 - 80204dee: 64e2 ld s1,24(sp) - 80204df0: 6145 addi sp,sp,48 - 80204df2: 8082 ret - if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) - 80204df4: 854e mv a0,s3 - 80204df6: 6db000ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 80204dfa: c501 beqz a0,80204e02 <_ZN3VFS11nameiparentEPKcPc+0xf8> - 80204dfc: 489c lw a5,16(s1) - 80204dfe: 00f04d63 bgtz a5,80204e18 <_ZN3VFS11nameiparentEPKcPc+0x10e> - Drivers::uart_puts("panic: iunlock\n"); - 80204e02: 0000d517 auipc a0,0xd - 80204e06: c7e50513 addi a0,a0,-898 # 80211a80 - 80204e0a: 761030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80204e0e: a001 j 80204e0e <_ZN3VFS11nameiparentEPKcPc+0x104> - 80204e10: 69a2 ld s3,8(sp) - 80204e12: 6a02 ld s4,0(sp) - return nullptr; - 80204e14: 4481 li s1,0 - 80204e16: bfc1 j 80204de6 <_ZN3VFS11nameiparentEPKcPc+0xdc> - ip->lock.release(); - 80204e18: 854e mv a0,s3 - 80204e1a: 687000ef jal 80205ca0 <_ZN5Mutex7releaseEv> - iput(ip); - 80204e1e: 8526 mv a0,s1 - 80204e20: bbdff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return nullptr; - 80204e24: 4481 li s1,0 - 80204e26: 69a2 ld s3,8(sp) - 80204e28: bf7d j 80204de6 <_ZN3VFS11nameiparentEPKcPc+0xdc> - -0000000080204e2a <_Z6memsetPvij>: -#include "lib/string.h" - -void *memset(void *dst, int c, uint n) -{ - char *cdst = (char *)dst; - for (uint i = 0; i < n; i++) - 80204e2a: ce09 beqz a2,80204e44 <_Z6memsetPvij+0x1a> - 80204e2c: 1602 slli a2,a2,0x20 - 80204e2e: 9201 srli a2,a2,0x20 - cdst[i] = c; - 80204e30: 0ff5f593 zext.b a1,a1 - 80204e34: 87aa mv a5,a0 - 80204e36: 00a60733 add a4,a2,a0 - 80204e3a: 00b78023 sb a1,0(a5) - for (uint i = 0; i < n; i++) - 80204e3e: 0785 addi a5,a5,1 - 80204e40: fee79de3 bne a5,a4,80204e3a <_Z6memsetPvij+0x10> - return dst; -} - 80204e44: 8082 ret - -0000000080204e46 <_Z6memcmpPKvS0_j>: - -int memcmp(const void *v1, const void *v2, uint n) -{ - const uchar *s1 = (const uchar *)v1; - const uchar *s2 = (const uchar *)v2; - while (n-- > 0) - 80204e46: fff6069b addiw a3,a2,-1 - 80204e4a: c21d beqz a2,80204e70 <_Z6memcmpPKvS0_j+0x2a> - 80204e4c: 1682 slli a3,a3,0x20 - 80204e4e: 9281 srli a3,a3,0x20 - 80204e50: 0685 addi a3,a3,1 - 80204e52: 96aa add a3,a3,a0 - 80204e54: a019 j 80204e5a <_Z6memcmpPKvS0_j+0x14> - 80204e56: 00a68d63 beq a3,a0,80204e70 <_Z6memcmpPKvS0_j+0x2a> - { - if (*s1 != *s2) - 80204e5a: 00054783 lbu a5,0(a0) - 80204e5e: 0005c703 lbu a4,0(a1) - return *s1 - *s2; - s1++, s2++; - 80204e62: 0505 addi a0,a0,1 - 80204e64: 0585 addi a1,a1,1 - if (*s1 != *s2) - 80204e66: fee788e3 beq a5,a4,80204e56 <_Z6memcmpPKvS0_j+0x10> - return *s1 - *s2; - 80204e6a: 40e7853b subw a0,a5,a4 - 80204e6e: 8082 ret - } - return 0; - 80204e70: 4501 li a0,0 -} - 80204e72: 8082 ret - -0000000080204e74 <_Z7memmovePvPKvj>: - char *d = (char *)dst; - if (s < d && s + n > d) - { - s += n; - d += n; - while (n-- > 0) - 80204e74: fff6071b addiw a4,a2,-1 - if (s < d && s + n > d) - 80204e78: 02a5fb63 bgeu a1,a0,80204eae <_Z7memmovePvPKvj+0x3a> - 80204e7c: 02061793 slli a5,a2,0x20 - 80204e80: 9381 srli a5,a5,0x20 - 80204e82: 00f586b3 add a3,a1,a5 - 80204e86: 02d57463 bgeu a0,a3,80204eae <_Z7memmovePvPKvj+0x3a> - d += n; - 80204e8a: 00f505b3 add a1,a0,a5 - while (n-- > 0) - 80204e8e: ce15 beqz a2,80204eca <_Z7memmovePvPKvj+0x56> - 80204e90: 02071793 slli a5,a4,0x20 - 80204e94: 9381 srli a5,a5,0x20 - 80204e96: fff7c793 not a5,a5 - 80204e9a: 97b6 add a5,a5,a3 - *--d = *--s; - 80204e9c: fff6c703 lbu a4,-1(a3) - 80204ea0: 16fd addi a3,a3,-1 - 80204ea2: 15fd addi a1,a1,-1 - 80204ea4: 00e58023 sb a4,0(a1) - while (n-- > 0) - 80204ea8: fef69ae3 bne a3,a5,80204e9c <_Z7memmovePvPKvj+0x28> - 80204eac: 8082 ret - } - else - { - while (n-- > 0) - 80204eae: ce19 beqz a2,80204ecc <_Z7memmovePvPKvj+0x58> - 80204eb0: 1702 slli a4,a4,0x20 - 80204eb2: 9301 srli a4,a4,0x20 - 80204eb4: 0705 addi a4,a4,1 - 80204eb6: 972e add a4,a4,a1 - 80204eb8: 87aa mv a5,a0 - *d++ = *s++; - 80204eba: 0005c683 lbu a3,0(a1) - 80204ebe: 0585 addi a1,a1,1 - 80204ec0: 0785 addi a5,a5,1 - 80204ec2: fed78fa3 sb a3,-1(a5) - while (n-- > 0) - 80204ec6: feb71ae3 bne a4,a1,80204eba <_Z7memmovePvPKvj+0x46> - } - return dst; -} - 80204eca: 8082 ret - 80204ecc: 8082 ret - -0000000080204ece <_Z6memcpyPvPKvj>: - -void *memcpy(void *dst, const void *src, uint n) -{ - return memmove(dst, src, n); - 80204ece: fa7ff06f j 80204e74 <_Z7memmovePvPKvj> - -0000000080204ed2 <_Z6strcpyPcPKc>: -} - -void strcpy(char *dst, const char *src) -{ - while (*src) - 80204ed2: 0005c783 lbu a5,0(a1) - 80204ed6: cb81 beqz a5,80204ee6 <_Z6strcpyPcPKc+0x14> - *dst++ = *src++; - 80204ed8: 00f50023 sb a5,0(a0) - while (*src) - 80204edc: 0015c783 lbu a5,1(a1) - *dst++ = *src++; - 80204ee0: 0585 addi a1,a1,1 - 80204ee2: 0505 addi a0,a0,1 - while (*src) - 80204ee4: fbf5 bnez a5,80204ed8 <_Z6strcpyPcPKc+0x6> - *dst = 0; - 80204ee6: 00050023 sb zero,0(a0) -} - 80204eea: 8082 ret - -0000000080204eec <_Z6strlenPKc>: - -int strlen(const char *s) -{ - int n = 0; - while (s[n]) - 80204eec: 00054783 lbu a5,0(a0) - 80204ef0: cf81 beqz a5,80204f08 <_Z6strlenPKc+0x1c> - 80204ef2: 0505 addi a0,a0,1 - 80204ef4: 87aa mv a5,a0 - 80204ef6: 0007c703 lbu a4,0(a5) - 80204efa: 86be mv a3,a5 - 80204efc: 0785 addi a5,a5,1 - 80204efe: ff65 bnez a4,80204ef6 <_Z6strlenPKc+0xa> - n++; - 80204f00: 40a6853b subw a0,a3,a0 - 80204f04: 2505 addiw a0,a0,1 - 80204f06: 8082 ret - int n = 0; - 80204f08: 4501 li a0,0 - return n; -} - 80204f0a: 8082 ret - -0000000080204f0c <_Z6strcmpPKcS0_>: - -int strcmp(const char *s1, const char *s2) -{ - while (*s1 && (*s1 == *s2)) - 80204f0c: 00054783 lbu a5,0(a0) - 80204f10: e791 bnez a5,80204f1c <_Z6strcmpPKcS0_+0x10> - 80204f12: a02d j 80204f3c <_Z6strcmpPKcS0_+0x30> - 80204f14: 00054783 lbu a5,0(a0) - 80204f18: cf89 beqz a5,80204f32 <_Z6strcmpPKcS0_+0x26> - 80204f1a: 85b6 mv a1,a3 - 80204f1c: 0005c703 lbu a4,0(a1) - { - s1++; - 80204f20: 0505 addi a0,a0,1 - s2++; - 80204f22: 00158693 addi a3,a1,1 - while (*s1 && (*s1 == *s2)) - 80204f26: fef707e3 beq a4,a5,80204f14 <_Z6strcmpPKcS0_+0x8> - } - return *(const unsigned char *)s1 - *(const unsigned char *)s2; - 80204f2a: 0007851b sext.w a0,a5 -} - 80204f2e: 9d19 subw a0,a0,a4 - 80204f30: 8082 ret - return *(const unsigned char *)s1 - *(const unsigned char *)s2; - 80204f32: 0015c703 lbu a4,1(a1) - 80204f36: 4501 li a0,0 -} - 80204f38: 9d19 subw a0,a0,a4 - 80204f3a: 8082 ret - return *(const unsigned char *)s1 - *(const unsigned char *)s2; - 80204f3c: 0005c703 lbu a4,0(a1) - 80204f40: 4501 li a0,0 - 80204f42: b7f5 j 80204f2e <_Z6strcmpPKcS0_+0x22> - -0000000080204f44 <_Z10strcasecmpPKcS0_>: - -int strcasecmp(const char *s1, const char *s2) -{ - while (*s1) - 80204f44: 00054783 lbu a5,0(a0) - 80204f48: e399 bnez a5,80204f4e <_Z10strcasecmpPKcS0_+0xa> - 80204f4a: a825 j 80204f82 <_Z10strcasecmpPKcS0_+0x3e> - 80204f4c: 85b6 mv a1,a3 - { - if(*s1 == *s2 || *s1 + 32 == *s2 || *s1 == *s2 + 32){ - 80204f4e: 0005c703 lbu a4,0(a1) - s1++; - 80204f52: 0505 addi a0,a0,1 - if(*s1 == *s2 || *s1 + 32 == *s2 || *s1 == *s2 + 32){ - 80204f54: 02078613 addi a2,a5,32 - s2++; - 80204f58: 00158693 addi a3,a1,1 - if(*s1 == *s2 || *s1 + 32 == *s2 || *s1 == *s2 + 32){ - 80204f5c: 00f70b63 beq a4,a5,80204f72 <_Z10strcasecmpPKcS0_+0x2e> - 80204f60: 0007081b sext.w a6,a4 - 80204f64: 2781 sext.w a5,a5 - 80204f66: 02080893 addi a7,a6,32 - 80204f6a: 00e60463 beq a2,a4,80204f72 <_Z10strcasecmpPKcS0_+0x2e> - 80204f6e: 00f89763 bne a7,a5,80204f7c <_Z10strcasecmpPKcS0_+0x38> - while (*s1) - 80204f72: 00054783 lbu a5,0(a0) - 80204f76: fbf9 bnez a5,80204f4c <_Z10strcasecmpPKcS0_+0x8> - } - else break; - } - return *(const unsigned char *)s1 - *(const unsigned char *)s2; - 80204f78: 0015c803 lbu a6,1(a1) - 80204f7c: 4107853b subw a0,a5,a6 - 80204f80: 8082 ret - return *(const unsigned char *)s1 - *(const unsigned char *)s2; - 80204f82: 0005c803 lbu a6,0(a1) - 80204f86: 4781 li a5,0 - 80204f88: bfd5 j 80204f7c <_Z10strcasecmpPKcS0_+0x38> - -0000000080204f8a <_ZN3SBI8sbi_callEiiyyy>: - long error; - long value; - }; - - struct sbiret sbi_call(int ext, int fid, uint64 arg0, uint64 arg1, uint64 arg2) - { - 80204f8a: 1141 addi sp,sp,-16 - 80204f8c: 88aa mv a7,a0 - 80204f8e: 882e mv a6,a1 - struct sbiret ret; - register uint64 a0 asm("a0") = arg0; - 80204f90: 8532 mv a0,a2 - register uint64 a1 asm("a1") = arg1; - 80204f92: 85b6 mv a1,a3 - register uint64 a2 asm("a2") = arg2; - 80204f94: 863a mv a2,a4 - register uint64 a6 asm("a6") = fid; - register uint64 a7 asm("a7") = ext; - - asm volatile( - 80204f96: 00000073 ecall - : "r"(a0), "r"(a1), "r"(a2), "r"(a6), "r"(a7) - : "memory"); - ret.error = a0; - ret.value = a1; - return ret; - } - 80204f9a: 0141 addi sp,sp,16 - 80204f9c: 8082 ret - -0000000080204f9e <_ZN3SBI9set_timerEy>: - register uint64 a7 asm("a7") = ext; - 80204f9e: 544958b7 lui a7,0x54495 - register uint64 a1 asm("a1") = arg1; - 80204fa2: 4581 li a1,0 - register uint64 a2 asm("a2") = arg2; - 80204fa4: 4601 li a2,0 - register uint64 a6 asm("a6") = fid; - 80204fa6: 4801 li a6,0 - register uint64 a7 asm("a7") = ext; - 80204fa8: d4588893 addi a7,a7,-699 # 54494d45 <_start-0x2bd6b2bb> - asm volatile( - 80204fac: 00000073 ecall - - void set_timer(uint64 stime_value) - { - sbi_call(0x54494D45, 0, stime_value, 0, 0); - } - 80204fb0: 8082 ret - -0000000080204fb2 <_ZN3SBI12sbi_shutdownEv>: - register uint64 a7 asm("a7") = ext; - 80204fb2: 535258b7 lui a7,0x53525 - register uint64 a0 asm("a0") = arg0; - 80204fb6: 4501 li a0,0 - register uint64 a1 asm("a1") = arg1; - 80204fb8: 4581 li a1,0 - register uint64 a2 asm("a2") = arg2; - 80204fba: 4601 li a2,0 - register uint64 a6 asm("a6") = fid; - 80204fbc: 4801 li a6,0 - register uint64 a7 asm("a7") = ext; - 80204fbe: 35488893 addi a7,a7,852 # 53525354 <_start-0x2ccdacac> - asm volatile( - 80204fc2: 00000073 ecall - register uint64 a0 asm("a0") = arg0; - 80204fc6: 4501 li a0,0 - register uint64 a1 asm("a1") = arg1; - 80204fc8: 4581 li a1,0 - register uint64 a7 asm("a7") = ext; - 80204fca: 48a1 li a7,8 - asm volatile( - 80204fcc: 00000073 ecall - - void sbi_shutdown() - { - sbi_call(0x53525354, 0, 0, 0, 0); - sbi_call(0x08, 0, 0, 0, 0); - while (1) - 80204fd0: a001 j 80204fd0 <_ZN3SBI12sbi_shutdownEv+0x1e> - -0000000080204fd2 <_ZN3SBI10sbi_rebootEv>: - register uint64 a7 asm("a7") = ext; - 80204fd2: 535258b7 lui a7,0x53525 - register uint64 a0 asm("a0") = arg0; - 80204fd6: 4505 li a0,1 - register uint64 a1 asm("a1") = arg1; - 80204fd8: 4581 li a1,0 - register uint64 a2 asm("a2") = arg2; - 80204fda: 4601 li a2,0 - register uint64 a6 asm("a6") = fid; - 80204fdc: 4801 li a6,0 - register uint64 a7 asm("a7") = ext; - 80204fde: 35488893 addi a7,a7,852 # 53525354 <_start-0x2ccdacac> - asm volatile( - 80204fe2: 00000073 ecall - } - - void sbi_reboot() - { - sbi_call(SBI_EID_SRST, SBI_FID_SRST_RESET, SBI_SRST_TYPE_COLD_REBOOT, SBI_SRST_REASON_NONE, 0); - } - 80204fe6: 8082 ret - -0000000080204fe8 <_ZL8sys_execv>: - - return ret; -} - -static uint64 sys_exec() -{ - 80204fe8: 7105 addi sp,sp,-480 - 80204fea: ef86 sd ra,472(sp) - 80204fec: eba2 sd s0,464(sp) - 80204fee: ff4e sd s3,440(sp) - 80204ff0: f756 sd s5,424(sp) - Proc *p = myproc(); - 80204ff2: 291000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80204ff6: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80204ff8: 01010a93 addi s5,sp,16 - 80204ffc: 59fd li s3,-1 - return p->tf->a0; - 80204ffe: 7ba0 ld s0,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80205000: 283000ef jal 80205a82 <_Z6myprocv> - 80205004: 7d28 ld a0,120(a0) - 80205006: 08000693 li a3,128 - 8020500a: 8622 mv a2,s0 - 8020500c: 85d6 mv a1,s5 - 8020500e: 502010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - char path[128]; - uint64 uargv_ptr; - - if (argstr(0, path, sizeof(path)) < 0) - 80205012: 0a054563 bltz a0,802050bc <_ZL8sys_execv+0xd4> - Proc *p = myproc(); - 80205016: e7a6 sd s1,456(sp) - 80205018: e3ca sd s2,448(sp) - 8020501a: fb52 sd s4,432(sp) - 8020501c: f35a sd s6,416(sp) - 8020501e: ef5e sd s7,408(sp) - 80205020: 263000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 80205024: 793c ld a5,112(a0) - memset(args, 0, sizeof(args)); - 80205026: 09010913 addi s2,sp,144 - 8020502a: 10000613 li a2,256 - return p->tf->a1; - 8020502e: 0787ba03 ld s4,120(a5) - memset(args, 0, sizeof(args)); - 80205032: 4581 li a1,0 - 80205034: 854a mv a0,s2 - 80205036: df5ff0ef jal 80204e2a <_Z6memsetPvij> - - uargv_ptr = argraw(1); - - KernelArgv kargv; - - for (int i = 0; i < KernelArgv::MAX_ARGS; ++i) - 8020503a: 844a mv s0,s2 - memset(args, 0, sizeof(args)); - 8020503c: 84ca mv s1,s2 - for (int i = 0; i < KernelArgv::MAX_ARGS; ++i) - 8020503e: 4981 li s3,0 - 80205040: 412a0a33 sub s4,s4,s2 - 80205044: 00810b13 addi s6,sp,8 - 80205048: 02000b93 li s7,32 - { - uint64 uarg_str_ptr; - - if (VM::copyin(myproc()->pagetable, (char *)&uarg_str_ptr, uargv_ptr + i * sizeof(uint64), sizeof(uint64)) < 0) - 8020504c: 237000ef jal 80205a82 <_Z6myprocv> - 80205050: 7d28 ld a0,120(a0) - 80205052: 46a1 li a3,8 - 80205054: 009a0633 add a2,s4,s1 - 80205058: 85da mv a1,s6 - 8020505a: 426010ef jal 80206480 <_ZN2VM6copyinEPyPcyy> - 8020505e: 87aa mv a5,a0 - { - kargv.args[i] = nullptr; - break; - } - - kargv.args[i] = (char *)Slab::kmalloc(KernelArgv::MAX_ARG_LEN); - 80205060: 08000513 li a0,128 - if (VM::copyin(myproc()->pagetable, (char *)&uarg_str_ptr, uargv_ptr + i * sizeof(uint64), sizeof(uint64)) < 0) - 80205064: 0607c363 bltz a5,802050ca <_ZL8sys_execv+0xe2> - if (uarg_str_ptr == 0) - 80205068: 67a2 ld a5,8(sp) - 8020506a: c3b5 beqz a5,802050ce <_ZL8sys_execv+0xe6> - kargv.args[i] = (char *)Slab::kmalloc(KernelArgv::MAX_ARG_LEN); - 8020506c: 0fd010ef jal 80206968 <_ZN4Slab7kmallocEy> - 80205070: e088 sd a0,0(s1) - if (kargv.args[i] == nullptr) - 80205072: cd21 beqz a0,802050ca <_ZL8sys_execv+0xe2> - { - return -1; - } - - if (VM::copyinstr(myproc()->pagetable, kargv.args[i], uarg_str_ptr, KernelArgv::MAX_ARG_LEN) < 0) - 80205074: 20f000ef jal 80205a82 <_Z6myprocv> - 80205078: 6622 ld a2,8(sp) - 8020507a: 608c ld a1,0(s1) - 8020507c: 7d28 ld a0,120(a0) - 8020507e: 08000693 li a3,128 - for (int i = 0; i < KernelArgv::MAX_ARGS; ++i) - 80205082: 2985 addiw s3,s3,1 - if (VM::copyinstr(myproc()->pagetable, kargv.args[i], uarg_str_ptr, KernelArgv::MAX_ARG_LEN) < 0) - 80205084: 48c010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - 80205088: 04054163 bltz a0,802050ca <_ZL8sys_execv+0xe2> - for (int i = 0; i < KernelArgv::MAX_ARGS; ++i) - 8020508c: 04a1 addi s1,s1,8 - 8020508e: fb799fe3 bne s3,s7,8020504c <_ZL8sys_execv+0x64> - { - return -1; - } - } - - return Exec::exec(path, kargv.args); - 80205092: 85ca mv a1,s2 - 80205094: 8556 mv a0,s5 - 80205096: 262020ef jal 802072f8 <_ZN4Exec4execEPcPS0_> - 8020509a: 89aa mv s3,a0 - for (int i = 0; i < MAX_ARGS; i++) - 8020509c: 10090913 addi s2,s2,256 - if (args[i]) - 802050a0: 6008 ld a0,0(s0) - 802050a2: c509 beqz a0,802050ac <_ZL8sys_execv+0xc4> - Slab::kfree(args[i]); - 802050a4: 295010ef jal 80206b38 <_ZN4Slab5kfreeEPv> - args[i] = nullptr; - 802050a8: 00043023 sd zero,0(s0) - for (int i = 0; i < MAX_ARGS; i++) - 802050ac: 0421 addi s0,s0,8 - 802050ae: ff2419e3 bne s0,s2,802050a0 <_ZL8sys_execv+0xb8> - 802050b2: 64be ld s1,456(sp) - 802050b4: 691e ld s2,448(sp) - 802050b6: 7a5a ld s4,432(sp) - 802050b8: 7b1a ld s6,416(sp) - 802050ba: 6bfa ld s7,408(sp) -} - 802050bc: 60fe ld ra,472(sp) - 802050be: 645e ld s0,464(sp) - 802050c0: 7aba ld s5,424(sp) - 802050c2: 854e mv a0,s3 - 802050c4: 79fa ld s3,440(sp) - 802050c6: 613d addi sp,sp,480 - 802050c8: 8082 ret - return -1; - 802050ca: 59fd li s3,-1 - 802050cc: bfc1 j 8020509c <_ZL8sys_execv+0xb4> - kargv.args[i] = nullptr; - 802050ce: 00399793 slli a5,s3,0x3 - 802050d2: 19078793 addi a5,a5,400 - 802050d6: 978a add a5,a5,sp - return Exec::exec(path, kargv.args); - 802050d8: 85ca mv a1,s2 - 802050da: 8556 mv a0,s5 - kargv.args[i] = nullptr; - 802050dc: f007b023 sd zero,-256(a5) - return Exec::exec(path, kargv.args); - 802050e0: 218020ef jal 802072f8 <_ZN4Exec4execEPcPS0_> - 802050e4: 89aa mv s3,a0 - 802050e6: bf5d j 8020509c <_ZL8sys_execv+0xb4> - -00000000802050e8 <_Z7syscallv>: - ; - return 0; -} - -void syscall() -{ - 802050e8: 7149 addi sp,sp,-368 - 802050ea: f2a2 sd s0,352(sp) - 802050ec: eea6 sd s1,344(sp) - 802050ee: f686 sd ra,360(sp) - Proc *p = myproc(); - 802050f0: 193000ef jal 80205a82 <_Z6myprocv> - int num = p->tf->a7; - 802050f4: 7938 ld a4,112(a0) - /* Just For Debug */ - // Drivers::uart_puts("Syscall: "); - // Drivers::print_hex(num); - // Drivers::uart_puts("\n"); - - switch (num) - 802050f6: 47e5 li a5,25 - Proc *p = myproc(); - 802050f8: 842a mv s0,a0 - int num = p->tf->a7; - 802050fa: 0a872483 lw s1,168(a4) - switch (num) - 802050fe: 4e97ec63 bltu a5,s1,802055f6 <_Z7syscallv+0x50e> - 80205102: 0000d717 auipc a4,0xd - 80205106: 49e70713 addi a4,a4,1182 # 802125a0 - 8020510a: 00249793 slli a5,s1,0x2 - 8020510e: 97ba add a5,a5,a4 - 80205110: 439c lw a5,0(a5) - 80205112: 97ba add a5,a5,a4 - 80205114: 8782 jr a5 - SBI::sbi_shutdown(); - 80205116: e9dff0ef jal 80204fb2 <_ZN3SBI12sbi_shutdownEv> - while (1) - 8020511a: a001 j 8020511a <_Z7syscallv+0x32> - Proc *p = myproc(); - 8020511c: eaca sd s2,336(sp) - 8020511e: e6ce sd s3,328(sp) - 80205120: 163000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205124: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 80205126: 5ba4 lw s1,112(a5) - Proc *p = myproc(); - 80205128: 15b000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 8020512c: 793c ld a5,112(a0) - 8020512e: 0787b903 ld s2,120(a5) - Proc *p = myproc(); - 80205132: 151000ef jal 80205a82 <_Z6myprocv> - return p->tf->a2; - 80205136: 793c ld a5,112(a0) - 80205138: 0807b983 ld s3,128(a5) - struct Proc *p = myproc(); - 8020513c: 147000ef jal 80205a82 <_Z6myprocv> - if (fd < 0 || fd >= NOFILE || p->ofile[fd] == 0) - 80205140: 47bd li a5,15 - 80205142: 6097e263 bltu a5,s1,80205746 <_Z7syscallv+0x65e> - 80205146: 01848793 addi a5,s1,24 - 8020514a: 078e slli a5,a5,0x3 - 8020514c: 953e add a0,a0,a5 - 8020514e: 6508 ld a0,8(a0) - 80205150: 5e050b63 beqz a0,80205746 <_Z7syscallv+0x65e> - return FileTable::lseek(p->ofile[fd], offset, whence); - 80205154: 0009861b sext.w a2,s3 - 80205158: 0009059b sext.w a1,s2 - 8020515c: c72fe0ef jal 802035ce <_ZN9FileTable5lseekEP4fileii> - 80205160: 6956 ld s2,336(sp) - 80205162: 69b6 ld s3,328(sp) - 80205164: 84aa mv s1,a0 - Drivers::uart_puts("\n"); - ret = static_cast(-1); - break; - } - - p->tf->a0 = ret; - 80205166: 783c ld a5,112(s0) - 80205168: fba4 sd s1,112(a5) - 8020516a: 70b6 ld ra,360(sp) - 8020516c: 7416 ld s0,352(sp) - 8020516e: 64f6 ld s1,344(sp) - 80205170: 6175 addi sp,sp,368 - 80205172: 8082 ret - fat32_test(); - 80205174: e06ff0ef jal 8020477a <_Z10fat32_testv> - return 0; - 80205178: 4481 li s1,0 - 8020517a: b7f5 j 80205166 <_Z7syscallv+0x7e> - Drivers::uart_puts("Unimplemented syscall\n"); - 8020517c: 0000d517 auipc a0,0xd - 80205180: 99c50513 addi a0,a0,-1636 # 80211b18 - 80205184: 3e7030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("Not supported now"); - 80205188: 0000d517 auipc a0,0xd - 8020518c: 9a850513 addi a0,a0,-1624 # 80211b30 - 80205190: 3db030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - ret = sys_exec(); - 80205194: 54fd li s1,-1 - 80205196: bfc1 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205198: 0eb000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 8020519c: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 8020519e: 5ba4 lw s1,112(a5) - struct Proc *p = myproc(); - 802051a0: 0e3000ef jal 80205a82 <_Z6myprocv> - if (fd < 0 || fd >= NOFILE || p->ofile[fd] == 0) - 802051a4: 47bd li a5,15 - 802051a6: fe97e7e3 bltu a5,s1,80205194 <_Z7syscallv+0xac> - 802051aa: 048e slli s1,s1,0x3 - 802051ac: 94aa add s1,s1,a0 - 802051ae: 64e8 ld a0,200(s1) - 802051b0: d175 beqz a0,80205194 <_Z7syscallv+0xac> - FileTable::close(p->ofile[fd]); - 802051b2: 8e2fe0ef jal 80203294 <_ZN9FileTable5closeEP4file> - p->ofile[fd] = 0; - 802051b6: 0c04b423 sd zero,200(s1) - return 0; - 802051ba: 4481 li s1,0 - 802051bc: b76d j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802051be: eaca sd s2,336(sp) - 802051c0: 0c3000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802051c4: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 802051c6: 0804 addi s1,sp,16 - return p->tf->a0; - 802051c8: 0707b903 ld s2,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 802051cc: 0b7000ef jal 80205a82 <_Z6myprocv> - 802051d0: 7d28 ld a0,120(a0) - 802051d2: 08000693 li a3,128 - 802051d6: 864a mv a2,s2 - 802051d8: 85a6 mv a1,s1 - 802051da: 336010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - if (argstr(0, path, 128) < 0 || argint(1, &major) < 0 || argint(2, &minor) < 0) - 802051de: 42055d63 bgez a0,80205618 <_Z7syscallv+0x530> - 802051e2: 6956 ld s2,336(sp) - return -1; - 802051e4: 54fd li s1,-1 - 802051e6: b741 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802051e8: eaca sd s2,336(sp) - 802051ea: e2d2 sd s4,320(sp) - 802051ec: f65e sd s7,296(sp) - 802051ee: 095000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802051f2: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802051f4: 0707a903 lw s2,112(a5) - Proc *p = myproc(); - 802051f8: 08b000ef jal 80205a82 <_Z6myprocv> - return p->tf->a2; - 802051fc: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802051fe: 0807a483 lw s1,128(a5) - Proc *p = myproc(); - 80205202: 081000ef jal 80205a82 <_Z6myprocv> - struct Proc *proc = myproc(); - 80205206: 07d000ef jal 80205a82 <_Z6myprocv> - 8020520a: 8a2a mv s4,a0 - Proc *p = myproc(); - 8020520c: 077000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 80205210: 7938 ld a4,112(a0) - if (fd == 1 && proc->ofile[fd] == nullptr) // stdout - 80205212: 4785 li a5,1 - return p->tf->a1; - 80205214: 07873b83 ld s7,120(a4) - if (fd == 1 && proc->ofile[fd] == nullptr) // stdout - 80205218: 56f90e63 beq s2,a5,80205794 <_Z7syscallv+0x6ac> - if (fd < 0 || fd >= NOFILE || (f = proc->ofile[fd]) == 0) - 8020521c: 47bd li a5,15 - 8020521e: 5f27e363 bltu a5,s2,80205804 <_Z7syscallv+0x71c> - 80205222: 01890793 addi a5,s2,24 - 80205226: 078e slli a5,a5,0x3 - 80205228: 9a3e add s4,s4,a5 - 8020522a: 008a3503 ld a0,8(s4) - 8020522e: 5c050b63 beqz a0,80205804 <_Z7syscallv+0x71c> - return FileTable::write(f, p, n); - 80205232: 8626 mv a2,s1 - 80205234: 85de mv a1,s7 - 80205236: acefe0ef jal 80203504 <_ZN9FileTable5writeEP4fileyi> - 8020523a: 84aa mv s1,a0 - 8020523c: 6956 ld s2,336(sp) - 8020523e: 6a16 ld s4,320(sp) - 80205240: 7bb2 ld s7,296(sp) - 80205242: b715 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205244: eaca sd s2,336(sp) - 80205246: 03d000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 8020524a: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 8020524c: 0804 addi s1,sp,16 - return p->tf->a0; - 8020524e: 0707b903 ld s2,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80205252: 031000ef jal 80205a82 <_Z6myprocv> - 80205256: 7d28 ld a0,120(a0) - 80205258: 08000693 li a3,128 - 8020525c: 864a mv a2,s2 - 8020525e: 85a6 mv a1,s1 - 80205260: 2b0010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - if (argstr(0, path, 128) < 0) - 80205264: f6054fe3 bltz a0,802051e2 <_Z7syscallv+0xfa> - 80205268: e6ce sd s3,328(sp) - Inode *dp = VFS::nameiparent(path, name); - 8020526a: 09010993 addi s3,sp,144 - 8020526e: 85ce mv a1,s3 - 80205270: 8526 mv a0,s1 - 80205272: a99ff0ef jal 80204d0a <_ZN3VFS11nameiparentEPKcPc> - 80205276: 892a mv s2,a0 - if (!dp) - 80205278: 50050c63 beqz a0,80205790 <_Z7syscallv+0x6a8> - VFS::ilock(dp); - 8020527c: fe4ff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - int ret = dp->unlink(name); - 80205280: 00093783 ld a5,0(s2) - 80205284: 85ce mv a1,s3 - 80205286: 854a mv a0,s2 - 80205288: 67bc ld a5,72(a5) - 8020528a: 9782 jalr a5 - 8020528c: 84aa mv s1,a0 - VFS::iunlockput(dp); - 8020528e: 854a mv a0,s2 - 80205290: 82bff0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - break; - 80205294: 6956 ld s2,336(sp) - 80205296: 69b6 ld s3,328(sp) - 80205298: b5f9 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 8020529a: eaca sd s2,336(sp) - 8020529c: 7e6000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802052a0: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 802052a2: 0804 addi s1,sp,16 - return p->tf->a0; - 802052a4: 0707b903 ld s2,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 802052a8: 7da000ef jal 80205a82 <_Z6myprocv> - 802052ac: 7d28 ld a0,120(a0) - 802052ae: 08000693 li a3,128 - 802052b2: 864a mv a2,s2 - 802052b4: 85a6 mv a1,s1 - 802052b6: 25a010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - if (argstr(0, path, 128) < 0) - 802052ba: f20544e3 bltz a0,802051e2 <_Z7syscallv+0xfa> - Inode *ip = VFS::namei(path); - 802052be: 8526 mv a0,s1 - 802052c0: 8f1ff0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - if (ip != nullptr) - 802052c4: 54051663 bnez a0,80205810 <_Z7syscallv+0x728> - Inode *dp = VFS::nameiparent(path, name); - 802052c8: 09010913 addi s2,sp,144 - 802052cc: 8526 mv a0,s1 - 802052ce: 85ca mv a1,s2 - 802052d0: a3bff0ef jal 80204d0a <_ZN3VFS11nameiparentEPKcPc> - 802052d4: 84aa mv s1,a0 - if (dp == nullptr) - 802052d6: f00506e3 beqz a0,802051e2 <_Z7syscallv+0xfa> - VFS::ilock(dp); - 802052da: f86ff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - ip = dp->create(name, T_DIR, 0, 0); - 802052de: 609c ld a5,0(s1) - 802052e0: 8526 mv a0,s1 - 802052e2: 4701 li a4,0 - 802052e4: 7b9c ld a5,48(a5) - 802052e6: 4681 li a3,0 - 802052e8: 4605 li a2,1 - 802052ea: 85ca mv a1,s2 - 802052ec: 9782 jalr a5 - 802052ee: 87aa mv a5,a0 - VFS::iunlockput(dp); - 802052f0: 8526 mv a0,s1 - ip = dp->create(name, T_DIR, 0, 0); - 802052f2: 84be mv s1,a5 - VFS::iunlockput(dp); - 802052f4: fc6ff0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - if (ip == nullptr) - 802052f8: ee0485e3 beqz s1,802051e2 <_Z7syscallv+0xfa> - VFS::iput(ip); - 802052fc: 8526 mv a0,s1 - 802052fe: edeff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return 0; - 80205302: 4481 li s1,0 - break; - 80205304: 6956 ld s2,336(sp) - 80205306: b585 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205308: eaca sd s2,336(sp) - 8020530a: 778000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 8020530e: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80205310: 0804 addi s1,sp,16 - return p->tf->a0; - 80205312: 0707b903 ld s2,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80205316: 76c000ef jal 80205a82 <_Z6myprocv> - 8020531a: 7d28 ld a0,120(a0) - 8020531c: 08000693 li a3,128 - 80205320: 864a mv a2,s2 - 80205322: 85a6 mv a1,s1 - 80205324: 1ec010ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - if (argstr(0, path, 128) < 0 || argint(1, &omode) < 0) - 80205328: ea054de3 bltz a0,802051e2 <_Z7syscallv+0xfa> - Proc *p = myproc(); - 8020532c: e6ce sd s3,328(sp) - 8020532e: 754000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 80205332: 793c ld a5,112(a0) - ip = VFS::namei(path); - 80205334: 8526 mv a0,s1 - *ip = static_cast(argraw(n)); - 80205336: 0787a903 lw s2,120(a5) - if (omode & O_CREATE) - 8020533a: 20097793 andi a5,s2,512 - 8020533e: 44078463 beqz a5,80205786 <_Z7syscallv+0x69e> - ip = VFS::namei(path); - 80205342: 86fff0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - 80205346: 89aa mv s3,a0 - if (ip == nullptr) - 80205348: 4e050e63 beqz a0,80205844 <_Z7syscallv+0x75c> - VFS::ilock(ip); - 8020534c: 854e mv a0,s3 - 8020534e: e2d2 sd s4,320(sp) - 80205350: f10ff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - if ((omode & O_TRUNC) && ip->type == T_FILE) - 80205354: 40097793 andi a5,s2,1024 - 80205358: cb99 beqz a5,8020536e <_Z7syscallv+0x286> - 8020535a: 04899703 lh a4,72(s3) - 8020535e: 4789 li a5,2 - 80205360: 00f71763 bne a4,a5,8020536e <_Z7syscallv+0x286> - ip->truncate(); - 80205364: 0009b783 ld a5,0(s3) - 80205368: 854e mv a0,s3 - 8020536a: 63bc ld a5,64(a5) - 8020536c: 9782 jalr a5 - VFS::iunlock(ip); - 8020536e: 854e mv a0,s3 - 80205370: f10ff0ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - f = FileTable::alloc(); - 80205374: e7dfd0ef jal 802031f0 <_ZN9FileTable5allocEv> - 80205378: 8a2a mv s4,a0 - if (f == nullptr) - 8020537a: c105 beqz a0,8020539a <_Z7syscallv+0x2b2> - struct Proc *p = myproc(); - 8020537c: 706000ef jal 80205a82 <_Z6myprocv> - for (int i = 0; i < NOFILE; i++) - 80205380: 0c850793 addi a5,a0,200 - 80205384: 4481 li s1,0 - 80205386: 46c1 li a3,16 - if (p->ofile[i] == 0) - 80205388: 6398 ld a4,0(a5) - 8020538a: 30070863 beqz a4,8020569a <_Z7syscallv+0x5b2> - for (int i = 0; i < NOFILE; i++) - 8020538e: 2485 addiw s1,s1,1 - 80205390: 07a1 addi a5,a5,8 - 80205392: fed49be3 bne s1,a3,80205388 <_Z7syscallv+0x2a0> - f->type = FD_NONE; - 80205396: 000a3023 sd zero,0(s4) - VFS::iput(ip); - 8020539a: 854e mv a0,s3 - 8020539c: e40ff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return -1; - 802053a0: 69b6 ld s3,328(sp) - 802053a2: 6a16 ld s4,320(sp) - 802053a4: bd3d j 802051e2 <_Z7syscallv+0xfa> - ret = sys_exec(); - 802053a6: c43ff0ef jal 80204fe8 <_ZL8sys_execv> - if (ret != static_cast(-1)) - 802053aa: 57fd li a5,-1 - 802053ac: daf51fe3 bne a0,a5,8020516a <_Z7syscallv+0x82> - 802053b0: b3d5 j 80205194 <_Z7syscallv+0xac> - Proc *p = myproc(); - 802053b2: eaca sd s2,336(sp) - 802053b4: e6ce sd s3,328(sp) - 802053b6: e2d2 sd s4,320(sp) - 802053b8: 6ca000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802053bc: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802053be: 0707a903 lw s2,112(a5) - Proc *p = myproc(); - 802053c2: 6c0000ef jal 80205a82 <_Z6myprocv> - return p->tf->a2; - 802053c6: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802053c8: 0807a983 lw s3,128(a5) - Proc *p = myproc(); - 802053cc: 6b6000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 802053d0: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802053d2: 0787ea03 lwu s4,120(a5) - struct Proc* proc = myproc(); - 802053d6: 6ac000ef jal 80205a82 <_Z6myprocv> - if (fd == 0 && proc->ofile[fd] == nullptr) - 802053da: 32091d63 bnez s2,80205714 <_Z7syscallv+0x62c> - 802053de: 6568 ld a0,200(a0) - 802053e0: 44050863 beqz a0,80205830 <_Z7syscallv+0x748> - return FileTable::read(f, p, n); - 802053e4: 864e mv a2,s3 - 802053e6: 85d2 mv a1,s4 - 802053e8: 8a6fe0ef jal 8020348e <_ZN9FileTable4readEP4fileyi> - 802053ec: 84aa mv s1,a0 - 802053ee: 6956 ld s2,336(sp) - 802053f0: 69b6 ld s3,328(sp) - 802053f2: 6a16 ld s4,320(sp) - 802053f4: bb8d j 80205166 <_Z7syscallv+0x7e> - struct Proc *p = myproc(); - 802053f6: eaca sd s2,336(sp) - 802053f8: 68a000ef jal 80205a82 <_Z6myprocv> - 802053fc: 84aa mv s1,a0 - Proc *p = myproc(); - 802053fe: 684000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205402: 793c ld a5,112(a0) - if(Pipe::create_pair(&rf, &wf) < 0) - 80205404: 090c addi a1,sp,144 - 80205406: 0808 addi a0,sp,16 - *ip = static_cast(argraw(n)); - 80205408: 0707e903 lwu s2,112(a5) - if(Pipe::create_pair(&rf, &wf) < 0) - 8020540c: f33fd0ef jal 8020333e <_ZN4Pipe11create_pairEPP4fileS2_> - 80205410: dc0549e3 bltz a0,802051e2 <_Z7syscallv+0xfa> - 80205414: e6ce sd s3,328(sp) - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) - 80205416: 69c2 ld s3,16(sp) - struct Proc *p = myproc(); - 80205418: 66a000ef jal 80205a82 <_Z6myprocv> - for (int i = 0; i < NOFILE; i++) - 8020541c: 0c850713 addi a4,a0,200 - 80205420: 4781 li a5,0 - 80205422: 4641 li a2,16 - if (p->ofile[i] == 0) - 80205424: 6314 ld a3,0(a4) - 80205426: 2a068763 beqz a3,802056d4 <_Z7syscallv+0x5ec> - for (int i = 0; i < NOFILE; i++) - 8020542a: 2785 addiw a5,a5,1 - 8020542c: 0721 addi a4,a4,8 - 8020542e: fec79be3 bne a5,a2,80205424 <_Z7syscallv+0x33c> - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) - 80205432: 57fd li a5,-1 - 80205434: c43e sw a5,8(sp) - FileTable::close(rf); - 80205436: 6542 ld a0,16(sp) - 80205438: e5dfd0ef jal 80203294 <_ZN9FileTable5closeEP4file> - FileTable::close(wf); - 8020543c: 654a ld a0,144(sp) - 8020543e: e57fd0ef jal 80203294 <_ZN9FileTable5closeEP4file> - 80205442: 69b6 ld s3,328(sp) - return -1; - 80205444: bb79 j 802051e2 <_Z7syscallv+0xfa> - return static_cast(myproc()->pid); - 80205446: 63c000ef jal 80205a82 <_Z6myprocv> - 8020544a: 08452483 lw s1,132(a0) - break; - 8020544e: bb21 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205450: 632000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205454: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 80205456: 5ba4 lw s1,112(a5) - struct Proc *p = myproc(); - 80205458: 62a000ef jal 80205a82 <_Z6myprocv> - if (oldfd < 0 || oldfd >= NOFILE || p->ofile[oldfd] == nullptr) - 8020545c: 47bd li a5,15 - 8020545e: d297ebe3 bltu a5,s1,80205194 <_Z7syscallv+0xac> - 80205462: 01848793 addi a5,s1,24 - 80205466: 078e slli a5,a5,0x3 - 80205468: 953e add a0,a0,a5 - 8020546a: 6508 ld a0,8(a0) - 8020546c: d20504e3 beqz a0,80205194 <_Z7syscallv+0xac> - 80205470: eaca sd s2,336(sp) - struct file *f = FileTable::dup(p->ofile[oldfd]); - 80205472: de1fd0ef jal 80203252 <_ZN9FileTable3dupEP4file> - 80205476: 892a mv s2,a0 - struct Proc *p = myproc(); - 80205478: 60a000ef jal 80205a82 <_Z6myprocv> - for (int i = 0; i < NOFILE; i++) - 8020547c: 0c850793 addi a5,a0,200 - 80205480: 4481 li s1,0 - 80205482: 46c1 li a3,16 - if (p->ofile[i] == 0) - 80205484: 6398 ld a4,0(a5) - 80205486: 20070263 beqz a4,8020568a <_Z7syscallv+0x5a2> - for (int i = 0; i < NOFILE; i++) - 8020548a: 2485 addiw s1,s1,1 - 8020548c: 07a1 addi a5,a5,8 - 8020548e: fed49be3 bne s1,a3,80205484 <_Z7syscallv+0x39c> - FileTable::close(f); // fdalloc failed - 80205492: 854a mv a0,s2 - 80205494: e01fd0ef jal 80203294 <_ZN9FileTable5closeEP4file> - ret = sys_exec(); - 80205498: 54fd li s1,-1 - return -1; - 8020549a: 6956 ld s2,336(sp) - 8020549c: b1e9 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 8020549e: 5e4000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802054a2: 793c ld a5,112(a0) - return static_cast(ProcManager::wait(p)); - 802054a4: 7ba8 ld a0,112(a5) - 802054a6: 4e5020ef jal 8020818a <_ZN11ProcManager4waitEy> - 802054aa: 84aa mv s1,a0 - break; - 802054ac: b96d j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802054ae: 5d4000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802054b2: 793c ld a5,112(a0) - return 0; - 802054b4: 4481 li s1,0 - ProcManager::exit(n); - 802054b6: 5ba8 lw a0,112(a5) - 802054b8: 445020ef jal 802080fc <_ZN11ProcManager4exitEi> - break; - 802054bc: b16d j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802054be: eaca sd s2,336(sp) - 802054c0: e6ce sd s3,328(sp) - 802054c2: 5c0000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802054c6: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802054c8: 0707a983 lw s3,112(a5) - Spinlock *lk = Timer::get_lock(); - 802054cc: 5fd010ef jal 802072c8 <_ZN5Timer8get_lockEv> - 802054d0: 892a mv s2,a0 - lk->acquire(); - 802054d2: 6ae000ef jal 80205b80 <_ZN8Spinlock7acquireEv> - ticks0 = Timer::get_ticks(); - 802054d6: 5cd010ef jal 802072a2 <_ZN5Timer9get_ticksEv> - 802054da: 84aa mv s1,a0 - while (Timer::get_ticks() - ticks0 < (uint64)n) - 802054dc: a821 j 802054f4 <_Z7syscallv+0x40c> - if (myproc()->killed) - 802054de: 5a4000ef jal 80205a82 <_Z6myprocv> - 802054e2: 0bc52783 lw a5,188(a0) - 802054e6: 24079663 bnez a5,80205732 <_Z7syscallv+0x64a> - ProcManager::sleep(Timer::get_tick_chan(), lk); - 802054ea: 5e9010ef jal 802072d2 <_ZN5Timer13get_tick_chanEv> - 802054ee: 85ca mv a1,s2 - 802054f0: 257020ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (Timer::get_ticks() - ticks0 < (uint64)n) - 802054f4: 5af010ef jal 802072a2 <_ZN5Timer9get_ticksEv> - 802054f8: 8d05 sub a0,a0,s1 - 802054fa: ff3562e3 bltu a0,s3,802054de <_Z7syscallv+0x3f6> - lk->release(); - 802054fe: 854a mv a0,s2 - 80205500: 618000ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return 0; - 80205504: 4481 li s1,0 - return 0; - 80205506: 6956 ld s2,336(sp) - 80205508: 69b6 ld s3,328(sp) - 8020550a: b9b1 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 8020550c: 576000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205510: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 80205512: 5ba4 lw s1,112(a5) - uint64 addr = myproc()->sz; - 80205514: 56e000ef jal 80205a82 <_Z6myprocv> - 80205518: 87aa mv a5,a0 - if (ProcManager::growproc(n) < 0) - 8020551a: 8526 mv a0,s1 - uint64 addr = myproc()->sz; - 8020551c: 73c4 ld s1,160(a5) - if (ProcManager::growproc(n) < 0) - 8020551e: 68f020ef jal 802083ac <_ZN11ProcManager8growprocEi> - 80205522: c40552e3 bgez a0,80205166 <_Z7syscallv+0x7e> - ret = sys_exec(); - 80205526: 54fd li s1,-1 - 80205528: b93d j 80205166 <_Z7syscallv+0x7e> - return Timer::get_ticks(); - 8020552a: 579010ef jal 802072a2 <_ZN5Timer9get_ticksEv> - 8020552e: 84aa mv s1,a0 - break; - 80205530: b91d j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205532: eaca sd s2,336(sp) - 80205534: 54e000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205538: 793c ld a5,112(a0) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 8020553a: 0904 addi s1,sp,144 - return p->tf->a0; - 8020553c: 0707b903 ld s2,112(a5) - return VM::copyinstr(myproc()->pagetable, buf, addr, max); - 80205540: 542000ef jal 80205a82 <_Z6myprocv> - 80205544: 7d28 ld a0,120(a0) - 80205546: 08000693 li a3,128 - 8020554a: 864a mv a2,s2 - 8020554c: 85a6 mv a1,s1 - 8020554e: 7c3000ef jal 80206510 <_ZN2VM9copyinstrEPyPcyy> - if (argstr(0, path, 128) < 0) - 80205552: c80548e3 bltz a0,802051e2 <_Z7syscallv+0xfa> - Inode *ip = VFS::namei(path); - 80205556: 8526 mv a0,s1 - 80205558: e58ff0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - 8020555c: 84aa mv s1,a0 - if (ip == nullptr) - 8020555e: c80502e3 beqz a0,802051e2 <_Z7syscallv+0xfa> - VFS::ilock(ip); - 80205562: cfeff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - if (ip->type != T_DIR) - 80205566: 04849703 lh a4,72(s1) - 8020556a: 4785 li a5,1 - VFS::iunlockput(ip); - 8020556c: 8526 mv a0,s1 - if (ip->type != T_DIR) - 8020556e: 2af71463 bne a4,a5,80205816 <_Z7syscallv+0x72e> - VFS::iunlock(ip); - 80205572: d0eff0ef jal 80204a80 <_ZN3VFS7iunlockEP5Inode> - struct Proc *p = myproc(); - 80205576: 50c000ef jal 80205a82 <_Z6myprocv> - 8020557a: 892a mv s2,a0 - VFS::iput(p->cwd); // release old cwd - 8020557c: 6168 ld a0,192(a0) - 8020557e: c5eff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - p->cwd = ip; // switch to new cwd - 80205582: 0c993023 sd s1,192(s2) - break; - 80205586: 6956 ld s2,336(sp) - return 0; - 80205588: 4481 li s1,0 - break; - 8020558a: bef1 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 8020558c: eaca sd s2,336(sp) - 8020558e: e6ce sd s3,328(sp) - 80205590: 4f2000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 80205594: 793c ld a5,112(a0) - return -1; - 80205596: 54fd li s1,-1 - *ip = static_cast(argraw(n)); - 80205598: 0707a903 lw s2,112(a5) - Proc *p = myproc(); - 8020559c: 4e6000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 802055a0: 793c ld a5,112(a0) - *ip = static_cast(argraw(n)); - 802055a2: 0787e983 lwu s3,120(a5) - struct Proc *p = myproc(); - 802055a6: 4dc000ef jal 80205a82 <_Z6myprocv> - if (fd < 0 || fd >= NOFILE || p->ofile[fd] == nullptr) - 802055aa: 47bd li a5,15 - 802055ac: 1927ea63 bltu a5,s2,80205740 <_Z7syscallv+0x658> - 802055b0: 01890793 addi a5,s2,24 - 802055b4: 078e slli a5,a5,0x3 - 802055b6: 953e add a0,a0,a5 - 802055b8: 6508 ld a0,8(a0) - 802055ba: 18050363 beqz a0,80205740 <_Z7syscallv+0x658> - return FileTable::stat(p->ofile[fd], stat_addr); - 802055be: 85ce mv a1,s3 - 802055c0: fbbfd0ef jal 8020357a <_ZN9FileTable4statEP4filey> - 802055c4: 84aa mv s1,a0 - 802055c6: 6956 ld s2,336(sp) - 802055c8: 69b6 ld s3,328(sp) - 802055ca: be71 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802055cc: 4b6000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802055d0: 793c ld a5,112(a0) - return ProcManager::kill(pid); - 802055d2: 5ba8 lw a0,112(a5) - 802055d4: 4f5020ef jal 802082c8 <_ZN11ProcManager4killEi> - 802055d8: 84aa mv s1,a0 - break; - 802055da: b671 j 80205166 <_Z7syscallv+0x7e> - return static_cast(fork()); - 802055dc: 380020ef jal 8020795c <_Z4forkv> - 802055e0: 84aa mv s1,a0 - break; - 802055e2: b651 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 802055e4: 49e000ef jal 80205a82 <_Z6myprocv> - return p->tf->a0; - 802055e8: 793c ld a5,112(a0) - return 0; - 802055ea: 4481 li s1,0 - Drivers::uart_putc(c); - 802055ec: 0707c503 lbu a0,112(a5) - 802055f0: 73c030ef jal 80208d2c <_ZN7Drivers9uart_putcEc> - break; - 802055f4: be8d j 80205166 <_Z7syscallv+0x7e> - Drivers::uart_puts("Unknown Syscall ID: "); - 802055f6: 0000c517 auipc a0,0xc - 802055fa: 55250513 addi a0,a0,1362 # 80211b48 - 802055fe: 76c030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(num); - 80205602: 8526 mv a0,s1 - 80205604: 0cf030ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n"); - 80205608: 0000c517 auipc a0,0xc - 8020560c: 21850513 addi a0,a0,536 # 80211820 - 80205610: 75a030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - ret = sys_exec(); - 80205614: 54fd li s1,-1 - 80205616: be81 j 80205166 <_Z7syscallv+0x7e> - Proc *p = myproc(); - 80205618: e6ce sd s3,328(sp) - 8020561a: e2d2 sd s4,320(sp) - 8020561c: 466000ef jal 80205a82 <_Z6myprocv> - return p->tf->a1; - 80205620: 793c ld a5,112(a0) - 80205622: 0787b983 ld s3,120(a5) - Proc *p = myproc(); - 80205626: 45c000ef jal 80205a82 <_Z6myprocv> - return p->tf->a2; - 8020562a: 793c ld a5,112(a0) - Inode *ip = VFS::namei(path); - 8020562c: 8526 mv a0,s1 - return p->tf->a2; - 8020562e: 0807ba03 ld s4,128(a5) - Inode *ip = VFS::namei(path); - 80205632: d7eff0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - if (ip != nullptr) - 80205636: d60513e3 bnez a0,8020539c <_Z7syscallv+0x2b4> - Inode *dp = VFS::nameiparent(path, name); - 8020563a: 09010913 addi s2,sp,144 - 8020563e: 8526 mv a0,s1 - 80205640: 85ca mv a1,s2 - 80205642: ec8ff0ef jal 80204d0a <_ZN3VFS11nameiparentEPKcPc> - 80205646: 84aa mv s1,a0 - if (dp == nullptr) - 80205648: d4050ce3 beqz a0,802053a0 <_Z7syscallv+0x2b8> - VFS::ilock(dp); - 8020564c: c14ff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - ip = dp->create(name, T_DEVICE, major, minor); - 80205650: 609c ld a5,0(s1) - 80205652: 010a171b slliw a4,s4,0x10 - 80205656: 0109969b slliw a3,s3,0x10 - 8020565a: 7b9c ld a5,48(a5) - 8020565c: 8526 mv a0,s1 - 8020565e: 4107571b sraiw a4,a4,0x10 - 80205662: 4106d69b sraiw a3,a3,0x10 - 80205666: 460d li a2,3 - 80205668: 85ca mv a1,s2 - 8020566a: 9782 jalr a5 - 8020566c: 87aa mv a5,a0 - VFS::iunlockput(dp); - 8020566e: 8526 mv a0,s1 - ip = dp->create(name, T_DEVICE, major, minor); - 80205670: 84be mv s1,a5 - VFS::iunlockput(dp); - 80205672: c48ff0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - if (ip == nullptr) - 80205676: d20485e3 beqz s1,802053a0 <_Z7syscallv+0x2b8> - VFS::iput(ip); - 8020567a: 8526 mv a0,s1 - 8020567c: b60ff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return 0; - 80205680: 4481 li s1,0 - break; - 80205682: 6956 ld s2,336(sp) - 80205684: 69b6 ld s3,328(sp) - 80205686: 6a16 ld s4,320(sp) - 80205688: bcf9 j 80205166 <_Z7syscallv+0x7e> - p->ofile[i] = f; - 8020568a: 01848793 addi a5,s1,24 - 8020568e: 078e slli a5,a5,0x3 - 80205690: 97aa add a5,a5,a0 - 80205692: 0127b423 sd s2,8(a5) - return newfd; - 80205696: 6956 ld s2,336(sp) - 80205698: b4f9 j 80205166 <_Z7syscallv+0x7e> - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 8020569a: 00397713 andi a4,s2,3 - p->ofile[i] = f; - 8020569e: 01848693 addi a3,s1,24 - f->readable = !(omode & O_WRONLY); - 802056a2: fff94793 not a5,s2 - p->ofile[i] = f; - 802056a6: 068e slli a3,a3,0x3 - f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 802056a8: 00e03733 snez a4,a4 - f->readable = !(omode & O_WRONLY); - 802056ac: 0087171b slliw a4,a4,0x8 - p->ofile[i] = f; - 802056b0: 9536 add a0,a0,a3 - f->readable = !(omode & O_WRONLY); - 802056b2: 8b85 andi a5,a5,1 - p->ofile[i] = f; - 802056b4: 01453423 sd s4,8(a0) - f->readable = !(omode & O_WRONLY); - 802056b8: 8fd9 or a5,a5,a4 - 802056ba: 00fa1423 sh a5,8(s4) - f->type = FD_INODE; - 802056be: 4705 li a4,1 - f->ip = ip; - 802056c0: 013a3c23 sd s3,24(s4) - f->type = FD_INODE; - 802056c4: 00ea2023 sw a4,0(s4) - f->off = 0; - 802056c8: 020a2023 sw zero,32(s4) - return fd; - 802056cc: 6956 ld s2,336(sp) - 802056ce: 69b6 ld s3,328(sp) - 802056d0: 6a16 ld s4,320(sp) - 802056d2: bc51 j 80205166 <_Z7syscallv+0x7e> - p->ofile[i] = f; - 802056d4: 01878713 addi a4,a5,24 - 802056d8: 070e slli a4,a4,0x3 - 802056da: 953a add a0,a0,a4 - 802056dc: 01353423 sd s3,8(a0) - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) - 802056e0: c43e sw a5,8(sp) - 802056e2: 69ca ld s3,144(sp) - struct Proc *p = myproc(); - 802056e4: 39e000ef jal 80205a82 <_Z6myprocv> - 802056e8: 85aa mv a1,a0 - for (int i = 0; i < NOFILE; i++) - 802056ea: 0c850713 addi a4,a0,200 - 802056ee: 4781 li a5,0 - 802056f0: 4641 li a2,16 - if (p->ofile[i] == 0) - 802056f2: 6314 ld a3,0(a4) - 802056f4: cea9 beqz a3,8020574e <_Z7syscallv+0x666> - for (int i = 0; i < NOFILE; i++) - 802056f6: 2785 addiw a5,a5,1 - 802056f8: 0721 addi a4,a4,8 - 802056fa: fec79ce3 bne a5,a2,802056f2 <_Z7syscallv+0x60a> - if (fd0 >= 0) - 802056fe: 47a2 lw a5,8(sp) - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) - 80205700: 577d li a4,-1 - 80205702: c63a sw a4,12(sp) - if (fd0 >= 0) - 80205704: d207c9e3 bltz a5,80205436 <_Z7syscallv+0x34e> - p->ofile[fd0] = nullptr; - 80205708: 07e1 addi a5,a5,24 - 8020570a: 078e slli a5,a5,0x3 - 8020570c: 97a6 add a5,a5,s1 - 8020570e: 0007b423 sd zero,8(a5) - 80205712: b315 j 80205436 <_Z7syscallv+0x34e> - if (fd < 0 || fd >= NOFILE || (f = proc->ofile[fd]) == 0) - 80205714: 47bd li a5,15 - return -1; - 80205716: 54fd li s1,-1 - if (fd < 0 || fd >= NOFILE || (f = proc->ofile[fd]) == 0) - 80205718: 0127e963 bltu a5,s2,8020572a <_Z7syscallv+0x642> - 8020571c: 01890793 addi a5,s2,24 - 80205720: 078e slli a5,a5,0x3 - 80205722: 953e add a0,a0,a5 - 80205724: 6508 ld a0,8(a0) - 80205726: ca051fe3 bnez a0,802053e4 <_Z7syscallv+0x2fc> - 8020572a: 6956 ld s2,336(sp) - 8020572c: 69b6 ld s3,328(sp) - 8020572e: 6a16 ld s4,320(sp) - 80205730: bc1d j 80205166 <_Z7syscallv+0x7e> - lk->release(); - 80205732: 854a mv a0,s2 - 80205734: 3e4000ef jal 80205b18 <_ZN8Spinlock7releaseEv> - ret = sys_exec(); - 80205738: 54fd li s1,-1 - return -1; - 8020573a: 6956 ld s2,336(sp) - 8020573c: 69b6 ld s3,328(sp) - 8020573e: b425 j 80205166 <_Z7syscallv+0x7e> - 80205740: 6956 ld s2,336(sp) - 80205742: 69b6 ld s3,328(sp) - 80205744: b40d j 80205166 <_Z7syscallv+0x7e> - 80205746: 6956 ld s2,336(sp) - 80205748: 69b6 ld s3,328(sp) - ret = sys_exec(); - 8020574a: 54fd li s1,-1 - 8020574c: bc29 j 80205166 <_Z7syscallv+0x7e> - p->ofile[i] = f; - 8020574e: 01878713 addi a4,a5,24 - if (VM::copyout(p->pagetable, fdarray, (char *)&fd0, sizeof(int)) < 0 || - 80205752: 7ca8 ld a0,120(s1) - p->ofile[i] = f; - 80205754: 070e slli a4,a4,0x3 - 80205756: 95ba add a1,a1,a4 - 80205758: 0135b423 sd s3,8(a1) - if (VM::copyout(p->pagetable, fdarray, (char *)&fd0, sizeof(int)) < 0 || - 8020575c: 4691 li a3,4 - 8020575e: 0030 addi a2,sp,8 - 80205760: 85ca mv a1,s2 - if ((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0) - 80205762: c63e sw a5,12(sp) - if (VM::copyout(p->pagetable, fdarray, (char *)&fd0, sizeof(int)) < 0 || - 80205764: 73f000ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 80205768: 0a054a63 bltz a0,8020581c <_Z7syscallv+0x734> - VM::copyout(p->pagetable, fdarray + sizeof(int), (char *)&fd1, sizeof(int)) < 0) - 8020576c: 7ca8 ld a0,120(s1) - 8020576e: 4691 li a3,4 - 80205770: 0070 addi a2,sp,12 - 80205772: 00490593 addi a1,s2,4 - 80205776: 72d000ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - if (VM::copyout(p->pagetable, fdarray, (char *)&fd0, sizeof(int)) < 0 || - 8020577a: 0a054163 bltz a0,8020581c <_Z7syscallv+0x734> - break; - 8020577e: 6956 ld s2,336(sp) - 80205780: 69b6 ld s3,328(sp) - return 0; - 80205782: 4481 li s1,0 - break; - 80205784: b2cd j 80205166 <_Z7syscallv+0x7e> - ip = VFS::namei(path); - 80205786: c2aff0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - 8020578a: 89aa mv s3,a0 - if (ip == nullptr) - 8020578c: bc0990e3 bnez s3,8020534c <_Z7syscallv+0x264> - 80205790: 69b6 ld s3,328(sp) - 80205792: bc81 j 802051e2 <_Z7syscallv+0xfa> - if (fd == 1 && proc->ofile[fd] == nullptr) // stdout - 80205794: 0d0a3503 ld a0,208(s4) - 80205798: a8051de3 bnez a0,80205232 <_Z7syscallv+0x14a> - 8020579c: fa5a sd s6,304(sp) - 8020579e: f262 sd s8,288(sp) - 802057a0: ee66 sd s9,280(sp) - int i = 0; - 802057a2: 4b01 li s6,0 - 802057a4: 09010c13 addi s8,sp,144 - if (len > MAX_WRITE_BUF) - 802057a8: 08000c93 li s9,128 - while (i < n) - 802057ac: 0c905d63 blez s1,80205886 <_Z7syscallv+0x79e> - 802057b0: e6ce sd s3,328(sp) - 802057b2: fe56 sd s5,312(sp) - if (len > MAX_WRITE_BUF) - 802057b4: 41648abb subw s5,s1,s6 - 802057b8: 015cd463 bge s9,s5,802057c0 <_Z7syscallv+0x6d8> - 802057bc: 08000a93 li s5,128 - if (VM::copyin(proc->pagetable, buf, p + i, static_cast(len)) < 0) - 802057c0: 078a3503 ld a0,120(s4) - 802057c4: 86d6 mv a3,s5 - 802057c6: 017b0633 add a2,s6,s7 - 802057ca: 85e2 mv a1,s8 - 802057cc: 4b5000ef jal 80206480 <_ZN2VM6copyinEPyPcyy> - 802057d0: 0a054363 bltz a0,80205876 <_Z7syscallv+0x78e> - 802057d4: 8962 mv s2,s8 - 802057d6: 015c09b3 add s3,s8,s5 - Drivers::uart_putc(buf[j]); - 802057da: 00094503 lbu a0,0(s2) - for (int j = 0; j < len; j++) - 802057de: 0905 addi s2,s2,1 - Drivers::uart_putc(buf[j]); - 802057e0: 54c030ef jal 80208d2c <_ZN7Drivers9uart_putcEc> - for (int j = 0; j < len; j++) - 802057e4: ff391be3 bne s2,s3,802057da <_Z7syscallv+0x6f2> - i += len; - 802057e8: 016a8b3b addw s6,s5,s6 - while (i < n) - 802057ec: fc9b44e3 blt s6,s1,802057b4 <_Z7syscallv+0x6cc> - 802057f0: 6956 ld s2,336(sp) - 802057f2: 69b6 ld s3,328(sp) - 802057f4: 6a16 ld s4,320(sp) - 802057f6: 7af2 ld s5,312(sp) - 802057f8: 7b52 ld s6,304(sp) - 802057fa: 7bb2 ld s7,296(sp) - 802057fc: 7c12 ld s8,288(sp) - 802057fe: 6cf2 ld s9,280(sp) - 80205800: 967ff06f j 80205166 <_Z7syscallv+0x7e> - 80205804: 6956 ld s2,336(sp) - 80205806: 6a16 ld s4,320(sp) - 80205808: 7bb2 ld s7,296(sp) - ret = sys_exec(); - 8020580a: 54fd li s1,-1 - 8020580c: 95bff06f j 80205166 <_Z7syscallv+0x7e> - VFS::iput(ip); - 80205810: 9ccff0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - return -1; // the dir is exist - 80205814: b2f9 j 802051e2 <_Z7syscallv+0xfa> - VFS::iunlockput(ip); - 80205816: aa4ff0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - return -1; - 8020581a: b2e1 j 802051e2 <_Z7syscallv+0xfa> - p->ofile[fd0] = nullptr; - 8020581c: 4722 lw a4,8(sp) - p->ofile[fd1] = nullptr; - 8020581e: 47b2 lw a5,12(sp) - p->ofile[fd0] = nullptr; - 80205820: 0761 addi a4,a4,24 - 80205822: 070e slli a4,a4,0x3 - p->ofile[fd1] = nullptr; - 80205824: 07e1 addi a5,a5,24 - p->ofile[fd0] = nullptr; - 80205826: 9726 add a4,a4,s1 - p->ofile[fd1] = nullptr; - 80205828: 078e slli a5,a5,0x3 - p->ofile[fd0] = nullptr; - 8020582a: 00073423 sd zero,8(a4) - p->ofile[fd1] = nullptr; - 8020582e: bdf9 j 8020570c <_Z7syscallv+0x624> - return Drivers::console_read(p, n); - 80205830: 85ce mv a1,s3 - 80205832: 8552 mv a0,s4 - 80205834: 7d4030ef jal 80209008 <_ZN7Drivers12console_readEyi> - 80205838: 84aa mv s1,a0 - 8020583a: 6956 ld s2,336(sp) - 8020583c: 69b6 ld s3,328(sp) - 8020583e: 6a16 ld s4,320(sp) - 80205840: 927ff06f j 80205166 <_Z7syscallv+0x7e> - Inode *dp = VFS::nameiparent(path, name); - 80205844: 09010993 addi s3,sp,144 - 80205848: 8526 mv a0,s1 - 8020584a: 85ce mv a1,s3 - 8020584c: cbeff0ef jal 80204d0a <_ZN3VFS11nameiparentEPKcPc> - 80205850: 84aa mv s1,a0 - if (dp) - 80205852: dd1d beqz a0,80205790 <_Z7syscallv+0x6a8> - VFS::ilock(dp); - 80205854: a0cff0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - ip = dp->create(name, T_FILE, 0, 0); - 80205858: 609c ld a5,0(s1) - 8020585a: 85ce mv a1,s3 - 8020585c: 4701 li a4,0 - 8020585e: 7b9c ld a5,48(a5) - 80205860: 4681 li a3,0 - 80205862: 4609 li a2,2 - 80205864: 8526 mv a0,s1 - 80205866: 9782 jalr a5 - 80205868: 89aa mv s3,a0 - VFS::iunlockput(dp); - 8020586a: 8526 mv a0,s1 - 8020586c: a4eff0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - if (ip == nullptr) - 80205870: ac099ee3 bnez s3,8020534c <_Z7syscallv+0x264> - 80205874: bf31 j 80205790 <_Z7syscallv+0x6a8> - Drivers::uart_puts("sys_write: copyin failed\n"); - 80205876: 0000c517 auipc a0,0xc - 8020587a: 28250513 addi a0,a0,642 # 80211af8 - 8020587e: 4ec030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - return static_cast(-1); - 80205882: 54fd li s1,-1 - 80205884: b7b5 j 802057f0 <_Z7syscallv+0x708> - 80205886: 6956 ld s2,336(sp) - 80205888: 6a16 ld s4,320(sp) - 8020588a: 7b52 ld s6,304(sp) - 8020588c: 7bb2 ld s7,296(sp) - 8020588e: 7c12 ld s8,288(sp) - 80205890: 6cf2 ld s9,280(sp) - 80205892: 8d5ff06f j 80205166 <_Z7syscallv+0x7e> - -0000000080205896 <_Znwm>: - * Cons: Allocates 4KB for every object (wasteful for small objects), - * but acceptable for current stage. - */ - -void *operator new(unsigned long size) -{ - 80205896: 1141 addi sp,sp,-16 - 80205898: e406 sd ra,8(sp) - // Safety check: PMM allocates 4096 bytes max per call - if (size > 4096) - 8020589a: 6785 lui a5,0x1 - 8020589c: 00a7f963 bgeu a5,a0,802058ae <_Znwm+0x18> - { - Drivers::uart_puts("panic: new allocation too big (max 4096)\n"); - 802058a0: 0000c517 auipc a0,0xc - 802058a4: 2c050513 addi a0,a0,704 # 80211b60 - 802058a8: 4c2030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802058ac: a001 j 802058ac <_Znwm+0x16> - ; - } - - void *p = PMM::alloc_page(); - 802058ae: 0b5010ef jal 80207162 <_ZN3PMM10alloc_pageEv> - if (!p) - 802058b2: c501 beqz a0,802058ba <_Znwm+0x24> - } - // PMM::alloc_page returns zeroed memory usually, - // but standard 'new' doesn't guarantee it. - // The constructor will handle initialization. - return p; -} - 802058b4: 60a2 ld ra,8(sp) - 802058b6: 0141 addi sp,sp,16 - 802058b8: 8082 ret - Drivers::uart_puts("panic: new out of memory\n"); - 802058ba: 0000c517 auipc a0,0xc - 802058be: 2d650513 addi a0,a0,726 # 80211b90 - 802058c2: 4a8030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802058c6: a001 j 802058c6 <_Znwm+0x30> - -00000000802058c8 <_Znam>: - -void *operator new[](unsigned long size) -{ - 802058c8: 1141 addi sp,sp,-16 - 802058ca: e406 sd ra,8(sp) - if (size > 4096) - 802058cc: 6785 lui a5,0x1 - 802058ce: 00a7f963 bgeu a5,a0,802058e0 <_Znam+0x18> - Drivers::uart_puts("panic: new allocation too big (max 4096)\n"); - 802058d2: 0000c517 auipc a0,0xc - 802058d6: 28e50513 addi a0,a0,654 # 80211b60 - 802058da: 490030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802058de: a001 j 802058de <_Znam+0x16> - void *p = PMM::alloc_page(); - 802058e0: 083010ef jal 80207162 <_ZN3PMM10alloc_pageEv> - if (!p) - 802058e4: c501 beqz a0,802058ec <_Znam+0x24> - return operator new(size); -} - 802058e6: 60a2 ld ra,8(sp) - 802058e8: 0141 addi sp,sp,16 - 802058ea: 8082 ret - Drivers::uart_puts("panic: new out of memory\n"); - 802058ec: 0000c517 auipc a0,0xc - 802058f0: 2a450513 addi a0,a0,676 # 80211b90 - 802058f4: 476030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802058f8: a001 j 802058f8 <_Znam+0x30> - -00000000802058fa <_ZdlPv>: - -void operator delete(void *p) -{ - if (p) - 802058fa: c119 beqz a0,80205900 <_ZdlPv+0x6> - PMM::free_page(p); - 802058fc: 0890106f j 80207184 <_ZN3PMM9free_pageEPv> -} - 80205900: 8082 ret - -0000000080205902 <_ZdaPv>: - -void operator delete[](void *p) - 80205902: c119 beqz a0,80205908 <_ZdaPv+0x6> - 80205904: 0810106f j 80207184 <_ZN3PMM9free_pageEPv> - 80205908: 8082 ret - -000000008020590a <_ZdlPvm>: -// 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) - 8020590a: c119 beqz a0,80205910 <_ZdlPvm+0x6> - PMM::free_page(p); - 8020590c: 0790106f j 80207184 <_ZN3PMM9free_pageEPv> -} - 80205910: 8082 ret - -0000000080205912 <_ZdaPvm>: - -void operator delete[](void *p, unsigned long size) - 80205912: c119 beqz a0,80205918 <_ZdaPvm+0x6> - 80205914: 0710106f j 80207184 <_ZN3PMM9free_pageEPv> - 80205918: 8082 ret - -000000008020591a <_ZnwmPv>: - -void *operator new(unsigned long size, void *ptr) -{ - (void)size; - return ptr; - 8020591a: 852e mv a0,a1 - 8020591c: 8082 ret - -000000008020591e : -extern uint64 g_dtb_addr; - -volatile static int started = 0; - -extern "C" void kernel_main(uint64 hartid, uint64 dtb) -{ - 8020591e: 1141 addi sp,sp,-16 - 80205920: e022 sd s0,0(sp) - 80205922: e406 sd ra,8(sp) - 80205924: 00018417 auipc s0,0x18 - 80205928: 2cc40413 addi s0,s0,716 # 8021dbf0 <_ZL7started> - if (hartid == 0) - 8020592c: c90d beqz a0,8020595e - - Drivers::uart_puts("[Boot] System initialized. Entering scheduler...\n"); - } - else - { - while (__atomic_load_n(&started, __ATOMIC_ACQUIRE) == 0) - 8020592e: 401c lw a5,0(s0) - 80205930: 0230000f fence r,rw - 80205934: 2781 sext.w a5,a5 - 80205936: dfe5 beqz a5,8020592e - ; - - VM::kvminithart(); - 80205938: 759000ef jal 80206890 <_ZN2VM11kvminithartEv> - Trap::inithart(); - 8020593c: 050030ef jal 8020898c <_ZN4Trap8inithartEv> - PLIC::inithart(); - 80205940: 7cd030ef jal 8020990c <_ZN4PLIC8inithartEv> - Timer::init(); - 80205944: 0f3010ef jal 80207236 <_ZN5Timer4initEv> - Drivers::uart_puts("[Boot] Hart started.\n"); - 80205948: 0000c517 auipc a0,0xc - 8020594c: 2d050513 addi a0,a0,720 # 80211c18 - 80205950: 41a030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - - ProcManager::scheduler(); // Enable Scheduler - 80205954: 6402 ld s0,0(sp) - 80205956: 60a2 ld ra,8(sp) - 80205958: 0141 addi sp,sp,16 - ProcManager::scheduler(); // Enable Scheduler - 8020595a: 1fe0206f j 80207b58 <_ZN11ProcManager9schedulerEv> - fdt_init(dtb); - 8020595e: 852e mv a0,a1 - 80205960: 5ad020ef jal 8020870c <_Z8fdt_inity> - Drivers::uart_init(); - 80205964: 346030ef jal 80208caa <_ZN7Drivers9uart_initEv> - Drivers::uart_puts("\n[Lume OS] Booting...\n"); - 80205968: 0000c517 auipc a0,0xc - 8020596c: 24850513 addi a0,a0,584 # 80211bb0 - 80205970: 3fa030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("[Boot] PMP configured.\n"); - 80205974: 0000c517 auipc a0,0xc - 80205978: 25450513 addi a0,a0,596 # 80211bc8 - 8020597c: 3ee030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - PMM::init(); // Physical Memory Management - 80205980: 656010ef jal 80206fd6 <_ZN3PMM4initEv> - VM::kvminit(); // Kernel Pagetable - 80205984: 5d9000ef jal 8020675c <_ZN2VM7kvminitEv> - VM::kvminithart(); // Enable MMU - 80205988: 709000ef jal 80206890 <_ZN2VM11kvminithartEv> - Slab::init(); - 8020598c: 75f000ef jal 802068ea <_ZN4Slab4initEv> - Trap::init(); // Trap Management - 80205990: 7f1020ef jal 80208980 <_ZN4Trap4initEv> - Trap::inithart(); - 80205994: 7f9020ef jal 8020898c <_ZN4Trap8inithartEv> - PLIC::init(); - 80205998: 733030ef jal 802098ca <_ZN4PLIC4initEv> - PLIC::inithart(); - 8020599c: 771030ef jal 8020990c <_ZN4PLIC8inithartEv> - VirtIO::init(); - 802059a0: 15d030ef jal 802092fc <_ZN6VirtIO4initEv> - BufferCache::init(); - 802059a4: 297020ef jal 8020843a <_ZN11BufferCache4initEv> - VFS::init(); - 802059a8: 828ff0ef jal 802049d0 <_ZN3VFS4initEv> - FileTable::init(); - 802059ac: 831fd0ef jal 802031dc <_ZN9FileTable4initEv> - Timer::init(); - 802059b0: 087010ef jal 80207236 <_ZN5Timer4initEv> - ProcManager::init(); // Process Management - 802059b4: 114020ef jal 80207ac8 <_ZN11ProcManager4initEv> - ProcManager::user_init(); // Initialize first user process - 802059b8: 39e020ef jal 80207d56 <_ZN11ProcManager9user_initEv> - __atomic_store_n(&started, 1, __ATOMIC_RELEASE); - 802059bc: 4785 li a5,1 - 802059be: 0310000f fence rw,w - 802059c2: c01c sw a5,0(s0) - Drivers::uart_puts("[Boot] System initialized. Entering scheduler...\n"); - 802059c4: 0000c517 auipc a0,0xc - 802059c8: 21c50513 addi a0,a0,540 # 80211be0 - 802059cc: 39e030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 802059d0: 6402 ld s0,0(sp) - 802059d2: 60a2 ld ra,8(sp) - 802059d4: 0141 addi sp,sp,16 - ProcManager::scheduler(); // Enable Scheduler - 802059d6: 1820206f j 80207b58 <_ZN11ProcManager9schedulerEv> - -00000000802059da <_ZN8Spinlock4initEPKc>: - -// Spinlock Implementation - -void Spinlock::init(const char *lock_name) -{ - name = lock_name; - 802059da: e50c sd a1,8(a0) - locked = 0; - 802059dc: 00052023 sw zero,0(a0) - cpu = nullptr; - 802059e0: 00053823 sd zero,16(a0) -} - 802059e4: 8082 ret - -00000000802059e6 <_ZN5Mutex4initEPKc>: - name = lock_name; - 802059e6: 0000c797 auipc a5,0xc - 802059ea: 24a78793 addi a5,a5,586 # 80211c30 - -// Mutex Implementation (Sleep Locks) - -void Mutex::init(const char *lock_name) -{ - name = lock_name; - 802059ee: e50c sd a1,8(a0) - locked = 0; - 802059f0: 00052023 sw zero,0(a0) - pid = 0; - 802059f4: 00052823 sw zero,16(a0) - name = lock_name; - 802059f8: f11c sd a5,32(a0) - locked = 0; - 802059fa: 00052c23 sw zero,24(a0) - cpu = nullptr; - 802059fe: 02053423 sd zero,40(a0) - lk.init("mutex_internal"); -} - 80205a02: 8082 ret - -0000000080205a04 <_Z8push_offv>: -} - -// Interrupt Depth Management - -void push_off(void) -{ - 80205a04: 1141 addi sp,sp,-16 - 80205a06: e406 sd ra,8(sp) - 80205a08: e022 sd s0,0(sp) - -static inline uint64 -r_sstatus() -{ - uint64 x; - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205a0a: 10002473 csrr s0,sstatus - 80205a0e: 100027f3 csrr a5,sstatus - -// disable device interrupts -static inline void -intr_off() -{ - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205a12: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205a14: 10079073 csrw sstatus,a5 - int old = intr_get(); - intr_off(); - - struct cpu *c = mycpu(); - 80205a18: 59f010ef jal 802077b6 <_Z5mycpuv> - - if (c->noff == 0) - 80205a1c: 5d3c lw a5,120(a0) - 80205a1e: e781 bnez a5,80205a26 <_Z8push_offv+0x22> -// are device interrupts enabled? -static inline int -intr_get() -{ - uint64 x = r_sstatus(); - return (x & SSTATUS_SIE) != 0; - 80205a20: 8005 srli s0,s0,0x1 - 80205a22: 8805 andi s0,s0,1 - c->intena = old; - 80205a24: dd60 sw s0,124(a0) - - c->noff += 1; -} - 80205a26: 60a2 ld ra,8(sp) - 80205a28: 6402 ld s0,0(sp) - c->noff += 1; - 80205a2a: 2785 addiw a5,a5,1 - 80205a2c: dd3c sw a5,120(a0) -} - 80205a2e: 0141 addi sp,sp,16 - 80205a30: 8082 ret - -0000000080205a32 <_Z7pop_offv>: - -void pop_off(void) -{ - 80205a32: 1141 addi sp,sp,-16 - 80205a34: e406 sd ra,8(sp) - struct cpu *c = mycpu(); - 80205a36: 581010ef jal 802077b6 <_Z5mycpuv> - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205a3a: 100027f3 csrr a5,sstatus - return (x & SSTATUS_SIE) != 0; - 80205a3e: 8b89 andi a5,a5,2 - - if (intr_get()) - 80205a40: e39d bnez a5,80205a66 <_Z7pop_offv+0x34> - { - Drivers::uart_puts("panic: pop_off - interruptible\n"); - while (1) - ; - } - if (c->noff < 1) - 80205a42: 5d3c lw a5,120(a0) - 80205a44: 02f05863 blez a5,80205a74 <_Z7pop_offv+0x42> - Drivers::uart_puts("panic: pop_off count\n"); - while (1) - ; - } - - c->noff -= 1; - 80205a48: fff7871b addiw a4,a5,-1 - 80205a4c: dd38 sw a4,120(a0) - - // An interrupt is only truly enabled when the nesting level returns to zero and the outermost layer allows interrupts. - if (c->noff == 0 && c->intena) - 80205a4e: eb09 bnez a4,80205a60 <_Z7pop_offv+0x2e> - 80205a50: 5d7c lw a5,124(a0) - 80205a52: c799 beqz a5,80205a60 <_Z7pop_offv+0x2e> - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205a54: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() | SSTATUS_SIE); - 80205a58: 0027e793 ori a5,a5,2 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205a5c: 10079073 csrw sstatus,a5 - intr_on(); - 80205a60: 60a2 ld ra,8(sp) - 80205a62: 0141 addi sp,sp,16 - 80205a64: 8082 ret - Drivers::uart_puts("panic: pop_off - interruptible\n"); - 80205a66: 0000c517 auipc a0,0xc - 80205a6a: 1da50513 addi a0,a0,474 # 80211c40 - 80205a6e: 2fc030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80205a72: a001 j 80205a72 <_Z7pop_offv+0x40> - Drivers::uart_puts("panic: pop_off count\n"); - 80205a74: 0000c517 auipc a0,0xc - 80205a78: 1ec50513 addi a0,a0,492 # 80211c60 - 80205a7c: 2ee030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80205a80: a001 j 80205a80 <_Z7pop_offv+0x4e> - -0000000080205a82 <_Z6myprocv>: -{ - 80205a82: 1141 addi sp,sp,-16 - 80205a84: e406 sd ra,8(sp) - 80205a86: e022 sd s0,0(sp) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205a88: 10002473 csrr s0,sstatus - 80205a8c: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205a90: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205a92: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205a96: 521010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205a9a: 5d3c lw a5,120(a0) - 80205a9c: e781 bnez a5,80205aa4 <_Z6myprocv+0x22> - return (x & SSTATUS_SIE) != 0; - 80205a9e: 8005 srli s0,s0,0x1 - 80205aa0: 8805 andi s0,s0,1 - c->intena = old; - 80205aa2: dd60 sw s0,124(a0) - c->noff += 1; - 80205aa4: 2785 addiw a5,a5,1 - 80205aa6: dd3c sw a5,120(a0) - struct cpu *c = mycpu(); - 80205aa8: 50f010ef jal 802077b6 <_Z5mycpuv> - struct Proc *p = c->proc; - 80205aac: 6100 ld s0,0(a0) - pop_off(); - 80205aae: f85ff0ef jal 80205a32 <_Z7pop_offv> -} - 80205ab2: 60a2 ld ra,8(sp) - 80205ab4: 8522 mv a0,s0 - 80205ab6: 6402 ld s0,0(sp) - 80205ab8: 0141 addi sp,sp,16 - 80205aba: 8082 ret - -0000000080205abc <_ZN8Spinlock7holdingEv>: -{ - 80205abc: 1101 addi sp,sp,-32 - 80205abe: e822 sd s0,16(sp) - 80205ac0: ec06 sd ra,24(sp) - 80205ac2: e426 sd s1,8(sp) - 80205ac4: 842a mv s0,a0 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205ac6: 100024f3 csrr s1,sstatus - 80205aca: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205ace: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205ad0: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205ad4: 4e3010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205ad8: 5d3c lw a5,120(a0) - 80205ada: e781 bnez a5,80205ae2 <_ZN8Spinlock7holdingEv+0x26> - return (x & SSTATUS_SIE) != 0; - 80205adc: 8085 srli s1,s1,0x1 - 80205ade: 8885 andi s1,s1,1 - c->intena = old; - 80205ae0: dd64 sw s1,124(a0) - r = (locked && cpu == mycpu()); - 80205ae2: 4018 lw a4,0(s0) - c->noff += 1; - 80205ae4: 2785 addiw a5,a5,1 - 80205ae6: dd3c sw a5,120(a0) - r = (locked && cpu == mycpu()); - 80205ae8: 4481 li s1,0 - 80205aea: eb09 bnez a4,80205afc <_ZN8Spinlock7holdingEv+0x40> - pop_off(); - 80205aec: f47ff0ef jal 80205a32 <_Z7pop_offv> -} - 80205af0: 60e2 ld ra,24(sp) - 80205af2: 6442 ld s0,16(sp) - 80205af4: 8526 mv a0,s1 - 80205af6: 64a2 ld s1,8(sp) - 80205af8: 6105 addi sp,sp,32 - 80205afa: 8082 ret - r = (locked && cpu == mycpu()); - 80205afc: 6804 ld s1,16(s0) - 80205afe: 4b9010ef jal 802077b6 <_Z5mycpuv> - 80205b02: 8c89 sub s1,s1,a0 - pop_off(); - 80205b04: f2fff0ef jal 80205a32 <_Z7pop_offv> -} - 80205b08: 60e2 ld ra,24(sp) - 80205b0a: 6442 ld s0,16(sp) - r = (locked && cpu == mycpu()); - 80205b0c: 0014b493 seqz s1,s1 -} - 80205b10: 8526 mv a0,s1 - 80205b12: 64a2 ld s1,8(sp) - 80205b14: 6105 addi sp,sp,32 - 80205b16: 8082 ret - -0000000080205b18 <_ZN8Spinlock7releaseEv>: -{ - 80205b18: 1101 addi sp,sp,-32 - 80205b1a: e822 sd s0,16(sp) - 80205b1c: ec06 sd ra,24(sp) - 80205b1e: e426 sd s1,8(sp) - 80205b20: 842a mv s0,a0 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205b22: 100024f3 csrr s1,sstatus - 80205b26: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205b2a: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205b2c: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205b30: 487010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205b34: 5d3c lw a5,120(a0) - 80205b36: e789 bnez a5,80205b40 <_ZN8Spinlock7releaseEv+0x28> - return (x & SSTATUS_SIE) != 0; - 80205b38: 0014d713 srli a4,s1,0x1 - 80205b3c: 8b05 andi a4,a4,1 - c->intena = old; - 80205b3e: dd78 sw a4,124(a0) - r = (locked && cpu == mycpu()); - 80205b40: 4018 lw a4,0(s0) - c->noff += 1; - 80205b42: 2785 addiw a5,a5,1 - 80205b44: dd3c sw a5,120(a0) - r = (locked && cpu == mycpu()); - 80205b46: eb11 bnez a4,80205b5a <_ZN8Spinlock7releaseEv+0x42> - pop_off(); - 80205b48: eebff0ef jal 80205a32 <_Z7pop_offv> - Drivers::uart_puts("panic: release not holding\n"); - 80205b4c: 0000c517 auipc a0,0xc - 80205b50: 12c50513 addi a0,a0,300 # 80211c78 - 80205b54: 216030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80205b58: a001 j 80205b58 <_ZN8Spinlock7releaseEv+0x40> - r = (locked && cpu == mycpu()); - 80205b5a: 6804 ld s1,16(s0) - 80205b5c: 45b010ef jal 802077b6 <_Z5mycpuv> - 80205b60: fea494e3 bne s1,a0,80205b48 <_ZN8Spinlock7releaseEv+0x30> - pop_off(); - 80205b64: ecfff0ef jal 80205a32 <_Z7pop_offv> - cpu = nullptr; - 80205b68: 00043823 sd zero,16(s0) - __atomic_store_n(&locked, 0, __ATOMIC_RELEASE); - 80205b6c: 0310000f fence rw,w - 80205b70: 00042023 sw zero,0(s0) -} - 80205b74: 6442 ld s0,16(sp) - 80205b76: 60e2 ld ra,24(sp) - 80205b78: 64a2 ld s1,8(sp) - 80205b7a: 6105 addi sp,sp,32 - pop_off(); - 80205b7c: eb7ff06f j 80205a32 <_Z7pop_offv> - -0000000080205b80 <_ZN8Spinlock7acquireEv>: -{ - 80205b80: 1101 addi sp,sp,-32 - 80205b82: e822 sd s0,16(sp) - 80205b84: ec06 sd ra,24(sp) - 80205b86: e426 sd s1,8(sp) - 80205b88: 842a mv s0,a0 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205b8a: 100024f3 csrr s1,sstatus - 80205b8e: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205b92: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205b94: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205b98: 41f010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205b9c: 5d3c lw a5,120(a0) - 80205b9e: e789 bnez a5,80205ba8 <_ZN8Spinlock7acquireEv+0x28> - return (x & SSTATUS_SIE) != 0; - 80205ba0: 0014d713 srli a4,s1,0x1 - 80205ba4: 8b05 andi a4,a4,1 - c->intena = old; - 80205ba6: dd78 sw a4,124(a0) - c->noff += 1; - 80205ba8: 2785 addiw a5,a5,1 - 80205baa: dd3c sw a5,120(a0) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205bac: 100024f3 csrr s1,sstatus - 80205bb0: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205bb4: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205bb6: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205bba: 3fd010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205bbe: 5d3c lw a5,120(a0) - 80205bc0: e789 bnez a5,80205bca <_ZN8Spinlock7acquireEv+0x4a> - return (x & SSTATUS_SIE) != 0; - 80205bc2: 0014d713 srli a4,s1,0x1 - 80205bc6: 8b05 andi a4,a4,1 - c->intena = old; - 80205bc8: dd78 sw a4,124(a0) - r = (locked && cpu == mycpu()); - 80205bca: 4018 lw a4,0(s0) - c->noff += 1; - 80205bcc: 2785 addiw a5,a5,1 - 80205bce: dd3c sw a5,120(a0) - r = (locked && cpu == mycpu()); - 80205bd0: eb05 bnez a4,80205c00 <_ZN8Spinlock7acquireEv+0x80> - pop_off(); - 80205bd2: e61ff0ef jal 80205a32 <_Z7pop_offv> - while (__atomic_exchange_n(&locked, 1, __ATOMIC_ACQUIRE)) - 80205bd6: 4685 li a3,1 - while (__atomic_load_n(&locked, __ATOMIC_RELAXED) == 1) - 80205bd8: 4705 li a4,1 - while (__atomic_exchange_n(&locked, 1, __ATOMIC_ACQUIRE)) - 80205bda: 87b6 mv a5,a3 - 80205bdc: 0cf427af amoswap.w.aq a5,a5,(s0) - 80205be0: 2781 sext.w a5,a5 - 80205be2: c799 beqz a5,80205bf0 <_ZN8Spinlock7acquireEv+0x70> - while (__atomic_load_n(&locked, __ATOMIC_RELAXED) == 1) - 80205be4: 401c lw a5,0(s0) - 80205be6: 2781 sext.w a5,a5 - 80205be8: fee799e3 bne a5,a4,80205bda <_ZN8Spinlock7acquireEv+0x5a> - asm volatile("nop"); // RISC-V indicates that the CPU is in a spin state - 80205bec: 0001 nop - 80205bee: bfdd j 80205be4 <_ZN8Spinlock7acquireEv+0x64> - cpu = mycpu(); - 80205bf0: 3c7010ef jal 802077b6 <_Z5mycpuv> -} - 80205bf4: 60e2 ld ra,24(sp) - cpu = mycpu(); - 80205bf6: e808 sd a0,16(s0) -} - 80205bf8: 6442 ld s0,16(sp) - 80205bfa: 64a2 ld s1,8(sp) - 80205bfc: 6105 addi sp,sp,32 - 80205bfe: 8082 ret - r = (locked && cpu == mycpu()); - 80205c00: 6804 ld s1,16(s0) - 80205c02: 3b5010ef jal 802077b6 <_Z5mycpuv> - 80205c06: fca496e3 bne s1,a0,80205bd2 <_ZN8Spinlock7acquireEv+0x52> - pop_off(); - 80205c0a: e29ff0ef jal 80205a32 <_Z7pop_offv> - Drivers::uart_puts("panic: recursive acquire "); - 80205c0e: 0000c517 auipc a0,0xc - 80205c12: 08a50513 addi a0,a0,138 # 80211c98 - 80205c16: 154030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(name); - 80205c1a: 6408 ld a0,8(s0) - 80205c1c: 14e030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("\n"); - 80205c20: 0000c517 auipc a0,0xc - 80205c24: c0050513 addi a0,a0,-1024 # 80211820 - 80205c28: 142030ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80205c2c: a001 j 80205c2c <_ZN8Spinlock7acquireEv+0xac> - -0000000080205c2e <_ZN5Mutex7acquireEv>: -{ - 80205c2e: 1101 addi sp,sp,-32 - 80205c30: e426 sd s1,8(sp) - lk.acquire(); // Acquire the internal lock to protect the locked field - 80205c32: 01850493 addi s1,a0,24 -{ - 80205c36: e822 sd s0,16(sp) - 80205c38: 842a mv s0,a0 - lk.acquire(); // Acquire the internal lock to protect the locked field - 80205c3a: 8526 mv a0,s1 -{ - 80205c3c: ec06 sd ra,24(sp) - 80205c3e: e04a sd s2,0(sp) - lk.acquire(); // Acquire the internal lock to protect the locked field - 80205c40: f41ff0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (locked) - 80205c44: 401c lw a5,0(s0) - 80205c46: c799 beqz a5,80205c54 <_ZN5Mutex7acquireEv+0x26> - ProcManager::sleep(this, &lk); - 80205c48: 85a6 mv a1,s1 - 80205c4a: 8522 mv a0,s0 - 80205c4c: 2fa020ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (locked) - 80205c50: 401c lw a5,0(s0) - 80205c52: fbfd bnez a5,80205c48 <_ZN5Mutex7acquireEv+0x1a> - locked = 1; - 80205c54: 4785 li a5,1 - 80205c56: c01c sw a5,0(s0) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205c58: 10002973 csrr s2,sstatus - 80205c5c: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205c60: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205c62: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205c66: 351010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205c6a: 5d3c lw a5,120(a0) - 80205c6c: e799 bnez a5,80205c7a <_ZN5Mutex7acquireEv+0x4c> - return (x & SSTATUS_SIE) != 0; - 80205c6e: 00195913 srli s2,s2,0x1 - 80205c72: 00197913 andi s2,s2,1 - c->intena = old; - 80205c76: 07252e23 sw s2,124(a0) - c->noff += 1; - 80205c7a: 2785 addiw a5,a5,1 - 80205c7c: dd3c sw a5,120(a0) - struct cpu *c = mycpu(); - 80205c7e: 339010ef jal 802077b6 <_Z5mycpuv> - struct Proc *p = c->proc; - 80205c82: 00053903 ld s2,0(a0) - pop_off(); - 80205c86: dadff0ef jal 80205a32 <_Z7pop_offv> -} - 80205c8a: 60e2 ld ra,24(sp) - pid = myproc()->pid; - 80205c8c: 08492783 lw a5,132(s2) - lk.release(); - 80205c90: 8526 mv a0,s1 -} - 80205c92: 6902 ld s2,0(sp) - pid = myproc()->pid; - 80205c94: c81c sw a5,16(s0) -} - 80205c96: 6442 ld s0,16(sp) - 80205c98: 64a2 ld s1,8(sp) - 80205c9a: 6105 addi sp,sp,32 - lk.release(); - 80205c9c: e7dff06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080205ca0 <_ZN5Mutex7releaseEv>: -{ - 80205ca0: 1101 addi sp,sp,-32 - 80205ca2: e426 sd s1,8(sp) - lk.acquire(); - 80205ca4: 01850493 addi s1,a0,24 -{ - 80205ca8: e822 sd s0,16(sp) - 80205caa: 842a mv s0,a0 - lk.acquire(); - 80205cac: 8526 mv a0,s1 -{ - 80205cae: ec06 sd ra,24(sp) - lk.acquire(); - 80205cb0: ed1ff0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - ProcManager::wakeup(this); - 80205cb4: 8522 mv a0,s0 - locked = 0; - 80205cb6: 00042023 sw zero,0(s0) - pid = 0; - 80205cba: 00042823 sw zero,16(s0) - ProcManager::wakeup(this); - 80205cbe: 38c020ef jal 8020804a <_ZN11ProcManager6wakeupEPv> -} - 80205cc2: 6442 ld s0,16(sp) - 80205cc4: 60e2 ld ra,24(sp) - lk.release(); - 80205cc6: 8526 mv a0,s1 -} - 80205cc8: 64a2 ld s1,8(sp) - 80205cca: 6105 addi sp,sp,32 - lk.release(); - 80205ccc: e4dff06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080205cd0 <_ZN5Mutex7holdingEv>: -{ - 80205cd0: 1101 addi sp,sp,-32 - 80205cd2: e426 sd s1,8(sp) - lk.acquire(); // Must use a lock when reading to prevent race conditions. - 80205cd4: 01850493 addi s1,a0,24 -{ - 80205cd8: e822 sd s0,16(sp) - 80205cda: 842a mv s0,a0 - lk.acquire(); // Must use a lock when reading to prevent race conditions. - 80205cdc: 8526 mv a0,s1 -{ - 80205cde: ec06 sd ra,24(sp) - lk.acquire(); // Must use a lock when reading to prevent race conditions. - 80205ce0: ea1ff0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - bool r = locked && (pid == myproc()->pid); - 80205ce4: 401c lw a5,0(s0) - 80205ce6: eb99 bnez a5,80205cfc <_ZN5Mutex7holdingEv+0x2c> - 80205ce8: 4401 li s0,0 - lk.release(); - 80205cea: 8526 mv a0,s1 - 80205cec: e2dff0ef jal 80205b18 <_ZN8Spinlock7releaseEv> -} - 80205cf0: 60e2 ld ra,24(sp) - 80205cf2: 8522 mv a0,s0 - 80205cf4: 6442 ld s0,16(sp) - 80205cf6: 64a2 ld s1,8(sp) - 80205cf8: 6105 addi sp,sp,32 - 80205cfa: 8082 ret - 80205cfc: e04a sd s2,0(sp) - bool r = locked && (pid == myproc()->pid); - 80205cfe: 01042903 lw s2,16(s0) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80205d02: 10002473 csrr s0,sstatus - 80205d06: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80205d0a: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80205d0c: 10079073 csrw sstatus,a5 - struct cpu *c = mycpu(); - 80205d10: 2a7010ef jal 802077b6 <_Z5mycpuv> - if (c->noff == 0) - 80205d14: 5d3c lw a5,120(a0) - 80205d16: e781 bnez a5,80205d1e <_ZN5Mutex7holdingEv+0x4e> - return (x & SSTATUS_SIE) != 0; - 80205d18: 8005 srli s0,s0,0x1 - 80205d1a: 8805 andi s0,s0,1 - c->intena = old; - 80205d1c: dd60 sw s0,124(a0) - c->noff += 1; - 80205d1e: 2785 addiw a5,a5,1 - 80205d20: dd3c sw a5,120(a0) - struct cpu *c = mycpu(); - 80205d22: 295010ef jal 802077b6 <_Z5mycpuv> - struct Proc *p = c->proc; - 80205d26: 6100 ld s0,0(a0) - pop_off(); - 80205d28: d0bff0ef jal 80205a32 <_Z7pop_offv> - bool r = locked && (pid == myproc()->pid); - 80205d2c: 08442403 lw s0,132(s0) - 80205d30: 41240433 sub s0,s0,s2 - 80205d34: 00143413 seqz s0,s0 - 80205d38: 6902 ld s2,0(sp) - 80205d3a: bf45 j 80205cea <_ZN5Mutex7holdingEv+0x1a> - -0000000080205d3c <_ZN2VML4walkEPyyi>: - return false; - } - - static uint64 *walk(uint64 *pagetable, uint64 va, int alloc) - { - if (va >= MAXVA) - 80205d3c: 577d li a4,-1 - 80205d3e: 8369 srli a4,a4,0x1a - 80205d40: 08b76763 bltu a4,a1,80205dce <_ZN2VML4walkEPyyi+0x92> - { - 80205d44: 7139 addi sp,sp,-64 - 80205d46: f426 sd s1,40(sp) - 80205d48: f04a sd s2,32(sp) - 80205d4a: ec4e sd s3,24(sp) - 80205d4c: e852 sd s4,16(sp) - 80205d4e: e456 sd s5,8(sp) - 80205d50: fc06 sd ra,56(sp) - 80205d52: f822 sd s0,48(sp) - 80205d54: 8a2e mv s4,a1 - 80205d56: 84aa mv s1,a0 - 80205d58: 8932 mv s2,a2 - 80205d5a: 4a89 li s5,2 - 80205d5c: 4789 li a5,2 - 80205d5e: 4985 li s3,1 - return nullptr; - - for (int level = 2; level > 0; level--) - { - uint64 *pte = &pagetable[PX(level, va)]; - 80205d60: 0037941b slliw s0,a5,0x3 - 80205d64: 9c3d addw s0,s0,a5 - 80205d66: 2431 addiw s0,s0,12 - 80205d68: 008a5433 srl s0,s4,s0 - 80205d6c: 1ff47413 andi s0,s0,511 - 80205d70: 040e slli s0,s0,0x3 - 80205d72: 9426 add s0,s0,s1 - if (*pte & PTE_V) - 80205d74: 6004 ld s1,0(s0) - 80205d76: 0014f793 andi a5,s1,1 - { - pagetable = (uint64 *)PTE2PA(*pte); - 80205d7a: 80a9 srli s1,s1,0xa - 80205d7c: 04b2 slli s1,s1,0xc - if (*pte & PTE_V) - 80205d7e: e38d bnez a5,80205da0 <_ZN2VML4walkEPyyi+0x64> - } - else - { - if (!alloc || (pagetable = (uint64 *)PMM::alloc_page()) == nullptr) - 80205d80: 04090563 beqz s2,80205dca <_ZN2VML4walkEPyyi+0x8e> - 80205d84: 3de010ef jal 80207162 <_ZN3PMM10alloc_pageEv> - return nullptr; - - memset(pagetable, 0, PGSIZE); - 80205d88: 6605 lui a2,0x1 - 80205d8a: 4581 li a1,0 - if (!alloc || (pagetable = (uint64 *)PMM::alloc_page()) == nullptr) - 80205d8c: 84aa mv s1,a0 - 80205d8e: cd15 beqz a0,80205dca <_ZN2VML4walkEPyyi+0x8e> - memset(pagetable, 0, PGSIZE); - 80205d90: 89aff0ef jal 80204e2a <_Z6memsetPvij> - *pte = PA2PTE(pagetable) | PTE_V; - 80205d94: 00c4d793 srli a5,s1,0xc - 80205d98: 07aa slli a5,a5,0xa - 80205d9a: 0017e793 ori a5,a5,1 - 80205d9e: e01c sd a5,0(s0) - for (int level = 2; level > 0; level--) - 80205da0: 4785 li a5,1 - 80205da2: 013a8463 beq s5,s3,80205daa <_ZN2VML4walkEPyyi+0x6e> - 80205da6: 4a85 li s5,1 - 80205da8: bf65 j 80205d60 <_ZN2VML4walkEPyyi+0x24> - } - } - return &pagetable[PX(0, va)]; - 80205daa: 00ca5a13 srli s4,s4,0xc - 80205dae: 1ffa7a13 andi s4,s4,511 - 80205db2: 0a0e slli s4,s4,0x3 - 80205db4: 01448533 add a0,s1,s4 - } - 80205db8: 70e2 ld ra,56(sp) - 80205dba: 7442 ld s0,48(sp) - 80205dbc: 74a2 ld s1,40(sp) - 80205dbe: 7902 ld s2,32(sp) - 80205dc0: 69e2 ld s3,24(sp) - 80205dc2: 6a42 ld s4,16(sp) - 80205dc4: 6aa2 ld s5,8(sp) - 80205dc6: 6121 addi sp,sp,64 - 80205dc8: 8082 ret - return nullptr; - 80205dca: 4501 li a0,0 - 80205dcc: b7f5 j 80205db8 <_ZN2VML4walkEPyyi+0x7c> - 80205dce: 4501 li a0,0 - } - 80205dd0: 8082 ret - -0000000080205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0>: - } - - return newsz; - } - - void uvmunmap(uint64 *pagetable, uint64 va, uint64 npages, int do_free) - 80205dd2: 7139 addi sp,sp,-64 - 80205dd4: ec4e sd s3,24(sp) - uint64 *pte; - - if ((va % PGSIZE) != 0) - return; - - for (a = va; a < va + npages * PGSIZE; a += PGSIZE) - 80205dd6: 00c61993 slli s3,a2,0xc - void uvmunmap(uint64 *pagetable, uint64 va, uint64 npages, int do_free) - 80205dda: fc06 sd ra,56(sp) - for (a = va; a < va + npages * PGSIZE; a += PGSIZE) - 80205ddc: 99ae add s3,s3,a1 - 80205dde: 0535f763 bgeu a1,s3,80205e2c <_ZN2VM8uvmunmapEPyyyi.part.0+0x5a> - 80205de2: f426 sd s1,40(sp) - 80205de4: e852 sd s4,16(sp) - 80205de6: e456 sd s5,8(sp) - 80205de8: e05a sd s6,0(sp) - 80205dea: f822 sd s0,48(sp) - 80205dec: f04a sd s2,32(sp) - 80205dee: 84ae mv s1,a1 - 80205df0: 8a2a mv s4,a0 - 80205df2: 8b36 mv s6,a3 - 80205df4: 6a85 lui s5,0x1 - { - if ((pte = walk(pagetable, a, 0)) == nullptr) - 80205df6: 4601 li a2,0 - 80205df8: 85a6 mv a1,s1 - 80205dfa: 8552 mv a0,s4 - 80205dfc: f41ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 80205e00: 842a mv s0,a0 - 80205e02: cd01 beqz a0,80205e1a <_ZN2VM8uvmunmapEPyyyi.part.0+0x48> - continue; - - if ((*pte & PTE_V) == 0) - 80205e04: 611c ld a5,0(a0) - 80205e06: 0017f713 andi a4,a5,1 - continue; - - if ((PTE_FLAGS(*pte) & (PTE_R | PTE_W | PTE_X)) == 0) - 80205e0a: 00e7f613 andi a2,a5,14 - if ((*pte & PTE_V) == 0) - 80205e0e: c711 beqz a4,80205e1a <_ZN2VM8uvmunmapEPyyyi.part.0+0x48> - if ((PTE_FLAGS(*pte) & (PTE_R | PTE_W | PTE_X)) == 0) - 80205e10: c609 beqz a2,80205e1a <_ZN2VM8uvmunmapEPyyyi.part.0+0x48> - { - continue; - } - - if (do_free) - 80205e12: 020b1163 bnez s6,80205e34 <_ZN2VM8uvmunmapEPyyyi.part.0+0x62> - if (page_ref_dec(pa)) - { - PMM::free_page((void *)pa); - } - } - *pte = 0; - 80205e16: 00043023 sd zero,0(s0) - for (a = va; a < va + npages * PGSIZE; a += PGSIZE) - 80205e1a: 94d6 add s1,s1,s5 - 80205e1c: fd34ede3 bltu s1,s3,80205df6 <_ZN2VM8uvmunmapEPyyyi.part.0+0x24> - 80205e20: 7442 ld s0,48(sp) - 80205e22: 74a2 ld s1,40(sp) - 80205e24: 7902 ld s2,32(sp) - 80205e26: 6a42 ld s4,16(sp) - 80205e28: 6aa2 ld s5,8(sp) - 80205e2a: 6b02 ld s6,0(sp) - } - } - 80205e2c: 70e2 ld ra,56(sp) - 80205e2e: 69e2 ld s3,24(sp) - 80205e30: 6121 addi sp,sp,64 - 80205e32: 8082 ret - uint64 pa = PTE2PA(*pte); - 80205e34: 83a9 srli a5,a5,0xa - 80205e36: 00c79913 slli s2,a5,0xc - struct Page *p = PMM::pa_to_page(pa); - 80205e3a: 854a mv a0,s2 - 80205e3c: 65b000ef jal 80206c96 <_ZN3PMM10pa_to_pageEy> - if (__atomic_sub_fetch(&p->refcnt, 1, __ATOMIC_RELEASE) == 0) - 80205e40: 00250713 addi a4,a0,2 - 80205e44: 00377693 andi a3,a4,3 - 80205e48: 67c1 lui a5,0x10 - 80205e4a: 0036969b slliw a3,a3,0x3 - 80205e4e: 37fd addiw a5,a5,-1 # ffff <_start-0x801f0001> - 80205e50: 00d797bb sllw a5,a5,a3 - 80205e54: 567d li a2,-1 - 80205e56: 9b71 andi a4,a4,-4 - 80205e58: fff7c813 not a6,a5 - 80205e5c: 00d615bb sllw a1,a2,a3 - if (p) - 80205e60: d95d beqz a0,80205e16 <_ZN2VM8uvmunmapEPyyyi.part.0+0x44> - if (__atomic_sub_fetch(&p->refcnt, 1, __ATOMIC_RELEASE) == 0) - 80205e62: 1007262f lr.w a2,(a4) - 80205e66: 00b60533 add a0,a2,a1 - 80205e6a: 8d7d and a0,a0,a5 - 80205e6c: 010678b3 and a7,a2,a6 - 80205e70: 00a8e8b3 or a7,a7,a0 - 80205e74: 1b17252f sc.w.rl a0,a7,(a4) - 80205e78: f56d bnez a0,80205e62 <_ZN2VM8uvmunmapEPyyyi.part.0+0x90> - 80205e7a: 40d6563b sraw a2,a2,a3 - 80205e7e: 367d addiw a2,a2,-1 # fff <_start-0x801ff001> - 80205e80: 1642 slli a2,a2,0x30 - 80205e82: 9241 srli a2,a2,0x30 - 80205e84: fa49 bnez a2,80205e16 <_ZN2VM8uvmunmapEPyyyi.part.0+0x44> - PMM::free_page((void *)pa); - 80205e86: 854a mv a0,s2 - 80205e88: 2fc010ef jal 80207184 <_ZN3PMM9free_pageEPv> - 80205e8c: b769 j 80205e16 <_ZN2VM8uvmunmapEPyyyi.part.0+0x44> - -0000000080205e8e <_ZN2VML8freewalkEPy>: - - static void freewalk(uint64 *pagetable) - { - 80205e8e: 7111 addi sp,sp,-256 - 80205e90: 6785 lui a5,0x1 - 80205e92: f9a2 sd s0,240(sp) - 80205e94: f1ca sd s2,224(sp) - 80205e96: e1da sd s6,192(sp) - 80205e98: fd5e sd s7,184(sp) - 80205e9a: fd86 sd ra,248(sp) - 80205e9c: 842a mv s0,a0 - 80205e9e: 892a mv s2,a0 - 80205ea0: 00f50b33 add s6,a0,a5 - 80205ea4: 6b85 lui s7,0x1 - 80205ea6: a021 j 80205eae <_ZN2VML8freewalkEPy+0x20> - for (int i = 0; i < 512; i++) - 80205ea8: 0921 addi s2,s2,8 - 80205eaa: 23690563 beq s2,s6,802060d4 <_ZN2VML8freewalkEPy+0x246> - { - uint64 pte = pagetable[i]; - 80205eae: 00093783 ld a5,0(s2) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205eb2: 4705 li a4,1 - 80205eb4: 00f7f693 andi a3,a5,15 - 80205eb8: fee698e3 bne a3,a4,80205ea8 <_ZN2VML8freewalkEPy+0x1a> - { - uint64 *child = (uint64 *)PTE2PA(pte); - 80205ebc: 83a9 srli a5,a5,0xa - 80205ebe: e9d2 sd s4,208(sp) - 80205ec0: 00c79a13 slli s4,a5,0xc - 80205ec4: f5a6 sd s1,232(sp) - 80205ec6: e5d6 sd s5,200(sp) - 80205ec8: f566 sd s9,168(sp) - 80205eca: ed6e sd s11,152(sp) - for (int i = 0; i < 512; i++) - 80205ecc: 017a0cb3 add s9,s4,s7 - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205ed0: 4d85 li s11,1 - 80205ed2: 8ad2 mv s5,s4 - 80205ed4: 84a2 mv s1,s0 - 80205ed6: a021 j 80205ede <_ZN2VML8freewalkEPy+0x50> - for (int i = 0; i < 512; i++) - 80205ed8: 0a21 addi s4,s4,8 - 80205eda: 1d9a0f63 beq s4,s9,802060b8 <_ZN2VML8freewalkEPy+0x22a> - uint64 pte = pagetable[i]; - 80205ede: 000a3783 ld a5,0(s4) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205ee2: 00f7f713 andi a4,a5,15 - 80205ee6: ffb719e3 bne a4,s11,80205ed8 <_ZN2VML8freewalkEPy+0x4a> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205eea: 83a9 srli a5,a5,0xa - 80205eec: edce sd s3,216(sp) - 80205eee: 00c79993 slli s3,a5,0xc - 80205ef2: f962 sd s8,176(sp) - 80205ef4: f16a sd s10,160(sp) - 80205ef6: 8c4e mv s8,s3 - for (int i = 0; i < 512; i++) - 80205ef8: 01798d33 add s10,s3,s7 - 80205efc: 844e mv s0,s3 - 80205efe: a021 j 80205f06 <_ZN2VML8freewalkEPy+0x78> - 80205f00: 0421 addi s0,s0,8 - 80205f02: 1ba40063 beq s0,s10,802060a2 <_ZN2VML8freewalkEPy+0x214> - uint64 pte = pagetable[i]; - 80205f06: 601c ld a5,0(s0) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205f08: 00f7f713 andi a4,a5,15 - 80205f0c: ffb71ae3 bne a4,s11,80205f00 <_ZN2VML8freewalkEPy+0x72> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205f10: 83a9 srli a5,a5,0xa - 80205f12: 07b2 slli a5,a5,0xc - for (int i = 0; i < 512; i++) - 80205f14: 8726 mv a4,s1 - 80205f16: fc56 sd s5,56(sp) - 80205f18: 84ca mv s1,s2 - 80205f1a: 017789b3 add s3,a5,s7 - 80205f1e: f822 sd s0,48(sp) - 80205f20: 8abe mv s5,a5 - 80205f22: 893a mv s2,a4 - 80205f24: a021 j 80205f2c <_ZN2VML8freewalkEPy+0x9e> - 80205f26: 07a1 addi a5,a5,8 # 1008 <_start-0x801feff8> - 80205f28: 16f98063 beq s3,a5,80206088 <_ZN2VML8freewalkEPy+0x1fa> - uint64 pte = pagetable[i]; - 80205f2c: 6398 ld a4,0(a5) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205f2e: 00f77693 andi a3,a4,15 - 80205f32: ffb69ae3 bne a3,s11,80205f26 <_ZN2VML8freewalkEPy+0x98> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205f36: 8329 srli a4,a4,0xa - 80205f38: 0732 slli a4,a4,0xc - for (int i = 0; i < 512; i++) - 80205f3a: 017706b3 add a3,a4,s7 - 80205f3e: e0ce sd s3,64(sp) - 80205f40: e436 sd a3,8(sp) - 80205f42: e4be sd a5,72(sp) - 80205f44: 89ba mv s3,a4 - 80205f46: a029 j 80205f50 <_ZN2VML8freewalkEPy+0xc2> - 80205f48: 67a2 ld a5,8(sp) - 80205f4a: 0721 addi a4,a4,8 - 80205f4c: 12e78263 beq a5,a4,80206070 <_ZN2VML8freewalkEPy+0x1e2> - uint64 pte = pagetable[i]; - 80205f50: 631c ld a5,0(a4) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205f52: 00f7f693 andi a3,a5,15 - 80205f56: ffb699e3 bne a3,s11,80205f48 <_ZN2VML8freewalkEPy+0xba> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205f5a: 83a9 srli a5,a5,0xa - 80205f5c: 07b2 slli a5,a5,0xc - for (int i = 0; i < 512; i++) - 80205f5e: 017786b3 add a3,a5,s7 - 80205f62: e8e2 sd s8,80(sp) - 80205f64: ec36 sd a3,24(sp) - 80205f66: 8c56 mv s8,s5 - 80205f68: ecba sd a4,88(sp) - 80205f6a: 8abe mv s5,a5 - 80205f6c: f0ca sd s2,96(sp) - 80205f6e: a029 j 80205f78 <_ZN2VML8freewalkEPy+0xea> - 80205f70: 6762 ld a4,24(sp) - 80205f72: 07a1 addi a5,a5,8 - 80205f74: 0cf70f63 beq a4,a5,80206052 <_ZN2VML8freewalkEPy+0x1c4> - uint64 pte = pagetable[i]; - 80205f78: 6398 ld a4,0(a5) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205f7a: 00f77693 andi a3,a4,15 - 80205f7e: ffb699e3 bne a3,s11,80205f70 <_ZN2VML8freewalkEPy+0xe2> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205f82: 8329 srli a4,a4,0xa - 80205f84: 00c71913 slli s2,a4,0xc - for (int i = 0; i < 512; i++) - 80205f88: 01790733 add a4,s2,s7 - 80205f8c: f4ca sd s2,104(sp) - 80205f8e: 844a mv s0,s2 - 80205f90: f03a sd a4,32(sp) - 80205f92: f8be sd a5,112(sp) - 80205f94: 8926 mv s2,s1 - 80205f96: a029 j 80205fa0 <_ZN2VML8freewalkEPy+0x112> - 80205f98: 7782 ld a5,32(sp) - 80205f9a: 0421 addi s0,s0,8 - 80205f9c: 08878e63 beq a5,s0,80206038 <_ZN2VML8freewalkEPy+0x1aa> - uint64 pte = pagetable[i]; - 80205fa0: 601c ld a5,0(s0) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205fa2: 00f7f693 andi a3,a5,15 - 80205fa6: ffb699e3 bne a3,s11,80205f98 <_ZN2VML8freewalkEPy+0x10a> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205faa: 83a9 srli a5,a5,0xa - 80205fac: 00c79493 slli s1,a5,0xc - 80205fb0: 017487b3 add a5,s1,s7 - 80205fb4: e826 sd s1,16(sp) - for (int i = 0; i < 512; i++) - 80205fb6: f43e sd a5,40(sp) - 80205fb8: fca2 sd s0,120(sp) - 80205fba: a029 j 80205fc4 <_ZN2VML8freewalkEPy+0x136> - 80205fbc: 77a2 ld a5,40(sp) - 80205fbe: 04a1 addi s1,s1,8 - 80205fc0: 06978263 beq a5,s1,80206024 <_ZN2VML8freewalkEPy+0x196> - uint64 pte = pagetable[i]; - 80205fc4: 609c ld a5,0(s1) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205fc6: 00f7f693 andi a3,a5,15 - 80205fca: ffb699e3 bne a3,s11,80205fbc <_ZN2VML8freewalkEPy+0x12e> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205fce: 83a9 srli a5,a5,0xa - 80205fd0: 00c79413 slli s0,a5,0xc - for (int i = 0; i < 512; i++) - 80205fd4: 017406b3 add a3,s0,s7 - 80205fd8: e14a sd s2,128(sp) - 80205fda: e55a sd s6,136(sp) - 80205fdc: 8922 mv s2,s0 - 80205fde: 8b52 mv s6,s4 - 80205fe0: 8a26 mv s4,s1 - 80205fe2: 84b6 mv s1,a3 - 80205fe4: a021 j 80205fec <_ZN2VML8freewalkEPy+0x15e> - 80205fe6: 0421 addi s0,s0,8 - 80205fe8: 02848163 beq s1,s0,8020600a <_ZN2VML8freewalkEPy+0x17c> - uint64 pte = pagetable[i]; - 80205fec: 601c ld a5,0(s0) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80205fee: 00f7f713 andi a4,a5,15 - 80205ff2: ffb71ae3 bne a4,s11,80205fe6 <_ZN2VML8freewalkEPy+0x158> - uint64 *child = (uint64 *)PTE2PA(pte); - 80205ff6: 83a9 srli a5,a5,0xa - freewalk(child); - 80205ff8: 00c79513 slli a0,a5,0xc - 80205ffc: e93ff0ef jal 80205e8e <_ZN2VML8freewalkEPy> - for (int i = 0; i < 512; i++) - 80206000: 0421 addi s0,s0,8 - pagetable[i] = 0; - 80206002: fe043c23 sd zero,-8(s0) - for (int i = 0; i < 512; i++) - 80206006: fe8493e3 bne s1,s0,80205fec <_ZN2VML8freewalkEPy+0x15e> - } - } - PMM::free_page(pagetable); - 8020600a: 854a mv a0,s2 - 8020600c: 84d2 mv s1,s4 - 8020600e: 690a ld s2,128(sp) - 80206010: 8a5a mv s4,s6 - 80206012: 6b2a ld s6,136(sp) - 80206014: 170010ef jal 80207184 <_ZN3PMM9free_pageEPv> - for (int i = 0; i < 512; i++) - 80206018: 77a2 ld a5,40(sp) - pagetable[i] = 0; - 8020601a: 0004b023 sd zero,0(s1) - for (int i = 0; i < 512; i++) - 8020601e: 04a1 addi s1,s1,8 - 80206020: fa9792e3 bne a5,s1,80205fc4 <_ZN2VML8freewalkEPy+0x136> - PMM::free_page(pagetable); - 80206024: 6542 ld a0,16(sp) - 80206026: 7466 ld s0,120(sp) - 80206028: 15c010ef jal 80207184 <_ZN3PMM9free_pageEPv> - for (int i = 0; i < 512; i++) - 8020602c: 7782 ld a5,32(sp) - pagetable[i] = 0; - 8020602e: 00043023 sd zero,0(s0) - for (int i = 0; i < 512; i++) - 80206032: 0421 addi s0,s0,8 - 80206034: f68796e3 bne a5,s0,80205fa0 <_ZN2VML8freewalkEPy+0x112> - PMM::free_page(pagetable); - 80206038: 77c6 ld a5,112(sp) - 8020603a: 7526 ld a0,104(sp) - 8020603c: 84ca mv s1,s2 - 8020603e: e83e sd a5,16(sp) - 80206040: 144010ef jal 80207184 <_ZN3PMM9free_pageEPv> - pagetable[i] = 0; - 80206044: 67c2 ld a5,16(sp) - for (int i = 0; i < 512; i++) - 80206046: 6762 ld a4,24(sp) - pagetable[i] = 0; - 80206048: 0007b023 sd zero,0(a5) - for (int i = 0; i < 512; i++) - 8020604c: 07a1 addi a5,a5,8 - 8020604e: f2f715e3 bne a4,a5,80205f78 <_ZN2VML8freewalkEPy+0xea> - PMM::free_page(pagetable); - 80206052: 6766 ld a4,88(sp) - 80206054: 8556 mv a0,s5 - 80206056: 7906 ld s2,96(sp) - 80206058: e83a sd a4,16(sp) - 8020605a: 8ae2 mv s5,s8 - 8020605c: 6c46 ld s8,80(sp) - 8020605e: 126010ef jal 80207184 <_ZN3PMM9free_pageEPv> - pagetable[i] = 0; - 80206062: 6742 ld a4,16(sp) - for (int i = 0; i < 512; i++) - 80206064: 67a2 ld a5,8(sp) - pagetable[i] = 0; - 80206066: 00073023 sd zero,0(a4) - for (int i = 0; i < 512; i++) - 8020606a: 0721 addi a4,a4,8 - 8020606c: eee792e3 bne a5,a4,80205f50 <_ZN2VML8freewalkEPy+0xc2> - PMM::free_page(pagetable); - 80206070: 67a6 ld a5,72(sp) - 80206072: 854e mv a0,s3 - 80206074: 6986 ld s3,64(sp) - 80206076: e43e sd a5,8(sp) - 80206078: 10c010ef jal 80207184 <_ZN3PMM9free_pageEPv> - pagetable[i] = 0; - 8020607c: 67a2 ld a5,8(sp) - 8020607e: 0007b023 sd zero,0(a5) - for (int i = 0; i < 512; i++) - 80206082: 07a1 addi a5,a5,8 - 80206084: eaf994e3 bne s3,a5,80205f2c <_ZN2VML8freewalkEPy+0x9e> - PMM::free_page(pagetable); - 80206088: 7442 ld s0,48(sp) - 8020608a: 87ca mv a5,s2 - 8020608c: 8556 mv a0,s5 - 8020608e: 8926 mv s2,s1 - 80206090: 7ae2 ld s5,56(sp) - 80206092: 84be mv s1,a5 - for (int i = 0; i < 512; i++) - 80206094: 0421 addi s0,s0,8 - PMM::free_page(pagetable); - 80206096: 0ee010ef jal 80207184 <_ZN3PMM9free_pageEPv> - pagetable[i] = 0; - 8020609a: fe043c23 sd zero,-8(s0) - for (int i = 0; i < 512; i++) - 8020609e: e7a414e3 bne s0,s10,80205f06 <_ZN2VML8freewalkEPy+0x78> - PMM::free_page(pagetable); - 802060a2: 8562 mv a0,s8 - 802060a4: 0e0010ef jal 80207184 <_ZN3PMM9free_pageEPv> - for (int i = 0; i < 512; i++) - 802060a8: 0a21 addi s4,s4,8 - pagetable[i] = 0; - 802060aa: fe0a3c23 sd zero,-8(s4) - 802060ae: 69ee ld s3,216(sp) - 802060b0: 7c4a ld s8,176(sp) - 802060b2: 7d0a ld s10,160(sp) - for (int i = 0; i < 512; i++) - 802060b4: e39a15e3 bne s4,s9,80205ede <_ZN2VML8freewalkEPy+0x50> - PMM::free_page(pagetable); - 802060b8: 8556 mv a0,s5 - 802060ba: 0ca010ef jal 80207184 <_ZN3PMM9free_pageEPv> - for (int i = 0; i < 512; i++) - 802060be: 0921 addi s2,s2,8 - pagetable[i] = 0; - 802060c0: fe093c23 sd zero,-8(s2) - PMM::free_page(pagetable); - 802060c4: 8426 mv s0,s1 - pagetable[i] = 0; - 802060c6: 6a4e ld s4,208(sp) - 802060c8: 74ae ld s1,232(sp) - 802060ca: 6aae ld s5,200(sp) - 802060cc: 7caa ld s9,168(sp) - 802060ce: 6dea ld s11,152(sp) - for (int i = 0; i < 512; i++) - 802060d0: dd691fe3 bne s2,s6,80205eae <_ZN2VML8freewalkEPy+0x20> - PMM::free_page(pagetable); - 802060d4: 8522 mv a0,s0 - } - 802060d6: 744e ld s0,240(sp) - 802060d8: 70ee ld ra,248(sp) - 802060da: 790e ld s2,224(sp) - 802060dc: 6b0e ld s6,192(sp) - 802060de: 7bea ld s7,184(sp) - 802060e0: 6111 addi sp,sp,256 - PMM::free_page(pagetable); - 802060e2: 0a20106f j 80207184 <_ZN3PMM9free_pageEPv> - -00000000802060e6 <_ZN2VM8mappagesEPyyyyi>: - if (size == 0) - 802060e6: ca35 beqz a2,8020615a <_ZN2VM8mappagesEPyyyyi+0x74> - { - 802060e8: 7139 addi sp,sp,-64 - a = PGROUNDDOWN(va); - 802060ea: 77fd lui a5,0xfffff - { - 802060ec: f04a sd s2,32(sp) - last = PGROUNDDOWN(va + size - 1); - 802060ee: fff58913 addi s2,a1,-1 - { - 802060f2: e05a sd s6,0(sp) - last = PGROUNDDOWN(va + size - 1); - 802060f4: 9932 add s2,s2,a2 - a = PGROUNDDOWN(va); - 802060f6: 00f5fb33 and s6,a1,a5 - { - 802060fa: f426 sd s1,40(sp) - 802060fc: ec4e sd s3,24(sp) - 802060fe: e852 sd s4,16(sp) - 80206100: e456 sd s5,8(sp) - 80206102: fc06 sd ra,56(sp) - 80206104: f822 sd s0,48(sp) - 80206106: 89aa mv s3,a0 - 80206108: 8a3a mv s4,a4 - last = PGROUNDDOWN(va + size - 1); - 8020610a: 00f97933 and s2,s2,a5 - 8020610e: 416684b3 sub s1,a3,s6 - a += PGSIZE; - 80206112: 6a85 lui s5,0x1 - 80206114: a801 j 80206124 <_ZN2VM8mappagesEPyyyyi+0x3e> - if (*pte & PTE_V) - 80206116: 611c ld a5,0(a0) - 80206118: 8b85 andi a5,a5,1 - 8020611a: e39d bnez a5,80206140 <_ZN2VM8mappagesEPyyyyi+0x5a> - *pte = PA2PTE(pa) | perm | PTE_V; - 8020611c: e100 sd s0,0(a0) - if (a == last) - 8020611e: 032b0c63 beq s6,s2,80206156 <_ZN2VM8mappagesEPyyyyi+0x70> - a += PGSIZE; - 80206122: 9b56 add s6,s6,s5 - for (;;) - 80206124: 009b0433 add s0,s6,s1 - *pte = PA2PTE(pa) | perm | PTE_V; - 80206128: 8031 srli s0,s0,0xc - if ((pte = walk(pagetable, a, 1)) == nullptr) - 8020612a: 4605 li a2,1 - 8020612c: 85da mv a1,s6 - 8020612e: 854e mv a0,s3 - *pte = PA2PTE(pa) | perm | PTE_V; - 80206130: 042a slli s0,s0,0xa - 80206132: 01446433 or s0,s0,s4 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 80206136: c07ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - *pte = PA2PTE(pa) | perm | PTE_V; - 8020613a: 00146413 ori s0,s0,1 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 8020613e: fd61 bnez a0,80206116 <_ZN2VM8mappagesEPyyyyi+0x30> - return -1; - 80206140: 557d li a0,-1 - } - 80206142: 70e2 ld ra,56(sp) - 80206144: 7442 ld s0,48(sp) - 80206146: 74a2 ld s1,40(sp) - 80206148: 7902 ld s2,32(sp) - 8020614a: 69e2 ld s3,24(sp) - 8020614c: 6a42 ld s4,16(sp) - 8020614e: 6aa2 ld s5,8(sp) - 80206150: 6b02 ld s6,0(sp) - 80206152: 6121 addi sp,sp,64 - 80206154: 8082 ret - return 0; - 80206156: 4501 li a0,0 - 80206158: b7ed j 80206142 <_ZN2VM8mappagesEPyyyyi+0x5c> - return -1; - 8020615a: 557d li a0,-1 - } - 8020615c: 8082 ret - -000000008020615e <_ZN2VM9uvmcreateEv>: - { - 8020615e: 1141 addi sp,sp,-16 - 80206160: e406 sd ra,8(sp) - 80206162: e022 sd s0,0(sp) - uint64 *pagetable = (uint64 *)PMM::alloc_page(); - 80206164: 7ff000ef jal 80207162 <_ZN3PMM10alloc_pageEv> - if (pagetable) - 80206168: c139 beqz a0,802061ae <_ZN2VM9uvmcreateEv+0x50> - memset(pagetable, 0, PGSIZE); - 8020616a: 6605 lui a2,0x1 - 8020616c: 4581 li a1,0 - 8020616e: 842a mv s0,a0 - 80206170: cbbfe0ef jal 80204e2a <_Z6memsetPvij> - if ((pte = walk(pagetable, a, 1)) == nullptr) - 80206174: 040005b7 lui a1,0x4000 - 80206178: 15fd addi a1,a1,-1 # 3ffffff <_start-0x7c200001> - 8020617a: 4605 li a2,1 - 8020617c: 05b2 slli a1,a1,0xc - 8020617e: 8522 mv a0,s0 - 80206180: bbdff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 80206184: c115 beqz a0,802061a8 <_ZN2VM9uvmcreateEv+0x4a> - if (*pte & PTE_V) - 80206186: 611c ld a5,0(a0) - 80206188: 8b85 andi a5,a5,1 - 8020618a: ef99 bnez a5,802061a8 <_ZN2VM9uvmcreateEv+0x4a> - *pte = PA2PTE(pa) | perm | PTE_V; - 8020618c: 0000f797 auipc a5,0xf - 80206190: 8e47b783 ld a5,-1820(a5) # 80214a70 <_GLOBAL_OFFSET_TABLE_+0x10> - 80206194: 83b1 srli a5,a5,0xc - 80206196: 07aa slli a5,a5,0xa - 80206198: 00b7e793 ori a5,a5,11 - 8020619c: e11c sd a5,0(a0) - } - 8020619e: 60a2 ld ra,8(sp) - 802061a0: 8522 mv a0,s0 - 802061a2: 6402 ld s0,0(sp) - 802061a4: 0141 addi sp,sp,16 - 802061a6: 8082 ret - PMM::free_page(pagetable); - 802061a8: 8522 mv a0,s0 - 802061aa: 7db000ef jal 80207184 <_ZN3PMM9free_pageEPv> - return nullptr; - 802061ae: 4401 li s0,0 - 802061b0: b7fd j 8020619e <_ZN2VM9uvmcreateEv+0x40> - -00000000802061b2 <_ZN2VM7uvminitEPyPhy>: - if (sz >= PGSIZE) - 802061b2: 6785 lui a5,0x1 - 802061b4: 04f67d63 bgeu a2,a5,8020620e <_ZN2VM7uvminitEPyPhy+0x5c> - { - 802061b8: 7179 addi sp,sp,-48 - 802061ba: f406 sd ra,40(sp) - 802061bc: f022 sd s0,32(sp) - 802061be: ec26 sd s1,24(sp) - 802061c0: e84a sd s2,16(sp) - 802061c2: e44e sd s3,8(sp) - 802061c4: 84b2 mv s1,a2 - 802061c6: 89aa mv s3,a0 - 802061c8: 892e mv s2,a1 - mem = (char *)PMM::alloc_page(); - 802061ca: 799000ef jal 80207162 <_ZN3PMM10alloc_pageEv> - memset(mem, 0, PGSIZE); - 802061ce: 6605 lui a2,0x1 - 802061d0: 4581 li a1,0 - mem = (char *)PMM::alloc_page(); - 802061d2: 842a mv s0,a0 - memset(mem, 0, PGSIZE); - 802061d4: c57fe0ef jal 80204e2a <_Z6memsetPvij> - if ((pte = walk(pagetable, a, 1)) == nullptr) - 802061d8: 4605 li a2,1 - 802061da: 4581 li a1,0 - 802061dc: 854e mv a0,s3 - 802061de: b5fff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 802061e2: c911 beqz a0,802061f6 <_ZN2VM7uvminitEPyPhy+0x44> - if (*pte & PTE_V) - 802061e4: 611c ld a5,0(a0) - 802061e6: 8b85 andi a5,a5,1 - 802061e8: e799 bnez a5,802061f6 <_ZN2VM7uvminitEPyPhy+0x44> - *pte = PA2PTE(pa) | perm | PTE_V; - 802061ea: 00c45793 srli a5,s0,0xc - 802061ee: 07aa slli a5,a5,0xa - 802061f0: 01f7e793 ori a5,a5,31 - 802061f4: e11c sd a5,0(a0) - memmove(mem, src, sz); - 802061f6: 8522 mv a0,s0 - } - 802061f8: 7402 ld s0,32(sp) - 802061fa: 70a2 ld ra,40(sp) - 802061fc: 69a2 ld s3,8(sp) - memmove(mem, src, sz); - 802061fe: 0004861b sext.w a2,s1 - 80206202: 85ca mv a1,s2 - } - 80206204: 64e2 ld s1,24(sp) - 80206206: 6942 ld s2,16(sp) - 80206208: 6145 addi sp,sp,48 - memmove(mem, src, sz); - 8020620a: c6bfe06f j 80204e74 <_Z7memmovePvPKvj> - Drivers::uart_puts("uvminit: initcode too big!\n"); - 8020620e: 0000c517 auipc a0,0xc - 80206212: aaa50513 addi a0,a0,-1366 # 80211cb8 - 80206216: 3550206f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -000000008020621a <_ZN2VM8uvmallocEPyyyi>: - if (newsz < oldsz) - 8020621a: 06b66b63 bltu a2,a1,80206290 <_ZN2VM8uvmallocEPyyyi+0x76> - oldsz = PGROUNDUP(oldsz); - 8020621e: 6785 lui a5,0x1 - 80206220: 17fd addi a5,a5,-1 # fff <_start-0x801ff001> - { - 80206222: 7139 addi sp,sp,-64 - oldsz = PGROUNDUP(oldsz); - 80206224: 95be add a1,a1,a5 - 80206226: 77fd lui a5,0xfffff - { - 80206228: f426 sd s1,40(sp) - 8020622a: f04a sd s2,32(sp) - 8020622c: ec4e sd s3,24(sp) - 8020622e: e852 sd s4,16(sp) - 80206230: e456 sd s5,8(sp) - oldsz = PGROUNDUP(oldsz); - 80206232: 00f5fa33 and s4,a1,a5 - { - 80206236: fc06 sd ra,56(sp) - 80206238: 8ab2 mv s5,a2 - 8020623a: 89aa mv s3,a0 - for (a = oldsz; a < newsz; a += PGSIZE) - 8020623c: 84d2 mv s1,s4 - if (mappages(pagetable, a, PGSIZE, (uint64)mem, PTE_R | PTE_U | xperm) != 0) - 8020623e: 0126e913 ori s2,a3,18 - for (a = oldsz; a < newsz; a += PGSIZE) - 80206242: 04ca7a63 bgeu s4,a2,80206296 <_ZN2VM8uvmallocEPyyyi+0x7c> - 80206246: f822 sd s0,48(sp) - 80206248: a839 j 80206266 <_ZN2VM8uvmallocEPyyyi+0x4c> - memset(mem, 0, PGSIZE); - 8020624a: be1fe0ef jal 80204e2a <_Z6memsetPvij> - if (mappages(pagetable, a, PGSIZE, (uint64)mem, PTE_R | PTE_U | xperm) != 0) - 8020624e: 874a mv a4,s2 - 80206250: 86a2 mv a3,s0 - 80206252: 6605 lui a2,0x1 - 80206254: 85a6 mv a1,s1 - 80206256: 854e mv a0,s3 - 80206258: e8fff0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 8020625c: e531 bnez a0,802062a8 <_ZN2VM8uvmallocEPyyyi+0x8e> - for (a = oldsz; a < newsz; a += PGSIZE) - 8020625e: 6785 lui a5,0x1 - 80206260: 94be add s1,s1,a5 - 80206262: 0354f963 bgeu s1,s5,80206294 <_ZN2VM8uvmallocEPyyyi+0x7a> - mem = (char *)PMM::alloc_page(); - 80206266: 6fd000ef jal 80207162 <_ZN3PMM10alloc_pageEv> - memset(mem, 0, PGSIZE); - 8020626a: 6605 lui a2,0x1 - 8020626c: 4581 li a1,0 - mem = (char *)PMM::alloc_page(); - 8020626e: 842a mv s0,a0 - if (mem == nullptr) - 80206270: fd69 bnez a0,8020624a <_ZN2VM8uvmallocEPyyyi+0x30> - if (newsz >= oldsz) - 80206272: 009a7c63 bgeu s4,s1,8020628a <_ZN2VM8uvmallocEPyyyi+0x70> - if (PGROUNDUP(newsz) < PGROUNDUP(oldsz)) - 80206276: 6785 lui a5,0x1 - 80206278: 17fd addi a5,a5,-1 # fff <_start-0x801ff001> - 8020627a: 777d lui a4,0xfffff - 8020627c: 00fa05b3 add a1,s4,a5 - 80206280: 97a6 add a5,a5,s1 - 80206282: 8df9 and a1,a1,a4 - 80206284: 8ff9 and a5,a5,a4 - 80206286: 04f5e963 bltu a1,a5,802062d8 <_ZN2VM8uvmallocEPyyyi+0xbe> - 8020628a: 7442 ld s0,48(sp) - return 0; - 8020628c: 4501 li a0,0 - 8020628e: a029 j 80206298 <_ZN2VM8uvmallocEPyyyi+0x7e> - return oldsz; - 80206290: 852e mv a0,a1 - } - 80206292: 8082 ret - 80206294: 7442 ld s0,48(sp) - return newsz; - 80206296: 8556 mv a0,s5 - } - 80206298: 70e2 ld ra,56(sp) - 8020629a: 74a2 ld s1,40(sp) - 8020629c: 7902 ld s2,32(sp) - 8020629e: 69e2 ld s3,24(sp) - 802062a0: 6a42 ld s4,16(sp) - 802062a2: 6aa2 ld s5,8(sp) - 802062a4: 6121 addi sp,sp,64 - 802062a6: 8082 ret - PMM::free_page(mem); - 802062a8: 8522 mv a0,s0 - 802062aa: 6db000ef jal 80207184 <_ZN3PMM9free_pageEPv> - if (newsz >= oldsz) - 802062ae: fc9a7ee3 bgeu s4,s1,8020628a <_ZN2VM8uvmallocEPyyyi+0x70> - if (PGROUNDUP(newsz) < PGROUNDUP(oldsz)) - 802062b2: 6785 lui a5,0x1 - 802062b4: 17fd addi a5,a5,-1 # fff <_start-0x801ff001> - 802062b6: 777d lui a4,0xfffff - 802062b8: 00fa05b3 add a1,s4,a5 - 802062bc: 94be add s1,s1,a5 - 802062be: 8df9 and a1,a1,a4 - 802062c0: 8cf9 and s1,s1,a4 - 802062c2: fc95f4e3 bgeu a1,s1,8020628a <_ZN2VM8uvmallocEPyyyi+0x70> - int npages = (PGROUNDUP(oldsz) - PGROUNDUP(newsz)) / PGSIZE; - 802062c6: 40b48633 sub a2,s1,a1 - 802062ca: 8231 srli a2,a2,0xc - 802062cc: 4685 li a3,1 - 802062ce: 2601 sext.w a2,a2 - 802062d0: 854e mv a0,s3 - 802062d2: b01ff0ef jal 80205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0> - 802062d6: bf55 j 8020628a <_ZN2VM8uvmallocEPyyyi+0x70> - 802062d8: 8f8d sub a5,a5,a1 - 802062da: 00c7d613 srli a2,a5,0xc - 802062de: 4685 li a3,1 - 802062e0: 2601 sext.w a2,a2 - 802062e2: 854e mv a0,s3 - 802062e4: aefff0ef jal 80205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0> - 802062e8: b74d j 8020628a <_ZN2VM8uvmallocEPyyyi+0x70> - -00000000802062ea <_ZN2VM10uvmdeallocEPyyy>: - if (newsz >= oldsz) - 802062ea: 04b67263 bgeu a2,a1,8020632e <_ZN2VM10uvmdeallocEPyyy+0x44> - if (PGROUNDUP(newsz) < PGROUNDUP(oldsz)) - 802062ee: 6785 lui a5,0x1 - 802062f0: 17fd addi a5,a5,-1 # fff <_start-0x801ff001> - { - 802062f2: 1141 addi sp,sp,-16 - if (PGROUNDUP(newsz) < PGROUNDUP(oldsz)) - 802062f4: 76fd lui a3,0xfffff - 802062f6: 00f60733 add a4,a2,a5 - 802062fa: 97ae add a5,a5,a1 - { - 802062fc: e022 sd s0,0(sp) - 802062fe: e406 sd ra,8(sp) - if (PGROUNDUP(newsz) < PGROUNDUP(oldsz)) - 80206300: 00d775b3 and a1,a4,a3 - 80206304: 8ff5 and a5,a5,a3 - 80206306: 8432 mv s0,a2 - 80206308: 00f5e763 bltu a1,a5,80206316 <_ZN2VM10uvmdeallocEPyyy+0x2c> - } - 8020630c: 60a2 ld ra,8(sp) - return oldsz; - 8020630e: 8522 mv a0,s0 - } - 80206310: 6402 ld s0,0(sp) - 80206312: 0141 addi sp,sp,16 - 80206314: 8082 ret - int npages = (PGROUNDUP(oldsz) - PGROUNDUP(newsz)) / PGSIZE; - 80206316: 8f8d sub a5,a5,a1 - 80206318: 83b1 srli a5,a5,0xc - 8020631a: 4685 li a3,1 - 8020631c: 0007861b sext.w a2,a5 - 80206320: ab3ff0ef jal 80205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0> - } - 80206324: 60a2 ld ra,8(sp) - return oldsz; - 80206326: 8522 mv a0,s0 - } - 80206328: 6402 ld s0,0(sp) - 8020632a: 0141 addi sp,sp,16 - 8020632c: 8082 ret - return oldsz; - 8020632e: 852e mv a0,a1 - } - 80206330: 8082 ret - -0000000080206332 <_ZN2VM8uvmunmapEPyyyi>: - if ((va % PGSIZE) != 0) - 80206332: 03459793 slli a5,a1,0x34 - 80206336: e399 bnez a5,8020633c <_ZN2VM8uvmunmapEPyyyi+0xa> - 80206338: a9bff06f j 80205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0> - } - 8020633c: 8082 ret - -000000008020633e <_ZN2VM7uvmfreeEPyy>: - - void uvmfree(uint64 *pagetable, uint64 sz) - { - 8020633e: 7179 addi sp,sp,-48 - 80206340: e44e sd s3,8(sp) - 80206342: f406 sd ra,40(sp) - 80206344: f022 sd s0,32(sp) - 80206346: ec26 sd s1,24(sp) - 80206348: e84a sd s2,16(sp) - 8020634a: 89aa mv s3,a0 - if (sz > 0) - 8020634c: e1a1 bnez a1,8020638c <_ZN2VM7uvmfreeEPyy+0x4e> - 8020634e: 6485 lui s1,0x1 - 80206350: 844e mv s0,s3 - 80206352: 94ce add s1,s1,s3 - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80206354: 4905 li s2,1 - 80206356: a021 j 8020635e <_ZN2VM7uvmfreeEPyy+0x20> - for (int i = 0; i < 512; i++) - 80206358: 0421 addi s0,s0,8 - 8020635a: 02940063 beq s0,s1,8020637a <_ZN2VM7uvmfreeEPyy+0x3c> - uint64 pte = pagetable[i]; - 8020635e: 6008 ld a0,0(s0) - if ((pte & PTE_V) && (pte & (PTE_R | PTE_W | PTE_X)) == 0) - 80206360: 00f57793 andi a5,a0,15 - 80206364: ff279ae3 bne a5,s2,80206358 <_ZN2VM7uvmfreeEPyy+0x1a> - uint64 *child = (uint64 *)PTE2PA(pte); - 80206368: 8129 srli a0,a0,0xa - freewalk(child); - 8020636a: 0532 slli a0,a0,0xc - 8020636c: b23ff0ef jal 80205e8e <_ZN2VML8freewalkEPy> - for (int i = 0; i < 512; i++) - 80206370: 0421 addi s0,s0,8 - pagetable[i] = 0; - 80206372: fe043c23 sd zero,-8(s0) - for (int i = 0; i < 512; i++) - 80206376: fe9414e3 bne s0,s1,8020635e <_ZN2VM7uvmfreeEPyy+0x20> - uvmunmap(pagetable, 0, PGROUNDUP(sz) / PGSIZE, 1); - freewalk(pagetable); - } - 8020637a: 7402 ld s0,32(sp) - 8020637c: 70a2 ld ra,40(sp) - 8020637e: 64e2 ld s1,24(sp) - 80206380: 6942 ld s2,16(sp) - PMM::free_page(pagetable); - 80206382: 854e mv a0,s3 - } - 80206384: 69a2 ld s3,8(sp) - 80206386: 6145 addi sp,sp,48 - PMM::free_page(pagetable); - 80206388: 5fd0006f j 80207184 <_ZN3PMM9free_pageEPv> - uvmunmap(pagetable, 0, PGROUNDUP(sz) / PGSIZE, 1); - 8020638c: 6785 lui a5,0x1 - 8020638e: 17fd addi a5,a5,-1 # fff <_start-0x801ff001> - 80206390: 00f58633 add a2,a1,a5 - 80206394: 4685 li a3,1 - 80206396: 8231 srli a2,a2,0xc - 80206398: 4581 li a1,0 - 8020639a: a39ff0ef jal 80205dd2 <_ZN2VM8uvmunmapEPyyyi.part.0> - for (int i = 0; i < 512; i++) - 8020639e: bf45 j 8020634e <_ZN2VM7uvmfreeEPyy+0x10> - -00000000802063a0 <_ZN2VM7uvmcopyEPyS0_y>: - { - uint64 *pte; - uint64 pa, i; - uint flags; - - for (i = 0; i < sz; i += PGSIZE) - 802063a0: ce61 beqz a2,80206478 <_ZN2VM7uvmcopyEPyS0_y+0xd8> - { - 802063a2: 715d addi sp,sp,-80 - 802063a4: f052 sd s4,32(sp) - - if (flags & PTE_W) - { - flags &= ~PTE_W; - flags |= PTE_COW; - *pte = PA2PTE(pa) | flags; - 802063a6: 7a7d lui s4,0xfffff - { - 802063a8: e0a2 sd s0,64(sp) - 802063aa: fc26 sd s1,56(sp) - 802063ac: f84a sd s2,48(sp) - 802063ae: f44e sd s3,40(sp) - 802063b0: ec56 sd s5,24(sp) - 802063b2: e85a sd s6,16(sp) - 802063b4: e486 sd ra,72(sp) - 802063b6: e45e sd s7,8(sp) - 802063b8: 84b2 mv s1,a2 - 802063ba: 892a mv s2,a0 - 802063bc: 89ae mv s3,a1 - for (i = 0; i < sz; i += PGSIZE) - 802063be: 4401 li s0,0 - __atomic_add_fetch(&p->refcnt, 1, __ATOMIC_RELAXED); - 802063c0: 6b41 lui s6,0x10 - 802063c2: 4a85 li s5,1 - *pte = PA2PTE(pa) | flags; - 802063c4: 002a5a13 srli s4,s4,0x2 - if ((pte = walk(oldpt, i, 0)) == nullptr) - 802063c8: 4601 li a2,0 - 802063ca: 85a2 mv a1,s0 - 802063cc: 854a mv a0,s2 - 802063ce: 96fff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 802063d2: cd3d beqz a0,80206450 <_ZN2VM7uvmcopyEPyS0_y+0xb0> - if ((*pte & PTE_V) == 0) - 802063d4: 6118 ld a4,0(a0) - 802063d6: 00177793 andi a5,a4,1 - pa = PTE2PA(*pte); - 802063da: 00a75b93 srli s7,a4,0xa - if (flags & PTE_W) - 802063de: 00477613 andi a2,a4,4 - if ((*pte & PTE_V) == 0) - 802063e2: c7bd beqz a5,80206450 <_ZN2VM7uvmcopyEPyS0_y+0xb0> - *pte = PA2PTE(pa) | flags; - 802063e4: 014776b3 and a3,a4,s4 - flags = PTE_FLAGS(*pte); - 802063e8: 2701 sext.w a4,a4 - flags &= ~PTE_W; - 802063ea: 3fb77793 andi a5,a4,1019 - *pte = PA2PTE(pa) | flags; - 802063ee: 1007e593 ori a1,a5,256 - 802063f2: 8ecd or a3,a3,a1 - pa = PTE2PA(*pte); - 802063f4: 0bb2 slli s7,s7,0xc - flags = PTE_FLAGS(*pte); - 802063f6: 3ff77713 andi a4,a4,1023 - if (flags & PTE_W) - 802063fa: c601 beqz a2,80206402 <_ZN2VM7uvmcopyEPyS0_y+0x62> - flags |= PTE_COW; - 802063fc: 1007e713 ori a4,a5,256 - *pte = PA2PTE(pa) | flags; - 80206400: e114 sd a3,0(a0) - } - - if (mappages(newpt, i, PGSIZE, pa, flags) != 0) - 80206402: 86de mv a3,s7 - 80206404: 6605 lui a2,0x1 - 80206406: 85a2 mv a1,s0 - 80206408: 854e mv a0,s3 - 8020640a: cddff0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 8020640e: 87aa mv a5,a0 - struct Page *p = PMM::pa_to_page(pa); - 80206410: 855e mv a0,s7 - if (mappages(newpt, i, PGSIZE, pa, flags) != 0) - 80206412: e3ad bnez a5,80206474 <_ZN2VM7uvmcopyEPyS0_y+0xd4> - struct Page *p = PMM::pa_to_page(pa); - 80206414: 083000ef jal 80206c96 <_ZN3PMM10pa_to_pageEy> - __atomic_add_fetch(&p->refcnt, 1, __ATOMIC_RELAXED); - 80206418: 00250713 addi a4,a0,2 - 8020641c: 00377793 andi a5,a4,3 - 80206420: 0037979b slliw a5,a5,0x3 - 80206424: fffb069b addiw a3,s6,-1 # ffff <_start-0x801f0001> - 80206428: 00f696bb sllw a3,a3,a5 - 8020642c: 9b71 andi a4,a4,-4 - 8020642e: fff6c613 not a2,a3 - 80206432: 00fa97bb sllw a5,s5,a5 - if (p) - 80206436: cd09 beqz a0,80206450 <_ZN2VM7uvmcopyEPyS0_y+0xb0> - __atomic_add_fetch(&p->refcnt, 1, __ATOMIC_RELAXED); - 80206438: 100725af lr.w a1,(a4) - 8020643c: 00f58533 add a0,a1,a5 - 80206440: 8d75 and a0,a0,a3 - 80206442: 00c5f833 and a6,a1,a2 - 80206446: 00a86833 or a6,a6,a0 - 8020644a: 1907252f sc.w a0,a6,(a4) - 8020644e: f56d bnez a0,80206438 <_ZN2VM7uvmcopyEPyS0_y+0x98> - for (i = 0; i < sz; i += PGSIZE) - 80206450: 6785 lui a5,0x1 - 80206452: 943e add s0,s0,a5 - 80206454: f6946ae3 bltu s0,s1,802063c8 <_ZN2VM7uvmcopyEPyS0_y+0x28> -// flush the TLB. -static inline void -sfence_vma() -{ - // the zero, zero means flush all TLB entries. - asm volatile("sfence.vma zero, zero"); - 80206458: 12000073 sfence.vma - - page_ref_inc(pa); - } - - sfence_vma(); - return 0; - 8020645c: 4501 li a0,0 - } - 8020645e: 60a6 ld ra,72(sp) - 80206460: 6406 ld s0,64(sp) - 80206462: 74e2 ld s1,56(sp) - 80206464: 7942 ld s2,48(sp) - 80206466: 79a2 ld s3,40(sp) - 80206468: 7a02 ld s4,32(sp) - 8020646a: 6ae2 ld s5,24(sp) - 8020646c: 6b42 ld s6,16(sp) - 8020646e: 6ba2 ld s7,8(sp) - 80206470: 6161 addi sp,sp,80 - 80206472: 8082 ret - return -1; - 80206474: 557d li a0,-1 - 80206476: b7e5 j 8020645e <_ZN2VM7uvmcopyEPyS0_y+0xbe> - 80206478: 12000073 sfence.vma - return 0; - 8020647c: 4501 li a0,0 - } - 8020647e: 8082 ret - -0000000080206480 <_ZN2VM6copyinEPyPcyy>: - int copyin(uint64 *pagetable, char *dst, uint64 srcva, uint64 len) - { - uint64 n, va0, pa0; - uint64 *pte; - - while (len > 0) - 80206480: c6d1 beqz a3,8020650c <_ZN2VM6copyinEPyPcyy+0x8c> - { - 80206482: 715d addi sp,sp,-80 - 80206484: e0a2 sd s0,64(sp) - 80206486: f84a sd s2,48(sp) - 80206488: f44e sd s3,40(sp) - 8020648a: f052 sd s4,32(sp) - 8020648c: ec56 sd s5,24(sp) - 8020648e: e85a sd s6,16(sp) - 80206490: e45e sd s7,8(sp) - 80206492: e486 sd ra,72(sp) - 80206494: fc26 sd s1,56(sp) - 80206496: 8bb6 mv s7,a3 - 80206498: 8a2a mv s4,a0 - 8020649a: 892e mv s2,a1 - 8020649c: 8432 mv s0,a2 - { - va0 = PGROUNDDOWN(srcva); - 8020649e: 7afd lui s5,0xfffff - pte = walk(pagetable, va0, 0); - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802064a0: 4b45 li s6,17 - return -1; - - pa0 = PTE2PA(*pte); - n = PGSIZE - (srcva - va0); - 802064a2: 6985 lui s3,0x1 - 802064a4: a03d j 802064d2 <_ZN2VM6copyinEPyPcyy+0x52> - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802064a6: 639c ld a5,0(a5) - pa0 = PTE2PA(*pte); - 802064a8: 00a7d713 srli a4,a5,0xa - 802064ac: 0732 slli a4,a4,0xc - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802064ae: 8bc5 andi a5,a5,17 - if (n > len) - n = len; - - memmove(dst, (void *)(pa0 + (srcva - va0)), n); - 802064b0: 95ba add a1,a1,a4 - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802064b2: 03679f63 bne a5,s6,802064f0 <_ZN2VM6copyinEPyPcyy+0x70> - if (n > len) - 802064b6: 008bf363 bgeu s7,s0,802064bc <_ZN2VM6copyinEPyPcyy+0x3c> - 802064ba: 845e mv s0,s7 - memmove(dst, (void *)(pa0 + (srcva - va0)), n); - 802064bc: 0004061b sext.w a2,s0 - - len -= n; - 802064c0: 408b8bb3 sub s7,s7,s0 - dst += n; - 802064c4: 9922 add s2,s2,s0 - memmove(dst, (void *)(pa0 + (srcva - va0)), n); - 802064c6: 9affe0ef jal 80204e74 <_Z7memmovePvPKvj> - srcva = va0 + PGSIZE; - 802064ca: 01348433 add s0,s1,s3 - while (len > 0) - 802064ce: 020b8d63 beqz s7,80206508 <_ZN2VM6copyinEPyPcyy+0x88> - va0 = PGROUNDDOWN(srcva); - 802064d2: 015474b3 and s1,s0,s5 - pte = walk(pagetable, va0, 0); - 802064d6: 85a6 mv a1,s1 - 802064d8: 4601 li a2,0 - 802064da: 8552 mv a0,s4 - 802064dc: 861ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 802064e0: 87aa mv a5,a0 - memmove(dst, (void *)(pa0 + (srcva - va0)), n); - 802064e2: 409405b3 sub a1,s0,s1 - n = PGSIZE - (srcva - va0); - 802064e6: 40848433 sub s0,s1,s0 - memmove(dst, (void *)(pa0 + (srcva - va0)), n); - 802064ea: 854a mv a0,s2 - n = PGSIZE - (srcva - va0); - 802064ec: 944e add s0,s0,s3 - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802064ee: ffc5 bnez a5,802064a6 <_ZN2VM6copyinEPyPcyy+0x26> - return -1; - 802064f0: 557d li a0,-1 - } - return 0; - } - 802064f2: 60a6 ld ra,72(sp) - 802064f4: 6406 ld s0,64(sp) - 802064f6: 74e2 ld s1,56(sp) - 802064f8: 7942 ld s2,48(sp) - 802064fa: 79a2 ld s3,40(sp) - 802064fc: 7a02 ld s4,32(sp) - 802064fe: 6ae2 ld s5,24(sp) - 80206500: 6b42 ld s6,16(sp) - 80206502: 6ba2 ld s7,8(sp) - 80206504: 6161 addi sp,sp,80 - 80206506: 8082 ret - return 0; - 80206508: 4501 li a0,0 - 8020650a: b7e5 j 802064f2 <_ZN2VM6copyinEPyPcyy+0x72> - 8020650c: 4501 li a0,0 - } - 8020650e: 8082 ret - -0000000080206510 <_ZN2VM9copyinstrEPyPcyy>: - uint64 n, va0, pa0; - uint64 *pte; - int got_null = 0; - uint64 len = 0; - - while (len < max) - 80206510: cec5 beqz a3,802065c8 <_ZN2VM9copyinstrEPyPcyy+0xb8> - { - 80206512: 715d addi sp,sp,-80 - 80206514: e0a2 sd s0,64(sp) - 80206516: fc26 sd s1,56(sp) - 80206518: f84a sd s2,48(sp) - 8020651a: f44e sd s3,40(sp) - 8020651c: f052 sd s4,32(sp) - 8020651e: e85a sd s6,16(sp) - 80206520: e45e sd s7,8(sp) - 80206522: e062 sd s8,0(sp) - 80206524: e486 sd ra,72(sp) - 80206526: ec56 sd s5,24(sp) - 80206528: 8c36 mv s8,a3 - 8020652a: 842a mv s0,a0 - 8020652c: 8b2e mv s6,a1 - 8020652e: 8a32 mv s4,a2 - 80206530: 4b81 li s7,0 - 80206532: 74fd lui s1,0xfffff - 80206534: 4945 li s2,17 - 80206536: 6985 lui s3,0x1 - { - va0 = PGROUNDDOWN(srcva); - 80206538: 009a7ab3 and s5,s4,s1 - pte = walk(pagetable, va0, 0); - 8020653c: 4601 li a2,0 - 8020653e: 85d6 mv a1,s5 - 80206540: 8522 mv a0,s0 - 80206542: ffaff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 80206546: cd3d beqz a0,802065c4 <_ZN2VM9copyinstrEPyPcyy+0xb4> - 80206548: 611c ld a5,0(a0) - 8020654a: 0117f713 andi a4,a5,17 - 8020654e: 07271b63 bne a4,s2,802065c4 <_ZN2VM9copyinstrEPyPcyy+0xb4> - return -1; - - pa0 = PTE2PA(*pte); - - n = PGSIZE - (srcva - va0); - 80206552: 414a88b3 sub a7,s5,s4 - if (n > max - len) - 80206556: 417c0733 sub a4,s8,s7 - 8020655a: 98ce add a7,a7,s3 - 8020655c: 01177363 bgeu a4,a7,80206562 <_ZN2VM9copyinstrEPyPcyy+0x52> - 80206560: 88ba mv a7,a4 - pa0 = PTE2PA(*pte); - 80206562: 83a9 srli a5,a5,0xa - 80206564: 07b2 slli a5,a5,0xc - n = max - len; - - char *p = (char *)(pa0 + (srcva - va0)); - 80206566: 415a0ab3 sub s5,s4,s5 - 8020656a: 01578833 add a6,a5,s5 - while (n > 0) - 8020656e: 04088963 beqz a7,802065c0 <_ZN2VM9copyinstrEPyPcyy+0xb0> - 80206572: 87da mv a5,s6 - 80206574: 41680833 sub a6,a6,s6 - 80206578: 98da add a7,a7,s6 - 8020657a: a031 j 80206586 <_ZN2VM9copyinstrEPyPcyy+0x76> - { - *dst = '\0'; - got_null = 1; - break; - } - *dst = *p; - 8020657c: 00e78023 sb a4,0(a5) # 1000 <_start-0x801ff000> - n--; - srcva++; - dst++; - 80206580: 0785 addi a5,a5,1 - while (n > 0) - 80206582: 03178763 beq a5,a7,802065b0 <_ZN2VM9copyinstrEPyPcyy+0xa0> - if (*p == '\0') - 80206586: 01078733 add a4,a5,a6 - 8020658a: 00074703 lbu a4,0(a4) # fffffffffffff000 - 8020658e: 853e mv a0,a5 - 80206590: f775 bnez a4,8020657c <_ZN2VM9copyinstrEPyPcyy+0x6c> - *dst = '\0'; - 80206592: 00078023 sb zero,0(a5) - 80206596: 4501 li a0,0 - - if (got_null) - return 0; - - return -1; - } - 80206598: 60a6 ld ra,72(sp) - 8020659a: 6406 ld s0,64(sp) - 8020659c: 74e2 ld s1,56(sp) - 8020659e: 7942 ld s2,48(sp) - 802065a0: 79a2 ld s3,40(sp) - 802065a2: 7a02 ld s4,32(sp) - 802065a4: 6ae2 ld s5,24(sp) - 802065a6: 6b42 ld s6,16(sp) - 802065a8: 6ba2 ld s7,8(sp) - 802065aa: 6c02 ld s8,0(sp) - 802065ac: 6161 addi sp,sp,80 - 802065ae: 8082 ret - 802065b0: 0a05 addi s4,s4,1 # fffffffffffff001 - 802065b2: 416a0a33 sub s4,s4,s6 - 802065b6: 416b8bb3 sub s7,s7,s6 - srcva++; - 802065ba: 9a2a add s4,s4,a0 - len++; - 802065bc: 9bbe add s7,s7,a5 - 802065be: 8b3e mv s6,a5 - while (len < max) - 802065c0: f78bece3 bltu s7,s8,80206538 <_ZN2VM9copyinstrEPyPcyy+0x28> - return -1; - 802065c4: 557d li a0,-1 - 802065c6: bfc9 j 80206598 <_ZN2VM9copyinstrEPyPcyy+0x88> - *dst = '\0'; - 802065c8: 557d li a0,-1 - } - 802065ca: 8082 ret - -00000000802065cc <_ZN2VM16handle_cow_faultEPyy>: - - int handle_cow_fault(uint64 *pagetable, uint64 va) - { - if (va >= MAXVA) - 802065cc: 57fd li a5,-1 - 802065ce: 83e9 srli a5,a5,0x1a - 802065d0: 0cb7e763 bltu a5,a1,8020669e <_ZN2VM16handle_cow_faultEPyy+0xd2> - { - 802065d4: 7179 addi sp,sp,-48 - return -1; - - uint64 *pte = walk(pagetable, va, 0); - 802065d6: 4601 li a2,0 - { - 802065d8: e44e sd s3,8(sp) - 802065da: f406 sd ra,40(sp) - uint64 *pte = walk(pagetable, va, 0); - 802065dc: f60ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 802065e0: 89aa mv s3,a0 - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802065e2: c55d beqz a0,80206690 <_ZN2VM16handle_cow_faultEPyy+0xc4> - 802065e4: ec26 sd s1,24(sp) - 802065e6: 6104 ld s1,0(a0) - 802065e8: 47c5 li a5,17 - 802065ea: 0114f713 andi a4,s1,17 - 802065ee: 0af71063 bne a4,a5,8020668e <_ZN2VM16handle_cow_faultEPyy+0xc2> - return -1; - - if ((*pte & PTE_COW) == 0) - 802065f2: 1004f793 andi a5,s1,256 - 802065f6: cfc1 beqz a5,8020668e <_ZN2VM16handle_cow_faultEPyy+0xc2> - 802065f8: f022 sd s0,32(sp) - 802065fa: e84a sd s2,16(sp) - return -1; - - uint64 pa = PTE2PA(*pte); - 802065fc: 00a4d913 srli s2,s1,0xa - uint64 flags = PTE_FLAGS(*pte); - - char *mem = (char *)PMM::alloc_page(); - 80206600: 363000ef jal 80207162 <_ZN3PMM10alloc_pageEv> - uint64 pa = PTE2PA(*pte); - 80206604: 0932 slli s2,s2,0xc - char *mem = (char *)PMM::alloc_page(); - 80206606: 842a mv s0,a0 - if (mem == nullptr) - 80206608: c551 beqz a0,80206694 <_ZN2VM16handle_cow_faultEPyy+0xc8> - return -1; - - memmove(mem, (char *)pa, PGSIZE); - - uint64 new_flags = (flags | PTE_W) & ~PTE_COW; - *pte = PA2PTE((uint64)mem) | new_flags | PTE_V; - 8020660a: 8031 srli s0,s0,0xc - 8020660c: 042a slli s0,s0,0xa - uint64 new_flags = (flags | PTE_W) & ~PTE_COW; - 8020660e: 2fb4f493 andi s1,s1,763 - memmove(mem, (char *)pa, PGSIZE); - 80206612: 6605 lui a2,0x1 - 80206614: 85ca mv a1,s2 - *pte = PA2PTE((uint64)mem) | new_flags | PTE_V; - 80206616: 8c45 or s0,s0,s1 - memmove(mem, (char *)pa, PGSIZE); - 80206618: 85dfe0ef jal 80204e74 <_Z7memmovePvPKvj> - *pte = PA2PTE((uint64)mem) | new_flags | PTE_V; - 8020661c: 00546413 ori s0,s0,5 - 80206620: 0089b023 sd s0,0(s3) # 1000 <_start-0x801ff000> - struct Page *p = PMM::pa_to_page(pa); - 80206624: 854a mv a0,s2 - 80206626: 670000ef jal 80206c96 <_ZN3PMM10pa_to_pageEy> - if (p) - 8020662a: c521 beqz a0,80206672 <_ZN2VM16handle_cow_faultEPyy+0xa6> - if (__atomic_sub_fetch(&p->refcnt, 1, __ATOMIC_RELEASE) == 0) - 8020662c: 0509 addi a0,a0,2 - 8020662e: 00357693 andi a3,a0,3 - 80206632: 6741 lui a4,0x10 - 80206634: 0036969b slliw a3,a3,0x3 - 80206638: 377d addiw a4,a4,-1 # ffff <_start-0x801f0001> - 8020663a: 00d7173b sllw a4,a4,a3 - 8020663e: 567d li a2,-1 - 80206640: 9971 andi a0,a0,-4 - 80206642: fff74593 not a1,a4 - 80206646: 00d6163b sllw a2,a2,a3 - 8020664a: 100527af lr.w a5,(a0) - 8020664e: 00c78833 add a6,a5,a2 - 80206652: 00e87833 and a6,a6,a4 - 80206656: 00b7f8b3 and a7,a5,a1 - 8020665a: 0108e8b3 or a7,a7,a6 - 8020665e: 1b15282f sc.w.rl a6,a7,(a0) - 80206662: fe0814e3 bnez a6,8020664a <_ZN2VM16handle_cow_faultEPyy+0x7e> - 80206666: 40d7d7bb sraw a5,a5,a3 - 8020666a: 37fd addiw a5,a5,-1 - 8020666c: 17c2 slli a5,a5,0x30 - 8020666e: 93c1 srli a5,a5,0x30 - 80206670: cb99 beqz a5,80206686 <_ZN2VM16handle_cow_faultEPyy+0xba> - 80206672: 12000073 sfence.vma - { - PMM::free_page((void *)pa); - } - - sfence_vma(); - return 0; - 80206676: 7402 ld s0,32(sp) - 80206678: 64e2 ld s1,24(sp) - 8020667a: 6942 ld s2,16(sp) - 8020667c: 4501 li a0,0 - } - 8020667e: 70a2 ld ra,40(sp) - 80206680: 69a2 ld s3,8(sp) - 80206682: 6145 addi sp,sp,48 - 80206684: 8082 ret - PMM::free_page((void *)pa); - 80206686: 854a mv a0,s2 - 80206688: 2fd000ef jal 80207184 <_ZN3PMM9free_pageEPv> - 8020668c: b7dd j 80206672 <_ZN2VM16handle_cow_faultEPyy+0xa6> - 8020668e: 64e2 ld s1,24(sp) - return -1; - 80206690: 557d li a0,-1 - 80206692: b7f5 j 8020667e <_ZN2VM16handle_cow_faultEPyy+0xb2> - 80206694: 7402 ld s0,32(sp) - 80206696: 64e2 ld s1,24(sp) - 80206698: 6942 ld s2,16(sp) - 8020669a: 557d li a0,-1 - 8020669c: b7cd j 8020667e <_ZN2VM16handle_cow_faultEPyy+0xb2> - 8020669e: 557d li a0,-1 - } - 802066a0: 8082 ret - -00000000802066a2 <_ZN2VM7copyoutEPyyPcy>: - while (len > 0) - 802066a2: cadd beqz a3,80206758 <_ZN2VM7copyoutEPyyPcy+0xb6> - { - 802066a4: 715d addi sp,sp,-80 - 802066a6: e0a2 sd s0,64(sp) - 802066a8: f84a sd s2,48(sp) - 802066aa: f44e sd s3,40(sp) - 802066ac: f052 sd s4,32(sp) - 802066ae: ec56 sd s5,24(sp) - 802066b0: e85a sd s6,16(sp) - 802066b2: e45e sd s7,8(sp) - 802066b4: e486 sd ra,72(sp) - 802066b6: fc26 sd s1,56(sp) - 802066b8: 8936 mv s2,a3 - 802066ba: 8a2a mv s4,a0 - 802066bc: 842e mv s0,a1 - 802066be: 89b2 mv s3,a2 - va0 = PGROUNDDOWN(dstva); - 802066c0: 7bfd lui s7,0xfffff - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802066c2: 4b45 li s6,17 - n = PGSIZE - (dstva - va0); - 802066c4: 6a85 lui s5,0x1 - 802066c6: a085 j 80206726 <_ZN2VM7copyoutEPyyPcy+0x84> - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802066c8: 639c ld a5,0(a5) - 802066ca: 0117f713 andi a4,a5,17 - if (*pte & PTE_COW) - 802066ce: 1007f693 andi a3,a5,256 - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802066d2: 07671563 bne a4,s6,8020673c <_ZN2VM7copyoutEPyyPcy+0x9a> - if (*pte & PTE_COW) - 802066d6: c28d beqz a3,802066f8 <_ZN2VM7copyoutEPyyPcy+0x56> - if (handle_cow_fault(pagetable, va0) < 0) - 802066d8: ef5ff0ef jal 802065cc <_ZN2VM16handle_cow_faultEPyy> - 802066dc: 87aa mv a5,a0 - pte = walk(pagetable, va0, 0); - 802066de: 4601 li a2,0 - 802066e0: 85a6 mv a1,s1 - 802066e2: 8552 mv a0,s4 - if (handle_cow_fault(pagetable, va0) < 0) - 802066e4: 0407cc63 bltz a5,8020673c <_ZN2VM7copyoutEPyyPcy+0x9a> - pte = walk(pagetable, va0, 0); - 802066e8: e54ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802066ec: c921 beqz a0,8020673c <_ZN2VM7copyoutEPyyPcy+0x9a> - 802066ee: 611c ld a5,0(a0) - 802066f0: 0117f713 andi a4,a5,17 - 802066f4: 05671463 bne a4,s6,8020673c <_ZN2VM7copyoutEPyyPcy+0x9a> - memmove((void *)(pa0 + (dstva - va0)), src, n); - 802066f8: 40940533 sub a0,s0,s1 - pa0 = PTE2PA(*pte); - 802066fc: 83a9 srli a5,a5,0xa - n = PGSIZE - (dstva - va0); - 802066fe: 40848433 sub s0,s1,s0 - pa0 = PTE2PA(*pte); - 80206702: 07b2 slli a5,a5,0xc - n = PGSIZE - (dstva - va0); - 80206704: 9456 add s0,s0,s5 - memmove((void *)(pa0 + (dstva - va0)), src, n); - 80206706: 85ce mv a1,s3 - 80206708: 953e add a0,a0,a5 - if (n > len) - 8020670a: 00897363 bgeu s2,s0,80206710 <_ZN2VM7copyoutEPyyPcy+0x6e> - 8020670e: 844a mv s0,s2 - memmove((void *)(pa0 + (dstva - va0)), src, n); - 80206710: 0004061b sext.w a2,s0 - len -= n; - 80206714: 40890933 sub s2,s2,s0 - src += n; - 80206718: 99a2 add s3,s3,s0 - memmove((void *)(pa0 + (dstva - va0)), src, n); - 8020671a: f5afe0ef jal 80204e74 <_Z7memmovePvPKvj> - dstva = va0 + PGSIZE; - 8020671e: 01548433 add s0,s1,s5 - while (len > 0) - 80206722: 02090963 beqz s2,80206754 <_ZN2VM7copyoutEPyyPcy+0xb2> - va0 = PGROUNDDOWN(dstva); - 80206726: 017474b3 and s1,s0,s7 - pte = walk(pagetable, va0, 0); - 8020672a: 85a6 mv a1,s1 - 8020672c: 4601 li a2,0 - 8020672e: 8552 mv a0,s4 - 80206730: e0cff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - 80206734: 87aa mv a5,a0 - if (handle_cow_fault(pagetable, va0) < 0) - 80206736: 85a6 mv a1,s1 - 80206738: 8552 mv a0,s4 - if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 8020673a: f7d9 bnez a5,802066c8 <_ZN2VM7copyoutEPyyPcy+0x26> - return -1; - 8020673c: 557d li a0,-1 - } - 8020673e: 60a6 ld ra,72(sp) - 80206740: 6406 ld s0,64(sp) - 80206742: 74e2 ld s1,56(sp) - 80206744: 7942 ld s2,48(sp) - 80206746: 79a2 ld s3,40(sp) - 80206748: 7a02 ld s4,32(sp) - 8020674a: 6ae2 ld s5,24(sp) - 8020674c: 6b42 ld s6,16(sp) - 8020674e: 6ba2 ld s7,8(sp) - 80206750: 6161 addi sp,sp,80 - 80206752: 8082 ret - return 0; - 80206754: 4501 li a0,0 - 80206756: b7e5 j 8020673e <_ZN2VM7copyoutEPyyPcy+0x9c> - 80206758: 4501 li a0,0 - } - 8020675a: 8082 ret - -000000008020675c <_ZN2VM7kvminitEv>: - ; - } - } - - void kvminit() - { - 8020675c: 7179 addi sp,sp,-48 - 8020675e: f022 sd s0,32(sp) - 80206760: ec26 sd s1,24(sp) - 80206762: e84a sd s2,16(sp) - 80206764: e44e sd s3,8(sp) - 80206766: e052 sd s4,0(sp) - 80206768: f406 sd ra,40(sp) - kernel_pagetable = uvmcreate(); - 8020676a: 00017497 auipc s1,0x17 - 8020676e: 4ae48493 addi s1,s1,1198 # 8021dc18 <_ZN2VM16kernel_pagetableE> - 80206772: 9edff0ef jal 8020615e <_ZN2VM9uvmcreateEv> - 80206776: 892a mv s2,a0 - 80206778: e088 sd a0,0(s1) - 8020677a: 10000437 lui s0,0x10000 - if (a == last) - 8020677e: 1000f9b7 lui s3,0x1000f - a += PGSIZE; - 80206782: 6a05 lui s4,0x1 - 80206784: a801 j 80206794 <_ZN2VM7kvminitEv+0x38> - if (*pte & PTE_V) - 80206786: 6118 ld a4,0(a0) - 80206788: 8b05 andi a4,a4,1 - 8020678a: e305 bnez a4,802067aa <_ZN2VM7kvminitEv+0x4e> - *pte = PA2PTE(pa) | perm | PTE_V; - 8020678c: e11c sd a5,0(a0) - if (a == last) - 8020678e: 03340563 beq s0,s3,802067b8 <_ZN2VM7kvminitEv+0x5c> - a += PGSIZE; - 80206792: 9452 add s0,s0,s4 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 80206794: 4605 li a2,1 - 80206796: 85a2 mv a1,s0 - 80206798: 854a mv a0,s2 - 8020679a: da2ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - *pte = PA2PTE(pa) | perm | PTE_V; - 8020679e: 00c45793 srli a5,s0,0xc - 802067a2: 07aa slli a5,a5,0xa - 802067a4: 0077e793 ori a5,a5,7 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 802067a8: fd79 bnez a0,80206786 <_ZN2VM7kvminitEv+0x2a> - Drivers::uart_puts("kvmmap: failed\n"); - 802067aa: 0000b517 auipc a0,0xb - 802067ae: 52e50513 addi a0,a0,1326 # 80211cd8 - 802067b2: 5b8020ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802067b6: a001 j 802067b6 <_ZN2VM7kvminitEv+0x5a> - if (mappages(kernel_pagetable, va, sz, pa, perm) != 0) - 802067b8: 0004b903 ld s2,0(s1) - 802067bc: 0c000437 lui s0,0xc000 - if (a == last) - 802067c0: 0c3ff9b7 lui s3,0xc3ff - a += PGSIZE; - 802067c4: 6a05 lui s4,0x1 - 802067c6: a801 j 802067d6 <_ZN2VM7kvminitEv+0x7a> - if (*pte & PTE_V) - 802067c8: 6118 ld a4,0(a0) - 802067ca: 8b05 andi a4,a4,1 - 802067cc: e305 bnez a4,802067ec <_ZN2VM7kvminitEv+0x90> - *pte = PA2PTE(pa) | perm | PTE_V; - 802067ce: e11c sd a5,0(a0) - if (a == last) - 802067d0: 03340563 beq s0,s3,802067fa <_ZN2VM7kvminitEv+0x9e> - a += PGSIZE; - 802067d4: 9452 add s0,s0,s4 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 802067d6: 4605 li a2,1 - 802067d8: 85a2 mv a1,s0 - 802067da: 854a mv a0,s2 - 802067dc: d60ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - *pte = PA2PTE(pa) | perm | PTE_V; - 802067e0: 00c45793 srli a5,s0,0xc - 802067e4: 07aa slli a5,a5,0xa - 802067e6: 0077e793 ori a5,a5,7 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 802067ea: fd79 bnez a0,802067c8 <_ZN2VM7kvminitEv+0x6c> - Drivers::uart_puts("kvmmap: failed\n"); - 802067ec: 0000b517 auipc a0,0xb - 802067f0: 4ec50513 addi a0,a0,1260 # 80211cd8 - 802067f4: 576020ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802067f8: a001 j 802067f8 <_ZN2VM7kvminitEv+0x9c> - if (mappages(kernel_pagetable, va, sz, pa, perm) != 0) - 802067fa: 0004b903 ld s2,0(s1) - 802067fe: 02000437 lui s0,0x2000 - if (a == last) - 80206802: 0200f9b7 lui s3,0x200f - a += PGSIZE; - 80206806: 6a05 lui s4,0x1 - 80206808: a801 j 80206818 <_ZN2VM7kvminitEv+0xbc> - if (*pte & PTE_V) - 8020680a: 6118 ld a4,0(a0) - 8020680c: 8b05 andi a4,a4,1 - 8020680e: e305 bnez a4,8020682e <_ZN2VM7kvminitEv+0xd2> - *pte = PA2PTE(pa) | perm | PTE_V; - 80206810: e11c sd a5,0(a0) - if (a == last) - 80206812: 03340563 beq s0,s3,8020683c <_ZN2VM7kvminitEv+0xe0> - a += PGSIZE; - 80206816: 9452 add s0,s0,s4 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 80206818: 4605 li a2,1 - 8020681a: 85a2 mv a1,s0 - 8020681c: 854a mv a0,s2 - 8020681e: d1eff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - *pte = PA2PTE(pa) | perm | PTE_V; - 80206822: 00c45793 srli a5,s0,0xc - 80206826: 07aa slli a5,a5,0xa - 80206828: 0077e793 ori a5,a5,7 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 8020682c: fd79 bnez a0,8020680a <_ZN2VM7kvminitEv+0xae> - Drivers::uart_puts("kvmmap: failed\n"); - 8020682e: 0000b517 auipc a0,0xb - 80206832: 4aa50513 addi a0,a0,1194 # 80211cd8 - 80206836: 534020ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 8020683a: a001 j 8020683a <_ZN2VM7kvminitEv+0xde> - if (a == last) - 8020683c: 00088937 lui s2,0x88 - if (mappages(kernel_pagetable, va, sz, pa, perm) != 0) - 80206840: 4405 li s0,1 - if (a == last) - 80206842: 197d addi s2,s2,-1 # 87fff <_start-0x80178001> - if (mappages(kernel_pagetable, va, sz, pa, perm) != 0) - 80206844: 6084 ld s1,0(s1) - 80206846: 047e slli s0,s0,0x1f - if (a == last) - 80206848: 0932 slli s2,s2,0xc - a += PGSIZE; - 8020684a: 6985 lui s3,0x1 - 8020684c: a801 j 8020685c <_ZN2VM7kvminitEv+0x100> - if (*pte & PTE_V) - 8020684e: 6118 ld a4,0(a0) - 80206850: 8b05 andi a4,a4,1 - 80206852: e305 bnez a4,80206872 <_ZN2VM7kvminitEv+0x116> - *pte = PA2PTE(pa) | perm | PTE_V; - 80206854: e11c sd a5,0(a0) - if (a == last) - 80206856: 03240563 beq s0,s2,80206880 <_ZN2VM7kvminitEv+0x124> - a += PGSIZE; - 8020685a: 944e add s0,s0,s3 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 8020685c: 4605 li a2,1 - 8020685e: 85a2 mv a1,s0 - 80206860: 8526 mv a0,s1 - 80206862: cdaff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - *pte = PA2PTE(pa) | perm | PTE_V; - 80206866: 00c45793 srli a5,s0,0xc - 8020686a: 07aa slli a5,a5,0xa - 8020686c: 00f7e793 ori a5,a5,15 - if ((pte = walk(pagetable, a, 1)) == nullptr) - 80206870: fd79 bnez a0,8020684e <_ZN2VM7kvminitEv+0xf2> - Drivers::uart_puts("kvmmap: failed\n"); - 80206872: 0000b517 auipc a0,0xb - 80206876: 46650513 addi a0,a0,1126 # 80211cd8 - 8020687a: 4f0020ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 8020687e: a001 j 8020687e <_ZN2VM7kvminitEv+0x122> - - 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); - } - 80206880: 70a2 ld ra,40(sp) - 80206882: 7402 ld s0,32(sp) - 80206884: 64e2 ld s1,24(sp) - 80206886: 6942 ld s2,16(sp) - 80206888: 69a2 ld s3,8(sp) - 8020688a: 6a02 ld s4,0(sp) - 8020688c: 6145 addi sp,sp,48 - 8020688e: 8082 ret - -0000000080206890 <_ZN2VM11kvminithartEv>: - - void kvminithart() - { - w_satp(MAKE_SATP(kernel_pagetable)); - 80206890: 00017797 auipc a5,0x17 - 80206894: 3887b783 ld a5,904(a5) # 8021dc18 <_ZN2VM16kernel_pagetableE> - 80206898: 577d li a4,-1 - 8020689a: 177e slli a4,a4,0x3f - 8020689c: 83b1 srli a5,a5,0xc - 8020689e: 8fd9 or a5,a5,a4 - asm volatile("csrw satp, %0" : : "r" (x)); - 802068a0: 18079073 csrw satp,a5 - asm volatile("sfence.vma zero, zero"); - 802068a4: 12000073 sfence.vma - sfence_vma(); - Drivers::uart_puts("[Boot] MMU ENABLED! Using virtual addresses.\n"); - 802068a8: 0000b517 auipc a0,0xb - 802068ac: 44050513 addi a0,a0,1088 # 80211ce8 - 802068b0: 4ba0206f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -00000000802068b4 <_ZN2VM8walkaddrEPyy>: - uint64 walkaddr(uint64 *pagetable, uint64 va) - { - uint64 *pte; - uint64 pa; - - if (va >= MAXVA) - 802068b4: 57fd li a5,-1 - 802068b6: 83e9 srli a5,a5,0x1a - 802068b8: 00b7f463 bgeu a5,a1,802068c0 <_ZN2VM8walkaddrEPyy+0xc> - return 0; - 802068bc: 4501 li a0,0 - if (pte == 0 || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - return 0; - - pa = PTE2PA(*pte); - return pa; - } - 802068be: 8082 ret - { - 802068c0: 1141 addi sp,sp,-16 - pte = walk(pagetable, va, 0); - 802068c2: 4601 li a2,0 - { - 802068c4: e406 sd ra,8(sp) - pte = walk(pagetable, va, 0); - 802068c6: c76ff0ef jal 80205d3c <_ZN2VML4walkEPyyi> - if (pte == 0 || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) - 802068ca: cd01 beqz a0,802068e2 <_ZN2VM8walkaddrEPyy+0x2e> - 802068cc: 6108 ld a0,0(a0) - 802068ce: 47c5 li a5,17 - 802068d0: 01157713 andi a4,a0,17 - 802068d4: 00f71763 bne a4,a5,802068e2 <_ZN2VM8walkaddrEPyy+0x2e> - } - 802068d8: 60a2 ld ra,8(sp) - pa = PTE2PA(*pte); - 802068da: 8129 srli a0,a0,0xa - 802068dc: 0532 slli a0,a0,0xc - } - 802068de: 0141 addi sp,sp,16 - 802068e0: 8082 ret - 802068e2: 60a2 ld ra,8(sp) - return 0; - 802068e4: 4501 li a0,0 - } - 802068e6: 0141 addi sp,sp,16 - 802068e8: 8082 ret - -00000000802068ea <_ZN4Slab4initEv>: - -namespace Slab -{ - - void init() - { - 802068ea: 7139 addi sp,sp,-64 - 802068ec: f04a sd s2,32(sp) - caches[i].name = "kmalloc"; - - // Calculate how many objects can fit on a page - // Excluding the overhead of the SlabHeader - uint64 available = PGSIZE - sizeof(struct SlabHeader); - caches[i].obj_count_per_slab = available / caches[i].obj_size; - 802068ee: 6905 lui s2,0x1 - { - 802068f0: f822 sd s0,48(sp) - 802068f2: f426 sd s1,40(sp) - 802068f4: ec4e sd s3,24(sp) - 802068f6: e852 sd s4,16(sp) - 802068f8: e456 sd s5,8(sp) - 802068fa: fc06 sd ra,56(sp) - 802068fc: 00017417 auipc s0,0x17 - 80206900: 32440413 addi s0,s0,804 # 8021dc20 - 80206904: 0000c497 auipc s1,0xc - 80206908: d0448493 addi s1,s1,-764 # 80212608 <_ZL13kmalloc_sizes> - 8020690c: 00017a97 auipc s5,0x17 - 80206910: 4d4a8a93 addi s5,s5,1236 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206914: 0000ba17 auipc s4,0xb - 80206918: 414a0a13 addi s4,s4,1044 # 80211d28 - caches[i].lock.init("slab_lock"); - 8020691c: 0000b997 auipc s3,0xb - 80206920: 3fc98993 addi s3,s3,1020 # 80211d18 - caches[i].obj_count_per_slab = available / caches[i].obj_size; - 80206924: 1941 addi s2,s2,-16 # ff0 <_start-0x801ff010> - caches[i].lock.init("slab_lock"); - 80206926: 8522 mv a0,s0 - 80206928: 85ce mv a1,s3 - 8020692a: 8b0ff0ef jal 802059da <_ZN8Spinlock4initEPKc> - caches[i].obj_size = kmalloc_sizes[i]; - 8020692e: 609c ld a5,0(s1) - caches[i].name = "kmalloc"; - 80206930: 03443823 sd s4,48(s0) - caches[i].slab_list = nullptr; - 80206934: 02043423 sd zero,40(s0) - caches[i].obj_count_per_slab = available / caches[i].obj_size; - 80206938: 02f95733 divu a4,s2,a5 - caches[i].obj_size = kmalloc_sizes[i]; - 8020693c: ec1c sd a5,24(s0) - for (int i = 0; i < NUM_CACHES; i++) - 8020693e: 03840413 addi s0,s0,56 - 80206942: 04a1 addi s1,s1,8 - caches[i].obj_count_per_slab = available / caches[i].obj_size; - 80206944: fee43423 sd a4,-24(s0) - for (int i = 0; i < NUM_CACHES; i++) - 80206948: fd541fe3 bne s0,s5,80206926 <_ZN4Slab4initEv+0x3c> - } - Drivers::uart_puts("[Slab] Initialized kmalloc caches.\n"); - } - 8020694c: 7442 ld s0,48(sp) - 8020694e: 70e2 ld ra,56(sp) - 80206950: 74a2 ld s1,40(sp) - 80206952: 7902 ld s2,32(sp) - 80206954: 69e2 ld s3,24(sp) - 80206956: 6a42 ld s4,16(sp) - 80206958: 6aa2 ld s5,8(sp) - Drivers::uart_puts("[Slab] Initialized kmalloc caches.\n"); - 8020695a: 0000b517 auipc a0,0xb - 8020695e: 3d650513 addi a0,a0,982 # 80211d30 - } - 80206962: 6121 addi sp,sp,64 - Drivers::uart_puts("[Slab] Initialized kmalloc caches.\n"); - 80206964: 4060206f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -0000000080206968 <_ZN4Slab7kmallocEy>: - - return slab; - } - - void *kmalloc(uint64 size) - { - 80206968: 715d addi sp,sp,-80 - 8020696a: e486 sd ra,72(sp) - 8020696c: e0a2 sd s0,64(sp) - if (size == 0) - 8020696e: c915 beqz a0,802069a2 <_ZN4Slab7kmallocEy+0x3a> - return nullptr; - - // Large objects go directly through PMM - if (size > 2048) - 80206970: 6785 lui a5,0x1 - 80206972: fc26 sd s1,56(sp) - 80206974: 80078793 addi a5,a5,-2048 # 800 <_start-0x801ff800> - 80206978: 84aa mv s1,a0 - 8020697a: 02a7f663 bgeu a5,a0,802069a6 <_ZN4Slab7kmallocEy+0x3e> - { - // calculate order - int order = 0; - uint64 req = size; - uint64 pages = (size + PGSIZE - 1) / PGSIZE; - 8020697e: 6705 lui a4,0x1 - 80206980: 177d addi a4,a4,-1 # fff <_start-0x801ff001> - 80206982: 972a add a4,a4,a0 - 80206984: 8331 srli a4,a4,0xc - (void)req; - - // calculate order: 2^order >= pages - while ((1UL << order) < pages) - 80206986: 4785 li a5,1 - int order = 0; - 80206988: 4501 li a0,0 - while ((1UL << order) < pages) - 8020698a: 0ce7f763 bgeu a5,a4,80206a58 <_ZN4Slab7kmallocEy+0xf0> - 8020698e: 4685 li a3,1 - { - order++; - 80206990: 2505 addiw a0,a0,1 - while ((1UL << order) < pages) - 80206992: 00a697b3 sll a5,a3,a0 - 80206996: fee7ede3 bltu a5,a4,80206990 <_ZN4Slab7kmallocEy+0x28> - } - if (order > MAX_ORDER) - 8020699a: 47ad li a5,11 - 8020699c: 0aa7de63 bge a5,a0,80206a58 <_ZN4Slab7kmallocEy+0xf0> - 802069a0: 74e2 ld s1,56(sp) - return nullptr; - 802069a2: 4401 li s0,0 - 802069a4: a06d j 80206a4e <_ZN4Slab7kmallocEy+0xe6> - 802069a6: f84a sd s2,48(sp) - 802069a8: f44e sd s3,40(sp) - 802069aa: f052 sd s4,32(sp) - 802069ac: ec56 sd s5,24(sp) - 802069ae: e85a sd s6,16(sp) - 802069b0: e45e sd s7,8(sp) - 802069b2: 0000c797 auipc a5,0xc - 802069b6: c5678793 addi a5,a5,-938 # 80212608 <_ZL13kmalloc_sizes> - // Here, page->flags defaults to PG_used, not PG_slab - // kfree needs to be able to recognize it - return p; - } - - int idx = 0; - 802069ba: 4401 li s0,0 - while (idx < NUM_CACHES && kmalloc_sizes[idx] < size) - 802069bc: 46a1 li a3,8 - 802069be: 6398 ld a4,0(a5) - 802069c0: 07a1 addi a5,a5,8 - 802069c2: 0a977963 bgeu a4,s1,80206a74 <_ZN4Slab7kmallocEy+0x10c> - { - idx++; - 802069c6: 2405 addiw s0,s0,1 - while (idx < NUM_CACHES && kmalloc_sizes[idx] < size) - 802069c8: fed41be3 bne s0,a3,802069be <_ZN4Slab7kmallocEy+0x56> - 802069cc: 1c000b93 li s7,448 - 802069d0: 00341993 slli s3,s0,0x3 - } - - struct KmemCache *c = &caches[idx]; - 802069d4: 00017a17 auipc s4,0x17 - 802069d8: 24ca0a13 addi s4,s4,588 # 8021dc20 - c->lock.acquire(); - - if (!c->slab_list) - 802069dc: 40898b33 sub s6,s3,s0 - struct KmemCache *c = &caches[idx]; - 802069e0: 017a0ab3 add s5,s4,s7 - if (!c->slab_list) - 802069e4: 0b0e slli s6,s6,0x3 - c->lock.acquire(); - 802069e6: 8556 mv a0,s5 - if (!c->slab_list) - 802069e8: 9b52 add s6,s6,s4 - c->lock.acquire(); - 802069ea: 996ff0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (!c->slab_list) - 802069ee: 028b3903 ld s2,40(s6) - 802069f2: 08090763 beqz s2,80206a80 <_ZN4Slab7kmallocEy+0x118> - - struct SlabHeader *slab = c->slab_list; - - int obj_idx = slab->free_idx; - char *base = (char *)(slab + 1); - void *ptr = base + obj_idx * c->obj_size; - 802069f6: 408989b3 sub s3,s3,s0 - 802069fa: 098e slli s3,s3,0x3 - 802069fc: 9a4e add s4,s4,s3 - 802069fe: 018a3703 ld a4,24(s4) - 80206a02: 00895403 lhu s0,8(s2) - - uint16 *link = (uint16 *)ptr; - slab->free_idx = *link; - slab->used_count++; - 80206a06: 00a95783 lhu a5,10(s2) - void *ptr = base + obj_idx * c->obj_size; - 80206a0a: 02e40433 mul s0,s0,a4 - slab->free_idx = *link; - 80206a0e: 6741 lui a4,0x10 - slab->used_count++; - 80206a10: 2785 addiw a5,a5,1 - slab->free_idx = *link; - 80206a12: 177d addi a4,a4,-1 # ffff <_start-0x801f0001> - 80206a14: 0107979b slliw a5,a5,0x10 - void *ptr = base + obj_idx * c->obj_size; - 80206a18: 0441 addi s0,s0,16 - 80206a1a: 944a add s0,s0,s2 - slab->free_idx = *link; - 80206a1c: 00045603 lhu a2,0(s0) - 80206a20: 00e676b3 and a3,a2,a4 - 80206a24: 8fd5 or a5,a5,a3 - 80206a26: 00f92423 sw a5,8(s2) - - if (slab->free_idx == 0xFFFF) - 80206a2a: 02e60d63 beq a2,a4,80206a64 <_ZN4Slab7kmallocEy+0xfc> - { - c->slab_list = nullptr; - } - } - - c->lock.release(); - 80206a2e: 8556 mv a0,s5 - 80206a30: 8e8ff0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - memset(ptr, 0, size); - 80206a34: 0004861b sext.w a2,s1 - 80206a38: 4581 li a1,0 - 80206a3a: 8522 mv a0,s0 - 80206a3c: beefe0ef jal 80204e2a <_Z6memsetPvij> - 80206a40: 74e2 ld s1,56(sp) - 80206a42: 7942 ld s2,48(sp) - 80206a44: 79a2 ld s3,40(sp) - 80206a46: 7a02 ld s4,32(sp) - 80206a48: 6ae2 ld s5,24(sp) - 80206a4a: 6b42 ld s6,16(sp) - 80206a4c: 6ba2 ld s7,8(sp) - return ptr; - } - 80206a4e: 60a6 ld ra,72(sp) - 80206a50: 8522 mv a0,s0 - 80206a52: 6406 ld s0,64(sp) - 80206a54: 6161 addi sp,sp,80 - 80206a56: 8082 ret - 80206a58: 6406 ld s0,64(sp) - void *p = PMM::alloc_pages(order); - 80206a5a: 74e2 ld s1,56(sp) - } - 80206a5c: 60a6 ld ra,72(sp) - 80206a5e: 6161 addi sp,sp,80 - void *p = PMM::alloc_pages(order); - 80206a60: 2f00006f j 80206d50 <_ZN3PMM11alloc_pagesEi> - if (slab->next) - 80206a64: 00093783 ld a5,0(s2) - 80206a68: c7e9 beqz a5,80206b32 <_ZN4Slab7kmallocEy+0x1ca> - c->slab_list = slab->next; - 80206a6a: 02fa3423 sd a5,40(s4) - slab->next = nullptr; - 80206a6e: 00093023 sd zero,0(s2) - 80206a72: bf75 j 80206a2e <_ZN4Slab7kmallocEy+0xc6> - 80206a74: 00341993 slli s3,s0,0x3 - 80206a78: 40898bb3 sub s7,s3,s0 - 80206a7c: 0b8e slli s7,s7,0x3 - 80206a7e: bf99 j 802069d4 <_ZN4Slab7kmallocEy+0x6c> - void *p = PMM::alloc_page(); - 80206a80: 6e2000ef jal 80207162 <_ZN3PMM10alloc_pageEv> - 80206a84: 892a mv s2,a0 - if (!p) - 80206a86: c941 beqz a0,80206b16 <_ZN4Slab7kmallocEy+0x1ae> - return PMM::pa_to_page(pa); - 80206a88: 20e000ef jal 80206c96 <_ZN3PMM10pa_to_pageEy> - if (page) - 80206a8c: cd0d beqz a0,80206ac6 <_ZN4Slab7kmallocEy+0x15e> - int cache_idx = c - caches; - 80206a8e: 06db7737 lui a4,0x6db7 - 80206a92: db770713 addi a4,a4,-585 # 6db6db7 <_start-0x79449249> - 80206a96: 0732 slli a4,a4,0xc - 80206a98: db770713 addi a4,a4,-585 - 80206a9c: 0732 slli a4,a4,0xc - 80206a9e: db770713 addi a4,a4,-585 - 80206aa2: 0732 slli a4,a4,0xc - 80206aa4: db770713 addi a4,a4,-585 - 80206aa8: 403bd793 srai a5,s7,0x3 - 80206aac: 02e787b3 mul a5,a5,a4 - page->flags |= PG_slab; - 80206ab0: 00054703 lbu a4,0(a0) - 80206ab4: 00476713 ori a4,a4,4 - 80206ab8: 0ff7f793 zext.b a5,a5 - 80206abc: 0087979b slliw a5,a5,0x8 - 80206ac0: 8fd9 or a5,a5,a4 - 80206ac2: 00f51023 sh a5,0(a0) - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206ac6: 408987b3 sub a5,s3,s0 - 80206aca: 078e slli a5,a5,0x3 - slab->free_idx = 0; - 80206acc: 00093423 sd zero,8(s2) - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206ad0: 97d2 add a5,a5,s4 - 80206ad2: 7390 ld a2,32(a5) - slab->next = nullptr; - 80206ad4: 00093023 sd zero,0(s2) - uint16 *ptr = (uint16 *)(base + (c->obj_count_per_slab - 1) * c->obj_size); - 80206ad8: 6f88 ld a0,24(a5) - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206ada: 167d addi a2,a2,-1 # fff <_start-0x801ff001> - char *base = (char *)(slab + 1); - 80206adc: 01090593 addi a1,s2,16 - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206ae0: c20d beqz a2,80206b02 <_ZN4Slab7kmallocEy+0x19a> - 80206ae2: 4785 li a5,1 - 80206ae4: 4681 li a3,0 - uint16 *ptr = (uint16 *)(base + i * c->obj_size); - 80206ae6: 02a68733 mul a4,a3,a0 - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206aea: 02079693 slli a3,a5,0x20 - 80206aee: 9281 srli a3,a3,0x20 - *ptr = i + 1; - 80206af0: 972e add a4,a4,a1 - 80206af2: 00f71023 sh a5,0(a4) - for (uint i = 0; i < c->obj_count_per_slab - 1; i++) - 80206af6: 2785 addiw a5,a5,1 - 80206af8: fec6e7e3 bltu a3,a2,80206ae6 <_ZN4Slab7kmallocEy+0x17e> - uint16 *ptr = (uint16 *)(base + (c->obj_count_per_slab - 1) * c->obj_size); - 80206afc: 02a60633 mul a2,a2,a0 - 80206b00: 95b2 add a1,a1,a2 - c->slab_list = grow_cache(c); - 80206b02: 408987b3 sub a5,s3,s0 - 80206b06: 078e slli a5,a5,0x3 - *ptr = 0xFFFF; - 80206b08: 577d li a4,-1 - 80206b0a: 00e59023 sh a4,0(a1) - c->slab_list = grow_cache(c); - 80206b0e: 97d2 add a5,a5,s4 - 80206b10: 0327b423 sd s2,40(a5) - if (!c->slab_list) - 80206b14: b5cd j 802069f6 <_ZN4Slab7kmallocEy+0x8e> - c->lock.release(); - 80206b16: 8556 mv a0,s5 - c->slab_list = grow_cache(c); - 80206b18: 020b3423 sd zero,40(s6) - return nullptr; - 80206b1c: 4401 li s0,0 - c->lock.release(); - 80206b1e: ffbfe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - 80206b22: 74e2 ld s1,56(sp) - 80206b24: 7942 ld s2,48(sp) - 80206b26: 79a2 ld s3,40(sp) - 80206b28: 7a02 ld s4,32(sp) - 80206b2a: 6ae2 ld s5,24(sp) - 80206b2c: 6b42 ld s6,16(sp) - 80206b2e: 6ba2 ld s7,8(sp) - 80206b30: bf39 j 80206a4e <_ZN4Slab7kmallocEy+0xe6> - c->slab_list = nullptr; - 80206b32: 020a3423 sd zero,40(s4) - 80206b36: bde5 j 80206a2e <_ZN4Slab7kmallocEy+0xc6> - -0000000080206b38 <_ZN4Slab5kfreeEPv>: - - void kfree(void *ptr) - { - if (!ptr) - 80206b38: 10050963 beqz a0,80206c4a <_ZN4Slab5kfreeEPv+0x112> - { - 80206b3c: 7139 addi sp,sp,-64 - 80206b3e: f822 sd s0,48(sp) - 80206b40: f426 sd s1,40(sp) - 80206b42: fc06 sd ra,56(sp) - 80206b44: 842a mv s0,a0 - return PMM::pa_to_page(pa); - 80206b46: 150000ef jal 80206c96 <_ZN3PMM10pa_to_pageEy> - 80206b4a: 84aa mv s1,a0 - return; - - struct Page *page = virt_to_page(ptr); - if (!page) - 80206b4c: c54d beqz a0,80206bf6 <_ZN4Slab5kfreeEPv+0xbe> - return; - - if (!page || !(page->flags & PG_slab)) - 80206b4e: e456 sd s5,8(sp) - 80206b50: 00054783 lbu a5,0(a0) - { - PMM::free_pages(ptr, page->order); - 80206b54: 00154703 lbu a4,1(a0) - if (!page || !(page->flags & PG_slab)) - 80206b58: 8b91 andi a5,a5,4 - PMM::free_pages(ptr, page->order); - 80206b5a: 00070a9b sext.w s5,a4 - if (!page || !(page->flags & PG_slab)) - 80206b5e: c3cd beqz a5,80206c00 <_ZN4Slab5kfreeEPv+0xc8> - return; - } - - int cache_idx = page->order; - if (cache_idx >= NUM_CACHES) - 80206b60: 479d li a5,7 - 80206b62: 0ce7e963 bltu a5,a4,80206c34 <_ZN4Slab5kfreeEPv+0xfc> - 80206b66: f04a sd s2,32(sp) - 80206b68: 00371913 slli s2,a4,0x3 - 80206b6c: 40e90933 sub s2,s2,a4 - 80206b70: e852 sd s4,16(sp) - Drivers::uart_puts("Slab: Corrupted page metadata\n"); - return; - } - - struct KmemCache *c = &caches[cache_idx]; - c->lock.acquire(); - 80206b72: 090e slli s2,s2,0x3 - 80206b74: 00017a17 auipc s4,0x17 - 80206b78: 0aca0a13 addi s4,s4,172 # 8021dc20 - 80206b7c: ec4e sd s3,24(sp) - 80206b7e: 012a09b3 add s3,s4,s2 - 80206b82: 854e mv a0,s3 - 80206b84: ffdfe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - struct SlabHeader *slab = (struct SlabHeader *)PGROUNDDOWN((uint64)ptr); - 80206b88: 757d lui a0,0xfffff - 80206b8a: 8d61 and a0,a0,s0 - - if ((uint64)ptr < (uint64)(slab + 1) || (uint64)ptr >= (uint64)slab + PGSIZE) - 80206b8c: 01050793 addi a5,a0,16 # fffffffffffff010 - 80206b90: 08f46163 bltu s0,a5,80206c12 <_ZN4Slab5kfreeEPv+0xda> - 80206b94: 6705 lui a4,0x1 - 80206b96: 972a add a4,a4,a0 - 80206b98: 06e47d63 bgeu s0,a4,80206c12 <_ZN4Slab5kfreeEPv+0xda> - c->lock.release(); - return; - } - - char *base = (char *)(slab + 1); - int obj_idx = ((uint64)ptr - (uint64)base) / c->obj_size; - 80206b9c: 003a9713 slli a4,s5,0x3 - 80206ba0: 41570733 sub a4,a4,s5 - 80206ba4: 070e slli a4,a4,0x3 - 80206ba6: 9752 add a4,a4,s4 - 80206ba8: 6f10 ld a2,24(a4) - 80206baa: 40f407b3 sub a5,s0,a5 - - uint16 *link = (uint16 *)ptr; - *link = slab->free_idx; - 80206bae: 00855683 lhu a3,8(a0) - int obj_idx = ((uint64)ptr - (uint64)base) / c->obj_size; - 80206bb2: 02c7d7b3 divu a5,a5,a2 - *link = slab->free_idx; - 80206bb6: 00d41023 sh a3,0(s0) - slab->free_idx = (uint16)obj_idx; - - slab->used_count--; - 80206bba: 00a55683 lhu a3,10(a0) - 80206bbe: 36fd addiw a3,a3,-1 # ffffffffffffefff - slab->free_idx = (uint16)obj_idx; - 80206bc0: 0106961b slliw a2,a3,0x10 - slab->used_count--; - 80206bc4: 16c2 slli a3,a3,0x30 - 80206bc6: 92c1 srli a3,a3,0x30 - slab->free_idx = (uint16)obj_idx; - 80206bc8: 17c2 slli a5,a5,0x30 - 80206bca: 93c1 srli a5,a5,0x30 - 80206bcc: 8fd1 or a5,a5,a2 - 80206bce: c51c sw a5,8(a0) - - if (slab->used_count == 0) - 80206bd0: eeb5 bnez a3,80206c4c <_ZN4Slab5kfreeEPv+0x114> - { - struct SlabHeader **pp = &c->slab_list; - 80206bd2: 771c ld a5,40(a4) - // bool found = false; - while (*pp) - 80206bd4: cb89 beqz a5,80206be6 <_ZN4Slab5kfreeEPv+0xae> - { - if (*pp == slab) - 80206bd6: 00a79563 bne a5,a0,80206be0 <_ZN4Slab5kfreeEPv+0xa8> - 80206bda: a049 j 80206c5c <_ZN4Slab5kfreeEPv+0x124> - 80206bdc: 08f50363 beq a0,a5,80206c62 <_ZN4Slab5kfreeEPv+0x12a> - { - *pp = slab->next; - // found = true; - break; - } - pp = &(*pp)->next; - 80206be0: 8a3e mv s4,a5 - 80206be2: 639c ld a5,0(a5) - while (*pp) - 80206be4: ffe5 bnez a5,80206bdc <_ZN4Slab5kfreeEPv+0xa4> - } - - page->flags &= ~PG_slab; - 80206be6: 0004c783 lbu a5,0(s1) - 80206bea: 9bed andi a5,a5,-5 - 80206bec: 00f48023 sb a5,0(s1) - PMM::free_page(slab); - 80206bf0: 594000ef jal 80207184 <_ZN3PMM9free_pageEPv> - 80206bf4: a02d j 80206c1e <_ZN4Slab5kfreeEPv+0xe6> - c->slab_list = slab; - } - } - - c->lock.release(); - } - 80206bf6: 70e2 ld ra,56(sp) - 80206bf8: 7442 ld s0,48(sp) - 80206bfa: 74a2 ld s1,40(sp) - 80206bfc: 6121 addi sp,sp,64 - 80206bfe: 8082 ret - PMM::free_pages(ptr, page->order); - 80206c00: 8522 mv a0,s0 - } - 80206c02: 7442 ld s0,48(sp) - 80206c04: 70e2 ld ra,56(sp) - 80206c06: 74a2 ld s1,40(sp) - PMM::free_pages(ptr, page->order); - 80206c08: 85d6 mv a1,s5 - 80206c0a: 6aa2 ld s5,8(sp) - } - 80206c0c: 6121 addi sp,sp,64 - PMM::free_pages(ptr, page->order); - 80206c0e: 26c0006f j 80206e7a <_ZN3PMM10free_pagesEPvi> - Drivers::uart_puts("Slab: kfree invalid pointer\n"); - 80206c12: 0000b517 auipc a0,0xb - 80206c16: 16650513 addi a0,a0,358 # 80211d78 - 80206c1a: 150020ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - 80206c1e: 7442 ld s0,48(sp) - c->lock.release(); - 80206c20: 7902 ld s2,32(sp) - 80206c22: 6a42 ld s4,16(sp) - 80206c24: 6aa2 ld s5,8(sp) - } - 80206c26: 70e2 ld ra,56(sp) - 80206c28: 74a2 ld s1,40(sp) - c->lock.release(); - 80206c2a: 854e mv a0,s3 - 80206c2c: 69e2 ld s3,24(sp) - } - 80206c2e: 6121 addi sp,sp,64 - c->lock.release(); - 80206c30: ee9fe06f j 80205b18 <_ZN8Spinlock7releaseEv> - } - 80206c34: 7442 ld s0,48(sp) - Drivers::uart_puts("Slab: Corrupted page metadata\n"); - 80206c36: 6aa2 ld s5,8(sp) - } - 80206c38: 70e2 ld ra,56(sp) - 80206c3a: 74a2 ld s1,40(sp) - Drivers::uart_puts("Slab: Corrupted page metadata\n"); - 80206c3c: 0000b517 auipc a0,0xb - 80206c40: 11c50513 addi a0,a0,284 # 80211d58 - } - 80206c44: 6121 addi sp,sp,64 - Drivers::uart_puts("Slab: Corrupted page metadata\n"); - 80206c46: 1240206f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - 80206c4a: 8082 ret - if (slab->used_count == c->obj_count_per_slab - 1) - 80206c4c: 731c ld a5,32(a4) - 80206c4e: 17fd addi a5,a5,-1 - 80206c50: fcf697e3 bne a3,a5,80206c1e <_ZN4Slab5kfreeEPv+0xe6> - slab->next = c->slab_list; - 80206c54: 771c ld a5,40(a4) - 80206c56: e11c sd a5,0(a0) - c->slab_list = slab; - 80206c58: f708 sd a0,40(a4) - 80206c5a: b7d1 j 80206c1e <_ZN4Slab5kfreeEPv+0xe6> - struct SlabHeader **pp = &c->slab_list; - 80206c5c: 02890913 addi s2,s2,40 - 80206c60: 9a4a add s4,s4,s2 - *pp = slab->next; - 80206c62: 611c ld a5,0(a0) - 80206c64: 00fa3023 sd a5,0(s4) - break; - 80206c68: bfbd j 80206be6 <_ZN4Slab5kfreeEPv+0xae> - -0000000080206c6a <_GLOBAL__sub_I_caches>: -struct KmemCache caches[NUM_CACHES]; - 80206c6a: 00017797 auipc a5,0x17 - 80206c6e: fb678793 addi a5,a5,-74 # 8021dc20 - 80206c72: 00017697 auipc a3,0x17 - 80206c76: 16e68693 addi a3,a3,366 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206c7a: 0000b717 auipc a4,0xb - 80206c7e: b0e70713 addi a4,a4,-1266 # 80211788 - 80206c82: 0007a023 sw zero,0(a5) - 80206c86: e798 sd a4,8(a5) - 80206c88: 0007b823 sd zero,16(a5) - 80206c8c: 03878793 addi a5,a5,56 - 80206c90: fed799e3 bne a5,a3,80206c82 <_GLOBAL__sub_I_caches+0x18> - 80206c94: 8082 ret - -0000000080206c96 <_ZN3PMM10pa_to_pageEy>: - // Protective lock - Spinlock pmm_lock; - - struct Page *pa_to_page(uint64 pa) - { - if (pa < KERNBASE || pa >= PHYSTOP) - 80206c96: 800007b7 lui a5,0x80000 - 80206c9a: 97aa add a5,a5,a0 - 80206c9c: 08000737 lui a4,0x8000 - 80206ca0: 02e7f163 bgeu a5,a4,80206cc2 <_ZN3PMM10pa_to_pageEy+0x2c> - return nullptr; - uint64 pfn = (pa - KERNBASE) >> PGSHIFT; - if (pfn >= total_pages) - 80206ca4: 00017717 auipc a4,0x17 - 80206ca8: 13c70713 addi a4,a4,316 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206cac: 6314 ld a3,0(a4) - uint64 pfn = (pa - KERNBASE) >> PGSHIFT; - 80206cae: 83b1 srli a5,a5,0xc - if (pfn >= total_pages) - 80206cb0: 00d7f963 bgeu a5,a3,80206cc2 <_ZN3PMM10pa_to_pageEy+0x2c> - return nullptr; - return &mem_map[pfn]; - 80206cb4: 6708 ld a0,8(a4) - 80206cb6: 00179713 slli a4,a5,0x1 - 80206cba: 97ba add a5,a5,a4 - 80206cbc: 078e slli a5,a5,0x3 - 80206cbe: 953e add a0,a0,a5 - 80206cc0: 8082 ret - return nullptr; - 80206cc2: 4501 li a0,0 - } - 80206cc4: 8082 ret - -0000000080206cc6 <_ZN3PMM10page_to_paEP4Page>: - - uint64 page_to_pa(struct Page *page) - { - uint64 pfn = page - mem_map; - 80206cc6: faaab7b7 lui a5,0xfaaab - 80206cca: aab78793 addi a5,a5,-1365 # fffffffffaaaaaab - 80206cce: 07b2 slli a5,a5,0xc - 80206cd0: aab78793 addi a5,a5,-1365 - 80206cd4: 07b2 slli a5,a5,0xc - 80206cd6: 00017717 auipc a4,0x17 - 80206cda: 11273703 ld a4,274(a4) # 8021dde8 <_ZN3PMM7mem_mapE> - 80206cde: aab78793 addi a5,a5,-1365 - 80206ce2: 8d19 sub a0,a0,a4 - 80206ce4: 07b2 slli a5,a5,0xc - 80206ce6: aab78793 addi a5,a5,-1365 - 80206cea: 850d srai a0,a0,0x3 - 80206cec: 02f50533 mul a0,a0,a5 - return KERNBASE + (pfn << PGSHIFT); - 80206cf0: 4785 li a5,1 - 80206cf2: 07fe slli a5,a5,0x1f - 80206cf4: 0532 slli a0,a0,0xc - } - 80206cf6: 953e add a0,a0,a5 - 80206cf8: 8082 ret - -0000000080206cfa <_ZN3PMM8list_addEP4Pagei>: - - void list_add(struct Page *page, int order) - { - page->order = order; - page->flags = 0; // Mark as available - page->next = free_area[order]; - 80206cfa: 00017797 auipc a5,0x17 - 80206cfe: 0e678793 addi a5,a5,230 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206d02: 00359713 slli a4,a1,0x3 - page->order = order; - 80206d06: 00b500a3 sb a1,1(a0) - page->flags = 0; // Mark as available - 80206d0a: 00050023 sb zero,0(a0) - page->next = free_area[order]; - 80206d0e: 00e786b3 add a3,a5,a4 - 80206d12: 6a90 ld a2,16(a3) - page->prev = nullptr; - 80206d14: 00053823 sd zero,16(a0) - page->next = free_area[order]; - 80206d18: e510 sd a2,8(a0) - - if (free_area[order]) - 80206d1a: 6a94 ld a3,16(a3) - 80206d1c: c291 beqz a3,80206d20 <_ZN3PMM8list_addEP4Pagei+0x26> - { - free_area[order]->prev = page; - 80206d1e: ea88 sd a0,16(a3) - } - free_area[order] = page; - 80206d20: 97ba add a5,a5,a4 - 80206d22: eb88 sd a0,16(a5) - } - 80206d24: 8082 ret - -0000000080206d26 <_ZN3PMM8list_delEP4Pagei>: - - void list_del(struct Page* page, int order) - { - if (page->prev) - 80206d26: 691c ld a5,16(a0) - { - page->prev->next = page->next; - 80206d28: 6518 ld a4,8(a0) - if (page->prev) - 80206d2a: cb99 beqz a5,80206d40 <_ZN3PMM8list_delEP4Pagei+0x1a> - page->prev->next = page->next; - 80206d2c: e798 sd a4,8(a5) - } - else - { - free_area[order] = page->next; - } - if (page->next) - 80206d2e: 651c ld a5,8(a0) - 80206d30: c399 beqz a5,80206d36 <_ZN3PMM8list_delEP4Pagei+0x10> - { - page->next->prev = page->prev; - 80206d32: 6918 ld a4,16(a0) - 80206d34: eb98 sd a4,16(a5) - } - page->next = nullptr; - 80206d36: 00053423 sd zero,8(a0) - page->prev = nullptr; - 80206d3a: 00053823 sd zero,16(a0) - } - 80206d3e: 8082 ret - free_area[order] = page->next; - 80206d40: 058e slli a1,a1,0x3 - 80206d42: 00017797 auipc a5,0x17 - 80206d46: 09e78793 addi a5,a5,158 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206d4a: 97ae add a5,a5,a1 - 80206d4c: eb98 sd a4,16(a5) - 80206d4e: b7c5 j 80206d2e <_ZN3PMM8list_delEP4Pagei+0x8> - -0000000080206d50 <_ZN3PMM11alloc_pagesEi>: - - } - - void *alloc_pages(int order) - { - if (order < 0 || order >= MAX_ORDER) - 80206d50: 47a9 li a5,10 - 80206d52: 10a7e963 bltu a5,a0,80206e64 <_ZN3PMM11alloc_pagesEi+0x114> - { - 80206d56: 1101 addi sp,sp,-32 - 80206d58: e426 sd s1,8(sp) - 80206d5a: 84aa mv s1,a0 - return nullptr; - - pmm_lock.acquire(); - 80206d5c: 00017517 auipc a0,0x17 - 80206d60: 0ec50513 addi a0,a0,236 # 8021de48 <_ZN3PMM8pmm_lockE> - { - 80206d64: ec06 sd ra,24(sp) - 80206d66: e822 sd s0,16(sp) - pmm_lock.acquire(); - 80206d68: e19fe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - int current_order = order; - while (current_order < MAX_ORDER) - 80206d6c: 00017697 auipc a3,0x17 - 80206d70: 08468693 addi a3,a3,132 # 8021ddf0 <_ZN3PMM9free_areaE> - 80206d74: 00349793 slli a5,s1,0x3 - 80206d78: 97b6 add a5,a5,a3 - int current_order = order; - 80206d7a: 8726 mv a4,s1 - while (current_order < MAX_ORDER) - 80206d7c: 462d li a2,11 - 80206d7e: a021 j 80206d86 <_ZN3PMM11alloc_pagesEi+0x36> - page->refcnt = 1; - - pmm_lock.release(); - return (void *)page_to_pa(page); - } - current_order++; - 80206d80: 2705 addiw a4,a4,1 - while (current_order < MAX_ORDER) - 80206d82: 0ac70f63 beq a4,a2,80206e40 <_ZN3PMM11alloc_pagesEi+0xf0> - if (free_area[current_order]) - 80206d86: 6380 ld s0,0(a5) - while (current_order < MAX_ORDER) - 80206d88: 07a1 addi a5,a5,8 - if (free_area[current_order]) - 80206d8a: d87d beqz s0,80206d80 <_ZN3PMM11alloc_pagesEi+0x30> - if (page->prev) - 80206d8c: 681c ld a5,16(s0) - 80206d8e: e04a sd s2,0(sp) - page->prev->next = page->next; - 80206d90: 6410 ld a2,8(s0) - if (page->prev) - 80206d92: cbf9 beqz a5,80206e68 <_ZN3PMM11alloc_pagesEi+0x118> - page->prev->next = page->next; - 80206d94: e790 sd a2,8(a5) - 80206d96: 00017917 auipc s2,0x17 - 80206d9a: 04a90913 addi s2,s2,74 # 8021dde0 <_ZN3PMM11total_pagesE> - if (page->next) - 80206d9e: 641c ld a5,8(s0) - 80206da0: c399 beqz a5,80206da6 <_ZN3PMM11alloc_pagesEi+0x56> - page->next->prev = page->prev; - 80206da2: 6810 ld a2,16(s0) - 80206da4: eb90 sd a2,16(a5) - page->next = nullptr; - 80206da6: 00371793 slli a5,a4,0x3 - 80206daa: 17e1 addi a5,a5,-8 - 80206dac: 00043423 sd zero,8(s0) - page->prev = nullptr; - 80206db0: 00043823 sd zero,16(s0) - while (current_order > order) - 80206db4: 96be add a3,a3,a5 - struct Page *buddy = page + (1 << current_order); - 80206db6: 4585 li a1,1 - while (current_order > order) - 80206db8: 02e4d963 bge s1,a4,80206dea <_ZN3PMM11alloc_pagesEi+0x9a> - current_order--; - 80206dbc: 377d addiw a4,a4,-1 - struct Page *buddy = page + (1 << current_order); - 80206dbe: 00e5963b sllw a2,a1,a4 - 80206dc2: 00161793 slli a5,a2,0x1 - 80206dc6: 97b2 add a5,a5,a2 - 80206dc8: 078e slli a5,a5,0x3 - 80206dca: 97a2 add a5,a5,s0 - page->order = order; - 80206dcc: 00e780a3 sb a4,1(a5) - page->flags = 0; // Mark as available - 80206dd0: 00078023 sb zero,0(a5) - page->next = free_area[order]; - 80206dd4: 6290 ld a2,0(a3) - page->prev = nullptr; - 80206dd6: 0007b823 sd zero,16(a5) - page->next = free_area[order]; - 80206dda: e790 sd a2,8(a5) - if (free_area[order]) - 80206ddc: 6290 ld a2,0(a3) - 80206dde: c211 beqz a2,80206de2 <_ZN3PMM11alloc_pagesEi+0x92> - free_area[order]->prev = page; - 80206de0: ea1c sd a5,16(a2) - free_area[order] = page; - 80206de2: e29c sd a5,0(a3) - while (current_order > order) - 80206de4: 16e1 addi a3,a3,-8 - 80206de6: fce49be3 bne s1,a4,80206dbc <_ZN3PMM11alloc_pagesEi+0x6c> - page->flags = PG_used; - 80206dea: 4785 li a5,1 - 80206dec: 00f40023 sb a5,0(s0) - page->order = order; // Record the orders that have been assigned - 80206df0: 009400a3 sb s1,1(s0) - page->refcnt = 1; - 80206df4: 00f41123 sh a5,2(s0) - pmm_lock.release(); - 80206df8: 00017517 auipc a0,0x17 - 80206dfc: 05050513 addi a0,a0,80 # 8021de48 <_ZN3PMM8pmm_lockE> - 80206e00: d19fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - uint64 pfn = page - mem_map; - 80206e04: faaab7b7 lui a5,0xfaaab - 80206e08: aab78793 addi a5,a5,-1365 # fffffffffaaaaaab - 80206e0c: 07b2 slli a5,a5,0xc - 80206e0e: 00893503 ld a0,8(s2) - 80206e12: aab78793 addi a5,a5,-1365 - 80206e16: 07b2 slli a5,a5,0xc - 80206e18: aab78793 addi a5,a5,-1365 - 80206e1c: 40a40533 sub a0,s0,a0 - 80206e20: 07b2 slli a5,a5,0xc - 80206e22: aab78793 addi a5,a5,-1365 - 80206e26: 850d srai a0,a0,0x3 - 80206e28: 02f50533 mul a0,a0,a5 - } - pmm_lock.release(); - Drivers::uart_puts("PMM: OOM alloc_pages\n"); - return nullptr; - } - 80206e2c: 60e2 ld ra,24(sp) - 80206e2e: 6442 ld s0,16(sp) - return KERNBASE + (pfn << PGSHIFT); - 80206e30: 4785 li a5,1 - 80206e32: 07fe slli a5,a5,0x1f - return (void *)page_to_pa(page); - 80206e34: 6902 ld s2,0(sp) - } - 80206e36: 64a2 ld s1,8(sp) - 80206e38: 6105 addi sp,sp,32 - return KERNBASE + (pfn << PGSHIFT); - 80206e3a: 0532 slli a0,a0,0xc - 80206e3c: 953e add a0,a0,a5 - } - 80206e3e: 8082 ret - pmm_lock.release(); - 80206e40: 00017517 auipc a0,0x17 - 80206e44: 00850513 addi a0,a0,8 # 8021de48 <_ZN3PMM8pmm_lockE> - 80206e48: cd1fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - Drivers::uart_puts("PMM: OOM alloc_pages\n"); - 80206e4c: 0000b517 auipc a0,0xb - 80206e50: f4c50513 addi a0,a0,-180 # 80211d98 - 80206e54: 717010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - 80206e58: 60e2 ld ra,24(sp) - 80206e5a: 6442 ld s0,16(sp) - 80206e5c: 64a2 ld s1,8(sp) - return nullptr; - 80206e5e: 4501 li a0,0 - } - 80206e60: 6105 addi sp,sp,32 - 80206e62: 8082 ret - return nullptr; - 80206e64: 4501 li a0,0 - } - 80206e66: 8082 ret - free_area[order] = page->next; - 80206e68: 00017917 auipc s2,0x17 - 80206e6c: f7890913 addi s2,s2,-136 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206e70: 00371793 slli a5,a4,0x3 - 80206e74: 97ca add a5,a5,s2 - 80206e76: eb90 sd a2,16(a5) - 80206e78: b71d j 80206d9e <_ZN3PMM11alloc_pagesEi+0x4e> - -0000000080206e7a <_ZN3PMM10free_pagesEPvi>: - - void free_pages(void *pa, int order) - { - if (!pa) - 80206e7a: 14050d63 beqz a0,80206fd4 <_ZN3PMM10free_pagesEPvi+0x15a> - if (pa < KERNBASE || pa >= PHYSTOP) - 80206e7e: 800007b7 lui a5,0x80000 - 80206e82: 953e add a0,a0,a5 - 80206e84: 080007b7 lui a5,0x8000 - 80206e88: 14f57663 bgeu a0,a5,80206fd4 <_ZN3PMM10free_pagesEPvi+0x15a> - { - 80206e8c: 1101 addi sp,sp,-32 - 80206e8e: e04a sd s2,0(sp) - if (pfn >= total_pages) - 80206e90: 00017917 auipc s2,0x17 - 80206e94: f5090913 addi s2,s2,-176 # 8021dde0 <_ZN3PMM11total_pagesE> - 80206e98: 00093783 ld a5,0(s2) - { - 80206e9c: ec06 sd ra,24(sp) - uint64 pfn = (pa - KERNBASE) >> PGSHIFT; - 80206e9e: 8131 srli a0,a0,0xc - if (pfn >= total_pages) - 80206ea0: 10f57563 bgeu a0,a5,80206faa <_ZN3PMM10free_pagesEPvi+0x130> - 80206ea4: e426 sd s1,8(sp) - return &mem_map[pfn]; - 80206ea6: 00151793 slli a5,a0,0x1 - 80206eaa: 00893483 ld s1,8(s2) - 80206eae: 97aa add a5,a5,a0 - 80206eb0: 078e slli a5,a5,0x3 - 80206eb2: e822 sd s0,16(sp) - 80206eb4: 94be add s1,s1,a5 - return; - struct Page *page = pa_to_page((uint64)pa); - if (!page) - 80206eb6: c8e5 beqz s1,80206fa6 <_ZN3PMM10free_pagesEPvi+0x12c> - return; - pmm_lock.acquire(); - 80206eb8: 00017517 auipc a0,0x17 - 80206ebc: f9050513 addi a0,a0,-112 # 8021de48 <_ZN3PMM8pmm_lockE> - 80206ec0: 842e mv s0,a1 - 80206ec2: cbffe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - if (!(page->flags & PG_used)) - 80206ec6: 0004c783 lbu a5,0(s1) - 80206eca: 8b85 andi a5,a5,1 - 80206ecc: c3fd beqz a5,80206fb2 <_ZN3PMM10free_pagesEPvi+0x138> - // Mark as basic status - page->flags = 0; - page->refcnt = 0; - - // try merge - uint64 page_idx = page - mem_map; - 80206ece: faaab7b7 lui a5,0xfaaab - 80206ed2: aab78793 addi a5,a5,-1365 # fffffffffaaaaaab - page->flags = 0; - 80206ed6: 00048023 sb zero,0(s1) - uint64 page_idx = page - mem_map; - 80206eda: 07b2 slli a5,a5,0xc - 80206edc: 00893803 ld a6,8(s2) - 80206ee0: aab78793 addi a5,a5,-1365 - 80206ee4: 07b2 slli a5,a5,0xc - 80206ee6: aab78793 addi a5,a5,-1365 - 80206eea: 41048633 sub a2,s1,a6 - 80206eee: 07b2 slli a5,a5,0xc - 80206ef0: 860d srai a2,a2,0x3 - 80206ef2: aab78793 addi a5,a5,-1365 - page->refcnt = 0; - 80206ef6: 00049123 sh zero,2(s1) - - while (order < MAX_ORDER - 1) - 80206efa: 4725 li a4,9 - uint64 page_idx = page - mem_map; - 80206efc: 02f60633 mul a2,a2,a5 - while (order < MAX_ORDER - 1) - 80206f00: 06874663 blt a4,s0,80206f6c <_ZN3PMM10free_pagesEPvi+0xf2> - 80206f04: 00341793 slli a5,s0,0x3 - 80206f08: 00017597 auipc a1,0x17 - 80206f0c: ee858593 addi a1,a1,-280 # 8021ddf0 <_ZN3PMM9free_areaE> - - // Check if the Buddy can be merged: - // 1. Must be within the memory range - // 2. Must be free (flags == 0) - // 3. Must be at the current order (to prevent merging already split small blocks) - if (buddy_idx >= total_pages || (buddy->flags & PG_used) || (buddy->flags & PG_reserved) || buddy->order != order) - 80206f10: 00093303 ld t1,0(s2) - 80206f14: 95be add a1,a1,a5 - uint64 buddy_idx = page_idx ^ (1 << order); - 80206f16: 4885 li a7,1 - while (order < MAX_ORDER - 1) - 80206f18: 4e29 li t3,10 - 80206f1a: a015 j 80206f3e <_ZN3PMM10free_pagesEPvi+0xc4> - page->prev->next = page->next; - 80206f1c: e688 sd a0,8(a3) - if (page->next) - 80206f1e: 6794 ld a3,8(a5) - 80206f20: c299 beqz a3,80206f26 <_ZN3PMM10free_pagesEPvi+0xac> - page->next->prev = page->prev; - 80206f22: 6b88 ld a0,16(a5) - 80206f24: ea88 sd a0,16(a3) - page->next = nullptr; - 80206f26: 0007b423 sd zero,8(a5) - page->prev = nullptr; - 80206f2a: 0007b823 sd zero,16(a5) - // Remove Buddy from the free list - list_del(buddy, order); - - // Update the current block to the merged block - // The starting address of the merged block is the smaller one between index and buddy_index - if (buddy_idx < page_idx) - 80206f2e: 00c77463 bgeu a4,a2,80206f36 <_ZN3PMM10free_pagesEPvi+0xbc> - { - page = buddy; - page_idx = buddy_idx; - 80206f32: 863a mv a2,a4 - page = buddy; - 80206f34: 84be mv s1,a5 - } - - order++; - 80206f36: 2405 addiw s0,s0,1 - while (order < MAX_ORDER - 1) - 80206f38: 05a1 addi a1,a1,8 - 80206f3a: 03c40963 beq s0,t3,80206f6c <_ZN3PMM10free_pagesEPvi+0xf2> - uint64 buddy_idx = page_idx ^ (1 << order); - 80206f3e: 0088973b sllw a4,a7,s0 - 80206f42: 8f31 xor a4,a4,a2 - struct Page *buddy = &mem_map[buddy_idx]; - 80206f44: 00171793 slli a5,a4,0x1 - 80206f48: 97ba add a5,a5,a4 - 80206f4a: 078e slli a5,a5,0x3 - 80206f4c: 97c2 add a5,a5,a6 - if (buddy_idx >= total_pages || (buddy->flags & PG_used) || (buddy->flags & PG_reserved) || buddy->order != order) - 80206f4e: 00677f63 bgeu a4,t1,80206f6c <_ZN3PMM10free_pagesEPvi+0xf2> - 80206f52: 0007c683 lbu a3,0(a5) - 80206f56: 8a8d andi a3,a3,3 - 80206f58: ea91 bnez a3,80206f6c <_ZN3PMM10free_pagesEPvi+0xf2> - 80206f5a: 0017c683 lbu a3,1(a5) - 80206f5e: 00869763 bne a3,s0,80206f6c <_ZN3PMM10free_pagesEPvi+0xf2> - if (page->prev) - 80206f62: 6b94 ld a3,16(a5) - page->prev->next = page->next; - 80206f64: 6788 ld a0,8(a5) - if (page->prev) - 80206f66: fadd bnez a3,80206f1c <_ZN3PMM10free_pagesEPvi+0xa2> - free_area[order] = page->next; - 80206f68: e188 sd a0,0(a1) - 80206f6a: bf55 j 80206f1e <_ZN3PMM10free_pagesEPvi+0xa4> - page->next = free_area[order]; - 80206f6c: 00341793 slli a5,s0,0x3 - page->order = order; - 80206f70: 008480a3 sb s0,1(s1) - page->flags = 0; // Mark as available - 80206f74: 00048023 sb zero,0(s1) - page->next = free_area[order]; - 80206f78: 00f90733 add a4,s2,a5 - 80206f7c: 6b14 ld a3,16(a4) - page->prev = nullptr; - 80206f7e: 0004b823 sd zero,16(s1) - page->next = free_area[order]; - 80206f82: e494 sd a3,8(s1) - if (free_area[order]) - 80206f84: 6b18 ld a4,16(a4) - 80206f86: c311 beqz a4,80206f8a <_ZN3PMM10free_pagesEPvi+0x110> - free_area[order]->prev = page; - 80206f88: eb04 sd s1,16(a4) - } - - // Insert into the final order linked list - list_add(page, order); - - pmm_lock.release(); - 80206f8a: 6442 ld s0,16(sp) - free_area[order] = page; - 80206f8c: 993e add s2,s2,a5 - 80206f8e: 00993823 sd s1,16(s2) - } - 80206f92: 60e2 ld ra,24(sp) - pmm_lock.release(); - 80206f94: 64a2 ld s1,8(sp) - } - 80206f96: 6902 ld s2,0(sp) - pmm_lock.release(); - 80206f98: 00017517 auipc a0,0x17 - 80206f9c: eb050513 addi a0,a0,-336 # 8021de48 <_ZN3PMM8pmm_lockE> - } - 80206fa0: 6105 addi sp,sp,32 - pmm_lock.release(); - 80206fa2: b77fe06f j 80205b18 <_ZN8Spinlock7releaseEv> - 80206fa6: 6442 ld s0,16(sp) - 80206fa8: 64a2 ld s1,8(sp) - } - 80206faa: 60e2 ld ra,24(sp) - 80206fac: 6902 ld s2,0(sp) - 80206fae: 6105 addi sp,sp,32 - 80206fb0: 8082 ret - Drivers::uart_puts("PMM: Double free warning\n"); - 80206fb2: 0000b517 auipc a0,0xb - 80206fb6: dfe50513 addi a0,a0,-514 # 80211db0 - 80206fba: 5b1010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - pmm_lock.release(); - 80206fbe: 6442 ld s0,16(sp) - 80206fc0: 64a2 ld s1,8(sp) - } - 80206fc2: 60e2 ld ra,24(sp) - 80206fc4: 6902 ld s2,0(sp) - pmm_lock.release(); - 80206fc6: 00017517 auipc a0,0x17 - 80206fca: e8250513 addi a0,a0,-382 # 8021de48 <_ZN3PMM8pmm_lockE> - } - 80206fce: 6105 addi sp,sp,32 - pmm_lock.release(); - 80206fd0: b49fe06f j 80205b18 <_ZN8Spinlock7releaseEv> - 80206fd4: 8082 ret - -0000000080206fd6 <_ZN3PMM4initEv>: - { - 80206fd6: 715d addi sp,sp,-80 - pmm_lock.init("pmm"); - 80206fd8: 0000b597 auipc a1,0xb - 80206fdc: df858593 addi a1,a1,-520 # 80211dd0 - 80206fe0: 00017517 auipc a0,0x17 - 80206fe4: e6850513 addi a0,a0,-408 # 8021de48 <_ZN3PMM8pmm_lockE> - { - 80206fe8: e486 sd ra,72(sp) - 80206fea: e0a2 sd s0,64(sp) - 80206fec: fc26 sd s1,56(sp) - 80206fee: f84a sd s2,48(sp) - 80206ff0: f44e sd s3,40(sp) - 80206ff2: f052 sd s4,32(sp) - 80206ff4: ec56 sd s5,24(sp) - 80206ff6: e85a sd s6,16(sp) - 80206ff8: e45e sd s7,8(sp) - 80206ffa: e062 sd s8,0(sp) - pmm_lock.init("pmm"); - 80206ffc: 9dffe0ef jal 802059da <_ZN8Spinlock4initEPKc> - 80207000: 00017997 auipc s3,0x17 - 80207004: de098993 addi s3,s3,-544 # 8021dde0 <_ZN3PMM11total_pagesE> - total_pages = (PHYSTOP - KERNBASE) / PGSIZE; - 80207008: 67a1 lui a5,0x8 - Drivers::uart_puts(ANSI_GREEN "[PMM] Total RAM size: 128MB\n" ANSI_RESET); - 8020700a: 0000b517 auipc a0,0xb - 8020700e: dce50513 addi a0,a0,-562 # 80211dd8 - total_pages = (PHYSTOP - KERNBASE) / PGSIZE; - 80207012: 00f9b023 sd a5,0(s3) - Drivers::uart_puts(ANSI_GREEN "[PMM] Total RAM size: 128MB\n" ANSI_RESET); - 80207016: 555010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - uint64 mem_map_size = total_pages * sizeof(struct Page); - 8020701a: 0009b783 ld a5,0(s3) - uint64 kern_end_pa = PGROUNDUP((uint64)kernel_end); - 8020701e: 6905 lui s2,0x1 - 80207020: 197d addi s2,s2,-1 # fff <_start-0x801ff001> - 80207022: 0000e497 auipc s1,0xe - 80207026: a864b483 ld s1,-1402(s1) # 80214aa8 <_GLOBAL_OFFSET_TABLE_+0x48> - 8020702a: 7a7d lui s4,0xfffff - 8020702c: 94ca add s1,s1,s2 - uint64 mem_map_size = total_pages * sizeof(struct Page); - 8020702e: 00179413 slli s0,a5,0x1 - uint64 kern_end_pa = PGROUNDUP((uint64)kernel_end); - 80207032: 0144f4b3 and s1,s1,s4 - Drivers::uart_puts(ANSI_GREEN "[PMM] MemMap placed at: " ); - 80207036: 0000b517 auipc a0,0xb - 8020703a: dca50513 addi a0,a0,-566 # 80211e00 - uint64 mem_map_size = total_pages * sizeof(struct Page); - 8020703e: 943e add s0,s0,a5 - mem_map = (struct Page*)kern_end_pa; - 80207040: 0099b423 sd s1,8(s3) - Drivers::uart_puts(ANSI_GREEN "[PMM] MemMap placed at: " ); - 80207044: 527010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex((uint64)mem_map); - 80207048: 0089b503 ld a0,8(s3) - uint64 mem_map_size = total_pages * sizeof(struct Page); - 8020704c: 040e slli s0,s0,0x3 - uint64 free_mem_start = PGROUNDUP(kern_end_pa + mem_map_size); - 8020704e: 944a add s0,s0,s2 - Drivers::print_hex((uint64)mem_map); - 80207050: 683010ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n" ANSI_RESET); - 80207054: 0000b517 auipc a0,0xb - 80207058: dcc50513 addi a0,a0,-564 # 80211e20 - 8020705c: 50f010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(ANSI_GREEN "[PMM] Free memory starts at: "); - 80207060: 0000b517 auipc a0,0xb - 80207064: dc850513 addi a0,a0,-568 # 80211e28 - uint64 free_mem_start = PGROUNDUP(kern_end_pa + mem_map_size); - 80207068: 9426 add s0,s0,s1 - Drivers::uart_puts(ANSI_GREEN "[PMM] Free memory starts at: "); - 8020706a: 501010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - uint64 free_mem_start = PGROUNDUP(kern_end_pa + mem_map_size); - 8020706e: 01447433 and s0,s0,s4 - Drivers::print_hex(free_mem_start); - 80207072: 8522 mv a0,s0 - 80207074: 65f010ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n" ANSI_RESET); - 80207078: 0000b517 auipc a0,0xb - 8020707c: da850513 addi a0,a0,-600 # 80211e20 - 80207080: 4eb010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - if (free_mem_start >= PHYSTOP) - 80207084: 47c5 li a5,17 - 80207086: 07ee slli a5,a5,0x1b - 80207088: 0cf47663 bgeu s0,a5,80207154 <_ZN3PMM4initEv+0x17e> - for (uint64 i = 0; i < total_pages; i++) - 8020708c: 0009b683 ld a3,0(s3) - 80207090: c685 beqz a3,802070b8 <_ZN3PMM4initEv+0xe2> - 80207092: 00169713 slli a4,a3,0x1 - 80207096: 0089b783 ld a5,8(s3) - 8020709a: 9736 add a4,a4,a3 - 8020709c: 070e slli a4,a4,0x3 - 8020709e: 973e add a4,a4,a5 - mem_map[i].flags = PG_reserved; - 802070a0: 4689 li a3,2 - 802070a2: 00d79023 sh a3,0(a5) # 8000 <_start-0x801f8000> - mem_map[i].refcnt = 0; - 802070a6: 00079123 sh zero,2(a5) - mem_map[i].next = nullptr; - 802070aa: 0007b423 sd zero,8(a5) - mem_map[i].prev = nullptr; - 802070ae: 0007b823 sd zero,16(a5) - for (uint64 i = 0; i < total_pages; i++) - 802070b2: 07e1 addi a5,a5,24 - 802070b4: fee797e3 bne a5,a4,802070a2 <_ZN3PMM4initEv+0xcc> - for (int i = 0; i < MAX_ORDER; i++) - 802070b8: 00017797 auipc a5,0x17 - 802070bc: d3878793 addi a5,a5,-712 # 8021ddf0 <_ZN3PMM9free_areaE> - 802070c0: 00017717 auipc a4,0x17 - 802070c4: d8870713 addi a4,a4,-632 # 8021de48 <_ZN3PMM8pmm_lockE> - free_area[i] = nullptr; - 802070c8: 0007b023 sd zero,0(a5) - for (int i = 0; i < MAX_ORDER; i++) - 802070cc: 07a1 addi a5,a5,8 - 802070ce: fef71de3 bne a4,a5,802070c8 <_ZN3PMM4initEv+0xf2> - uint64 dtb_pa_start = PGROUNDDOWN(g_dtb_addr); - 802070d2: 0000e797 auipc a5,0xe - 802070d6: 9fe7b783 ld a5,-1538(a5) # 80214ad0 <_GLOBAL_OFFSET_TABLE_+0x70> - 802070da: 0007bb03 ld s6,0(a5) - uint64 dtb_pa_end = PGROUNDUP(g_dtb_addr + 0x10000); - 802070de: 6a45 lui s4,0x11 - 802070e0: 1a7d addi s4,s4,-1 # 10fff <_start-0x801ef001> - uint64 dtb_pa_start = PGROUNDDOWN(g_dtb_addr); - 802070e2: 77fd lui a5,0xfffff - uint64 dtb_pa_end = PGROUNDUP(g_dtb_addr + 0x10000); - 802070e4: 9a5a add s4,s4,s6 - while (p < PHYSTOP) - 802070e6: 4bc5 li s7,17 - 802070e8: 800004b7 lui s1,0x80000 - uint64 dtb_pa_start = PGROUNDDOWN(g_dtb_addr); - 802070ec: 00fb7b33 and s6,s6,a5 - uint64 dtb_pa_end = PGROUNDUP(g_dtb_addr + 0x10000); - 802070f0: 00fa7a33 and s4,s4,a5 - while (p < PHYSTOP) - 802070f4: 94a2 add s1,s1,s0 - if (pa < KERNBASE || pa >= PHYSTOP) - 802070f6: 08000c37 lui s8,0x8000 - page->flags = PG_used; - 802070fa: 4a85 li s5,1 - while (p < PHYSTOP) - 802070fc: 6905 lui s2,0x1 - 802070fe: 0bee slli s7,s7,0x1b - uint64 pfn = (pa - KERNBASE) >> PGSHIFT; - 80207100: 00c4d713 srli a4,s1,0xc - return &mem_map[pfn]; - 80207104: 00171793 slli a5,a4,0x1 - 80207108: 97ba add a5,a5,a4 - 8020710a: 078e slli a5,a5,0x3 - free_pages((void *)p, 0); // Release page by page, let Buddy merge automatically - 8020710c: 4581 li a1,0 - 8020710e: 8522 mv a0,s0 - if (p >= dtb_pa_start && p < dtb_pa_end) - 80207110: 01646463 bltu s0,s6,80207118 <_ZN3PMM4initEv+0x142> - 80207114: 03446063 bltu s0,s4,80207134 <_ZN3PMM4initEv+0x15e> - if (pa < KERNBASE || pa >= PHYSTOP) - 80207118: 0184fe63 bgeu s1,s8,80207134 <_ZN3PMM4initEv+0x15e> - if (pfn >= total_pages) - 8020711c: 0009b683 ld a3,0(s3) - 80207120: 00d77a63 bgeu a4,a3,80207134 <_ZN3PMM4initEv+0x15e> - return &mem_map[pfn]; - 80207124: 0089b703 ld a4,8(s3) - 80207128: 97ba add a5,a5,a4 - if (page) - 8020712a: c789 beqz a5,80207134 <_ZN3PMM4initEv+0x15e> - page->flags = PG_used; - 8020712c: 01578023 sb s5,0(a5) # fffffffffffff000 - free_pages((void *)p, 0); // Release page by page, let Buddy merge automatically - 80207130: d4bff0ef jal 80206e7a <_ZN3PMM10free_pagesEPvi> - while (p < PHYSTOP) - 80207134: 944a add s0,s0,s2 - 80207136: 94ca add s1,s1,s2 - 80207138: fd7464e3 bltu s0,s7,80207100 <_ZN3PMM4initEv+0x12a> - } - 8020713c: 60a6 ld ra,72(sp) - 8020713e: 6406 ld s0,64(sp) - 80207140: 74e2 ld s1,56(sp) - 80207142: 7942 ld s2,48(sp) - 80207144: 79a2 ld s3,40(sp) - 80207146: 7a02 ld s4,32(sp) - 80207148: 6ae2 ld s5,24(sp) - 8020714a: 6b42 ld s6,16(sp) - 8020714c: 6ba2 ld s7,8(sp) - 8020714e: 6c02 ld s8,0(sp) - 80207150: 6161 addi sp,sp,80 - 80207152: 8082 ret - Drivers::uart_puts(ANSI_RED "[PMM] Error - Kernel too large, no memory left!\n" ANSI_RESET); - 80207154: 0000b517 auipc a0,0xb - 80207158: cfc50513 addi a0,a0,-772 # 80211e50 - 8020715c: 40f010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 80207160: a001 j 80207160 <_ZN3PMM4initEv+0x18a> - -0000000080207162 <_ZN3PMM10alloc_pageEv>: - - void *alloc_page() - { - 80207162: 1141 addi sp,sp,-16 - void *p = alloc_pages(0); - 80207164: 4501 li a0,0 - { - 80207166: e022 sd s0,0(sp) - 80207168: e406 sd ra,8(sp) - void *p = alloc_pages(0); - 8020716a: be7ff0ef jal 80206d50 <_ZN3PMM11alloc_pagesEi> - 8020716e: 842a mv s0,a0 - if (p) - 80207170: c509 beqz a0,8020717a <_ZN3PMM10alloc_pageEv+0x18> - { - memset(p, 0, PGSIZE); - 80207172: 6605 lui a2,0x1 - 80207174: 4581 li a1,0 - 80207176: cb5fd0ef jal 80204e2a <_Z6memsetPvij> - } - return p; - } - 8020717a: 60a2 ld ra,8(sp) - 8020717c: 8522 mv a0,s0 - 8020717e: 6402 ld s0,0(sp) - 80207180: 0141 addi sp,sp,16 - 80207182: 8082 ret - -0000000080207184 <_ZN3PMM9free_pageEPv>: - - void free_page(void *pa) - { - free_pages(pa, 0); - 80207184: 4581 li a1,0 - 80207186: cf5ff06f j 80206e7a <_ZN3PMM10free_pagesEPvi> - -000000008020718a <_ZN3PMM16print_free_listsEv>: - } - - void print_free_lists() - { - 8020718a: 7179 addi sp,sp,-48 - // Debug print the number of free blocks at each level - Drivers::uart_puts("PMM Stats: [ "); - 8020718c: 0000b517 auipc a0,0xb - 80207190: d0450513 addi a0,a0,-764 # 80211e90 - { - 80207194: f022 sd s0,32(sp) - 80207196: ec26 sd s1,24(sp) - 80207198: e84a sd s2,16(sp) - 8020719a: e44e sd s3,8(sp) - 8020719c: e052 sd s4,0(sp) - 8020719e: f406 sd ra,40(sp) - 802071a0: 00017417 auipc s0,0x17 - 802071a4: c5040413 addi s0,s0,-944 # 8021ddf0 <_ZN3PMM9free_areaE> - Drivers::uart_puts("PMM Stats: [ "); - 802071a8: 3c3010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - for (int i = 0; i < MAX_ORDER; i++) - 802071ac: 00017917 auipc s2,0x17 - 802071b0: c9c90913 addi s2,s2,-868 # 8021de48 <_ZN3PMM8pmm_lockE> - count++; - p = p->next; - } - if (count > 0) - { - Drivers::uart_puts("Order"); - 802071b4: 0000b497 auipc s1,0xb - 802071b8: cec48493 addi s1,s1,-788 # 80211ea0 - // Drivers::uart_put_int(i); - Drivers::uart_puts(":"); - 802071bc: 0000ba17 auipc s4,0xb - 802071c0: ceca0a13 addi s4,s4,-788 # 80211ea8 - // Drivers::uart_put_int(count); - Drivers::uart_puts(" "); - 802071c4: 0000b997 auipc s3,0xb - 802071c8: cec98993 addi s3,s3,-788 # 80211eb0 - while (p) - 802071cc: 601c ld a5,0(s0) - Drivers::uart_puts("Order"); - 802071ce: 8526 mv a0,s1 - while (p) - 802071d0: cb89 beqz a5,802071e2 <_ZN3PMM16print_free_listsEv+0x58> - Drivers::uart_puts("Order"); - 802071d2: 399010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(":"); - 802071d6: 8552 mv a0,s4 - 802071d8: 393010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(" "); - 802071dc: 854e mv a0,s3 - 802071de: 38d010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - for (int i = 0; i < MAX_ORDER; i++) - 802071e2: 0421 addi s0,s0,8 - 802071e4: fe8914e3 bne s2,s0,802071cc <_ZN3PMM16print_free_listsEv+0x42> - } - } - Drivers::uart_puts("]\n"); - } - 802071e8: 7402 ld s0,32(sp) - 802071ea: 70a2 ld ra,40(sp) - 802071ec: 64e2 ld s1,24(sp) - 802071ee: 6942 ld s2,16(sp) - 802071f0: 69a2 ld s3,8(sp) - 802071f2: 6a02 ld s4,0(sp) - Drivers::uart_puts("]\n"); - 802071f4: 0000b517 auipc a0,0xb - 802071f8: cc450513 addi a0,a0,-828 # 80211eb8 - } - 802071fc: 6145 addi sp,sp,48 - Drivers::uart_puts("]\n"); - 802071fe: 36d0106f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -0000000080207202 <_GLOBAL__sub_I__ZN3PMM7mem_mapE>: - 80207202: 00017797 auipc a5,0x17 - 80207206: bde78793 addi a5,a5,-1058 # 8021dde0 <_ZN3PMM11total_pagesE> - 8020720a: 0000a717 auipc a4,0xa - 8020720e: 57e70713 addi a4,a4,1406 # 80211788 - 80207212: 0607a423 sw zero,104(a5) - 80207216: fbb8 sd a4,112(a5) - 80207218: 0607bc23 sd zero,120(a5) -} // namespace PMM - 8020721c: 8082 ret - -000000008020721e <_ZN5Timer8get_timeEv>: - Spinlock tickslock; - - uint64 get_time() - { - uint64 time; - asm volatile("rdtime %0" : "=r"(time)); - 8020721e: c0102573 rdtime a0 - return time; - } - 80207222: 8082 ret - -0000000080207224 <_ZN5Timer16set_next_triggerEv>: - asm volatile("rdtime %0" : "=r"(time)); - 80207224: c0102573 rdtime a0 - - void set_next_trigger() - { - SBI::set_timer(get_time() + INTERVAL); - 80207228: 000f47b7 lui a5,0xf4 - 8020722c: 24078793 addi a5,a5,576 # f4240 <_start-0x8010bdc0> - 80207230: 953e add a0,a0,a5 - 80207232: d6dfd06f j 80204f9e <_ZN3SBI9set_timerEy> - -0000000080207236 <_ZN5Timer4initEv>: - } - - void init() - { - 80207236: 1141 addi sp,sp,-16 - 80207238: e406 sd ra,8(sp) - asm volatile("rdtime %0" : "=r"(time)); - 8020723a: c0102573 rdtime a0 - SBI::set_timer(get_time() + INTERVAL); - 8020723e: 000f47b7 lui a5,0xf4 - 80207242: 24078793 addi a5,a5,576 # f4240 <_start-0x8010bdc0> - 80207246: 953e add a0,a0,a5 - 80207248: d57fd0ef jal 80204f9e <_ZN3SBI9set_timerEy> - set_next_trigger(); - - uint64 sie; - asm volatile("csrr %0, sie" : "=r"(sie)); - 8020724c: 104027f3 csrr a5,sie - sie |= (1L << 5); - 80207250: 0207e793 ori a5,a5,32 - asm volatile("csrw sie, %0" : : "r"(sie)); - 80207254: 10479073 csrw sie,a5 - } - 80207258: 60a2 ld ra,8(sp) - 8020725a: 0141 addi sp,sp,16 - 8020725c: 8082 ret - -000000008020725e <_ZN5Timer4tickEv>: - - void tick() - { - 8020725e: 1141 addi sp,sp,-16 - 80207260: e022 sd s0,0(sp) - tickslock.acquire(); - 80207262: 00017417 auipc s0,0x17 - 80207266: bfe40413 addi s0,s0,-1026 # 8021de60 <_ZN5Timer9tickslockE> - 8020726a: 8522 mv a0,s0 - { - 8020726c: e406 sd ra,8(sp) - tickslock.acquire(); - 8020726e: 913fe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - ticks++; - 80207272: 6c1c ld a5,24(s0) - ProcManager::wakeup(&ticks); - 80207274: 00017517 auipc a0,0x17 - 80207278: c0450513 addi a0,a0,-1020 # 8021de78 <_ZN5Timer5ticksE> - ticks++; - 8020727c: 0785 addi a5,a5,1 - 8020727e: ec1c sd a5,24(s0) - ProcManager::wakeup(&ticks); - 80207280: 5cb000ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - tickslock.release(); - 80207284: 8522 mv a0,s0 - 80207286: 893fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - asm volatile("rdtime %0" : "=r"(time)); - 8020728a: c0102573 rdtime a0 - set_next_trigger(); - } - 8020728e: 6402 ld s0,0(sp) - 80207290: 60a2 ld ra,8(sp) - SBI::set_timer(get_time() + INTERVAL); - 80207292: 000f47b7 lui a5,0xf4 - 80207296: 24078793 addi a5,a5,576 # f4240 <_start-0x8010bdc0> - 8020729a: 953e add a0,a0,a5 - } - 8020729c: 0141 addi sp,sp,16 - SBI::set_timer(get_time() + INTERVAL); - 8020729e: d01fd06f j 80204f9e <_ZN3SBI9set_timerEy> - -00000000802072a2 <_ZN5Timer9get_ticksEv>: - - uint64 get_ticks() - { - 802072a2: 1141 addi sp,sp,-16 - 802072a4: e022 sd s0,0(sp) - tickslock.acquire(); - 802072a6: 00017417 auipc s0,0x17 - 802072aa: bba40413 addi s0,s0,-1094 # 8021de60 <_ZN5Timer9tickslockE> - 802072ae: 8522 mv a0,s0 - { - 802072b0: e406 sd ra,8(sp) - tickslock.acquire(); - 802072b2: 8cffe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - uint64 t = ticks; - tickslock.release(); - 802072b6: 8522 mv a0,s0 - uint64 t = ticks; - 802072b8: 6c00 ld s0,24(s0) - tickslock.release(); - 802072ba: 85ffe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return t; - } - 802072be: 60a2 ld ra,8(sp) - 802072c0: 8522 mv a0,s0 - 802072c2: 6402 ld s0,0(sp) - 802072c4: 0141 addi sp,sp,16 - 802072c6: 8082 ret - -00000000802072c8 <_ZN5Timer8get_lockEv>: - - Spinlock *get_lock() - { - return &tickslock; - } - 802072c8: 00017517 auipc a0,0x17 - 802072cc: b9850513 addi a0,a0,-1128 # 8021de60 <_ZN5Timer9tickslockE> - 802072d0: 8082 ret - -00000000802072d2 <_ZN5Timer13get_tick_chanEv>: - - void *get_tick_chan() - { - return &ticks; - } - 802072d2: 00017517 auipc a0,0x17 - 802072d6: ba650513 addi a0,a0,-1114 # 8021de78 <_ZN5Timer5ticksE> - 802072da: 8082 ret - -00000000802072dc <_GLOBAL__sub_I__ZN5Timer5ticksE>: - 802072dc: 00017797 auipc a5,0x17 - 802072e0: b8478793 addi a5,a5,-1148 # 8021de60 <_ZN5Timer9tickslockE> - 802072e4: 0000a717 auipc a4,0xa - 802072e8: 4a470713 addi a4,a4,1188 # 80211788 - 802072ec: 0007a023 sw zero,0(a5) - 802072f0: e798 sd a4,8(a5) - 802072f2: 0007b823 sd zero,16(a5) - 802072f6: 8082 ret - -00000000802072f8 <_ZN4Exec4execEPcPS0_>: -} - -namespace Exec -{ - int exec(char *path, char **argv) - { - 802072f8: df010113 addi sp,sp,-528 - 802072fc: 20113423 sd ra,520(sp) - 80207300: ffa6 sd s1,504(sp) - 80207302: ec2a sd a0,24(sp) - 80207304: e42e sd a1,8(sp) - // Get Inode - Inode *raw_ip = VFS::namei(path); - 80207306: 8abfd0ef jal 80204bb0 <_ZN3VFS5nameiEPKc> - if (!raw_ip) - 8020730a: 2c050563 beqz a0,802075d4 <_ZN4Exec4execEPcPS0_+0x2dc> - return -1; - InodeGuard iguard(raw_ip); - 8020730e: 20813023 sd s0,512(sp) - 80207312: 842a mv s0,a0 - VFS::ilock(ip); - 80207314: f4cfd0ef jal 80204a60 <_ZN3VFS5ilockEP5Inode> - - // Get ELF head - struct elfhdr elf; - if (raw_ip->read((char *)&elf, 0, sizeof(elf), 0) != sizeof(elf)) - 80207318: 601c ld a5,0(s0) - 8020731a: 4701 li a4,0 - 8020731c: 04000693 li a3,64 - 80207320: 6f9c ld a5,24(a5) - 80207322: 4601 li a2,0 - 80207324: 108c addi a1,sp,96 - 80207326: 8522 mv a0,s0 - 80207328: 9782 jalr a5 - 8020732a: 04000793 li a5,64 - return -1; - 8020732e: 54fd li s1,-1 - if (raw_ip->read((char *)&elf, 0, sizeof(elf), 0) != sizeof(elf)) - 80207330: 00f50e63 beq a0,a5,8020734c <_ZN4Exec4execEPcPS0_+0x54> - VFS::iunlockput(ip); // Automatically unlock and release references - 80207334: 8522 mv a0,s0 - 80207336: f84fd0ef jal 80204aba <_ZN3VFS10iunlockputEP5Inode> - } - 8020733a: 20013403 ld s0,512(sp) - VM::uvmfree(oldpagetable, oldsz); - - asm volatile("fence.i"); - - return 0; // iguard unlocks and releases IP upon destruction - } - 8020733e: 20813083 ld ra,520(sp) - 80207342: 8526 mv a0,s1 - 80207344: 74fe ld s1,504(sp) - 80207346: 21010113 addi sp,sp,528 - 8020734a: 8082 ret - if (elf.magic != ELF_MAGIC) - 8020734c: 5706 lw a4,96(sp) - 8020734e: 464c47b7 lui a5,0x464c4 - 80207352: 57f78793 addi a5,a5,1407 # 464c457f <_start-0x39d3ba81> - 80207356: fcf71fe3 bne a4,a5,80207334 <_ZN4Exec4execEPcPS0_+0x3c> - 8020735a: f3d2 sd s4,480(sp) - VmGuard() : pagetable(VM::uvmcreate()) {} - 8020735c: e03fe0ef jal 8020615e <_ZN2VM9uvmcreateEv> - 80207360: 8a2a mv s4,a0 - if (!vm_guard.pagetable) - 80207362: c56d beqz a0,8020744c <_ZN4Exec4execEPcPS0_+0x154> - for (int i = 0; i < elf.phnum; i++) - 80207364: 09815783 lhu a5,152(sp) - 80207368: fbca sd s2,496(sp) - 8020736a: f7ce sd s3,488(sp) - 8020736c: efd6 sd s5,472(sp) - 8020736e: ebda sd s6,464(sp) - 80207370: e7de sd s7,456(sp) - 80207372: e3e2 sd s8,448(sp) - 80207374: 26078263 beqz a5,802075d8 <_ZN4Exec4execEPcPS0_+0x2e0> - uint64 n = PGSIZE - (va + i) % PGSIZE; - 80207378: 6905 lui s2,0x1 - 8020737a: 103c addi a5,sp,40 - 8020737c: ff66 sd s9,440(sp) - 8020737e: fb6a sd s10,432(sp) - 80207380: f76e sd s11,424(sp) - for (int i = 0; i < elf.phnum; i++) - 80207382: 4c01 li s8,0 - VmGuard() : pagetable(VM::uvmcreate()) {} - 80207384: 4481 li s1,0 - for (int i = 0; i < elf.phnum; i++) - 80207386: 4c81 li s9,0 - 80207388: e03e sd a5,0(sp) - uint64 n = PGSIZE - (va + i) % PGSIZE; - 8020738a: fff90b93 addi s7,s2,-1 # fff <_start-0x801ff001> - if (raw_ip->read((char *)&ph, off, sizeof(ph), 0) != sizeof(ph)) - 8020738e: 601c ld a5,0(s0) - 80207390: 660a ld a2,128(sp) - 80207392: 6582 ld a1,0(sp) - 80207394: 6f9c ld a5,24(a5) - 80207396: 4701 li a4,0 - 80207398: 03800693 li a3,56 - 8020739c: 00cc063b addw a2,s8,a2 - 802073a0: 8522 mv a0,s0 - 802073a2: 9782 jalr a5 - 802073a4: 03800793 li a5,56 - 802073a8: 22f51163 bne a0,a5,802075ca <_ZN4Exec4execEPcPS0_+0x2d2> - if (ph.type != ELF_PROG_LOAD) - 802073ac: 57a2 lw a5,40(sp) - 802073ae: 4705 li a4,1 - 802073b0: 0ae79263 bne a5,a4,80207454 <_ZN4Exec4execEPcPS0_+0x15c> - if (ph.memsz < ph.filesz) - 802073b4: 67c6 ld a5,80(sp) - 802073b6: 6726 ld a4,72(sp) - 802073b8: 20e7e963 bltu a5,a4,802075ca <_ZN4Exec4execEPcPS0_+0x2d2> - if (ph.vaddr + ph.memsz < ph.vaddr) - 802073bc: 7662 ld a2,56(sp) - 802073be: 963e add a2,a2,a5 - 802073c0: 20f66563 bltu a2,a5,802075ca <_ZN4Exec4execEPcPS0_+0x2d2> - uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, vm_guard.sz, ph.vaddr + ph.memsz, PTE_W | PTE_X | PTE_R | PTE_U); - 802073c4: 46f9 li a3,30 - 802073c6: 85a6 mv a1,s1 - 802073c8: 8552 mv a0,s4 - 802073ca: e51fe0ef jal 8020621a <_ZN2VM8uvmallocEPyyyi> - 802073ce: e82a sd a0,16(sp) - 802073d0: 4d81 li s11,0 - if (sz1 == 0) - 802073d2: 1e050c63 beqz a0,802075ca <_ZN4Exec4execEPcPS0_+0x2d2> - if (loadseg(vm_guard.pagetable, ph.vaddr, raw_ip, ph.off, ph.filesz) < 0) - 802073d6: 64a6 ld s1,72(sp) - 802073d8: 7ae2 ld s5,56(sp) - 802073da: 7b42 ld s6,48(sp) - for (uint64 i = 0; i < sz; i += PGSIZE) - 802073dc: c8bd beqz s1,80207452 <_ZN4Exec4execEPcPS0_+0x15a> - if (i + n > sz) - 802073de: 017af9b3 and s3,s5,s7 - 802073e2: 413909b3 sub s3,s2,s3 - 802073e6: a805 j 80207416 <_ZN4Exec4execEPcPS0_+0x11e> - uint64 n = PGSIZE - (va + i) % PGSIZE; - 802073e8: 017d7833 and a6,s10,s7 - if (ip->read((char *)(pa + (va + i) % PGSIZE), offset + i, n, 0) != (int)n) - 802073ec: 010685b3 add a1,a3,a6 - n = sz - i; - 802073f0: 41b486b3 sub a3,s1,s11 - if (i + n > sz) - 802073f4: 0114e463 bltu s1,a7,802073fc <_ZN4Exec4execEPcPS0_+0x104> - uint64 n = PGSIZE - (va + i) % PGSIZE; - 802073f8: 410906b3 sub a3,s2,a6 - if (ip->read((char *)(pa + (va + i) % PGSIZE), offset + i, n, 0) != (int)n) - 802073fc: 00043803 ld a6,0(s0) - 80207400: 00068d1b sext.w s10,a3 - 80207404: 86ea mv a3,s10 - 80207406: 01883803 ld a6,24(a6) - for (uint64 i = 0; i < sz; i += PGSIZE) - 8020740a: 9dca add s11,s11,s2 - if (ip->read((char *)(pa + (va + i) % PGSIZE), offset + i, n, 0) != (int)n) - 8020740c: 9802 jalr a6 - 8020740e: 03a51263 bne a0,s10,80207432 <_ZN4Exec4execEPcPS0_+0x13a> - for (uint64 i = 0; i < sz; i += PGSIZE) - 80207412: 049df063 bgeu s11,s1,80207452 <_ZN4Exec4execEPcPS0_+0x15a> - uint64 pa = VM::walkaddr(pagetable, va + i); - 80207416: 01ba8d33 add s10,s5,s11 - 8020741a: 85ea mv a1,s10 - 8020741c: 8552 mv a0,s4 - 8020741e: c96ff0ef jal 802068b4 <_ZN2VM8walkaddrEPyy> - 80207422: 86aa mv a3,a0 - if (ip->read((char *)(pa + (va + i) % PGSIZE), offset + i, n, 0) != (int)n) - 80207424: 4701 li a4,0 - 80207426: 01bb063b addw a2,s6,s11 - 8020742a: 8522 mv a0,s0 - if (i + n > sz) - 8020742c: 01b988b3 add a7,s3,s11 - if (pa == 0) - 80207430: fec5 bnez a3,802073e8 <_ZN4Exec4execEPcPS0_+0xf0> - 80207432: 7cfa ld s9,440(sp) - 80207434: 7d5a ld s10,432(sp) - 80207436: 7dba ld s11,424(sp) - VM::uvmfree(pagetable, sz); - 80207438: 65c2 ld a1,16(sp) - 8020743a: 8552 mv a0,s4 - 8020743c: f03fe0ef jal 8020633e <_ZN2VM7uvmfreeEPyy> - 80207440: 795e ld s2,496(sp) - 80207442: 79be ld s3,488(sp) - 80207444: 6afe ld s5,472(sp) - 80207446: 6b5e ld s6,464(sp) - 80207448: 6bbe ld s7,456(sp) - 8020744a: 6c1e ld s8,448(sp) - 8020744c: 7a1e ld s4,480(sp) - size_t len = 0; - 8020744e: 54fd li s1,-1 - 80207450: b5d5 j 80207334 <_ZN4Exec4execEPcPS0_+0x3c> - vm_guard.sz = sz1; - 80207452: 64c2 ld s1,16(sp) - for (int i = 0; i < elf.phnum; i++) - 80207454: 09815783 lhu a5,152(sp) - 80207458: 2c85 addiw s9,s9,1 - 8020745a: 038c0c13 addi s8,s8,56 # 8000038 <_start-0x781fffc8> - 8020745e: f2fcc8e3 blt s9,a5,8020738e <_ZN4Exec4execEPcPS0_+0x96> - uint64 sz = PGROUNDUP(vm_guard.sz); - 80207462: 6905 lui s2,0x1 - 80207464: 197d addi s2,s2,-1 # fff <_start-0x801ff001> - 80207466: 9926 add s2,s2,s1 - 80207468: 77fd lui a5,0xfffff - 8020746a: 7cfa ld s9,440(sp) - 8020746c: 7d5a ld s10,432(sp) - 8020746e: 7dba ld s11,424(sp) - 80207470: 00f97933 and s2,s2,a5 - uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, sz, sz + stack_total_pages * PGSIZE, PTE_W | PTE_R | PTE_U); - 80207474: 6645 lui a2,0x11 - 80207476: 964a add a2,a2,s2 - 80207478: 46d9 li a3,22 - 8020747a: 85ca mv a1,s2 - 8020747c: 8552 mv a0,s4 - 8020747e: d9dfe0ef jal 8020621a <_ZN2VM8uvmallocEPyyyi> - 80207482: e82a sd a0,16(sp) - 80207484: 8aaa mv s5,a0 - if (sz1 == 0) - 80207486: 8b2a mv s6,a0 - 80207488: c941 beqz a0,80207518 <_ZN4Exec4execEPcPS0_+0x220> - VM::uvmunmap(vm_guard.pagetable, sz, 1, 0); // protected pagetable - 8020748a: 8552 mv a0,s4 - 8020748c: 4681 li a3,0 - 8020748e: 4605 li a2,1 - 80207490: 85ca mv a1,s2 - 80207492: ea1fe0ef jal 80206332 <_ZN2VM8uvmunmapEPyyyi> - for (; argv[argc]; argc++) - 80207496: 67a2 ld a5,8(sp) - uint64 stackbase = sp - stack_data_pages * PGSIZE; - 80207498: 79c1 lui s3,0xffff0 - 8020749a: 99d6 add s3,s3,s5 - for (; argv[argc]; argc++) - 8020749c: 6388 ld a0,0(a5) - 8020749e: 14050163 beqz a0,802075e0 <_ZN4Exec4execEPcPS0_+0x2e8> - 802074a2: 1104 addi s1,sp,160 - 802074a4: 19810a93 addi s5,sp,408 - uint64 argc = 0; - 802074a8: 4901 li s2,0 - 802074aa: a019 j 802074b0 <_ZN4Exec4execEPcPS0_+0x1b8> - if (argc >= 31) - 802074ac: f89a86e3 beq s5,s1,80207438 <_ZN4Exec4execEPcPS0_+0x140> - sp -= strlen(argv[argc]) + 1; - 802074b0: a3dfd0ef jal 80204eec <_Z6strlenPKc> - 802074b4: 0015079b addiw a5,a0,1 - 802074b8: 40fb07b3 sub a5,s6,a5 - sp -= sp % 16; - 802074bc: ff07fb13 andi s6,a5,-16 - if (sp < stackbase) - 802074c0: f73b6ce3 bltu s6,s3,80207438 <_ZN4Exec4execEPcPS0_+0x140> - if (VM::copyout(vm_guard.pagetable, sp, argv[argc], strlen(argv[argc]) + 1) < 0) - 802074c4: 6c22 ld s8,8(sp) - 802074c6: 000c3b83 ld s7,0(s8) - 802074ca: 855e mv a0,s7 - 802074cc: a21fd0ef jal 80204eec <_Z6strlenPKc> - 802074d0: 0015069b addiw a3,a0,1 - 802074d4: 865e mv a2,s7 - 802074d6: 85da mv a1,s6 - 802074d8: 8552 mv a0,s4 - 802074da: 9c8ff0ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - for (; argv[argc]; argc++) - 802074de: 008c0793 addi a5,s8,8 - 802074e2: e43e sd a5,8(sp) - if (VM::copyout(vm_guard.pagetable, sp, argv[argc], strlen(argv[argc]) + 1) < 0) - 802074e4: f4054ae3 bltz a0,80207438 <_ZN4Exec4execEPcPS0_+0x140> - for (; argv[argc]; argc++) - 802074e8: 008c3503 ld a0,8(s8) - ustack[argc] = sp; - 802074ec: 0164b023 sd s6,0(s1) - for (; argv[argc]; argc++) - 802074f0: 0905 addi s2,s2,1 - if (argc >= 31) - 802074f2: 04a1 addi s1,s1,8 - for (; argv[argc]; argc++) - 802074f4: fd45 bnez a0,802074ac <_ZN4Exec4execEPcPS0_+0x1b4> - sp -= (argc + 1) * sizeof(uint64); - 802074f6: 00190693 addi a3,s2,1 - ustack[argc] = 0; - 802074fa: 00391793 slli a5,s2,0x3 - sp -= (argc + 1) * sizeof(uint64); - 802074fe: 068e slli a3,a3,0x3 - ustack[argc] = 0; - 80207500: 18078793 addi a5,a5,384 # fffffffffffff180 - 80207504: 1018 addi a4,sp,32 - 80207506: 97ba add a5,a5,a4 - sp -= (argc + 1) * sizeof(uint64); - 80207508: 40db04b3 sub s1,s6,a3 - ustack[argc] = 0; - 8020750c: f007b023 sd zero,-256(a5) - sp -= sp % 16; - 80207510: 98c1 andi s1,s1,-16 - if (sp < stackbase) - 80207512: 0134f563 bgeu s1,s3,8020751c <_ZN4Exec4execEPcPS0_+0x224> - vm_guard.sz = sz1; - 80207516: 64c2 ld s1,16(sp) - size_t len = 0; - 80207518: e826 sd s1,16(sp) - 8020751a: bf39 j 80207438 <_ZN4Exec4execEPcPS0_+0x140> - if (VM::copyout(vm_guard.pagetable, sp, (char *)ustack, (argc + 1) * sizeof(uint64)) < 0) - 8020751c: 1110 addi a2,sp,160 - 8020751e: 85a6 mv a1,s1 - 80207520: 8552 mv a0,s4 - 80207522: 980ff0ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 80207526: fe0548e3 bltz a0,80207516 <_ZN4Exec4execEPcPS0_+0x21e> - struct Proc *p = myproc(); - 8020752a: d58fe0ef jal 80205a82 <_Z6myprocv> - if (VM::mappages(vm_guard.pagetable, TRAPFRAME, PGSIZE, (uint64)p->tf, PTE_R | PTE_W) < 0) - 8020752e: 7934 ld a3,112(a0) - 80207530: 020005b7 lui a1,0x2000 - 80207534: 15fd addi a1,a1,-1 # 1ffffff <_start-0x7e200001> - struct Proc *p = myproc(); - 80207536: 89aa mv s3,a0 - if (VM::mappages(vm_guard.pagetable, TRAPFRAME, PGSIZE, (uint64)p->tf, PTE_R | PTE_W) < 0) - 80207538: 4719 li a4,6 - 8020753a: 6605 lui a2,0x1 - 8020753c: 05b6 slli a1,a1,0xd - 8020753e: 8552 mv a0,s4 - 80207540: ba7fe0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 80207544: fc0549e3 bltz a0,80207516 <_ZN4Exec4execEPcPS0_+0x21e> - p->tf->a0 = argc; - 80207548: 0709b783 ld a5,112(s3) # ffffffffffff0070 - p->tf->epc = elf.entry; - 8020754c: 7766 ld a4,120(sp) - while (*s) - 8020754e: 66e2 ld a3,24(sp) - uint64 oldsz = p->sz; - 80207550: 0a09b583 ld a1,160(s3) - uint64 *oldpagetable = p->pagetable; - 80207554: 0789b503 ld a0,120(s3) - p->tf->a0 = argc; - 80207558: 0727b823 sd s2,112(a5) - p->tf->a1 = sp; - 8020755c: ffa4 sd s1,120(a5) - p->tf->sp = sp; - 8020755e: fb84 sd s1,48(a5) - p->tf->epc = elf.entry; - 80207560: ef98 sd a4,24(a5) - while (*s) - 80207562: 0006c783 lbu a5,0(a3) - 80207566: c3c1 beqz a5,802075e6 <_ZN4Exec4execEPcPS0_+0x2ee> - if (*s == '/') - 80207568: 02f00713 li a4,47 - last = s + 1; - 8020756c: 6662 ld a2,24(sp) - 8020756e: 0605 addi a2,a2,1 # 1001 <_start-0x801fefff> - 80207570: ec32 sd a2,24(sp) - if (*s == '/') - 80207572: 00e79363 bne a5,a4,80207578 <_ZN4Exec4execEPcPS0_+0x280> - last = s + 1; - 80207576: 86b2 mv a3,a2 - while (*s) - 80207578: 67e2 ld a5,24(sp) - 8020757a: 0007c783 lbu a5,0(a5) - 8020757e: f7fd bnez a5,8020756c <_ZN4Exec4execEPcPS0_+0x274> - while (last[len] && len < sizeof(p->name) - 1) - 80207580: 0006c703 lbu a4,0(a3) - 80207584: c32d beqz a4,802075e6 <_ZN4Exec4execEPcPS0_+0x2ee> - 80207586: 463d li a2,15 - p->name[len] = last[len]; - 80207588: 00f98833 add a6,s3,a5 - len++; - 8020758c: 0785 addi a5,a5,1 - p->name[len] = last[len]; - 8020758e: 08e80823 sb a4,144(a6) - while (last[len] && len < sizeof(p->name) - 1) - 80207592: 00f68733 add a4,a3,a5 - 80207596: 00074703 lbu a4,0(a4) - 8020759a: c319 beqz a4,802075a0 <_ZN4Exec4execEPcPS0_+0x2a8> - 8020759c: fec796e3 bne a5,a2,80207588 <_ZN4Exec4execEPcPS0_+0x290> - p->name[len] = '\0'; - 802075a0: 97ce add a5,a5,s3 - 802075a2: 08078823 sb zero,144(a5) - p->sz = vm_guard.sz; - 802075a6: 67c2 ld a5,16(sp) - p->pagetable = vm_guard.commit(); - 802075a8: 0749bc23 sd s4,120(s3) - p->sz = vm_guard.sz; - 802075ac: 0af9b023 sd a5,160(s3) - VM::uvmfree(oldpagetable, oldsz); - 802075b0: d8ffe0ef jal 8020633e <_ZN2VM7uvmfreeEPyy> - asm volatile("fence.i"); - 802075b4: 0000100f fence.i - return 0; // iguard unlocks and releases IP upon destruction - 802075b8: 4481 li s1,0 - 802075ba: 795e ld s2,496(sp) - 802075bc: 79be ld s3,488(sp) - 802075be: 7a1e ld s4,480(sp) - 802075c0: 6afe ld s5,472(sp) - 802075c2: 6b5e ld s6,464(sp) - 802075c4: 6bbe ld s7,456(sp) - 802075c6: 6c1e ld s8,448(sp) - 802075c8: b3b5 j 80207334 <_ZN4Exec4execEPcPS0_+0x3c> - size_t len = 0; - 802075ca: 7cfa ld s9,440(sp) - 802075cc: 7d5a ld s10,432(sp) - 802075ce: 7dba ld s11,424(sp) - 802075d0: e826 sd s1,16(sp) - if (pagetable) - 802075d2: b59d j 80207438 <_ZN4Exec4execEPcPS0_+0x140> - return -1; - 802075d4: 54fd li s1,-1 - 802075d6: b3a5 j 8020733e <_ZN4Exec4execEPcPS0_+0x46> - for (int i = 0; i < elf.phnum; i++) - 802075d8: 6645 lui a2,0x11 - 802075da: 4901 li s2,0 - VmGuard() : pagetable(VM::uvmcreate()) {} - 802075dc: 4481 li s1,0 - 802075de: bd69 j 80207478 <_ZN4Exec4execEPcPS0_+0x180> - uint64 sp = sz1; - 802075e0: 6b42 ld s6,16(sp) - uint64 argc = 0; - 802075e2: 4901 li s2,0 - 802075e4: bf09 j 802074f6 <_ZN4Exec4execEPcPS0_+0x1fe> - size_t len = 0; - 802075e6: 4781 li a5,0 - 802075e8: bf65 j 802075a0 <_ZN4Exec4execEPcPS0_+0x2a8> - -00000000802075ea <_ZL9allocprocv>: -} - -// ProcManager Implementation - -static Proc *allocproc() -{ - 802075ea: 1101 addi sp,sp,-32 - 802075ec: e426 sd s1,8(sp) - struct Proc *p; - proc_mem_lock.acquire(); - 802075ee: 00017497 auipc s1,0x17 - 802075f2: 89248493 addi s1,s1,-1902 # 8021de80 - 802075f6: 8526 mv a0,s1 -{ - 802075f8: ec06 sd ra,24(sp) - 802075fa: e822 sd s0,16(sp) - proc_mem_lock.acquire(); - 802075fc: d84fe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - p = (struct Proc *)Slab::kmalloc(sizeof(struct Proc)); - 80207600: 17800513 li a0,376 - 80207604: b64ff0ef jal 80206968 <_ZN4Slab7kmallocEy> - - if (!p) - 80207608: 0e050e63 beqz a0,80207704 <_ZL9allocprocv+0x11a> - { - proc_mem_lock.release(); - return 0; - } - - memset(p, 0, sizeof(struct Proc)); - 8020760c: 17800613 li a2,376 - 80207610: 4581 li a1,0 - 80207612: 842a mv s0,a0 - 80207614: 817fd0ef jal 80204e2a <_Z6memsetPvij> - - p->all_next = proc_list_head; - 80207618: 6c9c ld a5,24(s1) - p->all_prev = nullptr; - 8020761a: 16043023 sd zero,352(s0) - p->all_next = proc_list_head; - 8020761e: 14f43c23 sd a5,344(s0) - if (proc_list_head) - 80207622: c399 beqz a5,80207628 <_ZL9allocprocv+0x3e> - proc_list_head->all_prev = p; - 80207624: 1687b023 sd s0,352(a5) - proc_list_head = p; - - - p->state = USED; - p->pid = nextpid++; - 80207628: 0000d717 auipc a4,0xd - 8020762c: 42870713 addi a4,a4,1064 # 80214a50 <_ZL7nextpid> - 80207630: 431c lw a5,0(a4) - p->state = USED; - 80207632: 4605 li a2,1 - proc_list_head = p; - 80207634: ec80 sd s0,24(s1) - p->pid = nextpid++; - 80207636: 0017869b addiw a3,a5,1 - p->state = USED; - 8020763a: 08c42023 sw a2,128(s0) - p->pid = nextpid++; - 8020763e: c314 sw a3,0(a4) - 80207640: 08f42223 sw a5,132(s0) - p->priority = 0; - 80207644: 16042423 sw zero,360(s0) - p->killed = 0; - 80207648: 0a042e23 sw zero,188(s0) - asm volatile("mv %0, tp" : "=r" (x) ); - 8020764c: 8712 mv a4,tp - return &cpus[id]; - 8020764e: 2701 sext.w a4,a4 - 80207650: 00471793 slli a5,a4,0x4 - 80207654: 97ba add a5,a5,a4 - 80207656: 078e slli a5,a5,0x3 - 80207658: 00017717 auipc a4,0x17 - 8020765c: 84870713 addi a4,a4,-1976 # 8021dea0 - 80207660: 97ba add a5,a5,a4 - p->cpu = mycpu(); - 80207662: 16f43823 sd a5,368(s0) - p->cwd = nullptr; - 80207666: 0c043023 sd zero,192(s0) - for (int i = 0; i < NOFILE; i++) - 8020766a: 0c840793 addi a5,s0,200 - 8020766e: 14840713 addi a4,s0,328 - p->ofile[i] = nullptr; - 80207672: 0007b023 sd zero,0(a5) - for (int i = 0; i < NOFILE; i++) - 80207676: 07a1 addi a5,a5,8 - 80207678: fee79de3 bne a5,a4,80207672 <_ZL9allocprocv+0x88> - - if ((p->tf = (struct Trapframe *)PMM::alloc_page()) == 0) - 8020767c: ae7ff0ef jal 80207162 <_ZN3PMM10alloc_pageEv> - 80207680: f828 sd a0,112(s0) - 80207682: cd15 beqz a0,802076be <_ZL9allocprocv+0xd4> - Slab::kfree(p); - proc_mem_lock.release(); - return 0; - } - - if ((p->kstack = PMM::alloc_page()) == 0) - 80207684: adfff0ef jal 80207162 <_ZN3PMM10alloc_pageEv> - 80207688: e448 sd a0,136(s0) - 8020768a: c151 beqz a0,8020770e <_ZL9allocprocv+0x124> - Slab::kfree(p); - - proc_mem_lock.release(); - return 0; - } - memset(p->kstack, 0, PGSIZE); - 8020768c: 6605 lui a2,0x1 - 8020768e: 4581 li a1,0 - 80207690: f9afd0ef jal 80204e2a <_Z6memsetPvij> - - memset(&p->context, 0, sizeof(p->context)); - 80207694: 8522 mv a0,s0 - 80207696: 07000613 li a2,112 - 8020769a: 4581 li a1,0 - 8020769c: f8efd0ef jal 80204e2a <_Z6memsetPvij> - - // Set the context so that the next time this process is scheduled, it starts executing directly from forkret - p->context.ra = (uint64)forkret; - p->context.sp = (uint64)p->kstack + PGSIZE; - 802076a0: 645c ld a5,136(s0) - 802076a2: 6705 lui a4,0x1 - return p; -} - 802076a4: 60e2 ld ra,24(sp) - p->context.sp = (uint64)p->kstack + PGSIZE; - 802076a6: 97ba add a5,a5,a4 - p->context.ra = (uint64)forkret; - 802076a8: 00000717 auipc a4,0x0 - 802076ac: 28c70713 addi a4,a4,652 # 80207934 <_Z7forkretv> - 802076b0: e018 sd a4,0(s0) - p->context.sp = (uint64)p->kstack + PGSIZE; - 802076b2: e41c sd a5,8(s0) -} - 802076b4: 8522 mv a0,s0 - 802076b6: 6442 ld s0,16(sp) - 802076b8: 64a2 ld s1,8(sp) - 802076ba: 6105 addi sp,sp,32 - 802076bc: 8082 ret - if (p->all_next) - 802076be: 15843783 ld a5,344(s0) - p->state = UNUSED; - 802076c2: 08042023 sw zero,128(s0) - if (p->all_next) - 802076c6: c789 beqz a5,802076d0 <_ZL9allocprocv+0xe6> - p->all_next->all_prev = p->all_prev; - 802076c8: 16043703 ld a4,352(s0) - 802076cc: 16e7b023 sd a4,352(a5) - if (p->all_prev) - 802076d0: 16043783 ld a5,352(s0) - 802076d4: c789 beqz a5,802076de <_ZL9allocprocv+0xf4> - p->all_prev->all_next = p->all_next; - 802076d6: 15843703 ld a4,344(s0) - 802076da: 14e7bc23 sd a4,344(a5) - if (p == proc_list_head) - 802076de: 6c9c ld a5,24(s1) - 802076e0: 04878063 beq a5,s0,80207720 <_ZL9allocprocv+0x136> - Slab::kfree(p); - 802076e4: 8522 mv a0,s0 - 802076e6: c52ff0ef jal 80206b38 <_ZN4Slab5kfreeEPv> - proc_mem_lock.release(); - 802076ea: 00016517 auipc a0,0x16 - 802076ee: 79650513 addi a0,a0,1942 # 8021de80 - 802076f2: c26fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return 0; - 802076f6: 4401 li s0,0 -} - 802076f8: 60e2 ld ra,24(sp) - 802076fa: 8522 mv a0,s0 - 802076fc: 6442 ld s0,16(sp) - 802076fe: 64a2 ld s1,8(sp) - 80207700: 6105 addi sp,sp,32 - 80207702: 8082 ret - proc_mem_lock.release(); - 80207704: 8526 mv a0,s1 - 80207706: c12fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return 0; - 8020770a: 4401 li s0,0 - 8020770c: b7f5 j 802076f8 <_ZL9allocprocv+0x10e> - PMM::free_page(p->tf); - 8020770e: 7828 ld a0,112(s0) - 80207710: a75ff0ef jal 80207184 <_ZN3PMM9free_pageEPv> - if (p->all_next) - 80207714: 15843783 ld a5,344(s0) - p->state = UNUSED; - 80207718: 08042023 sw zero,128(s0) - if (p->all_next) - 8020771c: f7d5 bnez a5,802076c8 <_ZL9allocprocv+0xde> - 8020771e: bf4d j 802076d0 <_ZL9allocprocv+0xe6> - proc_list_head = p->all_next; - 80207720: 15843783 ld a5,344(s0) - 80207724: ec9c sd a5,24(s1) - 80207726: bf7d j 802076e4 <_ZL9allocprocv+0xfa> - -0000000080207728 <_ZL8freeprocP4Proc>: - -static void freeproc(struct Proc *p) -{ - 80207728: 1101 addi sp,sp,-32 - 8020772a: e04a sd s2,0(sp) - 8020772c: 892a mv s2,a0 - if (p->tf) - 8020772e: 7928 ld a0,112(a0) -{ - 80207730: ec06 sd ra,24(sp) - 80207732: e822 sd s0,16(sp) - 80207734: e426 sd s1,8(sp) - if (p->tf) - 80207736: c119 beqz a0,8020773c <_ZL8freeprocP4Proc+0x14> - PMM::free_page(p->tf); - 80207738: a4dff0ef jal 80207184 <_ZN3PMM9free_pageEPv> - p->tf = 0; - if (p->kstack) - 8020773c: 08893503 ld a0,136(s2) - p->tf = 0; - 80207740: 06093823 sd zero,112(s2) - if (p->kstack) - 80207744: c119 beqz a0,8020774a <_ZL8freeprocP4Proc+0x22> - PMM::free_page(p->kstack); - 80207746: a3fff0ef jal 80207184 <_ZN3PMM9free_pageEPv> - p->kstack = 0; - if (p->pagetable) - 8020774a: 07893503 ld a0,120(s2) - p->kstack = 0; - 8020774e: 08093423 sd zero,136(s2) - if (p->pagetable) - 80207752: c509 beqz a0,8020775c <_ZL8freeprocP4Proc+0x34> - VM::uvmfree(p->pagetable, p->sz); - 80207754: 0a093583 ld a1,160(s2) - 80207758: be7fe0ef jal 8020633e <_ZN2VM7uvmfreeEPyy> - for (int i = 0; i < NOFILE; i++) - 8020775c: 0c890413 addi s0,s2,200 - 80207760: 14890493 addi s1,s2,328 - { - if (p->ofile[i]) - 80207764: 6008 ld a0,0(s0) - 80207766: c509 beqz a0,80207770 <_ZL8freeprocP4Proc+0x48> - { - FileTable::close(p->ofile[i]); - 80207768: b2dfb0ef jal 80203294 <_ZN9FileTable5closeEP4file> - p->ofile[i] = nullptr; - 8020776c: 00043023 sd zero,0(s0) - for (int i = 0; i < NOFILE; i++) - 80207770: 0421 addi s0,s0,8 - 80207772: fe9419e3 bne s0,s1,80207764 <_ZL8freeprocP4Proc+0x3c> - } - } - if (p->cwd) - 80207776: 0c093503 ld a0,192(s2) - 8020777a: c509 beqz a0,80207784 <_ZL8freeprocP4Proc+0x5c> - { - VFS::iput(p->cwd); - 8020777c: a60fd0ef jal 802049dc <_ZN3VFS4iputEP5Inode> - p->cwd = nullptr; - 80207780: 0c093023 sd zero,192(s2) - } - - if (p->all_prev) - 80207784: 16093703 ld a4,352(s2) - p->all_prev->all_next = p->all_next; - 80207788: 15893783 ld a5,344(s2) - if (p->all_prev) - 8020778c: c305 beqz a4,802077ac <_ZL8freeprocP4Proc+0x84> - p->all_prev->all_next = p->all_next; - 8020778e: 14f73c23 sd a5,344(a4) - else - proc_list_head = p->all_next; - - if (p->all_next) - 80207792: c789 beqz a5,8020779c <_ZL8freeprocP4Proc+0x74> - p->all_next->all_prev = p->all_prev; - 80207794: 16093703 ld a4,352(s2) - 80207798: 16e7b023 sd a4,352(a5) - - Slab::kfree(p); -} - 8020779c: 6442 ld s0,16(sp) - 8020779e: 60e2 ld ra,24(sp) - 802077a0: 64a2 ld s1,8(sp) - Slab::kfree(p); - 802077a2: 854a mv a0,s2 -} - 802077a4: 6902 ld s2,0(sp) - 802077a6: 6105 addi sp,sp,32 - Slab::kfree(p); - 802077a8: b90ff06f j 80206b38 <_ZN4Slab5kfreeEPv> - proc_list_head = p->all_next; - 802077ac: 00016717 auipc a4,0x16 - 802077b0: 6ef73623 sd a5,1772(a4) # 8021de98 - 802077b4: bff9 j 80207792 <_ZL8freeprocP4Proc+0x6a> - -00000000802077b6 <_Z5mycpuv>: - 802077b6: 8712 mv a4,tp - return &cpus[id]; - 802077b8: 2701 sext.w a4,a4 - 802077ba: 00471793 slli a5,a4,0x4 - 802077be: 97ba add a5,a5,a4 - 802077c0: 078e slli a5,a5,0x3 -} - 802077c2: 00016517 auipc a0,0x16 - 802077c6: 6de50513 addi a0,a0,1758 # 8021dea0 - 802077ca: 953e add a0,a0,a5 - 802077cc: 8082 ret - -00000000802077ce <_ZN8RunQueue4initEPKc>: -{ - 802077ce: 1141 addi sp,sp,-16 - 802077d0: e022 sd s0,0(sp) - 802077d2: e406 sd ra,8(sp) - 802077d4: 842a mv s0,a0 - lock.init(name); - 802077d6: a04fe0ef jal 802059da <_ZN8Spinlock4initEPKc> -} - 802077da: 60a2 ld ra,8(sp) - count = 0; - 802077dc: 04043c23 sd zero,88(s0) - heads[i] = nullptr; - 802077e0: 00043c23 sd zero,24(s0) - tails[i] = nullptr; - 802077e4: 02043c23 sd zero,56(s0) - heads[i] = nullptr; - 802077e8: 02043023 sd zero,32(s0) - tails[i] = nullptr; - 802077ec: 04043023 sd zero,64(s0) - heads[i] = nullptr; - 802077f0: 02043423 sd zero,40(s0) - tails[i] = nullptr; - 802077f4: 04043423 sd zero,72(s0) - heads[i] = nullptr; - 802077f8: 02043823 sd zero,48(s0) - tails[i] = nullptr; - 802077fc: 04043823 sd zero,80(s0) -} - 80207800: 6402 ld s0,0(sp) - 80207802: 0141 addi sp,sp,16 - 80207804: 8082 ret - -0000000080207806 <_ZN8RunQueue7enqueueEP4Proc>: - if (p->priority < 0 || p->priority >= N_PRIO) - 80207806: 1685a783 lw a5,360(a1) - 8020780a: 470d li a4,3 - 8020780c: 00f77563 bgeu a4,a5,80207816 <_ZN8RunQueue7enqueueEP4Proc+0x10> - p->priority = PRIO_MIN; - 80207810: 16e5a423 sw a4,360(a1) - 80207814: 478d li a5,3 - p->next = nullptr; - 80207816: 078e slli a5,a5,0x3 - 80207818: 1405b423 sd zero,328(a1) - if (heads[p->priority] == nullptr) - 8020781c: 97aa add a5,a5,a0 - 8020781e: 6f98 ld a4,24(a5) - 80207820: cb09 beqz a4,80207832 <_ZN8RunQueue7enqueueEP4Proc+0x2c> - tails[p->priority]->next = p; - 80207822: 7f98 ld a4,56(a5) - 80207824: 14b73423 sd a1,328(a4) - tails[p->priority] = p; - 80207828: ff8c sd a1,56(a5) - count++; - 8020782a: 6d3c ld a5,88(a0) - 8020782c: 0785 addi a5,a5,1 - 8020782e: ed3c sd a5,88(a0) -} - 80207830: 8082 ret - heads[p->priority] = p; - 80207832: ef8c sd a1,24(a5) - tails[p->priority] = p; - 80207834: ff8c sd a1,56(a5) - count++; - 80207836: 6d3c ld a5,88(a0) - 80207838: 0785 addi a5,a5,1 - 8020783a: ed3c sd a5,88(a0) -} - 8020783c: 8082 ret - -000000008020783e <_ZN8RunQueue7dequeueEv>: -{ - 8020783e: 86aa mv a3,a0 - 80207840: 01850713 addi a4,a0,24 - for (int i = 0; i < N_PRIO; i++) - 80207844: 4781 li a5,0 - 80207846: 4611 li a2,4 - if (heads[i]) - 80207848: 6308 ld a0,0(a4) - for (int i = 0; i < N_PRIO; i++) - 8020784a: 0721 addi a4,a4,8 - if (heads[i]) - 8020784c: e509 bnez a0,80207856 <_ZN8RunQueue7dequeueEv+0x18> - for (int i = 0; i < N_PRIO; i++) - 8020784e: 2785 addiw a5,a5,1 - 80207850: fec79ce3 bne a5,a2,80207848 <_ZN8RunQueue7dequeueEv+0xa> -} - 80207854: 8082 ret - heads[i] = p->next; - 80207856: 14853703 ld a4,328(a0) - 8020785a: 078e slli a5,a5,0x3 - 8020785c: 97b6 add a5,a5,a3 - 8020785e: ef98 sd a4,24(a5) - if (!heads[i]) - 80207860: c719 beqz a4,8020786e <_ZN8RunQueue7dequeueEv+0x30> - count--; - 80207862: 6ebc ld a5,88(a3) - p->next = nullptr; - 80207864: 14053423 sd zero,328(a0) - count--; - 80207868: 17fd addi a5,a5,-1 - 8020786a: eebc sd a5,88(a3) - return p; - 8020786c: 8082 ret - tails[i] = nullptr; - 8020786e: 0207bc23 sd zero,56(a5) - 80207872: bfc5 j 80207862 <_ZN8RunQueue7dequeueEv+0x24> - -0000000080207874 <_ZN8RunQueue5stealEv>: -{ - 80207874: 86aa mv a3,a0 - 80207876: 03050713 addi a4,a0,48 - for (int i = N_PRIO - 1; i >= 0; i--) - 8020787a: 478d li a5,3 - 8020787c: 567d li a2,-1 - if (heads[i]) - 8020787e: 6308 ld a0,0(a4) - for (int i = N_PRIO - 1; i >= 0; i--) - 80207880: 1761 addi a4,a4,-8 - if (heads[i]) - 80207882: e509 bnez a0,8020788c <_ZN8RunQueue5stealEv+0x18> - for (int i = N_PRIO - 1; i >= 0; i--) - 80207884: 37fd addiw a5,a5,-1 - 80207886: fec79ce3 bne a5,a2,8020787e <_ZN8RunQueue5stealEv+0xa> -} - 8020788a: 8082 ret - heads[i] = p->next; - 8020788c: 14853703 ld a4,328(a0) - 80207890: 078e slli a5,a5,0x3 - 80207892: 97b6 add a5,a5,a3 - 80207894: ef98 sd a4,24(a5) - if (!heads[i]) - 80207896: c719 beqz a4,802078a4 <_ZN8RunQueue5stealEv+0x30> - count--; - 80207898: 6ebc ld a5,88(a3) - p->next = nullptr; - 8020789a: 14053423 sd zero,328(a0) - count--; - 8020789e: 17fd addi a5,a5,-1 - 802078a0: eebc sd a5,88(a3) - return p; - 802078a2: 8082 ret - tails[i] = nullptr; - 802078a4: 0207bc23 sd zero,56(a5) - 802078a8: bfc5 j 80207898 <_ZN8RunQueue5stealEv+0x24> - -00000000802078aa <_Z11usertrapretv>: -{ - 802078aa: 1141 addi sp,sp,-16 - 802078ac: e406 sd ra,8(sp) - struct Proc *p = myproc(); - 802078ae: 9d4fe0ef jal 80205a82 <_Z6myprocv> - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 802078b2: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 802078b6: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 802078b8: 10079073 csrw sstatus,a5 - uint64 trampoline_uservec = TRAMPOLINE + (uservec - trampoline); - 802078bc: 040007b7 lui a5,0x4000 - 802078c0: 0000d617 auipc a2,0xd - 802078c4: 1b063603 ld a2,432(a2) # 80214a70 <_GLOBAL_OFFSET_TABLE_+0x10> - 802078c8: 17fd addi a5,a5,-1 # 3ffffff <_start-0x7c200001> - 802078ca: 0000d717 auipc a4,0xd - 802078ce: 1ee73703 ld a4,494(a4) # 80214ab8 <_GLOBAL_OFFSET_TABLE_+0x58> - 802078d2: 8f11 sub a4,a4,a2 - 802078d4: 07b2 slli a5,a5,0xc - 802078d6: 973e add a4,a4,a5 - asm volatile("csrw stvec, %0" : : "r" (x)); - 802078d8: 10571073 csrw stvec,a4 - p->tf->kernel_satp = r_satp(); - 802078dc: 7938 ld a4,112(a0) - asm volatile("csrr %0, satp" : "=r" (x) ); - 802078de: 180025f3 csrr a1,satp - p->tf->kernel_sp = (uint64)p->kstack + PGSIZE; - 802078e2: 6554 ld a3,136(a0) - 802078e4: 6805 lui a6,0x1 - p->tf->kernel_satp = r_satp(); - 802078e6: e30c sd a1,0(a4) - p->tf->kernel_sp = (uint64)p->kstack + PGSIZE; - 802078e8: 96c2 add a3,a3,a6 - 802078ea: e714 sd a3,8(a4) - p->tf->kernel_trap = (uint64)usertrap; - 802078ec: 0000d697 auipc a3,0xd - 802078f0: 1c46b683 ld a3,452(a3) # 80214ab0 <_GLOBAL_OFFSET_TABLE_+0x50> - 802078f4: eb14 sd a3,16(a4) - asm volatile("mv %0, tp" : "=r" (x) ); - 802078f6: 8692 mv a3,tp - p->tf->kernel_hartid = r_tp(); - 802078f8: f314 sd a3,32(a4) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 802078fa: 100026f3 csrr a3,sstatus - x &= ~SSTATUS_SPP; - 802078fe: eff6f693 andi a3,a3,-257 - x |= SSTATUS_SPIE; - 80207902: 0206e693 ori a3,a3,32 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80207906: 10069073 csrw sstatus,a3 - asm volatile("csrw sepc, %0" : : "r" (x)); - 8020790a: 6f18 ld a4,24(a4) - 8020790c: 14171073 csrw sepc,a4 - uint64 satp = MAKE_SATP(p->pagetable); - 80207910: 7d2c ld a1,120(a0) - uint64 fn = TRAMPOLINE + ((uint64)userret - (uint64)trampoline); - 80207912: 0000d717 auipc a4,0xd - 80207916: 17e73703 ld a4,382(a4) # 80214a90 <_GLOBAL_OFFSET_TABLE_+0x30> -} - 8020791a: 60a2 ld ra,8(sp) - uint64 fn = TRAMPOLINE + ((uint64)userret - (uint64)trampoline); - 8020791c: 97ba add a5,a5,a4 - ((void (*)(uint64, uint64))fn)(TRAPFRAME, satp); - 8020791e: 02000537 lui a0,0x2000 - 80207922: 577d li a4,-1 - uint64 satp = MAKE_SATP(p->pagetable); - 80207924: 81b1 srli a1,a1,0xc - ((void (*)(uint64, uint64))fn)(TRAPFRAME, satp); - 80207926: 157d addi a0,a0,-1 # 1ffffff <_start-0x7e200001> - 80207928: 177e slli a4,a4,0x3f - uint64 fn = TRAMPOLINE + ((uint64)userret - (uint64)trampoline); - 8020792a: 8f91 sub a5,a5,a2 - ((void (*)(uint64, uint64))fn)(TRAPFRAME, satp); - 8020792c: 8dd9 or a1,a1,a4 - 8020792e: 0536 slli a0,a0,0xd -} - 80207930: 0141 addi sp,sp,16 - ((void (*)(uint64, uint64))fn)(TRAPFRAME, satp); - 80207932: 8782 jr a5 - -0000000080207934 <_Z7forkretv>: -{ - 80207934: 1141 addi sp,sp,-16 - 80207936: e406 sd ra,8(sp) - asm volatile("mv %0, tp" : "=r" (x) ); - 80207938: 8712 mv a4,tp - c->runqueue->lock.release(); - 8020793a: 2701 sext.w a4,a4 - 8020793c: 00471793 slli a5,a4,0x4 - 80207940: 97ba add a5,a5,a4 - 80207942: 078e slli a5,a5,0x3 - 80207944: 00016717 auipc a4,0x16 - 80207948: 53c70713 addi a4,a4,1340 # 8021de80 - 8020794c: 97ba add a5,a5,a4 - 8020794e: 73c8 ld a0,160(a5) - 80207950: 9c8fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> -} - 80207954: 60a2 ld ra,8(sp) - 80207956: 0141 addi sp,sp,16 - usertrapret(); - 80207958: f53ff06f j 802078aa <_Z11usertrapretv> - -000000008020795c <_Z4forkv>: - -int fork() -{ - 8020795c: 7179 addi sp,sp,-48 - 8020795e: e052 sd s4,0(sp) - 80207960: f406 sd ra,40(sp) - struct Proc *np; - struct Proc *p = myproc(); - 80207962: 920fe0ef jal 80205a82 <_Z6myprocv> - 80207966: 8a2a mv s4,a0 - - if ((np = allocproc()) == 0) - 80207968: c83ff0ef jal 802075ea <_ZL9allocprocv> - 8020796c: 14050c63 beqz a0,80207ac4 <_Z4forkv+0x168> - return -1; - - np->pagetable = VM::uvmcreate(); - 80207970: e84a sd s2,16(sp) - 80207972: 892a mv s2,a0 - 80207974: feafe0ef jal 8020615e <_ZN2VM9uvmcreateEv> - np->sz = p->sz; - 80207978: 0a0a3603 ld a2,160(s4) - np->pagetable = VM::uvmcreate(); - 8020797c: 06a93c23 sd a0,120(s2) - 80207980: 85aa mv a1,a0 - if (VM::uvmcopy(p->pagetable, np->pagetable, p->sz) < 0) - 80207982: 078a3503 ld a0,120(s4) - np->sz = p->sz; - 80207986: 0ac93023 sd a2,160(s2) - if (VM::uvmcopy(p->pagetable, np->pagetable, p->sz) < 0) - 8020798a: a17fe0ef jal 802063a0 <_ZN2VM7uvmcopyEPyS0_y> - 8020798e: 12054163 bltz a0,80207ab0 <_Z4forkv+0x154> - proc_mem_lock.release(); - return -1; - } - - - if (VM::mappages(np->pagetable, TRAPFRAME, PGSIZE, (uint64)np->tf, PTE_R | PTE_W) < 0) - 80207992: 020005b7 lui a1,0x2000 - 80207996: 07093683 ld a3,112(s2) - 8020799a: 07893503 ld a0,120(s2) - 8020799e: 15fd addi a1,a1,-1 # 1ffffff <_start-0x7e200001> - 802079a0: 4719 li a4,6 - 802079a2: 6605 lui a2,0x1 - 802079a4: 05b6 slli a1,a1,0xd - 802079a6: f40fe0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 802079aa: 10054363 bltz a0,80207ab0 <_Z4forkv+0x154> - freeproc(np); - proc_mem_lock.release(); - return -1; - } - - *(np->tf) = *(p->tf); - 802079ae: 07093883 ld a7,112(s2) - 802079b2: 070a3783 ld a5,112(s4) - 802079b6: f022 sd s0,32(sp) - 802079b8: ec26 sd s1,24(sp) - 802079ba: e44e sd s3,8(sp) - 802079bc: 8746 mv a4,a7 - 802079be: 12078813 addi a6,a5,288 - 802079c2: 6388 ld a0,0(a5) - 802079c4: 678c ld a1,8(a5) - 802079c6: 6b90 ld a2,16(a5) - 802079c8: 6f94 ld a3,24(a5) - 802079ca: e308 sd a0,0(a4) - 802079cc: e70c sd a1,8(a4) - 802079ce: eb10 sd a2,16(a4) - 802079d0: ef14 sd a3,24(a4) - 802079d2: 02078793 addi a5,a5,32 - 802079d6: 02070713 addi a4,a4,32 - 802079da: ff0794e3 bne a5,a6,802079c2 <_Z4forkv+0x66> - np->tf->a0 = 0; - 802079de: 0608b823 sd zero,112(a7) - strcpy(np->name, p->name); - 802079e2: 090a0593 addi a1,s4,144 - 802079e6: 09090513 addi a0,s2,144 - 802079ea: ce8fd0ef jal 80204ed2 <_Z6strcpyPcPKc> - np->parent = p; - np->priority = p->priority; - 802079ee: 168a2783 lw a5,360(s4) - 802079f2: 0c8a0413 addi s0,s4,200 - np->parent = p; - 802079f6: 0b493423 sd s4,168(s2) - np->priority = p->priority; - 802079fa: 16f92423 sw a5,360(s2) - - for (int i = 0; i < NOFILE; i++) - 802079fe: 0c890493 addi s1,s2,200 - 80207a02: 148a0993 addi s3,s4,328 - { - if (p->ofile[i]) - 80207a06: 6008 ld a0,0(s0) - 80207a08: c501 beqz a0,80207a10 <_Z4forkv+0xb4> - { - np->ofile[i] = FileTable::dup(p->ofile[i]); - 80207a0a: 849fb0ef jal 80203252 <_ZN9FileTable3dupEP4file> - 80207a0e: e088 sd a0,0(s1) - for (int i = 0; i < NOFILE; i++) - 80207a10: 0421 addi s0,s0,8 - 80207a12: 04a1 addi s1,s1,8 - 80207a14: ff3419e3 bne s0,s3,80207a06 <_Z4forkv+0xaa> - } - } - - if (p->cwd) - 80207a18: 0c0a3503 ld a0,192(s4) - 80207a1c: c509 beqz a0,80207a26 <_Z4forkv+0xca> - { - np->cwd = VFS::idup(p->cwd); - 80207a1e: 814fd0ef jal 80204a32 <_ZN3VFS4idupEP5Inode> - 80207a22: 0ca93023 sd a0,192(s2) - } - - proc_mem_lock.release(); - 80207a26: 00016997 auipc s3,0x16 - 80207a2a: 45a98993 addi s3,s3,1114 # 8021de80 - 80207a2e: 854e mv a0,s3 - 80207a30: 8e8fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - 80207a34: 8a12 mv s4,tp - int id = r_tp(); - 80207a36: 2a01 sext.w s4,s4 - - struct cpu *c = mycpu(); - c->runqueue->lock.acquire(); - 80207a38: 004a1413 slli s0,s4,0x4 - 80207a3c: 014404b3 add s1,s0,s4 - 80207a40: 048e slli s1,s1,0x3 - 80207a42: 94ce add s1,s1,s3 - 80207a44: 70c8 ld a0,160(s1) - 80207a46: 93afe0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (p->priority < 0 || p->priority >= N_PRIO) - 80207a4a: 16892783 lw a5,360(s2) - np->state = RUNNABLE; - 80207a4e: 468d li a3,3 - 80207a50: 08d92023 sw a3,128(s2) - c->runqueue->enqueue(np); - 80207a54: 70d8 ld a4,160(s1) - if (p->priority < 0 || p->priority >= N_PRIO) - 80207a56: 04f6e163 bltu a3,a5,80207a98 <_Z4forkv+0x13c> - p->next = nullptr; - 80207a5a: 078e slli a5,a5,0x3 - 80207a5c: 14093423 sd zero,328(s2) - if (heads[p->priority] == nullptr) - 80207a60: 97ba add a5,a5,a4 - 80207a62: 6f94 ld a3,24(a5) - 80207a64: c2b9 beqz a3,80207aaa <_Z4forkv+0x14e> - tails[p->priority]->next = p; - 80207a66: 7f94 ld a3,56(a5) - 80207a68: 1526b423 sd s2,328(a3) - tails[p->priority] = p; - 80207a6c: 0327bc23 sd s2,56(a5) - c->runqueue->lock.release(); - 80207a70: 9452 add s0,s0,s4 - count++; - 80207a72: 6f3c ld a5,88(a4) - c->runqueue->lock.release(); - 80207a74: 040e slli s0,s0,0x3 - 80207a76: 99a2 add s3,s3,s0 - 80207a78: 0a09b503 ld a0,160(s3) - count++; - 80207a7c: 0785 addi a5,a5,1 - 80207a7e: ef3c sd a5,88(a4) - c->runqueue->lock.release(); - 80207a80: 898fe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - return np->pid; - 80207a84: 08492503 lw a0,132(s2) - 80207a88: 7402 ld s0,32(sp) - 80207a8a: 64e2 ld s1,24(sp) - 80207a8c: 6942 ld s2,16(sp) - 80207a8e: 69a2 ld s3,8(sp) -} - 80207a90: 70a2 ld ra,40(sp) - 80207a92: 6a02 ld s4,0(sp) - 80207a94: 6145 addi sp,sp,48 - 80207a96: 8082 ret - p->priority = PRIO_MIN; - 80207a98: 478d li a5,3 - p->next = nullptr; - 80207a9a: 078e slli a5,a5,0x3 - p->priority = PRIO_MIN; - 80207a9c: 16d92423 sw a3,360(s2) - p->next = nullptr; - 80207aa0: 14093423 sd zero,328(s2) - if (heads[p->priority] == nullptr) - 80207aa4: 97ba add a5,a5,a4 - 80207aa6: 6f94 ld a3,24(a5) - 80207aa8: fedd bnez a3,80207a66 <_Z4forkv+0x10a> - heads[p->priority] = p; - 80207aaa: 0127bc23 sd s2,24(a5) - tails[p->priority] = p; - 80207aae: bf7d j 80207a6c <_Z4forkv+0x110> - freeproc(np); - 80207ab0: 854a mv a0,s2 - 80207ab2: c77ff0ef jal 80207728 <_ZL8freeprocP4Proc> - proc_mem_lock.release(); - 80207ab6: 00016517 auipc a0,0x16 - 80207aba: 3ca50513 addi a0,a0,970 # 8021de80 - 80207abe: 85afe0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - 80207ac2: 6942 ld s2,16(sp) - return -1; - 80207ac4: 557d li a0,-1 - 80207ac6: b7e9 j 80207a90 <_Z4forkv+0x134> - -0000000080207ac8 <_ZN11ProcManager4initEv>: - -namespace ProcManager -{ - - void init() - { - 80207ac8: 7179 addi sp,sp,-48 - proc_mem_lock.init("proc_mem"); - 80207aca: 0000a597 auipc a1,0xa - 80207ace: 3f658593 addi a1,a1,1014 # 80211ec0 - 80207ad2: 00016517 auipc a0,0x16 - 80207ad6: 3ae50513 addi a0,a0,942 # 8021de80 - { - 80207ada: f022 sd s0,32(sp) - 80207adc: ec26 sd s1,24(sp) - 80207ade: e84a sd s2,16(sp) - 80207ae0: e44e sd s3,8(sp) - 80207ae2: f406 sd ra,40(sp) - 80207ae4: 00016417 auipc s0,0x16 - 80207ae8: 7fc40413 addi s0,s0,2044 # 8021e2e0 - proc_mem_lock.init("proc_mem"); - 80207aec: eeffd0ef jal 802059da <_ZN8Spinlock4initEPKc> - - proc_list_head = nullptr; - 80207af0: 00016497 auipc s1,0x16 - 80207af4: 3b048493 addi s1,s1,944 # 8021dea0 - 80207af8: 00016797 auipc a5,0x16 - 80207afc: 3a07b023 sd zero,928(a5) # 8021de98 - - for (int i = 0; i < NCPU; i++) - 80207b00: 00017997 auipc s3,0x17 - 80207b04: ae098993 addi s3,s3,-1312 # 8021e5e0 - lock.init(name); - 80207b08: 0000a917 auipc s2,0xa - 80207b0c: 3c890913 addi s2,s2,968 # 80211ed0 - { - cpus[i].runqueue = &runqueues[i]; - 80207b10: e0c0 sd s0,128(s1) - lock.init(name); - 80207b12: 8522 mv a0,s0 - 80207b14: 85ca mv a1,s2 - 80207b16: ec5fd0ef jal 802059da <_ZN8Spinlock4initEPKc> - for (int i = 0; i < NCPU; i++) - 80207b1a: 06040413 addi s0,s0,96 - count = 0; - 80207b1e: fe043c23 sd zero,-8(s0) - heads[i] = nullptr; - 80207b22: fa043c23 sd zero,-72(s0) - tails[i] = nullptr; - 80207b26: fc043c23 sd zero,-40(s0) - heads[i] = nullptr; - 80207b2a: fc043023 sd zero,-64(s0) - tails[i] = nullptr; - 80207b2e: fe043023 sd zero,-32(s0) - heads[i] = nullptr; - 80207b32: fc043423 sd zero,-56(s0) - tails[i] = nullptr; - 80207b36: fe043423 sd zero,-24(s0) - heads[i] = nullptr; - 80207b3a: fc043823 sd zero,-48(s0) - tails[i] = nullptr; - 80207b3e: fe043823 sd zero,-16(s0) - for (int i = 0; i < NCPU; i++) - 80207b42: 08848493 addi s1,s1,136 - 80207b46: fd3415e3 bne s0,s3,80207b10 <_ZN11ProcManager4initEv+0x48> - cpus[i].runqueue->init("runqueue"); - } - } - 80207b4a: 70a2 ld ra,40(sp) - 80207b4c: 7402 ld s0,32(sp) - 80207b4e: 64e2 ld s1,24(sp) - 80207b50: 6942 ld s2,16(sp) - 80207b52: 69a2 ld s3,8(sp) - 80207b54: 6145 addi sp,sp,48 - 80207b56: 8082 ret - -0000000080207b58 <_ZN11ProcManager9schedulerEv>: - - void scheduler() - { - 80207b58: 715d addi sp,sp,-80 - 80207b5a: e486 sd ra,72(sp) - 80207b5c: e0a2 sd s0,64(sp) - 80207b5e: fc26 sd s1,56(sp) - 80207b60: f84a sd s2,48(sp) - 80207b62: f44e sd s3,40(sp) - 80207b64: f052 sd s4,32(sp) - 80207b66: ec56 sd s5,24(sp) - 80207b68: e85a sd s6,16(sp) - 80207b6a: e45e sd s7,8(sp) - 80207b6c: e062 sd s8,0(sp) - 80207b6e: 8792 mv a5,tp - int id = r_tp(); - 80207b70: 2781 sext.w a5,a5 - struct Proc *p; - struct cpu *c = mycpu(); - c->proc = 0; - 80207b72: 00479b13 slli s6,a5,0x4 - 80207b76: 9b3e add s6,s6,a5 - 80207b78: 0b0e slli s6,s6,0x3 - 80207b7a: 00016b97 auipc s7,0x16 - 80207b7e: 306b8b93 addi s7,s7,774 # 8021de80 - 80207b82: 016b8933 add s2,s7,s6 - Drivers::uart_puts("[Proc] Scheduler started (Per-CPU).\n"); - 80207b86: 0000a517 auipc a0,0xa - 80207b8a: 35a50513 addi a0,a0,858 # 80211ee0 - c->proc = 0; - 80207b8e: 02093023 sd zero,32(s2) - Drivers::uart_puts("[Proc] Scheduler started (Per-CPU).\n"); - 80207b92: 1d8010ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - { - p->state = RUNNING; - c->proc = p; - - c->runqueue->lock.acquire(); - swtch(&c->context, &p->context); - 80207b96: 00016797 auipc a5,0x16 - 80207b9a: 31278793 addi a5,a5,786 # 8021dea8 - 80207b9e: 9b3e add s6,s6,a5 - for (int i = 0; i < N_PRIO; i++) - 80207ba0: 4991 li s3,4 - for (int i = 0; i < NCPU; i++) - 80207ba2: 4a21 li s4,8 - for (int i = N_PRIO - 1; i >= 0; i--) - 80207ba4: 5afd li s5,-1 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80207ba6: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() | SSTATUS_SIE); - 80207baa: 0027e793 ori a5,a5,2 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80207bae: 10079073 csrw sstatus,a5 - c->runqueue->lock.acquire(); - 80207bb2: 0a093503 ld a0,160(s2) - 80207bb6: fcbfd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - p = c->runqueue->dequeue(); - 80207bba: 0a093683 ld a3,160(s2) - for (int i = 0; i < N_PRIO; i++) - 80207bbe: 4781 li a5,0 - 80207bc0: 01868713 addi a4,a3,24 - if (heads[i]) - 80207bc4: 6300 ld s0,0(a4) - for (int i = 0; i < N_PRIO; i++) - 80207bc6: 0721 addi a4,a4,8 - if (heads[i]) - 80207bc8: e041 bnez s0,80207c48 <_ZN11ProcManager9schedulerEv+0xf0> - for (int i = 0; i < N_PRIO; i++) - 80207bca: 2785 addiw a5,a5,1 - 80207bcc: ff379ce3 bne a5,s3,80207bc4 <_ZN11ProcManager9schedulerEv+0x6c> - c->runqueue->lock.release(); - 80207bd0: 8536 mv a0,a3 - 80207bd2: f47fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - for (int i = 0; i < NCPU; i++) - 80207bd6: 00016c17 auipc s8,0x16 - 80207bda: 2cac0c13 addi s8,s8,714 # 8021dea0 - c->runqueue->lock.release(); - 80207bde: 4481 li s1,0 - 80207be0: a809 j 80207bf2 <_ZN11ProcManager9schedulerEv+0x9a> - victim->runqueue->lock.release(); - 80207be2: 8536 mv a0,a3 - 80207be4: f35fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - for (int i = 0; i < NCPU; i++) - 80207be8: 0485 addi s1,s1,1 - 80207bea: 088c0c13 addi s8,s8,136 - 80207bee: fb448ce3 beq s1,s4,80207ba6 <_ZN11ProcManager9schedulerEv+0x4e> - asm volatile("mv %0, tp" : "=r" (x) ); - 80207bf2: 8792 mv a5,tp - if ((uint64)i == r_tp()) - 80207bf4: fe978ae3 beq a5,s1,80207be8 <_ZN11ProcManager9schedulerEv+0x90> - victim->runqueue->lock.acquire(); - 80207bf8: 080c3503 ld a0,128(s8) - 80207bfc: f85fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (victim->runqueue->count > 0) - 80207c00: 080c3683 ld a3,128(s8) - 80207c04: 6eb0 ld a2,88(a3) - 80207c06: de71 beqz a2,80207be2 <_ZN11ProcManager9schedulerEv+0x8a> - if (heads[i]) - 80207c08: 7a80 ld s0,48(a3) - 80207c0a: 03068713 addi a4,a3,48 - for (int i = N_PRIO - 1; i >= 0; i--) - 80207c0e: 478d li a5,3 - 80207c10: 1761 addi a4,a4,-8 - if (heads[i]) - 80207c12: e419 bnez s0,80207c20 <_ZN11ProcManager9schedulerEv+0xc8> - for (int i = N_PRIO - 1; i >= 0; i--) - 80207c14: 37fd addiw a5,a5,-1 - 80207c16: fd5786e3 beq a5,s5,80207be2 <_ZN11ProcManager9schedulerEv+0x8a> - if (heads[i]) - 80207c1a: 6300 ld s0,0(a4) - for (int i = N_PRIO - 1; i >= 0; i--) - 80207c1c: 1761 addi a4,a4,-8 - if (heads[i]) - 80207c1e: d87d beqz s0,80207c14 <_ZN11ProcManager9schedulerEv+0xbc> - heads[i] = p->next; - 80207c20: 14843703 ld a4,328(s0) - 80207c24: 078e slli a5,a5,0x3 - 80207c26: 97b6 add a5,a5,a3 - 80207c28: ef98 sd a4,24(a5) - if (!heads[i]) - 80207c2a: c725 beqz a4,80207c92 <_ZN11ProcManager9schedulerEv+0x13a> - victim->runqueue->lock.release(); - 80207c2c: 2481 sext.w s1,s1 - 80207c2e: 00449793 slli a5,s1,0x4 - 80207c32: 97a6 add a5,a5,s1 - 80207c34: 078e slli a5,a5,0x3 - p->next = nullptr; - 80207c36: 14043423 sd zero,328(s0) - victim->runqueue->lock.release(); - 80207c3a: 97de add a5,a5,s7 - 80207c3c: 73c8 ld a0,160(a5) - count--; - 80207c3e: 167d addi a2,a2,-1 # fff <_start-0x801ff001> - 80207c40: eeb0 sd a2,88(a3) - victim->runqueue->lock.release(); - 80207c42: ed7fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - if (p) - 80207c46: a005 j 80207c66 <_ZN11ProcManager9schedulerEv+0x10e> - heads[i] = p->next; - 80207c48: 14843703 ld a4,328(s0) - 80207c4c: 078e slli a5,a5,0x3 - 80207c4e: 97b6 add a5,a5,a3 - 80207c50: ef98 sd a4,24(a5) - if (!heads[i]) - 80207c52: cf0d beqz a4,80207c8c <_ZN11ProcManager9schedulerEv+0x134> - count--; - 80207c54: 6ebc ld a5,88(a3) - p->next = nullptr; - 80207c56: 14043423 sd zero,328(s0) - c->runqueue->lock.release(); - 80207c5a: 0a093503 ld a0,160(s2) - count--; - 80207c5e: 17fd addi a5,a5,-1 - 80207c60: eebc sd a5,88(a3) - c->runqueue->lock.release(); - 80207c62: eb7fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - c->runqueue->lock.acquire(); - 80207c66: 0a093503 ld a0,160(s2) - p->state = RUNNING; - 80207c6a: 09342023 sw s3,128(s0) - c->proc = p; - 80207c6e: 02893023 sd s0,32(s2) - c->runqueue->lock.acquire(); - 80207c72: f0ffd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - swtch(&c->context, &p->context); - 80207c76: 85a2 mv a1,s0 - 80207c78: 855a mv a0,s6 - 80207c7a: bd2f80ef jal 8020004c - c->runqueue->lock.release(); - 80207c7e: 0a093503 ld a0,160(s2) - 80207c82: e97fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - c->proc = 0; - 80207c86: 02093023 sd zero,32(s2) - 80207c8a: bf31 j 80207ba6 <_ZN11ProcManager9schedulerEv+0x4e> - tails[i] = nullptr; - 80207c8c: 0207bc23 sd zero,56(a5) - 80207c90: b7d1 j 80207c54 <_ZN11ProcManager9schedulerEv+0xfc> - tails[i] = nullptr; - 80207c92: 0207bc23 sd zero,56(a5) - 80207c96: bf59 j 80207c2c <_ZN11ProcManager9schedulerEv+0xd4> - -0000000080207c98 <_ZN11ProcManager5yieldEv>: - } - } - } - - void yield() - { - 80207c98: 7179 addi sp,sp,-48 - 80207c9a: e84a sd s2,16(sp) - 80207c9c: f406 sd ra,40(sp) - 80207c9e: f022 sd s0,32(sp) - 80207ca0: ec26 sd s1,24(sp) - 80207ca2: e44e sd s3,8(sp) - struct Proc *p = myproc(); - 80207ca4: ddffd0ef jal 80205a82 <_Z6myprocv> - 80207ca8: 892a mv s2,a0 - 80207caa: 8492 mv s1,tp - int id = r_tp(); - 80207cac: 2481 sext.w s1,s1 - struct cpu *c = mycpu(); - c->runqueue->lock.acquire(); - 80207cae: 00449413 slli s0,s1,0x4 - 80207cb2: 009407b3 add a5,s0,s1 - 80207cb6: 00016997 auipc s3,0x16 - 80207cba: 1ca98993 addi s3,s3,458 # 8021de80 - 80207cbe: 078e slli a5,a5,0x3 - 80207cc0: 97ce add a5,a5,s3 - 80207cc2: 73c8 ld a0,160(a5) - 80207cc4: ebdfd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (p && p->state == RUNNING) - 80207cc8: 00090763 beqz s2,80207cd6 <_ZN11ProcManager5yieldEv+0x3e> - 80207ccc: 08092703 lw a4,128(s2) - 80207cd0: 4791 li a5,4 - 80207cd2: 00f70f63 beq a4,a5,80207cf0 <_ZN11ProcManager5yieldEv+0x58> - if (p->priority < PRIO_MIN) - p->priority++; - c->runqueue->enqueue(p); - swtch(&p->context, &c->context); - } - c->runqueue->lock.release(); - 80207cd6: 9426 add s0,s0,s1 - 80207cd8: 040e slli s0,s0,0x3 - 80207cda: 008987b3 add a5,s3,s0 - } - 80207cde: 7402 ld s0,32(sp) - 80207ce0: 70a2 ld ra,40(sp) - 80207ce2: 64e2 ld s1,24(sp) - 80207ce4: 6942 ld s2,16(sp) - 80207ce6: 69a2 ld s3,8(sp) - c->runqueue->lock.release(); - 80207ce8: 73c8 ld a0,160(a5) - } - 80207cea: 6145 addi sp,sp,48 - c->runqueue->lock.release(); - 80207cec: e2dfd06f j 80205b18 <_ZN8Spinlock7releaseEv> - if (p->priority < PRIO_MIN) - 80207cf0: 16892703 lw a4,360(s2) - p->state = RUNNABLE; - 80207cf4: 478d li a5,3 - 80207cf6: 08f92023 sw a5,128(s2) - if (p->priority < PRIO_MIN) - 80207cfa: 4789 li a5,2 - 80207cfc: 00e7c563 blt a5,a4,80207d06 <_ZN11ProcManager5yieldEv+0x6e> - p->priority++; - 80207d00: 2705 addiw a4,a4,1 - 80207d02: 16e92423 sw a4,360(s2) - c->runqueue->enqueue(p); - 80207d06: 009407b3 add a5,s0,s1 - 80207d0a: 078e slli a5,a5,0x3 - 80207d0c: 97ce add a5,a5,s3 - if (p->priority < 0 || p->priority >= N_PRIO) - 80207d0e: 460d li a2,3 - c->runqueue->enqueue(p); - 80207d10: 73d4 ld a3,160(a5) - if (p->priority < 0 || p->priority >= N_PRIO) - 80207d12: 00e67563 bgeu a2,a4,80207d1c <_ZN11ProcManager5yieldEv+0x84> - p->priority = PRIO_MIN; - 80207d16: 16c92423 sw a2,360(s2) - 80207d1a: 470d li a4,3 - p->next = nullptr; - 80207d1c: 070e slli a4,a4,0x3 - 80207d1e: 14093423 sd zero,328(s2) - if (heads[p->priority] == nullptr) - 80207d22: 9736 add a4,a4,a3 - 80207d24: 6f1c ld a5,24(a4) - 80207d26: c78d beqz a5,80207d50 <_ZN11ProcManager5yieldEv+0xb8> - tails[p->priority]->next = p; - 80207d28: 7f1c ld a5,56(a4) - 80207d2a: 1527b423 sd s2,328(a5) - tails[p->priority] = p; - 80207d2e: 03273c23 sd s2,56(a4) - count++; - 80207d32: 6eb8 ld a4,88(a3) - swtch(&p->context, &c->context); - 80207d34: 009407b3 add a5,s0,s1 - 80207d38: 078e slli a5,a5,0x3 - count++; - 80207d3a: 0705 addi a4,a4,1 - swtch(&p->context, &c->context); - 80207d3c: 00016597 auipc a1,0x16 - 80207d40: 16c58593 addi a1,a1,364 # 8021dea8 - count++; - 80207d44: eeb8 sd a4,88(a3) - swtch(&p->context, &c->context); - 80207d46: 95be add a1,a1,a5 - 80207d48: 854a mv a0,s2 - 80207d4a: b02f80ef jal 8020004c - 80207d4e: b761 j 80207cd6 <_ZN11ProcManager5yieldEv+0x3e> - heads[p->priority] = p; - 80207d50: 01273c23 sd s2,24(a4) - tails[p->priority] = p; - 80207d54: bfe9 j 80207d2e <_ZN11ProcManager5yieldEv+0x96> - -0000000080207d56 <_ZN11ProcManager9user_initEv>: - - void user_init() - { - 80207d56: 711d addi sp,sp,-96 - 80207d58: ec86 sd ra,88(sp) - struct Proc *p = allocproc(); - 80207d5a: 891ff0ef jal 802075ea <_ZL9allocprocv> - if (!p) - 80207d5e: 10050863 beqz a0,80207e6e <_ZN11ProcManager9user_initEv+0x118> - return; - - initproc = p; - 80207d62: e8a2 sd s0,80(sp) - 80207d64: e0ca sd s2,64(sp) - 80207d66: fc4e sd s3,56(sp) - 80207d68: f852 sd s4,48(sp) - 80207d6a: f456 sd s5,40(sp) - 80207d6c: f05a sd s6,32(sp) - 80207d6e: e466 sd s9,8(sp) - 80207d70: 00016c97 auipc s9,0x16 - 80207d74: 110c8c93 addi s9,s9,272 # 8021de80 - 80207d78: 892a mv s2,a0 - 80207d7a: 76acb023 sd a0,1888(s9) - - p->pagetable = VM::uvmcreate(); - 80207d7e: be0fe0ef jal 8020615e <_ZN2VM9uvmcreateEv> - 80207d82: 06a93c23 sd a0,120(s2) - - uint64 initcode_sz = initcode_end - initcode_start; - 80207d86: 0000da17 auipc s4,0xd - 80207d8a: d52a3a03 ld s4,-686(s4) # 80214ad8 <_GLOBAL_OFFSET_TABLE_+0x78> - Drivers::uart_puts("[Proc] initcode size: "); - 80207d8e: 0000a517 auipc a0,0xa - 80207d92: 17a50513 addi a0,a0,378 # 80211f08 - uint64 initcode_sz = initcode_end - initcode_start; - 80207d96: 0000d997 auipc s3,0xd - 80207d9a: ce29b983 ld s3,-798(s3) # 80214a78 <_GLOBAL_OFFSET_TABLE_+0x18> - Drivers::uart_put_int(initcode_sz); - Drivers::uart_puts(" bytes\n"); - - uint64 code_pages = PGROUNDUP(initcode_sz) / PGSIZE; - 80207d9e: 6b05 lui s6,0x1 - uint64 initcode_sz = initcode_end - initcode_start; - 80207da0: 414989b3 sub s3,s3,s4 - Drivers::uart_puts("[Proc] initcode size: "); - 80207da4: 7c7000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - uint64 code_pages = PGROUNDUP(initcode_sz) / PGSIZE; - 80207da8: 1b7d addi s6,s6,-1 # fff <_start-0x801ff001> - Drivers::uart_put_int(initcode_sz); - 80207daa: 0009851b sext.w a0,s3 - uint64 code_pages = PGROUNDUP(initcode_sz) / PGSIZE; - 80207dae: 9b4e add s6,s6,s3 - Drivers::uart_put_int(initcode_sz); - 80207db0: 018010ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - uint64 code_pages = PGROUNDUP(initcode_sz) / PGSIZE; - 80207db4: 00cb5b13 srli s6,s6,0xc - Drivers::uart_puts(" bytes\n"); - 80207db8: 0000a517 auipc a0,0xa - 80207dbc: 16850513 addi a0,a0,360 # 80211f20 - 80207dc0: 001b0a93 addi s5,s6,1 - 80207dc4: 7a7000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - for (uint64 i = 0; i < code_pages; i++) - 80207dc8: 0ab2 slli s5,s5,0xc - 80207dca: 6405 lui s0,0x1 - 80207dcc: 080b0663 beqz s6,80207e58 <_ZN11ProcManager9user_initEv+0x102> - 80207dd0: e862 sd s8,16(sp) - 80207dd2: 6c05 lui s8,0x1 - 80207dd4: ec5e sd s7,24(sp) - 80207dd6: e4a6 sd s1,72(sp) - 80207dd8: e06a sd s10,0(sp) - Drivers::uart_puts("user_init: out of memory for code\n"); - return; - } - memset(mem, 0, PGSIZE); - - uint64 src_offset = i * PGSIZE; - 80207dda: 7bfd lui s7,0xfffff - 80207ddc: 013c0c3b addw s8,s8,s3 - uint64 copy_len = PGSIZE; - if (src_offset + copy_len > initcode_sz) - { - copy_len = initcode_sz - src_offset; - } - memmove(mem, (void *)(initcode_start + src_offset), copy_len); - 80207de0: 408a0a33 sub s4,s4,s0 - 80207de4: a82d j 80207e1e <_ZN11ProcManager9user_initEv+0xc8> - memset(mem, 0, PGSIZE); - 80207de6: 844fd0ef jal 80204e2a <_Z6memsetPvij> - memmove(mem, (void *)(initcode_start + src_offset), copy_len); - 80207dea: 008a05b3 add a1,s4,s0 - 80207dee: 8526 mv a0,s1 - 80207df0: 6605 lui a2,0x1 - uint64 src_offset = i * PGSIZE; - 80207df2: 01740d33 add s10,s0,s7 - if (src_offset + copy_len > initcode_sz) - 80207df6: 0089f463 bgeu s3,s0,80207dfe <_ZN11ProcManager9user_initEv+0xa8> - 80207dfa: 408c063b subw a2,s8,s0 - memmove(mem, (void *)(initcode_start + src_offset), copy_len); - 80207dfe: 876fd0ef jal 80204e74 <_Z7memmovePvPKvj> - - if (VM::mappages(p->pagetable, i * PGSIZE, PGSIZE, (uint64)mem, PTE_R | PTE_W | PTE_X | PTE_U) < 0) - 80207e02: 07893503 ld a0,120(s2) - 80207e06: 4779 li a4,30 - 80207e08: 86a6 mv a3,s1 - 80207e0a: 6605 lui a2,0x1 - 80207e0c: 85ea mv a1,s10 - 80207e0e: ad8fe0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - for (uint64 i = 0; i < code_pages; i++) - 80207e12: 6785 lui a5,0x1 - 80207e14: 943e add s0,s0,a5 - if (VM::mappages(p->pagetable, i * PGSIZE, PGSIZE, (uint64)mem, PTE_R | PTE_W | PTE_X | PTE_U) < 0) - 80207e16: 04054f63 bltz a0,80207e74 <_ZN11ProcManager9user_initEv+0x11e> - for (uint64 i = 0; i < code_pages; i++) - 80207e1a: 03540b63 beq s0,s5,80207e50 <_ZN11ProcManager9user_initEv+0xfa> - void *mem = PMM::alloc_page(); - 80207e1e: b44ff0ef jal 80207162 <_ZN3PMM10alloc_pageEv> - memset(mem, 0, PGSIZE); - 80207e22: 6605 lui a2,0x1 - 80207e24: 4581 li a1,0 - void *mem = PMM::alloc_page(); - 80207e26: 84aa mv s1,a0 - if (!mem) - 80207e28: fd5d bnez a0,80207de6 <_ZN11ProcManager9user_initEv+0x90> - Drivers::uart_puts("user_init: out of memory for code\n"); - 80207e2a: 0000a517 auipc a0,0xa - 80207e2e: 0fe50513 addi a0,a0,254 # 80211f28 - { - Drivers::uart_puts("user_init: mappages code failed\n"); - 80207e32: 6446 ld s0,80(sp) - 80207e34: 64a6 ld s1,72(sp) - 80207e36: 6906 ld s2,64(sp) - 80207e38: 79e2 ld s3,56(sp) - 80207e3a: 7a42 ld s4,48(sp) - 80207e3c: 7aa2 ld s5,40(sp) - 80207e3e: 7b02 ld s6,32(sp) - 80207e40: 6be2 ld s7,24(sp) - 80207e42: 6c42 ld s8,16(sp) - 80207e44: 6ca2 ld s9,8(sp) - 80207e46: 6d02 ld s10,0(sp) - c->runqueue->enqueue(p); - c->runqueue->lock.release(); - - Drivers::uart_puts("[Proc] user_init success. PID: 1\n"); - asm volatile("fence.i"); - } - 80207e48: 60e6 ld ra,88(sp) - 80207e4a: 6125 addi sp,sp,96 - Drivers::uart_puts("user_init: mappages code failed\n"); - 80207e4c: 71f0006f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - 80207e50: 64a6 ld s1,72(sp) - 80207e52: 6be2 ld s7,24(sp) - 80207e54: 6c42 ld s8,16(sp) - 80207e56: 6d02 ld s10,0(sp) - void *stack = PMM::alloc_page(); - 80207e58: b0aff0ef jal 80207162 <_ZN3PMM10alloc_pageEv> - 80207e5c: 842a mv s0,a0 - if (!stack) - 80207e5e: e105 bnez a0,80207e7e <_ZN11ProcManager9user_initEv+0x128> - 80207e60: 6446 ld s0,80(sp) - 80207e62: 6906 ld s2,64(sp) - 80207e64: 79e2 ld s3,56(sp) - 80207e66: 7a42 ld s4,48(sp) - 80207e68: 7aa2 ld s5,40(sp) - 80207e6a: 7b02 ld s6,32(sp) - 80207e6c: 6ca2 ld s9,8(sp) - } - 80207e6e: 60e6 ld ra,88(sp) - 80207e70: 6125 addi sp,sp,96 - 80207e72: 8082 ret - Drivers::uart_puts("user_init: mappages code failed\n"); - 80207e74: 0000a517 auipc a0,0xa - 80207e78: 0dc50513 addi a0,a0,220 # 80211f50 - 80207e7c: bf5d j 80207e32 <_ZN11ProcManager9user_initEv+0xdc> - memset(stack, 0, PGSIZE); - 80207e7e: 6605 lui a2,0x1 - 80207e80: 4581 li a1,0 - 80207e82: fa9fc0ef jal 80204e2a <_Z6memsetPvij> - uint64 stack_va = (code_pages + 1) * PGSIZE; - 80207e86: 0b05 addi s6,s6,1 - if (VM::mappages(p->pagetable, stack_va, PGSIZE, (uint64)stack, PTE_R | PTE_W | PTE_U) < 0) - 80207e88: 07893503 ld a0,120(s2) - uint64 stack_va = (code_pages + 1) * PGSIZE; - 80207e8c: 0b32 slli s6,s6,0xc - if (VM::mappages(p->pagetable, stack_va, PGSIZE, (uint64)stack, PTE_R | PTE_W | PTE_U) < 0) - 80207e8e: 4759 li a4,22 - 80207e90: 86a2 mv a3,s0 - 80207e92: 6605 lui a2,0x1 - 80207e94: 85da mv a1,s6 - 80207e96: a50fe0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 80207e9a: fc0543e3 bltz a0,80207e60 <_ZN11ProcManager9user_initEv+0x10a> - if (VM::mappages(p->pagetable, TRAPFRAME, PGSIZE, (uint64)p->tf, PTE_R | PTE_W) < 0) - 80207e9e: 020005b7 lui a1,0x2000 - 80207ea2: 07093683 ld a3,112(s2) - 80207ea6: 07893503 ld a0,120(s2) - 80207eaa: 15fd addi a1,a1,-1 # 1ffffff <_start-0x7e200001> - 80207eac: 4719 li a4,6 - 80207eae: 6605 lui a2,0x1 - 80207eb0: 05b6 slli a1,a1,0xd - 80207eb2: a34fe0ef jal 802060e6 <_ZN2VM8mappagesEPyyyyi> - 80207eb6: fa0545e3 bltz a0,80207e60 <_ZN11ProcManager9user_initEv+0x10a> - p->tf->epc = 0; - 80207eba: 07093783 ld a5,112(s2) - p->tf->sp = stack_va + PGSIZE; - 80207ebe: 6705 lui a4,0x1 - 80207ec0: 9b3a add s6,s6,a4 - p->tf->epc = 0; - 80207ec2: 0007bc23 sd zero,24(a5) # 1018 <_start-0x801fefe8> - p->tf->sp = stack_va + PGSIZE; - 80207ec6: 0367b823 sd s6,48(a5) - strcpy(p->name, "initcode"); - 80207eca: 0000a597 auipc a1,0xa - 80207ece: 0ae58593 addi a1,a1,174 # 80211f78 - 80207ed2: 09090513 addi a0,s2,144 - p->sz = stack_va + PGSIZE; - 80207ed6: 0b693023 sd s6,160(s2) - strcpy(p->name, "initcode"); - 80207eda: ff9fc0ef jal 80204ed2 <_Z6strcpyPcPKc> - proc_mem_lock.release(); - 80207ede: 00016517 auipc a0,0x16 - 80207ee2: fa250513 addi a0,a0,-94 # 8021de80 - p->cwd = nullptr; - 80207ee6: 0c093023 sd zero,192(s2) - proc_mem_lock.release(); - 80207eea: c2ffd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - c->runqueue->lock.acquire(); - 80207eee: 0a0cb503 ld a0,160(s9) - 80207ef2: c8ffd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (p->priority < 0 || p->priority >= N_PRIO) - 80207ef6: 16892783 lw a5,360(s2) - p->state = RUNNABLE; - 80207efa: 470d li a4,3 - 80207efc: 08e92023 sw a4,128(s2) - c->runqueue->enqueue(p); - 80207f00: 0a0cb503 ld a0,160(s9) - if (p->priority < 0 || p->priority >= N_PRIO) - 80207f04: 00f77563 bgeu a4,a5,80207f0e <_ZN11ProcManager9user_initEv+0x1b8> - p->priority = PRIO_MIN; - 80207f08: 16e92423 sw a4,360(s2) - 80207f0c: 478d li a5,3 - p->next = nullptr; - 80207f0e: 078e slli a5,a5,0x3 - 80207f10: 14093423 sd zero,328(s2) - if (heads[p->priority] == nullptr) - 80207f14: 97aa add a5,a5,a0 - 80207f16: 6f98 ld a4,24(a5) - 80207f18: c705 beqz a4,80207f40 <_ZN11ProcManager9user_initEv+0x1ea> - tails[p->priority]->next = p; - 80207f1a: 7f98 ld a4,56(a5) - 80207f1c: 15273423 sd s2,328(a4) # 1148 <_start-0x801feeb8> - tails[p->priority] = p; - 80207f20: 0327bc23 sd s2,56(a5) - count++; - 80207f24: 6d3c ld a5,88(a0) - 80207f26: 0785 addi a5,a5,1 - 80207f28: ed3c sd a5,88(a0) - c->runqueue->lock.release(); - 80207f2a: beffd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - Drivers::uart_puts("[Proc] user_init success. PID: 1\n"); - 80207f2e: 0000a517 auipc a0,0xa - 80207f32: 05a50513 addi a0,a0,90 # 80211f88 - 80207f36: 635000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - asm volatile("fence.i"); - 80207f3a: 0000100f fence.i - 80207f3e: b70d j 80207e60 <_ZN11ProcManager9user_initEv+0x10a> - heads[p->priority] = p; - 80207f40: 0127bc23 sd s2,24(a5) - tails[p->priority] = p; - 80207f44: bff1 j 80207f20 <_ZN11ProcManager9user_initEv+0x1ca> - -0000000080207f46 <_ZN11ProcManager5sleepEPvP8Spinlock>: - - void sleep(void *chan, Spinlock *lk) - { - 80207f46: 7139 addi sp,sp,-64 - 80207f48: f822 sd s0,48(sp) - 80207f4a: f426 sd s1,40(sp) - 80207f4c: ec4e sd s3,24(sp) - 80207f4e: fc06 sd ra,56(sp) - 80207f50: f04a sd s2,32(sp) - 80207f52: 89aa mv s3,a0 - 80207f54: 84ae mv s1,a1 - struct Proc *p = myproc(); - 80207f56: b2dfd0ef jal 80205a82 <_Z6myprocv> - 80207f5a: 842a mv s0,a0 - 80207f5c: 8792 mv a5,tp - int id = r_tp(); - 80207f5e: 2781 sext.w a5,a5 - struct cpu *c = mycpu(); - - if (lk && lk != &proc_mem_lock) - 80207f60: ccd9 beqz s1,80207ffe <_ZN11ProcManager5sleepEPvP8Spinlock+0xb8> - lk->release(); - - c->runqueue->lock.acquire(); - p->chan = chan; - p->state = SLEEPING; - swtch(&p->context, &c->context); - 80207f62: 00479913 slli s2,a5,0x4 - 80207f66: 993e add s2,s2,a5 - 80207f68: e852 sd s4,16(sp) - 80207f6a: e456 sd s5,8(sp) - 80207f6c: 090e slli s2,s2,0x3 - 80207f6e: 00016597 auipc a1,0x16 - 80207f72: f3a58593 addi a1,a1,-198 # 8021dea8 - 80207f76: 00016a17 auipc s4,0x16 - 80207f7a: f0aa0a13 addi s4,s4,-246 # 8021de80 - 80207f7e: 00b90ab3 add s5,s2,a1 - if (lk && lk != &proc_mem_lock) - 80207f82: 05448463 beq s1,s4,80207fca <_ZN11ProcManager5sleepEPvP8Spinlock+0x84> - lk->release(); - 80207f86: 8526 mv a0,s1 - 80207f88: b91fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - c->runqueue->lock.acquire(); - 80207f8c: 9a4a add s4,s4,s2 - 80207f8e: 0a0a3503 ld a0,160(s4) - 80207f92: beffd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - p->state = SLEEPING; - 80207f96: 4789 li a5,2 - p->chan = chan; - 80207f98: 0b343823 sd s3,176(s0) # 10b0 <_start-0x801fef50> - p->state = SLEEPING; - 80207f9c: 08f42023 sw a5,128(s0) - swtch(&p->context, &c->context); - 80207fa0: 85d6 mv a1,s5 - 80207fa2: 8522 mv a0,s0 - 80207fa4: 8a8f80ef jal 8020004c - p->chan = 0; - 80207fa8: 0a043823 sd zero,176(s0) - c->runqueue->lock.release(); - 80207fac: 0a0a3503 ld a0,160(s4) - 80207fb0: b69fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - if (lk && lk != &proc_mem_lock) - lk->acquire(); - } - 80207fb4: 7442 ld s0,48(sp) - lk->acquire(); - 80207fb6: 6a42 ld s4,16(sp) - 80207fb8: 6aa2 ld s5,8(sp) - } - 80207fba: 70e2 ld ra,56(sp) - 80207fbc: 7902 ld s2,32(sp) - 80207fbe: 69e2 ld s3,24(sp) - lk->acquire(); - 80207fc0: 8526 mv a0,s1 - } - 80207fc2: 74a2 ld s1,40(sp) - 80207fc4: 6121 addi sp,sp,64 - lk->acquire(); - 80207fc6: bbbfd06f j 80205b80 <_ZN8Spinlock7acquireEv> - c->runqueue->lock.acquire(); - 80207fca: 94ca add s1,s1,s2 - 80207fcc: 70c8 ld a0,160(s1) - 80207fce: bb3fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - p->state = SLEEPING; - 80207fd2: 4789 li a5,2 - p->chan = chan; - 80207fd4: 0b343823 sd s3,176(s0) - swtch(&p->context, &c->context); - 80207fd8: 8522 mv a0,s0 - p->state = SLEEPING; - 80207fda: 08f42023 sw a5,128(s0) - swtch(&p->context, &c->context); - 80207fde: 85d6 mv a1,s5 - 80207fe0: 86cf80ef jal 8020004c - p->chan = 0; - 80207fe4: 0a043823 sd zero,176(s0) - } - 80207fe8: 7442 ld s0,48(sp) - c->runqueue->lock.release(); - 80207fea: 70c8 ld a0,160(s1) - 80207fec: 6a42 ld s4,16(sp) - 80207fee: 6aa2 ld s5,8(sp) - } - 80207ff0: 70e2 ld ra,56(sp) - 80207ff2: 74a2 ld s1,40(sp) - 80207ff4: 7902 ld s2,32(sp) - 80207ff6: 69e2 ld s3,24(sp) - 80207ff8: 6121 addi sp,sp,64 - c->runqueue->lock.release(); - 80207ffa: b1ffd06f j 80205b18 <_ZN8Spinlock7releaseEv> - c->runqueue->lock.acquire(); - 80207ffe: 00479493 slli s1,a5,0x4 - 80208002: 94be add s1,s1,a5 - 80208004: 048e slli s1,s1,0x3 - 80208006: 00016917 auipc s2,0x16 - 8020800a: e7a90913 addi s2,s2,-390 # 8021de80 - 8020800e: 9926 add s2,s2,s1 - 80208010: 0a093503 ld a0,160(s2) - 80208014: b6dfd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - p->state = SLEEPING; - 80208018: 4789 li a5,2 - swtch(&p->context, &c->context); - 8020801a: 00016597 auipc a1,0x16 - 8020801e: e8e58593 addi a1,a1,-370 # 8021dea8 - p->chan = chan; - 80208022: 0b343823 sd s3,176(s0) - swtch(&p->context, &c->context); - 80208026: 8522 mv a0,s0 - p->state = SLEEPING; - 80208028: 08f42023 sw a5,128(s0) - swtch(&p->context, &c->context); - 8020802c: 95a6 add a1,a1,s1 - 8020802e: 81ef80ef jal 8020004c - p->chan = 0; - 80208032: 0a043823 sd zero,176(s0) - } - 80208036: 7442 ld s0,48(sp) - c->runqueue->lock.release(); - 80208038: 0a093503 ld a0,160(s2) - } - 8020803c: 70e2 ld ra,56(sp) - 8020803e: 74a2 ld s1,40(sp) - 80208040: 7902 ld s2,32(sp) - 80208042: 69e2 ld s3,24(sp) - 80208044: 6121 addi sp,sp,64 - c->runqueue->lock.release(); - 80208046: ad3fd06f j 80205b18 <_ZN8Spinlock7releaseEv> - -000000008020804a <_ZN11ProcManager6wakeupEPv>: - - void wakeup(void *chan) - { - 8020804a: 7139 addi sp,sp,-64 - 8020804c: e456 sd s5,8(sp) - for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) - 8020804e: 00016a97 auipc s5,0x16 - 80208052: e32a8a93 addi s5,s5,-462 # 8021de80 - { - 80208056: f822 sd s0,48(sp) - for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) - 80208058: 018ab403 ld s0,24(s5) - { - 8020805c: fc06 sd ra,56(sp) - for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) - 8020805e: c841 beqz s0,802080ee <_ZN11ProcManager6wakeupEPv+0xa4> - 80208060: f426 sd s1,40(sp) - 80208062: f04a sd s2,32(sp) - 80208064: 4489 li s1,2 - 80208066: 892a mv s2,a0 - 80208068: a021 j 80208070 <_ZN11ProcManager6wakeupEPv+0x26> - 8020806a: 15843403 ld s0,344(s0) - 8020806e: cc35 beqz s0,802080ea <_ZN11ProcManager6wakeupEPv+0xa0> - { - if (p->state == SLEEPING && p->chan == chan) - 80208070: 08042783 lw a5,128(s0) - 80208074: fe979be3 bne a5,s1,8020806a <_ZN11ProcManager6wakeupEPv+0x20> - 80208078: 785c ld a5,176(s0) - 8020807a: ff2798e3 bne a5,s2,8020806a <_ZN11ProcManager6wakeupEPv+0x20> - 8020807e: ec4e sd s3,24(sp) - 80208080: e852 sd s4,16(sp) - 80208082: e05a sd s6,0(sp) - 80208084: 8b12 mv s6,tp - int id = r_tp(); - 80208086: 2b01 sext.w s6,s6 - { - struct cpu *c = mycpu(); - c->runqueue->lock.acquire(); - 80208088: 004b1993 slli s3,s6,0x4 - 8020808c: 01698a33 add s4,s3,s6 - 80208090: 0a0e slli s4,s4,0x3 - 80208092: 9a56 add s4,s4,s5 - 80208094: 0a0a3503 ld a0,160(s4) - 80208098: ae9fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (p->priority < 0 || p->priority >= N_PRIO) - 8020809c: 16842783 lw a5,360(s0) - p->state = RUNNABLE; - 802080a0: 468d li a3,3 - 802080a2: 08d42023 sw a3,128(s0) - c->runqueue->enqueue(p); - 802080a6: 0a0a3703 ld a4,160(s4) - if (p->priority < 0 || p->priority >= N_PRIO) - 802080aa: 00f6f563 bgeu a3,a5,802080b4 <_ZN11ProcManager6wakeupEPv+0x6a> - p->priority = PRIO_MIN; - 802080ae: 16d42423 sw a3,360(s0) - 802080b2: 478d li a5,3 - 802080b4: 078e slli a5,a5,0x3 - p->next = nullptr; - 802080b6: 14043423 sd zero,328(s0) - if (heads[p->priority] == nullptr) - 802080ba: 97ba add a5,a5,a4 - 802080bc: 6f94 ld a3,24(a5) - 802080be: ce8d beqz a3,802080f8 <_ZN11ProcManager6wakeupEPv+0xae> - tails[p->priority]->next = p; - 802080c0: 7f94 ld a3,56(a5) - 802080c2: 1486b423 sd s0,328(a3) - tails[p->priority] = p; - 802080c6: ff80 sd s0,56(a5) - c->runqueue->lock.release(); - 802080c8: 016987b3 add a5,s3,s6 - count++; - 802080cc: 6f34 ld a3,88(a4) - c->runqueue->lock.release(); - 802080ce: 078e slli a5,a5,0x3 - 802080d0: 97d6 add a5,a5,s5 - 802080d2: 73c8 ld a0,160(a5) - count++; - 802080d4: 00168793 addi a5,a3,1 - 802080d8: ef3c sd a5,88(a4) - c->runqueue->lock.release(); - 802080da: a3ffd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) - 802080de: 15843403 ld s0,344(s0) - c->runqueue->lock.release(); - 802080e2: 69e2 ld s3,24(sp) - 802080e4: 6a42 ld s4,16(sp) - 802080e6: 6b02 ld s6,0(sp) - for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) - 802080e8: f441 bnez s0,80208070 <_ZN11ProcManager6wakeupEPv+0x26> - 802080ea: 74a2 ld s1,40(sp) - 802080ec: 7902 ld s2,32(sp) - } - } - } - 802080ee: 70e2 ld ra,56(sp) - 802080f0: 7442 ld s0,48(sp) - 802080f2: 6aa2 ld s5,8(sp) - 802080f4: 6121 addi sp,sp,64 - 802080f6: 8082 ret - heads[p->priority] = p; - 802080f8: ef80 sd s0,24(a5) - tails[p->priority] = p; - 802080fa: b7f1 j 802080c6 <_ZN11ProcManager6wakeupEPv+0x7c> - -00000000802080fc <_ZN11ProcManager4exitEi>: - - void exit(int status) - { - 802080fc: 7179 addi sp,sp,-48 - 802080fe: e84a sd s2,16(sp) - 80208100: e44e sd s3,8(sp) - 80208102: f406 sd ra,40(sp) - 80208104: 89aa mv s3,a0 - struct Proc *p = myproc(); - if (p == initproc) - 80208106: 00016917 auipc s2,0x16 - 8020810a: d7a90913 addi s2,s2,-646 # 8021de80 - struct Proc *p = myproc(); - 8020810e: 975fd0ef jal 80205a82 <_Z6myprocv> - if (p == initproc) - 80208112: 76093783 ld a5,1888(s2) - 80208116: 04a78d63 beq a5,a0,80208170 <_ZN11ProcManager4exitEi+0x74> - while (1) - ; - - wakeup(p->parent); - 8020811a: ec26 sd s1,24(sp) - 8020811c: 84aa mv s1,a0 - 8020811e: 7548 ld a0,168(a0) - 80208120: f022 sd s0,32(sp) - 80208122: f29ff0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - - proc_mem_lock.acquire(); - 80208126: 854a mv a0,s2 - 80208128: a59fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - for (struct Proc *pp = proc_list_head; pp != nullptr; pp = pp->all_next) - 8020812c: 01893403 ld s0,24(s2) - 80208130: e829 bnez s0,80208182 <_ZN11ProcManager4exitEi+0x86> - pp->parent = initproc; - wakeup(initproc); - } - } - - proc_mem_lock.release(); - 80208132: 00016517 auipc a0,0x16 - 80208136: d4e50513 addi a0,a0,-690 # 8021de80 - 8020813a: 9dffd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - p->xstate = status; - 8020813e: 0b34ac23 sw s3,184(s1) - 80208142: 8412 mv s0,tp - - struct cpu *c = mycpu(); - c->runqueue->lock.acquire(); - 80208144: 08800793 li a5,136 - int id = r_tp(); - 80208148: 2401 sext.w s0,s0 - c->runqueue->lock.acquire(); - 8020814a: 02f40433 mul s0,s0,a5 - 8020814e: 9922 add s2,s2,s0 - 80208150: 0a093503 ld a0,160(s2) - 80208154: a2dfd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - p->state = ZOMBIE; - 80208158: 4795 li a5,5 - swtch(&p->context, &c->context); - 8020815a: 00016597 auipc a1,0x16 - 8020815e: d4e58593 addi a1,a1,-690 # 8021dea8 - p->state = ZOMBIE; - 80208162: 08f4a023 sw a5,128(s1) - swtch(&p->context, &c->context); - 80208166: 95a2 add a1,a1,s0 - 80208168: 8526 mv a0,s1 - 8020816a: ee3f70ef jal 8020004c - while (1) - 8020816e: a001 j 8020816e <_ZN11ProcManager4exitEi+0x72> - while (1) - 80208170: a001 j 80208170 <_ZN11ProcManager4exitEi+0x74> - pp->parent = initproc; - 80208172: 76093503 ld a0,1888(s2) - 80208176: f448 sd a0,168(s0) - wakeup(initproc); - 80208178: ed3ff0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - for (struct Proc *pp = proc_list_head; pp != nullptr; pp = pp->all_next) - 8020817c: 15843403 ld s0,344(s0) - 80208180: d84d beqz s0,80208132 <_ZN11ProcManager4exitEi+0x36> - if (pp->parent == p) - 80208182: 745c ld a5,168(s0) - 80208184: fe979ce3 bne a5,s1,8020817c <_ZN11ProcManager4exitEi+0x80> - 80208188: b7ed j 80208172 <_ZN11ProcManager4exitEi+0x76> - -000000008020818a <_ZN11ProcManager4waitEy>: - ; - } - - int wait(uint64 addr) - { - 8020818a: 715d addi sp,sp,-80 - 8020818c: e486 sd ra,72(sp) - 8020818e: e0a2 sd s0,64(sp) - 80208190: fc26 sd s1,56(sp) - 80208192: f84a sd s2,48(sp) - 80208194: f44e sd s3,40(sp) - 80208196: f052 sd s4,32(sp) - 80208198: ec56 sd s5,24(sp) - 8020819a: e45e sd s7,8(sp) - 8020819c: 00016917 auipc s2,0x16 - 802081a0: ce490913 addi s2,s2,-796 # 8021de80 - 802081a4: e85a sd s6,16(sp) - 802081a6: e062 sd s8,0(sp) - 802081a8: 89aa mv s3,a0 - - struct Proc *np; - int havekids, pid; - struct Proc *p = myproc(); - 802081aa: 8d9fd0ef jal 80205a82 <_Z6myprocv> - 802081ae: 84aa mv s1,a0 - for (;;) - { - havekids = 0; - proc_mem_lock.acquire(); - 802081b0: 854a mv a0,s2 - 802081b2: 9cffd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - for (np = proc_list_head; np != nullptr; np = np->all_next) - 802081b6: 01893403 ld s0,24(s2) - { - if (np->parent == p) - { - havekids = 1; - if (np->state == ZOMBIE) - 802081ba: 4b95 li s7,5 - p->state = SLEEPING; - 802081bc: 4a89 li s5,2 - swtch(&p->context, &c->context); - 802081be: 00016a17 auipc s4,0x16 - 802081c2: ce2a0a13 addi s4,s4,-798 # 8021dea0 - for (np = proc_list_head; np != nullptr; np = np->all_next) - 802081c6: 0e040963 beqz s0,802082b8 <_ZN11ProcManager4waitEy+0x12e> - havekids = 0; - 802081ca: 4b01 li s6,0 - 802081cc: a021 j 802081d4 <_ZN11ProcManager4waitEy+0x4a> - for (np = proc_list_head; np != nullptr; np = np->all_next) - 802081ce: 15843403 ld s0,344(s0) - 802081d2: c441 beqz s0,8020825a <_ZN11ProcManager4waitEy+0xd0> - if (np->parent == p) - 802081d4: 745c ld a5,168(s0) - 802081d6: fe979ce3 bne a5,s1,802081ce <_ZN11ProcManager4waitEy+0x44> - if (np->state == ZOMBIE) - 802081da: 08042783 lw a5,128(s0) - havekids = 1; - 802081de: 4b05 li s6,1 - if (np->state == ZOMBIE) - 802081e0: ff7797e3 bne a5,s7,802081ce <_ZN11ProcManager4waitEy+0x44> - { - - struct cpu *child_cpu = np->cpu; - 802081e4: 17043903 ld s2,368(s0) - if (child_cpu) - 802081e8: 02090663 beqz s2,80208214 <_ZN11ProcManager4waitEy+0x8a> - { - proc_mem_lock.release(); - 802081ec: 00016517 auipc a0,0x16 - 802081f0: c9450513 addi a0,a0,-876 # 8021de80 - 802081f4: 925fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - child_cpu->runqueue->lock.acquire(); - 802081f8: 08093503 ld a0,128(s2) - 802081fc: 985fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - child_cpu->runqueue->lock.release(); - 80208200: 08093503 ld a0,128(s2) - 80208204: 915fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - proc_mem_lock.acquire(); - 80208208: 00016517 auipc a0,0x16 - 8020820c: c7850513 addi a0,a0,-904 # 8021de80 - 80208210: 971fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - } - - pid = np->pid; - 80208214: 08442903 lw s2,132(s0) - if (addr != 0 && VM::copyout(p->pagetable, addr, (char *)&np->xstate, sizeof(np->xstate)) < 0) - 80208218: 00098b63 beqz s3,8020822e <_ZN11ProcManager4waitEy+0xa4> - 8020821c: 7ca8 ld a0,120(s1) - 8020821e: 4691 li a3,4 - 80208220: 0b840613 addi a2,s0,184 - 80208224: 85ce mv a1,s3 - 80208226: c7cfe0ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 8020822a: 08054763 bltz a0,802082b8 <_ZN11ProcManager4waitEy+0x12e> - { - proc_mem_lock.release(); - return -1; - } - freeproc(np); - 8020822e: 8522 mv a0,s0 - 80208230: cf8ff0ef jal 80207728 <_ZL8freeprocP4Proc> - proc_mem_lock.release(); - 80208234: 00016517 auipc a0,0x16 - 80208238: c4c50513 addi a0,a0,-948 # 8021de80 - 8020823c: 8ddfd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - - if (!havekids || p->state == ZOMBIE) - return -1; - sleep(p, &proc_mem_lock); - } - } - 80208240: 60a6 ld ra,72(sp) - 80208242: 6406 ld s0,64(sp) - 80208244: 74e2 ld s1,56(sp) - 80208246: 79a2 ld s3,40(sp) - 80208248: 7a02 ld s4,32(sp) - 8020824a: 6ae2 ld s5,24(sp) - 8020824c: 6b42 ld s6,16(sp) - 8020824e: 6ba2 ld s7,8(sp) - 80208250: 6c02 ld s8,0(sp) - 80208252: 854a mv a0,s2 - 80208254: 7942 ld s2,48(sp) - 80208256: 6161 addi sp,sp,80 - 80208258: 8082 ret - proc_mem_lock.release(); - 8020825a: 854a mv a0,s2 - 8020825c: 8bdfd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - if (!havekids || p->state == ZOMBIE) - 80208260: 060b0263 beqz s6,802082c4 <_ZN11ProcManager4waitEy+0x13a> - 80208264: 0804a783 lw a5,128(s1) - 80208268: 05778e63 beq a5,s7,802082c4 <_ZN11ProcManager4waitEy+0x13a> - struct Proc *p = myproc(); - 8020826c: 817fd0ef jal 80205a82 <_Z6myprocv> - 80208270: 8b2a mv s6,a0 - 80208272: 8792 mv a5,tp - int id = r_tp(); - 80208274: 2781 sext.w a5,a5 - c->runqueue->lock.acquire(); - 80208276: 00479413 slli s0,a5,0x4 - 8020827a: 943e add s0,s0,a5 - 8020827c: 040e slli s0,s0,0x3 - 8020827e: 00890c33 add s8,s2,s0 - 80208282: 0a0c3503 ld a0,160(s8) # 10a0 <_start-0x801fef60> - 80208286: 8fbfd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - swtch(&p->context, &c->context); - 8020828a: 00840593 addi a1,s0,8 - 8020828e: 95d2 add a1,a1,s4 - 80208290: 855a mv a0,s6 - p->chan = chan; - 80208292: 0a9b3823 sd s1,176(s6) - p->state = SLEEPING; - 80208296: 095b2023 sw s5,128(s6) - swtch(&p->context, &c->context); - 8020829a: db3f70ef jal 8020004c - p->chan = 0; - 8020829e: 0a0b3823 sd zero,176(s6) - c->runqueue->lock.release(); - 802082a2: 0a0c3503 ld a0,160(s8) - 802082a6: 873fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - proc_mem_lock.acquire(); - 802082aa: 854a mv a0,s2 - 802082ac: 8d5fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (np = proc_list_head; np != nullptr; np = np->all_next) - 802082b0: 01893403 ld s0,24(s2) - 802082b4: f0041be3 bnez s0,802081ca <_ZN11ProcManager4waitEy+0x40> - proc_mem_lock.release(); - 802082b8: 00016517 auipc a0,0x16 - 802082bc: bc850513 addi a0,a0,-1080 # 8021de80 - 802082c0: 859fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return -1; - 802082c4: 597d li s2,-1 - 802082c6: bfad j 80208240 <_ZN11ProcManager4waitEy+0xb6> - -00000000802082c8 <_ZN11ProcManager4killEi>: - - int kill(int pid) - { - 802082c8: 7139 addi sp,sp,-64 - 802082ca: f04a sd s2,32(sp) - Proc* p; - proc_mem_lock.acquire(); - 802082cc: 00016917 auipc s2,0x16 - 802082d0: bb490913 addi s2,s2,-1100 # 8021de80 - { - 802082d4: f426 sd s1,40(sp) - 802082d6: 84aa mv s1,a0 - proc_mem_lock.acquire(); - 802082d8: 854a mv a0,s2 - { - 802082da: f822 sd s0,48(sp) - 802082dc: fc06 sd ra,56(sp) - proc_mem_lock.acquire(); - 802082de: 8a3fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (p = proc_list_head; p != nullptr; p = p->all_next) - 802082e2: 01893403 ld s0,24(s2) - 802082e6: e409 bnez s0,802082f0 <_ZN11ProcManager4killEi+0x28> - 802082e8: a82d j 80208322 <_ZN11ProcManager4killEi+0x5a> - 802082ea: 15843403 ld s0,344(s0) - 802082ee: c815 beqz s0,80208322 <_ZN11ProcManager4killEi+0x5a> - { - if (p->pid == pid) - 802082f0: 08442783 lw a5,132(s0) - 802082f4: fe979be3 bne a5,s1,802082ea <_ZN11ProcManager4killEi+0x22> - { - p->killed = 1; - - if (p->state == SLEEPING) - 802082f8: 08042703 lw a4,128(s0) - p->killed = 1; - 802082fc: 4785 li a5,1 - 802082fe: 0af42e23 sw a5,188(s0) - if (p->state == SLEEPING) - 80208302: 4789 li a5,2 - 80208304: 02f70c63 beq a4,a5,8020833c <_ZN11ProcManager4killEi+0x74> - c->runqueue->lock.acquire(); - c->runqueue->enqueue(p); - c->runqueue->lock.release(); - } - - proc_mem_lock.release(); - 80208308: 00016517 auipc a0,0x16 - 8020830c: b7850513 addi a0,a0,-1160 # 8021de80 - 80208310: 809fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return 0; - } - } - proc_mem_lock.release(); - return -1; - } - 80208314: 70e2 ld ra,56(sp) - 80208316: 7442 ld s0,48(sp) - 80208318: 74a2 ld s1,40(sp) - 8020831a: 7902 ld s2,32(sp) - return 0; - 8020831c: 4501 li a0,0 - } - 8020831e: 6121 addi sp,sp,64 - 80208320: 8082 ret - proc_mem_lock.release(); - 80208322: 00016517 auipc a0,0x16 - 80208326: b5e50513 addi a0,a0,-1186 # 8021de80 - 8020832a: feefd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - } - 8020832e: 70e2 ld ra,56(sp) - 80208330: 7442 ld s0,48(sp) - 80208332: 74a2 ld s1,40(sp) - 80208334: 7902 ld s2,32(sp) - return -1; - 80208336: 557d li a0,-1 - } - 80208338: 6121 addi sp,sp,64 - 8020833a: 8082 ret - p->state = RUNNABLE; - 8020833c: e456 sd s5,8(sp) - 8020833e: ec4e sd s3,24(sp) - 80208340: e852 sd s4,16(sp) - 80208342: 4a8d li s5,3 - 80208344: 09542023 sw s5,128(s0) - 80208348: 8a12 mv s4,tp - int id = r_tp(); - 8020834a: 2a01 sext.w s4,s4 - c->runqueue->lock.acquire(); - 8020834c: 004a1493 slli s1,s4,0x4 - 80208350: 014489b3 add s3,s1,s4 - 80208354: 098e slli s3,s3,0x3 - 80208356: 99ca add s3,s3,s2 - 80208358: 0a09b503 ld a0,160(s3) - 8020835c: 825fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if (p->priority < 0 || p->priority >= N_PRIO) - 80208360: 16842783 lw a5,360(s0) - c->runqueue->enqueue(p); - 80208364: 0a09b703 ld a4,160(s3) - if (p->priority < 0 || p->priority >= N_PRIO) - 80208368: 02faec63 bltu s5,a5,802083a0 <_ZN11ProcManager4killEi+0xd8> - p->next = nullptr; - 8020836c: 078e slli a5,a5,0x3 - 8020836e: 14043423 sd zero,328(s0) - if (heads[p->priority] == nullptr) - 80208372: 97ba add a5,a5,a4 - 80208374: 6f94 ld a3,24(a5) - 80208376: ca8d beqz a3,802083a8 <_ZN11ProcManager4killEi+0xe0> - tails[p->priority]->next = p; - 80208378: 7f94 ld a3,56(a5) - 8020837a: 1486b423 sd s0,328(a3) - tails[p->priority] = p; - 8020837e: ff80 sd s0,56(a5) - c->runqueue->lock.release(); - 80208380: 014487b3 add a5,s1,s4 - count++; - 80208384: 6f34 ld a3,88(a4) - c->runqueue->lock.release(); - 80208386: 078e slli a5,a5,0x3 - 80208388: 993e add s2,s2,a5 - 8020838a: 0a093503 ld a0,160(s2) - count++; - 8020838e: 00168793 addi a5,a3,1 - 80208392: ef3c sd a5,88(a4) - c->runqueue->lock.release(); - 80208394: f84fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - 80208398: 69e2 ld s3,24(sp) - 8020839a: 6a42 ld s4,16(sp) - 8020839c: 6aa2 ld s5,8(sp) - 8020839e: b7ad j 80208308 <_ZN11ProcManager4killEi+0x40> - p->priority = PRIO_MIN; - 802083a0: 17542423 sw s5,360(s0) - 802083a4: 478d li a5,3 - 802083a6: b7d9 j 8020836c <_ZN11ProcManager4killEi+0xa4> - heads[p->priority] = p; - 802083a8: ef80 sd s0,24(a5) - tails[p->priority] = p; - 802083aa: bfd1 j 8020837e <_ZN11ProcManager4killEi+0xb6> - -00000000802083ac <_ZN11ProcManager8growprocEi>: - - int growproc(int n) - { - 802083ac: 1101 addi sp,sp,-32 - 802083ae: e822 sd s0,16(sp) - 802083b0: e426 sd s1,8(sp) - 802083b2: ec06 sd ra,24(sp) - 802083b4: 84aa mv s1,a0 - uint64 sz; - struct Proc *p = myproc(); - 802083b6: eccfd0ef jal 80205a82 <_Z6myprocv> - - sz = p->sz; - 802083ba: 714c ld a1,160(a0) - struct Proc *p = myproc(); - 802083bc: 842a mv s0,a0 - - if (n > 0) - 802083be: 00904a63 bgtz s1,802083d2 <_ZN11ProcManager8growprocEi+0x26> - if ((sz = VM::uvmalloc(p->pagetable, sz, sz + n, PTE_W | PTE_R | PTE_U)) == 0) - { - return -1; - } - } - else if (n < 0) - 802083c2: e095 bnez s1,802083e6 <_ZN11ProcManager8growprocEi+0x3a> - { - sz = VM::uvmdealloc(p->pagetable, sz, sz + n); - } - - p->sz = sz; - 802083c4: f04c sd a1,160(s0) - return 0; - 802083c6: 4501 li a0,0 - } - 802083c8: 60e2 ld ra,24(sp) - 802083ca: 6442 ld s0,16(sp) - 802083cc: 64a2 ld s1,8(sp) - 802083ce: 6105 addi sp,sp,32 - 802083d0: 8082 ret - if ((sz = VM::uvmalloc(p->pagetable, sz, sz + n, PTE_W | PTE_R | PTE_U)) == 0) - 802083d2: 7d28 ld a0,120(a0) - 802083d4: 00b48633 add a2,s1,a1 - 802083d8: 46d9 li a3,22 - 802083da: e41fd0ef jal 8020621a <_ZN2VM8uvmallocEPyyyi> - 802083de: 85aa mv a1,a0 - 802083e0: f175 bnez a0,802083c4 <_ZN11ProcManager8growprocEi+0x18> - return -1; - 802083e2: 557d li a0,-1 - 802083e4: b7d5 j 802083c8 <_ZN11ProcManager8growprocEi+0x1c> - sz = VM::uvmdealloc(p->pagetable, sz, sz + n); - 802083e6: 7d28 ld a0,120(a0) - 802083e8: 00b48633 add a2,s1,a1 - 802083ec: efffd0ef jal 802062ea <_ZN2VM10uvmdeallocEPyyy> - 802083f0: 85aa mv a1,a0 - 802083f2: bfc9 j 802083c4 <_ZN11ProcManager8growprocEi+0x18> - -00000000802083f4 <_ZN11ProcManager20create_kernel_threadEPFvvEPKc>: - - void create_kernel_thread(void (*func)(), const char *name) - { - (void)func; - (void)name; - } - 802083f4: 8082 ret - -00000000802083f6 <_GLOBAL__sub_I_proc_list_head>: - 802083f6: 00009717 auipc a4,0x9 - 802083fa: 39270713 addi a4,a4,914 # 80211788 - 802083fe: 00016797 auipc a5,0x16 - 80208402: a807a123 sw zero,-1406(a5) # 8021de80 - 80208406: 00016797 auipc a5,0x16 - 8020840a: a8e7b123 sd a4,-1406(a5) # 8021de88 - 8020840e: 00016797 auipc a5,0x16 - 80208412: a807b123 sd zero,-1406(a5) # 8021de90 -struct RunQueue runqueues[NCPU]; - 80208416: 00016797 auipc a5,0x16 - 8020841a: eca78793 addi a5,a5,-310 # 8021e2e0 - 8020841e: 00016697 auipc a3,0x16 - 80208422: 1c268693 addi a3,a3,450 # 8021e5e0 - 80208426: 0007a023 sw zero,0(a5) - 8020842a: e798 sd a4,8(a5) - 8020842c: 0007b823 sd zero,16(a5) - 80208430: 06078793 addi a5,a5,96 - 80208434: fed799e3 bne a5,a3,80208426 <_GLOBAL__sub_I_proc_list_head+0x30> - 80208438: 8082 ret - -000000008020843a <_ZN11BufferCache4initEv>: - struct Buf buf[NBUF]; - struct Buf head; - } bcache; - - void init() - { - 8020843a: 7179 addi sp,sp,-48 - 8020843c: ec26 sd s1,24(sp) - 8020843e: e84a sd s2,16(sp) - bcache.lock.init("bcache"); - // Initialize LRU doubly circular linked list - bcache.head.prev = &bcache.head; - 80208440: 0001e497 auipc s1,0x1e - 80208444: 1a848493 addi s1,s1,424 # 802265e8 <_ZN11BufferCache6bcacheE+0x8000> - 80208448: 0001e917 auipc s2,0x1e - 8020844c: 40890913 addi s2,s2,1032 # 80226850 <_ZN11BufferCache6bcacheE+0x8268> - bcache.lock.init("bcache"); - 80208450: 0000a597 auipc a1,0xa - 80208454: b6058593 addi a1,a1,-1184 # 80211fb0 - 80208458: 00016517 auipc a0,0x16 - 8020845c: 19050513 addi a0,a0,400 # 8021e5e8 <_ZN11BufferCache6bcacheE> - { - 80208460: f022 sd s0,32(sp) - 80208462: e44e sd s3,8(sp) - 80208464: f406 sd ra,40(sp) - bcache.head.next = &bcache.head; - for (struct Buf *b = bcache.buf; b < bcache.buf + NBUF; ++b) - 80208466: 00016417 auipc s0,0x16 - 8020846a: 19a40413 addi s0,s0,410 # 8021e600 <_ZN11BufferCache6bcacheE+0x18> - bcache.lock.init("bcache"); - 8020846e: d6cfd0ef jal 802059da <_ZN8Spinlock4initEPKc> - { - b->lock.init("buffer"); - 80208472: 0000a997 auipc s3,0xa - 80208476: b4698993 addi s3,s3,-1210 # 80211fb8 - bcache.head.prev = &bcache.head; - 8020847a: 2924b023 sd s2,640(s1) - bcache.head.next = &bcache.head; - 8020847e: 2924b423 sd s2,648(s1) - b->lock.init("buffer"); - 80208482: 42840513 addi a0,s0,1064 - 80208486: 85ce mv a1,s3 - 80208488: d5efd0ef jal 802059e6 <_ZN5Mutex4initEPKc> - b->next = bcache.head.next; - 8020848c: 2884b783 ld a5,648(s1) - b->prev = &bcache.head; - 80208490: 01243c23 sd s2,24(s0) - b->next = bcache.head.next; - 80208494: f01c sd a5,32(s0) - bcache.head.next->prev = b; - 80208496: 2884b783 ld a5,648(s1) - 8020849a: ef80 sd s0,24(a5) - bcache.head.next = b; - 8020849c: 2884b423 sd s0,648(s1) - for (struct Buf *b = bcache.buf; b < bcache.buf + NBUF; ++b) - 802084a0: 45840413 addi s0,s0,1112 - 802084a4: fd241fe3 bne s0,s2,80208482 <_ZN11BufferCache4initEv+0x48> - } - Drivers::uart_puts("[Bio] Buffer cache initialized.\n"); - } - 802084a8: 7402 ld s0,32(sp) - 802084aa: 70a2 ld ra,40(sp) - 802084ac: 64e2 ld s1,24(sp) - 802084ae: 6942 ld s2,16(sp) - 802084b0: 69a2 ld s3,8(sp) - Drivers::uart_puts("[Bio] Buffer cache initialized.\n"); - 802084b2: 0000a517 auipc a0,0xa - 802084b6: b0e50513 addi a0,a0,-1266 # 80211fc0 - } - 802084ba: 6145 addi sp,sp,48 - Drivers::uart_puts("[Bio] Buffer cache initialized.\n"); - 802084bc: 0af0006f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -00000000802084c0 <_ZN11BufferCache5breadEjj>: - while (1) - ; - } - - struct Buf* bread(uint32 dev, uint32 blockno) - { - 802084c0: 1101 addi sp,sp,-32 - 802084c2: e426 sd s1,8(sp) - 802084c4: 84aa mv s1,a0 - bcache.lock.acquire(); - 802084c6: 00016517 auipc a0,0x16 - 802084ca: 12250513 addi a0,a0,290 # 8021e5e8 <_ZN11BufferCache6bcacheE> - { - 802084ce: e822 sd s0,16(sp) - 802084d0: e04a sd s2,0(sp) - 802084d2: ec06 sd ra,24(sp) - 802084d4: 892e mv s2,a1 - bcache.lock.acquire(); - 802084d6: eaafd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - for (b = bcache.head.next; b != &bcache.head; b = b->next) - 802084da: 0001e697 auipc a3,0x1e - 802084de: 10e68693 addi a3,a3,270 # 802265e8 <_ZN11BufferCache6bcacheE+0x8000> - 802084e2: 2886b403 ld s0,648(a3) - 802084e6: 0001e717 auipc a4,0x1e - 802084ea: 36a70713 addi a4,a4,874 # 80226850 <_ZN11BufferCache6bcacheE+0x8268> - 802084ee: 00e41663 bne s0,a4,802084fa <_ZN11BufferCache5breadEjj+0x3a> - 802084f2: a889 j 80208544 <_ZN11BufferCache5breadEjj+0x84> - 802084f4: 7000 ld s0,32(s0) - 802084f6: 04e40763 beq s0,a4,80208544 <_ZN11BufferCache5breadEjj+0x84> - if (b->dev == dev && b->blockno == blockno) - 802084fa: 441c lw a5,8(s0) - 802084fc: fe979ce3 bne a5,s1,802084f4 <_ZN11BufferCache5breadEjj+0x34> - 80208500: 445c lw a5,12(s0) - 80208502: ff2799e3 bne a5,s2,802084f4 <_ZN11BufferCache5breadEjj+0x34> - b->refcnt++; - 80208506: 481c lw a5,16(s0) - bcache.lock.release(); - 80208508: 00016517 auipc a0,0x16 - 8020850c: 0e050513 addi a0,a0,224 # 8021e5e8 <_ZN11BufferCache6bcacheE> - b->refcnt++; - 80208510: 2785 addiw a5,a5,1 - 80208512: c81c sw a5,16(s0) - bcache.lock.release(); - 80208514: e04fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - b->lock.acquire(); // Acquire Sleep Lock - 80208518: 42840513 addi a0,s0,1064 - 8020851c: f12fd0ef jal 80205c2e <_ZN5Mutex7acquireEv> - struct Buf *b = bget(dev, blockno); - - if (!b->valid) - 80208520: 401c lw a5,0(s0) - 80208522: e3b5 bnez a5,80208586 <_ZN11BufferCache5breadEjj+0xc6> - { - VirtIO::rw(0, b->blockno, (char *)b->data); - 80208524: 00c46583 lwu a1,12(s0) - 80208528: 02840613 addi a2,s0,40 - 8020852c: 4501 li a0,0 - 8020852e: 7d5000ef jal 80209502 <_ZN6VirtIO2rwEiyPc> - b->valid = 1; - 80208532: 4785 li a5,1 - } - - return b; - } - 80208534: 60e2 ld ra,24(sp) - b->valid = 1; - 80208536: c01c sw a5,0(s0) - } - 80208538: 8522 mv a0,s0 - 8020853a: 6442 ld s0,16(sp) - 8020853c: 64a2 ld s1,8(sp) - 8020853e: 6902 ld s2,0(sp) - 80208540: 6105 addi sp,sp,32 - 80208542: 8082 ret - for (b = bcache.head.prev; b != &bcache.head; b = b->prev) - 80208544: 2806b403 ld s0,640(a3) - 80208548: 00e41663 bne s0,a4,80208554 <_ZN11BufferCache5breadEjj+0x94> - 8020854c: a0a1 j 80208594 <_ZN11BufferCache5breadEjj+0xd4> - 8020854e: 6c00 ld s0,24(s0) - 80208550: 04e40263 beq s0,a4,80208594 <_ZN11BufferCache5breadEjj+0xd4> - if (b->refcnt == 0) - 80208554: 481c lw a5,16(s0) - 80208556: ffe5 bnez a5,8020854e <_ZN11BufferCache5breadEjj+0x8e> - b->dev = dev; - 80208558: 02049793 slli a5,s1,0x20 - 8020855c: 1902 slli s2,s2,0x20 - 8020855e: 9381 srli a5,a5,0x20 - 80208560: 0127e7b3 or a5,a5,s2 - 80208564: e41c sd a5,8(s0) - b->refcnt = 1; - 80208566: 4785 li a5,1 - 80208568: c81c sw a5,16(s0) - bcache.lock.release(); - 8020856a: 00016517 auipc a0,0x16 - 8020856e: 07e50513 addi a0,a0,126 # 8021e5e8 <_ZN11BufferCache6bcacheE> - b->valid = 0; - 80208572: 00042023 sw zero,0(s0) - bcache.lock.release(); - 80208576: da2fd0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - b->lock.acquire(); - 8020857a: 42840513 addi a0,s0,1064 - 8020857e: eb0fd0ef jal 80205c2e <_ZN5Mutex7acquireEv> - if (!b->valid) - 80208582: 401c lw a5,0(s0) - 80208584: d3c5 beqz a5,80208524 <_ZN11BufferCache5breadEjj+0x64> - } - 80208586: 60e2 ld ra,24(sp) - 80208588: 8522 mv a0,s0 - 8020858a: 6442 ld s0,16(sp) - 8020858c: 64a2 ld s1,8(sp) - 8020858e: 6902 ld s2,0(sp) - 80208590: 6105 addi sp,sp,32 - 80208592: 8082 ret - Drivers::uart_puts("panic: bget: no buffers\n"); - 80208594: 0000a517 auipc a0,0xa - 80208598: a5450513 addi a0,a0,-1452 # 80211fe8 - 8020859c: 7ce000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802085a0: a001 j 802085a0 <_ZN11BufferCache5breadEjj+0xe0> - -00000000802085a2 <_ZN11BufferCache6bwriteEP3Buf>: - - void bwrite(struct Buf *b) - { - 802085a2: 1141 addi sp,sp,-16 - 802085a4: e022 sd s0,0(sp) - 802085a6: 842a mv s0,a0 - if (!b->lock.holding()) - 802085a8: 42850513 addi a0,a0,1064 - { - 802085ac: e406 sd ra,8(sp) - if (!b->lock.holding()) - 802085ae: f22fd0ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 802085b2: e901 bnez a0,802085c2 <_ZN11BufferCache6bwriteEP3Buf+0x20> - { - Drivers::uart_puts("panic: bwrite\n"); - 802085b4: 0000a517 auipc a0,0xa - 802085b8: a5450513 addi a0,a0,-1452 # 80212008 - 802085bc: 7ae000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802085c0: a001 j 802085c0 <_ZN11BufferCache6bwriteEP3Buf+0x1e> - ; - } - VirtIO::rw(1, b->blockno, (char *)b->data); - 802085c2: 00c46583 lwu a1,12(s0) - 802085c6: 02840613 addi a2,s0,40 - } - 802085ca: 6402 ld s0,0(sp) - 802085cc: 60a2 ld ra,8(sp) - VirtIO::rw(1, b->blockno, (char *)b->data); - 802085ce: 4505 li a0,1 - } - 802085d0: 0141 addi sp,sp,16 - VirtIO::rw(1, b->blockno, (char *)b->data); - 802085d2: 7310006f j 80209502 <_ZN6VirtIO2rwEiyPc> - -00000000802085d6 <_ZN11BufferCache6brelseEP3Buf>: - - void brelse(struct Buf *b) - { - 802085d6: 1101 addi sp,sp,-32 - 802085d8: e426 sd s1,8(sp) - if (!b->lock.holding()) - 802085da: 42850493 addi s1,a0,1064 - { - 802085de: e822 sd s0,16(sp) - 802085e0: 842a mv s0,a0 - if (!b->lock.holding()) - 802085e2: 8526 mv a0,s1 - { - 802085e4: ec06 sd ra,24(sp) - if (!b->lock.holding()) - 802085e6: eeafd0ef jal 80205cd0 <_ZN5Mutex7holdingEv> - 802085ea: e901 bnez a0,802085fa <_ZN11BufferCache6brelseEP3Buf+0x24> - { - Drivers::uart_puts("panic: brelse\n"); - 802085ec: 0000a517 auipc a0,0xa - 802085f0: a2c50513 addi a0,a0,-1492 # 80212018 - 802085f4: 776000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 802085f8: a001 j 802085f8 <_ZN11BufferCache6brelseEP3Buf+0x22> - ; - } - b->lock.release(); - 802085fa: 8526 mv a0,s1 - 802085fc: ea4fd0ef jal 80205ca0 <_ZN5Mutex7releaseEv> - - bcache.lock.acquire(); - 80208600: 00016517 auipc a0,0x16 - 80208604: fe850513 addi a0,a0,-24 # 8021e5e8 <_ZN11BufferCache6bcacheE> - 80208608: d78fd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - b->refcnt--; - 8020860c: 481c lw a5,16(s0) - 8020860e: fff7871b addiw a4,a5,-1 - 80208612: c818 sw a4,16(s0) - - if (b->refcnt == 0) - 80208614: e71d bnez a4,80208642 <_ZN11BufferCache6brelseEP3Buf+0x6c> - { - b->next->prev = b->prev; - 80208616: 7014 ld a3,32(s0) - 80208618: 6c18 ld a4,24(s0) - b->prev->next = b->next; - - b->next = bcache.head.next; - 8020861a: 0001e797 auipc a5,0x1e - 8020861e: fce78793 addi a5,a5,-50 # 802265e8 <_ZN11BufferCache6bcacheE+0x8000> - b->next->prev = b->prev; - 80208622: ee98 sd a4,24(a3) - b->prev->next = b->next; - 80208624: 7014 ld a3,32(s0) - 80208626: f314 sd a3,32(a4) - b->next = bcache.head.next; - 80208628: 2887b703 ld a4,648(a5) - b->prev = &bcache.head; - 8020862c: 0001e697 auipc a3,0x1e - 80208630: 22468693 addi a3,a3,548 # 80226850 <_ZN11BufferCache6bcacheE+0x8268> - 80208634: ec14 sd a3,24(s0) - b->next = bcache.head.next; - 80208636: f018 sd a4,32(s0) - bcache.head.next->prev = b; - 80208638: 2887b703 ld a4,648(a5) - 8020863c: ef00 sd s0,24(a4) - bcache.head.next = b; - 8020863e: 2887b423 sd s0,648(a5) - } - - bcache.lock.release(); - } - 80208642: 6442 ld s0,16(sp) - 80208644: 60e2 ld ra,24(sp) - 80208646: 64a2 ld s1,8(sp) - bcache.lock.release(); - 80208648: 00016517 auipc a0,0x16 - 8020864c: fa050513 addi a0,a0,-96 # 8021e5e8 <_ZN11BufferCache6bcacheE> - } - 80208650: 6105 addi sp,sp,32 - bcache.lock.release(); - 80208652: cc6fd06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080208656 <_ZN11BufferCache4bpinEP3Buf>: - - void bpin(struct Buf *b) - { - 80208656: 1141 addi sp,sp,-16 - 80208658: e022 sd s0,0(sp) - 8020865a: 842a mv s0,a0 - bcache.lock.acquire(); - 8020865c: 00016517 auipc a0,0x16 - 80208660: f8c50513 addi a0,a0,-116 # 8021e5e8 <_ZN11BufferCache6bcacheE> - { - 80208664: e406 sd ra,8(sp) - bcache.lock.acquire(); - 80208666: d1afd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - b->refcnt++; - 8020866a: 481c lw a5,16(s0) - bcache.lock.release(); - } - 8020866c: 60a2 ld ra,8(sp) - bcache.lock.release(); - 8020866e: 00016517 auipc a0,0x16 - 80208672: f7a50513 addi a0,a0,-134 # 8021e5e8 <_ZN11BufferCache6bcacheE> - b->refcnt++; - 80208676: 2785 addiw a5,a5,1 - 80208678: c81c sw a5,16(s0) - } - 8020867a: 6402 ld s0,0(sp) - 8020867c: 0141 addi sp,sp,16 - bcache.lock.release(); - 8020867e: c9afd06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080208682 <_ZN11BufferCache6bunpinEP3Buf>: - - void bunpin(struct Buf* b) - { - 80208682: 1141 addi sp,sp,-16 - 80208684: e022 sd s0,0(sp) - 80208686: 842a mv s0,a0 - bcache.lock.acquire(); - 80208688: 00016517 auipc a0,0x16 - 8020868c: f6050513 addi a0,a0,-160 # 8021e5e8 <_ZN11BufferCache6bcacheE> - { - 80208690: e406 sd ra,8(sp) - bcache.lock.acquire(); - 80208692: ceefd0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - b->refcnt --; - 80208696: 481c lw a5,16(s0) - bcache.lock.release(); - } - 80208698: 60a2 ld ra,8(sp) - bcache.lock.release(); - 8020869a: 00016517 auipc a0,0x16 - 8020869e: f4e50513 addi a0,a0,-178 # 8021e5e8 <_ZN11BufferCache6bcacheE> - b->refcnt --; - 802086a2: 37fd addiw a5,a5,-1 - 802086a4: c81c sw a5,16(s0) - } - 802086a6: 6402 ld s0,0(sp) - 802086a8: 0141 addi sp,sp,16 - bcache.lock.release(); - 802086aa: c6efd06f j 80205b18 <_ZN8Spinlock7releaseEv> - -00000000802086ae <_GLOBAL__sub_I__ZN11BufferCache4initEv>: - 802086ae: 00009717 auipc a4,0x9 - 802086b2: 0da70713 addi a4,a4,218 # 80211788 - 802086b6: 00016797 auipc a5,0x16 - 802086ba: f207a923 sw zero,-206(a5) # 8021e5e8 <_ZN11BufferCache6bcacheE> - 802086be: 00016797 auipc a5,0x16 - 802086c2: f2e7b923 sd a4,-206(a5) # 8021e5f0 <_ZN11BufferCache6bcacheE+0x8> - 802086c6: 00016797 auipc a5,0x16 - 802086ca: f207b923 sd zero,-206(a5) # 8021e5f8 <_ZN11BufferCache6bcacheE+0x10> - { - 802086ce: 00016797 auipc a5,0x16 - 802086d2: f3278793 addi a5,a5,-206 # 8021e600 <_ZN11BufferCache6bcacheE+0x18> - 802086d6: 0001e697 auipc a3,0x1e - 802086da: 17a68693 addi a3,a3,378 # 80226850 <_ZN11BufferCache6bcacheE+0x8268> - 802086de: 4407a023 sw zero,1088(a5) - 802086e2: 44e7b423 sd a4,1096(a5) - 802086e6: 4407b823 sd zero,1104(a5) - 802086ea: 45878793 addi a5,a5,1112 - 802086ee: fed798e3 bne a5,a3,802086de <_GLOBAL__sub_I__ZN11BufferCache4initEv+0x30> - 802086f2: 0001e797 auipc a5,0x1e - 802086f6: 5807af23 sw zero,1438(a5) # 80226c90 <_ZN11BufferCache6bcacheE+0x86a8> - 802086fa: 0001e797 auipc a5,0x1e - 802086fe: 58e7bf23 sd a4,1438(a5) # 80226c98 <_ZN11BufferCache6bcacheE+0x86b0> - 80208702: 0001e797 auipc a5,0x1e - 80208706: 5807bf23 sd zero,1438(a5) # 80226ca0 <_ZN11BufferCache6bcacheE+0x86b8> - -} // namespace BufferCache - 8020870a: 8082 ret - -000000008020870c <_Z8fdt_inity>: -#define FDT_END 9 - - -void fdt_init(uint64 dtb) -{ - if (dtb == 0) return; - 8020870c: cd7d beqz a0,8020880a <_Z8fdt_inity+0xfe> - - struct fdt_header* header = (struct fdt_header*)dtb; - if (bswap(header->magic) != FDT_MAGIC) - 8020870e: 4118 lw a4,0(a0) -{ - 80208710: 7159 addi sp,sp,-112 - 80208712: e0d2 sd s4,64(sp) - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208714: 0187579b srliw a5,a4,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208718: 0187159b slliw a1,a4,0x18 - 8020871c: 0087169b slliw a3,a4,0x8 - 80208720: 00ff0637 lui a2,0xff0 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208724: 6a41 lui s4,0x10 - 80208726: 8fcd or a5,a5,a1 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208728: 8ef1 and a3,a3,a2 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020872a: 0087571b srliw a4,a4,0x8 - 8020872e: f00a0a13 addi s4,s4,-256 # ff00 <_start-0x801f0100> - 80208732: 01477733 and a4,a4,s4 - 80208736: 8fd5 or a5,a5,a3 - 80208738: 8fd9 or a5,a5,a4 - if (bswap(header->magic) != FDT_MAGIC) - 8020873a: d00e0737 lui a4,0xd00e0 -{ - 8020873e: f486 sd ra,104(sp) - if (bswap(header->magic) != FDT_MAGIC) - 80208740: 2781 sext.w a5,a5 - 80208742: eed70713 addi a4,a4,-275 # ffffffffd00dfeed - 80208746: 0ae79e63 bne a5,a4,80208802 <_Z8fdt_inity+0xf6> - return; - - uint8* struct_ptr = (uint8*)(dtb + bswap(header->off_dt_struct)); - 8020874a: 4518 lw a4,8(a0) - char* strings_ptr = (char *)(dtb + bswap(header->off_dt_strings)); - 8020874c: 455c lw a5,12(a0) - 8020874e: f0a2 sd s0,96(sp) - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208750: 0187589b srliw a7,a4,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208754: 0187141b slliw s0,a4,0x18 - 80208758: 0087159b slliw a1,a4,0x8 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020875c: 0187d81b srliw a6,a5,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208760: 0087969b slliw a3,a5,0x8 - 80208764: eca6 sd s1,88(sp) - 80208766: 0187949b slliw s1,a5,0x18 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020876a: 01146433 or s0,s0,a7 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 8020876e: 8df1 and a1,a1,a2 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208770: 0087571b srliw a4,a4,0x8 - 80208774: 0104e4b3 or s1,s1,a6 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208778: 8ef1 and a3,a3,a2 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020877a: 0087d79b srliw a5,a5,0x8 - 8020877e: 8c4d or s0,s0,a1 - 80208780: 01477733 and a4,a4,s4 - 80208784: 8cd5 or s1,s1,a3 - 80208786: 0147f7b3 and a5,a5,s4 - 8020878a: 8c59 or s0,s0,a4 - 8020878c: 8cdd or s1,s1,a5 - uint8* struct_ptr = (uint8*)(dtb + bswap(header->off_dt_struct)); - 8020878e: 1402 slli s0,s0,0x20 - char* strings_ptr = (char *)(dtb + bswap(header->off_dt_strings)); - 80208790: 1482 slli s1,s1,0x20 - uint8* struct_ptr = (uint8*)(dtb + bswap(header->off_dt_struct)); - 80208792: 9001 srli s0,s0,0x20 - char* strings_ptr = (char *)(dtb + bswap(header->off_dt_strings)); - 80208794: 9081 srli s1,s1,0x20 - 80208796: e8ca sd s2,80(sp) - 80208798: e4ce sd s3,72(sp) - 8020879a: f45e sd s7,40(sp) - 8020879c: f062 sd s8,32(sp) - 8020879e: ec66 sd s9,24(sp) - - uint64 current_reg_addr = 0; - 802087a0: 4901 li s2,0 - uint8* struct_ptr = (uint8*)(dtb + bswap(header->off_dt_struct)); - 802087a2: 942a add s0,s0,a0 - char* strings_ptr = (char *)(dtb + bswap(header->off_dt_strings)); - 802087a4: 94aa add s1,s1,a0 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802087a6: 00ff0bb7 lui s7,0xff0 - 802087aa: 4c0d li s8,3 - 802087ac: 4ca5 li s9,9 - 802087ae: 4985 li s3,1 - - while (1) - { - uint32 token = bswap(*(uint32*)struct_ptr); - 802087b0: 4018 lw a4,0(s0) - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802087b2: 0187179b slliw a5,a4,0x18 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802087b6: 0187559b srliw a1,a4,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802087ba: 0087169b slliw a3,a4,0x8 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802087be: 8fcd or a5,a5,a1 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802087c0: 0176f6b3 and a3,a3,s7 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802087c4: 0087571b srliw a4,a4,0x8 - 802087c8: 8fd5 or a5,a5,a3 - 802087ca: 00ea7733 and a4,s4,a4 - 802087ce: 8fd9 or a5,a5,a4 - 802087d0: 2781 sext.w a5,a5 - struct_ptr += 4; - - if(token == FDT_END)break; - 802087d2: 03878d63 beq a5,s8,8020880c <_Z8fdt_inity+0x100> - 802087d6: 01978f63 beq a5,s9,802087f4 <_Z8fdt_inity+0xe8> - struct_ptr += 4; - 802087da: 0411 addi s0,s0,4 - 802087dc: fd379ae3 bne a5,s3,802087b0 <_Z8fdt_inity+0xa4> - if(token == FDT_NOP)continue; - - if(token == FDT_BEGIN_NODE) - { - while (*struct_ptr != 0)struct_ptr++; - 802087e0: 00044783 lbu a5,0(s0) - 802087e4: c789 beqz a5,802087ee <_Z8fdt_inity+0xe2> - 802087e6: 00144783 lbu a5,1(s0) - 802087ea: 0405 addi s0,s0,1 - 802087ec: ffed bnez a5,802087e6 <_Z8fdt_inity+0xda> - struct_ptr++; - struct_ptr = (uint8*)(((uint64)struct_ptr + 3) & ~3); - 802087ee: 0411 addi s0,s0,4 - 802087f0: 9871 andi s0,s0,-4 - 802087f2: bf7d j 802087b0 <_Z8fdt_inity+0xa4> - 802087f4: 7406 ld s0,96(sp) - 802087f6: 64e6 ld s1,88(sp) - 802087f8: 6946 ld s2,80(sp) - 802087fa: 69a6 ld s3,72(sp) - 802087fc: 7ba2 ld s7,40(sp) - 802087fe: 7c02 ld s8,32(sp) - 80208800: 6ce2 ld s9,24(sp) - - } - } - } - - 80208802: 70a6 ld ra,104(sp) - 80208804: 6a06 ld s4,64(sp) - 80208806: 6165 addi sp,sp,112 - 80208808: 8082 ret - 8020880a: 8082 ret - uint32 nameoff = bswap(*(uint32*)struct_ptr); - 8020880c: 4418 lw a4,8(s0) - uint32 len = bswap(*(uint32*)struct_ptr); - 8020880e: 405c lw a5,4(s0) - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208810: fc56 sd s5,56(sp) - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208812: 0187551b srliw a0,a4,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208816: 01871a9b slliw s5,a4,0x18 - 8020881a: 0087169b slliw a3,a4,0x8 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020881e: 00aaeab3 or s5,s5,a0 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208822: 0176f6b3 and a3,a3,s7 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208826: 0087571b srliw a4,a4,0x8 - 8020882a: 00daeab3 or s5,s5,a3 - 8020882e: 00ea7733 and a4,s4,a4 - 80208832: 0187d51b srliw a0,a5,0x18 - 80208836: f85a sd s6,48(sp) - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208838: 0087969b slliw a3,a5,0x8 - 8020883c: 01879b1b slliw s6,a5,0x18 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208840: 00eaeab3 or s5,s5,a4 - 80208844: 00ab6b33 or s6,s6,a0 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208848: 0176f733 and a4,a3,s7 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020884c: 0087d79b srliw a5,a5,0x8 - char* name = strings_ptr + nameoff; - 80208850: 1a82 slli s5,s5,0x20 - 80208852: 020ada93 srli s5,s5,0x20 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208856: 00eb6b33 or s6,s6,a4 - 8020885a: 00fa77b3 and a5,s4,a5 - 8020885e: 00fb6b33 or s6,s6,a5 - char* name = strings_ptr + nameoff; - 80208862: 9aa6 add s5,s5,s1 - 80208864: e46e sd s11,8(sp) - if(strcmp(name, "reg") == 0 && len >= 8) - 80208866: 00009597 auipc a1,0x9 - 8020886a: 7c258593 addi a1,a1,1986 # 80212028 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 8020886e: 000b0d9b sext.w s11,s6 - if(strcmp(name, "reg") == 0 && len >= 8) - 80208872: 8556 mv a0,s5 - struct_ptr += len; - 80208874: 1b02 slli s6,s6,0x20 - 80208876: e86a sd s10,16(sp) - 80208878: 020b5b13 srli s6,s6,0x20 - struct_ptr += 4; - 8020887c: 00c40d13 addi s10,s0,12 - if(strcmp(name, "reg") == 0 && len >= 8) - 80208880: e8cfc0ef jal 80204f0c <_Z6strcmpPKcS0_> - 80208884: ed29 bnez a0,802088de <_Z8fdt_inity+0x1d2> - 80208886: 479d li a5,7 - 80208888: 05b7fb63 bgeu a5,s11,802088de <_Z8fdt_inity+0x1d2> - uint32 lo = bswap(*(uint32*)(data + 4)); - 8020888c: 4818 lw a4,16(s0) - uint32 hi = bswap(*(uint32*)data); - 8020888e: 4454 lw a3,12(s0) - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208890: 0187179b slliw a5,a4,0x18 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 80208894: 0187581b srliw a6,a4,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 80208898: 0087159b slliw a1,a4,0x8 - 8020889c: 0186991b slliw s2,a3,0x18 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802088a0: 0186d89b srliw a7,a3,0x18 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802088a4: 0086951b slliw a0,a3,0x8 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802088a8: 0107e7b3 or a5,a5,a6 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802088ac: 0175f5b3 and a1,a1,s7 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802088b0: 0087571b srliw a4,a4,0x8 - 802088b4: 01196933 or s2,s2,a7 - return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | - 802088b8: 01757533 and a0,a0,s7 - ((x & 0xFF0000) >> 8) | ((x >> 24) & 0xFF); - 802088bc: 0086d69b srliw a3,a3,0x8 - 802088c0: 8fcd or a5,a5,a1 - 802088c2: 00ea7733 and a4,s4,a4 - 802088c6: 00a96933 or s2,s2,a0 - 802088ca: 00da76b3 and a3,s4,a3 - 802088ce: 8fd9 or a5,a5,a4 - 802088d0: 00d96933 or s2,s2,a3 - current_reg_addr = ((uint64)hi << 32) | lo; - 802088d4: 1782 slli a5,a5,0x20 - 802088d6: 1902 slli s2,s2,0x20 - 802088d8: 9381 srli a5,a5,0x20 - 802088da: 00f96933 or s2,s2,a5 - if(strcmp(name, "compatible") == 0) - 802088de: 00009597 auipc a1,0x9 - 802088e2: 75258593 addi a1,a1,1874 # 80212030 - 802088e6: 8556 mv a0,s5 - 802088e8: e24fc0ef jal 80204f0c <_Z6strcmpPKcS0_> - 802088ec: e519 bnez a0,802088fa <_Z8fdt_inity+0x1ee> - if (g_uart_base == 0) - 802088ee: 0000c517 auipc a0,0xc - 802088f2: 19253503 ld a0,402(a0) # 80214a80 <_GLOBAL_OFFSET_TABLE_+0x20> - 802088f6: 611c ld a5,0(a0) - 802088f8: cb91 beqz a5,8020890c <_Z8fdt_inity+0x200> - struct_ptr += len; - 802088fa: 9b6a add s6,s6,s10 - struct_ptr = (uint8*)(((uint64)struct_ptr + 3) & ~3); - 802088fc: 0b0d addi s6,s6,3 - 802088fe: ffcb7413 andi s0,s6,-4 - 80208902: 7ae2 ld s5,56(sp) - 80208904: 7b42 ld s6,48(sp) - 80208906: 6d42 ld s10,16(sp) - 80208908: 6da2 ld s11,8(sp) - 8020890a: b55d j 802087b0 <_Z8fdt_inity+0xa4> - for(uint32 i = 0; i < len; i++) - 8020890c: fe0d87e3 beqz s11,802088fa <_Z8fdt_inity+0x1ee> - if (data[i] == 'n' && data[i + 1] == 's' && data[i + 2] == '1') - 80208910: 4889 li a7,2 - 80208912: 016d05b3 add a1,s10,s6 - for(uint32 i = 0; i < len; i++) - 80208916: 87ea mv a5,s10 - if (data[i] == 'n' && data[i + 1] == 's' && data[i + 2] == '1') - 80208918: 06e00693 li a3,110 - 8020891c: 07300813 li a6,115 - 80208920: 41a888bb subw a7,a7,s10 - 80208924: 03100313 li t1,49 - 80208928: a021 j 80208930 <_Z8fdt_inity+0x224> - for(uint32 i = 0; i < len; i++) - 8020892a: 0785 addi a5,a5,1 - 8020892c: fcf587e3 beq a1,a5,802088fa <_Z8fdt_inity+0x1ee> - if (data[i] == 'n' && data[i + 1] == 's' && data[i + 2] == '1') - 80208930: 0007c703 lbu a4,0(a5) - 80208934: fed71be3 bne a4,a3,8020892a <_Z8fdt_inity+0x21e> - 80208938: 0017c703 lbu a4,1(a5) - 8020893c: ff0717e3 bne a4,a6,8020892a <_Z8fdt_inity+0x21e> - 80208940: 00f8873b addw a4,a7,a5 - 80208944: 1702 slli a4,a4,0x20 - 80208946: 9301 srli a4,a4,0x20 - 80208948: 976a add a4,a4,s10 - 8020894a: 00074703 lbu a4,0(a4) - 8020894e: fc671ee3 bne a4,t1,8020892a <_Z8fdt_inity+0x21e> - g_uart_base = current_reg_addr; - 80208952: 01253023 sd s2,0(a0) - break; - 80208956: b755 j 802088fa <_Z8fdt_inity+0x1ee> - -0000000080208958 <_Z5panicPKc>: -extern "C" void kernelvec(); - -// Handle Function - -void panic(const char *s) -{ - 80208958: 1141 addi sp,sp,-16 - 8020895a: e022 sd s0,0(sp) - 8020895c: 842a mv s0,a0 - Drivers::uart_puts("\n\n!!! KERNEL PANIC !!!\n"); - 8020895e: 00009517 auipc a0,0x9 - 80208962: 6e250513 addi a0,a0,1762 # 80212040 -{ - 80208966: e406 sd ra,8(sp) - Drivers::uart_puts("\n\n!!! KERNEL PANIC !!!\n"); - 80208968: 402000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts(s); - 8020896c: 8522 mv a0,s0 - 8020896e: 3fc000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("\nSystem Halted.\n"); - 80208972: 00009517 auipc a0,0x9 - 80208976: 6e650513 addi a0,a0,1766 # 80212058 - 8020897a: 3f0000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - while (1) - 8020897e: a001 j 8020897e <_Z5panicPKc+0x26> - -0000000080208980 <_ZN4Trap4initEv>: - -namespace Trap -{ - void init() - { - Drivers::uart_puts("[Trap] Global init done.\n"); - 80208980: 00009517 auipc a0,0x9 - 80208984: 6f050513 addi a0,a0,1776 # 80212070 - 80208988: 3e20006f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -000000008020898c <_ZN4Trap8inithartEv>: - asm volatile("csrw stvec, %0" : : "r" (x)); - 8020898c: 0000c797 auipc a5,0xc - 80208990: 10c7b783 ld a5,268(a5) # 80214a98 <_GLOBAL_OFFSET_TABLE_+0x38> - 80208994: 10579073 csrw stvec,a5 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208998: 100027f3 csrr a5,sstatus - { - w_stvec((uint64)kernelvec); - - // Ensure that the S-Mode interrupt enable bit (SIE) is cleared during initialization - // Interrupt enabling will be done by the scheduler when the first process runs - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 8020899c: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 8020899e: 10079073 csrw sstatus,a5 - asm volatile("csrr %0, sie" : "=r" (x) ); - 802089a2: 104027f3 csrr a5,sie - - // Enable the external interrupt, clock interrupt, and software interrupt bits in S-Mode (in SIE register) - uint64 sie = r_sie(); - sie |= SIE_SEIE | SIE_STIE | SIE_SSIE; - 802089a6: 2227e793 ori a5,a5,546 - asm volatile("csrw sie, %0" : : "r" (x)); - 802089aa: 10479073 csrw sie,a5 - w_sie(sie); - - Drivers::uart_puts("[Trap] Hart initialized (stvec set).\n"); - 802089ae: 00009517 auipc a0,0x9 - 802089b2: 6e250513 addi a0,a0,1762 # 80212090 - 802089b6: 3b40006f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -00000000802089ba <_ZN4Trap7devintrEv>: - asm volatile("csrr %0, scause" : "=r" (x) ); - 802089ba: 142027f3 csrr a5,scause - Timer::tick(); - // w_sip(r_sip() & ~2); - return 2; - } - - return 0; - 802089be: 4501 li a0,0 - if (is_interrupt && code == 9) - 802089c0: 0007c363 bltz a5,802089c6 <_ZN4Trap7devintrEv+0xc> - } - 802089c4: 8082 ret - { - 802089c6: 1101 addi sp,sp,-32 - 802089c8: ec06 sd ra,24(sp) - uint64 code = scause & 0xff; - 802089ca: 0ff7f793 zext.b a5,a5 - if (is_interrupt && code == 9) - 802089ce: 4725 li a4,9 - 802089d0: 00e78863 beq a5,a4,802089e0 <_ZN4Trap7devintrEv+0x26> - else if (is_interrupt && code == 5) - 802089d4: 4715 li a4,5 - 802089d6: 02e78563 beq a5,a4,80208a00 <_ZN4Trap7devintrEv+0x46> - } - 802089da: 60e2 ld ra,24(sp) - 802089dc: 6105 addi sp,sp,32 - 802089de: 8082 ret - int irq = PLIC::claim(); - 802089e0: 75d000ef jal 8020993c <_ZN4PLIC5claimEv> - if (irq == 10) - 802089e4: 47a9 li a5,10 - 802089e6: 02f50663 beq a0,a5,80208a12 <_ZN4Trap7devintrEv+0x58> - else if (irq >= 1 && irq <= 8) - 802089ea: fff5079b addiw a5,a0,-1 - 802089ee: 471d li a4,7 - 802089f0: 00f77c63 bgeu a4,a5,80208a08 <_ZN4Trap7devintrEv+0x4e> - if (irq > 0) - 802089f4: 00a05463 blez a0,802089fc <_ZN4Trap7devintrEv+0x42> - PLIC::complete(irq); - 802089f8: 757000ef jal 8020994e <_ZN4PLIC8completeEi> - { - 802089fc: 4505 li a0,1 - 802089fe: bff1 j 802089da <_ZN4Trap7devintrEv+0x20> - Timer::tick(); - 80208a00: 85ffe0ef jal 8020725e <_ZN5Timer4tickEv> - return 2; - 80208a04: 4509 li a0,2 - 80208a06: bfd1 j 802089da <_ZN4Trap7devintrEv+0x20> - 80208a08: e42a sd a0,8(sp) - VirtIO::intr(); - 80208a0a: 4bf000ef jal 802096c8 <_ZN6VirtIO4intrEv> - if (irq > 0) - 80208a0e: 6522 ld a0,8(sp) - 80208a10: b7e5 j 802089f8 <_ZN4Trap7devintrEv+0x3e> - 80208a12: e42a sd a0,8(sp) - Drivers::uart_intr(); - 80208a14: 588000ef jal 80208f9c <_ZN7Drivers9uart_intrEv> - if (irq > 0) - 80208a18: 6522 ld a0,8(sp) - 80208a1a: bff9 j 802089f8 <_ZN4Trap7devintrEv+0x3e> - -0000000080208a1c : -} - -// Exception Handling Entry - -extern "C" void kerneltrap(struct Trapframe *tf) -{ - 80208a1c: 7179 addi sp,sp,-48 - 80208a1e: f406 sd ra,40(sp) - 80208a20: f022 sd s0,32(sp) - 80208a22: ec26 sd s1,24(sp) - 80208a24: e84a sd s2,16(sp) - asm volatile("csrr %0, sepc" : "=r" (x) ); - 80208a26: 141024f3 csrr s1,sepc - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208a2a: 10002473 csrr s0,sstatus - asm volatile("csrr %0, scause" : "=r" (x) ); - 80208a2e: 14202973 csrr s2,scause - uint64 sepc = r_sepc(); - uint64 sstatus = r_sstatus(); - uint64 scause = r_scause(); - - if ((sstatus & SSTATUS_SPP) == 0) - 80208a32: 10047793 andi a5,s0,256 - 80208a36: 0e078863 beqz a5,80208b26 - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208a3a: 100027f3 csrr a5,sstatus - return (x & SSTATUS_SIE) != 0; - 80208a3e: 8b89 andi a5,a5,2 - panic("kerneltrap: not from supervisor mode"); - - if (intr_get() != 0) - 80208a40: 0c079d63 bnez a5,80208b1a - asm volatile("csrr %0, scause" : "=r" (x) ); - 80208a44: 142027f3 csrr a5,scause - if (is_interrupt && code == 9) - 80208a48: 0607cc63 bltz a5,80208ac0 - panic("kerneltrap: interrupts enabled"); - - if (Trap::devintr() == 0) - { - Drivers::uart_puts("\n--- KERNEL EXCEPTION ---\n"); - 80208a4c: 00009517 auipc a0,0x9 - 80208a50: 6b450513 addi a0,a0,1716 # 80212100 - 80208a54: 316000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("scause: "); - 80208a58: 00009517 auipc a0,0x9 - 80208a5c: 6c850513 addi a0,a0,1736 # 80212120 - 80208a60: 30a000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(scause); - 80208a64: 854a mv a0,s2 - 80208a66: 46c000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n"); - 80208a6a: 00009517 auipc a0,0x9 - 80208a6e: db650513 addi a0,a0,-586 # 80211820 - 80208a72: 2f8000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("sepc: "); - 80208a76: 00009517 auipc a0,0x9 - 80208a7a: 6ba50513 addi a0,a0,1722 # 80212130 - 80208a7e: 2ec000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(sepc); - 80208a82: 8526 mv a0,s1 - 80208a84: 44e000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n"); - 80208a88: 00009517 auipc a0,0x9 - 80208a8c: d9850513 addi a0,a0,-616 # 80211820 - 80208a90: 2da000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("stval: "); - 80208a94: 00009517 auipc a0,0x9 - 80208a98: 6ac50513 addi a0,a0,1708 # 80212140 - 80208a9c: 2ce000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - asm volatile("csrr %0, stval" : "=r" (x) ); - 80208aa0: 14302573 csrr a0,stval - Drivers::print_hex(r_stval()); - 80208aa4: 42e000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n"); - 80208aa8: 00009517 auipc a0,0x9 - 80208aac: d7850513 addi a0,a0,-648 # 80211820 - 80208ab0: 2ba000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - panic("kerneltrap exception"); - 80208ab4: 00009517 auipc a0,0x9 - 80208ab8: 69c50513 addi a0,a0,1692 # 80212150 - 80208abc: e9dff0ef jal 80208958 <_Z5panicPKc> - uint64 code = scause & 0xff; - 80208ac0: 0ff7f793 zext.b a5,a5 - if (is_interrupt && code == 9) - 80208ac4: 4725 li a4,9 - 80208ac6: 02e78163 beq a5,a4,80208ae8 - else if (is_interrupt && code == 5) - 80208aca: 4715 li a4,5 - 80208acc: f8e790e3 bne a5,a4,80208a4c - Timer::tick(); - 80208ad0: f8efe0ef jal 8020725e <_ZN5Timer4tickEv> - asm volatile("csrw sepc, %0" : : "r" (x)); - 80208ad4: 14149073 csrw sepc,s1 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80208ad8: 10041073 csrw sstatus,s0 - } - - w_sepc(sepc); - w_sstatus(sstatus); -} - 80208adc: 70a2 ld ra,40(sp) - 80208ade: 7402 ld s0,32(sp) - 80208ae0: 64e2 ld s1,24(sp) - 80208ae2: 6942 ld s2,16(sp) - 80208ae4: 6145 addi sp,sp,48 - 80208ae6: 8082 ret - int irq = PLIC::claim(); - 80208ae8: 655000ef jal 8020993c <_ZN4PLIC5claimEv> - if (irq == 10) - 80208aec: 47a9 li a5,10 - 80208aee: 02f50163 beq a0,a5,80208b10 - else if (irq >= 1 && irq <= 8) - 80208af2: fff5079b addiw a5,a0,-1 - 80208af6: 471d li a4,7 - 80208af8: 00f77763 bgeu a4,a5,80208b06 - if (irq > 0) - 80208afc: fca05ce3 blez a0,80208ad4 - PLIC::complete(irq); - 80208b00: 64f000ef jal 8020994e <_ZN4PLIC8completeEi> - 80208b04: bfc1 j 80208ad4 - 80208b06: e42a sd a0,8(sp) - VirtIO::intr(); - 80208b08: 3c1000ef jal 802096c8 <_ZN6VirtIO4intrEv> - if (irq > 0) - 80208b0c: 6522 ld a0,8(sp) - 80208b0e: bfcd j 80208b00 - 80208b10: e42a sd a0,8(sp) - Drivers::uart_intr(); - 80208b12: 48a000ef jal 80208f9c <_ZN7Drivers9uart_intrEv> - if (irq > 0) - 80208b16: 6522 ld a0,8(sp) - 80208b18: b7e5 j 80208b00 - panic("kerneltrap: interrupts enabled"); - 80208b1a: 00009517 auipc a0,0x9 - 80208b1e: 5c650513 addi a0,a0,1478 # 802120e0 - 80208b22: e37ff0ef jal 80208958 <_Z5panicPKc> - panic("kerneltrap: not from supervisor mode"); - 80208b26: 00009517 auipc a0,0x9 - 80208b2a: 59250513 addi a0,a0,1426 # 802120b8 - 80208b2e: e2bff0ef jal 80208958 <_Z5panicPKc> - -0000000080208b32 : - -extern "C" void usertrap() -{ - 80208b32: 1101 addi sp,sp,-32 - 80208b34: ec06 sd ra,24(sp) - 80208b36: e822 sd s0,16(sp) - 80208b38: e426 sd s1,8(sp) - 80208b3a: e04a sd s2,0(sp) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208b3c: 100027f3 csrr a5,sstatus - // Drivers::uart_puts("[Debug] Entered usertrap!\n"); - int which_dev = 0; - - if ((r_sstatus() & SSTATUS_SPP) != 0) - 80208b40: 1007f793 andi a5,a5,256 - 80208b44: 14079763 bnez a5,80208c92 - asm volatile("csrw stvec, %0" : : "r" (x)); - 80208b48: 0000c797 auipc a5,0xc - 80208b4c: f507b783 ld a5,-176(a5) # 80214a98 <_GLOBAL_OFFSET_TABLE_+0x38> - 80208b50: 10579073 csrw stvec,a5 - panic("usertrap: not from user mode"); - - w_stvec((uint64)kernelvec); - - struct Proc *p = myproc(); - 80208b54: f2ffc0ef jal 80205a82 <_Z6myprocv> - 80208b58: 842a mv s0,a0 - if (!p) - 80208b5a: 14050263 beqz a0,80208c9e - panic("usertrap: no process"); - - p->tf->epc = r_sepc(); - 80208b5e: 7938 ld a4,112(a0) - asm volatile("csrr %0, sepc" : "=r" (x) ); - 80208b60: 141027f3 csrr a5,sepc - 80208b64: ef1c sd a5,24(a4) - asm volatile("csrr %0, scause" : "=r" (x) ); - 80208b66: 142024f3 csrr s1,scause - asm volatile("csrr %0, stval" : "=r" (x) ); - 80208b6a: 14302973 csrr s2,stval - - uint64 scause = r_scause(); - uint64 stval = r_stval(); - - if (scause == 8) // Syscall - 80208b6e: 46a1 li a3,8 - 80208b70: 04d48b63 beq s1,a3,80208bc6 - p->tf->epc += 4; - intr_on(); - syscall(); - intr_off(); - } - else if (scause == 15) // Store Page Fault - 80208b74: 47bd li a5,15 - 80208b76: 02f48463 beq s1,a5,80208b9e - Drivers::uart_puts("\n"); - p->state = ZOMBIE; - ProcManager::exit(-1); - } - } - else if ((which_dev = Trap::devintr()) != 0) - 80208b7a: e41ff0ef jal 802089ba <_ZN4Trap7devintrEv> - 80208b7e: c559 beqz a0,80208c0c - { - if (which_dev == 2) - 80208b80: 4789 li a5,2 - 80208b82: 0ef50e63 beq a0,a5,80208c7e - Drivers::uart_puts("\n"); - p->state = ZOMBIE; - ProcManager::exit(-1); - } - - if (p->state == ZOMBIE) - 80208b86: 08042703 lw a4,128(s0) - 80208b8a: 4795 li a5,5 - 80208b8c: 06f70663 beq a4,a5,80208bf8 - ProcManager::exit(-1); - - usertrapret(); - 80208b90: 6442 ld s0,16(sp) - 80208b92: 60e2 ld ra,24(sp) - 80208b94: 64a2 ld s1,8(sp) - 80208b96: 6902 ld s2,0(sp) - 80208b98: 6105 addi sp,sp,32 - usertrapret(); - 80208b9a: d11fe06f j 802078aa <_Z11usertrapretv> - if (VM::handle_cow_fault(p->pagetable, PGROUNDDOWN(stval)) != 0) - 80208b9e: 7d28 ld a0,120(a0) - 80208ba0: 75fd lui a1,0xfffff - 80208ba2: 00b975b3 and a1,s2,a1 - 80208ba6: a27fd0ef jal 802065cc <_ZN2VM16handle_cow_faultEPyy> - 80208baa: dd71 beqz a0,80208b86 - uint64 pa = VM::walkaddr(p->pagetable, stval); - 80208bac: 7c28 ld a0,120(s0) - 80208bae: 85ca mv a1,s2 - 80208bb0: d05fd0ef jal 802068b4 <_ZN2VM8walkaddrEPyy> - if (pa == 0) - 80208bb4: 0c051863 bnez a0,80208c84 - Drivers::uart_puts("usertrap: Segmentation Fault (unmapped) at "); - 80208bb8: 00009517 auipc a0,0x9 - 80208bbc: 5e850513 addi a0,a0,1512 # 802121a0 - 80208bc0: 1aa000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - 80208bc4: a079 j 80208c52 - if (p->state == ZOMBIE) - 80208bc6: 08052603 lw a2,128(a0) - 80208bca: 4695 li a3,5 - 80208bcc: 0ad60363 beq a2,a3,80208c72 - p->tf->epc += 4; - 80208bd0: 0791 addi a5,a5,4 - 80208bd2: ef1c sd a5,24(a4) - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208bd4: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() | SSTATUS_SIE); - 80208bd8: 0027e793 ori a5,a5,2 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80208bdc: 10079073 csrw sstatus,a5 - syscall(); - 80208be0: d08fc0ef jal 802050e8 <_Z7syscallv> - asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80208be4: 100027f3 csrr a5,sstatus - w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 80208be8: 9bf5 andi a5,a5,-3 - asm volatile("csrw sstatus, %0" : : "r" (x)); - 80208bea: 10079073 csrw sstatus,a5 - if (p->state == ZOMBIE) - 80208bee: 08042703 lw a4,128(s0) - 80208bf2: 4795 li a5,5 - 80208bf4: f8f71ee3 bne a4,a5,80208b90 - ProcManager::exit(-1); - 80208bf8: 557d li a0,-1 - 80208bfa: d02ff0ef jal 802080fc <_ZN11ProcManager4exitEi> - 80208bfe: 6442 ld s0,16(sp) - 80208c00: 60e2 ld ra,24(sp) - 80208c02: 64a2 ld s1,8(sp) - 80208c04: 6902 ld s2,0(sp) - 80208c06: 6105 addi sp,sp,32 - usertrapret(); - 80208c08: ca3fe06f j 802078aa <_Z11usertrapretv> - Drivers::uart_puts("\nusertrap(): unexpected scause "); - 80208c0c: 00009517 auipc a0,0x9 - 80208c10: 5ec50513 addi a0,a0,1516 # 802121f8 - 80208c14: 156000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(scause); - 80208c18: 8526 mv a0,s1 - 80208c1a: 2b8000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts(" pid="); - 80208c1e: 00009517 auipc a0,0x9 - 80208c22: 5fa50513 addi a0,a0,1530 # 80212218 - 80208c26: 144000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_put_int(p->pid); - 80208c2a: 08442503 lw a0,132(s0) - 80208c2e: 19a000ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts(" sepc="); - 80208c32: 00009517 auipc a0,0x9 - 80208c36: 5ee50513 addi a0,a0,1518 # 80212220 - 80208c3a: 130000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(p->tf->epc); - 80208c3e: 783c ld a5,112(s0) - 80208c40: 6f88 ld a0,24(a5) - 80208c42: 290000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts(" stval="); - 80208c46: 00009517 auipc a0,0x9 - 80208c4a: 5e250513 addi a0,a0,1506 # 80212228 - 80208c4e: 11c000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(stval); - 80208c52: 854a mv a0,s2 - 80208c54: 27e000ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts("\n"); - 80208c58: 00009517 auipc a0,0x9 - 80208c5c: bc850513 addi a0,a0,-1080 # 80211820 - 80208c60: 10a000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - p->state = ZOMBIE; - 80208c64: 4795 li a5,5 - 80208c66: 08f42023 sw a5,128(s0) - ProcManager::exit(-1); - 80208c6a: 557d li a0,-1 - 80208c6c: c90ff0ef jal 802080fc <_ZN11ProcManager4exitEi> - 80208c70: bf19 j 80208b86 - ProcManager::exit(-1); - 80208c72: 557d li a0,-1 - 80208c74: c88ff0ef jal 802080fc <_ZN11ProcManager4exitEi> - p->tf->epc += 4; - 80208c78: 7838 ld a4,112(s0) - 80208c7a: 6f1c ld a5,24(a4) - 80208c7c: bf91 j 80208bd0 - ProcManager::yield(); - 80208c7e: 81aff0ef jal 80207c98 <_ZN11ProcManager5yieldEv> - 80208c82: b711 j 80208b86 - Drivers::uart_puts("usertrap: Protection Fault (or OOM) at "); - 80208c84: 00009517 auipc a0,0x9 - 80208c88: 54c50513 addi a0,a0,1356 # 802121d0 - 80208c8c: 0de000ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(stval); - 80208c90: b7c9 j 80208c52 - panic("usertrap: not from user mode"); - 80208c92: 00009517 auipc a0,0x9 - 80208c96: 4d650513 addi a0,a0,1238 # 80212168 - 80208c9a: cbfff0ef jal 80208958 <_Z5panicPKc> - panic("usertrap: no process"); - 80208c9e: 00009517 auipc a0,0x9 - 80208ca2: 4ea50513 addi a0,a0,1258 # 80212188 - 80208ca6: cb3ff0ef jal 80208958 <_Z5panicPKc> - -0000000080208caa <_ZN7Drivers9uart_initEv>: - } uart_rx; - - Spinlock uart_tx_lock; - - void uart_init() - { - 80208caa: 1141 addi sp,sp,-16 - 80208cac: e022 sd s0,0(sp) - uart_rx.lock.init("uart_rx"); - 80208cae: 0001e417 auipc s0,0x1e - 80208cb2: ffa40413 addi s0,s0,-6 # 80226ca8 <_ZN7Drivers7uart_rxE> - 80208cb6: 8522 mv a0,s0 - 80208cb8: 00009597 auipc a1,0x9 - 80208cbc: 57858593 addi a1,a1,1400 # 80212230 - { - 80208cc0: e406 sd ra,8(sp) - uart_rx.lock.init("uart_rx"); - 80208cc2: d19fc0ef jal 802059da <_ZN8Spinlock4initEPKc> - cons.lock.init("console"); - 80208cc6: 00009597 auipc a1,0x9 - 80208cca: 57258593 addi a1,a1,1394 # 80212238 - 80208cce: 0001e517 auipc a0,0x1e - 80208cd2: 07a50513 addi a0,a0,122 # 80226d48 <_ZN7Drivers4consE> - 80208cd6: d05fc0ef jal 802059da <_ZN8Spinlock4initEPKc> - uart_tx_lock.init("uart_tx"); - 80208cda: 00009597 auipc a1,0x9 - 80208cde: 56658593 addi a1,a1,1382 # 80212240 - 80208ce2: 0001e517 auipc a0,0x1e - 80208ce6: 10e50513 addi a0,a0,270 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80208cea: cf1fc0ef jal 802059da <_ZN8Spinlock4initEPKc> - uart_rx.r = 0; - uart_rx.w = 0; - - // Disable interrupts and configure - *(volatile uint8 *)(UART0 + IER) = 0x00; - 80208cee: 100007b7 lui a5,0x10000 - uart_rx.r = 0; - 80208cf2: 08043c23 sd zero,152(s0) - *(volatile uint8 *)(UART0 + IER) = 0x00; - 80208cf6: 000780a3 sb zero,1(a5) # 10000001 <_start-0x701fffff> - - // Enter baud rate setting mode (LCR_DLAB) = 0x80; - *(volatile uint8 *)(UART0 + LCR) = 0x80; - 80208cfa: 10000737 lui a4,0x10000 - 80208cfe: f8000693 li a3,-128 - 80208d02: 00d701a3 sb a3,3(a4) # 10000003 <_start-0x701ffffd> - *(volatile uint8 *)(UART0 + 0) = 0x03; // DLL: 38.4K baud - 80208d06: 460d li a2,3 - *(volatile uint8 *)(UART0 + IER) = 0x00; - 80208d08: 100006b7 lui a3,0x10000 - *(volatile uint8 *)(UART0 + 0) = 0x03; // DLL: 38.4K baud - 80208d0c: 00c68023 sb a2,0(a3) # 10000000 <_start-0x70200000> - *(volatile uint8 *)(UART0 + 1) = 0x00; // DLM - 80208d10: 000780a3 sb zero,1(a5) - - // Exit baud rate setting, set 8-bit word length, no parity - *(volatile uint8 *)(UART0 + LCR) = 0x03; - 80208d14: 00c701a3 sb a2,3(a4) - - // Reset and enable FIFO - *(volatile uint8 *)(UART0 + FCR) = 0x07; - 80208d18: 471d li a4,7 - 80208d1a: 00e68123 sb a4,2(a3) - - // Enable Receive Data Available Interrupt - *(volatile uint8 *)(UART0 + IER) = 0x01; - 80208d1e: 4705 li a4,1 - 80208d20: 00e780a3 sb a4,1(a5) - } - 80208d24: 60a2 ld ra,8(sp) - 80208d26: 6402 ld s0,0(sp) - 80208d28: 0141 addi sp,sp,16 - 80208d2a: 8082 ret - -0000000080208d2c <_ZN7Drivers9uart_putcEc>: - - void uart_putc(char c) - { - 80208d2c: 1141 addi sp,sp,-16 - 80208d2e: e022 sd s0,0(sp) - 80208d30: 842a mv s0,a0 - uart_tx_lock.acquire(); - 80208d32: 0001e517 auipc a0,0x1e - 80208d36: 0be50513 addi a0,a0,190 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - { - 80208d3a: e406 sd ra,8(sp) - uart_tx_lock.acquire(); - 80208d3c: e45fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208d40: 10000737 lui a4,0x10000 - 80208d44: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80208d46: 00074783 lbu a5,0(a4) - 80208d4a: 0207f793 andi a5,a5,32 - 80208d4e: dfe5 beqz a5,80208d46 <_ZN7Drivers9uart_putcEc+0x1a> - ; - *(volatile uint8 *)(UART0 + THR) = c; - 80208d50: 100007b7 lui a5,0x10000 - 80208d54: 00878023 sb s0,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - } - 80208d58: 6402 ld s0,0(sp) - 80208d5a: 60a2 ld ra,8(sp) - uart_tx_lock.release(); - 80208d5c: 0001e517 auipc a0,0x1e - 80208d60: 09450513 addi a0,a0,148 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - } - 80208d64: 0141 addi sp,sp,16 - uart_tx_lock.release(); - 80208d66: db3fc06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080208d6a <_ZN7Drivers9uart_putsEPKc>: - - void uart_puts(const char *s) - { - 80208d6a: 7179 addi sp,sp,-48 - 80208d6c: f406 sd ra,40(sp) - 80208d6e: e84a sd s2,16(sp) - while (*s) - 80208d70: 00054903 lbu s2,0(a0) - 80208d74: 04090663 beqz s2,80208dc0 <_ZN7Drivers9uart_putsEPKc+0x56> - 80208d78: f022 sd s0,32(sp) - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208d7a: 10000437 lui s0,0x10000 - 80208d7e: ec26 sd s1,24(sp) - 80208d80: e44e sd s3,8(sp) - 80208d82: e052 sd s4,0(sp) - 80208d84: 84aa mv s1,a0 - uart_tx_lock.acquire(); - 80208d86: 0001e997 auipc s3,0x1e - 80208d8a: 06a98993 addi s3,s3,106 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208d8e: 10000a37 lui s4,0x10000 - 80208d92: 0415 addi s0,s0,5 # 10000005 <_start-0x701ffffb> - uart_tx_lock.acquire(); - 80208d94: 854e mv a0,s3 - uart_putc(*s++); - 80208d96: 0485 addi s1,s1,1 - uart_tx_lock.acquire(); - 80208d98: de9fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208d9c: 00044783 lbu a5,0(s0) - 80208da0: 0207f793 andi a5,a5,32 - 80208da4: dfe5 beqz a5,80208d9c <_ZN7Drivers9uart_putsEPKc+0x32> - *(volatile uint8 *)(UART0 + THR) = c; - 80208da6: 012a0023 sb s2,0(s4) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80208daa: 854e mv a0,s3 - 80208dac: d6dfc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - while (*s) - 80208db0: 0004c903 lbu s2,0(s1) - 80208db4: fe0910e3 bnez s2,80208d94 <_ZN7Drivers9uart_putsEPKc+0x2a> - 80208db8: 7402 ld s0,32(sp) - 80208dba: 64e2 ld s1,24(sp) - 80208dbc: 69a2 ld s3,8(sp) - 80208dbe: 6a02 ld s4,0(sp) - } - 80208dc0: 70a2 ld ra,40(sp) - 80208dc2: 6942 ld s2,16(sp) - 80208dc4: 6145 addi sp,sp,48 - 80208dc6: 8082 ret - -0000000080208dc8 <_ZN7Drivers12uart_put_intEi>: - - void uart_put_int(int val) - { - 80208dc8: 715d addi sp,sp,-80 - 80208dca: e486 sd ra,72(sp) - char buf[16]; - int i = 0; - if (val == 0) - 80208dcc: c579 beqz a0,80208e9a <_ZN7Drivers12uart_put_intEi+0xd2> - 80208dce: e0a2 sd s0,64(sp) - 80208dd0: fc26 sd s1,56(sp) - 80208dd2: f84a sd s2,48(sp) - 80208dd4: f44e sd s3,40(sp) - 80208dd6: f052 sd s4,32(sp) - 80208dd8: ec56 sd s5,24(sp) - 80208dda: 842a mv s0,a0 - { - uart_puts("0"); - return; - } - if (val < 0) - 80208ddc: 08054263 bltz a0,80208e60 <_ZN7Drivers12uart_put_intEi+0x98> - 80208de0: 848a mv s1,sp - { - 80208de2: 87a6 mv a5,s1 - uart_puts("-"); - val = -val; - } - while (val > 0) - { - buf[i++] = (val % 10) + '0'; - 80208de4: 46a9 li a3,10 - 80208de6: 02d4673b remw a4,s0,a3 - 80208dea: 863e mv a2,a5 - while (val > 0) - 80208dec: 0785 addi a5,a5,1 - val /= 10; - 80208dee: 02d4443b divw s0,s0,a3 - buf[i++] = (val % 10) + '0'; - 80208df2: 0307071b addiw a4,a4,48 - 80208df6: fee78fa3 sb a4,-1(a5) - while (val > 0) - 80208dfa: f475 bnez s0,80208de6 <_ZN7Drivers12uart_put_intEi+0x1e> - 80208dfc: 409607bb subw a5,a2,s1 - 80208e00: 0017871b addiw a4,a5,1 - 80208e04: fff7079b addiw a5,a4,-1 - 80208e08: fff48a13 addi s4,s1,-1 - 80208e0c: 1782 slli a5,a5,0x20 - 80208e0e: 9a3a add s4,s4,a4 - 80208e10: 9381 srli a5,a5,0x20 - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208e12: 10000437 lui s0,0x10000 - 80208e16: 94ba add s1,s1,a4 - 80208e18: 40fa0a33 sub s4,s4,a5 - uart_tx_lock.acquire(); - 80208e1c: 0001e917 auipc s2,0x1e - 80208e20: fd490913 addi s2,s2,-44 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208e24: 10000ab7 lui s5,0x10000 - 80208e28: 0415 addi s0,s0,5 # 10000005 <_start-0x701ffffb> - uart_tx_lock.acquire(); - 80208e2a: 854a mv a0,s2 - } - while (i > 0) - { - uart_putc(buf[--i]); - 80208e2c: fff4c983 lbu s3,-1(s1) - uart_tx_lock.acquire(); - 80208e30: d51fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208e34: 00044783 lbu a5,0(s0) - 80208e38: 0207f793 andi a5,a5,32 - 80208e3c: dfe5 beqz a5,80208e34 <_ZN7Drivers12uart_put_intEi+0x6c> - *(volatile uint8 *)(UART0 + THR) = c; - 80208e3e: 013a8023 sb s3,0(s5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80208e42: 854a mv a0,s2 - while (i > 0) - 80208e44: 14fd addi s1,s1,-1 - uart_tx_lock.release(); - 80208e46: cd3fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - while (i > 0) - 80208e4a: fe9a10e3 bne s4,s1,80208e2a <_ZN7Drivers12uart_put_intEi+0x62> - 80208e4e: 6406 ld s0,64(sp) - } - } - 80208e50: 60a6 ld ra,72(sp) - 80208e52: 74e2 ld s1,56(sp) - 80208e54: 7942 ld s2,48(sp) - 80208e56: 79a2 ld s3,40(sp) - 80208e58: 7a02 ld s4,32(sp) - 80208e5a: 6ae2 ld s5,24(sp) - 80208e5c: 6161 addi sp,sp,80 - 80208e5e: 8082 ret - uart_tx_lock.acquire(); - 80208e60: 0001e517 auipc a0,0x1e - 80208e64: f9050513 addi a0,a0,-112 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80208e68: d19fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208e6c: 10000737 lui a4,0x10000 - 80208e70: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80208e72: 00074783 lbu a5,0(a4) - 80208e76: 0207f793 andi a5,a5,32 - 80208e7a: dfe5 beqz a5,80208e72 <_ZN7Drivers12uart_put_intEi+0xaa> - *(volatile uint8 *)(UART0 + THR) = c; - 80208e7c: 100007b7 lui a5,0x10000 - 80208e80: 02d00713 li a4,45 - 80208e84: 00e78023 sb a4,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80208e88: 0001e517 auipc a0,0x1e - 80208e8c: f6850513 addi a0,a0,-152 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80208e90: c89fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - val = -val; - 80208e94: 4080043b negw s0,s0 - while (val > 0) - 80208e98: b7a1 j 80208de0 <_ZN7Drivers12uart_put_intEi+0x18> - uart_tx_lock.acquire(); - 80208e9a: 0001e517 auipc a0,0x1e - 80208e9e: f5650513 addi a0,a0,-170 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80208ea2: cdffc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208ea6: 10000737 lui a4,0x10000 - 80208eaa: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80208eac: 00074783 lbu a5,0(a4) - 80208eb0: 0207f793 andi a5,a5,32 - 80208eb4: dfe5 beqz a5,80208eac <_ZN7Drivers12uart_put_intEi+0xe4> - *(volatile uint8 *)(UART0 + THR) = c; - 80208eb6: 100007b7 lui a5,0x10000 - 80208eba: 03000713 li a4,48 - 80208ebe: 00e78023 sb a4,0(a5) # 10000000 <_start-0x70200000> - } - 80208ec2: 60a6 ld ra,72(sp) - uart_tx_lock.release(); - 80208ec4: 0001e517 auipc a0,0x1e - 80208ec8: f2c50513 addi a0,a0,-212 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - } - 80208ecc: 6161 addi sp,sp,80 - uart_tx_lock.release(); - 80208ece: c4bfc06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080208ed2 <_ZN7Drivers9print_hexEy>: - - void print_hex(uint64 val) - { - char hex[] = "0123456789ABCDEF"; - 80208ed2: 00009797 auipc a5,0x9 - 80208ed6: 37e78793 addi a5,a5,894 # 80212250 - 80208eda: 6394 ld a3,0(a5) - 80208edc: 6798 ld a4,8(a5) - 80208ede: 0107c783 lbu a5,16(a5) - { - 80208ee2: 711d addi sp,sp,-96 - 80208ee4: e8a2 sd s0,80(sp) - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208ee6: 10000437 lui s0,0x10000 - { - 80208eea: e4a6 sd s1,72(sp) - 80208eec: e0ca sd s2,64(sp) - 80208eee: fc4e sd s3,56(sp) - 80208ef0: f852 sd s4,48(sp) - 80208ef2: f456 sd s5,40(sp) - 80208ef4: ec86 sd ra,88(sp) - 80208ef6: f05a sd s6,32(sp) - 80208ef8: 89aa mv s3,a0 - char hex[] = "0123456789ABCDEF"; - 80208efa: e436 sd a3,8(sp) - 80208efc: e83a sd a4,16(sp) - 80208efe: 00f10c23 sb a5,24(sp) - while (*s) - 80208f02: 03000913 li s2,48 - char hex[] = "0123456789ABCDEF"; - 80208f06: 00009497 auipc s1,0x9 - 80208f0a: 34248493 addi s1,s1,834 # 80212248 - uart_tx_lock.acquire(); - 80208f0e: 0001ea17 auipc s4,0x1e - 80208f12: ee2a0a13 addi s4,s4,-286 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208f16: 10000ab7 lui s5,0x10000 - 80208f1a: 0415 addi s0,s0,5 # 10000005 <_start-0x701ffffb> - uart_tx_lock.acquire(); - 80208f1c: 8552 mv a0,s4 - uart_putc(*s++); - 80208f1e: 0485 addi s1,s1,1 - uart_tx_lock.acquire(); - 80208f20: c61fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208f24: 00044783 lbu a5,0(s0) - 80208f28: 0207f793 andi a5,a5,32 - 80208f2c: dfe5 beqz a5,80208f24 <_ZN7Drivers9print_hexEy+0x52> - *(volatile uint8 *)(UART0 + THR) = c; - 80208f2e: 012a8023 sb s2,0(s5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80208f32: 8552 mv a0,s4 - 80208f34: be5fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - while (*s) - 80208f38: 0004c903 lbu s2,0(s1) - 80208f3c: fe0910e3 bnez s2,80208f1c <_ZN7Drivers9print_hexEy+0x4a> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208f40: 10000437 lui s0,0x10000 - uart_puts("0x"); - for (int i = 60; i >= 0; i -= 4) - 80208f44: 03c00493 li s1,60 - uart_tx_lock.acquire(); - 80208f48: 0001e917 auipc s2,0x1e - 80208f4c: ea890913 addi s2,s2,-344 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208f50: 10000b37 lui s6,0x10000 - 80208f54: 0415 addi s0,s0,5 # 10000005 <_start-0x701ffffb> - for (int i = 60; i >= 0; i -= 4) - 80208f56: 5af1 li s5,-4 - { - uart_putc(hex[(val >> i) & 0xF]); - 80208f58: 0099d7b3 srl a5,s3,s1 - 80208f5c: 8bbd andi a5,a5,15 - 80208f5e: 02078793 addi a5,a5,32 - 80208f62: 978a add a5,a5,sp - uart_tx_lock.acquire(); - 80208f64: 854a mv a0,s2 - uart_putc(hex[(val >> i) & 0xF]); - 80208f66: fe87ca03 lbu s4,-24(a5) - uart_tx_lock.acquire(); - 80208f6a: c17fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80208f6e: 00044783 lbu a5,0(s0) - 80208f72: 0207f793 andi a5,a5,32 - 80208f76: dfe5 beqz a5,80208f6e <_ZN7Drivers9print_hexEy+0x9c> - *(volatile uint8 *)(UART0 + THR) = c; - 80208f78: 014b0023 sb s4,0(s6) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80208f7c: 854a mv a0,s2 - for (int i = 60; i >= 0; i -= 4) - 80208f7e: 34f1 addiw s1,s1,-4 - uart_tx_lock.release(); - 80208f80: b99fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - for (int i = 60; i >= 0; i -= 4) - 80208f84: fd549ae3 bne s1,s5,80208f58 <_ZN7Drivers9print_hexEy+0x86> - } - } - 80208f88: 60e6 ld ra,88(sp) - 80208f8a: 6446 ld s0,80(sp) - 80208f8c: 64a6 ld s1,72(sp) - 80208f8e: 6906 ld s2,64(sp) - 80208f90: 79e2 ld s3,56(sp) - 80208f92: 7a42 ld s4,48(sp) - 80208f94: 7aa2 ld s5,40(sp) - 80208f96: 7b02 ld s6,32(sp) - 80208f98: 6125 addi sp,sp,96 - 80208f9a: 8082 ret - -0000000080208f9c <_ZN7Drivers9uart_intrEv>: - - void uart_intr() - { - 80208f9c: 1101 addi sp,sp,-32 - uart_rx.lock.acquire(); - 80208f9e: 0001e517 auipc a0,0x1e - 80208fa2: d0a50513 addi a0,a0,-758 # 80226ca8 <_ZN7Drivers7uart_rxE> - { - 80208fa6: e426 sd s1,8(sp) - 80208fa8: ec06 sd ra,24(sp) - - while (1) - { - if ((*(volatile uint8 *)(UART0 + LSR) & LSR_RX_READY) == 0) - 80208faa: 100004b7 lui s1,0x10000 - uart_rx.lock.acquire(); - 80208fae: bd3fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - if ((*(volatile uint8 *)(UART0 + LSR) & LSR_RX_READY) == 0) - 80208fb2: 0054c783 lbu a5,5(s1) # 10000005 <_start-0x701ffffb> - 80208fb6: 8b85 andi a5,a5,1 - 80208fb8: cf9d beqz a5,80208ff6 <_ZN7Drivers9uart_intrEv+0x5a> - 80208fba: e822 sd s0,16(sp) - 80208fbc: e04a sd s2,0(sp) - 80208fbe: 0495 addi s1,s1,5 - 80208fc0: 0001e417 auipc s0,0x1e - 80208fc4: ce840413 addi s0,s0,-792 # 80226ca8 <_ZN7Drivers7uart_rxE> - break; - - char c = *(volatile uint8 *)(UART0 + RHR); - 80208fc8: 10000937 lui s2,0x10000 - - uart_rx.buf[uart_rx.w % UART_RX_BUF_SIZE] = c; - 80208fcc: 09c42783 lw a5,156(s0) - char c = *(volatile uint8 *)(UART0 + RHR); - 80208fd0: 00094683 lbu a3,0(s2) # 10000000 <_start-0x70200000> - uart_rx.w++; - - ProcManager::wakeup(&uart_rx); - 80208fd4: 8522 mv a0,s0 - uart_rx.buf[uart_rx.w % UART_RX_BUF_SIZE] = c; - 80208fd6: 07f7f713 andi a4,a5,127 - 80208fda: 9722 add a4,a4,s0 - uart_rx.w++; - 80208fdc: 2785 addiw a5,a5,1 - 80208fde: 08f42e23 sw a5,156(s0) - uart_rx.buf[uart_rx.w % UART_RX_BUF_SIZE] = c; - 80208fe2: 00d70c23 sb a3,24(a4) - ProcManager::wakeup(&uart_rx); - 80208fe6: 864ff0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - if ((*(volatile uint8 *)(UART0 + LSR) & LSR_RX_READY) == 0) - 80208fea: 0004c783 lbu a5,0(s1) - 80208fee: 8b85 andi a5,a5,1 - 80208ff0: fff1 bnez a5,80208fcc <_ZN7Drivers9uart_intrEv+0x30> - 80208ff2: 6442 ld s0,16(sp) - 80208ff4: 6902 ld s2,0(sp) - } - - uart_rx.lock.release(); - } - 80208ff6: 60e2 ld ra,24(sp) - 80208ff8: 64a2 ld s1,8(sp) - uart_rx.lock.release(); - 80208ffa: 0001e517 auipc a0,0x1e - 80208ffe: cae50513 addi a0,a0,-850 # 80226ca8 <_ZN7Drivers7uart_rxE> - } - 80209002: 6105 addi sp,sp,32 - uart_rx.lock.release(); - 80209004: b15fc06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080209008 <_ZN7Drivers12console_readEyi>: - - // Modern console read: Line buffering + Editing Keys + Echo - int console_read(uint64 target, int len) - { - 80209008: 7159 addi sp,sp,-112 - 8020900a: f486 sd ra,104(sp) - 8020900c: e4ce sd s3,72(sp) - 8020900e: f45e sd s7,40(sp) - 80209010: f062 sd s8,32(sp) - 80209012: e86a sd s10,16(sp) - 80209014: 8bae mv s7,a1 - 80209016: 8c2a mv s8,a0 - struct Proc *p = myproc(); - 80209018: a6bfc0ef jal 80205a82 <_Z6myprocv> - 8020901c: 89aa mv s3,a0 - int target_idx = 0; - - cons.lock.acquire(); - 8020901e: 0001e517 auipc a0,0x1e - 80209022: d2a50513 addi a0,a0,-726 # 80226d48 <_ZN7Drivers4consE> - 80209026: b5bfc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - int target_idx = 0; - 8020902a: 4d01 li s10,0 - - while (target_idx < len) - 8020902c: 1d705363 blez s7,802091f2 <_ZN7Drivers12console_readEyi+0x1ea> - 80209030: f0a2 sd s0,96(sp) - 80209032: e8ca sd s2,80(sp) - 80209034: e0d2 sd s4,64(sp) - 80209036: fc56 sd s5,56(sp) - 80209038: f85a sd s6,48(sp) - 8020903a: eca6 sd s1,88(sp) - 8020903c: ec66 sd s9,24(sp) - 8020903e: 0001e417 auipc s0,0x1e - 80209042: c6a40413 addi s0,s0,-918 # 80226ca8 <_ZN7Drivers7uart_rxE> - 80209046: 000b8b1b sext.w s6,s7 - 8020904a: 00f10a13 addi s4,sp,15 - { - while (cons.r < cons.w) - { - char c = cons.buf[cons.r++ % sizeof(cons.buf)]; - cons.lock.release(); - 8020904e: 0001e917 auipc s2,0x1e - 80209052: cfa90913 addi s2,s2,-774 # 80226d48 <_ZN7Drivers4consE> - - if (VM::copyout(p->pagetable, target + target_idx, &c, 1) < 0) - return -1; - - target_idx++; - if (c == '\n') - 80209056: 4aa9 li s5,10 - while (cons.r < cons.w) - 80209058: 13842783 lw a5,312(s0) - 8020905c: 13c42703 lw a4,316(s0) - 80209060: 001d0c9b addiw s9,s10,1 - 80209064: 018d04b3 add s1,s10,s8 - 80209068: 02e7e563 bltu a5,a4,80209092 <_ZN7Drivers12console_readEyi+0x8a> - 8020906c: a89d j 802090e2 <_ZN7Drivers12console_readEyi+0xda> - if (c == '\n') - 8020906e: 00f14783 lbu a5,15(sp) - target_idx++; - 80209072: 000c8d1b sext.w s10,s9 - if (c == '\n') - 80209076: 05578763 beq a5,s5,802090c4 <_ZN7Drivers12console_readEyi+0xbc> - return target_idx; - if (target_idx == len) - 8020907a: 056c8563 beq s9,s6,802090c4 <_ZN7Drivers12console_readEyi+0xbc> - return target_idx; - - cons.lock.acquire(); - 8020907e: b03fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (cons.r < cons.w) - 80209082: 13842783 lw a5,312(s0) - 80209086: 13c42703 lw a4,316(s0) - 8020908a: 2c85 addiw s9,s9,1 - 8020908c: 0485 addi s1,s1,1 - 8020908e: 04e7fa63 bgeu a5,a4,802090e2 <_ZN7Drivers12console_readEyi+0xda> - char c = cons.buf[cons.r++ % sizeof(cons.buf)]; - 80209092: 07f7f713 andi a4,a5,127 - 80209096: 9722 add a4,a4,s0 - 80209098: 0b874703 lbu a4,184(a4) - 8020909c: 2785 addiw a5,a5,1 - cons.lock.release(); - 8020909e: 854a mv a0,s2 - char c = cons.buf[cons.r++ % sizeof(cons.buf)]; - 802090a0: 12f42c23 sw a5,312(s0) - 802090a4: 00e107a3 sb a4,15(sp) - cons.lock.release(); - 802090a8: a71fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - if (VM::copyout(p->pagetable, target + target_idx, &c, 1) < 0) - 802090ac: 0789b503 ld a0,120(s3) - 802090b0: 4685 li a3,1 - 802090b2: 8652 mv a2,s4 - 802090b4: 85a6 mv a1,s1 - 802090b6: decfd0ef jal 802066a2 <_ZN2VM7copyoutEPyyPcy> - 802090ba: 87aa mv a5,a0 - cons.lock.acquire(); - 802090bc: 854a mv a0,s2 - if (VM::copyout(p->pagetable, target + target_idx, &c, 1) < 0) - 802090be: fa07d8e3 bgez a5,8020906e <_ZN7Drivers12console_readEyi+0x66> - { - if (p->xstate) - { - uart_rx.lock.release(); - cons.lock.release(); - return -1; - 802090c2: 5d7d li s10,-1 - 802090c4: 7406 ld s0,96(sp) - 802090c6: 64e6 ld s1,88(sp) - 802090c8: 6946 ld s2,80(sp) - 802090ca: 6a06 ld s4,64(sp) - 802090cc: 7ae2 ld s5,56(sp) - 802090ce: 7b42 ld s6,48(sp) - 802090d0: 6ce2 ld s9,24(sp) - } - } - - cons.lock.release(); - return target_idx; - } - 802090d2: 70a6 ld ra,104(sp) - 802090d4: 69a6 ld s3,72(sp) - 802090d6: 7ba2 ld s7,40(sp) - 802090d8: 7c02 ld s8,32(sp) - 802090da: 856a mv a0,s10 - 802090dc: 6d42 ld s10,16(sp) - 802090de: 6165 addi sp,sp,112 - 802090e0: 8082 ret - uart_rx.lock.acquire(); - 802090e2: 0001e517 auipc a0,0x1e - 802090e6: bc650513 addi a0,a0,-1082 # 80226ca8 <_ZN7Drivers7uart_rxE> - 802090ea: a97fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (uart_rx.r == uart_rx.w) - 802090ee: 09842783 lw a5,152(s0) - 802090f2: 09c42703 lw a4,156(s0) - 802090f6: 04f71f63 bne a4,a5,80209154 <_ZN7Drivers12console_readEyi+0x14c> - cons.lock.release(); - 802090fa: 0001e497 auipc s1,0x1e - 802090fe: c4e48493 addi s1,s1,-946 # 80226d48 <_ZN7Drivers4consE> - ProcManager::sleep(&uart_rx, &uart_rx.lock); - 80209102: 0001ec97 auipc s9,0x1e - 80209106: ba6c8c93 addi s9,s9,-1114 # 80226ca8 <_ZN7Drivers7uart_rxE> - 8020910a: a01d j 80209130 <_ZN7Drivers12console_readEyi+0x128> - cons.lock.release(); - 8020910c: a0dfc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - ProcManager::sleep(&uart_rx, &uart_rx.lock); - 80209110: 85e6 mv a1,s9 - 80209112: 0001e517 auipc a0,0x1e - 80209116: b9650513 addi a0,a0,-1130 # 80226ca8 <_ZN7Drivers7uart_rxE> - 8020911a: e2dfe0ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - cons.lock.acquire(); - 8020911e: 8526 mv a0,s1 - 80209120: a61fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while (uart_rx.r == uart_rx.w) - 80209124: 09842783 lw a5,152(s0) - 80209128: 09c42703 lw a4,156(s0) - 8020912c: 02f71463 bne a4,a5,80209154 <_ZN7Drivers12console_readEyi+0x14c> - if (p->xstate) - 80209130: 0b89a783 lw a5,184(s3) - cons.lock.release(); - 80209134: 8526 mv a0,s1 - if (p->xstate) - 80209136: dbf9 beqz a5,8020910c <_ZN7Drivers12console_readEyi+0x104> - uart_rx.lock.release(); - 80209138: 0001e517 auipc a0,0x1e - 8020913c: b7050513 addi a0,a0,-1168 # 80226ca8 <_ZN7Drivers7uart_rxE> - 80209140: 9d9fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - cons.lock.release(); - 80209144: 0001e517 auipc a0,0x1e - 80209148: c0450513 addi a0,a0,-1020 # 80226d48 <_ZN7Drivers4consE> - 8020914c: 9cdfc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return -1; - 80209150: 5d7d li s10,-1 - 80209152: bf8d j 802090c4 <_ZN7Drivers12console_readEyi+0xbc> - char c = uart_rx.buf[uart_rx.r++ % UART_RX_BUF_SIZE]; - 80209154: 07f7f713 andi a4,a5,127 - 80209158: 9722 add a4,a4,s0 - 8020915a: 2785 addiw a5,a5,1 - 8020915c: 01874483 lbu s1,24(a4) - uart_rx.lock.release(); - 80209160: 0001e517 auipc a0,0x1e - 80209164: b4850513 addi a0,a0,-1208 # 80226ca8 <_ZN7Drivers7uart_rxE> - char c = uart_rx.buf[uart_rx.r++ % UART_RX_BUF_SIZE]; - 80209168: 08f42c23 sw a5,152(s0) - uart_rx.lock.release(); - 8020916c: 9adfc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - if (c == 127 || c == '\b') - 80209170: 07f00793 li a5,127 - 80209174: 08f48663 beq s1,a5,80209200 <_ZN7Drivers12console_readEyi+0x1f8> - 80209178: 47a1 li a5,8 - 8020917a: 08f48363 beq s1,a5,80209200 <_ZN7Drivers12console_readEyi+0x1f8> - if (c == '\r') - 8020917e: 47b5 li a5,13 - 80209180: 12f48863 beq s1,a5,802092b0 <_ZN7Drivers12console_readEyi+0x2a8> - uart_tx_lock.acquire(); - 80209184: 0001e517 auipc a0,0x1e - 80209188: c6c50513 addi a0,a0,-916 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 8020918c: 9f5fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80209190: 10000737 lui a4,0x10000 - 80209194: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80209196: 00074783 lbu a5,0(a4) - 8020919a: 0207f793 andi a5,a5,32 - 8020919e: dfe5 beqz a5,80209196 <_ZN7Drivers12console_readEyi+0x18e> - *(volatile uint8 *)(UART0 + THR) = c; - 802091a0: 100007b7 lui a5,0x10000 - 802091a4: 00978023 sb s1,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 802091a8: 0001e517 auipc a0,0x1e - 802091ac: c4850513 addi a0,a0,-952 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 802091b0: 969fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - cons.buf[cons.e++ % sizeof(cons.buf)] = c; - 802091b4: 14042783 lw a5,320(s0) - if (c == '\n' || cons.e == cons.w + sizeof(cons.buf)) - 802091b8: 46a9 li a3,10 - cons.buf[cons.e++ % sizeof(cons.buf)] = c; - 802091ba: 07f7f713 andi a4,a5,127 - 802091be: 9722 add a4,a4,s0 - 802091c0: 2785 addiw a5,a5,1 - 802091c2: 14f42023 sw a5,320(s0) - 802091c6: 0a970c23 sb s1,184(a4) - if (c == '\n' || cons.e == cons.w + sizeof(cons.buf)) - 802091ca: 0ed48563 beq s1,a3,802092b4 <_ZN7Drivers12console_readEyi+0x2ac> - 802091ce: 13c46703 lwu a4,316(s0) - 802091d2: 02079693 slli a3,a5,0x20 - 802091d6: 9281 srli a3,a3,0x20 - 802091d8: 08070713 addi a4,a4,128 - 802091dc: 0ce68c63 beq a3,a4,802092b4 <_ZN7Drivers12console_readEyi+0x2ac> - while (target_idx < len) - 802091e0: e77d4ce3 blt s10,s7,80209058 <_ZN7Drivers12console_readEyi+0x50> - 802091e4: 7406 ld s0,96(sp) - 802091e6: 64e6 ld s1,88(sp) - 802091e8: 6946 ld s2,80(sp) - 802091ea: 6a06 ld s4,64(sp) - 802091ec: 7ae2 ld s5,56(sp) - 802091ee: 7b42 ld s6,48(sp) - 802091f0: 6ce2 ld s9,24(sp) - cons.lock.release(); - 802091f2: 0001e517 auipc a0,0x1e - 802091f6: b5650513 addi a0,a0,-1194 # 80226d48 <_ZN7Drivers4consE> - 802091fa: 91ffc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - return target_idx; - 802091fe: bdd1 j 802090d2 <_ZN7Drivers12console_readEyi+0xca> - if (cons.e != cons.w) - 80209200: 14042783 lw a5,320(s0) - 80209204: 13c42703 lw a4,316(s0) - 80209208: fcf70ce3 beq a4,a5,802091e0 <_ZN7Drivers12console_readEyi+0x1d8> - cons.e--; - 8020920c: 37fd addiw a5,a5,-1 - uart_tx_lock.acquire(); - 8020920e: 0001e517 auipc a0,0x1e - 80209212: be250513 addi a0,a0,-1054 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - cons.e--; - 80209216: 14f42023 sw a5,320(s0) - uart_tx_lock.acquire(); - 8020921a: 967fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 8020921e: 10000737 lui a4,0x10000 - 80209222: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80209224: 00074783 lbu a5,0(a4) - 80209228: 0207f793 andi a5,a5,32 - 8020922c: dfe5 beqz a5,80209224 <_ZN7Drivers12console_readEyi+0x21c> - *(volatile uint8 *)(UART0 + THR) = c; - 8020922e: 4721 li a4,8 - 80209230: 100007b7 lui a5,0x10000 - 80209234: 00e78023 sb a4,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 80209238: 0001e517 auipc a0,0x1e - 8020923c: bb850513 addi a0,a0,-1096 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80209240: 8d9fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - uart_tx_lock.acquire(); - 80209244: 0001e517 auipc a0,0x1e - 80209248: bac50513 addi a0,a0,-1108 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 8020924c: 935fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80209250: 10000737 lui a4,0x10000 - 80209254: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 80209256: 00074783 lbu a5,0(a4) - 8020925a: 0207f793 andi a5,a5,32 - 8020925e: dfe5 beqz a5,80209256 <_ZN7Drivers12console_readEyi+0x24e> - *(volatile uint8 *)(UART0 + THR) = c; - 80209260: 02000713 li a4,32 - 80209264: 100007b7 lui a5,0x10000 - 80209268: 00e78023 sb a4,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 8020926c: 0001e517 auipc a0,0x1e - 80209270: b8450513 addi a0,a0,-1148 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80209274: 8a5fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - uart_tx_lock.acquire(); - 80209278: 0001e517 auipc a0,0x1e - 8020927c: b7850513 addi a0,a0,-1160 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 80209280: 901fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) - 80209284: 10000737 lui a4,0x10000 - 80209288: 0715 addi a4,a4,5 # 10000005 <_start-0x701ffffb> - 8020928a: 00074783 lbu a5,0(a4) - 8020928e: 0207f793 andi a5,a5,32 - 80209292: dfe5 beqz a5,8020928a <_ZN7Drivers12console_readEyi+0x282> - *(volatile uint8 *)(UART0 + THR) = c; - 80209294: 100007b7 lui a5,0x10000 - 80209298: 4721 li a4,8 - 8020929a: 00e78023 sb a4,0(a5) # 10000000 <_start-0x70200000> - uart_tx_lock.release(); - 8020929e: 0001e517 auipc a0,0x1e - 802092a2: b5250513 addi a0,a0,-1198 # 80226df0 <_ZN7Drivers12uart_tx_lockE> - 802092a6: 873fc0ef jal 80205b18 <_ZN8Spinlock7releaseEv> - while (target_idx < len) - 802092aa: db7d47e3 blt s10,s7,80209058 <_ZN7Drivers12console_readEyi+0x50> - 802092ae: bf1d j 802091e4 <_ZN7Drivers12console_readEyi+0x1dc> - c = '\n'; - 802092b0: 44a9 li s1,10 - 802092b2: bdc9 j 80209184 <_ZN7Drivers12console_readEyi+0x17c> - ProcManager::wakeup(&cons); - 802092b4: 0001e517 auipc a0,0x1e - 802092b8: a9450513 addi a0,a0,-1388 # 80226d48 <_ZN7Drivers4consE> - cons.w = cons.e; - 802092bc: 12f42e23 sw a5,316(s0) - ProcManager::wakeup(&cons); - 802092c0: d8bfe0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - while (target_idx < len) - 802092c4: d97d4ae3 blt s10,s7,80209058 <_ZN7Drivers12console_readEyi+0x50> - 802092c8: bf31 j 802091e4 <_ZN7Drivers12console_readEyi+0x1dc> - -00000000802092ca <_GLOBAL__sub_I__ZN7Drivers12uart_tx_lockE>: - 802092ca: 0001e797 auipc a5,0x1e - 802092ce: 9de78793 addi a5,a5,-1570 # 80226ca8 <_ZN7Drivers7uart_rxE> - 802092d2: 0a07a023 sw zero,160(a5) - 802092d6: 00008717 auipc a4,0x8 - 802092da: 4b270713 addi a4,a4,1202 # 80211788 - 802092de: 0007a023 sw zero,0(a5) - 802092e2: f7d8 sd a4,168(a5) - 802092e4: 0a07b823 sd zero,176(a5) - 802092e8: e798 sd a4,8(a5) - 802092ea: 0007b823 sd zero,16(a5) - 802092ee: 1407a423 sw zero,328(a5) - 802092f2: 14e7b823 sd a4,336(a5) - 802092f6: 1407bc23 sd zero,344(a5) - 802092fa: 8082 ret - -00000000802092fc <_ZN6VirtIO4initEv>: - - Spinlock lock; - } disk; - - void init() - { - 802092fc: 1101 addi sp,sp,-32 - disk.lock.init("virtio_disk"); - 802092fe: 00009597 auipc a1,0x9 - 80209302: f6a58593 addi a1,a1,-150 # 80212268 - 80209306: 0001e517 auipc a0,0x1e - 8020930a: c1250513 addi a0,a0,-1006 # 80226f18 <_ZN6VirtIO4diskE+0x110> - { - 8020930e: e822 sd s0,16(sp) - 80209310: e426 sd s1,8(sp) - 80209312: ec06 sd ra,24(sp) - disk.lock.init("virtio_disk"); - 80209314: ec6fc0ef jal 802059da <_ZN8Spinlock4initEPKc> - 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 - 80209318: 74727737 lui a4,0x74727 - for (uint64 addr = 0x10001000; addr < 0x10009000; addr += 0x1000) - 8020931c: 10001437 lui s0,0x10001 - if (*magic == 0x74726976 && *dev_id == 2) // ID 2 = Block Device - 80209320: 97670713 addi a4,a4,-1674 # 74726976 <_start-0xbad968a> - 80209324: 4489 li s1,2 - for (uint64 addr = 0x10001000; addr < 0x10009000; addr += 0x1000) - 80209326: 6605 lui a2,0x1 - 80209328: 100096b7 lui a3,0x10009 - 8020932c: a021 j 80209334 <_ZN6VirtIO4initEv+0x38> - 8020932e: 9432 add s0,s0,a2 - 80209330: 1ad40663 beq s0,a3,802094dc <_ZN6VirtIO4initEv+0x1e0> - if (*magic == 0x74726976 && *dev_id == 2) // ID 2 = Block Device - 80209334: 401c lw a5,0(s0) - 80209336: fee79ce3 bne a5,a4,8020932e <_ZN6VirtIO4initEv+0x32> - 8020933a: 441c lw a5,8(s0) - 8020933c: fe9799e3 bne a5,s1,8020932e <_ZN6VirtIO4initEv+0x32> - { - virtio_base = addr; - 80209340: e04a sd s2,0(sp) - found = true; - Drivers::uart_puts(ANSI_GREEN "[VirtIO] Found Block Device @ "); - 80209342: 00009517 auipc a0,0x9 - 80209346: f3650513 addi a0,a0,-202 # 80212278 - virtio_base = addr; - 8020934a: 0000b917 auipc s2,0xb - 8020934e: 70e90913 addi s2,s2,1806 # 80214a58 <_ZL11virtio_base> - 80209352: 00893023 sd s0,0(s2) - Drivers::uart_puts(ANSI_GREEN "[VirtIO] Found Block Device @ "); - 80209356: a15ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::print_hex(addr); - 8020935a: 8522 mv a0,s0 - 8020935c: b77ff0ef jal 80208ed2 <_ZN7Drivers9print_hexEy> - Drivers::uart_puts(ANSI_RESET "\n"); - 80209360: 00009517 auipc a0,0x9 - 80209364: f4050513 addi a0,a0,-192 # 802122a0 - 80209368: a03ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - return reinterpret_cast(virtio_base + offset); - 8020936c: 00093783 ld a5,0(s2) - 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) - 80209370: 43d8 lw a4,4(a5) - 80209372: 00970a63 beq a4,s1,80209386 <_ZN6VirtIO4initEv+0x8a> - { - Drivers::uart_puts(ANSI_YELLOW "[VirtIO] Warning: Legacy device detected (expected v2).\n" ANSI_RESET); - 80209376: 00009517 auipc a0,0x9 - 8020937a: f6a50513 addi a0,a0,-150 # 802122e0 - 8020937e: 9edff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - return reinterpret_cast(virtio_base + offset); - 80209382: 00093783 ld a5,0(s2) - } - - // 3. Reset Device - *REG(VIRTIO_MMIO_STATUS) = 0; - 80209386: 0607a823 sw zero,112(a5) - - // 4. Set ACKNOWLEDGE & DRIVER status - uint32 status = *REG(VIRTIO_MMIO_STATUS); - 8020938a: 5bb4 lw a3,112(a5) - // 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; - 8020938c: 4705 li a4,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"); - 8020938e: 00009517 auipc a0,0x9 - 80209392: f9a50513 addi a0,a0,-102 # 80212328 - status |= VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER; - 80209396: 0036e613 ori a2,a3,3 - *REG(VIRTIO_MMIO_STATUS) = status; - 8020939a: dbb0 sw a2,112(a5) - *REG(VIRTIO_MMIO_DEVICE_FEATURES_SEL) = 0; - 8020939c: 0007aa23 sw zero,20(a5) - uint32 device_features_lo = *REG(VIRTIO_MMIO_DEVICE_FEATURES); - 802093a0: 4b90 lw a2,16(a5) - *REG(VIRTIO_MMIO_DEVICE_FEATURES_SEL) = 1; - 802093a2: cbd8 sw a4,20(a5) - uint32 device_features_hi = *REG(VIRTIO_MMIO_DEVICE_FEATURES); - 802093a4: 4b90 lw a2,16(a5) - *REG(VIRTIO_MMIO_DRIVER_FEATURES_SEL) = 0; - 802093a6: 0207a223 sw zero,36(a5) - *REG(VIRTIO_MMIO_DRIVER_FEATURES) = 0; - 802093aa: 0207a023 sw zero,32(a5) - *REG(VIRTIO_MMIO_DRIVER_FEATURES_SEL) = 1; - 802093ae: d3d8 sw a4,36(a5) - *REG(VIRTIO_MMIO_DRIVER_FEATURES) = 1; - 802093b0: d398 sw a4,32(a5) - status |= VIRTIO_CONFIG_S_FEATURES_OK; - 802093b2: 00b6e713 ori a4,a3,11 - *REG(VIRTIO_MMIO_STATUS) = status; - 802093b6: dbb8 sw a4,112(a5) - if (!(*REG(VIRTIO_MMIO_STATUS) & VIRTIO_CONFIG_S_FEATURES_OK)) - 802093b8: 5bb8 lw a4,112(a5) - uint32 status = *REG(VIRTIO_MMIO_STATUS); - 802093ba: 0006849b sext.w s1,a3 - if (!(*REG(VIRTIO_MMIO_STATUS) & VIRTIO_CONFIG_S_FEATURES_OK)) - 802093be: 8b21 andi a4,a4,8 - 802093c0: 10070763 beqz a4,802094ce <_ZN6VirtIO4initEv+0x1d2> - return; - } - - // 6. Queue Configuration - *REG(VIRTIO_MMIO_QUEUE_SEL) = 0; - 802093c4: 0207a823 sw zero,48(a5) - if (*REG(VIRTIO_MMIO_QUEUE_READY)) - 802093c8: 43f8 lw a4,68(a5) - 802093ca: 12071363 bnez a4,802094f0 <_ZN6VirtIO4initEv+0x1f4> - { - Drivers::uart_puts("VirtIO: Queue 0 not ready.\n"); - } - - uint32 max_queue = *REG(VIRTIO_MMIO_QUEUE_NUM_MAX); - 802093ce: 5bd4 lw a3,52(a5) - if (max_queue < NUM_DESCS) - 802093d0: 471d li a4,7 - { - Drivers::uart_puts("VirtIO: Queue size too small.\n"); - 802093d2: 00009517 auipc a0,0x9 - 802093d6: f9e50513 addi a0,a0,-98 # 80212370 - if (max_queue < NUM_DESCS) - 802093da: 0ed77a63 bgeu a4,a3,802094ce <_ZN6VirtIO4initEv+0x1d2> - return; - } - - *REG(VIRTIO_MMIO_QUEUE_NUM) = NUM_DESCS; - 802093de: 4721 li a4,8 - 802093e0: df98 sw a4,56(a5) - - // Allocate Memory for VirtQueues - void *ptr = PMM::alloc_pages(1); // 4KB is enough for small rings - 802093e2: 4505 li a0,1 - 802093e4: 96dfd0ef jal 80206d50 <_ZN3PMM11alloc_pagesEi> - memset(ptr, 0, PGSIZE); - 802093e8: 6605 lui a2,0x1 - 802093ea: 4581 li a1,0 - void *ptr = PMM::alloc_pages(1); // 4KB is enough for small rings - 802093ec: 842a mv s0,a0 - memset(ptr, 0, PGSIZE); - 802093ee: a3dfb0ef jal 80204e2a <_Z6memsetPvij> - - 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); - 802093f2: 6785 lui a5,0x1 - return reinterpret_cast(virtio_base + offset); - 802093f4: 00093603 ld a2,0(s2) - disk.used = reinterpret_cast(base_addr + PGSIZE / 2); - 802093f8: 80078793 addi a5,a5,-2048 # 800 <_start-0x801ff800> - disk.desc = reinterpret_cast(base_addr); - 802093fc: 0001e697 auipc a3,0x1e - 80209400: a0c68693 addi a3,a3,-1524 # 80226e08 <_ZN6VirtIO4diskE> - disk.avail = reinterpret_cast(base_addr + NUM_DESCS * 16); - 80209404: 08040713 addi a4,s0,128 # 10001080 <_start-0x701fef80> - disk.used = reinterpret_cast(base_addr + PGSIZE / 2); - 80209408: 97a2 add a5,a5,s0 - disk.desc = reinterpret_cast(base_addr); - 8020940a: e280 sd s0,0(a3) - disk.avail = reinterpret_cast(base_addr + NUM_DESCS * 16); - 8020940c: e698 sd a4,8(a3) - disk.used = reinterpret_cast(base_addr + PGSIZE / 2); - 8020940e: ea9c sd a5,16(a3) - - *REG(VIRTIO_MMIO_QUEUE_DESC_LOW) = (uint32)base_addr; - 80209410: 0004059b sext.w a1,s0 - 80209414: 08b62023 sw a1,128(a2) # 1080 <_start-0x801fef80> - *REG(VIRTIO_MMIO_QUEUE_DESC_HIGH) = (uint32)(base_addr >> 32); - 80209418: 9401 srai s0,s0,0x20 - 8020941a: 08862223 sw s0,132(a2) - - uint64 avail_addr = (uint64)disk.avail; - *REG(VIRTIO_MMIO_QUEUE_DRIVER_LOW) = (uint32)avail_addr; - 8020941e: 0007059b sext.w a1,a4 - 80209422: 08b62823 sw a1,144(a2) - *REG(VIRTIO_MMIO_QUEUE_DRIVER_HIGH) = (uint32)(avail_addr >> 32); - 80209426: 9701 srai a4,a4,0x20 - 80209428: 08e62a23 sw a4,148(a2) - - uint64 used_addr = (uint64)disk.used; - *REG(VIRTIO_MMIO_QUEUE_DEVICE_LOW) = (uint32)used_addr; - 8020942c: 0007871b sext.w a4,a5 - 80209430: 0ae62023 sw a4,160(a2) - *REG(VIRTIO_MMIO_QUEUE_DEVICE_HIGH) = (uint32)(used_addr >> 32); - 80209434: 9781 srai a5,a5,0x20 - 80209436: 0af62223 sw a5,164(a2) - - *REG(VIRTIO_MMIO_QUEUE_READY) = 1; - 8020943a: 4705 li a4,1 - - // 7. Initialize Internal Structures - disk.free_head = 0; - 8020943c: 4785 li a5,1 - *REG(VIRTIO_MMIO_QUEUE_READY) = 1; - 8020943e: c278 sw a4,68(a2) - disk.free_head = 0; - 80209440: 178e slli a5,a5,0x23 - 80209442: ee9c sd a5,24(a3) - disk.num_free = NUM_DESCS; - disk.used_idx = 0; - 80209444: 0001e797 auipc a5,0x1e - 80209448: a0079223 sh zero,-1532(a5) # 80226e48 <_ZN6VirtIO4diskE+0x40> - for (int i = 0; i < NUM_DESCS; i++) - 8020944c: 8736 mv a4,a3 - 8020944e: 4781 li a5,0 - 80209450: 45a1 li a1,8 - { - disk.free_chain[i] = i + 1; - 80209452: 2785 addiw a5,a5,1 - 80209454: d31c sw a5,32(a4) - disk.info[i].busy = 0; - 80209456: 0406a223 sw zero,68(a3) - for (int i = 0; i < NUM_DESCS; i++) - 8020945a: 0711 addi a4,a4,4 - 8020945c: 06a1 addi a3,a3,8 - 8020945e: feb79ae3 bne a5,a1,80209452 <_ZN6VirtIO4initEv+0x156> - } - - // 8. Finalize Setup - status |= VIRTIO_CONFIG_S_DRIVER_OK; - 80209462: 00f4e693 ori a3,s1,15 - *REG(VIRTIO_MMIO_STATUS) = status; - 80209466: da34 sw a3,112(a2) - - // === [Feature] Read Capacity === - volatile struct virtio_blk_config *config = (volatile struct virtio_blk_config *)(virtio_base + VIRTIO_MMIO_CONFIG); - uint64 capacity_sectors = config->capacity; - 80209468: 10064703 lbu a4,256(a2) - 8020946c: 10164803 lbu a6,257(a2) - 80209470: 10264503 lbu a0,258(a2) - 80209474: 10364583 lbu a1,259(a2) - volatile struct virtio_blk_config *config = (volatile struct virtio_blk_config *)(virtio_base + VIRTIO_MMIO_CONFIG); - 80209478: 10060793 addi a5,a2,256 - uint64 capacity_sectors = config->capacity; - 8020947c: 0822 slli a6,a6,0x8 - 8020947e: 10464603 lbu a2,260(a2) - 80209482: 00e86833 or a6,a6,a4 - 80209486: 0057c683 lbu a3,5(a5) - 8020948a: 0542 slli a0,a0,0x10 - 8020948c: 0067c703 lbu a4,6(a5) - 80209490: 01056533 or a0,a0,a6 - 80209494: 05e2 slli a1,a1,0x18 - 80209496: 8dc9 or a1,a1,a0 - 80209498: 0077c403 lbu s0,7(a5) - 8020949c: 02061793 slli a5,a2,0x20 - 802094a0: 8fcd or a5,a5,a1 - 802094a2: 16a2 slli a3,a3,0x28 - 802094a4: 8edd or a3,a3,a5 - 802094a6: 03071793 slli a5,a4,0x30 - 802094aa: 8fd5 or a5,a5,a3 - uint64 size_mb = (capacity_sectors * 512) / (1024 * 1024); - - Drivers::uart_puts(ANSI_GREEN "[VirtIO] Initialized. Capacity: "); - 802094ac: 00009517 auipc a0,0x9 - 802094b0: ee450513 addi a0,a0,-284 # 80212390 - uint64 capacity_sectors = config->capacity; - 802094b4: 1462 slli s0,s0,0x38 - 802094b6: 8c5d or s0,s0,a5 - Drivers::uart_puts(ANSI_GREEN "[VirtIO] Initialized. Capacity: "); - 802094b8: 8b3ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - uint64 size_mb = (capacity_sectors * 512) / (1024 * 1024); - 802094bc: 01541513 slli a0,s0,0x15 - Drivers::uart_put_int(size_mb); - 802094c0: 9501 srai a0,a0,0x20 - 802094c2: 907ff0ef jal 80208dc8 <_ZN7Drivers12uart_put_intEi> - Drivers::uart_puts(" MB\n" ANSI_RESET); - 802094c6: 00009517 auipc a0,0x9 - 802094ca: ef250513 addi a0,a0,-270 # 802123b8 - } - 802094ce: 6442 ld s0,16(sp) - Drivers::uart_puts(" MB\n" ANSI_RESET); - 802094d0: 6902 ld s2,0(sp) - } - 802094d2: 60e2 ld ra,24(sp) - 802094d4: 64a2 ld s1,8(sp) - 802094d6: 6105 addi sp,sp,32 - Drivers::uart_puts(" MB\n" ANSI_RESET); - 802094d8: 893ff06f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - 802094dc: 6442 ld s0,16(sp) - 802094de: 60e2 ld ra,24(sp) - 802094e0: 64a2 ld s1,8(sp) - Drivers::uart_puts(ANSI_RED "[VirtIO] Fatal - No Block Device found.\n" ANSI_RESET); - 802094e2: 00009517 auipc a0,0x9 - 802094e6: dc650513 addi a0,a0,-570 # 802122a8 - } - 802094ea: 6105 addi sp,sp,32 - Drivers::uart_puts(" MB\n" ANSI_RESET); - 802094ec: 87fff06f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - Drivers::uart_puts("VirtIO: Queue 0 not ready.\n"); - 802094f0: 00009517 auipc a0,0x9 - 802094f4: e6050513 addi a0,a0,-416 # 80212350 - 802094f8: 873ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - return reinterpret_cast(virtio_base + offset); - 802094fc: 00093783 ld a5,0(s2) - 80209500: b5f9 j 802093ce <_ZN6VirtIO4initEv+0xd2> - -0000000080209502 <_ZN6VirtIO2rwEiyPc>: - break; - } - } - - void rw(int write, uint64 blockno, char *buf) - { - 80209502: 715d addi sp,sp,-80 - 80209504: e85a sd s6,16(sp) - 80209506: 8b2a mv s6,a0 - uint64 sector = blockno * (1024 / 512); // Assume 1KB blocks - - disk.lock.acquire(); - 80209508: 0001e517 auipc a0,0x1e - 8020950c: a1050513 addi a0,a0,-1520 # 80226f18 <_ZN6VirtIO4diskE+0x110> - { - 80209510: e0a2 sd s0,64(sp) - 80209512: ec56 sd s5,24(sp) - 80209514: e45e sd s7,8(sp) - 80209516: e486 sd ra,72(sp) - 80209518: fc26 sd s1,56(sp) - 8020951a: f84a sd s2,48(sp) - 8020951c: f44e sd s3,40(sp) - 8020951e: f052 sd s4,32(sp) - 80209520: 8bb2 mv s7,a2 - uint64 sector = blockno * (1024 / 512); // Assume 1KB blocks - 80209522: 00159a93 slli s5,a1,0x1 - disk.lock.acquire(); - 80209526: 0001e417 auipc s0,0x1e - 8020952a: 8e240413 addi s0,s0,-1822 # 80226e08 <_ZN6VirtIO4diskE> - 8020952e: e52fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - - // Wait for enough descriptors - while (disk.num_free < 3) - 80209532: 4c5c lw a5,28(s0) - 80209534: 4709 li a4,2 - 80209536: 02f74263 blt a4,a5,8020955a <_ZN6VirtIO2rwEiyPc+0x58> - { - ProcManager::sleep(&disk.free_head, &disk.lock); - 8020953a: 0001e997 auipc s3,0x1e - 8020953e: 9de98993 addi s3,s3,-1570 # 80226f18 <_ZN6VirtIO4diskE+0x110> - 80209542: 0001e917 auipc s2,0x1e - 80209546: 8de90913 addi s2,s2,-1826 # 80226e20 <_ZN6VirtIO4diskE+0x18> - while (disk.num_free < 3) - 8020954a: 4489 li s1,2 - ProcManager::sleep(&disk.free_head, &disk.lock); - 8020954c: 85ce mv a1,s3 - 8020954e: 854a mv a0,s2 - 80209550: 9f7fe0ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (disk.num_free < 3) - 80209554: 4c5c lw a5,28(s0) - 80209556: fef4dbe3 bge s1,a5,8020954c <_ZN6VirtIO2rwEiyPc+0x4a> - int id = disk.free_head; - 8020955a: 01842a03 lw s4,24(s0) - disk.free_head = disk.free_chain[id]; - 8020955e: 56fd li a3,-1 - 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; - 80209560: 6010 ld a2,0(s0) - disk.free_head = disk.free_chain[id]; - 80209562: 008a0493 addi s1,s4,8 - 80209566: 00249713 slli a4,s1,0x2 - 8020956a: 9722 add a4,a4,s0 - 8020956c: 00072803 lw a6,0(a4) - 80209570: 9281 srli a3,a3,0x20 - disk.num_free--; - 80209572: 37f5 addiw a5,a5,-3 - disk.free_head = disk.free_chain[id]; - 80209574: 00880713 addi a4,a6,8 # 1008 <_start-0x801feff8> - 80209578: 070a slli a4,a4,0x2 - 8020957a: 9722 add a4,a4,s0 - 8020957c: 430c lw a1,0(a4) - disk.num_free--; - 8020957e: 004a1993 slli s3,s4,0x4 - disk.free_head = disk.free_chain[id]; - 80209582: 1782 slli a5,a5,0x20 - 80209584: 00858713 addi a4,a1,8 - 80209588: 070a slli a4,a4,0x2 - 8020958a: 9722 add a4,a4,s0 - 8020958c: 00076503 lwu a0,0(a4) - req->type = write ? VIRTIO_BLK_T_OUT : VIRTIO_BLK_T_IN; - 80209590: 00449713 slli a4,s1,0x4 - 80209594: 9722 add a4,a4,s0 - disk.free_head = disk.free_chain[id]; - 80209596: 8d75 and a0,a0,a3 - 80209598: 8fc9 or a5,a5,a0 - req->sector = sector; - 8020959a: 00daf6b3 and a3,s5,a3 - req->type = write ? VIRTIO_BLK_T_OUT : VIRTIO_BLK_T_IN; - 8020959e: 016038b3 snez a7,s6 - req->sector = sector; - 802095a2: 020ada93 srli s5,s5,0x20 - struct BlockRequest *req = &disk.reqs[idx[0]]; - 802095a6: 08498513 addi a0,s3,132 - disk.free_head = disk.free_chain[id]; - 802095aa: ec1c sd a5,24(s0) - req->sector = sector; - 802095ac: c754 sw a3,12(a4) - req->type = write ? VIRTIO_BLK_T_OUT : VIRTIO_BLK_T_IN; - 802095ae: 01172223 sw a7,4(a4) - req->reserved = 0; - 802095b2: 00072423 sw zero,8(a4) - req->sector = sector; - 802095b6: 01572823 sw s5,16(a4) - struct BlockRequest *req = &disk.reqs[idx[0]]; - 802095ba: 00a406b3 add a3,s0,a0 - disk.desc[idx[0]].addr = (uint64)req; - 802095be: 01360733 add a4,a2,s3 - 802095c2: e314 sd a3,0(a4) - disk.desc[idx[0]].len = sizeof(struct BlockRequest); - 802095c4: 46c1 li a3,16 - 802095c6: c714 sw a3,8(a4) - 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; - 802095c8: 00481793 slli a5,a6,0x4 - disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; - 802095cc: 4685 li a3,1 - 802095ce: 00d71623 sh a3,12(a4) - disk.desc[idx[0]].next = idx[1]; - 802095d2: 01071723 sh a6,14(a4) - disk.desc[idx[1]].addr = (uint64)buf; - 802095d6: 97b2 add a5,a5,a2 - disk.desc[idx[1]].len = 1024; // Fixed 1KB for this test - 802095d8: 40000713 li a4,1024 - disk.desc[idx[1]].addr = (uint64)buf; - 802095dc: 0177b023 sd s7,0(a5) - disk.desc[idx[1]].len = 1024; // Fixed 1KB for this test - 802095e0: c798 sw a4,8(a5) - disk.desc[idx[1]].flags = VRING_DESC_F_NEXT; - if (!write) - 802095e2: 000b1363 bnez s6,802095e8 <_ZN6VirtIO2rwEiyPc+0xe6> - disk.desc[idx[1]].flags |= VRING_DESC_F_WRITE; - 802095e6: 468d li a3,3 - disk.desc[idx[1]].next = idx[2]; - 802095e8: 0105951b slliw a0,a1,0x10 - - // 3. Status Byte - disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; - disk.desc[idx[2]].len = 1; - 802095ec: 4705 li a4,1 - 802095ee: 8ec9 or a3,a3,a0 - disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; - 802095f0: 0592 slli a1,a1,0x4 - disk.desc[idx[2]].len = 1; - 802095f2: 1706 slli a4,a4,0x21 - 802095f4: c7d4 sw a3,12(a5) - 802095f6: 0705 addi a4,a4,1 - disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; - 802095f8: 00b607b3 add a5,a2,a1 - disk.desc[idx[2]].len = 1; - 802095fc: e798 sd a4,8(a5) - 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]; - 802095fe: 6414 ld a3,8(s0) - disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; - 80209600: 104a0613 addi a2,s4,260 - 80209604: 9622 add a2,a2,s0 - disk.avail->ring[disk.avail->idx % NUM_DESCS] = idx[0]; - 80209606: 0026d703 lhu a4,2(a3) - disk.info[idx[0]].busy = 1; - 8020960a: 048e slli s1,s1,0x3 - disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; - 8020960c: e390 sd a2,0(a5) - disk.avail->ring[disk.avail->idx % NUM_DESCS] = idx[0]; - 8020960e: 00777793 andi a5,a4,7 - disk.info[idx[0]].busy = 1; - 80209612: 94a2 add s1,s1,s0 - disk.avail->ring[disk.avail->idx % NUM_DESCS] = idx[0]; - 80209614: 0786 slli a5,a5,0x1 - disk.info[idx[0]].busy = 1; - 80209616: 4705 li a4,1 - 80209618: c0d8 sw a4,4(s1) - disk.avail->ring[disk.avail->idx % NUM_DESCS] = idx[0]; - 8020961a: 96be add a3,a3,a5 - 8020961c: 01469223 sh s4,4(a3) - __sync_synchronize(); - 80209620: 0330000f fence rw,rw - disk.avail->idx++; - 80209624: 6418 ld a4,8(s0) - 80209626: 00275783 lhu a5,2(a4) - 8020962a: 2785 addiw a5,a5,1 - 8020962c: 00f71123 sh a5,2(a4) - __sync_synchronize(); - 80209630: 0330000f fence rw,rw - return reinterpret_cast(virtio_base + offset); - 80209634: 0000b797 auipc a5,0xb - 80209638: 4247b783 ld a5,1060(a5) # 80214a58 <_ZL11virtio_base> - - // Notify Device - *REG(VIRTIO_MMIO_QUEUE_NOTIFY) = 0; - 8020963c: 0407a823 sw zero,80(a5) - - // Wait for Completion - while (disk.info[idx[0]].busy) - 80209640: 40dc lw a5,4(s1) - { - ProcManager::sleep(&disk.info[idx[0]], &disk.lock); - 80209642: 003a1913 slli s2,s4,0x3 - 80209646: 04490913 addi s2,s2,68 - 8020964a: 9922 add s2,s2,s0 - 8020964c: 0001ea97 auipc s5,0x1e - 80209650: 8cca8a93 addi s5,s5,-1844 # 80226f18 <_ZN6VirtIO4diskE+0x110> - while (disk.info[idx[0]].busy) - 80209654: c799 beqz a5,80209662 <_ZN6VirtIO2rwEiyPc+0x160> - ProcManager::sleep(&disk.info[idx[0]], &disk.lock); - 80209656: 85d6 mv a1,s5 - 80209658: 854a mv a0,s2 - 8020965a: 8edfe0ef jal 80207f46 <_ZN11ProcManager5sleepEPvP8Spinlock> - while (disk.info[idx[0]].busy) - 8020965e: 40dc lw a5,4(s1) - 80209660: fbfd bnez a5,80209656 <_ZN6VirtIO2rwEiyPc+0x154> - disk.free_head = id; - 80209662: 54fd li s1,-1 - 80209664: 9081 srli s1,s1,0x20 - ProcManager::wakeup(&disk.free_head); - 80209666: 0001d917 auipc s2,0x1d - 8020966a: 7ba90913 addi s2,s2,1978 # 80226e20 <_ZN6VirtIO4diskE+0x18> - 8020966e: a019 j 80209674 <_ZN6VirtIO2rwEiyPc+0x172> - 80209670: 004a1993 slli s3,s4,0x4 - int flag = disk.desc[curr].flags; - 80209674: 6010 ld a2,0(s0) - disk.num_free++; - 80209676: 4c54 lw a3,28(s0) - disk.free_chain[id] = disk.free_head; - 80209678: 4c0c lw a1,24(s0) - int flag = disk.desc[curr].flags; - 8020967a: 964e add a2,a2,s3 - 8020967c: 00c65983 lhu s3,12(a2) - disk.free_chain[id] = disk.free_head; - 80209680: 008a0713 addi a4,s4,8 - disk.num_free++; - 80209684: 2685 addiw a3,a3,1 - disk.free_head = id; - 80209686: 1682 slli a3,a3,0x20 - 80209688: 009a77b3 and a5,s4,s1 - disk.free_chain[id] = disk.free_head; - 8020968c: 070a slli a4,a4,0x2 - 8020968e: 9722 add a4,a4,s0 - disk.free_head = id; - 80209690: 8fd5 or a5,a5,a3 - ProcManager::wakeup(&disk.free_head); - 80209692: 854a mv a0,s2 - if (flag & VRING_DESC_F_NEXT) - 80209694: 0019f993 andi s3,s3,1 - int next = disk.desc[curr].next; - 80209698: 00e65a03 lhu s4,14(a2) - disk.free_chain[id] = disk.free_head; - 8020969c: c30c sw a1,0(a4) - disk.free_head = id; - 8020969e: ec1c sd a5,24(s0) - ProcManager::wakeup(&disk.free_head); - 802096a0: 9abfe0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - if (flag & VRING_DESC_F_NEXT) - 802096a4: fc0996e3 bnez s3,80209670 <_ZN6VirtIO2rwEiyPc+0x16e> - } - - free_chain_soft(idx[0]); - disk.lock.release(); - } - 802096a8: 6406 ld s0,64(sp) - 802096aa: 60a6 ld ra,72(sp) - 802096ac: 74e2 ld s1,56(sp) - 802096ae: 7942 ld s2,48(sp) - 802096b0: 79a2 ld s3,40(sp) - 802096b2: 7a02 ld s4,32(sp) - 802096b4: 6ae2 ld s5,24(sp) - 802096b6: 6b42 ld s6,16(sp) - 802096b8: 6ba2 ld s7,8(sp) - disk.lock.release(); - 802096ba: 0001e517 auipc a0,0x1e - 802096be: 85e50513 addi a0,a0,-1954 # 80226f18 <_ZN6VirtIO4diskE+0x110> - } - 802096c2: 6161 addi sp,sp,80 - disk.lock.release(); - 802096c4: c54fc06f j 80205b18 <_ZN8Spinlock7releaseEv> - -00000000802096c8 <_ZN6VirtIO4intrEv>: - - void intr() - { - 802096c8: 1101 addi sp,sp,-32 - disk.lock.acquire(); - 802096ca: 0001e517 auipc a0,0x1e - 802096ce: 84e50513 addi a0,a0,-1970 # 80226f18 <_ZN6VirtIO4diskE+0x110> - { - 802096d2: e822 sd s0,16(sp) - 802096d4: e426 sd s1,8(sp) - 802096d6: ec06 sd ra,24(sp) - disk.lock.acquire(); - 802096d8: ca8fc0ef jal 80205b80 <_ZN8Spinlock7acquireEv> - return reinterpret_cast(virtio_base + offset); - 802096dc: 0000b697 auipc a3,0xb - 802096e0: 37c6b683 ld a3,892(a3) # 80214a58 <_ZL11virtio_base> - - uint32 status = *REG(VIRTIO_MMIO_INTERRUPT_STATUS); - 802096e4: 52b8 lw a4,96(a3) - disk.lock.acquire(); - 802096e6: 0001d417 auipc s0,0x1d - 802096ea: 72240413 addi s0,s0,1826 # 80226e08 <_ZN6VirtIO4diskE> - *REG(VIRTIO_MMIO_INTERRUPT_ACK) = status & 0x3; - - volatile struct VRingUsed *used_ring = (volatile struct VRingUsed *)disk.used; - 802096ee: 6804 ld s1,16(s0) - *REG(VIRTIO_MMIO_INTERRUPT_ACK) = status & 0x3; - 802096f0: 8b0d andi a4,a4,3 - - while (disk.used_idx != used_ring->idx) - 802096f2: 04045783 lhu a5,64(s0) - *REG(VIRTIO_MMIO_INTERRUPT_ACK) = status & 0x3; - 802096f6: d2f8 sw a4,100(a3) - while (disk.used_idx != used_ring->idx) - 802096f8: 0024d703 lhu a4,2(s1) - 802096fc: 00e79e63 bne a5,a4,80209718 <_ZN6VirtIO4intrEv+0x50> - 80209700: a889 j 80209752 <_ZN6VirtIO4intrEv+0x8a> - if (disk.info[id].busy) - { - disk.info[id].busy = 0; - ProcManager::wakeup(&disk.info[id]); - } - disk.used_idx++; - 80209702: 04045783 lhu a5,64(s0) - 80209706: 2785 addiw a5,a5,1 - 80209708: 17c2 slli a5,a5,0x30 - 8020970a: 93c1 srli a5,a5,0x30 - 8020970c: 04f41023 sh a5,64(s0) - while (disk.used_idx != used_ring->idx) - 80209710: 0024d703 lhu a4,2(s1) - 80209714: 02e78f63 beq a5,a4,80209752 <_ZN6VirtIO4intrEv+0x8a> - int id = used_ring->ring[disk.used_idx % NUM_DESCS].id; - 80209718: 8b9d andi a5,a5,7 - 8020971a: 078e slli a5,a5,0x3 - 8020971c: 97a6 add a5,a5,s1 - 8020971e: 43c8 lw a0,4(a5) - if (disk.info[id].busy) - 80209720: 00850793 addi a5,a0,8 - 80209724: 078e slli a5,a5,0x3 - 80209726: 97a2 add a5,a5,s0 - 80209728: 43d8 lw a4,4(a5) - 8020972a: df61 beqz a4,80209702 <_ZN6VirtIO4intrEv+0x3a> - ProcManager::wakeup(&disk.info[id]); - 8020972c: 050e slli a0,a0,0x3 - 8020972e: 04450513 addi a0,a0,68 - 80209732: 9522 add a0,a0,s0 - disk.info[id].busy = 0; - 80209734: 0007a223 sw zero,4(a5) - ProcManager::wakeup(&disk.info[id]); - 80209738: 913fe0ef jal 8020804a <_ZN11ProcManager6wakeupEPv> - disk.used_idx++; - 8020973c: 04045783 lhu a5,64(s0) - 80209740: 2785 addiw a5,a5,1 - 80209742: 17c2 slli a5,a5,0x30 - 80209744: 93c1 srli a5,a5,0x30 - 80209746: 04f41023 sh a5,64(s0) - while (disk.used_idx != used_ring->idx) - 8020974a: 0024d703 lhu a4,2(s1) - 8020974e: fce795e3 bne a5,a4,80209718 <_ZN6VirtIO4intrEv+0x50> - } - - disk.lock.release(); - } - 80209752: 6442 ld s0,16(sp) - 80209754: 60e2 ld ra,24(sp) - 80209756: 64a2 ld s1,8(sp) - disk.lock.release(); - 80209758: 0001d517 auipc a0,0x1d - 8020975c: 7c050513 addi a0,a0,1984 # 80226f18 <_ZN6VirtIO4diskE+0x110> - } - 80209760: 6105 addi sp,sp,32 - disk.lock.release(); - 80209762: bb6fc06f j 80205b18 <_ZN8Spinlock7releaseEv> - -0000000080209766 <_ZN6VirtIO7test_rwEv>: - - void test_rw() - { - 80209766: 1141 addi sp,sp,-16 - Drivers::uart_puts(ANSI_BLUE "[VirtIO] Disk Test Start...\n" ANSI_RESET); - 80209768: 00009517 auipc a0,0x9 - 8020976c: c6050513 addi a0,a0,-928 # 802123c8 - { - 80209770: e406 sd ra,8(sp) - Drivers::uart_puts(ANSI_BLUE "[VirtIO] Disk Test Start...\n" ANSI_RESET); - 80209772: df8ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - char *buf = (char *)PMM::alloc_page(); - 80209776: 9edfd0ef jal 80207162 <_ZN3PMM10alloc_pageEv> - if (!buf) - 8020977a: c925 beqz a0,802097ea <_ZN6VirtIO7test_rwEv+0x84> - return; - - const char *msg = "Lume OS Disk Driver Test Pattern"; - strcpy(buf, msg); - 8020977c: 00009597 auipc a1,0x9 - 80209780: c7458593 addi a1,a1,-908 # 802123f0 - 80209784: e022 sd s0,0(sp) - 80209786: 842a mv s0,a0 - 80209788: f4afb0ef jal 80204ed2 <_Z6strcpyPcPKc> - - rw(1, 0, buf); // Write - 8020978c: 8622 mv a2,s0 - 8020978e: 4581 li a1,0 - 80209790: 4505 li a0,1 - 80209792: d71ff0ef jal 80209502 <_ZN6VirtIO2rwEiyPc> - memset(buf, 0, PGSIZE); - 80209796: 6605 lui a2,0x1 - 80209798: 4581 li a1,0 - 8020979a: 8522 mv a0,s0 - 8020979c: e8efb0ef jal 80204e2a <_Z6memsetPvij> - rw(0, 0, buf); // Read - 802097a0: 4581 li a1,0 - 802097a2: 4501 li a0,0 - 802097a4: 8622 mv a2,s0 - 802097a6: d5dff0ef jal 80209502 <_ZN6VirtIO2rwEiyPc> - - if (strcmp(buf, msg) == 0) - 802097aa: 00009597 auipc a1,0x9 - 802097ae: c4658593 addi a1,a1,-954 # 802123f0 - 802097b2: 8522 mv a0,s0 - 802097b4: f58fb0ef jal 80204f0c <_Z6strcmpPKcS0_> - 802097b8: cd09 beqz a0,802097d2 <_ZN6VirtIO7test_rwEv+0x6c> - { - 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); - 802097ba: 00009517 auipc a0,0x9 - 802097be: c8e50513 addi a0,a0,-882 # 80212448 - 802097c2: da8ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - - PMM::free_page(buf); - 802097c6: 8522 mv a0,s0 - 802097c8: 6402 ld s0,0(sp) - } - 802097ca: 60a2 ld ra,8(sp) - 802097cc: 0141 addi sp,sp,16 - PMM::free_page(buf); - 802097ce: 9b7fd06f j 80207184 <_ZN3PMM9free_pageEPv> - Drivers::uart_puts(ANSI_GREEN "[VirtIO] Test PASSED (R/W Verified).\n" ANSI_RESET); - 802097d2: 00009517 auipc a0,0x9 - 802097d6: c4650513 addi a0,a0,-954 # 80212418 - 802097da: d90ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - PMM::free_page(buf); - 802097de: 8522 mv a0,s0 - 802097e0: 6402 ld s0,0(sp) - } - 802097e2: 60a2 ld ra,8(sp) - 802097e4: 0141 addi sp,sp,16 - PMM::free_page(buf); - 802097e6: 99ffd06f j 80207184 <_ZN3PMM9free_pageEPv> - } - 802097ea: 60a2 ld ra,8(sp) - 802097ec: 0141 addi sp,sp,16 - 802097ee: 8082 ret - -00000000802097f0 <_ZN6VirtIO8test_bioEv>: - - void test_bio() - { - 802097f0: 1141 addi sp,sp,-16 - Drivers::uart_puts(ANSI_BLUE "[Bio] Starting Buffer Cache Test...\n" ANSI_RESET); - 802097f2: 00009517 auipc a0,0x9 - 802097f6: c7650513 addi a0,a0,-906 # 80212468 - { - 802097fa: e406 sd ra,8(sp) - 802097fc: e022 sd s0,0(sp) - Drivers::uart_puts(ANSI_BLUE "[Bio] Starting Buffer Cache Test...\n" ANSI_RESET); - 802097fe: d6cff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - struct Buf *b = BufferCache::bread(0, 100); - 80209802: 06400593 li a1,100 - 80209806: 4501 li a0,0 - 80209808: cb9fe0ef jal 802084c0 <_ZN11BufferCache5breadEjj> - 8020980c: 842a mv s0,a0 - - Drivers::uart_puts("[Bio] Bread block 100 (1st time).\n"); - 8020980e: 00009517 auipc a0,0x9 - 80209812: c8a50513 addi a0,a0,-886 # 80212498 - 80209816: d54ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - b->data[0] = 'L'; - 8020981a: 656d77b7 lui a5,0x656d7 - 8020981e: 54c78793 addi a5,a5,1356 # 656d754c <_start-0x1ab28ab4> - 80209822: d41c sw a5,40(s0) - b->data[1] = 'u'; - b->data[2] = 'm'; - b->data[3] = 'e'; - b->data[4] = '\0'; - - BufferCache::bwrite(b); - 80209824: 8522 mv a0,s0 - b->data[4] = '\0'; - 80209826: 02040623 sb zero,44(s0) - BufferCache::bwrite(b); - 8020982a: d79fe0ef jal 802085a2 <_ZN11BufferCache6bwriteEP3Buf> - Drivers::uart_puts("[Bio] Bwrite block 100.\n"); - 8020982e: 00009517 auipc a0,0x9 - 80209832: c9250513 addi a0,a0,-878 # 802124c0 - 80209836: d34ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - BufferCache::brelse(b); - 8020983a: 8522 mv a0,s0 - 8020983c: d9bfe0ef jal 802085d6 <_ZN11BufferCache6brelseEP3Buf> - Drivers::uart_puts("[Bio] Brelease block 100.\n"); - 80209840: 00009517 auipc a0,0x9 - 80209844: ca050513 addi a0,a0,-864 # 802124e0 - 80209848: d22ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - struct Buf *b2 = BufferCache::bread(0, 100); - 8020984c: 06400593 li a1,100 - 80209850: 4501 li a0,0 - 80209852: c6ffe0ef jal 802084c0 <_ZN11BufferCache5breadEjj> - 80209856: 842a mv s0,a0 - Drivers::uart_puts("[Bio] Bread block 100 (2nd time).\n"); - 80209858: 00009517 auipc a0,0x9 - 8020985c: ca850513 addi a0,a0,-856 # 80212500 - 80209860: d0aff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - - if (b2->data[0] == 'L' && b2->data[1] == 'u' && b2->data[3] == 'e') - 80209864: 7414 ld a3,40(s0) - 80209866: 0ff017b7 lui a5,0xff01 - 8020986a: 0792 slli a5,a5,0x4 - 8020986c: 17fd addi a5,a5,-1 # ff00fff <_start-0x702ff001> - 8020986e: 65007737 lui a4,0x65007 - 80209872: 8ff5 and a5,a5,a3 - 80209874: 54c70713 addi a4,a4,1356 # 6500754c <_start-0x1b1f8ab4> - 80209878: 00e78e63 beq a5,a4,80209894 <_ZN6VirtIO8test_bioEv+0xa4> - { - 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); - 8020987c: 00009517 auipc a0,0x9 - 80209880: cdc50513 addi a0,a0,-804 # 80212558 - 80209884: ce6ff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - } - - BufferCache::brelse(b2); - 80209888: 8522 mv a0,s0 - } - 8020988a: 6402 ld s0,0(sp) - 8020988c: 60a2 ld ra,8(sp) - 8020988e: 0141 addi sp,sp,16 - BufferCache::brelse(b2); - 80209890: d47fe06f j 802085d6 <_ZN11BufferCache6brelseEP3Buf> - Drivers::uart_puts(ANSI_GREEN "[Bio] Data verification PASSED.\n" ANSI_RESET); - 80209894: 00009517 auipc a0,0x9 - 80209898: c9450513 addi a0,a0,-876 # 80212528 - 8020989c: cceff0ef jal 80208d6a <_ZN7Drivers9uart_putsEPKc> - BufferCache::brelse(b2); - 802098a0: 8522 mv a0,s0 - } - 802098a2: 6402 ld s0,0(sp) - 802098a4: 60a2 ld ra,8(sp) - 802098a6: 0141 addi sp,sp,16 - BufferCache::brelse(b2); - 802098a8: d2ffe06f j 802085d6 <_ZN11BufferCache6brelseEP3Buf> - -00000000802098ac <_GLOBAL__sub_I__ZN6VirtIO4diskE>: - 802098ac: 0001d797 auipc a5,0x1d - 802098b0: 55c78793 addi a5,a5,1372 # 80226e08 <_ZN6VirtIO4diskE> - 802098b4: 00008717 auipc a4,0x8 - 802098b8: ed470713 addi a4,a4,-300 # 80211788 - 802098bc: 1007a823 sw zero,272(a5) - 802098c0: 10e7bc23 sd a4,280(a5) - 802098c4: 1207b023 sd zero,288(a5) - 802098c8: 8082 ret - -00000000802098ca <_ZN4PLIC4initEv>: -{ - void init() - { - // Set Priority for UART (IRQ 10) and VirtIO (IRQ 1) - // Must use volatile write - *REG32(PLIC_PRIORITY + 10 * 4) = 1; - 802098ca: 4785 li a5,1 - 802098cc: 0c000e37 lui t3,0xc000 - 802098d0: 02fe2423 sw a5,40(t3) # c000028 <_start-0x741fffd8> - for (int i = 1; i <= 8; i++) - { - *REG32(PLIC_PRIORITY + i * 4) = 1; - 802098d4: 0c000337 lui t1,0xc000 - 802098d8: 00f32223 sw a5,4(t1) # c000004 <_start-0x741ffffc> - 802098dc: 0c0008b7 lui a7,0xc000 - 802098e0: 00f8a423 sw a5,8(a7) # c000008 <_start-0x741ffff8> - 802098e4: 0c000837 lui a6,0xc000 - 802098e8: 00f82623 sw a5,12(a6) # c00000c <_start-0x741ffff4> - 802098ec: 0c000537 lui a0,0xc000 - 802098f0: c91c sw a5,16(a0) - 802098f2: 0c0005b7 lui a1,0xc000 - 802098f6: c9dc sw a5,20(a1) - 802098f8: 0c000637 lui a2,0xc000 - 802098fc: ce1c sw a5,24(a2) - 802098fe: 0c0006b7 lui a3,0xc000 - 80209902: 0c000737 lui a4,0xc000 - 80209906: cedc sw a5,28(a3) - 80209908: d31c sw a5,32(a4) - } - } - 8020990a: 8082 ret - -000000008020990c <_ZN4PLIC8inithartEv>: - asm volatile("mv %0, tp" : "=r" (x) ); - 8020990c: 8792 mv a5,tp - void inithart() - { - 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; - 8020990e: 0c0026b7 lui a3,0xc002 - 80209912: 0087971b slliw a4,a5,0x8 - 80209916: 08068693 addi a3,a3,128 # c002080 <_start-0x741fdf80> - 8020991a: 9736 add a4,a4,a3 - 8020991c: 5fe00693 li a3,1534 - 80209920: c314 sw a3,0(a4) - - // Set Priority Threshold to 0 (Allow all) - *REG32(PLIC_STHRESHOLD_ADDR(hart)) = 0; - 80209922: 00d7979b slliw a5,a5,0xd - 80209926: 0c201737 lui a4,0xc201 - 8020992a: 97ba add a5,a5,a4 - 8020992c: 0007a023 sw zero,0(a5) - - Drivers::uart_puts("[PLIC] Hart Init Done.\n"); - 80209930: 00009517 auipc a0,0x9 - 80209934: c5850513 addi a0,a0,-936 # 80212588 - 80209938: c32ff06f j 80208d6a <_ZN7Drivers9uart_putsEPKc> - -000000008020993c <_ZN4PLIC5claimEv>: - 8020993c: 8792 mv a5,tp - } - - int claim() - { - int hart = static_cast(r_tp()); - return *REG32(PLIC_SCLAIM_ADDR(hart)); - 8020993e: 0c201737 lui a4,0xc201 - 80209942: 0711 addi a4,a4,4 # c201004 <_start-0x73ffeffc> - 80209944: 00d7979b slliw a5,a5,0xd - 80209948: 97ba add a5,a5,a4 - 8020994a: 4388 lw a0,0(a5) - } - 8020994c: 8082 ret - -000000008020994e <_ZN4PLIC8completeEi>: - 8020994e: 8792 mv a5,tp - - void complete(int irq) - { - int hart = static_cast(r_tp()); - *REG32(PLIC_SCLAIM_ADDR(hart)) = static_cast(irq); - 80209950: 0c201737 lui a4,0xc201 - 80209954: 00d7979b slliw a5,a5,0xd - 80209958: 0711 addi a4,a4,4 # c201004 <_start-0x73ffeffc> - 8020995a: 2501 sext.w a0,a0 - 8020995c: 97ba add a5,a5,a4 - 8020995e: c388 sw a0,0(a5) - } - 80209960: 8082 ret - ... diff --git a/build/kernel.elf.sym b/build/kernel.elf.sym deleted file mode 100644 index d4ed94d..0000000 --- a/build/kernel.elf.sym +++ /dev/null @@ -1,268 +0,0 @@ -0000000080200000 .text -000000008020a000 .rodata -0000000080212648 .eh_frame -0000000080214960 .data -0000000080214a60 .got -0000000080214ae0 .got.plt -0000000080214af0 .init_array -0000000080214c00 .bss -0000000000000000 .riscv.attributes -0000000000000000 .comment -0000000000000000 .debug_line -0000000000000000 .debug_line_str -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_aranges -0000000000000000 .debug_str -0000000000000000 .debug_loclists -0000000000000000 .debug_rnglists -0000000000000000 entry.o -0000000080214c00 stack_base -0000000000000000 swtch.o -0000000000000000 trap.o -0000000000000000 trampoline.o -0000000000000000 file.cc -000000008021cc08 _ZN9FileTable6ftableE -000000008020363a _GLOBAL__sub_I__ZN4Pipe11create_pairEPP4fileS2_ -0000000000000000 fat32.cc -0000000080203812 _ZL10match_namePKcS0_ -00000000802048ee _GLOBAL__sub_I_fat32_fs -000000008021dbc0 _ZZ10fat32_testvE6inited -0000000000000000 fs.cc -000000008020492c _ZL8skipelemPKcPc -000000008021dbe8 _ZL17global_root_inode -0000000000000000 string.cc -0000000000000000 sbi.cc -0000000000000000 syscall.cc -0000000080204fe8 _ZL8sys_execv -0000000000000000 cxx.cc -0000000000000000 main.cc -000000008021dbf0 _ZL7started -0000000000000000 spinlock.cc -0000000000000000 config.cc -0000000000000000 vm.cc -0000000080205d3c _ZN2VML4walkEPyyi -0000000080205dd2 _ZN2VM8uvmunmapEPyyyi.part.0 -0000000080205e8e _ZN2VML8freewalkEPy -0000000000000000 slab.cc -0000000080206c6a _GLOBAL__sub_I_caches -0000000080212608 _ZL13kmalloc_sizes -0000000000000000 pmm.cc -0000000080207202 _GLOBAL__sub_I__ZN3PMM7mem_mapE -0000000000000000 timer.cc -00000000802072dc _GLOBAL__sub_I__ZN5Timer5ticksE -0000000000000000 exec.cc -0000000000000000 proc.cc -00000000802075ea _ZL9allocprocv -0000000080207728 _ZL8freeprocP4Proc -00000000802083f6 _GLOBAL__sub_I_proc_list_head -0000000080214a50 _ZL7nextpid -0000000000000000 bio.cc -000000008021e5e8 _ZN11BufferCache6bcacheE -00000000802086ae _GLOBAL__sub_I__ZN11BufferCache4initEv -0000000000000000 fdt.cc -0000000000000000 handler.cc -0000000000000000 uart.cc -00000000802092ca _GLOBAL__sub_I__ZN7Drivers12uart_tx_lockE -0000000080226ca8 _ZN7Drivers7uart_rxE -0000000080226d48 _ZN7Drivers4consE -0000000000000000 virtio_dist.cc -00000000802098ac _GLOBAL__sub_I__ZN6VirtIO4diskE -0000000080214a58 _ZL11virtio_base -0000000000000000 plic.cc -0000000080214a60 _GLOBAL_OFFSET_TABLE_ -0000000080206cfa _ZN3PMM8list_addEP4Pagei -000000008020994e _ZN4PLIC8completeEi -0000000080205c2e _ZN5Mutex7acquireEv -0000000080204d0a _ZN3VFS11nameiparentEPKcPc -00000000802077ce _ZN8RunQueue4initEPKc -0000000080202000 trampoline -0000000080211748 initcode_end -00000000802072c8 _ZN5Timer8get_lockEv -0000000080203112 _ZN4Pipe4readEyi -0000000080204f9e _ZN3SBI9set_timerEy -0000000080206cc6 _ZN3PMM10page_to_paEP4Page -0000000080206fd6 _ZN3PMM4initEv -000000008021de60 _ZN5Timer9tickslockE -00000000802078aa _Z11usertrapretv -00000000802049d0 _ZN3VFS4initEv -0000000080207ac8 _ZN11ProcManager4initEv -00000000802062ea _ZN2VM10uvmdeallocEPyyy -00000000802080fc _ZN11ProcManager4exitEi -0000000080205a82 _Z6myprocv -000000008021dc10 g_uart_base -000000008020721e _ZN5Timer8get_timeEv -0000000080214960 _ZTV15FAT32FileSystem -0000000080207184 _ZN3PMM9free_pageEPv -0000000080204ece _Z6memcpyPvPKvj -000000008021dbc8 fat32_fs -0000000080205896 _Znwm -000000008020407a _ZN10FAT32Inode5writeEPKcjji -0000000080203918 _ZN15FAT32FileSystem4rootEv -0000000080208980 _ZN4Trap4initEv -0000000080204aba _ZN3VFS10iunlockputEP5Inode -00000000802072d2 _ZN5Timer13get_tick_chanEv -0000000080207f46 _ZN11ProcManager5sleepEPvP8Spinlock -0000000080205ca0 _ZN5Mutex7releaseEv -00000000802084c0 _ZN11BufferCache5breadEjj -0000000080205a32 _Z7pop_offv -000000008020804a _ZN11ProcManager6wakeupEPv -0000000080202090 userret -000000008020818a _ZN11ProcManager4waitEy -000000008021dc00 g_ram_start -00000000802048dc _ZN15FAT32FileSystemD2Ev -00000000802065cc _ZN2VM16handle_cow_faultEPyy -000000008020357a _ZN9FileTable4statEP4filey -000000008020621a _ZN2VM8uvmallocEPyyyi -0000000080201000 kernelvec -0000000080205b18 _ZN8Spinlock7releaseEv -0000000080204bb0 _ZN3VFS5nameiEPKc -000000008021dc18 _ZN2VM16kernel_pagetableE -0000000080204ed2 _Z6strcpyPcPKc -0000000080214c00 sbss -00000000802098ca _ZN4PLIC4initEv -0000000080204a32 _ZN3VFS4idupEP5Inode -00000000802031f0 _ZN9FileTable5allocEv -0000000080204f44 _Z10strcasecmpPKcS0_ -0000000080209008 _ZN7Drivers12console_readEyi -00000000802068b4 _ZN2VM8walkaddrEPyy -0000000080206d26 _ZN3PMM8list_delEP4Pagei -0000000080203998 _ZN10FAT32Inode4readEPcjji -00000000802059da _ZN8Spinlock4initEPKc -0000000080209766 _ZN6VirtIO7test_rwEv -000000008021e5e0 initproc -00000000802058fa _ZdlPv -0000000080203294 _ZN9FileTable5closeEP4file -00000000802048de _ZN10FAT32InodeD0Ev -00000000802072a2 _ZN5Timer9get_ticksEv -00000000802089ba _ZN4Trap7devintrEv -0000000080204900 _ZN5Inode7getattrEP5kstat -00000000802083f4 _ZN11ProcManager20create_kernel_threadEPFvvEPKc -0000000080206968 _ZN4Slab7kmallocEy -0000000080204afc _ZN3VFS10mount_rootEP5Inode -0000000080204e2a _Z6memsetPvij -0000000080208682 _ZN11BufferCache6bunpinEP3Buf -0000000080209502 _ZN6VirtIO2rwEiyPc -0000000080207b58 _ZN11ProcManager9schedulerEv -00000000802048e6 _ZN15FAT32FileSystemD0Ev -00000000802096c8 _ZN6VirtIO4intrEv -0000000080204fd2 _ZN3SBI10sbi_rebootEv -00000000802031dc _ZN9FileTable4initEv -0000000080206c96 _ZN3PMM10pa_to_pageEy -000000008020348e _ZN9FileTable4readEP4fileyi -000000008020591e kernel_main -00000000802085a2 _ZN11BufferCache6bwriteEP3Buf -0000000080208f9c _ZN7Drivers9uart_intrEv -0000000080203d2c _ZN10FAT32Inode6lookupEPKc -00000000802059e6 _ZN5Mutex4initEPKc -0000000080204736 _ZN10FAT32Inode8truncateEv -00000000802063a0 _ZN2VM7uvmcopyEPyS0_y -000000008021dc20 caches -00000000802050e8 _Z7syscallv -000000008021de80 proc_mem_lock -0000000080208d2c _ZN7Drivers9uart_putcEc -0000000080204696 _ZN15FAT32FileSystem18free_cluster_chainEj -0000000080203504 _ZN9FileTable5writeEP4fileyi -0000000080204a60 _ZN3VFS5ilockEP5Inode -00000000802035ce _ZN9FileTable5lseekEP4fileii -0000000080200000 _start -0000000080206510 _ZN2VM9copyinstrEPyPcyy -0000000080208656 _ZN11BufferCache4bpinEP3Buf -0000000080202fe6 _ZN4Pipe5closeEb -000000008021de48 _ZN3PMM8pmm_lockE -00000000802068ea _ZN4Slab4initEv -0000000080227000 kernel_end -000000008020615e _ZN2VM9uvmcreateEv -0000000080208caa _ZN7Drivers9uart_initEv -000000008020725e _ZN5Timer4tickEv -0000000080208b32 usertrap -00000000802048da _ZN10FAT32InodeD2Ev -000000008020303e _ZN4Pipe5writeEyi -0000000080214990 _ZTV10FAT32Inode -0000000080204e74 _Z7memmovePvPKvj -00000000802097f0 _ZN6VirtIO8test_bioEv -000000008020590a _ZdlPvm -00000000802077b6 _Z5mycpuv -000000008020675c _ZN2VM7kvminitEv -0000000080205cd0 _ZN5Mutex7holdingEv -000000008021e2e0 runqueues -00000000802072f8 _ZN4Exec4execEPcPS0_ -000000008021cc00 stack_top -000000008021dea0 cpus -0000000080208dc8 _ZN7Drivers12uart_put_intEi -00000000802048da _ZN10FAT32InodeD1Ev -000000008021dbf8 g_ram_size -000000008021dde0 _ZN3PMM11total_pagesE -0000000080204e46 _Z6memcmpPKvS0_j -00000000802042fe _ZN10FAT32Inode6createEPKcsss -000000008020718a _ZN3PMM16print_free_listsEv -0000000080206d50 _ZN3PMM11alloc_pagesEi -0000000080202000 uservec -0000000080205b80 _ZN8Spinlock7acquireEv -0000000080205902 _ZdaPv -000000008020591a _ZnwmPv -00000000802061b2 _ZN2VM7uvminitEPyPhy -000000008020990c _ZN4PLIC8inithartEv -00000000802060e6 _ZN2VM8mappagesEPyyyyi -000000008020333e _ZN4Pipe11create_pairEPP4fileS2_ -0000000080207806 _ZN8RunQueue7enqueueEP4Proc -00000000802049dc _ZN3VFS4iputEP5Inode -0000000080206890 _ZN2VM11kvminithartEv -0000000080207874 _ZN8RunQueue5stealEv -00000000802149f0 _ZTV5Inode -0000000080226df0 _ZN7Drivers12uart_tx_lockE -0000000080204f8a _ZN3SBI8sbi_callEiiyyy -0000000080207c98 _ZN11ProcManager5yieldEv -0000000080226e08 _ZN6VirtIO4diskE -0000000080206332 _ZN2VM8uvmunmapEPyyyi -0000000080205a04 _Z8push_offv -00000000802085d6 _ZN11BufferCache6brelseEP3Buf -0000000080203f1c _ZN15FAT32FileSystem12next_clusterEj -0000000080203656 _ZN15FAT32FileSystem4initEv -00000000802058c8 _Znam -0000000080226f30 ebss -000000008021cc00 g_dtb_addr -0000000080203f5e _ZN15FAT32FileSystem13alloc_clusterEv -000000008020870c _Z8fdt_inity -0000000080206480 _ZN2VM6copyinEPyPcyy -0000000080204b24 _ZN3VFS8get_rootEv -0000000080208d6a _ZN7Drivers9uart_putsEPKc -00000000802066a2 _ZN2VM7copyoutEPyyPcy -0000000080207224 _ZN5Timer16set_next_triggerEv -0000000080207162 _ZN3PMM10alloc_pageEv -0000000080206e7a _ZN3PMM10free_pagesEPvi -000000008020004c swtch -000000008020783e _ZN8RunQueue7dequeueEv -0000000080203f0e _ZN15FAT32FileSystem17cluster_to_sectorEj -0000000080207934 _Z7forkretv -000000008020795c _Z4forkv -0000000080206b38 _ZN4Slab5kfreeEPv -000000008020a000 initcode_start -0000000080208958 _Z5panicPKc -000000008020898c _ZN4Trap8inithartEv -000000008020843a _ZN11BufferCache4initEv -000000008021de78 _ZN5Timer5ticksE -000000008021dc08 g_plic_base -00000000802048dc _ZN15FAT32FileSystemD1Ev -00000000802082c8 _ZN11ProcManager4killEi -0000000080204f0c _Z6strcmpPKcS0_ -0000000080207236 _ZN5Timer4initEv -0000000080203252 _ZN9FileTable3dupEP4file -0000000080204a80 _ZN3VFS7iunlockEP5Inode -00000000802083ac _ZN11ProcManager8growprocEi -0000000080205abc _ZN8Spinlock7holdingEv -0000000080207d56 _ZN11ProcManager9user_initEv -000000008021de98 proc_list_head -0000000080204eec _Z6strlenPKc -0000000080203b72 _ZN10FAT32Inode6unlinkEPKc -000000008020389c _ZN10FAT32Inode6updateEv -000000008020993c _ZN4PLIC5claimEv -0000000080208ed2 _ZN7Drivers9print_hexEy -000000008021ddf0 _ZN3PMM9free_areaE -0000000080204fb2 _ZN3SBI12sbi_shutdownEv -0000000080205912 _ZdaPvm -000000008020633e _ZN2VM7uvmfreeEPyy -0000000080208a1c kerneltrap -00000000802092fc _ZN6VirtIO4initEv -000000008021dde8 _ZN3PMM7mem_mapE -000000008020477a _Z10fat32_testv diff --git a/build/src/boot/entry.o b/build/src/boot/entry.o deleted file mode 100644 index ca04d37..0000000 Binary files a/build/src/boot/entry.o and /dev/null differ diff --git a/build/src/drivers/plic.o b/build/src/drivers/plic.o deleted file mode 100644 index a41ab0f..0000000 Binary files a/build/src/drivers/plic.o and /dev/null differ diff --git a/build/src/drivers/uart.o b/build/src/drivers/uart.o deleted file mode 100644 index d50439d..0000000 Binary files a/build/src/drivers/uart.o and /dev/null differ diff --git a/build/src/drivers/virtio_dist.o b/build/src/drivers/virtio_dist.o deleted file mode 100644 index 594b0e7..0000000 Binary files a/build/src/drivers/virtio_dist.o and /dev/null differ diff --git a/build/src/fs/fat32.o b/build/src/fs/fat32.o deleted file mode 100644 index 1616ee4..0000000 Binary files a/build/src/fs/fat32.o and /dev/null differ diff --git a/build/src/fs/file.o b/build/src/fs/file.o deleted file mode 100644 index 2e70636..0000000 Binary files a/build/src/fs/file.o and /dev/null differ diff --git a/build/src/fs/fs.o b/build/src/fs/fs.o deleted file mode 100644 index 71b2d7a..0000000 Binary files a/build/src/fs/fs.o and /dev/null differ diff --git a/build/src/kernel/bio.o b/build/src/kernel/bio.o deleted file mode 100644 index 578821b..0000000 Binary files a/build/src/kernel/bio.o and /dev/null differ diff --git a/build/src/kernel/config.o b/build/src/kernel/config.o deleted file mode 100644 index a07739e..0000000 Binary files a/build/src/kernel/config.o and /dev/null differ diff --git a/build/src/kernel/cxx.o b/build/src/kernel/cxx.o deleted file mode 100644 index d15159e..0000000 Binary files a/build/src/kernel/cxx.o and /dev/null differ diff --git a/build/src/kernel/fdt.o b/build/src/kernel/fdt.o deleted file mode 100644 index c2e2fe3..0000000 Binary files a/build/src/kernel/fdt.o and /dev/null differ diff --git a/build/src/kernel/initcode.o b/build/src/kernel/initcode.o deleted file mode 100644 index 1f290b6..0000000 Binary files a/build/src/kernel/initcode.o and /dev/null differ diff --git a/build/src/kernel/main.o b/build/src/kernel/main.o deleted file mode 100644 index 7e3cda9..0000000 Binary files a/build/src/kernel/main.o and /dev/null differ diff --git a/build/src/kernel/mm/pmm.o b/build/src/kernel/mm/pmm.o deleted file mode 100644 index b8511f7..0000000 Binary files a/build/src/kernel/mm/pmm.o and /dev/null differ diff --git a/build/src/kernel/mm/slab.o b/build/src/kernel/mm/slab.o deleted file mode 100644 index 9fab0ae..0000000 Binary files a/build/src/kernel/mm/slab.o and /dev/null differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o deleted file mode 100644 index 96840aa..0000000 Binary files a/build/src/kernel/mm/vm.o and /dev/null differ diff --git a/build/src/kernel/proc/exec.o b/build/src/kernel/proc/exec.o deleted file mode 100644 index 45d6f33..0000000 Binary files a/build/src/kernel/proc/exec.o and /dev/null differ diff --git a/build/src/kernel/proc/proc.o b/build/src/kernel/proc/proc.o deleted file mode 100644 index d2dc88d..0000000 Binary files a/build/src/kernel/proc/proc.o and /dev/null differ diff --git a/build/src/kernel/proc/swtch.o b/build/src/kernel/proc/swtch.o deleted file mode 100644 index 8fee25b..0000000 Binary files a/build/src/kernel/proc/swtch.o and /dev/null differ diff --git a/build/src/kernel/sbi.o b/build/src/kernel/sbi.o deleted file mode 100644 index bb7254e..0000000 Binary files a/build/src/kernel/sbi.o and /dev/null differ diff --git a/build/src/kernel/spinlock.o b/build/src/kernel/spinlock.o deleted file mode 100644 index f4e06c3..0000000 Binary files a/build/src/kernel/spinlock.o and /dev/null differ diff --git a/build/src/kernel/syscall.o b/build/src/kernel/syscall.o deleted file mode 100644 index 65e0c93..0000000 Binary files a/build/src/kernel/syscall.o and /dev/null differ diff --git a/build/src/kernel/timer.o b/build/src/kernel/timer.o deleted file mode 100644 index 84dd477..0000000 Binary files a/build/src/kernel/timer.o and /dev/null differ diff --git a/build/src/kernel/trap/handler.o b/build/src/kernel/trap/handler.o deleted file mode 100644 index 7342eef..0000000 Binary files a/build/src/kernel/trap/handler.o and /dev/null differ diff --git a/build/src/kernel/trap/trampoline.o b/build/src/kernel/trap/trampoline.o deleted file mode 100644 index ce16681..0000000 Binary files a/build/src/kernel/trap/trampoline.o and /dev/null differ diff --git a/build/src/kernel/trap/trap.o b/build/src/kernel/trap/trap.o deleted file mode 100644 index ebb1b8f..0000000 Binary files a/build/src/kernel/trap/trap.o and /dev/null differ diff --git a/build/src/lib/string.o b/build/src/lib/string.o deleted file mode 100644 index 6818c98..0000000 Binary files a/build/src/lib/string.o and /dev/null differ diff --git a/build/ulib/cxx.o b/build/ulib/cxx.o deleted file mode 100644 index a8a97d0..0000000 Binary files a/build/ulib/cxx.o and /dev/null differ diff --git a/build/ulib/iostream.o b/build/ulib/iostream.o deleted file mode 100644 index 33930e4..0000000 Binary files a/build/ulib/iostream.o and /dev/null differ diff --git a/build/ulib/stdio.o b/build/ulib/stdio.o deleted file mode 100644 index b882963..0000000 Binary files a/build/ulib/stdio.o and /dev/null differ diff --git a/build/ulib/stdlib.o b/build/ulib/stdlib.o deleted file mode 100644 index 604c71d..0000000 Binary files a/build/ulib/stdlib.o and /dev/null differ diff --git a/build/ulib/string.o b/build/ulib/string.o deleted file mode 100644 index 3265836..0000000 Binary files a/build/ulib/string.o and /dev/null differ diff --git a/build/user/echo b/build/user/echo deleted file mode 100755 index e070770..0000000 Binary files a/build/user/echo and /dev/null differ diff --git a/build/user/echo.asm b/build/user/echo.asm deleted file mode 100644 index b2210f2..0000000 --- a/build/user/echo.asm +++ /dev/null @@ -1,10641 +0,0 @@ - -build/user/echo: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000000000000
: -#include "user/user.h" -#include "ulib/stdio.h" -#include "ulib/string.h" - -int main(int argc, char* argv[]) -{ - 0: 7179 addi sp,sp,-48 - 2: f406 sd ra,40(sp) - int i; - - for (i = 1; i < argc; i++) - 4: 4785 li a5,1 - 6: 06a7d463 bge a5,a0,6e - a: e84a sd s2,16(sp) - c: ffe5091b addiw s2,a0,-2 - 10: 02091793 slli a5,s2,0x20 - 14: 01d7d913 srli s2,a5,0x1d - 18: 01058793 addi a5,a1,16 - 1c: f022 sd s0,32(sp) - 1e: e44e sd s3,8(sp) - 20: ec26 sd s1,24(sp) - 22: 00858413 addi s0,a1,8 - 26: 993e add s2,s2,a5 - { - write(1, argv[i], strlen(argv[i])); - if (i + 1 < argc) - { - write(1, " ", 1); - 28: 00005997 auipc s3,0x5 - 2c: fb898993 addi s3,s3,-72 # 4fe0 <_GLOBAL__sub_I__ZSt3cin+0x32> - 30: a019 j 36 - 32: 07c000ef jal ae - write(1, argv[i], strlen(argv[i])); - 36: 6004 ld s1,0(s0) - if (i + 1 < argc) - 38: 0421 addi s0,s0,8 - write(1, argv[i], strlen(argv[i])); - 3a: 8526 mv a0,s1 - 3c: 2f3040ef jal 4b2e - 40: 0005061b sext.w a2,a0 - 44: 85a6 mv a1,s1 - 46: 4505 li a0,1 - 48: 066000ef jal ae - write(1, " ", 1); - 4c: 4605 li a2,1 - 4e: 85ce mv a1,s3 - 50: 4505 li a0,1 - if (i + 1 < argc) - 52: ff2410e3 bne s0,s2,32 - } - else - { - write(1, "\n", 1); - 56: 4605 li a2,1 - 58: 00005597 auipc a1,0x5 - 5c: f9058593 addi a1,a1,-112 # 4fe8 <_GLOBAL__sub_I__ZSt3cin+0x3a> - 60: 4505 li a0,1 - 62: 04c000ef jal ae - 66: 7402 ld s0,32(sp) - 68: 64e2 ld s1,24(sp) - 6a: 6942 ld s2,16(sp) - 6c: 69a2 ld s3,8(sp) - } - } - exit(0); - 6e: 4501 li a0,0 - 70: 35c040ef jal 43cc - 74: 70a2 ld ra,40(sp) - 76: 4501 li a0,0 - 78: 6145 addi sp,sp,48 - 7a: 8082 ret - -000000000000007c <_start>: -.global _start - -_start: - - - call main - 7c: f85ff0ef jal 0
- - call exit - 80: 34c040ef jal 43cc - - 84: a001 j 84 <_start+0x8> - -0000000000000086 : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - 86: 488d li a7,3 - 88: 00000073 ecall - 8c: 8082 ret - -000000000000008e : - -SYSCALL(fork) - 8e: 4889 li a7,2 - 90: 00000073 ecall - 94: 8082 ret - -0000000000000096 : -SYSCALL(wait) - 96: 4891 li a7,4 - 98: 00000073 ecall - 9c: 8082 ret - -000000000000009e : -SYSCALL(pipe) - 9e: 4895 li a7,5 - a0: 00000073 ecall - a4: 8082 ret - -00000000000000a6 : -SYSCALL(read) - a6: 4899 li a7,6 - a8: 00000073 ecall - ac: 8082 ret - -00000000000000ae : -SYSCALL(write) - ae: 48c5 li a7,17 - b0: 00000073 ecall - b4: 8082 ret - -00000000000000b6 : -SYSCALL(close) - b6: 48d9 li a7,22 - b8: 00000073 ecall - bc: 8082 ret - -00000000000000be : -SYSCALL(kill) - be: 489d li a7,7 - c0: 00000073 ecall - c4: 8082 ret - -00000000000000c6 : -SYSCALL(exec) - c6: 48a1 li a7,8 - c8: 00000073 ecall - cc: 8082 ret - -00000000000000ce : -SYSCALL(open) - ce: 48c1 li a7,16 - d0: 00000073 ecall - d4: 8082 ret - -00000000000000d6 : -SYSCALL(mknod) - d6: 48c9 li a7,18 - d8: 00000073 ecall - dc: 8082 ret - -00000000000000de : -SYSCALL(unlink) - de: 48cd li a7,19 - e0: 00000073 ecall - e4: 8082 ret - -00000000000000e6 : -SYSCALL(fstat) - e6: 48a5 li a7,9 - e8: 00000073 ecall - ec: 8082 ret - -00000000000000ee : -SYSCALL(link) - ee: 48d1 li a7,20 - f0: 00000073 ecall - f4: 8082 ret - -00000000000000f6 : -SYSCALL(mkdir) - f6: 48d5 li a7,21 - f8: 00000073 ecall - fc: 8082 ret - -00000000000000fe : -SYSCALL(chdir) - fe: 48a9 li a7,10 - 100: 00000073 ecall - 104: 8082 ret - -0000000000000106 : -SYSCALL(dup) - 106: 48ad li a7,11 - 108: 00000073 ecall - 10c: 8082 ret - -000000000000010e : -SYSCALL(getpid) - 10e: 48b1 li a7,12 - 110: 00000073 ecall - 114: 8082 ret - -0000000000000116 : -SYSCALL(sbrk) - 116: 48b5 li a7,13 - 118: 00000073 ecall - 11c: 8082 ret - -000000000000011e : -SYSCALL(sleep) - 11e: 48b9 li a7,14 - 120: 00000073 ecall - 124: 8082 ret - -0000000000000126 : -SYSCALL(uptime) - 126: 48bd li a7,15 - 128: 00000073 ecall - 12c: 8082 ret - -000000000000012e : -SYSCALL(putc) - 12e: 4885 li a7,1 - 130: 00000073 ecall - 134: 8082 ret - -0000000000000136 : -SYSCALL(disk_test) - 136: 48dd li a7,23 - 138: 00000073 ecall - 13c: 8082 ret - -000000000000013e : -SYSCALL(lseek) - 13e: 48e1 li a7,24 - 140: 00000073 ecall - 144: 8082 ret - -0000000000000146 : - 146: 48e5 li a7,25 - 148: 00000073 ecall - 14c: 8082 ret - -000000000000014e : - 14e: 45dc lw a5,12(a1) - 150: 4598 lw a4,8(a1) - 152: 9fb1 addw a5,a5,a2 - 154: c5dc sw a5,12(a1) - 156: 0007069b sext.w a3,a4 - 15a: 00e65463 bge a2,a4,162 - 15e: 0006069b sext.w a3,a2 - 162: c685 beqz a3,18a - 164: 619c ld a5,0(a1) - 166: 00a78e63 beq a5,a0,182 - 16a: 00d50633 add a2,a0,a3 - 16e: 00054703 lbu a4,0(a0) - 172: 0505 addi a0,a0,1 - 174: 0785 addi a5,a5,1 - 176: fee78fa3 sb a4,-1(a5) - 17a: fec56ae3 bltu a0,a2,16e - 17e: 6188 ld a0,0(a1) - 180: 4598 lw a4,8(a1) - 182: 9f15 subw a4,a4,a3 - 184: 9536 add a0,a0,a3 - 186: e188 sd a0,0(a1) - 188: c598 sw a4,8(a1) - 18a: 1ff00793 li a5,511 - 18e: 00e7d463 bge a5,a4,196 - 192: 6188 ld a0,0(a1) - 194: 8082 ret - 196: 01058513 addi a0,a1,16 - 19a: 8082 ret - -000000000000019c : - 19c: 45dc lw a5,12(a1) - 19e: 01058513 addi a0,a1,16 - 1a2: 9fb1 addw a5,a5,a2 - 1a4: c5dc sw a5,12(a1) - 1a6: 8082 ret - -00000000000001a8 : - 1a8: e20508d3 fmv.x.d a7,fa0 - 1ac: 82aa mv t0,a0 - 1ae: 4348d813 srai a6,a7,0x34 - 1b2: 8ec6 mv t4,a7 - 1b4: 7ff87813 andi a6,a6,2047 - 1b8: 8346 mv t1,a7 - 1ba: 03f8d513 srli a0,a7,0x3f - 1be: 0008d663 bgez a7,1ca - 1c2: 22a517d3 fneg.d fa5,fa0 - 1c6: e20788d3 fmv.x.d a7,fa5 - 1ca: 7ff00e13 li t3,2047 - 1ce: 35c80663 beq a6,t3,51a - 1d2: 1101 addi sp,sp,-32 - 1d4: 14080363 beqz a6,31a - 1d8: c018081b addiw a6,a6,-1023 - 1dc: ec22 sd s0,24(sp) - 1de: 02081313 slli t1,a6,0x20 - 1e2: 66034d63 bltz t1,85c - 1e6: 4d100313 li t1,1233 - 1ea: 0303033b mulw t1,t1,a6 - 1ee: 4849 li a6,18 - 1f0: 40c3531b sraiw t1,t1,0xc - 1f4: 0013039b addiw t2,t1,1 - 1f8: 4078083b subw a6,a6,t2 - 1fc: 4359 li t1,22 - 1fe: 17036163 bltu t1,a6,360 - 202: 00005317 auipc t1,0x5 - 206: 12630313 addi t1,t1,294 # 5328 - 20a: 080e slli a6,a6,0x3 - 20c: 981a add a6,a6,t1 - 20e: 00083e03 ld t3,0(a6) - 212: 00083607 fld fa2,0(a6) - 216: f20887d3 fmv.d.x fa5,a7 - 21a: f8000837 lui a6,0xf8000 - 21e: 01187333 and t1,a6,a7 - 222: 01c87833 and a6,a6,t3 - 226: 12f676d3 fmul.d fa3,fa2,fa5 - 22a: f20807d3 fmv.d.x fa5,a6 - 22e: f2030753 fmv.d.x fa4,t1 - 232: f20305d3 fmv.d.x fa1,t1 - 236: 0af67653 fsub.d fa2,fa2,fa5 - 23a: f20887d3 fmv.d.x fa5,a7 - 23e: 0ae7f753 fsub.d fa4,fa5,fa4 - 242: f20807d3 fmv.d.x fa5,a6 - 246: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 24a: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 24e: f20805d3 fmv.d.x fa1,a6 - 252: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 256: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 25a: 02d777d3 fadd.d fa5,fa4,fa3 - 25e: 3782e837 lui a6,0x3782e - 262: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826317> - 266: 0832 slli a6,a6,0xc - 268: 9d980813 addi a6,a6,-1575 - 26c: 084a slli a6,a6,0x12 - 26e: 187d addi a6,a6,-1 - 270: c22798d3 fcvt.l.d a7,fa5,rtz - 274: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 278: 00070e1b sext.w t3,a4 - 27c: d228f653 fcvt.d.l fa2,a7 - 280: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 284: 0ad77753 fsub.d fa4,fa4,fa3 - 288: 0af5f6d3 fsub.d fa3,fa1,fa5 - 28c: 0ad5f553 fsub.d fa0,fa1,fa3 - 290: 02d67653 fadd.d fa2,fa2,fa3 - 294: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 298: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 29c: 02b7f7d3 fadd.d fa5,fa5,fa1 - 2a0: 02e7f7d3 fadd.d fa5,fa5,fa4 - 2a4: c2279fd3 fcvt.l.d t6,fa5,rtz - 2a8: 9fc6 add t6,t6,a7 - 2aa: 19f87063 bgeu a6,t6,42a - 2ae: 2385 addiw t2,t2,1 - 2b0: 300e4363 bltz t3,5b6 - 2b4: 00e3833b addw t1,t2,a4 - 2b8: 475d li a4,23 - 2ba: 30677663 bgeu a4,t1,5c6 - 2be: 577d li a4,-1 - 2c0: 9301 srli a4,a4,0x20 - 2c2: 43f75863 bge a4,t6,6f2 - 2c6: 07d00313 li t1,125 - 2ca: 877e mv a4,t6 - 2cc: 4e01 li t3,0 - 2ce: 3e800813 li a6,1000 - 2d2: 130e slli t1,t1,0x23 - 2d4: a039 j 2e2 - 2d6: 030747b3 div a5,a4,a6 - 2da: 4e05 li t3,1 - 2dc: 40674c63 blt a4,t1,6f4 - 2e0: 873e mv a4,a5 - 2e2: 030768b3 rem a7,a4,a6 - 2e6: fe0888e3 beqz a7,2d6 - 2ea: 400e0163 beqz t3,6ec - 2ee: 8fbe mv t6,a5 - 2f0: 05f5e7b7 lui a5,0x5f5e - 2f4: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56947> - 2f8: 04060413 addi s0,a2,64 - 2fc: 03860613 addi a2,a2,56 - 300: 15f7c863 blt a5,t6,450 - 304: 000f871b sext.w a4,t6 - 308: 20070463 beqz a4,510 - 30c: 4f01 li t5,0 - 30e: 4f81 li t6,0 - 310: 00006e97 auipc t4,0x6 - 314: 5b0e8e93 addi t4,t4,1456 # 68c0 - 318: aaa9 j 472 - 31a: 0306 slli t1,t1,0x1 - 31c: 3e030e63 beqz t1,718 - 320: 4305 li t1,1 - 322: ec22 sd s0,24(sp) - 324: 00ce9e13 slli t3,t4,0xc - 328: 134e slli t1,t1,0x33 - 32a: 520e4063 bltz t3,84a - 32e: 40135313 srai t1,t1,0x1 - 332: 01d37e33 and t3,t1,t4 - 336: 8f42 mv t5,a6 - 338: 387d addiw a6,a6,-1 - 33a: fe0e0ae3 beqz t3,32e - 33e: 26900313 li t1,617 - 342: c00f081b addiw a6,t5,-1024 - 346: 0268083b mulw a6,a6,t1 - 34a: 41f8531b sraiw t1,a6,0x1f - 34e: 0153531b srliw t1,t1,0x15 - 352: 0103033b addw t1,t1,a6 - 356: 40b3539b sraiw t2,t1,0xb - 35a: 4849 li a6,18 - 35c: 4078083b subw a6,a6,t2 - 360: 41f8531b sraiw t1,a6,0x1f - 364: 00684eb3 xor t4,a6,t1 - 368: 406e8f3b subw t5,t4,t1 - 36c: 2c900313 li t1,713 - 370: 03e3033b mulw t1,t1,t5 - 374: 4e35 li t3,13 - 376: 8efa mv t4,t5 - 378: 40e35f9b sraiw t6,t1,0xe - 37c: 837e mv t1,t6 - 37e: 23fe4363 blt t3,t6,5a4 - 382: 5e25 li t3,-23 - 384: 026e0e3b mulw t3,t3,t1 - 388: 01de0ebb addw t4,t3,t4 - 38c: 22084f63 bltz a6,5ca - 390: f2000753 fmv.d.x fa4,zero - 394: 00005e17 auipc t3,0x5 - 398: f94e0e13 addi t3,t3,-108 # 5328 - 39c: 380e9e63 bnez t4,738 - 3a0: f20887d3 fmv.d.x fa5,a7 - 3a4: fff30f1b addiw t5,t1,-1 - 3a8: 0f0e slli t5,t5,0x3 - 3aa: 02f777d3 fadd.d fa5,fa4,fa5 - 3ae: 030e slli t1,t1,0x3 - 3b0: 9f72 add t5,t5,t3 - 3b2: 9e1a add t3,t3,t1 - 3b4: 2e0e3e03 ld t3,736(t3) - 3b8: 2e8f3587 fld fa1,744(t5) - 3bc: f8000837 lui a6,0xf8000 - 3c0: e2078ed3 fmv.x.d t4,fa5 - 3c4: 12b7f6d3 fmul.d fa3,fa5,fa1 - 3c8: f2088653 fmv.d.x fa2,a7 - 3cc: 01d87333 and t1,a6,t4 - 3d0: 01c87833 and a6,a6,t3 - 3d4: f20807d3 fmv.d.x fa5,a6 - 3d8: f2030053 fmv.d.x ft0,t1 - 3dc: 0af5f553 fsub.d fa0,fa1,fa5 - 3e0: f20e87d3 fmv.d.x fa5,t4 - 3e4: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 3e8: f20807d3 fmv.d.x fa5,a6 - 3ec: f2030653 fmv.d.x fa2,t1 - 3f0: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 3f4: f20e87d3 fmv.d.x fa5,t4 - 3f8: 0a177753 fsub.d fa4,fa4,ft1 - 3fc: f20300d3 fmv.d.x ft1,t1 - 400: 0a07f7d3 fsub.d fa5,fa5,ft0 - 404: 350f3007 fld ft0,848(t5) - 408: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 40c: 12b77753 fmul.d fa4,fa4,fa1 - 410: f20805d3 fmv.d.x fa1,a6 - 414: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 418: f20e85d3 fmv.d.x fa1,t4 - 41c: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 420: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 424: 02e7f753 fadd.d fa4,fa5,fa4 - 428: bd0d j 25a - 42a: 00e3833b addw t1,t2,a4 - 42e: 2a0e4663 bltz t3,6da - 432: 475d li a4,23 - 434: 10677663 bgeu a4,t1,540 - 438: e80f93e3 bnez t6,2be - 43c: 05f5e7b7 lui a5,0x5f5e - 440: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56947> - 444: 04060413 addi s0,a2,64 - 448: 03860613 addi a2,a2,56 - 44c: ebf7dce3 bge a5,t6,304 - 450: 4f01 li t5,0 - 452: 00006e97 auipc t4,0x6 - 456: 46ee8e93 addi t4,t4,1134 # 68c0 - 45a: 05f5e7b7 lui a5,0x5f5e - 45e: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56948> - 462: 02ffe833 rem a6,t6,a5 - 466: 02ffcfb3 div t6,t6,a5 - 46a: 0008071b sext.w a4,a6 - 46e: 0a080463 beqz a6,516 - 472: 8822 mv a6,s0 - 474: 06400893 li a7,100 - 478: 06300e13 li t3,99 - 47c: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8846> - 47e: 0007031b sext.w t1,a4 - 482: 031777bb remuw a5,a4,a7 - 486: 2785 addiw a5,a5,1 - 488: 0017979b slliw a5,a5,0x1 - 48c: 1782 slli a5,a5,0x20 - 48e: 9381 srli a5,a5,0x20 - 490: 97f6 add a5,a5,t4 - 492: 0007d783 lhu a5,0(a5) - 496: 0317573b divuw a4,a4,a7 - 49a: 00f81023 sh a5,0(a6) - 49e: fc6e6fe3 bltu t3,t1,47c - 4a2: 008f0f3b addw t5,t5,s0 - 4a6: 410f0f3b subw t5,t5,a6 - 4aa: 020f8f63 beqz t6,4e8 - 4ae: 87c2 mv a5,a6 - 4b0: 03000713 li a4,48 - 4b4: 04c80c63 beq a6,a2,50c - 4b8: 17fd addi a5,a5,-1 - 4ba: 00e78023 sb a4,0(a5) - 4be: fec79de3 bne a5,a2,4b8 - 4c2: 408807b3 sub a5,a6,s0 - 4c6: 00ff07bb addw a5,t5,a5 - 4ca: 1461 addi s0,s0,-8 - 4cc: 00878f1b addiw t5,a5,8 - 4d0: 05f5e7b7 lui a5,0x5f5e - 4d4: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56947> - 4d8: ff840613 addi a2,s0,-8 - 4dc: f7f7cfe3 blt a5,t6,45a - 4e0: 000f871b sext.w a4,t6 - 4e4: 4f81 li t6,0 - 4e6: b771 j 472 - 4e8: 020f0563 beqz t5,512 - 4ec: 00084703 lbu a4,0(a6) - 4f0: 03000793 li a5,48 - 4f4: 22f70f63 beq a4,a5,732 - 4f8: 2f01 sext.w t5,t5 - 4fa: 0076a023 sw t2,0(a3) - 4fe: 6462 ld s0,24(sp) - 500: 0102b023 sd a6,0(t0) - 504: 01e5a023 sw t5,0(a1) - 508: 6105 addi sp,sp,32 - 50a: 8082 ret - 50c: 8442 mv s0,a6 - 50e: b7c9 j 4d0 - 510: 8822 mv a6,s0 - 512: 4f01 li t5,0 - 514: b7dd j 4fa - 516: 8822 mv a6,s0 - 518: bf59 j 4ae - 51a: 0eb2 slli t4,t4,0xc - 51c: 00005797 auipc a5,0x5 - 520: adc78793 addi a5,a5,-1316 # 4ff8 <_GLOBAL__sub_I__ZSt3cin+0x4a> - 524: 000e8663 beqz t4,530 - 528: 00005797 auipc a5,0x5 - 52c: ac878793 addi a5,a5,-1336 # 4ff0 <_GLOBAL__sub_I__ZSt3cin+0x42> - 530: 00f2b023 sd a5,0(t0) - 534: 679d lui a5,0x7 - 536: c29c sw a5,0(a3) - 538: 4f0d li t5,3 - 53a: 01e5a023 sw t5,0(a1) - 53e: 8082 ret - 540: 3b9ad737 lui a4,0x3b9ad - 544: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5247> - 548: 07f76f63 bltu a4,t6,5c6 - 54c: 4805 li a6,1 - 54e: 02081713 slli a4,a6,0x20 - 552: 01d75893 srli a7,a4,0x1d - 556: 00005717 auipc a4,0x5 - 55a: 18a70713 addi a4,a4,394 # 56e0 - 55e: 9746 add a4,a4,a7 - 560: 4e51 li t3,20 - 562: a021 j 56a - 564: 2805 addiw a6,a6,1 - 566: edc809e3 beq a6,t3,438 - 56a: 00073883 ld a7,0(a4) - 56e: 0721 addi a4,a4,8 - 570: ff1ffae3 bgeu t6,a7,564 - 574: ed0372e3 bgeu t1,a6,438 - 578: 4068083b subw a6,a6,t1 - 57c: 475d li a4,23 - 57e: eb076de3 bltu a4,a6,438 - 582: 080e slli a6,a6,0x3 - 584: 00005717 auipc a4,0x5 - 588: da470713 addi a4,a4,-604 # 5328 - 58c: 9742 add a4,a4,a6 - 58e: 3b873803 ld a6,952(a4) - 592: 00185713 srli a4,a6,0x1 - 596: 977e add a4,a4,t6 - 598: 01176363 bltu a4,a7,59e - 59c: 2385 addiw t2,t2,1 - 59e: 03075fb3 divu t6,a4,a6 - 5a2: bd59 j 438 - 5a4: 4335 li t1,13 - 5a6: 5e25 li t3,-23 - 5a8: 026e0e3b mulw t3,t3,t1 - 5ac: 01de0ebb addw t4,t3,t4 - 5b0: de0850e3 bgez a6,390 - 5b4: a819 j 5ca - 5b6: 02571313 slli t1,a4,0x25 - 5ba: 02535313 srli t1,t1,0x25 - 5be: 0305 addi t1,t1,1 - 5c0: 475d li a4,23 - 5c2: ce676ee3 bltu a4,t1,2be - 5c6: 4829 li a6,10 - 5c8: b759 j 54e - 5ca: 260e8663 beqz t4,836 - 5ce: 00231e13 slli t3,t1,0x2 - 5d2: 41c30e33 sub t3,t1,t3 - 5d6: 0e0e slli t3,t3,0x3 - 5d8: 9e1a add t3,t3,t1 - 5da: fffe881b addiw a6,t4,-1 - 5de: 9e7a add t3,t3,t5 - 5e0: 00005e97 auipc t4,0x5 - 5e4: d48e8e93 addi t4,t4,-696 # 5328 - 5e8: 0e0e slli t3,t3,0x3 - 5ea: 080e slli a6,a6,0x3 - 5ec: 9876 add a6,a6,t4 - 5ee: 9ef2 add t4,t4,t3 - 5f0: 0b883607 fld fa2,184(a6) - 5f4: f20887d3 fmv.d.x fa5,a7 - 5f8: 0b0ebf03 ld t5,176(t4) - 5fc: f8000e37 lui t3,0xf8000 - 600: 011e7eb3 and t4,t3,a7 - 604: 12f676d3 fmul.d fa3,fa2,fa5 - 608: 01ee7e33 and t3,t3,t5 - 60c: f20e07d3 fmv.d.x fa5,t3 - 610: f20e0753 fmv.d.x fa4,t3 - 614: f20e8553 fmv.d.x fa0,t4 - 618: 0af67653 fsub.d fa2,fa2,fa5 - 61c: f20e87d3 fmv.d.x fa5,t4 - 620: f20e85d3 fmv.d.x fa1,t4 - 624: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 628: f2088753 fmv.d.x fa4,a7 - 62c: 0ab775d3 fsub.d fa1,fa4,fa1 - 630: 16883707 fld fa4,360(a6) - 634: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 638: f20e0553 fmv.d.x fa0,t3 - 63c: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 640: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 644: f20887d3 fmv.d.x fa5,a7 - 648: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 64c: c00f87e3 beqz t6,25a - 650: 02d777d3 fadd.d fa5,fa4,fa3 - 654: fff3089b addiw a7,t1,-1 - 658: 00005817 auipc a6,0x5 - 65c: cd080813 addi a6,a6,-816 # 5328 - 660: 030e slli t1,t1,0x3 - 662: 088e slli a7,a7,0x3 - 664: 98c2 add a7,a7,a6 - 666: 981a add a6,a6,t1 - 668: e2078e53 fmv.x.d t3,fa5 - 66c: 21083e83 ld t4,528(a6) - 670: f8000837 lui a6,0xf8000 - 674: 2188b507 fld fa0,536(a7) - 678: 01c87333 and t1,a6,t3 - 67c: 01d87833 and a6,a6,t4 - 680: f2080653 fmv.d.x fa2,a6 - 684: 12f577d3 fmul.d fa5,fa0,fa5 - 688: 2808b587 fld fa1,640(a7) - 68c: 0ac57053 fsub.d ft0,fa0,fa2 - 690: f20e0653 fmv.d.x fa2,t3 - 694: 0ad67153 fsub.d ft2,fa2,fa3 - 698: f20806d3 fmv.d.x fa3,a6 - 69c: f2030653 fmv.d.x fa2,t1 - 6a0: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 6a4: f20e06d3 fmv.d.x fa3,t3 - 6a8: 0ac6f653 fsub.d fa2,fa3,fa2 - 6ac: 22f786d3 fmv.d fa3,fa5 - 6b0: 0a2777d3 fsub.d fa5,fa4,ft2 - 6b4: f2030753 fmv.d.x fa4,t1 - 6b8: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 6bc: 12a7f7d3 fmul.d fa5,fa5,fa0 - 6c0: f2080553 fmv.d.x fa0,a6 - 6c4: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 6c8: f20e0553 fmv.d.x fa0,t3 - 6cc: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 6d0: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 6d4: 02f67753 fadd.d fa4,fa2,fa5 - 6d8: b649 j 25a - 6da: 02571313 slli t1,a4,0x25 - 6de: 02535313 srli t1,t1,0x25 - 6e2: 0305 addi t1,t1,1 - 6e4: 475d li a4,23 - 6e6: d46769e3 bltu a4,t1,438 - 6ea: bd99 j 540 - 6ec: 87fe mv a5,t6 - 6ee: 8fbe mv t6,a5 - 6f0: b101 j 2f0 - 6f2: 87fe mv a5,t6 - 6f4: 3e800713 li a4,1000 - 6f8: 02e7f73b remuw a4,a5,a4 - 6fc: 2781 sext.w a5,a5 - 6fe: eb01 bnez a4,70e - 700: 3e800813 li a6,1000 - 704: 0307d7bb divuw a5,a5,a6 - 708: 0307f73b remuw a4,a5,a6 - 70c: df65 beqz a4,704 - 70e: 02079f93 slli t6,a5,0x20 - 712: 020fdf93 srli t6,t6,0x20 - 716: b31d j 43c - 718: 4785 li a5,1 - 71a: c29c sw a5,0(a3) - 71c: 00c2b023 sd a2,0(t0) - 720: 03000793 li a5,48 - 724: 00f60023 sb a5,0(a2) - 728: 4f05 li t5,1 - 72a: 01e5a023 sw t5,0(a1) - 72e: 6105 addi sp,sp,32 - 730: 8082 ret - 732: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8849> - 734: 3f7d addiw t5,t5,-1 - 736: b3d1 j 4fa - 738: e826 sd s1,16(sp) - 73a: e44a sd s2,8(sp) - 73c: 4859 li a6,22 - 73e: 8976 mv s2,t4 - 740: 11d84363 blt a6,t4,846 - 744: 0009049b sext.w s1,s2 - 748: 00005e17 auipc t3,0x5 - 74c: be0e0e13 addi t3,t3,-1056 # 5328 - 750: 00349813 slli a6,s1,0x3 - 754: 9872 add a6,a6,t3 - 756: 00083687 fld fa3,0(a6) - 75a: 00083803 ld a6,0(a6) - 75e: f20887d3 fmv.d.x fa5,a7 - 762: f8000fb7 lui t6,0xf8000 - 766: 010ff833 and a6,t6,a6 - 76a: 12f6f553 fmul.d fa0,fa3,fa5 - 76e: f20807d3 fmv.d.x fa5,a6 - 772: 011ff433 and s0,t6,a7 - 776: f2040753 fmv.d.x fa4,s0 - 77a: 0af6f6d3 fsub.d fa3,fa3,fa5 - 77e: f20887d3 fmv.d.x fa5,a7 - 782: f2080653 fmv.d.x fa2,a6 - 786: 412e8ebb subw t4,t4,s2 - 78a: 0ae7f753 fsub.d fa4,fa5,fa4 - 78e: f20407d3 fmv.d.x fa5,s0 - 792: e20508d3 fmv.x.d a7,fa0 - 796: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 79a: f2040653 fmv.d.x fa2,s0 - 79e: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 7a2: f2080653 fmv.d.x fa2,a6 - 7a6: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 7aa: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 7ae: 080e8963 beqz t4,840 - 7b2: 02e577d3 fadd.d fa5,fa0,fa4 - 7b6: 0e8e slli t4,t4,0x3 - 7b8: 01de0833 add a6,t3,t4 - 7bc: 00083587 fld fa1,0(a6) - 7c0: 00231893 slli a7,t1,0x2 - 7c4: 411308b3 sub a7,t1,a7 - 7c8: 00389813 slli a6,a7,0x3 - 7cc: e2078453 fmv.x.d s0,fa5 - 7d0: 12f5f7d3 fmul.d fa5,fa1,fa5 - 7d4: 981a add a6,a6,t1 - 7d6: 987a add a6,a6,t5 - 7d8: 40980833 sub a6,a6,s1 - 7dc: 080e slli a6,a6,0x3 - 7de: 9872 add a6,a6,t3 - 7e0: 00083e83 ld t4,0(a6) - 7e4: 008ff833 and a6,t6,s0 - 7e8: e20788d3 fmv.x.d a7,fa5 - 7ec: f20806d3 fmv.d.x fa3,a6 - 7f0: f20407d3 fmv.d.x fa5,s0 - 7f4: 01dfffb3 and t6,t6,t4 - 7f8: f20880d3 fmv.d.x ft1,a7 - 7fc: 0ad7f653 fsub.d fa2,fa5,fa3 - 800: f20f87d3 fmv.d.x fa5,t6 - 804: 64c2 ld s1,16(sp) - 806: 6922 ld s2,8(sp) - 808: 0af5f053 fsub.d ft0,fa1,fa5 - 80c: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 810: f20407d3 fmv.d.x fa5,s0 - 814: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 818: f2080553 fmv.d.x fa0,a6 - 81c: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 820: 0af77753 fsub.d fa4,fa4,fa5 - 824: f20f87d3 fmv.d.x fa5,t6 - 828: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 82c: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 830: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 834: b6b5 j 3a0 - 836: f20886d3 fmv.d.x fa3,a7 - 83a: f2000753 fmv.d.x fa4,zero - 83e: b539 j 64c - 840: 64c2 ld s1,16(sp) - 842: 6922 ld s2,8(sp) - 844: beb1 j 3a0 - 846: 4959 li s2,22 - 848: bdf5 j 744 - 84a: e826 sd s1,16(sp) - 84c: e44a sd s2,8(sp) - 84e: ecc00393 li t2,-308 - 852: 4eed li t4,27 - 854: 4335 li t1,13 - 856: 14600f13 li t5,326 - 85a: b5cd j 73c - 85c: 26900313 li t1,617 - 860: 0303083b mulw a6,t1,a6 - 864: 41f8531b sraiw t1,a6,0x1f - 868: 0153531b srliw t1,t1,0x15 - 86c: 0103033b addw t1,t1,a6 - 870: 40b3539b sraiw t2,t1,0xb - 874: 4849 li a6,18 - 876: 4078083b subw a6,a6,t2 - 87a: b249 j 1fc - -000000000000087c <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 87c: 87aa mv a5,a0 - if (ctx->fd == -1) - 87e: 4508 lw a0,8(a0) - 880: 577d li a4,-1 - 882: 00e51d63 bne a0,a4,89c <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 886: 6b94 ld a3,16(a5) - 888: 6398 ld a4,0(a5) - 88a: 9736 add a4,a4,a3 - 88c: 00074603 lbu a2,0(a4) - 890: c60d beqz a2,8ba <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 892: 0685 addi a3,a3,1 - 894: eb94 sd a3,16(a5) - 896: 00074503 lbu a0,0(a4) - 89a: 8082 ret -static int _in_char(_InContext *ctx) - 89c: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 89e: 4605 li a2,1 - 8a0: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 8a4: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 8a6: 801ff0ef jal a6 - 8aa: 4785 li a5,1 - 8ac: 00f51963 bne a0,a5,8be <_in_char.part.0+0x42> - return (unsigned char)c; - 8b0: 00f14503 lbu a0,15(sp) -} - 8b4: 60e2 ld ra,24(sp) - 8b6: 6105 addi sp,sp,32 - 8b8: 8082 ret - return -1; - 8ba: 557d li a0,-1 -} - 8bc: 8082 ret - return -1; - 8be: 557d li a0,-1 - 8c0: bfd5 j 8b4 <_in_char.part.0+0x38> - -00000000000008c2 <_skip_space>: -{ - 8c2: 7139 addi sp,sp,-64 - 8c4: f822 sd s0,48(sp) - 8c6: f426 sd s1,40(sp) - 8c8: f04a sd s2,32(sp) - 8ca: ec4e sd s3,24(sp) - 8cc: e852 sd s4,16(sp) - 8ce: fc06 sd ra,56(sp) - 8d0: 842a mv s0,a0 - ctx->ungotten = -1; - 8d2: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 8d4: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 8d8: 02000913 li s2,32 - 8dc: 4991 li s3,4 - if (ctx->ungotten >= 0) - 8de: 4c1c lw a5,24(s0) - 8e0: 0407d163 bgez a5,922 <_skip_space+0x60> - if (ctx->fd == -1) - 8e4: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 8e6: 4605 li a2,1 - 8e8: 85d2 mv a1,s4 - if (ctx->fd == -1) - 8ea: 02951e63 bne a0,s1,926 <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - 8ee: 6818 ld a4,16(s0) - 8f0: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - 8f2: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - 8f6: 97ba add a5,a5,a4 - 8f8: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x220> - 8fc: cb19 beqz a4,912 <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - 8fe: e814 sd a3,16(s0) - 900: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 904: ff77871b addiw a4,a5,-9 - 908: fd278be3 beq a5,s2,8de <_skip_space+0x1c> - 90c: fce9f9e3 bgeu s3,a4,8de <_skip_space+0x1c> - ctx->ungotten = c; - 910: cc1c sw a5,24(s0) -} - 912: 70e2 ld ra,56(sp) - 914: 7442 ld s0,48(sp) - 916: 74a2 ld s1,40(sp) - 918: 7902 ld s2,32(sp) - 91a: 69e2 ld s3,24(sp) - 91c: 6a42 ld s4,16(sp) - 91e: 6121 addi sp,sp,64 - 920: 8082 ret - ctx->ungotten = -1; - 922: cc04 sw s1,24(s0) - return c; - 924: b7c5 j 904 <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - 926: f80ff0ef jal a6 - 92a: 4785 li a5,1 - 92c: fef513e3 bne a0,a5,912 <_skip_space+0x50> - return (unsigned char)c; - 930: 00f14783 lbu a5,15(sp) - 934: bfc1 j 904 <_skip_space+0x42> - -0000000000000936 <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 936: 7155 addi sp,sp,-208 - 938: e586 sd ra,200(sp) - 93a: e95a sd s6,144(sp) - while (*p) - 93c: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 940: e432 sd a2,8(sp) - while (*p) - 942: 68078b63 beqz a5,fd8 <_vscanf_core.constprop.0+0x6a2> - 946: e1a2 sd s0,192(sp) - 948: fd26 sd s1,184(sp) - 94a: f152 sd s4,160(sp) - 94c: ed56 sd s5,152(sp) - 94e: f4ee sd s11,104(sp) - 950: 842e mv s0,a1 - 952: 8daa mv s11,a0 - int assigned = 0; - 954: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 956: 02000493 li s1,32 - 95a: 4a91 li s5,4 - if (*p != '%') - 95c: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 960: 04978763 beq a5,s1,9ae <_vscanf_core.constprop.0+0x78> - 964: ff77869b addiw a3,a5,-9 - 968: 0ff6f693 zext.b a3,a3 - 96c: 04daf163 bgeu s5,a3,9ae <_vscanf_core.constprop.0+0x78> - if (*p != '%') - 970: 07478d63 beq a5,s4,9ea <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - 974: 856e mv a0,s11 - 976: f4dff0ef jal 8c2 <_skip_space> - if (ctx->ungotten >= 0) - 97a: 018da503 lw a0,24(s11) - 97e: 04055a63 bgez a0,9d2 <_vscanf_core.constprop.0+0x9c> - 982: 856e mv a0,s11 - 984: ef9ff0ef jal 87c <_in_char.part.0> - if (c != *p) - 988: 00044783 lbu a5,0(s0) - 98c: 04a78a63 beq a5,a0,9e0 <_vscanf_core.constprop.0+0xaa> - if (c != -1) - 990: 57fd li a5,-1 - 992: 00f50463 beq a0,a5,99a <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - 996: 00adac23 sw a0,24(s11) - 99a: 640e ld s0,192(sp) - 99c: 74ea ld s1,184(sp) - 99e: 7a0a ld s4,160(sp) - 9a0: 6aea ld s5,152(sp) - 9a2: 7da6 ld s11,104(sp) -} - 9a4: 60ae ld ra,200(sp) - 9a6: 855a mv a0,s6 - 9a8: 6b4a ld s6,144(sp) - 9aa: 6169 addi sp,sp,208 - 9ac: 8082 ret - _skip_space(ctx); - 9ae: 856e mv a0,s11 - 9b0: f13ff0ef jal 8c2 <_skip_space> - while (isspace(*p)) - 9b4: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9b8: 4611 li a2,4 - 9ba: ff77869b addiw a3,a5,-9 - 9be: 0ff6f693 zext.b a3,a3 - 9c2: 00978663 beq a5,s1,9ce <_vscanf_core.constprop.0+0x98> - 9c6: 00d67463 bgeu a2,a3,9ce <_vscanf_core.constprop.0+0x98> - while (*p) - 9ca: fbd9 bnez a5,960 <_vscanf_core.constprop.0+0x2a> - 9cc: b7f9 j 99a <_vscanf_core.constprop.0+0x64> - p++; - 9ce: 0405 addi s0,s0,1 - 9d0: b7d5 j 9b4 <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - 9d2: 57fd li a5,-1 - 9d4: 00fdac23 sw a5,24(s11) - if (c != *p) - 9d8: 00044783 lbu a5,0(s0) - 9dc: faa79ae3 bne a5,a0,990 <_vscanf_core.constprop.0+0x5a> - while (*p) - 9e0: 00144783 lbu a5,1(s0) - p++; - 9e4: 0405 addi s0,s0,1 - while (*p) - 9e6: ffad bnez a5,960 <_vscanf_core.constprop.0+0x2a> - 9e8: bf4d j 99a <_vscanf_core.constprop.0+0x64> - 9ea: f94a sd s2,176(sp) - 9ec: f54e sd s3,168(sp) - 9ee: e55e sd s7,136(sp) - 9f0: e162 sd s8,128(sp) - if (*p == '*') - 9f2: 00144583 lbu a1,1(s0) - 9f6: 02a00793 li a5,42 - 9fa: 22f58d63 beq a1,a5,c34 <_vscanf_core.constprop.0+0x2fe> - p++; - 9fe: 0405 addi s0,s0,1 - int suppress = 0; - a00: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - a02: fd05861b addiw a2,a1,-48 - a06: 0ff67693 zext.b a3,a2 - a0a: 47a5 li a5,9 - a0c: 36d7e763 bltu a5,a3,d7a <_vscanf_core.constprop.0+0x444> - a10: 4781 li a5,0 - a12: 4825 li a6,9 - a14: a019 j a1a <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - a16: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - a1a: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - a1e: 00f6093b addw s2,a2,a5 - a22: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - a26: fd05861b addiw a2,a1,-48 - a2a: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - a2e: 012686bb addw a3,a3,s2 - p++; - a32: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - a34: fea871e3 bgeu a6,a0,a16 <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - a38: 06c00693 li a3,108 - p++; - a3c: 00140b93 addi s7,s0,1 - if (*p == 'l') - a40: 1ed58f63 beq a1,a3,c3e <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - a44: 06800693 li a3,104 - a48: 2ad58863 beq a1,a3,cf8 <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - a4c: 00044c03 lbu s8,0(s0) - a50: 8ba2 mv s7,s0 - int len_mod = 0; - a52: ec02 sd zero,24(sp) - char spec = *p++; - a54: 06300693 li a3,99 - a58: 001b8413 addi s0,s7,1 - if (!spec) - a5c: 2adc0863 beq s8,a3,d0c <_vscanf_core.constprop.0+0x3d6> - a60: 1f86fc63 bgeu a3,s8,c58 <_vscanf_core.constprop.0+0x322> - a64: f9cc069b addiw a3,s8,-100 - a68: 0ff6f693 zext.b a3,a3 - a6c: 4651 li a2,20 - a6e: 0cd66e63 bltu a2,a3,b4a <_vscanf_core.constprop.0+0x214> - a72: 00120637 lui a2,0x120 - a76: 4585 li a1,1 - a78: 00d595b3 sll a1,a1,a3 - a7c: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x118869> - a80: 8e6d and a2,a2,a1 - a82: ee69 bnez a2,b5c <_vscanf_core.constprop.0+0x226> - a84: 89b9 andi a1,a1,14 - a86: 1e059263 bnez a1,c6a <_vscanf_core.constprop.0+0x334> - a8a: 463d li a2,15 - a8c: 0ac69f63 bne a3,a2,b4a <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - a90: 856e mv a0,s11 - a92: e31ff0ef jal 8c2 <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - a96: ec02 sd zero,24(sp) - a98: 00099763 bnez s3,aa6 <_vscanf_core.constprop.0+0x170> - a9c: 67a2 ld a5,8(sp) - a9e: 6398 ld a4,0(a5) - aa0: 07a1 addi a5,a5,8 - aa2: e43e sd a5,8(sp) - aa4: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - aa6: 018da503 lw a0,24(s11) - aaa: 2e055b63 bgez a0,da0 <_vscanf_core.constprop.0+0x46a> - aae: 856e mv a0,s11 - ab0: dcdff0ef jal 87c <_in_char.part.0> - while (c != -1 && !isspace(c)) - ab4: 56fd li a3,-1 - ab6: 6ad50363 beq a0,a3,115c <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - aba: 02000693 li a3,32 - abe: 3ed50963 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ac2: 46a5 li a3,9 - ac4: 3ed50663 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ac8: 46a9 li a3,10 - aca: 3ed50363 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ace: 46ad li a3,11 - ad0: 3ed50063 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ad4: 46b1 li a3,12 - ad6: 3cd50d63 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ada: 46b5 li a3,13 - adc: 3cd50a63 beq a0,a3,eb0 <_vscanf_core.constprop.0+0x57a> - ae0: 67e2 ld a5,24(sp) - ae2: fce6 sd s9,120(sp) - ae4: f8ea sd s10,112(sp) - ae6: e83e sd a5,16(sp) - ae8: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - aea: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - aec: 02000c93 li s9,32 - if (width > 0 && i >= width) - af0: 01205463 blez s2,af8 <_vscanf_core.constprop.0+0x1c2> - af4: 052d5563 bge s10,s2,b3e <_vscanf_core.constprop.0+0x208> - if (!suppress) - af8: 00099563 bnez s3,b02 <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - afc: 67c2 ld a5,16(sp) - afe: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - b02: 018da503 lw a0,24(s11) - i++; - b06: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - b08: 30055963 bgez a0,e1a <_vscanf_core.constprop.0+0x4e4> - b0c: 856e mv a0,s11 - b0e: d6fff0ef jal 87c <_in_char.part.0> - while (c != -1 && !isspace(c)) - b12: 27850663 beq a0,s8,d7e <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b16: 03950463 beq a0,s9,b3e <_vscanf_core.constprop.0+0x208> - b1a: 47a5 li a5,9 - b1c: 02f50163 beq a0,a5,b3e <_vscanf_core.constprop.0+0x208> - b20: 47a9 li a5,10 - b22: 00f50e63 beq a0,a5,b3e <_vscanf_core.constprop.0+0x208> - b26: 47ad li a5,11 - b28: 00f50b63 beq a0,a5,b3e <_vscanf_core.constprop.0+0x208> - b2c: 47b1 li a5,12 - b2e: 00f50863 beq a0,a5,b3e <_vscanf_core.constprop.0+0x208> - b32: 67c2 ld a5,16(sp) - b34: 0785 addi a5,a5,1 - b36: e83e sd a5,16(sp) - b38: 47b5 li a5,13 - b3a: faf51be3 bne a0,a5,af0 <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - b3e: 64098a63 beqz s3,1192 <_vscanf_core.constprop.0+0x85c> - b42: 7ce6 ld s9,120(sp) - b44: 7d46 ld s10,112(sp) - ctx->ungotten = c; - b46: 00adac23 sw a0,24(s11) - while (*p) - b4a: 001bc783 lbu a5,1(s7) - b4e: 794a ld s2,176(sp) - b50: 79aa ld s3,168(sp) - b52: 6baa ld s7,136(sp) - b54: 6c0a ld s8,128(sp) - b56: e00795e3 bnez a5,960 <_vscanf_core.constprop.0+0x2a> - b5a: b581 j 99a <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - b5c: 856e mv a0,s11 - b5e: f8ea sd s10,112(sp) - b60: d63ff0ef jal 8c2 <_skip_space> - if (ctx->ungotten >= 0) - b64: 018da503 lw a0,24(s11) - b68: 24055063 bgez a0,da8 <_vscanf_core.constprop.0+0x472> - b6c: 856e mv a0,s11 - b6e: d0fff0ef jal 87c <_in_char.part.0> - if (c == '-' || c == '+') - b72: fd55069b addiw a3,a0,-43 - b76: 9af5 andi a3,a3,-3 - b78: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - b7a: 4d01 li s10,0 - if (c == '-' || c == '+') - b7c: 3e068863 beqz a3,f6c <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - b80: 07800693 li a3,120 - b84: 4641 li a2,16 - b86: 00dc0863 beq s8,a3,b96 <_vscanf_core.constprop.0+0x260> - b8a: 06900693 li a3,105 - b8e: 4629 li a2,10 - b90: 00dc1363 bne s8,a3,b96 <_vscanf_core.constprop.0+0x260> - b94: 4601 li a2,0 - while (c != -1 && i < 63) - b96: 56fd li a3,-1 - b98: 5cd50863 beq a0,a3,1168 <_vscanf_core.constprop.0+0x832> - b9c: fce6 sd s9,120(sp) - b9e: 02010893 addi a7,sp,32 - ba2: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ba6: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - ba8: fd05069b addiw a3,a0,-48 - bac: 0005031b sext.w t1,a0 - bb0: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - bb4: 27960a63 beq a2,s9,e28 <_vscanf_core.constprop.0+0x4f2> - bb8: 2a060d63 beqz a2,e72 <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - bbc: 07800793 li a5,120 - bc0: 2ef50363 beq a0,a5,ea6 <_vscanf_core.constprop.0+0x570> - bc4: fa850693 addi a3,a0,-88 - bc8: 0016b693 seqz a3,a3 - bcc: 4301 li t1,0 - if (width > 0 && i >= width) - bce: 01205463 blez s2,bd6 <_vscanf_core.constprop.0+0x2a0> - bd2: 032d5a63 bge s10,s2,c06 <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - bd6: 0066e6b3 or a3,a3,t1 - bda: 8ecd or a3,a3,a1 - bdc: c68d beqz a3,c06 <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - bde: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - be2: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - be6: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - be8: 22055c63 bgez a0,e20 <_vscanf_core.constprop.0+0x4ea> - bec: 856e mv a0,s11 - bee: e832 sd a2,16(sp) - bf0: c8dff0ef jal 87c <_in_char.part.0> - while (c != -1 && i < 63) - bf4: 57fd li a5,-1 - bf6: 6642 ld a2,16(sp) - bf8: 3cf50263 beq a0,a5,fbc <_vscanf_core.constprop.0+0x686> - bfc: 03f00693 li a3,63 - c00: 0c05 addi s8,s8,1 - c02: fadd13e3 bne s10,a3,ba8 <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - c06: 040d0793 addi a5,s10,64 - c0a: 1018 addi a4,sp,32 - c0c: 97ba add a5,a5,a4 - c0e: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - c12: 00adac23 sw a0,24(s11) - c16: 7ce6 ld s9,120(sp) - if (i == 0) - c18: 1e0d0663 beqz s10,e04 <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - c1c: 36098363 beqz s3,f82 <_vscanf_core.constprop.0+0x64c> - while (*p) - c20: 001bc783 lbu a5,1(s7) - { - c24: 794a ld s2,176(sp) - c26: 79aa ld s3,168(sp) - c28: 6baa ld s7,136(sp) - c2a: 6c0a ld s8,128(sp) - c2c: 7d46 ld s10,112(sp) - while (*p) - c2e: d20799e3 bnez a5,960 <_vscanf_core.constprop.0+0x2a> - c32: b3a5 j 99a <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - c34: 00244583 lbu a1,2(s0) - suppress = 1; - c38: 4985 li s3,1 - p++; - c3a: 0409 addi s0,s0,2 - c3c: b3d9 j a02 <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - c3e: 00144c03 lbu s8,1(s0) - len_mod = 1; - c42: 4785 li a5,1 - c44: ec3e sd a5,24(sp) - if (*p == 'l') - c46: e0bc17e3 bne s8,a1,a54 <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - c4a: 4789 li a5,2 - char spec = *p++; - c4c: 00244c03 lbu s8,2(s0) - p++; - c50: 00240b93 addi s7,s0,2 - len_mod = 2; - c54: ec3e sd a5,24(sp) - c56: bbfd j a54 <_vscanf_core.constprop.0+0x11e> - c58: 100c0763 beqz s8,d66 <_vscanf_core.constprop.0+0x430> - c5c: fbbc079b addiw a5,s8,-69 - c60: 0ff7f793 zext.b a5,a5 - c64: 4689 li a3,2 - c66: eef6e2e3 bltu a3,a5,b4a <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - c6a: 856e mv a0,s11 - c6c: f8ea sd s10,112(sp) - c6e: c55ff0ef jal 8c2 <_skip_space> - if (ctx->ungotten >= 0) - c72: 018da783 lw a5,24(s11) - c76: 1207dd63 bgez a5,db0 <_vscanf_core.constprop.0+0x47a> - c7a: 856e mv a0,s11 - c7c: c01ff0ef jal 87c <_in_char.part.0> - if (c == '-' || c == '+') - c80: fd55069b addiw a3,a0,-43 - c84: ffd6f613 andi a2,a3,-3 - c88: 2601 sext.w a2,a2 - c8a: 87aa mv a5,a0 - c8c: 12060c63 beqz a2,dc4 <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - c90: 567d li a2,-1 - c92: 16c50963 beq a0,a2,e04 <_vscanf_core.constprop.0+0x4ce> - c96: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - c98: 4d01 li s10,0 - c9a: 80000937 lui s2,0x80000 - c9e: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8847> - ca0: 0932 slli s2,s2,0xc - ca2: 80194913 xori s2,s2,-2047 - ca6: 093e slli s2,s2,0xf - ca8: 02010813 addi a6,sp,32 - cac: 01a80cb3 add s9,a6,s10 - cb0: 03a00c13 li s8,58 - cb4: 1935 addi s2,s2,-19 - cb6: a831 j cd2 <_vscanf_core.constprop.0+0x39c> - cb8: bc5ff0ef jal 87c <_in_char.part.0> - while (c != -1 && i < 63) - cbc: 577d li a4,-1 - cbe: 87aa mv a5,a0 - cc0: 2ee50563 beq a0,a4,faa <_vscanf_core.constprop.0+0x674> - cc4: 03f00713 li a4,63 - cc8: 0c85 addi s9,s9,1 - cca: 1eed0e63 beq s10,a4,ec6 <_vscanf_core.constprop.0+0x590> - cce: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - cd2: 00d95633 srl a2,s2,a3 - cd6: 856e mv a0,s11 - cd8: 8a05 andi a2,a2,1 - cda: 1edc6663 bltu s8,a3,ec6 <_vscanf_core.constprop.0+0x590> - cde: 1e060463 beqz a2,ec6 <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - ce2: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - ce6: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - cea: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - cec: fc07c6e3 bltz a5,cb8 <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - cf0: 577d li a4,-1 - cf2: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - cf6: b7f9 j cc4 <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - cf8: 00144c03 lbu s8,1(s0) - int len_mod = 0; - cfc: ec02 sd zero,24(sp) - if (*p == 'h') - cfe: d4bc1be3 bne s8,a1,a54 <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - d02: 00244c03 lbu s8,2(s0) - p++; - d06: 00240b93 addi s7,s0,2 - d0a: b3a9 j a54 <_vscanf_core.constprop.0+0x11e> - d0c: fce6 sd s9,120(sp) - d0e: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - d10: 00090c1b sext.w s8,s2 - d14: 0d205a63 blez s2,de8 <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - d18: 4d01 li s10,0 - d1a: 06098d63 beqz s3,d94 <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - d1e: 9c6a add s8,s8,s10 - if (c == -1) - d20: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - d22: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - d26: 856e mv a0,s11 - if (ctx->ungotten >= 0) - d28: 0207dc63 bgez a5,d60 <_vscanf_core.constprop.0+0x42a> - d2c: b51ff0ef jal 87c <_in_char.part.0> - d30: 87aa mv a5,a0 - if (c == -1) - d32: 0b950d63 beq a0,s9,dec <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - d36: 00099463 bnez s3,d3e <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - d3a: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - d3e: 0d05 addi s10,s10,1 - d40: ffac11e3 bne s8,s10,d22 <_vscanf_core.constprop.0+0x3ec> - while (*p) - d44: 001bc783 lbu a5,1(s7) - if (!suppress) - d48: 00099363 bnez s3,d4e <_vscanf_core.constprop.0+0x418> - assigned++; - d4c: 2b05 addiw s6,s6,1 - d4e: 794a ld s2,176(sp) - d50: 79aa ld s3,168(sp) - d52: 6baa ld s7,136(sp) - d54: 6c0a ld s8,128(sp) - d56: 7ce6 ld s9,120(sp) - d58: 7d46 ld s10,112(sp) - while (*p) - d5a: c00793e3 bnez a5,960 <_vscanf_core.constprop.0+0x2a> - d5e: b935 j 99a <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - d60: 019dac23 sw s9,24(s11) - if (c == -1) - d64: bfc9 j d36 <_vscanf_core.constprop.0+0x400> - d66: 640e ld s0,192(sp) - d68: 74ea ld s1,184(sp) - d6a: 794a ld s2,176(sp) - d6c: 79aa ld s3,168(sp) - d6e: 7a0a ld s4,160(sp) - d70: 6aea ld s5,152(sp) - d72: 6baa ld s7,136(sp) - d74: 6c0a ld s8,128(sp) - d76: 7da6 ld s11,104(sp) - d78: b135 j 9a4 <_vscanf_core.constprop.0+0x6e> - int width = -1; - d7a: 597d li s2,-1 - d7c: b975 j a38 <_vscanf_core.constprop.0+0x102> - if (!suppress) - d7e: 3c099c63 bnez s3,1156 <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - d82: 67e2 ld a5,24(sp) - d84: 01a786b3 add a3,a5,s10 - d88: 00068023 sb zero,0(a3) - while (*p) - d8c: 001bc783 lbu a5,1(s7) - assigned++; - d90: 2b05 addiw s6,s6,1 - d92: bf75 j d4e <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - d94: 67a2 ld a5,8(sp) - d96: 0007bd03 ld s10,0(a5) - d9a: 07a1 addi a5,a5,8 - d9c: e43e sd a5,8(sp) - d9e: b741 j d1e <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - da0: 56fd li a3,-1 - da2: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - da6: bb11 j aba <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - da8: 56fd li a3,-1 - daa: 00ddac23 sw a3,24(s11) - return c; - dae: b3d1 j b72 <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - db0: fd57869b addiw a3,a5,-43 - db4: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - db8: 55fd li a1,-1 - dba: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - dbe: 2601 sext.w a2,a2 - dc0: ec061be3 bnez a2,c96 <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - dc4: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - dc8: 018da783 lw a5,24(s11) - dcc: 2207da63 bgez a5,1000 <_vscanf_core.constprop.0+0x6ca> - dd0: 856e mv a0,s11 - dd2: aabff0ef jal 87c <_in_char.part.0> - while (c != -1 && i < 63) - dd6: 567d li a2,-1 - dd8: 87aa mv a5,a0 - num_buf[i++] = (char)c; - dda: 4d05 li s10,1 - ddc: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - de0: 3ac50163 beq a0,a2,1182 <_vscanf_core.constprop.0+0x84c> - de4: fce6 sd s9,120(sp) - de6: bd55 j c9a <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - de8: 4c05 li s8,1 - dea: b73d j d18 <_vscanf_core.constprop.0+0x3e2> - dec: 640e ld s0,192(sp) - dee: 74ea ld s1,184(sp) - df0: 794a ld s2,176(sp) - df2: 79aa ld s3,168(sp) - df4: 7a0a ld s4,160(sp) - df6: 6aea ld s5,152(sp) - df8: 6baa ld s7,136(sp) - dfa: 6c0a ld s8,128(sp) - dfc: 7ce6 ld s9,120(sp) - dfe: 7d46 ld s10,112(sp) - e00: 7da6 ld s11,104(sp) - e02: b64d j 9a4 <_vscanf_core.constprop.0+0x6e> - e04: 640e ld s0,192(sp) - e06: 74ea ld s1,184(sp) - e08: 794a ld s2,176(sp) - e0a: 79aa ld s3,168(sp) - e0c: 7a0a ld s4,160(sp) - e0e: 6aea ld s5,152(sp) - e10: 6baa ld s7,136(sp) - e12: 6c0a ld s8,128(sp) - e14: 7d46 ld s10,112(sp) - e16: 7da6 ld s11,104(sp) - e18: b671 j 9a4 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - e1a: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - e1e: b9e5 j b16 <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - e20: 57fd li a5,-1 - e22: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - e26: bbd9 j bfc <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e28: f9f3069b addiw a3,t1,-97 - e2c: 4795 li a5,5 - e2e: 06d7f263 bgeu a5,a3,e92 <_vscanf_core.constprop.0+0x55c> - e32: fbf3031b addiw t1,t1,-65 - e36: 4795 li a5,5 - e38: 0467fd63 bgeu a5,t1,e92 <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - e3c: 07800693 li a3,120 - e40: 18d50763 beq a0,a3,fce <_vscanf_core.constprop.0+0x698> - e44: fa850693 addi a3,a0,-88 - e48: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - e4c: 4301 li t1,0 - e4e: 32061663 bnez a2,117a <_vscanf_core.constprop.0+0x844> - e52: 4785 li a5,1 - e54: 4601 li a2,0 - e56: d6fd1ce3 bne s10,a5,bce <_vscanf_core.constprop.0+0x298> - e5a: 02014e03 lbu t3,32(sp) - e5e: 03000793 li a5,48 - e62: d6fe16e3 bne t3,a5,bce <_vscanf_core.constprop.0+0x298> - e66: d60684e3 beqz a3,bce <_vscanf_core.constprop.0+0x298> - base = 16; - e6a: 4641 li a2,16 - if (width > 0 && i >= width) - e6c: d7a919e3 bne s2,s10,bde <_vscanf_core.constprop.0+0x2a8> - e70: bb59 j c06 <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e72: f9f3069b addiw a3,t1,-97 - e76: 4795 li a5,5 - e78: 02d7f263 bgeu a5,a3,e9c <_vscanf_core.constprop.0+0x566> - e7c: fbf3031b addiw t1,t1,-65 - e80: 0467f063 bgeu a5,t1,ec0 <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - e84: 07800693 li a3,120 - e88: fad51ee3 bne a0,a3,e44 <_vscanf_core.constprop.0+0x50e> - e8c: 4301 li t1,0 - e8e: 4685 li a3,1 - e90: b7c9 j e52 <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e92: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - e94: 4681 li a3,0 - if (width > 0 && i >= width) - e96: d3204ee3 bgtz s2,bd2 <_vscanf_core.constprop.0+0x29c> - e9a: bb35 j bd6 <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - e9c: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e9e: 4305 li t1,1 - if (width > 0 && i >= width) - ea0: d32049e3 bgtz s2,bd2 <_vscanf_core.constprop.0+0x29c> - ea4: bb0d j bd6 <_vscanf_core.constprop.0+0x2a0> - ea6: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - ea8: 4685 li a3,1 - if (width > 0 && i >= width) - eaa: d32044e3 bgtz s2,bd2 <_vscanf_core.constprop.0+0x29c> - eae: bb05 j bde <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - eb0: c8099be3 bnez s3,b46 <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - eb4: 67e2 ld a5,24(sp) - eb6: 00078023 sb zero,0(a5) - ctx->ungotten = c; - eba: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - ebe: b171 j b4a <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - ec0: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ec2: 4305 li t1,1 - ec4: b779 j e52 <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - ec6: 040d0713 addi a4,s10,64 - eca: 1014 addi a3,sp,32 - ecc: 96ba add a3,a3,a4 - ece: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - ed2: 00fdac23 sw a5,24(s11) - if (i == 0) - ed6: f00d0be3 beqz s10,dec <_vscanf_core.constprop.0+0x4b6> - eda: 7ce6 ld s9,120(sp) - if (!suppress) - edc: d40992e3 bnez s3,c20 <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - ee0: 02014603 lbu a2,32(sp) - ee4: 02d00793 li a5,45 - ee8: 1af60963 beq a2,a5,109a <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - eec: 02b00793 li a5,43 - ef0: 20f60a63 beq a2,a5,1104 <_vscanf_core.constprop.0+0x7ce> - ef4: 00005797 auipc a5,0x5 - ef8: 8a47b587 fld fa1,-1884(a5) # 5798 - efc: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - efe: fd06069b addiw a3,a2,-48 - f02: 0ff6f513 zext.b a0,a3 - f06: 45a5 li a1,9 - f08: f20007d3 fmv.d.x fa5,zero - f0c: 02a5e463 bltu a1,a0,f34 <_vscanf_core.constprop.0+0x5fe> - f10: 00005717 auipc a4,0x5 - f14: 89073707 fld fa4,-1904(a4) # 57a0 - f18: 4525 li a0,9 - f1a: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - f1e: d20686d3 fcvt.d.w fa3,a3 - str++; - f22: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - f24: fd06069b addiw a3,a2,-48 - f28: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - f2c: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - f30: feb575e3 bgeu a0,a1,f1a <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - f34: 02e00693 li a3,46 - f38: 16d60a63 beq a2,a3,10ac <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - f3c: 0007c683 lbu a3,0(a5) - f40: 0df6f693 andi a3,a3,223 - f44: 04500613 li a2,69 - f48: 0cc68463 beq a3,a2,1010 <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - f4c: 6722 ld a4,8(sp) - if (len_mod == 1) - f4e: 4685 li a3,1 - return sign * val; - f50: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - f54: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - f56: 0721 addi a4,a4,8 - f58: e43a sd a4,8(sp) - if (len_mod == 1) - f5a: 6762 ld a4,24(sp) - f5c: 18d70b63 beq a4,a3,10f2 <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - f60: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - f64: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - f66: 00f7a027 fsw fa5,0(a5) - f6a: b95d j c20 <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - f6c: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - f70: 018da503 lw a0,24(s11) - f74: 06055463 bgez a0,fdc <_vscanf_core.constprop.0+0x6a6> - f78: 856e mv a0,s11 - f7a: 903ff0ef jal 87c <_in_char.part.0> - num_buf[i++] = (char)c; - f7e: 4d05 li s10,1 - f80: b101 j b80 <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - f82: 4581 li a1,0 - f84: 1008 addi a0,sp,32 - f86: 696030ef jal 461c - *va_arg(ap, int64 *) = val; - f8a: 67a2 ld a5,8(sp) - if (len_mod == 2) - f8c: 6762 ld a4,24(sp) - f8e: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - f90: 07a1 addi a5,a5,8 - if (len_mod == 2) - f92: 16d70363 beq a4,a3,10f8 <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - f96: 6722 ld a4,8(sp) - else if (len_mod == 1) - f98: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - f9a: 6314 ld a3,0(a4) - else if (len_mod == 1) - f9c: 6762 ld a4,24(sp) - f9e: 16c70163 beq a4,a2,1100 <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - fa2: c288 sw a0,0(a3) - assigned++; - fa4: 2b05 addiw s6,s6,1 - fa6: e43e sd a5,8(sp) - fa8: b9a5 j c20 <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - faa: 040d0793 addi a5,s10,64 - fae: 1018 addi a4,sp,32 - fb0: 00e785b3 add a1,a5,a4 - fb4: fc058023 sb zero,-64(a1) - if (i == 0) - fb8: 7ce6 ld s9,120(sp) - fba: b70d j edc <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - fbc: 040d0793 addi a5,s10,64 - fc0: 1018 addi a4,sp,32 - fc2: 00e78833 add a6,a5,a4 - fc6: fc080023 sb zero,-64(a6) - if (i == 0) - fca: 7ce6 ld s9,120(sp) - fcc: b981 j c1c <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - fce: 4301 li t1,0 - fd0: 4685 li a3,1 - if (width > 0 && i >= width) - fd2: c12040e3 bgtz s2,bd2 <_vscanf_core.constprop.0+0x29c> - fd6: b101 j bd6 <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - fd8: 4b01 li s6,0 - fda: b2e9 j 9a4 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - fdc: 56fd li a3,-1 - fde: fce6 sd s9,120(sp) - fe0: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - fe4: 07800693 li a3,120 - fe8: 4641 li a2,16 - num_buf[i++] = (char)c; - fea: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - fec: badc09e3 beq s8,a3,b9e <_vscanf_core.constprop.0+0x268> - ff0: 06900693 li a3,105 - ff4: 4629 li a2,10 - num_buf[i++] = (char)c; - ff6: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - ff8: badc13e3 bne s8,a3,b9e <_vscanf_core.constprop.0+0x268> - ffc: 4601 li a2,0 - ffe: b645 j b9e <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - 1000: 56fd li a3,-1 - 1002: fce6 sd s9,120(sp) - 1004: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 1008: 4d05 li s10,1 - 100a: fd57869b addiw a3,a5,-43 - 100e: b171 j c9a <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 1010: 0017c583 lbu a1,1(a5) - 1014: 02d00693 li a3,45 - 1018: 0ed58f63 beq a1,a3,1116 <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 101c: 02b00693 li a3,43 - 1020: 10d58e63 beq a1,a3,113c <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 1024: fd05861b addiw a2,a1,-48 - 1028: 0ff67513 zext.b a0,a2 - 102c: 45a5 li a1,9 - str++; - 102e: 00178693 addi a3,a5,1 - int esign = 1; - 1032: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 1034: 04a5ec63 bltu a1,a0,108c <_vscanf_core.constprop.0+0x756> - 1038: 4525 li a0,9 - 103a: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 103e: 0029979b slliw a5,s3,0x2 - 1042: 013787bb addw a5,a5,s3 - 1046: 0017979b slliw a5,a5,0x1 - 104a: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 104e: fd05861b addiw a2,a1,-48 - 1052: 0ff67593 zext.b a1,a2 - str++; - 1056: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 1058: feb571e3 bgeu a0,a1,103a <_vscanf_core.constprop.0+0x704> - while (eval--) - 105c: fff9879b addiw a5,s3,-1 - 1060: 12098463 beqz s3,1188 <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 1064: 00004717 auipc a4,0x4 - 1068: 73473687 fld fa3,1844(a4) # 5798 - 106c: 00004717 auipc a4,0x4 - 1070: 73473707 fld fa4,1844(a4) # 57a0 - while (eval--) - 1074: 56fd li a3,-1 - 1076: 37fd addiw a5,a5,-1 - p *= 10.0; - 1078: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 107c: fed79de3 bne a5,a3,1076 <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 1080: 4785 li a5,1 - 1082: 00f80963 beq a6,a5,1094 <_vscanf_core.constprop.0+0x75e> - val /= p; - 1086: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 108a: b5c9 j f4c <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 108c: 00004797 auipc a5,0x4 - 1090: 70c7b687 fld fa3,1804(a5) # 5798 - val *= p; - 1094: 12d7f7d3 fmul.d fa5,fa5,fa3 - 1098: bd55 j f4c <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 109a: 00004797 auipc a5,0x4 - 109e: 6f67b587 fld fa1,1782(a5) # 5790 - 10a2: 02114603 lbu a2,33(sp) - str++; - 10a6: 02110793 addi a5,sp,33 - 10aa: bd91 j efe <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 10ac: 0017c683 lbu a3,1(a5) - 10b0: 45a5 li a1,9 - str++; - 10b2: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 10b4: fd06861b addiw a2,a3,-48 - 10b8: 0ff67513 zext.b a0,a2 - 10bc: e8a5e2e3 bltu a1,a0,f40 <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 10c0: 00004717 auipc a4,0x4 - 10c4: 6e073707 fld fa4,1760(a4) # 57a0 - 10c8: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 10cc: 4525 li a0,9 - val += (*str - '0') / div; - 10ce: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 10d2: 0017c683 lbu a3,1(a5) - str++; - 10d6: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 10d8: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 10dc: fd06861b addiw a2,a3,-48 - 10e0: 0ff67593 zext.b a1,a2 - div *= 10.0; - 10e4: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 10e8: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 10ec: feb571e3 bgeu a0,a1,10ce <_vscanf_core.constprop.0+0x798> - 10f0: bd81 j f40 <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 10f2: a39c fsd fa5,0(a5) - assigned++; - 10f4: 2b05 addiw s6,s6,1 - 10f6: b62d j c20 <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 10f8: 6722 ld a4,8(sp) - 10fa: 6314 ld a3,0(a4) - 10fc: e288 sd a0,0(a3) - 10fe: b55d j fa4 <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 1100: e288 sd a0,0(a3) - 1102: b54d j fa4 <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 1104: 00004797 auipc a5,0x4 - 1108: 6947b587 fld fa1,1684(a5) # 5798 - 110c: 02114603 lbu a2,33(sp) - str++; - 1110: 02110793 addi a5,sp,33 - 1114: b3ed j efe <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 1116: 0027c583 lbu a1,2(a5) - str++; - 111a: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 111e: 4525 li a0,9 - 1120: fd05861b addiw a2,a1,-48 - 1124: 0ff67793 zext.b a5,a2 - esign = -1; - 1128: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 112a: f0f577e3 bgeu a0,a5,1038 <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 112e: 00004797 auipc a5,0x4 - 1132: 66a7b687 fld fa3,1642(a5) # 5798 - val /= p; - 1136: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 113a: bd09 j f4c <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 113c: 0027c583 lbu a1,2(a5) - str++; - 1140: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1144: 4525 li a0,9 - 1146: fd05861b addiw a2,a1,-48 - 114a: 0ff67793 zext.b a5,a2 - 114e: f2f56fe3 bltu a0,a5,108c <_vscanf_core.constprop.0+0x756> - int esign = 1; - 1152: 4805 li a6,1 - 1154: b5d5 j 1038 <_vscanf_core.constprop.0+0x702> - while (*p) - 1156: 001bc783 lbu a5,1(s7) - 115a: bed5 j d4e <_vscanf_core.constprop.0+0x418> - if (!suppress) - 115c: 9e0997e3 bnez s3,b4a <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 1160: 67e2 ld a5,24(sp) - 1162: 00078023 sb zero,0(a5) - 1166: b2d5 j b4a <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 1168: 040d0793 addi a5,s10,64 - 116c: 1018 addi a4,sp,32 - 116e: 97ba add a5,a5,a4 - 1170: fc078023 sb zero,-64(a5) - if (i == 0) - 1174: aa0d14e3 bnez s10,c1c <_vscanf_core.constprop.0+0x2e6> - 1178: b171 j e04 <_vscanf_core.constprop.0+0x4ce> - 117a: 4641 li a2,16 - if (width > 0 && i >= width) - 117c: a5204be3 bgtz s2,bd2 <_vscanf_core.constprop.0+0x29c> - 1180: bc99 j bd6 <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 1182: 020100a3 sb zero,33(sp) - if (i == 0) - 1186: bb99 j edc <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 1188: 00004797 auipc a5,0x4 - 118c: 6107b687 fld fa3,1552(a5) # 5798 - 1190: bdc5 j 1080 <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 1192: 67e2 ld a5,24(sp) - 1194: 01a786b3 add a3,a5,s10 - 1198: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 119c: 00adac23 sw a0,24(s11) - while (*p) - 11a0: 001bc783 lbu a5,1(s7) - 11a4: b6f5 j d90 <_vscanf_core.constprop.0+0x45a> - -00000000000011a6 <_out_char>: -{ - 11a6: 7179 addi sp,sp,-48 - 11a8: ec26 sd s1,24(sp) - if (ctx->stream) - 11aa: 6d04 ld s1,24(a0) -{ - 11ac: f022 sd s0,32(sp) - 11ae: f406 sd ra,40(sp) - 11b0: 842a mv s0,a0 - 11b2: 872e mv a4,a1 - if (ctx->stream) - 11b4: c0a1 beqz s1,11f4 <_out_char+0x4e> - 11b6: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 11b8: 41c4a903 lw s2,1052(s1) - 11bc: 4789 li a5,2 - 11be: 04f90d63 beq s2,a5,1218 <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 11c2: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 11c6: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 11ca: 0017861b addiw a2,a5,1 - 11ce: 40c4a823 sw a2,1040(s1) - 11d2: 97a6 add a5,a5,s1 - 11d4: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 11d8: 08c6c063 blt a3,a2,1258 <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 11dc: 4785 li a5,1 - 11de: 04f90a63 beq s2,a5,1232 <_out_char+0x8c> - ctx->written++; - 11e2: 681c ld a5,16(s0) - 11e4: 6942 ld s2,16(sp) -} - 11e6: 70a2 ld ra,40(sp) - ctx->written++; - 11e8: 0785 addi a5,a5,1 - 11ea: e81c sd a5,16(s0) -} - 11ec: 7402 ld s0,32(sp) - 11ee: 64e2 ld s1,24(sp) - 11f0: 6145 addi sp,sp,48 - 11f2: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 11f4: 6514 ld a3,8(a0) - 11f6: 691c ld a5,16(a0) - 11f8: ca89 beqz a3,120a <_out_char+0x64> - 11fa: 16fd addi a3,a3,-1 - 11fc: 00d7f763 bgeu a5,a3,120a <_out_char+0x64> - ctx->buf[ctx->written] = c; - 1200: 6114 ld a3,0(a0) - 1202: 97b6 add a5,a5,a3 - 1204: 00b78023 sb a1,0(a5) - ctx->written++; - 1208: 691c ld a5,16(a0) - 120a: 0785 addi a5,a5,1 -} - 120c: 70a2 ld ra,40(sp) - ctx->written++; - 120e: e81c sd a5,16(s0) -} - 1210: 7402 ld s0,32(sp) - 1212: 64e2 ld s1,24(sp) - 1214: 6145 addi sp,sp,48 - 1216: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 1218: 4088 lw a0,0(s1) - 121a: 4605 li a2,1 - 121c: 00f10593 addi a1,sp,15 - char ch = (char)c; - 1220: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 1224: e8bfe0ef jal ae - 1228: 4785 li a5,1 - 122a: faf50ce3 beq a0,a5,11e2 <_out_char+0x3c> - stream->error = 1; - 122e: c49c sw a5,8(s1) - return EOF; - 1230: bf4d j 11e2 <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 1232: 47a9 li a5,10 - 1234: faf597e3 bne a1,a5,11e2 <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 1238: fac055e3 blez a2,11e2 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 123c: 4088 lw a0,0(s1) - 123e: 01048593 addi a1,s1,16 - 1242: e6dfe0ef jal ae - if (ret < stream->buf_write_pos) - 1246: 4104a783 lw a5,1040(s1) - 124a: 02f55063 bge a0,a5,126a <_out_char+0xc4> - stream->error = 1; - 124e: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 1252: 4004a823 sw zero,1040(s1) - return EOF; - 1256: b771 j 11e2 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 1258: 4088 lw a0,0(s1) - 125a: 01048593 addi a1,s1,16 - 125e: e51fe0ef jal ae - if (ret < stream->buf_write_pos) - 1262: 4104a783 lw a5,1040(s1) - 1266: 00f54563 blt a0,a5,1270 <_out_char+0xca> - stream->buf_write_pos = 0; - 126a: 4004a823 sw zero,1040(s1) - 126e: bf95 j 11e2 <_out_char+0x3c> - stream->error = 1; - 1270: 4785 li a5,1 - 1272: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 1274: 4004a823 sw zero,1040(s1) - return EOF; - 1278: b7ad j 11e2 <_out_char+0x3c> - -000000000000127a : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 127a: 00005797 auipc a5,0x5 - 127e: 64678793 addi a5,a5,1606 # 68c0 - 1282: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 1286: 0ca786a3 sb a0,205(a5) -} - 128a: 8082 ret - -000000000000128c : - - 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) -{ - 128c: 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; - 1290: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1294: 252523b7 lui t2,0x25252 - 1298: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524ad6d> -{ - 129c: 29913c23 sd s9,664(sp) - 12a0: 29b13423 sd s11,648(sp) - int tlen = 0; - 12a4: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12a6: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 12aa: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808008c8> -{ - 12ae: 2e813023 sd s0,736(sp) - 12b2: 2c913c23 sd s1,728(sp) - 12b6: 2d213823 sd s2,720(sp) - 12ba: 2d313423 sd s3,712(sp) - 12be: 2b713423 sd s7,680(sp) - 12c2: 2b813023 sd s8,672(sp) - 12c6: 29a13823 sd s10,656(sp) - 12ca: 2e113423 sd ra,744(sp) - 12ce: 8d66 mv s10,s9 - 12d0: 8432 mv s0,a2 - 12d2: 8c9e mv s9,t2 - 12d4: 89aa mv s3,a0 - 12d6: e42e sd a1,8(sp) - 12d8: 84b6 mv s1,a3 - 12da: 8bba mv s7,a4 - 12dc: fc02 sd zero,56(sp) - for (;;) { - 12de: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12e0: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8747> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 12e4: 20000c13 li s8,512 - 12e8: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 12ea: 0034f793 andi a5,s1,3 - 12ee: c7a9 beqz a5,1338 - if (f[0] == '%') - 12f0: 0004c783 lbu a5,0(s1) - 12f4: 02500713 li a4,37 - 12f8: 0ee78263 beq a5,a4,13dc - if (f[0] == 0) - 12fc: cbd9 beqz a5,1392 - stbsp__chk_cb_buf(1); - 12fe: 02098663 beqz s3,132a - 1302: 4124063b subw a2,s0,s2 - 1306: 1fe00713 li a4,510 - 130a: 02c75063 bge a4,a2,132a - 130e: 65a2 ld a1,8(sp) - 1310: 854a mv a0,s2 - 1312: e81e sd t2,16(sp) - 1314: 00cd0d3b addw s10,s10,a2 - 1318: 9982 jalr s3 - 131a: 892a mv s2,a0 - 131c: e119 bnez a0,1322 - 131e: 0200106f j 233e - *bf++ = f[0]; - 1322: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 1326: 63c2 ld t2,16(sp) - 1328: 842a mv s0,a0 - ++f; - 132a: 0485 addi s1,s1,1 - *bf++ = f[0]; - 132c: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 1330: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 1334: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 1336: ffcd bnez a5,12f0 - v = *(stbsp__uint32 *)f; - 1338: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 133a: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 133e: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 1342: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1346: 01b7073b addw a4,a4,s11 - 134a: 8f7d and a4,a4,a5 - 134c: 2701 sext.w a4,a4 - 134e: f34d bnez a4,12f0 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1350: 460d li a2,3 - 1352: a805 j 1382 - if (callback) - 1354: 00098863 beqz s3,1364 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1358: 412407b3 sub a5,s0,s2 - 135c: 40fc07bb subw a5,s8,a5 - 1360: f8f658e3 bge a2,a5,12f0 - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 1364: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 1366: 40d4 lw a3,4(s1) - } - bf += 4; - 1368: 0411 addi s0,s0,4 - f += 4; - 136a: 0491 addi s1,s1,4 - 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: fb25 bnez a4,12f0 - if ((v - 0x01010101) & c) - 1382: 01b6873b addw a4,a3,s11 - 1386: 8ff9 and a5,a5,a4 - 1388: 2781 sext.w a5,a5 - 138a: d7e9 beqz a5,1354 - if (f[0] == 0) - 138c: 0004c783 lbu a5,0(s1) - 1390: f7bd bnez a5,12fe -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 1392: 8cea mv s9,s10 - 1394: 412404bb subw s1,s0,s2 - if (!callback) - 1398: 70098563 beqz s3,1aa2 - stbsp__flush_cb(); - 139c: 00905663 blez s1,13a8 - 13a0: 65a2 ld a1,8(sp) - 13a2: 8626 mv a2,s1 - 13a4: 854a mv a0,s2 - 13a6: 9982 jalr s3 - 13a8: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 13ac: 2e813083 ld ra,744(sp) - 13b0: 2e013403 ld s0,736(sp) - 13b4: 2d813483 ld s1,728(sp) - 13b8: 2d013903 ld s2,720(sp) - 13bc: 2c813983 ld s3,712(sp) - 13c0: 2a813b83 ld s7,680(sp) - 13c4: 2a013c03 ld s8,672(sp) - 13c8: 29013d03 ld s10,656(sp) - 13cc: 28813d83 ld s11,648(sp) - 13d0: 8566 mv a0,s9 - 13d2: 29813c83 ld s9,664(sp) - 13d6: 2f010113 addi sp,sp,752 - 13da: 8082 ret - 13dc: 2d413023 sd s4,704(sp) - 13e0: 2b513c23 sd s5,696(sp) - 13e4: 2b613823 sd s6,688(sp) - tz = 0; - 13e8: 00248693 addi a3,s1,2 - fl = 0; - 13ec: 4e01 li t3,0 - switch (f[0]) { - 13ee: 03f00593 li a1,63 - 13f2: 00004617 auipc a2,0x4 - 13f6: cc660613 addi a2,a2,-826 # 50b8 <_GLOBAL__sub_I__ZSt3cin+0x10a> - 13fa: fff6c783 lbu a5,-1(a3) - 13fe: fff68493 addi s1,a3,-1 - 1402: fe07871b addiw a4,a5,-32 - 1406: 0ff77713 zext.b a4,a4 - 140a: 00e5ec63 bltu a1,a4,1422 - 140e: 070a slli a4,a4,0x2 - 1410: 9732 add a4,a4,a2 - 1412: 4318 lw a4,0(a4) - 1414: 9732 add a4,a4,a2 - 1416: 8702 jr a4 - if (f[0] == '*') { - 1418: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 141c: 010e6e13 ori t3,t3,16 - ++f; - 1420: 0485 addi s1,s1,1 - if (f[0] == '*') { - 1422: 02a00713 li a4,42 - 1426: 0ce79163 bne a5,a4,14e8 - fw = va_arg(va, stbsp__uint32); - 142a: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 142e: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 1432: 0ba1 addi s7,s7,8 - ++f; - 1434: 0485 addi s1,s1,1 - if (f[0] == '.') { - 1436: 02e00713 li a4,46 - pr = -1; - 143a: 58fd li a7,-1 - if (f[0] == '.') { - 143c: 0ee78663 beq a5,a4,1528 - switch (f[0]) { - 1440: 04900713 li a4,73 - 1444: 10e78263 beq a5,a4,1548 - 1448: f987871b addiw a4,a5,-104 - 144c: 0ff77713 zext.b a4,a4 - 1450: 46c9 li a3,18 - 1452: 02e6e063 bltu a3,a4,1472 - 1456: 00004697 auipc a3,0x4 - 145a: d6268693 addi a3,a3,-670 # 51b8 <_GLOBAL__sub_I__ZSt3cin+0x20a> - 145e: 070a slli a4,a4,0x2 - 1460: 9736 add a4,a4,a3 - 1462: 4318 lw a4,0(a4) - 1464: 9736 add a4,a4,a3 - 1466: 8702 jr a4 - if (f[0] == 'h') - 1468: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 146c: 020e6e13 ori t3,t3,32 - ++f; - 1470: 0485 addi s1,s1,1 - switch (f[0]) { - 1472: fbf7871b addiw a4,a5,-65 - 1476: 0ff77713 zext.b a4,a4 - 147a: 03700693 li a3,55 - 147e: 0ee6ea63 bltu a3,a4,1572 - 1482: 00004697 auipc a3,0x4 - 1486: d8268693 addi a3,a3,-638 # 5204 <_GLOBAL__sub_I__ZSt3cin+0x256> - 148a: 070a slli a4,a4,0x2 - 148c: 9736 add a4,a4,a3 - 148e: 4318 lw a4,0(a4) - 1490: 9736 add a4,a4,a3 - 1492: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 1494: 400e6e13 ori t3,t3,1024 - continue; - 1498: 0685 addi a3,a3,1 - 149a: b785 j 13fa - fl |= STBSP__LEFTJUST; - 149c: 001e6e13 ori t3,t3,1 - continue; - 14a0: 0685 addi a3,a3,1 - 14a2: bfa1 j 13fa - fl |= STBSP__LEADINGPLUS; - 14a4: 002e6e13 ori t3,t3,2 - continue; - 14a8: 0685 addi a3,a3,1 - 14aa: bf81 j 13fa - fl |= STBSP__TRIPLET_COMMA; - 14ac: 040e6e13 ori t3,t3,64 - continue; - 14b0: 0685 addi a3,a3,1 - 14b2: b7a1 j 13fa - if (fl & STBSP__METRIC_SUFFIX) { - 14b4: 100e7793 andi a5,t3,256 - 14b8: 8772 mv a4,t3 - 14ba: 56078363 beqz a5,1a20 - if (fl & STBSP__METRIC_1024) { - 14be: 6785 lui a5,0x1 - 14c0: 034e1513 slli a0,t3,0x34 - 14c4: 80078793 addi a5,a5,-2048 # 800 - 14c8: 5c055863 bgez a0,1a98 - fl |= STBSP__METRIC_JEDEC; - 14cc: 6785 lui a5,0x1 - 14ce: 8f5d or a4,a4,a5 - 14d0: 00070e1b sext.w t3,a4 - 14d4: 0685 addi a3,a3,1 - 14d6: b715 j 13fa - fl |= STBSP__LEADING_0X; - 14d8: 008e6e13 ori t3,t3,8 - continue; - 14dc: 0685 addi a3,a3,1 - 14de: bf31 j 13fa - fl |= STBSP__LEADINGSPACE; - 14e0: 004e6e13 ori t3,t3,4 - continue; - 14e4: 0685 addi a3,a3,1 - 14e6: bf11 j 13fa - while ((f[0] >= '0') && (f[0] <= '9')) { - 14e8: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x69a> - 14ec: 0ff77713 zext.b a4,a4 - 14f0: 4625 li a2,9 - fw = 0; - 14f2: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 14f4: 46a5 li a3,9 - 14f6: f4e660e3 bltu a2,a4,1436 - fw = fw * 10 + f[0] - '0'; - 14fa: 002b171b slliw a4,s6,0x2 - 14fe: 0167073b addw a4,a4,s6 - 1502: 0017171b slliw a4,a4,0x1 - f++; - 1506: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 1508: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 150a: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 150e: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1512: fd07871b addiw a4,a5,-48 - 1516: 0ff77713 zext.b a4,a4 - 151a: fee6f0e3 bgeu a3,a4,14fa - if (f[0] == '.') { - 151e: 02e00713 li a4,46 - pr = -1; - 1522: 58fd li a7,-1 - if (f[0] == '.') { - 1524: f0e79ee3 bne a5,a4,1440 - if (f[0] == '*') { - 1528: 0014c783 lbu a5,1(s1) - 152c: 02a00713 li a4,42 - 1530: 52e79763 bne a5,a4,1a5e - while ((f[0] >= '0') && (f[0] <= '9')) { - 1534: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 1538: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 153c: 000ba883 lw a7,0(s7) - ++f; - 1540: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 1542: 0ba1 addi s7,s7,8 - switch (f[0]) { - 1544: f0e792e3 bne a5,a4,1448 - if ((f[1] == '6') && (f[2] == '4')) { - 1548: 0014c783 lbu a5,1(s1) - 154c: 03600713 li a4,54 - 1550: 00e79463 bne a5,a4,1558 - 1554: 1e60106f j 273a - } else if ((f[1] == '3') && (f[2] == '2')) { - 1558: 03300713 li a4,51 - 155c: 6ae796e3 bne a5,a4,2408 - 1560: 0024c683 lbu a3,2(s1) - 1564: 03200713 li a4,50 - 1568: 00e69463 bne a3,a4,1570 - 156c: 0ae0106f j 261a - ++f; - 1570: 0485 addi s1,s1,1 - *s = f[0]; - 1572: 26f10fa3 sb a5,639(sp) - l = 1; - 1576: 4785 li a5,1 - 1578: d0be sw a5,96(sp) - lead[0] = 0; - 157a: 06010423 sb zero,104(sp) - tail[0] = 0; - 157e: 06010823 sb zero,112(sp) - dp = 0; - 1582: d282 sw zero,100(sp) - 1584: e0de sd s7,64(sp) - 1586: 4701 li a4,0 - 1588: 4301 li t1,0 - 158a: 4f81 li t6,0 - 158c: 4685 li a3,1 - 158e: 4a01 li s4,0 - cs = 0; - 1590: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 1592: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 1596: 4e01 li t3,0 - tz = 0; - 1598: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 159a: 010e7793 andi a5,t3,16 - 159e: 40078ee3 beqz a5,21ba - pr = (fw > pr) ? fw : pr; - 15a2: 87ba mv a5,a4 - 15a4: 00675363 bge a4,t1,15aa - 15a8: 879a mv a5,t1 - 15aa: 0007871b sext.w a4,a5 - fw = 0; - 15ae: 4301 li t1,0 - if (fw + pr) { - 15b0: 62070563 beqz a4,1bda - sn = lead + 1; - 15b4: 06910793 addi a5,sp,105 - 15b8: fcbe sd a5,120(sp) - while (lead[0]) { - 15ba: 0a0a0863 beqz s4,166a - stbsp__cb_buf_clamp(i, lead[0]); - 15be: f026 sd s1,32(sp) - 15c0: f436 sd a3,40(sp) - 15c2: 854a mv a0,s2 - 15c4: 86d2 mv a3,s4 - 15c6: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 15c8: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 15cc: 89be mv s3,a5 - 15ce: 20000b13 li s6,512 - 15d2: 87a2 mv a5,s0 - 15d4: e846 sd a7,16(sp) - 15d6: 846a mv s0,s10 - 15d8: ec7e sd t6,24(sp) - 15da: 8d6e mv s10,s11 - 15dc: f872 sd t3,48(sp) - 15de: 8de6 mv s11,s9 - 15e0: 8a3a mv s4,a4 - 15e2: e496 sd t0,72(sp) - 15e4: 891a mv s2,t1 - 15e6: 8c9e mv s9,t2 - 15e8: 0006871b sext.w a4,a3 - 15ec: 2e0482e3 beqz s1,20d0 - 15f0: 40a7863b subw a2,a5,a0 - 15f4: 40cb083b subw a6,s6,a2 - 15f8: 85c2 mv a1,a6 - 15fa: 01075363 bge a4,a6,1600 - 15fe: 85ba mv a1,a4 - lead[0] -= (char)i; - 1600: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 1602: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 1606: 06d10423 sb a3,104(sp) - while (i) { - 160a: c70d beqz a4,1634 - 160c: 7866 ld a6,120(sp) - 160e: 02071593 slli a1,a4,0x20 - 1612: 9181 srli a1,a1,0x20 - 1614: 00b78633 add a2,a5,a1 - 1618: 8742 mv a4,a6 - *bf++ = *sn++; - 161a: 00074683 lbu a3,0(a4) - 161e: 0785 addi a5,a5,1 - while (i) { - 1620: 0705 addi a4,a4,1 - *bf++ = *sn++; - 1622: fed78fa3 sb a3,-1(a5) - while (i) { - 1626: fec79ae3 bne a5,a2,161a - 162a: 982e add a6,a6,a1 - 162c: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 162e: c899 beqz s1,1644 - 1630: 40a7863b subw a2,a5,a0 - 1634: 00cbd863 bge s7,a2,1644 - 1638: 65a2 ld a1,8(sp) - 163a: 9c31 addw s0,s0,a2 - 163c: 9482 jalr s1 - 163e: 34050ee3 beqz a0,219a - 1642: 87aa mv a5,a0 - while (lead[0]) { - 1644: 06814683 lbu a3,104(sp) - 1648: f2c5 bnez a3,15e8 - 164a: 83e6 mv t2,s9 - 164c: 68c2 ld a7,16(sp) - 164e: 8cee mv s9,s11 - 1650: 6fe2 ld t6,24(sp) - 1652: 8dea mv s11,s10 - 1654: 76a2 ld a3,40(sp) - 1656: 8d22 mv s10,s0 - 1658: 7e42 ld t3,48(sp) - 165a: 843e mv s0,a5 - 165c: 62a6 ld t0,72(sp) - 165e: 87ce mv a5,s3 - 1660: 89a6 mv s3,s1 - 1662: 7482 ld s1,32(sp) - 1664: 834a mv t1,s2 - 1666: 8752 mv a4,s4 - 1668: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 166a: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 166e: 0182d61b srliw a2,t0,0x18 - 1672: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 1676: 4a01 li s4,0 - 1678: 000b0e63 beqz s6,1694 - cs &= 0xffffff; - 167c: 02829a13 slli s4,t0,0x28 - 1680: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 1684: 00ea0a3b addw s4,s4,a4 - 1688: 0016059b addiw a1,a2,1 - 168c: 02ba7a3b remuw s4,s4,a1 - 1690: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 1694: 0ce05763 blez a4,1762 - *(stbsp__uint32 *)bf = 0x30303030; - 1698: 30303837 lui a6,0x30303 - 169c: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb878> - 16a0: f026 sd s1,32(sp) - 16a2: 854a mv a0,s2 - 16a4: 84da mv s1,s6 - 16a6: 895e mv s2,s7 - 16a8: e4d6 sd s5,72(sp) - 16aa: 8b4e mv s6,s3 - 16ac: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 16ae: 1fe00293 li t0,510 - 16b2: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 16b4: 00005f17 auipc t5,0x5 - 16b8: 20cf0f13 addi t5,t5,524 # 68c0 - 16bc: 8de6 mv s11,s9 - *bf++ = '0'; - 16be: 03000e93 li t4,48 - 16c2: e846 sd a7,16(sp) - 16c4: ec7e sd t6,24(sp) - 16c6: f436 sd a3,40(sp) - 16c8: f872 sd t3,48(sp) - 16ca: e89a sd t1,80(sp) - 16cc: 89ba mv s3,a4 - 16ce: ecbe sd a5,88(sp) - 16d0: 8bc2 mv s7,a6 - 16d2: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 16d4: 240b0ee3 beqz s6,2130 - 16d8: 40a407b3 sub a5,s0,a0 - 16dc: 40fc063b subw a2,s8,a5 - 16e0: 87b2 mv a5,a2 - 16e2: 00c9d363 bge s3,a2,16e8 - 16e6: 87ce mv a5,s3 - 16e8: 0007859b sext.w a1,a5 - pr -= i; - 16ec: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 16f0: 32048c63 beqz s1,1a28 - while (i) { - 16f4: 34058a63 beqz a1,1a48 - 16f8: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 16fa: 0cdf4603 lbu a2,205(t5) - 16fe: 9181 srli a1,a1,0x20 - 1700: 95a2 add a1,a1,s0 - 1702: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 1704: c481 beqz s1,170c - 1706: 1d4901e3 beq s2,s4,20c8 - 170a: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 170c: 03000793 li a5,48 - 1710: fef40fa3 sb a5,-1(s0) - while (i) { - 1714: fe8597e3 bne a1,s0,1702 - stbsp__chk_cb_buf(1); - 1718: 320b0b63 beqz s6,1a4e - 171c: 40a5863b subw a2,a1,a0 - 1720: 32c2d763 bge t0,a2,1a4e - 1724: 65a2 ld a1,8(sp) - 1726: 01560abb addw s5,a2,s5 - 172a: 9b02 jalr s6 - 172c: 3a050ce3 beqz a0,22e4 - 1730: 842a mv s0,a0 - 1732: 1fe00293 li t0,510 - 1736: 00005f17 auipc t5,0x5 - 173a: 18af0f13 addi t5,t5,394 # 68c0 - 173e: 03000e93 li t4,48 - while (pr > 0) { - 1742: f93049e3 bgtz s3,16d4 - while (lead[0]) { - 1746: 83e6 mv t2,s9 - 1748: 68c2 ld a7,16(sp) - 174a: 8cee mv s9,s11 - 174c: 6fe2 ld t6,24(sp) - 174e: 8dea mv s11,s10 - 1750: 7482 ld s1,32(sp) - 1752: 8d56 mv s10,s5 - 1754: 76a2 ld a3,40(sp) - 1756: 7e42 ld t3,48(sp) - 1758: 6346 ld t1,80(sp) - 175a: 67e6 ld a5,88(sp) - 175c: 6aa6 ld s5,72(sp) - 175e: 892a mv s2,a0 - 1760: 89da mv s3,s6 - 1762: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 1766: fcbe sd a5,120(sp) - while (lead[0]) { - 1768: 0a0a0263 beqz s4,180c - stbsp__cb_buf_clamp(i, lead[0]); - 176c: ec26 sd s1,24(sp) - 176e: f036 sd a3,32(sp) - 1770: 854a mv a0,s2 - 1772: 86d2 mv a3,s4 - 1774: 84ce mv s1,s3 - 1776: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 1778: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 177c: 846a mv s0,s10 - 177e: 20000b13 li s6,512 - 1782: 8d6e mv s10,s11 - 1784: e846 sd a7,16(sp) - 1786: 8de6 mv s11,s9 - 1788: 8a7e mv s4,t6 - 178a: 8972 mv s2,t3 - 178c: 899a mv s3,t1 - 178e: 8c9e mv s9,t2 - 1790: 0006871b sext.w a4,a3 - 1794: 140482e3 beqz s1,20d8 - 1798: 40a7863b subw a2,a5,a0 - 179c: 40cb083b subw a6,s6,a2 - 17a0: 85c2 mv a1,a6 - 17a2: 01075363 bge a4,a6,17a8 - 17a6: 85ba mv a1,a4 - lead[0] -= (char)i; - 17a8: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 17aa: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 17ae: 06d10423 sb a3,104(sp) - while (i) { - 17b2: c70d beqz a4,17dc - 17b4: 7866 ld a6,120(sp) - 17b6: 02071593 slli a1,a4,0x20 - 17ba: 9181 srli a1,a1,0x20 - 17bc: 00b78633 add a2,a5,a1 - 17c0: 8742 mv a4,a6 - *bf++ = *sn++; - 17c2: 00074683 lbu a3,0(a4) - 17c6: 0785 addi a5,a5,1 - while (i) { - 17c8: 0705 addi a4,a4,1 - *bf++ = *sn++; - 17ca: fed78fa3 sb a3,-1(a5) - while (i) { - 17ce: fec79ae3 bne a5,a2,17c2 - 17d2: 982e add a6,a6,a1 - 17d4: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 17d6: c899 beqz s1,17ec - 17d8: 40a7863b subw a2,a5,a0 - 17dc: 00cbd863 bge s7,a2,17ec - 17e0: 65a2 ld a1,8(sp) - 17e2: 9c31 addw s0,s0,a2 - 17e4: 9482 jalr s1 - 17e6: 1a050ae3 beqz a0,219a - 17ea: 87aa mv a5,a0 - while (lead[0]) { - 17ec: 06814683 lbu a3,104(sp) - 17f0: f2c5 bnez a3,1790 - 17f2: 834e mv t1,s3 - 17f4: 68c2 ld a7,16(sp) - 17f6: 89a6 mv s3,s1 - 17f8: 7682 ld a3,32(sp) - 17fa: 64e2 ld s1,24(sp) - 17fc: 8e4a mv t3,s2 - 17fe: 83e6 mv t2,s9 - 1800: 8fd2 mv t6,s4 - 1802: 8cee mv s9,s11 - 1804: 892a mv s2,a0 - 1806: 8dea mv s11,s10 - 1808: 8d22 mv s10,s0 - 180a: 843e mv s0,a5 - while (n) { - 180c: c6f9 beqz a3,18da - STBSP__UNALIGNED(while (i >= 4) { - 180e: ec26 sd s1,24(sp) - 1810: 854a mv a0,s2 - 1812: 84d6 mv s1,s5 - 1814: 896a mv s2,s10 - 1816: 87a2 mv a5,s0 - 1818: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 181a: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 181e: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 1820: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 1824: 4a0d li s4,3 - 1826: e87e sd t6,16(sp) - 1828: f072 sd t3,32(sp) - 182a: 8ac6 mv s5,a7 - 182c: f41a sd t1,40(sp) - 182e: 8436 mv s0,a3 - 1830: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 1832: 0004071b sext.w a4,s0 - 1836: 100982e3 beqz s3,213a - 183a: 40a78633 sub a2,a5,a0 - 183e: 40cb05bb subw a1,s6,a2 - 1842: 862e mv a2,a1 - 1844: 00b75363 bge a4,a1,184a - 1848: 863a mv a2,a4 - 184a: 0006071b sext.w a4,a2 - n -= i; - 184e: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 1850: 14ea50e3 bge s4,a4,2190 - 1854: ffc70f1b addiw t5,a4,-4 - 1858: 002f5e9b srliw t4,t5,0x2 - 185c: 001e8e1b addiw t3,t4,1 - 1860: 0e0a slli t3,t3,0x2 - 1862: 01c785b3 add a1,a5,t3 - 1866: 8626 mv a2,s1 - 1868: 4218 lw a4,0(a2) - 186a: 0791 addi a5,a5,4 - 186c: 0611 addi a2,a2,4 - 186e: 2701 sext.w a4,a4 - 1870: fee7ae23 sw a4,-4(a5) - 1874: feb79ae3 bne a5,a1,1868 - 1878: 002e9e9b slliw t4,t4,0x2 - 187c: 41df073b subw a4,t5,t4 - while (i) { - 1880: 94f2 add s1,s1,t3 - 1882: c31d beqz a4,18a8 - 1884: 8626 mv a2,s1 - 1886: 87ae mv a5,a1 - 1888: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 188c: 00064e83 lbu t4,0(a2) - 1890: 0785 addi a5,a5,1 - while (i) { - 1892: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 1896: ffd78fa3 sb t4,-1(a5) - 189a: 0605 addi a2,a2,1 - while (i) { - 189c: ffcf18e3 bne t5,t3,188c - 18a0: 1702 slli a4,a4,0x20 - 18a2: 9301 srli a4,a4,0x20 - 18a4: 95ba add a1,a1,a4 - 18a6: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 18a8: 1a098763 beqz s3,1a56 - 18ac: 40a5863b subw a2,a1,a0 - 18b0: 1acbd363 bge s7,a2,1a56 - 18b4: 65a2 ld a1,8(sp) - 18b6: 0126093b addw s2,a2,s2 - 18ba: 9982 jalr s3 - 18bc: 20050be3 beqz a0,22d2 - 18c0: 87aa mv a5,a0 - while (n) { - 18c2: f825 bnez s0,1832 - 18c4: 6fc2 ld t6,16(sp) - 18c6: 64e2 ld s1,24(sp) - 18c8: 7e02 ld t3,32(sp) - 18ca: 7322 ld t1,40(sp) - 18cc: 83e6 mv t2,s9 - 18ce: 88d6 mv a7,s5 - 18d0: 8cee mv s9,s11 - 18d2: 843e mv s0,a5 - 18d4: 8dea mv s11,s10 - 18d6: 8d4a mv s10,s2 - 18d8: 892a mv s2,a0 - while (tz) { - 18da: 08088863 beqz a7,196a - *(stbsp__uint32 *)bf = 0x30303030; - 18de: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 18e2: 03000a13 li s4,48 - while (i >= 4) { - 18e6: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 18e8: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 18ec: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb878> - stbsp__cb_buf_clamp(i, tz); - 18f0: 20000b93 li s7,512 - 18f4: 040989e3 beqz s3,2146 - 18f8: 41240633 sub a2,s0,s2 - 18fc: 40cb87bb subw a5,s7,a2 - 1900: 873e mv a4,a5 - 1902: 00f8d363 bge a7,a5,1908 - 1906: 8746 mv a4,a7 - 1908: 0007079b sext.w a5,a4 - tz -= i; - 190c: 40e888bb subw a7,a7,a4 - while (i) { - 1910: 08078ee3 beqz a5,21ac - if ((((stbsp__uintptr)bf) & 3) == 0) - 1914: 00347713 andi a4,s0,3 - 1918: e719 bnez a4,1926 - 191a: 0390006f j 2152 - 191e: 00347713 andi a4,s0,3 - 1922: 7a070f63 beqz a4,20e0 - *bf++ = '0'; - 1926: 01440023 sb s4,0(s0) - --i; - 192a: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 192c: 0405 addi s0,s0,1 - while (i) { - 192e: fbe5 bnez a5,191e - stbsp__chk_cb_buf(1); - 1930: 02098b63 beqz s3,1966 - 1934: 4124063b subw a2,s0,s2 - 1938: 02c6d763 bge a3,a2,1966 - 193c: 65a2 ld a1,8(sp) - 193e: 854a mv a0,s2 - 1940: f81e sd t2,48(sp) - 1942: f41a sd t1,40(sp) - 1944: f072 sd t3,32(sp) - 1946: ec7e sd t6,24(sp) - 1948: e846 sd a7,16(sp) - 194a: 00cd0d3b addw s10,s10,a2 - 194e: 9982 jalr s3 - 1950: 892a mv s2,a0 - 1952: 1a0502e3 beqz a0,22f6 - 1956: 73c2 ld t2,48(sp) - 1958: 7322 ld t1,40(sp) - 195a: 7e02 ld t3,32(sp) - 195c: 6fe2 ld t6,24(sp) - 195e: 68c2 ld a7,16(sp) - 1960: 842a mv s0,a0 - 1962: 1fe00693 li a3,510 - while (tz) { - 1966: f80897e3 bnez a7,18f4 - sn = tail + 1; - 196a: 07110793 addi a5,sp,113 - 196e: fcbe sd a5,120(sp) - while (tail[0]) { - 1970: 080f8763 beqz t6,19fe - stbsp__cb_buf_clamp(i, tail[0]); - 1974: 854a mv a0,s2 - 1976: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 1978: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 197c: 8d4e mv s10,s3 - 197e: 20000a13 li s4,512 - 1982: 8bf2 mv s7,t3 - 1984: 891a mv s2,t1 - 1986: 899e mv s3,t2 - 1988: 000f879b sext.w a5,t6 - 198c: 7c0d0863 beqz s10,215c - 1990: 40a4063b subw a2,s0,a0 - 1994: 40ca06bb subw a3,s4,a2 - 1998: 8736 mv a4,a3 - 199a: 00d7d363 bge a5,a3,19a0 - 199e: 873e mv a4,a5 - tail[0] -= (char)i; - 19a0: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 19a4: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 19a8: 07f10823 sb t6,112(sp) - while (i) { - 19ac: c795 beqz a5,19d8 - 19ae: 75e6 ld a1,120(sp) - 19b0: 02079613 slli a2,a5,0x20 - 19b4: 9201 srli a2,a2,0x20 - 19b6: 00c406b3 add a3,s0,a2 - 19ba: 87ae mv a5,a1 - *bf++ = *sn++; - 19bc: 0007c703 lbu a4,0(a5) - 19c0: 0405 addi s0,s0,1 - while (i) { - 19c2: 0785 addi a5,a5,1 - *bf++ = *sn++; - 19c4: fee40fa3 sb a4,-1(s0) - while (i) { - 19c8: fed41ae3 bne s0,a3,19bc - 19cc: 95b2 add a1,a1,a2 - 19ce: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 19d0: 000d0d63 beqz s10,19ea - 19d4: 40a4063b subw a2,s0,a0 - 19d8: 00cad963 bge s5,a2,19ea - 19dc: 65a2 ld a1,8(sp) - 19de: 00cb0b3b addw s6,s6,a2 - 19e2: 9d02 jalr s10 - 19e4: 200509e3 beqz a0,23f6 - 19e8: 842a mv s0,a0 - while (tail[0]) { - 19ea: 07014f83 lbu t6,112(sp) - 19ee: f80f9de3 bnez t6,1988 - 19f2: 834a mv t1,s2 - 19f4: 83ce mv t2,s3 - 19f6: 8e5e mv t3,s7 - 19f8: 89ea mv s3,s10 - 19fa: 892a mv s2,a0 - 19fc: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 19fe: 001e7e13 andi t3,t3,1 - 1a02: 000e0663 beqz t3,1a0e - if (fw > 0) { - 1a06: 00605463 blez t1,1a0e - 1a0a: 0300106f j 2a3a - for (;;) { - 1a0e: 6b86 ld s7,64(sp) - 1a10: 2c013a03 ld s4,704(sp) - 1a14: 2b813a83 ld s5,696(sp) - 1a18: 2b013b03 ld s6,688(sp) - ++f; - 1a1c: 0485 addi s1,s1,1 - for (;;) { - 1a1e: b0f1 j 12ea - fl |= STBSP__METRIC_SUFFIX; - 1a20: 100e6e13 ori t3,t3,256 - continue; - 1a24: 0685 addi a3,a3,1 - 1a26: bad1 j 13fa - while (i) { - 1a28: 0e0580e3 beqz a1,2308 - if ((((stbsp__uintptr)bf) & 3) == 0) - 1a2c: 00347793 andi a5,s0,3 - 1a30: e799 bnez a5,1a3e - 1a32: 0dd0006f j 230e - 1a36: 00347793 andi a5,s0,3 - 1a3a: 72078463 beqz a5,2162 - *bf++ = '0'; - 1a3e: 01d40023 sb t4,0(s0) - --i; - 1a42: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 1a44: 0405 addi s0,s0,1 - while (i) { - 1a46: f9e5 bnez a1,1a36 - while (i) { - 1a48: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 1a4a: cc0b19e3 bnez s6,171c - 1a4e: 842e mv s0,a1 - while (pr > 0) { - 1a50: c93042e3 bgtz s3,16d4 - 1a54: b9cd j 1746 - while (i) { - 1a56: 87ae mv a5,a1 - while (n) { - 1a58: dc041de3 bnez s0,1832 - 1a5c: b5a5 j 18c4 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a5e: fd07871b addiw a4,a5,-48 - 1a62: 0ff77713 zext.b a4,a4 - 1a66: 4625 li a2,9 - ++f; - 1a68: 0485 addi s1,s1,1 - pr = 0; - 1a6a: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a6c: 46a5 li a3,9 - 1a6e: 9ce669e3 bltu a2,a4,1440 - pr = pr * 10 + f[0] - '0'; - 1a72: 0028971b slliw a4,a7,0x2 - 1a76: 0117073b addw a4,a4,a7 - 1a7a: 0017171b slliw a4,a4,0x1 - f++; - 1a7e: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 1a80: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a82: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 1a86: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a8a: fd07871b addiw a4,a5,-48 - 1a8e: 0ff77713 zext.b a4,a4 - 1a92: fee6f0e3 bgeu a3,a4,1a72 - 1a96: b26d j 1440 - fl |= STBSP__METRIC_1024; - 1a98: 8f5d or a4,a4,a5 - 1a9a: 00070e1b sext.w t3,a4 - 1a9e: 0685 addi a3,a3,1 - 1aa0: baa9 j 13fa - *bf = 0; - 1aa2: 00040023 sb zero,0(s0) - 1aa6: b209 j 13a8 - if (f[0] == 'l') { - 1aa8: 0014c783 lbu a5,1(s1) - 1aac: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 1ab0: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 1ab4: 00e78c63 beq a5,a4,1acc - ++f; - 1ab8: 0485 addi s1,s1,1 - 1aba: ba65 j 1472 - if (f[0] == 'h') - 1abc: 0014c783 lbu a5,1(s1) - 1ac0: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 1ac4: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 1ac8: fee798e3 bne a5,a4,1ab8 - if ((f[1] == '6') && (f[2] == '4')) { - 1acc: 0024c783 lbu a5,2(s1) - ++f; - 1ad0: 0489 addi s1,s1,2 - 1ad2: b245 j 1472 - s = va_arg(va, char *); - 1ad4: 008b8713 addi a4,s7,8 - 1ad8: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 1ada: 020e7693 andi a3,t3,32 - 1ade: 8772 mv a4,t3 - 1ae0: 24069ee3 bnez a3,253c - stbsp__int32 i = va_arg(va, stbsp__int32); - 1ae4: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 1ae8: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 1aec: 02069f13 slli t5,a3,0x20 - 1af0: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 1af4: 00c78a63 beq a5,a2,1b08 - 1af8: 0006d863 bgez a3,1b08 - fl |= STBSP__NEGATIVE; - 1afc: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 1b00: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 1b04: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 1b08: 100e7693 andi a3,t3,256 - 1b0c: 5c0683e3 beqz a3,28d2 - if (n64 < 1024) - 1b10: 3ff00793 li a5,1023 - 1b14: 01e7e463 bltu a5,t5,1b1c - 1b18: 0ea0106f j 2c02 - else if (pr == -1) - 1b1c: 57fd li a5,-1 - 1b1e: 30f887e3 beq a7,a5,262c - fv = (double)(stbsp__int64)n64; - 1b22: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 1b26: 034e1793 slli a5,t3,0x34 - 1b2a: 0007c463 bltz a5,1b32 - 1b2e: 2300106f j 2d5e - divisor = 1024.0; - 1b32: 00004797 auipc a5,0x4 - 1b36: c767b787 fld fa5,-906(a5) # 57a8 - if ((fv < divisor) && (fv > -divisor)) - 1b3a: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 1b3e: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 1b42: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 1b46: a2f517d3 flt.d a5,fa0,fa5 - 1b4a: c789 beqz a5,1b54 - 1b4c: a2a717d3 flt.d a5,fa4,fa0 - 1b50: 3e079863 bnez a5,1f40 - fl += 0x1000000; - 1b54: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 1b58: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 1b5c: feee65e3 bltu t3,a4,1b46 - 1b60: a6c5 j 1f40 - h = (f[0] == 'X') ? hexu : hex; - 1b62: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 1b66: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 1b6a: 00005817 auipc a6,0x5 - 1b6e: e3e80813 addi a6,a6,-450 # 69a8 - 1b72: 00d79663 bne a5,a3,1b7e - 1b76: 00005817 auipc a6,0x5 - 1b7a: e1a80813 addi a6,a6,-486 # 6990 - l = (4 << 4) | (4 << 8); - 1b7e: 44000793 li a5,1088 - 1b82: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 1b84: 008e7793 andi a5,t3,8 - 1b88: 7a079263 bnez a5,232c - lead[0] = 0; - 1b8c: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 1b90: 008b8793 addi a5,s7,8 - 1b94: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 1b96: 72070b63 beqz a4,22cc - n64 = va_arg(va, stbsp__uint64); - 1b9a: 000bb683 ld a3,0(s7) - dp = 0; - 1b9e: d282 sw zero,100(sp) - tail[0] = 0; - 1ba0: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1ba4: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 1ba8: 380694e3 bnez a3,2730 - lead[0] = 0; - 1bac: 06010423 sb zero,104(sp) - if (pr == 0) { - 1bb0: 78089a63 bnez a7,2344 - if (fw < (stbsp__int32)n) - 1bb4: fffb4313 not t1,s6 - 1bb8: 43f35313 srai t1,t1,0x3f - l = 0; - 1bbc: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 1bbe: 01637333 and t1,t1,s6 - goto scopy; - 1bc2: 4701 li a4,0 - 1bc4: 4f81 li t6,0 - 1bc6: 4a01 li s4,0 - cs = 0; - 1bc8: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 1bca: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 1bce: 9c0506e3 beqz a0,159a - if (fw + pr) { - 1bd2: 00e307bb addw a5,t1,a4 - 1bd6: 9c079fe3 bnez a5,15b4 - 1bda: 06910793 addi a5,sp,105 - 1bde: b661 j 1766 - h = (f[0] == 'E') ? hexu : hex; - 1be0: 04500713 li a4,69 - 1be4: 00005317 auipc t1,0x5 - 1be8: dc430313 addi t1,t1,-572 # 69a8 - 1bec: 1ce78ae3 beq a5,a4,25c0 - fv = va_arg(va, double); - 1bf0: 008b8713 addi a4,s7,8 - if (pr == -1) - 1bf4: 57fd li a5,-1 - fv = va_arg(va, double); - 1bf6: e0ba sd a4,64(sp) - 1bf8: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1bfc: 1af88ce3 beq a7,a5,25b4 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c00: 80000737 lui a4,0x80000 - 1c04: 00e8e733 or a4,a7,a4 - 1c08: 2701 sext.w a4,a4 - 1c0a: 10d4 addi a3,sp,100 - 1c0c: 0110 addi a2,sp,128 - 1c0e: 108c addi a1,sp,96 - 1c10: 18a8 addi a0,sp,120 - 1c12: f41e sd t2,40(sp) - 1c14: f01a sd t1,32(sp) - 1c16: ec72 sd t3,24(sp) - 1c18: e846 sd a7,16(sp) - 1c1a: d8efe0ef jal 1a8 - 1c1e: 68c2 ld a7,16(sp) - 1c20: 6e62 ld t3,24(sp) - 1c22: 7302 ld t1,32(sp) - 1c24: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 1c26: 5796 lw a5,100(sp) - s = (char *)sn; - 1c28: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 1c2a: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c2c: 3c0511e3 bnez a0,27ee - tail[0] = 0; - 1c30: 06010823 sb zero,112(sp) - sign[0] = 0; - 1c34: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 1c38: 004e7713 andi a4,t3,4 - 1c3c: 6a070ee3 beqz a4,2af8 - sign[0] = 1; - 1c40: 6709 lui a4,0x2 - 1c42: 0705 addi a4,a4,1 # 2001 - 1c44: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1c48: 671d lui a4,0x7 - 1c4a: 1ee794e3 bne a5,a4,2632 - if (pr < (stbsp__int32)l) - 1c4e: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c52: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 1c56: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 1c5a: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 1c5e: 97fd srai a5,a5,0x3f - 1c60: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c62: 00fa073b addw a4,s4,a5 - 1c66: 01f7063b addw a2,a4,t6 - 1c6a: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1c6c: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 1c70: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 1c72: 835a mv t1,s6 - 1c74: 00cb5363 bge s6,a2,1c7a - 1c78: 8332 mv t1,a2 - fw -= n; - 1c7a: 40e3033b subw t1,t1,a4 - cs = 0; - 1c7e: 4281 li t0,0 - pr -= l; - 1c80: 40d7873b subw a4,a5,a3 - tz = 0; - 1c84: 4881 li a7,0 - goto scopy; - 1c86: b7a1 j 1bce - h = (f[0] == 'G') ? hexu : hex; - 1c88: 04700713 li a4,71 - 1c8c: 00005317 auipc t1,0x5 - 1c90: d1c30313 addi t1,t1,-740 # 69a8 - 1c94: 14e783e3 beq a5,a4,25da - fv = va_arg(va, double); - 1c98: 008b8713 addi a4,s7,8 - if (pr == -1) - 1c9c: 57fd li a5,-1 - fv = va_arg(va, double); - 1c9e: e0ba sd a4,64(sp) - 1ca0: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1ca4: 12f884e3 beq a7,a5,25cc - else if (pr == 0) - 1ca8: 6e0887e3 beqz a7,2b96 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1cac: fff8871b addiw a4,a7,-1 - 1cb0: 800007b7 lui a5,0x80000 - 1cb4: 8f5d or a4,a4,a5 - 1cb6: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 1cb8: 00088a9b sext.w s5,a7 - 1cbc: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1cbe: 10d4 addi a3,sp,100 - 1cc0: 0110 addi a2,sp,128 - 1cc2: 108c addi a1,sp,96 - 1cc4: 18a8 addi a0,sp,120 - 1cc6: f01e sd t2,32(sp) - 1cc8: ec1a sd t1,24(sp) - 1cca: e872 sd t3,16(sp) - 1ccc: cdcfe0ef jal 1a8 - 1cd0: 6e42 ld t3,16(sp) - 1cd2: 6362 ld t1,24(sp) - 1cd4: 7382 ld t2,32(sp) - 1cd6: 4281 li t0,0 - 1cd8: c509 beqz a0,1ce2 - fl |= STBSP__NEGATIVE; - 1cda: 080e6e13 ori t3,t3,128 - 1cde: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 1ce2: 5806 lw a6,96(sp) - 1ce4: 010af463 bgeu s5,a6,1cec - l = pr; - 1ce8: d0d6 sw s5,96(sp) - 1cea: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1cec: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1cee: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1cf0: 01076463 bltu a4,a6,1cf8 - 1cf4: 1800106f j 2e74 - 1cf8: 7be6 ld s7,120(sp) - 1cfa: fff8071b addiw a4,a6,-1 - 1cfe: 1702 slli a4,a4,0x20 - 1d00: 9301 srli a4,a4,0x20 - 1d02: 001a0e9b addiw t4,s4,1 - 1d06: 75e2 ld a1,56(sp) - 1d08: 8ade mv s5,s7 - 1d0a: 975e add a4,a4,s7 - 1d0c: 410e8ebb subw t4,t4,a6 - 1d10: 88d2 mv a7,s4 - 1d12: 86c2 mv a3,a6 - 1d14: 4f01 li t5,0 - 1d16: 03000f93 li t6,48 - 1d1a: e842 sd a6,16(sp) - 1d1c: a809 j 1d2e - --pr; - 1d1e: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d20: 211e80e3 beq t4,a7,2720 - 1d24: 177d addi a4,a4,-1 # 6fff <_stdout+0x21f> - 1d26: 4f05 li t5,1 - 1d28: 1e088ce3 beqz a7,2720 - --l; - 1d2c: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d2e: 00074803 lbu a6,0(a4) - 1d32: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8847> - 1d36: 0006851b sext.w a0,a3 - 1d3a: 2581 sext.w a1,a1 - 1d3c: 0006069b sext.w a3,a2 - 1d40: fdf80fe3 beq a6,t6,1d1e - 1d44: 6842 ld a6,16(sp) - 1d46: fc2e sd a1,56(sp) - 1d48: 86c2 mv a3,a6 - 1d4a: 000f0463 beqz t5,1d52 - 1d4e: d0ae sw a1,96(sp) - 1d50: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d52: 5775 li a4,-3 - 1d54: 08e7cee3 blt a5,a4,25f0 - 1d58: 08fa4be3 blt s4,a5,25ee - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d5c: 0005071b sext.w a4,a0 - if (dp > 0) { - 1d60: 7ef057e3 blez a5,2d4e - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d64: 4881 li a7,0 - 1d66: 00e7d463 bge a5,a4,1d6e - 1d6a: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 1d6e: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 1d72: 20029463 bnez t0,1f7a - } else if (fl & STBSP__LEADINGSPACE) { - 1d76: 004e7713 andi a4,t3,4 - 1d7a: 000715e3 bnez a4,2584 - } else if (fl & STBSP__LEADINGPLUS) { - 1d7e: 002e7713 andi a4,t3,2 - 1d82: 660719e3 bnez a4,2bf4 - sign[0] = 0; - 1d86: 06010423 sb zero,104(sp) - 1d8a: aaed j 1f84 - h = (f[0] == 'A') ? hexu : hex; - 1d8c: 04100713 li a4,65 - 1d90: 00005597 auipc a1,0x5 - 1d94: c1858593 addi a1,a1,-1000 # 69a8 - 1d98: 00e783e3 beq a5,a4,259e - fv = va_arg(va, double); - 1d9c: 008b8693 addi a3,s7,8 - if (pr == -1) - 1da0: 577d li a4,-1 - fv = va_arg(va, double); - 1da2: e0b6 sd a3,64(sp) - 1da4: 000bb783 ld a5,0(s7) - if (pr == -1) - 1da8: 7ee88963 beq a7,a4,259a - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dac: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1db0: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1db4: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1db8: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dba: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 1dbe: 7a07c863 bltz a5,256e - } else if (fl & STBSP__LEADINGSPACE) { - 1dc2: 004e7793 andi a5,t3,4 - 1dc6: 60078ee3 beqz a5,2be2 - 1dca: 6789 lui a5,0x2 - 1dcc: 2785 addiw a5,a5,1 # 2001 - sign[0] = 1; - 1dce: 06f11423 sh a5,104(sp) - 1dd2: 468d li a3,3 - 1dd4: 4a0d li s4,3 - 1dd6: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 1dd8: 4705 li a4,1 - 1dda: 1752 slli a4,a4,0x34 - if (dp == -1023) - 1ddc: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 1de0: 8f49 or a4,a4,a0 - if (dp == -1023) - 1de2: 5cf600e3 beq a2,a5,2ba2 - if (pr < 15) - 1de6: 4539 li a0,14 - n64 <<= (64 - 56); - 1de8: 00871793 slli a5,a4,0x8 - if (pr < 15) - 1dec: 251546e3 blt a0,a7,2838 - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 1df0: 4705 li a4,1 - 1df2: 0028951b slliw a0,a7,0x2 - 1df6: 176e slli a4,a4,0x3b - 1df8: 00a75733 srl a4,a4,a0 - 1dfc: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 1dfe: 03c75793 srli a5,a4,0x3c - 1e02: 97ae add a5,a5,a1 - 1e04: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 1e08: 22080793 addi a5,a6,544 - 1e0c: 06010813 addi a6,sp,96 - 1e10: 97c2 add a5,a5,a6 - 1e12: 03000813 li a6,48 - 1e16: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 1e1a: 22068793 addi a5,a3,544 - 1e1e: 1094 addi a3,sp,96 - 1e20: 96be add a3,a3,a5 - 1e22: 07800793 li a5,120 - 1e26: def68423 sb a5,-536(a3) - lead[0] += 2; - 1e2a: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 1e2e: 0ca10023 sb a0,192(sp) - if (pr) - 1e32: 740893e3 bnez a7,2d78 - sn = s; - 1e36: 0c110793 addi a5,sp,193 - 1e3a: fcbe sd a5,120(sp) - 1e3c: 4701 li a4,0 - 1e3e: 4501 li a0,0 - 1e40: 4305 li t1,1 - 1e42: 4685 li a3,1 - tail[1] = h[17]; - 1e44: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 1e48: 02b00793 li a5,43 - tail[1] = h[17]; - 1e4c: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 1e50: 00065663 bgez a2,1e5c - dp = -dp; - 1e54: 40c0063b negw a2,a2 - tail[2] = '-'; - 1e58: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 1e5c: 4829 li a6,10 - 1e5e: 030665bb remw a1,a2,a6 - 1e62: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1e66: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 1e6a: 0305859b addiw a1,a1,48 - 1e6e: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1e72: 18cec3e3 blt t4,a2,27f8 - 1e76: 06300e93 li t4,99 - 1e7a: 54cec1e3 blt t4,a2,2bbc - 1e7e: 4ea5 li t4,9 - 1e80: 72ced6e3 bge t4,a2,2dac - dp /= 10; - 1e84: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 1e88: 4611 li a2,4 - 1e8a: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 1e8e: 06b10a23 sb a1,116(sp) - 1e92: 4811 li a6,4 - 1e94: 4f91 li t6,4 - 1e96: 0307879b addiw a5,a5,48 - 1e9a: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 1e9e: 006a07bb addw a5,s4,t1 - 1ea2: 010787bb addw a5,a5,a6 - 1ea6: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 1eaa: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 1eac: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 1eae: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1eb0: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1eb4: 835a mv t1,s6 - 1eb6: 00cb5363 bge s6,a2,1ebc - 1eba: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 1ebc: 030002b7 lui t0,0x3000 - fw -= n; - 1ec0: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 1ec4: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8849> - s = num + 64; - 1ec6: 0c010a93 addi s5,sp,192 - goto scopy; - 1eca: b311 j 1bce - h = (f[0] == 'B') ? hexu : hex; - 1ecc: 04200713 li a4,66 - 1ed0: 00005817 auipc a6,0x5 - 1ed4: ad880813 addi a6,a6,-1320 # 69a8 - 1ed8: 6ce78963 beq a5,a4,25aa - if (fl & STBSP__LEADING_0X) { - 1edc: 008e7793 andi a5,t3,8 - 1ee0: 66079e63 bnez a5,255c - lead[0] = 0; - 1ee4: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 1ee8: 18000793 li a5,384 - 1eec: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 1eee: 020e7713 andi a4,t3,32 - goto radixnum; - 1ef2: b979 j 1b90 - *s = (char)va_arg(va, int); - 1ef4: 000ba783 lw a5,0(s7) - l = 1; - 1ef8: 4705 li a4,1 - 1efa: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 1efc: 26f10fa3 sb a5,639(sp) - 1f00: 008b8793 addi a5,s7,8 - lead[0] = 0; - 1f04: 06010423 sb zero,104(sp) - tail[0] = 0; - 1f08: 06010823 sb zero,112(sp) - dp = 0; - 1f0c: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 1f0e: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1f10: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1f14: 835a mv t1,s6 - 1f16: 69605063 blez s6,2596 - fw -= n; - 1f1a: 337d addiw t1,t1,-1 - goto scopy; - 1f1c: 4701 li a4,0 - 1f1e: 4f81 li t6,0 - 1f20: 4685 li a3,1 - 1f22: 4a01 li s4,0 - cs = 0; - 1f24: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 1f26: 27f10a93 addi s5,sp,639 - tz = 0; - 1f2a: 4881 li a7,0 - goto scopy; - 1f2c: b14d j 1bce - fv = va_arg(va, double); - 1f2e: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 1f32: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 1f36: e0ba sd a4,64(sp) - 1f38: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 1f3c: be0795e3 bnez a5,1b26 - if (pr == -1) - 1f40: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f42: 0008871b sext.w a4,a7 - if (pr == -1) - 1f46: 00f89463 bne a7,a5,1f4e - 1f4a: 4719 li a4,6 - pr = 6; // default is 6 - 1f4c: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f4e: 10d4 addi a3,sp,100 - 1f50: 0110 addi a2,sp,128 - 1f52: 108c addi a1,sp,96 - 1f54: 18a8 addi a0,sp,120 - 1f56: f01e sd t2,32(sp) - 1f58: ec72 sd t3,24(sp) - 1f5a: e846 sd a7,16(sp) - 1f5c: a4cfe0ef jal 1a8 - 1f60: 6e62 ld t3,24(sp) - 1f62: 68c2 ld a7,16(sp) - 1f64: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 1f66: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 1f68: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 1f6a: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f6e: e00500e3 beqz a0,1d6e - fl |= STBSP__NEGATIVE; - 1f72: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 1f76: 06010823 sb zero,112(sp) - sign[0] = 1; - 1f7a: 670d lui a4,0x3 - 1f7c: d0170713 addi a4,a4,-767 # 2d01 - 1f80: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1f84: 671d lui a4,0x7 - 1f86: 7ce78963 beq a5,a4,2758 - if (dp <= 0) { - 1f8a: 46f05fe3 blez a5,2c08 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 1f8e: 040e7313 andi t1,t3,64 - 1f92: 00078e9b sext.w t4,a5 - 1f96: 4581 li a1,0 - 1f98: 00030963 beqz t1,1faa - 1f9c: 25800593 li a1,600 - 1fa0: 41d585bb subw a1,a1,t4 - 1fa4: 470d li a4,3 - 1fa6: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 1faa: 00005a17 auipc s4,0x5 - 1fae: 916a0a13 addi s4,s4,-1770 # 68c0 - s = (char *)sn; - 1fb2: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 1fb4: 0cda4283 lbu t0,205(s4) - s = num + 64; - 1fb8: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 1fbc: 44defb63 bgeu t4,a3,2412 - n = 0; - 1fc0: 4501 li a0,0 - s = num + 64; - 1fc2: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1fc4: 4b91 li s7,4 - 1fc6: a015 j 1fea - 1fc8: 8642 mv a2,a6 - 1fca: 883a mv a6,a4 - 1fcc: 8732 mv a4,a2 - *s++ = sn[n]; - 1fce: 02051613 slli a2,a0,0x20 - 1fd2: 9201 srli a2,a2,0x20 - 1fd4: 967a add a2,a2,t5 - 1fd6: 00064f83 lbu t6,0(a2) - ++n; - 1fda: 0015061b addiw a2,a0,1 - 1fde: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 1fe2: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x21f> - if (n >= (stbsp__uint32)dp) - 1fe6: 7bd57563 bgeu a0,t4,2790 - *s++ = stbsp__comma; - 1fea: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1fee: fc030de3 beqz t1,1fc8 - 1ff2: 2585 addiw a1,a1,1 - 1ff4: fd759ae3 bne a1,s7,1fc8 - *s++ = stbsp__comma; - 1ff8: fe580fa3 sb t0,-1(a6) - 1ffc: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1ffe: 4585 li a1,1 - 2000: b7f9 j 1fce - *d = tlen + (int)(bf - buf); - 2002: 000bb703 ld a4,0(s7) - 2006: 412407b3 sub a5,s0,s2 - 200a: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 200e: 008b8693 addi a3,s7,8 - 2012: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 2014: c31c sw a5,0(a4) - } break; - 2016: bae5 j 1a0e - if (fl & STBSP__LEADING_0X) { - 2018: 008e7793 andi a5,t3,8 - 201c: 50079b63 bnez a5,2532 - lead[0] = 0; - 2020: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 2024: 33000793 li a5,816 - 2028: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 202a: 020e7713 andi a4,t3,32 - h = hexu; - 202e: 00005817 auipc a6,0x5 - 2032: 96280813 addi a6,a6,-1694 # 6990 - goto radixnum; - 2036: bea9 j 1b90 - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 2038: fefe7e13 andi t3,t3,-17 - 203c: 020e6e13 ori t3,t3,32 - 2040: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 2044: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 2046: 00005817 auipc a6,0x5 - 204a: 96280813 addi a6,a6,-1694 # 69a8 - 204e: be05 j 1b7e - s = va_arg(va, char *); - 2050: 000bba83 ld s5,0(s7) - 2054: 008b8793 addi a5,s7,8 - 2058: e0be sd a5,64(sp) - if (s == 0) - 205a: 360a8ee3 beqz s5,2bd6 - if (((stbsp__uintptr)sn & 3) == 0) - 205e: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2062: 5208c663 bltz a7,258e - 2066: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 206a: 2a0782e3 beqz a5,2b0e - if (!limit || *sn == 0) - 206e: 5a068b63 beqz a3,2624 - if (((stbsp__uintptr)sn & 3) == 0) - 2072: 87d6 mv a5,s5 - 2074: a801 j 2084 - ++sn; - 2076: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 2078: 0037f713 andi a4,a5,3 - --limit; - 207c: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 207e: 280709e3 beqz a4,2b10 - if (!limit || *sn == 0) - 2082: c681 beqz a3,208a - 2084: 0007c703 lbu a4,0(a5) - 2088: f77d bnez a4,2076 - return (stbsp__uint32)(sn - s); - 208a: 415787b3 sub a5,a5,s5 - 208e: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 2092: fff6c713 not a4,a3 - 2096: 977d srai a4,a4,0x3f - 2098: 8f7d and a4,a4,a5 - 209a: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 209e: 863e mv a2,a5 - pr -= l; - 20a0: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 20a2: d0b6 sw a3,96(sp) - lead[0] = 0; - 20a4: 06010423 sb zero,104(sp) - tail[0] = 0; - 20a8: 06010823 sb zero,112(sp) - dp = 0; - 20ac: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 20ae: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 20b2: 835a mv t1,s6 - 20b4: 00fb5363 bge s6,a5,20ba - 20b8: 833e mv t1,a5 - fw -= n; - 20ba: 40c3033b subw t1,t1,a2 - goto scopy; - 20be: 4f81 li t6,0 - 20c0: 4a01 li s4,0 - cs = 0; - 20c2: 4281 li t0,0 - tz = 0; - 20c4: 4881 li a7,0 - goto scopy; - 20c6: b621 j 1bce - *bf++ = stbsp__comma; - 20c8: 87b2 mv a5,a2 - cs = 0; - 20ca: 4a01 li s4,0 - 20cc: e44ff06f j 1710 - lead[0] -= (char)i; - 20d0: 06010423 sb zero,104(sp) - while (i) { - 20d4: d38ff06f j 160c - lead[0] -= (char)i; - 20d8: 06010423 sb zero,104(sp) - while (i) { - 20dc: ed8ff06f j 17b4 - while (i >= 4) { - 20e0: 06fadc63 bge s5,a5,2158 - tz -= i; - 20e4: 8722 mv a4,s0 - 20e6: 0007851b sext.w a0,a5 - while (i >= 4) { - 20ea: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 20ee: 01672023 sw s6,0(a4) - bf += 4; - 20f2: 0711 addi a4,a4,4 - while (i >= 4) { - 20f4: 40e5863b subw a2,a1,a4 - 20f8: fecacbe3 blt s5,a2,20ee - 20fc: ffc5061b addiw a2,a0,-4 - 2100: 0026561b srliw a2,a2,0x2 - 2104: 0016071b addiw a4,a2,1 - 2108: 37f1 addiw a5,a5,-4 - 210a: 0026161b slliw a2,a2,0x2 - 210e: 070a slli a4,a4,0x2 - 2110: 9722 add a4,a4,s0 - 2112: 9f91 subw a5,a5,a2 - while (i) { - 2114: 843a mv s0,a4 - 2116: 80078de3 beqz a5,1930 - 211a: 1782 slli a5,a5,0x20 - 211c: 9381 srli a5,a5,0x20 - 211e: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 2122: 0705 addi a4,a4,1 - 2124: ff470fa3 sb s4,-1(a4) - while (i) { - 2128: fe871de3 bne a4,s0,2122 - 212c: 805ff06f j 1930 - stbsp__cb_buf_clamp(i, pr); - 2130: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2132: 4981 li s3,0 - 2134: dc049263 bnez s1,16f8 - 2138: b8d5 j 1a2c - STBSP__UNALIGNED(while (i >= 4) { - 213a: 4401 li s0,0 - 213c: 85be mv a1,a5 - 213e: f0ea4b63 blt s4,a4,1854 - 2142: f42ff06f j 1884 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2146: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 214a: 87c6 mv a5,a7 - tz -= i; - 214c: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 214e: fc071c63 bnez a4,1926 - while (i >= 4) { - 2152: 470d li a4,3 - 2154: f8f748e3 blt a4,a5,20e4 - 2158: 8722 mv a4,s0 - 215a: b7c1 j 211a - tail[0] -= (char)i; - 215c: 06010823 sb zero,112(sp) - while (i) { - 2160: b0b9 j 19ae - while (i >= 4) { - 2162: 478d li a5,3 - 2164: 8622 mv a2,s0 - 2166: d8b7d963 bge a5,a1,16f8 - 216a: ffc5839b addiw t2,a1,-4 - 216e: 0023d79b srliw a5,t2,0x2 - 2172: 0017859b addiw a1,a5,1 - 2176: 058a slli a1,a1,0x2 - 2178: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 217a: 01762023 sw s7,0(a2) - bf += 4; - 217e: 0611 addi a2,a2,4 - while (i >= 4) { - 2180: fe861de3 bne a2,s0,217a - 2184: 0027979b slliw a5,a5,0x2 - 2188: 40f385bb subw a1,t2,a5 - 218c: d68ff06f j 16f4 - while (i) { - 2190: 85be mv a1,a5 - 2192: ee071963 bnez a4,1884 - 2196: f16ff06f j 18ac - 219a: 2c013a03 ld s4,704(sp) - 219e: 2b813a83 ld s5,696(sp) - 21a2: 2b013b03 ld s6,688(sp) - 21a6: 8ca2 mv s9,s0 - 21a8: a04ff06f j 13ac - stbsp__chk_cb_buf(1); - 21ac: 2601 sext.w a2,a2 - 21ae: 1fe00793 li a5,510 - 21b2: f8c7c563 blt a5,a2,193c - 21b6: f3eff06f j 18f4 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21ba: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 21be: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21c2: 2e01 sext.w t3,t3 - if (fw + pr) { - 21c4: a0078be3 beqz a5,1bda - while (fw > 0) { - 21c8: be605663 blez t1,15b4 - *(stbsp__uint32 *)bf = 0x20202020; - 21cc: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 21d0: 854a mv a0,s2 - 21d2: 894e mv s2,s3 - 21d4: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 21d6: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa868> - stbsp__cb_buf_clamp(i, fw); - 21da: ec52 sd s4,24(sp) - 21dc: f426 sd s1,40(sp) - 21de: 87a2 mv a5,s0 - 21e0: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 21e2: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 21e6: 8d6e mv s10,s11 - *bf++ = ' '; - 21e8: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 21ec: 8de6 mv s11,s9 - while (i >= 4) { - 21ee: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 21f0: 20000e93 li t4,512 - 21f4: e846 sd a7,16(sp) - 21f6: f07e sd t6,32(sp) - 21f8: f836 sd a3,48(sp) - 21fa: e4f2 sd t3,72(sp) - 21fc: e8ba sd a4,80(sp) - 21fe: ec96 sd t0,88(sp) - 2200: 841a mv s0,t1 - 2202: 8a42 mv s4,a6 - 2204: 8c9e mv s9,t2 - 2206: 0c090063 beqz s2,22c6 - 220a: 40a78633 sub a2,a5,a0 - 220e: 40ce873b subw a4,t4,a2 - 2212: 86ba mv a3,a4 - 2214: 00e45363 bge s0,a4,221a - 2218: 86a2 mv a3,s0 - 221a: 0006871b sext.w a4,a3 - fw -= i; - 221e: 9c15 subw s0,s0,a3 - while (i) { - 2220: e719 bnez a4,222e - 2222: a095 j 2286 - *bf++ = ' '; - 2224: 01678023 sb s6,0(a5) - --i; - 2228: 377d addiw a4,a4,-1 - *bf++ = ' '; - 222a: 0785 addi a5,a5,1 - while (i) { - 222c: cb29 beqz a4,227e - if ((((stbsp__uintptr)bf) & 3) == 0) - 222e: 0037f693 andi a3,a5,3 - 2232: faed bnez a3,2224 - while (i >= 4) { - 2234: 86be mv a3,a5 - 2236: 00070f9b sext.w t6,a4 - 223a: 00f705bb addw a1,a4,a5 - 223e: 02ebd763 bge s7,a4,226c - *(stbsp__uint32 *)bf = 0x20202020; - 2242: 0146a023 sw s4,0(a3) - bf += 4; - 2246: 0691 addi a3,a3,4 - while (i >= 4) { - 2248: 40d5863b subw a2,a1,a3 - 224c: fecbcbe3 blt s7,a2,2242 - 2250: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8844> - 2254: 0026561b srliw a2,a2,0x2 - 2258: 0016069b addiw a3,a2,1 - 225c: 3771 addiw a4,a4,-4 - 225e: 0026161b slliw a2,a2,0x2 - 2262: 068a slli a3,a3,0x2 - 2264: 96be add a3,a3,a5 - 2266: 9f11 subw a4,a4,a2 - while (i) { - 2268: 87b6 mv a5,a3 - 226a: cb11 beqz a4,227e - 226c: 1702 slli a4,a4,0x20 - 226e: 9301 srli a4,a4,0x20 - 2270: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 2274: 0685 addi a3,a3,1 - 2276: ff668fa3 sb s6,-1(a3) - while (i) { - 227a: fef69de3 bne a3,a5,2274 - stbsp__chk_cb_buf(1); - 227e: 40a78633 sub a2,a5,a0 - 2282: 00090e63 beqz s2,229e - 2286: 2601 sext.w a2,a2 - 2288: 00cf5b63 bge t5,a2,229e - 228c: 85ce mv a1,s3 - 228e: 9cb1 addw s1,s1,a2 - 2290: 9902 jalr s2 - 2292: c541 beqz a0,231a - 2294: 87aa mv a5,a0 - 2296: 20000e93 li t4,512 - 229a: 1fe00f13 li t5,510 - while (fw > 0) { - 229e: f68044e3 bgtz s0,2206 - 22a2: 8322 mv t1,s0 - 22a4: 89ca mv s3,s2 - 22a6: 83e6 mv t2,s9 - 22a8: 68c2 ld a7,16(sp) - 22aa: 8cee mv s9,s11 - 22ac: 6a62 ld s4,24(sp) - 22ae: 8dea mv s11,s10 - 22b0: 7f82 ld t6,32(sp) - 22b2: 8d26 mv s10,s1 - 22b4: 76c2 ld a3,48(sp) - 22b6: 6e26 ld t3,72(sp) - 22b8: 6746 ld a4,80(sp) - 22ba: 62e6 ld t0,88(sp) - 22bc: 74a2 ld s1,40(sp) - 22be: 892a mv s2,a0 - 22c0: 843e mv s0,a5 - 22c2: af2ff06f j 15b4 - stbsp__cb_buf_clamp(i, fw); - 22c6: 8722 mv a4,s0 - 22c8: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 22ca: b795 j 222e - n64 = va_arg(va, stbsp__uint32); - 22cc: 000be683 lwu a3,0(s7) - 22d0: b0f9 j 1b9e - 22d2: 2c013a03 ld s4,704(sp) - 22d6: 2b813a83 ld s5,696(sp) - 22da: 2b013b03 ld s6,688(sp) - 22de: 8cca mv s9,s2 - 22e0: 8ccff06f j 13ac - 22e4: 8cd6 mv s9,s5 - 22e6: 2c013a03 ld s4,704(sp) - 22ea: 2b813a83 ld s5,696(sp) - 22ee: 2b013b03 ld s6,688(sp) - 22f2: 8baff06f j 13ac - 22f6: 2c013a03 ld s4,704(sp) - 22fa: 2b813a83 ld s5,696(sp) - 22fe: 2b013b03 ld s6,688(sp) - 2302: 8cea mv s9,s10 - 2304: 8a8ff06f j 13ac - while (i) { - 2308: 85a2 mv a1,s0 - 230a: c12ff06f j 171c - while (i >= 4) { - 230e: 478d li a5,3 - 2310: 8622 mv a2,s0 - 2312: e4b7cce3 blt a5,a1,216a - 2316: be2ff06f j 16f8 - 231a: 2c013a03 ld s4,704(sp) - 231e: 2b813a83 ld s5,696(sp) - 2322: 2b013b03 ld s6,688(sp) - 2326: 8ca6 mv s9,s1 - 2328: 884ff06f j 13ac - lead[2] = h[16]; - 232c: 01084683 lbu a3,16(a6) - lead[0] = 2; - 2330: 678d lui a5,0x3 - 2332: 0789 addi a5,a5,2 # 3002 - 2334: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 2338: 06d10523 sb a3,106(sp) - 233c: b891 j 1b90 - 233e: 8cea mv s9,s10 - 2340: 86cff06f j 13ac - 2344: 4f81 li t6,0 - 2346: 4a01 li s4,0 - 2348: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 234a: 00004f17 auipc t5,0x4 - 234e: 643f4f03 lbu t5,1603(t5) # 698d - 2352: 0510 addi a2,sp,640 - 2354: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2358: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 235a: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 235e: 0007029b sext.w t0,a4 - 2362: 005317bb sllw a5,t1,t0 - 2366: 37fd addiw a5,a5,-1 - 2368: 8ff5 and a5,a5,a3 - 236a: 97c2 add a5,a5,a6 - 236c: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 2370: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2374: fff60a93 addi s5,a2,-1 - 2378: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 237c: e691 bnez a3,2388 - 237e: 051c addi a5,sp,640 - 2380: 415787bb subw a5,a5,s5 - 2384: 0317dd63 bge a5,a7,23be - if (fl & STBSP__TRIPLET_COMMA) { - 2388: 020e8963 beqz t4,23ba - ++l; - 238c: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 2390: 0047d29b srliw t0,a5,0x4 - 2394: 00f2c2b3 xor t0,t0,a5 - 2398: 00f2f293 andi t0,t0,15 - ++l; - 239c: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 23a0: 0087d71b srliw a4,a5,0x8 - 23a4: 00029b63 bnez t0,23ba - l &= ~15; - 23a8: 9bc1 andi a5,a5,-16 - 23aa: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 23ae: ffe60a93 addi s5,a2,-2 - 23b2: ffe60f23 sb t5,-2(a2) - 23b6: 0087d71b srliw a4,a5,0x8 - 23ba: 8656 mv a2,s5 - 23bc: b74d j 235e - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23be: 0045d29b srliw t0,a1,0x4 - 23c2: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 23c6: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23ca: 0182929b slliw t0,t0,0x18 - 23ce: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 23d2: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 23d6: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 23d8: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23da: 86be mv a3,a5 - 23dc: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 23e0: 835a mv t1,s6 - 23e2: 00cb5363 bge s6,a2,23e8 - 23e6: 8332 mv t1,a2 - fw -= n; - 23e8: 41f3033b subw t1,t1,t6 - pr -= l; - 23ec: 9f1d subw a4,a4,a5 - goto scopy; - 23ee: 4f81 li t6,0 - tz = 0; - 23f0: 4881 li a7,0 - goto scopy; - 23f2: fdcff06f j 1bce - 23f6: 8cda mv s9,s6 - 23f8: 2c013a03 ld s4,704(sp) - 23fc: 2b813a83 ld s5,696(sp) - 2400: 2b013b03 ld s6,688(sp) - 2404: fa9fe06f j 13ac - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 2408: 020e6e13 ori t3,t3,32 - ++f; - 240c: 0485 addi s1,s1,1 - 240e: 864ff06f j 1472 - n = 0; - 2412: 4601 li a2,0 - s = num + 64; - 2414: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2416: 4511 li a0,4 - *s++ = stbsp__comma; - 2418: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 241c: 00030563 beqz t1,2426 - 2420: 2585 addiw a1,a1,1 - 2422: 10a58363 beq a1,a0,2528 - 2426: 873e mv a4,a5 - *s++ = sn[n]; - 2428: 02061793 slli a5,a2,0x20 - 242c: 9381 srli a5,a5,0x20 - 242e: 97fa add a5,a5,t5 - 2430: 0007c803 lbu a6,0(a5) - ++n; - 2434: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 2436: ff070fa3 sb a6,-1(a4) - if (n >= l) - 243a: fcd66fe3 bltu a2,a3,2418 - if (n < (stbsp__uint32)dp) { - 243e: 0bd663e3 bltu a2,t4,2ce4 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 2442: 415707b3 sub a5,a4,s5 - 2446: 030002b7 lui t0,0x3000 - 244a: 00f282bb addw t0,t0,a5 - if (pr) { - 244e: 00088a63 beqz a7,2462 - *s++ = stbsp__period; - 2452: 0cca4683 lbu a3,204(s4) - 2456: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 245a: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 245e: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 2462: 100e7713 andi a4,t3,256 - 2466: 86f2 mv a3,t3 - 2468: 2c070163 beqz a4,272a - if (fl & STBSP__METRIC_NOSPACE) - 246c: 40ae5f9b sraiw t6,t3,0xa - 2470: 001fcf93 xori t6,t6,1 - 2474: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 2478: 02000713 li a4,32 - 247c: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 2480: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 2484: 018e561b srliw a2,t3,0x18 - 2488: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 248c: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 2490: c225 beqz a2,24f0 - if (fl & STBSP__METRIC_1024) - 2492: 001f859b addiw a1,t6,1 - 2496: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 249a: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 249c: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24a0: 85b2 mv a1,a2 - 24a2: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 24a4: 06055ee3 bgez a0,2d20 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24a8: 00003517 auipc a0,0x3 - 24ac: b6050513 addi a0,a0,-1184 # 5008 <_GLOBAL__sub_I__ZSt3cin+0x5a> - 24b0: 972a add a4,a4,a0 - 24b2: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24b6: 6709 lui a4,0x2 - 24b8: 80070713 addi a4,a4,-2048 # 1800 - 24bc: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24be: 06010813 addi a6,sp,96 - 24c2: 22060693 addi a3,a2,544 - 24c6: 96c2 add a3,a3,a6 - 24c8: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff8638> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24cc: 8007071b addiw a4,a4,-2048 - 24d0: 060715e3 bnez a4,2d3a - tail[idx + 1] = 'i'; - 24d4: 2f89 addiw t6,t6,2 - 24d6: 0ffff593 zext.b a1,t6 - 24da: 1094 addi a3,sp,96 - 24dc: 22058713 addi a4,a1,544 - 24e0: 9736 add a4,a4,a3 - 24e2: 06900693 li a3,105 - 24e6: 8fae mv t6,a1 - 24e8: ded70823 sb a3,-528(a4) - tail[0] = idx; - 24ec: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 24f0: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 24f4: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 24f8: fff6c713 not a4,a3 - 24fc: 977d srai a4,a4,0x3f - 24fe: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2500: 00fa073b addw a4,s4,a5 - 2504: 9f2d addw a4,a4,a1 - 2506: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 250a: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 250c: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 250e: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2510: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2514: 835a mv t1,s6 - 2516: 00cb5363 bge s6,a2,251c - 251a: 8332 mv t1,a2 - fw -= n; - 251c: 40e3033b subw t1,t1,a4 - pr -= l; - 2520: 40d7873b subw a4,a5,a3 - goto scopy; - 2524: eaaff06f j 1bce - *s++ = stbsp__comma; - 2528: fe578fa3 sb t0,-1(a5) - 252c: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 252e: 4585 li a1,1 - 2530: bde5 j 2428 - lead[0] = 1; - 2532: 678d lui a5,0x3 - 2534: 0785 addi a5,a5,1 # 3001 - 2536: 06f11423 sh a5,104(sp) - 253a: b4ed j 2024 - if ((f[0] != 'u') && (i64 < 0)) { - 253c: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 2540: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 2544: dcd78263 beq a5,a3,1b08 - 2548: dc0f5063 bgez t5,1b08 - fl |= STBSP__NEGATIVE; - 254c: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 2550: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 2554: 00070e1b sext.w t3,a4 - 2558: db0ff06f j 1b08 - lead[2] = h[0xb]; - 255c: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 2560: 678d lui a5,0x3 - 2562: 0789 addi a5,a5,2 # 3002 - 2564: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 2568: 06e10523 sb a4,106(sp) - 256c: bab5 j 1ee8 - sign[0] = 1; - 256e: 678d lui a5,0x3 - 2570: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 2574: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 2578: 06f11423 sh a5,104(sp) - 257c: 468d li a3,3 - 257e: 4a0d li s4,3 - 2580: 4809 li a6,2 - 2582: b899 j 1dd8 - sign[0] = 1; - 2584: 6709 lui a4,0x2 - 2586: 0705 addi a4,a4,1 # 2001 - 2588: 06e11423 sh a4,104(sp) - 258c: bae5 j 1f84 - if (((stbsp__uintptr)sn & 3) == 0) - 258e: 0e0780e3 beqz a5,2e6e - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2592: 56fd li a3,-1 - 2594: bcf9 j 2072 - if (fw < (stbsp__int32)n) - 2596: 4305 li t1,1 - 2598: b249 j 1f1a - pr = 6; // default is 6 - 259a: 4899 li a7,6 - 259c: b801 j 1dac - h = (f[0] == 'A') ? hexu : hex; - 259e: 00004597 auipc a1,0x4 - 25a2: 3f258593 addi a1,a1,1010 # 6990 - 25a6: ff6ff06f j 1d9c - h = (f[0] == 'B') ? hexu : hex; - 25aa: 00004817 auipc a6,0x4 - 25ae: 3e680813 addi a6,a6,998 # 6990 - 25b2: b22d j 1edc - 25b4: 80000737 lui a4,0x80000 - 25b8: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff884e> - pr = 6; // default is 6 - 25ba: 4899 li a7,6 - 25bc: e4eff06f j 1c0a - h = (f[0] == 'E') ? hexu : hex; - 25c0: 00004317 auipc t1,0x4 - 25c4: 3d030313 addi t1,t1,976 # 6990 - 25c8: e28ff06f j 1bf0 - 25cc: 80000737 lui a4,0x80000 - 25d0: 4a99 li s5,6 - 25d2: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff884d> - pr = 6; - 25d4: 4a19 li s4,6 - 25d6: ee8ff06f j 1cbe - h = (f[0] == 'G') ? hexu : hex; - 25da: 00004317 auipc t1,0x4 - 25de: 3b630313 addi t1,t1,950 # 6990 - 25e2: eb6ff06f j 1c98 - 25e6: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 25e8: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 25ea: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 25ec: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 25ee: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 25f0: 0005071b sext.w a4,a0 - 25f4: 01175f63 bge a4,a7,2612 - pr = l - 1; - 25f8: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 25fc: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2600: 70028c63 beqz t0,2d18 - sign[0] = 1; - 2604: 670d lui a4,0x3 - 2606: d0170713 addi a4,a4,-767 # 2d01 - 260a: 06e11423 sh a4,104(sp) - 260e: e3aff06f j 1c48 - else if (pr) - 2612: fe0885e3 beqz a7,25fc - --pr; // when using %e, there is one digit before the decimal - 2616: 38fd addiw a7,a7,-1 - 2618: b7d5 j 25fc - switch (f[0]) { - 261a: 0034c783 lbu a5,3(s1) - f += 3; - 261e: 048d addi s1,s1,3 - 2620: e53fe06f j 1472 - if (!limit || *sn == 0) - 2624: 4601 li a2,0 - 2626: 4701 li a4,0 - 2628: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 262a: bca5 j 20a2 - pr = 1; - 262c: 4885 li a7,1 - 262e: cf4ff06f j 1b22 - *s++ = sn[0]; - 2632: 000ac703 lbu a4,0(s5) - 2636: 0ce10023 sb a4,192(sp) - if (pr) - 263a: 54088563 beqz a7,2b84 - *s++ = stbsp__period; - 263e: 00004617 auipc a2,0x4 - 2642: 34e64603 lbu a2,846(a2) # 698c - if ((l - 1) > (stbsp__uint32)pr) - 2646: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 264a: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 264e: 0008851b sext.w a0,a7 - 2652: 0007061b sext.w a2,a4 - 2656: 52c57163 bgeu a0,a2,2b78 - l = pr + 1; - 265a: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 265e: 8746 mv a4,a7 - 2660: 02071613 slli a2,a4,0x20 - 2664: 9201 srli a2,a2,0x20 - 2666: 0c210713 addi a4,sp,194 - 266a: 0a85 addi s5,s5,1 - 266c: 963a add a2,a2,a4 - *s++ = sn[n]; - 266e: 000ac583 lbu a1,0(s5) - 2672: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 2674: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 2676: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 267a: fec71ae3 bne a4,a2,266e - tail[1] = h[0xe]; - 267e: 00e34803 lbu a6,14(t1) - dp -= 1; - 2682: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 2686: 02b00593 li a1,43 - tail[1] = h[0xe]; - 268a: 070108a3 sb a6,113(sp) - if (dp < 0) { - 268e: 00075663 bgez a4,269a - dp = -dp; - 2692: 4705 li a4,1 - 2694: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 2696: 02d00593 li a1,45 - 269a: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 269e: 06300793 li a5,99 - 26a2: 4ee7d663 bge a5,a4,2b8e - 26a6: 4595 li a1,5 - 26a8: 4f95 li t6,5 - 26aa: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 26ac: 47a9 li a5,10 - dp /= 10; - 26ae: 02f7433b divw t1,a4,a5 - --n; - 26b2: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 26b6: 020f1293 slli t0,t5,0x20 - 26ba: 220e8813 addi a6,t4,544 - 26be: 06010893 addi a7,sp,96 - 26c2: 0202d293 srli t0,t0,0x20 - 26c6: 01180eb3 add t4,a6,a7 - 26ca: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff8a68> - 26ce: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 26d2: 07f10823 sb t6,112(sp) - if (n <= 3) - 26d6: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 26d8: 02f7673b remw a4,a4,a5 - dp /= 10; - 26dc: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 26e0: 02f36abb remw s5,t1,a5 - 26e4: 0307071b addiw a4,a4,48 - 26e8: deee8823 sb a4,-528(t4) - 26ec: 030a871b addiw a4,s5,48 - 26f0: dee28823 sb a4,-528(t0) - if (n <= 3) - 26f4: 014f0a63 beq t5,s4,2708 - dp /= 10; - 26f8: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 26fc: 02f867bb remw a5,a6,a5 - 2700: 0307879b addiw a5,a5,48 - 2704: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 2708: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 270a: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 270e: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 2712: 40d508bb subw a7,a0,a3 - 2716: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2718: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 271c: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8849> - 271e: bbc9 j 24f0 - 2720: fc2e sd a1,56(sp) - 2722: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2724: 8536 mv a0,a3 - 2726: e2cff06f j 1d52 - flt_lead: - 272a: 4581 li a1,0 - 272c: 4f81 li t6,0 - 272e: b3c9 j 24f0 - n = pr + lead[0] + tail[0] + tz; - 2730: 06814a03 lbu s4,104(sp) - 2734: 000a0f9b sext.w t6,s4 - 2738: b901 j 2348 - if ((f[1] == '6') && (f[2] == '4')) { - 273a: 0024c683 lbu a3,2(s1) - 273e: 03400713 li a4,52 - 2742: 00e68463 beq a3,a4,274a - 2746: e2bfe06f j 1570 - switch (f[0]) { - 274a: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 274e: 020e6e13 ori t3,t3,32 - f += 3; - 2752: 048d addi s1,s1,3 - 2754: d1ffe06f j 1472 - if (pr < (stbsp__int32)l) - 2758: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 275c: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 2760: fff7c793 not a5,a5 - 2764: 97fd srai a5,a5,0x3f - 2766: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2768: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 276c: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 276e: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 2770: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 2774: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 2776: 835a mv t1,s6 - 2778: 00cb5363 bge s6,a2,277e - 277c: 8332 mv t1,a2 - fw -= n; - 277e: 40e3033b subw t1,t1,a4 - goto scopy; - 2782: 4f81 li t6,0 - pr -= l; - 2784: 40d7873b subw a4,a5,a3 - cs = 0; - 2788: 4281 li t0,0 - tz = 0; - 278a: 4881 li a7,0 - goto scopy; - 278c: c42ff06f j 1bce - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 2790: 415705b3 sub a1,a4,s5 - 2794: 030002b7 lui t0,0x3000 - 2798: 00b282bb addw t0,t0,a1 - l = pr - n; - 279c: 0008859b sext.w a1,a7 - if (pr) - 27a0: 42088763 beqz a7,2bce - *s++ = stbsp__period; - 27a4: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 27a8: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 27ac: 00280713 addi a4,a6,2 - 27b0: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 27b4: 4065ed63 bltu a1,t1,2bce - while (n < l) { - 27b8: 5ed57863 bgeu a0,a3,2da8 - 27bc: 40c687bb subw a5,a3,a2 - 27c0: 37fd addiw a5,a5,-1 - 27c2: 1782 slli a5,a5,0x20 - 27c4: 9381 srli a5,a5,0x20 - 27c6: 1602 slli a2,a2,0x20 - 27c8: 9201 srli a2,a2,0x20 - 27ca: 0785 addi a5,a5,1 - 27cc: 967a add a2,a2,t5 - 27ce: 97ba add a5,a5,a4 - *s++ = sn[n]; - 27d0: 00064503 lbu a0,0(a2) - 27d4: 0705 addi a4,a4,1 - while (n < l) { - 27d6: 0605 addi a2,a2,1 - *s++ = sn[n]; - 27d8: fea70fa3 sb a0,-1(a4) - while (n < l) { - 27dc: fef71ae3 bne a4,a5,27d0 - tz = pr - (l - dp); - 27e0: 01d585bb addw a1,a1,t4 - 27e4: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 27e8: 415787b3 sub a5,a5,s5 - 27ec: b99d j 2462 - fl |= STBSP__NEGATIVE; - 27ee: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 27f2: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 27f6: b539 j 2604 - tail[0] = (char)n; - 27f8: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 27fa: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 27fe: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2802: 4819 li a6,6 - 2804: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2806: 4599 li a1,6 - dp /= 10; - 2808: 4f29 li t5,10 - if (n <= 3) - 280a: 428d li t0,3 - 280c: 87b2 mv a5,a2 - dp /= 10; - 280e: 03e7c7bb divw a5,a5,t5 - --n; - 2812: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 2814: 02059613 slli a2,a1,0x20 - 2818: 9201 srli a2,a2,0x20 - 281a: 06010e93 addi t4,sp,96 - 281e: 22060613 addi a2,a2,544 - 2822: 9676 add a2,a2,t4 - 2824: 03e7eebb remw t4,a5,t5 - 2828: 030e8e9b addiw t4,t4,48 - 282c: dfd60823 sb t4,-528(a2) - if (n <= 3) - 2830: fc559fe3 bne a1,t0,280e - 2834: e6aff06f j 1e9e - *s++ = h[(n64 >> 60) & 15]; - 2838: 93f1 srli a5,a5,0x3c - 283a: 97ae add a5,a5,a1 - 283c: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 2840: 1088 addi a0,sp,96 - 2842: 22080793 addi a5,a6,544 - 2846: 97aa add a5,a5,a0 - 2848: 03000513 li a0,48 - 284c: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 2850: 22068793 addi a5,a3,544 - 2854: 1094 addi a3,sp,96 - 2856: 96be add a3,a3,a5 - *s++ = stbsp__period; - 2858: 00004517 auipc a0,0x4 - 285c: 13454503 lbu a0,308(a0) # 698c - lead[2 + lead[0]] = 'x'; - 2860: 07800813 li a6,120 - sn = s; - 2864: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 2868: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 286c: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 2870: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 2874: 0c610023 sb t1,192(sp) - n64 <<= 4; - 2878: 0732 slli a4,a4,0xc - sn = s; - 287a: fcbe sd a5,120(sp) - n = pr; - 287c: 0008869b sext.w a3,a7 - while (n--) { - 2880: 4831 li a6,12 - if (n > 13) - 2882: 4535 li a0,13 - tz = pr - n; - 2884: 40a688bb subw a7,a3,a0 - while (n--) { - 2888: 02081313 slli t1,a6,0x20 - 288c: 02035313 srli t1,t1,0x20 - 2890: 22030693 addi a3,t1,544 - 2894: 1088 addi a0,sp,96 - 2896: 9536 add a0,a0,a3 - 2898: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 289c: 03c75693 srli a3,a4,0x3c - 28a0: 96ae add a3,a3,a1 - 28a2: 0006c683 lbu a3,0(a3) - 28a6: 0785 addi a5,a5,1 - n64 <<= 4; - 28a8: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 28aa: fed78fa3 sb a3,-1(a5) - while (n--) { - 28ae: fea797e3 bne a5,a0,289c - l = (int)(s - (num + 64)); - 28b2: 280d addiw a6,a6,3 - 28b4: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 28b8: fff6c713 not a4,a3 - 28bc: 977d srai a4,a4,0x3f - 28be: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 28c2: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 28c6: 0007031b sext.w t1,a4 - pr -= l; - 28ca: 4107073b subw a4,a4,a6 - 28ce: d76ff06f j 1e44 - *--s = stbsp__comma; - 28d2: 00004a17 auipc s4,0x4 - 28d6: feea0a13 addi s4,s4,-18 # 68c0 - if (n64 >= 100000000) { - 28da: 05f5e7b7 lui a5,0x5f5e - 28de: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56947> - n = (stbsp__uint32)(n64 % 100000000); - 28e2: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 28e6: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 28ea: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 28ec: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56948> - l = 0; - 28f0: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 28f2: 040e7813 andi a6,t3,64 - 28f6: 4701 li a4,0 - 28f8: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 28fa: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 28fe: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2900: 430d li t1,3 - n /= 10; - 2902: 45a9 li a1,10 - while (n) { - 2904: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2906: 06400f93 li t6,100 - if (n64 >= 100000000) { - 290a: 67c2 ld a5,16(sp) - char *o = s - 8; - 290c: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 2910: 0fe7f763 bgeu a5,t5,29fe - n = (stbsp__uint32)(n64 % 100000000); - 2914: 6662 ld a2,24(sp) - 2916: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 291a: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 291e: 0e080463 beqz a6,2a06 - while (n) { - 2922: cb85 beqz a5,2952 - *--s = stbsp__comma; - 2924: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2926: 00671763 bne a4,t1,2934 - --o; - 292a: 017a8023 sb s7,0(s5) - 292e: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 2930: 1afd addi s5,s5,-1 - l = 0; - 2932: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2934: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 2936: 02b7f63b remuw a2,a5,a1 - 293a: 0306061b addiw a2,a2,48 - 293e: 00ca8023 sb a2,0(s5) - n /= 10; - 2942: 02b7d63b divuw a2,a5,a1 - while (n) { - 2946: 00fef563 bgeu t4,a5,2950 - *--s = stbsp__comma; - 294a: 1afd addi s5,s5,-1 - 294c: 87b2 mv a5,a2 - 294e: bfe1 j 2926 - while (n) { - 2950: 4285 li t0,1 - if (n64 == 0) { - 2952: 020f0063 beqz t5,2972 - while (s != o) - 2956: fb550ae3 beq a0,s5,290a - *--s = stbsp__comma; - 295a: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 295c: 00080663 beqz a6,2968 - 2960: 08670863 beq a4,t1,29f0 - 2964: 2705 addiw a4,a4,1 - 2966: 4285 li t0,1 - *--s = '0'; - 2968: 03000793 li a5,48 - 296c: 00fa8023 sb a5,0(s5) - 2970: b7dd j 2956 - 2972: 00028363 beqz t0,2978 - 2976: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2978: 000ac703 lbu a4,0(s5) - 297c: 03000793 li a5,48 - 2980: 34f70b63 beq a4,a5,2cd6 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2984: 051c addi a5,sp,640 - 2986: 415786bb subw a3,a5,s5 - tail[0] = 0; - 298a: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 298e: 080e7713 andi a4,t3,128 - 2992: 87f2 mv a5,t3 - 2994: 32070863 beqz a4,2cc4 - 2998: 678d lui a5,0x3 - 299a: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 299e: 06f11423 sh a5,104(sp) - 29a2: 4705 li a4,1 - 29a4: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29a6: d0b6 sw a3,96(sp) - if (l == 0) { - 29a8: 30068163 beqz a3,2caa - cs = l + (3 << 24); - 29ac: 030002b7 lui t0,0x3000 - 29b0: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 29b4: 0006861b sext.w a2,a3 - if (pr < 0) - 29b8: fff8c793 not a5,a7 - 29bc: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 29be: 00f8f7b3 and a5,a7,a5 - 29c2: 0007859b sext.w a1,a5 - 29c6: 00c5d363 bge a1,a2,29cc - 29ca: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 29cc: 00f7063b addw a2,a4,a5 - 29d0: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 29d2: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 29d4: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 29d8: 835a mv t1,s6 - 29da: 00cb5363 bge s6,a2,29e0 - 29de: 8332 mv t1,a2 - fw -= n; - 29e0: 40e3033b subw t1,t1,a4 - scopy: - 29e4: 4f81 li t6,0 - pr -= l; - 29e6: 40d7873b subw a4,a5,a3 - tz = 0; - 29ea: 4881 li a7,0 - scopy: - 29ec: 9e2ff06f j 1bce - *--s = stbsp__comma; - 29f0: 87de mv a5,s7 - --o; - 29f2: 157d addi a0,a0,-1 - l = 0; - 29f4: 4701 li a4,0 - --o; - 29f6: 4285 li t0,1 - 29f8: 00fa8023 sb a5,0(s5) - 29fc: bfa9 j 2956 - n = (stbsp__uint32)n64; - 29fe: 000f079b sext.w a5,t5 - n64 = 0; - 2a02: 4f01 li t5,0 - 2a04: bf29 j 291e - 2a06: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a08: 03f7f63b remuw a2,a5,t6 - s -= 2; - 2a0c: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a0e: 0007889b sext.w a7,a5 - 2a12: 2605 addiw a2,a2,1 - 2a14: 0016161b slliw a2,a2,0x1 - 2a18: 1602 slli a2,a2,0x20 - 2a1a: 9201 srli a2,a2,0x20 - 2a1c: 9652 add a2,a2,s4 - 2a1e: 00065603 lhu a2,0(a2) - n /= 100; - 2a22: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a26: 00ca9023 sh a2,0(s5) - } while (n); - 2a2a: 06300613 li a2,99 - 2a2e: fd166de3 bltu a2,a7,2a08 - 2a32: 7882 ld a7,32(sp) - if (n64 == 0) { - 2a34: f20f11e3 bnez t5,2956 - 2a38: bf2d j 2972 - *(stbsp__uint32 *)bf = 0x20202020; - 2a3a: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2a3e: 854a mv a0,s2 - *bf++ = ' '; - 2a40: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 2a44: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa868> - stbsp__chk_cb_buf(1); - 2a48: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 2a4c: 20000b93 li s7,512 - 2a50: 891a mv s2,t1 - 2a52: 0a098063 beqz s3,2af2 - 2a56: 40a40633 sub a2,s0,a0 - 2a5a: 40cb87bb subw a5,s7,a2 - 2a5e: 873e mv a4,a5 - 2a60: 00f95363 bge s2,a5,2a66 - 2a64: 874a mv a4,s2 - 2a66: 0007079b sext.w a5,a4 - fw -= i; - 2a6a: 40e9093b subw s2,s2,a4 - while (i) { - 2a6e: e799 bnez a5,2a7c - 2a70: a281 j 2bb0 - *bf++ = ' '; - 2a72: 01540023 sb s5,0(s0) - --i; - 2a76: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 2a78: 0405 addi s0,s0,1 - while (i) { - 2a7a: cba1 beqz a5,2aca - if ((((stbsp__uintptr)bf) & 3) == 0) - 2a7c: 00347713 andi a4,s0,3 - 2a80: fb6d bnez a4,2a72 - while (i >= 4) { - 2a82: 470d li a4,3 - 2a84: 40f75363 bge a4,a5,2e8a - 2a88: ffc7869b addiw a3,a5,-4 - 2a8c: 0026d79b srliw a5,a3,0x2 - 2a90: 0017871b addiw a4,a5,1 - 2a94: 070a slli a4,a4,0x2 - 2a96: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 2a98: 01642023 sw s6,0(s0) - bf += 4; - 2a9c: 0411 addi s0,s0,4 - while (i >= 4) { - 2a9e: fee41de3 bne s0,a4,2a98 - 2aa2: 0027979b slliw a5,a5,0x2 - 2aa6: 40f687bb subw a5,a3,a5 - while (i--) - 2aaa: fff7869b addiw a3,a5,-1 - 2aae: cf91 beqz a5,2aca - 2ab0: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 2ab2: 0705 addi a4,a4,1 - while (i--) - 2ab4: 0007061b sext.w a2,a4 - *bf++ = ' '; - 2ab8: ff570fa3 sb s5,-1(a4) - while (i--) - 2abc: fec79be3 bne a5,a2,2ab2 - 2ac0: 2685 addiw a3,a3,1 - 2ac2: 02069793 slli a5,a3,0x20 - 2ac6: 9381 srli a5,a5,0x20 - 2ac8: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 2aca: 00098f63 beqz s3,2ae8 - 2ace: 40a4063b subw a2,s0,a0 - 2ad2: 00ca5b63 bge s4,a2,2ae8 - 2ad6: 65a2 ld a1,8(sp) - 2ad8: e81e sd t2,16(sp) - 2ada: 00cd0d3b addw s10,s10,a2 - 2ade: 9982 jalr s3 - 2ae0: 80050be3 beqz a0,22f6 - 2ae4: 63c2 ld t2,16(sp) - 2ae6: 842a mv s0,a0 - while (fw) { - 2ae8: f60915e3 bnez s2,2a52 - 2aec: 892a mv s2,a0 - 2aee: f21fe06f j 1a0e - stbsp__cb_buf_clamp(i, fw); - 2af2: 87ca mv a5,s2 - fw -= i; - 2af4: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2af6: b759 j 2a7c - } else if (fl & STBSP__LEADINGPLUS) { - 2af8: 002e7713 andi a4,t3,2 - 2afc: 94070663 beqz a4,1c48 - sign[0] = 1; - 2b00: 670d lui a4,0x3 - 2b02: b0170713 addi a4,a4,-1279 # 2b01 - 2b06: 06e11423 sh a4,104(sp) - 2b0a: 93eff06f j 1c48 - if (((stbsp__uintptr)sn & 3) == 0) - 2b0e: 87d6 mv a5,s5 - while (limit >= 4) { - 2b10: 470d li a4,3 - 2b12: 22d77763 bgeu a4,a3,2d40 - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b16: feff05b7 lui a1,0xfeff0 - 2b1a: 80808637 lui a2,0x80808 - 2b1e: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8747> - 2b22: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808008c8> - while (limit >= 4) { - 2b26: 480d li a6,3 - 2b28: a029 j 2b32 - limit -= 4; - 2b2a: 36f1 addiw a3,a3,-4 - sn += 4; - 2b2c: 0791 addi a5,a5,4 - while (limit >= 4) { - 2b2e: 20d87963 bgeu a6,a3,2d40 - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 2b32: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b34: 00b7053b addw a0,a4,a1 - 2b38: fff74713 not a4,a4 - 2b3c: 8f69 and a4,a4,a0 - 2b3e: 8f71 and a4,a4,a2 - 2b40: 2701 sext.w a4,a4 - 2b42: d765 beqz a4,2b2a - 2b44: 02069713 slli a4,a3,0x20 - 2b48: 9301 srli a4,a4,0x20 - 2b4a: 973e add a4,a4,a5 - 2b4c: a021 j 2b54 - ++sn; - 2b4e: 0785 addi a5,a5,1 - while (limit && *sn) { - 2b50: 00e78663 beq a5,a4,2b5c - 2b54: 0007c683 lbu a3,0(a5) - 2b58: fafd bnez a3,2b4e - 2b5a: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 2b5c: 41570733 sub a4,a4,s5 - 2b60: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 2b64: fff6c793 not a5,a3 - 2b68: 97fd srai a5,a5,0x3f - 2b6a: 8f7d and a4,a4,a5 - 2b6c: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2b70: 863e mv a2,a5 - pr -= l; - 2b72: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 2b74: d2eff06f j 20a2 - for (n = 1; n < l; n++) - 2b78: 4605 li a2,1 - 2b7a: aed663e3 bltu a2,a3,2660 - 2b7e: 0c210613 addi a2,sp,194 - 2b82: bcf5 j 267e - l = pr + 1; - 2b84: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 2b86: 4501 li a0,0 - *s++ = sn[0]; - 2b88: 0c110613 addi a2,sp,193 - 2b8c: bccd j 267e - 2b8e: 4591 li a1,4 - 2b90: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 2b92: 4e91 li t4,4 - 2b94: be21 j 26ac - 2b96: 4a85 li s5,1 - 2b98: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 2b9c: 4a05 li s4,1 - 2b9e: 920ff06f j 1cbe - dp = (n64) ? -1022 : 0; - 2ba2: 4601 li a2,0 - 2ba4: c119 beqz a0,2baa - 2ba6: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2baa: 872a mv a4,a0 - 2bac: a3aff06f j 1de6 - stbsp__chk_cb_buf(1); - 2bb0: 2601 sext.w a2,a2 - 2bb2: 1fe00793 li a5,510 - 2bb6: f2c7c0e3 blt a5,a2,2ad6 - 2bba: bd61 j 2a52 - tail[0] = (char)n; - 2bbc: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 2bbe: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 2bc2: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2bc6: 4815 li a6,5 - 2bc8: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2bca: 4595 li a1,5 - 2bcc: b935 j 2808 - l = pr + dp; - 2bce: 011786bb addw a3,a5,a7 - 2bd2: d0b6 sw a3,96(sp) - 2bd4: b6d5 j 27b8 - s = (char *)"null"; - 2bd6: 00002a97 auipc s5,0x2 - 2bda: 42aa8a93 addi s5,s5,1066 # 5000 <_GLOBAL__sub_I__ZSt3cin+0x52> - 2bde: c80ff06f j 205e - } else if (fl & STBSP__LEADINGPLUS) { - 2be2: 002e7793 andi a5,t3,2 - 2be6: 1c079c63 bnez a5,2dbe - sign[0] = 0; - 2bea: 4689 li a3,2 - 2bec: 4a09 li s4,2 - 2bee: 4805 li a6,1 - 2bf0: 9e8ff06f j 1dd8 - sign[0] = 1; - 2bf4: 670d lui a4,0x3 - 2bf6: b0170713 addi a4,a4,-1279 # 2b01 - 2bfa: 06e11423 sh a4,104(sp) - 2bfe: b86ff06f j 1f84 - pr = 0; - 2c02: 4881 li a7,0 - 2c04: f1ffe06f j 1b22 - *s++ = '0'; - 2c08: 03000713 li a4,48 - 2c0c: 0ce10023 sb a4,192(sp) - if (pr) - 2c10: 1a088c63 beqz a7,2dc8 - *s++ = stbsp__period; - 2c14: 00004717 auipc a4,0x4 - 2c18: d7874703 lbu a4,-648(a4) # 698c - n = -dp; - 2c1c: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 2c20: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 2c24: 0007871b sext.w a4,a5 - 2c28: 00e8d363 bge a7,a4,2c2e - 2c2c: 87c6 mv a5,a7 - 2c2e: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 2c32: 00d7833b addw t1,a5,a3 - 2c36: 883a mv a6,a4 - while (i) { - 2c38: 0c210793 addi a5,sp,194 - *s++ = '0'; - 2c3c: 03000513 li a0,48 - while (i) { - 2c40: e711 bnez a4,2c4c - 2c42: a271 j 2dce - if ((((stbsp__uintptr)s) & 3) == 0) - 2c44: 0037f613 andi a2,a5,3 - 2c48: 18060563 beqz a2,2dd2 - *s++ = '0'; - 2c4c: 85ba mv a1,a4 - 2c4e: 00a78023 sb a0,0(a5) - --i; - 2c52: 377d addiw a4,a4,-1 - *s++ = '0'; - 2c54: 0785 addi a5,a5,1 - while (i) { - 2c56: f77d bnez a4,2c44 - if ((stbsp__int32)(l + n) > pr) - 2c58: 0003071b sext.w a4,t1 - 2c5c: 4108863b subw a2,a7,a6 - 2c60: 00e8d563 bge a7,a4,2c6a - l = pr - n; - 2c64: 0006069b sext.w a3,a2 - 2c68: d0b2 sw a2,96(sp) - while (i) { - 2c6a: c68d beqz a3,2c94 - 2c6c: 7566 ld a0,120(sp) - 2c6e: 02069813 slli a6,a3,0x20 - 2c72: 02085813 srli a6,a6,0x20 - 2c76: 01078eb3 add t4,a5,a6 - 2c7a: 85aa mv a1,a0 - 2c7c: 873e mv a4,a5 - *s++ = *sn++; - 2c7e: 0005c883 lbu a7,0(a1) - 2c82: 0705 addi a4,a4,1 - while (i) { - 2c84: 0585 addi a1,a1,1 - *s++ = *sn++; - 2c86: ff170fa3 sb a7,-1(a4) - while (i) { - 2c8a: ffd71ae3 bne a4,t4,2c7e - 2c8e: 9542 add a0,a0,a6 - 2c90: 97c2 add a5,a5,a6 - 2c92: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2c94: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2c98: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 2c9c: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2ca0: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2ca4: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8849> - 2ca6: fbcff06f j 2462 - *--s = '0'; - 2caa: 03000793 li a5,48 - 2cae: fefa8fa3 sb a5,-1(s5) - l = 1; - 2cb2: 030002b7 lui t0,0x3000 - 2cb6: 4785 li a5,1 - 2cb8: d0be sw a5,96(sp) - *--s = '0'; - 2cba: 1afd addi s5,s5,-1 - l = 1; - 2cbc: 4605 li a2,1 - 2cbe: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8849> - 2cc0: 4685 li a3,1 - 2cc2: b9dd j 29b8 - } else if (fl & STBSP__LEADINGSPACE) { - 2cc4: 004e7713 andi a4,t3,4 - 2cc8: e74d bnez a4,2d72 - } else if (fl & STBSP__LEADINGPLUS) { - 2cca: 8b89 andi a5,a5,2 - 2ccc: efd9 bnez a5,2d6a - sign[0] = 0; - 2cce: 06010423 sb zero,104(sp) - 2cd2: 4a01 li s4,0 - 2cd4: b9c9 j 29a6 - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2cd6: 051c addi a5,sp,640 - 2cd8: cafa89e3 beq s5,a5,298a - ++s; - 2cdc: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2cde: 415786bb subw a3,a5,s5 - 2ce2: b165 j 298a - n = dp - n; - 2ce4: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2ce8: 12030e63 beqz t1,2e24 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2cec: 4511 li a0,4 - 2cee: 03000613 li a2,48 - *s++ = stbsp__comma; - 2cf2: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2cf6: 00030563 beqz t1,2d00 - 2cfa: 2585 addiw a1,a1,1 - 2cfc: 00a58963 beq a1,a0,2d0e - 2d00: 8736 mv a4,a3 - --n; - 2d02: 37fd addiw a5,a5,-1 - 2d04: fec70fa3 sb a2,-1(a4) - while (n) { - 2d08: f7ed bnez a5,2cf2 - 2d0a: f38ff06f j 2442 - 2d0e: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 2d12: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d14: 4585 li a1,1 - 2d16: b7f5 j 2d02 - sign[0] = 0; - 2d18: 06010423 sb zero,104(sp) - 2d1c: f1dfe06f j 1c38 - tail[idx + 1] = "_kMGT"[fl >> 24]; - 2d20: 00002697 auipc a3,0x2 - 2d24: 2f068693 addi a3,a3,752 # 5010 <_GLOBAL__sub_I__ZSt3cin+0x62> - 2d28: 9736 add a4,a4,a3 - 2d2a: 00074683 lbu a3,0(a4) - 2d2e: 1088 addi a0,sp,96 - 2d30: 22060713 addi a4,a2,544 - 2d34: 972a add a4,a4,a0 - 2d36: ded70823 sb a3,-528(a4) - idx++; - 2d3a: 8fb2 mv t6,a2 - 2d3c: fb0ff06f j 24ec - while (limit && *sn) { - 2d40: e00692e3 bnez a3,2b44 - 2d44: bd19 j 2b5a - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d46: 0008071b sext.w a4,a6 - 2d4a: 86c2 mv a3,a6 - 2d4c: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 2d4e: 863a mv a2,a4 - 2d50: 00e8d363 bge a7,a4,2d56 - 2d54: 8646 mv a2,a7 - 2d56: 40f608bb subw a7,a2,a5 - 2d5a: 814ff06f j 1d6e - divisor = 1000.0f; - 2d5e: 00003797 auipc a5,0x3 - 2d62: a527b787 fld fa5,-1454(a5) # 57b0 - 2d66: dd5fe06f j 1b3a - 2d6a: 678d lui a5,0x3 - 2d6c: b017879b addiw a5,a5,-1279 # 2b01 - 2d70: b13d j 299e - 2d72: 6789 lui a5,0x2 - 2d74: 2785 addiw a5,a5,1 # 2001 - 2d76: b125 j 299e - *s++ = stbsp__period; - 2d78: 00004517 auipc a0,0x4 - 2d7c: c1454503 lbu a0,-1004(a0) # 698c - sn = s; - 2d80: 0c210793 addi a5,sp,194 - n = pr; - 2d84: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 2d88: 0ca100a3 sb a0,193(sp) - sn = s; - 2d8c: fcbe sd a5,120(sp) - if (n > 13) - 2d8e: 4535 li a0,13 - n64 <<= 4; - 2d90: 0712 slli a4,a4,0x4 - if (n > 13) - 2d92: 8836 mv a6,a3 - 2d94: 00d57363 bgeu a0,a3,2d9a - 2d98: 4835 li a6,13 - 2d9a: 0008051b sext.w a0,a6 - while (n--) { - 2d9e: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 2da0: af1542e3 blt a0,a7,2884 - tz = 0; - 2da4: 4881 li a7,0 - 2da6: b4cd j 2888 - while (n < l) { - 2da8: 87ba mv a5,a4 - 2daa: bc1d j 27e0 - tail[0] = (char)n; - 2dac: 478d li a5,3 - 2dae: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2db2: 06b109a3 sb a1,115(sp) - 2db6: 480d li a6,3 - 2db8: 4f8d li t6,3 - 2dba: 8e4ff06f j 1e9e - 2dbe: 678d lui a5,0x3 - 2dc0: b017879b addiw a5,a5,-1279 # 2b01 - 2dc4: 80aff06f j 1dce - if (pr) - 2dc8: 8336 mv t1,a3 - *s++ = '0'; - 2dca: 0c110793 addi a5,sp,193 - while (i) { - 2dce: 4801 li a6,0 - 2dd0: b561 j 2c58 - while (i >= 4) { - 2dd2: 460d li a2,3 - 2dd4: 04e65663 bge a2,a4,2e20 - 2dd8: ffb5871b addiw a4,a1,-5 - 2ddc: 0027559b srliw a1,a4,0x2 - 2de0: 0015861b addiw a2,a1,1 - 2de4: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2de6: 30303537 lui a0,0x30303 - 2dea: 963e add a2,a2,a5 - 2dec: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb878> - 2df0: c388 sw a0,0(a5) - s += 4; - 2df2: 0791 addi a5,a5,4 - while (i >= 4) { - 2df4: fef61ee3 bne a2,a5,2df0 - 2df8: 0025959b slliw a1,a1,0x2 - 2dfc: 9f0d subw a4,a4,a1 - while (i) { - 2dfe: e4070de3 beqz a4,2c58 - *s++ = '0'; - 2e02: 03000513 li a0,48 - while (i) { - 2e06: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 2e0a: 0605 addi a2,a2,1 - while (i) { - 2e0c: 00060e9b sext.w t4,a2 - *s++ = '0'; - 2e10: fea60fa3 sb a0,-1(a2) - while (i) { - 2e14: ffd59be3 bne a1,t4,2e0a - 2e18: 1702 slli a4,a4,0x20 - 2e1a: 9301 srli a4,a4,0x20 - 2e1c: 97ba add a5,a5,a4 - 2e1e: bd2d j 2c58 - while (i >= 4) { - 2e20: 863e mv a2,a5 - 2e22: b7c5 j 2e02 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e24: 00377693 andi a3,a4,3 - 2e28: ce81 beqz a3,2e40 - *s++ = '0'; - 2e2a: 03000693 li a3,48 - 2e2e: 00d70023 sb a3,0(a4) - --n; - 2e32: 37fd addiw a5,a5,-1 - *s++ = '0'; - 2e34: 0705 addi a4,a4,1 - while (n) { - 2e36: e0078663 beqz a5,2442 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e3a: 00377613 andi a2,a4,3 - 2e3e: fa65 bnez a2,2e2e - while (n >= 4) { - 2e40: 468d li a3,3 - 2e42: eaf6f5e3 bgeu a3,a5,2cec - 2e46: ffc7869b addiw a3,a5,-4 - 2e4a: 0026d69b srliw a3,a3,0x2 - 2e4e: 2685 addiw a3,a3,1 - 2e50: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e52: 30303637 lui a2,0x30303 - 2e56: 96ba add a3,a3,a4 - 2e58: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb878> - 2e5c: c310 sw a2,0(a4) - s += 4; - 2e5e: 0711 addi a4,a4,4 - while (n >= 4) { - 2e60: fed71ee3 bne a4,a3,2e5c - 2e64: 8b8d andi a5,a5,3 - while (n) { - 2e66: e80793e3 bnez a5,2cec - 2e6a: dd8ff06f j 2442 - if (((stbsp__uintptr)sn & 3) == 0) - 2e6e: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2e70: 56fd li a3,-1 - 2e72: b155 j 2b16 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2e74: 5775 li a4,-3 - 2e76: 00e7ce63 blt a5,a4,2e92 - 2e7a: f6fa4663 blt s4,a5,25e6 - if (dp > 0) { - 2e7e: ecf054e3 blez a5,2d46 - 2e82: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2e84: 4881 li a7,0 - 2e86: ee9fe06f j 1d6e - while (i--) - 2e8a: fff7869b addiw a3,a5,-1 - 2e8e: 8722 mv a4,s0 - 2e90: b105 j 2ab0 - if (pr > (stbsp__int32)l) - 2e92: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2e96: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 2e98: 86c2 mv a3,a6 - 2e9a: 88d2 mv a7,s4 - 2e9c: f7475d63 bge a4,s4,2616 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2ea0: 8542 mv a0,a6 - 2ea2: f56ff06f j 25f8 - -0000000000002ea6 : -{ - 2ea6: 715d addi sp,sp,-80 - va_start(va, fmt); - 2ea8: 02010313 addi t1,sp,32 -{ - 2eac: f032 sd a2,32(sp) - 2eae: f436 sd a3,40(sp) - 2eb0: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2eb2: 86ae mv a3,a1 - 2eb4: 862a mv a2,a0 - 2eb6: 871a mv a4,t1 - 2eb8: 4581 li a1,0 - 2eba: 4501 li a0,0 -{ - 2ebc: ec06 sd ra,24(sp) - 2ebe: fc3e sd a5,56(sp) - 2ec0: e0c2 sd a6,64(sp) - 2ec2: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2ec4: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ec6: bc6fe0ef jal 128c -} - 2eca: 60e2 ld ra,24(sp) - 2ecc: 6161 addi sp,sp,80 - 2ece: 8082 ret - -0000000000002ed0 : -{ - 2ed0: dd010113 addi sp,sp,-560 - 2ed4: 22813023 sd s0,544(sp) - 2ed8: 20913c23 sd s1,536(sp) - 2edc: 22113423 sd ra,552(sp) - 2ee0: 84ae mv s1,a1 - 2ee2: 842a mv s0,a0 - 2ee4: 88b2 mv a7,a2 - 2ee6: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 2ee8: e591 bnez a1,2ef4 - 2eea: c141 beqz a0,2f6a - c.buf = buf; - 2eec: e02a sd a0,0(sp) - c.count = count; - 2eee: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2ef0: 0810 addi a2,sp,16 - 2ef2: a089 j 2f34 - if (len > c->count) - 2ef4: 0015a593 slti a1,a1,1 - 2ef8: 40b005bb negw a1,a1 - 2efc: 8de5 and a1,a1,s1 - c.buf = buf; - 2efe: e02a sd a0,0(sp) - c.count = count; - 2f00: c426 sw s1,8(sp) - c.length = 0; - 2f02: c602 sw zero,12(sp) - if (len > c->count) - 2f04: 2581 sext.w a1,a1 - if (len) { - 2f06: 0804d663 bgez s1,2f92 - s = buf; - 2f0a: 4781 li a5,0 - if (buf != c->buf) { - 2f0c: c911 beqz a0,2f20 - *d++ = *s++; - 2f0e: 0007c803 lbu a6,0(a5) - 2f12: 0785 addi a5,a5,1 - 2f14: 00f40533 add a0,s0,a5 - 2f18: ff050fa3 sb a6,-1(a0) - } while (s < se); - 2f1c: feb7e9e3 bltu a5,a1,2f0e - c->count -= len; - 2f20: 40b486bb subw a3,s1,a1 - c->buf += len; - 2f24: 95a2 add a1,a1,s0 - 2f26: e02e sd a1,0(sp) - c->count -= len; - 2f28: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f2a: 1ff00793 li a5,511 - 2f2e: fcd7d1e3 bge a5,a3,2ef0 - 2f32: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 2f34: 86c6 mv a3,a7 - 2f36: 858a mv a1,sp - 2f38: ffffd517 auipc a0,0xffffd - 2f3c: 21650513 addi a0,a0,534 # 14e - 2f40: b4cfe0ef jal 128c - l = (int)( c.buf - buf ); - 2f44: 6782 ld a5,0(sp) - 2f46: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 2f48: 0097c463 blt a5,s1,2f50 - l = count - 1; - 2f4c: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 2f50: 943e add s0,s0,a5 - 2f52: 00040023 sb zero,0(s0) -} - 2f56: 22813083 ld ra,552(sp) - 2f5a: 22013403 ld s0,544(sp) - 2f5e: 4532 lw a0,12(sp) - 2f60: 21813483 ld s1,536(sp) - 2f64: 23010113 addi sp,sp,560 - 2f68: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2f6a: 86b2 mv a3,a2 - 2f6c: 858a mv a1,sp - 2f6e: 0810 addi a2,sp,16 - 2f70: ffffd517 auipc a0,0xffffd - 2f74: 22c50513 addi a0,a0,556 # 19c - c.length = 0; - 2f78: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2f7a: b12fe0ef jal 128c -} - 2f7e: 22813083 ld ra,552(sp) - 2f82: 22013403 ld s0,544(sp) - 2f86: 4532 lw a0,12(sp) - 2f88: 21813483 ld s1,536(sp) - 2f8c: 23010113 addi sp,sp,560 - 2f90: 8082 ret - 2f92: 86a6 mv a3,s1 - 2f94: bf59 j 2f2a - -0000000000002f96 : -{ - 2f96: 715d addi sp,sp,-80 - va_start(va, fmt); - 2f98: 02810313 addi t1,sp,40 -{ - 2f9c: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2f9e: 869a mv a3,t1 -{ - 2fa0: ec06 sd ra,24(sp) - 2fa2: f83a sd a4,48(sp) - 2fa4: fc3e sd a5,56(sp) - 2fa6: e0c2 sd a6,64(sp) - 2fa8: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2faa: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fac: f25ff0ef jal 2ed0 -} - 2fb0: 60e2 ld ra,24(sp) - 2fb2: 6161 addi sp,sp,80 - 2fb4: 8082 ret - -0000000000002fb6 : -{ - 2fb6: 86ae mv a3,a1 - 2fb8: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2fba: 4581 li a1,0 - 2fbc: 862a mv a2,a0 - 2fbe: 4501 li a0,0 - 2fc0: accfe06f j 128c - -0000000000002fc4 : -{ - 2fc4: 7119 addi sp,sp,-128 - va_start(ap, format); - 2fc6: 05010313 addi t1,sp,80 -{ - 2fca: e0a2 sd s0,64(sp) - 2fcc: fc26 sd s1,56(sp) - 2fce: 842a mv s0,a0 - 2fd0: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 2fd2: 0808 addi a0,sp,16 - ctx.limit = size; - 2fd4: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 2fd6: 861a mv a2,t1 -{ - 2fd8: e486 sd ra,72(sp) - 2fda: ecb6 sd a3,88(sp) - 2fdc: f0ba sd a4,96(sp) - 2fde: f4be sd a5,104(sp) - 2fe0: f8c2 sd a6,112(sp) - 2fe2: fcc6 sd a7,120(sp) - va_start(ap, format); - 2fe4: e41a sd t1,8(sp) - ctx.buf = str; - 2fe6: e822 sd s0,16(sp) - ctx.limit = size; - 2fe8: ec26 sd s1,24(sp) - ctx.written = 0; - 2fea: f002 sd zero,32(sp) - ctx.stream = NULL; - 2fec: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 2fee: 02c000ef jal 301a <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 2ff2: 7502 ld a0,32(sp) - 2ff4: 00950b63 beq a0,s1,300a - str[ctx.written] = '\0'; - 2ff8: 942a add s0,s0,a0 - 2ffa: 00040023 sb zero,0(s0) -} - 2ffe: 60a6 ld ra,72(sp) - 3000: 6406 ld s0,64(sp) - 3002: 74e2 ld s1,56(sp) - 3004: 2501 sext.w a0,a0 - 3006: 6109 addi sp,sp,128 - 3008: 8082 ret - str[size - 1] = '\0'; - 300a: fe040f23 sb zero,-2(s0) -} - 300e: 60a6 ld ra,72(sp) - 3010: 6406 ld s0,64(sp) - 3012: 74e2 ld s1,56(sp) - 3014: 2501 sext.w a0,a0 - 3016: 6109 addi sp,sp,128 - 3018: 8082 ret - -000000000000301a <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 301a: 7129 addi sp,sp,-320 - 301c: edee sd s11,216(sp) - 301e: fe06 sd ra,312(sp) - 3020: 8dae mv s11,a1 - while (*p) - 3022: 0005c583 lbu a1,0(a1) - 3026: cde9 beqz a1,3100 <_vprintf_core.constprop.0.isra.0+0xe6> - 3028: f626 sd s1,296(sp) - 302a: f24a sd s2,288(sp) - 302c: ee4e sd s3,280(sp) - 302e: e656 sd s5,264(sp) - 3030: f9e2 sd s8,240(sp) - 3032: fa22 sd s0,304(sp) - 3034: ea52 sd s4,272(sp) - 3036: e25a sd s6,256(sp) - 3038: fdde sd s7,248(sp) - 303a: f5e6 sd s9,232(sp) - 303c: f1ea sd s10,224(sp) - 303e: 84aa mv s1,a0 - 3040: 8c32 mv s8,a2 - if (*p != '%') - 3042: 02500a93 li s5,37 - 3046: 49c1 li s3,16 - 3048: 00002917 auipc s2,0x2 - 304c: 29c90913 addi s2,s2,668 # 52e4 <_GLOBAL__sub_I__ZSt3cin+0x336> - 3050: a039 j 305e <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 3052: 8526 mv a0,s1 - 3054: 952fe0ef jal 11a6 <_out_char> - while (*p) - 3058: 000dc583 lbu a1,0(s11) - 305c: c5d9 beqz a1,30ea <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 305e: 0d85 addi s11,s11,1 - if (*p != '%') - 3060: ff5599e3 bne a1,s5,3052 <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 3064: 4501 li a0,0 - 3066: 4881 li a7,0 - 3068: 4581 li a1,0 - 306a: 4b01 li s6,0 - 306c: 4a01 li s4,0 - if (*p == '-') - 306e: 000dcc83 lbu s9,0(s11) - 3072: fe0c871b addiw a4,s9,-32 - 3076: 0ff77713 zext.b a4,a4 - 307a: 00e9e763 bltu s3,a4,3088 <_vprintf_core.constprop.0.isra.0+0x6e> - 307e: 070a slli a4,a4,0x2 - 3080: 974a add a4,a4,s2 - 3082: 4318 lw a4,0(a4) - 3084: 974a add a4,a4,s2 - 3086: 8702 jr a4 - if (*p == '*') - 3088: 02a00793 li a5,42 - 308c: 16fc9c63 bne s9,a5,3204 <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 3090: 000c2403 lw s0,0(s8) - 3094: 0c21 addi s8,s8,8 - if (width < 0) - 3096: 00045563 bgez s0,30a0 <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 309a: 4080043b negw s0,s0 - flag_left = 1; - 309e: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 30a0: 001dcc83 lbu s9,1(s11) - p++; - 30a4: 0d85 addi s11,s11,1 - if (*p == '.') - 30a6: 02e00793 li a5,46 - int precision = -1; - 30aa: 5bfd li s7,-1 - if (*p == '.') - 30ac: 18fc8a63 beq s9,a5,3240 <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 30b0: 06c00693 li a3,108 - 30b4: 8666 mv a2,s9 - 30b6: 1adc8663 beq s9,a3,3262 <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 30ba: 07a00693 li a3,122 - p++; - 30be: 0d85 addi s11,s11,1 - else if (*p == 'z') - 30c0: 24dc8163 beq s9,a3,3302 <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 30c4: 06400693 li a3,100 - 30c8: 4adc8163 beq s9,a3,356a <_vprintf_core.constprop.0.isra.0+0x550> - 30cc: 06400693 li a3,100 - int len_mod = 0; - 30d0: 4e81 li t4,0 - 30d2: 1b96e663 bltu a3,s9,327e <_vprintf_core.constprop.0.isra.0+0x264> - 30d6: 04700693 li a3,71 - 30da: 2796e463 bltu a3,s9,3342 <_vprintf_core.constprop.0.isra.0+0x328> - 30de: 04400693 li a3,68 - 30e2: 0596e363 bltu a3,s9,3128 <_vprintf_core.constprop.0.isra.0+0x10e> - 30e6: 240c9363 bnez s9,332c <_vprintf_core.constprop.0.isra.0+0x312> - 30ea: 7452 ld s0,304(sp) - 30ec: 74b2 ld s1,296(sp) - 30ee: 7912 ld s2,288(sp) - 30f0: 69f2 ld s3,280(sp) - 30f2: 6a52 ld s4,272(sp) - 30f4: 6ab2 ld s5,264(sp) - 30f6: 6b12 ld s6,256(sp) - 30f8: 7bee ld s7,248(sp) - 30fa: 7c4e ld s8,240(sp) - 30fc: 7cae ld s9,232(sp) - 30fe: 7d0e ld s10,224(sp) -} - 3100: 70f2 ld ra,312(sp) - 3102: 6dee ld s11,216(sp) - 3104: 6131 addi sp,sp,320 - 3106: 8082 ret - if (*p == '-') - 3108: 4585 li a1,1 - p++; - 310a: 0d85 addi s11,s11,1 - if (*p == '-') - 310c: b78d j 306e <_vprintf_core.constprop.0.isra.0+0x54> - 310e: 4505 li a0,1 - p++; - 3110: 0d85 addi s11,s11,1 - while (1) - 3112: bfb1 j 306e <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3114: 4885 li a7,1 - p++; - 3116: 0d85 addi s11,s11,1 - while (1) - 3118: bf99 j 306e <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 311a: 4b05 li s6,1 - p++; - 311c: 0d85 addi s11,s11,1 - while (1) - 311e: bf81 j 306e <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3120: 4a05 li s4,1 - p++; - 3122: 0d85 addi s11,s11,1 - while (1) - 3124: b7a9 j 306e <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 3126: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 3128: 02500693 li a3,37 - 312c: 02d10823 sb a3,48(sp) - 3130: 4d05 li s10,1 - if (flag_left) - 3132: 000a0763 beqz s4,3140 <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 3136: 02d00693 li a3,45 - 313a: 02d108a3 sb a3,49(sp) - 313e: 4d09 li s10,2 - if (flag_zero) - 3140: 000b0c63 beqz s6,3158 <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 3144: 0c0d0793 addi a5,s10,192 - 3148: 0818 addi a4,sp,16 - 314a: 00e786b3 add a3,a5,a4 - 314e: 03000613 li a2,48 - 3152: f6c68023 sb a2,-160(a3) - 3156: 2d05 addiw s10,s10,1 - if (flag_plus) - 3158: c999 beqz a1,316e <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 315a: 0c0d0793 addi a5,s10,192 - 315e: 0818 addi a4,sp,16 - 3160: 00e786b3 add a3,a5,a4 - 3164: 02b00613 li a2,43 - 3168: f6c68023 sb a2,-160(a3) - 316c: 2d05 addiw s10,s10,1 - if (flag_space) - 316e: 00088c63 beqz a7,3186 <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 3172: 0c0d0793 addi a5,s10,192 - 3176: 0818 addi a4,sp,16 - 3178: 00e786b3 add a3,a5,a4 - 317c: 02000613 li a2,32 - 3180: f6c68023 sb a2,-160(a3) - 3184: 2d05 addiw s10,s10,1 - if (flag_hash) - 3186: c919 beqz a0,319c <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 3188: 0c0d0793 addi a5,s10,192 - 318c: 0818 addi a4,sp,16 - 318e: 00e786b3 add a3,a5,a4 - 3192: 02300613 li a2,35 - 3196: f6c68023 sb a2,-160(a3) - 319a: 2d05 addiw s10,s10,1 - if (width > 0) - 319c: 03010a13 addi s4,sp,48 - 31a0: 28804563 bgtz s0,342a <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 31a4: 260bd763 bgez s7,3412 <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 31a8: 0c0d0793 addi a5,s10,192 - 31ac: 0818 addi a4,sp,16 - 31ae: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31b2: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 31b6: 001d071b addiw a4,s10,1 - 31ba: 0c070793 addi a5,a4,192 - 31be: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 31c0: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 31c4: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31c6: 08000593 li a1,128 - 31ca: 8652 mv a2,s4 - 31cc: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 31ce: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31d2: dc5ff0ef jal 2f96 - for (int i = 0; f_buf[i] != '\0'; i++) - 31d6: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 31da: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 31dc: 05110413 addi s0,sp,81 - 31e0: e6058ce3 beqz a1,3058 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 31e4: 8526 mv a0,s1 - 31e6: fc1fd0ef jal 11a6 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 31ea: 00044583 lbu a1,0(s0) - 31ee: 0405 addi s0,s0,1 - 31f0: e60584e3 beqz a1,3058 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 31f4: 8526 mv a0,s1 - 31f6: fb1fd0ef jal 11a6 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 31fa: 00044583 lbu a1,0(s0) - 31fe: 0405 addi s0,s0,1 - 3200: f1f5 bnez a1,31e4 <_vprintf_core.constprop.0.isra.0+0x1ca> - 3202: bd99 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 3204: fd0c869b addiw a3,s9,-48 - 3208: 0ff6f313 zext.b t1,a3 - 320c: 4725 li a4,9 - int width = 0; - 320e: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 3210: 4625 li a2,9 - 3212: e8676ae3 bltu a4,t1,30a6 <_vprintf_core.constprop.0.isra.0+0x8c> - 3216: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 321a: 0024171b slliw a4,s0,0x2 - 321e: 9f21 addw a4,a4,s0 - 3220: 0017171b slliw a4,a4,0x1 - 3224: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 3228: fd0c869b addiw a3,s9,-48 - 322c: 0ff6f713 zext.b a4,a3 - p++; - 3230: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 3232: fee672e3 bgeu a2,a4,3216 <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 3236: 02e00793 li a5,46 - int precision = -1; - 323a: 5bfd li s7,-1 - if (*p == '.') - 323c: e6fc9ae3 bne s9,a5,30b0 <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 3240: 001dcc83 lbu s9,1(s11) - 3244: 02a00793 li a5,42 - 3248: 16fc9f63 bne s9,a5,33c6 <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 324c: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 3250: 06c00693 li a3,108 - precision = va_arg(ap, int); - 3254: 000c2b83 lw s7,0(s8) - p++; - 3258: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 325a: 0c21 addi s8,s8,8 - if (*p == 'l') - 325c: 8666 mv a2,s9 - 325e: e4dc9ee3 bne s9,a3,30ba <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 3262: 001dcc83 lbu s9,1(s11) - 3266: 08cc8d63 beq s9,a2,3300 <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 326a: 06400693 li a3,100 - 326e: 0d89 addi s11,s11,2 - if (!spec) - 3270: 4cdc8c63 beq s9,a3,3748 <_vprintf_core.constprop.0.isra.0+0x72e> - 3274: 06400693 li a3,100 - len_mod = 1; - 3278: 4e85 li t4,1 - 327a: e596fee3 bgeu a3,s9,30d6 <_vprintf_core.constprop.0.isra.0+0xbc> - 327e: f9bc869b addiw a3,s9,-101 - 3282: 0ff6f693 zext.b a3,a3 - 3286: 464d li a2,19 - 3288: 12d66863 bltu a2,a3,33b8 <_vprintf_core.constprop.0.isra.0+0x39e> - 328c: 4e05 li t3,1 - 328e: 00091637 lui a2,0x91 - 3292: 00de1333 sll t1,t3,a3 - 3296: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x89058> - 329a: 00c37633 and a2,t1,a2 - 329e: 1a061463 bnez a2,3446 <_vprintf_core.constprop.0.isra.0+0x42c> - 32a2: 00737313 andi t1,t1,7 - 32a6: e80311e3 bnez t1,3128 <_vprintf_core.constprop.0.isra.0+0x10e> - 32aa: 4639 li a2,14 - 32ac: 10c69663 bne a3,a2,33b8 <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 32b0: 000c3c83 ld s9,0(s8) - if (!s) - 32b4: 420c8863 beqz s9,36e4 <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 32b8: 000cc683 lbu a3,0(s9) - 32bc: 38068863 beqz a3,364c <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 32c0: 8666 mv a2,s9 - int len = 0; - 32c2: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 32c4: 00db8863 beq s7,a3,32d4 <_vprintf_core.constprop.0.isra.0+0x2ba> - 32c8: 00164583 lbu a1,1(a2) - len++; - 32cc: 2685 addiw a3,a3,1 - tmp++; - 32ce: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 32d0: f9f5 bnez a1,32c4 <_vprintf_core.constprop.0.isra.0+0x2aa> - 32d2: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 32d4: 268bc563 blt s7,s0,353e <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 32d8: 4401 li s0,0 - 32da: 020b8163 beqz s7,32fc <_vprintf_core.constprop.0.isra.0+0x2e2> - 32de: 4d01 li s10,0 - _out_char(ctx, s[i]); - 32e0: 01ac86b3 add a3,s9,s10 - 32e4: 0006c583 lbu a1,0(a3) - 32e8: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 32ea: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 32ec: ebbfd0ef jal 11a6 <_out_char> - for (int i = 0; i < len; i++) - 32f0: 000d069b sext.w a3,s10 - 32f4: ff76c6e3 blt a3,s7,32e0 <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 32f8: 260a1463 bnez s4,3560 <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 32fc: 0c21 addi s8,s8,8 - 32fe: bba9 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 3300: 0d89 addi s11,s11,2 - char spec = *p++; - 3302: 000dcc83 lbu s9,0(s11) - 3306: 06400693 li a3,100 - 330a: 001d8793 addi a5,s11,1 - if (!spec) - 330e: 3edc8063 beq s9,a3,36ee <_vprintf_core.constprop.0.isra.0+0x6d4> - 3312: 0796ea63 bltu a3,s9,3386 <_vprintf_core.constprop.0.isra.0+0x36c> - 3316: 04700693 li a3,71 - 331a: 0f96e263 bltu a3,s9,33fe <_vprintf_core.constprop.0.isra.0+0x3e4> - 331e: 04400693 li a3,68 - 3322: e196e2e3 bltu a3,s9,3126 <_vprintf_core.constprop.0.isra.0+0x10c> - 3326: dc0c82e3 beqz s9,30ea <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 332a: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 332c: 02500593 li a1,37 - 3330: 8526 mv a0,s1 - 3332: e75fd0ef jal 11a6 <_out_char> - if (spec != '%') - 3336: 02500713 li a4,37 - 333a: d0ec8fe3 beq s9,a4,3058 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 333e: 85e6 mv a1,s9 - 3340: bb09 j 3052 <_vprintf_core.constprop.0.isra.0+0x38> - 3342: 05800693 li a3,88 - 3346: 2edc8263 beq s9,a3,362a <_vprintf_core.constprop.0.isra.0+0x610> - 334a: 06300713 li a4,99 - 334e: 06ec9563 bne s9,a4,33b8 <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 3352: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 3356: 8722 mv a4,s0 - 3358: 00804363 bgtz s0,335e <_vprintf_core.constprop.0.isra.0+0x344> - 335c: 4705 li a4,1 - 335e: fff7041b addiw s0,a4,-1 - if (!flag_left) - 3362: 3c0a0463 beqz s4,372a <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 3366: 85e6 mv a1,s9 - 3368: 8526 mv a0,s1 - 336a: e3dfd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 336e: 4a01 li s4,0 - 3370: d451 beqz s0,32fc <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 3372: 02000593 li a1,32 - 3376: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3378: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 337a: e2dfd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 337e: ff441ae3 bne s0,s4,3372 <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 3382: 0c21 addi s8,s8,8 - 3384: b9d1 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - 3386: f9bc861b addiw a2,s9,-101 - 338a: 0ff67613 zext.b a2,a2 - 338e: 46cd li a3,19 - 3390: 40c6e963 bltu a3,a2,37a2 <_vprintf_core.constprop.0.isra.0+0x788> - 3394: 00091337 lui t1,0x91 - 3398: 4685 li a3,1 - 339a: 00c696b3 sll a3,a3,a2 - 339e: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x89058> - 33a2: 0066f333 and t1,a3,t1 - 33a6: 34031c63 bnez t1,36fe <_vprintf_core.constprop.0.isra.0+0x6e4> - 33aa: 8a9d andi a3,a3,7 - 33ac: d6069de3 bnez a3,3126 <_vprintf_core.constprop.0.isra.0+0x10c> - 33b0: 46b9 li a3,14 - char spec = *p++; - 33b2: 8dbe mv s11,a5 - 33b4: eed60ee3 beq a2,a3,32b0 <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 33b8: 02500593 li a1,37 - 33bc: 8526 mv a0,s1 - 33be: de9fd0ef jal 11a6 <_out_char> - _out_char(ctx, spec); - 33c2: 85e6 mv a1,s9 - 33c4: b179 j 3052 <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 33c6: fd0c869b addiw a3,s9,-48 - 33ca: 0ff6fe13 zext.b t3,a3 - 33ce: 4625 li a2,9 - p++; - 33d0: 0d85 addi s11,s11,1 - precision = 0; - 33d2: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 33d4: 4325 li t1,9 - 33d6: cdc66de3 bltu a2,t3,30b0 <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 33da: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 33de: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 33e2: 0176073b addw a4,a2,s7 - 33e6: 0017171b slliw a4,a4,0x1 - 33ea: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 33ee: fd0c869b addiw a3,s9,-48 - 33f2: 0ff6f613 zext.b a2,a3 - p++; - 33f6: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 33f8: fec371e3 bgeu t1,a2,33da <_vprintf_core.constprop.0.isra.0+0x3c0> - 33fc: b955 j 30b0 <_vprintf_core.constprop.0.isra.0+0x96> - 33fe: 05800693 li a3,88 - 3402: 3cdc8d63 beq s9,a3,37dc <_vprintf_core.constprop.0.isra.0+0x7c2> - 3406: 06300713 li a4,99 - char spec = *p++; - 340a: 8dbe mv s11,a5 - 340c: f4ec83e3 beq s9,a4,3352 <_vprintf_core.constprop.0.isra.0+0x338> - 3410: b765 j 33b8 <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 3412: 01aa0533 add a0,s4,s10 - 3416: 865e mv a2,s7 - 3418: 00002597 auipc a1,0x2 - 341c: c5058593 addi a1,a1,-944 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xba> - 3420: ba5ff0ef jal 2fc4 - 3424: 00ad0d3b addw s10,s10,a0 - 3428: b341 j 31a8 <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 342a: 01aa0533 add a0,s4,s10 - 342e: 8622 mv a2,s0 - 3430: 00002597 auipc a1,0x2 - 3434: c3058593 addi a1,a1,-976 # 5060 <_GLOBAL__sub_I__ZSt3cin+0xb2> - 3438: b8dff0ef jal 2fc4 - 343c: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 3440: d60bc4e3 bltz s7,31a8 <_vprintf_core.constprop.0.isra.0+0x18e> - 3444: b7f9 j 3412 <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 3446: 06900693 li a3,105 - 344a: 10dc8e63 beq s9,a3,3566 <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 344e: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3452: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3456: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3458: 38dc9d63 bne s9,a3,37f2 <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 345c: 33ce8963 beq t4,t3,378e <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3460: 000c6e03 lwu t3,0(s8) - 3464: 85f6 mv a1,t4 - 3466: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3468: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 346a: 00002f97 auipc t6,0x2 - 346e: bc6f8f93 addi t6,t6,-1082 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - if (val == 0) - 3472: 120e0363 beqz t3,3598 <_vprintf_core.constprop.0.isra.0+0x57e> - 3476: 01010293 addi t0,sp,16 - sign_char = '-'; - 347a: 8616 mv a2,t0 - 347c: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 347e: 0266f8b3 remu a7,a3,t1 - 3482: 8f32 mv t5,a2 - while (val != 0) - 3484: 0605 addi a2,a2,1 - 3486: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 3488: 98fe add a7,a7,t6 - 348a: 0008c883 lbu a7,0(a7) - val /= base; - 348e: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 3492: ff160fa3 sb a7,-1(a2) - while (val != 0) - 3496: fe6ef4e3 bgeu t4,t1,347e <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 349a: 405f0f3b subw t5,t5,t0 - 349e: 2f05 addiw t5,t5,1 - if (precision >= 0) - 34a0: 100bc363 bltz s7,35a6 <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 34a4: 1d7f4d63 blt t5,s7,367e <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 34a8: 340b9163 bnez s7,37ea <_vprintf_core.constprop.0.isra.0+0x7d0> - 34ac: 200e0763 beqz t3,36ba <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 34b0: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34b4: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 34b8: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34ba: 28dc8e63 beq s9,a3,3756 <_vprintf_core.constprop.0.isra.0+0x73c> - 34be: 2a051663 bnez a0,376a <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 34c2: 00bf05bb addw a1,t5,a1 - 34c6: 8d52 mv s10,s4 - 34c8: 4b01 li s6,0 - char *prefix_str = NULL; - 34ca: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 34cc: 1085d263 bge a1,s0,35d0 <_vprintf_core.constprop.0.isra.0+0x5b6> - 34d0: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 34d2: 100d0a63 beqz s10,35e6 <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 34d6: 6782 ld a5,0(sp) - 34d8: 10079263 bnez a5,35dc <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 34dc: 000c8c63 beqz s9,34f4 <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 34e0: 000cc583 lbu a1,0(s9) - 34e4: 8526 mv a0,s1 - 34e6: cc1fd0ef jal 11a6 <_out_char> - _out_char(ctx, prefix_str[1]); - 34ea: 001cc583 lbu a1,1(s9) - 34ee: 8526 mv a0,s1 - 34f0: cb7fd0ef jal 11a6 <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 34f4: 180b0263 beqz s6,3678 <_vprintf_core.constprop.0.isra.0+0x65e> - 34f8: 100a1863 bnez s4,3608 <_vprintf_core.constprop.0.isra.0+0x5ee> - 34fc: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 3500: 2a0b8363 beqz s7,37a6 <_vprintf_core.constprop.0.isra.0+0x78c> - 3504: 4c81 li s9,0 - _out_char(ctx, '0'); - 3506: 03000593 li a1,48 - 350a: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 350c: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 350e: c99fd0ef jal 11a6 <_out_char> - for (int i = 0; i < total_zeros; i++) - 3512: ff7c9ae3 bne s9,s7,3506 <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 3516: 57fd li a5,-1 - 3518: 00fc0f63 beq s8,a5,3536 <_vprintf_core.constprop.0.isra.0+0x51c> - 351c: 01010c93 addi s9,sp,16 - 3520: 9ce2 add s9,s9,s8 - 3522: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 3526: 000cc583 lbu a1,0(s9) - 352a: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 352c: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 352e: c79fd0ef jal 11a6 <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 3532: ff9c1ae3 bne s8,s9,3526 <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 3536: 0c0a1e63 bnez s4,3612 <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 353a: 6c22 ld s8,8(sp) - 353c: be31 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 353e: 4174043b subw s0,s0,s7 - if (!flag_left) - 3542: 100a0a63 beqz s4,3656 <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 3546: d80b9ce3 bnez s7,32de <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 354a: 4a01 li s4,0 - _out_char(ctx, ' '); - 354c: 02000593 li a1,32 - 3550: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3552: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3554: c53fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 3558: ff441ae3 bne s0,s4,354c <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 355c: 0c21 addi s8,s8,8 - 355e: bced j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 3560: f46d bnez s0,354a <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 3562: 0c21 addi s8,s8,8 - 3564: bcd5 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 3566: 1fce8163 beq t4,t3,3748 <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 356a: 000c2e03 lw t3,0(s8) - 356e: 008c0793 addi a5,s8,8 - 3572: e43e sd a5,8(sp) - int64 sval = (int64)val; - 3574: 86f2 mv a3,t3 - if (sval < 0) - 3576: 1406cb63 bltz a3,36cc <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 357a: 02b00793 li a5,43 - 357e: e03e sd a5,0(sp) - else if (flag_plus) - 3580: e589 bnez a1,358a <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 3582: 00589793 slli a5,a7,0x5 - 3586: e03e sd a5,0(sp) - 3588: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 358a: 4329 li t1,10 - 358c: 00002f97 auipc t6,0x2 - 3590: aa4f8f93 addi t6,t6,-1372 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - if (val == 0) - 3594: ee0e11e3 bnez t3,3476 <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 3598: 03000693 li a3,48 - 359c: 00d10823 sb a3,16(sp) - return i; - 35a0: 4f05 li t5,1 - if (precision >= 0) - 35a2: f00bd1e3 bgez s7,34a4 <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 35a6: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35aa: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 35ae: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 35b2: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 35b4: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35b6: 0d1c9f63 bne s9,a7,3694 <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 35ba: 00002c97 auipc s9,0x2 - 35be: a8ec8c93 addi s9,s9,-1394 # 5048 <_GLOBAL__sub_I__ZSt3cin+0x9a> - prefix_len += 2; - 35c2: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35c4: 017585bb addw a1,a1,s7 - 35c8: 01e585bb addw a1,a1,t5 - 35cc: f085c2e3 blt a1,s0,34d0 <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 35d0: 080d0f63 beqz s10,366e <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 35d4: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35d6: 4401 li s0,0 - if (sign_char) - 35d8: f00782e3 beqz a5,34dc <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 35dc: 6582 ld a1,0(sp) - 35de: 8526 mv a0,s1 - 35e0: bc7fd0ef jal 11a6 <_out_char> - 35e4: bde5 j 34dc <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, ' '); - 35e6: 02000593 li a1,32 - 35ea: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 35ec: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 35ee: bb9fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 35f2: efa402e3 beq s0,s10,34d6 <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 35f6: 02000593 li a1,32 - 35fa: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 35fc: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 35fe: ba9fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 3602: ffa412e3 bne s0,s10,35e6 <_vprintf_core.constprop.0.isra.0+0x5cc> - 3606: bdc1 j 34d6 <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 3608: ee0b9ee3 bnez s7,3504 <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 360c: 577d li a4,-1 - 360e: f0ec17e3 bne s8,a4,351c <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 3612: d405 beqz s0,353a <_vprintf_core.constprop.0.isra.0+0x520> - 3614: 4a01 li s4,0 - _out_char(ctx, ' '); - 3616: 02000593 li a1,32 - 361a: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 361c: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 361e: b89fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 3622: fe8a1ae3 bne s4,s0,3616 <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 3626: 6c22 ld s8,8(sp) - 3628: bc05 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 362a: 008c0793 addi a5,s8,8 - 362e: e43e sd a5,8(sp) - else if (len_mod == 1) - 3630: 180e9163 bnez t4,37b2 <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3634: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3638: 4581 li a1,0 - 363a: 05800c93 li s9,88 - 363e: e002 sd zero,0(sp) - 3640: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3642: 00002f97 auipc t6,0x2 - 3646: 9d6f8f93 addi t6,t6,-1578 # 5018 <_GLOBAL__sub_I__ZSt3cin+0x6a> - 364a: b525 j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 364c: ca8058e3 blez s0,32fc <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 3650: ee0a1de3 bnez s4,354a <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 3654: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 3656: 4d01 li s10,0 - _out_char(ctx, ' '); - 3658: 02000593 li a1,32 - 365c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 365e: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3660: b47fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 3664: fe8d1ae3 bne s10,s0,3658 <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 3668: c60b9be3 bnez s7,32de <_vprintf_core.constprop.0.isra.0+0x2c4> - 366c: b941 j 32fc <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 366e: 6782 ld a5,0(sp) - 3670: 4401 li s0,0 - 3672: f7ad bnez a5,35dc <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 3674: e60c96e3 bnez s9,34e0 <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 3678: e80b96e3 bnez s7,3504 <_vprintf_core.constprop.0.isra.0+0x4ea> - 367c: bd69 j 3516 <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 367e: 41eb8bbb subw s7,s7,t5 - 3682: 8d52 mv s10,s4 - 3684: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 3686: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 368a: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 368e: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3690: f31c85e3 beq s9,a7,35ba <_vprintf_core.constprop.0.isra.0+0x5a0> - 3694: cd09 beqz a0,36ae <_vprintf_core.constprop.0.isra.0+0x694> - 3696: 000e0c63 beqz t3,36ae <_vprintf_core.constprop.0.isra.0+0x694> - 369a: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 369e: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36a2: f0ac8ce3 beq s9,a0,35ba <_vprintf_core.constprop.0.isra.0+0x5a0> - 36a6: 05800613 li a2,88 - 36aa: 12cc8463 beq s9,a2,37d2 <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36ae: 00bb85bb addw a1,s7,a1 - 36b2: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 36b6: 4c81 li s9,0 - 36b8: bd11 j 34cc <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36ba: 07000693 li a3,112 - 36be: 8d52 mv s10,s4 - 36c0: 4b01 li s6,0 - 36c2: 08dc8d63 beq s9,a3,375c <_vprintf_core.constprop.0.isra.0+0x742> - 36c6: 5c7d li s8,-1 - char *prefix_str = NULL; - 36c8: 4c81 li s9,0 - 36ca: b509 j 34cc <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 36cc: 02d00793 li a5,45 - val = (uint64)(-sval); - 36d0: 40d00e33 neg t3,a3 - 36d4: 4585 li a1,1 - 36d6: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 36d8: 00002f97 auipc t6,0x2 - 36dc: 958f8f93 addi t6,t6,-1704 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - sign_char = '-'; - 36e0: e03e sd a5,0(sp) - 36e2: bb51 j 3476 <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 36e4: 00002c97 auipc s9,0x2 - 36e8: 974c8c93 addi s9,s9,-1676 # 5058 <_GLOBAL__sub_I__ZSt3cin+0xaa> - 36ec: bed1 j 32c0 <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 36ee: 000c3683 ld a3,0(s8) - 36f2: 008c0713 addi a4,s8,8 - 36f6: e43a sd a4,8(sp) - 36f8: 8dbe mv s11,a5 - 36fa: 8e36 mv t3,a3 - if (is_signed) - 36fc: bdad j 3576 <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 36fe: 06900693 li a3,105 - 3702: fedc86e3 beq s9,a3,36ee <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 3706: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 370a: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 370e: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3710: 06dc9063 bne s9,a3,3770 <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3714: 000c3e03 ld t3,0(s8) - 3718: 8dbe mv s11,a5 - 371a: 4581 li a1,0 - 371c: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 371e: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3720: 00002f97 auipc t6,0x2 - 3724: 910f8f93 addi t6,t6,-1776 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - 3728: b3a9 j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 372a: c809 beqz s0,373c <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 372c: 02000593 li a1,32 - 3730: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3732: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3734: a73fd0ef jal 11a6 <_out_char> - for (int i = 0; i < padding; i++) - 3738: ff441ae3 bne s0,s4,372c <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 373c: 85e6 mv a1,s9 - 373e: 8526 mv a0,s1 - 3740: a67fd0ef jal 11a6 <_out_char> - const char *s = va_arg(ap, char *); - 3744: 0c21 addi s8,s8,8 - 3746: ba09 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3748: 000c3683 ld a3,0(s8) - 374c: 008c0793 addi a5,s8,8 - 3750: e43e sd a5,8(sp) - 3752: 8e36 mv t3,a3 - if (is_signed) - 3754: b50d j 3576 <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3756: 8d52 mv s10,s4 - 3758: 4b01 li s6,0 - 375a: b585 j 35ba <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 375c: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 375e: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 3760: 00002c97 auipc s9,0x2 - 3764: 8e8c8c93 addi s9,s9,-1816 # 5048 <_GLOBAL__sub_I__ZSt3cin+0x9a> - 3768: bda9 j 35c2 <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 376a: 8d52 mv s10,s4 - 376c: 4b01 li s6,0 - 376e: b735 j 369a <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3770: 07000693 li a3,112 - 3774: 04dc8263 beq s9,a3,37b8 <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3778: 000c3e03 ld t3,0(s8) - 377c: 8dbe mv s11,a5 - 377e: 4581 li a1,0 - 3780: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3782: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3784: 00002f97 auipc t6,0x2 - 3788: 8acf8f93 addi t6,t6,-1876 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - 378c: b1dd j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 378e: 000c3e03 ld t3,0(s8) - 3792: 4581 li a1,0 - 3794: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3796: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3798: 00002f97 auipc t6,0x2 - 379c: 898f8f93 addi t6,t6,-1896 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - 37a0: b9c9 j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 37a2: 8dbe mv s11,a5 - 37a4: b911 j 33b8 <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 37a6: 577d li a4,-1 - 37a8: 4401 li s0,0 - 37aa: d6ec19e3 bne s8,a4,351c <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 37ae: 6c22 ld s8,8(sp) - 37b0: b065 j 3058 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37b2: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37b6: b549 j 3638 <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37b8: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 37ba: 000c3e03 ld t3,0(s8) - 37be: 4581 li a1,0 - 37c0: 07000c93 li s9,112 - 37c4: e002 sd zero,0(sp) - 37c6: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37c8: 00002f97 auipc t6,0x2 - 37cc: 868f8f93 addi t6,t6,-1944 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - 37d0: b14d j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 37d2: 00002c97 auipc s9,0x2 - 37d6: 87ec8c93 addi s9,s9,-1922 # 5050 <_GLOBAL__sub_I__ZSt3cin+0xa2> - 37da: b3e5 j 35c2 <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 37dc: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37e0: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 37e4: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37e6: 8dbe mv s11,a5 - 37e8: bd81 j 3638 <_vprintf_core.constprop.0.isra.0+0x61e> - 37ea: 8d52 mv s10,s4 - 37ec: 4b01 li s6,0 - 37ee: 4b81 li s7,0 - 37f0: bd59 j 3686 <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37f2: 07000693 li a3,112 - 37f6: fcdc82e3 beq s9,a3,37ba <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 37fa: 01ce8c63 beq t4,t3,3812 <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 37fe: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3802: 4581 li a1,0 - 3804: e002 sd zero,0(sp) - 3806: 4329 li t1,10 - 3808: 00002f97 auipc t6,0x2 - 380c: 828f8f93 addi t6,t6,-2008 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x82> - 3810: b18d j 3472 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3812: 000c3e03 ld t3,0(s8) - if (is_signed) - 3816: b7f5 j 3802 <_vprintf_core.constprop.0.isra.0+0x7e8> - -0000000000003818 : -{ - 3818: 7139 addi sp,sp,-64 - 381a: f822 sd s0,48(sp) - 381c: f426 sd s1,40(sp) - 381e: 842e mv s0,a1 - 3820: 84aa mv s1,a0 - 3822: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 3824: 850a mv a0,sp - 3826: 8636 mv a2,a3 -{ - 3828: fc06 sd ra,56(sp) - ctx.buf = str; - 382a: e026 sd s1,0(sp) - ctx.limit = size; - 382c: e422 sd s0,8(sp) - ctx.written = 0; - 382e: e802 sd zero,16(sp) - ctx.stream = NULL; - 3830: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 3832: fe8ff0ef jal 301a <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3836: 6542 ld a0,16(sp) - if (size > 0) - 3838: c411 beqz s0,3844 - if (ctx.written < size) - 383a: 00857b63 bgeu a0,s0,3850 - str[ctx.written] = '\0'; - 383e: 94aa add s1,s1,a0 - 3840: 00048023 sb zero,0(s1) -} - 3844: 70e2 ld ra,56(sp) - 3846: 7442 ld s0,48(sp) - 3848: 74a2 ld s1,40(sp) - 384a: 2501 sext.w a0,a0 - 384c: 6121 addi sp,sp,64 - 384e: 8082 ret - str[size - 1] = '\0'; - 3850: 94a2 add s1,s1,s0 - 3852: fe048fa3 sb zero,-1(s1) -} - 3856: 70e2 ld ra,56(sp) - 3858: 7442 ld s0,48(sp) - 385a: 74a2 ld s1,40(sp) - 385c: 2501 sext.w a0,a0 - 385e: 6121 addi sp,sp,64 - 3860: 8082 ret - -0000000000003862 : -{ - 3862: 7119 addi sp,sp,-128 - 3864: e0a2 sd s0,64(sp) - 3866: fc26 sd s1,56(sp) - 3868: 842e mv s0,a1 - 386a: 84aa mv s1,a0 - 386c: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 386e: 0808 addi a0,sp,16 - va_start(ap, format); - 3870: 08b0 addi a2,sp,88 -{ - 3872: e486 sd ra,72(sp) - 3874: ecb6 sd a3,88(sp) - 3876: f0ba sd a4,96(sp) - 3878: f4be sd a5,104(sp) - 387a: f8c2 sd a6,112(sp) - 387c: fcc6 sd a7,120(sp) - va_start(ap, format); - 387e: e432 sd a2,8(sp) - ctx.buf = str; - 3880: e826 sd s1,16(sp) - ctx.limit = size; - 3882: ec22 sd s0,24(sp) - ctx.written = 0; - 3884: f002 sd zero,32(sp) - ctx.stream = NULL; - 3886: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 3888: f92ff0ef jal 301a <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 388c: 7502 ld a0,32(sp) - if (size > 0) - 388e: c411 beqz s0,389a - if (ctx.written < size) - 3890: 00857b63 bgeu a0,s0,38a6 - str[ctx.written] = '\0'; - 3894: 94aa add s1,s1,a0 - 3896: 00048023 sb zero,0(s1) -} - 389a: 60a6 ld ra,72(sp) - 389c: 6406 ld s0,64(sp) - 389e: 74e2 ld s1,56(sp) - 38a0: 2501 sext.w a0,a0 - 38a2: 6109 addi sp,sp,128 - 38a4: 8082 ret - str[size - 1] = '\0'; - 38a6: 94a2 add s1,s1,s0 - 38a8: fe048fa3 sb zero,-1(s1) -} - 38ac: 60a6 ld ra,72(sp) - 38ae: 6406 ld s0,64(sp) - 38b0: 74e2 ld s1,56(sp) - 38b2: 2501 sext.w a0,a0 - 38b4: 6109 addi sp,sp,128 - 38b6: 8082 ret - -00000000000038b8 : -{ - 38b8: 7119 addi sp,sp,-128 - va_start(ap, format); - 38ba: 04810313 addi t1,sp,72 -{ - 38be: e4ae sd a1,72(sp) - 38c0: e8b2 sd a2,80(sp) - 38c2: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 38c4: 85aa mv a1,a0 - ctx.stream = stdout; - 38c6: 00004797 auipc a5,0x4 - 38ca: d5a7b783 ld a5,-678(a5) # 7620 - _vprintf_core(&ctx, format, ap); - 38ce: 0808 addi a0,sp,16 - 38d0: 861a mv a2,t1 -{ - 38d2: fc06 sd ra,56(sp) - 38d4: ecb6 sd a3,88(sp) - 38d6: f0ba sd a4,96(sp) - 38d8: f8c2 sd a6,112(sp) - 38da: fcc6 sd a7,120(sp) - va_start(ap, format); - 38dc: e41a sd t1,8(sp) - ctx.buf = NULL; - 38de: e802 sd zero,16(sp) - ctx.limit = 0; - 38e0: ec02 sd zero,24(sp) - ctx.written = 0; - 38e2: f002 sd zero,32(sp) - ctx.stream = stdout; - 38e4: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 38e6: f34ff0ef jal 301a <_vprintf_core.constprop.0.isra.0> -} - 38ea: 70e2 ld ra,56(sp) - 38ec: 5502 lw a0,32(sp) - 38ee: 6109 addi sp,sp,128 - 38f0: 8082 ret - -00000000000038f2 : -{ - 38f2: 7159 addi sp,sp,-112 - va_start(ap, format); - 38f4: 04010e13 addi t3,sp,64 -{ - 38f8: 8eaa mv t4,a0 - ctx.fd = -1; - 38fa: 537d li t1,-1 -{ - 38fc: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 38fe: 0808 addi a0,sp,16 - 3900: 8672 mv a2,t3 -{ - 3902: fc06 sd ra,56(sp) - 3904: e4b6 sd a3,72(sp) - 3906: e8ba sd a4,80(sp) - 3908: ecbe sd a5,88(sp) - 390a: f0c2 sd a6,96(sp) - 390c: f4c6 sd a7,104(sp) - va_start(ap, format); - 390e: e472 sd t3,8(sp) - ctx.buf = str; - 3910: e876 sd t4,16(sp) - ctx.fd = -1; - 3912: cc1a sw t1,24(sp) - ctx.pos = 0; - 3914: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3916: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3918: 81efd0ef jal 936 <_vscanf_core.constprop.0> -} - 391c: 70e2 ld ra,56(sp) - 391e: 6165 addi sp,sp,112 - 3920: 8082 ret - -0000000000003922 : -{ - 3922: 7119 addi sp,sp,-128 - va_start(ap, format); - 3924: 04810313 addi t1,sp,72 -{ - 3928: e4ae sd a1,72(sp) - 392a: e8b2 sd a2,80(sp) - 392c: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 392e: 85aa mv a1,a0 - ctx.ungotten = -1; - 3930: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 3932: 0808 addi a0,sp,16 - 3934: 861a mv a2,t1 -{ - 3936: fc06 sd ra,56(sp) - 3938: ecb6 sd a3,88(sp) - 393a: f0ba sd a4,96(sp) - 393c: f8c2 sd a6,112(sp) - 393e: fcc6 sd a7,120(sp) - va_start(ap, format); - 3940: e41a sd t1,8(sp) - ctx.buf = NULL; - 3942: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 3944: cc02 sw zero,24(sp) - ctx.pos = 0; - 3946: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3948: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 394a: fedfc0ef jal 936 <_vscanf_core.constprop.0> -} - 394e: 70e2 ld ra,56(sp) - 3950: 6109 addi sp,sp,128 - 3952: 8082 ret - -0000000000003954 : -{ - 3954: 1101 addi sp,sp,-32 - 3956: e426 sd s1,8(sp) - 3958: 84ae mv s1,a1 - 395a: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 395c: 00001597 auipc a1,0x1 - 3960: 71458593 addi a1,a1,1812 # 5070 <_GLOBAL__sub_I__ZSt3cin+0xc2> -{ - 3964: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 3966: 8526 mv a0,s1 -{ - 3968: e822 sd s0,16(sp) - 396a: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 396c: 298010ef jal 4c04 - 3970: 842a mv s0,a0 - 3972: c919 beqz a0,3988 - else if (strcmp(mode, "w") == 0) - 3974: 00001597 auipc a1,0x1 - 3978: 70458593 addi a1,a1,1796 # 5078 <_GLOBAL__sub_I__ZSt3cin+0xca> - 397c: 8526 mv a0,s1 - 397e: 286010ef jal 4c04 - flags = O_WRONLY | O_CREAT | O_TRUNC; - 3982: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 3986: ed39 bnez a0,39e4 - int64 fd = open(filename, flags); - 3988: 85a2 mv a1,s0 - 398a: 854a mv a0,s2 - 398c: f42fc0ef jal ce - 3990: 84aa mv s1,a0 - if (fd < 0) - 3992: 06054c63 bltz a0,3a0a - FILE *f = (FILE *)malloc(sizeof(FILE)); - 3996: 42000513 li a0,1056 - 399a: 2f3000ef jal 448c - 399e: 892a mv s2,a0 - if (!f) - 39a0: c53d beqz a0,3a0e - memset(f, 0, sizeof(FILE)); - 39a2: 42000613 li a2,1056 - 39a6: 4581 li a1,0 - 39a8: 0ee010ef jal 4a96 - if (fd == 1) - 39ac: 4785 li a5,1 - f->fd = (int)fd; - 39ae: 00992023 sw s1,0(s2) - f->flags = flags; - 39b2: 00892223 sw s0,4(s2) - if (fd == 1) - 39b6: 00f48e63 beq s1,a5,39d2 - else if (fd == 2) - 39ba: 4789 li a5,2 - 39bc: 00f48b63 beq s1,a5,39d2 - f->buf_mode = 0; - 39c0: 40092e23 sw zero,1052(s2) -} - 39c4: 60e2 ld ra,24(sp) - 39c6: 6442 ld s0,16(sp) - 39c8: 64a2 ld s1,8(sp) - 39ca: 854a mv a0,s2 - 39cc: 6902 ld s2,0(sp) - 39ce: 6105 addi sp,sp,32 - 39d0: 8082 ret - 39d2: 60e2 ld ra,24(sp) - 39d4: 6442 ld s0,16(sp) - f->buf_mode = 2; - 39d6: 40992e23 sw s1,1052(s2) -} - 39da: 854a mv a0,s2 - 39dc: 64a2 ld s1,8(sp) - 39de: 6902 ld s2,0(sp) - 39e0: 6105 addi sp,sp,32 - 39e2: 8082 ret - else if (strcmp(mode, "a") == 0) - 39e4: 00001597 auipc a1,0x1 - 39e8: 69c58593 addi a1,a1,1692 # 5080 <_GLOBAL__sub_I__ZSt3cin+0xd2> - 39ec: 8526 mv a0,s1 - 39ee: 216010ef jal 4c04 - flags = O_WRONLY | O_CREAT | O_APPEND; - 39f2: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 39f6: d949 beqz a0,3988 - else if (strcmp(mode, "r+") == 0) - 39f8: 00001597 auipc a1,0x1 - 39fc: 69058593 addi a1,a1,1680 # 5088 <_GLOBAL__sub_I__ZSt3cin+0xda> - 3a00: 8526 mv a0,s1 - 3a02: 202010ef jal 4c04 - flags = O_RDWR; - 3a06: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 3a08: d141 beqz a0,3988 - return NULL; - 3a0a: 4901 li s2,0 - 3a0c: bf65 j 39c4 - close(fd); - 3a0e: 8526 mv a0,s1 - 3a10: ea6fc0ef jal b6 - return NULL; - 3a14: 4901 li s2,0 - 3a16: b77d j 39c4 - -0000000000003a18 : - if (!stream) - 3a18: cd29 beqz a0,3a72 - if (stream->buf_write_pos > 0) - 3a1a: 41052603 lw a2,1040(a0) -{ - 3a1e: 1141 addi sp,sp,-16 - 3a20: e022 sd s0,0(sp) - 3a22: e406 sd ra,8(sp) - 3a24: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a26: 02c04a63 bgtz a2,3a5a - if (stream != stdin && stream != stdout && stream != stderr) - 3a2a: 00004797 auipc a5,0x4 - 3a2e: bf678793 addi a5,a5,-1034 # 7620 - 3a32: 6798 ld a4,8(a5) - 3a34: 00870e63 beq a4,s0,3a50 - 3a38: 6398 ld a4,0(a5) - 3a3a: 00870b63 beq a4,s0,3a50 - 3a3e: 6b9c ld a5,16(a5) - 3a40: 00878863 beq a5,s0,3a50 - close(stream->fd); - 3a44: 4008 lw a0,0(s0) - 3a46: e70fc0ef jal b6 - free(stream); - 3a4a: 8522 mv a0,s0 - 3a4c: 1cb000ef jal 4416 -} - 3a50: 60a2 ld ra,8(sp) - 3a52: 6402 ld s0,0(sp) - return 0; - 3a54: 4501 li a0,0 -} - 3a56: 0141 addi sp,sp,16 - 3a58: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a5a: 4108 lw a0,0(a0) - 3a5c: 01040593 addi a1,s0,16 - 3a60: e4efc0ef jal ae - if (ret < stream->buf_write_pos) - 3a64: 41042783 lw a5,1040(s0) - 3a68: 00f54763 blt a0,a5,3a76 - stream->buf_write_pos = 0; - 3a6c: 40042823 sw zero,1040(s0) - 3a70: bf6d j 3a2a - return -1; - 3a72: 557d li a0,-1 -} - 3a74: 8082 ret - stream->error = 1; - 3a76: 4785 li a5,1 - 3a78: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3a7a: 40042823 sw zero,1040(s0) - return EOF; - 3a7e: b775 j 3a2a - -0000000000003a80 : - if (!stream) - 3a80: c121 beqz a0,3ac0 - if (stream->buf_write_pos > 0) - 3a82: 41052603 lw a2,1040(a0) -{ - 3a86: 1141 addi sp,sp,-16 - 3a88: e022 sd s0,0(sp) - 3a8a: e406 sd ra,8(sp) - 3a8c: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a8e: 00c04763 bgtz a2,3a9c - return 0; - 3a92: 4501 li a0,0 -} - 3a94: 60a2 ld ra,8(sp) - 3a96: 6402 ld s0,0(sp) - 3a98: 0141 addi sp,sp,16 - 3a9a: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a9c: 4108 lw a0,0(a0) - 3a9e: 01040593 addi a1,s0,16 - 3aa2: e0cfc0ef jal ae - if (ret < stream->buf_write_pos) - 3aa6: 41042783 lw a5,1040(s0) - 3aaa: 00f54563 blt a0,a5,3ab4 - stream->buf_write_pos = 0; - 3aae: 40042823 sw zero,1040(s0) - 3ab2: b7c5 j 3a92 - stream->error = 1; - 3ab4: 4785 li a5,1 - 3ab6: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3ab8: 40042823 sw zero,1040(s0) - return EOF; - 3abc: 557d li a0,-1 - 3abe: bfd9 j 3a94 - 3ac0: 557d li a0,-1 -} - 3ac2: 8082 ret - -0000000000003ac4 : -{ - 3ac4: 7159 addi sp,sp,-112 - 3ac6: fc06 sd ra,56(sp) - 3ac8: e0b2 sd a2,64(sp) - 3aca: e4b6 sd a3,72(sp) - 3acc: e8ba sd a4,80(sp) - 3ace: ecbe sd a5,88(sp) - 3ad0: f0c2 sd a6,96(sp) - 3ad2: f4c6 sd a7,104(sp) - if (!stream) - 3ad4: cd19 beqz a0,3af2 - va_start(ap, format); - 3ad6: 832a mv t1,a0 - 3ad8: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 3ada: 0808 addi a0,sp,16 - va_start(ap, format); - 3adc: e432 sd a2,8(sp) - ctx.buf = NULL; - 3ade: e802 sd zero,16(sp) - ctx.limit = 0; - 3ae0: ec02 sd zero,24(sp) - ctx.written = 0; - 3ae2: f002 sd zero,32(sp) - ctx.stream = stream; - 3ae4: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 3ae6: d34ff0ef jal 301a <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 3aea: 5502 lw a0,32(sp) -} - 3aec: 70e2 ld ra,56(sp) - 3aee: 6165 addi sp,sp,112 - 3af0: 8082 ret - return -1; - 3af2: 557d li a0,-1 - 3af4: bfe5 j 3aec - -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 - ctx.fd = stream->fd; - 3b08: 411c lw a5,0(a0) - va_start(ap, format); - 3b0a: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 3b0c: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 3b0e: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 3b10: 57fd li a5,-1 - va_start(ap, format); - 3b12: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b14: e802 sd zero,16(sp) - ctx.pos = 0; - 3b16: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3b18: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3b1a: e1dfc0ef jal 936 <_vscanf_core.constprop.0> -} - 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 : - if (!stream) - 3b28: c1e1 beqz a1,3be8 -{ - 3b2a: 7179 addi sp,sp,-48 - 3b2c: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 3b2e: 41c5a903 lw s2,1052(a1) -{ - 3b32: f022 sd s0,32(sp) - 3b34: ec26 sd s1,24(sp) - 3b36: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 3b38: 4789 li a5,2 - 3b3a: 842e mv s0,a1 - 3b3c: 84aa mv s1,a0 - char ch = (char)c; - 3b3e: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 3b42: 02f90963 beq s2,a5,3b74 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b46: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 3b4a: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b4e: 0017861b addiw a2,a5,1 - 3b52: 40c5a823 sw a2,1040(a1) - 3b56: 97ae add a5,a5,a1 - 3b58: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3b5c: 06c6c463 blt a3,a2,3bc4 - else if (stream->buf_mode == 1 && c == '\n') - 3b60: 4785 li a5,1 - 3b62: 02f90e63 beq s2,a5,3b9e - return c; - 3b66: 8526 mv a0,s1 -} - 3b68: 70a2 ld ra,40(sp) - 3b6a: 7402 ld s0,32(sp) - 3b6c: 64e2 ld s1,24(sp) - 3b6e: 6942 ld s2,16(sp) - 3b70: 6145 addi sp,sp,48 - 3b72: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3b74: 4188 lw a0,0(a1) - 3b76: 4605 li a2,1 - 3b78: 00f10593 addi a1,sp,15 - char ch = (char)c; - 3b7c: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3b80: d2efc0ef jal ae - 3b84: 872a mv a4,a0 - 3b86: 4785 li a5,1 - return c; - 3b88: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 3b8a: fcf70fe3 beq a4,a5,3b68 -} - 3b8e: 70a2 ld ra,40(sp) - stream->error = 1; - 3b90: c41c sw a5,8(s0) -} - 3b92: 7402 ld s0,32(sp) - 3b94: 64e2 ld s1,24(sp) - 3b96: 6942 ld s2,16(sp) - return EOF; - 3b98: 557d li a0,-1 -} - 3b9a: 6145 addi sp,sp,48 - 3b9c: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3b9e: 47a9 li a5,10 - 3ba0: fcf513e3 bne a0,a5,3b66 - if (stream->buf_write_pos > 0) - 3ba4: fcc051e3 blez a2,3b66 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3ba8: 4188 lw a0,0(a1) - 3baa: 05c1 addi a1,a1,16 - 3bac: d02fc0ef jal ae - if (ret < stream->buf_write_pos) - 3bb0: 41042783 lw a5,1040(s0) - 3bb4: 02f55063 bge a0,a5,3bd4 - stream->error = 1; - 3bb8: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 3bbc: 40042823 sw zero,1040(s0) - return c; - 3bc0: 8526 mv a0,s1 - 3bc2: b75d j 3b68 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3bc4: 4188 lw a0,0(a1) - 3bc6: 05c1 addi a1,a1,16 - 3bc8: ce6fc0ef jal ae - if (ret < stream->buf_write_pos) - 3bcc: 41042783 lw a5,1040(s0) - 3bd0: 00f54663 blt a0,a5,3bdc - stream->buf_write_pos = 0; - 3bd4: 40042823 sw zero,1040(s0) - return c; - 3bd8: 8526 mv a0,s1 - 3bda: b779 j 3b68 - stream->error = 1; - 3bdc: 4785 li a5,1 - 3bde: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3be0: 40042823 sw zero,1040(s0) - return c; - 3be4: 8526 mv a0,s1 - 3be6: b749 j 3b68 - return EOF; - 3be8: 557d li a0,-1 -} - 3bea: 8082 ret - -0000000000003bec : - if (!stream) - 3bec: c1ed beqz a1,3cce -{ - 3bee: 711d addi sp,sp,-96 - 3bf0: e4a6 sd s1,72(sp) - 3bf2: ec86 sd ra,88(sp) - while (*s) - 3bf4: 00054703 lbu a4,0(a0) - 3bf8: 84aa mv s1,a0 - 3bfa: cf25 beqz a4,3c72 - 3bfc: e8a2 sd s0,80(sp) - 3bfe: e0ca sd s2,64(sp) - 3c00: fc4e sd s3,56(sp) - 3c02: f852 sd s4,48(sp) - 3c04: f456 sd s5,40(sp) - 3c06: f05a sd s6,32(sp) - 3c08: ec5e sd s7,24(sp) - 3c0a: 842e mv s0,a1 - if (stream->buf_mode == 2) - 3c0c: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 3c0e: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 3c12: 4985 li s3,1 - 3c14: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c16: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 3c1a: 00f10b93 addi s7,sp,15 - 3c1e: a031 j 3c2a - else if (stream->buf_mode == 1 && c == '\n') - 3c20: 09368563 beq a3,s3,3caa - while (*s) - 3c24: 0004c703 lbu a4,0(s1) - 3c28: cf15 beqz a4,3c64 - if (stream->buf_mode == 2) - 3c2a: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 3c2e: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 3c30: 05268663 beq a3,s2,3c7c - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c34: 41042783 lw a5,1040(s0) - 3c38: 0017861b addiw a2,a5,1 - 3c3c: 40c42823 sw a2,1040(s0) - 3c40: 97a2 add a5,a5,s0 - 3c42: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3c46: fccb5de3 bge s6,a2,3c20 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c4a: 4008 lw a0,0(s0) - 3c4c: 85d6 mv a1,s5 - 3c4e: c60fc0ef jal ae - if (ret < stream->buf_write_pos) - 3c52: 41042783 lw a5,1040(s0) - 3c56: 06f54763 blt a0,a5,3cc4 - stream->buf_write_pos = 0; - 3c5a: 40042823 sw zero,1040(s0) - while (*s) - 3c5e: 0004c703 lbu a4,0(s1) - 3c62: f761 bnez a4,3c2a - 3c64: 6446 ld s0,80(sp) - 3c66: 6906 ld s2,64(sp) - 3c68: 79e2 ld s3,56(sp) - 3c6a: 7a42 ld s4,48(sp) - 3c6c: 7aa2 ld s5,40(sp) - 3c6e: 7b02 ld s6,32(sp) - 3c70: 6be2 ld s7,24(sp) -} - 3c72: 60e6 ld ra,88(sp) - 3c74: 64a6 ld s1,72(sp) - return 0; - 3c76: 4501 li a0,0 -} - 3c78: 6125 addi sp,sp,96 - 3c7a: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3c7c: 4008 lw a0,0(s0) - 3c7e: 4605 li a2,1 - 3c80: 85de mv a1,s7 - char ch = (char)c; - 3c82: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3c86: c28fc0ef jal ae - 3c8a: f9350de3 beq a0,s3,3c24 - stream->error = 1; - 3c8e: 01342423 sw s3,8(s0) -} - 3c92: 60e6 ld ra,88(sp) - 3c94: 6446 ld s0,80(sp) - 3c96: 6906 ld s2,64(sp) - 3c98: 79e2 ld s3,56(sp) - 3c9a: 7a42 ld s4,48(sp) - 3c9c: 7aa2 ld s5,40(sp) - 3c9e: 7b02 ld s6,32(sp) - 3ca0: 6be2 ld s7,24(sp) - 3ca2: 64a6 ld s1,72(sp) - return -1; - 3ca4: 557d li a0,-1 -} - 3ca6: 6125 addi sp,sp,96 - 3ca8: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3caa: f7471de3 bne a4,s4,3c24 - if (stream->buf_write_pos > 0) - 3cae: f6c05be3 blez a2,3c24 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cb2: 4008 lw a0,0(s0) - 3cb4: 01040593 addi a1,s0,16 - 3cb8: bf6fc0ef jal ae - if (ret < stream->buf_write_pos) - 3cbc: 41042783 lw a5,1040(s0) - 3cc0: f8f55de3 bge a0,a5,3c5a - stream->error = 1; - 3cc4: 4785 li a5,1 - 3cc6: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3cc8: 40042823 sw zero,1040(s0) - return EOF; - 3ccc: bfa1 j 3c24 - return -1; - 3cce: 557d li a0,-1 -} - 3cd0: 8082 ret - -0000000000003cd2 : - if (!stream) - 3cd2: c949 beqz a0,3d64 - if (stream->buf_write_pos > 0) - 3cd4: 41052603 lw a2,1040(a0) -{ - 3cd8: 1141 addi sp,sp,-16 - 3cda: e022 sd s0,0(sp) - 3cdc: e406 sd ra,8(sp) - 3cde: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3ce0: 04c04863 bgtz a2,3d30 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ce4: 41442783 lw a5,1044(s0) - 3ce8: 41842703 lw a4,1048(s0) - 3cec: 00e7dd63 bge a5,a4,3d06 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3cf0: 0017871b addiw a4,a5,1 - 3cf4: 40e42a23 sw a4,1044(s0) - 3cf8: 943e add s0,s0,a5 - 3cfa: 01044503 lbu a0,16(s0) -} - 3cfe: 60a2 ld ra,8(sp) - 3d00: 6402 ld s0,0(sp) - 3d02: 0141 addi sp,sp,16 - 3d04: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3d06: 4008 lw a0,0(s0) - 3d08: 40000613 li a2,1024 - 3d0c: 01040593 addi a1,s0,16 - 3d10: b96fc0ef jal a6 - 3d14: 87aa mv a5,a0 - if (ret <= 0) - 3d16: 02a05e63 blez a0,3d52 - stream->buf_read_cnt = (int)ret; - 3d1a: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d1e: 4785 li a5,1 - 3d20: 01044503 lbu a0,16(s0) -} - 3d24: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d26: 40f42a23 sw a5,1044(s0) -} - 3d2a: 6402 ld s0,0(sp) - 3d2c: 0141 addi sp,sp,16 - 3d2e: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d30: 4108 lw a0,0(a0) - 3d32: 01040593 addi a1,s0,16 - 3d36: b78fc0ef jal ae - if (ret < stream->buf_write_pos) - 3d3a: 41042783 lw a5,1040(s0) - 3d3e: 00f54563 blt a0,a5,3d48 - stream->buf_write_pos = 0; - 3d42: 40042823 sw zero,1040(s0) - 3d46: bf79 j 3ce4 - stream->error = 1; - 3d48: 4785 li a5,1 - 3d4a: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d4c: 40042823 sw zero,1040(s0) - return EOF; - 3d50: bf51 j 3ce4 - if (ret == 0) - 3d52: e509 bnez a0,3d5c - stream->eof = 1; - 3d54: 4785 li a5,1 - 3d56: c45c sw a5,12(s0) - return EOF; - 3d58: 557d li a0,-1 - 3d5a: b755 j 3cfe - stream->error = 1; - 3d5c: 4785 li a5,1 - 3d5e: c41c sw a5,8(s0) - return EOF; - 3d60: 557d li a0,-1 - 3d62: bf71 j 3cfe - 3d64: 557d li a0,-1 -} - 3d66: 8082 ret - -0000000000003d68 : - if (!stream || n <= 0) - 3d68: ce5d beqz a2,3e26 - 3d6a: 0ab05e63 blez a1,3e26 -{ - 3d6e: 715d addi sp,sp,-80 - 3d70: e0a2 sd s0,64(sp) - 3d72: fc26 sd s1,56(sp) - 3d74: f84a sd s2,48(sp) - 3d76: f44e sd s3,40(sp) - 3d78: f052 sd s4,32(sp) - 3d7a: ec56 sd s5,24(sp) - 3d7c: e85a sd s6,16(sp) - 3d7e: e45e sd s7,8(sp) - 3d80: e486 sd ra,72(sp) - 3d82: 8432 mv s0,a2 - 3d84: 8aaa mv s5,a0 - 3d86: 892a mv s2,a0 - 3d88: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 3d8c: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d8e: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d92: 4b05 li s6,1 - if (c == '\n') - 3d94: 4a29 li s4,10 - while (i < n - 1) - 3d96: 05748163 beq s1,s7,3dd8 - if (stream->buf_write_pos > 0) - 3d9a: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d9e: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 3da0: 06c04963 bgtz a2,3e12 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3da4: 41442783 lw a5,1044(s0) - 3da8: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3dac: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3db0: 0017851b addiw a0,a5,1 - 3db4: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3db8: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3dba: 02e7de63 bge a5,a4,3df6 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3dbe: 40a42a23 sw a0,1044(s0) - 3dc2: 0106c783 lbu a5,16(a3) - 3dc6: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 3dca: 00f90023 sb a5,0(s2) - 3dce: 2485 addiw s1,s1,1 - if (c == '\n') - 3dd0: 0905 addi s2,s2,1 - 3dd2: fd4712e3 bne a4,s4,3d96 - str[i++] = (char)c; - 3dd6: 8ba6 mv s7,s1 - str[i] = '\0'; - 3dd8: 9bd6 add s7,s7,s5 - 3dda: 000b8023 sb zero,0(s7) - return str; - 3dde: 8556 mv a0,s5 -} - 3de0: 60a6 ld ra,72(sp) - 3de2: 6406 ld s0,64(sp) - 3de4: 74e2 ld s1,56(sp) - 3de6: 7942 ld s2,48(sp) - 3de8: 79a2 ld s3,40(sp) - 3dea: 7a02 ld s4,32(sp) - 3dec: 6ae2 ld s5,24(sp) - 3dee: 6b42 ld s6,16(sp) - 3df0: 6ba2 ld s7,8(sp) - 3df2: 6161 addi sp,sp,80 - 3df4: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3df6: 4008 lw a0,0(s0) - 3df8: aaefc0ef jal a6 - if (ret <= 0) - 3dfc: 02a05c63 blez a0,3e34 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e00: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 3e04: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e08: 41642a23 sw s6,1044(s0) - 3e0c: 0007871b sext.w a4,a5 - if (c == -1) - 3e10: bf6d j 3dca - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3e12: 4008 lw a0,0(s0) - 3e14: a9afc0ef jal ae - if (ret < stream->buf_write_pos) - 3e18: 41042783 lw a5,1040(s0) - 3e1c: 00f54763 blt a0,a5,3e2a - stream->buf_write_pos = 0; - 3e20: 40042823 sw zero,1040(s0) - 3e24: b741 j 3da4 - return NULL; - 3e26: 4501 li a0,0 -} - 3e28: 8082 ret - stream->error = 1; - 3e2a: 4785 li a5,1 - 3e2c: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3e2e: 40042823 sw zero,1040(s0) - return EOF; - 3e32: bf8d j 3da4 - stream->eof = 1; - 3e34: 4785 li a5,1 - if (ret == 0) - 3e36: e509 bnez a0,3e40 - stream->eof = 1; - 3e38: c45c sw a5,12(s0) - if (i == 0) - 3e3a: fcd1 bnez s1,3dd6 - return NULL; - 3e3c: 4501 li a0,0 - 3e3e: b74d j 3de0 - stream->error = 1; - 3e40: c41c sw a5,8(s0) - if (c == -1) - 3e42: bfe5 j 3e3a - -0000000000003e44 : -{ - 3e44: 715d addi sp,sp,-80 - 3e46: e486 sd ra,72(sp) - 3e48: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 3e4a: 0e068963 beqz a3,3f3c - 3e4e: ec56 sd s5,24(sp) - return 0; - 3e50: 4981 li s3,0 - 3e52: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 3e54: c9bd beqz a1,3eca - 3e56: ca35 beqz a2,3eca - if (stream->buf_write_pos > 0) - 3e58: 4106a783 lw a5,1040(a3) - 3e5c: e0a2 sd s0,64(sp) - 3e5e: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 3e60: 02c589b3 mul s3,a1,a2 - 3e64: 8436 mv s0,a3 - 3e66: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 3e68: 0af04d63 bgtz a5,3f22 - while (bytes_read < total_bytes) - 3e6c: 04098d63 beqz s3,3ec6 - 3e70: fc26 sd s1,56(sp) - 3e72: e85a sd s6,16(sp) - 3e74: e45e sd s7,8(sp) - 3e76: f84a sd s2,48(sp) - 3e78: 4481 li s1,0 - if (remaining >= BUFSIZ) - 3e7a: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3e7e: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3e82: 41442703 lw a4,1044(s0) - 3e86: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 3e8a: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3e8e: 06f74463 blt a4,a5,3ef6 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3e92: 4008 lw a0,0(s0) - 3e94: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 3e98: 02cb7f63 bgeu s6,a2,3ed6 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3e9c: a0afc0ef jal a6 - if (ret <= 0) - 3ea0: 0aa05463 blez a0,3f48 - bytes_read += ret; - 3ea4: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 3ea6: fd34eee3 bltu s1,s3,3e82 - return bytes_read / size; - 3eaa: 0354d9b3 divu s3,s1,s5 - 3eae: 6406 ld s0,64(sp) -} - 3eb0: 60a6 ld ra,72(sp) - return bytes_read / size; - 3eb2: 74e2 ld s1,56(sp) - 3eb4: 7942 ld s2,48(sp) - 3eb6: 7a02 ld s4,32(sp) - 3eb8: 6ae2 ld s5,24(sp) - 3eba: 6b42 ld s6,16(sp) - 3ebc: 6ba2 ld s7,8(sp) -} - 3ebe: 854e mv a0,s3 - 3ec0: 79a2 ld s3,40(sp) - 3ec2: 6161 addi sp,sp,80 - 3ec4: 8082 ret - 3ec6: 6406 ld s0,64(sp) - 3ec8: 7a02 ld s4,32(sp) - 3eca: 60a6 ld ra,72(sp) - 3ecc: 6ae2 ld s5,24(sp) - 3ece: 854e mv a0,s3 - 3ed0: 79a2 ld s3,40(sp) - 3ed2: 6161 addi sp,sp,80 - 3ed4: 8082 ret - stream->buf_read_pos = 0; - 3ed6: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 3eda: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ede: 40000613 li a2,1024 - 3ee2: 85de mv a1,s7 - 3ee4: 9c2fc0ef jal a6 - if (ret <= 0) - 3ee8: 06a05063 blez a0,3f48 - stream->buf_read_cnt = (int)ret; - 3eec: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 3ef0: f934e9e3 bltu s1,s3,3e82 - 3ef4: bf5d j 3eaa - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 3ef6: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3efa: 00eb85b3 add a1,s7,a4 - 3efe: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 3f02: 01267363 bgeu a2,s2,3f08 - 3f06: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f08: 864a mv a2,s2 - 3f0a: 3e1000ef jal 4aea - stream->buf_read_pos += to_copy; - 3f0e: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 3f12: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 3f14: 012787bb addw a5,a5,s2 - 3f18: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 3f1c: f734e3e3 bltu s1,s3,3e82 - 3f20: b769 j 3eaa - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3f22: 4288 lw a0,0(a3) - 3f24: 863e mv a2,a5 - 3f26: 01068593 addi a1,a3,16 - 3f2a: 984fc0ef jal ae - if (ret < stream->buf_write_pos) - 3f2e: 41042783 lw a5,1040(s0) - 3f32: 02f54163 blt a0,a5,3f54 - stream->buf_write_pos = 0; - 3f36: 40042823 sw zero,1040(s0) - 3f3a: bf0d j 3e6c -} - 3f3c: 60a6 ld ra,72(sp) - return 0; - 3f3e: 4981 li s3,0 -} - 3f40: 854e mv a0,s3 - 3f42: 79a2 ld s3,40(sp) - 3f44: 6161 addi sp,sp,80 - 3f46: 8082 ret - stream->eof = 1; - 3f48: 4785 li a5,1 - if (ret == 0) - 3f4a: e119 bnez a0,3f50 - stream->eof = 1; - 3f4c: c45c sw a5,12(s0) - 3f4e: bfb1 j 3eaa - stream->error = 1; - 3f50: c41c sw a5,8(s0) - return bytes_read / size; - 3f52: bfa1 j 3eaa - stream->error = 1; - 3f54: 4785 li a5,1 - 3f56: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3f58: 40042823 sw zero,1040(s0) - return EOF; - 3f5c: bf01 j 3e6c - -0000000000003f5e : -{ - 3f5e: 711d addi sp,sp,-96 - 3f60: ec86 sd ra,88(sp) - 3f62: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 3f64: 10068063 beqz a3,4064 - 3f68: f456 sd s5,40(sp) - 3f6a: 8aaa mv s5,a0 - 3f6c: 10050263 beqz a0,4070 - 3f70: f05a sd s6,32(sp) - return 0; - 3f72: 4901 li s2,0 - 3f74: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 3f76: c1d9 beqz a1,3ffc - 3f78: c251 beqz a2,3ffc - if (stream->buf_mode == 2) - 3f7a: 41c6a703 lw a4,1052(a3) - 3f7e: e8a2 sd s0,80(sp) - 3f80: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 3f82: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 3f86: 8436 mv s0,a3 - 3f88: 0ef70b63 beq a4,a5,407e - 3f8c: fc4e sd s3,56(sp) - 3f8e: ec5e sd s7,24(sp) - 3f90: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 3f92: 4981 li s3,0 - 3f94: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3f98: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 3f9c: 12090263 beqz s2,40c0 - 3fa0: e4a6 sd s1,72(sp) - 3fa2: f852 sd s4,48(sp) - 3fa4: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fa6: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 3faa: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3fae: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fb2: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 3fb6: 00fb8533 add a0,s7,a5 - 3fba: 8652 mv a2,s4 - if (remaining <= space_left) - 3fbc: 059a6763 bltu s4,s9,400a - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3fc0: 8666 mv a2,s9 - 3fc2: 329000ef jal 4aea - stream->buf_write_pos += remaining; - 3fc6: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 3fca: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 3fce: 019786bb addw a3,a5,s9 - 3fd2: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 3fd6: 06e68a63 beq a3,a4,404a - return bytes_written / size; - 3fda: 03695933 divu s2,s2,s6 - 3fde: 6446 ld s0,80(sp) - 3fe0: 64a6 ld s1,72(sp) - 3fe2: 79e2 ld s3,56(sp) - 3fe4: 7a42 ld s4,48(sp) - 3fe6: 7aa2 ld s5,40(sp) - 3fe8: 7b02 ld s6,32(sp) - 3fea: 6be2 ld s7,24(sp) - 3fec: 6c42 ld s8,16(sp) - 3fee: 6ca2 ld s9,8(sp) -} - 3ff0: 60e6 ld ra,88(sp) - 3ff2: 854a mv a0,s2 - 3ff4: 6906 ld s2,64(sp) - 3ff6: 6125 addi sp,sp,96 - 3ff8: 8082 ret - 3ffa: 6446 ld s0,80(sp) - 3ffc: 60e6 ld ra,88(sp) - 3ffe: 7aa2 ld s5,40(sp) - 4000: 7b02 ld s6,32(sp) - 4002: 854a mv a0,s2 - 4004: 6906 ld s2,64(sp) - 4006: 6125 addi sp,sp,96 - 4008: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 400a: 2e1000ef jal 4aea - stream->buf_write_pos += space_left; - 400e: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4012: 85de mv a1,s7 - bytes_written += space_left; - 4014: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 4016: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 401a: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 401e: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4022: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 4024: 00904763 bgtz s1,4032 - while (bytes_written < total_bytes) - 4028: f729efe3 bltu s3,s2,3fa6 - return bytes_written / size; - 402c: 0369d933 divu s2,s3,s6 - 4030: b77d j 3fde - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4032: 4008 lw a0,0(s0) - 4034: 87afc0ef jal ae - if (ret < stream->buf_write_pos) - 4038: 41042783 lw a5,1040(s0) - 403c: 08f54963 blt a0,a5,40ce - stream->buf_write_pos = 0; - 4040: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 4044: f729e1e3 bltu s3,s2,3fa6 - 4048: b7d5 j 402c - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 404a: 4008 lw a0,0(s0) - 404c: 40000613 li a2,1024 - 4050: 85de mv a1,s7 - 4052: 85cfc0ef jal ae - if (ret < stream->buf_write_pos) - 4056: 41042783 lw a5,1040(s0) - 405a: 08f54163 blt a0,a5,40dc - stream->buf_write_pos = 0; - 405e: 40042823 sw zero,1040(s0) - 4062: bfa5 j 3fda -} - 4064: 60e6 ld ra,88(sp) - return 0; - 4066: 4901 li s2,0 -} - 4068: 854a mv a0,s2 - 406a: 6906 ld s2,64(sp) - 406c: 6125 addi sp,sp,96 - 406e: 8082 ret - 4070: 60e6 ld ra,88(sp) - return 0; - 4072: 4901 li s2,0 - 4074: 7aa2 ld s5,40(sp) -} - 4076: 854a mv a0,s2 - 4078: 6906 ld s2,64(sp) - 407a: 6125 addi sp,sp,96 - 407c: 8082 ret - while (bytes_written < total_bytes) - 407e: f6090ee3 beqz s2,3ffa - 4082: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 4084: 4481 li s1,0 - 4086: a021 j 408e - bytes_written += ret; - 4088: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 408a: 0324f463 bgeu s1,s2,40b2 - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 408e: 4008 lw a0,0(s0) - 4090: 40990633 sub a2,s2,s1 - 4094: 009a85b3 add a1,s5,s1 - 4098: 816fc0ef jal ae - if (ret <= 0) - 409c: fea046e3 bgtz a0,4088 - stream->error = 1; - 40a0: 4785 li a5,1 - return bytes_written / size; - 40a2: 0364d933 divu s2,s1,s6 - stream->error = 1; - 40a6: c41c sw a5,8(s0) - break; - 40a8: 64a6 ld s1,72(sp) - 40aa: 6446 ld s0,80(sp) - 40ac: 7aa2 ld s5,40(sp) - 40ae: 7b02 ld s6,32(sp) - 40b0: b781 j 3ff0 - return bytes_written / size; - 40b2: 0364d933 divu s2,s1,s6 - 40b6: 6446 ld s0,80(sp) - 40b8: 64a6 ld s1,72(sp) - 40ba: 7aa2 ld s5,40(sp) - 40bc: 7b02 ld s6,32(sp) - 40be: bf0d j 3ff0 - 40c0: 6446 ld s0,80(sp) - 40c2: 79e2 ld s3,56(sp) - 40c4: 7aa2 ld s5,40(sp) - 40c6: 7b02 ld s6,32(sp) - 40c8: 6be2 ld s7,24(sp) - 40ca: 6c42 ld s8,16(sp) - 40cc: b715 j 3ff0 - stream->error = 1; - 40ce: 4785 li a5,1 - 40d0: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 40d2: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 40d6: ed29e8e3 bltu s3,s2,3fa6 - 40da: bf89 j 402c - stream->error = 1; - 40dc: 4785 li a5,1 - 40de: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 40e0: 40042823 sw zero,1040(s0) - return EOF; - 40e4: bddd j 3fda - -00000000000040e6 : - if (!stream) - 40e6: c925 beqz a0,4156 -{ - 40e8: 1101 addi sp,sp,-32 - 40ea: e04a sd s2,0(sp) - 40ec: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 40ee: 41052603 lw a2,1040(a0) -{ - 40f2: e822 sd s0,16(sp) - 40f4: e426 sd s1,8(sp) - 40f6: ec06 sd ra,24(sp) - 40f8: 842a mv s0,a0 - 40fa: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 40fc: 02c04863 bgtz a2,412c - if (lseek(stream->fd, offset, whence) < 0) - 4100: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 4102: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4106: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 410a: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 410e: 864a mv a2,s2 - 4110: 0004859b sext.w a1,s1 - 4114: 82afc0ef jal 13e - 4118: 87aa mv a5,a0 - return 0; - 411a: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 411c: 0207c463 bltz a5,4144 -} - 4120: 60e2 ld ra,24(sp) - 4122: 6442 ld s0,16(sp) - 4124: 64a2 ld s1,8(sp) - 4126: 6902 ld s2,0(sp) - 4128: 6105 addi sp,sp,32 - 412a: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 412c: 4108 lw a0,0(a0) - 412e: 01040593 addi a1,s0,16 - 4132: f7dfb0ef jal ae - if (ret < stream->buf_write_pos) - 4136: 41042783 lw a5,1040(s0) - 413a: 00f54963 blt a0,a5,414c - stream->buf_write_pos = 0; - 413e: 40042823 sw zero,1040(s0) - 4142: bf7d j 4100 - stream->error = 1; - 4144: 4785 li a5,1 - 4146: c41c sw a5,8(s0) - return -1; - 4148: 557d li a0,-1 - 414a: bfd9 j 4120 - stream->error = 1; - 414c: 4785 li a5,1 - 414e: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4150: 40042823 sw zero,1040(s0) - return EOF; - 4154: b775 j 4100 - return -1; - 4156: 557d li a0,-1 -} - 4158: 8082 ret - -000000000000415a : - if (!stream) - 415a: c505 beqz a0,4182 -{ - 415c: 1141 addi sp,sp,-16 - 415e: e022 sd s0,0(sp) - 4160: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 4162: 4108 lw a0,0(a0) - 4164: 4605 li a2,1 - 4166: 4581 li a1,0 -{ - 4168: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 416a: fd5fb0ef jal 13e - if (ret < 0) - 416e: 00054663 bltz a0,417a -} - 4172: 60a2 ld ra,8(sp) - 4174: 6402 ld s0,0(sp) - 4176: 0141 addi sp,sp,16 - 4178: 8082 ret - stream->error = 1; - 417a: 4785 li a5,1 - 417c: c41c sw a5,8(s0) - return -1L; - 417e: 557d li a0,-1 - 4180: bfcd j 4172 - 4182: 557d li a0,-1 -} - 4184: 8082 ret - -0000000000004186 : - if (stream) - 4186: c915 beqz a0,41ba - if (stream->buf_write_pos > 0) - 4188: 41052603 lw a2,1040(a0) -{ - 418c: 1141 addi sp,sp,-16 - 418e: e022 sd s0,0(sp) - 4190: e406 sd ra,8(sp) - 4192: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 4194: 02c04463 bgtz a2,41bc - if (lseek(stream->fd, offset, whence) < 0) - 4198: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 419a: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 419e: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 41a2: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 41a6: 4601 li a2,0 - 41a8: 4581 li a1,0 - 41aa: f95fb0ef jal 13e -} - 41ae: 60a2 ld ra,8(sp) - stream->error = 0; - 41b0: 00042423 sw zero,8(s0) -} - 41b4: 6402 ld s0,0(sp) - 41b6: 0141 addi sp,sp,16 - 41b8: 8082 ret - 41ba: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 41bc: 4108 lw a0,0(a0) - 41be: 01040593 addi a1,s0,16 - 41c2: eedfb0ef jal ae - if (ret < stream->buf_write_pos) - 41c6: 41042783 lw a5,1040(s0) - 41ca: 00f54563 blt a0,a5,41d4 - stream->buf_write_pos = 0; - 41ce: 40042823 sw zero,1040(s0) - 41d2: b7d9 j 4198 - stream->error = 1; - 41d4: 4785 li a5,1 - 41d6: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 41d8: 40042823 sw zero,1040(s0) - return EOF; - 41dc: bf75 j 4198 - -00000000000041de : - return (stream) ? stream->eof : 1; - 41de: c119 beqz a0,41e4 - 41e0: 4548 lw a0,12(a0) - 41e2: 8082 ret - 41e4: 4505 li a0,1 -} - 41e6: 8082 ret - -00000000000041e8 : - return (stream) ? stream->error : 1; - 41e8: c119 beqz a0,41ee - 41ea: 4508 lw a0,8(a0) - 41ec: 8082 ret - 41ee: 4505 li a0,1 -} - 41f0: 8082 ret - -00000000000041f2 : - if (stream) - 41f2: c509 beqz a0,41fc - stream->error = 0; - 41f4: 00052423 sw zero,8(a0) - stream->eof = 0; - 41f8: 00052623 sw zero,12(a0) -} - 41fc: 8082 ret - -00000000000041fe : - if (!stream || c == EOF) - 41fe: c19d beqz a1,4224 - 4200: 57fd li a5,-1 - 4202: 02f50163 beq a0,a5,4224 - if (stream->buf_read_pos > 0) - 4206: 4145a783 lw a5,1044(a1) - 420a: 00f05d63 blez a5,4224 - stream->buf_read_pos--; - 420e: fff7871b addiw a4,a5,-1 - 4212: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 4216: 00e587b3 add a5,a1,a4 - 421a: 00a78823 sb a0,16(a5) - stream->eof = 0; - 421e: 0005a623 sw zero,12(a1) - return c; - 4222: 8082 ret - return EOF; - 4224: 557d li a0,-1 - 4226: 8082 ret - -0000000000004228 : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 4228: 1141 addi sp,sp,-16 - 422a: e422 sd s0,8(sp) - 422c: 8eaa mv t4,a0 -{ - const char *s = nptr; - 422e: 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'; } - 4230: 02000313 li t1,32 - 4234: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 4236: 0008c783 lbu a5,0(a7) - 423a: 00188813 addi a6,a7,1 - 423e: ff77871b addiw a4,a5,-9 - 4242: 0ff77693 zext.b a3,a4 - 4246: 0007871b sext.w a4,a5 - 424a: 04678363 beq a5,t1,4290 - 424e: 04de7163 bgeu t3,a3,4290 - } while (isspace(c)); - - if (c == '-') - 4252: 02d00793 li a5,45 - 4256: 0ef70863 beq a4,a5,4346 - { - neg = 1; - c = *s++; - } - else if (c == '+') - 425a: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 425e: 4381 li t2,0 - else if (c == '+') - 4260: 08f70c63 beq a4,a5,42f8 - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4264: ea05 bnez a2,4294 - 4266: 03000793 li a5,48 - 426a: 0ef70463 beq a4,a5,4352 - 426e: 00ccd8b7 lui a7,0xccd - 4272: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5515> - 4276: 08b2 slli a7,a7,0xc - 4278: ccd88893 addi a7,a7,-819 - 427c: 08b2 slli a7,a7,0xc - 427e: ccd88893 addi a7,a7,-819 - 4282: 08b6 slli a7,a7,0xd - 4284: 4415 li s0,5 - 4286: 99988893 addi a7,a7,-1639 - 428a: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 428c: 4629 li a2,10 - 428e: a829 j 42a8 -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 4290: 88c2 mv a7,a6 - 4292: b755 j 4236 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4294: 47c1 li a5,16 - 4296: 0cf60d63 beq a2,a5,4370 - - cutoff = ULLONG_MAX / (unsigned long long)base; - 429a: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 429c: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 42a0: 82b2 mv t0,a2 - 42a2: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42a6: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 42a8: 4301 li t1,0 - 42aa: 4501 li a0,0 - { - if (isdigit(c)) - 42ac: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42ae: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42b0: 5f7d li t5,-1 - if (isdigit(c)) - 42b2: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 42b6: 0007069b sext.w a3,a4 - 42ba: 00fe7e63 bgeu t3,a5,42d6 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42be: f9f6879b addiw a5,a3,-97 - 42c2: 04fff063 bgeu t6,a5,4302 - 42c6: fbf6869b addiw a3,a3,-65 - 42ca: 04dfe163 bltu t6,a3,430c - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 42ce: 03700793 li a5,55 - 42d2: 40f707bb subw a5,a4,a5 - if (c >= base) - 42d6: 02c7db63 bge a5,a2,430c - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42da: 01e30b63 beq t1,t5,42f0 - any = -1; - 42de: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42e0: 00a8e863 bltu a7,a0,42f0 - 42e4: 05150e63 beq a0,a7,4340 - else - { - any = 1; - 42e8: 4305 li t1,1 - acc *= base; - 42ea: 02550533 mul a0,a0,t0 - acc += c; - 42ee: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 42f0: 0805 addi a6,a6,1 - 42f2: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 42f6: bf75 j 42b2 - c = *s++; - 42f8: 00084703 lbu a4,0(a6) - 42fc: 00288813 addi a6,a7,2 - 4300: b795 j 4264 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 4302: 05700793 li a5,87 - 4306: 40f707bb subw a5,a4,a5 - 430a: b7f1 j 42d6 - } - } - - if (any < 0) - 430c: 57fd li a5,-1 - 430e: 00f30e63 beq t1,a5,432a - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 4312: 00038463 beqz t2,431a - acc = -acc; - 4316: 40a00533 neg a0,a0 - - if (endptr != 0) - 431a: c589 beqz a1,4324 - *endptr = (char *)(any ? s - 1 : nptr); - 431c: 00031f63 bnez t1,433a - 4320: 01d5b023 sd t4,0(a1) - - return acc; -} - 4324: 6422 ld s0,8(sp) - 4326: 0141 addi sp,sp,16 - 4328: 8082 ret - errno = ERANGE; - 432a: 02200793 li a5,34 - 432e: 00003717 auipc a4,0x3 - 4332: 34f72923 sw a5,850(a4) # 7680 - acc = ULLONG_MAX; - 4336: 557d li a0,-1 - if (endptr != 0) - 4338: d5f5 beqz a1,4324 - *endptr = (char *)(any ? s - 1 : nptr); - 433a: fff80e93 addi t4,a6,-1 - 433e: b7cd j 4320 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4340: faf448e3 blt s0,a5,42f0 - 4344: b755 j 42e8 - c = *s++; - 4346: 00084703 lbu a4,0(a6) - neg = 1; - 434a: 4385 li t2,1 - c = *s++; - 434c: 00288813 addi a6,a7,2 - 4350: bf11 j 4264 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4352: 00084783 lbu a5,0(a6) - 4356: 05800693 li a3,88 - 435a: 0df7f793 andi a5,a5,223 - 435e: 02d78b63 beq a5,a3,4394 - 4362: 58fd li a7,-1 - 4364: 441d li s0,7 - 4366: 0038d893 srli a7,a7,0x3 - 436a: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 436c: 4621 li a2,8 - 436e: bf2d j 42a8 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4370: 03000793 li a5,48 - 4374: 00f70863 beq a4,a5,4384 - 4378: 58fd li a7,-1 - 437a: 443d li s0,15 - 437c: 0048d893 srli a7,a7,0x4 - 4380: 42c1 li t0,16 - 4382: b71d j 42a8 - 4384: 00084783 lbu a5,0(a6) - 4388: 05800693 li a3,88 - 438c: 0df7f793 andi a5,a5,223 - 4390: fed794e3 bne a5,a3,4378 - s += 2; - 4394: 58fd li a7,-1 - c = s[1]; - 4396: 00184703 lbu a4,1(a6) - s += 2; - 439a: 443d li s0,15 - 439c: 0809 addi a6,a6,2 - 439e: 0048d893 srli a7,a7,0x4 - 43a2: 42c1 li t0,16 - base = 16; - 43a4: 4641 li a2,16 - 43a6: b709 j 42a8 - -00000000000043a8 : - if (__atexit_func_count >= ATEXIT_MAX) - 43a8: 00003717 auipc a4,0x3 - 43ac: 2d870713 addi a4,a4,728 # 7680 - 43b0: 435c lw a5,4(a4) - 43b2: 46fd li a3,31 - 43b4: 00f6ca63 blt a3,a5,43c8 - __atexit_funcs[__atexit_func_count++] = function; - 43b8: 00379693 slli a3,a5,0x3 - 43bc: 96ba add a3,a3,a4 - 43be: 2785 addiw a5,a5,1 - 43c0: e688 sd a0,8(a3) - 43c2: c35c sw a5,4(a4) - return 0; - 43c4: 4501 li a0,0 - 43c6: 8082 ret - return -1; - 43c8: 557d li a0,-1 -} - 43ca: 8082 ret - -00000000000043cc : -{ - 43cc: 1101 addi sp,sp,-32 - 43ce: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 43d0: 00003417 auipc s0,0x3 - 43d4: 2b040413 addi s0,s0,688 # 7680 - 43d8: 405c lw a5,4(s0) -{ - 43da: e426 sd s1,8(sp) - 43dc: ec06 sd ra,24(sp) - 43de: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 43e0: 00f05d63 blez a5,43fa - (__atexit_funcs[--__atexit_func_count])(); - 43e4: fff7871b addiw a4,a5,-1 - 43e8: 87ba mv a5,a4 - 43ea: 070e slli a4,a4,0x3 - 43ec: 9722 add a4,a4,s0 - 43ee: 6718 ld a4,8(a4) - 43f0: c05c sw a5,4(s0) - 43f2: 9702 jalr a4 - while (__atexit_func_count > 0) - 43f4: 405c lw a5,4(s0) - 43f6: fef047e3 bgtz a5,43e4 - sys_exit(status); - 43fa: 8526 mv a0,s1 - 43fc: c8bfb0ef jal 86 - while (1) - 4400: a001 j 4400 - -0000000000004402 : -{ - 4402: 1141 addi sp,sp,-16 - exit(127); - 4404: 07f00513 li a0,127 -{ - 4408: e406 sd ra,8(sp) - exit(127); - 440a: fc3ff0ef jal 43cc - -000000000000440e : -} - 440e: 4501 li a0,0 - 4410: 8082 ret - -0000000000004412 : -} - 4412: 557d li a0,-1 - 4414: 8082 ret - -0000000000004416 : - if (!ptr) - 4416: c121 beqz a0,4456 - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 4418: 00003617 auipc a2,0x3 - 441c: 26860613 addi a2,a2,616 # 7680 - 4420: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 4424: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 4428: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 442a: 02d7f763 bgeu a5,a3,4458 - 442e: 00e6e463 bltu a3,a4,4436 - if (p >= p->next && (bp > p || bp < p->next)) - 4432: 02e7e763 bltu a5,a4,4460 - if ((char *)bp + bp->size == (char *)p->next) - 4436: ff053583 ld a1,-16(a0) - 443a: 00b68833 add a6,a3,a1 - 443e: 03070363 beq a4,a6,4464 - if ((char *)p + p->size == (char *)bp) - 4442: 638c ld a1,0(a5) - 4444: fee53c23 sd a4,-8(a0) - 4448: 00b78833 add a6,a5,a1 - 444c: 03068963 beq a3,a6,447e - 4450: e794 sd a3,8(a5) - freep = p; - 4452: 10f63423 sd a5,264(a2) -} - 4456: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 4458: 00e7e463 bltu a5,a4,4460 - 445c: fce6ede3 bltu a3,a4,4436 -{ - 4460: 87ba mv a5,a4 - 4462: b7d9 j 4428 - bp->size += p->next->size; - 4464: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 4468: 6718 ld a4,8(a4) - bp->size += p->next->size; - 446a: 95c2 add a1,a1,a6 - 446c: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 4470: 638c ld a1,0(a5) - 4472: fee53c23 sd a4,-8(a0) - 4476: 00b78833 add a6,a5,a1 - 447a: fd069be3 bne a3,a6,4450 - p->size += bp->size; - 447e: ff053503 ld a0,-16(a0) - p->next = bp->next; - 4482: 86ba mv a3,a4 - p->size += bp->size; - 4484: 00b50733 add a4,a0,a1 - 4488: e398 sd a4,0(a5) - p->next = bp->next; - 448a: b7d9 j 4450 - -000000000000448c : - if (size == 0) - 448c: c169 beqz a0,454e -{ - 448e: 7179 addi sp,sp,-48 - 4490: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 4492: 00003497 auipc s1,0x3 - 4496: 1ee48493 addi s1,s1,494 # 7680 - 449a: 1084b783 ld a5,264(s1) -{ - 449e: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 44a0: 057d addi a0,a0,31 -{ - 44a2: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 44a4: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 44a8: c3d1 beqz a5,452c - for (p = prevp->next;; prevp = p, p = p->next) - 44aa: 6788 ld a0,8(a5) - if (p->size >= size) - 44ac: 6118 ld a4,0(a0) - 44ae: 06877163 bgeu a4,s0,4510 - 44b2: e44e sd s3,8(sp) - 44b4: e052 sd s4,0(sp) - 44b6: e84a sd s2,16(sp) - if (nu < 4096) - 44b8: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 44ba: 59fd li s3,-1 - 44bc: a029 j 44c6 - for (p = prevp->next;; prevp = p, p = p->next) - 44be: 6788 ld a0,8(a5) - if (p->size >= size) - 44c0: 6118 ld a4,0(a0) - 44c2: 04877463 bgeu a4,s0,450a - if (p == freep) - 44c6: 1084b703 ld a4,264(s1) - 44ca: 87aa mv a5,a0 - 44cc: fee519e3 bne a0,a4,44be - if (nu < 4096) - 44d0: 8922 mv s2,s0 - 44d2: 01447363 bgeu s0,s4,44d8 - 44d6: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 44d8: 854a mv a0,s2 - 44da: c3dfb0ef jal 116 - 44de: 87aa mv a5,a0 - free((void *)(up + 1)); - 44e0: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 44e2: 01378963 beq a5,s3,44f4 - up->size = nu; - 44e6: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 44ea: f2dff0ef jal 4416 - return freep; - 44ee: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 44f2: f7f1 bnez a5,44be -} - 44f4: 70a2 ld ra,40(sp) - 44f6: 7402 ld s0,32(sp) - errno = ENOMEM; - 44f8: 47b1 li a5,12 - 44fa: c09c sw a5,0(s1) - return NULL; - 44fc: 6942 ld s2,16(sp) - 44fe: 69a2 ld s3,8(sp) - 4500: 6a02 ld s4,0(sp) -} - 4502: 64e2 ld s1,24(sp) - return NULL; - 4504: 4501 li a0,0 -} - 4506: 6145 addi sp,sp,48 - 4508: 8082 ret - 450a: 6942 ld s2,16(sp) - 450c: 69a2 ld s3,8(sp) - 450e: 6a02 ld s4,0(sp) - if (p->size == size) - 4510: 02e40c63 beq s0,a4,4548 - p->size -= size; - 4514: 8f01 sub a4,a4,s0 - 4516: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 4518: 953a add a0,a0,a4 - p->size = size; - 451a: e100 sd s0,0(a0) -} - 451c: 70a2 ld ra,40(sp) - 451e: 7402 ld s0,32(sp) - freep = prevp; - 4520: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 4524: 0541 addi a0,a0,16 -} - 4526: 64e2 ld s1,24(sp) - 4528: 6145 addi sp,sp,48 - 452a: 8082 ret - base.next = freep = prevp = &base; - 452c: 00003517 auipc a0,0x3 - 4530: 26450513 addi a0,a0,612 # 7790 - 4534: 10a4b423 sd a0,264(s1) - 4538: 10a4bc23 sd a0,280(s1) - base.size = 0; - 453c: 00003797 auipc a5,0x3 - 4540: 2407ba23 sd zero,596(a5) # 7790 - if (p->size >= size) - 4544: f43d bnez s0,44b2 - base.next = freep = prevp = &base; - 4546: 87aa mv a5,a0 - prevp->next = p->next; - 4548: 6518 ld a4,8(a0) - 454a: e798 sd a4,8(a5) - 454c: bfc1 j 451c - return NULL; - 454e: 4501 li a0,0 -} - 4550: 8082 ret - -0000000000004552 : - if (__builtin_mul_overflow(nmemb, size, &total)) - 4552: 02b537b3 mulhu a5,a0,a1 -{ - 4556: 1101 addi sp,sp,-32 - 4558: e822 sd s0,16(sp) - 455a: ec06 sd ra,24(sp) - 455c: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 455e: 02b50433 mul s0,a0,a1 - 4562: e385 bnez a5,4582 - void *p = malloc(total); - 4564: 8522 mv a0,s0 - 4566: f27ff0ef jal 448c - 456a: 84aa mv s1,a0 - if (p) - 456c: c509 beqz a0,4576 - memset(p, 0, total); - 456e: 8622 mv a2,s0 - 4570: 4581 li a1,0 - 4572: 524000ef jal 4a96 -} - 4576: 60e2 ld ra,24(sp) - 4578: 6442 ld s0,16(sp) - 457a: 8526 mv a0,s1 - 457c: 64a2 ld s1,8(sp) - 457e: 6105 addi sp,sp,32 - 4580: 8082 ret - 4582: 60e2 ld ra,24(sp) - 4584: 6442 ld s0,16(sp) - errno = ENOMEM; - 4586: 47b1 li a5,12 - return NULL; - 4588: 4481 li s1,0 - errno = ENOMEM; - 458a: 00003717 auipc a4,0x3 - 458e: 0ef72b23 sw a5,246(a4) # 7680 -} - 4592: 8526 mv a0,s1 - 4594: 64a2 ld s1,8(sp) - 4596: 6105 addi sp,sp,32 - 4598: 8082 ret - -000000000000459a : - if (!ptr) - 459a: c929 beqz a0,45ec -{ - 459c: 1101 addi sp,sp,-32 - 459e: ec06 sd ra,24(sp) - 45a0: e426 sd s1,8(sp) - if (size == 0) - 45a2: c5b9 beqz a1,45f0 - if (bp->size >= new_size) - 45a4: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 45a8: 01f58793 addi a5,a1,31 - 45ac: e822 sd s0,16(sp) - 45ae: 9bc1 andi a5,a5,-16 - 45b0: 842a mv s0,a0 - return ptr; - 45b2: 84aa mv s1,a0 - if (bp->size >= new_size) - 45b4: 00f76863 bltu a4,a5,45c4 - 45b8: 6442 ld s0,16(sp) -} - 45ba: 60e2 ld ra,24(sp) - 45bc: 8526 mv a0,s1 - 45be: 64a2 ld s1,8(sp) - 45c0: 6105 addi sp,sp,32 - 45c2: 8082 ret - void *new_ptr = malloc(size); - 45c4: 852e mv a0,a1 - 45c6: ec7ff0ef jal 448c - 45ca: 84aa mv s1,a0 - if (!new_ptr) - 45cc: d575 beqz a0,45b8 - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 45ce: ff043603 ld a2,-16(s0) - 45d2: 85a2 mv a1,s0 - 45d4: 1641 addi a2,a2,-16 - 45d6: 514000ef jal 4aea - free(ptr); - 45da: 8522 mv a0,s0 - 45dc: e3bff0ef jal 4416 -} - 45e0: 60e2 ld ra,24(sp) - free(ptr); - 45e2: 6442 ld s0,16(sp) -} - 45e4: 8526 mv a0,s1 - 45e6: 64a2 ld s1,8(sp) - 45e8: 6105 addi sp,sp,32 - 45ea: 8082 ret - return malloc(size); - 45ec: 852e mv a0,a1 - 45ee: bd79 j 448c - free(ptr); - 45f0: e27ff0ef jal 4416 - return NULL; - 45f4: 4481 li s1,0 - 45f6: b7d1 j 45ba - -00000000000045f8 : - if (base < 0 || base == 1 || base > 36) - 45f8: 02400813 li a6,36 -{ - 45fc: 86aa mv a3,a0 - 45fe: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4600: 00c86663 bltu a6,a2,460c - 4604: 4805 li a6,1 - 4606: 01060363 beq a2,a6,460c - 460a: b939 j 4228 - if (endptr) - 460c: c311 beqz a4,4610 - *endptr = (char *)nptr; - 460e: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4610: 00003797 auipc a5,0x3 - 4614: 0607a823 sw zero,112(a5) # 7680 -} - 4618: 4501 li a0,0 - 461a: 8082 ret - -000000000000461c : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 461c: 1141 addi sp,sp,-16 - 461e: e406 sd ra,8(sp) - 4620: e022 sd s0,0(sp) - const char *s = nptr; - 4622: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 4624: 02000813 li a6,32 - 4628: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 462a: 0006c783 lbu a5,0(a3) - 462e: 0685 addi a3,a3,1 - 4630: ff77871b addiw a4,a5,-9 - 4634: 0ff77713 zext.b a4,a4 - 4638: 0007841b sext.w s0,a5 - 463c: ff0787e3 beq a5,a6,462a - 4640: fee8f5e3 bgeu a7,a4,462a - if (base < 0 || base == 1 || base > 36) - 4644: 02400793 li a5,36 - 4648: 02c7ec63 bltu a5,a2,4680 - 464c: 4785 li a5,1 - 464e: 02f60963 beq a2,a5,4680 - 4652: bd7ff0ef jal 4228 - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 4656: 00003797 auipc a5,0x3 - 465a: 02a78793 addi a5,a5,42 # 7680 - 465e: 4394 lw a3,0(a5) - 4660: 02200713 li a4,34 - 4664: 04e68363 beq a3,a4,46aa - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 4668: 02d00713 li a4,45 - 466c: 02e40563 beq s0,a4,4696 - 4670: 00055f63 bgez a0,468e - { - errno = ERANGE; - 4674: 02200713 li a4,34 - 4678: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 467a: 557d li a0,-1 - 467c: 8105 srli a0,a0,0x1 - 467e: a801 j 468e - if (endptr) - 4680: c191 beqz a1,4684 - *endptr = (char *)nptr; - 4682: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 4684: 00003797 auipc a5,0x3 - 4688: fe07ae23 sw zero,-4(a5) # 7680 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 468c: 4501 li a0,0 -} - 468e: 60a2 ld ra,8(sp) - 4690: 6402 ld s0,0(sp) - 4692: 0141 addi sp,sp,16 - 4694: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 4696: 577d li a4,-1 - 4698: 177e slli a4,a4,0x3f - 469a: 02a76263 bltu a4,a0,46be -} - 469e: 60a2 ld ra,8(sp) - 46a0: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 46a2: 40a00533 neg a0,a0 -} - 46a6: 0141 addi sp,sp,16 - 46a8: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 46aa: 577d li a4,-1 - 46ac: fae51ee3 bne a0,a4,4668 - return neg ? LLONG_MIN : LLONG_MAX; - 46b0: 02d00793 li a5,45 - 46b4: fcf413e3 bne s0,a5,467a - return LLONG_MIN; - 46b8: 557d li a0,-1 - 46ba: 157e slli a0,a0,0x3f - 46bc: bfc9 j 468e - errno = ERANGE; - 46be: 02200713 li a4,34 - 46c2: c398 sw a4,0(a5) - return LLONG_MIN; - 46c4: bfd5 j 46b8 - -00000000000046c6 : - if (base < 0 || base == 1 || base > 36) - 46c6: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 46ca: 86aa mv a3,a0 - 46cc: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 46ce: 00c86663 bltu a6,a2,46da - 46d2: 4805 li a6,1 - 46d4: 01060363 beq a2,a6,46da - 46d8: be81 j 4228 - if (endptr) - 46da: c311 beqz a4,46de - *endptr = (char *)nptr; - 46dc: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 46de: 00003797 auipc a5,0x3 - 46e2: fa07a123 sw zero,-94(a5) # 7680 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 46e6: 4501 li a0,0 - 46e8: 8082 ret - -00000000000046ea : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 46ea: bf0d j 461c - -00000000000046ec : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46ec: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 46ee: 4629 li a2,10 - 46f0: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46f2: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 46f4: f29ff0ef jal 461c -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46f8: 60a2 ld ra,8(sp) - 46fa: 2501 sext.w a0,a0 - 46fc: 0141 addi sp,sp,16 - 46fe: 8082 ret - -0000000000004700 : - long long ret = strtoll(nptr, endptr, base); - 4700: 4629 li a2,10 - 4702: 4581 li a1,0 - 4704: bf21 j 461c - -0000000000004706 : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 4706: 4629 li a2,10 - 4708: 4581 li a1,0 - 470a: bf09 j 461c - -000000000000470c : - 470c: 02000693 li a3,32 - 4710: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 4712: 00054783 lbu a5,0(a0) - 4716: ff77871b addiw a4,a5,-9 - 471a: 0ff77713 zext.b a4,a4 - 471e: 06d78263 beq a5,a3,4782 - 4722: 06e67063 bgeu a2,a4,4782 - s++; - if (*s == '-') - 4726: 02d00713 li a4,45 - 472a: 08e78e63 beq a5,a4,47c6 - { - sign = -1; - s++; - } - else if (*s == '+') - 472e: 02b00713 li a4,43 - 4732: 0ae78263 beq a5,a4,47d6 - 4736: 00001717 auipc a4,0x1 - 473a: 06273507 fld fa0,98(a4) # 5798 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 473e: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 4742: 46a5 li a3,9 - 4744: f20007d3 fmv.d.x fa5,zero - 4748: 8732 mv a4,a2 - 474a: 02c6e363 bltu a3,a2,4770 - 474e: 00001797 auipc a5,0x1 - 4752: 0527b687 fld fa3,82(a5) # 57a0 - 4756: 4625 li a2,9 - 4758: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 475c: d2070753 fcvt.d.w fa4,a4 - s++; - 4760: 0505 addi a0,a0,1 - 4762: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 4766: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 476a: 8736 mv a4,a3 - while (isdigit(*s)) - 476c: fed676e3 bgeu a2,a3,4758 - } - if (*s == '.') - 4770: 02e00713 li a4,46 - 4774: 00e78963 beq a5,a4,4786 - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 4778: c191 beqz a1,477c - *endptr = (char *)s; - 477a: e188 sd a0,0(a1) - return val * sign; -} - 477c: 12a7f553 fmul.d fa0,fa5,fa0 - 4780: 8082 ret - s++; - 4782: 0505 addi a0,a0,1 - 4784: b779 j 4712 - while (isdigit(*s)) - 4786: 00154703 lbu a4,1(a0) - 478a: 46a5 li a3,9 - s++; - 478c: 0505 addi a0,a0,1 - 478e: fd07071b addiw a4,a4,-48 - 4792: 87ba mv a5,a4 - while (isdigit(*s)) - 4794: fee6e2e3 bltu a3,a4,4778 - double factor = 1.0; - 4798: 00001717 auipc a4,0x1 - 479c: 00073707 fld fa4,0(a4) # 5798 - 47a0: 00001717 auipc a4,0x1 - 47a4: 01873607 fld fa2,24(a4) # 57b8 - factor *= 0.1; - 47a8: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 47ac: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 47b0: d20786d3 fcvt.d.w fa3,a5 - s++; - 47b4: 0505 addi a0,a0,1 - 47b6: fd07071b addiw a4,a4,-48 - 47ba: 87ba mv a5,a4 - val += (*s - '0') * factor; - 47bc: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 47c0: fee6f4e3 bgeu a3,a4,47a8 - 47c4: bf55 j 4778 - while (isdigit(*s)) - 47c6: 00154783 lbu a5,1(a0) - 47ca: 00001717 auipc a4,0x1 - 47ce: fc673507 fld fa0,-58(a4) # 5790 - s++; - 47d2: 0505 addi a0,a0,1 - 47d4: b7ad j 473e - while (isdigit(*s)) - 47d6: 00154783 lbu a5,1(a0) - 47da: 00001717 auipc a4,0x1 - 47de: fbe73507 fld fa0,-66(a4) # 5798 - s++; - 47e2: 0505 addi a0,a0,1 - 47e4: bfa9 j 473e - -00000000000047e6 : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 47e6: 4581 li a1,0 - 47e8: b715 j 470c - -00000000000047ea : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 47ea: 1141 addi sp,sp,-16 - 47ec: e406 sd ra,8(sp) - 47ee: f1fff0ef jal 470c - 47f2: 60a2 ld ra,8(sp) - 47f4: 40157553 fcvt.s.d fa0,fa0 - 47f8: 0141 addi sp,sp,16 - 47fa: 8082 ret - -00000000000047fc : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 47fc: 4785 li a5,1 - 47fe: 0cb7fd63 bgeu a5,a1,48d8 -{ - 4802: 715d addi sp,sp,-80 - 4804: f44e sd s3,40(sp) - 4806: e486 sd ra,72(sp) - 4808: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 480a: c279 beqz a2,48d0 - 480c: e85a sd s6,16(sp) - 480e: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 4810: 1b7d addi s6,s6,-1 - 4812: fc26 sd s1,56(sp) - 4814: 033b04b3 mul s1,s6,s3 - 4818: ec56 sd s5,24(sp) - 481a: 8aaa mv s5,a0 - 481c: f052 sd s4,32(sp) - 481e: e45e sd s7,8(sp) - 4820: e0a2 sd s0,64(sp) - 4822: f84a sd s2,48(sp) - 4824: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 4826: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 4828: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 482a: 069af763 bgeu s5,s1,4898 - char *j = base_ptr; - 482e: 8956 mv s2,s5 - char *i = base_ptr; - 4830: 8456 mv s0,s5 - 4832: a021 j 483a - for (; j < pivot; j += size) - 4834: 994e add s2,s2,s3 - 4836: 00997f63 bgeu s2,s1,4854 - { - if (compar(j, pivot) < 0) - 483a: 85a6 mv a1,s1 - 483c: 854a mv a0,s2 - 483e: 9a02 jalr s4 - 4840: fe055ae3 bgez a0,4834 - { - if (i != j) - 4844: 05241d63 bne s0,s2,489e - 4848: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 484c: 8432 mv s0,a2 - for (; j < pivot; j += size) - 484e: 994e add s2,s2,s3 - 4850: fe9965e3 bltu s2,s1,483a - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 4854: 415405b3 sub a1,s0,s5 - 4858: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 485c: 40bb0b33 sub s6,s6,a1 - while (size--) - 4860: 013406b3 add a3,s0,s3 - *a++ = *b; - 4864: 0004c703 lbu a4,0(s1) - temp = *a; - 4868: 00044783 lbu a5,0(s0) - *b++ = temp; - 486c: 0485 addi s1,s1,1 - *a++ = *b; - 486e: 0405 addi s0,s0,1 - 4870: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 4874: fef48fa3 sb a5,-1(s1) - while (size--) - 4878: fed416e3 bne s0,a3,4864 - qsort(base, left_count, size, compar); - 487c: 86d2 mv a3,s4 - 487e: 864e mv a2,s3 - 4880: 8556 mv a0,s5 - 4882: f7bff0ef jal 47fc - if (nmemb < 2 || size == 0) - 4886: 036bfe63 bgeu s7,s6,48c2 - char *pivot = base_ptr + (nmemb - 1) * size; - 488a: 1b7d addi s6,s6,-1 - 488c: 033b04b3 mul s1,s6,s3 - 4890: 8aa2 mv s5,s0 - 4892: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 4894: f89aede3 bltu s5,s1,482e - char *i = base_ptr; - 4898: 8456 mv s0,s5 - for (; j < pivot; j += size) - 489a: 4581 li a1,0 - 489c: b7d1 j 4860 - 489e: 01340633 add a2,s0,s3 - if (i != j) - 48a2: 874a mv a4,s2 - 48a4: 87a2 mv a5,s0 - *a++ = *b; - 48a6: 00074683 lbu a3,0(a4) - temp = *a; - 48aa: 0007c803 lbu a6,0(a5) - *b++ = temp; - 48ae: 0705 addi a4,a4,1 - *a++ = *b; - 48b0: 0785 addi a5,a5,1 - 48b2: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 48b6: ff070fa3 sb a6,-1(a4) - while (size--) - 48ba: fec796e3 bne a5,a2,48a6 - i += size; - 48be: 8432 mv s0,a2 - 48c0: b779 j 484e - 48c2: 6406 ld s0,64(sp) - 48c4: 74e2 ld s1,56(sp) - 48c6: 7942 ld s2,48(sp) - 48c8: 7a02 ld s4,32(sp) - 48ca: 6ae2 ld s5,24(sp) - 48cc: 6b42 ld s6,16(sp) - 48ce: 6ba2 ld s7,8(sp) -} - 48d0: 60a6 ld ra,72(sp) - 48d2: 79a2 ld s3,40(sp) - 48d4: 6161 addi sp,sp,80 - 48d6: 8082 ret - 48d8: 8082 ret - -00000000000048da : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 48da: 715d addi sp,sp,-80 - 48dc: e486 sd ra,72(sp) - 48de: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 48e0: c629 beqz a2,492a - 48e2: f84a sd s2,48(sp) - 48e4: f44e sd s3,40(sp) - 48e6: f052 sd s4,32(sp) - 48e8: ec56 sd s5,24(sp) - 48ea: e85a sd s6,16(sp) - 48ec: e45e sd s7,8(sp) - 48ee: e0a2 sd s0,64(sp) - 48f0: 8932 mv s2,a2 - 48f2: 8a2a mv s4,a0 - 48f4: 8aae mv s5,a1 - 48f6: 8b36 mv s6,a3 - 48f8: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 48fa: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 48fc: 01298433 add s0,s3,s2 - 4900: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 4902: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 4906: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 4908: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 490a: 85a6 mv a1,s1 - 490c: 9b82 jalr s7 - if (cmp < 0) - 490e: 02054463 bltz a0,4936 - u = idx; - else if (cmp > 0) - 4912: c515 beqz a0,493e - l = idx + 1; - 4914: 00140993 addi s3,s0,1 - while (l < u) - 4918: ff29e2e3 bltu s3,s2,48fc - 491c: 6406 ld s0,64(sp) - 491e: 7942 ld s2,48(sp) - 4920: 79a2 ld s3,40(sp) - 4922: 7a02 ld s4,32(sp) - 4924: 6ae2 ld s5,24(sp) - 4926: 6b42 ld s6,16(sp) - 4928: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 492a: 60a6 ld ra,72(sp) - return NULL; - 492c: 4481 li s1,0 -} - 492e: 8526 mv a0,s1 - 4930: 74e2 ld s1,56(sp) - 4932: 6161 addi sp,sp,80 - 4934: 8082 ret - u = idx; - 4936: 8922 mv s2,s0 - while (l < u) - 4938: fd29e2e3 bltu s3,s2,48fc - 493c: b7c5 j 491c - 493e: 6406 ld s0,64(sp) -} - 4940: 60a6 ld ra,72(sp) - 4942: 7942 ld s2,48(sp) - 4944: 79a2 ld s3,40(sp) - 4946: 7a02 ld s4,32(sp) - 4948: 6ae2 ld s5,24(sp) - 494a: 6b42 ld s6,16(sp) - 494c: 6ba2 ld s7,8(sp) - 494e: 8526 mv a0,s1 - 4950: 74e2 ld s1,56(sp) - 4952: 6161 addi sp,sp,80 - 4954: 8082 ret - -0000000000004956 : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 4956: 41f5579b sraiw a5,a0,0x1f - 495a: 8d3d xor a0,a0,a5 - 495c: 9d1d subw a0,a0,a5 - 495e: 8082 ret - -0000000000004960 : -long labs(long j) { return (j < 0) ? -j : j; } - 4960: 43f55793 srai a5,a0,0x3f - 4964: 8d3d xor a0,a0,a5 - 4966: 8d1d sub a0,a0,a5 - 4968: 8082 ret - -000000000000496a : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 496a: 43f55793 srai a5,a0,0x3f - 496e: 8d3d xor a0,a0,a5 - 4970: 8d1d sub a0,a0,a5 - 4972: 8082 ret - -0000000000004974
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 4974: 02b547bb divw a5,a0,a1 -{ - 4978: 1141 addi sp,sp,-16 - return res; -} - 497a: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 497c: 02b5653b remw a0,a0,a1 - return res; - 4980: 1782 slli a5,a5,0x20 - 4982: 9381 srli a5,a5,0x20 - 4984: 1502 slli a0,a0,0x20 -} - 4986: 8d5d or a0,a0,a5 - 4988: 8082 ret - -000000000000498a : -ldiv_t ldiv(long numer, long denom) -{ - 498a: 1141 addi sp,sp,-16 - 498c: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 498e: 02b54533 div a0,a0,a1 - 4992: 0141 addi sp,sp,16 - 4994: 02b7e5b3 rem a1,a5,a1 - 4998: 8082 ret - -000000000000499a : -lldiv_t lldiv(long long numer, long long denom) -{ - 499a: 1141 addi sp,sp,-16 - 499c: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 499e: 02b54533 div a0,a0,a1 - 49a2: 0141 addi sp,sp,16 - 49a4: 02b7e5b3 rem a1,a5,a1 - 49a8: 8082 ret - -00000000000049aa : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 49aa: 00003697 auipc a3,0x3 - 49ae: c8e68693 addi a3,a3,-882 # 7638 - 49b2: 629c ld a5,0(a3) - 49b4: 41c65737 lui a4,0x41c65 - 49b8: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d6b5> - 49bc: 02e787b3 mul a5,a5,a4 - 49c0: 670d lui a4,0x3 - 49c2: 03970713 addi a4,a4,57 # 3039 <_vprintf_core.constprop.0.isra.0+0x1f> - 49c6: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 49c8: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 49cc: e29c sd a5,0(a3) -} - 49ce: 9145 srli a0,a0,0x31 - 49d0: 8082 ret - -00000000000049d2 : -void srand(unsigned int seed) { next = seed; } - 49d2: 1502 slli a0,a0,0x20 - 49d4: 9101 srli a0,a0,0x20 - 49d6: 00003797 auipc a5,0x3 - 49da: c6a7b123 sd a0,-926(a5) # 7638 - 49de: 8082 ret - -00000000000049e0 : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 49e0: c901 beqz a0,49f0 - 49e2: 00054783 lbu a5,0(a0) - 49e6: 4501 li a0,0 - 49e8: c789 beqz a5,49f2 - 49ea: 00b03533 snez a0,a1 - 49ee: 8082 ret - 49f0: 4501 li a0,0 - 49f2: 8082 ret - -00000000000049f4 : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 49f4: 87aa mv a5,a0 - if (!s) - 49f6: cd81 beqz a1,4a0e - return 0; - if (n == 0) - return -1; - 49f8: 557d li a0,-1 - if (n == 0) - 49fa: ca19 beqz a2,4a10 - if (pwc) - 49fc: c781 beqz a5,4a04 - *pwc = (wchar_t)*s; - 49fe: 0005c703 lbu a4,0(a1) - 4a02: c398 sw a4,0(a5) - return (*s != 0); - 4a04: 0005c503 lbu a0,0(a1) - 4a08: 00a03533 snez a0,a0 - 4a0c: 8082 ret - return 0; - 4a0e: 4501 li a0,0 -} - 4a10: 8082 ret - -0000000000004a12 : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 4a12: c509 beqz a0,4a1c - return 0; - *s = (char)wchar; - 4a14: 00b50023 sb a1,0(a0) - return 1; - 4a18: 4505 li a0,1 - 4a1a: 8082 ret - return 0; - 4a1c: 4501 li a0,0 -} - 4a1e: 8082 ret - -0000000000004a20 : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a20: 0005c703 lbu a4,0(a1) - 4a24: cb0d beqz a4,4a56 - 4a26: ca15 beqz a2,4a5a - 4a28: 86aa mv a3,a0 - size_t i = 0; - 4a2a: 4781 li a5,0 - 4a2c: a019 j 4a32 - while (src[i] && i < n) - 4a2e: 02f60263 beq a2,a5,4a52 - { - dest[i] = (wchar_t)src[i]; - i++; - 4a32: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 4a34: c298 sw a4,0(a3) - while (src[i] && i < n) - 4a36: 00f58733 add a4,a1,a5 - 4a3a: 00074703 lbu a4,0(a4) - 4a3e: 0691 addi a3,a3,4 - 4a40: f77d bnez a4,4a2e - } - if (i < n) - 4a42: 00c7f763 bgeu a5,a2,4a50 - dest[i] = 0; - 4a46: 00279713 slli a4,a5,0x2 - 4a4a: 953a add a0,a0,a4 - 4a4c: 00052023 sw zero,0(a0) - size_t i = 0; - 4a50: 863e mv a2,a5 - 4a52: 8532 mv a0,a2 - 4a54: 8082 ret - 4a56: 4781 li a5,0 - 4a58: b7ed j 4a42 - 4a5a: 4501 li a0,0 - return i; -} - 4a5c: 8082 ret - -0000000000004a5e : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a5e: 4198 lw a4,0(a1) - 4a60: c71d beqz a4,4a8e - 4a62: ca05 beqz a2,4a92 - 4a64: 0591 addi a1,a1,4 - size_t i = 0; - 4a66: 4781 li a5,0 - 4a68: a019 j 4a6e - while (src[i] && i < n) - 4a6a: 02f60063 beq a2,a5,4a8a - { - dest[i] = (char)src[i]; - 4a6e: 00f506b3 add a3,a0,a5 - 4a72: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 4a76: 4198 lw a4,0(a1) - i++; - 4a78: 0785 addi a5,a5,1 - while (src[i] && i < n) - 4a7a: 0591 addi a1,a1,4 - 4a7c: f77d bnez a4,4a6a - } - if (i < n) - 4a7e: 00c7f563 bgeu a5,a2,4a88 - dest[i] = 0; - 4a82: 953e add a0,a0,a5 - 4a84: 00050023 sb zero,0(a0) - size_t i = 0; - 4a88: 863e mv a2,a5 - 4a8a: 8532 mv a0,a2 - 4a8c: 8082 ret - 4a8e: 4781 li a5,0 - 4a90: b7fd j 4a7e - 4a92: 4501 li a0,0 - return i; - 4a94: 8082 ret - -0000000000004a96 : - -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; - 4a96: 0ff5f593 zext.b a1,a1 - 4a9a: 87aa mv a5,a0 - 4a9c: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 4aa0: c611 beqz a2,4aac - cdst[i] = (char)c; - 4aa2: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 4aa6: 0785 addi a5,a5,1 - 4aa8: fee79de3 bne a5,a4,4aa2 - return dst; -} - 4aac: 8082 ret - -0000000000004aae : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 4aae: 02b50d63 beq a0,a1,4ae8 - return vdst; - - if (src > dst) - 4ab2: 00b57e63 bgeu a0,a1,4ace - { - while (n--) - 4ab6: ca0d beqz a2,4ae8 - 4ab8: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 4aba: 87aa mv a5,a0 - *dst++ = *src++; - 4abc: 0005c703 lbu a4,0(a1) - 4ac0: 0785 addi a5,a5,1 - 4ac2: 0585 addi a1,a1,1 - 4ac4: fee78fa3 sb a4,-1(a5) - while (n--) - 4ac8: fec79ae3 bne a5,a2,4abc - 4acc: 8082 ret - } - else - { - dst += n; - 4ace: 00c50733 add a4,a0,a2 - src += n; - 4ad2: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 4ad6: ca09 beqz a2,4ae8 - *--dst = *--src; - 4ad8: fff7c683 lbu a3,-1(a5) - 4adc: 17fd addi a5,a5,-1 - 4ade: 177d addi a4,a4,-1 - 4ae0: 00d70023 sb a3,0(a4) - while (n-- > 0) - 4ae4: fef59ae3 bne a1,a5,4ad8 - } - return vdst; -} - 4ae8: 8082 ret - -0000000000004aea : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 4aea: b7d1 j 4aae - -0000000000004aec : - -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--) - 4aec: c205 beqz a2,4b0c - 4aee: 962a add a2,a2,a0 - 4af0: a019 j 4af6 - 4af2: 00c50d63 beq a0,a2,4b0c - { - if (*p1 != *p2) - 4af6: 00054783 lbu a5,0(a0) - 4afa: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 4afe: 0505 addi a0,a0,1 - p2++; - 4b00: 0585 addi a1,a1,1 - if (*p1 != *p2) - 4b02: fee788e3 beq a5,a4,4af2 - return *p1 - *p2; - 4b06: 40e7853b subw a0,a5,a4 - 4b0a: 8082 ret - } - return 0; - 4b0c: 4501 li a0,0 -} - 4b0e: 8082 ret - -0000000000004b10 : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 4b10: ce09 beqz a2,4b2a - { - if (*p == (unsigned char)c) - 4b12: 0ff5f593 zext.b a1,a1 - 4b16: 962a add a2,a2,a0 - 4b18: a021 j 4b20 - return (void *)p; - p++; - 4b1a: 0505 addi a0,a0,1 - while (n--) - 4b1c: 00a60763 beq a2,a0,4b2a - if (*p == (unsigned char)c) - 4b20: 00054783 lbu a5,0(a0) - 4b24: feb79be3 bne a5,a1,4b1a - } - return NULL; -} - 4b28: 8082 ret - return NULL; - 4b2a: 4501 li a0,0 -} - 4b2c: 8082 ret - -0000000000004b2e : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 4b2e: 00054783 lbu a5,0(a0) - 4b32: cb89 beqz a5,4b44 - const char *p = s; - 4b34: 87aa mv a5,a0 - while (*p) - 4b36: 0017c703 lbu a4,1(a5) - p++; - 4b3a: 0785 addi a5,a5,1 - while (*p) - 4b3c: ff6d bnez a4,4b36 - return (size_t)(p - s); - 4b3e: 40a78533 sub a0,a5,a0 - 4b42: 8082 ret - while (*p) - 4b44: 4501 li a0,0 -} - 4b46: 8082 ret - -0000000000004b48 : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 4b48: 87aa mv a5,a0 - 4b4a: 0005c703 lbu a4,0(a1) - 4b4e: 0785 addi a5,a5,1 - 4b50: 0585 addi a1,a1,1 - 4b52: fee78fa3 sb a4,-1(a5) - 4b56: fb75 bnez a4,4b4a - ; - return os; -} - 4b58: 8082 ret - -0000000000004b5a : -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++) - 4b5a: 4781 li a5,0 - 4b5c: e619 bnez a2,4b6a - 4b5e: 8082 ret - dst[i] = src[i]; - 4b60: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4b64: 0785 addi a5,a5,1 - 4b66: 02f60263 beq a2,a5,4b8a - 4b6a: 00f58733 add a4,a1,a5 - 4b6e: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 4b72: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 4b76: f76d bnez a4,4b60 - - for (; i < n; i++) - 4b78: 00c7f963 bgeu a5,a2,4b8a - 4b7c: 87b6 mv a5,a3 - 4b7e: 962a add a2,a2,a0 - dst[i] = '\0'; - 4b80: 00078023 sb zero,0(a5) - for (; i < n; i++) - 4b84: 0785 addi a5,a5,1 - 4b86: fec79de3 bne a5,a2,4b80 - - return os; -} - 4b8a: 8082 ret - -0000000000004b8c : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 4b8c: 00054783 lbu a5,0(a0) - 4b90: cf91 beqz a5,4bac - 4b92: 87aa mv a5,a0 - 4b94: 0017c703 lbu a4,1(a5) - dst++; - 4b98: 0785 addi a5,a5,1 - while (*dst) - 4b9a: ff6d bnez a4,4b94 - while ((*dst++ = *src++) != 0) - 4b9c: 0005c703 lbu a4,0(a1) - 4ba0: 0785 addi a5,a5,1 - 4ba2: 0585 addi a1,a1,1 - 4ba4: fee78fa3 sb a4,-1(a5) - 4ba8: fb75 bnez a4,4b9c - ; - return os; -} - 4baa: 8082 ret - while ((*dst++ = *src++) != 0) - 4bac: 0005c703 lbu a4,0(a1) - while (*dst) - 4bb0: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 4bb2: 0785 addi a5,a5,1 - 4bb4: fee78fa3 sb a4,-1(a5) - 4bb8: 0585 addi a1,a1,1 - 4bba: f36d bnez a4,4b9c - 4bbc: 8082 ret - -0000000000004bbe : - while (*p) - 4bbe: 00054783 lbu a5,0(a0) - const char *p = s; - 4bc2: 872a mv a4,a0 - while (*p) - 4bc4: c789 beqz a5,4bce - 4bc6: 00174783 lbu a5,1(a4) - p++; - 4bca: 0705 addi a4,a4,1 - while (*p) - 4bcc: ffed bnez a5,4bc6 - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 4bce: 86ba mv a3,a4 - 4bd0: 4781 li a5,0 - 4bd2: 88ba mv a7,a4 - 4bd4: ea01 bnez a2,4be4 - 4bd6: a839 j 4bf4 - dst[i] = src[i]; - 4bd8: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4bdc: 00188693 addi a3,a7,1 - 4be0: 00f60d63 beq a2,a5,4bfa - 4be4: 00f58833 add a6,a1,a5 - 4be8: 00084803 lbu a6,0(a6) - 4bec: 0785 addi a5,a5,1 - dst[i] = src[i]; - 4bee: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 4bf0: fe0814e3 bnez a6,4bd8 - - dst[i] = '\0'; - 4bf4: 00088023 sb zero,0(a7) - - return os; -} - 4bf8: 8082 ret - dst[i] = '\0'; - 4bfa: 00c708b3 add a7,a4,a2 - 4bfe: 00088023 sb zero,0(a7) -} - 4c02: 8082 ret - -0000000000004c04 : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 4c04: 00054783 lbu a5,0(a0) - 4c08: e791 bnez a5,4c14 - 4c0a: a02d j 4c34 - 4c0c: 00054783 lbu a5,0(a0) - 4c10: cf89 beqz a5,4c2a - 4c12: 85b6 mv a1,a3 - 4c14: 0005c703 lbu a4,0(a1) - { - p++; - 4c18: 0505 addi a0,a0,1 - q++; - 4c1a: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 4c1e: fef707e3 beq a4,a5,4c0c - } - return (int)((unsigned char)*p - (unsigned char)*q); - 4c22: 0007851b sext.w a0,a5 -} - 4c26: 9d19 subw a0,a0,a4 - 4c28: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c2a: 0015c703 lbu a4,1(a1) - 4c2e: 4501 li a0,0 -} - 4c30: 9d19 subw a0,a0,a4 - 4c32: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c34: 0005c703 lbu a4,0(a1) - 4c38: 4501 li a0,0 - 4c3a: b7f5 j 4c26 - -0000000000004c3c : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 4c3c: ca0d beqz a2,4c6e - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 4c3e: 00054783 lbu a5,0(a0) - 4c42: 167d addi a2,a2,-1 - 4c44: 00c506b3 add a3,a0,a2 - 4c48: eb89 bnez a5,4c5a - 4c4a: a80d j 4c7c - { - if (n == 0 || *s1 == '\0') - 4c4c: 00d50d63 beq a0,a3,4c66 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c50: 00154783 lbu a5,1(a0) - break; - s1++; - 4c54: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c56: cf91 beqz a5,4c72 - 4c58: 85b2 mv a1,a2 - 4c5a: 0005c703 lbu a4,0(a1) - s2++; - 4c5e: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c62: fef705e3 beq a4,a5,4c4c - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c66: 0007851b sext.w a0,a5 - 4c6a: 9d19 subw a0,a0,a4 - 4c6c: 8082 ret - return 0; - 4c6e: 4501 li a0,0 -} - 4c70: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c72: 0015c703 lbu a4,1(a1) - 4c76: 4501 li a0,0 - 4c78: 9d19 subw a0,a0,a4 - 4c7a: 8082 ret - 4c7c: 0005c703 lbu a4,0(a1) - 4c80: 4501 li a0,0 - 4c82: b7e5 j 4c6a - -0000000000004c84 : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 4c84: 0ff5f593 zext.b a1,a1 - 4c88: a019 j 4c8e - { - if (!*s++) - 4c8a: 0505 addi a0,a0,1 - 4c8c: c791 beqz a5,4c98 - while (*s != (char)c) - 4c8e: 00054783 lbu a5,0(a0) - 4c92: feb79ce3 bne a5,a1,4c8a - 4c96: 8082 ret - return NULL; - 4c98: 4501 li a0,0 - } - return (char *)s; -} - 4c9a: 8082 ret - -0000000000004c9c : - -char *strrchr(const char *s, int c) -{ - 4c9c: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 4c9e: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 4ca2: 4501 li a0,0 - if (*s == (char)c) - 4ca4: 0007c703 lbu a4,0(a5) - 4ca8: 00e59363 bne a1,a4,4cae - last = s; - 4cac: 853e mv a0,a5 - } while (*s++); - 4cae: 0785 addi a5,a5,1 - 4cb0: fb75 bnez a4,4ca4 - - return (char *)last; -} - 4cb2: 8082 ret - -0000000000004cb4 : - while (*p) - 4cb4: 0005c883 lbu a7,0(a1) - 4cb8: 04088a63 beqz a7,4d0c - const char *p = s; - 4cbc: 87ae mv a5,a1 - while (*p) - 4cbe: 0017c703 lbu a4,1(a5) - p++; - 4cc2: 0785 addi a5,a5,1 - while (*p) - 4cc4: ff6d bnez a4,4cbe - return (size_t)(p - s); - 4cc6: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 4cca: 04b78163 beq a5,a1,4d0c - return (char *)haystack; - - for (; *haystack; haystack++) - 4cce: 00054783 lbu a5,0(a0) - 4cd2: cf85 beqz a5,4d0a - 4cd4: 187d addi a6,a6,-1 - 4cd6: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 4cd8: 02f89463 bne a7,a5,4d00 - while (n-- > 0 && *s1 && *s1 == *s2) - 4cdc: 00054703 lbu a4,0(a0) - 4ce0: 8646 mv a2,a7 - 4ce2: 86ae mv a3,a1 - 4ce4: 87aa mv a5,a0 - 4ce6: eb11 bnez a4,4cfa - 4ce8: a821 j 4d00 - if (n == 0 || *s1 == '\0') - 4cea: 03078163 beq a5,a6,4d0c - while (n-- > 0 && *s1 && *s1 == *s2) - 4cee: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4cf2: 0006c603 lbu a2,0(a3) - s1++; - 4cf6: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4cf8: cb19 beqz a4,4d0e - s2++; - 4cfa: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4cfc: fee607e3 beq a2,a4,4cea - for (; *haystack; haystack++) - 4d00: 00154783 lbu a5,1(a0) - 4d04: 0805 addi a6,a6,1 - 4d06: 0505 addi a0,a0,1 - 4d08: fbe1 bnez a5,4cd8 - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 4d0a: 4501 li a0,0 -} - 4d0c: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 4d0e: de7d beqz a2,4d0c - for (; *haystack; haystack++) - 4d10: 00154783 lbu a5,1(a0) - 4d14: 0805 addi a6,a6,1 - 4d16: 0505 addi a0,a0,1 - 4d18: f3e1 bnez a5,4cd8 - 4d1a: bfc5 j 4d0a - -0000000000004d1c : - -char *strdup(const char *s) -{ - 4d1c: 1101 addi sp,sp,-32 - 4d1e: e426 sd s1,8(sp) - 4d20: ec06 sd ra,24(sp) - 4d22: e822 sd s0,16(sp) - while (*p) - 4d24: 00054783 lbu a5,0(a0) -{ - 4d28: 84aa mv s1,a0 - while (*p) - 4d2a: cb8d beqz a5,4d5c - const char *p = s; - 4d2c: 862a mv a2,a0 - while (*p) - 4d2e: 00164783 lbu a5,1(a2) - p++; - 4d32: 0605 addi a2,a2,1 - while (*p) - 4d34: ffed bnez a5,4d2e - return (size_t)(p - s); - 4d36: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 4d38: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 4d3c: 8522 mv a0,s0 - 4d3e: f4eff0ef jal 448c - if (new_str == NULL) - 4d42: c901 beqz a0,4d52 - return memmove(vdst, vsrc, n); - 4d44: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 4d46: 6442 ld s0,16(sp) - 4d48: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 4d4a: 85a6 mv a1,s1 -} - 4d4c: 64a2 ld s1,8(sp) - 4d4e: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 4d50: bbb9 j 4aae -} - 4d52: 60e2 ld ra,24(sp) - 4d54: 6442 ld s0,16(sp) - 4d56: 64a2 ld s1,8(sp) - 4d58: 6105 addi sp,sp,32 - 4d5a: 8082 ret - while (*p) - 4d5c: 4405 li s0,1 - 4d5e: bff9 j 4d3c - -0000000000004d60 : - 4d60: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 4d64: 1101 addi sp,sp,-32 - 4d66: ec06 sd ra,24(sp) - 4d68: e822 sd s0,16(sp) - 4d6a: 86b2 mv a3,a2 - while (*p) - 4d6c: cf8d beqz a5,4da6 - const char *p = s; - 4d6e: 87ae mv a5,a1 - while (*p) - 4d70: 0017c703 lbu a4,1(a5) - p++; - 4d74: 0785 addi a5,a5,1 - while (*p) - 4d76: ff6d bnez a4,4d70 - return (size_t)(p - s); - 4d78: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 4d7c: c285 beqz a3,4d9c - 4d7e: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d80: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 4d84: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d88: 00d47563 bgeu s0,a3,4d92 - dst[copy_len] = '\0'; - 4d8c: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d90: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 4d92: d1dff0ef jal 4aae - dst[copy_len] = '\0'; - 4d96: 00048023 sb zero,0(s1) - } - - return src_len; - 4d9a: 64a2 ld s1,8(sp) -} - 4d9c: 60e2 ld ra,24(sp) - 4d9e: 8522 mv a0,s0 - 4da0: 6442 ld s0,16(sp) - 4da2: 6105 addi sp,sp,32 - 4da4: 8082 ret - if (size > 0) - 4da6: e219 bnez a2,4dac - return (size_t)(p - s); - 4da8: 4401 li s0,0 - 4daa: bfcd j 4d9c - 4dac: e426 sd s1,8(sp) - 4dae: 4401 li s0,0 - if (size > 0) - 4db0: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4db2: 4601 li a2,0 - 4db4: bff9 j 4d92 - -0000000000004db6 : - while (*p) - 4db6: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 4dba: 7179 addi sp,sp,-48 - 4dbc: e84a sd s2,16(sp) - 4dbe: f406 sd ra,40(sp) - 4dc0: f022 sd s0,32(sp) - 4dc2: ec26 sd s1,24(sp) - 4dc4: 892a mv s2,a0 - while (*p) - 4dc6: c7b5 beqz a5,4e32 - const char *p = s; - 4dc8: 87ae mv a5,a1 - while (*p) - 4dca: 0017c703 lbu a4,1(a5) - p++; - 4dce: 0785 addi a5,a5,1 - while (*p) - 4dd0: ff6d bnez a4,4dca - return (size_t)(p - s); - 4dd2: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 4dd6: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 4dd8: e609 bnez a2,4de2 - 4dda: a0a1 j 4e22 - dst_len++; - 4ddc: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 4dde: 04860263 beq a2,s0,4e22 - 4de2: 00890533 add a0,s2,s0 - 4de6: 00054783 lbu a5,0(a0) - 4dea: fbed bnez a5,4ddc - - if (dst_len == size) - 4dec: 02860b63 beq a2,s0,4e22 - 4df0: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 4df2: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4df6: 89a6 mv s3,s1 - 4df8: 02f4f263 bgeu s1,a5,4e1c - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 4dfc: 994e add s2,s2,s3 - 4dfe: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 4e00: 864e mv a2,s3 - 4e02: cadff0ef jal 4aae - dst[dst_len + copy_len] = '\0'; - 4e06: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x6ca> - - return dst_len + src_len; - 4e0a: 00940533 add a0,s0,s1 -} - 4e0e: 70a2 ld ra,40(sp) - 4e10: 7402 ld s0,32(sp) - return dst_len + src_len; - 4e12: 69a2 ld s3,8(sp) -} - 4e14: 64e2 ld s1,24(sp) - 4e16: 6942 ld s2,16(sp) - 4e18: 6145 addi sp,sp,48 - 4e1a: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e1c: fff78993 addi s3,a5,-1 - 4e20: bff1 j 4dfc -} - 4e22: 70a2 ld ra,40(sp) - 4e24: 7402 ld s0,32(sp) - 4e26: 6942 ld s2,16(sp) - return size + src_len; - 4e28: 00960533 add a0,a2,s1 -} - 4e2c: 64e2 ld s1,24(sp) - 4e2e: 6145 addi sp,sp,48 - 4e30: 8082 ret - while (*p) - 4e32: 4481 li s1,0 - 4e34: b74d j 4dd6 - -0000000000004e36 : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 4e36: 00054683 lbu a3,0(a0) - 4e3a: c695 beqz a3,4e66 - { - for (a = accept; *a; a++) - 4e3c: 0005c803 lbu a6,0(a1) - 4e40: 862a mv a2,a0 - 4e42: 00080f63 beqz a6,4e60 - 4e46: 87ae mv a5,a1 - 4e48: 8742 mv a4,a6 - 4e4a: a021 j 4e52 - 4e4c: 0007c703 lbu a4,0(a5) - 4e50: cb01 beqz a4,4e60 - 4e52: 0785 addi a5,a5,1 - { - if (*p == *a) - 4e54: fee69ce3 bne a3,a4,4e4c - while (*p) - 4e58: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 4e5c: 0605 addi a2,a2,1 - while (*p) - 4e5e: f6e5 bnez a3,4e46 - } - return (size_t)(p - s); - 4e60: 40a60533 sub a0,a2,a0 - 4e64: 8082 ret - while (*p) - 4e66: 4501 li a0,0 -} - 4e68: 8082 ret - -0000000000004e6a : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 4e6a: 00054683 lbu a3,0(a0) - 4e6e: ce85 beqz a3,4ea6 - { - for (r = reject; *r; r++) - 4e70: 0005c803 lbu a6,0(a1) - const char *p = s; - 4e74: 862a mv a2,a0 - for (r = reject; *r; r++) - 4e76: 02080363 beqz a6,4e9c - 4e7a: 87ae mv a5,a1 - 4e7c: 8742 mv a4,a6 - 4e7e: a021 j 4e86 - 4e80: 0007c703 lbu a4,0(a5) - 4e84: c719 beqz a4,4e92 - 4e86: 0785 addi a5,a5,1 - { - if (*p == *r) - 4e88: fed71ce3 bne a4,a3,4e80 - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 4e8c: 40a60533 sub a0,a2,a0 - 4e90: 8082 ret - while (*p) - 4e92: 00164683 lbu a3,1(a2) - p++; - 4e96: 0605 addi a2,a2,1 - while (*p) - 4e98: f2ed bnez a3,4e7a - 4e9a: bfcd j 4e8c - 4e9c: 00164683 lbu a3,1(a2) - p++; - 4ea0: 0605 addi a2,a2,1 - while (*p) - 4ea2: feed bnez a3,4e9c - 4ea4: b7e5 j 4e8c - 4ea6: 4501 li a0,0 -} - 4ea8: 8082 ret - -0000000000004eaa : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 4eaa: 00054683 lbu a3,0(a0) - 4eae: c295 beqz a3,4ed2 - { - for (a = accept; *a; a++) - 4eb0: 0005c603 lbu a2,0(a1) - 4eb4: c20d beqz a2,4ed6 - 4eb6: 87ae mv a5,a1 - 4eb8: 8732 mv a4,a2 - 4eba: a021 j 4ec2 - 4ebc: 0007c703 lbu a4,0(a5) - 4ec0: c709 beqz a4,4eca - 4ec2: 0785 addi a5,a5,1 - { - if (*s == *a) - 4ec4: fed71ce3 bne a4,a3,4ebc - return (char *)s; - } - s++; - } - return NULL; -} - 4ec8: 8082 ret - while (*s) - 4eca: 00154683 lbu a3,1(a0) - s++; - 4ece: 0505 addi a0,a0,1 - while (*s) - 4ed0: f2fd bnez a3,4eb6 - return NULL; - 4ed2: 4501 li a0,0 -} - 4ed4: 8082 ret - while (*s) - 4ed6: 00154683 lbu a3,1(a0) - s++; - 4eda: 0505 addi a0,a0,1 - while (*s) - 4edc: feed bnez a3,4ed6 - 4ede: bfd5 j 4ed2 - -0000000000004ee0 : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 4ee0: 00003897 auipc a7,0x3 - 4ee4: 8c088893 addi a7,a7,-1856 # 77a0 - 4ee8: cd25 beqz a0,4f60 - while (*p) - 4eea: 00054683 lbu a3,0(a0) - 4eee: c295 beqz a3,4f12 - for (a = accept; *a; a++) - 4ef0: 0005c803 lbu a6,0(a1) - 4ef4: 02080463 beqz a6,4f1c - 4ef8: 87ae mv a5,a1 - 4efa: 8742 mv a4,a6 - 4efc: a021 j 4f04 - 4efe: 0007c703 lbu a4,0(a5) - 4f02: cf09 beqz a4,4f1c - 4f04: 0785 addi a5,a5,1 - if (*p == *a) - 4f06: fee69ce3 bne a3,a4,4efe - while (*p) - 4f0a: 00154683 lbu a3,1(a0) - p++; - 4f0e: 0505 addi a0,a0,1 - while (*p) - 4f10: f6e5 bnez a3,4ef8 - 4f12: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 4f14: 00f8b023 sd a5,0(a7) - return NULL; - 4f18: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 4f1a: 8082 ret - if (*str == '\0') - 4f1c: 00054603 lbu a2,0(a0) - 4f20: da6d beqz a2,4f12 - 4f22: 86aa mv a3,a0 - for (a = accept; *a; a++) - 4f24: 04080163 beqz a6,4f66 - 4f28: 8742 mv a4,a6 - 4f2a: 87ae mv a5,a1 - 4f2c: a021 j 4f34 - 4f2e: 0007c703 lbu a4,0(a5) - 4f32: cb19 beqz a4,4f48 - 4f34: 0785 addi a5,a5,1 - if (*s == *a) - 4f36: fee61ce3 bne a2,a4,4f2e - olds = str + 1; - 4f3a: 00168793 addi a5,a3,1 - *str = '\0'; - 4f3e: 00068023 sb zero,0(a3) - olds = str; - 4f42: 00f8b023 sd a5,0(a7) -} - 4f46: 8082 ret - while (*s) - 4f48: 0016c603 lbu a2,1(a3) - s++; - 4f4c: 0685 addi a3,a3,1 - while (*s) - 4f4e: fe69 bnez a2,4f28 - 4f50: 87aa mv a5,a0 - while (*s != (char)c) - 4f52: 0017c703 lbu a4,1(a5) - if (!*s++) - 4f56: 0785 addi a5,a5,1 - while (*s != (char)c) - 4f58: ff6d bnez a4,4f52 - olds = str; - 4f5a: 00f8b023 sd a5,0(a7) -} - 4f5e: 8082 ret - str = olds; - 4f60: 0008b503 ld a0,0(a7) - 4f64: b759 j 4eea - while (*s) - 4f66: 0016c603 lbu a2,1(a3) - s++; - 4f6a: 0685 addi a3,a3,1 - while (*s) - 4f6c: fe6d bnez a2,4f66 - 4f6e: b7cd j 4f50 - -0000000000004f70 : - -char *strerror(int errnum) -{ - 4f70: 87aa mv a5,a0 - - switch (errnum) - 4f72: cd09 beqz a0,4f8c - 4f74: 4731 li a4,12 - 4f76: 00000517 auipc a0,0x0 - 4f7a: 12250513 addi a0,a0,290 # 5098 <_GLOBAL__sub_I__ZSt3cin+0xea> - 4f7e: 00e78b63 beq a5,a4,4f94 - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 4f82: 00000517 auipc a0,0x0 - 4f86: 12650513 addi a0,a0,294 # 50a8 <_GLOBAL__sub_I__ZSt3cin+0xfa> - 4f8a: 8082 ret - return "Success"; - 4f8c: 00000517 auipc a0,0x0 - 4f90: 10450513 addi a0,a0,260 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xe2> - } - 4f94: 8082 ret - -0000000000004f96 <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 4f96: cf6ff06f j 448c - -0000000000004f9a <_Znam>: -} - -void *operator new[](unsigned long n) - 4f9a: cf2ff06f j 448c - -0000000000004f9e <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 4f9e: c78ff06f j 4416 - -0000000000004fa2 <_ZdaPv>: -} - -void operator delete[](void *p) - 4fa2: c74ff06f j 4416 - -0000000000004fa6 <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 4fa6: c70ff06f j 4416 - -0000000000004faa <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 4faa: c6cff06f j 4416 - -0000000000004fae <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 4fae: 00002797 auipc a5,0x2 - 4fb2: 6a27b783 ld a5,1698(a5) # 7650 <_GLOBAL_OFFSET_TABLE_+0x10> - 4fb6: 6390 ld a2,0(a5) - ostream cout(stdout); - 4fb8: 00002797 auipc a5,0x2 - 4fbc: 6907b783 ld a5,1680(a5) # 7648 <_GLOBAL_OFFSET_TABLE_+0x8> - 4fc0: 6394 ld a3,0(a5) - ostream cerr(stderr); - 4fc2: 00002797 auipc a5,0x2 - 4fc6: 6967b783 ld a5,1686(a5) # 7658 <_GLOBAL_OFFSET_TABLE_+0x18> - 4fca: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 4fcc: 00002797 auipc a5,0x2 - 4fd0: 7dc78793 addi a5,a5,2012 # 77a8 <_ZSt3cin> - 4fd4: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 4fd6: e794 sd a3,8(a5) - 4fd8: eb98 sd a4,16(a5) -} // namespace std - 4fda: 8082 ret diff --git a/build/user/echo.sym b/build/user/echo.sym deleted file mode 100644 index 005bc74..0000000 --- a/build/user/echo.sym +++ /dev/null @@ -1,189 +0,0 @@ -0000000000000000 .text -0000000000004fe0 .rodata -00000000000057c0 .eh_frame -00000000000068c0 .data -0000000000007640 .got -0000000000007660 .got.plt -0000000000007670 .init_array -0000000000007678 .bss -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_loclists -0000000000000000 .debug_aranges -0000000000000000 .debug_rnglists -0000000000000000 .debug_line -0000000000000000 .debug_str -0000000000000000 .debug_line_str -0000000000000000 .comment -0000000000000000 .riscv.attributes -0000000000000000 echo.cc -0000000000000000 entry.o -0000000000000000 usys.o -0000000000000000 stdio.c -000000000000014e stbsp__clamp_callback -000000000000019c stbsp__count_clamp_callback -00000000000001a8 stbsp__real_to_str -000000000000087c _in_char.part.0 -00000000000008c2 _skip_space -0000000000000936 _vscanf_core.constprop.0 -00000000000011a6 _out_char -000000000000301a _vprintf_core.constprop.0.isra.0 -00000000000068c0 stbsp__digitpair -000000000000698c stbsp__period -000000000000698d stbsp__comma -0000000000006990 hexu.1 -00000000000069a8 hex.0 -00000000000069c0 _stderr -0000000000006de0 _stdout -0000000000007200 _stdin -0000000000005328 stbsp__bot -00000000000053e0 stbsp__negbot -0000000000005490 stbsp__negboterr -0000000000005540 stbsp__negtop -00000000000055a8 stbsp__negtoperr -0000000000005610 stbsp__top -0000000000005678 stbsp__toperr -00000000000056e0 stbsp__powten -0000000000000000 stdlib.c -0000000000004228 strtoull.part.0 -0000000000007638 next -0000000000007684 __atexit_func_count -0000000000007688 __atexit_funcs -0000000000007788 freep -0000000000007790 base -0000000000000000 string.c -00000000000077a0 olds.0 -0000000000000000 cxx.cc -0000000000000000 iostream.cpp -0000000000004fae _GLOBAL__sub_I__ZSt3cin -0000000000007640 _GLOBAL_OFFSET_TABLE_ -0000000000004b48 strcpy -00000000000038b8 printf -0000000000007620 stdout -0000000000005784 STDOUT_FD -00000000000041fe ungetc -0000000000004f70 strerror -0000000000004aae memmove -0000000000003862 snprintf -00000000000000d6 mknod -0000000000004700 atol -000000000000440e getenv -0000000000004f96 _Znwm -0000000000007680 errno -0000000000004960 labs -00000000000048da bsearch -000000000000010e getpid -00000000000047fc qsort -0000000000003af6 fscanf -0000000000003d68 fgets -00000000000077b8 _ZSt4cerr -0000000000004aea memcpy -0000000000004412 system -00000000000041de feof -000000000000448c malloc -000000000000011e sleep -0000000000003818 vsnprintf -000000000000461c strtoll -00000000000046c6 strtoul -0000000000004a12 wctomb -0000000000004a5e wcstombs -0000000000003a80 fflush -0000000000004a20 mbstowcs -000000000000013e lseek -0000000000004f9e _ZdlPv -0000000000004402 abort -00000000000046ea strtol -000000000000009e pipe -00000000000049e0 mblen -0000000000004c9c strrchr -0000000000004552 calloc -000000000000470c strtod -0000000000000136 disk_test -00000000000000ae write -00000000000047e6 atof -00000000000000e6 fstat -0000000000003ac4 fprintf -00000000000000be kill -0000000000004b8c strcat -00000000000000fe chdir -00000000000040e6 fseek -0000000000002fb6 stbsp_vsprintf -00000000000000c6 exec -0000000000004b10 memchr -0000000000007628 stdin -0000000000000096 wait -0000000000002ed0 stbsp_vsnprintf -000000000000007c _start -00000000000041e8 ferror -0000000000004cb4 strstr -00000000000049aa rand -00000000000000a6 read -0000000000004d60 strlcpy -0000000000004c3c strncmp -000000000000127a stbsp_set_separators -0000000000004fa6 _ZdlPvm -0000000000004b5a strncpy -00000000000000de unlink -000000000000459a realloc -0000000000004ee0 strtok -0000000000004aec memcmp -000000000000008e fork -00000000000038f2 sscanf -0000000000004bbe strncat -0000000000003e44 fread -0000000000000116 sbrk -0000000000004d1c strdup -0000000000000126 uptime -00000000000045f8 strtoull -0000000000002ea6 stbsp_sprintf -0000000000003954 fopen -0000000000004a96 memset -0000000000000000 main -000000000000415a ftell -00000000000049d2 srand -0000000000004db6 strlcat -00000000000041f2 clearerr -0000000000004fa2 _ZdaPv -0000000000003a18 fclose -000000000000012e putc -0000000000004c04 strcmp -0000000000000146 shutdown -0000000000000106 dup -0000000000003cd2 fgetc -0000000000002fc4 sprintf -00000000000047ea strtof -00000000000043a8 atexit -0000000000004e6a strcspn -0000000000002f96 stbsp_snprintf -00000000000077a8 _ZSt3cin -0000000000003922 scanf -0000000000007630 stderr -000000000000498a ldiv -0000000000003b28 fputc -0000000000004f9a _Znam -000000000000499a lldiv -0000000000003f5e fwrite -0000000000004186 rewind -00000000000077b0 _ZSt4cout -00000000000000ee link -00000000000043cc exit -0000000000000086 sys_exit -000000000000496a llabs -00000000000046ec atoi -0000000000005780 STDERR_FD -0000000000004e36 strspn -0000000000004b2e strlen -000000000000128c stbsp_vsprintfcb -00000000000000ce open -0000000000005788 STDIN_FD -0000000000004706 atoll -0000000000004974 div -0000000000004956 abs -0000000000004c84 strchr -0000000000003bec fputs -0000000000004faa _ZdaPvm -00000000000000f6 mkdir -00000000000000b6 close -00000000000049f4 mbtowc -0000000000004eaa strpbrk -0000000000004416 free diff --git a/build/user/entry.o b/build/user/entry.o deleted file mode 100644 index c20f0e6..0000000 Binary files a/build/user/entry.o and /dev/null differ diff --git a/build/user/init b/build/user/init deleted file mode 100755 index 9b46ae7..0000000 Binary files a/build/user/init and /dev/null differ diff --git a/build/user/init.asm b/build/user/init.asm deleted file mode 100644 index 0ded66c..0000000 --- a/build/user/init.asm +++ /dev/null @@ -1,10687 +0,0 @@ - -build/user/init: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000000000000
: -#include "ulib/string.h" -#include "user/user.h" -#include "drivers/uart_color.h" - -int main() -{ - 0: 715d addi sp,sp,-80 - char *argv[] = {(char *)"sh", 0}; - 2: 00005797 auipc a5,0x5 - 6: 01e78793 addi a5,a5,30 # 5020 <_GLOBAL__sub_I__ZSt3cin+0x30> - - printf(ANSI_BLUE"\n[Init] Starting Lume OS Shell..."ANSI_RESET); - a: 00005517 auipc a0,0x5 - e: 01e50513 addi a0,a0,30 # 5028 <_GLOBAL__sub_I__ZSt3cin+0x38> -{ - 12: e486 sd ra,72(sp) - 14: fc26 sd s1,56(sp) - 16: f84a sd s2,48(sp) - 18: f44e sd s3,40(sp) - 1a: f052 sd s4,32(sp) - char *argv[] = {(char *)"sh", 0}; - 1c: e83e sd a5,16(sp) -{ - 1e: e0a2 sd s0,64(sp) - char *argv[] = {(char *)"sh", 0}; - 20: ec02 sd zero,24(sp) - printf(ANSI_BLUE"\n[Init] Starting Lume OS Shell..."ANSI_RESET); - 22: 0d9030ef jal 38fa - printf("\n"); - 26: 00005517 auipc a0,0x5 - 2a: 03250513 addi a0,a0,50 # 5058 <_GLOBAL__sub_I__ZSt3cin+0x68> - 2e: 0cd030ef jal 38fa - 32: 0024 addi s1,sp,8 - int pid = fork(); - // printf("fork suceess, pid=%i\n", pid); - - if (pid < 0) - { - printf("[Init] fork failed!\n"); - 34: 00005a17 auipc s4,0x5 - 38: 02ca0a13 addi s4,s4,44 # 5060 <_GLOBAL__sub_I__ZSt3cin+0x70> - printf("Shell Exit"); - break; - } - if (wpid < 0) - { - printf("[Init] wait error or no child\n"); - 3c: 00005997 auipc s3,0x5 - 40: 06498993 addi s3,s3,100 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xb0> - printf("Shell Exit"); - 44: 00005917 auipc s2,0x5 - 48: 04c90913 addi s2,s2,76 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xa0> - int pid = fork(); - 4c: 084000ef jal d0 - 50: 842a mv s0,a0 - if (pid < 0) - 52: 02054363 bltz a0,78 - if (pid == 0) - 56: e501 bnez a0,5e - 58: a81d j 8e - if (wpid < 0) - 5a: 02054663 bltz a0,86 - wpid = wait((uint64)&status); - 5e: 8526 mv a0,s1 - 60: 078000ef jal d8 - if (wpid == pid) - 64: fea41be3 bne s0,a0,5a - printf("Shell Exit"); - 68: 854a mv a0,s2 - 6a: 091030ef jal 38fa - int pid = fork(); - 6e: 062000ef jal d0 - 72: 842a mv s0,a0 - if (pid < 0) - 74: fe0551e3 bgez a0,56 - printf("[Init] fork failed!\n"); - 78: 8552 mv a0,s4 - 7a: 081030ef jal 38fa - exit(1); - 7e: 4505 li a0,1 - 80: 38e040ef jal 440e - if (pid == 0) - 84: bfe9 j 5e - printf("[Init] wait error or no child\n"); - 86: 854e mv a0,s3 - 88: 073030ef jal 38fa - - break; - } - } - } - } - 8c: b7c1 j 4c - char sh_path[] = "/sh"; - 8e: 006877b7 lui a5,0x687 - 92: 32f78793 addi a5,a5,815 # 68732f <_ZSt4cerr+0x67faa7> - exec(sh_path, argv); - 96: 080c addi a1,sp,16 - 98: 8526 mv a0,s1 - char sh_path[] = "/sh"; - 9a: c43e sw a5,8(sp) - exec(sh_path, argv); - 9c: 06c000ef jal 108 - printf("[Init] exec sh failed\n"); - a0: 00005517 auipc a0,0x5 - a4: fd850513 addi a0,a0,-40 # 5078 <_GLOBAL__sub_I__ZSt3cin+0x88> - a8: 053030ef jal 38fa - return 0; - ac: 60a6 ld ra,72(sp) - ae: 6406 ld s0,64(sp) - b0: 74e2 ld s1,56(sp) - b2: 7942 ld s2,48(sp) - b4: 79a2 ld s3,40(sp) - b6: 7a02 ld s4,32(sp) - b8: 4501 li a0,0 - ba: 6161 addi sp,sp,80 - bc: 8082 ret - -00000000000000be <_start>: -.global _start - -_start: - - - call main - be: f43ff0ef jal 0
- - call exit - c2: 34c040ef jal 440e - - c6: a001 j c6 <_start+0x8> - -00000000000000c8 : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - c8: 488d li a7,3 - ca: 00000073 ecall - ce: 8082 ret - -00000000000000d0 : - -SYSCALL(fork) - d0: 4889 li a7,2 - d2: 00000073 ecall - d6: 8082 ret - -00000000000000d8 : -SYSCALL(wait) - d8: 4891 li a7,4 - da: 00000073 ecall - de: 8082 ret - -00000000000000e0 : -SYSCALL(pipe) - e0: 4895 li a7,5 - e2: 00000073 ecall - e6: 8082 ret - -00000000000000e8 : -SYSCALL(read) - e8: 4899 li a7,6 - ea: 00000073 ecall - ee: 8082 ret - -00000000000000f0 : -SYSCALL(write) - f0: 48c5 li a7,17 - f2: 00000073 ecall - f6: 8082 ret - -00000000000000f8 : -SYSCALL(close) - f8: 48d9 li a7,22 - fa: 00000073 ecall - fe: 8082 ret - -0000000000000100 : -SYSCALL(kill) - 100: 489d li a7,7 - 102: 00000073 ecall - 106: 8082 ret - -0000000000000108 : -SYSCALL(exec) - 108: 48a1 li a7,8 - 10a: 00000073 ecall - 10e: 8082 ret - -0000000000000110 : -SYSCALL(open) - 110: 48c1 li a7,16 - 112: 00000073 ecall - 116: 8082 ret - -0000000000000118 : -SYSCALL(mknod) - 118: 48c9 li a7,18 - 11a: 00000073 ecall - 11e: 8082 ret - -0000000000000120 : -SYSCALL(unlink) - 120: 48cd li a7,19 - 122: 00000073 ecall - 126: 8082 ret - -0000000000000128 : -SYSCALL(fstat) - 128: 48a5 li a7,9 - 12a: 00000073 ecall - 12e: 8082 ret - -0000000000000130 : -SYSCALL(link) - 130: 48d1 li a7,20 - 132: 00000073 ecall - 136: 8082 ret - -0000000000000138 : -SYSCALL(mkdir) - 138: 48d5 li a7,21 - 13a: 00000073 ecall - 13e: 8082 ret - -0000000000000140 : -SYSCALL(chdir) - 140: 48a9 li a7,10 - 142: 00000073 ecall - 146: 8082 ret - -0000000000000148 : -SYSCALL(dup) - 148: 48ad li a7,11 - 14a: 00000073 ecall - 14e: 8082 ret - -0000000000000150 : -SYSCALL(getpid) - 150: 48b1 li a7,12 - 152: 00000073 ecall - 156: 8082 ret - -0000000000000158 : -SYSCALL(sbrk) - 158: 48b5 li a7,13 - 15a: 00000073 ecall - 15e: 8082 ret - -0000000000000160 : -SYSCALL(sleep) - 160: 48b9 li a7,14 - 162: 00000073 ecall - 166: 8082 ret - -0000000000000168 : -SYSCALL(uptime) - 168: 48bd li a7,15 - 16a: 00000073 ecall - 16e: 8082 ret - -0000000000000170 : -SYSCALL(putc) - 170: 4885 li a7,1 - 172: 00000073 ecall - 176: 8082 ret - -0000000000000178 : -SYSCALL(disk_test) - 178: 48dd li a7,23 - 17a: 00000073 ecall - 17e: 8082 ret - -0000000000000180 : -SYSCALL(lseek) - 180: 48e1 li a7,24 - 182: 00000073 ecall - 186: 8082 ret - -0000000000000188 : - 188: 48e5 li a7,25 - 18a: 00000073 ecall - 18e: 8082 ret - -0000000000000190 : - 190: 45dc lw a5,12(a1) - 192: 4598 lw a4,8(a1) - 194: 9fb1 addw a5,a5,a2 - 196: c5dc sw a5,12(a1) - 198: 0007069b sext.w a3,a4 - 19c: 00e65463 bge a2,a4,1a4 - 1a0: 0006069b sext.w a3,a2 - 1a4: c685 beqz a3,1cc - 1a6: 619c ld a5,0(a1) - 1a8: 00a78e63 beq a5,a0,1c4 - 1ac: 00d50633 add a2,a0,a3 - 1b0: 00054703 lbu a4,0(a0) - 1b4: 0505 addi a0,a0,1 - 1b6: 0785 addi a5,a5,1 - 1b8: fee78fa3 sb a4,-1(a5) - 1bc: fec56ae3 bltu a0,a2,1b0 - 1c0: 6188 ld a0,0(a1) - 1c2: 4598 lw a4,8(a1) - 1c4: 9f15 subw a4,a4,a3 - 1c6: 9536 add a0,a0,a3 - 1c8: e188 sd a0,0(a1) - 1ca: c598 sw a4,8(a1) - 1cc: 1ff00793 li a5,511 - 1d0: 00e7d463 bge a5,a4,1d8 - 1d4: 6188 ld a0,0(a1) - 1d6: 8082 ret - 1d8: 01058513 addi a0,a1,16 - 1dc: 8082 ret - -00000000000001de : - 1de: 45dc lw a5,12(a1) - 1e0: 01058513 addi a0,a1,16 - 1e4: 9fb1 addw a5,a5,a2 - 1e6: c5dc sw a5,12(a1) - 1e8: 8082 ret - -00000000000001ea : - 1ea: e20508d3 fmv.x.d a7,fa0 - 1ee: 82aa mv t0,a0 - 1f0: 4348d813 srai a6,a7,0x34 - 1f4: 8ec6 mv t4,a7 - 1f6: 7ff87813 andi a6,a6,2047 - 1fa: 8346 mv t1,a7 - 1fc: 03f8d513 srli a0,a7,0x3f - 200: 0008d663 bgez a7,20c - 204: 22a517d3 fneg.d fa5,fa0 - 208: e20788d3 fmv.x.d a7,fa5 - 20c: 7ff00e13 li t3,2047 - 210: 35c80663 beq a6,t3,55c - 214: 1101 addi sp,sp,-32 - 216: 14080363 beqz a6,35c - 21a: c018081b addiw a6,a6,-1023 - 21e: ec22 sd s0,24(sp) - 220: 02081313 slli t1,a6,0x20 - 224: 66034d63 bltz t1,89e - 228: 4d100313 li t1,1233 - 22c: 0303033b mulw t1,t1,a6 - 230: 4849 li a6,18 - 232: 40c3531b sraiw t1,t1,0xc - 236: 0013039b addiw t2,t1,1 - 23a: 4078083b subw a6,a6,t2 - 23e: 4359 li t1,22 - 240: 17036163 bltu t1,a6,3a2 - 244: 00005317 auipc t1,0x5 - 248: 1b430313 addi t1,t1,436 # 53f8 - 24c: 080e slli a6,a6,0x3 - 24e: 981a add a6,a6,t1 - 250: 00083e03 ld t3,0(a6) - 254: 00083607 fld fa2,0(a6) - 258: f20887d3 fmv.d.x fa5,a7 - 25c: f8000837 lui a6,0xf8000 - 260: 01187333 and t1,a6,a7 - 264: 01c87833 and a6,a6,t3 - 268: 12f676d3 fmul.d fa3,fa2,fa5 - 26c: f20807d3 fmv.d.x fa5,a6 - 270: f2030753 fmv.d.x fa4,t1 - 274: f20305d3 fmv.d.x fa1,t1 - 278: 0af67653 fsub.d fa2,fa2,fa5 - 27c: f20887d3 fmv.d.x fa5,a7 - 280: 0ae7f753 fsub.d fa4,fa5,fa4 - 284: f20807d3 fmv.d.x fa5,a6 - 288: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 28c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 290: f20805d3 fmv.d.x fa1,a6 - 294: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 298: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 29c: 02d777d3 fadd.d fa5,fa4,fa3 - 2a0: 3782e837 lui a6,0x3782e - 2a4: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826247> - 2a8: 0832 slli a6,a6,0xc - 2aa: 9d980813 addi a6,a6,-1575 - 2ae: 084a slli a6,a6,0x12 - 2b0: 187d addi a6,a6,-1 - 2b2: c22798d3 fcvt.l.d a7,fa5,rtz - 2b6: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 2ba: 00070e1b sext.w t3,a4 - 2be: d228f653 fcvt.d.l fa2,a7 - 2c2: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 2c6: 0ad77753 fsub.d fa4,fa4,fa3 - 2ca: 0af5f6d3 fsub.d fa3,fa1,fa5 - 2ce: 0ad5f553 fsub.d fa0,fa1,fa3 - 2d2: 02d67653 fadd.d fa2,fa2,fa3 - 2d6: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 2da: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 2de: 02b7f7d3 fadd.d fa5,fa5,fa1 - 2e2: 02e7f7d3 fadd.d fa5,fa5,fa4 - 2e6: c2279fd3 fcvt.l.d t6,fa5,rtz - 2ea: 9fc6 add t6,t6,a7 - 2ec: 19f87063 bgeu a6,t6,46c - 2f0: 2385 addiw t2,t2,1 - 2f2: 300e4363 bltz t3,5f8 - 2f6: 00e3833b addw t1,t2,a4 - 2fa: 475d li a4,23 - 2fc: 30677663 bgeu a4,t1,608 - 300: 577d li a4,-1 - 302: 9301 srli a4,a4,0x20 - 304: 43f75863 bge a4,t6,734 - 308: 07d00313 li t1,125 - 30c: 877e mv a4,t6 - 30e: 4e01 li t3,0 - 310: 3e800813 li a6,1000 - 314: 130e slli t1,t1,0x23 - 316: a039 j 324 - 318: 030747b3 div a5,a4,a6 - 31c: 4e05 li t3,1 - 31e: 40674c63 blt a4,t1,736 - 322: 873e mv a4,a5 - 324: 030768b3 rem a7,a4,a6 - 328: fe0888e3 beqz a7,318 - 32c: 400e0163 beqz t3,72e - 330: 8fbe mv t6,a5 - 332: 05f5e7b7 lui a5,0x5f5e - 336: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 33a: 04060413 addi s0,a2,64 - 33e: 03860613 addi a2,a2,56 - 342: 15f7c863 blt a5,t6,492 - 346: 000f871b sext.w a4,t6 - 34a: 20070463 beqz a4,552 - 34e: 4f01 li t5,0 - 350: 4f81 li t6,0 - 352: 00006e97 auipc t4,0x6 - 356: 63ee8e93 addi t4,t4,1598 # 6990 - 35a: aaa9 j 4b4 - 35c: 0306 slli t1,t1,0x1 - 35e: 3e030e63 beqz t1,75a - 362: 4305 li t1,1 - 364: ec22 sd s0,24(sp) - 366: 00ce9e13 slli t3,t4,0xc - 36a: 134e slli t1,t1,0x33 - 36c: 520e4063 bltz t3,88c - 370: 40135313 srai t1,t1,0x1 - 374: 01d37e33 and t3,t1,t4 - 378: 8f42 mv t5,a6 - 37a: 387d addiw a6,a6,-1 - 37c: fe0e0ae3 beqz t3,370 - 380: 26900313 li t1,617 - 384: c00f081b addiw a6,t5,-1024 - 388: 0268083b mulw a6,a6,t1 - 38c: 41f8531b sraiw t1,a6,0x1f - 390: 0153531b srliw t1,t1,0x15 - 394: 0103033b addw t1,t1,a6 - 398: 40b3539b sraiw t2,t1,0xb - 39c: 4849 li a6,18 - 39e: 4078083b subw a6,a6,t2 - 3a2: 41f8531b sraiw t1,a6,0x1f - 3a6: 00684eb3 xor t4,a6,t1 - 3aa: 406e8f3b subw t5,t4,t1 - 3ae: 2c900313 li t1,713 - 3b2: 03e3033b mulw t1,t1,t5 - 3b6: 4e35 li t3,13 - 3b8: 8efa mv t4,t5 - 3ba: 40e35f9b sraiw t6,t1,0xe - 3be: 837e mv t1,t6 - 3c0: 23fe4363 blt t3,t6,5e6 - 3c4: 5e25 li t3,-23 - 3c6: 026e0e3b mulw t3,t3,t1 - 3ca: 01de0ebb addw t4,t3,t4 - 3ce: 22084f63 bltz a6,60c - 3d2: f2000753 fmv.d.x fa4,zero - 3d6: 00005e17 auipc t3,0x5 - 3da: 022e0e13 addi t3,t3,34 # 53f8 - 3de: 380e9e63 bnez t4,77a - 3e2: f20887d3 fmv.d.x fa5,a7 - 3e6: fff30f1b addiw t5,t1,-1 - 3ea: 0f0e slli t5,t5,0x3 - 3ec: 02f777d3 fadd.d fa5,fa4,fa5 - 3f0: 030e slli t1,t1,0x3 - 3f2: 9f72 add t5,t5,t3 - 3f4: 9e1a add t3,t3,t1 - 3f6: 2e0e3e03 ld t3,736(t3) - 3fa: 2e8f3587 fld fa1,744(t5) - 3fe: f8000837 lui a6,0xf8000 - 402: e2078ed3 fmv.x.d t4,fa5 - 406: 12b7f6d3 fmul.d fa3,fa5,fa1 - 40a: f2088653 fmv.d.x fa2,a7 - 40e: 01d87333 and t1,a6,t4 - 412: 01c87833 and a6,a6,t3 - 416: f20807d3 fmv.d.x fa5,a6 - 41a: f2030053 fmv.d.x ft0,t1 - 41e: 0af5f553 fsub.d fa0,fa1,fa5 - 422: f20e87d3 fmv.d.x fa5,t4 - 426: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 42a: f20807d3 fmv.d.x fa5,a6 - 42e: f2030653 fmv.d.x fa2,t1 - 432: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 436: f20e87d3 fmv.d.x fa5,t4 - 43a: 0a177753 fsub.d fa4,fa4,ft1 - 43e: f20300d3 fmv.d.x ft1,t1 - 442: 0a07f7d3 fsub.d fa5,fa5,ft0 - 446: 350f3007 fld ft0,848(t5) - 44a: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 44e: 12b77753 fmul.d fa4,fa4,fa1 - 452: f20805d3 fmv.d.x fa1,a6 - 456: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 45a: f20e85d3 fmv.d.x fa1,t4 - 45e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 462: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 466: 02e7f753 fadd.d fa4,fa5,fa4 - 46a: bd0d j 29c - 46c: 00e3833b addw t1,t2,a4 - 470: 2a0e4663 bltz t3,71c - 474: 475d li a4,23 - 476: 10677663 bgeu a4,t1,582 - 47a: e80f93e3 bnez t6,300 - 47e: 05f5e7b7 lui a5,0x5f5e - 482: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 486: 04060413 addi s0,a2,64 - 48a: 03860613 addi a2,a2,56 - 48e: ebf7dce3 bge a5,t6,346 - 492: 4f01 li t5,0 - 494: 00006e97 auipc t4,0x6 - 498: 4fce8e93 addi t4,t4,1276 # 6990 - 49c: 05f5e7b7 lui a5,0x5f5e - 4a0: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56878> - 4a4: 02ffe833 rem a6,t6,a5 - 4a8: 02ffcfb3 div t6,t6,a5 - 4ac: 0008071b sext.w a4,a6 - 4b0: 0a080463 beqz a6,558 - 4b4: 8822 mv a6,s0 - 4b6: 06400893 li a7,100 - 4ba: 06300e13 li t3,99 - 4be: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8776> - 4c0: 0007031b sext.w t1,a4 - 4c4: 031777bb remuw a5,a4,a7 - 4c8: 2785 addiw a5,a5,1 - 4ca: 0017979b slliw a5,a5,0x1 - 4ce: 1782 slli a5,a5,0x20 - 4d0: 9381 srli a5,a5,0x20 - 4d2: 97f6 add a5,a5,t4 - 4d4: 0007d783 lhu a5,0(a5) - 4d8: 0317573b divuw a4,a4,a7 - 4dc: 00f81023 sh a5,0(a6) - 4e0: fc6e6fe3 bltu t3,t1,4be - 4e4: 008f0f3b addw t5,t5,s0 - 4e8: 410f0f3b subw t5,t5,a6 - 4ec: 020f8f63 beqz t6,52a - 4f0: 87c2 mv a5,a6 - 4f2: 03000713 li a4,48 - 4f6: 04c80c63 beq a6,a2,54e - 4fa: 17fd addi a5,a5,-1 - 4fc: 00e78023 sb a4,0(a5) - 500: fec79de3 bne a5,a2,4fa - 504: 408807b3 sub a5,a6,s0 - 508: 00ff07bb addw a5,t5,a5 - 50c: 1461 addi s0,s0,-8 - 50e: 00878f1b addiw t5,a5,8 - 512: 05f5e7b7 lui a5,0x5f5e - 516: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 51a: ff840613 addi a2,s0,-8 - 51e: f7f7cfe3 blt a5,t6,49c - 522: 000f871b sext.w a4,t6 - 526: 4f81 li t6,0 - 528: b771 j 4b4 - 52a: 020f0563 beqz t5,554 - 52e: 00084703 lbu a4,0(a6) - 532: 03000793 li a5,48 - 536: 22f70f63 beq a4,a5,774 - 53a: 2f01 sext.w t5,t5 - 53c: 0076a023 sw t2,0(a3) - 540: 6462 ld s0,24(sp) - 542: 0102b023 sd a6,0(t0) - 546: 01e5a023 sw t5,0(a1) - 54a: 6105 addi sp,sp,32 - 54c: 8082 ret - 54e: 8442 mv s0,a6 - 550: b7c9 j 512 - 552: 8822 mv a6,s0 - 554: 4f01 li t5,0 - 556: b7dd j 53c - 558: 8822 mv a6,s0 - 55a: bf59 j 4f0 - 55c: 0eb2 slli t4,t4,0xc - 55e: 00005797 auipc a5,0x5 - 562: b6a78793 addi a5,a5,-1174 # 50c8 <_GLOBAL__sub_I__ZSt3cin+0xd8> - 566: 000e8663 beqz t4,572 - 56a: 00005797 auipc a5,0x5 - 56e: b5678793 addi a5,a5,-1194 # 50c0 <_GLOBAL__sub_I__ZSt3cin+0xd0> - 572: 00f2b023 sd a5,0(t0) - 576: 679d lui a5,0x7 - 578: c29c sw a5,0(a3) - 57a: 4f0d li t5,3 - 57c: 01e5a023 sw t5,0(a1) - 580: 8082 ret - 582: 3b9ad737 lui a4,0x3b9ad - 586: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5177> - 58a: 07f76f63 bltu a4,t6,608 - 58e: 4805 li a6,1 - 590: 02081713 slli a4,a6,0x20 - 594: 01d75893 srli a7,a4,0x1d - 598: 00005717 auipc a4,0x5 - 59c: 21870713 addi a4,a4,536 # 57b0 - 5a0: 9746 add a4,a4,a7 - 5a2: 4e51 li t3,20 - 5a4: a021 j 5ac - 5a6: 2805 addiw a6,a6,1 - 5a8: edc809e3 beq a6,t3,47a - 5ac: 00073883 ld a7,0(a4) - 5b0: 0721 addi a4,a4,8 - 5b2: ff1ffae3 bgeu t6,a7,5a6 - 5b6: ed0372e3 bgeu t1,a6,47a - 5ba: 4068083b subw a6,a6,t1 - 5be: 475d li a4,23 - 5c0: eb076de3 bltu a4,a6,47a - 5c4: 080e slli a6,a6,0x3 - 5c6: 00005717 auipc a4,0x5 - 5ca: e3270713 addi a4,a4,-462 # 53f8 - 5ce: 9742 add a4,a4,a6 - 5d0: 3b873803 ld a6,952(a4) - 5d4: 00185713 srli a4,a6,0x1 - 5d8: 977e add a4,a4,t6 - 5da: 01176363 bltu a4,a7,5e0 - 5de: 2385 addiw t2,t2,1 - 5e0: 03075fb3 divu t6,a4,a6 - 5e4: bd59 j 47a - 5e6: 4335 li t1,13 - 5e8: 5e25 li t3,-23 - 5ea: 026e0e3b mulw t3,t3,t1 - 5ee: 01de0ebb addw t4,t3,t4 - 5f2: de0850e3 bgez a6,3d2 - 5f6: a819 j 60c - 5f8: 02571313 slli t1,a4,0x25 - 5fc: 02535313 srli t1,t1,0x25 - 600: 0305 addi t1,t1,1 - 602: 475d li a4,23 - 604: ce676ee3 bltu a4,t1,300 - 608: 4829 li a6,10 - 60a: b759 j 590 - 60c: 260e8663 beqz t4,878 - 610: 00231e13 slli t3,t1,0x2 - 614: 41c30e33 sub t3,t1,t3 - 618: 0e0e slli t3,t3,0x3 - 61a: 9e1a add t3,t3,t1 - 61c: fffe881b addiw a6,t4,-1 - 620: 9e7a add t3,t3,t5 - 622: 00005e97 auipc t4,0x5 - 626: dd6e8e93 addi t4,t4,-554 # 53f8 - 62a: 0e0e slli t3,t3,0x3 - 62c: 080e slli a6,a6,0x3 - 62e: 9876 add a6,a6,t4 - 630: 9ef2 add t4,t4,t3 - 632: 0b883607 fld fa2,184(a6) - 636: f20887d3 fmv.d.x fa5,a7 - 63a: 0b0ebf03 ld t5,176(t4) - 63e: f8000e37 lui t3,0xf8000 - 642: 011e7eb3 and t4,t3,a7 - 646: 12f676d3 fmul.d fa3,fa2,fa5 - 64a: 01ee7e33 and t3,t3,t5 - 64e: f20e07d3 fmv.d.x fa5,t3 - 652: f20e0753 fmv.d.x fa4,t3 - 656: f20e8553 fmv.d.x fa0,t4 - 65a: 0af67653 fsub.d fa2,fa2,fa5 - 65e: f20e87d3 fmv.d.x fa5,t4 - 662: f20e85d3 fmv.d.x fa1,t4 - 666: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 66a: f2088753 fmv.d.x fa4,a7 - 66e: 0ab775d3 fsub.d fa1,fa4,fa1 - 672: 16883707 fld fa4,360(a6) - 676: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 67a: f20e0553 fmv.d.x fa0,t3 - 67e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 682: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 686: f20887d3 fmv.d.x fa5,a7 - 68a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 68e: c00f87e3 beqz t6,29c - 692: 02d777d3 fadd.d fa5,fa4,fa3 - 696: fff3089b addiw a7,t1,-1 - 69a: 00005817 auipc a6,0x5 - 69e: d5e80813 addi a6,a6,-674 # 53f8 - 6a2: 030e slli t1,t1,0x3 - 6a4: 088e slli a7,a7,0x3 - 6a6: 98c2 add a7,a7,a6 - 6a8: 981a add a6,a6,t1 - 6aa: e2078e53 fmv.x.d t3,fa5 - 6ae: 21083e83 ld t4,528(a6) - 6b2: f8000837 lui a6,0xf8000 - 6b6: 2188b507 fld fa0,536(a7) - 6ba: 01c87333 and t1,a6,t3 - 6be: 01d87833 and a6,a6,t4 - 6c2: f2080653 fmv.d.x fa2,a6 - 6c6: 12f577d3 fmul.d fa5,fa0,fa5 - 6ca: 2808b587 fld fa1,640(a7) - 6ce: 0ac57053 fsub.d ft0,fa0,fa2 - 6d2: f20e0653 fmv.d.x fa2,t3 - 6d6: 0ad67153 fsub.d ft2,fa2,fa3 - 6da: f20806d3 fmv.d.x fa3,a6 - 6de: f2030653 fmv.d.x fa2,t1 - 6e2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 6e6: f20e06d3 fmv.d.x fa3,t3 - 6ea: 0ac6f653 fsub.d fa2,fa3,fa2 - 6ee: 22f786d3 fmv.d fa3,fa5 - 6f2: 0a2777d3 fsub.d fa5,fa4,ft2 - 6f6: f2030753 fmv.d.x fa4,t1 - 6fa: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 6fe: 12a7f7d3 fmul.d fa5,fa5,fa0 - 702: f2080553 fmv.d.x fa0,a6 - 706: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 70a: f20e0553 fmv.d.x fa0,t3 - 70e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 712: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 716: 02f67753 fadd.d fa4,fa2,fa5 - 71a: b649 j 29c - 71c: 02571313 slli t1,a4,0x25 - 720: 02535313 srli t1,t1,0x25 - 724: 0305 addi t1,t1,1 - 726: 475d li a4,23 - 728: d46769e3 bltu a4,t1,47a - 72c: bd99 j 582 - 72e: 87fe mv a5,t6 - 730: 8fbe mv t6,a5 - 732: b101 j 332 - 734: 87fe mv a5,t6 - 736: 3e800713 li a4,1000 - 73a: 02e7f73b remuw a4,a5,a4 - 73e: 2781 sext.w a5,a5 - 740: eb01 bnez a4,750 - 742: 3e800813 li a6,1000 - 746: 0307d7bb divuw a5,a5,a6 - 74a: 0307f73b remuw a4,a5,a6 - 74e: df65 beqz a4,746 - 750: 02079f93 slli t6,a5,0x20 - 754: 020fdf93 srli t6,t6,0x20 - 758: b31d j 47e - 75a: 4785 li a5,1 - 75c: c29c sw a5,0(a3) - 75e: 00c2b023 sd a2,0(t0) - 762: 03000793 li a5,48 - 766: 00f60023 sb a5,0(a2) - 76a: 4f05 li t5,1 - 76c: 01e5a023 sw t5,0(a1) - 770: 6105 addi sp,sp,32 - 772: 8082 ret - 774: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8779> - 776: 3f7d addiw t5,t5,-1 - 778: b3d1 j 53c - 77a: e826 sd s1,16(sp) - 77c: e44a sd s2,8(sp) - 77e: 4859 li a6,22 - 780: 8976 mv s2,t4 - 782: 11d84363 blt a6,t4,888 - 786: 0009049b sext.w s1,s2 - 78a: 00005e17 auipc t3,0x5 - 78e: c6ee0e13 addi t3,t3,-914 # 53f8 - 792: 00349813 slli a6,s1,0x3 - 796: 9872 add a6,a6,t3 - 798: 00083687 fld fa3,0(a6) - 79c: 00083803 ld a6,0(a6) - 7a0: f20887d3 fmv.d.x fa5,a7 - 7a4: f8000fb7 lui t6,0xf8000 - 7a8: 010ff833 and a6,t6,a6 - 7ac: 12f6f553 fmul.d fa0,fa3,fa5 - 7b0: f20807d3 fmv.d.x fa5,a6 - 7b4: 011ff433 and s0,t6,a7 - 7b8: f2040753 fmv.d.x fa4,s0 - 7bc: 0af6f6d3 fsub.d fa3,fa3,fa5 - 7c0: f20887d3 fmv.d.x fa5,a7 - 7c4: f2080653 fmv.d.x fa2,a6 - 7c8: 412e8ebb subw t4,t4,s2 - 7cc: 0ae7f753 fsub.d fa4,fa5,fa4 - 7d0: f20407d3 fmv.d.x fa5,s0 - 7d4: e20508d3 fmv.x.d a7,fa0 - 7d8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 7dc: f2040653 fmv.d.x fa2,s0 - 7e0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 7e4: f2080653 fmv.d.x fa2,a6 - 7e8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 7ec: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 7f0: 080e8963 beqz t4,882 - 7f4: 02e577d3 fadd.d fa5,fa0,fa4 - 7f8: 0e8e slli t4,t4,0x3 - 7fa: 01de0833 add a6,t3,t4 - 7fe: 00083587 fld fa1,0(a6) - 802: 00231893 slli a7,t1,0x2 - 806: 411308b3 sub a7,t1,a7 - 80a: 00389813 slli a6,a7,0x3 - 80e: e2078453 fmv.x.d s0,fa5 - 812: 12f5f7d3 fmul.d fa5,fa1,fa5 - 816: 981a add a6,a6,t1 - 818: 987a add a6,a6,t5 - 81a: 40980833 sub a6,a6,s1 - 81e: 080e slli a6,a6,0x3 - 820: 9872 add a6,a6,t3 - 822: 00083e83 ld t4,0(a6) - 826: 008ff833 and a6,t6,s0 - 82a: e20788d3 fmv.x.d a7,fa5 - 82e: f20806d3 fmv.d.x fa3,a6 - 832: f20407d3 fmv.d.x fa5,s0 - 836: 01dfffb3 and t6,t6,t4 - 83a: f20880d3 fmv.d.x ft1,a7 - 83e: 0ad7f653 fsub.d fa2,fa5,fa3 - 842: f20f87d3 fmv.d.x fa5,t6 - 846: 64c2 ld s1,16(sp) - 848: 6922 ld s2,8(sp) - 84a: 0af5f053 fsub.d ft0,fa1,fa5 - 84e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 852: f20407d3 fmv.d.x fa5,s0 - 856: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 85a: f2080553 fmv.d.x fa0,a6 - 85e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 862: 0af77753 fsub.d fa4,fa4,fa5 - 866: f20f87d3 fmv.d.x fa5,t6 - 86a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 86e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 872: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 876: b6b5 j 3e2 - 878: f20886d3 fmv.d.x fa3,a7 - 87c: f2000753 fmv.d.x fa4,zero - 880: b539 j 68e - 882: 64c2 ld s1,16(sp) - 884: 6922 ld s2,8(sp) - 886: beb1 j 3e2 - 888: 4959 li s2,22 - 88a: bdf5 j 786 - 88c: e826 sd s1,16(sp) - 88e: e44a sd s2,8(sp) - 890: ecc00393 li t2,-308 - 894: 4eed li t4,27 - 896: 4335 li t1,13 - 898: 14600f13 li t5,326 - 89c: b5cd j 77e - 89e: 26900313 li t1,617 - 8a2: 0303083b mulw a6,t1,a6 - 8a6: 41f8531b sraiw t1,a6,0x1f - 8aa: 0153531b srliw t1,t1,0x15 - 8ae: 0103033b addw t1,t1,a6 - 8b2: 40b3539b sraiw t2,t1,0xb - 8b6: 4849 li a6,18 - 8b8: 4078083b subw a6,a6,t2 - 8bc: b249 j 23e - -00000000000008be <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 8be: 87aa mv a5,a0 - if (ctx->fd == -1) - 8c0: 4508 lw a0,8(a0) - 8c2: 577d li a4,-1 - 8c4: 00e51d63 bne a0,a4,8de <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 8c8: 6b94 ld a3,16(a5) - 8ca: 6398 ld a4,0(a5) - 8cc: 9736 add a4,a4,a3 - 8ce: 00074603 lbu a2,0(a4) - 8d2: c60d beqz a2,8fc <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 8d4: 0685 addi a3,a3,1 - 8d6: eb94 sd a3,16(a5) - 8d8: 00074503 lbu a0,0(a4) - 8dc: 8082 ret -static int _in_char(_InContext *ctx) - 8de: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 8e0: 4605 li a2,1 - 8e2: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 8e6: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 8e8: 801ff0ef jal e8 - 8ec: 4785 li a5,1 - 8ee: 00f51963 bne a0,a5,900 <_in_char.part.0+0x42> - return (unsigned char)c; - 8f2: 00f14503 lbu a0,15(sp) -} - 8f6: 60e2 ld ra,24(sp) - 8f8: 6105 addi sp,sp,32 - 8fa: 8082 ret - return -1; - 8fc: 557d li a0,-1 -} - 8fe: 8082 ret - return -1; - 900: 557d li a0,-1 - 902: bfd5 j 8f6 <_in_char.part.0+0x38> - -0000000000000904 <_skip_space>: -{ - 904: 7139 addi sp,sp,-64 - 906: f822 sd s0,48(sp) - 908: f426 sd s1,40(sp) - 90a: f04a sd s2,32(sp) - 90c: ec4e sd s3,24(sp) - 90e: e852 sd s4,16(sp) - 910: fc06 sd ra,56(sp) - 912: 842a mv s0,a0 - ctx->ungotten = -1; - 914: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 916: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 91a: 02000913 li s2,32 - 91e: 4991 li s3,4 - if (ctx->ungotten >= 0) - 920: 4c1c lw a5,24(s0) - 922: 0407d163 bgez a5,964 <_skip_space+0x60> - if (ctx->fd == -1) - 926: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 928: 4605 li a2,1 - 92a: 85d2 mv a1,s4 - if (ctx->fd == -1) - 92c: 02951e63 bne a0,s1,968 <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - 930: 6818 ld a4,16(s0) - 932: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - 934: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - 938: 97ba add a5,a5,a4 - 93a: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x150> - 93e: cb19 beqz a4,954 <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - 940: e814 sd a3,16(s0) - 942: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 946: ff77871b addiw a4,a5,-9 - 94a: fd278be3 beq a5,s2,920 <_skip_space+0x1c> - 94e: fce9f9e3 bgeu s3,a4,920 <_skip_space+0x1c> - ctx->ungotten = c; - 952: cc1c sw a5,24(s0) -} - 954: 70e2 ld ra,56(sp) - 956: 7442 ld s0,48(sp) - 958: 74a2 ld s1,40(sp) - 95a: 7902 ld s2,32(sp) - 95c: 69e2 ld s3,24(sp) - 95e: 6a42 ld s4,16(sp) - 960: 6121 addi sp,sp,64 - 962: 8082 ret - ctx->ungotten = -1; - 964: cc04 sw s1,24(s0) - return c; - 966: b7c5 j 946 <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - 968: f80ff0ef jal e8 - 96c: 4785 li a5,1 - 96e: fef513e3 bne a0,a5,954 <_skip_space+0x50> - return (unsigned char)c; - 972: 00f14783 lbu a5,15(sp) - 976: bfc1 j 946 <_skip_space+0x42> - -0000000000000978 <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 978: 7155 addi sp,sp,-208 - 97a: e586 sd ra,200(sp) - 97c: e95a sd s6,144(sp) - while (*p) - 97e: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 982: e432 sd a2,8(sp) - while (*p) - 984: 68078b63 beqz a5,101a <_vscanf_core.constprop.0+0x6a2> - 988: e1a2 sd s0,192(sp) - 98a: fd26 sd s1,184(sp) - 98c: f152 sd s4,160(sp) - 98e: ed56 sd s5,152(sp) - 990: f4ee sd s11,104(sp) - 992: 842e mv s0,a1 - 994: 8daa mv s11,a0 - int assigned = 0; - 996: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 998: 02000493 li s1,32 - 99c: 4a91 li s5,4 - if (*p != '%') - 99e: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9a2: 04978763 beq a5,s1,9f0 <_vscanf_core.constprop.0+0x78> - 9a6: ff77869b addiw a3,a5,-9 - 9aa: 0ff6f693 zext.b a3,a3 - 9ae: 04daf163 bgeu s5,a3,9f0 <_vscanf_core.constprop.0+0x78> - if (*p != '%') - 9b2: 07478d63 beq a5,s4,a2c <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - 9b6: 856e mv a0,s11 - 9b8: f4dff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - 9bc: 018da503 lw a0,24(s11) - 9c0: 04055a63 bgez a0,a14 <_vscanf_core.constprop.0+0x9c> - 9c4: 856e mv a0,s11 - 9c6: ef9ff0ef jal 8be <_in_char.part.0> - if (c != *p) - 9ca: 00044783 lbu a5,0(s0) - 9ce: 04a78a63 beq a5,a0,a22 <_vscanf_core.constprop.0+0xaa> - if (c != -1) - 9d2: 57fd li a5,-1 - 9d4: 00f50463 beq a0,a5,9dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - 9d8: 00adac23 sw a0,24(s11) - 9dc: 640e ld s0,192(sp) - 9de: 74ea ld s1,184(sp) - 9e0: 7a0a ld s4,160(sp) - 9e2: 6aea ld s5,152(sp) - 9e4: 7da6 ld s11,104(sp) -} - 9e6: 60ae ld ra,200(sp) - 9e8: 855a mv a0,s6 - 9ea: 6b4a ld s6,144(sp) - 9ec: 6169 addi sp,sp,208 - 9ee: 8082 ret - _skip_space(ctx); - 9f0: 856e mv a0,s11 - 9f2: f13ff0ef jal 904 <_skip_space> - while (isspace(*p)) - 9f6: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9fa: 4611 li a2,4 - 9fc: ff77869b addiw a3,a5,-9 - a00: 0ff6f693 zext.b a3,a3 - a04: 00978663 beq a5,s1,a10 <_vscanf_core.constprop.0+0x98> - a08: 00d67463 bgeu a2,a3,a10 <_vscanf_core.constprop.0+0x98> - while (*p) - a0c: fbd9 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - a0e: b7f9 j 9dc <_vscanf_core.constprop.0+0x64> - p++; - a10: 0405 addi s0,s0,1 - a12: b7d5 j 9f6 <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - a14: 57fd li a5,-1 - a16: 00fdac23 sw a5,24(s11) - if (c != *p) - a1a: 00044783 lbu a5,0(s0) - a1e: faa79ae3 bne a5,a0,9d2 <_vscanf_core.constprop.0+0x5a> - while (*p) - a22: 00144783 lbu a5,1(s0) - p++; - a26: 0405 addi s0,s0,1 - while (*p) - a28: ffad bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - a2a: bf4d j 9dc <_vscanf_core.constprop.0+0x64> - a2c: f94a sd s2,176(sp) - a2e: f54e sd s3,168(sp) - a30: e55e sd s7,136(sp) - a32: e162 sd s8,128(sp) - if (*p == '*') - a34: 00144583 lbu a1,1(s0) - a38: 02a00793 li a5,42 - a3c: 22f58d63 beq a1,a5,c76 <_vscanf_core.constprop.0+0x2fe> - p++; - a40: 0405 addi s0,s0,1 - int suppress = 0; - a42: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - a44: fd05861b addiw a2,a1,-48 - a48: 0ff67693 zext.b a3,a2 - a4c: 47a5 li a5,9 - a4e: 36d7e763 bltu a5,a3,dbc <_vscanf_core.constprop.0+0x444> - a52: 4781 li a5,0 - a54: 4825 li a6,9 - a56: a019 j a5c <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - a58: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - a5c: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - a60: 00f6093b addw s2,a2,a5 - a64: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - a68: fd05861b addiw a2,a1,-48 - a6c: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - a70: 012686bb addw a3,a3,s2 - p++; - a74: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - a76: fea871e3 bgeu a6,a0,a58 <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - a7a: 06c00693 li a3,108 - p++; - a7e: 00140b93 addi s7,s0,1 - if (*p == 'l') - a82: 1ed58f63 beq a1,a3,c80 <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - a86: 06800693 li a3,104 - a8a: 2ad58863 beq a1,a3,d3a <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - a8e: 00044c03 lbu s8,0(s0) - a92: 8ba2 mv s7,s0 - int len_mod = 0; - a94: ec02 sd zero,24(sp) - char spec = *p++; - a96: 06300693 li a3,99 - a9a: 001b8413 addi s0,s7,1 - if (!spec) - a9e: 2adc0863 beq s8,a3,d4e <_vscanf_core.constprop.0+0x3d6> - aa2: 1f86fc63 bgeu a3,s8,c9a <_vscanf_core.constprop.0+0x322> - aa6: f9cc069b addiw a3,s8,-100 - aaa: 0ff6f693 zext.b a3,a3 - aae: 4651 li a2,20 - ab0: 0cd66e63 bltu a2,a3,b8c <_vscanf_core.constprop.0+0x214> - ab4: 00120637 lui a2,0x120 - ab8: 4585 li a1,1 - aba: 00d595b3 sll a1,a1,a3 - abe: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x118799> - ac2: 8e6d and a2,a2,a1 - ac4: ee69 bnez a2,b9e <_vscanf_core.constprop.0+0x226> - ac6: 89b9 andi a1,a1,14 - ac8: 1e059263 bnez a1,cac <_vscanf_core.constprop.0+0x334> - acc: 463d li a2,15 - ace: 0ac69f63 bne a3,a2,b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - ad2: 856e mv a0,s11 - ad4: e31ff0ef jal 904 <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - ad8: ec02 sd zero,24(sp) - ada: 00099763 bnez s3,ae8 <_vscanf_core.constprop.0+0x170> - ade: 67a2 ld a5,8(sp) - ae0: 6398 ld a4,0(a5) - ae2: 07a1 addi a5,a5,8 - ae4: e43e sd a5,8(sp) - ae6: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - ae8: 018da503 lw a0,24(s11) - aec: 2e055b63 bgez a0,de2 <_vscanf_core.constprop.0+0x46a> - af0: 856e mv a0,s11 - af2: dcdff0ef jal 8be <_in_char.part.0> - while (c != -1 && !isspace(c)) - af6: 56fd li a3,-1 - af8: 6ad50363 beq a0,a3,119e <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - afc: 02000693 li a3,32 - b00: 3ed50963 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b04: 46a5 li a3,9 - b06: 3ed50663 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b0a: 46a9 li a3,10 - b0c: 3ed50363 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b10: 46ad li a3,11 - b12: 3ed50063 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b16: 46b1 li a3,12 - b18: 3cd50d63 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b1c: 46b5 li a3,13 - b1e: 3cd50a63 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b22: 67e2 ld a5,24(sp) - b24: fce6 sd s9,120(sp) - b26: f8ea sd s10,112(sp) - b28: e83e sd a5,16(sp) - b2a: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - b2c: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b2e: 02000c93 li s9,32 - if (width > 0 && i >= width) - b32: 01205463 blez s2,b3a <_vscanf_core.constprop.0+0x1c2> - b36: 052d5563 bge s10,s2,b80 <_vscanf_core.constprop.0+0x208> - if (!suppress) - b3a: 00099563 bnez s3,b44 <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - b3e: 67c2 ld a5,16(sp) - b40: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - b44: 018da503 lw a0,24(s11) - i++; - b48: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - b4a: 30055963 bgez a0,e5c <_vscanf_core.constprop.0+0x4e4> - b4e: 856e mv a0,s11 - b50: d6fff0ef jal 8be <_in_char.part.0> - while (c != -1 && !isspace(c)) - b54: 27850663 beq a0,s8,dc0 <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b58: 03950463 beq a0,s9,b80 <_vscanf_core.constprop.0+0x208> - b5c: 47a5 li a5,9 - b5e: 02f50163 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b62: 47a9 li a5,10 - b64: 00f50e63 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b68: 47ad li a5,11 - b6a: 00f50b63 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b6e: 47b1 li a5,12 - b70: 00f50863 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b74: 67c2 ld a5,16(sp) - b76: 0785 addi a5,a5,1 - b78: e83e sd a5,16(sp) - b7a: 47b5 li a5,13 - b7c: faf51be3 bne a0,a5,b32 <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - b80: 64098a63 beqz s3,11d4 <_vscanf_core.constprop.0+0x85c> - b84: 7ce6 ld s9,120(sp) - b86: 7d46 ld s10,112(sp) - ctx->ungotten = c; - b88: 00adac23 sw a0,24(s11) - while (*p) - b8c: 001bc783 lbu a5,1(s7) - b90: 794a ld s2,176(sp) - b92: 79aa ld s3,168(sp) - b94: 6baa ld s7,136(sp) - b96: 6c0a ld s8,128(sp) - b98: e00795e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - b9c: b581 j 9dc <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - b9e: 856e mv a0,s11 - ba0: f8ea sd s10,112(sp) - ba2: d63ff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - ba6: 018da503 lw a0,24(s11) - baa: 24055063 bgez a0,dea <_vscanf_core.constprop.0+0x472> - bae: 856e mv a0,s11 - bb0: d0fff0ef jal 8be <_in_char.part.0> - if (c == '-' || c == '+') - bb4: fd55069b addiw a3,a0,-43 - bb8: 9af5 andi a3,a3,-3 - bba: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - bbc: 4d01 li s10,0 - if (c == '-' || c == '+') - bbe: 3e068863 beqz a3,fae <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - bc2: 07800693 li a3,120 - bc6: 4641 li a2,16 - bc8: 00dc0863 beq s8,a3,bd8 <_vscanf_core.constprop.0+0x260> - bcc: 06900693 li a3,105 - bd0: 4629 li a2,10 - bd2: 00dc1363 bne s8,a3,bd8 <_vscanf_core.constprop.0+0x260> - bd6: 4601 li a2,0 - while (c != -1 && i < 63) - bd8: 56fd li a3,-1 - bda: 5cd50863 beq a0,a3,11aa <_vscanf_core.constprop.0+0x832> - bde: fce6 sd s9,120(sp) - be0: 02010893 addi a7,sp,32 - be4: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - be8: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - bea: fd05069b addiw a3,a0,-48 - bee: 0005031b sext.w t1,a0 - bf2: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - bf6: 27960a63 beq a2,s9,e6a <_vscanf_core.constprop.0+0x4f2> - bfa: 2a060d63 beqz a2,eb4 <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - bfe: 07800793 li a5,120 - c02: 2ef50363 beq a0,a5,ee8 <_vscanf_core.constprop.0+0x570> - c06: fa850693 addi a3,a0,-88 - c0a: 0016b693 seqz a3,a3 - c0e: 4301 li t1,0 - if (width > 0 && i >= width) - c10: 01205463 blez s2,c18 <_vscanf_core.constprop.0+0x2a0> - c14: 032d5a63 bge s10,s2,c48 <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - c18: 0066e6b3 or a3,a3,t1 - c1c: 8ecd or a3,a3,a1 - c1e: c68d beqz a3,c48 <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - c20: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - c24: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - c28: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - c2a: 22055c63 bgez a0,e62 <_vscanf_core.constprop.0+0x4ea> - c2e: 856e mv a0,s11 - c30: e832 sd a2,16(sp) - c32: c8dff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - c36: 57fd li a5,-1 - c38: 6642 ld a2,16(sp) - c3a: 3cf50263 beq a0,a5,ffe <_vscanf_core.constprop.0+0x686> - c3e: 03f00693 li a3,63 - c42: 0c05 addi s8,s8,1 - c44: fadd13e3 bne s10,a3,bea <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - c48: 040d0793 addi a5,s10,64 - c4c: 1018 addi a4,sp,32 - c4e: 97ba add a5,a5,a4 - c50: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - c54: 00adac23 sw a0,24(s11) - c58: 7ce6 ld s9,120(sp) - if (i == 0) - c5a: 1e0d0663 beqz s10,e46 <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - c5e: 36098363 beqz s3,fc4 <_vscanf_core.constprop.0+0x64c> - while (*p) - c62: 001bc783 lbu a5,1(s7) - { - c66: 794a ld s2,176(sp) - c68: 79aa ld s3,168(sp) - c6a: 6baa ld s7,136(sp) - c6c: 6c0a ld s8,128(sp) - c6e: 7d46 ld s10,112(sp) - while (*p) - c70: d20799e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - c74: b3a5 j 9dc <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - c76: 00244583 lbu a1,2(s0) - suppress = 1; - c7a: 4985 li s3,1 - p++; - c7c: 0409 addi s0,s0,2 - c7e: b3d9 j a44 <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - c80: 00144c03 lbu s8,1(s0) - len_mod = 1; - c84: 4785 li a5,1 - c86: ec3e sd a5,24(sp) - if (*p == 'l') - c88: e0bc17e3 bne s8,a1,a96 <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - c8c: 4789 li a5,2 - char spec = *p++; - c8e: 00244c03 lbu s8,2(s0) - p++; - c92: 00240b93 addi s7,s0,2 - len_mod = 2; - c96: ec3e sd a5,24(sp) - c98: bbfd j a96 <_vscanf_core.constprop.0+0x11e> - c9a: 100c0763 beqz s8,da8 <_vscanf_core.constprop.0+0x430> - c9e: fbbc079b addiw a5,s8,-69 - ca2: 0ff7f793 zext.b a5,a5 - ca6: 4689 li a3,2 - ca8: eef6e2e3 bltu a3,a5,b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - cac: 856e mv a0,s11 - cae: f8ea sd s10,112(sp) - cb0: c55ff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - cb4: 018da783 lw a5,24(s11) - cb8: 1207dd63 bgez a5,df2 <_vscanf_core.constprop.0+0x47a> - cbc: 856e mv a0,s11 - cbe: c01ff0ef jal 8be <_in_char.part.0> - if (c == '-' || c == '+') - cc2: fd55069b addiw a3,a0,-43 - cc6: ffd6f613 andi a2,a3,-3 - cca: 2601 sext.w a2,a2 - ccc: 87aa mv a5,a0 - cce: 12060c63 beqz a2,e06 <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - cd2: 567d li a2,-1 - cd4: 16c50963 beq a0,a2,e46 <_vscanf_core.constprop.0+0x4ce> - cd8: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - cda: 4d01 li s10,0 - cdc: 80000937 lui s2,0x80000 - ce0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8777> - ce2: 0932 slli s2,s2,0xc - ce4: 80194913 xori s2,s2,-2047 - ce8: 093e slli s2,s2,0xf - cea: 02010813 addi a6,sp,32 - cee: 01a80cb3 add s9,a6,s10 - cf2: 03a00c13 li s8,58 - cf6: 1935 addi s2,s2,-19 - cf8: a831 j d14 <_vscanf_core.constprop.0+0x39c> - cfa: bc5ff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - cfe: 577d li a4,-1 - d00: 87aa mv a5,a0 - d02: 2ee50563 beq a0,a4,fec <_vscanf_core.constprop.0+0x674> - d06: 03f00713 li a4,63 - d0a: 0c85 addi s9,s9,1 - d0c: 1eed0e63 beq s10,a4,f08 <_vscanf_core.constprop.0+0x590> - d10: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - d14: 00d95633 srl a2,s2,a3 - d18: 856e mv a0,s11 - d1a: 8a05 andi a2,a2,1 - d1c: 1edc6663 bltu s8,a3,f08 <_vscanf_core.constprop.0+0x590> - d20: 1e060463 beqz a2,f08 <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - d24: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - d28: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - d2c: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - d2e: fc07c6e3 bltz a5,cfa <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - d32: 577d li a4,-1 - d34: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - d38: b7f9 j d06 <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - d3a: 00144c03 lbu s8,1(s0) - int len_mod = 0; - d3e: ec02 sd zero,24(sp) - if (*p == 'h') - d40: d4bc1be3 bne s8,a1,a96 <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - d44: 00244c03 lbu s8,2(s0) - p++; - d48: 00240b93 addi s7,s0,2 - d4c: b3a9 j a96 <_vscanf_core.constprop.0+0x11e> - d4e: fce6 sd s9,120(sp) - d50: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - d52: 00090c1b sext.w s8,s2 - d56: 0d205a63 blez s2,e2a <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - d5a: 4d01 li s10,0 - d5c: 06098d63 beqz s3,dd6 <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - d60: 9c6a add s8,s8,s10 - if (c == -1) - d62: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - d64: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - d68: 856e mv a0,s11 - if (ctx->ungotten >= 0) - d6a: 0207dc63 bgez a5,da2 <_vscanf_core.constprop.0+0x42a> - d6e: b51ff0ef jal 8be <_in_char.part.0> - d72: 87aa mv a5,a0 - if (c == -1) - d74: 0b950d63 beq a0,s9,e2e <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - d78: 00099463 bnez s3,d80 <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - d7c: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - d80: 0d05 addi s10,s10,1 - d82: ffac11e3 bne s8,s10,d64 <_vscanf_core.constprop.0+0x3ec> - while (*p) - d86: 001bc783 lbu a5,1(s7) - if (!suppress) - d8a: 00099363 bnez s3,d90 <_vscanf_core.constprop.0+0x418> - assigned++; - d8e: 2b05 addiw s6,s6,1 - d90: 794a ld s2,176(sp) - d92: 79aa ld s3,168(sp) - d94: 6baa ld s7,136(sp) - d96: 6c0a ld s8,128(sp) - d98: 7ce6 ld s9,120(sp) - d9a: 7d46 ld s10,112(sp) - while (*p) - d9c: c00793e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - da0: b935 j 9dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - da2: 019dac23 sw s9,24(s11) - if (c == -1) - da6: bfc9 j d78 <_vscanf_core.constprop.0+0x400> - da8: 640e ld s0,192(sp) - daa: 74ea ld s1,184(sp) - dac: 794a ld s2,176(sp) - dae: 79aa ld s3,168(sp) - db0: 7a0a ld s4,160(sp) - db2: 6aea ld s5,152(sp) - db4: 6baa ld s7,136(sp) - db6: 6c0a ld s8,128(sp) - db8: 7da6 ld s11,104(sp) - dba: b135 j 9e6 <_vscanf_core.constprop.0+0x6e> - int width = -1; - dbc: 597d li s2,-1 - dbe: b975 j a7a <_vscanf_core.constprop.0+0x102> - if (!suppress) - dc0: 3c099c63 bnez s3,1198 <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - dc4: 67e2 ld a5,24(sp) - dc6: 01a786b3 add a3,a5,s10 - dca: 00068023 sb zero,0(a3) - while (*p) - dce: 001bc783 lbu a5,1(s7) - assigned++; - dd2: 2b05 addiw s6,s6,1 - dd4: bf75 j d90 <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - dd6: 67a2 ld a5,8(sp) - dd8: 0007bd03 ld s10,0(a5) - ddc: 07a1 addi a5,a5,8 - dde: e43e sd a5,8(sp) - de0: b741 j d60 <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - de2: 56fd li a3,-1 - de4: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - de8: bb11 j afc <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - dea: 56fd li a3,-1 - dec: 00ddac23 sw a3,24(s11) - return c; - df0: b3d1 j bb4 <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - df2: fd57869b addiw a3,a5,-43 - df6: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - dfa: 55fd li a1,-1 - dfc: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - e00: 2601 sext.w a2,a2 - e02: ec061be3 bnez a2,cd8 <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - e06: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - e0a: 018da783 lw a5,24(s11) - e0e: 2207da63 bgez a5,1042 <_vscanf_core.constprop.0+0x6ca> - e12: 856e mv a0,s11 - e14: aabff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - e18: 567d li a2,-1 - e1a: 87aa mv a5,a0 - num_buf[i++] = (char)c; - e1c: 4d05 li s10,1 - e1e: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - e22: 3ac50163 beq a0,a2,11c4 <_vscanf_core.constprop.0+0x84c> - e26: fce6 sd s9,120(sp) - e28: bd55 j cdc <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - e2a: 4c05 li s8,1 - e2c: b73d j d5a <_vscanf_core.constprop.0+0x3e2> - e2e: 640e ld s0,192(sp) - e30: 74ea ld s1,184(sp) - e32: 794a ld s2,176(sp) - e34: 79aa ld s3,168(sp) - e36: 7a0a ld s4,160(sp) - e38: 6aea ld s5,152(sp) - e3a: 6baa ld s7,136(sp) - e3c: 6c0a ld s8,128(sp) - e3e: 7ce6 ld s9,120(sp) - e40: 7d46 ld s10,112(sp) - e42: 7da6 ld s11,104(sp) - e44: b64d j 9e6 <_vscanf_core.constprop.0+0x6e> - e46: 640e ld s0,192(sp) - e48: 74ea ld s1,184(sp) - e4a: 794a ld s2,176(sp) - e4c: 79aa ld s3,168(sp) - e4e: 7a0a ld s4,160(sp) - e50: 6aea ld s5,152(sp) - e52: 6baa ld s7,136(sp) - e54: 6c0a ld s8,128(sp) - e56: 7d46 ld s10,112(sp) - e58: 7da6 ld s11,104(sp) - e5a: b671 j 9e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - e5c: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - e60: b9e5 j b58 <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - e62: 57fd li a5,-1 - e64: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - e68: bbd9 j c3e <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e6a: f9f3069b addiw a3,t1,-97 - e6e: 4795 li a5,5 - e70: 06d7f263 bgeu a5,a3,ed4 <_vscanf_core.constprop.0+0x55c> - e74: fbf3031b addiw t1,t1,-65 - e78: 4795 li a5,5 - e7a: 0467fd63 bgeu a5,t1,ed4 <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - e7e: 07800693 li a3,120 - e82: 18d50763 beq a0,a3,1010 <_vscanf_core.constprop.0+0x698> - e86: fa850693 addi a3,a0,-88 - e8a: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - e8e: 4301 li t1,0 - e90: 32061663 bnez a2,11bc <_vscanf_core.constprop.0+0x844> - e94: 4785 li a5,1 - e96: 4601 li a2,0 - e98: d6fd1ce3 bne s10,a5,c10 <_vscanf_core.constprop.0+0x298> - e9c: 02014e03 lbu t3,32(sp) - ea0: 03000793 li a5,48 - ea4: d6fe16e3 bne t3,a5,c10 <_vscanf_core.constprop.0+0x298> - ea8: d60684e3 beqz a3,c10 <_vscanf_core.constprop.0+0x298> - base = 16; - eac: 4641 li a2,16 - if (width > 0 && i >= width) - eae: d7a919e3 bne s2,s10,c20 <_vscanf_core.constprop.0+0x2a8> - eb2: bb59 j c48 <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - eb4: f9f3069b addiw a3,t1,-97 - eb8: 4795 li a5,5 - eba: 02d7f263 bgeu a5,a3,ede <_vscanf_core.constprop.0+0x566> - ebe: fbf3031b addiw t1,t1,-65 - ec2: 0467f063 bgeu a5,t1,f02 <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - ec6: 07800693 li a3,120 - eca: fad51ee3 bne a0,a3,e86 <_vscanf_core.constprop.0+0x50e> - ece: 4301 li t1,0 - ed0: 4685 li a3,1 - ed2: b7c9 j e94 <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ed4: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - ed6: 4681 li a3,0 - if (width > 0 && i >= width) - ed8: d3204ee3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - edc: bb35 j c18 <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - ede: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ee0: 4305 li t1,1 - if (width > 0 && i >= width) - ee2: d32049e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - ee6: bb0d j c18 <_vscanf_core.constprop.0+0x2a0> - ee8: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - eea: 4685 li a3,1 - if (width > 0 && i >= width) - eec: d32044e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - ef0: bb05 j c20 <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - ef2: c8099be3 bnez s3,b88 <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - ef6: 67e2 ld a5,24(sp) - ef8: 00078023 sb zero,0(a5) - ctx->ungotten = c; - efc: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - f00: b171 j b8c <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - f02: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - f04: 4305 li t1,1 - f06: b779 j e94 <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - f08: 040d0713 addi a4,s10,64 - f0c: 1014 addi a3,sp,32 - f0e: 96ba add a3,a3,a4 - f10: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - f14: 00fdac23 sw a5,24(s11) - if (i == 0) - f18: f00d0be3 beqz s10,e2e <_vscanf_core.constprop.0+0x4b6> - f1c: 7ce6 ld s9,120(sp) - if (!suppress) - f1e: d40992e3 bnez s3,c62 <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - f22: 02014603 lbu a2,32(sp) - f26: 02d00793 li a5,45 - f2a: 1af60963 beq a2,a5,10dc <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - f2e: 02b00793 li a5,43 - f32: 20f60a63 beq a2,a5,1146 <_vscanf_core.constprop.0+0x7ce> - f36: 00005797 auipc a5,0x5 - f3a: 9327b587 fld fa1,-1742(a5) # 5868 - f3e: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - f40: fd06069b addiw a3,a2,-48 - f44: 0ff6f513 zext.b a0,a3 - f48: 45a5 li a1,9 - f4a: f20007d3 fmv.d.x fa5,zero - f4e: 02a5e463 bltu a1,a0,f76 <_vscanf_core.constprop.0+0x5fe> - f52: 00005717 auipc a4,0x5 - f56: 91e73707 fld fa4,-1762(a4) # 5870 - f5a: 4525 li a0,9 - f5c: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - f60: d20686d3 fcvt.d.w fa3,a3 - str++; - f64: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - f66: fd06069b addiw a3,a2,-48 - f6a: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - f6e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - f72: feb575e3 bgeu a0,a1,f5c <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - f76: 02e00693 li a3,46 - f7a: 16d60a63 beq a2,a3,10ee <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - f7e: 0007c683 lbu a3,0(a5) - f82: 0df6f693 andi a3,a3,223 - f86: 04500613 li a2,69 - f8a: 0cc68463 beq a3,a2,1052 <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - f8e: 6722 ld a4,8(sp) - if (len_mod == 1) - f90: 4685 li a3,1 - return sign * val; - f92: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - f96: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - f98: 0721 addi a4,a4,8 - f9a: e43a sd a4,8(sp) - if (len_mod == 1) - f9c: 6762 ld a4,24(sp) - f9e: 18d70b63 beq a4,a3,1134 <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - fa2: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - fa6: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - fa8: 00f7a027 fsw fa5,0(a5) - fac: b95d j c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - fae: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - fb2: 018da503 lw a0,24(s11) - fb6: 06055463 bgez a0,101e <_vscanf_core.constprop.0+0x6a6> - fba: 856e mv a0,s11 - fbc: 903ff0ef jal 8be <_in_char.part.0> - num_buf[i++] = (char)c; - fc0: 4d05 li s10,1 - fc2: b101 j bc2 <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - fc4: 4581 li a1,0 - fc6: 1008 addi a0,sp,32 - fc8: 696030ef jal 465e - *va_arg(ap, int64 *) = val; - fcc: 67a2 ld a5,8(sp) - if (len_mod == 2) - fce: 6762 ld a4,24(sp) - fd0: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - fd2: 07a1 addi a5,a5,8 - if (len_mod == 2) - fd4: 16d70363 beq a4,a3,113a <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - fd8: 6722 ld a4,8(sp) - else if (len_mod == 1) - fda: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - fdc: 6314 ld a3,0(a4) - else if (len_mod == 1) - fde: 6762 ld a4,24(sp) - fe0: 16c70163 beq a4,a2,1142 <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - fe4: c288 sw a0,0(a3) - assigned++; - fe6: 2b05 addiw s6,s6,1 - fe8: e43e sd a5,8(sp) - fea: b9a5 j c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - fec: 040d0793 addi a5,s10,64 - ff0: 1018 addi a4,sp,32 - ff2: 00e785b3 add a1,a5,a4 - ff6: fc058023 sb zero,-64(a1) - if (i == 0) - ffa: 7ce6 ld s9,120(sp) - ffc: b70d j f1e <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - ffe: 040d0793 addi a5,s10,64 - 1002: 1018 addi a4,sp,32 - 1004: 00e78833 add a6,a5,a4 - 1008: fc080023 sb zero,-64(a6) - if (i == 0) - 100c: 7ce6 ld s9,120(sp) - 100e: b981 j c5e <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - 1010: 4301 li t1,0 - 1012: 4685 li a3,1 - if (width > 0 && i >= width) - 1014: c12040e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - 1018: b101 j c18 <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - 101a: 4b01 li s6,0 - 101c: b2e9 j 9e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - 101e: 56fd li a3,-1 - 1020: fce6 sd s9,120(sp) - 1022: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1026: 07800693 li a3,120 - 102a: 4641 li a2,16 - num_buf[i++] = (char)c; - 102c: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 102e: badc09e3 beq s8,a3,be0 <_vscanf_core.constprop.0+0x268> - 1032: 06900693 li a3,105 - 1036: 4629 li a2,10 - num_buf[i++] = (char)c; - 1038: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 103a: badc13e3 bne s8,a3,be0 <_vscanf_core.constprop.0+0x268> - 103e: 4601 li a2,0 - 1040: b645 j be0 <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - 1042: 56fd li a3,-1 - 1044: fce6 sd s9,120(sp) - 1046: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 104a: 4d05 li s10,1 - 104c: fd57869b addiw a3,a5,-43 - 1050: b171 j cdc <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 1052: 0017c583 lbu a1,1(a5) - 1056: 02d00693 li a3,45 - 105a: 0ed58f63 beq a1,a3,1158 <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 105e: 02b00693 li a3,43 - 1062: 10d58e63 beq a1,a3,117e <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 1066: fd05861b addiw a2,a1,-48 - 106a: 0ff67513 zext.b a0,a2 - 106e: 45a5 li a1,9 - str++; - 1070: 00178693 addi a3,a5,1 - int esign = 1; - 1074: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 1076: 04a5ec63 bltu a1,a0,10ce <_vscanf_core.constprop.0+0x756> - 107a: 4525 li a0,9 - 107c: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 1080: 0029979b slliw a5,s3,0x2 - 1084: 013787bb addw a5,a5,s3 - 1088: 0017979b slliw a5,a5,0x1 - 108c: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 1090: fd05861b addiw a2,a1,-48 - 1094: 0ff67593 zext.b a1,a2 - str++; - 1098: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 109a: feb571e3 bgeu a0,a1,107c <_vscanf_core.constprop.0+0x704> - while (eval--) - 109e: fff9879b addiw a5,s3,-1 - 10a2: 12098463 beqz s3,11ca <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 10a6: 00004717 auipc a4,0x4 - 10aa: 7c273687 fld fa3,1986(a4) # 5868 - 10ae: 00004717 auipc a4,0x4 - 10b2: 7c273707 fld fa4,1986(a4) # 5870 - while (eval--) - 10b6: 56fd li a3,-1 - 10b8: 37fd addiw a5,a5,-1 - p *= 10.0; - 10ba: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 10be: fed79de3 bne a5,a3,10b8 <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 10c2: 4785 li a5,1 - 10c4: 00f80963 beq a6,a5,10d6 <_vscanf_core.constprop.0+0x75e> - val /= p; - 10c8: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 10cc: b5c9 j f8e <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 10ce: 00004797 auipc a5,0x4 - 10d2: 79a7b687 fld fa3,1946(a5) # 5868 - val *= p; - 10d6: 12d7f7d3 fmul.d fa5,fa5,fa3 - 10da: bd55 j f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 10dc: 00004797 auipc a5,0x4 - 10e0: 7847b587 fld fa1,1924(a5) # 5860 - 10e4: 02114603 lbu a2,33(sp) - str++; - 10e8: 02110793 addi a5,sp,33 - 10ec: bd91 j f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 10ee: 0017c683 lbu a3,1(a5) - 10f2: 45a5 li a1,9 - str++; - 10f4: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 10f6: fd06861b addiw a2,a3,-48 - 10fa: 0ff67513 zext.b a0,a2 - 10fe: e8a5e2e3 bltu a1,a0,f82 <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 1102: 00004717 auipc a4,0x4 - 1106: 76e73707 fld fa4,1902(a4) # 5870 - 110a: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 110e: 4525 li a0,9 - val += (*str - '0') / div; - 1110: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 1114: 0017c683 lbu a3,1(a5) - str++; - 1118: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 111a: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 111e: fd06861b addiw a2,a3,-48 - 1122: 0ff67593 zext.b a1,a2 - div *= 10.0; - 1126: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 112a: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 112e: feb571e3 bgeu a0,a1,1110 <_vscanf_core.constprop.0+0x798> - 1132: bd81 j f82 <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 1134: a39c fsd fa5,0(a5) - assigned++; - 1136: 2b05 addiw s6,s6,1 - 1138: b62d j c62 <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 113a: 6722 ld a4,8(sp) - 113c: 6314 ld a3,0(a4) - 113e: e288 sd a0,0(a3) - 1140: b55d j fe6 <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 1142: e288 sd a0,0(a3) - 1144: b54d j fe6 <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 1146: 00004797 auipc a5,0x4 - 114a: 7227b587 fld fa1,1826(a5) # 5868 - 114e: 02114603 lbu a2,33(sp) - str++; - 1152: 02110793 addi a5,sp,33 - 1156: b3ed j f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 1158: 0027c583 lbu a1,2(a5) - str++; - 115c: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1160: 4525 li a0,9 - 1162: fd05861b addiw a2,a1,-48 - 1166: 0ff67793 zext.b a5,a2 - esign = -1; - 116a: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 116c: f0f577e3 bgeu a0,a5,107a <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 1170: 00004797 auipc a5,0x4 - 1174: 6f87b687 fld fa3,1784(a5) # 5868 - val /= p; - 1178: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 117c: bd09 j f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 117e: 0027c583 lbu a1,2(a5) - str++; - 1182: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1186: 4525 li a0,9 - 1188: fd05861b addiw a2,a1,-48 - 118c: 0ff67793 zext.b a5,a2 - 1190: f2f56fe3 bltu a0,a5,10ce <_vscanf_core.constprop.0+0x756> - int esign = 1; - 1194: 4805 li a6,1 - 1196: b5d5 j 107a <_vscanf_core.constprop.0+0x702> - while (*p) - 1198: 001bc783 lbu a5,1(s7) - 119c: bed5 j d90 <_vscanf_core.constprop.0+0x418> - if (!suppress) - 119e: 9e0997e3 bnez s3,b8c <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 11a2: 67e2 ld a5,24(sp) - 11a4: 00078023 sb zero,0(a5) - 11a8: b2d5 j b8c <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 11aa: 040d0793 addi a5,s10,64 - 11ae: 1018 addi a4,sp,32 - 11b0: 97ba add a5,a5,a4 - 11b2: fc078023 sb zero,-64(a5) - if (i == 0) - 11b6: aa0d14e3 bnez s10,c5e <_vscanf_core.constprop.0+0x2e6> - 11ba: b171 j e46 <_vscanf_core.constprop.0+0x4ce> - 11bc: 4641 li a2,16 - if (width > 0 && i >= width) - 11be: a5204be3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - 11c2: bc99 j c18 <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 11c4: 020100a3 sb zero,33(sp) - if (i == 0) - 11c8: bb99 j f1e <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 11ca: 00004797 auipc a5,0x4 - 11ce: 69e7b687 fld fa3,1694(a5) # 5868 - 11d2: bdc5 j 10c2 <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 11d4: 67e2 ld a5,24(sp) - 11d6: 01a786b3 add a3,a5,s10 - 11da: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 11de: 00adac23 sw a0,24(s11) - while (*p) - 11e2: 001bc783 lbu a5,1(s7) - 11e6: b6f5 j dd2 <_vscanf_core.constprop.0+0x45a> - -00000000000011e8 <_out_char>: -{ - 11e8: 7179 addi sp,sp,-48 - 11ea: ec26 sd s1,24(sp) - if (ctx->stream) - 11ec: 6d04 ld s1,24(a0) -{ - 11ee: f022 sd s0,32(sp) - 11f0: f406 sd ra,40(sp) - 11f2: 842a mv s0,a0 - 11f4: 872e mv a4,a1 - if (ctx->stream) - 11f6: c0a1 beqz s1,1236 <_out_char+0x4e> - 11f8: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 11fa: 41c4a903 lw s2,1052(s1) - 11fe: 4789 li a5,2 - 1200: 04f90d63 beq s2,a5,125a <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 1204: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 1208: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 120c: 0017861b addiw a2,a5,1 - 1210: 40c4a823 sw a2,1040(s1) - 1214: 97a6 add a5,a5,s1 - 1216: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 121a: 08c6c063 blt a3,a2,129a <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 121e: 4785 li a5,1 - 1220: 04f90a63 beq s2,a5,1274 <_out_char+0x8c> - ctx->written++; - 1224: 681c ld a5,16(s0) - 1226: 6942 ld s2,16(sp) -} - 1228: 70a2 ld ra,40(sp) - ctx->written++; - 122a: 0785 addi a5,a5,1 - 122c: e81c sd a5,16(s0) -} - 122e: 7402 ld s0,32(sp) - 1230: 64e2 ld s1,24(sp) - 1232: 6145 addi sp,sp,48 - 1234: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 1236: 6514 ld a3,8(a0) - 1238: 691c ld a5,16(a0) - 123a: ca89 beqz a3,124c <_out_char+0x64> - 123c: 16fd addi a3,a3,-1 - 123e: 00d7f763 bgeu a5,a3,124c <_out_char+0x64> - ctx->buf[ctx->written] = c; - 1242: 6114 ld a3,0(a0) - 1244: 97b6 add a5,a5,a3 - 1246: 00b78023 sb a1,0(a5) - ctx->written++; - 124a: 691c ld a5,16(a0) - 124c: 0785 addi a5,a5,1 -} - 124e: 70a2 ld ra,40(sp) - ctx->written++; - 1250: e81c sd a5,16(s0) -} - 1252: 7402 ld s0,32(sp) - 1254: 64e2 ld s1,24(sp) - 1256: 6145 addi sp,sp,48 - 1258: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 125a: 4088 lw a0,0(s1) - 125c: 4605 li a2,1 - 125e: 00f10593 addi a1,sp,15 - char ch = (char)c; - 1262: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 1266: e8bfe0ef jal f0 - 126a: 4785 li a5,1 - 126c: faf50ce3 beq a0,a5,1224 <_out_char+0x3c> - stream->error = 1; - 1270: c49c sw a5,8(s1) - return EOF; - 1272: bf4d j 1224 <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 1274: 47a9 li a5,10 - 1276: faf597e3 bne a1,a5,1224 <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 127a: fac055e3 blez a2,1224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 127e: 4088 lw a0,0(s1) - 1280: 01048593 addi a1,s1,16 - 1284: e6dfe0ef jal f0 - if (ret < stream->buf_write_pos) - 1288: 4104a783 lw a5,1040(s1) - 128c: 02f55063 bge a0,a5,12ac <_out_char+0xc4> - stream->error = 1; - 1290: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 1294: 4004a823 sw zero,1040(s1) - return EOF; - 1298: b771 j 1224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 129a: 4088 lw a0,0(s1) - 129c: 01048593 addi a1,s1,16 - 12a0: e51fe0ef jal f0 - if (ret < stream->buf_write_pos) - 12a4: 4104a783 lw a5,1040(s1) - 12a8: 00f54563 blt a0,a5,12b2 <_out_char+0xca> - stream->buf_write_pos = 0; - 12ac: 4004a823 sw zero,1040(s1) - 12b0: bf95 j 1224 <_out_char+0x3c> - stream->error = 1; - 12b2: 4785 li a5,1 - 12b4: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 12b6: 4004a823 sw zero,1040(s1) - return EOF; - 12ba: b7ad j 1224 <_out_char+0x3c> - -00000000000012bc : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 12bc: 00005797 auipc a5,0x5 - 12c0: 6d478793 addi a5,a5,1748 # 6990 - 12c4: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 12c8: 0ca786a3 sb a0,205(a5) -} - 12cc: 8082 ret - -00000000000012ce : - - 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) -{ - 12ce: 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; - 12d2: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12d6: 252523b7 lui t2,0x25252 - 12da: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524ac9d> -{ - 12de: 29913c23 sd s9,664(sp) - 12e2: 29b13423 sd s11,648(sp) - int tlen = 0; - 12e6: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12e8: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 12ec: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808007f8> -{ - 12f0: 2e813023 sd s0,736(sp) - 12f4: 2c913c23 sd s1,728(sp) - 12f8: 2d213823 sd s2,720(sp) - 12fc: 2d313423 sd s3,712(sp) - 1300: 2b713423 sd s7,680(sp) - 1304: 2b813023 sd s8,672(sp) - 1308: 29a13823 sd s10,656(sp) - 130c: 2e113423 sd ra,744(sp) - 1310: 8d66 mv s10,s9 - 1312: 8432 mv s0,a2 - 1314: 8c9e mv s9,t2 - 1316: 89aa mv s3,a0 - 1318: e42e sd a1,8(sp) - 131a: 84b6 mv s1,a3 - 131c: 8bba mv s7,a4 - 131e: fc02 sd zero,56(sp) - for (;;) { - 1320: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1322: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8677> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1326: 20000c13 li s8,512 - 132a: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 132c: 0034f793 andi a5,s1,3 - 1330: c7a9 beqz a5,137a - if (f[0] == '%') - 1332: 0004c783 lbu a5,0(s1) - 1336: 02500713 li a4,37 - 133a: 0ee78263 beq a5,a4,141e - if (f[0] == 0) - 133e: cbd9 beqz a5,13d4 - stbsp__chk_cb_buf(1); - 1340: 02098663 beqz s3,136c - 1344: 4124063b subw a2,s0,s2 - 1348: 1fe00713 li a4,510 - 134c: 02c75063 bge a4,a2,136c - 1350: 65a2 ld a1,8(sp) - 1352: 854a mv a0,s2 - 1354: e81e sd t2,16(sp) - 1356: 00cd0d3b addw s10,s10,a2 - 135a: 9982 jalr s3 - 135c: 892a mv s2,a0 - 135e: e119 bnez a0,1364 - 1360: 0200106f j 2380 - *bf++ = f[0]; - 1364: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 1368: 63c2 ld t2,16(sp) - 136a: 842a mv s0,a0 - ++f; - 136c: 0485 addi s1,s1,1 - *bf++ = f[0]; - 136e: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 1372: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 1376: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 1378: ffcd bnez a5,1332 - v = *(stbsp__uint32 *)f; - 137a: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 137c: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1380: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 1384: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1388: 01b7073b addw a4,a4,s11 - 138c: 8f7d and a4,a4,a5 - 138e: 2701 sext.w a4,a4 - 1390: f34d bnez a4,1332 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1392: 460d li a2,3 - 1394: a805 j 13c4 - if (callback) - 1396: 00098863 beqz s3,13a6 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 139a: 412407b3 sub a5,s0,s2 - 139e: 40fc07bb subw a5,s8,a5 - 13a2: f8f658e3 bge a2,a5,1332 - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 13a6: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 13a8: 40d4 lw a3,4(s1) - } - bf += 4; - 13aa: 0411 addi s0,s0,4 - f += 4; - 13ac: 0491 addi s1,s1,4 - c = (~v) & 0x80808080; - 13ae: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13b2: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 13b6: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13ba: 01b7073b addw a4,a4,s11 - 13be: 8f7d and a4,a4,a5 - 13c0: 2701 sext.w a4,a4 - 13c2: fb25 bnez a4,1332 - if ((v - 0x01010101) & c) - 13c4: 01b6873b addw a4,a3,s11 - 13c8: 8ff9 and a5,a5,a4 - 13ca: 2781 sext.w a5,a5 - 13cc: d7e9 beqz a5,1396 - if (f[0] == 0) - 13ce: 0004c783 lbu a5,0(s1) - 13d2: f7bd bnez a5,1340 -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 13d4: 8cea mv s9,s10 - 13d6: 412404bb subw s1,s0,s2 - if (!callback) - 13da: 70098563 beqz s3,1ae4 - stbsp__flush_cb(); - 13de: 00905663 blez s1,13ea - 13e2: 65a2 ld a1,8(sp) - 13e4: 8626 mv a2,s1 - 13e6: 854a mv a0,s2 - 13e8: 9982 jalr s3 - 13ea: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 13ee: 2e813083 ld ra,744(sp) - 13f2: 2e013403 ld s0,736(sp) - 13f6: 2d813483 ld s1,728(sp) - 13fa: 2d013903 ld s2,720(sp) - 13fe: 2c813983 ld s3,712(sp) - 1402: 2a813b83 ld s7,680(sp) - 1406: 2a013c03 ld s8,672(sp) - 140a: 29013d03 ld s10,656(sp) - 140e: 28813d83 ld s11,648(sp) - 1412: 8566 mv a0,s9 - 1414: 29813c83 ld s9,664(sp) - 1418: 2f010113 addi sp,sp,752 - 141c: 8082 ret - 141e: 2d413023 sd s4,704(sp) - 1422: 2b513c23 sd s5,696(sp) - 1426: 2b613823 sd s6,688(sp) - tz = 0; - 142a: 00248693 addi a3,s1,2 - fl = 0; - 142e: 4e01 li t3,0 - switch (f[0]) { - 1430: 03f00593 li a1,63 - 1434: 00004617 auipc a2,0x4 - 1438: d5460613 addi a2,a2,-684 # 5188 <_GLOBAL__sub_I__ZSt3cin+0x198> - 143c: fff6c783 lbu a5,-1(a3) - 1440: fff68493 addi s1,a3,-1 - 1444: fe07871b addiw a4,a5,-32 - 1448: 0ff77713 zext.b a4,a4 - 144c: 00e5ec63 bltu a1,a4,1464 - 1450: 070a slli a4,a4,0x2 - 1452: 9732 add a4,a4,a2 - 1454: 4318 lw a4,0(a4) - 1456: 9732 add a4,a4,a2 - 1458: 8702 jr a4 - if (f[0] == '*') { - 145a: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 145e: 010e6e13 ori t3,t3,16 - ++f; - 1462: 0485 addi s1,s1,1 - if (f[0] == '*') { - 1464: 02a00713 li a4,42 - 1468: 0ce79163 bne a5,a4,152a - fw = va_arg(va, stbsp__uint32); - 146c: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 1470: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 1474: 0ba1 addi s7,s7,8 - ++f; - 1476: 0485 addi s1,s1,1 - if (f[0] == '.') { - 1478: 02e00713 li a4,46 - pr = -1; - 147c: 58fd li a7,-1 - if (f[0] == '.') { - 147e: 0ee78663 beq a5,a4,156a - switch (f[0]) { - 1482: 04900713 li a4,73 - 1486: 10e78263 beq a5,a4,158a - 148a: f987871b addiw a4,a5,-104 - 148e: 0ff77713 zext.b a4,a4 - 1492: 46c9 li a3,18 - 1494: 02e6e063 bltu a3,a4,14b4 - 1498: 00004697 auipc a3,0x4 - 149c: df068693 addi a3,a3,-528 # 5288 <_GLOBAL__sub_I__ZSt3cin+0x298> - 14a0: 070a slli a4,a4,0x2 - 14a2: 9736 add a4,a4,a3 - 14a4: 4318 lw a4,0(a4) - 14a6: 9736 add a4,a4,a3 - 14a8: 8702 jr a4 - if (f[0] == 'h') - 14aa: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 14ae: 020e6e13 ori t3,t3,32 - ++f; - 14b2: 0485 addi s1,s1,1 - switch (f[0]) { - 14b4: fbf7871b addiw a4,a5,-65 - 14b8: 0ff77713 zext.b a4,a4 - 14bc: 03700693 li a3,55 - 14c0: 0ee6ea63 bltu a3,a4,15b4 - 14c4: 00004697 auipc a3,0x4 - 14c8: e1068693 addi a3,a3,-496 # 52d4 <_GLOBAL__sub_I__ZSt3cin+0x2e4> - 14cc: 070a slli a4,a4,0x2 - 14ce: 9736 add a4,a4,a3 - 14d0: 4318 lw a4,0(a4) - 14d2: 9736 add a4,a4,a3 - 14d4: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 14d6: 400e6e13 ori t3,t3,1024 - continue; - 14da: 0685 addi a3,a3,1 - 14dc: b785 j 143c - fl |= STBSP__LEFTJUST; - 14de: 001e6e13 ori t3,t3,1 - continue; - 14e2: 0685 addi a3,a3,1 - 14e4: bfa1 j 143c - fl |= STBSP__LEADINGPLUS; - 14e6: 002e6e13 ori t3,t3,2 - continue; - 14ea: 0685 addi a3,a3,1 - 14ec: bf81 j 143c - fl |= STBSP__TRIPLET_COMMA; - 14ee: 040e6e13 ori t3,t3,64 - continue; - 14f2: 0685 addi a3,a3,1 - 14f4: b7a1 j 143c - if (fl & STBSP__METRIC_SUFFIX) { - 14f6: 100e7793 andi a5,t3,256 - 14fa: 8772 mv a4,t3 - 14fc: 56078363 beqz a5,1a62 - if (fl & STBSP__METRIC_1024) { - 1500: 6785 lui a5,0x1 - 1502: 034e1513 slli a0,t3,0x34 - 1506: 80078793 addi a5,a5,-2048 # 800 - 150a: 5c055863 bgez a0,1ada - fl |= STBSP__METRIC_JEDEC; - 150e: 6785 lui a5,0x1 - 1510: 8f5d or a4,a4,a5 - 1512: 00070e1b sext.w t3,a4 - 1516: 0685 addi a3,a3,1 - 1518: b715 j 143c - fl |= STBSP__LEADING_0X; - 151a: 008e6e13 ori t3,t3,8 - continue; - 151e: 0685 addi a3,a3,1 - 1520: bf31 j 143c - fl |= STBSP__LEADINGSPACE; - 1522: 004e6e13 ori t3,t3,4 - continue; - 1526: 0685 addi a3,a3,1 - 1528: bf11 j 143c - while ((f[0] >= '0') && (f[0] <= '9')) { - 152a: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x658> - 152e: 0ff77713 zext.b a4,a4 - 1532: 4625 li a2,9 - fw = 0; - 1534: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1536: 46a5 li a3,9 - 1538: f4e660e3 bltu a2,a4,1478 - fw = fw * 10 + f[0] - '0'; - 153c: 002b171b slliw a4,s6,0x2 - 1540: 0167073b addw a4,a4,s6 - 1544: 0017171b slliw a4,a4,0x1 - f++; - 1548: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 154a: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 154c: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 1550: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1554: fd07871b addiw a4,a5,-48 - 1558: 0ff77713 zext.b a4,a4 - 155c: fee6f0e3 bgeu a3,a4,153c - if (f[0] == '.') { - 1560: 02e00713 li a4,46 - pr = -1; - 1564: 58fd li a7,-1 - if (f[0] == '.') { - 1566: f0e79ee3 bne a5,a4,1482 - if (f[0] == '*') { - 156a: 0014c783 lbu a5,1(s1) - 156e: 02a00713 li a4,42 - 1572: 52e79763 bne a5,a4,1aa0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1576: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 157a: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 157e: 000ba883 lw a7,0(s7) - ++f; - 1582: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 1584: 0ba1 addi s7,s7,8 - switch (f[0]) { - 1586: f0e792e3 bne a5,a4,148a - if ((f[1] == '6') && (f[2] == '4')) { - 158a: 0014c783 lbu a5,1(s1) - 158e: 03600713 li a4,54 - 1592: 00e79463 bne a5,a4,159a - 1596: 1e60106f j 277c - } else if ((f[1] == '3') && (f[2] == '2')) { - 159a: 03300713 li a4,51 - 159e: 6ae796e3 bne a5,a4,244a - 15a2: 0024c683 lbu a3,2(s1) - 15a6: 03200713 li a4,50 - 15aa: 00e69463 bne a3,a4,15b2 - 15ae: 0ae0106f j 265c - ++f; - 15b2: 0485 addi s1,s1,1 - *s = f[0]; - 15b4: 26f10fa3 sb a5,639(sp) - l = 1; - 15b8: 4785 li a5,1 - 15ba: d0be sw a5,96(sp) - lead[0] = 0; - 15bc: 06010423 sb zero,104(sp) - tail[0] = 0; - 15c0: 06010823 sb zero,112(sp) - dp = 0; - 15c4: d282 sw zero,100(sp) - 15c6: e0de sd s7,64(sp) - 15c8: 4701 li a4,0 - 15ca: 4301 li t1,0 - 15cc: 4f81 li t6,0 - 15ce: 4685 li a3,1 - 15d0: 4a01 li s4,0 - cs = 0; - 15d2: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 15d4: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 15d8: 4e01 li t3,0 - tz = 0; - 15da: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 15dc: 010e7793 andi a5,t3,16 - 15e0: 40078ee3 beqz a5,21fc - pr = (fw > pr) ? fw : pr; - 15e4: 87ba mv a5,a4 - 15e6: 00675363 bge a4,t1,15ec - 15ea: 879a mv a5,t1 - 15ec: 0007871b sext.w a4,a5 - fw = 0; - 15f0: 4301 li t1,0 - if (fw + pr) { - 15f2: 62070563 beqz a4,1c1c - sn = lead + 1; - 15f6: 06910793 addi a5,sp,105 - 15fa: fcbe sd a5,120(sp) - while (lead[0]) { - 15fc: 0a0a0863 beqz s4,16ac - stbsp__cb_buf_clamp(i, lead[0]); - 1600: f026 sd s1,32(sp) - 1602: f436 sd a3,40(sp) - 1604: 854a mv a0,s2 - 1606: 86d2 mv a3,s4 - 1608: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 160a: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 160e: 89be mv s3,a5 - 1610: 20000b13 li s6,512 - 1614: 87a2 mv a5,s0 - 1616: e846 sd a7,16(sp) - 1618: 846a mv s0,s10 - 161a: ec7e sd t6,24(sp) - 161c: 8d6e mv s10,s11 - 161e: f872 sd t3,48(sp) - 1620: 8de6 mv s11,s9 - 1622: 8a3a mv s4,a4 - 1624: e496 sd t0,72(sp) - 1626: 891a mv s2,t1 - 1628: 8c9e mv s9,t2 - 162a: 0006871b sext.w a4,a3 - 162e: 2e0482e3 beqz s1,2112 - 1632: 40a7863b subw a2,a5,a0 - 1636: 40cb083b subw a6,s6,a2 - 163a: 85c2 mv a1,a6 - 163c: 01075363 bge a4,a6,1642 - 1640: 85ba mv a1,a4 - lead[0] -= (char)i; - 1642: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 1644: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 1648: 06d10423 sb a3,104(sp) - while (i) { - 164c: c70d beqz a4,1676 - 164e: 7866 ld a6,120(sp) - 1650: 02071593 slli a1,a4,0x20 - 1654: 9181 srli a1,a1,0x20 - 1656: 00b78633 add a2,a5,a1 - 165a: 8742 mv a4,a6 - *bf++ = *sn++; - 165c: 00074683 lbu a3,0(a4) - 1660: 0785 addi a5,a5,1 - while (i) { - 1662: 0705 addi a4,a4,1 - *bf++ = *sn++; - 1664: fed78fa3 sb a3,-1(a5) - while (i) { - 1668: fec79ae3 bne a5,a2,165c - 166c: 982e add a6,a6,a1 - 166e: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1670: c899 beqz s1,1686 - 1672: 40a7863b subw a2,a5,a0 - 1676: 00cbd863 bge s7,a2,1686 - 167a: 65a2 ld a1,8(sp) - 167c: 9c31 addw s0,s0,a2 - 167e: 9482 jalr s1 - 1680: 34050ee3 beqz a0,21dc - 1684: 87aa mv a5,a0 - while (lead[0]) { - 1686: 06814683 lbu a3,104(sp) - 168a: f2c5 bnez a3,162a - 168c: 83e6 mv t2,s9 - 168e: 68c2 ld a7,16(sp) - 1690: 8cee mv s9,s11 - 1692: 6fe2 ld t6,24(sp) - 1694: 8dea mv s11,s10 - 1696: 76a2 ld a3,40(sp) - 1698: 8d22 mv s10,s0 - 169a: 7e42 ld t3,48(sp) - 169c: 843e mv s0,a5 - 169e: 62a6 ld t0,72(sp) - 16a0: 87ce mv a5,s3 - 16a2: 89a6 mv s3,s1 - 16a4: 7482 ld s1,32(sp) - 16a6: 834a mv t1,s2 - 16a8: 8752 mv a4,s4 - 16aa: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16ac: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 16b0: 0182d61b srliw a2,t0,0x18 - 16b4: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16b8: 4a01 li s4,0 - 16ba: 000b0e63 beqz s6,16d6 - cs &= 0xffffff; - 16be: 02829a13 slli s4,t0,0x28 - 16c2: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16c6: 00ea0a3b addw s4,s4,a4 - 16ca: 0016059b addiw a1,a2,1 - 16ce: 02ba7a3b remuw s4,s4,a1 - 16d2: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 16d6: 0ce05763 blez a4,17a4 - *(stbsp__uint32 *)bf = 0x30303030; - 16da: 30303837 lui a6,0x30303 - 16de: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 16e2: f026 sd s1,32(sp) - 16e4: 854a mv a0,s2 - 16e6: 84da mv s1,s6 - 16e8: 895e mv s2,s7 - 16ea: e4d6 sd s5,72(sp) - 16ec: 8b4e mv s6,s3 - 16ee: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 16f0: 1fe00293 li t0,510 - 16f4: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 16f6: 00005f17 auipc t5,0x5 - 16fa: 29af0f13 addi t5,t5,666 # 6990 - 16fe: 8de6 mv s11,s9 - *bf++ = '0'; - 1700: 03000e93 li t4,48 - 1704: e846 sd a7,16(sp) - 1706: ec7e sd t6,24(sp) - 1708: f436 sd a3,40(sp) - 170a: f872 sd t3,48(sp) - 170c: e89a sd t1,80(sp) - 170e: 89ba mv s3,a4 - 1710: ecbe sd a5,88(sp) - 1712: 8bc2 mv s7,a6 - 1714: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 1716: 240b0ee3 beqz s6,2172 - 171a: 40a407b3 sub a5,s0,a0 - 171e: 40fc063b subw a2,s8,a5 - 1722: 87b2 mv a5,a2 - 1724: 00c9d363 bge s3,a2,172a - 1728: 87ce mv a5,s3 - 172a: 0007859b sext.w a1,a5 - pr -= i; - 172e: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 1732: 32048c63 beqz s1,1a6a - while (i) { - 1736: 34058a63 beqz a1,1a8a - 173a: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 173c: 0cdf4603 lbu a2,205(t5) - 1740: 9181 srli a1,a1,0x20 - 1742: 95a2 add a1,a1,s0 - 1744: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 1746: c481 beqz s1,174e - 1748: 1d4901e3 beq s2,s4,210a - 174c: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 174e: 03000793 li a5,48 - 1752: fef40fa3 sb a5,-1(s0) - while (i) { - 1756: fe8597e3 bne a1,s0,1744 - stbsp__chk_cb_buf(1); - 175a: 320b0b63 beqz s6,1a90 - 175e: 40a5863b subw a2,a1,a0 - 1762: 32c2d763 bge t0,a2,1a90 - 1766: 65a2 ld a1,8(sp) - 1768: 01560abb addw s5,a2,s5 - 176c: 9b02 jalr s6 - 176e: 3a050ce3 beqz a0,2326 - 1772: 842a mv s0,a0 - 1774: 1fe00293 li t0,510 - 1778: 00005f17 auipc t5,0x5 - 177c: 218f0f13 addi t5,t5,536 # 6990 - 1780: 03000e93 li t4,48 - while (pr > 0) { - 1784: f93049e3 bgtz s3,1716 - while (lead[0]) { - 1788: 83e6 mv t2,s9 - 178a: 68c2 ld a7,16(sp) - 178c: 8cee mv s9,s11 - 178e: 6fe2 ld t6,24(sp) - 1790: 8dea mv s11,s10 - 1792: 7482 ld s1,32(sp) - 1794: 8d56 mv s10,s5 - 1796: 76a2 ld a3,40(sp) - 1798: 7e42 ld t3,48(sp) - 179a: 6346 ld t1,80(sp) - 179c: 67e6 ld a5,88(sp) - 179e: 6aa6 ld s5,72(sp) - 17a0: 892a mv s2,a0 - 17a2: 89da mv s3,s6 - 17a4: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 17a8: fcbe sd a5,120(sp) - while (lead[0]) { - 17aa: 0a0a0263 beqz s4,184e - stbsp__cb_buf_clamp(i, lead[0]); - 17ae: ec26 sd s1,24(sp) - 17b0: f036 sd a3,32(sp) - 17b2: 854a mv a0,s2 - 17b4: 86d2 mv a3,s4 - 17b6: 84ce mv s1,s3 - 17b8: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 17ba: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 17be: 846a mv s0,s10 - 17c0: 20000b13 li s6,512 - 17c4: 8d6e mv s10,s11 - 17c6: e846 sd a7,16(sp) - 17c8: 8de6 mv s11,s9 - 17ca: 8a7e mv s4,t6 - 17cc: 8972 mv s2,t3 - 17ce: 899a mv s3,t1 - 17d0: 8c9e mv s9,t2 - 17d2: 0006871b sext.w a4,a3 - 17d6: 140482e3 beqz s1,211a - 17da: 40a7863b subw a2,a5,a0 - 17de: 40cb083b subw a6,s6,a2 - 17e2: 85c2 mv a1,a6 - 17e4: 01075363 bge a4,a6,17ea - 17e8: 85ba mv a1,a4 - lead[0] -= (char)i; - 17ea: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 17ec: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 17f0: 06d10423 sb a3,104(sp) - while (i) { - 17f4: c70d beqz a4,181e - 17f6: 7866 ld a6,120(sp) - 17f8: 02071593 slli a1,a4,0x20 - 17fc: 9181 srli a1,a1,0x20 - 17fe: 00b78633 add a2,a5,a1 - 1802: 8742 mv a4,a6 - *bf++ = *sn++; - 1804: 00074683 lbu a3,0(a4) - 1808: 0785 addi a5,a5,1 - while (i) { - 180a: 0705 addi a4,a4,1 - *bf++ = *sn++; - 180c: fed78fa3 sb a3,-1(a5) - while (i) { - 1810: fec79ae3 bne a5,a2,1804 - 1814: 982e add a6,a6,a1 - 1816: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1818: c899 beqz s1,182e - 181a: 40a7863b subw a2,a5,a0 - 181e: 00cbd863 bge s7,a2,182e - 1822: 65a2 ld a1,8(sp) - 1824: 9c31 addw s0,s0,a2 - 1826: 9482 jalr s1 - 1828: 1a050ae3 beqz a0,21dc - 182c: 87aa mv a5,a0 - while (lead[0]) { - 182e: 06814683 lbu a3,104(sp) - 1832: f2c5 bnez a3,17d2 - 1834: 834e mv t1,s3 - 1836: 68c2 ld a7,16(sp) - 1838: 89a6 mv s3,s1 - 183a: 7682 ld a3,32(sp) - 183c: 64e2 ld s1,24(sp) - 183e: 8e4a mv t3,s2 - 1840: 83e6 mv t2,s9 - 1842: 8fd2 mv t6,s4 - 1844: 8cee mv s9,s11 - 1846: 892a mv s2,a0 - 1848: 8dea mv s11,s10 - 184a: 8d22 mv s10,s0 - 184c: 843e mv s0,a5 - while (n) { - 184e: c6f9 beqz a3,191c - STBSP__UNALIGNED(while (i >= 4) { - 1850: ec26 sd s1,24(sp) - 1852: 854a mv a0,s2 - 1854: 84d6 mv s1,s5 - 1856: 896a mv s2,s10 - 1858: 87a2 mv a5,s0 - 185a: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 185c: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 1860: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 1862: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 1866: 4a0d li s4,3 - 1868: e87e sd t6,16(sp) - 186a: f072 sd t3,32(sp) - 186c: 8ac6 mv s5,a7 - 186e: f41a sd t1,40(sp) - 1870: 8436 mv s0,a3 - 1872: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 1874: 0004071b sext.w a4,s0 - 1878: 100982e3 beqz s3,217c - 187c: 40a78633 sub a2,a5,a0 - 1880: 40cb05bb subw a1,s6,a2 - 1884: 862e mv a2,a1 - 1886: 00b75363 bge a4,a1,188c - 188a: 863a mv a2,a4 - 188c: 0006071b sext.w a4,a2 - n -= i; - 1890: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 1892: 14ea50e3 bge s4,a4,21d2 - 1896: ffc70f1b addiw t5,a4,-4 - 189a: 002f5e9b srliw t4,t5,0x2 - 189e: 001e8e1b addiw t3,t4,1 - 18a2: 0e0a slli t3,t3,0x2 - 18a4: 01c785b3 add a1,a5,t3 - 18a8: 8626 mv a2,s1 - 18aa: 4218 lw a4,0(a2) - 18ac: 0791 addi a5,a5,4 - 18ae: 0611 addi a2,a2,4 - 18b0: 2701 sext.w a4,a4 - 18b2: fee7ae23 sw a4,-4(a5) - 18b6: feb79ae3 bne a5,a1,18aa - 18ba: 002e9e9b slliw t4,t4,0x2 - 18be: 41df073b subw a4,t5,t4 - while (i) { - 18c2: 94f2 add s1,s1,t3 - 18c4: c31d beqz a4,18ea - 18c6: 8626 mv a2,s1 - 18c8: 87ae mv a5,a1 - 18ca: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 18ce: 00064e83 lbu t4,0(a2) - 18d2: 0785 addi a5,a5,1 - while (i) { - 18d4: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 18d8: ffd78fa3 sb t4,-1(a5) - 18dc: 0605 addi a2,a2,1 - while (i) { - 18de: ffcf18e3 bne t5,t3,18ce - 18e2: 1702 slli a4,a4,0x20 - 18e4: 9301 srli a4,a4,0x20 - 18e6: 95ba add a1,a1,a4 - 18e8: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 18ea: 1a098763 beqz s3,1a98 - 18ee: 40a5863b subw a2,a1,a0 - 18f2: 1acbd363 bge s7,a2,1a98 - 18f6: 65a2 ld a1,8(sp) - 18f8: 0126093b addw s2,a2,s2 - 18fc: 9982 jalr s3 - 18fe: 20050be3 beqz a0,2314 - 1902: 87aa mv a5,a0 - while (n) { - 1904: f825 bnez s0,1874 - 1906: 6fc2 ld t6,16(sp) - 1908: 64e2 ld s1,24(sp) - 190a: 7e02 ld t3,32(sp) - 190c: 7322 ld t1,40(sp) - 190e: 83e6 mv t2,s9 - 1910: 88d6 mv a7,s5 - 1912: 8cee mv s9,s11 - 1914: 843e mv s0,a5 - 1916: 8dea mv s11,s10 - 1918: 8d4a mv s10,s2 - 191a: 892a mv s2,a0 - while (tz) { - 191c: 08088863 beqz a7,19ac - *(stbsp__uint32 *)bf = 0x30303030; - 1920: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 1924: 03000a13 li s4,48 - while (i >= 4) { - 1928: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 192a: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 192e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - stbsp__cb_buf_clamp(i, tz); - 1932: 20000b93 li s7,512 - 1936: 040989e3 beqz s3,2188 - 193a: 41240633 sub a2,s0,s2 - 193e: 40cb87bb subw a5,s7,a2 - 1942: 873e mv a4,a5 - 1944: 00f8d363 bge a7,a5,194a - 1948: 8746 mv a4,a7 - 194a: 0007079b sext.w a5,a4 - tz -= i; - 194e: 40e888bb subw a7,a7,a4 - while (i) { - 1952: 08078ee3 beqz a5,21ee - if ((((stbsp__uintptr)bf) & 3) == 0) - 1956: 00347713 andi a4,s0,3 - 195a: e719 bnez a4,1968 - 195c: 0390006f j 2194 - 1960: 00347713 andi a4,s0,3 - 1964: 7a070f63 beqz a4,2122 - *bf++ = '0'; - 1968: 01440023 sb s4,0(s0) - --i; - 196c: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 196e: 0405 addi s0,s0,1 - while (i) { - 1970: fbe5 bnez a5,1960 - stbsp__chk_cb_buf(1); - 1972: 02098b63 beqz s3,19a8 - 1976: 4124063b subw a2,s0,s2 - 197a: 02c6d763 bge a3,a2,19a8 - 197e: 65a2 ld a1,8(sp) - 1980: 854a mv a0,s2 - 1982: f81e sd t2,48(sp) - 1984: f41a sd t1,40(sp) - 1986: f072 sd t3,32(sp) - 1988: ec7e sd t6,24(sp) - 198a: e846 sd a7,16(sp) - 198c: 00cd0d3b addw s10,s10,a2 - 1990: 9982 jalr s3 - 1992: 892a mv s2,a0 - 1994: 1a0502e3 beqz a0,2338 - 1998: 73c2 ld t2,48(sp) - 199a: 7322 ld t1,40(sp) - 199c: 7e02 ld t3,32(sp) - 199e: 6fe2 ld t6,24(sp) - 19a0: 68c2 ld a7,16(sp) - 19a2: 842a mv s0,a0 - 19a4: 1fe00693 li a3,510 - while (tz) { - 19a8: f80897e3 bnez a7,1936 - sn = tail + 1; - 19ac: 07110793 addi a5,sp,113 - 19b0: fcbe sd a5,120(sp) - while (tail[0]) { - 19b2: 080f8763 beqz t6,1a40 - stbsp__cb_buf_clamp(i, tail[0]); - 19b6: 854a mv a0,s2 - 19b8: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 19ba: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 19be: 8d4e mv s10,s3 - 19c0: 20000a13 li s4,512 - 19c4: 8bf2 mv s7,t3 - 19c6: 891a mv s2,t1 - 19c8: 899e mv s3,t2 - 19ca: 000f879b sext.w a5,t6 - 19ce: 7c0d0863 beqz s10,219e - 19d2: 40a4063b subw a2,s0,a0 - 19d6: 40ca06bb subw a3,s4,a2 - 19da: 8736 mv a4,a3 - 19dc: 00d7d363 bge a5,a3,19e2 - 19e0: 873e mv a4,a5 - tail[0] -= (char)i; - 19e2: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 19e6: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 19ea: 07f10823 sb t6,112(sp) - while (i) { - 19ee: c795 beqz a5,1a1a - 19f0: 75e6 ld a1,120(sp) - 19f2: 02079613 slli a2,a5,0x20 - 19f6: 9201 srli a2,a2,0x20 - 19f8: 00c406b3 add a3,s0,a2 - 19fc: 87ae mv a5,a1 - *bf++ = *sn++; - 19fe: 0007c703 lbu a4,0(a5) - 1a02: 0405 addi s0,s0,1 - while (i) { - 1a04: 0785 addi a5,a5,1 - *bf++ = *sn++; - 1a06: fee40fa3 sb a4,-1(s0) - while (i) { - 1a0a: fed41ae3 bne s0,a3,19fe - 1a0e: 95b2 add a1,a1,a2 - 1a10: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 1a12: 000d0d63 beqz s10,1a2c - 1a16: 40a4063b subw a2,s0,a0 - 1a1a: 00cad963 bge s5,a2,1a2c - 1a1e: 65a2 ld a1,8(sp) - 1a20: 00cb0b3b addw s6,s6,a2 - 1a24: 9d02 jalr s10 - 1a26: 200509e3 beqz a0,2438 - 1a2a: 842a mv s0,a0 - while (tail[0]) { - 1a2c: 07014f83 lbu t6,112(sp) - 1a30: f80f9de3 bnez t6,19ca - 1a34: 834a mv t1,s2 - 1a36: 83ce mv t2,s3 - 1a38: 8e5e mv t3,s7 - 1a3a: 89ea mv s3,s10 - 1a3c: 892a mv s2,a0 - 1a3e: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 1a40: 001e7e13 andi t3,t3,1 - 1a44: 000e0663 beqz t3,1a50 - if (fw > 0) { - 1a48: 00605463 blez t1,1a50 - 1a4c: 0300106f j 2a7c - for (;;) { - 1a50: 6b86 ld s7,64(sp) - 1a52: 2c013a03 ld s4,704(sp) - 1a56: 2b813a83 ld s5,696(sp) - 1a5a: 2b013b03 ld s6,688(sp) - ++f; - 1a5e: 0485 addi s1,s1,1 - for (;;) { - 1a60: b0f1 j 132c - fl |= STBSP__METRIC_SUFFIX; - 1a62: 100e6e13 ori t3,t3,256 - continue; - 1a66: 0685 addi a3,a3,1 - 1a68: bad1 j 143c - while (i) { - 1a6a: 0e0580e3 beqz a1,234a - if ((((stbsp__uintptr)bf) & 3) == 0) - 1a6e: 00347793 andi a5,s0,3 - 1a72: e799 bnez a5,1a80 - 1a74: 0dd0006f j 2350 - 1a78: 00347793 andi a5,s0,3 - 1a7c: 72078463 beqz a5,21a4 - *bf++ = '0'; - 1a80: 01d40023 sb t4,0(s0) - --i; - 1a84: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 1a86: 0405 addi s0,s0,1 - while (i) { - 1a88: f9e5 bnez a1,1a78 - while (i) { - 1a8a: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 1a8c: cc0b19e3 bnez s6,175e - 1a90: 842e mv s0,a1 - while (pr > 0) { - 1a92: c93042e3 bgtz s3,1716 - 1a96: b9cd j 1788 - while (i) { - 1a98: 87ae mv a5,a1 - while (n) { - 1a9a: dc041de3 bnez s0,1874 - 1a9e: b5a5 j 1906 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1aa0: fd07871b addiw a4,a5,-48 - 1aa4: 0ff77713 zext.b a4,a4 - 1aa8: 4625 li a2,9 - ++f; - 1aaa: 0485 addi s1,s1,1 - pr = 0; - 1aac: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1aae: 46a5 li a3,9 - 1ab0: 9ce669e3 bltu a2,a4,1482 - pr = pr * 10 + f[0] - '0'; - 1ab4: 0028971b slliw a4,a7,0x2 - 1ab8: 0117073b addw a4,a4,a7 - 1abc: 0017171b slliw a4,a4,0x1 - f++; - 1ac0: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 1ac2: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1ac4: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 1ac8: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1acc: fd07871b addiw a4,a5,-48 - 1ad0: 0ff77713 zext.b a4,a4 - 1ad4: fee6f0e3 bgeu a3,a4,1ab4 - 1ad8: b26d j 1482 - fl |= STBSP__METRIC_1024; - 1ada: 8f5d or a4,a4,a5 - 1adc: 00070e1b sext.w t3,a4 - 1ae0: 0685 addi a3,a3,1 - 1ae2: baa9 j 143c - *bf = 0; - 1ae4: 00040023 sb zero,0(s0) - 1ae8: b209 j 13ea - if (f[0] == 'l') { - 1aea: 0014c783 lbu a5,1(s1) - 1aee: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 1af2: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 1af6: 00e78c63 beq a5,a4,1b0e - ++f; - 1afa: 0485 addi s1,s1,1 - 1afc: ba65 j 14b4 - if (f[0] == 'h') - 1afe: 0014c783 lbu a5,1(s1) - 1b02: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 1b06: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 1b0a: fee798e3 bne a5,a4,1afa - if ((f[1] == '6') && (f[2] == '4')) { - 1b0e: 0024c783 lbu a5,2(s1) - ++f; - 1b12: 0489 addi s1,s1,2 - 1b14: b245 j 14b4 - s = va_arg(va, char *); - 1b16: 008b8713 addi a4,s7,8 - 1b1a: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 1b1c: 020e7693 andi a3,t3,32 - 1b20: 8772 mv a4,t3 - 1b22: 24069ee3 bnez a3,257e - stbsp__int32 i = va_arg(va, stbsp__int32); - 1b26: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 1b2a: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 1b2e: 02069f13 slli t5,a3,0x20 - 1b32: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 1b36: 00c78a63 beq a5,a2,1b4a - 1b3a: 0006d863 bgez a3,1b4a - fl |= STBSP__NEGATIVE; - 1b3e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 1b42: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 1b46: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 1b4a: 100e7693 andi a3,t3,256 - 1b4e: 5c0683e3 beqz a3,2914 - if (n64 < 1024) - 1b52: 3ff00793 li a5,1023 - 1b56: 01e7e463 bltu a5,t5,1b5e - 1b5a: 0ea0106f j 2c44 - else if (pr == -1) - 1b5e: 57fd li a5,-1 - 1b60: 30f887e3 beq a7,a5,266e - fv = (double)(stbsp__int64)n64; - 1b64: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 1b68: 034e1793 slli a5,t3,0x34 - 1b6c: 0007c463 bltz a5,1b74 - 1b70: 2300106f j 2da0 - divisor = 1024.0; - 1b74: 00004797 auipc a5,0x4 - 1b78: d047b787 fld fa5,-764(a5) # 5878 - if ((fv < divisor) && (fv > -divisor)) - 1b7c: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 1b80: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 1b84: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 1b88: a2f517d3 flt.d a5,fa0,fa5 - 1b8c: c789 beqz a5,1b96 - 1b8e: a2a717d3 flt.d a5,fa4,fa0 - 1b92: 3e079863 bnez a5,1f82 - fl += 0x1000000; - 1b96: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 1b9a: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 1b9e: feee65e3 bltu t3,a4,1b88 - 1ba2: a6c5 j 1f82 - h = (f[0] == 'X') ? hexu : hex; - 1ba4: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 1ba8: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 1bac: 00005817 auipc a6,0x5 - 1bb0: ecc80813 addi a6,a6,-308 # 6a78 - 1bb4: 00d79663 bne a5,a3,1bc0 - 1bb8: 00005817 auipc a6,0x5 - 1bbc: ea880813 addi a6,a6,-344 # 6a60 - l = (4 << 4) | (4 << 8); - 1bc0: 44000793 li a5,1088 - 1bc4: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 1bc6: 008e7793 andi a5,t3,8 - 1bca: 7a079263 bnez a5,236e - lead[0] = 0; - 1bce: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 1bd2: 008b8793 addi a5,s7,8 - 1bd6: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 1bd8: 72070b63 beqz a4,230e - n64 = va_arg(va, stbsp__uint64); - 1bdc: 000bb683 ld a3,0(s7) - dp = 0; - 1be0: d282 sw zero,100(sp) - tail[0] = 0; - 1be2: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1be6: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 1bea: 380694e3 bnez a3,2772 - lead[0] = 0; - 1bee: 06010423 sb zero,104(sp) - if (pr == 0) { - 1bf2: 78089a63 bnez a7,2386 - if (fw < (stbsp__int32)n) - 1bf6: fffb4313 not t1,s6 - 1bfa: 43f35313 srai t1,t1,0x3f - l = 0; - 1bfe: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 1c00: 01637333 and t1,t1,s6 - goto scopy; - 1c04: 4701 li a4,0 - 1c06: 4f81 li t6,0 - 1c08: 4a01 li s4,0 - cs = 0; - 1c0a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 1c0c: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 1c10: 9c0506e3 beqz a0,15dc - if (fw + pr) { - 1c14: 00e307bb addw a5,t1,a4 - 1c18: 9c079fe3 bnez a5,15f6 - 1c1c: 06910793 addi a5,sp,105 - 1c20: b661 j 17a8 - h = (f[0] == 'E') ? hexu : hex; - 1c22: 04500713 li a4,69 - 1c26: 00005317 auipc t1,0x5 - 1c2a: e5230313 addi t1,t1,-430 # 6a78 - 1c2e: 1ce78ae3 beq a5,a4,2602 - fv = va_arg(va, double); - 1c32: 008b8713 addi a4,s7,8 - if (pr == -1) - 1c36: 57fd li a5,-1 - fv = va_arg(va, double); - 1c38: e0ba sd a4,64(sp) - 1c3a: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1c3e: 1af88ce3 beq a7,a5,25f6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c42: 80000737 lui a4,0x80000 - 1c46: 00e8e733 or a4,a7,a4 - 1c4a: 2701 sext.w a4,a4 - 1c4c: 10d4 addi a3,sp,100 - 1c4e: 0110 addi a2,sp,128 - 1c50: 108c addi a1,sp,96 - 1c52: 18a8 addi a0,sp,120 - 1c54: f41e sd t2,40(sp) - 1c56: f01a sd t1,32(sp) - 1c58: ec72 sd t3,24(sp) - 1c5a: e846 sd a7,16(sp) - 1c5c: d8efe0ef jal 1ea - 1c60: 68c2 ld a7,16(sp) - 1c62: 6e62 ld t3,24(sp) - 1c64: 7302 ld t1,32(sp) - 1c66: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 1c68: 5796 lw a5,100(sp) - s = (char *)sn; - 1c6a: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 1c6c: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c6e: 3c0511e3 bnez a0,2830 - tail[0] = 0; - 1c72: 06010823 sb zero,112(sp) - sign[0] = 0; - 1c76: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 1c7a: 004e7713 andi a4,t3,4 - 1c7e: 6a070ee3 beqz a4,2b3a - sign[0] = 1; - 1c82: 6709 lui a4,0x2 - 1c84: 0705 addi a4,a4,1 # 2001 - 1c86: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1c8a: 671d lui a4,0x7 - 1c8c: 1ee794e3 bne a5,a4,2674 - if (pr < (stbsp__int32)l) - 1c90: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c94: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 1c98: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 1c9c: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 1ca0: 97fd srai a5,a5,0x3f - 1ca2: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1ca4: 00fa073b addw a4,s4,a5 - 1ca8: 01f7063b addw a2,a4,t6 - 1cac: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1cae: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 1cb2: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 1cb4: 835a mv t1,s6 - 1cb6: 00cb5363 bge s6,a2,1cbc - 1cba: 8332 mv t1,a2 - fw -= n; - 1cbc: 40e3033b subw t1,t1,a4 - cs = 0; - 1cc0: 4281 li t0,0 - pr -= l; - 1cc2: 40d7873b subw a4,a5,a3 - tz = 0; - 1cc6: 4881 li a7,0 - goto scopy; - 1cc8: b7a1 j 1c10 - h = (f[0] == 'G') ? hexu : hex; - 1cca: 04700713 li a4,71 - 1cce: 00005317 auipc t1,0x5 - 1cd2: daa30313 addi t1,t1,-598 # 6a78 - 1cd6: 14e783e3 beq a5,a4,261c - fv = va_arg(va, double); - 1cda: 008b8713 addi a4,s7,8 - if (pr == -1) - 1cde: 57fd li a5,-1 - fv = va_arg(va, double); - 1ce0: e0ba sd a4,64(sp) - 1ce2: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1ce6: 12f884e3 beq a7,a5,260e - else if (pr == 0) - 1cea: 6e0887e3 beqz a7,2bd8 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1cee: fff8871b addiw a4,a7,-1 - 1cf2: 800007b7 lui a5,0x80000 - 1cf6: 8f5d or a4,a4,a5 - 1cf8: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 1cfa: 00088a9b sext.w s5,a7 - 1cfe: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1d00: 10d4 addi a3,sp,100 - 1d02: 0110 addi a2,sp,128 - 1d04: 108c addi a1,sp,96 - 1d06: 18a8 addi a0,sp,120 - 1d08: f01e sd t2,32(sp) - 1d0a: ec1a sd t1,24(sp) - 1d0c: e872 sd t3,16(sp) - 1d0e: cdcfe0ef jal 1ea - 1d12: 6e42 ld t3,16(sp) - 1d14: 6362 ld t1,24(sp) - 1d16: 7382 ld t2,32(sp) - 1d18: 4281 li t0,0 - 1d1a: c509 beqz a0,1d24 - fl |= STBSP__NEGATIVE; - 1d1c: 080e6e13 ori t3,t3,128 - 1d20: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 1d24: 5806 lw a6,96(sp) - 1d26: 010af463 bgeu s5,a6,1d2e - l = pr; - 1d2a: d0d6 sw s5,96(sp) - 1d2c: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d2e: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d30: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d32: 01076463 bltu a4,a6,1d3a - 1d36: 1800106f j 2eb6 - 1d3a: 7be6 ld s7,120(sp) - 1d3c: fff8071b addiw a4,a6,-1 - 1d40: 1702 slli a4,a4,0x20 - 1d42: 9301 srli a4,a4,0x20 - 1d44: 001a0e9b addiw t4,s4,1 - 1d48: 75e2 ld a1,56(sp) - 1d4a: 8ade mv s5,s7 - 1d4c: 975e add a4,a4,s7 - 1d4e: 410e8ebb subw t4,t4,a6 - 1d52: 88d2 mv a7,s4 - 1d54: 86c2 mv a3,a6 - 1d56: 4f01 li t5,0 - 1d58: 03000f93 li t6,48 - 1d5c: e842 sd a6,16(sp) - 1d5e: a809 j 1d70 - --pr; - 1d60: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d62: 211e80e3 beq t4,a7,2762 - 1d66: 177d addi a4,a4,-1 # 6fff <_stdout+0x14f> - 1d68: 4f05 li t5,1 - 1d6a: 1e088ce3 beqz a7,2762 - --l; - 1d6e: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d70: 00074803 lbu a6,0(a4) - 1d74: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8777> - 1d78: 0006851b sext.w a0,a3 - 1d7c: 2581 sext.w a1,a1 - 1d7e: 0006069b sext.w a3,a2 - 1d82: fdf80fe3 beq a6,t6,1d60 - 1d86: 6842 ld a6,16(sp) - 1d88: fc2e sd a1,56(sp) - 1d8a: 86c2 mv a3,a6 - 1d8c: 000f0463 beqz t5,1d94 - 1d90: d0ae sw a1,96(sp) - 1d92: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d94: 5775 li a4,-3 - 1d96: 08e7cee3 blt a5,a4,2632 - 1d9a: 08fa4be3 blt s4,a5,2630 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d9e: 0005071b sext.w a4,a0 - if (dp > 0) { - 1da2: 7ef057e3 blez a5,2d90 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1da6: 4881 li a7,0 - 1da8: 00e7d463 bge a5,a4,1db0 - 1dac: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 1db0: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 1db4: 20029463 bnez t0,1fbc - } else if (fl & STBSP__LEADINGSPACE) { - 1db8: 004e7713 andi a4,t3,4 - 1dbc: 000715e3 bnez a4,25c6 - } else if (fl & STBSP__LEADINGPLUS) { - 1dc0: 002e7713 andi a4,t3,2 - 1dc4: 660719e3 bnez a4,2c36 - sign[0] = 0; - 1dc8: 06010423 sb zero,104(sp) - 1dcc: aaed j 1fc6 - h = (f[0] == 'A') ? hexu : hex; - 1dce: 04100713 li a4,65 - 1dd2: 00005597 auipc a1,0x5 - 1dd6: ca658593 addi a1,a1,-858 # 6a78 - 1dda: 00e783e3 beq a5,a4,25e0 - fv = va_arg(va, double); - 1dde: 008b8693 addi a3,s7,8 - if (pr == -1) - 1de2: 577d li a4,-1 - fv = va_arg(va, double); - 1de4: e0b6 sd a3,64(sp) - 1de6: 000bb783 ld a5,0(s7) - if (pr == -1) - 1dea: 7ee88963 beq a7,a4,25dc - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dee: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1df2: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1df6: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1dfa: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dfc: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 1e00: 7a07c863 bltz a5,25b0 - } else if (fl & STBSP__LEADINGSPACE) { - 1e04: 004e7793 andi a5,t3,4 - 1e08: 60078ee3 beqz a5,2c24 - 1e0c: 6789 lui a5,0x2 - 1e0e: 2785 addiw a5,a5,1 # 2001 - sign[0] = 1; - 1e10: 06f11423 sh a5,104(sp) - 1e14: 468d li a3,3 - 1e16: 4a0d li s4,3 - 1e18: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 1e1a: 4705 li a4,1 - 1e1c: 1752 slli a4,a4,0x34 - if (dp == -1023) - 1e1e: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 1e22: 8f49 or a4,a4,a0 - if (dp == -1023) - 1e24: 5cf600e3 beq a2,a5,2be4 - if (pr < 15) - 1e28: 4539 li a0,14 - n64 <<= (64 - 56); - 1e2a: 00871793 slli a5,a4,0x8 - if (pr < 15) - 1e2e: 251546e3 blt a0,a7,287a - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 1e32: 4705 li a4,1 - 1e34: 0028951b slliw a0,a7,0x2 - 1e38: 176e slli a4,a4,0x3b - 1e3a: 00a75733 srl a4,a4,a0 - 1e3e: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 1e40: 03c75793 srli a5,a4,0x3c - 1e44: 97ae add a5,a5,a1 - 1e46: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 1e4a: 22080793 addi a5,a6,544 - 1e4e: 06010813 addi a6,sp,96 - 1e52: 97c2 add a5,a5,a6 - 1e54: 03000813 li a6,48 - 1e58: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 1e5c: 22068793 addi a5,a3,544 - 1e60: 1094 addi a3,sp,96 - 1e62: 96be add a3,a3,a5 - 1e64: 07800793 li a5,120 - 1e68: def68423 sb a5,-536(a3) - lead[0] += 2; - 1e6c: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 1e70: 0ca10023 sb a0,192(sp) - if (pr) - 1e74: 740893e3 bnez a7,2dba - sn = s; - 1e78: 0c110793 addi a5,sp,193 - 1e7c: fcbe sd a5,120(sp) - 1e7e: 4701 li a4,0 - 1e80: 4501 li a0,0 - 1e82: 4305 li t1,1 - 1e84: 4685 li a3,1 - tail[1] = h[17]; - 1e86: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 1e8a: 02b00793 li a5,43 - tail[1] = h[17]; - 1e8e: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 1e92: 00065663 bgez a2,1e9e - dp = -dp; - 1e96: 40c0063b negw a2,a2 - tail[2] = '-'; - 1e9a: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 1e9e: 4829 li a6,10 - 1ea0: 030665bb remw a1,a2,a6 - 1ea4: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1ea8: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 1eac: 0305859b addiw a1,a1,48 - 1eb0: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1eb4: 18cec3e3 blt t4,a2,283a - 1eb8: 06300e93 li t4,99 - 1ebc: 54cec1e3 blt t4,a2,2bfe - 1ec0: 4ea5 li t4,9 - 1ec2: 72ced6e3 bge t4,a2,2dee - dp /= 10; - 1ec6: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 1eca: 4611 li a2,4 - 1ecc: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 1ed0: 06b10a23 sb a1,116(sp) - 1ed4: 4811 li a6,4 - 1ed6: 4f91 li t6,4 - 1ed8: 0307879b addiw a5,a5,48 - 1edc: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 1ee0: 006a07bb addw a5,s4,t1 - 1ee4: 010787bb addw a5,a5,a6 - 1ee8: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 1eec: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 1eee: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 1ef0: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1ef2: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1ef6: 835a mv t1,s6 - 1ef8: 00cb5363 bge s6,a2,1efe - 1efc: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 1efe: 030002b7 lui t0,0x3000 - fw -= n; - 1f02: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 1f06: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - s = num + 64; - 1f08: 0c010a93 addi s5,sp,192 - goto scopy; - 1f0c: b311 j 1c10 - h = (f[0] == 'B') ? hexu : hex; - 1f0e: 04200713 li a4,66 - 1f12: 00005817 auipc a6,0x5 - 1f16: b6680813 addi a6,a6,-1178 # 6a78 - 1f1a: 6ce78963 beq a5,a4,25ec - if (fl & STBSP__LEADING_0X) { - 1f1e: 008e7793 andi a5,t3,8 - 1f22: 66079e63 bnez a5,259e - lead[0] = 0; - 1f26: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 1f2a: 18000793 li a5,384 - 1f2e: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 1f30: 020e7713 andi a4,t3,32 - goto radixnum; - 1f34: b979 j 1bd2 - *s = (char)va_arg(va, int); - 1f36: 000ba783 lw a5,0(s7) - l = 1; - 1f3a: 4705 li a4,1 - 1f3c: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 1f3e: 26f10fa3 sb a5,639(sp) - 1f42: 008b8793 addi a5,s7,8 - lead[0] = 0; - 1f46: 06010423 sb zero,104(sp) - tail[0] = 0; - 1f4a: 06010823 sb zero,112(sp) - dp = 0; - 1f4e: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 1f50: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1f52: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1f56: 835a mv t1,s6 - 1f58: 69605063 blez s6,25d8 - fw -= n; - 1f5c: 337d addiw t1,t1,-1 - goto scopy; - 1f5e: 4701 li a4,0 - 1f60: 4f81 li t6,0 - 1f62: 4685 li a3,1 - 1f64: 4a01 li s4,0 - cs = 0; - 1f66: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 1f68: 27f10a93 addi s5,sp,639 - tz = 0; - 1f6c: 4881 li a7,0 - goto scopy; - 1f6e: b14d j 1c10 - fv = va_arg(va, double); - 1f70: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 1f74: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 1f78: e0ba sd a4,64(sp) - 1f7a: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 1f7e: be0795e3 bnez a5,1b68 - if (pr == -1) - 1f82: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f84: 0008871b sext.w a4,a7 - if (pr == -1) - 1f88: 00f89463 bne a7,a5,1f90 - 1f8c: 4719 li a4,6 - pr = 6; // default is 6 - 1f8e: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f90: 10d4 addi a3,sp,100 - 1f92: 0110 addi a2,sp,128 - 1f94: 108c addi a1,sp,96 - 1f96: 18a8 addi a0,sp,120 - 1f98: f01e sd t2,32(sp) - 1f9a: ec72 sd t3,24(sp) - 1f9c: e846 sd a7,16(sp) - 1f9e: a4cfe0ef jal 1ea - 1fa2: 6e62 ld t3,24(sp) - 1fa4: 68c2 ld a7,16(sp) - 1fa6: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 1fa8: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 1faa: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 1fac: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1fb0: e00500e3 beqz a0,1db0 - fl |= STBSP__NEGATIVE; - 1fb4: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 1fb8: 06010823 sb zero,112(sp) - sign[0] = 1; - 1fbc: 670d lui a4,0x3 - 1fbe: d0170713 addi a4,a4,-767 # 2d01 - 1fc2: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1fc6: 671d lui a4,0x7 - 1fc8: 7ce78963 beq a5,a4,279a - if (dp <= 0) { - 1fcc: 46f05fe3 blez a5,2c4a - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 1fd0: 040e7313 andi t1,t3,64 - 1fd4: 00078e9b sext.w t4,a5 - 1fd8: 4581 li a1,0 - 1fda: 00030963 beqz t1,1fec - 1fde: 25800593 li a1,600 - 1fe2: 41d585bb subw a1,a1,t4 - 1fe6: 470d li a4,3 - 1fe8: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 1fec: 00005a17 auipc s4,0x5 - 1ff0: 9a4a0a13 addi s4,s4,-1628 # 6990 - s = (char *)sn; - 1ff4: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 1ff6: 0cda4283 lbu t0,205(s4) - s = num + 64; - 1ffa: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 1ffe: 44defb63 bgeu t4,a3,2454 - n = 0; - 2002: 4501 li a0,0 - s = num + 64; - 2004: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2006: 4b91 li s7,4 - 2008: a015 j 202c - 200a: 8642 mv a2,a6 - 200c: 883a mv a6,a4 - 200e: 8732 mv a4,a2 - *s++ = sn[n]; - 2010: 02051613 slli a2,a0,0x20 - 2014: 9201 srli a2,a2,0x20 - 2016: 967a add a2,a2,t5 - 2018: 00064f83 lbu t6,0(a2) - ++n; - 201c: 0015061b addiw a2,a0,1 - 2020: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 2024: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x14f> - if (n >= (stbsp__uint32)dp) - 2028: 7bd57563 bgeu a0,t4,27d2 - *s++ = stbsp__comma; - 202c: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2030: fc030de3 beqz t1,200a - 2034: 2585 addiw a1,a1,1 - 2036: fd759ae3 bne a1,s7,200a - *s++ = stbsp__comma; - 203a: fe580fa3 sb t0,-1(a6) - 203e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2040: 4585 li a1,1 - 2042: b7f9 j 2010 - *d = tlen + (int)(bf - buf); - 2044: 000bb703 ld a4,0(s7) - 2048: 412407b3 sub a5,s0,s2 - 204c: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 2050: 008b8693 addi a3,s7,8 - 2054: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 2056: c31c sw a5,0(a4) - } break; - 2058: bae5 j 1a50 - if (fl & STBSP__LEADING_0X) { - 205a: 008e7793 andi a5,t3,8 - 205e: 50079b63 bnez a5,2574 - lead[0] = 0; - 2062: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 2066: 33000793 li a5,816 - 206a: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 206c: 020e7713 andi a4,t3,32 - h = hexu; - 2070: 00005817 auipc a6,0x5 - 2074: 9f080813 addi a6,a6,-1552 # 6a60 - goto radixnum; - 2078: bea9 j 1bd2 - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 207a: fefe7e13 andi t3,t3,-17 - 207e: 020e6e13 ori t3,t3,32 - 2082: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 2086: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 2088: 00005817 auipc a6,0x5 - 208c: 9f080813 addi a6,a6,-1552 # 6a78 - 2090: be05 j 1bc0 - s = va_arg(va, char *); - 2092: 000bba83 ld s5,0(s7) - 2096: 008b8793 addi a5,s7,8 - 209a: e0be sd a5,64(sp) - if (s == 0) - 209c: 360a8ee3 beqz s5,2c18 - if (((stbsp__uintptr)sn & 3) == 0) - 20a0: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 20a4: 5208c663 bltz a7,25d0 - 20a8: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 20ac: 2a0782e3 beqz a5,2b50 - if (!limit || *sn == 0) - 20b0: 5a068b63 beqz a3,2666 - if (((stbsp__uintptr)sn & 3) == 0) - 20b4: 87d6 mv a5,s5 - 20b6: a801 j 20c6 - ++sn; - 20b8: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 20ba: 0037f713 andi a4,a5,3 - --limit; - 20be: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 20c0: 280709e3 beqz a4,2b52 - if (!limit || *sn == 0) - 20c4: c681 beqz a3,20cc - 20c6: 0007c703 lbu a4,0(a5) - 20ca: f77d bnez a4,20b8 - return (stbsp__uint32)(sn - s); - 20cc: 415787b3 sub a5,a5,s5 - 20d0: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 20d4: fff6c713 not a4,a3 - 20d8: 977d srai a4,a4,0x3f - 20da: 8f7d and a4,a4,a5 - 20dc: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 20e0: 863e mv a2,a5 - pr -= l; - 20e2: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 20e4: d0b6 sw a3,96(sp) - lead[0] = 0; - 20e6: 06010423 sb zero,104(sp) - tail[0] = 0; - 20ea: 06010823 sb zero,112(sp) - dp = 0; - 20ee: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 20f0: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 20f4: 835a mv t1,s6 - 20f6: 00fb5363 bge s6,a5,20fc - 20fa: 833e mv t1,a5 - fw -= n; - 20fc: 40c3033b subw t1,t1,a2 - goto scopy; - 2100: 4f81 li t6,0 - 2102: 4a01 li s4,0 - cs = 0; - 2104: 4281 li t0,0 - tz = 0; - 2106: 4881 li a7,0 - goto scopy; - 2108: b621 j 1c10 - *bf++ = stbsp__comma; - 210a: 87b2 mv a5,a2 - cs = 0; - 210c: 4a01 li s4,0 - 210e: e44ff06f j 1752 - lead[0] -= (char)i; - 2112: 06010423 sb zero,104(sp) - while (i) { - 2116: d38ff06f j 164e - lead[0] -= (char)i; - 211a: 06010423 sb zero,104(sp) - while (i) { - 211e: ed8ff06f j 17f6 - while (i >= 4) { - 2122: 06fadc63 bge s5,a5,219a - tz -= i; - 2126: 8722 mv a4,s0 - 2128: 0007851b sext.w a0,a5 - while (i >= 4) { - 212c: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 2130: 01672023 sw s6,0(a4) - bf += 4; - 2134: 0711 addi a4,a4,4 - while (i >= 4) { - 2136: 40e5863b subw a2,a1,a4 - 213a: fecacbe3 blt s5,a2,2130 - 213e: ffc5061b addiw a2,a0,-4 - 2142: 0026561b srliw a2,a2,0x2 - 2146: 0016071b addiw a4,a2,1 - 214a: 37f1 addiw a5,a5,-4 - 214c: 0026161b slliw a2,a2,0x2 - 2150: 070a slli a4,a4,0x2 - 2152: 9722 add a4,a4,s0 - 2154: 9f91 subw a5,a5,a2 - while (i) { - 2156: 843a mv s0,a4 - 2158: 80078de3 beqz a5,1972 - 215c: 1782 slli a5,a5,0x20 - 215e: 9381 srli a5,a5,0x20 - 2160: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 2164: 0705 addi a4,a4,1 - 2166: ff470fa3 sb s4,-1(a4) - while (i) { - 216a: fe871de3 bne a4,s0,2164 - 216e: 805ff06f j 1972 - stbsp__cb_buf_clamp(i, pr); - 2172: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2174: 4981 li s3,0 - 2176: dc049263 bnez s1,173a - 217a: b8d5 j 1a6e - STBSP__UNALIGNED(while (i >= 4) { - 217c: 4401 li s0,0 - 217e: 85be mv a1,a5 - 2180: f0ea4b63 blt s4,a4,1896 - 2184: f42ff06f j 18c6 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2188: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 218c: 87c6 mv a5,a7 - tz -= i; - 218e: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2190: fc071c63 bnez a4,1968 - while (i >= 4) { - 2194: 470d li a4,3 - 2196: f8f748e3 blt a4,a5,2126 - 219a: 8722 mv a4,s0 - 219c: b7c1 j 215c - tail[0] -= (char)i; - 219e: 06010823 sb zero,112(sp) - while (i) { - 21a2: b0b9 j 19f0 - while (i >= 4) { - 21a4: 478d li a5,3 - 21a6: 8622 mv a2,s0 - 21a8: d8b7d963 bge a5,a1,173a - 21ac: ffc5839b addiw t2,a1,-4 - 21b0: 0023d79b srliw a5,t2,0x2 - 21b4: 0017859b addiw a1,a5,1 - 21b8: 058a slli a1,a1,0x2 - 21ba: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 21bc: 01762023 sw s7,0(a2) - bf += 4; - 21c0: 0611 addi a2,a2,4 - while (i >= 4) { - 21c2: fe861de3 bne a2,s0,21bc - 21c6: 0027979b slliw a5,a5,0x2 - 21ca: 40f385bb subw a1,t2,a5 - 21ce: d68ff06f j 1736 - while (i) { - 21d2: 85be mv a1,a5 - 21d4: ee071963 bnez a4,18c6 - 21d8: f16ff06f j 18ee - 21dc: 2c013a03 ld s4,704(sp) - 21e0: 2b813a83 ld s5,696(sp) - 21e4: 2b013b03 ld s6,688(sp) - 21e8: 8ca2 mv s9,s0 - 21ea: a04ff06f j 13ee - stbsp__chk_cb_buf(1); - 21ee: 2601 sext.w a2,a2 - 21f0: 1fe00793 li a5,510 - 21f4: f8c7c563 blt a5,a2,197e - 21f8: f3eff06f j 1936 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21fc: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 2200: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 2204: 2e01 sext.w t3,t3 - if (fw + pr) { - 2206: a0078be3 beqz a5,1c1c - while (fw > 0) { - 220a: be605663 blez t1,15f6 - *(stbsp__uint32 *)bf = 0x20202020; - 220e: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2212: 854a mv a0,s2 - 2214: 894e mv s2,s3 - 2216: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 2218: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa798> - stbsp__cb_buf_clamp(i, fw); - 221c: ec52 sd s4,24(sp) - 221e: f426 sd s1,40(sp) - 2220: 87a2 mv a5,s0 - 2222: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 2224: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 2228: 8d6e mv s10,s11 - *bf++ = ' '; - 222a: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 222e: 8de6 mv s11,s9 - while (i >= 4) { - 2230: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 2232: 20000e93 li t4,512 - 2236: e846 sd a7,16(sp) - 2238: f07e sd t6,32(sp) - 223a: f836 sd a3,48(sp) - 223c: e4f2 sd t3,72(sp) - 223e: e8ba sd a4,80(sp) - 2240: ec96 sd t0,88(sp) - 2242: 841a mv s0,t1 - 2244: 8a42 mv s4,a6 - 2246: 8c9e mv s9,t2 - 2248: 0c090063 beqz s2,2308 - 224c: 40a78633 sub a2,a5,a0 - 2250: 40ce873b subw a4,t4,a2 - 2254: 86ba mv a3,a4 - 2256: 00e45363 bge s0,a4,225c - 225a: 86a2 mv a3,s0 - 225c: 0006871b sext.w a4,a3 - fw -= i; - 2260: 9c15 subw s0,s0,a3 - while (i) { - 2262: e719 bnez a4,2270 - 2264: a095 j 22c8 - *bf++ = ' '; - 2266: 01678023 sb s6,0(a5) - --i; - 226a: 377d addiw a4,a4,-1 - *bf++ = ' '; - 226c: 0785 addi a5,a5,1 - while (i) { - 226e: cb29 beqz a4,22c0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2270: 0037f693 andi a3,a5,3 - 2274: faed bnez a3,2266 - while (i >= 4) { - 2276: 86be mv a3,a5 - 2278: 00070f9b sext.w t6,a4 - 227c: 00f705bb addw a1,a4,a5 - 2280: 02ebd763 bge s7,a4,22ae - *(stbsp__uint32 *)bf = 0x20202020; - 2284: 0146a023 sw s4,0(a3) - bf += 4; - 2288: 0691 addi a3,a3,4 - while (i >= 4) { - 228a: 40d5863b subw a2,a1,a3 - 228e: fecbcbe3 blt s7,a2,2284 - 2292: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8774> - 2296: 0026561b srliw a2,a2,0x2 - 229a: 0016069b addiw a3,a2,1 - 229e: 3771 addiw a4,a4,-4 - 22a0: 0026161b slliw a2,a2,0x2 - 22a4: 068a slli a3,a3,0x2 - 22a6: 96be add a3,a3,a5 - 22a8: 9f11 subw a4,a4,a2 - while (i) { - 22aa: 87b6 mv a5,a3 - 22ac: cb11 beqz a4,22c0 - 22ae: 1702 slli a4,a4,0x20 - 22b0: 9301 srli a4,a4,0x20 - 22b2: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 22b6: 0685 addi a3,a3,1 - 22b8: ff668fa3 sb s6,-1(a3) - while (i) { - 22bc: fef69de3 bne a3,a5,22b6 - stbsp__chk_cb_buf(1); - 22c0: 40a78633 sub a2,a5,a0 - 22c4: 00090e63 beqz s2,22e0 - 22c8: 2601 sext.w a2,a2 - 22ca: 00cf5b63 bge t5,a2,22e0 - 22ce: 85ce mv a1,s3 - 22d0: 9cb1 addw s1,s1,a2 - 22d2: 9902 jalr s2 - 22d4: c541 beqz a0,235c - 22d6: 87aa mv a5,a0 - 22d8: 20000e93 li t4,512 - 22dc: 1fe00f13 li t5,510 - while (fw > 0) { - 22e0: f68044e3 bgtz s0,2248 - 22e4: 8322 mv t1,s0 - 22e6: 89ca mv s3,s2 - 22e8: 83e6 mv t2,s9 - 22ea: 68c2 ld a7,16(sp) - 22ec: 8cee mv s9,s11 - 22ee: 6a62 ld s4,24(sp) - 22f0: 8dea mv s11,s10 - 22f2: 7f82 ld t6,32(sp) - 22f4: 8d26 mv s10,s1 - 22f6: 76c2 ld a3,48(sp) - 22f8: 6e26 ld t3,72(sp) - 22fa: 6746 ld a4,80(sp) - 22fc: 62e6 ld t0,88(sp) - 22fe: 74a2 ld s1,40(sp) - 2300: 892a mv s2,a0 - 2302: 843e mv s0,a5 - 2304: af2ff06f j 15f6 - stbsp__cb_buf_clamp(i, fw); - 2308: 8722 mv a4,s0 - 230a: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 230c: b795 j 2270 - n64 = va_arg(va, stbsp__uint32); - 230e: 000be683 lwu a3,0(s7) - 2312: b0f9 j 1be0 - 2314: 2c013a03 ld s4,704(sp) - 2318: 2b813a83 ld s5,696(sp) - 231c: 2b013b03 ld s6,688(sp) - 2320: 8cca mv s9,s2 - 2322: 8ccff06f j 13ee - 2326: 8cd6 mv s9,s5 - 2328: 2c013a03 ld s4,704(sp) - 232c: 2b813a83 ld s5,696(sp) - 2330: 2b013b03 ld s6,688(sp) - 2334: 8baff06f j 13ee - 2338: 2c013a03 ld s4,704(sp) - 233c: 2b813a83 ld s5,696(sp) - 2340: 2b013b03 ld s6,688(sp) - 2344: 8cea mv s9,s10 - 2346: 8a8ff06f j 13ee - while (i) { - 234a: 85a2 mv a1,s0 - 234c: c12ff06f j 175e - while (i >= 4) { - 2350: 478d li a5,3 - 2352: 8622 mv a2,s0 - 2354: e4b7cce3 blt a5,a1,21ac - 2358: be2ff06f j 173a - 235c: 2c013a03 ld s4,704(sp) - 2360: 2b813a83 ld s5,696(sp) - 2364: 2b013b03 ld s6,688(sp) - 2368: 8ca6 mv s9,s1 - 236a: 884ff06f j 13ee - lead[2] = h[16]; - 236e: 01084683 lbu a3,16(a6) - lead[0] = 2; - 2372: 678d lui a5,0x3 - 2374: 0789 addi a5,a5,2 # 3002 - 2376: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 237a: 06d10523 sb a3,106(sp) - 237e: b891 j 1bd2 - 2380: 8cea mv s9,s10 - 2382: 86cff06f j 13ee - 2386: 4f81 li t6,0 - 2388: 4a01 li s4,0 - 238a: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 238c: 00004f17 auipc t5,0x4 - 2390: 6d1f4f03 lbu t5,1745(t5) # 6a5d - 2394: 0510 addi a2,sp,640 - 2396: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 239a: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 239c: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 23a0: 0007029b sext.w t0,a4 - 23a4: 005317bb sllw a5,t1,t0 - 23a8: 37fd addiw a5,a5,-1 - 23aa: 8ff5 and a5,a5,a3 - 23ac: 97c2 add a5,a5,a6 - 23ae: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 23b2: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 23b6: fff60a93 addi s5,a2,-1 - 23ba: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 23be: e691 bnez a3,23ca - 23c0: 051c addi a5,sp,640 - 23c2: 415787bb subw a5,a5,s5 - 23c6: 0317dd63 bge a5,a7,2400 - if (fl & STBSP__TRIPLET_COMMA) { - 23ca: 020e8963 beqz t4,23fc - ++l; - 23ce: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 23d2: 0047d29b srliw t0,a5,0x4 - 23d6: 00f2c2b3 xor t0,t0,a5 - 23da: 00f2f293 andi t0,t0,15 - ++l; - 23de: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 23e2: 0087d71b srliw a4,a5,0x8 - 23e6: 00029b63 bnez t0,23fc - l &= ~15; - 23ea: 9bc1 andi a5,a5,-16 - 23ec: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 23f0: ffe60a93 addi s5,a2,-2 - 23f4: ffe60f23 sb t5,-2(a2) - 23f8: 0087d71b srliw a4,a5,0x8 - 23fc: 8656 mv a2,s5 - 23fe: b74d j 23a0 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 2400: 0045d29b srliw t0,a1,0x4 - 2404: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 2408: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 240c: 0182929b slliw t0,t0,0x18 - 2410: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 2414: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2418: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 241a: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 241c: 86be mv a3,a5 - 241e: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 2422: 835a mv t1,s6 - 2424: 00cb5363 bge s6,a2,242a - 2428: 8332 mv t1,a2 - fw -= n; - 242a: 41f3033b subw t1,t1,t6 - pr -= l; - 242e: 9f1d subw a4,a4,a5 - goto scopy; - 2430: 4f81 li t6,0 - tz = 0; - 2432: 4881 li a7,0 - goto scopy; - 2434: fdcff06f j 1c10 - 2438: 8cda mv s9,s6 - 243a: 2c013a03 ld s4,704(sp) - 243e: 2b813a83 ld s5,696(sp) - 2442: 2b013b03 ld s6,688(sp) - 2446: fa9fe06f j 13ee - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 244a: 020e6e13 ori t3,t3,32 - ++f; - 244e: 0485 addi s1,s1,1 - 2450: 864ff06f j 14b4 - n = 0; - 2454: 4601 li a2,0 - s = num + 64; - 2456: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2458: 4511 li a0,4 - *s++ = stbsp__comma; - 245a: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 245e: 00030563 beqz t1,2468 - 2462: 2585 addiw a1,a1,1 - 2464: 10a58363 beq a1,a0,256a - 2468: 873e mv a4,a5 - *s++ = sn[n]; - 246a: 02061793 slli a5,a2,0x20 - 246e: 9381 srli a5,a5,0x20 - 2470: 97fa add a5,a5,t5 - 2472: 0007c803 lbu a6,0(a5) - ++n; - 2476: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 2478: ff070fa3 sb a6,-1(a4) - if (n >= l) - 247c: fcd66fe3 bltu a2,a3,245a - if (n < (stbsp__uint32)dp) { - 2480: 0bd663e3 bltu a2,t4,2d26 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 2484: 415707b3 sub a5,a4,s5 - 2488: 030002b7 lui t0,0x3000 - 248c: 00f282bb addw t0,t0,a5 - if (pr) { - 2490: 00088a63 beqz a7,24a4 - *s++ = stbsp__period; - 2494: 0cca4683 lbu a3,204(s4) - 2498: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 249c: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 24a0: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 24a4: 100e7713 andi a4,t3,256 - 24a8: 86f2 mv a3,t3 - 24aa: 2c070163 beqz a4,276c - if (fl & STBSP__METRIC_NOSPACE) - 24ae: 40ae5f9b sraiw t6,t3,0xa - 24b2: 001fcf93 xori t6,t6,1 - 24b6: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 24ba: 02000713 li a4,32 - 24be: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 24c2: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 24c6: 018e561b srliw a2,t3,0x18 - 24ca: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 24ce: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 24d2: c225 beqz a2,2532 - if (fl & STBSP__METRIC_1024) - 24d4: 001f859b addiw a1,t6,1 - 24d8: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24dc: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 24de: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24e2: 85b2 mv a1,a2 - 24e4: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 24e6: 06055ee3 bgez a0,2d62 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24ea: 00003517 auipc a0,0x3 - 24ee: bee50513 addi a0,a0,-1042 # 50d8 <_GLOBAL__sub_I__ZSt3cin+0xe8> - 24f2: 972a add a4,a4,a0 - 24f4: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24f8: 6709 lui a4,0x2 - 24fa: 80070713 addi a4,a4,-2048 # 1800 - 24fe: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 2500: 06010813 addi a6,sp,96 - 2504: 22060693 addi a3,a2,544 - 2508: 96c2 add a3,a3,a6 - 250a: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff8568> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 250e: 8007071b addiw a4,a4,-2048 - 2512: 060715e3 bnez a4,2d7c - tail[idx + 1] = 'i'; - 2516: 2f89 addiw t6,t6,2 - 2518: 0ffff593 zext.b a1,t6 - 251c: 1094 addi a3,sp,96 - 251e: 22058713 addi a4,a1,544 - 2522: 9736 add a4,a4,a3 - 2524: 06900693 li a3,105 - 2528: 8fae mv t6,a1 - 252a: ded70823 sb a3,-528(a4) - tail[0] = idx; - 252e: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2532: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 2536: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 253a: fff6c713 not a4,a3 - 253e: 977d srai a4,a4,0x3f - 2540: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2542: 00fa073b addw a4,s4,a5 - 2546: 9f2d addw a4,a4,a1 - 2548: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 254c: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 254e: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2550: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2552: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2556: 835a mv t1,s6 - 2558: 00cb5363 bge s6,a2,255e - 255c: 8332 mv t1,a2 - fw -= n; - 255e: 40e3033b subw t1,t1,a4 - pr -= l; - 2562: 40d7873b subw a4,a5,a3 - goto scopy; - 2566: eaaff06f j 1c10 - *s++ = stbsp__comma; - 256a: fe578fa3 sb t0,-1(a5) - 256e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2570: 4585 li a1,1 - 2572: bde5 j 246a - lead[0] = 1; - 2574: 678d lui a5,0x3 - 2576: 0785 addi a5,a5,1 # 3001 - 2578: 06f11423 sh a5,104(sp) - 257c: b4ed j 2066 - if ((f[0] != 'u') && (i64 < 0)) { - 257e: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 2582: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 2586: dcd78263 beq a5,a3,1b4a - 258a: dc0f5063 bgez t5,1b4a - fl |= STBSP__NEGATIVE; - 258e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 2592: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 2596: 00070e1b sext.w t3,a4 - 259a: db0ff06f j 1b4a - lead[2] = h[0xb]; - 259e: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 25a2: 678d lui a5,0x3 - 25a4: 0789 addi a5,a5,2 # 3002 - 25a6: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 25aa: 06e10523 sb a4,106(sp) - 25ae: bab5 j 1f2a - sign[0] = 1; - 25b0: 678d lui a5,0x3 - 25b2: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 25b6: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 25ba: 06f11423 sh a5,104(sp) - 25be: 468d li a3,3 - 25c0: 4a0d li s4,3 - 25c2: 4809 li a6,2 - 25c4: b899 j 1e1a - sign[0] = 1; - 25c6: 6709 lui a4,0x2 - 25c8: 0705 addi a4,a4,1 # 2001 - 25ca: 06e11423 sh a4,104(sp) - 25ce: bae5 j 1fc6 - if (((stbsp__uintptr)sn & 3) == 0) - 25d0: 0e0780e3 beqz a5,2eb0 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 25d4: 56fd li a3,-1 - 25d6: bcf9 j 20b4 - if (fw < (stbsp__int32)n) - 25d8: 4305 li t1,1 - 25da: b249 j 1f5c - pr = 6; // default is 6 - 25dc: 4899 li a7,6 - 25de: b801 j 1dee - h = (f[0] == 'A') ? hexu : hex; - 25e0: 00004597 auipc a1,0x4 - 25e4: 48058593 addi a1,a1,1152 # 6a60 - 25e8: ff6ff06f j 1dde - h = (f[0] == 'B') ? hexu : hex; - 25ec: 00004817 auipc a6,0x4 - 25f0: 47480813 addi a6,a6,1140 # 6a60 - 25f4: b22d j 1f1e - 25f6: 80000737 lui a4,0x80000 - 25fa: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff877e> - pr = 6; // default is 6 - 25fc: 4899 li a7,6 - 25fe: e4eff06f j 1c4c - h = (f[0] == 'E') ? hexu : hex; - 2602: 00004317 auipc t1,0x4 - 2606: 45e30313 addi t1,t1,1118 # 6a60 - 260a: e28ff06f j 1c32 - 260e: 80000737 lui a4,0x80000 - 2612: 4a99 li s5,6 - 2614: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff877d> - pr = 6; - 2616: 4a19 li s4,6 - 2618: ee8ff06f j 1d00 - h = (f[0] == 'G') ? hexu : hex; - 261c: 00004317 auipc t1,0x4 - 2620: 44430313 addi t1,t1,1092 # 6a60 - 2624: eb6ff06f j 1cda - 2628: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 262a: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 262c: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 262e: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2630: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 2632: 0005071b sext.w a4,a0 - 2636: 01175f63 bge a4,a7,2654 - pr = l - 1; - 263a: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 263e: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2642: 70028c63 beqz t0,2d5a - sign[0] = 1; - 2646: 670d lui a4,0x3 - 2648: d0170713 addi a4,a4,-767 # 2d01 - 264c: 06e11423 sh a4,104(sp) - 2650: e3aff06f j 1c8a - else if (pr) - 2654: fe0885e3 beqz a7,263e - --pr; // when using %e, there is one digit before the decimal - 2658: 38fd addiw a7,a7,-1 - 265a: b7d5 j 263e - switch (f[0]) { - 265c: 0034c783 lbu a5,3(s1) - f += 3; - 2660: 048d addi s1,s1,3 - 2662: e53fe06f j 14b4 - if (!limit || *sn == 0) - 2666: 4601 li a2,0 - 2668: 4701 li a4,0 - 266a: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 266c: bca5 j 20e4 - pr = 1; - 266e: 4885 li a7,1 - 2670: cf4ff06f j 1b64 - *s++ = sn[0]; - 2674: 000ac703 lbu a4,0(s5) - 2678: 0ce10023 sb a4,192(sp) - if (pr) - 267c: 54088563 beqz a7,2bc6 - *s++ = stbsp__period; - 2680: 00004617 auipc a2,0x4 - 2684: 3dc64603 lbu a2,988(a2) # 6a5c - if ((l - 1) > (stbsp__uint32)pr) - 2688: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 268c: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 2690: 0008851b sext.w a0,a7 - 2694: 0007061b sext.w a2,a4 - 2698: 52c57163 bgeu a0,a2,2bba - l = pr + 1; - 269c: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 26a0: 8746 mv a4,a7 - 26a2: 02071613 slli a2,a4,0x20 - 26a6: 9201 srli a2,a2,0x20 - 26a8: 0c210713 addi a4,sp,194 - 26ac: 0a85 addi s5,s5,1 - 26ae: 963a add a2,a2,a4 - *s++ = sn[n]; - 26b0: 000ac583 lbu a1,0(s5) - 26b4: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 26b6: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 26b8: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 26bc: fec71ae3 bne a4,a2,26b0 - tail[1] = h[0xe]; - 26c0: 00e34803 lbu a6,14(t1) - dp -= 1; - 26c4: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 26c8: 02b00593 li a1,43 - tail[1] = h[0xe]; - 26cc: 070108a3 sb a6,113(sp) - if (dp < 0) { - 26d0: 00075663 bgez a4,26dc - dp = -dp; - 26d4: 4705 li a4,1 - 26d6: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 26d8: 02d00593 li a1,45 - 26dc: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 26e0: 06300793 li a5,99 - 26e4: 4ee7d663 bge a5,a4,2bd0 - 26e8: 4595 li a1,5 - 26ea: 4f95 li t6,5 - 26ec: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 26ee: 47a9 li a5,10 - dp /= 10; - 26f0: 02f7433b divw t1,a4,a5 - --n; - 26f4: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 26f8: 020f1293 slli t0,t5,0x20 - 26fc: 220e8813 addi a6,t4,544 - 2700: 06010893 addi a7,sp,96 - 2704: 0202d293 srli t0,t0,0x20 - 2708: 01180eb3 add t4,a6,a7 - 270c: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff8998> - 2710: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 2714: 07f10823 sb t6,112(sp) - if (n <= 3) - 2718: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 271a: 02f7673b remw a4,a4,a5 - dp /= 10; - 271e: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 2722: 02f36abb remw s5,t1,a5 - 2726: 0307071b addiw a4,a4,48 - 272a: deee8823 sb a4,-528(t4) - 272e: 030a871b addiw a4,s5,48 - 2732: dee28823 sb a4,-528(t0) - if (n <= 3) - 2736: 014f0a63 beq t5,s4,274a - dp /= 10; - 273a: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 273e: 02f867bb remw a5,a6,a5 - 2742: 0307879b addiw a5,a5,48 - 2746: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 274a: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 274c: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 2750: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 2754: 40d508bb subw a7,a0,a3 - 2758: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 275a: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 275e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2760: bbc9 j 2532 - 2762: fc2e sd a1,56(sp) - 2764: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2766: 8536 mv a0,a3 - 2768: e2cff06f j 1d94 - flt_lead: - 276c: 4581 li a1,0 - 276e: 4f81 li t6,0 - 2770: b3c9 j 2532 - n = pr + lead[0] + tail[0] + tz; - 2772: 06814a03 lbu s4,104(sp) - 2776: 000a0f9b sext.w t6,s4 - 277a: b901 j 238a - if ((f[1] == '6') && (f[2] == '4')) { - 277c: 0024c683 lbu a3,2(s1) - 2780: 03400713 li a4,52 - 2784: 00e68463 beq a3,a4,278c - 2788: e2bfe06f j 15b2 - switch (f[0]) { - 278c: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2790: 020e6e13 ori t3,t3,32 - f += 3; - 2794: 048d addi s1,s1,3 - 2796: d1ffe06f j 14b4 - if (pr < (stbsp__int32)l) - 279a: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 279e: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 27a2: fff7c793 not a5,a5 - 27a6: 97fd srai a5,a5,0x3f - 27a8: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 27aa: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 27ae: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 27b0: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 27b2: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 27b6: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 27b8: 835a mv t1,s6 - 27ba: 00cb5363 bge s6,a2,27c0 - 27be: 8332 mv t1,a2 - fw -= n; - 27c0: 40e3033b subw t1,t1,a4 - goto scopy; - 27c4: 4f81 li t6,0 - pr -= l; - 27c6: 40d7873b subw a4,a5,a3 - cs = 0; - 27ca: 4281 li t0,0 - tz = 0; - 27cc: 4881 li a7,0 - goto scopy; - 27ce: c42ff06f j 1c10 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 27d2: 415705b3 sub a1,a4,s5 - 27d6: 030002b7 lui t0,0x3000 - 27da: 00b282bb addw t0,t0,a1 - l = pr - n; - 27de: 0008859b sext.w a1,a7 - if (pr) - 27e2: 42088763 beqz a7,2c10 - *s++ = stbsp__period; - 27e6: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 27ea: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 27ee: 00280713 addi a4,a6,2 - 27f2: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 27f6: 4065ed63 bltu a1,t1,2c10 - while (n < l) { - 27fa: 5ed57863 bgeu a0,a3,2dea - 27fe: 40c687bb subw a5,a3,a2 - 2802: 37fd addiw a5,a5,-1 - 2804: 1782 slli a5,a5,0x20 - 2806: 9381 srli a5,a5,0x20 - 2808: 1602 slli a2,a2,0x20 - 280a: 9201 srli a2,a2,0x20 - 280c: 0785 addi a5,a5,1 - 280e: 967a add a2,a2,t5 - 2810: 97ba add a5,a5,a4 - *s++ = sn[n]; - 2812: 00064503 lbu a0,0(a2) - 2816: 0705 addi a4,a4,1 - while (n < l) { - 2818: 0605 addi a2,a2,1 - *s++ = sn[n]; - 281a: fea70fa3 sb a0,-1(a4) - while (n < l) { - 281e: fef71ae3 bne a4,a5,2812 - tz = pr - (l - dp); - 2822: 01d585bb addw a1,a1,t4 - 2826: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 282a: 415787b3 sub a5,a5,s5 - 282e: b99d j 24a4 - fl |= STBSP__NEGATIVE; - 2830: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 2834: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2838: b539 j 2646 - tail[0] = (char)n; - 283a: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 283c: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 2840: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2844: 4819 li a6,6 - 2846: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2848: 4599 li a1,6 - dp /= 10; - 284a: 4f29 li t5,10 - if (n <= 3) - 284c: 428d li t0,3 - 284e: 87b2 mv a5,a2 - dp /= 10; - 2850: 03e7c7bb divw a5,a5,t5 - --n; - 2854: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 2856: 02059613 slli a2,a1,0x20 - 285a: 9201 srli a2,a2,0x20 - 285c: 06010e93 addi t4,sp,96 - 2860: 22060613 addi a2,a2,544 - 2864: 9676 add a2,a2,t4 - 2866: 03e7eebb remw t4,a5,t5 - 286a: 030e8e9b addiw t4,t4,48 - 286e: dfd60823 sb t4,-528(a2) - if (n <= 3) - 2872: fc559fe3 bne a1,t0,2850 - 2876: e6aff06f j 1ee0 - *s++ = h[(n64 >> 60) & 15]; - 287a: 93f1 srli a5,a5,0x3c - 287c: 97ae add a5,a5,a1 - 287e: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 2882: 1088 addi a0,sp,96 - 2884: 22080793 addi a5,a6,544 - 2888: 97aa add a5,a5,a0 - 288a: 03000513 li a0,48 - 288e: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 2892: 22068793 addi a5,a3,544 - 2896: 1094 addi a3,sp,96 - 2898: 96be add a3,a3,a5 - *s++ = stbsp__period; - 289a: 00004517 auipc a0,0x4 - 289e: 1c254503 lbu a0,450(a0) # 6a5c - lead[2 + lead[0]] = 'x'; - 28a2: 07800813 li a6,120 - sn = s; - 28a6: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 28aa: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 28ae: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 28b2: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 28b6: 0c610023 sb t1,192(sp) - n64 <<= 4; - 28ba: 0732 slli a4,a4,0xc - sn = s; - 28bc: fcbe sd a5,120(sp) - n = pr; - 28be: 0008869b sext.w a3,a7 - while (n--) { - 28c2: 4831 li a6,12 - if (n > 13) - 28c4: 4535 li a0,13 - tz = pr - n; - 28c6: 40a688bb subw a7,a3,a0 - while (n--) { - 28ca: 02081313 slli t1,a6,0x20 - 28ce: 02035313 srli t1,t1,0x20 - 28d2: 22030693 addi a3,t1,544 - 28d6: 1088 addi a0,sp,96 - 28d8: 9536 add a0,a0,a3 - 28da: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 28de: 03c75693 srli a3,a4,0x3c - 28e2: 96ae add a3,a3,a1 - 28e4: 0006c683 lbu a3,0(a3) - 28e8: 0785 addi a5,a5,1 - n64 <<= 4; - 28ea: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 28ec: fed78fa3 sb a3,-1(a5) - while (n--) { - 28f0: fea797e3 bne a5,a0,28de - l = (int)(s - (num + 64)); - 28f4: 280d addiw a6,a6,3 - 28f6: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 28fa: fff6c713 not a4,a3 - 28fe: 977d srai a4,a4,0x3f - 2900: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 2904: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 2908: 0007031b sext.w t1,a4 - pr -= l; - 290c: 4107073b subw a4,a4,a6 - 2910: d76ff06f j 1e86 - *--s = stbsp__comma; - 2914: 00004a17 auipc s4,0x4 - 2918: 07ca0a13 addi s4,s4,124 # 6990 - if (n64 >= 100000000) { - 291c: 05f5e7b7 lui a5,0x5f5e - 2920: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - n = (stbsp__uint32)(n64 % 100000000); - 2924: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 2928: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 292c: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 292e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56878> - l = 0; - 2932: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2934: 040e7813 andi a6,t3,64 - 2938: 4701 li a4,0 - 293a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 293c: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 2940: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2942: 430d li t1,3 - n /= 10; - 2944: 45a9 li a1,10 - while (n) { - 2946: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2948: 06400f93 li t6,100 - if (n64 >= 100000000) { - 294c: 67c2 ld a5,16(sp) - char *o = s - 8; - 294e: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 2952: 0fe7f763 bgeu a5,t5,2a40 - n = (stbsp__uint32)(n64 % 100000000); - 2956: 6662 ld a2,24(sp) - 2958: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 295c: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2960: 0e080463 beqz a6,2a48 - while (n) { - 2964: cb85 beqz a5,2994 - *--s = stbsp__comma; - 2966: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2968: 00671763 bne a4,t1,2976 - --o; - 296c: 017a8023 sb s7,0(s5) - 2970: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 2972: 1afd addi s5,s5,-1 - l = 0; - 2974: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2976: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 2978: 02b7f63b remuw a2,a5,a1 - 297c: 0306061b addiw a2,a2,48 - 2980: 00ca8023 sb a2,0(s5) - n /= 10; - 2984: 02b7d63b divuw a2,a5,a1 - while (n) { - 2988: 00fef563 bgeu t4,a5,2992 - *--s = stbsp__comma; - 298c: 1afd addi s5,s5,-1 - 298e: 87b2 mv a5,a2 - 2990: bfe1 j 2968 - while (n) { - 2992: 4285 li t0,1 - if (n64 == 0) { - 2994: 020f0063 beqz t5,29b4 - while (s != o) - 2998: fb550ae3 beq a0,s5,294c - *--s = stbsp__comma; - 299c: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 299e: 00080663 beqz a6,29aa - 29a2: 08670863 beq a4,t1,2a32 - 29a6: 2705 addiw a4,a4,1 - 29a8: 4285 li t0,1 - *--s = '0'; - 29aa: 03000793 li a5,48 - 29ae: 00fa8023 sb a5,0(s5) - 29b2: b7dd j 2998 - 29b4: 00028363 beqz t0,29ba - 29b8: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 29ba: 000ac703 lbu a4,0(s5) - 29be: 03000793 li a5,48 - 29c2: 34f70b63 beq a4,a5,2d18 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29c6: 051c addi a5,sp,640 - 29c8: 415786bb subw a3,a5,s5 - tail[0] = 0; - 29cc: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 29d0: 080e7713 andi a4,t3,128 - 29d4: 87f2 mv a5,t3 - 29d6: 32070863 beqz a4,2d06 - 29da: 678d lui a5,0x3 - 29dc: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 29e0: 06f11423 sh a5,104(sp) - 29e4: 4705 li a4,1 - 29e6: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29e8: d0b6 sw a3,96(sp) - if (l == 0) { - 29ea: 30068163 beqz a3,2cec - cs = l + (3 << 24); - 29ee: 030002b7 lui t0,0x3000 - 29f2: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 29f6: 0006861b sext.w a2,a3 - if (pr < 0) - 29fa: fff8c793 not a5,a7 - 29fe: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 2a00: 00f8f7b3 and a5,a7,a5 - 2a04: 0007859b sext.w a1,a5 - 2a08: 00c5d363 bge a1,a2,2a0e - 2a0c: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 2a0e: 00f7063b addw a2,a4,a5 - 2a12: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2a14: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2a16: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2a1a: 835a mv t1,s6 - 2a1c: 00cb5363 bge s6,a2,2a22 - 2a20: 8332 mv t1,a2 - fw -= n; - 2a22: 40e3033b subw t1,t1,a4 - scopy: - 2a26: 4f81 li t6,0 - pr -= l; - 2a28: 40d7873b subw a4,a5,a3 - tz = 0; - 2a2c: 4881 li a7,0 - scopy: - 2a2e: 9e2ff06f j 1c10 - *--s = stbsp__comma; - 2a32: 87de mv a5,s7 - --o; - 2a34: 157d addi a0,a0,-1 - l = 0; - 2a36: 4701 li a4,0 - --o; - 2a38: 4285 li t0,1 - 2a3a: 00fa8023 sb a5,0(s5) - 2a3e: bfa9 j 2998 - n = (stbsp__uint32)n64; - 2a40: 000f079b sext.w a5,t5 - n64 = 0; - 2a44: 4f01 li t5,0 - 2a46: bf29 j 2960 - 2a48: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a4a: 03f7f63b remuw a2,a5,t6 - s -= 2; - 2a4e: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a50: 0007889b sext.w a7,a5 - 2a54: 2605 addiw a2,a2,1 - 2a56: 0016161b slliw a2,a2,0x1 - 2a5a: 1602 slli a2,a2,0x20 - 2a5c: 9201 srli a2,a2,0x20 - 2a5e: 9652 add a2,a2,s4 - 2a60: 00065603 lhu a2,0(a2) - n /= 100; - 2a64: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a68: 00ca9023 sh a2,0(s5) - } while (n); - 2a6c: 06300613 li a2,99 - 2a70: fd166de3 bltu a2,a7,2a4a - 2a74: 7882 ld a7,32(sp) - if (n64 == 0) { - 2a76: f20f11e3 bnez t5,2998 - 2a7a: bf2d j 29b4 - *(stbsp__uint32 *)bf = 0x20202020; - 2a7c: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2a80: 854a mv a0,s2 - *bf++ = ' '; - 2a82: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 2a86: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa798> - stbsp__chk_cb_buf(1); - 2a8a: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 2a8e: 20000b93 li s7,512 - 2a92: 891a mv s2,t1 - 2a94: 0a098063 beqz s3,2b34 - 2a98: 40a40633 sub a2,s0,a0 - 2a9c: 40cb87bb subw a5,s7,a2 - 2aa0: 873e mv a4,a5 - 2aa2: 00f95363 bge s2,a5,2aa8 - 2aa6: 874a mv a4,s2 - 2aa8: 0007079b sext.w a5,a4 - fw -= i; - 2aac: 40e9093b subw s2,s2,a4 - while (i) { - 2ab0: e799 bnez a5,2abe - 2ab2: a281 j 2bf2 - *bf++ = ' '; - 2ab4: 01540023 sb s5,0(s0) - --i; - 2ab8: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 2aba: 0405 addi s0,s0,1 - while (i) { - 2abc: cba1 beqz a5,2b0c - if ((((stbsp__uintptr)bf) & 3) == 0) - 2abe: 00347713 andi a4,s0,3 - 2ac2: fb6d bnez a4,2ab4 - while (i >= 4) { - 2ac4: 470d li a4,3 - 2ac6: 40f75363 bge a4,a5,2ecc - 2aca: ffc7869b addiw a3,a5,-4 - 2ace: 0026d79b srliw a5,a3,0x2 - 2ad2: 0017871b addiw a4,a5,1 - 2ad6: 070a slli a4,a4,0x2 - 2ad8: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 2ada: 01642023 sw s6,0(s0) - bf += 4; - 2ade: 0411 addi s0,s0,4 - while (i >= 4) { - 2ae0: fee41de3 bne s0,a4,2ada - 2ae4: 0027979b slliw a5,a5,0x2 - 2ae8: 40f687bb subw a5,a3,a5 - while (i--) - 2aec: fff7869b addiw a3,a5,-1 - 2af0: cf91 beqz a5,2b0c - 2af2: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 2af4: 0705 addi a4,a4,1 - while (i--) - 2af6: 0007061b sext.w a2,a4 - *bf++ = ' '; - 2afa: ff570fa3 sb s5,-1(a4) - while (i--) - 2afe: fec79be3 bne a5,a2,2af4 - 2b02: 2685 addiw a3,a3,1 - 2b04: 02069793 slli a5,a3,0x20 - 2b08: 9381 srli a5,a5,0x20 - 2b0a: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 2b0c: 00098f63 beqz s3,2b2a - 2b10: 40a4063b subw a2,s0,a0 - 2b14: 00ca5b63 bge s4,a2,2b2a - 2b18: 65a2 ld a1,8(sp) - 2b1a: e81e sd t2,16(sp) - 2b1c: 00cd0d3b addw s10,s10,a2 - 2b20: 9982 jalr s3 - 2b22: 80050be3 beqz a0,2338 - 2b26: 63c2 ld t2,16(sp) - 2b28: 842a mv s0,a0 - while (fw) { - 2b2a: f60915e3 bnez s2,2a94 - 2b2e: 892a mv s2,a0 - 2b30: f21fe06f j 1a50 - stbsp__cb_buf_clamp(i, fw); - 2b34: 87ca mv a5,s2 - fw -= i; - 2b36: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2b38: b759 j 2abe - } else if (fl & STBSP__LEADINGPLUS) { - 2b3a: 002e7713 andi a4,t3,2 - 2b3e: 94070663 beqz a4,1c8a - sign[0] = 1; - 2b42: 670d lui a4,0x3 - 2b44: b0170713 addi a4,a4,-1279 # 2b01 - 2b48: 06e11423 sh a4,104(sp) - 2b4c: 93eff06f j 1c8a - if (((stbsp__uintptr)sn & 3) == 0) - 2b50: 87d6 mv a5,s5 - while (limit >= 4) { - 2b52: 470d li a4,3 - 2b54: 22d77763 bgeu a4,a3,2d82 - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b58: feff05b7 lui a1,0xfeff0 - 2b5c: 80808637 lui a2,0x80808 - 2b60: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8677> - 2b64: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808007f8> - while (limit >= 4) { - 2b68: 480d li a6,3 - 2b6a: a029 j 2b74 - limit -= 4; - 2b6c: 36f1 addiw a3,a3,-4 - sn += 4; - 2b6e: 0791 addi a5,a5,4 - while (limit >= 4) { - 2b70: 20d87963 bgeu a6,a3,2d82 - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 2b74: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b76: 00b7053b addw a0,a4,a1 - 2b7a: fff74713 not a4,a4 - 2b7e: 8f69 and a4,a4,a0 - 2b80: 8f71 and a4,a4,a2 - 2b82: 2701 sext.w a4,a4 - 2b84: d765 beqz a4,2b6c - 2b86: 02069713 slli a4,a3,0x20 - 2b8a: 9301 srli a4,a4,0x20 - 2b8c: 973e add a4,a4,a5 - 2b8e: a021 j 2b96 - ++sn; - 2b90: 0785 addi a5,a5,1 - while (limit && *sn) { - 2b92: 00e78663 beq a5,a4,2b9e - 2b96: 0007c683 lbu a3,0(a5) - 2b9a: fafd bnez a3,2b90 - 2b9c: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 2b9e: 41570733 sub a4,a4,s5 - 2ba2: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 2ba6: fff6c793 not a5,a3 - 2baa: 97fd srai a5,a5,0x3f - 2bac: 8f7d and a4,a4,a5 - 2bae: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2bb2: 863e mv a2,a5 - pr -= l; - 2bb4: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 2bb6: d2eff06f j 20e4 - for (n = 1; n < l; n++) - 2bba: 4605 li a2,1 - 2bbc: aed663e3 bltu a2,a3,26a2 - 2bc0: 0c210613 addi a2,sp,194 - 2bc4: bcf5 j 26c0 - l = pr + 1; - 2bc6: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 2bc8: 4501 li a0,0 - *s++ = sn[0]; - 2bca: 0c110613 addi a2,sp,193 - 2bce: bccd j 26c0 - 2bd0: 4591 li a1,4 - 2bd2: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 2bd4: 4e91 li t4,4 - 2bd6: be21 j 26ee - 2bd8: 4a85 li s5,1 - 2bda: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 2bde: 4a05 li s4,1 - 2be0: 920ff06f j 1d00 - dp = (n64) ? -1022 : 0; - 2be4: 4601 li a2,0 - 2be6: c119 beqz a0,2bec - 2be8: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2bec: 872a mv a4,a0 - 2bee: a3aff06f j 1e28 - stbsp__chk_cb_buf(1); - 2bf2: 2601 sext.w a2,a2 - 2bf4: 1fe00793 li a5,510 - 2bf8: f2c7c0e3 blt a5,a2,2b18 - 2bfc: bd61 j 2a94 - tail[0] = (char)n; - 2bfe: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 2c00: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 2c04: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2c08: 4815 li a6,5 - 2c0a: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2c0c: 4595 li a1,5 - 2c0e: b935 j 284a - l = pr + dp; - 2c10: 011786bb addw a3,a5,a7 - 2c14: d0b6 sw a3,96(sp) - 2c16: b6d5 j 27fa - s = (char *)"null"; - 2c18: 00002a97 auipc s5,0x2 - 2c1c: 4b8a8a93 addi s5,s5,1208 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0xe0> - 2c20: c80ff06f j 20a0 - } else if (fl & STBSP__LEADINGPLUS) { - 2c24: 002e7793 andi a5,t3,2 - 2c28: 1c079c63 bnez a5,2e00 - sign[0] = 0; - 2c2c: 4689 li a3,2 - 2c2e: 4a09 li s4,2 - 2c30: 4805 li a6,1 - 2c32: 9e8ff06f j 1e1a - sign[0] = 1; - 2c36: 670d lui a4,0x3 - 2c38: b0170713 addi a4,a4,-1279 # 2b01 - 2c3c: 06e11423 sh a4,104(sp) - 2c40: b86ff06f j 1fc6 - pr = 0; - 2c44: 4881 li a7,0 - 2c46: f1ffe06f j 1b64 - *s++ = '0'; - 2c4a: 03000713 li a4,48 - 2c4e: 0ce10023 sb a4,192(sp) - if (pr) - 2c52: 1a088c63 beqz a7,2e0a - *s++ = stbsp__period; - 2c56: 00004717 auipc a4,0x4 - 2c5a: e0674703 lbu a4,-506(a4) # 6a5c - n = -dp; - 2c5e: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 2c62: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 2c66: 0007871b sext.w a4,a5 - 2c6a: 00e8d363 bge a7,a4,2c70 - 2c6e: 87c6 mv a5,a7 - 2c70: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 2c74: 00d7833b addw t1,a5,a3 - 2c78: 883a mv a6,a4 - while (i) { - 2c7a: 0c210793 addi a5,sp,194 - *s++ = '0'; - 2c7e: 03000513 li a0,48 - while (i) { - 2c82: e711 bnez a4,2c8e - 2c84: a271 j 2e10 - if ((((stbsp__uintptr)s) & 3) == 0) - 2c86: 0037f613 andi a2,a5,3 - 2c8a: 18060563 beqz a2,2e14 - *s++ = '0'; - 2c8e: 85ba mv a1,a4 - 2c90: 00a78023 sb a0,0(a5) - --i; - 2c94: 377d addiw a4,a4,-1 - *s++ = '0'; - 2c96: 0785 addi a5,a5,1 - while (i) { - 2c98: f77d bnez a4,2c86 - if ((stbsp__int32)(l + n) > pr) - 2c9a: 0003071b sext.w a4,t1 - 2c9e: 4108863b subw a2,a7,a6 - 2ca2: 00e8d563 bge a7,a4,2cac - l = pr - n; - 2ca6: 0006069b sext.w a3,a2 - 2caa: d0b2 sw a2,96(sp) - while (i) { - 2cac: c68d beqz a3,2cd6 - 2cae: 7566 ld a0,120(sp) - 2cb0: 02069813 slli a6,a3,0x20 - 2cb4: 02085813 srli a6,a6,0x20 - 2cb8: 01078eb3 add t4,a5,a6 - 2cbc: 85aa mv a1,a0 - 2cbe: 873e mv a4,a5 - *s++ = *sn++; - 2cc0: 0005c883 lbu a7,0(a1) - 2cc4: 0705 addi a4,a4,1 - while (i) { - 2cc6: 0585 addi a1,a1,1 - *s++ = *sn++; - 2cc8: ff170fa3 sb a7,-1(a4) - while (i) { - 2ccc: ffd71ae3 bne a4,t4,2cc0 - 2cd0: 9542 add a0,a0,a6 - 2cd2: 97c2 add a5,a5,a6 - 2cd4: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2cd6: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2cda: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 2cde: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2ce2: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2ce6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2ce8: fbcff06f j 24a4 - *--s = '0'; - 2cec: 03000793 li a5,48 - 2cf0: fefa8fa3 sb a5,-1(s5) - l = 1; - 2cf4: 030002b7 lui t0,0x3000 - 2cf8: 4785 li a5,1 - 2cfa: d0be sw a5,96(sp) - *--s = '0'; - 2cfc: 1afd addi s5,s5,-1 - l = 1; - 2cfe: 4605 li a2,1 - 2d00: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2d02: 4685 li a3,1 - 2d04: b9dd j 29fa - } else if (fl & STBSP__LEADINGSPACE) { - 2d06: 004e7713 andi a4,t3,4 - 2d0a: e74d bnez a4,2db4 - } else if (fl & STBSP__LEADINGPLUS) { - 2d0c: 8b89 andi a5,a5,2 - 2d0e: efd9 bnez a5,2dac - sign[0] = 0; - 2d10: 06010423 sb zero,104(sp) - 2d14: 4a01 li s4,0 - 2d16: b9c9 j 29e8 - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2d18: 051c addi a5,sp,640 - 2d1a: cafa89e3 beq s5,a5,29cc - ++s; - 2d1e: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2d20: 415786bb subw a3,a5,s5 - 2d24: b165 j 29cc - n = dp - n; - 2d26: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2d2a: 12030e63 beqz t1,2e66 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d2e: 4511 li a0,4 - 2d30: 03000613 li a2,48 - *s++ = stbsp__comma; - 2d34: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d38: 00030563 beqz t1,2d42 - 2d3c: 2585 addiw a1,a1,1 - 2d3e: 00a58963 beq a1,a0,2d50 - 2d42: 8736 mv a4,a3 - --n; - 2d44: 37fd addiw a5,a5,-1 - 2d46: fec70fa3 sb a2,-1(a4) - while (n) { - 2d4a: f7ed bnez a5,2d34 - 2d4c: f38ff06f j 2484 - 2d50: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 2d54: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d56: 4585 li a1,1 - 2d58: b7f5 j 2d44 - sign[0] = 0; - 2d5a: 06010423 sb zero,104(sp) - 2d5e: f1dfe06f j 1c7a - tail[idx + 1] = "_kMGT"[fl >> 24]; - 2d62: 00002697 auipc a3,0x2 - 2d66: 37e68693 addi a3,a3,894 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0xf0> - 2d6a: 9736 add a4,a4,a3 - 2d6c: 00074683 lbu a3,0(a4) - 2d70: 1088 addi a0,sp,96 - 2d72: 22060713 addi a4,a2,544 - 2d76: 972a add a4,a4,a0 - 2d78: ded70823 sb a3,-528(a4) - idx++; - 2d7c: 8fb2 mv t6,a2 - 2d7e: fb0ff06f j 252e - while (limit && *sn) { - 2d82: e00692e3 bnez a3,2b86 - 2d86: bd19 j 2b9c - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d88: 0008071b sext.w a4,a6 - 2d8c: 86c2 mv a3,a6 - 2d8e: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 2d90: 863a mv a2,a4 - 2d92: 00e8d363 bge a7,a4,2d98 - 2d96: 8646 mv a2,a7 - 2d98: 40f608bb subw a7,a2,a5 - 2d9c: 814ff06f j 1db0 - divisor = 1000.0f; - 2da0: 00003797 auipc a5,0x3 - 2da4: ae07b787 fld fa5,-1312(a5) # 5880 - 2da8: dd5fe06f j 1b7c - 2dac: 678d lui a5,0x3 - 2dae: b017879b addiw a5,a5,-1279 # 2b01 - 2db2: b13d j 29e0 - 2db4: 6789 lui a5,0x2 - 2db6: 2785 addiw a5,a5,1 # 2001 - 2db8: b125 j 29e0 - *s++ = stbsp__period; - 2dba: 00004517 auipc a0,0x4 - 2dbe: ca254503 lbu a0,-862(a0) # 6a5c - sn = s; - 2dc2: 0c210793 addi a5,sp,194 - n = pr; - 2dc6: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 2dca: 0ca100a3 sb a0,193(sp) - sn = s; - 2dce: fcbe sd a5,120(sp) - if (n > 13) - 2dd0: 4535 li a0,13 - n64 <<= 4; - 2dd2: 0712 slli a4,a4,0x4 - if (n > 13) - 2dd4: 8836 mv a6,a3 - 2dd6: 00d57363 bgeu a0,a3,2ddc - 2dda: 4835 li a6,13 - 2ddc: 0008051b sext.w a0,a6 - while (n--) { - 2de0: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 2de2: af1542e3 blt a0,a7,28c6 - tz = 0; - 2de6: 4881 li a7,0 - 2de8: b4cd j 28ca - while (n < l) { - 2dea: 87ba mv a5,a4 - 2dec: bc1d j 2822 - tail[0] = (char)n; - 2dee: 478d li a5,3 - 2df0: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2df4: 06b109a3 sb a1,115(sp) - 2df8: 480d li a6,3 - 2dfa: 4f8d li t6,3 - 2dfc: 8e4ff06f j 1ee0 - 2e00: 678d lui a5,0x3 - 2e02: b017879b addiw a5,a5,-1279 # 2b01 - 2e06: 80aff06f j 1e10 - if (pr) - 2e0a: 8336 mv t1,a3 - *s++ = '0'; - 2e0c: 0c110793 addi a5,sp,193 - while (i) { - 2e10: 4801 li a6,0 - 2e12: b561 j 2c9a - while (i >= 4) { - 2e14: 460d li a2,3 - 2e16: 04e65663 bge a2,a4,2e62 - 2e1a: ffb5871b addiw a4,a1,-5 - 2e1e: 0027559b srliw a1,a4,0x2 - 2e22: 0015861b addiw a2,a1,1 - 2e26: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e28: 30303537 lui a0,0x30303 - 2e2c: 963e add a2,a2,a5 - 2e2e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 2e32: c388 sw a0,0(a5) - s += 4; - 2e34: 0791 addi a5,a5,4 - while (i >= 4) { - 2e36: fef61ee3 bne a2,a5,2e32 - 2e3a: 0025959b slliw a1,a1,0x2 - 2e3e: 9f0d subw a4,a4,a1 - while (i) { - 2e40: e4070de3 beqz a4,2c9a - *s++ = '0'; - 2e44: 03000513 li a0,48 - while (i) { - 2e48: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 2e4c: 0605 addi a2,a2,1 - while (i) { - 2e4e: 00060e9b sext.w t4,a2 - *s++ = '0'; - 2e52: fea60fa3 sb a0,-1(a2) - while (i) { - 2e56: ffd59be3 bne a1,t4,2e4c - 2e5a: 1702 slli a4,a4,0x20 - 2e5c: 9301 srli a4,a4,0x20 - 2e5e: 97ba add a5,a5,a4 - 2e60: bd2d j 2c9a - while (i >= 4) { - 2e62: 863e mv a2,a5 - 2e64: b7c5 j 2e44 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e66: 00377693 andi a3,a4,3 - 2e6a: ce81 beqz a3,2e82 - *s++ = '0'; - 2e6c: 03000693 li a3,48 - 2e70: 00d70023 sb a3,0(a4) - --n; - 2e74: 37fd addiw a5,a5,-1 - *s++ = '0'; - 2e76: 0705 addi a4,a4,1 - while (n) { - 2e78: e0078663 beqz a5,2484 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e7c: 00377613 andi a2,a4,3 - 2e80: fa65 bnez a2,2e70 - while (n >= 4) { - 2e82: 468d li a3,3 - 2e84: eaf6f5e3 bgeu a3,a5,2d2e - 2e88: ffc7869b addiw a3,a5,-4 - 2e8c: 0026d69b srliw a3,a3,0x2 - 2e90: 2685 addiw a3,a3,1 - 2e92: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e94: 30303637 lui a2,0x30303 - 2e98: 96ba add a3,a3,a4 - 2e9a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 2e9e: c310 sw a2,0(a4) - s += 4; - 2ea0: 0711 addi a4,a4,4 - while (n >= 4) { - 2ea2: fed71ee3 bne a4,a3,2e9e - 2ea6: 8b8d andi a5,a5,3 - while (n) { - 2ea8: e80793e3 bnez a5,2d2e - 2eac: dd8ff06f j 2484 - if (((stbsp__uintptr)sn & 3) == 0) - 2eb0: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2eb2: 56fd li a3,-1 - 2eb4: b155 j 2b58 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2eb6: 5775 li a4,-3 - 2eb8: 00e7ce63 blt a5,a4,2ed4 - 2ebc: f6fa4663 blt s4,a5,2628 - if (dp > 0) { - 2ec0: ecf054e3 blez a5,2d88 - 2ec4: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2ec6: 4881 li a7,0 - 2ec8: ee9fe06f j 1db0 - while (i--) - 2ecc: fff7869b addiw a3,a5,-1 - 2ed0: 8722 mv a4,s0 - 2ed2: b105 j 2af2 - if (pr > (stbsp__int32)l) - 2ed4: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2ed8: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 2eda: 86c2 mv a3,a6 - 2edc: 88d2 mv a7,s4 - 2ede: f7475d63 bge a4,s4,2658 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2ee2: 8542 mv a0,a6 - 2ee4: f56ff06f j 263a - -0000000000002ee8 : -{ - 2ee8: 715d addi sp,sp,-80 - va_start(va, fmt); - 2eea: 02010313 addi t1,sp,32 -{ - 2eee: f032 sd a2,32(sp) - 2ef0: f436 sd a3,40(sp) - 2ef2: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ef4: 86ae mv a3,a1 - 2ef6: 862a mv a2,a0 - 2ef8: 871a mv a4,t1 - 2efa: 4581 li a1,0 - 2efc: 4501 li a0,0 -{ - 2efe: ec06 sd ra,24(sp) - 2f00: fc3e sd a5,56(sp) - 2f02: e0c2 sd a6,64(sp) - 2f04: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2f06: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2f08: bc6fe0ef jal 12ce -} - 2f0c: 60e2 ld ra,24(sp) - 2f0e: 6161 addi sp,sp,80 - 2f10: 8082 ret - -0000000000002f12 : -{ - 2f12: dd010113 addi sp,sp,-560 - 2f16: 22813023 sd s0,544(sp) - 2f1a: 20913c23 sd s1,536(sp) - 2f1e: 22113423 sd ra,552(sp) - 2f22: 84ae mv s1,a1 - 2f24: 842a mv s0,a0 - 2f26: 88b2 mv a7,a2 - 2f28: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 2f2a: e591 bnez a1,2f36 - 2f2c: c141 beqz a0,2fac - c.buf = buf; - 2f2e: e02a sd a0,0(sp) - c.count = count; - 2f30: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f32: 0810 addi a2,sp,16 - 2f34: a089 j 2f76 - if (len > c->count) - 2f36: 0015a593 slti a1,a1,1 - 2f3a: 40b005bb negw a1,a1 - 2f3e: 8de5 and a1,a1,s1 - c.buf = buf; - 2f40: e02a sd a0,0(sp) - c.count = count; - 2f42: c426 sw s1,8(sp) - c.length = 0; - 2f44: c602 sw zero,12(sp) - if (len > c->count) - 2f46: 2581 sext.w a1,a1 - if (len) { - 2f48: 0804d663 bgez s1,2fd4 - s = buf; - 2f4c: 4781 li a5,0 - if (buf != c->buf) { - 2f4e: c911 beqz a0,2f62 - *d++ = *s++; - 2f50: 0007c803 lbu a6,0(a5) - 2f54: 0785 addi a5,a5,1 - 2f56: 00f40533 add a0,s0,a5 - 2f5a: ff050fa3 sb a6,-1(a0) - } while (s < se); - 2f5e: feb7e9e3 bltu a5,a1,2f50 - c->count -= len; - 2f62: 40b486bb subw a3,s1,a1 - c->buf += len; - 2f66: 95a2 add a1,a1,s0 - 2f68: e02e sd a1,0(sp) - c->count -= len; - 2f6a: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f6c: 1ff00793 li a5,511 - 2f70: fcd7d1e3 bge a5,a3,2f32 - 2f74: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 2f76: 86c6 mv a3,a7 - 2f78: 858a mv a1,sp - 2f7a: ffffd517 auipc a0,0xffffd - 2f7e: 21650513 addi a0,a0,534 # 190 - 2f82: b4cfe0ef jal 12ce - l = (int)( c.buf - buf ); - 2f86: 6782 ld a5,0(sp) - 2f88: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 2f8a: 0097c463 blt a5,s1,2f92 - l = count - 1; - 2f8e: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 2f92: 943e add s0,s0,a5 - 2f94: 00040023 sb zero,0(s0) -} - 2f98: 22813083 ld ra,552(sp) - 2f9c: 22013403 ld s0,544(sp) - 2fa0: 4532 lw a0,12(sp) - 2fa2: 21813483 ld s1,536(sp) - 2fa6: 23010113 addi sp,sp,560 - 2faa: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2fac: 86b2 mv a3,a2 - 2fae: 858a mv a1,sp - 2fb0: 0810 addi a2,sp,16 - 2fb2: ffffd517 auipc a0,0xffffd - 2fb6: 22c50513 addi a0,a0,556 # 1de - c.length = 0; - 2fba: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2fbc: b12fe0ef jal 12ce -} - 2fc0: 22813083 ld ra,552(sp) - 2fc4: 22013403 ld s0,544(sp) - 2fc8: 4532 lw a0,12(sp) - 2fca: 21813483 ld s1,536(sp) - 2fce: 23010113 addi sp,sp,560 - 2fd2: 8082 ret - 2fd4: 86a6 mv a3,s1 - 2fd6: bf59 j 2f6c - -0000000000002fd8 : -{ - 2fd8: 715d addi sp,sp,-80 - va_start(va, fmt); - 2fda: 02810313 addi t1,sp,40 -{ - 2fde: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fe0: 869a mv a3,t1 -{ - 2fe2: ec06 sd ra,24(sp) - 2fe4: f83a sd a4,48(sp) - 2fe6: fc3e sd a5,56(sp) - 2fe8: e0c2 sd a6,64(sp) - 2fea: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2fec: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fee: f25ff0ef jal 2f12 -} - 2ff2: 60e2 ld ra,24(sp) - 2ff4: 6161 addi sp,sp,80 - 2ff6: 8082 ret - -0000000000002ff8 : -{ - 2ff8: 86ae mv a3,a1 - 2ffa: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ffc: 4581 li a1,0 - 2ffe: 862a mv a2,a0 - 3000: 4501 li a0,0 - 3002: accfe06f j 12ce - -0000000000003006 : -{ - 3006: 7119 addi sp,sp,-128 - va_start(ap, format); - 3008: 05010313 addi t1,sp,80 -{ - 300c: e0a2 sd s0,64(sp) - 300e: fc26 sd s1,56(sp) - 3010: 842a mv s0,a0 - 3012: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 3014: 0808 addi a0,sp,16 - ctx.limit = size; - 3016: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 3018: 861a mv a2,t1 -{ - 301a: e486 sd ra,72(sp) - 301c: ecb6 sd a3,88(sp) - 301e: f0ba sd a4,96(sp) - 3020: f4be sd a5,104(sp) - 3022: f8c2 sd a6,112(sp) - 3024: fcc6 sd a7,120(sp) - va_start(ap, format); - 3026: e41a sd t1,8(sp) - ctx.buf = str; - 3028: e822 sd s0,16(sp) - ctx.limit = size; - 302a: ec26 sd s1,24(sp) - ctx.written = 0; - 302c: f002 sd zero,32(sp) - ctx.stream = NULL; - 302e: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 3030: 02c000ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3034: 7502 ld a0,32(sp) - 3036: 00950b63 beq a0,s1,304c - str[ctx.written] = '\0'; - 303a: 942a add s0,s0,a0 - 303c: 00040023 sb zero,0(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 - str[size - 1] = '\0'; - 304c: fe040f23 sb zero,-2(s0) -} - 3050: 60a6 ld ra,72(sp) - 3052: 6406 ld s0,64(sp) - 3054: 74e2 ld s1,56(sp) - 3056: 2501 sext.w a0,a0 - 3058: 6109 addi sp,sp,128 - 305a: 8082 ret - -000000000000305c <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 305c: 7129 addi sp,sp,-320 - 305e: edee sd s11,216(sp) - 3060: fe06 sd ra,312(sp) - 3062: 8dae mv s11,a1 - while (*p) - 3064: 0005c583 lbu a1,0(a1) - 3068: cde9 beqz a1,3142 <_vprintf_core.constprop.0.isra.0+0xe6> - 306a: f626 sd s1,296(sp) - 306c: f24a sd s2,288(sp) - 306e: ee4e sd s3,280(sp) - 3070: e656 sd s5,264(sp) - 3072: f9e2 sd s8,240(sp) - 3074: fa22 sd s0,304(sp) - 3076: ea52 sd s4,272(sp) - 3078: e25a sd s6,256(sp) - 307a: fdde sd s7,248(sp) - 307c: f5e6 sd s9,232(sp) - 307e: f1ea sd s10,224(sp) - 3080: 84aa mv s1,a0 - 3082: 8c32 mv s8,a2 - if (*p != '%') - 3084: 02500a93 li s5,37 - 3088: 49c1 li s3,16 - 308a: 00002917 auipc s2,0x2 - 308e: 32a90913 addi s2,s2,810 # 53b4 <_GLOBAL__sub_I__ZSt3cin+0x3c4> - 3092: a039 j 30a0 <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 3094: 8526 mv a0,s1 - 3096: 952fe0ef jal 11e8 <_out_char> - while (*p) - 309a: 000dc583 lbu a1,0(s11) - 309e: c5d9 beqz a1,312c <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 30a0: 0d85 addi s11,s11,1 - if (*p != '%') - 30a2: ff5599e3 bne a1,s5,3094 <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 30a6: 4501 li a0,0 - 30a8: 4881 li a7,0 - 30aa: 4581 li a1,0 - 30ac: 4b01 li s6,0 - 30ae: 4a01 li s4,0 - if (*p == '-') - 30b0: 000dcc83 lbu s9,0(s11) - 30b4: fe0c871b addiw a4,s9,-32 - 30b8: 0ff77713 zext.b a4,a4 - 30bc: 00e9e763 bltu s3,a4,30ca <_vprintf_core.constprop.0.isra.0+0x6e> - 30c0: 070a slli a4,a4,0x2 - 30c2: 974a add a4,a4,s2 - 30c4: 4318 lw a4,0(a4) - 30c6: 974a add a4,a4,s2 - 30c8: 8702 jr a4 - if (*p == '*') - 30ca: 02a00793 li a5,42 - 30ce: 16fc9c63 bne s9,a5,3246 <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 30d2: 000c2403 lw s0,0(s8) - 30d6: 0c21 addi s8,s8,8 - if (width < 0) - 30d8: 00045563 bgez s0,30e2 <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 30dc: 4080043b negw s0,s0 - flag_left = 1; - 30e0: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 30e2: 001dcc83 lbu s9,1(s11) - p++; - 30e6: 0d85 addi s11,s11,1 - if (*p == '.') - 30e8: 02e00793 li a5,46 - int precision = -1; - 30ec: 5bfd li s7,-1 - if (*p == '.') - 30ee: 18fc8a63 beq s9,a5,3282 <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 30f2: 06c00693 li a3,108 - 30f6: 8666 mv a2,s9 - 30f8: 1adc8663 beq s9,a3,32a4 <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 30fc: 07a00693 li a3,122 - p++; - 3100: 0d85 addi s11,s11,1 - else if (*p == 'z') - 3102: 24dc8163 beq s9,a3,3344 <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 3106: 06400693 li a3,100 - 310a: 4adc8163 beq s9,a3,35ac <_vprintf_core.constprop.0.isra.0+0x550> - 310e: 06400693 li a3,100 - int len_mod = 0; - 3112: 4e81 li t4,0 - 3114: 1b96e663 bltu a3,s9,32c0 <_vprintf_core.constprop.0.isra.0+0x264> - 3118: 04700693 li a3,71 - 311c: 2796e463 bltu a3,s9,3384 <_vprintf_core.constprop.0.isra.0+0x328> - 3120: 04400693 li a3,68 - 3124: 0596e363 bltu a3,s9,316a <_vprintf_core.constprop.0.isra.0+0x10e> - 3128: 240c9363 bnez s9,336e <_vprintf_core.constprop.0.isra.0+0x312> - 312c: 7452 ld s0,304(sp) - 312e: 74b2 ld s1,296(sp) - 3130: 7912 ld s2,288(sp) - 3132: 69f2 ld s3,280(sp) - 3134: 6a52 ld s4,272(sp) - 3136: 6ab2 ld s5,264(sp) - 3138: 6b12 ld s6,256(sp) - 313a: 7bee ld s7,248(sp) - 313c: 7c4e ld s8,240(sp) - 313e: 7cae ld s9,232(sp) - 3140: 7d0e ld s10,224(sp) -} - 3142: 70f2 ld ra,312(sp) - 3144: 6dee ld s11,216(sp) - 3146: 6131 addi sp,sp,320 - 3148: 8082 ret - if (*p == '-') - 314a: 4585 li a1,1 - p++; - 314c: 0d85 addi s11,s11,1 - if (*p == '-') - 314e: b78d j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - 3150: 4505 li a0,1 - p++; - 3152: 0d85 addi s11,s11,1 - while (1) - 3154: bfb1 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3156: 4885 li a7,1 - p++; - 3158: 0d85 addi s11,s11,1 - while (1) - 315a: bf99 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 315c: 4b05 li s6,1 - p++; - 315e: 0d85 addi s11,s11,1 - while (1) - 3160: bf81 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3162: 4a05 li s4,1 - p++; - 3164: 0d85 addi s11,s11,1 - while (1) - 3166: b7a9 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 3168: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 316a: 02500693 li a3,37 - 316e: 02d10823 sb a3,48(sp) - 3172: 4d05 li s10,1 - if (flag_left) - 3174: 000a0763 beqz s4,3182 <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 3178: 02d00693 li a3,45 - 317c: 02d108a3 sb a3,49(sp) - 3180: 4d09 li s10,2 - if (flag_zero) - 3182: 000b0c63 beqz s6,319a <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 3186: 0c0d0793 addi a5,s10,192 - 318a: 0818 addi a4,sp,16 - 318c: 00e786b3 add a3,a5,a4 - 3190: 03000613 li a2,48 - 3194: f6c68023 sb a2,-160(a3) - 3198: 2d05 addiw s10,s10,1 - if (flag_plus) - 319a: c999 beqz a1,31b0 <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 319c: 0c0d0793 addi a5,s10,192 - 31a0: 0818 addi a4,sp,16 - 31a2: 00e786b3 add a3,a5,a4 - 31a6: 02b00613 li a2,43 - 31aa: f6c68023 sb a2,-160(a3) - 31ae: 2d05 addiw s10,s10,1 - if (flag_space) - 31b0: 00088c63 beqz a7,31c8 <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 31b4: 0c0d0793 addi a5,s10,192 - 31b8: 0818 addi a4,sp,16 - 31ba: 00e786b3 add a3,a5,a4 - 31be: 02000613 li a2,32 - 31c2: f6c68023 sb a2,-160(a3) - 31c6: 2d05 addiw s10,s10,1 - if (flag_hash) - 31c8: c919 beqz a0,31de <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 31ca: 0c0d0793 addi a5,s10,192 - 31ce: 0818 addi a4,sp,16 - 31d0: 00e786b3 add a3,a5,a4 - 31d4: 02300613 li a2,35 - 31d8: f6c68023 sb a2,-160(a3) - 31dc: 2d05 addiw s10,s10,1 - if (width > 0) - 31de: 03010a13 addi s4,sp,48 - 31e2: 28804563 bgtz s0,346c <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 31e6: 260bd763 bgez s7,3454 <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 31ea: 0c0d0793 addi a5,s10,192 - 31ee: 0818 addi a4,sp,16 - 31f0: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31f4: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 31f8: 001d071b addiw a4,s10,1 - 31fc: 0c070793 addi a5,a4,192 - 3200: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 3202: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 3206: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 3208: 08000593 li a1,128 - 320c: 8652 mv a2,s4 - 320e: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 3210: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 3214: dc5ff0ef jal 2fd8 - for (int i = 0; f_buf[i] != '\0'; i++) - 3218: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 321c: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 321e: 05110413 addi s0,sp,81 - 3222: e6058ce3 beqz a1,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 3226: 8526 mv a0,s1 - 3228: fc1fd0ef jal 11e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 322c: 00044583 lbu a1,0(s0) - 3230: 0405 addi s0,s0,1 - 3232: e60584e3 beqz a1,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 3236: 8526 mv a0,s1 - 3238: fb1fd0ef jal 11e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 323c: 00044583 lbu a1,0(s0) - 3240: 0405 addi s0,s0,1 - 3242: f1f5 bnez a1,3226 <_vprintf_core.constprop.0.isra.0+0x1ca> - 3244: bd99 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 3246: fd0c869b addiw a3,s9,-48 - 324a: 0ff6f313 zext.b t1,a3 - 324e: 4725 li a4,9 - int width = 0; - 3250: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 3252: 4625 li a2,9 - 3254: e8676ae3 bltu a4,t1,30e8 <_vprintf_core.constprop.0.isra.0+0x8c> - 3258: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 325c: 0024171b slliw a4,s0,0x2 - 3260: 9f21 addw a4,a4,s0 - 3262: 0017171b slliw a4,a4,0x1 - 3266: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 326a: fd0c869b addiw a3,s9,-48 - 326e: 0ff6f713 zext.b a4,a3 - p++; - 3272: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 3274: fee672e3 bgeu a2,a4,3258 <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 3278: 02e00793 li a5,46 - int precision = -1; - 327c: 5bfd li s7,-1 - if (*p == '.') - 327e: e6fc9ae3 bne s9,a5,30f2 <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 3282: 001dcc83 lbu s9,1(s11) - 3286: 02a00793 li a5,42 - 328a: 16fc9f63 bne s9,a5,3408 <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 328e: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 3292: 06c00693 li a3,108 - precision = va_arg(ap, int); - 3296: 000c2b83 lw s7,0(s8) - p++; - 329a: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 329c: 0c21 addi s8,s8,8 - if (*p == 'l') - 329e: 8666 mv a2,s9 - 32a0: e4dc9ee3 bne s9,a3,30fc <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 32a4: 001dcc83 lbu s9,1(s11) - 32a8: 08cc8d63 beq s9,a2,3342 <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 32ac: 06400693 li a3,100 - 32b0: 0d89 addi s11,s11,2 - if (!spec) - 32b2: 4cdc8c63 beq s9,a3,378a <_vprintf_core.constprop.0.isra.0+0x72e> - 32b6: 06400693 li a3,100 - len_mod = 1; - 32ba: 4e85 li t4,1 - 32bc: e596fee3 bgeu a3,s9,3118 <_vprintf_core.constprop.0.isra.0+0xbc> - 32c0: f9bc869b addiw a3,s9,-101 - 32c4: 0ff6f693 zext.b a3,a3 - 32c8: 464d li a2,19 - 32ca: 12d66863 bltu a2,a3,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - 32ce: 4e05 li t3,1 - 32d0: 00091637 lui a2,0x91 - 32d4: 00de1333 sll t1,t3,a3 - 32d8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88f88> - 32dc: 00c37633 and a2,t1,a2 - 32e0: 1a061463 bnez a2,3488 <_vprintf_core.constprop.0.isra.0+0x42c> - 32e4: 00737313 andi t1,t1,7 - 32e8: e80311e3 bnez t1,316a <_vprintf_core.constprop.0.isra.0+0x10e> - 32ec: 4639 li a2,14 - 32ee: 10c69663 bne a3,a2,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 32f2: 000c3c83 ld s9,0(s8) - if (!s) - 32f6: 420c8863 beqz s9,3726 <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 32fa: 000cc683 lbu a3,0(s9) - 32fe: 38068863 beqz a3,368e <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 3302: 8666 mv a2,s9 - int len = 0; - 3304: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 3306: 00db8863 beq s7,a3,3316 <_vprintf_core.constprop.0.isra.0+0x2ba> - 330a: 00164583 lbu a1,1(a2) - len++; - 330e: 2685 addiw a3,a3,1 - tmp++; - 3310: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 3312: f9f5 bnez a1,3306 <_vprintf_core.constprop.0.isra.0+0x2aa> - 3314: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 3316: 268bc563 blt s7,s0,3580 <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 331a: 4401 li s0,0 - 331c: 020b8163 beqz s7,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - 3320: 4d01 li s10,0 - _out_char(ctx, s[i]); - 3322: 01ac86b3 add a3,s9,s10 - 3326: 0006c583 lbu a1,0(a3) - 332a: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 332c: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 332e: ebbfd0ef jal 11e8 <_out_char> - for (int i = 0; i < len; i++) - 3332: 000d069b sext.w a3,s10 - 3336: ff76c6e3 blt a3,s7,3322 <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 333a: 260a1463 bnez s4,35a2 <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 333e: 0c21 addi s8,s8,8 - 3340: bba9 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 3342: 0d89 addi s11,s11,2 - char spec = *p++; - 3344: 000dcc83 lbu s9,0(s11) - 3348: 06400693 li a3,100 - 334c: 001d8793 addi a5,s11,1 - if (!spec) - 3350: 3edc8063 beq s9,a3,3730 <_vprintf_core.constprop.0.isra.0+0x6d4> - 3354: 0796ea63 bltu a3,s9,33c8 <_vprintf_core.constprop.0.isra.0+0x36c> - 3358: 04700693 li a3,71 - 335c: 0f96e263 bltu a3,s9,3440 <_vprintf_core.constprop.0.isra.0+0x3e4> - 3360: 04400693 li a3,68 - 3364: e196e2e3 bltu a3,s9,3168 <_vprintf_core.constprop.0.isra.0+0x10c> - 3368: dc0c82e3 beqz s9,312c <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 336c: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 336e: 02500593 li a1,37 - 3372: 8526 mv a0,s1 - 3374: e75fd0ef jal 11e8 <_out_char> - if (spec != '%') - 3378: 02500713 li a4,37 - 337c: d0ec8fe3 beq s9,a4,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 3380: 85e6 mv a1,s9 - 3382: bb09 j 3094 <_vprintf_core.constprop.0.isra.0+0x38> - 3384: 05800693 li a3,88 - 3388: 2edc8263 beq s9,a3,366c <_vprintf_core.constprop.0.isra.0+0x610> - 338c: 06300713 li a4,99 - 3390: 06ec9563 bne s9,a4,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 3394: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 3398: 8722 mv a4,s0 - 339a: 00804363 bgtz s0,33a0 <_vprintf_core.constprop.0.isra.0+0x344> - 339e: 4705 li a4,1 - 33a0: fff7041b addiw s0,a4,-1 - if (!flag_left) - 33a4: 3c0a0463 beqz s4,376c <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 33a8: 85e6 mv a1,s9 - 33aa: 8526 mv a0,s1 - 33ac: e3dfd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 33b0: 4a01 li s4,0 - 33b2: d451 beqz s0,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 33b4: 02000593 li a1,32 - 33b8: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 33ba: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 33bc: e2dfd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 33c0: ff441ae3 bne s0,s4,33b4 <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 33c4: 0c21 addi s8,s8,8 - 33c6: b9d1 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - 33c8: f9bc861b addiw a2,s9,-101 - 33cc: 0ff67613 zext.b a2,a2 - 33d0: 46cd li a3,19 - 33d2: 40c6e963 bltu a3,a2,37e4 <_vprintf_core.constprop.0.isra.0+0x788> - 33d6: 00091337 lui t1,0x91 - 33da: 4685 li a3,1 - 33dc: 00c696b3 sll a3,a3,a2 - 33e0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88f88> - 33e4: 0066f333 and t1,a3,t1 - 33e8: 34031c63 bnez t1,3740 <_vprintf_core.constprop.0.isra.0+0x6e4> - 33ec: 8a9d andi a3,a3,7 - 33ee: d6069de3 bnez a3,3168 <_vprintf_core.constprop.0.isra.0+0x10c> - 33f2: 46b9 li a3,14 - char spec = *p++; - 33f4: 8dbe mv s11,a5 - 33f6: eed60ee3 beq a2,a3,32f2 <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 33fa: 02500593 li a1,37 - 33fe: 8526 mv a0,s1 - 3400: de9fd0ef jal 11e8 <_out_char> - _out_char(ctx, spec); - 3404: 85e6 mv a1,s9 - 3406: b179 j 3094 <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 3408: fd0c869b addiw a3,s9,-48 - 340c: 0ff6fe13 zext.b t3,a3 - 3410: 4625 li a2,9 - p++; - 3412: 0d85 addi s11,s11,1 - precision = 0; - 3414: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 3416: 4325 li t1,9 - 3418: cdc66de3 bltu a2,t3,30f2 <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 341c: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 3420: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 3424: 0176073b addw a4,a2,s7 - 3428: 0017171b slliw a4,a4,0x1 - 342c: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 3430: fd0c869b addiw a3,s9,-48 - 3434: 0ff6f613 zext.b a2,a3 - p++; - 3438: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 343a: fec371e3 bgeu t1,a2,341c <_vprintf_core.constprop.0.isra.0+0x3c0> - 343e: b955 j 30f2 <_vprintf_core.constprop.0.isra.0+0x96> - 3440: 05800693 li a3,88 - 3444: 3cdc8d63 beq s9,a3,381e <_vprintf_core.constprop.0.isra.0+0x7c2> - 3448: 06300713 li a4,99 - char spec = *p++; - 344c: 8dbe mv s11,a5 - 344e: f4ec83e3 beq s9,a4,3394 <_vprintf_core.constprop.0.isra.0+0x338> - 3452: b765 j 33fa <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 3454: 01aa0533 add a0,s4,s10 - 3458: 865e mv a2,s7 - 345a: 00002597 auipc a1,0x2 - 345e: cde58593 addi a1,a1,-802 # 5138 <_GLOBAL__sub_I__ZSt3cin+0x148> - 3462: ba5ff0ef jal 3006 - 3466: 00ad0d3b addw s10,s10,a0 - 346a: b341 j 31ea <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 346c: 01aa0533 add a0,s4,s10 - 3470: 8622 mv a2,s0 - 3472: 00002597 auipc a1,0x2 - 3476: cbe58593 addi a1,a1,-834 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x140> - 347a: b8dff0ef jal 3006 - 347e: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 3482: d60bc4e3 bltz s7,31ea <_vprintf_core.constprop.0.isra.0+0x18e> - 3486: b7f9 j 3454 <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 3488: 06900693 li a3,105 - 348c: 10dc8e63 beq s9,a3,35a8 <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 3490: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3494: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3498: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 349a: 38dc9d63 bne s9,a3,3834 <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 349e: 33ce8963 beq t4,t3,37d0 <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 34a2: 000c6e03 lwu t3,0(s8) - 34a6: 85f6 mv a1,t4 - 34a8: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 34aa: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 34ac: 00002f97 auipc t6,0x2 - 34b0: c54f8f93 addi t6,t6,-940 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - if (val == 0) - 34b4: 120e0363 beqz t3,35da <_vprintf_core.constprop.0.isra.0+0x57e> - 34b8: 01010293 addi t0,sp,16 - sign_char = '-'; - 34bc: 8616 mv a2,t0 - 34be: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 34c0: 0266f8b3 remu a7,a3,t1 - 34c4: 8f32 mv t5,a2 - while (val != 0) - 34c6: 0605 addi a2,a2,1 - 34c8: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 34ca: 98fe add a7,a7,t6 - 34cc: 0008c883 lbu a7,0(a7) - val /= base; - 34d0: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 34d4: ff160fa3 sb a7,-1(a2) - while (val != 0) - 34d8: fe6ef4e3 bgeu t4,t1,34c0 <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 34dc: 405f0f3b subw t5,t5,t0 - 34e0: 2f05 addiw t5,t5,1 - if (precision >= 0) - 34e2: 100bc363 bltz s7,35e8 <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 34e6: 1d7f4d63 blt t5,s7,36c0 <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 34ea: 340b9163 bnez s7,382c <_vprintf_core.constprop.0.isra.0+0x7d0> - 34ee: 200e0763 beqz t3,36fc <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 34f2: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34f6: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 34fa: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34fc: 28dc8e63 beq s9,a3,3798 <_vprintf_core.constprop.0.isra.0+0x73c> - 3500: 2a051663 bnez a0,37ac <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3504: 00bf05bb addw a1,t5,a1 - 3508: 8d52 mv s10,s4 - 350a: 4b01 li s6,0 - char *prefix_str = NULL; - 350c: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 350e: 1085d263 bge a1,s0,3612 <_vprintf_core.constprop.0.isra.0+0x5b6> - 3512: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 3514: 100d0a63 beqz s10,3628 <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 3518: 6782 ld a5,0(sp) - 351a: 10079263 bnez a5,361e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 351e: 000c8c63 beqz s9,3536 <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 3522: 000cc583 lbu a1,0(s9) - 3526: 8526 mv a0,s1 - 3528: cc1fd0ef jal 11e8 <_out_char> - _out_char(ctx, prefix_str[1]); - 352c: 001cc583 lbu a1,1(s9) - 3530: 8526 mv a0,s1 - 3532: cb7fd0ef jal 11e8 <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 3536: 180b0263 beqz s6,36ba <_vprintf_core.constprop.0.isra.0+0x65e> - 353a: 100a1863 bnez s4,364a <_vprintf_core.constprop.0.isra.0+0x5ee> - 353e: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 3542: 2a0b8363 beqz s7,37e8 <_vprintf_core.constprop.0.isra.0+0x78c> - 3546: 4c81 li s9,0 - _out_char(ctx, '0'); - 3548: 03000593 li a1,48 - 354c: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 354e: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 3550: c99fd0ef jal 11e8 <_out_char> - for (int i = 0; i < total_zeros; i++) - 3554: ff7c9ae3 bne s9,s7,3548 <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 3558: 57fd li a5,-1 - 355a: 00fc0f63 beq s8,a5,3578 <_vprintf_core.constprop.0.isra.0+0x51c> - 355e: 01010c93 addi s9,sp,16 - 3562: 9ce2 add s9,s9,s8 - 3564: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 3568: 000cc583 lbu a1,0(s9) - 356c: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 356e: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 3570: c79fd0ef jal 11e8 <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 3574: ff9c1ae3 bne s8,s9,3568 <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 3578: 0c0a1e63 bnez s4,3654 <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 357c: 6c22 ld s8,8(sp) - 357e: be31 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 3580: 4174043b subw s0,s0,s7 - if (!flag_left) - 3584: 100a0a63 beqz s4,3698 <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 3588: d80b9ce3 bnez s7,3320 <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 358c: 4a01 li s4,0 - _out_char(ctx, ' '); - 358e: 02000593 li a1,32 - 3592: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3594: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3596: c53fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 359a: ff441ae3 bne s0,s4,358e <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 359e: 0c21 addi s8,s8,8 - 35a0: bced j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 35a2: f46d bnez s0,358c <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 35a4: 0c21 addi s8,s8,8 - 35a6: bcd5 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 35a8: 1fce8163 beq t4,t3,378a <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 35ac: 000c2e03 lw t3,0(s8) - 35b0: 008c0793 addi a5,s8,8 - 35b4: e43e sd a5,8(sp) - int64 sval = (int64)val; - 35b6: 86f2 mv a3,t3 - if (sval < 0) - 35b8: 1406cb63 bltz a3,370e <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 35bc: 02b00793 li a5,43 - 35c0: e03e sd a5,0(sp) - else if (flag_plus) - 35c2: e589 bnez a1,35cc <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 35c4: 00589793 slli a5,a7,0x5 - 35c8: e03e sd a5,0(sp) - 35ca: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 35cc: 4329 li t1,10 - 35ce: 00002f97 auipc t6,0x2 - 35d2: b32f8f93 addi t6,t6,-1230 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - if (val == 0) - 35d6: ee0e11e3 bnez t3,34b8 <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 35da: 03000693 li a3,48 - 35de: 00d10823 sb a3,16(sp) - return i; - 35e2: 4f05 li t5,1 - if (precision >= 0) - 35e4: f00bd1e3 bgez s7,34e6 <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 35e8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35ec: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 35f0: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 35f4: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 35f6: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35f8: 0d1c9f63 bne s9,a7,36d6 <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 35fc: 00002c97 auipc s9,0x2 - 3600: b1cc8c93 addi s9,s9,-1252 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x128> - prefix_len += 2; - 3604: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3606: 017585bb addw a1,a1,s7 - 360a: 01e585bb addw a1,a1,t5 - 360e: f085c2e3 blt a1,s0,3512 <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 3612: 080d0f63 beqz s10,36b0 <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 3616: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3618: 4401 li s0,0 - if (sign_char) - 361a: f00782e3 beqz a5,351e <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 361e: 6582 ld a1,0(sp) - 3620: 8526 mv a0,s1 - 3622: bc7fd0ef jal 11e8 <_out_char> - 3626: bde5 j 351e <_vprintf_core.constprop.0.isra.0+0x4c2> - _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: bb9fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3634: efa402e3 beq s0,s10,3518 <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 3638: 02000593 li a1,32 - 363c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 363e: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3640: ba9fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3644: ffa412e3 bne s0,s10,3628 <_vprintf_core.constprop.0.isra.0+0x5cc> - 3648: bdc1 j 3518 <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 364a: ee0b9ee3 bnez s7,3546 <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 364e: 577d li a4,-1 - 3650: f0ec17e3 bne s8,a4,355e <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 3654: d405 beqz s0,357c <_vprintf_core.constprop.0.isra.0+0x520> - 3656: 4a01 li s4,0 - _out_char(ctx, ' '); - 3658: 02000593 li a1,32 - 365c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 365e: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3660: b89fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3664: fe8a1ae3 bne s4,s0,3658 <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 3668: 6c22 ld s8,8(sp) - 366a: bc05 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 366c: 008c0793 addi a5,s8,8 - 3670: e43e sd a5,8(sp) - else if (len_mod == 1) - 3672: 180e9163 bnez t4,37f4 <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3676: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 367a: 4581 li a1,0 - 367c: 05800c93 li s9,88 - 3680: e002 sd zero,0(sp) - 3682: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3684: 00002f97 auipc t6,0x2 - 3688: a64f8f93 addi t6,t6,-1436 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0xf8> - 368c: b525 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 368e: ca8058e3 blez s0,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 3692: ee0a1de3 bnez s4,358c <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 3696: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 3698: 4d01 li s10,0 - _out_char(ctx, ' '); - 369a: 02000593 li a1,32 - 369e: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 36a0: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 36a2: b47fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 36a6: fe8d1ae3 bne s10,s0,369a <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 36aa: c60b9be3 bnez s7,3320 <_vprintf_core.constprop.0.isra.0+0x2c4> - 36ae: b941 j 333e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 36b0: 6782 ld a5,0(sp) - 36b2: 4401 li s0,0 - 36b4: f7ad bnez a5,361e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 36b6: e60c96e3 bnez s9,3522 <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 36ba: e80b96e3 bnez s7,3546 <_vprintf_core.constprop.0.isra.0+0x4ea> - 36be: bd69 j 3558 <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 36c0: 41eb8bbb subw s7,s7,t5 - 36c4: 8d52 mv s10,s4 - 36c6: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 36c8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36cc: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 36d0: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36d2: f31c85e3 beq s9,a7,35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 36d6: cd09 beqz a0,36f0 <_vprintf_core.constprop.0.isra.0+0x694> - 36d8: 000e0c63 beqz t3,36f0 <_vprintf_core.constprop.0.isra.0+0x694> - 36dc: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 36e0: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36e4: f0ac8ce3 beq s9,a0,35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 36e8: 05800613 li a2,88 - 36ec: 12cc8463 beq s9,a2,3814 <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36f0: 00bb85bb addw a1,s7,a1 - 36f4: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 36f8: 4c81 li s9,0 - 36fa: bd11 j 350e <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36fc: 07000693 li a3,112 - 3700: 8d52 mv s10,s4 - 3702: 4b01 li s6,0 - 3704: 08dc8d63 beq s9,a3,379e <_vprintf_core.constprop.0.isra.0+0x742> - 3708: 5c7d li s8,-1 - char *prefix_str = NULL; - 370a: 4c81 li s9,0 - 370c: b509 j 350e <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 370e: 02d00793 li a5,45 - val = (uint64)(-sval); - 3712: 40d00e33 neg t3,a3 - 3716: 4585 li a1,1 - 3718: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 371a: 00002f97 auipc t6,0x2 - 371e: 9e6f8f93 addi t6,t6,-1562 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - sign_char = '-'; - 3722: e03e sd a5,0(sp) - 3724: bb51 j 34b8 <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 3726: 00002c97 auipc s9,0x2 - 372a: a02c8c93 addi s9,s9,-1534 # 5128 <_GLOBAL__sub_I__ZSt3cin+0x138> - 372e: bed1 j 3302 <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3730: 000c3683 ld a3,0(s8) - 3734: 008c0713 addi a4,s8,8 - 3738: e43a sd a4,8(sp) - 373a: 8dbe mv s11,a5 - 373c: 8e36 mv t3,a3 - if (is_signed) - 373e: bdad j 35b8 <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 3740: 06900693 li a3,105 - 3744: fedc86e3 beq s9,a3,3730 <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 3748: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 374c: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3750: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3752: 06dc9063 bne s9,a3,37b2 <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3756: 000c3e03 ld t3,0(s8) - 375a: 8dbe mv s11,a5 - 375c: 4581 li a1,0 - 375e: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3760: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3762: 00002f97 auipc t6,0x2 - 3766: 99ef8f93 addi t6,t6,-1634 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 376a: b3a9 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 376c: c809 beqz s0,377e <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 376e: 02000593 li a1,32 - 3772: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3774: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3776: a73fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 377a: ff441ae3 bne s0,s4,376e <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 377e: 85e6 mv a1,s9 - 3780: 8526 mv a0,s1 - 3782: a67fd0ef jal 11e8 <_out_char> - const char *s = va_arg(ap, char *); - 3786: 0c21 addi s8,s8,8 - 3788: ba09 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 378a: 000c3683 ld a3,0(s8) - 378e: 008c0793 addi a5,s8,8 - 3792: e43e sd a5,8(sp) - 3794: 8e36 mv t3,a3 - if (is_signed) - 3796: b50d j 35b8 <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3798: 8d52 mv s10,s4 - 379a: 4b01 li s6,0 - 379c: b585 j 35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 379e: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37a0: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 37a2: 00002c97 auipc s9,0x2 - 37a6: 976c8c93 addi s9,s9,-1674 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x128> - 37aa: bda9 j 3604 <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37ac: 8d52 mv s10,s4 - 37ae: 4b01 li s6,0 - 37b0: b735 j 36dc <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37b2: 07000693 li a3,112 - 37b6: 04dc8263 beq s9,a3,37fa <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37ba: 000c3e03 ld t3,0(s8) - 37be: 8dbe mv s11,a5 - 37c0: 4581 li a1,0 - 37c2: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37c4: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37c6: 00002f97 auipc t6,0x2 - 37ca: 93af8f93 addi t6,t6,-1734 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 37ce: b1dd j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37d0: 000c3e03 ld t3,0(s8) - 37d4: 4581 li a1,0 - 37d6: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37d8: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37da: 00002f97 auipc t6,0x2 - 37de: 926f8f93 addi t6,t6,-1754 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 37e2: b9c9 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 37e4: 8dbe mv s11,a5 - 37e6: b911 j 33fa <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 37e8: 577d li a4,-1 - 37ea: 4401 li s0,0 - 37ec: d6ec19e3 bne s8,a4,355e <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 37f0: 6c22 ld s8,8(sp) - 37f2: b065 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37f4: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37f8: b549 j 367a <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37fa: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 37fc: 000c3e03 ld t3,0(s8) - 3800: 4581 li a1,0 - 3802: 07000c93 li s9,112 - 3806: e002 sd zero,0(sp) - 3808: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 380a: 00002f97 auipc t6,0x2 - 380e: 8f6f8f93 addi t6,t6,-1802 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 3812: b14d j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 3814: 00002c97 auipc s9,0x2 - 3818: 90cc8c93 addi s9,s9,-1780 # 5120 <_GLOBAL__sub_I__ZSt3cin+0x130> - 381c: b3e5 j 3604 <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 381e: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3822: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 3826: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3828: 8dbe mv s11,a5 - 382a: bd81 j 367a <_vprintf_core.constprop.0.isra.0+0x61e> - 382c: 8d52 mv s10,s4 - 382e: 4b01 li s6,0 - 3830: 4b81 li s7,0 - 3832: bd59 j 36c8 <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3834: 07000693 li a3,112 - 3838: fcdc82e3 beq s9,a3,37fc <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 383c: 01ce8c63 beq t4,t3,3854 <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3840: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3844: 4581 li a1,0 - 3846: e002 sd zero,0(sp) - 3848: 4329 li t1,10 - 384a: 00002f97 auipc t6,0x2 - 384e: 8b6f8f93 addi t6,t6,-1866 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 3852: b18d j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3854: 000c3e03 ld t3,0(s8) - if (is_signed) - 3858: b7f5 j 3844 <_vprintf_core.constprop.0.isra.0+0x7e8> - -000000000000385a : -{ - 385a: 7139 addi sp,sp,-64 - 385c: f822 sd s0,48(sp) - 385e: f426 sd s1,40(sp) - 3860: 842e mv s0,a1 - 3862: 84aa mv s1,a0 - 3864: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 3866: 850a mv a0,sp - 3868: 8636 mv a2,a3 -{ - 386a: fc06 sd ra,56(sp) - ctx.buf = str; - 386c: e026 sd s1,0(sp) - ctx.limit = size; - 386e: e422 sd s0,8(sp) - ctx.written = 0; - 3870: e802 sd zero,16(sp) - ctx.stream = NULL; - 3872: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 3874: fe8ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3878: 6542 ld a0,16(sp) - if (size > 0) - 387a: c411 beqz s0,3886 - if (ctx.written < size) - 387c: 00857b63 bgeu a0,s0,3892 - str[ctx.written] = '\0'; - 3880: 94aa add s1,s1,a0 - 3882: 00048023 sb zero,0(s1) -} - 3886: 70e2 ld ra,56(sp) - 3888: 7442 ld s0,48(sp) - 388a: 74a2 ld s1,40(sp) - 388c: 2501 sext.w a0,a0 - 388e: 6121 addi sp,sp,64 - 3890: 8082 ret - str[size - 1] = '\0'; - 3892: 94a2 add s1,s1,s0 - 3894: fe048fa3 sb zero,-1(s1) -} - 3898: 70e2 ld ra,56(sp) - 389a: 7442 ld s0,48(sp) - 389c: 74a2 ld s1,40(sp) - 389e: 2501 sext.w a0,a0 - 38a0: 6121 addi sp,sp,64 - 38a2: 8082 ret - -00000000000038a4 : -{ - 38a4: 7119 addi sp,sp,-128 - 38a6: e0a2 sd s0,64(sp) - 38a8: fc26 sd s1,56(sp) - 38aa: 842e mv s0,a1 - 38ac: 84aa mv s1,a0 - 38ae: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 38b0: 0808 addi a0,sp,16 - va_start(ap, format); - 38b2: 08b0 addi a2,sp,88 -{ - 38b4: e486 sd ra,72(sp) - 38b6: ecb6 sd a3,88(sp) - 38b8: f0ba sd a4,96(sp) - 38ba: f4be sd a5,104(sp) - 38bc: f8c2 sd a6,112(sp) - 38be: fcc6 sd a7,120(sp) - va_start(ap, format); - 38c0: e432 sd a2,8(sp) - ctx.buf = str; - 38c2: e826 sd s1,16(sp) - ctx.limit = size; - 38c4: ec22 sd s0,24(sp) - ctx.written = 0; - 38c6: f002 sd zero,32(sp) - ctx.stream = NULL; - 38c8: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 38ca: f92ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 38ce: 7502 ld a0,32(sp) - if (size > 0) - 38d0: c411 beqz s0,38dc - if (ctx.written < size) - 38d2: 00857b63 bgeu a0,s0,38e8 - str[ctx.written] = '\0'; - 38d6: 94aa add s1,s1,a0 - 38d8: 00048023 sb zero,0(s1) -} - 38dc: 60a6 ld ra,72(sp) - 38de: 6406 ld s0,64(sp) - 38e0: 74e2 ld s1,56(sp) - 38e2: 2501 sext.w a0,a0 - 38e4: 6109 addi sp,sp,128 - 38e6: 8082 ret - str[size - 1] = '\0'; - 38e8: 94a2 add s1,s1,s0 - 38ea: fe048fa3 sb zero,-1(s1) -} - 38ee: 60a6 ld ra,72(sp) - 38f0: 6406 ld s0,64(sp) - 38f2: 74e2 ld s1,56(sp) - 38f4: 2501 sext.w a0,a0 - 38f6: 6109 addi sp,sp,128 - 38f8: 8082 ret - -00000000000038fa : -{ - 38fa: 7119 addi sp,sp,-128 - va_start(ap, format); - 38fc: 04810313 addi t1,sp,72 -{ - 3900: e4ae sd a1,72(sp) - 3902: e8b2 sd a2,80(sp) - 3904: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 3906: 85aa mv a1,a0 - ctx.stream = stdout; - 3908: 00004797 auipc a5,0x4 - 390c: de87b783 ld a5,-536(a5) # 76f0 - _vprintf_core(&ctx, format, ap); - 3910: 0808 addi a0,sp,16 - 3912: 861a mv a2,t1 -{ - 3914: fc06 sd ra,56(sp) - 3916: ecb6 sd a3,88(sp) - 3918: f0ba sd a4,96(sp) - 391a: f8c2 sd a6,112(sp) - 391c: fcc6 sd a7,120(sp) - va_start(ap, format); - 391e: e41a sd t1,8(sp) - ctx.buf = NULL; - 3920: e802 sd zero,16(sp) - ctx.limit = 0; - 3922: ec02 sd zero,24(sp) - ctx.written = 0; - 3924: f002 sd zero,32(sp) - ctx.stream = stdout; - 3926: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 3928: f34ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> -} - 392c: 70e2 ld ra,56(sp) - 392e: 5502 lw a0,32(sp) - 3930: 6109 addi sp,sp,128 - 3932: 8082 ret - -0000000000003934 : -{ - 3934: 7159 addi sp,sp,-112 - va_start(ap, format); - 3936: 04010e13 addi t3,sp,64 -{ - 393a: 8eaa mv t4,a0 - ctx.fd = -1; - 393c: 537d li t1,-1 -{ - 393e: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3940: 0808 addi a0,sp,16 - 3942: 8672 mv a2,t3 -{ - 3944: fc06 sd ra,56(sp) - 3946: e4b6 sd a3,72(sp) - 3948: e8ba sd a4,80(sp) - 394a: ecbe sd a5,88(sp) - 394c: f0c2 sd a6,96(sp) - 394e: f4c6 sd a7,104(sp) - va_start(ap, format); - 3950: e472 sd t3,8(sp) - ctx.buf = str; - 3952: e876 sd t4,16(sp) - ctx.fd = -1; - 3954: cc1a sw t1,24(sp) - ctx.pos = 0; - 3956: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3958: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 395a: 81efd0ef jal 978 <_vscanf_core.constprop.0> -} - 395e: 70e2 ld ra,56(sp) - 3960: 6165 addi sp,sp,112 - 3962: 8082 ret - -0000000000003964 : -{ - 3964: 7119 addi sp,sp,-128 - va_start(ap, format); - 3966: 04810313 addi t1,sp,72 -{ - 396a: e4ae sd a1,72(sp) - 396c: e8b2 sd a2,80(sp) - 396e: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3970: 85aa mv a1,a0 - ctx.ungotten = -1; - 3972: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 3974: 0808 addi a0,sp,16 - 3976: 861a mv a2,t1 -{ - 3978: fc06 sd ra,56(sp) - 397a: ecb6 sd a3,88(sp) - 397c: f0ba sd a4,96(sp) - 397e: f8c2 sd a6,112(sp) - 3980: fcc6 sd a7,120(sp) - va_start(ap, format); - 3982: e41a sd t1,8(sp) - ctx.buf = NULL; - 3984: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 3986: cc02 sw zero,24(sp) - ctx.pos = 0; - 3988: f002 sd zero,32(sp) - ctx.ungotten = -1; - 398a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 398c: fedfc0ef jal 978 <_vscanf_core.constprop.0> -} - 3990: 70e2 ld ra,56(sp) - 3992: 6109 addi sp,sp,128 - 3994: 8082 ret - -0000000000003996 : -{ - 3996: 1101 addi sp,sp,-32 - 3998: e426 sd s1,8(sp) - 399a: 84ae mv s1,a1 - 399c: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 399e: 00001597 auipc a1,0x1 - 39a2: 7a258593 addi a1,a1,1954 # 5140 <_GLOBAL__sub_I__ZSt3cin+0x150> -{ - 39a6: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 39a8: 8526 mv a0,s1 -{ - 39aa: e822 sd s0,16(sp) - 39ac: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 39ae: 298010ef jal 4c46 - 39b2: 842a mv s0,a0 - 39b4: c919 beqz a0,39ca - else if (strcmp(mode, "w") == 0) - 39b6: 00001597 auipc a1,0x1 - 39ba: 79258593 addi a1,a1,1938 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x158> - 39be: 8526 mv a0,s1 - 39c0: 286010ef jal 4c46 - flags = O_WRONLY | O_CREAT | O_TRUNC; - 39c4: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 39c8: ed39 bnez a0,3a26 - int64 fd = open(filename, flags); - 39ca: 85a2 mv a1,s0 - 39cc: 854a mv a0,s2 - 39ce: f42fc0ef jal 110 - 39d2: 84aa mv s1,a0 - if (fd < 0) - 39d4: 06054c63 bltz a0,3a4c - FILE *f = (FILE *)malloc(sizeof(FILE)); - 39d8: 42000513 li a0,1056 - 39dc: 2f3000ef jal 44ce - 39e0: 892a mv s2,a0 - if (!f) - 39e2: c53d beqz a0,3a50 - memset(f, 0, sizeof(FILE)); - 39e4: 42000613 li a2,1056 - 39e8: 4581 li a1,0 - 39ea: 0ee010ef jal 4ad8 - if (fd == 1) - 39ee: 4785 li a5,1 - f->fd = (int)fd; - 39f0: 00992023 sw s1,0(s2) - f->flags = flags; - 39f4: 00892223 sw s0,4(s2) - if (fd == 1) - 39f8: 00f48e63 beq s1,a5,3a14 - else if (fd == 2) - 39fc: 4789 li a5,2 - 39fe: 00f48b63 beq s1,a5,3a14 - f->buf_mode = 0; - 3a02: 40092e23 sw zero,1052(s2) -} - 3a06: 60e2 ld ra,24(sp) - 3a08: 6442 ld s0,16(sp) - 3a0a: 64a2 ld s1,8(sp) - 3a0c: 854a mv a0,s2 - 3a0e: 6902 ld s2,0(sp) - 3a10: 6105 addi sp,sp,32 - 3a12: 8082 ret - 3a14: 60e2 ld ra,24(sp) - 3a16: 6442 ld s0,16(sp) - f->buf_mode = 2; - 3a18: 40992e23 sw s1,1052(s2) -} - 3a1c: 854a mv a0,s2 - 3a1e: 64a2 ld s1,8(sp) - 3a20: 6902 ld s2,0(sp) - 3a22: 6105 addi sp,sp,32 - 3a24: 8082 ret - else if (strcmp(mode, "a") == 0) - 3a26: 00001597 auipc a1,0x1 - 3a2a: 72a58593 addi a1,a1,1834 # 5150 <_GLOBAL__sub_I__ZSt3cin+0x160> - 3a2e: 8526 mv a0,s1 - 3a30: 216010ef jal 4c46 - flags = O_WRONLY | O_CREAT | O_APPEND; - 3a34: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 3a38: d949 beqz a0,39ca - else if (strcmp(mode, "r+") == 0) - 3a3a: 00001597 auipc a1,0x1 - 3a3e: 71e58593 addi a1,a1,1822 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x168> - 3a42: 8526 mv a0,s1 - 3a44: 202010ef jal 4c46 - flags = O_RDWR; - 3a48: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 3a4a: d141 beqz a0,39ca - return NULL; - 3a4c: 4901 li s2,0 - 3a4e: bf65 j 3a06 - close(fd); - 3a50: 8526 mv a0,s1 - 3a52: ea6fc0ef jal f8 - return NULL; - 3a56: 4901 li s2,0 - 3a58: b77d j 3a06 - -0000000000003a5a : - if (!stream) - 3a5a: cd29 beqz a0,3ab4 - if (stream->buf_write_pos > 0) - 3a5c: 41052603 lw a2,1040(a0) -{ - 3a60: 1141 addi sp,sp,-16 - 3a62: e022 sd s0,0(sp) - 3a64: e406 sd ra,8(sp) - 3a66: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a68: 02c04a63 bgtz a2,3a9c - if (stream != stdin && stream != stdout && stream != stderr) - 3a6c: 00004797 auipc a5,0x4 - 3a70: c8478793 addi a5,a5,-892 # 76f0 - 3a74: 6798 ld a4,8(a5) - 3a76: 00870e63 beq a4,s0,3a92 - 3a7a: 6398 ld a4,0(a5) - 3a7c: 00870b63 beq a4,s0,3a92 - 3a80: 6b9c ld a5,16(a5) - 3a82: 00878863 beq a5,s0,3a92 - close(stream->fd); - 3a86: 4008 lw a0,0(s0) - 3a88: e70fc0ef jal f8 - free(stream); - 3a8c: 8522 mv a0,s0 - 3a8e: 1cb000ef jal 4458 -} - 3a92: 60a2 ld ra,8(sp) - 3a94: 6402 ld s0,0(sp) - return 0; - 3a96: 4501 li a0,0 -} - 3a98: 0141 addi sp,sp,16 - 3a9a: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a9c: 4108 lw a0,0(a0) - 3a9e: 01040593 addi a1,s0,16 - 3aa2: e4efc0ef jal f0 - if (ret < stream->buf_write_pos) - 3aa6: 41042783 lw a5,1040(s0) - 3aaa: 00f54763 blt a0,a5,3ab8 - stream->buf_write_pos = 0; - 3aae: 40042823 sw zero,1040(s0) - 3ab2: bf6d j 3a6c - return -1; - 3ab4: 557d li a0,-1 -} - 3ab6: 8082 ret - stream->error = 1; - 3ab8: 4785 li a5,1 - 3aba: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3abc: 40042823 sw zero,1040(s0) - return EOF; - 3ac0: b775 j 3a6c - -0000000000003ac2 : - if (!stream) - 3ac2: c121 beqz a0,3b02 - if (stream->buf_write_pos > 0) - 3ac4: 41052603 lw a2,1040(a0) -{ - 3ac8: 1141 addi sp,sp,-16 - 3aca: e022 sd s0,0(sp) - 3acc: e406 sd ra,8(sp) - 3ace: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3ad0: 00c04763 bgtz a2,3ade - return 0; - 3ad4: 4501 li a0,0 -} - 3ad6: 60a2 ld ra,8(sp) - 3ad8: 6402 ld s0,0(sp) - 3ada: 0141 addi sp,sp,16 - 3adc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3ade: 4108 lw a0,0(a0) - 3ae0: 01040593 addi a1,s0,16 - 3ae4: e0cfc0ef jal f0 - if (ret < stream->buf_write_pos) - 3ae8: 41042783 lw a5,1040(s0) - 3aec: 00f54563 blt a0,a5,3af6 - stream->buf_write_pos = 0; - 3af0: 40042823 sw zero,1040(s0) - 3af4: b7c5 j 3ad4 - stream->error = 1; - 3af6: 4785 li a5,1 - 3af8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3afa: 40042823 sw zero,1040(s0) - return EOF; - 3afe: 557d li a0,-1 - 3b00: bfd9 j 3ad6 - 3b02: 557d li a0,-1 -} - 3b04: 8082 ret - -0000000000003b06 : -{ - 3b06: 7159 addi sp,sp,-112 - 3b08: fc06 sd ra,56(sp) - 3b0a: e0b2 sd a2,64(sp) - 3b0c: e4b6 sd a3,72(sp) - 3b0e: e8ba sd a4,80(sp) - 3b10: ecbe sd a5,88(sp) - 3b12: f0c2 sd a6,96(sp) - 3b14: f4c6 sd a7,104(sp) - if (!stream) - 3b16: cd19 beqz a0,3b34 - va_start(ap, format); - 3b18: 832a mv t1,a0 - 3b1a: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 3b1c: 0808 addi a0,sp,16 - va_start(ap, format); - 3b1e: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b20: e802 sd zero,16(sp) - ctx.limit = 0; - 3b22: ec02 sd zero,24(sp) - ctx.written = 0; - 3b24: f002 sd zero,32(sp) - ctx.stream = stream; - 3b26: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 3b28: d34ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 3b2c: 5502 lw a0,32(sp) -} - 3b2e: 70e2 ld ra,56(sp) - 3b30: 6165 addi sp,sp,112 - 3b32: 8082 ret - return -1; - 3b34: 557d li a0,-1 - 3b36: bfe5 j 3b2e - -0000000000003b38 : -{ - 3b38: 7159 addi sp,sp,-112 - 3b3a: fc06 sd ra,56(sp) - 3b3c: e0b2 sd a2,64(sp) - 3b3e: e4b6 sd a3,72(sp) - 3b40: e8ba sd a4,80(sp) - 3b42: ecbe sd a5,88(sp) - 3b44: f0c2 sd a6,96(sp) - 3b46: f4c6 sd a7,104(sp) - if (!stream) - 3b48: cd19 beqz a0,3b66 - ctx.fd = stream->fd; - 3b4a: 411c lw a5,0(a0) - va_start(ap, format); - 3b4c: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 3b4e: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 3b50: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 3b52: 57fd li a5,-1 - va_start(ap, format); - 3b54: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b56: e802 sd zero,16(sp) - ctx.pos = 0; - 3b58: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3b5a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3b5c: e1dfc0ef jal 978 <_vscanf_core.constprop.0> -} - 3b60: 70e2 ld ra,56(sp) - 3b62: 6165 addi sp,sp,112 - 3b64: 8082 ret - return -1; - 3b66: 557d li a0,-1 - 3b68: bfe5 j 3b60 - -0000000000003b6a : - if (!stream) - 3b6a: c1e1 beqz a1,3c2a -{ - 3b6c: 7179 addi sp,sp,-48 - 3b6e: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 3b70: 41c5a903 lw s2,1052(a1) -{ - 3b74: f022 sd s0,32(sp) - 3b76: ec26 sd s1,24(sp) - 3b78: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 3b7a: 4789 li a5,2 - 3b7c: 842e mv s0,a1 - 3b7e: 84aa mv s1,a0 - char ch = (char)c; - 3b80: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 3b84: 02f90963 beq s2,a5,3bb6 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b88: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 3b8c: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b90: 0017861b addiw a2,a5,1 - 3b94: 40c5a823 sw a2,1040(a1) - 3b98: 97ae add a5,a5,a1 - 3b9a: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3b9e: 06c6c463 blt a3,a2,3c06 - else if (stream->buf_mode == 1 && c == '\n') - 3ba2: 4785 li a5,1 - 3ba4: 02f90e63 beq s2,a5,3be0 - return c; - 3ba8: 8526 mv a0,s1 -} - 3baa: 70a2 ld ra,40(sp) - 3bac: 7402 ld s0,32(sp) - 3bae: 64e2 ld s1,24(sp) - 3bb0: 6942 ld s2,16(sp) - 3bb2: 6145 addi sp,sp,48 - 3bb4: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3bb6: 4188 lw a0,0(a1) - 3bb8: 4605 li a2,1 - 3bba: 00f10593 addi a1,sp,15 - char ch = (char)c; - 3bbe: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3bc2: d2efc0ef jal f0 - 3bc6: 872a mv a4,a0 - 3bc8: 4785 li a5,1 - return c; - 3bca: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 3bcc: fcf70fe3 beq a4,a5,3baa -} - 3bd0: 70a2 ld ra,40(sp) - stream->error = 1; - 3bd2: c41c sw a5,8(s0) -} - 3bd4: 7402 ld s0,32(sp) - 3bd6: 64e2 ld s1,24(sp) - 3bd8: 6942 ld s2,16(sp) - return EOF; - 3bda: 557d li a0,-1 -} - 3bdc: 6145 addi sp,sp,48 - 3bde: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3be0: 47a9 li a5,10 - 3be2: fcf513e3 bne a0,a5,3ba8 - if (stream->buf_write_pos > 0) - 3be6: fcc051e3 blez a2,3ba8 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3bea: 4188 lw a0,0(a1) - 3bec: 05c1 addi a1,a1,16 - 3bee: d02fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3bf2: 41042783 lw a5,1040(s0) - 3bf6: 02f55063 bge a0,a5,3c16 - stream->error = 1; - 3bfa: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 3bfe: 40042823 sw zero,1040(s0) - return c; - 3c02: 8526 mv a0,s1 - 3c04: b75d j 3baa - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c06: 4188 lw a0,0(a1) - 3c08: 05c1 addi a1,a1,16 - 3c0a: ce6fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3c0e: 41042783 lw a5,1040(s0) - 3c12: 00f54663 blt a0,a5,3c1e - stream->buf_write_pos = 0; - 3c16: 40042823 sw zero,1040(s0) - return c; - 3c1a: 8526 mv a0,s1 - 3c1c: b779 j 3baa - stream->error = 1; - 3c1e: 4785 li a5,1 - 3c20: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3c22: 40042823 sw zero,1040(s0) - return c; - 3c26: 8526 mv a0,s1 - 3c28: b749 j 3baa - return EOF; - 3c2a: 557d li a0,-1 -} - 3c2c: 8082 ret - -0000000000003c2e : - if (!stream) - 3c2e: c1ed beqz a1,3d10 -{ - 3c30: 711d addi sp,sp,-96 - 3c32: e4a6 sd s1,72(sp) - 3c34: ec86 sd ra,88(sp) - while (*s) - 3c36: 00054703 lbu a4,0(a0) - 3c3a: 84aa mv s1,a0 - 3c3c: cf25 beqz a4,3cb4 - 3c3e: e8a2 sd s0,80(sp) - 3c40: e0ca sd s2,64(sp) - 3c42: fc4e sd s3,56(sp) - 3c44: f852 sd s4,48(sp) - 3c46: f456 sd s5,40(sp) - 3c48: f05a sd s6,32(sp) - 3c4a: ec5e sd s7,24(sp) - 3c4c: 842e mv s0,a1 - if (stream->buf_mode == 2) - 3c4e: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 3c50: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 3c54: 4985 li s3,1 - 3c56: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c58: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 3c5c: 00f10b93 addi s7,sp,15 - 3c60: a031 j 3c6c - else if (stream->buf_mode == 1 && c == '\n') - 3c62: 09368563 beq a3,s3,3cec - while (*s) - 3c66: 0004c703 lbu a4,0(s1) - 3c6a: cf15 beqz a4,3ca6 - if (stream->buf_mode == 2) - 3c6c: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 3c70: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 3c72: 05268663 beq a3,s2,3cbe - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c76: 41042783 lw a5,1040(s0) - 3c7a: 0017861b addiw a2,a5,1 - 3c7e: 40c42823 sw a2,1040(s0) - 3c82: 97a2 add a5,a5,s0 - 3c84: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3c88: fccb5de3 bge s6,a2,3c62 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c8c: 4008 lw a0,0(s0) - 3c8e: 85d6 mv a1,s5 - 3c90: c60fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3c94: 41042783 lw a5,1040(s0) - 3c98: 06f54763 blt a0,a5,3d06 - stream->buf_write_pos = 0; - 3c9c: 40042823 sw zero,1040(s0) - while (*s) - 3ca0: 0004c703 lbu a4,0(s1) - 3ca4: f761 bnez a4,3c6c - 3ca6: 6446 ld s0,80(sp) - 3ca8: 6906 ld s2,64(sp) - 3caa: 79e2 ld s3,56(sp) - 3cac: 7a42 ld s4,48(sp) - 3cae: 7aa2 ld s5,40(sp) - 3cb0: 7b02 ld s6,32(sp) - 3cb2: 6be2 ld s7,24(sp) -} - 3cb4: 60e6 ld ra,88(sp) - 3cb6: 64a6 ld s1,72(sp) - return 0; - 3cb8: 4501 li a0,0 -} - 3cba: 6125 addi sp,sp,96 - 3cbc: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3cbe: 4008 lw a0,0(s0) - 3cc0: 4605 li a2,1 - 3cc2: 85de mv a1,s7 - char ch = (char)c; - 3cc4: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3cc8: c28fc0ef jal f0 - 3ccc: f9350de3 beq a0,s3,3c66 - stream->error = 1; - 3cd0: 01342423 sw s3,8(s0) -} - 3cd4: 60e6 ld ra,88(sp) - 3cd6: 6446 ld s0,80(sp) - 3cd8: 6906 ld s2,64(sp) - 3cda: 79e2 ld s3,56(sp) - 3cdc: 7a42 ld s4,48(sp) - 3cde: 7aa2 ld s5,40(sp) - 3ce0: 7b02 ld s6,32(sp) - 3ce2: 6be2 ld s7,24(sp) - 3ce4: 64a6 ld s1,72(sp) - return -1; - 3ce6: 557d li a0,-1 -} - 3ce8: 6125 addi sp,sp,96 - 3cea: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3cec: f7471de3 bne a4,s4,3c66 - if (stream->buf_write_pos > 0) - 3cf0: f6c05be3 blez a2,3c66 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cf4: 4008 lw a0,0(s0) - 3cf6: 01040593 addi a1,s0,16 - 3cfa: bf6fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3cfe: 41042783 lw a5,1040(s0) - 3d02: f8f55de3 bge a0,a5,3c9c - stream->error = 1; - 3d06: 4785 li a5,1 - 3d08: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d0a: 40042823 sw zero,1040(s0) - return EOF; - 3d0e: bfa1 j 3c66 - return -1; - 3d10: 557d li a0,-1 -} - 3d12: 8082 ret - -0000000000003d14 : - if (!stream) - 3d14: c949 beqz a0,3da6 - if (stream->buf_write_pos > 0) - 3d16: 41052603 lw a2,1040(a0) -{ - 3d1a: 1141 addi sp,sp,-16 - 3d1c: e022 sd s0,0(sp) - 3d1e: e406 sd ra,8(sp) - 3d20: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3d22: 04c04863 bgtz a2,3d72 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3d26: 41442783 lw a5,1044(s0) - 3d2a: 41842703 lw a4,1048(s0) - 3d2e: 00e7dd63 bge a5,a4,3d48 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d32: 0017871b addiw a4,a5,1 - 3d36: 40e42a23 sw a4,1044(s0) - 3d3a: 943e add s0,s0,a5 - 3d3c: 01044503 lbu a0,16(s0) -} - 3d40: 60a2 ld ra,8(sp) - 3d42: 6402 ld s0,0(sp) - 3d44: 0141 addi sp,sp,16 - 3d46: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3d48: 4008 lw a0,0(s0) - 3d4a: 40000613 li a2,1024 - 3d4e: 01040593 addi a1,s0,16 - 3d52: b96fc0ef jal e8 - 3d56: 87aa mv a5,a0 - if (ret <= 0) - 3d58: 02a05e63 blez a0,3d94 - stream->buf_read_cnt = (int)ret; - 3d5c: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d60: 4785 li a5,1 - 3d62: 01044503 lbu a0,16(s0) -} - 3d66: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d68: 40f42a23 sw a5,1044(s0) -} - 3d6c: 6402 ld s0,0(sp) - 3d6e: 0141 addi sp,sp,16 - 3d70: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d72: 4108 lw a0,0(a0) - 3d74: 01040593 addi a1,s0,16 - 3d78: b78fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3d7c: 41042783 lw a5,1040(s0) - 3d80: 00f54563 blt a0,a5,3d8a - stream->buf_write_pos = 0; - 3d84: 40042823 sw zero,1040(s0) - 3d88: bf79 j 3d26 - stream->error = 1; - 3d8a: 4785 li a5,1 - 3d8c: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d8e: 40042823 sw zero,1040(s0) - return EOF; - 3d92: bf51 j 3d26 - if (ret == 0) - 3d94: e509 bnez a0,3d9e - stream->eof = 1; - 3d96: 4785 li a5,1 - 3d98: c45c sw a5,12(s0) - return EOF; - 3d9a: 557d li a0,-1 - 3d9c: b755 j 3d40 - stream->error = 1; - 3d9e: 4785 li a5,1 - 3da0: c41c sw a5,8(s0) - return EOF; - 3da2: 557d li a0,-1 - 3da4: bf71 j 3d40 - 3da6: 557d li a0,-1 -} - 3da8: 8082 ret - -0000000000003daa : - if (!stream || n <= 0) - 3daa: ce5d beqz a2,3e68 - 3dac: 0ab05e63 blez a1,3e68 -{ - 3db0: 715d addi sp,sp,-80 - 3db2: e0a2 sd s0,64(sp) - 3db4: fc26 sd s1,56(sp) - 3db6: f84a sd s2,48(sp) - 3db8: f44e sd s3,40(sp) - 3dba: f052 sd s4,32(sp) - 3dbc: ec56 sd s5,24(sp) - 3dbe: e85a sd s6,16(sp) - 3dc0: e45e sd s7,8(sp) - 3dc2: e486 sd ra,72(sp) - 3dc4: 8432 mv s0,a2 - 3dc6: 8aaa mv s5,a0 - 3dc8: 892a mv s2,a0 - 3dca: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 3dce: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3dd0: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3dd4: 4b05 li s6,1 - if (c == '\n') - 3dd6: 4a29 li s4,10 - while (i < n - 1) - 3dd8: 05748163 beq s1,s7,3e1a - if (stream->buf_write_pos > 0) - 3ddc: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3de0: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 3de2: 06c04963 bgtz a2,3e54 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3de6: 41442783 lw a5,1044(s0) - 3dea: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3dee: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3df2: 0017851b addiw a0,a5,1 - 3df6: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3dfa: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3dfc: 02e7de63 bge a5,a4,3e38 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e00: 40a42a23 sw a0,1044(s0) - 3e04: 0106c783 lbu a5,16(a3) - 3e08: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 3e0c: 00f90023 sb a5,0(s2) - 3e10: 2485 addiw s1,s1,1 - if (c == '\n') - 3e12: 0905 addi s2,s2,1 - 3e14: fd4712e3 bne a4,s4,3dd8 - str[i++] = (char)c; - 3e18: 8ba6 mv s7,s1 - str[i] = '\0'; - 3e1a: 9bd6 add s7,s7,s5 - 3e1c: 000b8023 sb zero,0(s7) - return str; - 3e20: 8556 mv a0,s5 -} - 3e22: 60a6 ld ra,72(sp) - 3e24: 6406 ld s0,64(sp) - 3e26: 74e2 ld s1,56(sp) - 3e28: 7942 ld s2,48(sp) - 3e2a: 79a2 ld s3,40(sp) - 3e2c: 7a02 ld s4,32(sp) - 3e2e: 6ae2 ld s5,24(sp) - 3e30: 6b42 ld s6,16(sp) - 3e32: 6ba2 ld s7,8(sp) - 3e34: 6161 addi sp,sp,80 - 3e36: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3e38: 4008 lw a0,0(s0) - 3e3a: aaefc0ef jal e8 - if (ret <= 0) - 3e3e: 02a05c63 blez a0,3e76 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e42: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 3e46: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e4a: 41642a23 sw s6,1044(s0) - 3e4e: 0007871b sext.w a4,a5 - if (c == -1) - 3e52: bf6d j 3e0c - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3e54: 4008 lw a0,0(s0) - 3e56: a9afc0ef jal f0 - if (ret < stream->buf_write_pos) - 3e5a: 41042783 lw a5,1040(s0) - 3e5e: 00f54763 blt a0,a5,3e6c - stream->buf_write_pos = 0; - 3e62: 40042823 sw zero,1040(s0) - 3e66: b741 j 3de6 - return NULL; - 3e68: 4501 li a0,0 -} - 3e6a: 8082 ret - stream->error = 1; - 3e6c: 4785 li a5,1 - 3e6e: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3e70: 40042823 sw zero,1040(s0) - return EOF; - 3e74: bf8d j 3de6 - stream->eof = 1; - 3e76: 4785 li a5,1 - if (ret == 0) - 3e78: e509 bnez a0,3e82 - stream->eof = 1; - 3e7a: c45c sw a5,12(s0) - if (i == 0) - 3e7c: fcd1 bnez s1,3e18 - return NULL; - 3e7e: 4501 li a0,0 - 3e80: b74d j 3e22 - stream->error = 1; - 3e82: c41c sw a5,8(s0) - if (c == -1) - 3e84: bfe5 j 3e7c - -0000000000003e86 : -{ - 3e86: 715d addi sp,sp,-80 - 3e88: e486 sd ra,72(sp) - 3e8a: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 3e8c: 0e068963 beqz a3,3f7e - 3e90: ec56 sd s5,24(sp) - return 0; - 3e92: 4981 li s3,0 - 3e94: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 3e96: c9bd beqz a1,3f0c - 3e98: ca35 beqz a2,3f0c - if (stream->buf_write_pos > 0) - 3e9a: 4106a783 lw a5,1040(a3) - 3e9e: e0a2 sd s0,64(sp) - 3ea0: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 3ea2: 02c589b3 mul s3,a1,a2 - 3ea6: 8436 mv s0,a3 - 3ea8: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 3eaa: 0af04d63 bgtz a5,3f64 - while (bytes_read < total_bytes) - 3eae: 04098d63 beqz s3,3f08 - 3eb2: fc26 sd s1,56(sp) - 3eb4: e85a sd s6,16(sp) - 3eb6: e45e sd s7,8(sp) - 3eb8: f84a sd s2,48(sp) - 3eba: 4481 li s1,0 - if (remaining >= BUFSIZ) - 3ebc: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ec0: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ec4: 41442703 lw a4,1044(s0) - 3ec8: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 3ecc: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ed0: 06f74463 blt a4,a5,3f38 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3ed4: 4008 lw a0,0(s0) - 3ed6: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 3eda: 02cb7f63 bgeu s6,a2,3f18 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3ede: a0afc0ef jal e8 - if (ret <= 0) - 3ee2: 0aa05463 blez a0,3f8a - bytes_read += ret; - 3ee6: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 3ee8: fd34eee3 bltu s1,s3,3ec4 - return bytes_read / size; - 3eec: 0354d9b3 divu s3,s1,s5 - 3ef0: 6406 ld s0,64(sp) -} - 3ef2: 60a6 ld ra,72(sp) - return bytes_read / size; - 3ef4: 74e2 ld s1,56(sp) - 3ef6: 7942 ld s2,48(sp) - 3ef8: 7a02 ld s4,32(sp) - 3efa: 6ae2 ld s5,24(sp) - 3efc: 6b42 ld s6,16(sp) - 3efe: 6ba2 ld s7,8(sp) -} - 3f00: 854e mv a0,s3 - 3f02: 79a2 ld s3,40(sp) - 3f04: 6161 addi sp,sp,80 - 3f06: 8082 ret - 3f08: 6406 ld s0,64(sp) - 3f0a: 7a02 ld s4,32(sp) - 3f0c: 60a6 ld ra,72(sp) - 3f0e: 6ae2 ld s5,24(sp) - 3f10: 854e mv a0,s3 - 3f12: 79a2 ld s3,40(sp) - 3f14: 6161 addi sp,sp,80 - 3f16: 8082 ret - stream->buf_read_pos = 0; - 3f18: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 3f1c: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3f20: 40000613 li a2,1024 - 3f24: 85de mv a1,s7 - 3f26: 9c2fc0ef jal e8 - if (ret <= 0) - 3f2a: 06a05063 blez a0,3f8a - stream->buf_read_cnt = (int)ret; - 3f2e: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 3f32: f934e9e3 bltu s1,s3,3ec4 - 3f36: bf5d j 3eec - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 3f38: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f3c: 00eb85b3 add a1,s7,a4 - 3f40: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 3f44: 01267363 bgeu a2,s2,3f4a - 3f48: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f4a: 864a mv a2,s2 - 3f4c: 3e1000ef jal 4b2c - stream->buf_read_pos += to_copy; - 3f50: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 3f54: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 3f56: 012787bb addw a5,a5,s2 - 3f5a: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 3f5e: f734e3e3 bltu s1,s3,3ec4 - 3f62: b769 j 3eec - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3f64: 4288 lw a0,0(a3) - 3f66: 863e mv a2,a5 - 3f68: 01068593 addi a1,a3,16 - 3f6c: 984fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3f70: 41042783 lw a5,1040(s0) - 3f74: 02f54163 blt a0,a5,3f96 - stream->buf_write_pos = 0; - 3f78: 40042823 sw zero,1040(s0) - 3f7c: bf0d j 3eae -} - 3f7e: 60a6 ld ra,72(sp) - return 0; - 3f80: 4981 li s3,0 -} - 3f82: 854e mv a0,s3 - 3f84: 79a2 ld s3,40(sp) - 3f86: 6161 addi sp,sp,80 - 3f88: 8082 ret - stream->eof = 1; - 3f8a: 4785 li a5,1 - if (ret == 0) - 3f8c: e119 bnez a0,3f92 - stream->eof = 1; - 3f8e: c45c sw a5,12(s0) - 3f90: bfb1 j 3eec - stream->error = 1; - 3f92: c41c sw a5,8(s0) - return bytes_read / size; - 3f94: bfa1 j 3eec - stream->error = 1; - 3f96: 4785 li a5,1 - 3f98: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3f9a: 40042823 sw zero,1040(s0) - return EOF; - 3f9e: bf01 j 3eae - -0000000000003fa0 : -{ - 3fa0: 711d addi sp,sp,-96 - 3fa2: ec86 sd ra,88(sp) - 3fa4: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 3fa6: 10068063 beqz a3,40a6 - 3faa: f456 sd s5,40(sp) - 3fac: 8aaa mv s5,a0 - 3fae: 10050263 beqz a0,40b2 - 3fb2: f05a sd s6,32(sp) - return 0; - 3fb4: 4901 li s2,0 - 3fb6: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 3fb8: c1d9 beqz a1,403e - 3fba: c251 beqz a2,403e - if (stream->buf_mode == 2) - 3fbc: 41c6a703 lw a4,1052(a3) - 3fc0: e8a2 sd s0,80(sp) - 3fc2: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 3fc4: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 3fc8: 8436 mv s0,a3 - 3fca: 0ef70b63 beq a4,a5,40c0 - 3fce: fc4e sd s3,56(sp) - 3fd0: ec5e sd s7,24(sp) - 3fd2: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 3fd4: 4981 li s3,0 - 3fd6: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fda: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 3fde: 12090263 beqz s2,4102 - 3fe2: e4a6 sd s1,72(sp) - 3fe4: f852 sd s4,48(sp) - 3fe6: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fe8: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 3fec: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3ff0: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3ff4: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 3ff8: 00fb8533 add a0,s7,a5 - 3ffc: 8652 mv a2,s4 - if (remaining <= space_left) - 3ffe: 059a6763 bltu s4,s9,404c - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 4002: 8666 mv a2,s9 - 4004: 329000ef jal 4b2c - stream->buf_write_pos += remaining; - 4008: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 400c: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 4010: 019786bb addw a3,a5,s9 - 4014: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 4018: 06e68a63 beq a3,a4,408c - return bytes_written / size; - 401c: 03695933 divu s2,s2,s6 - 4020: 6446 ld s0,80(sp) - 4022: 64a6 ld s1,72(sp) - 4024: 79e2 ld s3,56(sp) - 4026: 7a42 ld s4,48(sp) - 4028: 7aa2 ld s5,40(sp) - 402a: 7b02 ld s6,32(sp) - 402c: 6be2 ld s7,24(sp) - 402e: 6c42 ld s8,16(sp) - 4030: 6ca2 ld s9,8(sp) -} - 4032: 60e6 ld ra,88(sp) - 4034: 854a mv a0,s2 - 4036: 6906 ld s2,64(sp) - 4038: 6125 addi sp,sp,96 - 403a: 8082 ret - 403c: 6446 ld s0,80(sp) - 403e: 60e6 ld ra,88(sp) - 4040: 7aa2 ld s5,40(sp) - 4042: 7b02 ld s6,32(sp) - 4044: 854a mv a0,s2 - 4046: 6906 ld s2,64(sp) - 4048: 6125 addi sp,sp,96 - 404a: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 404c: 2e1000ef jal 4b2c - stream->buf_write_pos += space_left; - 4050: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4054: 85de mv a1,s7 - bytes_written += space_left; - 4056: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 4058: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 405c: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 4060: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4064: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 4066: 00904763 bgtz s1,4074 - while (bytes_written < total_bytes) - 406a: f729efe3 bltu s3,s2,3fe8 - return bytes_written / size; - 406e: 0369d933 divu s2,s3,s6 - 4072: b77d j 4020 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4074: 4008 lw a0,0(s0) - 4076: 87afc0ef jal f0 - if (ret < stream->buf_write_pos) - 407a: 41042783 lw a5,1040(s0) - 407e: 08f54963 blt a0,a5,4110 - stream->buf_write_pos = 0; - 4082: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 4086: f729e1e3 bltu s3,s2,3fe8 - 408a: b7d5 j 406e - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 408c: 4008 lw a0,0(s0) - 408e: 40000613 li a2,1024 - 4092: 85de mv a1,s7 - 4094: 85cfc0ef jal f0 - if (ret < stream->buf_write_pos) - 4098: 41042783 lw a5,1040(s0) - 409c: 08f54163 blt a0,a5,411e - stream->buf_write_pos = 0; - 40a0: 40042823 sw zero,1040(s0) - 40a4: bfa5 j 401c -} - 40a6: 60e6 ld ra,88(sp) - return 0; - 40a8: 4901 li s2,0 -} - 40aa: 854a mv a0,s2 - 40ac: 6906 ld s2,64(sp) - 40ae: 6125 addi sp,sp,96 - 40b0: 8082 ret - 40b2: 60e6 ld ra,88(sp) - return 0; - 40b4: 4901 li s2,0 - 40b6: 7aa2 ld s5,40(sp) -} - 40b8: 854a mv a0,s2 - 40ba: 6906 ld s2,64(sp) - 40bc: 6125 addi sp,sp,96 - 40be: 8082 ret - while (bytes_written < total_bytes) - 40c0: f6090ee3 beqz s2,403c - 40c4: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 40c6: 4481 li s1,0 - 40c8: a021 j 40d0 - bytes_written += ret; - 40ca: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 40cc: 0324f463 bgeu s1,s2,40f4 - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 40d0: 4008 lw a0,0(s0) - 40d2: 40990633 sub a2,s2,s1 - 40d6: 009a85b3 add a1,s5,s1 - 40da: 816fc0ef jal f0 - if (ret <= 0) - 40de: fea046e3 bgtz a0,40ca - stream->error = 1; - 40e2: 4785 li a5,1 - return bytes_written / size; - 40e4: 0364d933 divu s2,s1,s6 - stream->error = 1; - 40e8: c41c sw a5,8(s0) - break; - 40ea: 64a6 ld s1,72(sp) - 40ec: 6446 ld s0,80(sp) - 40ee: 7aa2 ld s5,40(sp) - 40f0: 7b02 ld s6,32(sp) - 40f2: b781 j 4032 - return bytes_written / size; - 40f4: 0364d933 divu s2,s1,s6 - 40f8: 6446 ld s0,80(sp) - 40fa: 64a6 ld s1,72(sp) - 40fc: 7aa2 ld s5,40(sp) - 40fe: 7b02 ld s6,32(sp) - 4100: bf0d j 4032 - 4102: 6446 ld s0,80(sp) - 4104: 79e2 ld s3,56(sp) - 4106: 7aa2 ld s5,40(sp) - 4108: 7b02 ld s6,32(sp) - 410a: 6be2 ld s7,24(sp) - 410c: 6c42 ld s8,16(sp) - 410e: b715 j 4032 - stream->error = 1; - 4110: 4785 li a5,1 - 4112: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4114: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 4118: ed29e8e3 bltu s3,s2,3fe8 - 411c: bf89 j 406e - stream->error = 1; - 411e: 4785 li a5,1 - 4120: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4122: 40042823 sw zero,1040(s0) - return EOF; - 4126: bddd j 401c - -0000000000004128 : - if (!stream) - 4128: c925 beqz a0,4198 -{ - 412a: 1101 addi sp,sp,-32 - 412c: e04a sd s2,0(sp) - 412e: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 4130: 41052603 lw a2,1040(a0) -{ - 4134: e822 sd s0,16(sp) - 4136: e426 sd s1,8(sp) - 4138: ec06 sd ra,24(sp) - 413a: 842a mv s0,a0 - 413c: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 413e: 02c04863 bgtz a2,416e - if (lseek(stream->fd, offset, whence) < 0) - 4142: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 4144: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4148: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 414c: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 4150: 864a mv a2,s2 - 4152: 0004859b sext.w a1,s1 - 4156: 82afc0ef jal 180 - 415a: 87aa mv a5,a0 - return 0; - 415c: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 415e: 0207c463 bltz a5,4186 -} - 4162: 60e2 ld ra,24(sp) - 4164: 6442 ld s0,16(sp) - 4166: 64a2 ld s1,8(sp) - 4168: 6902 ld s2,0(sp) - 416a: 6105 addi sp,sp,32 - 416c: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 416e: 4108 lw a0,0(a0) - 4170: 01040593 addi a1,s0,16 - 4174: f7dfb0ef jal f0 - if (ret < stream->buf_write_pos) - 4178: 41042783 lw a5,1040(s0) - 417c: 00f54963 blt a0,a5,418e - stream->buf_write_pos = 0; - 4180: 40042823 sw zero,1040(s0) - 4184: bf7d j 4142 - stream->error = 1; - 4186: 4785 li a5,1 - 4188: c41c sw a5,8(s0) - return -1; - 418a: 557d li a0,-1 - 418c: bfd9 j 4162 - stream->error = 1; - 418e: 4785 li a5,1 - 4190: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4192: 40042823 sw zero,1040(s0) - return EOF; - 4196: b775 j 4142 - return -1; - 4198: 557d li a0,-1 -} - 419a: 8082 ret - -000000000000419c : - if (!stream) - 419c: c505 beqz a0,41c4 -{ - 419e: 1141 addi sp,sp,-16 - 41a0: e022 sd s0,0(sp) - 41a2: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 41a4: 4108 lw a0,0(a0) - 41a6: 4605 li a2,1 - 41a8: 4581 li a1,0 -{ - 41aa: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 41ac: fd5fb0ef jal 180 - if (ret < 0) - 41b0: 00054663 bltz a0,41bc -} - 41b4: 60a2 ld ra,8(sp) - 41b6: 6402 ld s0,0(sp) - 41b8: 0141 addi sp,sp,16 - 41ba: 8082 ret - stream->error = 1; - 41bc: 4785 li a5,1 - 41be: c41c sw a5,8(s0) - return -1L; - 41c0: 557d li a0,-1 - 41c2: bfcd j 41b4 - 41c4: 557d li a0,-1 -} - 41c6: 8082 ret - -00000000000041c8 : - if (stream) - 41c8: c915 beqz a0,41fc - if (stream->buf_write_pos > 0) - 41ca: 41052603 lw a2,1040(a0) -{ - 41ce: 1141 addi sp,sp,-16 - 41d0: e022 sd s0,0(sp) - 41d2: e406 sd ra,8(sp) - 41d4: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 41d6: 02c04463 bgtz a2,41fe - if (lseek(stream->fd, offset, whence) < 0) - 41da: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 41dc: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 41e0: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 41e4: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 41e8: 4601 li a2,0 - 41ea: 4581 li a1,0 - 41ec: f95fb0ef jal 180 -} - 41f0: 60a2 ld ra,8(sp) - stream->error = 0; - 41f2: 00042423 sw zero,8(s0) -} - 41f6: 6402 ld s0,0(sp) - 41f8: 0141 addi sp,sp,16 - 41fa: 8082 ret - 41fc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 41fe: 4108 lw a0,0(a0) - 4200: 01040593 addi a1,s0,16 - 4204: eedfb0ef jal f0 - if (ret < stream->buf_write_pos) - 4208: 41042783 lw a5,1040(s0) - 420c: 00f54563 blt a0,a5,4216 - stream->buf_write_pos = 0; - 4210: 40042823 sw zero,1040(s0) - 4214: b7d9 j 41da - stream->error = 1; - 4216: 4785 li a5,1 - 4218: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 421a: 40042823 sw zero,1040(s0) - return EOF; - 421e: bf75 j 41da - -0000000000004220 : - return (stream) ? stream->eof : 1; - 4220: c119 beqz a0,4226 - 4222: 4548 lw a0,12(a0) - 4224: 8082 ret - 4226: 4505 li a0,1 -} - 4228: 8082 ret - -000000000000422a : - return (stream) ? stream->error : 1; - 422a: c119 beqz a0,4230 - 422c: 4508 lw a0,8(a0) - 422e: 8082 ret - 4230: 4505 li a0,1 -} - 4232: 8082 ret - -0000000000004234 : - if (stream) - 4234: c509 beqz a0,423e - stream->error = 0; - 4236: 00052423 sw zero,8(a0) - stream->eof = 0; - 423a: 00052623 sw zero,12(a0) -} - 423e: 8082 ret - -0000000000004240 : - if (!stream || c == EOF) - 4240: c19d beqz a1,4266 - 4242: 57fd li a5,-1 - 4244: 02f50163 beq a0,a5,4266 - if (stream->buf_read_pos > 0) - 4248: 4145a783 lw a5,1044(a1) - 424c: 00f05d63 blez a5,4266 - stream->buf_read_pos--; - 4250: fff7871b addiw a4,a5,-1 - 4254: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 4258: 00e587b3 add a5,a1,a4 - 425c: 00a78823 sb a0,16(a5) - stream->eof = 0; - 4260: 0005a623 sw zero,12(a1) - return c; - 4264: 8082 ret - return EOF; - 4266: 557d li a0,-1 - 4268: 8082 ret - -000000000000426a : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 426a: 1141 addi sp,sp,-16 - 426c: e422 sd s0,8(sp) - 426e: 8eaa mv t4,a0 -{ - const char *s = nptr; - 4270: 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'; } - 4272: 02000313 li t1,32 - 4276: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 4278: 0008c783 lbu a5,0(a7) - 427c: 00188813 addi a6,a7,1 - 4280: ff77871b addiw a4,a5,-9 - 4284: 0ff77693 zext.b a3,a4 - 4288: 0007871b sext.w a4,a5 - 428c: 04678363 beq a5,t1,42d2 - 4290: 04de7163 bgeu t3,a3,42d2 - } while (isspace(c)); - - if (c == '-') - 4294: 02d00793 li a5,45 - 4298: 0ef70863 beq a4,a5,4388 - { - neg = 1; - c = *s++; - } - else if (c == '+') - 429c: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 42a0: 4381 li t2,0 - else if (c == '+') - 42a2: 08f70c63 beq a4,a5,433a - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 42a6: ea05 bnez a2,42d6 - 42a8: 03000793 li a5,48 - 42ac: 0ef70463 beq a4,a5,4394 - 42b0: 00ccd8b7 lui a7,0xccd - 42b4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5445> - 42b8: 08b2 slli a7,a7,0xc - 42ba: ccd88893 addi a7,a7,-819 - 42be: 08b2 slli a7,a7,0xc - 42c0: ccd88893 addi a7,a7,-819 - 42c4: 08b6 slli a7,a7,0xd - 42c6: 4415 li s0,5 - 42c8: 99988893 addi a7,a7,-1639 - 42cc: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 42ce: 4629 li a2,10 - 42d0: a829 j 42ea -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 42d2: 88c2 mv a7,a6 - 42d4: b755 j 4278 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 42d6: 47c1 li a5,16 - 42d8: 0cf60d63 beq a2,a5,43b2 - - cutoff = ULLONG_MAX / (unsigned long long)base; - 42dc: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42de: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 42e2: 82b2 mv t0,a2 - 42e4: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42e8: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 42ea: 4301 li t1,0 - 42ec: 4501 li a0,0 - { - if (isdigit(c)) - 42ee: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42f0: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42f2: 5f7d li t5,-1 - if (isdigit(c)) - 42f4: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 42f8: 0007069b sext.w a3,a4 - 42fc: 00fe7e63 bgeu t3,a5,4318 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 4300: f9f6879b addiw a5,a3,-97 - 4304: 04fff063 bgeu t6,a5,4344 - 4308: fbf6869b addiw a3,a3,-65 - 430c: 04dfe163 bltu t6,a3,434e - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 4310: 03700793 li a5,55 - 4314: 40f707bb subw a5,a4,a5 - if (c >= base) - 4318: 02c7db63 bge a5,a2,434e - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 431c: 01e30b63 beq t1,t5,4332 - any = -1; - 4320: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4322: 00a8e863 bltu a7,a0,4332 - 4326: 05150e63 beq a0,a7,4382 - else - { - any = 1; - 432a: 4305 li t1,1 - acc *= base; - 432c: 02550533 mul a0,a0,t0 - acc += c; - 4330: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 4332: 0805 addi a6,a6,1 - 4334: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 4338: bf75 j 42f4 - c = *s++; - 433a: 00084703 lbu a4,0(a6) - 433e: 00288813 addi a6,a7,2 - 4342: b795 j 42a6 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 4344: 05700793 li a5,87 - 4348: 40f707bb subw a5,a4,a5 - 434c: b7f1 j 4318 - } - } - - if (any < 0) - 434e: 57fd li a5,-1 - 4350: 00f30e63 beq t1,a5,436c - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 4354: 00038463 beqz t2,435c - acc = -acc; - 4358: 40a00533 neg a0,a0 - - if (endptr != 0) - 435c: c589 beqz a1,4366 - *endptr = (char *)(any ? s - 1 : nptr); - 435e: 00031f63 bnez t1,437c - 4362: 01d5b023 sd t4,0(a1) - - return acc; -} - 4366: 6422 ld s0,8(sp) - 4368: 0141 addi sp,sp,16 - 436a: 8082 ret - errno = ERANGE; - 436c: 02200793 li a5,34 - 4370: 00003717 auipc a4,0x3 - 4374: 3ef72023 sw a5,992(a4) # 7750 - acc = ULLONG_MAX; - 4378: 557d li a0,-1 - if (endptr != 0) - 437a: d5f5 beqz a1,4366 - *endptr = (char *)(any ? s - 1 : nptr); - 437c: fff80e93 addi t4,a6,-1 - 4380: b7cd j 4362 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4382: faf448e3 blt s0,a5,4332 - 4386: b755 j 432a - c = *s++; - 4388: 00084703 lbu a4,0(a6) - neg = 1; - 438c: 4385 li t2,1 - c = *s++; - 438e: 00288813 addi a6,a7,2 - 4392: bf11 j 42a6 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4394: 00084783 lbu a5,0(a6) - 4398: 05800693 li a3,88 - 439c: 0df7f793 andi a5,a5,223 - 43a0: 02d78b63 beq a5,a3,43d6 - 43a4: 58fd li a7,-1 - 43a6: 441d li s0,7 - 43a8: 0038d893 srli a7,a7,0x3 - 43ac: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 43ae: 4621 li a2,8 - 43b0: bf2d j 42ea - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 43b2: 03000793 li a5,48 - 43b6: 00f70863 beq a4,a5,43c6 - 43ba: 58fd li a7,-1 - 43bc: 443d li s0,15 - 43be: 0048d893 srli a7,a7,0x4 - 43c2: 42c1 li t0,16 - 43c4: b71d j 42ea - 43c6: 00084783 lbu a5,0(a6) - 43ca: 05800693 li a3,88 - 43ce: 0df7f793 andi a5,a5,223 - 43d2: fed794e3 bne a5,a3,43ba - s += 2; - 43d6: 58fd li a7,-1 - c = s[1]; - 43d8: 00184703 lbu a4,1(a6) - s += 2; - 43dc: 443d li s0,15 - 43de: 0809 addi a6,a6,2 - 43e0: 0048d893 srli a7,a7,0x4 - 43e4: 42c1 li t0,16 - base = 16; - 43e6: 4641 li a2,16 - 43e8: b709 j 42ea - -00000000000043ea : - if (__atexit_func_count >= ATEXIT_MAX) - 43ea: 00003717 auipc a4,0x3 - 43ee: 36670713 addi a4,a4,870 # 7750 - 43f2: 435c lw a5,4(a4) - 43f4: 46fd li a3,31 - 43f6: 00f6ca63 blt a3,a5,440a - __atexit_funcs[__atexit_func_count++] = function; - 43fa: 00379693 slli a3,a5,0x3 - 43fe: 96ba add a3,a3,a4 - 4400: 2785 addiw a5,a5,1 - 4402: e688 sd a0,8(a3) - 4404: c35c sw a5,4(a4) - return 0; - 4406: 4501 li a0,0 - 4408: 8082 ret - return -1; - 440a: 557d li a0,-1 -} - 440c: 8082 ret - -000000000000440e : -{ - 440e: 1101 addi sp,sp,-32 - 4410: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 4412: 00003417 auipc s0,0x3 - 4416: 33e40413 addi s0,s0,830 # 7750 - 441a: 405c lw a5,4(s0) -{ - 441c: e426 sd s1,8(sp) - 441e: ec06 sd ra,24(sp) - 4420: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 4422: 00f05d63 blez a5,443c - (__atexit_funcs[--__atexit_func_count])(); - 4426: fff7871b addiw a4,a5,-1 - 442a: 87ba mv a5,a4 - 442c: 070e slli a4,a4,0x3 - 442e: 9722 add a4,a4,s0 - 4430: 6718 ld a4,8(a4) - 4432: c05c sw a5,4(s0) - 4434: 9702 jalr a4 - while (__atexit_func_count > 0) - 4436: 405c lw a5,4(s0) - 4438: fef047e3 bgtz a5,4426 - sys_exit(status); - 443c: 8526 mv a0,s1 - 443e: c8bfb0ef jal c8 - while (1) - 4442: a001 j 4442 - -0000000000004444 : -{ - 4444: 1141 addi sp,sp,-16 - exit(127); - 4446: 07f00513 li a0,127 -{ - 444a: e406 sd ra,8(sp) - exit(127); - 444c: fc3ff0ef jal 440e - -0000000000004450 : -} - 4450: 4501 li a0,0 - 4452: 8082 ret - -0000000000004454 : -} - 4454: 557d li a0,-1 - 4456: 8082 ret - -0000000000004458 : - if (!ptr) - 4458: c121 beqz a0,4498 - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 445a: 00003617 auipc a2,0x3 - 445e: 2f660613 addi a2,a2,758 # 7750 - 4462: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 4466: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 446a: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 446c: 02d7f763 bgeu a5,a3,449a - 4470: 00e6e463 bltu a3,a4,4478 - if (p >= p->next && (bp > p || bp < p->next)) - 4474: 02e7e763 bltu a5,a4,44a2 - if ((char *)bp + bp->size == (char *)p->next) - 4478: ff053583 ld a1,-16(a0) - 447c: 00b68833 add a6,a3,a1 - 4480: 03070363 beq a4,a6,44a6 - if ((char *)p + p->size == (char *)bp) - 4484: 638c ld a1,0(a5) - 4486: fee53c23 sd a4,-8(a0) - 448a: 00b78833 add a6,a5,a1 - 448e: 03068963 beq a3,a6,44c0 - 4492: e794 sd a3,8(a5) - freep = p; - 4494: 10f63423 sd a5,264(a2) -} - 4498: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 449a: 00e7e463 bltu a5,a4,44a2 - 449e: fce6ede3 bltu a3,a4,4478 -{ - 44a2: 87ba mv a5,a4 - 44a4: b7d9 j 446a - bp->size += p->next->size; - 44a6: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 44aa: 6718 ld a4,8(a4) - bp->size += p->next->size; - 44ac: 95c2 add a1,a1,a6 - 44ae: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 44b2: 638c ld a1,0(a5) - 44b4: fee53c23 sd a4,-8(a0) - 44b8: 00b78833 add a6,a5,a1 - 44bc: fd069be3 bne a3,a6,4492 - p->size += bp->size; - 44c0: ff053503 ld a0,-16(a0) - p->next = bp->next; - 44c4: 86ba mv a3,a4 - p->size += bp->size; - 44c6: 00b50733 add a4,a0,a1 - 44ca: e398 sd a4,0(a5) - p->next = bp->next; - 44cc: b7d9 j 4492 - -00000000000044ce : - if (size == 0) - 44ce: c169 beqz a0,4590 -{ - 44d0: 7179 addi sp,sp,-48 - 44d2: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 44d4: 00003497 auipc s1,0x3 - 44d8: 27c48493 addi s1,s1,636 # 7750 - 44dc: 1084b783 ld a5,264(s1) -{ - 44e0: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 44e2: 057d addi a0,a0,31 -{ - 44e4: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 44e6: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 44ea: c3d1 beqz a5,456e - for (p = prevp->next;; prevp = p, p = p->next) - 44ec: 6788 ld a0,8(a5) - if (p->size >= size) - 44ee: 6118 ld a4,0(a0) - 44f0: 06877163 bgeu a4,s0,4552 - 44f4: e44e sd s3,8(sp) - 44f6: e052 sd s4,0(sp) - 44f8: e84a sd s2,16(sp) - if (nu < 4096) - 44fa: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 44fc: 59fd li s3,-1 - 44fe: a029 j 4508 - for (p = prevp->next;; prevp = p, p = p->next) - 4500: 6788 ld a0,8(a5) - if (p->size >= size) - 4502: 6118 ld a4,0(a0) - 4504: 04877463 bgeu a4,s0,454c - if (p == freep) - 4508: 1084b703 ld a4,264(s1) - 450c: 87aa mv a5,a0 - 450e: fee519e3 bne a0,a4,4500 - if (nu < 4096) - 4512: 8922 mv s2,s0 - 4514: 01447363 bgeu s0,s4,451a - 4518: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 451a: 854a mv a0,s2 - 451c: c3dfb0ef jal 158 - 4520: 87aa mv a5,a0 - free((void *)(up + 1)); - 4522: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 4524: 01378963 beq a5,s3,4536 - up->size = nu; - 4528: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 452c: f2dff0ef jal 4458 - return freep; - 4530: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 4534: f7f1 bnez a5,4500 -} - 4536: 70a2 ld ra,40(sp) - 4538: 7402 ld s0,32(sp) - errno = ENOMEM; - 453a: 47b1 li a5,12 - 453c: c09c sw a5,0(s1) - return NULL; - 453e: 6942 ld s2,16(sp) - 4540: 69a2 ld s3,8(sp) - 4542: 6a02 ld s4,0(sp) -} - 4544: 64e2 ld s1,24(sp) - return NULL; - 4546: 4501 li a0,0 -} - 4548: 6145 addi sp,sp,48 - 454a: 8082 ret - 454c: 6942 ld s2,16(sp) - 454e: 69a2 ld s3,8(sp) - 4550: 6a02 ld s4,0(sp) - if (p->size == size) - 4552: 02e40c63 beq s0,a4,458a - p->size -= size; - 4556: 8f01 sub a4,a4,s0 - 4558: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 455a: 953a add a0,a0,a4 - p->size = size; - 455c: e100 sd s0,0(a0) -} - 455e: 70a2 ld ra,40(sp) - 4560: 7402 ld s0,32(sp) - freep = prevp; - 4562: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 4566: 0541 addi a0,a0,16 -} - 4568: 64e2 ld s1,24(sp) - 456a: 6145 addi sp,sp,48 - 456c: 8082 ret - base.next = freep = prevp = &base; - 456e: 00003517 auipc a0,0x3 - 4572: 2f250513 addi a0,a0,754 # 7860 - 4576: 10a4b423 sd a0,264(s1) - 457a: 10a4bc23 sd a0,280(s1) - base.size = 0; - 457e: 00003797 auipc a5,0x3 - 4582: 2e07b123 sd zero,738(a5) # 7860 - if (p->size >= size) - 4586: f43d bnez s0,44f4 - base.next = freep = prevp = &base; - 4588: 87aa mv a5,a0 - prevp->next = p->next; - 458a: 6518 ld a4,8(a0) - 458c: e798 sd a4,8(a5) - 458e: bfc1 j 455e - return NULL; - 4590: 4501 li a0,0 -} - 4592: 8082 ret - -0000000000004594 : - if (__builtin_mul_overflow(nmemb, size, &total)) - 4594: 02b537b3 mulhu a5,a0,a1 -{ - 4598: 1101 addi sp,sp,-32 - 459a: e822 sd s0,16(sp) - 459c: ec06 sd ra,24(sp) - 459e: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 45a0: 02b50433 mul s0,a0,a1 - 45a4: e385 bnez a5,45c4 - void *p = malloc(total); - 45a6: 8522 mv a0,s0 - 45a8: f27ff0ef jal 44ce - 45ac: 84aa mv s1,a0 - if (p) - 45ae: c509 beqz a0,45b8 - memset(p, 0, total); - 45b0: 8622 mv a2,s0 - 45b2: 4581 li a1,0 - 45b4: 524000ef jal 4ad8 -} - 45b8: 60e2 ld ra,24(sp) - 45ba: 6442 ld s0,16(sp) - 45bc: 8526 mv a0,s1 - 45be: 64a2 ld s1,8(sp) - 45c0: 6105 addi sp,sp,32 - 45c2: 8082 ret - 45c4: 60e2 ld ra,24(sp) - 45c6: 6442 ld s0,16(sp) - errno = ENOMEM; - 45c8: 47b1 li a5,12 - return NULL; - 45ca: 4481 li s1,0 - errno = ENOMEM; - 45cc: 00003717 auipc a4,0x3 - 45d0: 18f72223 sw a5,388(a4) # 7750 -} - 45d4: 8526 mv a0,s1 - 45d6: 64a2 ld s1,8(sp) - 45d8: 6105 addi sp,sp,32 - 45da: 8082 ret - -00000000000045dc : - if (!ptr) - 45dc: c929 beqz a0,462e -{ - 45de: 1101 addi sp,sp,-32 - 45e0: ec06 sd ra,24(sp) - 45e2: e426 sd s1,8(sp) - if (size == 0) - 45e4: c5b9 beqz a1,4632 - if (bp->size >= new_size) - 45e6: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 45ea: 01f58793 addi a5,a1,31 - 45ee: e822 sd s0,16(sp) - 45f0: 9bc1 andi a5,a5,-16 - 45f2: 842a mv s0,a0 - return ptr; - 45f4: 84aa mv s1,a0 - if (bp->size >= new_size) - 45f6: 00f76863 bltu a4,a5,4606 - 45fa: 6442 ld s0,16(sp) -} - 45fc: 60e2 ld ra,24(sp) - 45fe: 8526 mv a0,s1 - 4600: 64a2 ld s1,8(sp) - 4602: 6105 addi sp,sp,32 - 4604: 8082 ret - void *new_ptr = malloc(size); - 4606: 852e mv a0,a1 - 4608: ec7ff0ef jal 44ce - 460c: 84aa mv s1,a0 - if (!new_ptr) - 460e: d575 beqz a0,45fa - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 4610: ff043603 ld a2,-16(s0) - 4614: 85a2 mv a1,s0 - 4616: 1641 addi a2,a2,-16 - 4618: 514000ef jal 4b2c - free(ptr); - 461c: 8522 mv a0,s0 - 461e: e3bff0ef jal 4458 -} - 4622: 60e2 ld ra,24(sp) - free(ptr); - 4624: 6442 ld s0,16(sp) -} - 4626: 8526 mv a0,s1 - 4628: 64a2 ld s1,8(sp) - 462a: 6105 addi sp,sp,32 - 462c: 8082 ret - return malloc(size); - 462e: 852e mv a0,a1 - 4630: bd79 j 44ce - free(ptr); - 4632: e27ff0ef jal 4458 - return NULL; - 4636: 4481 li s1,0 - 4638: b7d1 j 45fc - -000000000000463a : - if (base < 0 || base == 1 || base > 36) - 463a: 02400813 li a6,36 -{ - 463e: 86aa mv a3,a0 - 4640: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4642: 00c86663 bltu a6,a2,464e - 4646: 4805 li a6,1 - 4648: 01060363 beq a2,a6,464e - 464c: b939 j 426a - if (endptr) - 464e: c311 beqz a4,4652 - *endptr = (char *)nptr; - 4650: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4652: 00003797 auipc a5,0x3 - 4656: 0e07af23 sw zero,254(a5) # 7750 -} - 465a: 4501 li a0,0 - 465c: 8082 ret - -000000000000465e : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 465e: 1141 addi sp,sp,-16 - 4660: e406 sd ra,8(sp) - 4662: e022 sd s0,0(sp) - const char *s = nptr; - 4664: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 4666: 02000813 li a6,32 - 466a: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 466c: 0006c783 lbu a5,0(a3) - 4670: 0685 addi a3,a3,1 - 4672: ff77871b addiw a4,a5,-9 - 4676: 0ff77713 zext.b a4,a4 - 467a: 0007841b sext.w s0,a5 - 467e: ff0787e3 beq a5,a6,466c - 4682: fee8f5e3 bgeu a7,a4,466c - if (base < 0 || base == 1 || base > 36) - 4686: 02400793 li a5,36 - 468a: 02c7ec63 bltu a5,a2,46c2 - 468e: 4785 li a5,1 - 4690: 02f60963 beq a2,a5,46c2 - 4694: bd7ff0ef jal 426a - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 4698: 00003797 auipc a5,0x3 - 469c: 0b878793 addi a5,a5,184 # 7750 - 46a0: 4394 lw a3,0(a5) - 46a2: 02200713 li a4,34 - 46a6: 04e68363 beq a3,a4,46ec - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 46aa: 02d00713 li a4,45 - 46ae: 02e40563 beq s0,a4,46d8 - 46b2: 00055f63 bgez a0,46d0 - { - errno = ERANGE; - 46b6: 02200713 li a4,34 - 46ba: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 46bc: 557d li a0,-1 - 46be: 8105 srli a0,a0,0x1 - 46c0: a801 j 46d0 - if (endptr) - 46c2: c191 beqz a1,46c6 - *endptr = (char *)nptr; - 46c4: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 46c6: 00003797 auipc a5,0x3 - 46ca: 0807a523 sw zero,138(a5) # 7750 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 46ce: 4501 li a0,0 -} - 46d0: 60a2 ld ra,8(sp) - 46d2: 6402 ld s0,0(sp) - 46d4: 0141 addi sp,sp,16 - 46d6: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 46d8: 577d li a4,-1 - 46da: 177e slli a4,a4,0x3f - 46dc: 02a76263 bltu a4,a0,4700 -} - 46e0: 60a2 ld ra,8(sp) - 46e2: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 46e4: 40a00533 neg a0,a0 -} - 46e8: 0141 addi sp,sp,16 - 46ea: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 46ec: 577d li a4,-1 - 46ee: fae51ee3 bne a0,a4,46aa - return neg ? LLONG_MIN : LLONG_MAX; - 46f2: 02d00793 li a5,45 - 46f6: fcf413e3 bne s0,a5,46bc - return LLONG_MIN; - 46fa: 557d li a0,-1 - 46fc: 157e slli a0,a0,0x3f - 46fe: bfc9 j 46d0 - errno = ERANGE; - 4700: 02200713 li a4,34 - 4704: c398 sw a4,0(a5) - return LLONG_MIN; - 4706: bfd5 j 46fa - -0000000000004708 : - if (base < 0 || base == 1 || base > 36) - 4708: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 470c: 86aa mv a3,a0 - 470e: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4710: 00c86663 bltu a6,a2,471c - 4714: 4805 li a6,1 - 4716: 01060363 beq a2,a6,471c - 471a: be81 j 426a - if (endptr) - 471c: c311 beqz a4,4720 - *endptr = (char *)nptr; - 471e: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4720: 00003797 auipc a5,0x3 - 4724: 0207a823 sw zero,48(a5) # 7750 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 4728: 4501 li a0,0 - 472a: 8082 ret - -000000000000472c : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 472c: bf0d j 465e - -000000000000472e : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 472e: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 4730: 4629 li a2,10 - 4732: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4734: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 4736: f29ff0ef jal 465e -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 473a: 60a2 ld ra,8(sp) - 473c: 2501 sext.w a0,a0 - 473e: 0141 addi sp,sp,16 - 4740: 8082 ret - -0000000000004742 : - long long ret = strtoll(nptr, endptr, base); - 4742: 4629 li a2,10 - 4744: 4581 li a1,0 - 4746: bf21 j 465e - -0000000000004748 : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 4748: 4629 li a2,10 - 474a: 4581 li a1,0 - 474c: bf09 j 465e - -000000000000474e : - 474e: 02000693 li a3,32 - 4752: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 4754: 00054783 lbu a5,0(a0) - 4758: ff77871b addiw a4,a5,-9 - 475c: 0ff77713 zext.b a4,a4 - 4760: 06d78263 beq a5,a3,47c4 - 4764: 06e67063 bgeu a2,a4,47c4 - s++; - if (*s == '-') - 4768: 02d00713 li a4,45 - 476c: 08e78e63 beq a5,a4,4808 - { - sign = -1; - s++; - } - else if (*s == '+') - 4770: 02b00713 li a4,43 - 4774: 0ae78263 beq a5,a4,4818 - 4778: 00001717 auipc a4,0x1 - 477c: 0f073507 fld fa0,240(a4) # 5868 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 4780: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 4784: 46a5 li a3,9 - 4786: f20007d3 fmv.d.x fa5,zero - 478a: 8732 mv a4,a2 - 478c: 02c6e363 bltu a3,a2,47b2 - 4790: 00001797 auipc a5,0x1 - 4794: 0e07b687 fld fa3,224(a5) # 5870 - 4798: 4625 li a2,9 - 479a: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 479e: d2070753 fcvt.d.w fa4,a4 - s++; - 47a2: 0505 addi a0,a0,1 - 47a4: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 47a8: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 47ac: 8736 mv a4,a3 - while (isdigit(*s)) - 47ae: fed676e3 bgeu a2,a3,479a - } - if (*s == '.') - 47b2: 02e00713 li a4,46 - 47b6: 00e78963 beq a5,a4,47c8 - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 47ba: c191 beqz a1,47be - *endptr = (char *)s; - 47bc: e188 sd a0,0(a1) - return val * sign; -} - 47be: 12a7f553 fmul.d fa0,fa5,fa0 - 47c2: 8082 ret - s++; - 47c4: 0505 addi a0,a0,1 - 47c6: b779 j 4754 - while (isdigit(*s)) - 47c8: 00154703 lbu a4,1(a0) - 47cc: 46a5 li a3,9 - s++; - 47ce: 0505 addi a0,a0,1 - 47d0: fd07071b addiw a4,a4,-48 - 47d4: 87ba mv a5,a4 - while (isdigit(*s)) - 47d6: fee6e2e3 bltu a3,a4,47ba - double factor = 1.0; - 47da: 00001717 auipc a4,0x1 - 47de: 08e73707 fld fa4,142(a4) # 5868 - 47e2: 00001717 auipc a4,0x1 - 47e6: 0a673607 fld fa2,166(a4) # 5888 - factor *= 0.1; - 47ea: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 47ee: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 47f2: d20786d3 fcvt.d.w fa3,a5 - s++; - 47f6: 0505 addi a0,a0,1 - 47f8: fd07071b addiw a4,a4,-48 - 47fc: 87ba mv a5,a4 - val += (*s - '0') * factor; - 47fe: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 4802: fee6f4e3 bgeu a3,a4,47ea - 4806: bf55 j 47ba - while (isdigit(*s)) - 4808: 00154783 lbu a5,1(a0) - 480c: 00001717 auipc a4,0x1 - 4810: 05473507 fld fa0,84(a4) # 5860 - s++; - 4814: 0505 addi a0,a0,1 - 4816: b7ad j 4780 - while (isdigit(*s)) - 4818: 00154783 lbu a5,1(a0) - 481c: 00001717 auipc a4,0x1 - 4820: 04c73507 fld fa0,76(a4) # 5868 - s++; - 4824: 0505 addi a0,a0,1 - 4826: bfa9 j 4780 - -0000000000004828 : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 4828: 4581 li a1,0 - 482a: b715 j 474e - -000000000000482c : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 482c: 1141 addi sp,sp,-16 - 482e: e406 sd ra,8(sp) - 4830: f1fff0ef jal 474e - 4834: 60a2 ld ra,8(sp) - 4836: 40157553 fcvt.s.d fa0,fa0 - 483a: 0141 addi sp,sp,16 - 483c: 8082 ret - -000000000000483e : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 483e: 4785 li a5,1 - 4840: 0cb7fd63 bgeu a5,a1,491a -{ - 4844: 715d addi sp,sp,-80 - 4846: f44e sd s3,40(sp) - 4848: e486 sd ra,72(sp) - 484a: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 484c: c279 beqz a2,4912 - 484e: e85a sd s6,16(sp) - 4850: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 4852: 1b7d addi s6,s6,-1 - 4854: fc26 sd s1,56(sp) - 4856: 033b04b3 mul s1,s6,s3 - 485a: ec56 sd s5,24(sp) - 485c: 8aaa mv s5,a0 - 485e: f052 sd s4,32(sp) - 4860: e45e sd s7,8(sp) - 4862: e0a2 sd s0,64(sp) - 4864: f84a sd s2,48(sp) - 4866: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 4868: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 486a: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 486c: 069af763 bgeu s5,s1,48da - char *j = base_ptr; - 4870: 8956 mv s2,s5 - char *i = base_ptr; - 4872: 8456 mv s0,s5 - 4874: a021 j 487c - for (; j < pivot; j += size) - 4876: 994e add s2,s2,s3 - 4878: 00997f63 bgeu s2,s1,4896 - { - if (compar(j, pivot) < 0) - 487c: 85a6 mv a1,s1 - 487e: 854a mv a0,s2 - 4880: 9a02 jalr s4 - 4882: fe055ae3 bgez a0,4876 - { - if (i != j) - 4886: 05241d63 bne s0,s2,48e0 - 488a: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 488e: 8432 mv s0,a2 - for (; j < pivot; j += size) - 4890: 994e add s2,s2,s3 - 4892: fe9965e3 bltu s2,s1,487c - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 4896: 415405b3 sub a1,s0,s5 - 489a: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 489e: 40bb0b33 sub s6,s6,a1 - while (size--) - 48a2: 013406b3 add a3,s0,s3 - *a++ = *b; - 48a6: 0004c703 lbu a4,0(s1) - temp = *a; - 48aa: 00044783 lbu a5,0(s0) - *b++ = temp; - 48ae: 0485 addi s1,s1,1 - *a++ = *b; - 48b0: 0405 addi s0,s0,1 - 48b2: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 48b6: fef48fa3 sb a5,-1(s1) - while (size--) - 48ba: fed416e3 bne s0,a3,48a6 - qsort(base, left_count, size, compar); - 48be: 86d2 mv a3,s4 - 48c0: 864e mv a2,s3 - 48c2: 8556 mv a0,s5 - 48c4: f7bff0ef jal 483e - if (nmemb < 2 || size == 0) - 48c8: 036bfe63 bgeu s7,s6,4904 - char *pivot = base_ptr + (nmemb - 1) * size; - 48cc: 1b7d addi s6,s6,-1 - 48ce: 033b04b3 mul s1,s6,s3 - 48d2: 8aa2 mv s5,s0 - 48d4: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 48d6: f89aede3 bltu s5,s1,4870 - char *i = base_ptr; - 48da: 8456 mv s0,s5 - for (; j < pivot; j += size) - 48dc: 4581 li a1,0 - 48de: b7d1 j 48a2 - 48e0: 01340633 add a2,s0,s3 - if (i != j) - 48e4: 874a mv a4,s2 - 48e6: 87a2 mv a5,s0 - *a++ = *b; - 48e8: 00074683 lbu a3,0(a4) - temp = *a; - 48ec: 0007c803 lbu a6,0(a5) - *b++ = temp; - 48f0: 0705 addi a4,a4,1 - *a++ = *b; - 48f2: 0785 addi a5,a5,1 - 48f4: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 48f8: ff070fa3 sb a6,-1(a4) - while (size--) - 48fc: fec796e3 bne a5,a2,48e8 - i += size; - 4900: 8432 mv s0,a2 - 4902: b779 j 4890 - 4904: 6406 ld s0,64(sp) - 4906: 74e2 ld s1,56(sp) - 4908: 7942 ld s2,48(sp) - 490a: 7a02 ld s4,32(sp) - 490c: 6ae2 ld s5,24(sp) - 490e: 6b42 ld s6,16(sp) - 4910: 6ba2 ld s7,8(sp) -} - 4912: 60a6 ld ra,72(sp) - 4914: 79a2 ld s3,40(sp) - 4916: 6161 addi sp,sp,80 - 4918: 8082 ret - 491a: 8082 ret - -000000000000491c : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 491c: 715d addi sp,sp,-80 - 491e: e486 sd ra,72(sp) - 4920: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 4922: c629 beqz a2,496c - 4924: f84a sd s2,48(sp) - 4926: f44e sd s3,40(sp) - 4928: f052 sd s4,32(sp) - 492a: ec56 sd s5,24(sp) - 492c: e85a sd s6,16(sp) - 492e: e45e sd s7,8(sp) - 4930: e0a2 sd s0,64(sp) - 4932: 8932 mv s2,a2 - 4934: 8a2a mv s4,a0 - 4936: 8aae mv s5,a1 - 4938: 8b36 mv s6,a3 - 493a: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 493c: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 493e: 01298433 add s0,s3,s2 - 4942: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 4944: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 4948: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 494a: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 494c: 85a6 mv a1,s1 - 494e: 9b82 jalr s7 - if (cmp < 0) - 4950: 02054463 bltz a0,4978 - u = idx; - else if (cmp > 0) - 4954: c515 beqz a0,4980 - l = idx + 1; - 4956: 00140993 addi s3,s0,1 - while (l < u) - 495a: ff29e2e3 bltu s3,s2,493e - 495e: 6406 ld s0,64(sp) - 4960: 7942 ld s2,48(sp) - 4962: 79a2 ld s3,40(sp) - 4964: 7a02 ld s4,32(sp) - 4966: 6ae2 ld s5,24(sp) - 4968: 6b42 ld s6,16(sp) - 496a: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 496c: 60a6 ld ra,72(sp) - return NULL; - 496e: 4481 li s1,0 -} - 4970: 8526 mv a0,s1 - 4972: 74e2 ld s1,56(sp) - 4974: 6161 addi sp,sp,80 - 4976: 8082 ret - u = idx; - 4978: 8922 mv s2,s0 - while (l < u) - 497a: fd29e2e3 bltu s3,s2,493e - 497e: b7c5 j 495e - 4980: 6406 ld s0,64(sp) -} - 4982: 60a6 ld ra,72(sp) - 4984: 7942 ld s2,48(sp) - 4986: 79a2 ld s3,40(sp) - 4988: 7a02 ld s4,32(sp) - 498a: 6ae2 ld s5,24(sp) - 498c: 6b42 ld s6,16(sp) - 498e: 6ba2 ld s7,8(sp) - 4990: 8526 mv a0,s1 - 4992: 74e2 ld s1,56(sp) - 4994: 6161 addi sp,sp,80 - 4996: 8082 ret - -0000000000004998 : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 4998: 41f5579b sraiw a5,a0,0x1f - 499c: 8d3d xor a0,a0,a5 - 499e: 9d1d subw a0,a0,a5 - 49a0: 8082 ret - -00000000000049a2 : -long labs(long j) { return (j < 0) ? -j : j; } - 49a2: 43f55793 srai a5,a0,0x3f - 49a6: 8d3d xor a0,a0,a5 - 49a8: 8d1d sub a0,a0,a5 - 49aa: 8082 ret - -00000000000049ac : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 49ac: 43f55793 srai a5,a0,0x3f - 49b0: 8d3d xor a0,a0,a5 - 49b2: 8d1d sub a0,a0,a5 - 49b4: 8082 ret - -00000000000049b6
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 49b6: 02b547bb divw a5,a0,a1 -{ - 49ba: 1141 addi sp,sp,-16 - return res; -} - 49bc: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 49be: 02b5653b remw a0,a0,a1 - return res; - 49c2: 1782 slli a5,a5,0x20 - 49c4: 9381 srli a5,a5,0x20 - 49c6: 1502 slli a0,a0,0x20 -} - 49c8: 8d5d or a0,a0,a5 - 49ca: 8082 ret - -00000000000049cc : -ldiv_t ldiv(long numer, long denom) -{ - 49cc: 1141 addi sp,sp,-16 - 49ce: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 49d0: 02b54533 div a0,a0,a1 - 49d4: 0141 addi sp,sp,16 - 49d6: 02b7e5b3 rem a1,a5,a1 - 49da: 8082 ret - -00000000000049dc : -lldiv_t lldiv(long long numer, long long denom) -{ - 49dc: 1141 addi sp,sp,-16 - 49de: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 49e0: 02b54533 div a0,a0,a1 - 49e4: 0141 addi sp,sp,16 - 49e6: 02b7e5b3 rem a1,a5,a1 - 49ea: 8082 ret - -00000000000049ec : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 49ec: 00003697 auipc a3,0x3 - 49f0: d1c68693 addi a3,a3,-740 # 7708 - 49f4: 629c ld a5,0(a3) - 49f6: 41c65737 lui a4,0x41c65 - 49fa: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d5e5> - 49fe: 02e787b3 mul a5,a5,a4 - 4a02: 670d lui a4,0x3 - 4a04: 03970713 addi a4,a4,57 # 3039 - 4a08: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 4a0a: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 4a0e: e29c sd a5,0(a3) -} - 4a10: 9145 srli a0,a0,0x31 - 4a12: 8082 ret - -0000000000004a14 : -void srand(unsigned int seed) { next = seed; } - 4a14: 1502 slli a0,a0,0x20 - 4a16: 9101 srli a0,a0,0x20 - 4a18: 00003797 auipc a5,0x3 - 4a1c: cea7b823 sd a0,-784(a5) # 7708 - 4a20: 8082 ret - -0000000000004a22 : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 4a22: c901 beqz a0,4a32 - 4a24: 00054783 lbu a5,0(a0) - 4a28: 4501 li a0,0 - 4a2a: c789 beqz a5,4a34 - 4a2c: 00b03533 snez a0,a1 - 4a30: 8082 ret - 4a32: 4501 li a0,0 - 4a34: 8082 ret - -0000000000004a36 : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 4a36: 87aa mv a5,a0 - if (!s) - 4a38: cd81 beqz a1,4a50 - return 0; - if (n == 0) - return -1; - 4a3a: 557d li a0,-1 - if (n == 0) - 4a3c: ca19 beqz a2,4a52 - if (pwc) - 4a3e: c781 beqz a5,4a46 - *pwc = (wchar_t)*s; - 4a40: 0005c703 lbu a4,0(a1) - 4a44: c398 sw a4,0(a5) - return (*s != 0); - 4a46: 0005c503 lbu a0,0(a1) - 4a4a: 00a03533 snez a0,a0 - 4a4e: 8082 ret - return 0; - 4a50: 4501 li a0,0 -} - 4a52: 8082 ret - -0000000000004a54 : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 4a54: c509 beqz a0,4a5e - return 0; - *s = (char)wchar; - 4a56: 00b50023 sb a1,0(a0) - return 1; - 4a5a: 4505 li a0,1 - 4a5c: 8082 ret - return 0; - 4a5e: 4501 li a0,0 -} - 4a60: 8082 ret - -0000000000004a62 : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a62: 0005c703 lbu a4,0(a1) - 4a66: cb0d beqz a4,4a98 - 4a68: ca15 beqz a2,4a9c - 4a6a: 86aa mv a3,a0 - size_t i = 0; - 4a6c: 4781 li a5,0 - 4a6e: a019 j 4a74 - while (src[i] && i < n) - 4a70: 02f60263 beq a2,a5,4a94 - { - dest[i] = (wchar_t)src[i]; - i++; - 4a74: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 4a76: c298 sw a4,0(a3) - while (src[i] && i < n) - 4a78: 00f58733 add a4,a1,a5 - 4a7c: 00074703 lbu a4,0(a4) - 4a80: 0691 addi a3,a3,4 - 4a82: f77d bnez a4,4a70 - } - if (i < n) - 4a84: 00c7f763 bgeu a5,a2,4a92 - dest[i] = 0; - 4a88: 00279713 slli a4,a5,0x2 - 4a8c: 953a add a0,a0,a4 - 4a8e: 00052023 sw zero,0(a0) - size_t i = 0; - 4a92: 863e mv a2,a5 - 4a94: 8532 mv a0,a2 - 4a96: 8082 ret - 4a98: 4781 li a5,0 - 4a9a: b7ed j 4a84 - 4a9c: 4501 li a0,0 - return i; -} - 4a9e: 8082 ret - -0000000000004aa0 : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4aa0: 4198 lw a4,0(a1) - 4aa2: c71d beqz a4,4ad0 - 4aa4: ca05 beqz a2,4ad4 - 4aa6: 0591 addi a1,a1,4 - size_t i = 0; - 4aa8: 4781 li a5,0 - 4aaa: a019 j 4ab0 - while (src[i] && i < n) - 4aac: 02f60063 beq a2,a5,4acc - { - dest[i] = (char)src[i]; - 4ab0: 00f506b3 add a3,a0,a5 - 4ab4: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 4ab8: 4198 lw a4,0(a1) - i++; - 4aba: 0785 addi a5,a5,1 - while (src[i] && i < n) - 4abc: 0591 addi a1,a1,4 - 4abe: f77d bnez a4,4aac - } - if (i < n) - 4ac0: 00c7f563 bgeu a5,a2,4aca - dest[i] = 0; - 4ac4: 953e add a0,a0,a5 - 4ac6: 00050023 sb zero,0(a0) - size_t i = 0; - 4aca: 863e mv a2,a5 - 4acc: 8532 mv a0,a2 - 4ace: 8082 ret - 4ad0: 4781 li a5,0 - 4ad2: b7fd j 4ac0 - 4ad4: 4501 li a0,0 - return i; - 4ad6: 8082 ret - -0000000000004ad8 : - -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; - 4ad8: 0ff5f593 zext.b a1,a1 - 4adc: 87aa mv a5,a0 - 4ade: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 4ae2: c611 beqz a2,4aee - cdst[i] = (char)c; - 4ae4: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 4ae8: 0785 addi a5,a5,1 - 4aea: fee79de3 bne a5,a4,4ae4 - return dst; -} - 4aee: 8082 ret - -0000000000004af0 : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 4af0: 02b50d63 beq a0,a1,4b2a - return vdst; - - if (src > dst) - 4af4: 00b57e63 bgeu a0,a1,4b10 - { - while (n--) - 4af8: ca0d beqz a2,4b2a - 4afa: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 4afc: 87aa mv a5,a0 - *dst++ = *src++; - 4afe: 0005c703 lbu a4,0(a1) - 4b02: 0785 addi a5,a5,1 - 4b04: 0585 addi a1,a1,1 - 4b06: fee78fa3 sb a4,-1(a5) - while (n--) - 4b0a: fec79ae3 bne a5,a2,4afe - 4b0e: 8082 ret - } - else - { - dst += n; - 4b10: 00c50733 add a4,a0,a2 - src += n; - 4b14: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 4b18: ca09 beqz a2,4b2a - *--dst = *--src; - 4b1a: fff7c683 lbu a3,-1(a5) - 4b1e: 17fd addi a5,a5,-1 - 4b20: 177d addi a4,a4,-1 - 4b22: 00d70023 sb a3,0(a4) - while (n-- > 0) - 4b26: fef59ae3 bne a1,a5,4b1a - } - return vdst; -} - 4b2a: 8082 ret - -0000000000004b2c : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 4b2c: b7d1 j 4af0 - -0000000000004b2e : - -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--) - 4b2e: c205 beqz a2,4b4e - 4b30: 962a add a2,a2,a0 - 4b32: a019 j 4b38 - 4b34: 00c50d63 beq a0,a2,4b4e - { - if (*p1 != *p2) - 4b38: 00054783 lbu a5,0(a0) - 4b3c: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 4b40: 0505 addi a0,a0,1 - p2++; - 4b42: 0585 addi a1,a1,1 - if (*p1 != *p2) - 4b44: fee788e3 beq a5,a4,4b34 - return *p1 - *p2; - 4b48: 40e7853b subw a0,a5,a4 - 4b4c: 8082 ret - } - return 0; - 4b4e: 4501 li a0,0 -} - 4b50: 8082 ret - -0000000000004b52 : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 4b52: ce09 beqz a2,4b6c - { - if (*p == (unsigned char)c) - 4b54: 0ff5f593 zext.b a1,a1 - 4b58: 962a add a2,a2,a0 - 4b5a: a021 j 4b62 - return (void *)p; - p++; - 4b5c: 0505 addi a0,a0,1 - while (n--) - 4b5e: 00a60763 beq a2,a0,4b6c - if (*p == (unsigned char)c) - 4b62: 00054783 lbu a5,0(a0) - 4b66: feb79be3 bne a5,a1,4b5c - } - return NULL; -} - 4b6a: 8082 ret - return NULL; - 4b6c: 4501 li a0,0 -} - 4b6e: 8082 ret - -0000000000004b70 : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 4b70: 00054783 lbu a5,0(a0) - 4b74: cb89 beqz a5,4b86 - const char *p = s; - 4b76: 87aa mv a5,a0 - while (*p) - 4b78: 0017c703 lbu a4,1(a5) - p++; - 4b7c: 0785 addi a5,a5,1 - while (*p) - 4b7e: ff6d bnez a4,4b78 - return (size_t)(p - s); - 4b80: 40a78533 sub a0,a5,a0 - 4b84: 8082 ret - while (*p) - 4b86: 4501 li a0,0 -} - 4b88: 8082 ret - -0000000000004b8a : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 4b8a: 87aa mv a5,a0 - 4b8c: 0005c703 lbu a4,0(a1) - 4b90: 0785 addi a5,a5,1 - 4b92: 0585 addi a1,a1,1 - 4b94: fee78fa3 sb a4,-1(a5) - 4b98: fb75 bnez a4,4b8c - ; - return os; -} - 4b9a: 8082 ret - -0000000000004b9c : -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++) - 4b9c: 4781 li a5,0 - 4b9e: e619 bnez a2,4bac - 4ba0: 8082 ret - dst[i] = src[i]; - 4ba2: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4ba6: 0785 addi a5,a5,1 - 4ba8: 02f60263 beq a2,a5,4bcc - 4bac: 00f58733 add a4,a1,a5 - 4bb0: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 4bb4: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 4bb8: f76d bnez a4,4ba2 - - for (; i < n; i++) - 4bba: 00c7f963 bgeu a5,a2,4bcc - 4bbe: 87b6 mv a5,a3 - 4bc0: 962a add a2,a2,a0 - dst[i] = '\0'; - 4bc2: 00078023 sb zero,0(a5) - for (; i < n; i++) - 4bc6: 0785 addi a5,a5,1 - 4bc8: fec79de3 bne a5,a2,4bc2 - - return os; -} - 4bcc: 8082 ret - -0000000000004bce : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 4bce: 00054783 lbu a5,0(a0) - 4bd2: cf91 beqz a5,4bee - 4bd4: 87aa mv a5,a0 - 4bd6: 0017c703 lbu a4,1(a5) - dst++; - 4bda: 0785 addi a5,a5,1 - while (*dst) - 4bdc: ff6d bnez a4,4bd6 - while ((*dst++ = *src++) != 0) - 4bde: 0005c703 lbu a4,0(a1) - 4be2: 0785 addi a5,a5,1 - 4be4: 0585 addi a1,a1,1 - 4be6: fee78fa3 sb a4,-1(a5) - 4bea: fb75 bnez a4,4bde - ; - return os; -} - 4bec: 8082 ret - while ((*dst++ = *src++) != 0) - 4bee: 0005c703 lbu a4,0(a1) - while (*dst) - 4bf2: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 4bf4: 0785 addi a5,a5,1 - 4bf6: fee78fa3 sb a4,-1(a5) - 4bfa: 0585 addi a1,a1,1 - 4bfc: f36d bnez a4,4bde - 4bfe: 8082 ret - -0000000000004c00 : - while (*p) - 4c00: 00054783 lbu a5,0(a0) - const char *p = s; - 4c04: 872a mv a4,a0 - while (*p) - 4c06: c789 beqz a5,4c10 - 4c08: 00174783 lbu a5,1(a4) - p++; - 4c0c: 0705 addi a4,a4,1 - while (*p) - 4c0e: ffed bnez a5,4c08 - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 4c10: 86ba mv a3,a4 - 4c12: 4781 li a5,0 - 4c14: 88ba mv a7,a4 - 4c16: ea01 bnez a2,4c26 - 4c18: a839 j 4c36 - dst[i] = src[i]; - 4c1a: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4c1e: 00188693 addi a3,a7,1 - 4c22: 00f60d63 beq a2,a5,4c3c - 4c26: 00f58833 add a6,a1,a5 - 4c2a: 00084803 lbu a6,0(a6) - 4c2e: 0785 addi a5,a5,1 - dst[i] = src[i]; - 4c30: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 4c32: fe0814e3 bnez a6,4c1a - - dst[i] = '\0'; - 4c36: 00088023 sb zero,0(a7) - - return os; -} - 4c3a: 8082 ret - dst[i] = '\0'; - 4c3c: 00c708b3 add a7,a4,a2 - 4c40: 00088023 sb zero,0(a7) -} - 4c44: 8082 ret - -0000000000004c46 : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 4c46: 00054783 lbu a5,0(a0) - 4c4a: e791 bnez a5,4c56 - 4c4c: a02d j 4c76 - 4c4e: 00054783 lbu a5,0(a0) - 4c52: cf89 beqz a5,4c6c - 4c54: 85b6 mv a1,a3 - 4c56: 0005c703 lbu a4,0(a1) - { - p++; - 4c5a: 0505 addi a0,a0,1 - q++; - 4c5c: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 4c60: fef707e3 beq a4,a5,4c4e - } - return (int)((unsigned char)*p - (unsigned char)*q); - 4c64: 0007851b sext.w a0,a5 -} - 4c68: 9d19 subw a0,a0,a4 - 4c6a: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c6c: 0015c703 lbu a4,1(a1) - 4c70: 4501 li a0,0 -} - 4c72: 9d19 subw a0,a0,a4 - 4c74: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c76: 0005c703 lbu a4,0(a1) - 4c7a: 4501 li a0,0 - 4c7c: b7f5 j 4c68 - -0000000000004c7e : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 4c7e: ca0d beqz a2,4cb0 - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 4c80: 00054783 lbu a5,0(a0) - 4c84: 167d addi a2,a2,-1 - 4c86: 00c506b3 add a3,a0,a2 - 4c8a: eb89 bnez a5,4c9c - 4c8c: a80d j 4cbe - { - if (n == 0 || *s1 == '\0') - 4c8e: 00d50d63 beq a0,a3,4ca8 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c92: 00154783 lbu a5,1(a0) - break; - s1++; - 4c96: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c98: cf91 beqz a5,4cb4 - 4c9a: 85b2 mv a1,a2 - 4c9c: 0005c703 lbu a4,0(a1) - s2++; - 4ca0: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4ca4: fef705e3 beq a4,a5,4c8e - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4ca8: 0007851b sext.w a0,a5 - 4cac: 9d19 subw a0,a0,a4 - 4cae: 8082 ret - return 0; - 4cb0: 4501 li a0,0 -} - 4cb2: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4cb4: 0015c703 lbu a4,1(a1) - 4cb8: 4501 li a0,0 - 4cba: 9d19 subw a0,a0,a4 - 4cbc: 8082 ret - 4cbe: 0005c703 lbu a4,0(a1) - 4cc2: 4501 li a0,0 - 4cc4: b7e5 j 4cac - -0000000000004cc6 : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 4cc6: 0ff5f593 zext.b a1,a1 - 4cca: a019 j 4cd0 - { - if (!*s++) - 4ccc: 0505 addi a0,a0,1 - 4cce: c791 beqz a5,4cda - while (*s != (char)c) - 4cd0: 00054783 lbu a5,0(a0) - 4cd4: feb79ce3 bne a5,a1,4ccc - 4cd8: 8082 ret - return NULL; - 4cda: 4501 li a0,0 - } - return (char *)s; -} - 4cdc: 8082 ret - -0000000000004cde : - -char *strrchr(const char *s, int c) -{ - 4cde: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 4ce0: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 4ce4: 4501 li a0,0 - if (*s == (char)c) - 4ce6: 0007c703 lbu a4,0(a5) - 4cea: 00e59363 bne a1,a4,4cf0 - last = s; - 4cee: 853e mv a0,a5 - } while (*s++); - 4cf0: 0785 addi a5,a5,1 - 4cf2: fb75 bnez a4,4ce6 - - return (char *)last; -} - 4cf4: 8082 ret - -0000000000004cf6 : - while (*p) - 4cf6: 0005c883 lbu a7,0(a1) - 4cfa: 04088a63 beqz a7,4d4e - const char *p = s; - 4cfe: 87ae mv a5,a1 - while (*p) - 4d00: 0017c703 lbu a4,1(a5) - p++; - 4d04: 0785 addi a5,a5,1 - while (*p) - 4d06: ff6d bnez a4,4d00 - return (size_t)(p - s); - 4d08: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 4d0c: 04b78163 beq a5,a1,4d4e - return (char *)haystack; - - for (; *haystack; haystack++) - 4d10: 00054783 lbu a5,0(a0) - 4d14: cf85 beqz a5,4d4c - 4d16: 187d addi a6,a6,-1 - 4d18: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 4d1a: 02f89463 bne a7,a5,4d42 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d1e: 00054703 lbu a4,0(a0) - 4d22: 8646 mv a2,a7 - 4d24: 86ae mv a3,a1 - 4d26: 87aa mv a5,a0 - 4d28: eb11 bnez a4,4d3c - 4d2a: a821 j 4d42 - if (n == 0 || *s1 == '\0') - 4d2c: 03078163 beq a5,a6,4d4e - while (n-- > 0 && *s1 && *s1 == *s2) - 4d30: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4d34: 0006c603 lbu a2,0(a3) - s1++; - 4d38: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d3a: cb19 beqz a4,4d50 - s2++; - 4d3c: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d3e: fee607e3 beq a2,a4,4d2c - for (; *haystack; haystack++) - 4d42: 00154783 lbu a5,1(a0) - 4d46: 0805 addi a6,a6,1 - 4d48: 0505 addi a0,a0,1 - 4d4a: fbe1 bnez a5,4d1a - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 4d4c: 4501 li a0,0 -} - 4d4e: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 4d50: de7d beqz a2,4d4e - for (; *haystack; haystack++) - 4d52: 00154783 lbu a5,1(a0) - 4d56: 0805 addi a6,a6,1 - 4d58: 0505 addi a0,a0,1 - 4d5a: f3e1 bnez a5,4d1a - 4d5c: bfc5 j 4d4c - -0000000000004d5e : - -char *strdup(const char *s) -{ - 4d5e: 1101 addi sp,sp,-32 - 4d60: e426 sd s1,8(sp) - 4d62: ec06 sd ra,24(sp) - 4d64: e822 sd s0,16(sp) - while (*p) - 4d66: 00054783 lbu a5,0(a0) -{ - 4d6a: 84aa mv s1,a0 - while (*p) - 4d6c: cb8d beqz a5,4d9e - const char *p = s; - 4d6e: 862a mv a2,a0 - while (*p) - 4d70: 00164783 lbu a5,1(a2) - p++; - 4d74: 0605 addi a2,a2,1 - while (*p) - 4d76: ffed bnez a5,4d70 - return (size_t)(p - s); - 4d78: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 4d7a: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 4d7e: 8522 mv a0,s0 - 4d80: f4eff0ef jal 44ce - if (new_str == NULL) - 4d84: c901 beqz a0,4d94 - return memmove(vdst, vsrc, n); - 4d86: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 4d88: 6442 ld s0,16(sp) - 4d8a: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 4d8c: 85a6 mv a1,s1 -} - 4d8e: 64a2 ld s1,8(sp) - 4d90: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 4d92: bbb9 j 4af0 -} - 4d94: 60e2 ld ra,24(sp) - 4d96: 6442 ld s0,16(sp) - 4d98: 64a2 ld s1,8(sp) - 4d9a: 6105 addi sp,sp,32 - 4d9c: 8082 ret - while (*p) - 4d9e: 4405 li s0,1 - 4da0: bff9 j 4d7e - -0000000000004da2 : - 4da2: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 4da6: 1101 addi sp,sp,-32 - 4da8: ec06 sd ra,24(sp) - 4daa: e822 sd s0,16(sp) - 4dac: 86b2 mv a3,a2 - while (*p) - 4dae: cf8d beqz a5,4de8 - const char *p = s; - 4db0: 87ae mv a5,a1 - while (*p) - 4db2: 0017c703 lbu a4,1(a5) - p++; - 4db6: 0785 addi a5,a5,1 - while (*p) - 4db8: ff6d bnez a4,4db2 - return (size_t)(p - s); - 4dba: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 4dbe: c285 beqz a3,4dde - 4dc0: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dc2: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 4dc6: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dca: 00d47563 bgeu s0,a3,4dd4 - dst[copy_len] = '\0'; - 4dce: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dd2: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 4dd4: d1dff0ef jal 4af0 - dst[copy_len] = '\0'; - 4dd8: 00048023 sb zero,0(s1) - } - - return src_len; - 4ddc: 64a2 ld s1,8(sp) -} - 4dde: 60e2 ld ra,24(sp) - 4de0: 8522 mv a0,s0 - 4de2: 6442 ld s0,16(sp) - 4de4: 6105 addi sp,sp,32 - 4de6: 8082 ret - if (size > 0) - 4de8: e219 bnez a2,4dee - return (size_t)(p - s); - 4dea: 4401 li s0,0 - 4dec: bfcd j 4dde - 4dee: e426 sd s1,8(sp) - 4df0: 4401 li s0,0 - if (size > 0) - 4df2: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4df4: 4601 li a2,0 - 4df6: bff9 j 4dd4 - -0000000000004df8 : - while (*p) - 4df8: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 4dfc: 7179 addi sp,sp,-48 - 4dfe: e84a sd s2,16(sp) - 4e00: f406 sd ra,40(sp) - 4e02: f022 sd s0,32(sp) - 4e04: ec26 sd s1,24(sp) - 4e06: 892a mv s2,a0 - while (*p) - 4e08: c7b5 beqz a5,4e74 - const char *p = s; - 4e0a: 87ae mv a5,a1 - while (*p) - 4e0c: 0017c703 lbu a4,1(a5) - p++; - 4e10: 0785 addi a5,a5,1 - while (*p) - 4e12: ff6d bnez a4,4e0c - return (size_t)(p - s); - 4e14: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 4e18: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 4e1a: e609 bnez a2,4e24 - 4e1c: a0a1 j 4e64 - dst_len++; - 4e1e: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 4e20: 04860263 beq a2,s0,4e64 - 4e24: 00890533 add a0,s2,s0 - 4e28: 00054783 lbu a5,0(a0) - 4e2c: fbed bnez a5,4e1e - - if (dst_len == size) - 4e2e: 02860b63 beq a2,s0,4e64 - 4e32: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 4e34: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e38: 89a6 mv s3,s1 - 4e3a: 02f4f263 bgeu s1,a5,4e5e - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 4e3e: 994e add s2,s2,s3 - 4e40: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 4e42: 864e mv a2,s3 - 4e44: cadff0ef jal 4af0 - dst[dst_len + copy_len] = '\0'; - 4e48: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x688> - - return dst_len + src_len; - 4e4c: 00940533 add a0,s0,s1 -} - 4e50: 70a2 ld ra,40(sp) - 4e52: 7402 ld s0,32(sp) - return dst_len + src_len; - 4e54: 69a2 ld s3,8(sp) -} - 4e56: 64e2 ld s1,24(sp) - 4e58: 6942 ld s2,16(sp) - 4e5a: 6145 addi sp,sp,48 - 4e5c: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e5e: fff78993 addi s3,a5,-1 - 4e62: bff1 j 4e3e -} - 4e64: 70a2 ld ra,40(sp) - 4e66: 7402 ld s0,32(sp) - 4e68: 6942 ld s2,16(sp) - return size + src_len; - 4e6a: 00960533 add a0,a2,s1 -} - 4e6e: 64e2 ld s1,24(sp) - 4e70: 6145 addi sp,sp,48 - 4e72: 8082 ret - while (*p) - 4e74: 4481 li s1,0 - 4e76: b74d j 4e18 - -0000000000004e78 : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 4e78: 00054683 lbu a3,0(a0) - 4e7c: c695 beqz a3,4ea8 - { - for (a = accept; *a; a++) - 4e7e: 0005c803 lbu a6,0(a1) - 4e82: 862a mv a2,a0 - 4e84: 00080f63 beqz a6,4ea2 - 4e88: 87ae mv a5,a1 - 4e8a: 8742 mv a4,a6 - 4e8c: a021 j 4e94 - 4e8e: 0007c703 lbu a4,0(a5) - 4e92: cb01 beqz a4,4ea2 - 4e94: 0785 addi a5,a5,1 - { - if (*p == *a) - 4e96: fee69ce3 bne a3,a4,4e8e - while (*p) - 4e9a: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 4e9e: 0605 addi a2,a2,1 - while (*p) - 4ea0: f6e5 bnez a3,4e88 - } - return (size_t)(p - s); - 4ea2: 40a60533 sub a0,a2,a0 - 4ea6: 8082 ret - while (*p) - 4ea8: 4501 li a0,0 -} - 4eaa: 8082 ret - -0000000000004eac : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 4eac: 00054683 lbu a3,0(a0) - 4eb0: ce85 beqz a3,4ee8 - { - for (r = reject; *r; r++) - 4eb2: 0005c803 lbu a6,0(a1) - const char *p = s; - 4eb6: 862a mv a2,a0 - for (r = reject; *r; r++) - 4eb8: 02080363 beqz a6,4ede - 4ebc: 87ae mv a5,a1 - 4ebe: 8742 mv a4,a6 - 4ec0: a021 j 4ec8 - 4ec2: 0007c703 lbu a4,0(a5) - 4ec6: c719 beqz a4,4ed4 - 4ec8: 0785 addi a5,a5,1 - { - if (*p == *r) - 4eca: fed71ce3 bne a4,a3,4ec2 - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 4ece: 40a60533 sub a0,a2,a0 - 4ed2: 8082 ret - while (*p) - 4ed4: 00164683 lbu a3,1(a2) - p++; - 4ed8: 0605 addi a2,a2,1 - while (*p) - 4eda: f2ed bnez a3,4ebc - 4edc: bfcd j 4ece - 4ede: 00164683 lbu a3,1(a2) - p++; - 4ee2: 0605 addi a2,a2,1 - while (*p) - 4ee4: feed bnez a3,4ede - 4ee6: b7e5 j 4ece - 4ee8: 4501 li a0,0 -} - 4eea: 8082 ret - -0000000000004eec : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 4eec: 00054683 lbu a3,0(a0) - 4ef0: c295 beqz a3,4f14 - { - for (a = accept; *a; a++) - 4ef2: 0005c603 lbu a2,0(a1) - 4ef6: c20d beqz a2,4f18 - 4ef8: 87ae mv a5,a1 - 4efa: 8732 mv a4,a2 - 4efc: a021 j 4f04 - 4efe: 0007c703 lbu a4,0(a5) - 4f02: c709 beqz a4,4f0c - 4f04: 0785 addi a5,a5,1 - { - if (*s == *a) - 4f06: fed71ce3 bne a4,a3,4efe - return (char *)s; - } - s++; - } - return NULL; -} - 4f0a: 8082 ret - while (*s) - 4f0c: 00154683 lbu a3,1(a0) - s++; - 4f10: 0505 addi a0,a0,1 - while (*s) - 4f12: f2fd bnez a3,4ef8 - return NULL; - 4f14: 4501 li a0,0 -} - 4f16: 8082 ret - while (*s) - 4f18: 00154683 lbu a3,1(a0) - s++; - 4f1c: 0505 addi a0,a0,1 - while (*s) - 4f1e: feed bnez a3,4f18 - 4f20: bfd5 j 4f14 - -0000000000004f22 : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 4f22: 00003897 auipc a7,0x3 - 4f26: 94e88893 addi a7,a7,-1714 # 7870 - 4f2a: cd25 beqz a0,4fa2 - while (*p) - 4f2c: 00054683 lbu a3,0(a0) - 4f30: c295 beqz a3,4f54 - for (a = accept; *a; a++) - 4f32: 0005c803 lbu a6,0(a1) - 4f36: 02080463 beqz a6,4f5e - 4f3a: 87ae mv a5,a1 - 4f3c: 8742 mv a4,a6 - 4f3e: a021 j 4f46 - 4f40: 0007c703 lbu a4,0(a5) - 4f44: cf09 beqz a4,4f5e - 4f46: 0785 addi a5,a5,1 - if (*p == *a) - 4f48: fee69ce3 bne a3,a4,4f40 - while (*p) - 4f4c: 00154683 lbu a3,1(a0) - p++; - 4f50: 0505 addi a0,a0,1 - while (*p) - 4f52: f6e5 bnez a3,4f3a - 4f54: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 4f56: 00f8b023 sd a5,0(a7) - return NULL; - 4f5a: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 4f5c: 8082 ret - if (*str == '\0') - 4f5e: 00054603 lbu a2,0(a0) - 4f62: da6d beqz a2,4f54 - 4f64: 86aa mv a3,a0 - for (a = accept; *a; a++) - 4f66: 04080163 beqz a6,4fa8 - 4f6a: 8742 mv a4,a6 - 4f6c: 87ae mv a5,a1 - 4f6e: a021 j 4f76 - 4f70: 0007c703 lbu a4,0(a5) - 4f74: cb19 beqz a4,4f8a - 4f76: 0785 addi a5,a5,1 - if (*s == *a) - 4f78: fee61ce3 bne a2,a4,4f70 - olds = str + 1; - 4f7c: 00168793 addi a5,a3,1 - *str = '\0'; - 4f80: 00068023 sb zero,0(a3) - olds = str; - 4f84: 00f8b023 sd a5,0(a7) -} - 4f88: 8082 ret - while (*s) - 4f8a: 0016c603 lbu a2,1(a3) - s++; - 4f8e: 0685 addi a3,a3,1 - while (*s) - 4f90: fe69 bnez a2,4f6a - 4f92: 87aa mv a5,a0 - while (*s != (char)c) - 4f94: 0017c703 lbu a4,1(a5) - if (!*s++) - 4f98: 0785 addi a5,a5,1 - while (*s != (char)c) - 4f9a: ff6d bnez a4,4f94 - olds = str; - 4f9c: 00f8b023 sd a5,0(a7) -} - 4fa0: 8082 ret - str = olds; - 4fa2: 0008b503 ld a0,0(a7) - 4fa6: b759 j 4f2c - while (*s) - 4fa8: 0016c603 lbu a2,1(a3) - s++; - 4fac: 0685 addi a3,a3,1 - while (*s) - 4fae: fe6d bnez a2,4fa8 - 4fb0: b7cd j 4f92 - -0000000000004fb2 : - -char *strerror(int errnum) -{ - 4fb2: 87aa mv a5,a0 - - switch (errnum) - 4fb4: cd09 beqz a0,4fce - 4fb6: 4731 li a4,12 - 4fb8: 00000517 auipc a0,0x0 - 4fbc: 1b050513 addi a0,a0,432 # 5168 <_GLOBAL__sub_I__ZSt3cin+0x178> - 4fc0: 00e78b63 beq a5,a4,4fd6 - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 4fc4: 00000517 auipc a0,0x0 - 4fc8: 1b450513 addi a0,a0,436 # 5178 <_GLOBAL__sub_I__ZSt3cin+0x188> - 4fcc: 8082 ret - return "Success"; - 4fce: 00000517 auipc a0,0x0 - 4fd2: 19250513 addi a0,a0,402 # 5160 <_GLOBAL__sub_I__ZSt3cin+0x170> - } - 4fd6: 8082 ret - -0000000000004fd8 <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 4fd8: cf6ff06f j 44ce - -0000000000004fdc <_Znam>: -} - -void *operator new[](unsigned long n) - 4fdc: cf2ff06f j 44ce - -0000000000004fe0 <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 4fe0: c78ff06f j 4458 - -0000000000004fe4 <_ZdaPv>: -} - -void operator delete[](void *p) - 4fe4: c74ff06f j 4458 - -0000000000004fe8 <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 4fe8: c70ff06f j 4458 - -0000000000004fec <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 4fec: c6cff06f j 4458 - -0000000000004ff0 <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 4ff0: 00002797 auipc a5,0x2 - 4ff4: 7307b783 ld a5,1840(a5) # 7720 <_GLOBAL_OFFSET_TABLE_+0x10> - 4ff8: 6390 ld a2,0(a5) - ostream cout(stdout); - 4ffa: 00002797 auipc a5,0x2 - 4ffe: 71e7b783 ld a5,1822(a5) # 7718 <_GLOBAL_OFFSET_TABLE_+0x8> - 5002: 6394 ld a3,0(a5) - ostream cerr(stderr); - 5004: 00002797 auipc a5,0x2 - 5008: 7247b783 ld a5,1828(a5) # 7728 <_GLOBAL_OFFSET_TABLE_+0x18> - 500c: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 500e: 00003797 auipc a5,0x3 - 5012: 86a78793 addi a5,a5,-1942 # 7878 <_ZSt3cin> - 5016: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 5018: e794 sd a3,8(a5) - 501a: eb98 sd a4,16(a5) -} // namespace std - 501c: 8082 ret diff --git a/build/user/init.o b/build/user/init.o deleted file mode 100644 index 04c258f..0000000 Binary files a/build/user/init.o and /dev/null differ diff --git a/build/user/init.sym b/build/user/init.sym deleted file mode 100644 index 4403477..0000000 --- a/build/user/init.sym +++ /dev/null @@ -1,189 +0,0 @@ -0000000000000000 .text -0000000000005020 .rodata -0000000000005890 .eh_frame -0000000000006990 .data -0000000000007710 .got -0000000000007730 .got.plt -0000000000007740 .init_array -0000000000007748 .bss -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_loclists -0000000000000000 .debug_aranges -0000000000000000 .debug_rnglists -0000000000000000 .debug_line -0000000000000000 .debug_str -0000000000000000 .debug_line_str -0000000000000000 .comment -0000000000000000 .riscv.attributes -0000000000000000 init.cc -0000000000000000 entry.o -0000000000000000 usys.o -0000000000000000 stdio.c -0000000000000190 stbsp__clamp_callback -00000000000001de stbsp__count_clamp_callback -00000000000001ea stbsp__real_to_str -00000000000008be _in_char.part.0 -0000000000000904 _skip_space -0000000000000978 _vscanf_core.constprop.0 -00000000000011e8 _out_char -000000000000305c _vprintf_core.constprop.0.isra.0 -0000000000006990 stbsp__digitpair -0000000000006a5c stbsp__period -0000000000006a5d stbsp__comma -0000000000006a60 hexu.1 -0000000000006a78 hex.0 -0000000000006a90 _stderr -0000000000006eb0 _stdout -00000000000072d0 _stdin -00000000000053f8 stbsp__bot -00000000000054b0 stbsp__negbot -0000000000005560 stbsp__negboterr -0000000000005610 stbsp__negtop -0000000000005678 stbsp__negtoperr -00000000000056e0 stbsp__top -0000000000005748 stbsp__toperr -00000000000057b0 stbsp__powten -0000000000000000 stdlib.c -000000000000426a strtoull.part.0 -0000000000007708 next -0000000000007754 __atexit_func_count -0000000000007758 __atexit_funcs -0000000000007858 freep -0000000000007860 base -0000000000000000 string.c -0000000000007870 olds.0 -0000000000000000 cxx.cc -0000000000000000 iostream.cpp -0000000000004ff0 _GLOBAL__sub_I__ZSt3cin -0000000000007710 _GLOBAL_OFFSET_TABLE_ -0000000000004b8a strcpy -00000000000038fa printf -00000000000076f0 stdout -0000000000005854 STDOUT_FD -0000000000004240 ungetc -0000000000004fb2 strerror -0000000000004af0 memmove -00000000000038a4 snprintf -0000000000000118 mknod -0000000000004742 atol -0000000000004450 getenv -0000000000004fd8 _Znwm -0000000000007750 errno -00000000000049a2 labs -000000000000491c bsearch -0000000000000150 getpid -000000000000483e qsort -0000000000003b38 fscanf -0000000000003daa fgets -0000000000007888 _ZSt4cerr -0000000000004b2c memcpy -0000000000004454 system -0000000000004220 feof -00000000000044ce malloc -0000000000000160 sleep -000000000000385a vsnprintf -000000000000465e strtoll -0000000000004708 strtoul -0000000000004a54 wctomb -0000000000004aa0 wcstombs -0000000000003ac2 fflush -0000000000004a62 mbstowcs -0000000000000180 lseek -0000000000004fe0 _ZdlPv -0000000000004444 abort -000000000000472c strtol -00000000000000e0 pipe -0000000000004a22 mblen -0000000000004cde strrchr -0000000000004594 calloc -000000000000474e strtod -0000000000000178 disk_test -00000000000000f0 write -0000000000004828 atof -0000000000000128 fstat -0000000000003b06 fprintf -0000000000000100 kill -0000000000004bce strcat -0000000000000140 chdir -0000000000004128 fseek -0000000000002ff8 stbsp_vsprintf -0000000000000108 exec -0000000000004b52 memchr -00000000000076f8 stdin -00000000000000d8 wait -0000000000002f12 stbsp_vsnprintf -00000000000000be _start -000000000000422a ferror -0000000000004cf6 strstr -00000000000049ec rand -00000000000000e8 read -0000000000004da2 strlcpy -0000000000004c7e strncmp -00000000000012bc stbsp_set_separators -0000000000004fe8 _ZdlPvm -0000000000004b9c strncpy -0000000000000120 unlink -00000000000045dc realloc -0000000000004f22 strtok -0000000000004b2e memcmp -00000000000000d0 fork -0000000000003934 sscanf -0000000000004c00 strncat -0000000000003e86 fread -0000000000000158 sbrk -0000000000004d5e strdup -0000000000000168 uptime -000000000000463a strtoull -0000000000002ee8 stbsp_sprintf -0000000000003996 fopen -0000000000004ad8 memset -0000000000000000 main -000000000000419c ftell -0000000000004a14 srand -0000000000004df8 strlcat -0000000000004234 clearerr -0000000000004fe4 _ZdaPv -0000000000003a5a fclose -0000000000000170 putc -0000000000004c46 strcmp -0000000000000188 shutdown -0000000000000148 dup -0000000000003d14 fgetc -0000000000003006 sprintf -000000000000482c strtof -00000000000043ea atexit -0000000000004eac strcspn -0000000000002fd8 stbsp_snprintf -0000000000007878 _ZSt3cin -0000000000003964 scanf -0000000000007700 stderr -00000000000049cc ldiv -0000000000003b6a fputc -0000000000004fdc _Znam -00000000000049dc lldiv -0000000000003fa0 fwrite -00000000000041c8 rewind -0000000000007880 _ZSt4cout -0000000000000130 link -000000000000440e exit -00000000000000c8 sys_exit -00000000000049ac llabs -000000000000472e atoi -0000000000005850 STDERR_FD -0000000000004e78 strspn -0000000000004b70 strlen -00000000000012ce stbsp_vsprintfcb -0000000000000110 open -0000000000005858 STDIN_FD -0000000000004748 atoll -00000000000049b6 div -0000000000004998 abs -0000000000004cc6 strchr -0000000000003c2e fputs -0000000000004fec _ZdaPvm -0000000000000138 mkdir -00000000000000f8 close -0000000000004a36 mbtowc -0000000000004eec strpbrk -0000000000004458 free diff --git a/build/user/initcode b/build/user/initcode deleted file mode 100755 index f2b655a..0000000 Binary files a/build/user/initcode and /dev/null differ diff --git a/build/user/initcode.asm b/build/user/initcode.asm deleted file mode 100644 index 2434bbb..0000000 --- a/build/user/initcode.asm +++ /dev/null @@ -1,10687 +0,0 @@ - -build/user/initcode.out: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000000000000
: -#include "ulib/string.h" -#include "user/user.h" -#include "drivers/uart_color.h" - -int main() -{ - 0: 715d addi sp,sp,-80 - char *argv[] = {(char *)"sh", 0}; - 2: 00005797 auipc a5,0x5 - 6: 01e78793 addi a5,a5,30 # 5020 <_GLOBAL__sub_I__ZSt3cin+0x30> - - printf(ANSI_BLUE"\n[Init] Starting Lume OS Shell..."ANSI_RESET); - a: 00005517 auipc a0,0x5 - e: 01e50513 addi a0,a0,30 # 5028 <_GLOBAL__sub_I__ZSt3cin+0x38> -{ - 12: e486 sd ra,72(sp) - 14: fc26 sd s1,56(sp) - 16: f84a sd s2,48(sp) - 18: f44e sd s3,40(sp) - 1a: f052 sd s4,32(sp) - char *argv[] = {(char *)"sh", 0}; - 1c: e83e sd a5,16(sp) -{ - 1e: e0a2 sd s0,64(sp) - char *argv[] = {(char *)"sh", 0}; - 20: ec02 sd zero,24(sp) - printf(ANSI_BLUE"\n[Init] Starting Lume OS Shell..."ANSI_RESET); - 22: 0d9030ef jal 38fa - printf("\n"); - 26: 00005517 auipc a0,0x5 - 2a: 03250513 addi a0,a0,50 # 5058 <_GLOBAL__sub_I__ZSt3cin+0x68> - 2e: 0cd030ef jal 38fa - 32: 0024 addi s1,sp,8 - int pid = fork(); - // printf("fork suceess, pid=%i\n", pid); - - if (pid < 0) - { - printf("[Init] fork failed!\n"); - 34: 00005a17 auipc s4,0x5 - 38: 02ca0a13 addi s4,s4,44 # 5060 <_GLOBAL__sub_I__ZSt3cin+0x70> - printf("Shell Exit"); - break; - } - if (wpid < 0) - { - printf("[Init] wait error or no child\n"); - 3c: 00005997 auipc s3,0x5 - 40: 06498993 addi s3,s3,100 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xb0> - printf("Shell Exit"); - 44: 00005917 auipc s2,0x5 - 48: 04c90913 addi s2,s2,76 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xa0> - int pid = fork(); - 4c: 084000ef jal d0 - 50: 842a mv s0,a0 - if (pid < 0) - 52: 02054363 bltz a0,78 - if (pid == 0) - 56: e501 bnez a0,5e - 58: a81d j 8e - if (wpid < 0) - 5a: 02054663 bltz a0,86 - wpid = wait((uint64)&status); - 5e: 8526 mv a0,s1 - 60: 078000ef jal d8 - if (wpid == pid) - 64: fea41be3 bne s0,a0,5a - printf("Shell Exit"); - 68: 854a mv a0,s2 - 6a: 091030ef jal 38fa - int pid = fork(); - 6e: 062000ef jal d0 - 72: 842a mv s0,a0 - if (pid < 0) - 74: fe0551e3 bgez a0,56 - printf("[Init] fork failed!\n"); - 78: 8552 mv a0,s4 - 7a: 081030ef jal 38fa - exit(1); - 7e: 4505 li a0,1 - 80: 38e040ef jal 440e - if (pid == 0) - 84: bfe9 j 5e - printf("[Init] wait error or no child\n"); - 86: 854e mv a0,s3 - 88: 073030ef jal 38fa - - break; - } - } - } - } - 8c: b7c1 j 4c - char sh_path[] = "/sh"; - 8e: 006877b7 lui a5,0x687 - 92: 32f78793 addi a5,a5,815 # 68732f <_ZSt4cerr+0x67faa7> - exec(sh_path, argv); - 96: 080c addi a1,sp,16 - 98: 8526 mv a0,s1 - char sh_path[] = "/sh"; - 9a: c43e sw a5,8(sp) - exec(sh_path, argv); - 9c: 06c000ef jal 108 - printf("[Init] exec sh failed\n"); - a0: 00005517 auipc a0,0x5 - a4: fd850513 addi a0,a0,-40 # 5078 <_GLOBAL__sub_I__ZSt3cin+0x88> - a8: 053030ef jal 38fa - return 0; - ac: 60a6 ld ra,72(sp) - ae: 6406 ld s0,64(sp) - b0: 74e2 ld s1,56(sp) - b2: 7942 ld s2,48(sp) - b4: 79a2 ld s3,40(sp) - b6: 7a02 ld s4,32(sp) - b8: 4501 li a0,0 - ba: 6161 addi sp,sp,80 - bc: 8082 ret - -00000000000000be <_start>: -.global _start - -_start: - - - call main - be: f43ff0ef jal 0
- - call exit - c2: 34c040ef jal 440e - - c6: a001 j c6 <_start+0x8> - -00000000000000c8 : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - c8: 488d li a7,3 - ca: 00000073 ecall - ce: 8082 ret - -00000000000000d0 : - -SYSCALL(fork) - d0: 4889 li a7,2 - d2: 00000073 ecall - d6: 8082 ret - -00000000000000d8 : -SYSCALL(wait) - d8: 4891 li a7,4 - da: 00000073 ecall - de: 8082 ret - -00000000000000e0 : -SYSCALL(pipe) - e0: 4895 li a7,5 - e2: 00000073 ecall - e6: 8082 ret - -00000000000000e8 : -SYSCALL(read) - e8: 4899 li a7,6 - ea: 00000073 ecall - ee: 8082 ret - -00000000000000f0 : -SYSCALL(write) - f0: 48c5 li a7,17 - f2: 00000073 ecall - f6: 8082 ret - -00000000000000f8 : -SYSCALL(close) - f8: 48d9 li a7,22 - fa: 00000073 ecall - fe: 8082 ret - -0000000000000100 : -SYSCALL(kill) - 100: 489d li a7,7 - 102: 00000073 ecall - 106: 8082 ret - -0000000000000108 : -SYSCALL(exec) - 108: 48a1 li a7,8 - 10a: 00000073 ecall - 10e: 8082 ret - -0000000000000110 : -SYSCALL(open) - 110: 48c1 li a7,16 - 112: 00000073 ecall - 116: 8082 ret - -0000000000000118 : -SYSCALL(mknod) - 118: 48c9 li a7,18 - 11a: 00000073 ecall - 11e: 8082 ret - -0000000000000120 : -SYSCALL(unlink) - 120: 48cd li a7,19 - 122: 00000073 ecall - 126: 8082 ret - -0000000000000128 : -SYSCALL(fstat) - 128: 48a5 li a7,9 - 12a: 00000073 ecall - 12e: 8082 ret - -0000000000000130 : -SYSCALL(link) - 130: 48d1 li a7,20 - 132: 00000073 ecall - 136: 8082 ret - -0000000000000138 : -SYSCALL(mkdir) - 138: 48d5 li a7,21 - 13a: 00000073 ecall - 13e: 8082 ret - -0000000000000140 : -SYSCALL(chdir) - 140: 48a9 li a7,10 - 142: 00000073 ecall - 146: 8082 ret - -0000000000000148 : -SYSCALL(dup) - 148: 48ad li a7,11 - 14a: 00000073 ecall - 14e: 8082 ret - -0000000000000150 : -SYSCALL(getpid) - 150: 48b1 li a7,12 - 152: 00000073 ecall - 156: 8082 ret - -0000000000000158 : -SYSCALL(sbrk) - 158: 48b5 li a7,13 - 15a: 00000073 ecall - 15e: 8082 ret - -0000000000000160 : -SYSCALL(sleep) - 160: 48b9 li a7,14 - 162: 00000073 ecall - 166: 8082 ret - -0000000000000168 : -SYSCALL(uptime) - 168: 48bd li a7,15 - 16a: 00000073 ecall - 16e: 8082 ret - -0000000000000170 : -SYSCALL(putc) - 170: 4885 li a7,1 - 172: 00000073 ecall - 176: 8082 ret - -0000000000000178 : -SYSCALL(disk_test) - 178: 48dd li a7,23 - 17a: 00000073 ecall - 17e: 8082 ret - -0000000000000180 : -SYSCALL(lseek) - 180: 48e1 li a7,24 - 182: 00000073 ecall - 186: 8082 ret - -0000000000000188 : - 188: 48e5 li a7,25 - 18a: 00000073 ecall - 18e: 8082 ret - -0000000000000190 : - 190: 45dc lw a5,12(a1) - 192: 4598 lw a4,8(a1) - 194: 9fb1 addw a5,a5,a2 - 196: c5dc sw a5,12(a1) - 198: 0007069b sext.w a3,a4 - 19c: 00e65463 bge a2,a4,1a4 - 1a0: 0006069b sext.w a3,a2 - 1a4: c685 beqz a3,1cc - 1a6: 619c ld a5,0(a1) - 1a8: 00a78e63 beq a5,a0,1c4 - 1ac: 00d50633 add a2,a0,a3 - 1b0: 00054703 lbu a4,0(a0) - 1b4: 0505 addi a0,a0,1 - 1b6: 0785 addi a5,a5,1 - 1b8: fee78fa3 sb a4,-1(a5) - 1bc: fec56ae3 bltu a0,a2,1b0 - 1c0: 6188 ld a0,0(a1) - 1c2: 4598 lw a4,8(a1) - 1c4: 9f15 subw a4,a4,a3 - 1c6: 9536 add a0,a0,a3 - 1c8: e188 sd a0,0(a1) - 1ca: c598 sw a4,8(a1) - 1cc: 1ff00793 li a5,511 - 1d0: 00e7d463 bge a5,a4,1d8 - 1d4: 6188 ld a0,0(a1) - 1d6: 8082 ret - 1d8: 01058513 addi a0,a1,16 - 1dc: 8082 ret - -00000000000001de : - 1de: 45dc lw a5,12(a1) - 1e0: 01058513 addi a0,a1,16 - 1e4: 9fb1 addw a5,a5,a2 - 1e6: c5dc sw a5,12(a1) - 1e8: 8082 ret - -00000000000001ea : - 1ea: e20508d3 fmv.x.d a7,fa0 - 1ee: 82aa mv t0,a0 - 1f0: 4348d813 srai a6,a7,0x34 - 1f4: 8ec6 mv t4,a7 - 1f6: 7ff87813 andi a6,a6,2047 - 1fa: 8346 mv t1,a7 - 1fc: 03f8d513 srli a0,a7,0x3f - 200: 0008d663 bgez a7,20c - 204: 22a517d3 fneg.d fa5,fa0 - 208: e20788d3 fmv.x.d a7,fa5 - 20c: 7ff00e13 li t3,2047 - 210: 35c80663 beq a6,t3,55c - 214: 1101 addi sp,sp,-32 - 216: 14080363 beqz a6,35c - 21a: c018081b addiw a6,a6,-1023 - 21e: ec22 sd s0,24(sp) - 220: 02081313 slli t1,a6,0x20 - 224: 66034d63 bltz t1,89e - 228: 4d100313 li t1,1233 - 22c: 0303033b mulw t1,t1,a6 - 230: 4849 li a6,18 - 232: 40c3531b sraiw t1,t1,0xc - 236: 0013039b addiw t2,t1,1 - 23a: 4078083b subw a6,a6,t2 - 23e: 4359 li t1,22 - 240: 17036163 bltu t1,a6,3a2 - 244: 00005317 auipc t1,0x5 - 248: 1b430313 addi t1,t1,436 # 53f8 - 24c: 080e slli a6,a6,0x3 - 24e: 981a add a6,a6,t1 - 250: 00083e03 ld t3,0(a6) - 254: 00083607 fld fa2,0(a6) - 258: f20887d3 fmv.d.x fa5,a7 - 25c: f8000837 lui a6,0xf8000 - 260: 01187333 and t1,a6,a7 - 264: 01c87833 and a6,a6,t3 - 268: 12f676d3 fmul.d fa3,fa2,fa5 - 26c: f20807d3 fmv.d.x fa5,a6 - 270: f2030753 fmv.d.x fa4,t1 - 274: f20305d3 fmv.d.x fa1,t1 - 278: 0af67653 fsub.d fa2,fa2,fa5 - 27c: f20887d3 fmv.d.x fa5,a7 - 280: 0ae7f753 fsub.d fa4,fa5,fa4 - 284: f20807d3 fmv.d.x fa5,a6 - 288: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 28c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 290: f20805d3 fmv.d.x fa1,a6 - 294: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 298: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 29c: 02d777d3 fadd.d fa5,fa4,fa3 - 2a0: 3782e837 lui a6,0x3782e - 2a4: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826247> - 2a8: 0832 slli a6,a6,0xc - 2aa: 9d980813 addi a6,a6,-1575 - 2ae: 084a slli a6,a6,0x12 - 2b0: 187d addi a6,a6,-1 - 2b2: c22798d3 fcvt.l.d a7,fa5,rtz - 2b6: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 2ba: 00070e1b sext.w t3,a4 - 2be: d228f653 fcvt.d.l fa2,a7 - 2c2: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 2c6: 0ad77753 fsub.d fa4,fa4,fa3 - 2ca: 0af5f6d3 fsub.d fa3,fa1,fa5 - 2ce: 0ad5f553 fsub.d fa0,fa1,fa3 - 2d2: 02d67653 fadd.d fa2,fa2,fa3 - 2d6: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 2da: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 2de: 02b7f7d3 fadd.d fa5,fa5,fa1 - 2e2: 02e7f7d3 fadd.d fa5,fa5,fa4 - 2e6: c2279fd3 fcvt.l.d t6,fa5,rtz - 2ea: 9fc6 add t6,t6,a7 - 2ec: 19f87063 bgeu a6,t6,46c - 2f0: 2385 addiw t2,t2,1 - 2f2: 300e4363 bltz t3,5f8 - 2f6: 00e3833b addw t1,t2,a4 - 2fa: 475d li a4,23 - 2fc: 30677663 bgeu a4,t1,608 - 300: 577d li a4,-1 - 302: 9301 srli a4,a4,0x20 - 304: 43f75863 bge a4,t6,734 - 308: 07d00313 li t1,125 - 30c: 877e mv a4,t6 - 30e: 4e01 li t3,0 - 310: 3e800813 li a6,1000 - 314: 130e slli t1,t1,0x23 - 316: a039 j 324 - 318: 030747b3 div a5,a4,a6 - 31c: 4e05 li t3,1 - 31e: 40674c63 blt a4,t1,736 - 322: 873e mv a4,a5 - 324: 030768b3 rem a7,a4,a6 - 328: fe0888e3 beqz a7,318 - 32c: 400e0163 beqz t3,72e - 330: 8fbe mv t6,a5 - 332: 05f5e7b7 lui a5,0x5f5e - 336: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 33a: 04060413 addi s0,a2,64 - 33e: 03860613 addi a2,a2,56 - 342: 15f7c863 blt a5,t6,492 - 346: 000f871b sext.w a4,t6 - 34a: 20070463 beqz a4,552 - 34e: 4f01 li t5,0 - 350: 4f81 li t6,0 - 352: 00006e97 auipc t4,0x6 - 356: 63ee8e93 addi t4,t4,1598 # 6990 - 35a: aaa9 j 4b4 - 35c: 0306 slli t1,t1,0x1 - 35e: 3e030e63 beqz t1,75a - 362: 4305 li t1,1 - 364: ec22 sd s0,24(sp) - 366: 00ce9e13 slli t3,t4,0xc - 36a: 134e slli t1,t1,0x33 - 36c: 520e4063 bltz t3,88c - 370: 40135313 srai t1,t1,0x1 - 374: 01d37e33 and t3,t1,t4 - 378: 8f42 mv t5,a6 - 37a: 387d addiw a6,a6,-1 - 37c: fe0e0ae3 beqz t3,370 - 380: 26900313 li t1,617 - 384: c00f081b addiw a6,t5,-1024 - 388: 0268083b mulw a6,a6,t1 - 38c: 41f8531b sraiw t1,a6,0x1f - 390: 0153531b srliw t1,t1,0x15 - 394: 0103033b addw t1,t1,a6 - 398: 40b3539b sraiw t2,t1,0xb - 39c: 4849 li a6,18 - 39e: 4078083b subw a6,a6,t2 - 3a2: 41f8531b sraiw t1,a6,0x1f - 3a6: 00684eb3 xor t4,a6,t1 - 3aa: 406e8f3b subw t5,t4,t1 - 3ae: 2c900313 li t1,713 - 3b2: 03e3033b mulw t1,t1,t5 - 3b6: 4e35 li t3,13 - 3b8: 8efa mv t4,t5 - 3ba: 40e35f9b sraiw t6,t1,0xe - 3be: 837e mv t1,t6 - 3c0: 23fe4363 blt t3,t6,5e6 - 3c4: 5e25 li t3,-23 - 3c6: 026e0e3b mulw t3,t3,t1 - 3ca: 01de0ebb addw t4,t3,t4 - 3ce: 22084f63 bltz a6,60c - 3d2: f2000753 fmv.d.x fa4,zero - 3d6: 00005e17 auipc t3,0x5 - 3da: 022e0e13 addi t3,t3,34 # 53f8 - 3de: 380e9e63 bnez t4,77a - 3e2: f20887d3 fmv.d.x fa5,a7 - 3e6: fff30f1b addiw t5,t1,-1 - 3ea: 0f0e slli t5,t5,0x3 - 3ec: 02f777d3 fadd.d fa5,fa4,fa5 - 3f0: 030e slli t1,t1,0x3 - 3f2: 9f72 add t5,t5,t3 - 3f4: 9e1a add t3,t3,t1 - 3f6: 2e0e3e03 ld t3,736(t3) - 3fa: 2e8f3587 fld fa1,744(t5) - 3fe: f8000837 lui a6,0xf8000 - 402: e2078ed3 fmv.x.d t4,fa5 - 406: 12b7f6d3 fmul.d fa3,fa5,fa1 - 40a: f2088653 fmv.d.x fa2,a7 - 40e: 01d87333 and t1,a6,t4 - 412: 01c87833 and a6,a6,t3 - 416: f20807d3 fmv.d.x fa5,a6 - 41a: f2030053 fmv.d.x ft0,t1 - 41e: 0af5f553 fsub.d fa0,fa1,fa5 - 422: f20e87d3 fmv.d.x fa5,t4 - 426: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 42a: f20807d3 fmv.d.x fa5,a6 - 42e: f2030653 fmv.d.x fa2,t1 - 432: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 436: f20e87d3 fmv.d.x fa5,t4 - 43a: 0a177753 fsub.d fa4,fa4,ft1 - 43e: f20300d3 fmv.d.x ft1,t1 - 442: 0a07f7d3 fsub.d fa5,fa5,ft0 - 446: 350f3007 fld ft0,848(t5) - 44a: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 44e: 12b77753 fmul.d fa4,fa4,fa1 - 452: f20805d3 fmv.d.x fa1,a6 - 456: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 45a: f20e85d3 fmv.d.x fa1,t4 - 45e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 462: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 466: 02e7f753 fadd.d fa4,fa5,fa4 - 46a: bd0d j 29c - 46c: 00e3833b addw t1,t2,a4 - 470: 2a0e4663 bltz t3,71c - 474: 475d li a4,23 - 476: 10677663 bgeu a4,t1,582 - 47a: e80f93e3 bnez t6,300 - 47e: 05f5e7b7 lui a5,0x5f5e - 482: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 486: 04060413 addi s0,a2,64 - 48a: 03860613 addi a2,a2,56 - 48e: ebf7dce3 bge a5,t6,346 - 492: 4f01 li t5,0 - 494: 00006e97 auipc t4,0x6 - 498: 4fce8e93 addi t4,t4,1276 # 6990 - 49c: 05f5e7b7 lui a5,0x5f5e - 4a0: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56878> - 4a4: 02ffe833 rem a6,t6,a5 - 4a8: 02ffcfb3 div t6,t6,a5 - 4ac: 0008071b sext.w a4,a6 - 4b0: 0a080463 beqz a6,558 - 4b4: 8822 mv a6,s0 - 4b6: 06400893 li a7,100 - 4ba: 06300e13 li t3,99 - 4be: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8776> - 4c0: 0007031b sext.w t1,a4 - 4c4: 031777bb remuw a5,a4,a7 - 4c8: 2785 addiw a5,a5,1 - 4ca: 0017979b slliw a5,a5,0x1 - 4ce: 1782 slli a5,a5,0x20 - 4d0: 9381 srli a5,a5,0x20 - 4d2: 97f6 add a5,a5,t4 - 4d4: 0007d783 lhu a5,0(a5) - 4d8: 0317573b divuw a4,a4,a7 - 4dc: 00f81023 sh a5,0(a6) - 4e0: fc6e6fe3 bltu t3,t1,4be - 4e4: 008f0f3b addw t5,t5,s0 - 4e8: 410f0f3b subw t5,t5,a6 - 4ec: 020f8f63 beqz t6,52a - 4f0: 87c2 mv a5,a6 - 4f2: 03000713 li a4,48 - 4f6: 04c80c63 beq a6,a2,54e - 4fa: 17fd addi a5,a5,-1 - 4fc: 00e78023 sb a4,0(a5) - 500: fec79de3 bne a5,a2,4fa - 504: 408807b3 sub a5,a6,s0 - 508: 00ff07bb addw a5,t5,a5 - 50c: 1461 addi s0,s0,-8 - 50e: 00878f1b addiw t5,a5,8 - 512: 05f5e7b7 lui a5,0x5f5e - 516: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - 51a: ff840613 addi a2,s0,-8 - 51e: f7f7cfe3 blt a5,t6,49c - 522: 000f871b sext.w a4,t6 - 526: 4f81 li t6,0 - 528: b771 j 4b4 - 52a: 020f0563 beqz t5,554 - 52e: 00084703 lbu a4,0(a6) - 532: 03000793 li a5,48 - 536: 22f70f63 beq a4,a5,774 - 53a: 2f01 sext.w t5,t5 - 53c: 0076a023 sw t2,0(a3) - 540: 6462 ld s0,24(sp) - 542: 0102b023 sd a6,0(t0) - 546: 01e5a023 sw t5,0(a1) - 54a: 6105 addi sp,sp,32 - 54c: 8082 ret - 54e: 8442 mv s0,a6 - 550: b7c9 j 512 - 552: 8822 mv a6,s0 - 554: 4f01 li t5,0 - 556: b7dd j 53c - 558: 8822 mv a6,s0 - 55a: bf59 j 4f0 - 55c: 0eb2 slli t4,t4,0xc - 55e: 00005797 auipc a5,0x5 - 562: b6a78793 addi a5,a5,-1174 # 50c8 <_GLOBAL__sub_I__ZSt3cin+0xd8> - 566: 000e8663 beqz t4,572 - 56a: 00005797 auipc a5,0x5 - 56e: b5678793 addi a5,a5,-1194 # 50c0 <_GLOBAL__sub_I__ZSt3cin+0xd0> - 572: 00f2b023 sd a5,0(t0) - 576: 679d lui a5,0x7 - 578: c29c sw a5,0(a3) - 57a: 4f0d li t5,3 - 57c: 01e5a023 sw t5,0(a1) - 580: 8082 ret - 582: 3b9ad737 lui a4,0x3b9ad - 586: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5177> - 58a: 07f76f63 bltu a4,t6,608 - 58e: 4805 li a6,1 - 590: 02081713 slli a4,a6,0x20 - 594: 01d75893 srli a7,a4,0x1d - 598: 00005717 auipc a4,0x5 - 59c: 21870713 addi a4,a4,536 # 57b0 - 5a0: 9746 add a4,a4,a7 - 5a2: 4e51 li t3,20 - 5a4: a021 j 5ac - 5a6: 2805 addiw a6,a6,1 - 5a8: edc809e3 beq a6,t3,47a - 5ac: 00073883 ld a7,0(a4) - 5b0: 0721 addi a4,a4,8 - 5b2: ff1ffae3 bgeu t6,a7,5a6 - 5b6: ed0372e3 bgeu t1,a6,47a - 5ba: 4068083b subw a6,a6,t1 - 5be: 475d li a4,23 - 5c0: eb076de3 bltu a4,a6,47a - 5c4: 080e slli a6,a6,0x3 - 5c6: 00005717 auipc a4,0x5 - 5ca: e3270713 addi a4,a4,-462 # 53f8 - 5ce: 9742 add a4,a4,a6 - 5d0: 3b873803 ld a6,952(a4) - 5d4: 00185713 srli a4,a6,0x1 - 5d8: 977e add a4,a4,t6 - 5da: 01176363 bltu a4,a7,5e0 - 5de: 2385 addiw t2,t2,1 - 5e0: 03075fb3 divu t6,a4,a6 - 5e4: bd59 j 47a - 5e6: 4335 li t1,13 - 5e8: 5e25 li t3,-23 - 5ea: 026e0e3b mulw t3,t3,t1 - 5ee: 01de0ebb addw t4,t3,t4 - 5f2: de0850e3 bgez a6,3d2 - 5f6: a819 j 60c - 5f8: 02571313 slli t1,a4,0x25 - 5fc: 02535313 srli t1,t1,0x25 - 600: 0305 addi t1,t1,1 - 602: 475d li a4,23 - 604: ce676ee3 bltu a4,t1,300 - 608: 4829 li a6,10 - 60a: b759 j 590 - 60c: 260e8663 beqz t4,878 - 610: 00231e13 slli t3,t1,0x2 - 614: 41c30e33 sub t3,t1,t3 - 618: 0e0e slli t3,t3,0x3 - 61a: 9e1a add t3,t3,t1 - 61c: fffe881b addiw a6,t4,-1 - 620: 9e7a add t3,t3,t5 - 622: 00005e97 auipc t4,0x5 - 626: dd6e8e93 addi t4,t4,-554 # 53f8 - 62a: 0e0e slli t3,t3,0x3 - 62c: 080e slli a6,a6,0x3 - 62e: 9876 add a6,a6,t4 - 630: 9ef2 add t4,t4,t3 - 632: 0b883607 fld fa2,184(a6) - 636: f20887d3 fmv.d.x fa5,a7 - 63a: 0b0ebf03 ld t5,176(t4) - 63e: f8000e37 lui t3,0xf8000 - 642: 011e7eb3 and t4,t3,a7 - 646: 12f676d3 fmul.d fa3,fa2,fa5 - 64a: 01ee7e33 and t3,t3,t5 - 64e: f20e07d3 fmv.d.x fa5,t3 - 652: f20e0753 fmv.d.x fa4,t3 - 656: f20e8553 fmv.d.x fa0,t4 - 65a: 0af67653 fsub.d fa2,fa2,fa5 - 65e: f20e87d3 fmv.d.x fa5,t4 - 662: f20e85d3 fmv.d.x fa1,t4 - 666: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 66a: f2088753 fmv.d.x fa4,a7 - 66e: 0ab775d3 fsub.d fa1,fa4,fa1 - 672: 16883707 fld fa4,360(a6) - 676: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 67a: f20e0553 fmv.d.x fa0,t3 - 67e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 682: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 686: f20887d3 fmv.d.x fa5,a7 - 68a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 68e: c00f87e3 beqz t6,29c - 692: 02d777d3 fadd.d fa5,fa4,fa3 - 696: fff3089b addiw a7,t1,-1 - 69a: 00005817 auipc a6,0x5 - 69e: d5e80813 addi a6,a6,-674 # 53f8 - 6a2: 030e slli t1,t1,0x3 - 6a4: 088e slli a7,a7,0x3 - 6a6: 98c2 add a7,a7,a6 - 6a8: 981a add a6,a6,t1 - 6aa: e2078e53 fmv.x.d t3,fa5 - 6ae: 21083e83 ld t4,528(a6) - 6b2: f8000837 lui a6,0xf8000 - 6b6: 2188b507 fld fa0,536(a7) - 6ba: 01c87333 and t1,a6,t3 - 6be: 01d87833 and a6,a6,t4 - 6c2: f2080653 fmv.d.x fa2,a6 - 6c6: 12f577d3 fmul.d fa5,fa0,fa5 - 6ca: 2808b587 fld fa1,640(a7) - 6ce: 0ac57053 fsub.d ft0,fa0,fa2 - 6d2: f20e0653 fmv.d.x fa2,t3 - 6d6: 0ad67153 fsub.d ft2,fa2,fa3 - 6da: f20806d3 fmv.d.x fa3,a6 - 6de: f2030653 fmv.d.x fa2,t1 - 6e2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 6e6: f20e06d3 fmv.d.x fa3,t3 - 6ea: 0ac6f653 fsub.d fa2,fa3,fa2 - 6ee: 22f786d3 fmv.d fa3,fa5 - 6f2: 0a2777d3 fsub.d fa5,fa4,ft2 - 6f6: f2030753 fmv.d.x fa4,t1 - 6fa: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 6fe: 12a7f7d3 fmul.d fa5,fa5,fa0 - 702: f2080553 fmv.d.x fa0,a6 - 706: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 70a: f20e0553 fmv.d.x fa0,t3 - 70e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 712: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 716: 02f67753 fadd.d fa4,fa2,fa5 - 71a: b649 j 29c - 71c: 02571313 slli t1,a4,0x25 - 720: 02535313 srli t1,t1,0x25 - 724: 0305 addi t1,t1,1 - 726: 475d li a4,23 - 728: d46769e3 bltu a4,t1,47a - 72c: bd99 j 582 - 72e: 87fe mv a5,t6 - 730: 8fbe mv t6,a5 - 732: b101 j 332 - 734: 87fe mv a5,t6 - 736: 3e800713 li a4,1000 - 73a: 02e7f73b remuw a4,a5,a4 - 73e: 2781 sext.w a5,a5 - 740: eb01 bnez a4,750 - 742: 3e800813 li a6,1000 - 746: 0307d7bb divuw a5,a5,a6 - 74a: 0307f73b remuw a4,a5,a6 - 74e: df65 beqz a4,746 - 750: 02079f93 slli t6,a5,0x20 - 754: 020fdf93 srli t6,t6,0x20 - 758: b31d j 47e - 75a: 4785 li a5,1 - 75c: c29c sw a5,0(a3) - 75e: 00c2b023 sd a2,0(t0) - 762: 03000793 li a5,48 - 766: 00f60023 sb a5,0(a2) - 76a: 4f05 li t5,1 - 76c: 01e5a023 sw t5,0(a1) - 770: 6105 addi sp,sp,32 - 772: 8082 ret - 774: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8779> - 776: 3f7d addiw t5,t5,-1 - 778: b3d1 j 53c - 77a: e826 sd s1,16(sp) - 77c: e44a sd s2,8(sp) - 77e: 4859 li a6,22 - 780: 8976 mv s2,t4 - 782: 11d84363 blt a6,t4,888 - 786: 0009049b sext.w s1,s2 - 78a: 00005e17 auipc t3,0x5 - 78e: c6ee0e13 addi t3,t3,-914 # 53f8 - 792: 00349813 slli a6,s1,0x3 - 796: 9872 add a6,a6,t3 - 798: 00083687 fld fa3,0(a6) - 79c: 00083803 ld a6,0(a6) - 7a0: f20887d3 fmv.d.x fa5,a7 - 7a4: f8000fb7 lui t6,0xf8000 - 7a8: 010ff833 and a6,t6,a6 - 7ac: 12f6f553 fmul.d fa0,fa3,fa5 - 7b0: f20807d3 fmv.d.x fa5,a6 - 7b4: 011ff433 and s0,t6,a7 - 7b8: f2040753 fmv.d.x fa4,s0 - 7bc: 0af6f6d3 fsub.d fa3,fa3,fa5 - 7c0: f20887d3 fmv.d.x fa5,a7 - 7c4: f2080653 fmv.d.x fa2,a6 - 7c8: 412e8ebb subw t4,t4,s2 - 7cc: 0ae7f753 fsub.d fa4,fa5,fa4 - 7d0: f20407d3 fmv.d.x fa5,s0 - 7d4: e20508d3 fmv.x.d a7,fa0 - 7d8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 7dc: f2040653 fmv.d.x fa2,s0 - 7e0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 7e4: f2080653 fmv.d.x fa2,a6 - 7e8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 7ec: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 7f0: 080e8963 beqz t4,882 - 7f4: 02e577d3 fadd.d fa5,fa0,fa4 - 7f8: 0e8e slli t4,t4,0x3 - 7fa: 01de0833 add a6,t3,t4 - 7fe: 00083587 fld fa1,0(a6) - 802: 00231893 slli a7,t1,0x2 - 806: 411308b3 sub a7,t1,a7 - 80a: 00389813 slli a6,a7,0x3 - 80e: e2078453 fmv.x.d s0,fa5 - 812: 12f5f7d3 fmul.d fa5,fa1,fa5 - 816: 981a add a6,a6,t1 - 818: 987a add a6,a6,t5 - 81a: 40980833 sub a6,a6,s1 - 81e: 080e slli a6,a6,0x3 - 820: 9872 add a6,a6,t3 - 822: 00083e83 ld t4,0(a6) - 826: 008ff833 and a6,t6,s0 - 82a: e20788d3 fmv.x.d a7,fa5 - 82e: f20806d3 fmv.d.x fa3,a6 - 832: f20407d3 fmv.d.x fa5,s0 - 836: 01dfffb3 and t6,t6,t4 - 83a: f20880d3 fmv.d.x ft1,a7 - 83e: 0ad7f653 fsub.d fa2,fa5,fa3 - 842: f20f87d3 fmv.d.x fa5,t6 - 846: 64c2 ld s1,16(sp) - 848: 6922 ld s2,8(sp) - 84a: 0af5f053 fsub.d ft0,fa1,fa5 - 84e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 852: f20407d3 fmv.d.x fa5,s0 - 856: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 85a: f2080553 fmv.d.x fa0,a6 - 85e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 862: 0af77753 fsub.d fa4,fa4,fa5 - 866: f20f87d3 fmv.d.x fa5,t6 - 86a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 86e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 872: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 876: b6b5 j 3e2 - 878: f20886d3 fmv.d.x fa3,a7 - 87c: f2000753 fmv.d.x fa4,zero - 880: b539 j 68e - 882: 64c2 ld s1,16(sp) - 884: 6922 ld s2,8(sp) - 886: beb1 j 3e2 - 888: 4959 li s2,22 - 88a: bdf5 j 786 - 88c: e826 sd s1,16(sp) - 88e: e44a sd s2,8(sp) - 890: ecc00393 li t2,-308 - 894: 4eed li t4,27 - 896: 4335 li t1,13 - 898: 14600f13 li t5,326 - 89c: b5cd j 77e - 89e: 26900313 li t1,617 - 8a2: 0303083b mulw a6,t1,a6 - 8a6: 41f8531b sraiw t1,a6,0x1f - 8aa: 0153531b srliw t1,t1,0x15 - 8ae: 0103033b addw t1,t1,a6 - 8b2: 40b3539b sraiw t2,t1,0xb - 8b6: 4849 li a6,18 - 8b8: 4078083b subw a6,a6,t2 - 8bc: b249 j 23e - -00000000000008be <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 8be: 87aa mv a5,a0 - if (ctx->fd == -1) - 8c0: 4508 lw a0,8(a0) - 8c2: 577d li a4,-1 - 8c4: 00e51d63 bne a0,a4,8de <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 8c8: 6b94 ld a3,16(a5) - 8ca: 6398 ld a4,0(a5) - 8cc: 9736 add a4,a4,a3 - 8ce: 00074603 lbu a2,0(a4) - 8d2: c60d beqz a2,8fc <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 8d4: 0685 addi a3,a3,1 - 8d6: eb94 sd a3,16(a5) - 8d8: 00074503 lbu a0,0(a4) - 8dc: 8082 ret -static int _in_char(_InContext *ctx) - 8de: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 8e0: 4605 li a2,1 - 8e2: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 8e6: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 8e8: 801ff0ef jal e8 - 8ec: 4785 li a5,1 - 8ee: 00f51963 bne a0,a5,900 <_in_char.part.0+0x42> - return (unsigned char)c; - 8f2: 00f14503 lbu a0,15(sp) -} - 8f6: 60e2 ld ra,24(sp) - 8f8: 6105 addi sp,sp,32 - 8fa: 8082 ret - return -1; - 8fc: 557d li a0,-1 -} - 8fe: 8082 ret - return -1; - 900: 557d li a0,-1 - 902: bfd5 j 8f6 <_in_char.part.0+0x38> - -0000000000000904 <_skip_space>: -{ - 904: 7139 addi sp,sp,-64 - 906: f822 sd s0,48(sp) - 908: f426 sd s1,40(sp) - 90a: f04a sd s2,32(sp) - 90c: ec4e sd s3,24(sp) - 90e: e852 sd s4,16(sp) - 910: fc06 sd ra,56(sp) - 912: 842a mv s0,a0 - ctx->ungotten = -1; - 914: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 916: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 91a: 02000913 li s2,32 - 91e: 4991 li s3,4 - if (ctx->ungotten >= 0) - 920: 4c1c lw a5,24(s0) - 922: 0407d163 bgez a5,964 <_skip_space+0x60> - if (ctx->fd == -1) - 926: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 928: 4605 li a2,1 - 92a: 85d2 mv a1,s4 - if (ctx->fd == -1) - 92c: 02951e63 bne a0,s1,968 <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - 930: 6818 ld a4,16(s0) - 932: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - 934: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - 938: 97ba add a5,a5,a4 - 93a: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x150> - 93e: cb19 beqz a4,954 <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - 940: e814 sd a3,16(s0) - 942: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 946: ff77871b addiw a4,a5,-9 - 94a: fd278be3 beq a5,s2,920 <_skip_space+0x1c> - 94e: fce9f9e3 bgeu s3,a4,920 <_skip_space+0x1c> - ctx->ungotten = c; - 952: cc1c sw a5,24(s0) -} - 954: 70e2 ld ra,56(sp) - 956: 7442 ld s0,48(sp) - 958: 74a2 ld s1,40(sp) - 95a: 7902 ld s2,32(sp) - 95c: 69e2 ld s3,24(sp) - 95e: 6a42 ld s4,16(sp) - 960: 6121 addi sp,sp,64 - 962: 8082 ret - ctx->ungotten = -1; - 964: cc04 sw s1,24(s0) - return c; - 966: b7c5 j 946 <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - 968: f80ff0ef jal e8 - 96c: 4785 li a5,1 - 96e: fef513e3 bne a0,a5,954 <_skip_space+0x50> - return (unsigned char)c; - 972: 00f14783 lbu a5,15(sp) - 976: bfc1 j 946 <_skip_space+0x42> - -0000000000000978 <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 978: 7155 addi sp,sp,-208 - 97a: e586 sd ra,200(sp) - 97c: e95a sd s6,144(sp) - while (*p) - 97e: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 982: e432 sd a2,8(sp) - while (*p) - 984: 68078b63 beqz a5,101a <_vscanf_core.constprop.0+0x6a2> - 988: e1a2 sd s0,192(sp) - 98a: fd26 sd s1,184(sp) - 98c: f152 sd s4,160(sp) - 98e: ed56 sd s5,152(sp) - 990: f4ee sd s11,104(sp) - 992: 842e mv s0,a1 - 994: 8daa mv s11,a0 - int assigned = 0; - 996: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 998: 02000493 li s1,32 - 99c: 4a91 li s5,4 - if (*p != '%') - 99e: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9a2: 04978763 beq a5,s1,9f0 <_vscanf_core.constprop.0+0x78> - 9a6: ff77869b addiw a3,a5,-9 - 9aa: 0ff6f693 zext.b a3,a3 - 9ae: 04daf163 bgeu s5,a3,9f0 <_vscanf_core.constprop.0+0x78> - if (*p != '%') - 9b2: 07478d63 beq a5,s4,a2c <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - 9b6: 856e mv a0,s11 - 9b8: f4dff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - 9bc: 018da503 lw a0,24(s11) - 9c0: 04055a63 bgez a0,a14 <_vscanf_core.constprop.0+0x9c> - 9c4: 856e mv a0,s11 - 9c6: ef9ff0ef jal 8be <_in_char.part.0> - if (c != *p) - 9ca: 00044783 lbu a5,0(s0) - 9ce: 04a78a63 beq a5,a0,a22 <_vscanf_core.constprop.0+0xaa> - if (c != -1) - 9d2: 57fd li a5,-1 - 9d4: 00f50463 beq a0,a5,9dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - 9d8: 00adac23 sw a0,24(s11) - 9dc: 640e ld s0,192(sp) - 9de: 74ea ld s1,184(sp) - 9e0: 7a0a ld s4,160(sp) - 9e2: 6aea ld s5,152(sp) - 9e4: 7da6 ld s11,104(sp) -} - 9e6: 60ae ld ra,200(sp) - 9e8: 855a mv a0,s6 - 9ea: 6b4a ld s6,144(sp) - 9ec: 6169 addi sp,sp,208 - 9ee: 8082 ret - _skip_space(ctx); - 9f0: 856e mv a0,s11 - 9f2: f13ff0ef jal 904 <_skip_space> - while (isspace(*p)) - 9f6: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9fa: 4611 li a2,4 - 9fc: ff77869b addiw a3,a5,-9 - a00: 0ff6f693 zext.b a3,a3 - a04: 00978663 beq a5,s1,a10 <_vscanf_core.constprop.0+0x98> - a08: 00d67463 bgeu a2,a3,a10 <_vscanf_core.constprop.0+0x98> - while (*p) - a0c: fbd9 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - a0e: b7f9 j 9dc <_vscanf_core.constprop.0+0x64> - p++; - a10: 0405 addi s0,s0,1 - a12: b7d5 j 9f6 <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - a14: 57fd li a5,-1 - a16: 00fdac23 sw a5,24(s11) - if (c != *p) - a1a: 00044783 lbu a5,0(s0) - a1e: faa79ae3 bne a5,a0,9d2 <_vscanf_core.constprop.0+0x5a> - while (*p) - a22: 00144783 lbu a5,1(s0) - p++; - a26: 0405 addi s0,s0,1 - while (*p) - a28: ffad bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - a2a: bf4d j 9dc <_vscanf_core.constprop.0+0x64> - a2c: f94a sd s2,176(sp) - a2e: f54e sd s3,168(sp) - a30: e55e sd s7,136(sp) - a32: e162 sd s8,128(sp) - if (*p == '*') - a34: 00144583 lbu a1,1(s0) - a38: 02a00793 li a5,42 - a3c: 22f58d63 beq a1,a5,c76 <_vscanf_core.constprop.0+0x2fe> - p++; - a40: 0405 addi s0,s0,1 - int suppress = 0; - a42: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - a44: fd05861b addiw a2,a1,-48 - a48: 0ff67693 zext.b a3,a2 - a4c: 47a5 li a5,9 - a4e: 36d7e763 bltu a5,a3,dbc <_vscanf_core.constprop.0+0x444> - a52: 4781 li a5,0 - a54: 4825 li a6,9 - a56: a019 j a5c <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - a58: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - a5c: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - a60: 00f6093b addw s2,a2,a5 - a64: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - a68: fd05861b addiw a2,a1,-48 - a6c: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - a70: 012686bb addw a3,a3,s2 - p++; - a74: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - a76: fea871e3 bgeu a6,a0,a58 <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - a7a: 06c00693 li a3,108 - p++; - a7e: 00140b93 addi s7,s0,1 - if (*p == 'l') - a82: 1ed58f63 beq a1,a3,c80 <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - a86: 06800693 li a3,104 - a8a: 2ad58863 beq a1,a3,d3a <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - a8e: 00044c03 lbu s8,0(s0) - a92: 8ba2 mv s7,s0 - int len_mod = 0; - a94: ec02 sd zero,24(sp) - char spec = *p++; - a96: 06300693 li a3,99 - a9a: 001b8413 addi s0,s7,1 - if (!spec) - a9e: 2adc0863 beq s8,a3,d4e <_vscanf_core.constprop.0+0x3d6> - aa2: 1f86fc63 bgeu a3,s8,c9a <_vscanf_core.constprop.0+0x322> - aa6: f9cc069b addiw a3,s8,-100 - aaa: 0ff6f693 zext.b a3,a3 - aae: 4651 li a2,20 - ab0: 0cd66e63 bltu a2,a3,b8c <_vscanf_core.constprop.0+0x214> - ab4: 00120637 lui a2,0x120 - ab8: 4585 li a1,1 - aba: 00d595b3 sll a1,a1,a3 - abe: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x118799> - ac2: 8e6d and a2,a2,a1 - ac4: ee69 bnez a2,b9e <_vscanf_core.constprop.0+0x226> - ac6: 89b9 andi a1,a1,14 - ac8: 1e059263 bnez a1,cac <_vscanf_core.constprop.0+0x334> - acc: 463d li a2,15 - ace: 0ac69f63 bne a3,a2,b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - ad2: 856e mv a0,s11 - ad4: e31ff0ef jal 904 <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - ad8: ec02 sd zero,24(sp) - ada: 00099763 bnez s3,ae8 <_vscanf_core.constprop.0+0x170> - ade: 67a2 ld a5,8(sp) - ae0: 6398 ld a4,0(a5) - ae2: 07a1 addi a5,a5,8 - ae4: e43e sd a5,8(sp) - ae6: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - ae8: 018da503 lw a0,24(s11) - aec: 2e055b63 bgez a0,de2 <_vscanf_core.constprop.0+0x46a> - af0: 856e mv a0,s11 - af2: dcdff0ef jal 8be <_in_char.part.0> - while (c != -1 && !isspace(c)) - af6: 56fd li a3,-1 - af8: 6ad50363 beq a0,a3,119e <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - afc: 02000693 li a3,32 - b00: 3ed50963 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b04: 46a5 li a3,9 - b06: 3ed50663 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b0a: 46a9 li a3,10 - b0c: 3ed50363 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b10: 46ad li a3,11 - b12: 3ed50063 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b16: 46b1 li a3,12 - b18: 3cd50d63 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b1c: 46b5 li a3,13 - b1e: 3cd50a63 beq a0,a3,ef2 <_vscanf_core.constprop.0+0x57a> - b22: 67e2 ld a5,24(sp) - b24: fce6 sd s9,120(sp) - b26: f8ea sd s10,112(sp) - b28: e83e sd a5,16(sp) - b2a: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - b2c: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b2e: 02000c93 li s9,32 - if (width > 0 && i >= width) - b32: 01205463 blez s2,b3a <_vscanf_core.constprop.0+0x1c2> - b36: 052d5563 bge s10,s2,b80 <_vscanf_core.constprop.0+0x208> - if (!suppress) - b3a: 00099563 bnez s3,b44 <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - b3e: 67c2 ld a5,16(sp) - b40: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - b44: 018da503 lw a0,24(s11) - i++; - b48: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - b4a: 30055963 bgez a0,e5c <_vscanf_core.constprop.0+0x4e4> - b4e: 856e mv a0,s11 - b50: d6fff0ef jal 8be <_in_char.part.0> - while (c != -1 && !isspace(c)) - b54: 27850663 beq a0,s8,dc0 <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b58: 03950463 beq a0,s9,b80 <_vscanf_core.constprop.0+0x208> - b5c: 47a5 li a5,9 - b5e: 02f50163 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b62: 47a9 li a5,10 - b64: 00f50e63 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b68: 47ad li a5,11 - b6a: 00f50b63 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b6e: 47b1 li a5,12 - b70: 00f50863 beq a0,a5,b80 <_vscanf_core.constprop.0+0x208> - b74: 67c2 ld a5,16(sp) - b76: 0785 addi a5,a5,1 - b78: e83e sd a5,16(sp) - b7a: 47b5 li a5,13 - b7c: faf51be3 bne a0,a5,b32 <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - b80: 64098a63 beqz s3,11d4 <_vscanf_core.constprop.0+0x85c> - b84: 7ce6 ld s9,120(sp) - b86: 7d46 ld s10,112(sp) - ctx->ungotten = c; - b88: 00adac23 sw a0,24(s11) - while (*p) - b8c: 001bc783 lbu a5,1(s7) - b90: 794a ld s2,176(sp) - b92: 79aa ld s3,168(sp) - b94: 6baa ld s7,136(sp) - b96: 6c0a ld s8,128(sp) - b98: e00795e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - b9c: b581 j 9dc <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - b9e: 856e mv a0,s11 - ba0: f8ea sd s10,112(sp) - ba2: d63ff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - ba6: 018da503 lw a0,24(s11) - baa: 24055063 bgez a0,dea <_vscanf_core.constprop.0+0x472> - bae: 856e mv a0,s11 - bb0: d0fff0ef jal 8be <_in_char.part.0> - if (c == '-' || c == '+') - bb4: fd55069b addiw a3,a0,-43 - bb8: 9af5 andi a3,a3,-3 - bba: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - bbc: 4d01 li s10,0 - if (c == '-' || c == '+') - bbe: 3e068863 beqz a3,fae <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - bc2: 07800693 li a3,120 - bc6: 4641 li a2,16 - bc8: 00dc0863 beq s8,a3,bd8 <_vscanf_core.constprop.0+0x260> - bcc: 06900693 li a3,105 - bd0: 4629 li a2,10 - bd2: 00dc1363 bne s8,a3,bd8 <_vscanf_core.constprop.0+0x260> - bd6: 4601 li a2,0 - while (c != -1 && i < 63) - bd8: 56fd li a3,-1 - bda: 5cd50863 beq a0,a3,11aa <_vscanf_core.constprop.0+0x832> - bde: fce6 sd s9,120(sp) - be0: 02010893 addi a7,sp,32 - be4: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - be8: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - bea: fd05069b addiw a3,a0,-48 - bee: 0005031b sext.w t1,a0 - bf2: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - bf6: 27960a63 beq a2,s9,e6a <_vscanf_core.constprop.0+0x4f2> - bfa: 2a060d63 beqz a2,eb4 <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - bfe: 07800793 li a5,120 - c02: 2ef50363 beq a0,a5,ee8 <_vscanf_core.constprop.0+0x570> - c06: fa850693 addi a3,a0,-88 - c0a: 0016b693 seqz a3,a3 - c0e: 4301 li t1,0 - if (width > 0 && i >= width) - c10: 01205463 blez s2,c18 <_vscanf_core.constprop.0+0x2a0> - c14: 032d5a63 bge s10,s2,c48 <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - c18: 0066e6b3 or a3,a3,t1 - c1c: 8ecd or a3,a3,a1 - c1e: c68d beqz a3,c48 <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - c20: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - c24: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - c28: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - c2a: 22055c63 bgez a0,e62 <_vscanf_core.constprop.0+0x4ea> - c2e: 856e mv a0,s11 - c30: e832 sd a2,16(sp) - c32: c8dff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - c36: 57fd li a5,-1 - c38: 6642 ld a2,16(sp) - c3a: 3cf50263 beq a0,a5,ffe <_vscanf_core.constprop.0+0x686> - c3e: 03f00693 li a3,63 - c42: 0c05 addi s8,s8,1 - c44: fadd13e3 bne s10,a3,bea <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - c48: 040d0793 addi a5,s10,64 - c4c: 1018 addi a4,sp,32 - c4e: 97ba add a5,a5,a4 - c50: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - c54: 00adac23 sw a0,24(s11) - c58: 7ce6 ld s9,120(sp) - if (i == 0) - c5a: 1e0d0663 beqz s10,e46 <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - c5e: 36098363 beqz s3,fc4 <_vscanf_core.constprop.0+0x64c> - while (*p) - c62: 001bc783 lbu a5,1(s7) - { - c66: 794a ld s2,176(sp) - c68: 79aa ld s3,168(sp) - c6a: 6baa ld s7,136(sp) - c6c: 6c0a ld s8,128(sp) - c6e: 7d46 ld s10,112(sp) - while (*p) - c70: d20799e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - c74: b3a5 j 9dc <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - c76: 00244583 lbu a1,2(s0) - suppress = 1; - c7a: 4985 li s3,1 - p++; - c7c: 0409 addi s0,s0,2 - c7e: b3d9 j a44 <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - c80: 00144c03 lbu s8,1(s0) - len_mod = 1; - c84: 4785 li a5,1 - c86: ec3e sd a5,24(sp) - if (*p == 'l') - c88: e0bc17e3 bne s8,a1,a96 <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - c8c: 4789 li a5,2 - char spec = *p++; - c8e: 00244c03 lbu s8,2(s0) - p++; - c92: 00240b93 addi s7,s0,2 - len_mod = 2; - c96: ec3e sd a5,24(sp) - c98: bbfd j a96 <_vscanf_core.constprop.0+0x11e> - c9a: 100c0763 beqz s8,da8 <_vscanf_core.constprop.0+0x430> - c9e: fbbc079b addiw a5,s8,-69 - ca2: 0ff7f793 zext.b a5,a5 - ca6: 4689 li a3,2 - ca8: eef6e2e3 bltu a3,a5,b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - cac: 856e mv a0,s11 - cae: f8ea sd s10,112(sp) - cb0: c55ff0ef jal 904 <_skip_space> - if (ctx->ungotten >= 0) - cb4: 018da783 lw a5,24(s11) - cb8: 1207dd63 bgez a5,df2 <_vscanf_core.constprop.0+0x47a> - cbc: 856e mv a0,s11 - cbe: c01ff0ef jal 8be <_in_char.part.0> - if (c == '-' || c == '+') - cc2: fd55069b addiw a3,a0,-43 - cc6: ffd6f613 andi a2,a3,-3 - cca: 2601 sext.w a2,a2 - ccc: 87aa mv a5,a0 - cce: 12060c63 beqz a2,e06 <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - cd2: 567d li a2,-1 - cd4: 16c50963 beq a0,a2,e46 <_vscanf_core.constprop.0+0x4ce> - cd8: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - cda: 4d01 li s10,0 - cdc: 80000937 lui s2,0x80000 - ce0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8777> - ce2: 0932 slli s2,s2,0xc - ce4: 80194913 xori s2,s2,-2047 - ce8: 093e slli s2,s2,0xf - cea: 02010813 addi a6,sp,32 - cee: 01a80cb3 add s9,a6,s10 - cf2: 03a00c13 li s8,58 - cf6: 1935 addi s2,s2,-19 - cf8: a831 j d14 <_vscanf_core.constprop.0+0x39c> - cfa: bc5ff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - cfe: 577d li a4,-1 - d00: 87aa mv a5,a0 - d02: 2ee50563 beq a0,a4,fec <_vscanf_core.constprop.0+0x674> - d06: 03f00713 li a4,63 - d0a: 0c85 addi s9,s9,1 - d0c: 1eed0e63 beq s10,a4,f08 <_vscanf_core.constprop.0+0x590> - d10: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - d14: 00d95633 srl a2,s2,a3 - d18: 856e mv a0,s11 - d1a: 8a05 andi a2,a2,1 - d1c: 1edc6663 bltu s8,a3,f08 <_vscanf_core.constprop.0+0x590> - d20: 1e060463 beqz a2,f08 <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - d24: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - d28: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - d2c: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - d2e: fc07c6e3 bltz a5,cfa <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - d32: 577d li a4,-1 - d34: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - d38: b7f9 j d06 <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - d3a: 00144c03 lbu s8,1(s0) - int len_mod = 0; - d3e: ec02 sd zero,24(sp) - if (*p == 'h') - d40: d4bc1be3 bne s8,a1,a96 <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - d44: 00244c03 lbu s8,2(s0) - p++; - d48: 00240b93 addi s7,s0,2 - d4c: b3a9 j a96 <_vscanf_core.constprop.0+0x11e> - d4e: fce6 sd s9,120(sp) - d50: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - d52: 00090c1b sext.w s8,s2 - d56: 0d205a63 blez s2,e2a <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - d5a: 4d01 li s10,0 - d5c: 06098d63 beqz s3,dd6 <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - d60: 9c6a add s8,s8,s10 - if (c == -1) - d62: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - d64: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - d68: 856e mv a0,s11 - if (ctx->ungotten >= 0) - d6a: 0207dc63 bgez a5,da2 <_vscanf_core.constprop.0+0x42a> - d6e: b51ff0ef jal 8be <_in_char.part.0> - d72: 87aa mv a5,a0 - if (c == -1) - d74: 0b950d63 beq a0,s9,e2e <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - d78: 00099463 bnez s3,d80 <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - d7c: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - d80: 0d05 addi s10,s10,1 - d82: ffac11e3 bne s8,s10,d64 <_vscanf_core.constprop.0+0x3ec> - while (*p) - d86: 001bc783 lbu a5,1(s7) - if (!suppress) - d8a: 00099363 bnez s3,d90 <_vscanf_core.constprop.0+0x418> - assigned++; - d8e: 2b05 addiw s6,s6,1 - d90: 794a ld s2,176(sp) - d92: 79aa ld s3,168(sp) - d94: 6baa ld s7,136(sp) - d96: 6c0a ld s8,128(sp) - d98: 7ce6 ld s9,120(sp) - d9a: 7d46 ld s10,112(sp) - while (*p) - d9c: c00793e3 bnez a5,9a2 <_vscanf_core.constprop.0+0x2a> - da0: b935 j 9dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - da2: 019dac23 sw s9,24(s11) - if (c == -1) - da6: bfc9 j d78 <_vscanf_core.constprop.0+0x400> - da8: 640e ld s0,192(sp) - daa: 74ea ld s1,184(sp) - dac: 794a ld s2,176(sp) - dae: 79aa ld s3,168(sp) - db0: 7a0a ld s4,160(sp) - db2: 6aea ld s5,152(sp) - db4: 6baa ld s7,136(sp) - db6: 6c0a ld s8,128(sp) - db8: 7da6 ld s11,104(sp) - dba: b135 j 9e6 <_vscanf_core.constprop.0+0x6e> - int width = -1; - dbc: 597d li s2,-1 - dbe: b975 j a7a <_vscanf_core.constprop.0+0x102> - if (!suppress) - dc0: 3c099c63 bnez s3,1198 <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - dc4: 67e2 ld a5,24(sp) - dc6: 01a786b3 add a3,a5,s10 - dca: 00068023 sb zero,0(a3) - while (*p) - dce: 001bc783 lbu a5,1(s7) - assigned++; - dd2: 2b05 addiw s6,s6,1 - dd4: bf75 j d90 <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - dd6: 67a2 ld a5,8(sp) - dd8: 0007bd03 ld s10,0(a5) - ddc: 07a1 addi a5,a5,8 - dde: e43e sd a5,8(sp) - de0: b741 j d60 <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - de2: 56fd li a3,-1 - de4: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - de8: bb11 j afc <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - dea: 56fd li a3,-1 - dec: 00ddac23 sw a3,24(s11) - return c; - df0: b3d1 j bb4 <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - df2: fd57869b addiw a3,a5,-43 - df6: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - dfa: 55fd li a1,-1 - dfc: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - e00: 2601 sext.w a2,a2 - e02: ec061be3 bnez a2,cd8 <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - e06: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - e0a: 018da783 lw a5,24(s11) - e0e: 2207da63 bgez a5,1042 <_vscanf_core.constprop.0+0x6ca> - e12: 856e mv a0,s11 - e14: aabff0ef jal 8be <_in_char.part.0> - while (c != -1 && i < 63) - e18: 567d li a2,-1 - e1a: 87aa mv a5,a0 - num_buf[i++] = (char)c; - e1c: 4d05 li s10,1 - e1e: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - e22: 3ac50163 beq a0,a2,11c4 <_vscanf_core.constprop.0+0x84c> - e26: fce6 sd s9,120(sp) - e28: bd55 j cdc <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - e2a: 4c05 li s8,1 - e2c: b73d j d5a <_vscanf_core.constprop.0+0x3e2> - e2e: 640e ld s0,192(sp) - e30: 74ea ld s1,184(sp) - e32: 794a ld s2,176(sp) - e34: 79aa ld s3,168(sp) - e36: 7a0a ld s4,160(sp) - e38: 6aea ld s5,152(sp) - e3a: 6baa ld s7,136(sp) - e3c: 6c0a ld s8,128(sp) - e3e: 7ce6 ld s9,120(sp) - e40: 7d46 ld s10,112(sp) - e42: 7da6 ld s11,104(sp) - e44: b64d j 9e6 <_vscanf_core.constprop.0+0x6e> - e46: 640e ld s0,192(sp) - e48: 74ea ld s1,184(sp) - e4a: 794a ld s2,176(sp) - e4c: 79aa ld s3,168(sp) - e4e: 7a0a ld s4,160(sp) - e50: 6aea ld s5,152(sp) - e52: 6baa ld s7,136(sp) - e54: 6c0a ld s8,128(sp) - e56: 7d46 ld s10,112(sp) - e58: 7da6 ld s11,104(sp) - e5a: b671 j 9e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - e5c: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - e60: b9e5 j b58 <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - e62: 57fd li a5,-1 - e64: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - e68: bbd9 j c3e <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e6a: f9f3069b addiw a3,t1,-97 - e6e: 4795 li a5,5 - e70: 06d7f263 bgeu a5,a3,ed4 <_vscanf_core.constprop.0+0x55c> - e74: fbf3031b addiw t1,t1,-65 - e78: 4795 li a5,5 - e7a: 0467fd63 bgeu a5,t1,ed4 <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - e7e: 07800693 li a3,120 - e82: 18d50763 beq a0,a3,1010 <_vscanf_core.constprop.0+0x698> - e86: fa850693 addi a3,a0,-88 - e8a: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - e8e: 4301 li t1,0 - e90: 32061663 bnez a2,11bc <_vscanf_core.constprop.0+0x844> - e94: 4785 li a5,1 - e96: 4601 li a2,0 - e98: d6fd1ce3 bne s10,a5,c10 <_vscanf_core.constprop.0+0x298> - e9c: 02014e03 lbu t3,32(sp) - ea0: 03000793 li a5,48 - ea4: d6fe16e3 bne t3,a5,c10 <_vscanf_core.constprop.0+0x298> - ea8: d60684e3 beqz a3,c10 <_vscanf_core.constprop.0+0x298> - base = 16; - eac: 4641 li a2,16 - if (width > 0 && i >= width) - eae: d7a919e3 bne s2,s10,c20 <_vscanf_core.constprop.0+0x2a8> - eb2: bb59 j c48 <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - eb4: f9f3069b addiw a3,t1,-97 - eb8: 4795 li a5,5 - eba: 02d7f263 bgeu a5,a3,ede <_vscanf_core.constprop.0+0x566> - ebe: fbf3031b addiw t1,t1,-65 - ec2: 0467f063 bgeu a5,t1,f02 <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - ec6: 07800693 li a3,120 - eca: fad51ee3 bne a0,a3,e86 <_vscanf_core.constprop.0+0x50e> - ece: 4301 li t1,0 - ed0: 4685 li a3,1 - ed2: b7c9 j e94 <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ed4: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - ed6: 4681 li a3,0 - if (width > 0 && i >= width) - ed8: d3204ee3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - edc: bb35 j c18 <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - ede: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ee0: 4305 li t1,1 - if (width > 0 && i >= width) - ee2: d32049e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - ee6: bb0d j c18 <_vscanf_core.constprop.0+0x2a0> - ee8: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - eea: 4685 li a3,1 - if (width > 0 && i >= width) - eec: d32044e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - ef0: bb05 j c20 <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - ef2: c8099be3 bnez s3,b88 <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - ef6: 67e2 ld a5,24(sp) - ef8: 00078023 sb zero,0(a5) - ctx->ungotten = c; - efc: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - f00: b171 j b8c <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - f02: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - f04: 4305 li t1,1 - f06: b779 j e94 <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - f08: 040d0713 addi a4,s10,64 - f0c: 1014 addi a3,sp,32 - f0e: 96ba add a3,a3,a4 - f10: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - f14: 00fdac23 sw a5,24(s11) - if (i == 0) - f18: f00d0be3 beqz s10,e2e <_vscanf_core.constprop.0+0x4b6> - f1c: 7ce6 ld s9,120(sp) - if (!suppress) - f1e: d40992e3 bnez s3,c62 <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - f22: 02014603 lbu a2,32(sp) - f26: 02d00793 li a5,45 - f2a: 1af60963 beq a2,a5,10dc <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - f2e: 02b00793 li a5,43 - f32: 20f60a63 beq a2,a5,1146 <_vscanf_core.constprop.0+0x7ce> - f36: 00005797 auipc a5,0x5 - f3a: 9327b587 fld fa1,-1742(a5) # 5868 - f3e: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - f40: fd06069b addiw a3,a2,-48 - f44: 0ff6f513 zext.b a0,a3 - f48: 45a5 li a1,9 - f4a: f20007d3 fmv.d.x fa5,zero - f4e: 02a5e463 bltu a1,a0,f76 <_vscanf_core.constprop.0+0x5fe> - f52: 00005717 auipc a4,0x5 - f56: 91e73707 fld fa4,-1762(a4) # 5870 - f5a: 4525 li a0,9 - f5c: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - f60: d20686d3 fcvt.d.w fa3,a3 - str++; - f64: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - f66: fd06069b addiw a3,a2,-48 - f6a: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - f6e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - f72: feb575e3 bgeu a0,a1,f5c <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - f76: 02e00693 li a3,46 - f7a: 16d60a63 beq a2,a3,10ee <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - f7e: 0007c683 lbu a3,0(a5) - f82: 0df6f693 andi a3,a3,223 - f86: 04500613 li a2,69 - f8a: 0cc68463 beq a3,a2,1052 <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - f8e: 6722 ld a4,8(sp) - if (len_mod == 1) - f90: 4685 li a3,1 - return sign * val; - f92: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - f96: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - f98: 0721 addi a4,a4,8 - f9a: e43a sd a4,8(sp) - if (len_mod == 1) - f9c: 6762 ld a4,24(sp) - f9e: 18d70b63 beq a4,a3,1134 <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - fa2: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - fa6: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - fa8: 00f7a027 fsw fa5,0(a5) - fac: b95d j c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - fae: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - fb2: 018da503 lw a0,24(s11) - fb6: 06055463 bgez a0,101e <_vscanf_core.constprop.0+0x6a6> - fba: 856e mv a0,s11 - fbc: 903ff0ef jal 8be <_in_char.part.0> - num_buf[i++] = (char)c; - fc0: 4d05 li s10,1 - fc2: b101 j bc2 <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - fc4: 4581 li a1,0 - fc6: 1008 addi a0,sp,32 - fc8: 696030ef jal 465e - *va_arg(ap, int64 *) = val; - fcc: 67a2 ld a5,8(sp) - if (len_mod == 2) - fce: 6762 ld a4,24(sp) - fd0: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - fd2: 07a1 addi a5,a5,8 - if (len_mod == 2) - fd4: 16d70363 beq a4,a3,113a <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - fd8: 6722 ld a4,8(sp) - else if (len_mod == 1) - fda: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - fdc: 6314 ld a3,0(a4) - else if (len_mod == 1) - fde: 6762 ld a4,24(sp) - fe0: 16c70163 beq a4,a2,1142 <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - fe4: c288 sw a0,0(a3) - assigned++; - fe6: 2b05 addiw s6,s6,1 - fe8: e43e sd a5,8(sp) - fea: b9a5 j c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - fec: 040d0793 addi a5,s10,64 - ff0: 1018 addi a4,sp,32 - ff2: 00e785b3 add a1,a5,a4 - ff6: fc058023 sb zero,-64(a1) - if (i == 0) - ffa: 7ce6 ld s9,120(sp) - ffc: b70d j f1e <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - ffe: 040d0793 addi a5,s10,64 - 1002: 1018 addi a4,sp,32 - 1004: 00e78833 add a6,a5,a4 - 1008: fc080023 sb zero,-64(a6) - if (i == 0) - 100c: 7ce6 ld s9,120(sp) - 100e: b981 j c5e <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - 1010: 4301 li t1,0 - 1012: 4685 li a3,1 - if (width > 0 && i >= width) - 1014: c12040e3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - 1018: b101 j c18 <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - 101a: 4b01 li s6,0 - 101c: b2e9 j 9e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - 101e: 56fd li a3,-1 - 1020: fce6 sd s9,120(sp) - 1022: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1026: 07800693 li a3,120 - 102a: 4641 li a2,16 - num_buf[i++] = (char)c; - 102c: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 102e: badc09e3 beq s8,a3,be0 <_vscanf_core.constprop.0+0x268> - 1032: 06900693 li a3,105 - 1036: 4629 li a2,10 - num_buf[i++] = (char)c; - 1038: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 103a: badc13e3 bne s8,a3,be0 <_vscanf_core.constprop.0+0x268> - 103e: 4601 li a2,0 - 1040: b645 j be0 <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - 1042: 56fd li a3,-1 - 1044: fce6 sd s9,120(sp) - 1046: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 104a: 4d05 li s10,1 - 104c: fd57869b addiw a3,a5,-43 - 1050: b171 j cdc <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 1052: 0017c583 lbu a1,1(a5) - 1056: 02d00693 li a3,45 - 105a: 0ed58f63 beq a1,a3,1158 <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 105e: 02b00693 li a3,43 - 1062: 10d58e63 beq a1,a3,117e <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 1066: fd05861b addiw a2,a1,-48 - 106a: 0ff67513 zext.b a0,a2 - 106e: 45a5 li a1,9 - str++; - 1070: 00178693 addi a3,a5,1 - int esign = 1; - 1074: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 1076: 04a5ec63 bltu a1,a0,10ce <_vscanf_core.constprop.0+0x756> - 107a: 4525 li a0,9 - 107c: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 1080: 0029979b slliw a5,s3,0x2 - 1084: 013787bb addw a5,a5,s3 - 1088: 0017979b slliw a5,a5,0x1 - 108c: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 1090: fd05861b addiw a2,a1,-48 - 1094: 0ff67593 zext.b a1,a2 - str++; - 1098: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 109a: feb571e3 bgeu a0,a1,107c <_vscanf_core.constprop.0+0x704> - while (eval--) - 109e: fff9879b addiw a5,s3,-1 - 10a2: 12098463 beqz s3,11ca <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 10a6: 00004717 auipc a4,0x4 - 10aa: 7c273687 fld fa3,1986(a4) # 5868 - 10ae: 00004717 auipc a4,0x4 - 10b2: 7c273707 fld fa4,1986(a4) # 5870 - while (eval--) - 10b6: 56fd li a3,-1 - 10b8: 37fd addiw a5,a5,-1 - p *= 10.0; - 10ba: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 10be: fed79de3 bne a5,a3,10b8 <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 10c2: 4785 li a5,1 - 10c4: 00f80963 beq a6,a5,10d6 <_vscanf_core.constprop.0+0x75e> - val /= p; - 10c8: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 10cc: b5c9 j f8e <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 10ce: 00004797 auipc a5,0x4 - 10d2: 79a7b687 fld fa3,1946(a5) # 5868 - val *= p; - 10d6: 12d7f7d3 fmul.d fa5,fa5,fa3 - 10da: bd55 j f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 10dc: 00004797 auipc a5,0x4 - 10e0: 7847b587 fld fa1,1924(a5) # 5860 - 10e4: 02114603 lbu a2,33(sp) - str++; - 10e8: 02110793 addi a5,sp,33 - 10ec: bd91 j f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 10ee: 0017c683 lbu a3,1(a5) - 10f2: 45a5 li a1,9 - str++; - 10f4: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 10f6: fd06861b addiw a2,a3,-48 - 10fa: 0ff67513 zext.b a0,a2 - 10fe: e8a5e2e3 bltu a1,a0,f82 <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 1102: 00004717 auipc a4,0x4 - 1106: 76e73707 fld fa4,1902(a4) # 5870 - 110a: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 110e: 4525 li a0,9 - val += (*str - '0') / div; - 1110: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 1114: 0017c683 lbu a3,1(a5) - str++; - 1118: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 111a: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 111e: fd06861b addiw a2,a3,-48 - 1122: 0ff67593 zext.b a1,a2 - div *= 10.0; - 1126: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 112a: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 112e: feb571e3 bgeu a0,a1,1110 <_vscanf_core.constprop.0+0x798> - 1132: bd81 j f82 <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 1134: a39c fsd fa5,0(a5) - assigned++; - 1136: 2b05 addiw s6,s6,1 - 1138: b62d j c62 <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 113a: 6722 ld a4,8(sp) - 113c: 6314 ld a3,0(a4) - 113e: e288 sd a0,0(a3) - 1140: b55d j fe6 <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 1142: e288 sd a0,0(a3) - 1144: b54d j fe6 <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 1146: 00004797 auipc a5,0x4 - 114a: 7227b587 fld fa1,1826(a5) # 5868 - 114e: 02114603 lbu a2,33(sp) - str++; - 1152: 02110793 addi a5,sp,33 - 1156: b3ed j f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 1158: 0027c583 lbu a1,2(a5) - str++; - 115c: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1160: 4525 li a0,9 - 1162: fd05861b addiw a2,a1,-48 - 1166: 0ff67793 zext.b a5,a2 - esign = -1; - 116a: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 116c: f0f577e3 bgeu a0,a5,107a <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 1170: 00004797 auipc a5,0x4 - 1174: 6f87b687 fld fa3,1784(a5) # 5868 - val /= p; - 1178: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 117c: bd09 j f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 117e: 0027c583 lbu a1,2(a5) - str++; - 1182: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1186: 4525 li a0,9 - 1188: fd05861b addiw a2,a1,-48 - 118c: 0ff67793 zext.b a5,a2 - 1190: f2f56fe3 bltu a0,a5,10ce <_vscanf_core.constprop.0+0x756> - int esign = 1; - 1194: 4805 li a6,1 - 1196: b5d5 j 107a <_vscanf_core.constprop.0+0x702> - while (*p) - 1198: 001bc783 lbu a5,1(s7) - 119c: bed5 j d90 <_vscanf_core.constprop.0+0x418> - if (!suppress) - 119e: 9e0997e3 bnez s3,b8c <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 11a2: 67e2 ld a5,24(sp) - 11a4: 00078023 sb zero,0(a5) - 11a8: b2d5 j b8c <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 11aa: 040d0793 addi a5,s10,64 - 11ae: 1018 addi a4,sp,32 - 11b0: 97ba add a5,a5,a4 - 11b2: fc078023 sb zero,-64(a5) - if (i == 0) - 11b6: aa0d14e3 bnez s10,c5e <_vscanf_core.constprop.0+0x2e6> - 11ba: b171 j e46 <_vscanf_core.constprop.0+0x4ce> - 11bc: 4641 li a2,16 - if (width > 0 && i >= width) - 11be: a5204be3 bgtz s2,c14 <_vscanf_core.constprop.0+0x29c> - 11c2: bc99 j c18 <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 11c4: 020100a3 sb zero,33(sp) - if (i == 0) - 11c8: bb99 j f1e <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 11ca: 00004797 auipc a5,0x4 - 11ce: 69e7b687 fld fa3,1694(a5) # 5868 - 11d2: bdc5 j 10c2 <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 11d4: 67e2 ld a5,24(sp) - 11d6: 01a786b3 add a3,a5,s10 - 11da: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 11de: 00adac23 sw a0,24(s11) - while (*p) - 11e2: 001bc783 lbu a5,1(s7) - 11e6: b6f5 j dd2 <_vscanf_core.constprop.0+0x45a> - -00000000000011e8 <_out_char>: -{ - 11e8: 7179 addi sp,sp,-48 - 11ea: ec26 sd s1,24(sp) - if (ctx->stream) - 11ec: 6d04 ld s1,24(a0) -{ - 11ee: f022 sd s0,32(sp) - 11f0: f406 sd ra,40(sp) - 11f2: 842a mv s0,a0 - 11f4: 872e mv a4,a1 - if (ctx->stream) - 11f6: c0a1 beqz s1,1236 <_out_char+0x4e> - 11f8: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 11fa: 41c4a903 lw s2,1052(s1) - 11fe: 4789 li a5,2 - 1200: 04f90d63 beq s2,a5,125a <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 1204: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 1208: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 120c: 0017861b addiw a2,a5,1 - 1210: 40c4a823 sw a2,1040(s1) - 1214: 97a6 add a5,a5,s1 - 1216: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 121a: 08c6c063 blt a3,a2,129a <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 121e: 4785 li a5,1 - 1220: 04f90a63 beq s2,a5,1274 <_out_char+0x8c> - ctx->written++; - 1224: 681c ld a5,16(s0) - 1226: 6942 ld s2,16(sp) -} - 1228: 70a2 ld ra,40(sp) - ctx->written++; - 122a: 0785 addi a5,a5,1 - 122c: e81c sd a5,16(s0) -} - 122e: 7402 ld s0,32(sp) - 1230: 64e2 ld s1,24(sp) - 1232: 6145 addi sp,sp,48 - 1234: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 1236: 6514 ld a3,8(a0) - 1238: 691c ld a5,16(a0) - 123a: ca89 beqz a3,124c <_out_char+0x64> - 123c: 16fd addi a3,a3,-1 - 123e: 00d7f763 bgeu a5,a3,124c <_out_char+0x64> - ctx->buf[ctx->written] = c; - 1242: 6114 ld a3,0(a0) - 1244: 97b6 add a5,a5,a3 - 1246: 00b78023 sb a1,0(a5) - ctx->written++; - 124a: 691c ld a5,16(a0) - 124c: 0785 addi a5,a5,1 -} - 124e: 70a2 ld ra,40(sp) - ctx->written++; - 1250: e81c sd a5,16(s0) -} - 1252: 7402 ld s0,32(sp) - 1254: 64e2 ld s1,24(sp) - 1256: 6145 addi sp,sp,48 - 1258: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 125a: 4088 lw a0,0(s1) - 125c: 4605 li a2,1 - 125e: 00f10593 addi a1,sp,15 - char ch = (char)c; - 1262: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 1266: e8bfe0ef jal f0 - 126a: 4785 li a5,1 - 126c: faf50ce3 beq a0,a5,1224 <_out_char+0x3c> - stream->error = 1; - 1270: c49c sw a5,8(s1) - return EOF; - 1272: bf4d j 1224 <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 1274: 47a9 li a5,10 - 1276: faf597e3 bne a1,a5,1224 <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 127a: fac055e3 blez a2,1224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 127e: 4088 lw a0,0(s1) - 1280: 01048593 addi a1,s1,16 - 1284: e6dfe0ef jal f0 - if (ret < stream->buf_write_pos) - 1288: 4104a783 lw a5,1040(s1) - 128c: 02f55063 bge a0,a5,12ac <_out_char+0xc4> - stream->error = 1; - 1290: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 1294: 4004a823 sw zero,1040(s1) - return EOF; - 1298: b771 j 1224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 129a: 4088 lw a0,0(s1) - 129c: 01048593 addi a1,s1,16 - 12a0: e51fe0ef jal f0 - if (ret < stream->buf_write_pos) - 12a4: 4104a783 lw a5,1040(s1) - 12a8: 00f54563 blt a0,a5,12b2 <_out_char+0xca> - stream->buf_write_pos = 0; - 12ac: 4004a823 sw zero,1040(s1) - 12b0: bf95 j 1224 <_out_char+0x3c> - stream->error = 1; - 12b2: 4785 li a5,1 - 12b4: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 12b6: 4004a823 sw zero,1040(s1) - return EOF; - 12ba: b7ad j 1224 <_out_char+0x3c> - -00000000000012bc : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 12bc: 00005797 auipc a5,0x5 - 12c0: 6d478793 addi a5,a5,1748 # 6990 - 12c4: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 12c8: 0ca786a3 sb a0,205(a5) -} - 12cc: 8082 ret - -00000000000012ce : - - 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) -{ - 12ce: 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; - 12d2: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12d6: 252523b7 lui t2,0x25252 - 12da: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524ac9d> -{ - 12de: 29913c23 sd s9,664(sp) - 12e2: 29b13423 sd s11,648(sp) - int tlen = 0; - 12e6: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12e8: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 12ec: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808007f8> -{ - 12f0: 2e813023 sd s0,736(sp) - 12f4: 2c913c23 sd s1,728(sp) - 12f8: 2d213823 sd s2,720(sp) - 12fc: 2d313423 sd s3,712(sp) - 1300: 2b713423 sd s7,680(sp) - 1304: 2b813023 sd s8,672(sp) - 1308: 29a13823 sd s10,656(sp) - 130c: 2e113423 sd ra,744(sp) - 1310: 8d66 mv s10,s9 - 1312: 8432 mv s0,a2 - 1314: 8c9e mv s9,t2 - 1316: 89aa mv s3,a0 - 1318: e42e sd a1,8(sp) - 131a: 84b6 mv s1,a3 - 131c: 8bba mv s7,a4 - 131e: fc02 sd zero,56(sp) - for (;;) { - 1320: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1322: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8677> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1326: 20000c13 li s8,512 - 132a: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 132c: 0034f793 andi a5,s1,3 - 1330: c7a9 beqz a5,137a - if (f[0] == '%') - 1332: 0004c783 lbu a5,0(s1) - 1336: 02500713 li a4,37 - 133a: 0ee78263 beq a5,a4,141e - if (f[0] == 0) - 133e: cbd9 beqz a5,13d4 - stbsp__chk_cb_buf(1); - 1340: 02098663 beqz s3,136c - 1344: 4124063b subw a2,s0,s2 - 1348: 1fe00713 li a4,510 - 134c: 02c75063 bge a4,a2,136c - 1350: 65a2 ld a1,8(sp) - 1352: 854a mv a0,s2 - 1354: e81e sd t2,16(sp) - 1356: 00cd0d3b addw s10,s10,a2 - 135a: 9982 jalr s3 - 135c: 892a mv s2,a0 - 135e: e119 bnez a0,1364 - 1360: 0200106f j 2380 - *bf++ = f[0]; - 1364: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 1368: 63c2 ld t2,16(sp) - 136a: 842a mv s0,a0 - ++f; - 136c: 0485 addi s1,s1,1 - *bf++ = f[0]; - 136e: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 1372: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 1376: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 1378: ffcd bnez a5,1332 - v = *(stbsp__uint32 *)f; - 137a: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 137c: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1380: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 1384: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1388: 01b7073b addw a4,a4,s11 - 138c: 8f7d and a4,a4,a5 - 138e: 2701 sext.w a4,a4 - 1390: f34d bnez a4,1332 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1392: 460d li a2,3 - 1394: a805 j 13c4 - if (callback) - 1396: 00098863 beqz s3,13a6 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 139a: 412407b3 sub a5,s0,s2 - 139e: 40fc07bb subw a5,s8,a5 - 13a2: f8f658e3 bge a2,a5,1332 - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 13a6: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 13a8: 40d4 lw a3,4(s1) - } - bf += 4; - 13aa: 0411 addi s0,s0,4 - f += 4; - 13ac: 0491 addi s1,s1,4 - c = (~v) & 0x80808080; - 13ae: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13b2: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 13b6: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13ba: 01b7073b addw a4,a4,s11 - 13be: 8f7d and a4,a4,a5 - 13c0: 2701 sext.w a4,a4 - 13c2: fb25 bnez a4,1332 - if ((v - 0x01010101) & c) - 13c4: 01b6873b addw a4,a3,s11 - 13c8: 8ff9 and a5,a5,a4 - 13ca: 2781 sext.w a5,a5 - 13cc: d7e9 beqz a5,1396 - if (f[0] == 0) - 13ce: 0004c783 lbu a5,0(s1) - 13d2: f7bd bnez a5,1340 -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 13d4: 8cea mv s9,s10 - 13d6: 412404bb subw s1,s0,s2 - if (!callback) - 13da: 70098563 beqz s3,1ae4 - stbsp__flush_cb(); - 13de: 00905663 blez s1,13ea - 13e2: 65a2 ld a1,8(sp) - 13e4: 8626 mv a2,s1 - 13e6: 854a mv a0,s2 - 13e8: 9982 jalr s3 - 13ea: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 13ee: 2e813083 ld ra,744(sp) - 13f2: 2e013403 ld s0,736(sp) - 13f6: 2d813483 ld s1,728(sp) - 13fa: 2d013903 ld s2,720(sp) - 13fe: 2c813983 ld s3,712(sp) - 1402: 2a813b83 ld s7,680(sp) - 1406: 2a013c03 ld s8,672(sp) - 140a: 29013d03 ld s10,656(sp) - 140e: 28813d83 ld s11,648(sp) - 1412: 8566 mv a0,s9 - 1414: 29813c83 ld s9,664(sp) - 1418: 2f010113 addi sp,sp,752 - 141c: 8082 ret - 141e: 2d413023 sd s4,704(sp) - 1422: 2b513c23 sd s5,696(sp) - 1426: 2b613823 sd s6,688(sp) - tz = 0; - 142a: 00248693 addi a3,s1,2 - fl = 0; - 142e: 4e01 li t3,0 - switch (f[0]) { - 1430: 03f00593 li a1,63 - 1434: 00004617 auipc a2,0x4 - 1438: d5460613 addi a2,a2,-684 # 5188 <_GLOBAL__sub_I__ZSt3cin+0x198> - 143c: fff6c783 lbu a5,-1(a3) - 1440: fff68493 addi s1,a3,-1 - 1444: fe07871b addiw a4,a5,-32 - 1448: 0ff77713 zext.b a4,a4 - 144c: 00e5ec63 bltu a1,a4,1464 - 1450: 070a slli a4,a4,0x2 - 1452: 9732 add a4,a4,a2 - 1454: 4318 lw a4,0(a4) - 1456: 9732 add a4,a4,a2 - 1458: 8702 jr a4 - if (f[0] == '*') { - 145a: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 145e: 010e6e13 ori t3,t3,16 - ++f; - 1462: 0485 addi s1,s1,1 - if (f[0] == '*') { - 1464: 02a00713 li a4,42 - 1468: 0ce79163 bne a5,a4,152a - fw = va_arg(va, stbsp__uint32); - 146c: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 1470: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 1474: 0ba1 addi s7,s7,8 - ++f; - 1476: 0485 addi s1,s1,1 - if (f[0] == '.') { - 1478: 02e00713 li a4,46 - pr = -1; - 147c: 58fd li a7,-1 - if (f[0] == '.') { - 147e: 0ee78663 beq a5,a4,156a - switch (f[0]) { - 1482: 04900713 li a4,73 - 1486: 10e78263 beq a5,a4,158a - 148a: f987871b addiw a4,a5,-104 - 148e: 0ff77713 zext.b a4,a4 - 1492: 46c9 li a3,18 - 1494: 02e6e063 bltu a3,a4,14b4 - 1498: 00004697 auipc a3,0x4 - 149c: df068693 addi a3,a3,-528 # 5288 <_GLOBAL__sub_I__ZSt3cin+0x298> - 14a0: 070a slli a4,a4,0x2 - 14a2: 9736 add a4,a4,a3 - 14a4: 4318 lw a4,0(a4) - 14a6: 9736 add a4,a4,a3 - 14a8: 8702 jr a4 - if (f[0] == 'h') - 14aa: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 14ae: 020e6e13 ori t3,t3,32 - ++f; - 14b2: 0485 addi s1,s1,1 - switch (f[0]) { - 14b4: fbf7871b addiw a4,a5,-65 - 14b8: 0ff77713 zext.b a4,a4 - 14bc: 03700693 li a3,55 - 14c0: 0ee6ea63 bltu a3,a4,15b4 - 14c4: 00004697 auipc a3,0x4 - 14c8: e1068693 addi a3,a3,-496 # 52d4 <_GLOBAL__sub_I__ZSt3cin+0x2e4> - 14cc: 070a slli a4,a4,0x2 - 14ce: 9736 add a4,a4,a3 - 14d0: 4318 lw a4,0(a4) - 14d2: 9736 add a4,a4,a3 - 14d4: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 14d6: 400e6e13 ori t3,t3,1024 - continue; - 14da: 0685 addi a3,a3,1 - 14dc: b785 j 143c - fl |= STBSP__LEFTJUST; - 14de: 001e6e13 ori t3,t3,1 - continue; - 14e2: 0685 addi a3,a3,1 - 14e4: bfa1 j 143c - fl |= STBSP__LEADINGPLUS; - 14e6: 002e6e13 ori t3,t3,2 - continue; - 14ea: 0685 addi a3,a3,1 - 14ec: bf81 j 143c - fl |= STBSP__TRIPLET_COMMA; - 14ee: 040e6e13 ori t3,t3,64 - continue; - 14f2: 0685 addi a3,a3,1 - 14f4: b7a1 j 143c - if (fl & STBSP__METRIC_SUFFIX) { - 14f6: 100e7793 andi a5,t3,256 - 14fa: 8772 mv a4,t3 - 14fc: 56078363 beqz a5,1a62 - if (fl & STBSP__METRIC_1024) { - 1500: 6785 lui a5,0x1 - 1502: 034e1513 slli a0,t3,0x34 - 1506: 80078793 addi a5,a5,-2048 # 800 - 150a: 5c055863 bgez a0,1ada - fl |= STBSP__METRIC_JEDEC; - 150e: 6785 lui a5,0x1 - 1510: 8f5d or a4,a4,a5 - 1512: 00070e1b sext.w t3,a4 - 1516: 0685 addi a3,a3,1 - 1518: b715 j 143c - fl |= STBSP__LEADING_0X; - 151a: 008e6e13 ori t3,t3,8 - continue; - 151e: 0685 addi a3,a3,1 - 1520: bf31 j 143c - fl |= STBSP__LEADINGSPACE; - 1522: 004e6e13 ori t3,t3,4 - continue; - 1526: 0685 addi a3,a3,1 - 1528: bf11 j 143c - while ((f[0] >= '0') && (f[0] <= '9')) { - 152a: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x658> - 152e: 0ff77713 zext.b a4,a4 - 1532: 4625 li a2,9 - fw = 0; - 1534: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1536: 46a5 li a3,9 - 1538: f4e660e3 bltu a2,a4,1478 - fw = fw * 10 + f[0] - '0'; - 153c: 002b171b slliw a4,s6,0x2 - 1540: 0167073b addw a4,a4,s6 - 1544: 0017171b slliw a4,a4,0x1 - f++; - 1548: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 154a: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 154c: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 1550: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1554: fd07871b addiw a4,a5,-48 - 1558: 0ff77713 zext.b a4,a4 - 155c: fee6f0e3 bgeu a3,a4,153c - if (f[0] == '.') { - 1560: 02e00713 li a4,46 - pr = -1; - 1564: 58fd li a7,-1 - if (f[0] == '.') { - 1566: f0e79ee3 bne a5,a4,1482 - if (f[0] == '*') { - 156a: 0014c783 lbu a5,1(s1) - 156e: 02a00713 li a4,42 - 1572: 52e79763 bne a5,a4,1aa0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1576: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 157a: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 157e: 000ba883 lw a7,0(s7) - ++f; - 1582: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 1584: 0ba1 addi s7,s7,8 - switch (f[0]) { - 1586: f0e792e3 bne a5,a4,148a - if ((f[1] == '6') && (f[2] == '4')) { - 158a: 0014c783 lbu a5,1(s1) - 158e: 03600713 li a4,54 - 1592: 00e79463 bne a5,a4,159a - 1596: 1e60106f j 277c - } else if ((f[1] == '3') && (f[2] == '2')) { - 159a: 03300713 li a4,51 - 159e: 6ae796e3 bne a5,a4,244a - 15a2: 0024c683 lbu a3,2(s1) - 15a6: 03200713 li a4,50 - 15aa: 00e69463 bne a3,a4,15b2 - 15ae: 0ae0106f j 265c - ++f; - 15b2: 0485 addi s1,s1,1 - *s = f[0]; - 15b4: 26f10fa3 sb a5,639(sp) - l = 1; - 15b8: 4785 li a5,1 - 15ba: d0be sw a5,96(sp) - lead[0] = 0; - 15bc: 06010423 sb zero,104(sp) - tail[0] = 0; - 15c0: 06010823 sb zero,112(sp) - dp = 0; - 15c4: d282 sw zero,100(sp) - 15c6: e0de sd s7,64(sp) - 15c8: 4701 li a4,0 - 15ca: 4301 li t1,0 - 15cc: 4f81 li t6,0 - 15ce: 4685 li a3,1 - 15d0: 4a01 li s4,0 - cs = 0; - 15d2: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 15d4: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 15d8: 4e01 li t3,0 - tz = 0; - 15da: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 15dc: 010e7793 andi a5,t3,16 - 15e0: 40078ee3 beqz a5,21fc - pr = (fw > pr) ? fw : pr; - 15e4: 87ba mv a5,a4 - 15e6: 00675363 bge a4,t1,15ec - 15ea: 879a mv a5,t1 - 15ec: 0007871b sext.w a4,a5 - fw = 0; - 15f0: 4301 li t1,0 - if (fw + pr) { - 15f2: 62070563 beqz a4,1c1c - sn = lead + 1; - 15f6: 06910793 addi a5,sp,105 - 15fa: fcbe sd a5,120(sp) - while (lead[0]) { - 15fc: 0a0a0863 beqz s4,16ac - stbsp__cb_buf_clamp(i, lead[0]); - 1600: f026 sd s1,32(sp) - 1602: f436 sd a3,40(sp) - 1604: 854a mv a0,s2 - 1606: 86d2 mv a3,s4 - 1608: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 160a: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 160e: 89be mv s3,a5 - 1610: 20000b13 li s6,512 - 1614: 87a2 mv a5,s0 - 1616: e846 sd a7,16(sp) - 1618: 846a mv s0,s10 - 161a: ec7e sd t6,24(sp) - 161c: 8d6e mv s10,s11 - 161e: f872 sd t3,48(sp) - 1620: 8de6 mv s11,s9 - 1622: 8a3a mv s4,a4 - 1624: e496 sd t0,72(sp) - 1626: 891a mv s2,t1 - 1628: 8c9e mv s9,t2 - 162a: 0006871b sext.w a4,a3 - 162e: 2e0482e3 beqz s1,2112 - 1632: 40a7863b subw a2,a5,a0 - 1636: 40cb083b subw a6,s6,a2 - 163a: 85c2 mv a1,a6 - 163c: 01075363 bge a4,a6,1642 - 1640: 85ba mv a1,a4 - lead[0] -= (char)i; - 1642: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 1644: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 1648: 06d10423 sb a3,104(sp) - while (i) { - 164c: c70d beqz a4,1676 - 164e: 7866 ld a6,120(sp) - 1650: 02071593 slli a1,a4,0x20 - 1654: 9181 srli a1,a1,0x20 - 1656: 00b78633 add a2,a5,a1 - 165a: 8742 mv a4,a6 - *bf++ = *sn++; - 165c: 00074683 lbu a3,0(a4) - 1660: 0785 addi a5,a5,1 - while (i) { - 1662: 0705 addi a4,a4,1 - *bf++ = *sn++; - 1664: fed78fa3 sb a3,-1(a5) - while (i) { - 1668: fec79ae3 bne a5,a2,165c - 166c: 982e add a6,a6,a1 - 166e: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1670: c899 beqz s1,1686 - 1672: 40a7863b subw a2,a5,a0 - 1676: 00cbd863 bge s7,a2,1686 - 167a: 65a2 ld a1,8(sp) - 167c: 9c31 addw s0,s0,a2 - 167e: 9482 jalr s1 - 1680: 34050ee3 beqz a0,21dc - 1684: 87aa mv a5,a0 - while (lead[0]) { - 1686: 06814683 lbu a3,104(sp) - 168a: f2c5 bnez a3,162a - 168c: 83e6 mv t2,s9 - 168e: 68c2 ld a7,16(sp) - 1690: 8cee mv s9,s11 - 1692: 6fe2 ld t6,24(sp) - 1694: 8dea mv s11,s10 - 1696: 76a2 ld a3,40(sp) - 1698: 8d22 mv s10,s0 - 169a: 7e42 ld t3,48(sp) - 169c: 843e mv s0,a5 - 169e: 62a6 ld t0,72(sp) - 16a0: 87ce mv a5,s3 - 16a2: 89a6 mv s3,s1 - 16a4: 7482 ld s1,32(sp) - 16a6: 834a mv t1,s2 - 16a8: 8752 mv a4,s4 - 16aa: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16ac: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 16b0: 0182d61b srliw a2,t0,0x18 - 16b4: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16b8: 4a01 li s4,0 - 16ba: 000b0e63 beqz s6,16d6 - cs &= 0xffffff; - 16be: 02829a13 slli s4,t0,0x28 - 16c2: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 16c6: 00ea0a3b addw s4,s4,a4 - 16ca: 0016059b addiw a1,a2,1 - 16ce: 02ba7a3b remuw s4,s4,a1 - 16d2: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 16d6: 0ce05763 blez a4,17a4 - *(stbsp__uint32 *)bf = 0x30303030; - 16da: 30303837 lui a6,0x30303 - 16de: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 16e2: f026 sd s1,32(sp) - 16e4: 854a mv a0,s2 - 16e6: 84da mv s1,s6 - 16e8: 895e mv s2,s7 - 16ea: e4d6 sd s5,72(sp) - 16ec: 8b4e mv s6,s3 - 16ee: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 16f0: 1fe00293 li t0,510 - 16f4: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 16f6: 00005f17 auipc t5,0x5 - 16fa: 29af0f13 addi t5,t5,666 # 6990 - 16fe: 8de6 mv s11,s9 - *bf++ = '0'; - 1700: 03000e93 li t4,48 - 1704: e846 sd a7,16(sp) - 1706: ec7e sd t6,24(sp) - 1708: f436 sd a3,40(sp) - 170a: f872 sd t3,48(sp) - 170c: e89a sd t1,80(sp) - 170e: 89ba mv s3,a4 - 1710: ecbe sd a5,88(sp) - 1712: 8bc2 mv s7,a6 - 1714: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 1716: 240b0ee3 beqz s6,2172 - 171a: 40a407b3 sub a5,s0,a0 - 171e: 40fc063b subw a2,s8,a5 - 1722: 87b2 mv a5,a2 - 1724: 00c9d363 bge s3,a2,172a - 1728: 87ce mv a5,s3 - 172a: 0007859b sext.w a1,a5 - pr -= i; - 172e: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 1732: 32048c63 beqz s1,1a6a - while (i) { - 1736: 34058a63 beqz a1,1a8a - 173a: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 173c: 0cdf4603 lbu a2,205(t5) - 1740: 9181 srli a1,a1,0x20 - 1742: 95a2 add a1,a1,s0 - 1744: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 1746: c481 beqz s1,174e - 1748: 1d4901e3 beq s2,s4,210a - 174c: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 174e: 03000793 li a5,48 - 1752: fef40fa3 sb a5,-1(s0) - while (i) { - 1756: fe8597e3 bne a1,s0,1744 - stbsp__chk_cb_buf(1); - 175a: 320b0b63 beqz s6,1a90 - 175e: 40a5863b subw a2,a1,a0 - 1762: 32c2d763 bge t0,a2,1a90 - 1766: 65a2 ld a1,8(sp) - 1768: 01560abb addw s5,a2,s5 - 176c: 9b02 jalr s6 - 176e: 3a050ce3 beqz a0,2326 - 1772: 842a mv s0,a0 - 1774: 1fe00293 li t0,510 - 1778: 00005f17 auipc t5,0x5 - 177c: 218f0f13 addi t5,t5,536 # 6990 - 1780: 03000e93 li t4,48 - while (pr > 0) { - 1784: f93049e3 bgtz s3,1716 - while (lead[0]) { - 1788: 83e6 mv t2,s9 - 178a: 68c2 ld a7,16(sp) - 178c: 8cee mv s9,s11 - 178e: 6fe2 ld t6,24(sp) - 1790: 8dea mv s11,s10 - 1792: 7482 ld s1,32(sp) - 1794: 8d56 mv s10,s5 - 1796: 76a2 ld a3,40(sp) - 1798: 7e42 ld t3,48(sp) - 179a: 6346 ld t1,80(sp) - 179c: 67e6 ld a5,88(sp) - 179e: 6aa6 ld s5,72(sp) - 17a0: 892a mv s2,a0 - 17a2: 89da mv s3,s6 - 17a4: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 17a8: fcbe sd a5,120(sp) - while (lead[0]) { - 17aa: 0a0a0263 beqz s4,184e - stbsp__cb_buf_clamp(i, lead[0]); - 17ae: ec26 sd s1,24(sp) - 17b0: f036 sd a3,32(sp) - 17b2: 854a mv a0,s2 - 17b4: 86d2 mv a3,s4 - 17b6: 84ce mv s1,s3 - 17b8: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 17ba: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 17be: 846a mv s0,s10 - 17c0: 20000b13 li s6,512 - 17c4: 8d6e mv s10,s11 - 17c6: e846 sd a7,16(sp) - 17c8: 8de6 mv s11,s9 - 17ca: 8a7e mv s4,t6 - 17cc: 8972 mv s2,t3 - 17ce: 899a mv s3,t1 - 17d0: 8c9e mv s9,t2 - 17d2: 0006871b sext.w a4,a3 - 17d6: 140482e3 beqz s1,211a - 17da: 40a7863b subw a2,a5,a0 - 17de: 40cb083b subw a6,s6,a2 - 17e2: 85c2 mv a1,a6 - 17e4: 01075363 bge a4,a6,17ea - 17e8: 85ba mv a1,a4 - lead[0] -= (char)i; - 17ea: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 17ec: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 17f0: 06d10423 sb a3,104(sp) - while (i) { - 17f4: c70d beqz a4,181e - 17f6: 7866 ld a6,120(sp) - 17f8: 02071593 slli a1,a4,0x20 - 17fc: 9181 srli a1,a1,0x20 - 17fe: 00b78633 add a2,a5,a1 - 1802: 8742 mv a4,a6 - *bf++ = *sn++; - 1804: 00074683 lbu a3,0(a4) - 1808: 0785 addi a5,a5,1 - while (i) { - 180a: 0705 addi a4,a4,1 - *bf++ = *sn++; - 180c: fed78fa3 sb a3,-1(a5) - while (i) { - 1810: fec79ae3 bne a5,a2,1804 - 1814: 982e add a6,a6,a1 - 1816: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1818: c899 beqz s1,182e - 181a: 40a7863b subw a2,a5,a0 - 181e: 00cbd863 bge s7,a2,182e - 1822: 65a2 ld a1,8(sp) - 1824: 9c31 addw s0,s0,a2 - 1826: 9482 jalr s1 - 1828: 1a050ae3 beqz a0,21dc - 182c: 87aa mv a5,a0 - while (lead[0]) { - 182e: 06814683 lbu a3,104(sp) - 1832: f2c5 bnez a3,17d2 - 1834: 834e mv t1,s3 - 1836: 68c2 ld a7,16(sp) - 1838: 89a6 mv s3,s1 - 183a: 7682 ld a3,32(sp) - 183c: 64e2 ld s1,24(sp) - 183e: 8e4a mv t3,s2 - 1840: 83e6 mv t2,s9 - 1842: 8fd2 mv t6,s4 - 1844: 8cee mv s9,s11 - 1846: 892a mv s2,a0 - 1848: 8dea mv s11,s10 - 184a: 8d22 mv s10,s0 - 184c: 843e mv s0,a5 - while (n) { - 184e: c6f9 beqz a3,191c - STBSP__UNALIGNED(while (i >= 4) { - 1850: ec26 sd s1,24(sp) - 1852: 854a mv a0,s2 - 1854: 84d6 mv s1,s5 - 1856: 896a mv s2,s10 - 1858: 87a2 mv a5,s0 - 185a: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 185c: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 1860: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 1862: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 1866: 4a0d li s4,3 - 1868: e87e sd t6,16(sp) - 186a: f072 sd t3,32(sp) - 186c: 8ac6 mv s5,a7 - 186e: f41a sd t1,40(sp) - 1870: 8436 mv s0,a3 - 1872: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 1874: 0004071b sext.w a4,s0 - 1878: 100982e3 beqz s3,217c - 187c: 40a78633 sub a2,a5,a0 - 1880: 40cb05bb subw a1,s6,a2 - 1884: 862e mv a2,a1 - 1886: 00b75363 bge a4,a1,188c - 188a: 863a mv a2,a4 - 188c: 0006071b sext.w a4,a2 - n -= i; - 1890: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 1892: 14ea50e3 bge s4,a4,21d2 - 1896: ffc70f1b addiw t5,a4,-4 - 189a: 002f5e9b srliw t4,t5,0x2 - 189e: 001e8e1b addiw t3,t4,1 - 18a2: 0e0a slli t3,t3,0x2 - 18a4: 01c785b3 add a1,a5,t3 - 18a8: 8626 mv a2,s1 - 18aa: 4218 lw a4,0(a2) - 18ac: 0791 addi a5,a5,4 - 18ae: 0611 addi a2,a2,4 - 18b0: 2701 sext.w a4,a4 - 18b2: fee7ae23 sw a4,-4(a5) - 18b6: feb79ae3 bne a5,a1,18aa - 18ba: 002e9e9b slliw t4,t4,0x2 - 18be: 41df073b subw a4,t5,t4 - while (i) { - 18c2: 94f2 add s1,s1,t3 - 18c4: c31d beqz a4,18ea - 18c6: 8626 mv a2,s1 - 18c8: 87ae mv a5,a1 - 18ca: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 18ce: 00064e83 lbu t4,0(a2) - 18d2: 0785 addi a5,a5,1 - while (i) { - 18d4: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 18d8: ffd78fa3 sb t4,-1(a5) - 18dc: 0605 addi a2,a2,1 - while (i) { - 18de: ffcf18e3 bne t5,t3,18ce - 18e2: 1702 slli a4,a4,0x20 - 18e4: 9301 srli a4,a4,0x20 - 18e6: 95ba add a1,a1,a4 - 18e8: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 18ea: 1a098763 beqz s3,1a98 - 18ee: 40a5863b subw a2,a1,a0 - 18f2: 1acbd363 bge s7,a2,1a98 - 18f6: 65a2 ld a1,8(sp) - 18f8: 0126093b addw s2,a2,s2 - 18fc: 9982 jalr s3 - 18fe: 20050be3 beqz a0,2314 - 1902: 87aa mv a5,a0 - while (n) { - 1904: f825 bnez s0,1874 - 1906: 6fc2 ld t6,16(sp) - 1908: 64e2 ld s1,24(sp) - 190a: 7e02 ld t3,32(sp) - 190c: 7322 ld t1,40(sp) - 190e: 83e6 mv t2,s9 - 1910: 88d6 mv a7,s5 - 1912: 8cee mv s9,s11 - 1914: 843e mv s0,a5 - 1916: 8dea mv s11,s10 - 1918: 8d4a mv s10,s2 - 191a: 892a mv s2,a0 - while (tz) { - 191c: 08088863 beqz a7,19ac - *(stbsp__uint32 *)bf = 0x30303030; - 1920: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 1924: 03000a13 li s4,48 - while (i >= 4) { - 1928: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 192a: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 192e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - stbsp__cb_buf_clamp(i, tz); - 1932: 20000b93 li s7,512 - 1936: 040989e3 beqz s3,2188 - 193a: 41240633 sub a2,s0,s2 - 193e: 40cb87bb subw a5,s7,a2 - 1942: 873e mv a4,a5 - 1944: 00f8d363 bge a7,a5,194a - 1948: 8746 mv a4,a7 - 194a: 0007079b sext.w a5,a4 - tz -= i; - 194e: 40e888bb subw a7,a7,a4 - while (i) { - 1952: 08078ee3 beqz a5,21ee - if ((((stbsp__uintptr)bf) & 3) == 0) - 1956: 00347713 andi a4,s0,3 - 195a: e719 bnez a4,1968 - 195c: 0390006f j 2194 - 1960: 00347713 andi a4,s0,3 - 1964: 7a070f63 beqz a4,2122 - *bf++ = '0'; - 1968: 01440023 sb s4,0(s0) - --i; - 196c: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 196e: 0405 addi s0,s0,1 - while (i) { - 1970: fbe5 bnez a5,1960 - stbsp__chk_cb_buf(1); - 1972: 02098b63 beqz s3,19a8 - 1976: 4124063b subw a2,s0,s2 - 197a: 02c6d763 bge a3,a2,19a8 - 197e: 65a2 ld a1,8(sp) - 1980: 854a mv a0,s2 - 1982: f81e sd t2,48(sp) - 1984: f41a sd t1,40(sp) - 1986: f072 sd t3,32(sp) - 1988: ec7e sd t6,24(sp) - 198a: e846 sd a7,16(sp) - 198c: 00cd0d3b addw s10,s10,a2 - 1990: 9982 jalr s3 - 1992: 892a mv s2,a0 - 1994: 1a0502e3 beqz a0,2338 - 1998: 73c2 ld t2,48(sp) - 199a: 7322 ld t1,40(sp) - 199c: 7e02 ld t3,32(sp) - 199e: 6fe2 ld t6,24(sp) - 19a0: 68c2 ld a7,16(sp) - 19a2: 842a mv s0,a0 - 19a4: 1fe00693 li a3,510 - while (tz) { - 19a8: f80897e3 bnez a7,1936 - sn = tail + 1; - 19ac: 07110793 addi a5,sp,113 - 19b0: fcbe sd a5,120(sp) - while (tail[0]) { - 19b2: 080f8763 beqz t6,1a40 - stbsp__cb_buf_clamp(i, tail[0]); - 19b6: 854a mv a0,s2 - 19b8: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 19ba: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 19be: 8d4e mv s10,s3 - 19c0: 20000a13 li s4,512 - 19c4: 8bf2 mv s7,t3 - 19c6: 891a mv s2,t1 - 19c8: 899e mv s3,t2 - 19ca: 000f879b sext.w a5,t6 - 19ce: 7c0d0863 beqz s10,219e - 19d2: 40a4063b subw a2,s0,a0 - 19d6: 40ca06bb subw a3,s4,a2 - 19da: 8736 mv a4,a3 - 19dc: 00d7d363 bge a5,a3,19e2 - 19e0: 873e mv a4,a5 - tail[0] -= (char)i; - 19e2: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 19e6: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 19ea: 07f10823 sb t6,112(sp) - while (i) { - 19ee: c795 beqz a5,1a1a - 19f0: 75e6 ld a1,120(sp) - 19f2: 02079613 slli a2,a5,0x20 - 19f6: 9201 srli a2,a2,0x20 - 19f8: 00c406b3 add a3,s0,a2 - 19fc: 87ae mv a5,a1 - *bf++ = *sn++; - 19fe: 0007c703 lbu a4,0(a5) - 1a02: 0405 addi s0,s0,1 - while (i) { - 1a04: 0785 addi a5,a5,1 - *bf++ = *sn++; - 1a06: fee40fa3 sb a4,-1(s0) - while (i) { - 1a0a: fed41ae3 bne s0,a3,19fe - 1a0e: 95b2 add a1,a1,a2 - 1a10: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 1a12: 000d0d63 beqz s10,1a2c - 1a16: 40a4063b subw a2,s0,a0 - 1a1a: 00cad963 bge s5,a2,1a2c - 1a1e: 65a2 ld a1,8(sp) - 1a20: 00cb0b3b addw s6,s6,a2 - 1a24: 9d02 jalr s10 - 1a26: 200509e3 beqz a0,2438 - 1a2a: 842a mv s0,a0 - while (tail[0]) { - 1a2c: 07014f83 lbu t6,112(sp) - 1a30: f80f9de3 bnez t6,19ca - 1a34: 834a mv t1,s2 - 1a36: 83ce mv t2,s3 - 1a38: 8e5e mv t3,s7 - 1a3a: 89ea mv s3,s10 - 1a3c: 892a mv s2,a0 - 1a3e: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 1a40: 001e7e13 andi t3,t3,1 - 1a44: 000e0663 beqz t3,1a50 - if (fw > 0) { - 1a48: 00605463 blez t1,1a50 - 1a4c: 0300106f j 2a7c - for (;;) { - 1a50: 6b86 ld s7,64(sp) - 1a52: 2c013a03 ld s4,704(sp) - 1a56: 2b813a83 ld s5,696(sp) - 1a5a: 2b013b03 ld s6,688(sp) - ++f; - 1a5e: 0485 addi s1,s1,1 - for (;;) { - 1a60: b0f1 j 132c - fl |= STBSP__METRIC_SUFFIX; - 1a62: 100e6e13 ori t3,t3,256 - continue; - 1a66: 0685 addi a3,a3,1 - 1a68: bad1 j 143c - while (i) { - 1a6a: 0e0580e3 beqz a1,234a - if ((((stbsp__uintptr)bf) & 3) == 0) - 1a6e: 00347793 andi a5,s0,3 - 1a72: e799 bnez a5,1a80 - 1a74: 0dd0006f j 2350 - 1a78: 00347793 andi a5,s0,3 - 1a7c: 72078463 beqz a5,21a4 - *bf++ = '0'; - 1a80: 01d40023 sb t4,0(s0) - --i; - 1a84: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 1a86: 0405 addi s0,s0,1 - while (i) { - 1a88: f9e5 bnez a1,1a78 - while (i) { - 1a8a: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 1a8c: cc0b19e3 bnez s6,175e - 1a90: 842e mv s0,a1 - while (pr > 0) { - 1a92: c93042e3 bgtz s3,1716 - 1a96: b9cd j 1788 - while (i) { - 1a98: 87ae mv a5,a1 - while (n) { - 1a9a: dc041de3 bnez s0,1874 - 1a9e: b5a5 j 1906 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1aa0: fd07871b addiw a4,a5,-48 - 1aa4: 0ff77713 zext.b a4,a4 - 1aa8: 4625 li a2,9 - ++f; - 1aaa: 0485 addi s1,s1,1 - pr = 0; - 1aac: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1aae: 46a5 li a3,9 - 1ab0: 9ce669e3 bltu a2,a4,1482 - pr = pr * 10 + f[0] - '0'; - 1ab4: 0028971b slliw a4,a7,0x2 - 1ab8: 0117073b addw a4,a4,a7 - 1abc: 0017171b slliw a4,a4,0x1 - f++; - 1ac0: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 1ac2: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1ac4: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 1ac8: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1acc: fd07871b addiw a4,a5,-48 - 1ad0: 0ff77713 zext.b a4,a4 - 1ad4: fee6f0e3 bgeu a3,a4,1ab4 - 1ad8: b26d j 1482 - fl |= STBSP__METRIC_1024; - 1ada: 8f5d or a4,a4,a5 - 1adc: 00070e1b sext.w t3,a4 - 1ae0: 0685 addi a3,a3,1 - 1ae2: baa9 j 143c - *bf = 0; - 1ae4: 00040023 sb zero,0(s0) - 1ae8: b209 j 13ea - if (f[0] == 'l') { - 1aea: 0014c783 lbu a5,1(s1) - 1aee: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 1af2: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 1af6: 00e78c63 beq a5,a4,1b0e - ++f; - 1afa: 0485 addi s1,s1,1 - 1afc: ba65 j 14b4 - if (f[0] == 'h') - 1afe: 0014c783 lbu a5,1(s1) - 1b02: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 1b06: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 1b0a: fee798e3 bne a5,a4,1afa - if ((f[1] == '6') && (f[2] == '4')) { - 1b0e: 0024c783 lbu a5,2(s1) - ++f; - 1b12: 0489 addi s1,s1,2 - 1b14: b245 j 14b4 - s = va_arg(va, char *); - 1b16: 008b8713 addi a4,s7,8 - 1b1a: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 1b1c: 020e7693 andi a3,t3,32 - 1b20: 8772 mv a4,t3 - 1b22: 24069ee3 bnez a3,257e - stbsp__int32 i = va_arg(va, stbsp__int32); - 1b26: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 1b2a: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 1b2e: 02069f13 slli t5,a3,0x20 - 1b32: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 1b36: 00c78a63 beq a5,a2,1b4a - 1b3a: 0006d863 bgez a3,1b4a - fl |= STBSP__NEGATIVE; - 1b3e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 1b42: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 1b46: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 1b4a: 100e7693 andi a3,t3,256 - 1b4e: 5c0683e3 beqz a3,2914 - if (n64 < 1024) - 1b52: 3ff00793 li a5,1023 - 1b56: 01e7e463 bltu a5,t5,1b5e - 1b5a: 0ea0106f j 2c44 - else if (pr == -1) - 1b5e: 57fd li a5,-1 - 1b60: 30f887e3 beq a7,a5,266e - fv = (double)(stbsp__int64)n64; - 1b64: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 1b68: 034e1793 slli a5,t3,0x34 - 1b6c: 0007c463 bltz a5,1b74 - 1b70: 2300106f j 2da0 - divisor = 1024.0; - 1b74: 00004797 auipc a5,0x4 - 1b78: d047b787 fld fa5,-764(a5) # 5878 - if ((fv < divisor) && (fv > -divisor)) - 1b7c: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 1b80: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 1b84: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 1b88: a2f517d3 flt.d a5,fa0,fa5 - 1b8c: c789 beqz a5,1b96 - 1b8e: a2a717d3 flt.d a5,fa4,fa0 - 1b92: 3e079863 bnez a5,1f82 - fl += 0x1000000; - 1b96: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 1b9a: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 1b9e: feee65e3 bltu t3,a4,1b88 - 1ba2: a6c5 j 1f82 - h = (f[0] == 'X') ? hexu : hex; - 1ba4: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 1ba8: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 1bac: 00005817 auipc a6,0x5 - 1bb0: ecc80813 addi a6,a6,-308 # 6a78 - 1bb4: 00d79663 bne a5,a3,1bc0 - 1bb8: 00005817 auipc a6,0x5 - 1bbc: ea880813 addi a6,a6,-344 # 6a60 - l = (4 << 4) | (4 << 8); - 1bc0: 44000793 li a5,1088 - 1bc4: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 1bc6: 008e7793 andi a5,t3,8 - 1bca: 7a079263 bnez a5,236e - lead[0] = 0; - 1bce: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 1bd2: 008b8793 addi a5,s7,8 - 1bd6: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 1bd8: 72070b63 beqz a4,230e - n64 = va_arg(va, stbsp__uint64); - 1bdc: 000bb683 ld a3,0(s7) - dp = 0; - 1be0: d282 sw zero,100(sp) - tail[0] = 0; - 1be2: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1be6: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 1bea: 380694e3 bnez a3,2772 - lead[0] = 0; - 1bee: 06010423 sb zero,104(sp) - if (pr == 0) { - 1bf2: 78089a63 bnez a7,2386 - if (fw < (stbsp__int32)n) - 1bf6: fffb4313 not t1,s6 - 1bfa: 43f35313 srai t1,t1,0x3f - l = 0; - 1bfe: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 1c00: 01637333 and t1,t1,s6 - goto scopy; - 1c04: 4701 li a4,0 - 1c06: 4f81 li t6,0 - 1c08: 4a01 li s4,0 - cs = 0; - 1c0a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 1c0c: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 1c10: 9c0506e3 beqz a0,15dc - if (fw + pr) { - 1c14: 00e307bb addw a5,t1,a4 - 1c18: 9c079fe3 bnez a5,15f6 - 1c1c: 06910793 addi a5,sp,105 - 1c20: b661 j 17a8 - h = (f[0] == 'E') ? hexu : hex; - 1c22: 04500713 li a4,69 - 1c26: 00005317 auipc t1,0x5 - 1c2a: e5230313 addi t1,t1,-430 # 6a78 - 1c2e: 1ce78ae3 beq a5,a4,2602 - fv = va_arg(va, double); - 1c32: 008b8713 addi a4,s7,8 - if (pr == -1) - 1c36: 57fd li a5,-1 - fv = va_arg(va, double); - 1c38: e0ba sd a4,64(sp) - 1c3a: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1c3e: 1af88ce3 beq a7,a5,25f6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c42: 80000737 lui a4,0x80000 - 1c46: 00e8e733 or a4,a7,a4 - 1c4a: 2701 sext.w a4,a4 - 1c4c: 10d4 addi a3,sp,100 - 1c4e: 0110 addi a2,sp,128 - 1c50: 108c addi a1,sp,96 - 1c52: 18a8 addi a0,sp,120 - 1c54: f41e sd t2,40(sp) - 1c56: f01a sd t1,32(sp) - 1c58: ec72 sd t3,24(sp) - 1c5a: e846 sd a7,16(sp) - 1c5c: d8efe0ef jal 1ea - 1c60: 68c2 ld a7,16(sp) - 1c62: 6e62 ld t3,24(sp) - 1c64: 7302 ld t1,32(sp) - 1c66: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 1c68: 5796 lw a5,100(sp) - s = (char *)sn; - 1c6a: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 1c6c: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c6e: 3c0511e3 bnez a0,2830 - tail[0] = 0; - 1c72: 06010823 sb zero,112(sp) - sign[0] = 0; - 1c76: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 1c7a: 004e7713 andi a4,t3,4 - 1c7e: 6a070ee3 beqz a4,2b3a - sign[0] = 1; - 1c82: 6709 lui a4,0x2 - 1c84: 0705 addi a4,a4,1 # 2001 - 1c86: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1c8a: 671d lui a4,0x7 - 1c8c: 1ee794e3 bne a5,a4,2674 - if (pr < (stbsp__int32)l) - 1c90: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c94: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 1c98: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 1c9c: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 1ca0: 97fd srai a5,a5,0x3f - 1ca2: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1ca4: 00fa073b addw a4,s4,a5 - 1ca8: 01f7063b addw a2,a4,t6 - 1cac: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1cae: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 1cb2: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 1cb4: 835a mv t1,s6 - 1cb6: 00cb5363 bge s6,a2,1cbc - 1cba: 8332 mv t1,a2 - fw -= n; - 1cbc: 40e3033b subw t1,t1,a4 - cs = 0; - 1cc0: 4281 li t0,0 - pr -= l; - 1cc2: 40d7873b subw a4,a5,a3 - tz = 0; - 1cc6: 4881 li a7,0 - goto scopy; - 1cc8: b7a1 j 1c10 - h = (f[0] == 'G') ? hexu : hex; - 1cca: 04700713 li a4,71 - 1cce: 00005317 auipc t1,0x5 - 1cd2: daa30313 addi t1,t1,-598 # 6a78 - 1cd6: 14e783e3 beq a5,a4,261c - fv = va_arg(va, double); - 1cda: 008b8713 addi a4,s7,8 - if (pr == -1) - 1cde: 57fd li a5,-1 - fv = va_arg(va, double); - 1ce0: e0ba sd a4,64(sp) - 1ce2: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1ce6: 12f884e3 beq a7,a5,260e - else if (pr == 0) - 1cea: 6e0887e3 beqz a7,2bd8 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1cee: fff8871b addiw a4,a7,-1 - 1cf2: 800007b7 lui a5,0x80000 - 1cf6: 8f5d or a4,a4,a5 - 1cf8: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 1cfa: 00088a9b sext.w s5,a7 - 1cfe: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1d00: 10d4 addi a3,sp,100 - 1d02: 0110 addi a2,sp,128 - 1d04: 108c addi a1,sp,96 - 1d06: 18a8 addi a0,sp,120 - 1d08: f01e sd t2,32(sp) - 1d0a: ec1a sd t1,24(sp) - 1d0c: e872 sd t3,16(sp) - 1d0e: cdcfe0ef jal 1ea - 1d12: 6e42 ld t3,16(sp) - 1d14: 6362 ld t1,24(sp) - 1d16: 7382 ld t2,32(sp) - 1d18: 4281 li t0,0 - 1d1a: c509 beqz a0,1d24 - fl |= STBSP__NEGATIVE; - 1d1c: 080e6e13 ori t3,t3,128 - 1d20: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 1d24: 5806 lw a6,96(sp) - 1d26: 010af463 bgeu s5,a6,1d2e - l = pr; - 1d2a: d0d6 sw s5,96(sp) - 1d2c: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d2e: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d30: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d32: 01076463 bltu a4,a6,1d3a - 1d36: 1800106f j 2eb6 - 1d3a: 7be6 ld s7,120(sp) - 1d3c: fff8071b addiw a4,a6,-1 - 1d40: 1702 slli a4,a4,0x20 - 1d42: 9301 srli a4,a4,0x20 - 1d44: 001a0e9b addiw t4,s4,1 - 1d48: 75e2 ld a1,56(sp) - 1d4a: 8ade mv s5,s7 - 1d4c: 975e add a4,a4,s7 - 1d4e: 410e8ebb subw t4,t4,a6 - 1d52: 88d2 mv a7,s4 - 1d54: 86c2 mv a3,a6 - 1d56: 4f01 li t5,0 - 1d58: 03000f93 li t6,48 - 1d5c: e842 sd a6,16(sp) - 1d5e: a809 j 1d70 - --pr; - 1d60: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d62: 211e80e3 beq t4,a7,2762 - 1d66: 177d addi a4,a4,-1 # 6fff <_stdout+0x14f> - 1d68: 4f05 li t5,1 - 1d6a: 1e088ce3 beqz a7,2762 - --l; - 1d6e: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d70: 00074803 lbu a6,0(a4) - 1d74: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8777> - 1d78: 0006851b sext.w a0,a3 - 1d7c: 2581 sext.w a1,a1 - 1d7e: 0006069b sext.w a3,a2 - 1d82: fdf80fe3 beq a6,t6,1d60 - 1d86: 6842 ld a6,16(sp) - 1d88: fc2e sd a1,56(sp) - 1d8a: 86c2 mv a3,a6 - 1d8c: 000f0463 beqz t5,1d94 - 1d90: d0ae sw a1,96(sp) - 1d92: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d94: 5775 li a4,-3 - 1d96: 08e7cee3 blt a5,a4,2632 - 1d9a: 08fa4be3 blt s4,a5,2630 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d9e: 0005071b sext.w a4,a0 - if (dp > 0) { - 1da2: 7ef057e3 blez a5,2d90 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1da6: 4881 li a7,0 - 1da8: 00e7d463 bge a5,a4,1db0 - 1dac: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 1db0: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 1db4: 20029463 bnez t0,1fbc - } else if (fl & STBSP__LEADINGSPACE) { - 1db8: 004e7713 andi a4,t3,4 - 1dbc: 000715e3 bnez a4,25c6 - } else if (fl & STBSP__LEADINGPLUS) { - 1dc0: 002e7713 andi a4,t3,2 - 1dc4: 660719e3 bnez a4,2c36 - sign[0] = 0; - 1dc8: 06010423 sb zero,104(sp) - 1dcc: aaed j 1fc6 - h = (f[0] == 'A') ? hexu : hex; - 1dce: 04100713 li a4,65 - 1dd2: 00005597 auipc a1,0x5 - 1dd6: ca658593 addi a1,a1,-858 # 6a78 - 1dda: 00e783e3 beq a5,a4,25e0 - fv = va_arg(va, double); - 1dde: 008b8693 addi a3,s7,8 - if (pr == -1) - 1de2: 577d li a4,-1 - fv = va_arg(va, double); - 1de4: e0b6 sd a3,64(sp) - 1de6: 000bb783 ld a5,0(s7) - if (pr == -1) - 1dea: 7ee88963 beq a7,a4,25dc - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dee: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1df2: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1df6: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1dfa: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dfc: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 1e00: 7a07c863 bltz a5,25b0 - } else if (fl & STBSP__LEADINGSPACE) { - 1e04: 004e7793 andi a5,t3,4 - 1e08: 60078ee3 beqz a5,2c24 - 1e0c: 6789 lui a5,0x2 - 1e0e: 2785 addiw a5,a5,1 # 2001 - sign[0] = 1; - 1e10: 06f11423 sh a5,104(sp) - 1e14: 468d li a3,3 - 1e16: 4a0d li s4,3 - 1e18: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 1e1a: 4705 li a4,1 - 1e1c: 1752 slli a4,a4,0x34 - if (dp == -1023) - 1e1e: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 1e22: 8f49 or a4,a4,a0 - if (dp == -1023) - 1e24: 5cf600e3 beq a2,a5,2be4 - if (pr < 15) - 1e28: 4539 li a0,14 - n64 <<= (64 - 56); - 1e2a: 00871793 slli a5,a4,0x8 - if (pr < 15) - 1e2e: 251546e3 blt a0,a7,287a - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 1e32: 4705 li a4,1 - 1e34: 0028951b slliw a0,a7,0x2 - 1e38: 176e slli a4,a4,0x3b - 1e3a: 00a75733 srl a4,a4,a0 - 1e3e: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 1e40: 03c75793 srli a5,a4,0x3c - 1e44: 97ae add a5,a5,a1 - 1e46: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 1e4a: 22080793 addi a5,a6,544 - 1e4e: 06010813 addi a6,sp,96 - 1e52: 97c2 add a5,a5,a6 - 1e54: 03000813 li a6,48 - 1e58: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 1e5c: 22068793 addi a5,a3,544 - 1e60: 1094 addi a3,sp,96 - 1e62: 96be add a3,a3,a5 - 1e64: 07800793 li a5,120 - 1e68: def68423 sb a5,-536(a3) - lead[0] += 2; - 1e6c: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 1e70: 0ca10023 sb a0,192(sp) - if (pr) - 1e74: 740893e3 bnez a7,2dba - sn = s; - 1e78: 0c110793 addi a5,sp,193 - 1e7c: fcbe sd a5,120(sp) - 1e7e: 4701 li a4,0 - 1e80: 4501 li a0,0 - 1e82: 4305 li t1,1 - 1e84: 4685 li a3,1 - tail[1] = h[17]; - 1e86: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 1e8a: 02b00793 li a5,43 - tail[1] = h[17]; - 1e8e: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 1e92: 00065663 bgez a2,1e9e - dp = -dp; - 1e96: 40c0063b negw a2,a2 - tail[2] = '-'; - 1e9a: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 1e9e: 4829 li a6,10 - 1ea0: 030665bb remw a1,a2,a6 - 1ea4: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1ea8: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 1eac: 0305859b addiw a1,a1,48 - 1eb0: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1eb4: 18cec3e3 blt t4,a2,283a - 1eb8: 06300e93 li t4,99 - 1ebc: 54cec1e3 blt t4,a2,2bfe - 1ec0: 4ea5 li t4,9 - 1ec2: 72ced6e3 bge t4,a2,2dee - dp /= 10; - 1ec6: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 1eca: 4611 li a2,4 - 1ecc: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 1ed0: 06b10a23 sb a1,116(sp) - 1ed4: 4811 li a6,4 - 1ed6: 4f91 li t6,4 - 1ed8: 0307879b addiw a5,a5,48 - 1edc: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 1ee0: 006a07bb addw a5,s4,t1 - 1ee4: 010787bb addw a5,a5,a6 - 1ee8: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 1eec: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 1eee: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 1ef0: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1ef2: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1ef6: 835a mv t1,s6 - 1ef8: 00cb5363 bge s6,a2,1efe - 1efc: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 1efe: 030002b7 lui t0,0x3000 - fw -= n; - 1f02: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 1f06: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - s = num + 64; - 1f08: 0c010a93 addi s5,sp,192 - goto scopy; - 1f0c: b311 j 1c10 - h = (f[0] == 'B') ? hexu : hex; - 1f0e: 04200713 li a4,66 - 1f12: 00005817 auipc a6,0x5 - 1f16: b6680813 addi a6,a6,-1178 # 6a78 - 1f1a: 6ce78963 beq a5,a4,25ec - if (fl & STBSP__LEADING_0X) { - 1f1e: 008e7793 andi a5,t3,8 - 1f22: 66079e63 bnez a5,259e - lead[0] = 0; - 1f26: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 1f2a: 18000793 li a5,384 - 1f2e: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 1f30: 020e7713 andi a4,t3,32 - goto radixnum; - 1f34: b979 j 1bd2 - *s = (char)va_arg(va, int); - 1f36: 000ba783 lw a5,0(s7) - l = 1; - 1f3a: 4705 li a4,1 - 1f3c: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 1f3e: 26f10fa3 sb a5,639(sp) - 1f42: 008b8793 addi a5,s7,8 - lead[0] = 0; - 1f46: 06010423 sb zero,104(sp) - tail[0] = 0; - 1f4a: 06010823 sb zero,112(sp) - dp = 0; - 1f4e: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 1f50: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1f52: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1f56: 835a mv t1,s6 - 1f58: 69605063 blez s6,25d8 - fw -= n; - 1f5c: 337d addiw t1,t1,-1 - goto scopy; - 1f5e: 4701 li a4,0 - 1f60: 4f81 li t6,0 - 1f62: 4685 li a3,1 - 1f64: 4a01 li s4,0 - cs = 0; - 1f66: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 1f68: 27f10a93 addi s5,sp,639 - tz = 0; - 1f6c: 4881 li a7,0 - goto scopy; - 1f6e: b14d j 1c10 - fv = va_arg(va, double); - 1f70: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 1f74: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 1f78: e0ba sd a4,64(sp) - 1f7a: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 1f7e: be0795e3 bnez a5,1b68 - if (pr == -1) - 1f82: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f84: 0008871b sext.w a4,a7 - if (pr == -1) - 1f88: 00f89463 bne a7,a5,1f90 - 1f8c: 4719 li a4,6 - pr = 6; // default is 6 - 1f8e: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f90: 10d4 addi a3,sp,100 - 1f92: 0110 addi a2,sp,128 - 1f94: 108c addi a1,sp,96 - 1f96: 18a8 addi a0,sp,120 - 1f98: f01e sd t2,32(sp) - 1f9a: ec72 sd t3,24(sp) - 1f9c: e846 sd a7,16(sp) - 1f9e: a4cfe0ef jal 1ea - 1fa2: 6e62 ld t3,24(sp) - 1fa4: 68c2 ld a7,16(sp) - 1fa6: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 1fa8: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 1faa: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 1fac: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1fb0: e00500e3 beqz a0,1db0 - fl |= STBSP__NEGATIVE; - 1fb4: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 1fb8: 06010823 sb zero,112(sp) - sign[0] = 1; - 1fbc: 670d lui a4,0x3 - 1fbe: d0170713 addi a4,a4,-767 # 2d01 - 1fc2: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1fc6: 671d lui a4,0x7 - 1fc8: 7ce78963 beq a5,a4,279a - if (dp <= 0) { - 1fcc: 46f05fe3 blez a5,2c4a - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 1fd0: 040e7313 andi t1,t3,64 - 1fd4: 00078e9b sext.w t4,a5 - 1fd8: 4581 li a1,0 - 1fda: 00030963 beqz t1,1fec - 1fde: 25800593 li a1,600 - 1fe2: 41d585bb subw a1,a1,t4 - 1fe6: 470d li a4,3 - 1fe8: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 1fec: 00005a17 auipc s4,0x5 - 1ff0: 9a4a0a13 addi s4,s4,-1628 # 6990 - s = (char *)sn; - 1ff4: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 1ff6: 0cda4283 lbu t0,205(s4) - s = num + 64; - 1ffa: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 1ffe: 44defb63 bgeu t4,a3,2454 - n = 0; - 2002: 4501 li a0,0 - s = num + 64; - 2004: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2006: 4b91 li s7,4 - 2008: a015 j 202c - 200a: 8642 mv a2,a6 - 200c: 883a mv a6,a4 - 200e: 8732 mv a4,a2 - *s++ = sn[n]; - 2010: 02051613 slli a2,a0,0x20 - 2014: 9201 srli a2,a2,0x20 - 2016: 967a add a2,a2,t5 - 2018: 00064f83 lbu t6,0(a2) - ++n; - 201c: 0015061b addiw a2,a0,1 - 2020: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 2024: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x14f> - if (n >= (stbsp__uint32)dp) - 2028: 7bd57563 bgeu a0,t4,27d2 - *s++ = stbsp__comma; - 202c: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2030: fc030de3 beqz t1,200a - 2034: 2585 addiw a1,a1,1 - 2036: fd759ae3 bne a1,s7,200a - *s++ = stbsp__comma; - 203a: fe580fa3 sb t0,-1(a6) - 203e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2040: 4585 li a1,1 - 2042: b7f9 j 2010 - *d = tlen + (int)(bf - buf); - 2044: 000bb703 ld a4,0(s7) - 2048: 412407b3 sub a5,s0,s2 - 204c: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 2050: 008b8693 addi a3,s7,8 - 2054: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 2056: c31c sw a5,0(a4) - } break; - 2058: bae5 j 1a50 - if (fl & STBSP__LEADING_0X) { - 205a: 008e7793 andi a5,t3,8 - 205e: 50079b63 bnez a5,2574 - lead[0] = 0; - 2062: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 2066: 33000793 li a5,816 - 206a: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 206c: 020e7713 andi a4,t3,32 - h = hexu; - 2070: 00005817 auipc a6,0x5 - 2074: 9f080813 addi a6,a6,-1552 # 6a60 - goto radixnum; - 2078: bea9 j 1bd2 - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 207a: fefe7e13 andi t3,t3,-17 - 207e: 020e6e13 ori t3,t3,32 - 2082: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 2086: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 2088: 00005817 auipc a6,0x5 - 208c: 9f080813 addi a6,a6,-1552 # 6a78 - 2090: be05 j 1bc0 - s = va_arg(va, char *); - 2092: 000bba83 ld s5,0(s7) - 2096: 008b8793 addi a5,s7,8 - 209a: e0be sd a5,64(sp) - if (s == 0) - 209c: 360a8ee3 beqz s5,2c18 - if (((stbsp__uintptr)sn & 3) == 0) - 20a0: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 20a4: 5208c663 bltz a7,25d0 - 20a8: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 20ac: 2a0782e3 beqz a5,2b50 - if (!limit || *sn == 0) - 20b0: 5a068b63 beqz a3,2666 - if (((stbsp__uintptr)sn & 3) == 0) - 20b4: 87d6 mv a5,s5 - 20b6: a801 j 20c6 - ++sn; - 20b8: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 20ba: 0037f713 andi a4,a5,3 - --limit; - 20be: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 20c0: 280709e3 beqz a4,2b52 - if (!limit || *sn == 0) - 20c4: c681 beqz a3,20cc - 20c6: 0007c703 lbu a4,0(a5) - 20ca: f77d bnez a4,20b8 - return (stbsp__uint32)(sn - s); - 20cc: 415787b3 sub a5,a5,s5 - 20d0: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 20d4: fff6c713 not a4,a3 - 20d8: 977d srai a4,a4,0x3f - 20da: 8f7d and a4,a4,a5 - 20dc: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 20e0: 863e mv a2,a5 - pr -= l; - 20e2: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 20e4: d0b6 sw a3,96(sp) - lead[0] = 0; - 20e6: 06010423 sb zero,104(sp) - tail[0] = 0; - 20ea: 06010823 sb zero,112(sp) - dp = 0; - 20ee: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 20f0: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 20f4: 835a mv t1,s6 - 20f6: 00fb5363 bge s6,a5,20fc - 20fa: 833e mv t1,a5 - fw -= n; - 20fc: 40c3033b subw t1,t1,a2 - goto scopy; - 2100: 4f81 li t6,0 - 2102: 4a01 li s4,0 - cs = 0; - 2104: 4281 li t0,0 - tz = 0; - 2106: 4881 li a7,0 - goto scopy; - 2108: b621 j 1c10 - *bf++ = stbsp__comma; - 210a: 87b2 mv a5,a2 - cs = 0; - 210c: 4a01 li s4,0 - 210e: e44ff06f j 1752 - lead[0] -= (char)i; - 2112: 06010423 sb zero,104(sp) - while (i) { - 2116: d38ff06f j 164e - lead[0] -= (char)i; - 211a: 06010423 sb zero,104(sp) - while (i) { - 211e: ed8ff06f j 17f6 - while (i >= 4) { - 2122: 06fadc63 bge s5,a5,219a - tz -= i; - 2126: 8722 mv a4,s0 - 2128: 0007851b sext.w a0,a5 - while (i >= 4) { - 212c: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 2130: 01672023 sw s6,0(a4) - bf += 4; - 2134: 0711 addi a4,a4,4 - while (i >= 4) { - 2136: 40e5863b subw a2,a1,a4 - 213a: fecacbe3 blt s5,a2,2130 - 213e: ffc5061b addiw a2,a0,-4 - 2142: 0026561b srliw a2,a2,0x2 - 2146: 0016071b addiw a4,a2,1 - 214a: 37f1 addiw a5,a5,-4 - 214c: 0026161b slliw a2,a2,0x2 - 2150: 070a slli a4,a4,0x2 - 2152: 9722 add a4,a4,s0 - 2154: 9f91 subw a5,a5,a2 - while (i) { - 2156: 843a mv s0,a4 - 2158: 80078de3 beqz a5,1972 - 215c: 1782 slli a5,a5,0x20 - 215e: 9381 srli a5,a5,0x20 - 2160: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 2164: 0705 addi a4,a4,1 - 2166: ff470fa3 sb s4,-1(a4) - while (i) { - 216a: fe871de3 bne a4,s0,2164 - 216e: 805ff06f j 1972 - stbsp__cb_buf_clamp(i, pr); - 2172: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2174: 4981 li s3,0 - 2176: dc049263 bnez s1,173a - 217a: b8d5 j 1a6e - STBSP__UNALIGNED(while (i >= 4) { - 217c: 4401 li s0,0 - 217e: 85be mv a1,a5 - 2180: f0ea4b63 blt s4,a4,1896 - 2184: f42ff06f j 18c6 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2188: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 218c: 87c6 mv a5,a7 - tz -= i; - 218e: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2190: fc071c63 bnez a4,1968 - while (i >= 4) { - 2194: 470d li a4,3 - 2196: f8f748e3 blt a4,a5,2126 - 219a: 8722 mv a4,s0 - 219c: b7c1 j 215c - tail[0] -= (char)i; - 219e: 06010823 sb zero,112(sp) - while (i) { - 21a2: b0b9 j 19f0 - while (i >= 4) { - 21a4: 478d li a5,3 - 21a6: 8622 mv a2,s0 - 21a8: d8b7d963 bge a5,a1,173a - 21ac: ffc5839b addiw t2,a1,-4 - 21b0: 0023d79b srliw a5,t2,0x2 - 21b4: 0017859b addiw a1,a5,1 - 21b8: 058a slli a1,a1,0x2 - 21ba: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 21bc: 01762023 sw s7,0(a2) - bf += 4; - 21c0: 0611 addi a2,a2,4 - while (i >= 4) { - 21c2: fe861de3 bne a2,s0,21bc - 21c6: 0027979b slliw a5,a5,0x2 - 21ca: 40f385bb subw a1,t2,a5 - 21ce: d68ff06f j 1736 - while (i) { - 21d2: 85be mv a1,a5 - 21d4: ee071963 bnez a4,18c6 - 21d8: f16ff06f j 18ee - 21dc: 2c013a03 ld s4,704(sp) - 21e0: 2b813a83 ld s5,696(sp) - 21e4: 2b013b03 ld s6,688(sp) - 21e8: 8ca2 mv s9,s0 - 21ea: a04ff06f j 13ee - stbsp__chk_cb_buf(1); - 21ee: 2601 sext.w a2,a2 - 21f0: 1fe00793 li a5,510 - 21f4: f8c7c563 blt a5,a2,197e - 21f8: f3eff06f j 1936 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21fc: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 2200: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 2204: 2e01 sext.w t3,t3 - if (fw + pr) { - 2206: a0078be3 beqz a5,1c1c - while (fw > 0) { - 220a: be605663 blez t1,15f6 - *(stbsp__uint32 *)bf = 0x20202020; - 220e: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2212: 854a mv a0,s2 - 2214: 894e mv s2,s3 - 2216: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 2218: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa798> - stbsp__cb_buf_clamp(i, fw); - 221c: ec52 sd s4,24(sp) - 221e: f426 sd s1,40(sp) - 2220: 87a2 mv a5,s0 - 2222: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 2224: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 2228: 8d6e mv s10,s11 - *bf++ = ' '; - 222a: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 222e: 8de6 mv s11,s9 - while (i >= 4) { - 2230: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 2232: 20000e93 li t4,512 - 2236: e846 sd a7,16(sp) - 2238: f07e sd t6,32(sp) - 223a: f836 sd a3,48(sp) - 223c: e4f2 sd t3,72(sp) - 223e: e8ba sd a4,80(sp) - 2240: ec96 sd t0,88(sp) - 2242: 841a mv s0,t1 - 2244: 8a42 mv s4,a6 - 2246: 8c9e mv s9,t2 - 2248: 0c090063 beqz s2,2308 - 224c: 40a78633 sub a2,a5,a0 - 2250: 40ce873b subw a4,t4,a2 - 2254: 86ba mv a3,a4 - 2256: 00e45363 bge s0,a4,225c - 225a: 86a2 mv a3,s0 - 225c: 0006871b sext.w a4,a3 - fw -= i; - 2260: 9c15 subw s0,s0,a3 - while (i) { - 2262: e719 bnez a4,2270 - 2264: a095 j 22c8 - *bf++ = ' '; - 2266: 01678023 sb s6,0(a5) - --i; - 226a: 377d addiw a4,a4,-1 - *bf++ = ' '; - 226c: 0785 addi a5,a5,1 - while (i) { - 226e: cb29 beqz a4,22c0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2270: 0037f693 andi a3,a5,3 - 2274: faed bnez a3,2266 - while (i >= 4) { - 2276: 86be mv a3,a5 - 2278: 00070f9b sext.w t6,a4 - 227c: 00f705bb addw a1,a4,a5 - 2280: 02ebd763 bge s7,a4,22ae - *(stbsp__uint32 *)bf = 0x20202020; - 2284: 0146a023 sw s4,0(a3) - bf += 4; - 2288: 0691 addi a3,a3,4 - while (i >= 4) { - 228a: 40d5863b subw a2,a1,a3 - 228e: fecbcbe3 blt s7,a2,2284 - 2292: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8774> - 2296: 0026561b srliw a2,a2,0x2 - 229a: 0016069b addiw a3,a2,1 - 229e: 3771 addiw a4,a4,-4 - 22a0: 0026161b slliw a2,a2,0x2 - 22a4: 068a slli a3,a3,0x2 - 22a6: 96be add a3,a3,a5 - 22a8: 9f11 subw a4,a4,a2 - while (i) { - 22aa: 87b6 mv a5,a3 - 22ac: cb11 beqz a4,22c0 - 22ae: 1702 slli a4,a4,0x20 - 22b0: 9301 srli a4,a4,0x20 - 22b2: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 22b6: 0685 addi a3,a3,1 - 22b8: ff668fa3 sb s6,-1(a3) - while (i) { - 22bc: fef69de3 bne a3,a5,22b6 - stbsp__chk_cb_buf(1); - 22c0: 40a78633 sub a2,a5,a0 - 22c4: 00090e63 beqz s2,22e0 - 22c8: 2601 sext.w a2,a2 - 22ca: 00cf5b63 bge t5,a2,22e0 - 22ce: 85ce mv a1,s3 - 22d0: 9cb1 addw s1,s1,a2 - 22d2: 9902 jalr s2 - 22d4: c541 beqz a0,235c - 22d6: 87aa mv a5,a0 - 22d8: 20000e93 li t4,512 - 22dc: 1fe00f13 li t5,510 - while (fw > 0) { - 22e0: f68044e3 bgtz s0,2248 - 22e4: 8322 mv t1,s0 - 22e6: 89ca mv s3,s2 - 22e8: 83e6 mv t2,s9 - 22ea: 68c2 ld a7,16(sp) - 22ec: 8cee mv s9,s11 - 22ee: 6a62 ld s4,24(sp) - 22f0: 8dea mv s11,s10 - 22f2: 7f82 ld t6,32(sp) - 22f4: 8d26 mv s10,s1 - 22f6: 76c2 ld a3,48(sp) - 22f8: 6e26 ld t3,72(sp) - 22fa: 6746 ld a4,80(sp) - 22fc: 62e6 ld t0,88(sp) - 22fe: 74a2 ld s1,40(sp) - 2300: 892a mv s2,a0 - 2302: 843e mv s0,a5 - 2304: af2ff06f j 15f6 - stbsp__cb_buf_clamp(i, fw); - 2308: 8722 mv a4,s0 - 230a: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 230c: b795 j 2270 - n64 = va_arg(va, stbsp__uint32); - 230e: 000be683 lwu a3,0(s7) - 2312: b0f9 j 1be0 - 2314: 2c013a03 ld s4,704(sp) - 2318: 2b813a83 ld s5,696(sp) - 231c: 2b013b03 ld s6,688(sp) - 2320: 8cca mv s9,s2 - 2322: 8ccff06f j 13ee - 2326: 8cd6 mv s9,s5 - 2328: 2c013a03 ld s4,704(sp) - 232c: 2b813a83 ld s5,696(sp) - 2330: 2b013b03 ld s6,688(sp) - 2334: 8baff06f j 13ee - 2338: 2c013a03 ld s4,704(sp) - 233c: 2b813a83 ld s5,696(sp) - 2340: 2b013b03 ld s6,688(sp) - 2344: 8cea mv s9,s10 - 2346: 8a8ff06f j 13ee - while (i) { - 234a: 85a2 mv a1,s0 - 234c: c12ff06f j 175e - while (i >= 4) { - 2350: 478d li a5,3 - 2352: 8622 mv a2,s0 - 2354: e4b7cce3 blt a5,a1,21ac - 2358: be2ff06f j 173a - 235c: 2c013a03 ld s4,704(sp) - 2360: 2b813a83 ld s5,696(sp) - 2364: 2b013b03 ld s6,688(sp) - 2368: 8ca6 mv s9,s1 - 236a: 884ff06f j 13ee - lead[2] = h[16]; - 236e: 01084683 lbu a3,16(a6) - lead[0] = 2; - 2372: 678d lui a5,0x3 - 2374: 0789 addi a5,a5,2 # 3002 - 2376: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 237a: 06d10523 sb a3,106(sp) - 237e: b891 j 1bd2 - 2380: 8cea mv s9,s10 - 2382: 86cff06f j 13ee - 2386: 4f81 li t6,0 - 2388: 4a01 li s4,0 - 238a: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 238c: 00004f17 auipc t5,0x4 - 2390: 6d1f4f03 lbu t5,1745(t5) # 6a5d - 2394: 0510 addi a2,sp,640 - 2396: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 239a: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 239c: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 23a0: 0007029b sext.w t0,a4 - 23a4: 005317bb sllw a5,t1,t0 - 23a8: 37fd addiw a5,a5,-1 - 23aa: 8ff5 and a5,a5,a3 - 23ac: 97c2 add a5,a5,a6 - 23ae: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 23b2: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 23b6: fff60a93 addi s5,a2,-1 - 23ba: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 23be: e691 bnez a3,23ca - 23c0: 051c addi a5,sp,640 - 23c2: 415787bb subw a5,a5,s5 - 23c6: 0317dd63 bge a5,a7,2400 - if (fl & STBSP__TRIPLET_COMMA) { - 23ca: 020e8963 beqz t4,23fc - ++l; - 23ce: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 23d2: 0047d29b srliw t0,a5,0x4 - 23d6: 00f2c2b3 xor t0,t0,a5 - 23da: 00f2f293 andi t0,t0,15 - ++l; - 23de: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 23e2: 0087d71b srliw a4,a5,0x8 - 23e6: 00029b63 bnez t0,23fc - l &= ~15; - 23ea: 9bc1 andi a5,a5,-16 - 23ec: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 23f0: ffe60a93 addi s5,a2,-2 - 23f4: ffe60f23 sb t5,-2(a2) - 23f8: 0087d71b srliw a4,a5,0x8 - 23fc: 8656 mv a2,s5 - 23fe: b74d j 23a0 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 2400: 0045d29b srliw t0,a1,0x4 - 2404: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 2408: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 240c: 0182929b slliw t0,t0,0x18 - 2410: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 2414: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2418: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 241a: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 241c: 86be mv a3,a5 - 241e: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 2422: 835a mv t1,s6 - 2424: 00cb5363 bge s6,a2,242a - 2428: 8332 mv t1,a2 - fw -= n; - 242a: 41f3033b subw t1,t1,t6 - pr -= l; - 242e: 9f1d subw a4,a4,a5 - goto scopy; - 2430: 4f81 li t6,0 - tz = 0; - 2432: 4881 li a7,0 - goto scopy; - 2434: fdcff06f j 1c10 - 2438: 8cda mv s9,s6 - 243a: 2c013a03 ld s4,704(sp) - 243e: 2b813a83 ld s5,696(sp) - 2442: 2b013b03 ld s6,688(sp) - 2446: fa9fe06f j 13ee - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 244a: 020e6e13 ori t3,t3,32 - ++f; - 244e: 0485 addi s1,s1,1 - 2450: 864ff06f j 14b4 - n = 0; - 2454: 4601 li a2,0 - s = num + 64; - 2456: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2458: 4511 li a0,4 - *s++ = stbsp__comma; - 245a: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 245e: 00030563 beqz t1,2468 - 2462: 2585 addiw a1,a1,1 - 2464: 10a58363 beq a1,a0,256a - 2468: 873e mv a4,a5 - *s++ = sn[n]; - 246a: 02061793 slli a5,a2,0x20 - 246e: 9381 srli a5,a5,0x20 - 2470: 97fa add a5,a5,t5 - 2472: 0007c803 lbu a6,0(a5) - ++n; - 2476: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 2478: ff070fa3 sb a6,-1(a4) - if (n >= l) - 247c: fcd66fe3 bltu a2,a3,245a - if (n < (stbsp__uint32)dp) { - 2480: 0bd663e3 bltu a2,t4,2d26 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 2484: 415707b3 sub a5,a4,s5 - 2488: 030002b7 lui t0,0x3000 - 248c: 00f282bb addw t0,t0,a5 - if (pr) { - 2490: 00088a63 beqz a7,24a4 - *s++ = stbsp__period; - 2494: 0cca4683 lbu a3,204(s4) - 2498: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 249c: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 24a0: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 24a4: 100e7713 andi a4,t3,256 - 24a8: 86f2 mv a3,t3 - 24aa: 2c070163 beqz a4,276c - if (fl & STBSP__METRIC_NOSPACE) - 24ae: 40ae5f9b sraiw t6,t3,0xa - 24b2: 001fcf93 xori t6,t6,1 - 24b6: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 24ba: 02000713 li a4,32 - 24be: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 24c2: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 24c6: 018e561b srliw a2,t3,0x18 - 24ca: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 24ce: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 24d2: c225 beqz a2,2532 - if (fl & STBSP__METRIC_1024) - 24d4: 001f859b addiw a1,t6,1 - 24d8: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24dc: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 24de: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24e2: 85b2 mv a1,a2 - 24e4: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 24e6: 06055ee3 bgez a0,2d62 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24ea: 00003517 auipc a0,0x3 - 24ee: bee50513 addi a0,a0,-1042 # 50d8 <_GLOBAL__sub_I__ZSt3cin+0xe8> - 24f2: 972a add a4,a4,a0 - 24f4: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24f8: 6709 lui a4,0x2 - 24fa: 80070713 addi a4,a4,-2048 # 1800 - 24fe: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 2500: 06010813 addi a6,sp,96 - 2504: 22060693 addi a3,a2,544 - 2508: 96c2 add a3,a3,a6 - 250a: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff8568> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 250e: 8007071b addiw a4,a4,-2048 - 2512: 060715e3 bnez a4,2d7c - tail[idx + 1] = 'i'; - 2516: 2f89 addiw t6,t6,2 - 2518: 0ffff593 zext.b a1,t6 - 251c: 1094 addi a3,sp,96 - 251e: 22058713 addi a4,a1,544 - 2522: 9736 add a4,a4,a3 - 2524: 06900693 li a3,105 - 2528: 8fae mv t6,a1 - 252a: ded70823 sb a3,-528(a4) - tail[0] = idx; - 252e: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2532: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 2536: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 253a: fff6c713 not a4,a3 - 253e: 977d srai a4,a4,0x3f - 2540: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2542: 00fa073b addw a4,s4,a5 - 2546: 9f2d addw a4,a4,a1 - 2548: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 254c: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 254e: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2550: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2552: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2556: 835a mv t1,s6 - 2558: 00cb5363 bge s6,a2,255e - 255c: 8332 mv t1,a2 - fw -= n; - 255e: 40e3033b subw t1,t1,a4 - pr -= l; - 2562: 40d7873b subw a4,a5,a3 - goto scopy; - 2566: eaaff06f j 1c10 - *s++ = stbsp__comma; - 256a: fe578fa3 sb t0,-1(a5) - 256e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2570: 4585 li a1,1 - 2572: bde5 j 246a - lead[0] = 1; - 2574: 678d lui a5,0x3 - 2576: 0785 addi a5,a5,1 # 3001 - 2578: 06f11423 sh a5,104(sp) - 257c: b4ed j 2066 - if ((f[0] != 'u') && (i64 < 0)) { - 257e: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 2582: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 2586: dcd78263 beq a5,a3,1b4a - 258a: dc0f5063 bgez t5,1b4a - fl |= STBSP__NEGATIVE; - 258e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 2592: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 2596: 00070e1b sext.w t3,a4 - 259a: db0ff06f j 1b4a - lead[2] = h[0xb]; - 259e: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 25a2: 678d lui a5,0x3 - 25a4: 0789 addi a5,a5,2 # 3002 - 25a6: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 25aa: 06e10523 sb a4,106(sp) - 25ae: bab5 j 1f2a - sign[0] = 1; - 25b0: 678d lui a5,0x3 - 25b2: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 25b6: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 25ba: 06f11423 sh a5,104(sp) - 25be: 468d li a3,3 - 25c0: 4a0d li s4,3 - 25c2: 4809 li a6,2 - 25c4: b899 j 1e1a - sign[0] = 1; - 25c6: 6709 lui a4,0x2 - 25c8: 0705 addi a4,a4,1 # 2001 - 25ca: 06e11423 sh a4,104(sp) - 25ce: bae5 j 1fc6 - if (((stbsp__uintptr)sn & 3) == 0) - 25d0: 0e0780e3 beqz a5,2eb0 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 25d4: 56fd li a3,-1 - 25d6: bcf9 j 20b4 - if (fw < (stbsp__int32)n) - 25d8: 4305 li t1,1 - 25da: b249 j 1f5c - pr = 6; // default is 6 - 25dc: 4899 li a7,6 - 25de: b801 j 1dee - h = (f[0] == 'A') ? hexu : hex; - 25e0: 00004597 auipc a1,0x4 - 25e4: 48058593 addi a1,a1,1152 # 6a60 - 25e8: ff6ff06f j 1dde - h = (f[0] == 'B') ? hexu : hex; - 25ec: 00004817 auipc a6,0x4 - 25f0: 47480813 addi a6,a6,1140 # 6a60 - 25f4: b22d j 1f1e - 25f6: 80000737 lui a4,0x80000 - 25fa: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff877e> - pr = 6; // default is 6 - 25fc: 4899 li a7,6 - 25fe: e4eff06f j 1c4c - h = (f[0] == 'E') ? hexu : hex; - 2602: 00004317 auipc t1,0x4 - 2606: 45e30313 addi t1,t1,1118 # 6a60 - 260a: e28ff06f j 1c32 - 260e: 80000737 lui a4,0x80000 - 2612: 4a99 li s5,6 - 2614: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff877d> - pr = 6; - 2616: 4a19 li s4,6 - 2618: ee8ff06f j 1d00 - h = (f[0] == 'G') ? hexu : hex; - 261c: 00004317 auipc t1,0x4 - 2620: 44430313 addi t1,t1,1092 # 6a60 - 2624: eb6ff06f j 1cda - 2628: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 262a: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 262c: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 262e: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2630: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 2632: 0005071b sext.w a4,a0 - 2636: 01175f63 bge a4,a7,2654 - pr = l - 1; - 263a: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 263e: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2642: 70028c63 beqz t0,2d5a - sign[0] = 1; - 2646: 670d lui a4,0x3 - 2648: d0170713 addi a4,a4,-767 # 2d01 - 264c: 06e11423 sh a4,104(sp) - 2650: e3aff06f j 1c8a - else if (pr) - 2654: fe0885e3 beqz a7,263e - --pr; // when using %e, there is one digit before the decimal - 2658: 38fd addiw a7,a7,-1 - 265a: b7d5 j 263e - switch (f[0]) { - 265c: 0034c783 lbu a5,3(s1) - f += 3; - 2660: 048d addi s1,s1,3 - 2662: e53fe06f j 14b4 - if (!limit || *sn == 0) - 2666: 4601 li a2,0 - 2668: 4701 li a4,0 - 266a: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 266c: bca5 j 20e4 - pr = 1; - 266e: 4885 li a7,1 - 2670: cf4ff06f j 1b64 - *s++ = sn[0]; - 2674: 000ac703 lbu a4,0(s5) - 2678: 0ce10023 sb a4,192(sp) - if (pr) - 267c: 54088563 beqz a7,2bc6 - *s++ = stbsp__period; - 2680: 00004617 auipc a2,0x4 - 2684: 3dc64603 lbu a2,988(a2) # 6a5c - if ((l - 1) > (stbsp__uint32)pr) - 2688: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 268c: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 2690: 0008851b sext.w a0,a7 - 2694: 0007061b sext.w a2,a4 - 2698: 52c57163 bgeu a0,a2,2bba - l = pr + 1; - 269c: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 26a0: 8746 mv a4,a7 - 26a2: 02071613 slli a2,a4,0x20 - 26a6: 9201 srli a2,a2,0x20 - 26a8: 0c210713 addi a4,sp,194 - 26ac: 0a85 addi s5,s5,1 - 26ae: 963a add a2,a2,a4 - *s++ = sn[n]; - 26b0: 000ac583 lbu a1,0(s5) - 26b4: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 26b6: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 26b8: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 26bc: fec71ae3 bne a4,a2,26b0 - tail[1] = h[0xe]; - 26c0: 00e34803 lbu a6,14(t1) - dp -= 1; - 26c4: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 26c8: 02b00593 li a1,43 - tail[1] = h[0xe]; - 26cc: 070108a3 sb a6,113(sp) - if (dp < 0) { - 26d0: 00075663 bgez a4,26dc - dp = -dp; - 26d4: 4705 li a4,1 - 26d6: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 26d8: 02d00593 li a1,45 - 26dc: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 26e0: 06300793 li a5,99 - 26e4: 4ee7d663 bge a5,a4,2bd0 - 26e8: 4595 li a1,5 - 26ea: 4f95 li t6,5 - 26ec: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 26ee: 47a9 li a5,10 - dp /= 10; - 26f0: 02f7433b divw t1,a4,a5 - --n; - 26f4: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 26f8: 020f1293 slli t0,t5,0x20 - 26fc: 220e8813 addi a6,t4,544 - 2700: 06010893 addi a7,sp,96 - 2704: 0202d293 srli t0,t0,0x20 - 2708: 01180eb3 add t4,a6,a7 - 270c: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff8998> - 2710: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 2714: 07f10823 sb t6,112(sp) - if (n <= 3) - 2718: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 271a: 02f7673b remw a4,a4,a5 - dp /= 10; - 271e: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 2722: 02f36abb remw s5,t1,a5 - 2726: 0307071b addiw a4,a4,48 - 272a: deee8823 sb a4,-528(t4) - 272e: 030a871b addiw a4,s5,48 - 2732: dee28823 sb a4,-528(t0) - if (n <= 3) - 2736: 014f0a63 beq t5,s4,274a - dp /= 10; - 273a: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 273e: 02f867bb remw a5,a6,a5 - 2742: 0307879b addiw a5,a5,48 - 2746: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 274a: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 274c: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 2750: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 2754: 40d508bb subw a7,a0,a3 - 2758: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 275a: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 275e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2760: bbc9 j 2532 - 2762: fc2e sd a1,56(sp) - 2764: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2766: 8536 mv a0,a3 - 2768: e2cff06f j 1d94 - flt_lead: - 276c: 4581 li a1,0 - 276e: 4f81 li t6,0 - 2770: b3c9 j 2532 - n = pr + lead[0] + tail[0] + tz; - 2772: 06814a03 lbu s4,104(sp) - 2776: 000a0f9b sext.w t6,s4 - 277a: b901 j 238a - if ((f[1] == '6') && (f[2] == '4')) { - 277c: 0024c683 lbu a3,2(s1) - 2780: 03400713 li a4,52 - 2784: 00e68463 beq a3,a4,278c - 2788: e2bfe06f j 15b2 - switch (f[0]) { - 278c: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2790: 020e6e13 ori t3,t3,32 - f += 3; - 2794: 048d addi s1,s1,3 - 2796: d1ffe06f j 14b4 - if (pr < (stbsp__int32)l) - 279a: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 279e: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 27a2: fff7c793 not a5,a5 - 27a6: 97fd srai a5,a5,0x3f - 27a8: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 27aa: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 27ae: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 27b0: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 27b2: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 27b6: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 27b8: 835a mv t1,s6 - 27ba: 00cb5363 bge s6,a2,27c0 - 27be: 8332 mv t1,a2 - fw -= n; - 27c0: 40e3033b subw t1,t1,a4 - goto scopy; - 27c4: 4f81 li t6,0 - pr -= l; - 27c6: 40d7873b subw a4,a5,a3 - cs = 0; - 27ca: 4281 li t0,0 - tz = 0; - 27cc: 4881 li a7,0 - goto scopy; - 27ce: c42ff06f j 1c10 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 27d2: 415705b3 sub a1,a4,s5 - 27d6: 030002b7 lui t0,0x3000 - 27da: 00b282bb addw t0,t0,a1 - l = pr - n; - 27de: 0008859b sext.w a1,a7 - if (pr) - 27e2: 42088763 beqz a7,2c10 - *s++ = stbsp__period; - 27e6: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 27ea: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 27ee: 00280713 addi a4,a6,2 - 27f2: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 27f6: 4065ed63 bltu a1,t1,2c10 - while (n < l) { - 27fa: 5ed57863 bgeu a0,a3,2dea - 27fe: 40c687bb subw a5,a3,a2 - 2802: 37fd addiw a5,a5,-1 - 2804: 1782 slli a5,a5,0x20 - 2806: 9381 srli a5,a5,0x20 - 2808: 1602 slli a2,a2,0x20 - 280a: 9201 srli a2,a2,0x20 - 280c: 0785 addi a5,a5,1 - 280e: 967a add a2,a2,t5 - 2810: 97ba add a5,a5,a4 - *s++ = sn[n]; - 2812: 00064503 lbu a0,0(a2) - 2816: 0705 addi a4,a4,1 - while (n < l) { - 2818: 0605 addi a2,a2,1 - *s++ = sn[n]; - 281a: fea70fa3 sb a0,-1(a4) - while (n < l) { - 281e: fef71ae3 bne a4,a5,2812 - tz = pr - (l - dp); - 2822: 01d585bb addw a1,a1,t4 - 2826: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 282a: 415787b3 sub a5,a5,s5 - 282e: b99d j 24a4 - fl |= STBSP__NEGATIVE; - 2830: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 2834: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2838: b539 j 2646 - tail[0] = (char)n; - 283a: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 283c: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 2840: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2844: 4819 li a6,6 - 2846: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2848: 4599 li a1,6 - dp /= 10; - 284a: 4f29 li t5,10 - if (n <= 3) - 284c: 428d li t0,3 - 284e: 87b2 mv a5,a2 - dp /= 10; - 2850: 03e7c7bb divw a5,a5,t5 - --n; - 2854: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 2856: 02059613 slli a2,a1,0x20 - 285a: 9201 srli a2,a2,0x20 - 285c: 06010e93 addi t4,sp,96 - 2860: 22060613 addi a2,a2,544 - 2864: 9676 add a2,a2,t4 - 2866: 03e7eebb remw t4,a5,t5 - 286a: 030e8e9b addiw t4,t4,48 - 286e: dfd60823 sb t4,-528(a2) - if (n <= 3) - 2872: fc559fe3 bne a1,t0,2850 - 2876: e6aff06f j 1ee0 - *s++ = h[(n64 >> 60) & 15]; - 287a: 93f1 srli a5,a5,0x3c - 287c: 97ae add a5,a5,a1 - 287e: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 2882: 1088 addi a0,sp,96 - 2884: 22080793 addi a5,a6,544 - 2888: 97aa add a5,a5,a0 - 288a: 03000513 li a0,48 - 288e: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 2892: 22068793 addi a5,a3,544 - 2896: 1094 addi a3,sp,96 - 2898: 96be add a3,a3,a5 - *s++ = stbsp__period; - 289a: 00004517 auipc a0,0x4 - 289e: 1c254503 lbu a0,450(a0) # 6a5c - lead[2 + lead[0]] = 'x'; - 28a2: 07800813 li a6,120 - sn = s; - 28a6: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 28aa: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 28ae: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 28b2: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 28b6: 0c610023 sb t1,192(sp) - n64 <<= 4; - 28ba: 0732 slli a4,a4,0xc - sn = s; - 28bc: fcbe sd a5,120(sp) - n = pr; - 28be: 0008869b sext.w a3,a7 - while (n--) { - 28c2: 4831 li a6,12 - if (n > 13) - 28c4: 4535 li a0,13 - tz = pr - n; - 28c6: 40a688bb subw a7,a3,a0 - while (n--) { - 28ca: 02081313 slli t1,a6,0x20 - 28ce: 02035313 srli t1,t1,0x20 - 28d2: 22030693 addi a3,t1,544 - 28d6: 1088 addi a0,sp,96 - 28d8: 9536 add a0,a0,a3 - 28da: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 28de: 03c75693 srli a3,a4,0x3c - 28e2: 96ae add a3,a3,a1 - 28e4: 0006c683 lbu a3,0(a3) - 28e8: 0785 addi a5,a5,1 - n64 <<= 4; - 28ea: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 28ec: fed78fa3 sb a3,-1(a5) - while (n--) { - 28f0: fea797e3 bne a5,a0,28de - l = (int)(s - (num + 64)); - 28f4: 280d addiw a6,a6,3 - 28f6: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 28fa: fff6c713 not a4,a3 - 28fe: 977d srai a4,a4,0x3f - 2900: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 2904: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 2908: 0007031b sext.w t1,a4 - pr -= l; - 290c: 4107073b subw a4,a4,a6 - 2910: d76ff06f j 1e86 - *--s = stbsp__comma; - 2914: 00004a17 auipc s4,0x4 - 2918: 07ca0a13 addi s4,s4,124 # 6990 - if (n64 >= 100000000) { - 291c: 05f5e7b7 lui a5,0x5f5e - 2920: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56877> - n = (stbsp__uint32)(n64 % 100000000); - 2924: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 2928: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 292c: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 292e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56878> - l = 0; - 2932: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2934: 040e7813 andi a6,t3,64 - 2938: 4701 li a4,0 - 293a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 293c: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 2940: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2942: 430d li t1,3 - n /= 10; - 2944: 45a9 li a1,10 - while (n) { - 2946: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2948: 06400f93 li t6,100 - if (n64 >= 100000000) { - 294c: 67c2 ld a5,16(sp) - char *o = s - 8; - 294e: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 2952: 0fe7f763 bgeu a5,t5,2a40 - n = (stbsp__uint32)(n64 % 100000000); - 2956: 6662 ld a2,24(sp) - 2958: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 295c: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2960: 0e080463 beqz a6,2a48 - while (n) { - 2964: cb85 beqz a5,2994 - *--s = stbsp__comma; - 2966: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2968: 00671763 bne a4,t1,2976 - --o; - 296c: 017a8023 sb s7,0(s5) - 2970: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 2972: 1afd addi s5,s5,-1 - l = 0; - 2974: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2976: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 2978: 02b7f63b remuw a2,a5,a1 - 297c: 0306061b addiw a2,a2,48 - 2980: 00ca8023 sb a2,0(s5) - n /= 10; - 2984: 02b7d63b divuw a2,a5,a1 - while (n) { - 2988: 00fef563 bgeu t4,a5,2992 - *--s = stbsp__comma; - 298c: 1afd addi s5,s5,-1 - 298e: 87b2 mv a5,a2 - 2990: bfe1 j 2968 - while (n) { - 2992: 4285 li t0,1 - if (n64 == 0) { - 2994: 020f0063 beqz t5,29b4 - while (s != o) - 2998: fb550ae3 beq a0,s5,294c - *--s = stbsp__comma; - 299c: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 299e: 00080663 beqz a6,29aa - 29a2: 08670863 beq a4,t1,2a32 - 29a6: 2705 addiw a4,a4,1 - 29a8: 4285 li t0,1 - *--s = '0'; - 29aa: 03000793 li a5,48 - 29ae: 00fa8023 sb a5,0(s5) - 29b2: b7dd j 2998 - 29b4: 00028363 beqz t0,29ba - 29b8: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 29ba: 000ac703 lbu a4,0(s5) - 29be: 03000793 li a5,48 - 29c2: 34f70b63 beq a4,a5,2d18 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29c6: 051c addi a5,sp,640 - 29c8: 415786bb subw a3,a5,s5 - tail[0] = 0; - 29cc: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 29d0: 080e7713 andi a4,t3,128 - 29d4: 87f2 mv a5,t3 - 29d6: 32070863 beqz a4,2d06 - 29da: 678d lui a5,0x3 - 29dc: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 29e0: 06f11423 sh a5,104(sp) - 29e4: 4705 li a4,1 - 29e6: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29e8: d0b6 sw a3,96(sp) - if (l == 0) { - 29ea: 30068163 beqz a3,2cec - cs = l + (3 << 24); - 29ee: 030002b7 lui t0,0x3000 - 29f2: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 29f6: 0006861b sext.w a2,a3 - if (pr < 0) - 29fa: fff8c793 not a5,a7 - 29fe: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 2a00: 00f8f7b3 and a5,a7,a5 - 2a04: 0007859b sext.w a1,a5 - 2a08: 00c5d363 bge a1,a2,2a0e - 2a0c: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 2a0e: 00f7063b addw a2,a4,a5 - 2a12: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2a14: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2a16: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2a1a: 835a mv t1,s6 - 2a1c: 00cb5363 bge s6,a2,2a22 - 2a20: 8332 mv t1,a2 - fw -= n; - 2a22: 40e3033b subw t1,t1,a4 - scopy: - 2a26: 4f81 li t6,0 - pr -= l; - 2a28: 40d7873b subw a4,a5,a3 - tz = 0; - 2a2c: 4881 li a7,0 - scopy: - 2a2e: 9e2ff06f j 1c10 - *--s = stbsp__comma; - 2a32: 87de mv a5,s7 - --o; - 2a34: 157d addi a0,a0,-1 - l = 0; - 2a36: 4701 li a4,0 - --o; - 2a38: 4285 li t0,1 - 2a3a: 00fa8023 sb a5,0(s5) - 2a3e: bfa9 j 2998 - n = (stbsp__uint32)n64; - 2a40: 000f079b sext.w a5,t5 - n64 = 0; - 2a44: 4f01 li t5,0 - 2a46: bf29 j 2960 - 2a48: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a4a: 03f7f63b remuw a2,a5,t6 - s -= 2; - 2a4e: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a50: 0007889b sext.w a7,a5 - 2a54: 2605 addiw a2,a2,1 - 2a56: 0016161b slliw a2,a2,0x1 - 2a5a: 1602 slli a2,a2,0x20 - 2a5c: 9201 srli a2,a2,0x20 - 2a5e: 9652 add a2,a2,s4 - 2a60: 00065603 lhu a2,0(a2) - n /= 100; - 2a64: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a68: 00ca9023 sh a2,0(s5) - } while (n); - 2a6c: 06300613 li a2,99 - 2a70: fd166de3 bltu a2,a7,2a4a - 2a74: 7882 ld a7,32(sp) - if (n64 == 0) { - 2a76: f20f11e3 bnez t5,2998 - 2a7a: bf2d j 29b4 - *(stbsp__uint32 *)bf = 0x20202020; - 2a7c: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2a80: 854a mv a0,s2 - *bf++ = ' '; - 2a82: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 2a86: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa798> - stbsp__chk_cb_buf(1); - 2a8a: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 2a8e: 20000b93 li s7,512 - 2a92: 891a mv s2,t1 - 2a94: 0a098063 beqz s3,2b34 - 2a98: 40a40633 sub a2,s0,a0 - 2a9c: 40cb87bb subw a5,s7,a2 - 2aa0: 873e mv a4,a5 - 2aa2: 00f95363 bge s2,a5,2aa8 - 2aa6: 874a mv a4,s2 - 2aa8: 0007079b sext.w a5,a4 - fw -= i; - 2aac: 40e9093b subw s2,s2,a4 - while (i) { - 2ab0: e799 bnez a5,2abe - 2ab2: a281 j 2bf2 - *bf++ = ' '; - 2ab4: 01540023 sb s5,0(s0) - --i; - 2ab8: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 2aba: 0405 addi s0,s0,1 - while (i) { - 2abc: cba1 beqz a5,2b0c - if ((((stbsp__uintptr)bf) & 3) == 0) - 2abe: 00347713 andi a4,s0,3 - 2ac2: fb6d bnez a4,2ab4 - while (i >= 4) { - 2ac4: 470d li a4,3 - 2ac6: 40f75363 bge a4,a5,2ecc - 2aca: ffc7869b addiw a3,a5,-4 - 2ace: 0026d79b srliw a5,a3,0x2 - 2ad2: 0017871b addiw a4,a5,1 - 2ad6: 070a slli a4,a4,0x2 - 2ad8: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 2ada: 01642023 sw s6,0(s0) - bf += 4; - 2ade: 0411 addi s0,s0,4 - while (i >= 4) { - 2ae0: fee41de3 bne s0,a4,2ada - 2ae4: 0027979b slliw a5,a5,0x2 - 2ae8: 40f687bb subw a5,a3,a5 - while (i--) - 2aec: fff7869b addiw a3,a5,-1 - 2af0: cf91 beqz a5,2b0c - 2af2: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 2af4: 0705 addi a4,a4,1 - while (i--) - 2af6: 0007061b sext.w a2,a4 - *bf++ = ' '; - 2afa: ff570fa3 sb s5,-1(a4) - while (i--) - 2afe: fec79be3 bne a5,a2,2af4 - 2b02: 2685 addiw a3,a3,1 - 2b04: 02069793 slli a5,a3,0x20 - 2b08: 9381 srli a5,a5,0x20 - 2b0a: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 2b0c: 00098f63 beqz s3,2b2a - 2b10: 40a4063b subw a2,s0,a0 - 2b14: 00ca5b63 bge s4,a2,2b2a - 2b18: 65a2 ld a1,8(sp) - 2b1a: e81e sd t2,16(sp) - 2b1c: 00cd0d3b addw s10,s10,a2 - 2b20: 9982 jalr s3 - 2b22: 80050be3 beqz a0,2338 - 2b26: 63c2 ld t2,16(sp) - 2b28: 842a mv s0,a0 - while (fw) { - 2b2a: f60915e3 bnez s2,2a94 - 2b2e: 892a mv s2,a0 - 2b30: f21fe06f j 1a50 - stbsp__cb_buf_clamp(i, fw); - 2b34: 87ca mv a5,s2 - fw -= i; - 2b36: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2b38: b759 j 2abe - } else if (fl & STBSP__LEADINGPLUS) { - 2b3a: 002e7713 andi a4,t3,2 - 2b3e: 94070663 beqz a4,1c8a - sign[0] = 1; - 2b42: 670d lui a4,0x3 - 2b44: b0170713 addi a4,a4,-1279 # 2b01 - 2b48: 06e11423 sh a4,104(sp) - 2b4c: 93eff06f j 1c8a - if (((stbsp__uintptr)sn & 3) == 0) - 2b50: 87d6 mv a5,s5 - while (limit >= 4) { - 2b52: 470d li a4,3 - 2b54: 22d77763 bgeu a4,a3,2d82 - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b58: feff05b7 lui a1,0xfeff0 - 2b5c: 80808637 lui a2,0x80808 - 2b60: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8677> - 2b64: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff808007f8> - while (limit >= 4) { - 2b68: 480d li a6,3 - 2b6a: a029 j 2b74 - limit -= 4; - 2b6c: 36f1 addiw a3,a3,-4 - sn += 4; - 2b6e: 0791 addi a5,a5,4 - while (limit >= 4) { - 2b70: 20d87963 bgeu a6,a3,2d82 - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 2b74: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b76: 00b7053b addw a0,a4,a1 - 2b7a: fff74713 not a4,a4 - 2b7e: 8f69 and a4,a4,a0 - 2b80: 8f71 and a4,a4,a2 - 2b82: 2701 sext.w a4,a4 - 2b84: d765 beqz a4,2b6c - 2b86: 02069713 slli a4,a3,0x20 - 2b8a: 9301 srli a4,a4,0x20 - 2b8c: 973e add a4,a4,a5 - 2b8e: a021 j 2b96 - ++sn; - 2b90: 0785 addi a5,a5,1 - while (limit && *sn) { - 2b92: 00e78663 beq a5,a4,2b9e - 2b96: 0007c683 lbu a3,0(a5) - 2b9a: fafd bnez a3,2b90 - 2b9c: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 2b9e: 41570733 sub a4,a4,s5 - 2ba2: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 2ba6: fff6c793 not a5,a3 - 2baa: 97fd srai a5,a5,0x3f - 2bac: 8f7d and a4,a4,a5 - 2bae: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2bb2: 863e mv a2,a5 - pr -= l; - 2bb4: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 2bb6: d2eff06f j 20e4 - for (n = 1; n < l; n++) - 2bba: 4605 li a2,1 - 2bbc: aed663e3 bltu a2,a3,26a2 - 2bc0: 0c210613 addi a2,sp,194 - 2bc4: bcf5 j 26c0 - l = pr + 1; - 2bc6: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 2bc8: 4501 li a0,0 - *s++ = sn[0]; - 2bca: 0c110613 addi a2,sp,193 - 2bce: bccd j 26c0 - 2bd0: 4591 li a1,4 - 2bd2: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 2bd4: 4e91 li t4,4 - 2bd6: be21 j 26ee - 2bd8: 4a85 li s5,1 - 2bda: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 2bde: 4a05 li s4,1 - 2be0: 920ff06f j 1d00 - dp = (n64) ? -1022 : 0; - 2be4: 4601 li a2,0 - 2be6: c119 beqz a0,2bec - 2be8: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2bec: 872a mv a4,a0 - 2bee: a3aff06f j 1e28 - stbsp__chk_cb_buf(1); - 2bf2: 2601 sext.w a2,a2 - 2bf4: 1fe00793 li a5,510 - 2bf8: f2c7c0e3 blt a5,a2,2b18 - 2bfc: bd61 j 2a94 - tail[0] = (char)n; - 2bfe: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 2c00: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 2c04: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2c08: 4815 li a6,5 - 2c0a: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2c0c: 4595 li a1,5 - 2c0e: b935 j 284a - l = pr + dp; - 2c10: 011786bb addw a3,a5,a7 - 2c14: d0b6 sw a3,96(sp) - 2c16: b6d5 j 27fa - s = (char *)"null"; - 2c18: 00002a97 auipc s5,0x2 - 2c1c: 4b8a8a93 addi s5,s5,1208 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0xe0> - 2c20: c80ff06f j 20a0 - } else if (fl & STBSP__LEADINGPLUS) { - 2c24: 002e7793 andi a5,t3,2 - 2c28: 1c079c63 bnez a5,2e00 - sign[0] = 0; - 2c2c: 4689 li a3,2 - 2c2e: 4a09 li s4,2 - 2c30: 4805 li a6,1 - 2c32: 9e8ff06f j 1e1a - sign[0] = 1; - 2c36: 670d lui a4,0x3 - 2c38: b0170713 addi a4,a4,-1279 # 2b01 - 2c3c: 06e11423 sh a4,104(sp) - 2c40: b86ff06f j 1fc6 - pr = 0; - 2c44: 4881 li a7,0 - 2c46: f1ffe06f j 1b64 - *s++ = '0'; - 2c4a: 03000713 li a4,48 - 2c4e: 0ce10023 sb a4,192(sp) - if (pr) - 2c52: 1a088c63 beqz a7,2e0a - *s++ = stbsp__period; - 2c56: 00004717 auipc a4,0x4 - 2c5a: e0674703 lbu a4,-506(a4) # 6a5c - n = -dp; - 2c5e: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 2c62: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 2c66: 0007871b sext.w a4,a5 - 2c6a: 00e8d363 bge a7,a4,2c70 - 2c6e: 87c6 mv a5,a7 - 2c70: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 2c74: 00d7833b addw t1,a5,a3 - 2c78: 883a mv a6,a4 - while (i) { - 2c7a: 0c210793 addi a5,sp,194 - *s++ = '0'; - 2c7e: 03000513 li a0,48 - while (i) { - 2c82: e711 bnez a4,2c8e - 2c84: a271 j 2e10 - if ((((stbsp__uintptr)s) & 3) == 0) - 2c86: 0037f613 andi a2,a5,3 - 2c8a: 18060563 beqz a2,2e14 - *s++ = '0'; - 2c8e: 85ba mv a1,a4 - 2c90: 00a78023 sb a0,0(a5) - --i; - 2c94: 377d addiw a4,a4,-1 - *s++ = '0'; - 2c96: 0785 addi a5,a5,1 - while (i) { - 2c98: f77d bnez a4,2c86 - if ((stbsp__int32)(l + n) > pr) - 2c9a: 0003071b sext.w a4,t1 - 2c9e: 4108863b subw a2,a7,a6 - 2ca2: 00e8d563 bge a7,a4,2cac - l = pr - n; - 2ca6: 0006069b sext.w a3,a2 - 2caa: d0b2 sw a2,96(sp) - while (i) { - 2cac: c68d beqz a3,2cd6 - 2cae: 7566 ld a0,120(sp) - 2cb0: 02069813 slli a6,a3,0x20 - 2cb4: 02085813 srli a6,a6,0x20 - 2cb8: 01078eb3 add t4,a5,a6 - 2cbc: 85aa mv a1,a0 - 2cbe: 873e mv a4,a5 - *s++ = *sn++; - 2cc0: 0005c883 lbu a7,0(a1) - 2cc4: 0705 addi a4,a4,1 - while (i) { - 2cc6: 0585 addi a1,a1,1 - *s++ = *sn++; - 2cc8: ff170fa3 sb a7,-1(a4) - while (i) { - 2ccc: ffd71ae3 bne a4,t4,2cc0 - 2cd0: 9542 add a0,a0,a6 - 2cd2: 97c2 add a5,a5,a6 - 2cd4: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2cd6: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2cda: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 2cde: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2ce2: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2ce6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2ce8: fbcff06f j 24a4 - *--s = '0'; - 2cec: 03000793 li a5,48 - 2cf0: fefa8fa3 sb a5,-1(s5) - l = 1; - 2cf4: 030002b7 lui t0,0x3000 - 2cf8: 4785 li a5,1 - 2cfa: d0be sw a5,96(sp) - *--s = '0'; - 2cfc: 1afd addi s5,s5,-1 - l = 1; - 2cfe: 4605 li a2,1 - 2d00: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8779> - 2d02: 4685 li a3,1 - 2d04: b9dd j 29fa - } else if (fl & STBSP__LEADINGSPACE) { - 2d06: 004e7713 andi a4,t3,4 - 2d0a: e74d bnez a4,2db4 - } else if (fl & STBSP__LEADINGPLUS) { - 2d0c: 8b89 andi a5,a5,2 - 2d0e: efd9 bnez a5,2dac - sign[0] = 0; - 2d10: 06010423 sb zero,104(sp) - 2d14: 4a01 li s4,0 - 2d16: b9c9 j 29e8 - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2d18: 051c addi a5,sp,640 - 2d1a: cafa89e3 beq s5,a5,29cc - ++s; - 2d1e: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2d20: 415786bb subw a3,a5,s5 - 2d24: b165 j 29cc - n = dp - n; - 2d26: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2d2a: 12030e63 beqz t1,2e66 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d2e: 4511 li a0,4 - 2d30: 03000613 li a2,48 - *s++ = stbsp__comma; - 2d34: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d38: 00030563 beqz t1,2d42 - 2d3c: 2585 addiw a1,a1,1 - 2d3e: 00a58963 beq a1,a0,2d50 - 2d42: 8736 mv a4,a3 - --n; - 2d44: 37fd addiw a5,a5,-1 - 2d46: fec70fa3 sb a2,-1(a4) - while (n) { - 2d4a: f7ed bnez a5,2d34 - 2d4c: f38ff06f j 2484 - 2d50: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 2d54: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d56: 4585 li a1,1 - 2d58: b7f5 j 2d44 - sign[0] = 0; - 2d5a: 06010423 sb zero,104(sp) - 2d5e: f1dfe06f j 1c7a - tail[idx + 1] = "_kMGT"[fl >> 24]; - 2d62: 00002697 auipc a3,0x2 - 2d66: 37e68693 addi a3,a3,894 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0xf0> - 2d6a: 9736 add a4,a4,a3 - 2d6c: 00074683 lbu a3,0(a4) - 2d70: 1088 addi a0,sp,96 - 2d72: 22060713 addi a4,a2,544 - 2d76: 972a add a4,a4,a0 - 2d78: ded70823 sb a3,-528(a4) - idx++; - 2d7c: 8fb2 mv t6,a2 - 2d7e: fb0ff06f j 252e - while (limit && *sn) { - 2d82: e00692e3 bnez a3,2b86 - 2d86: bd19 j 2b9c - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d88: 0008071b sext.w a4,a6 - 2d8c: 86c2 mv a3,a6 - 2d8e: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 2d90: 863a mv a2,a4 - 2d92: 00e8d363 bge a7,a4,2d98 - 2d96: 8646 mv a2,a7 - 2d98: 40f608bb subw a7,a2,a5 - 2d9c: 814ff06f j 1db0 - divisor = 1000.0f; - 2da0: 00003797 auipc a5,0x3 - 2da4: ae07b787 fld fa5,-1312(a5) # 5880 - 2da8: dd5fe06f j 1b7c - 2dac: 678d lui a5,0x3 - 2dae: b017879b addiw a5,a5,-1279 # 2b01 - 2db2: b13d j 29e0 - 2db4: 6789 lui a5,0x2 - 2db6: 2785 addiw a5,a5,1 # 2001 - 2db8: b125 j 29e0 - *s++ = stbsp__period; - 2dba: 00004517 auipc a0,0x4 - 2dbe: ca254503 lbu a0,-862(a0) # 6a5c - sn = s; - 2dc2: 0c210793 addi a5,sp,194 - n = pr; - 2dc6: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 2dca: 0ca100a3 sb a0,193(sp) - sn = s; - 2dce: fcbe sd a5,120(sp) - if (n > 13) - 2dd0: 4535 li a0,13 - n64 <<= 4; - 2dd2: 0712 slli a4,a4,0x4 - if (n > 13) - 2dd4: 8836 mv a6,a3 - 2dd6: 00d57363 bgeu a0,a3,2ddc - 2dda: 4835 li a6,13 - 2ddc: 0008051b sext.w a0,a6 - while (n--) { - 2de0: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 2de2: af1542e3 blt a0,a7,28c6 - tz = 0; - 2de6: 4881 li a7,0 - 2de8: b4cd j 28ca - while (n < l) { - 2dea: 87ba mv a5,a4 - 2dec: bc1d j 2822 - tail[0] = (char)n; - 2dee: 478d li a5,3 - 2df0: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2df4: 06b109a3 sb a1,115(sp) - 2df8: 480d li a6,3 - 2dfa: 4f8d li t6,3 - 2dfc: 8e4ff06f j 1ee0 - 2e00: 678d lui a5,0x3 - 2e02: b017879b addiw a5,a5,-1279 # 2b01 - 2e06: 80aff06f j 1e10 - if (pr) - 2e0a: 8336 mv t1,a3 - *s++ = '0'; - 2e0c: 0c110793 addi a5,sp,193 - while (i) { - 2e10: 4801 li a6,0 - 2e12: b561 j 2c9a - while (i >= 4) { - 2e14: 460d li a2,3 - 2e16: 04e65663 bge a2,a4,2e62 - 2e1a: ffb5871b addiw a4,a1,-5 - 2e1e: 0027559b srliw a1,a4,0x2 - 2e22: 0015861b addiw a2,a1,1 - 2e26: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e28: 30303537 lui a0,0x30303 - 2e2c: 963e add a2,a2,a5 - 2e2e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 2e32: c388 sw a0,0(a5) - s += 4; - 2e34: 0791 addi a5,a5,4 - while (i >= 4) { - 2e36: fef61ee3 bne a2,a5,2e32 - 2e3a: 0025959b slliw a1,a1,0x2 - 2e3e: 9f0d subw a4,a4,a1 - while (i) { - 2e40: e4070de3 beqz a4,2c9a - *s++ = '0'; - 2e44: 03000513 li a0,48 - while (i) { - 2e48: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 2e4c: 0605 addi a2,a2,1 - while (i) { - 2e4e: 00060e9b sext.w t4,a2 - *s++ = '0'; - 2e52: fea60fa3 sb a0,-1(a2) - while (i) { - 2e56: ffd59be3 bne a1,t4,2e4c - 2e5a: 1702 slli a4,a4,0x20 - 2e5c: 9301 srli a4,a4,0x20 - 2e5e: 97ba add a5,a5,a4 - 2e60: bd2d j 2c9a - while (i >= 4) { - 2e62: 863e mv a2,a5 - 2e64: b7c5 j 2e44 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e66: 00377693 andi a3,a4,3 - 2e6a: ce81 beqz a3,2e82 - *s++ = '0'; - 2e6c: 03000693 li a3,48 - 2e70: 00d70023 sb a3,0(a4) - --n; - 2e74: 37fd addiw a5,a5,-1 - *s++ = '0'; - 2e76: 0705 addi a4,a4,1 - while (n) { - 2e78: e0078663 beqz a5,2484 - if ((((stbsp__uintptr)s) & 3) == 0) - 2e7c: 00377613 andi a2,a4,3 - 2e80: fa65 bnez a2,2e70 - while (n >= 4) { - 2e82: 468d li a3,3 - 2e84: eaf6f5e3 bgeu a3,a5,2d2e - 2e88: ffc7869b addiw a3,a5,-4 - 2e8c: 0026d69b srliw a3,a3,0x2 - 2e90: 2685 addiw a3,a3,1 - 2e92: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e94: 30303637 lui a2,0x30303 - 2e98: 96ba add a3,a3,a4 - 2e9a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb7a8> - 2e9e: c310 sw a2,0(a4) - s += 4; - 2ea0: 0711 addi a4,a4,4 - while (n >= 4) { - 2ea2: fed71ee3 bne a4,a3,2e9e - 2ea6: 8b8d andi a5,a5,3 - while (n) { - 2ea8: e80793e3 bnez a5,2d2e - 2eac: dd8ff06f j 2484 - if (((stbsp__uintptr)sn & 3) == 0) - 2eb0: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2eb2: 56fd li a3,-1 - 2eb4: b155 j 2b58 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2eb6: 5775 li a4,-3 - 2eb8: 00e7ce63 blt a5,a4,2ed4 - 2ebc: f6fa4663 blt s4,a5,2628 - if (dp > 0) { - 2ec0: ecf054e3 blez a5,2d88 - 2ec4: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2ec6: 4881 li a7,0 - 2ec8: ee9fe06f j 1db0 - while (i--) - 2ecc: fff7869b addiw a3,a5,-1 - 2ed0: 8722 mv a4,s0 - 2ed2: b105 j 2af2 - if (pr > (stbsp__int32)l) - 2ed4: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2ed8: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 2eda: 86c2 mv a3,a6 - 2edc: 88d2 mv a7,s4 - 2ede: f7475d63 bge a4,s4,2658 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2ee2: 8542 mv a0,a6 - 2ee4: f56ff06f j 263a - -0000000000002ee8 : -{ - 2ee8: 715d addi sp,sp,-80 - va_start(va, fmt); - 2eea: 02010313 addi t1,sp,32 -{ - 2eee: f032 sd a2,32(sp) - 2ef0: f436 sd a3,40(sp) - 2ef2: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ef4: 86ae mv a3,a1 - 2ef6: 862a mv a2,a0 - 2ef8: 871a mv a4,t1 - 2efa: 4581 li a1,0 - 2efc: 4501 li a0,0 -{ - 2efe: ec06 sd ra,24(sp) - 2f00: fc3e sd a5,56(sp) - 2f02: e0c2 sd a6,64(sp) - 2f04: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2f06: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2f08: bc6fe0ef jal 12ce -} - 2f0c: 60e2 ld ra,24(sp) - 2f0e: 6161 addi sp,sp,80 - 2f10: 8082 ret - -0000000000002f12 : -{ - 2f12: dd010113 addi sp,sp,-560 - 2f16: 22813023 sd s0,544(sp) - 2f1a: 20913c23 sd s1,536(sp) - 2f1e: 22113423 sd ra,552(sp) - 2f22: 84ae mv s1,a1 - 2f24: 842a mv s0,a0 - 2f26: 88b2 mv a7,a2 - 2f28: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 2f2a: e591 bnez a1,2f36 - 2f2c: c141 beqz a0,2fac - c.buf = buf; - 2f2e: e02a sd a0,0(sp) - c.count = count; - 2f30: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f32: 0810 addi a2,sp,16 - 2f34: a089 j 2f76 - if (len > c->count) - 2f36: 0015a593 slti a1,a1,1 - 2f3a: 40b005bb negw a1,a1 - 2f3e: 8de5 and a1,a1,s1 - c.buf = buf; - 2f40: e02a sd a0,0(sp) - c.count = count; - 2f42: c426 sw s1,8(sp) - c.length = 0; - 2f44: c602 sw zero,12(sp) - if (len > c->count) - 2f46: 2581 sext.w a1,a1 - if (len) { - 2f48: 0804d663 bgez s1,2fd4 - s = buf; - 2f4c: 4781 li a5,0 - if (buf != c->buf) { - 2f4e: c911 beqz a0,2f62 - *d++ = *s++; - 2f50: 0007c803 lbu a6,0(a5) - 2f54: 0785 addi a5,a5,1 - 2f56: 00f40533 add a0,s0,a5 - 2f5a: ff050fa3 sb a6,-1(a0) - } while (s < se); - 2f5e: feb7e9e3 bltu a5,a1,2f50 - c->count -= len; - 2f62: 40b486bb subw a3,s1,a1 - c->buf += len; - 2f66: 95a2 add a1,a1,s0 - 2f68: e02e sd a1,0(sp) - c->count -= len; - 2f6a: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f6c: 1ff00793 li a5,511 - 2f70: fcd7d1e3 bge a5,a3,2f32 - 2f74: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 2f76: 86c6 mv a3,a7 - 2f78: 858a mv a1,sp - 2f7a: ffffd517 auipc a0,0xffffd - 2f7e: 21650513 addi a0,a0,534 # 190 - 2f82: b4cfe0ef jal 12ce - l = (int)( c.buf - buf ); - 2f86: 6782 ld a5,0(sp) - 2f88: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 2f8a: 0097c463 blt a5,s1,2f92 - l = count - 1; - 2f8e: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 2f92: 943e add s0,s0,a5 - 2f94: 00040023 sb zero,0(s0) -} - 2f98: 22813083 ld ra,552(sp) - 2f9c: 22013403 ld s0,544(sp) - 2fa0: 4532 lw a0,12(sp) - 2fa2: 21813483 ld s1,536(sp) - 2fa6: 23010113 addi sp,sp,560 - 2faa: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2fac: 86b2 mv a3,a2 - 2fae: 858a mv a1,sp - 2fb0: 0810 addi a2,sp,16 - 2fb2: ffffd517 auipc a0,0xffffd - 2fb6: 22c50513 addi a0,a0,556 # 1de - c.length = 0; - 2fba: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2fbc: b12fe0ef jal 12ce -} - 2fc0: 22813083 ld ra,552(sp) - 2fc4: 22013403 ld s0,544(sp) - 2fc8: 4532 lw a0,12(sp) - 2fca: 21813483 ld s1,536(sp) - 2fce: 23010113 addi sp,sp,560 - 2fd2: 8082 ret - 2fd4: 86a6 mv a3,s1 - 2fd6: bf59 j 2f6c - -0000000000002fd8 : -{ - 2fd8: 715d addi sp,sp,-80 - va_start(va, fmt); - 2fda: 02810313 addi t1,sp,40 -{ - 2fde: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fe0: 869a mv a3,t1 -{ - 2fe2: ec06 sd ra,24(sp) - 2fe4: f83a sd a4,48(sp) - 2fe6: fc3e sd a5,56(sp) - 2fe8: e0c2 sd a6,64(sp) - 2fea: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2fec: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fee: f25ff0ef jal 2f12 -} - 2ff2: 60e2 ld ra,24(sp) - 2ff4: 6161 addi sp,sp,80 - 2ff6: 8082 ret - -0000000000002ff8 : -{ - 2ff8: 86ae mv a3,a1 - 2ffa: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ffc: 4581 li a1,0 - 2ffe: 862a mv a2,a0 - 3000: 4501 li a0,0 - 3002: accfe06f j 12ce - -0000000000003006 : -{ - 3006: 7119 addi sp,sp,-128 - va_start(ap, format); - 3008: 05010313 addi t1,sp,80 -{ - 300c: e0a2 sd s0,64(sp) - 300e: fc26 sd s1,56(sp) - 3010: 842a mv s0,a0 - 3012: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 3014: 0808 addi a0,sp,16 - ctx.limit = size; - 3016: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 3018: 861a mv a2,t1 -{ - 301a: e486 sd ra,72(sp) - 301c: ecb6 sd a3,88(sp) - 301e: f0ba sd a4,96(sp) - 3020: f4be sd a5,104(sp) - 3022: f8c2 sd a6,112(sp) - 3024: fcc6 sd a7,120(sp) - va_start(ap, format); - 3026: e41a sd t1,8(sp) - ctx.buf = str; - 3028: e822 sd s0,16(sp) - ctx.limit = size; - 302a: ec26 sd s1,24(sp) - ctx.written = 0; - 302c: f002 sd zero,32(sp) - ctx.stream = NULL; - 302e: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 3030: 02c000ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3034: 7502 ld a0,32(sp) - 3036: 00950b63 beq a0,s1,304c - str[ctx.written] = '\0'; - 303a: 942a add s0,s0,a0 - 303c: 00040023 sb zero,0(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 - str[size - 1] = '\0'; - 304c: fe040f23 sb zero,-2(s0) -} - 3050: 60a6 ld ra,72(sp) - 3052: 6406 ld s0,64(sp) - 3054: 74e2 ld s1,56(sp) - 3056: 2501 sext.w a0,a0 - 3058: 6109 addi sp,sp,128 - 305a: 8082 ret - -000000000000305c <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 305c: 7129 addi sp,sp,-320 - 305e: edee sd s11,216(sp) - 3060: fe06 sd ra,312(sp) - 3062: 8dae mv s11,a1 - while (*p) - 3064: 0005c583 lbu a1,0(a1) - 3068: cde9 beqz a1,3142 <_vprintf_core.constprop.0.isra.0+0xe6> - 306a: f626 sd s1,296(sp) - 306c: f24a sd s2,288(sp) - 306e: ee4e sd s3,280(sp) - 3070: e656 sd s5,264(sp) - 3072: f9e2 sd s8,240(sp) - 3074: fa22 sd s0,304(sp) - 3076: ea52 sd s4,272(sp) - 3078: e25a sd s6,256(sp) - 307a: fdde sd s7,248(sp) - 307c: f5e6 sd s9,232(sp) - 307e: f1ea sd s10,224(sp) - 3080: 84aa mv s1,a0 - 3082: 8c32 mv s8,a2 - if (*p != '%') - 3084: 02500a93 li s5,37 - 3088: 49c1 li s3,16 - 308a: 00002917 auipc s2,0x2 - 308e: 32a90913 addi s2,s2,810 # 53b4 <_GLOBAL__sub_I__ZSt3cin+0x3c4> - 3092: a039 j 30a0 <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 3094: 8526 mv a0,s1 - 3096: 952fe0ef jal 11e8 <_out_char> - while (*p) - 309a: 000dc583 lbu a1,0(s11) - 309e: c5d9 beqz a1,312c <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 30a0: 0d85 addi s11,s11,1 - if (*p != '%') - 30a2: ff5599e3 bne a1,s5,3094 <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 30a6: 4501 li a0,0 - 30a8: 4881 li a7,0 - 30aa: 4581 li a1,0 - 30ac: 4b01 li s6,0 - 30ae: 4a01 li s4,0 - if (*p == '-') - 30b0: 000dcc83 lbu s9,0(s11) - 30b4: fe0c871b addiw a4,s9,-32 - 30b8: 0ff77713 zext.b a4,a4 - 30bc: 00e9e763 bltu s3,a4,30ca <_vprintf_core.constprop.0.isra.0+0x6e> - 30c0: 070a slli a4,a4,0x2 - 30c2: 974a add a4,a4,s2 - 30c4: 4318 lw a4,0(a4) - 30c6: 974a add a4,a4,s2 - 30c8: 8702 jr a4 - if (*p == '*') - 30ca: 02a00793 li a5,42 - 30ce: 16fc9c63 bne s9,a5,3246 <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 30d2: 000c2403 lw s0,0(s8) - 30d6: 0c21 addi s8,s8,8 - if (width < 0) - 30d8: 00045563 bgez s0,30e2 <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 30dc: 4080043b negw s0,s0 - flag_left = 1; - 30e0: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 30e2: 001dcc83 lbu s9,1(s11) - p++; - 30e6: 0d85 addi s11,s11,1 - if (*p == '.') - 30e8: 02e00793 li a5,46 - int precision = -1; - 30ec: 5bfd li s7,-1 - if (*p == '.') - 30ee: 18fc8a63 beq s9,a5,3282 <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 30f2: 06c00693 li a3,108 - 30f6: 8666 mv a2,s9 - 30f8: 1adc8663 beq s9,a3,32a4 <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 30fc: 07a00693 li a3,122 - p++; - 3100: 0d85 addi s11,s11,1 - else if (*p == 'z') - 3102: 24dc8163 beq s9,a3,3344 <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 3106: 06400693 li a3,100 - 310a: 4adc8163 beq s9,a3,35ac <_vprintf_core.constprop.0.isra.0+0x550> - 310e: 06400693 li a3,100 - int len_mod = 0; - 3112: 4e81 li t4,0 - 3114: 1b96e663 bltu a3,s9,32c0 <_vprintf_core.constprop.0.isra.0+0x264> - 3118: 04700693 li a3,71 - 311c: 2796e463 bltu a3,s9,3384 <_vprintf_core.constprop.0.isra.0+0x328> - 3120: 04400693 li a3,68 - 3124: 0596e363 bltu a3,s9,316a <_vprintf_core.constprop.0.isra.0+0x10e> - 3128: 240c9363 bnez s9,336e <_vprintf_core.constprop.0.isra.0+0x312> - 312c: 7452 ld s0,304(sp) - 312e: 74b2 ld s1,296(sp) - 3130: 7912 ld s2,288(sp) - 3132: 69f2 ld s3,280(sp) - 3134: 6a52 ld s4,272(sp) - 3136: 6ab2 ld s5,264(sp) - 3138: 6b12 ld s6,256(sp) - 313a: 7bee ld s7,248(sp) - 313c: 7c4e ld s8,240(sp) - 313e: 7cae ld s9,232(sp) - 3140: 7d0e ld s10,224(sp) -} - 3142: 70f2 ld ra,312(sp) - 3144: 6dee ld s11,216(sp) - 3146: 6131 addi sp,sp,320 - 3148: 8082 ret - if (*p == '-') - 314a: 4585 li a1,1 - p++; - 314c: 0d85 addi s11,s11,1 - if (*p == '-') - 314e: b78d j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - 3150: 4505 li a0,1 - p++; - 3152: 0d85 addi s11,s11,1 - while (1) - 3154: bfb1 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3156: 4885 li a7,1 - p++; - 3158: 0d85 addi s11,s11,1 - while (1) - 315a: bf99 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 315c: 4b05 li s6,1 - p++; - 315e: 0d85 addi s11,s11,1 - while (1) - 3160: bf81 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3162: 4a05 li s4,1 - p++; - 3164: 0d85 addi s11,s11,1 - while (1) - 3166: b7a9 j 30b0 <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 3168: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 316a: 02500693 li a3,37 - 316e: 02d10823 sb a3,48(sp) - 3172: 4d05 li s10,1 - if (flag_left) - 3174: 000a0763 beqz s4,3182 <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 3178: 02d00693 li a3,45 - 317c: 02d108a3 sb a3,49(sp) - 3180: 4d09 li s10,2 - if (flag_zero) - 3182: 000b0c63 beqz s6,319a <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 3186: 0c0d0793 addi a5,s10,192 - 318a: 0818 addi a4,sp,16 - 318c: 00e786b3 add a3,a5,a4 - 3190: 03000613 li a2,48 - 3194: f6c68023 sb a2,-160(a3) - 3198: 2d05 addiw s10,s10,1 - if (flag_plus) - 319a: c999 beqz a1,31b0 <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 319c: 0c0d0793 addi a5,s10,192 - 31a0: 0818 addi a4,sp,16 - 31a2: 00e786b3 add a3,a5,a4 - 31a6: 02b00613 li a2,43 - 31aa: f6c68023 sb a2,-160(a3) - 31ae: 2d05 addiw s10,s10,1 - if (flag_space) - 31b0: 00088c63 beqz a7,31c8 <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 31b4: 0c0d0793 addi a5,s10,192 - 31b8: 0818 addi a4,sp,16 - 31ba: 00e786b3 add a3,a5,a4 - 31be: 02000613 li a2,32 - 31c2: f6c68023 sb a2,-160(a3) - 31c6: 2d05 addiw s10,s10,1 - if (flag_hash) - 31c8: c919 beqz a0,31de <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 31ca: 0c0d0793 addi a5,s10,192 - 31ce: 0818 addi a4,sp,16 - 31d0: 00e786b3 add a3,a5,a4 - 31d4: 02300613 li a2,35 - 31d8: f6c68023 sb a2,-160(a3) - 31dc: 2d05 addiw s10,s10,1 - if (width > 0) - 31de: 03010a13 addi s4,sp,48 - 31e2: 28804563 bgtz s0,346c <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 31e6: 260bd763 bgez s7,3454 <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 31ea: 0c0d0793 addi a5,s10,192 - 31ee: 0818 addi a4,sp,16 - 31f0: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31f4: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 31f8: 001d071b addiw a4,s10,1 - 31fc: 0c070793 addi a5,a4,192 - 3200: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 3202: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 3206: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 3208: 08000593 li a1,128 - 320c: 8652 mv a2,s4 - 320e: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 3210: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 3214: dc5ff0ef jal 2fd8 - for (int i = 0; f_buf[i] != '\0'; i++) - 3218: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 321c: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 321e: 05110413 addi s0,sp,81 - 3222: e6058ce3 beqz a1,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 3226: 8526 mv a0,s1 - 3228: fc1fd0ef jal 11e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 322c: 00044583 lbu a1,0(s0) - 3230: 0405 addi s0,s0,1 - 3232: e60584e3 beqz a1,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 3236: 8526 mv a0,s1 - 3238: fb1fd0ef jal 11e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 323c: 00044583 lbu a1,0(s0) - 3240: 0405 addi s0,s0,1 - 3242: f1f5 bnez a1,3226 <_vprintf_core.constprop.0.isra.0+0x1ca> - 3244: bd99 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 3246: fd0c869b addiw a3,s9,-48 - 324a: 0ff6f313 zext.b t1,a3 - 324e: 4725 li a4,9 - int width = 0; - 3250: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 3252: 4625 li a2,9 - 3254: e8676ae3 bltu a4,t1,30e8 <_vprintf_core.constprop.0.isra.0+0x8c> - 3258: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 325c: 0024171b slliw a4,s0,0x2 - 3260: 9f21 addw a4,a4,s0 - 3262: 0017171b slliw a4,a4,0x1 - 3266: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 326a: fd0c869b addiw a3,s9,-48 - 326e: 0ff6f713 zext.b a4,a3 - p++; - 3272: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 3274: fee672e3 bgeu a2,a4,3258 <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 3278: 02e00793 li a5,46 - int precision = -1; - 327c: 5bfd li s7,-1 - if (*p == '.') - 327e: e6fc9ae3 bne s9,a5,30f2 <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 3282: 001dcc83 lbu s9,1(s11) - 3286: 02a00793 li a5,42 - 328a: 16fc9f63 bne s9,a5,3408 <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 328e: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 3292: 06c00693 li a3,108 - precision = va_arg(ap, int); - 3296: 000c2b83 lw s7,0(s8) - p++; - 329a: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 329c: 0c21 addi s8,s8,8 - if (*p == 'l') - 329e: 8666 mv a2,s9 - 32a0: e4dc9ee3 bne s9,a3,30fc <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 32a4: 001dcc83 lbu s9,1(s11) - 32a8: 08cc8d63 beq s9,a2,3342 <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 32ac: 06400693 li a3,100 - 32b0: 0d89 addi s11,s11,2 - if (!spec) - 32b2: 4cdc8c63 beq s9,a3,378a <_vprintf_core.constprop.0.isra.0+0x72e> - 32b6: 06400693 li a3,100 - len_mod = 1; - 32ba: 4e85 li t4,1 - 32bc: e596fee3 bgeu a3,s9,3118 <_vprintf_core.constprop.0.isra.0+0xbc> - 32c0: f9bc869b addiw a3,s9,-101 - 32c4: 0ff6f693 zext.b a3,a3 - 32c8: 464d li a2,19 - 32ca: 12d66863 bltu a2,a3,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - 32ce: 4e05 li t3,1 - 32d0: 00091637 lui a2,0x91 - 32d4: 00de1333 sll t1,t3,a3 - 32d8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88f88> - 32dc: 00c37633 and a2,t1,a2 - 32e0: 1a061463 bnez a2,3488 <_vprintf_core.constprop.0.isra.0+0x42c> - 32e4: 00737313 andi t1,t1,7 - 32e8: e80311e3 bnez t1,316a <_vprintf_core.constprop.0.isra.0+0x10e> - 32ec: 4639 li a2,14 - 32ee: 10c69663 bne a3,a2,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 32f2: 000c3c83 ld s9,0(s8) - if (!s) - 32f6: 420c8863 beqz s9,3726 <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 32fa: 000cc683 lbu a3,0(s9) - 32fe: 38068863 beqz a3,368e <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 3302: 8666 mv a2,s9 - int len = 0; - 3304: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 3306: 00db8863 beq s7,a3,3316 <_vprintf_core.constprop.0.isra.0+0x2ba> - 330a: 00164583 lbu a1,1(a2) - len++; - 330e: 2685 addiw a3,a3,1 - tmp++; - 3310: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 3312: f9f5 bnez a1,3306 <_vprintf_core.constprop.0.isra.0+0x2aa> - 3314: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 3316: 268bc563 blt s7,s0,3580 <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 331a: 4401 li s0,0 - 331c: 020b8163 beqz s7,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - 3320: 4d01 li s10,0 - _out_char(ctx, s[i]); - 3322: 01ac86b3 add a3,s9,s10 - 3326: 0006c583 lbu a1,0(a3) - 332a: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 332c: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 332e: ebbfd0ef jal 11e8 <_out_char> - for (int i = 0; i < len; i++) - 3332: 000d069b sext.w a3,s10 - 3336: ff76c6e3 blt a3,s7,3322 <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 333a: 260a1463 bnez s4,35a2 <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 333e: 0c21 addi s8,s8,8 - 3340: bba9 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 3342: 0d89 addi s11,s11,2 - char spec = *p++; - 3344: 000dcc83 lbu s9,0(s11) - 3348: 06400693 li a3,100 - 334c: 001d8793 addi a5,s11,1 - if (!spec) - 3350: 3edc8063 beq s9,a3,3730 <_vprintf_core.constprop.0.isra.0+0x6d4> - 3354: 0796ea63 bltu a3,s9,33c8 <_vprintf_core.constprop.0.isra.0+0x36c> - 3358: 04700693 li a3,71 - 335c: 0f96e263 bltu a3,s9,3440 <_vprintf_core.constprop.0.isra.0+0x3e4> - 3360: 04400693 li a3,68 - 3364: e196e2e3 bltu a3,s9,3168 <_vprintf_core.constprop.0.isra.0+0x10c> - 3368: dc0c82e3 beqz s9,312c <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 336c: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 336e: 02500593 li a1,37 - 3372: 8526 mv a0,s1 - 3374: e75fd0ef jal 11e8 <_out_char> - if (spec != '%') - 3378: 02500713 li a4,37 - 337c: d0ec8fe3 beq s9,a4,309a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 3380: 85e6 mv a1,s9 - 3382: bb09 j 3094 <_vprintf_core.constprop.0.isra.0+0x38> - 3384: 05800693 li a3,88 - 3388: 2edc8263 beq s9,a3,366c <_vprintf_core.constprop.0.isra.0+0x610> - 338c: 06300713 li a4,99 - 3390: 06ec9563 bne s9,a4,33fa <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 3394: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 3398: 8722 mv a4,s0 - 339a: 00804363 bgtz s0,33a0 <_vprintf_core.constprop.0.isra.0+0x344> - 339e: 4705 li a4,1 - 33a0: fff7041b addiw s0,a4,-1 - if (!flag_left) - 33a4: 3c0a0463 beqz s4,376c <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 33a8: 85e6 mv a1,s9 - 33aa: 8526 mv a0,s1 - 33ac: e3dfd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 33b0: 4a01 li s4,0 - 33b2: d451 beqz s0,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 33b4: 02000593 li a1,32 - 33b8: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 33ba: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 33bc: e2dfd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 33c0: ff441ae3 bne s0,s4,33b4 <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 33c4: 0c21 addi s8,s8,8 - 33c6: b9d1 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - 33c8: f9bc861b addiw a2,s9,-101 - 33cc: 0ff67613 zext.b a2,a2 - 33d0: 46cd li a3,19 - 33d2: 40c6e963 bltu a3,a2,37e4 <_vprintf_core.constprop.0.isra.0+0x788> - 33d6: 00091337 lui t1,0x91 - 33da: 4685 li a3,1 - 33dc: 00c696b3 sll a3,a3,a2 - 33e0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88f88> - 33e4: 0066f333 and t1,a3,t1 - 33e8: 34031c63 bnez t1,3740 <_vprintf_core.constprop.0.isra.0+0x6e4> - 33ec: 8a9d andi a3,a3,7 - 33ee: d6069de3 bnez a3,3168 <_vprintf_core.constprop.0.isra.0+0x10c> - 33f2: 46b9 li a3,14 - char spec = *p++; - 33f4: 8dbe mv s11,a5 - 33f6: eed60ee3 beq a2,a3,32f2 <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 33fa: 02500593 li a1,37 - 33fe: 8526 mv a0,s1 - 3400: de9fd0ef jal 11e8 <_out_char> - _out_char(ctx, spec); - 3404: 85e6 mv a1,s9 - 3406: b179 j 3094 <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 3408: fd0c869b addiw a3,s9,-48 - 340c: 0ff6fe13 zext.b t3,a3 - 3410: 4625 li a2,9 - p++; - 3412: 0d85 addi s11,s11,1 - precision = 0; - 3414: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 3416: 4325 li t1,9 - 3418: cdc66de3 bltu a2,t3,30f2 <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 341c: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 3420: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 3424: 0176073b addw a4,a2,s7 - 3428: 0017171b slliw a4,a4,0x1 - 342c: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 3430: fd0c869b addiw a3,s9,-48 - 3434: 0ff6f613 zext.b a2,a3 - p++; - 3438: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 343a: fec371e3 bgeu t1,a2,341c <_vprintf_core.constprop.0.isra.0+0x3c0> - 343e: b955 j 30f2 <_vprintf_core.constprop.0.isra.0+0x96> - 3440: 05800693 li a3,88 - 3444: 3cdc8d63 beq s9,a3,381e <_vprintf_core.constprop.0.isra.0+0x7c2> - 3448: 06300713 li a4,99 - char spec = *p++; - 344c: 8dbe mv s11,a5 - 344e: f4ec83e3 beq s9,a4,3394 <_vprintf_core.constprop.0.isra.0+0x338> - 3452: b765 j 33fa <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 3454: 01aa0533 add a0,s4,s10 - 3458: 865e mv a2,s7 - 345a: 00002597 auipc a1,0x2 - 345e: cde58593 addi a1,a1,-802 # 5138 <_GLOBAL__sub_I__ZSt3cin+0x148> - 3462: ba5ff0ef jal 3006 - 3466: 00ad0d3b addw s10,s10,a0 - 346a: b341 j 31ea <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 346c: 01aa0533 add a0,s4,s10 - 3470: 8622 mv a2,s0 - 3472: 00002597 auipc a1,0x2 - 3476: cbe58593 addi a1,a1,-834 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x140> - 347a: b8dff0ef jal 3006 - 347e: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 3482: d60bc4e3 bltz s7,31ea <_vprintf_core.constprop.0.isra.0+0x18e> - 3486: b7f9 j 3454 <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 3488: 06900693 li a3,105 - 348c: 10dc8e63 beq s9,a3,35a8 <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 3490: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3494: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3498: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 349a: 38dc9d63 bne s9,a3,3834 <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 349e: 33ce8963 beq t4,t3,37d0 <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 34a2: 000c6e03 lwu t3,0(s8) - 34a6: 85f6 mv a1,t4 - 34a8: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 34aa: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 34ac: 00002f97 auipc t6,0x2 - 34b0: c54f8f93 addi t6,t6,-940 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - if (val == 0) - 34b4: 120e0363 beqz t3,35da <_vprintf_core.constprop.0.isra.0+0x57e> - 34b8: 01010293 addi t0,sp,16 - sign_char = '-'; - 34bc: 8616 mv a2,t0 - 34be: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 34c0: 0266f8b3 remu a7,a3,t1 - 34c4: 8f32 mv t5,a2 - while (val != 0) - 34c6: 0605 addi a2,a2,1 - 34c8: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 34ca: 98fe add a7,a7,t6 - 34cc: 0008c883 lbu a7,0(a7) - val /= base; - 34d0: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 34d4: ff160fa3 sb a7,-1(a2) - while (val != 0) - 34d8: fe6ef4e3 bgeu t4,t1,34c0 <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 34dc: 405f0f3b subw t5,t5,t0 - 34e0: 2f05 addiw t5,t5,1 - if (precision >= 0) - 34e2: 100bc363 bltz s7,35e8 <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 34e6: 1d7f4d63 blt t5,s7,36c0 <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 34ea: 340b9163 bnez s7,382c <_vprintf_core.constprop.0.isra.0+0x7d0> - 34ee: 200e0763 beqz t3,36fc <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 34f2: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34f6: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 34fa: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34fc: 28dc8e63 beq s9,a3,3798 <_vprintf_core.constprop.0.isra.0+0x73c> - 3500: 2a051663 bnez a0,37ac <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3504: 00bf05bb addw a1,t5,a1 - 3508: 8d52 mv s10,s4 - 350a: 4b01 li s6,0 - char *prefix_str = NULL; - 350c: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 350e: 1085d263 bge a1,s0,3612 <_vprintf_core.constprop.0.isra.0+0x5b6> - 3512: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 3514: 100d0a63 beqz s10,3628 <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 3518: 6782 ld a5,0(sp) - 351a: 10079263 bnez a5,361e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 351e: 000c8c63 beqz s9,3536 <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 3522: 000cc583 lbu a1,0(s9) - 3526: 8526 mv a0,s1 - 3528: cc1fd0ef jal 11e8 <_out_char> - _out_char(ctx, prefix_str[1]); - 352c: 001cc583 lbu a1,1(s9) - 3530: 8526 mv a0,s1 - 3532: cb7fd0ef jal 11e8 <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 3536: 180b0263 beqz s6,36ba <_vprintf_core.constprop.0.isra.0+0x65e> - 353a: 100a1863 bnez s4,364a <_vprintf_core.constprop.0.isra.0+0x5ee> - 353e: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 3542: 2a0b8363 beqz s7,37e8 <_vprintf_core.constprop.0.isra.0+0x78c> - 3546: 4c81 li s9,0 - _out_char(ctx, '0'); - 3548: 03000593 li a1,48 - 354c: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 354e: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 3550: c99fd0ef jal 11e8 <_out_char> - for (int i = 0; i < total_zeros; i++) - 3554: ff7c9ae3 bne s9,s7,3548 <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 3558: 57fd li a5,-1 - 355a: 00fc0f63 beq s8,a5,3578 <_vprintf_core.constprop.0.isra.0+0x51c> - 355e: 01010c93 addi s9,sp,16 - 3562: 9ce2 add s9,s9,s8 - 3564: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 3568: 000cc583 lbu a1,0(s9) - 356c: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 356e: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 3570: c79fd0ef jal 11e8 <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 3574: ff9c1ae3 bne s8,s9,3568 <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 3578: 0c0a1e63 bnez s4,3654 <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 357c: 6c22 ld s8,8(sp) - 357e: be31 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 3580: 4174043b subw s0,s0,s7 - if (!flag_left) - 3584: 100a0a63 beqz s4,3698 <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 3588: d80b9ce3 bnez s7,3320 <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 358c: 4a01 li s4,0 - _out_char(ctx, ' '); - 358e: 02000593 li a1,32 - 3592: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3594: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3596: c53fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 359a: ff441ae3 bne s0,s4,358e <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 359e: 0c21 addi s8,s8,8 - 35a0: bced j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 35a2: f46d bnez s0,358c <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 35a4: 0c21 addi s8,s8,8 - 35a6: bcd5 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 35a8: 1fce8163 beq t4,t3,378a <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 35ac: 000c2e03 lw t3,0(s8) - 35b0: 008c0793 addi a5,s8,8 - 35b4: e43e sd a5,8(sp) - int64 sval = (int64)val; - 35b6: 86f2 mv a3,t3 - if (sval < 0) - 35b8: 1406cb63 bltz a3,370e <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 35bc: 02b00793 li a5,43 - 35c0: e03e sd a5,0(sp) - else if (flag_plus) - 35c2: e589 bnez a1,35cc <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 35c4: 00589793 slli a5,a7,0x5 - 35c8: e03e sd a5,0(sp) - 35ca: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 35cc: 4329 li t1,10 - 35ce: 00002f97 auipc t6,0x2 - 35d2: b32f8f93 addi t6,t6,-1230 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - if (val == 0) - 35d6: ee0e11e3 bnez t3,34b8 <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 35da: 03000693 li a3,48 - 35de: 00d10823 sb a3,16(sp) - return i; - 35e2: 4f05 li t5,1 - if (precision >= 0) - 35e4: f00bd1e3 bgez s7,34e6 <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 35e8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35ec: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 35f0: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 35f4: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 35f6: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35f8: 0d1c9f63 bne s9,a7,36d6 <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 35fc: 00002c97 auipc s9,0x2 - 3600: b1cc8c93 addi s9,s9,-1252 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x128> - prefix_len += 2; - 3604: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3606: 017585bb addw a1,a1,s7 - 360a: 01e585bb addw a1,a1,t5 - 360e: f085c2e3 blt a1,s0,3512 <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 3612: 080d0f63 beqz s10,36b0 <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 3616: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 3618: 4401 li s0,0 - if (sign_char) - 361a: f00782e3 beqz a5,351e <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 361e: 6582 ld a1,0(sp) - 3620: 8526 mv a0,s1 - 3622: bc7fd0ef jal 11e8 <_out_char> - 3626: bde5 j 351e <_vprintf_core.constprop.0.isra.0+0x4c2> - _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: bb9fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3634: efa402e3 beq s0,s10,3518 <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 3638: 02000593 li a1,32 - 363c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 363e: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3640: ba9fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3644: ffa412e3 bne s0,s10,3628 <_vprintf_core.constprop.0.isra.0+0x5cc> - 3648: bdc1 j 3518 <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 364a: ee0b9ee3 bnez s7,3546 <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 364e: 577d li a4,-1 - 3650: f0ec17e3 bne s8,a4,355e <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 3654: d405 beqz s0,357c <_vprintf_core.constprop.0.isra.0+0x520> - 3656: 4a01 li s4,0 - _out_char(ctx, ' '); - 3658: 02000593 li a1,32 - 365c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 365e: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3660: b89fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 3664: fe8a1ae3 bne s4,s0,3658 <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 3668: 6c22 ld s8,8(sp) - 366a: bc05 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 366c: 008c0793 addi a5,s8,8 - 3670: e43e sd a5,8(sp) - else if (len_mod == 1) - 3672: 180e9163 bnez t4,37f4 <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3676: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 367a: 4581 li a1,0 - 367c: 05800c93 li s9,88 - 3680: e002 sd zero,0(sp) - 3682: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3684: 00002f97 auipc t6,0x2 - 3688: a64f8f93 addi t6,t6,-1436 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0xf8> - 368c: b525 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 368e: ca8058e3 blez s0,333e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 3692: ee0a1de3 bnez s4,358c <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 3696: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 3698: 4d01 li s10,0 - _out_char(ctx, ' '); - 369a: 02000593 li a1,32 - 369e: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 36a0: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 36a2: b47fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 36a6: fe8d1ae3 bne s10,s0,369a <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 36aa: c60b9be3 bnez s7,3320 <_vprintf_core.constprop.0.isra.0+0x2c4> - 36ae: b941 j 333e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 36b0: 6782 ld a5,0(sp) - 36b2: 4401 li s0,0 - 36b4: f7ad bnez a5,361e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 36b6: e60c96e3 bnez s9,3522 <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 36ba: e80b96e3 bnez s7,3546 <_vprintf_core.constprop.0.isra.0+0x4ea> - 36be: bd69 j 3558 <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 36c0: 41eb8bbb subw s7,s7,t5 - 36c4: 8d52 mv s10,s4 - 36c6: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 36c8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36cc: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 36d0: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36d2: f31c85e3 beq s9,a7,35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 36d6: cd09 beqz a0,36f0 <_vprintf_core.constprop.0.isra.0+0x694> - 36d8: 000e0c63 beqz t3,36f0 <_vprintf_core.constprop.0.isra.0+0x694> - 36dc: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 36e0: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36e4: f0ac8ce3 beq s9,a0,35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 36e8: 05800613 li a2,88 - 36ec: 12cc8463 beq s9,a2,3814 <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36f0: 00bb85bb addw a1,s7,a1 - 36f4: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 36f8: 4c81 li s9,0 - 36fa: bd11 j 350e <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36fc: 07000693 li a3,112 - 3700: 8d52 mv s10,s4 - 3702: 4b01 li s6,0 - 3704: 08dc8d63 beq s9,a3,379e <_vprintf_core.constprop.0.isra.0+0x742> - 3708: 5c7d li s8,-1 - char *prefix_str = NULL; - 370a: 4c81 li s9,0 - 370c: b509 j 350e <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 370e: 02d00793 li a5,45 - val = (uint64)(-sval); - 3712: 40d00e33 neg t3,a3 - 3716: 4585 li a1,1 - 3718: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 371a: 00002f97 auipc t6,0x2 - 371e: 9e6f8f93 addi t6,t6,-1562 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - sign_char = '-'; - 3722: e03e sd a5,0(sp) - 3724: bb51 j 34b8 <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 3726: 00002c97 auipc s9,0x2 - 372a: a02c8c93 addi s9,s9,-1534 # 5128 <_GLOBAL__sub_I__ZSt3cin+0x138> - 372e: bed1 j 3302 <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3730: 000c3683 ld a3,0(s8) - 3734: 008c0713 addi a4,s8,8 - 3738: e43a sd a4,8(sp) - 373a: 8dbe mv s11,a5 - 373c: 8e36 mv t3,a3 - if (is_signed) - 373e: bdad j 35b8 <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 3740: 06900693 li a3,105 - 3744: fedc86e3 beq s9,a3,3730 <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 3748: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 374c: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3750: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3752: 06dc9063 bne s9,a3,37b2 <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3756: 000c3e03 ld t3,0(s8) - 375a: 8dbe mv s11,a5 - 375c: 4581 li a1,0 - 375e: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3760: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3762: 00002f97 auipc t6,0x2 - 3766: 99ef8f93 addi t6,t6,-1634 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 376a: b3a9 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 376c: c809 beqz s0,377e <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 376e: 02000593 li a1,32 - 3772: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3774: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3776: a73fd0ef jal 11e8 <_out_char> - for (int i = 0; i < padding; i++) - 377a: ff441ae3 bne s0,s4,376e <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 377e: 85e6 mv a1,s9 - 3780: 8526 mv a0,s1 - 3782: a67fd0ef jal 11e8 <_out_char> - const char *s = va_arg(ap, char *); - 3786: 0c21 addi s8,s8,8 - 3788: ba09 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 378a: 000c3683 ld a3,0(s8) - 378e: 008c0793 addi a5,s8,8 - 3792: e43e sd a5,8(sp) - 3794: 8e36 mv t3,a3 - if (is_signed) - 3796: b50d j 35b8 <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3798: 8d52 mv s10,s4 - 379a: 4b01 li s6,0 - 379c: b585 j 35fc <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 379e: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37a0: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 37a2: 00002c97 auipc s9,0x2 - 37a6: 976c8c93 addi s9,s9,-1674 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x128> - 37aa: bda9 j 3604 <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37ac: 8d52 mv s10,s4 - 37ae: 4b01 li s6,0 - 37b0: b735 j 36dc <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37b2: 07000693 li a3,112 - 37b6: 04dc8263 beq s9,a3,37fa <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37ba: 000c3e03 ld t3,0(s8) - 37be: 8dbe mv s11,a5 - 37c0: 4581 li a1,0 - 37c2: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37c4: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37c6: 00002f97 auipc t6,0x2 - 37ca: 93af8f93 addi t6,t6,-1734 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 37ce: b1dd j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37d0: 000c3e03 ld t3,0(s8) - 37d4: 4581 li a1,0 - 37d6: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37d8: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37da: 00002f97 auipc t6,0x2 - 37de: 926f8f93 addi t6,t6,-1754 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 37e2: b9c9 j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 37e4: 8dbe mv s11,a5 - 37e6: b911 j 33fa <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 37e8: 577d li a4,-1 - 37ea: 4401 li s0,0 - 37ec: d6ec19e3 bne s8,a4,355e <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 37f0: 6c22 ld s8,8(sp) - 37f2: b065 j 309a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37f4: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37f8: b549 j 367a <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37fa: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 37fc: 000c3e03 ld t3,0(s8) - 3800: 4581 li a1,0 - 3802: 07000c93 li s9,112 - 3806: e002 sd zero,0(sp) - 3808: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 380a: 00002f97 auipc t6,0x2 - 380e: 8f6f8f93 addi t6,t6,-1802 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 3812: b14d j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 3814: 00002c97 auipc s9,0x2 - 3818: 90cc8c93 addi s9,s9,-1780 # 5120 <_GLOBAL__sub_I__ZSt3cin+0x130> - 381c: b3e5 j 3604 <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 381e: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3822: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 3826: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3828: 8dbe mv s11,a5 - 382a: bd81 j 367a <_vprintf_core.constprop.0.isra.0+0x61e> - 382c: 8d52 mv s10,s4 - 382e: 4b01 li s6,0 - 3830: 4b81 li s7,0 - 3832: bd59 j 36c8 <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3834: 07000693 li a3,112 - 3838: fcdc82e3 beq s9,a3,37fc <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 383c: 01ce8c63 beq t4,t3,3854 <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3840: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3844: 4581 li a1,0 - 3846: e002 sd zero,0(sp) - 3848: 4329 li t1,10 - 384a: 00002f97 auipc t6,0x2 - 384e: 8b6f8f93 addi t6,t6,-1866 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x110> - 3852: b18d j 34b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3854: 000c3e03 ld t3,0(s8) - if (is_signed) - 3858: b7f5 j 3844 <_vprintf_core.constprop.0.isra.0+0x7e8> - -000000000000385a : -{ - 385a: 7139 addi sp,sp,-64 - 385c: f822 sd s0,48(sp) - 385e: f426 sd s1,40(sp) - 3860: 842e mv s0,a1 - 3862: 84aa mv s1,a0 - 3864: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 3866: 850a mv a0,sp - 3868: 8636 mv a2,a3 -{ - 386a: fc06 sd ra,56(sp) - ctx.buf = str; - 386c: e026 sd s1,0(sp) - ctx.limit = size; - 386e: e422 sd s0,8(sp) - ctx.written = 0; - 3870: e802 sd zero,16(sp) - ctx.stream = NULL; - 3872: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 3874: fe8ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3878: 6542 ld a0,16(sp) - if (size > 0) - 387a: c411 beqz s0,3886 - if (ctx.written < size) - 387c: 00857b63 bgeu a0,s0,3892 - str[ctx.written] = '\0'; - 3880: 94aa add s1,s1,a0 - 3882: 00048023 sb zero,0(s1) -} - 3886: 70e2 ld ra,56(sp) - 3888: 7442 ld s0,48(sp) - 388a: 74a2 ld s1,40(sp) - 388c: 2501 sext.w a0,a0 - 388e: 6121 addi sp,sp,64 - 3890: 8082 ret - str[size - 1] = '\0'; - 3892: 94a2 add s1,s1,s0 - 3894: fe048fa3 sb zero,-1(s1) -} - 3898: 70e2 ld ra,56(sp) - 389a: 7442 ld s0,48(sp) - 389c: 74a2 ld s1,40(sp) - 389e: 2501 sext.w a0,a0 - 38a0: 6121 addi sp,sp,64 - 38a2: 8082 ret - -00000000000038a4 : -{ - 38a4: 7119 addi sp,sp,-128 - 38a6: e0a2 sd s0,64(sp) - 38a8: fc26 sd s1,56(sp) - 38aa: 842e mv s0,a1 - 38ac: 84aa mv s1,a0 - 38ae: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 38b0: 0808 addi a0,sp,16 - va_start(ap, format); - 38b2: 08b0 addi a2,sp,88 -{ - 38b4: e486 sd ra,72(sp) - 38b6: ecb6 sd a3,88(sp) - 38b8: f0ba sd a4,96(sp) - 38ba: f4be sd a5,104(sp) - 38bc: f8c2 sd a6,112(sp) - 38be: fcc6 sd a7,120(sp) - va_start(ap, format); - 38c0: e432 sd a2,8(sp) - ctx.buf = str; - 38c2: e826 sd s1,16(sp) - ctx.limit = size; - 38c4: ec22 sd s0,24(sp) - ctx.written = 0; - 38c6: f002 sd zero,32(sp) - ctx.stream = NULL; - 38c8: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 38ca: f92ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 38ce: 7502 ld a0,32(sp) - if (size > 0) - 38d0: c411 beqz s0,38dc - if (ctx.written < size) - 38d2: 00857b63 bgeu a0,s0,38e8 - str[ctx.written] = '\0'; - 38d6: 94aa add s1,s1,a0 - 38d8: 00048023 sb zero,0(s1) -} - 38dc: 60a6 ld ra,72(sp) - 38de: 6406 ld s0,64(sp) - 38e0: 74e2 ld s1,56(sp) - 38e2: 2501 sext.w a0,a0 - 38e4: 6109 addi sp,sp,128 - 38e6: 8082 ret - str[size - 1] = '\0'; - 38e8: 94a2 add s1,s1,s0 - 38ea: fe048fa3 sb zero,-1(s1) -} - 38ee: 60a6 ld ra,72(sp) - 38f0: 6406 ld s0,64(sp) - 38f2: 74e2 ld s1,56(sp) - 38f4: 2501 sext.w a0,a0 - 38f6: 6109 addi sp,sp,128 - 38f8: 8082 ret - -00000000000038fa : -{ - 38fa: 7119 addi sp,sp,-128 - va_start(ap, format); - 38fc: 04810313 addi t1,sp,72 -{ - 3900: e4ae sd a1,72(sp) - 3902: e8b2 sd a2,80(sp) - 3904: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 3906: 85aa mv a1,a0 - ctx.stream = stdout; - 3908: 00004797 auipc a5,0x4 - 390c: de87b783 ld a5,-536(a5) # 76f0 - _vprintf_core(&ctx, format, ap); - 3910: 0808 addi a0,sp,16 - 3912: 861a mv a2,t1 -{ - 3914: fc06 sd ra,56(sp) - 3916: ecb6 sd a3,88(sp) - 3918: f0ba sd a4,96(sp) - 391a: f8c2 sd a6,112(sp) - 391c: fcc6 sd a7,120(sp) - va_start(ap, format); - 391e: e41a sd t1,8(sp) - ctx.buf = NULL; - 3920: e802 sd zero,16(sp) - ctx.limit = 0; - 3922: ec02 sd zero,24(sp) - ctx.written = 0; - 3924: f002 sd zero,32(sp) - ctx.stream = stdout; - 3926: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 3928: f34ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> -} - 392c: 70e2 ld ra,56(sp) - 392e: 5502 lw a0,32(sp) - 3930: 6109 addi sp,sp,128 - 3932: 8082 ret - -0000000000003934 : -{ - 3934: 7159 addi sp,sp,-112 - va_start(ap, format); - 3936: 04010e13 addi t3,sp,64 -{ - 393a: 8eaa mv t4,a0 - ctx.fd = -1; - 393c: 537d li t1,-1 -{ - 393e: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3940: 0808 addi a0,sp,16 - 3942: 8672 mv a2,t3 -{ - 3944: fc06 sd ra,56(sp) - 3946: e4b6 sd a3,72(sp) - 3948: e8ba sd a4,80(sp) - 394a: ecbe sd a5,88(sp) - 394c: f0c2 sd a6,96(sp) - 394e: f4c6 sd a7,104(sp) - va_start(ap, format); - 3950: e472 sd t3,8(sp) - ctx.buf = str; - 3952: e876 sd t4,16(sp) - ctx.fd = -1; - 3954: cc1a sw t1,24(sp) - ctx.pos = 0; - 3956: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3958: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 395a: 81efd0ef jal 978 <_vscanf_core.constprop.0> -} - 395e: 70e2 ld ra,56(sp) - 3960: 6165 addi sp,sp,112 - 3962: 8082 ret - -0000000000003964 : -{ - 3964: 7119 addi sp,sp,-128 - va_start(ap, format); - 3966: 04810313 addi t1,sp,72 -{ - 396a: e4ae sd a1,72(sp) - 396c: e8b2 sd a2,80(sp) - 396e: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3970: 85aa mv a1,a0 - ctx.ungotten = -1; - 3972: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 3974: 0808 addi a0,sp,16 - 3976: 861a mv a2,t1 -{ - 3978: fc06 sd ra,56(sp) - 397a: ecb6 sd a3,88(sp) - 397c: f0ba sd a4,96(sp) - 397e: f8c2 sd a6,112(sp) - 3980: fcc6 sd a7,120(sp) - va_start(ap, format); - 3982: e41a sd t1,8(sp) - ctx.buf = NULL; - 3984: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 3986: cc02 sw zero,24(sp) - ctx.pos = 0; - 3988: f002 sd zero,32(sp) - ctx.ungotten = -1; - 398a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 398c: fedfc0ef jal 978 <_vscanf_core.constprop.0> -} - 3990: 70e2 ld ra,56(sp) - 3992: 6109 addi sp,sp,128 - 3994: 8082 ret - -0000000000003996 : -{ - 3996: 1101 addi sp,sp,-32 - 3998: e426 sd s1,8(sp) - 399a: 84ae mv s1,a1 - 399c: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 399e: 00001597 auipc a1,0x1 - 39a2: 7a258593 addi a1,a1,1954 # 5140 <_GLOBAL__sub_I__ZSt3cin+0x150> -{ - 39a6: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 39a8: 8526 mv a0,s1 -{ - 39aa: e822 sd s0,16(sp) - 39ac: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 39ae: 298010ef jal 4c46 - 39b2: 842a mv s0,a0 - 39b4: c919 beqz a0,39ca - else if (strcmp(mode, "w") == 0) - 39b6: 00001597 auipc a1,0x1 - 39ba: 79258593 addi a1,a1,1938 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x158> - 39be: 8526 mv a0,s1 - 39c0: 286010ef jal 4c46 - flags = O_WRONLY | O_CREAT | O_TRUNC; - 39c4: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 39c8: ed39 bnez a0,3a26 - int64 fd = open(filename, flags); - 39ca: 85a2 mv a1,s0 - 39cc: 854a mv a0,s2 - 39ce: f42fc0ef jal 110 - 39d2: 84aa mv s1,a0 - if (fd < 0) - 39d4: 06054c63 bltz a0,3a4c - FILE *f = (FILE *)malloc(sizeof(FILE)); - 39d8: 42000513 li a0,1056 - 39dc: 2f3000ef jal 44ce - 39e0: 892a mv s2,a0 - if (!f) - 39e2: c53d beqz a0,3a50 - memset(f, 0, sizeof(FILE)); - 39e4: 42000613 li a2,1056 - 39e8: 4581 li a1,0 - 39ea: 0ee010ef jal 4ad8 - if (fd == 1) - 39ee: 4785 li a5,1 - f->fd = (int)fd; - 39f0: 00992023 sw s1,0(s2) - f->flags = flags; - 39f4: 00892223 sw s0,4(s2) - if (fd == 1) - 39f8: 00f48e63 beq s1,a5,3a14 - else if (fd == 2) - 39fc: 4789 li a5,2 - 39fe: 00f48b63 beq s1,a5,3a14 - f->buf_mode = 0; - 3a02: 40092e23 sw zero,1052(s2) -} - 3a06: 60e2 ld ra,24(sp) - 3a08: 6442 ld s0,16(sp) - 3a0a: 64a2 ld s1,8(sp) - 3a0c: 854a mv a0,s2 - 3a0e: 6902 ld s2,0(sp) - 3a10: 6105 addi sp,sp,32 - 3a12: 8082 ret - 3a14: 60e2 ld ra,24(sp) - 3a16: 6442 ld s0,16(sp) - f->buf_mode = 2; - 3a18: 40992e23 sw s1,1052(s2) -} - 3a1c: 854a mv a0,s2 - 3a1e: 64a2 ld s1,8(sp) - 3a20: 6902 ld s2,0(sp) - 3a22: 6105 addi sp,sp,32 - 3a24: 8082 ret - else if (strcmp(mode, "a") == 0) - 3a26: 00001597 auipc a1,0x1 - 3a2a: 72a58593 addi a1,a1,1834 # 5150 <_GLOBAL__sub_I__ZSt3cin+0x160> - 3a2e: 8526 mv a0,s1 - 3a30: 216010ef jal 4c46 - flags = O_WRONLY | O_CREAT | O_APPEND; - 3a34: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 3a38: d949 beqz a0,39ca - else if (strcmp(mode, "r+") == 0) - 3a3a: 00001597 auipc a1,0x1 - 3a3e: 71e58593 addi a1,a1,1822 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x168> - 3a42: 8526 mv a0,s1 - 3a44: 202010ef jal 4c46 - flags = O_RDWR; - 3a48: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 3a4a: d141 beqz a0,39ca - return NULL; - 3a4c: 4901 li s2,0 - 3a4e: bf65 j 3a06 - close(fd); - 3a50: 8526 mv a0,s1 - 3a52: ea6fc0ef jal f8 - return NULL; - 3a56: 4901 li s2,0 - 3a58: b77d j 3a06 - -0000000000003a5a : - if (!stream) - 3a5a: cd29 beqz a0,3ab4 - if (stream->buf_write_pos > 0) - 3a5c: 41052603 lw a2,1040(a0) -{ - 3a60: 1141 addi sp,sp,-16 - 3a62: e022 sd s0,0(sp) - 3a64: e406 sd ra,8(sp) - 3a66: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a68: 02c04a63 bgtz a2,3a9c - if (stream != stdin && stream != stdout && stream != stderr) - 3a6c: 00004797 auipc a5,0x4 - 3a70: c8478793 addi a5,a5,-892 # 76f0 - 3a74: 6798 ld a4,8(a5) - 3a76: 00870e63 beq a4,s0,3a92 - 3a7a: 6398 ld a4,0(a5) - 3a7c: 00870b63 beq a4,s0,3a92 - 3a80: 6b9c ld a5,16(a5) - 3a82: 00878863 beq a5,s0,3a92 - close(stream->fd); - 3a86: 4008 lw a0,0(s0) - 3a88: e70fc0ef jal f8 - free(stream); - 3a8c: 8522 mv a0,s0 - 3a8e: 1cb000ef jal 4458 -} - 3a92: 60a2 ld ra,8(sp) - 3a94: 6402 ld s0,0(sp) - return 0; - 3a96: 4501 li a0,0 -} - 3a98: 0141 addi sp,sp,16 - 3a9a: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a9c: 4108 lw a0,0(a0) - 3a9e: 01040593 addi a1,s0,16 - 3aa2: e4efc0ef jal f0 - if (ret < stream->buf_write_pos) - 3aa6: 41042783 lw a5,1040(s0) - 3aaa: 00f54763 blt a0,a5,3ab8 - stream->buf_write_pos = 0; - 3aae: 40042823 sw zero,1040(s0) - 3ab2: bf6d j 3a6c - return -1; - 3ab4: 557d li a0,-1 -} - 3ab6: 8082 ret - stream->error = 1; - 3ab8: 4785 li a5,1 - 3aba: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3abc: 40042823 sw zero,1040(s0) - return EOF; - 3ac0: b775 j 3a6c - -0000000000003ac2 : - if (!stream) - 3ac2: c121 beqz a0,3b02 - if (stream->buf_write_pos > 0) - 3ac4: 41052603 lw a2,1040(a0) -{ - 3ac8: 1141 addi sp,sp,-16 - 3aca: e022 sd s0,0(sp) - 3acc: e406 sd ra,8(sp) - 3ace: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3ad0: 00c04763 bgtz a2,3ade - return 0; - 3ad4: 4501 li a0,0 -} - 3ad6: 60a2 ld ra,8(sp) - 3ad8: 6402 ld s0,0(sp) - 3ada: 0141 addi sp,sp,16 - 3adc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3ade: 4108 lw a0,0(a0) - 3ae0: 01040593 addi a1,s0,16 - 3ae4: e0cfc0ef jal f0 - if (ret < stream->buf_write_pos) - 3ae8: 41042783 lw a5,1040(s0) - 3aec: 00f54563 blt a0,a5,3af6 - stream->buf_write_pos = 0; - 3af0: 40042823 sw zero,1040(s0) - 3af4: b7c5 j 3ad4 - stream->error = 1; - 3af6: 4785 li a5,1 - 3af8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3afa: 40042823 sw zero,1040(s0) - return EOF; - 3afe: 557d li a0,-1 - 3b00: bfd9 j 3ad6 - 3b02: 557d li a0,-1 -} - 3b04: 8082 ret - -0000000000003b06 : -{ - 3b06: 7159 addi sp,sp,-112 - 3b08: fc06 sd ra,56(sp) - 3b0a: e0b2 sd a2,64(sp) - 3b0c: e4b6 sd a3,72(sp) - 3b0e: e8ba sd a4,80(sp) - 3b10: ecbe sd a5,88(sp) - 3b12: f0c2 sd a6,96(sp) - 3b14: f4c6 sd a7,104(sp) - if (!stream) - 3b16: cd19 beqz a0,3b34 - va_start(ap, format); - 3b18: 832a mv t1,a0 - 3b1a: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 3b1c: 0808 addi a0,sp,16 - va_start(ap, format); - 3b1e: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b20: e802 sd zero,16(sp) - ctx.limit = 0; - 3b22: ec02 sd zero,24(sp) - ctx.written = 0; - 3b24: f002 sd zero,32(sp) - ctx.stream = stream; - 3b26: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 3b28: d34ff0ef jal 305c <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 3b2c: 5502 lw a0,32(sp) -} - 3b2e: 70e2 ld ra,56(sp) - 3b30: 6165 addi sp,sp,112 - 3b32: 8082 ret - return -1; - 3b34: 557d li a0,-1 - 3b36: bfe5 j 3b2e - -0000000000003b38 : -{ - 3b38: 7159 addi sp,sp,-112 - 3b3a: fc06 sd ra,56(sp) - 3b3c: e0b2 sd a2,64(sp) - 3b3e: e4b6 sd a3,72(sp) - 3b40: e8ba sd a4,80(sp) - 3b42: ecbe sd a5,88(sp) - 3b44: f0c2 sd a6,96(sp) - 3b46: f4c6 sd a7,104(sp) - if (!stream) - 3b48: cd19 beqz a0,3b66 - ctx.fd = stream->fd; - 3b4a: 411c lw a5,0(a0) - va_start(ap, format); - 3b4c: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 3b4e: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 3b50: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 3b52: 57fd li a5,-1 - va_start(ap, format); - 3b54: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b56: e802 sd zero,16(sp) - ctx.pos = 0; - 3b58: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3b5a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3b5c: e1dfc0ef jal 978 <_vscanf_core.constprop.0> -} - 3b60: 70e2 ld ra,56(sp) - 3b62: 6165 addi sp,sp,112 - 3b64: 8082 ret - return -1; - 3b66: 557d li a0,-1 - 3b68: bfe5 j 3b60 - -0000000000003b6a : - if (!stream) - 3b6a: c1e1 beqz a1,3c2a -{ - 3b6c: 7179 addi sp,sp,-48 - 3b6e: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 3b70: 41c5a903 lw s2,1052(a1) -{ - 3b74: f022 sd s0,32(sp) - 3b76: ec26 sd s1,24(sp) - 3b78: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 3b7a: 4789 li a5,2 - 3b7c: 842e mv s0,a1 - 3b7e: 84aa mv s1,a0 - char ch = (char)c; - 3b80: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 3b84: 02f90963 beq s2,a5,3bb6 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b88: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 3b8c: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b90: 0017861b addiw a2,a5,1 - 3b94: 40c5a823 sw a2,1040(a1) - 3b98: 97ae add a5,a5,a1 - 3b9a: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3b9e: 06c6c463 blt a3,a2,3c06 - else if (stream->buf_mode == 1 && c == '\n') - 3ba2: 4785 li a5,1 - 3ba4: 02f90e63 beq s2,a5,3be0 - return c; - 3ba8: 8526 mv a0,s1 -} - 3baa: 70a2 ld ra,40(sp) - 3bac: 7402 ld s0,32(sp) - 3bae: 64e2 ld s1,24(sp) - 3bb0: 6942 ld s2,16(sp) - 3bb2: 6145 addi sp,sp,48 - 3bb4: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3bb6: 4188 lw a0,0(a1) - 3bb8: 4605 li a2,1 - 3bba: 00f10593 addi a1,sp,15 - char ch = (char)c; - 3bbe: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3bc2: d2efc0ef jal f0 - 3bc6: 872a mv a4,a0 - 3bc8: 4785 li a5,1 - return c; - 3bca: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 3bcc: fcf70fe3 beq a4,a5,3baa -} - 3bd0: 70a2 ld ra,40(sp) - stream->error = 1; - 3bd2: c41c sw a5,8(s0) -} - 3bd4: 7402 ld s0,32(sp) - 3bd6: 64e2 ld s1,24(sp) - 3bd8: 6942 ld s2,16(sp) - return EOF; - 3bda: 557d li a0,-1 -} - 3bdc: 6145 addi sp,sp,48 - 3bde: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3be0: 47a9 li a5,10 - 3be2: fcf513e3 bne a0,a5,3ba8 - if (stream->buf_write_pos > 0) - 3be6: fcc051e3 blez a2,3ba8 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3bea: 4188 lw a0,0(a1) - 3bec: 05c1 addi a1,a1,16 - 3bee: d02fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3bf2: 41042783 lw a5,1040(s0) - 3bf6: 02f55063 bge a0,a5,3c16 - stream->error = 1; - 3bfa: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 3bfe: 40042823 sw zero,1040(s0) - return c; - 3c02: 8526 mv a0,s1 - 3c04: b75d j 3baa - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c06: 4188 lw a0,0(a1) - 3c08: 05c1 addi a1,a1,16 - 3c0a: ce6fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3c0e: 41042783 lw a5,1040(s0) - 3c12: 00f54663 blt a0,a5,3c1e - stream->buf_write_pos = 0; - 3c16: 40042823 sw zero,1040(s0) - return c; - 3c1a: 8526 mv a0,s1 - 3c1c: b779 j 3baa - stream->error = 1; - 3c1e: 4785 li a5,1 - 3c20: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3c22: 40042823 sw zero,1040(s0) - return c; - 3c26: 8526 mv a0,s1 - 3c28: b749 j 3baa - return EOF; - 3c2a: 557d li a0,-1 -} - 3c2c: 8082 ret - -0000000000003c2e : - if (!stream) - 3c2e: c1ed beqz a1,3d10 -{ - 3c30: 711d addi sp,sp,-96 - 3c32: e4a6 sd s1,72(sp) - 3c34: ec86 sd ra,88(sp) - while (*s) - 3c36: 00054703 lbu a4,0(a0) - 3c3a: 84aa mv s1,a0 - 3c3c: cf25 beqz a4,3cb4 - 3c3e: e8a2 sd s0,80(sp) - 3c40: e0ca sd s2,64(sp) - 3c42: fc4e sd s3,56(sp) - 3c44: f852 sd s4,48(sp) - 3c46: f456 sd s5,40(sp) - 3c48: f05a sd s6,32(sp) - 3c4a: ec5e sd s7,24(sp) - 3c4c: 842e mv s0,a1 - if (stream->buf_mode == 2) - 3c4e: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 3c50: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 3c54: 4985 li s3,1 - 3c56: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c58: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 3c5c: 00f10b93 addi s7,sp,15 - 3c60: a031 j 3c6c - else if (stream->buf_mode == 1 && c == '\n') - 3c62: 09368563 beq a3,s3,3cec - while (*s) - 3c66: 0004c703 lbu a4,0(s1) - 3c6a: cf15 beqz a4,3ca6 - if (stream->buf_mode == 2) - 3c6c: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 3c70: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 3c72: 05268663 beq a3,s2,3cbe - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c76: 41042783 lw a5,1040(s0) - 3c7a: 0017861b addiw a2,a5,1 - 3c7e: 40c42823 sw a2,1040(s0) - 3c82: 97a2 add a5,a5,s0 - 3c84: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3c88: fccb5de3 bge s6,a2,3c62 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c8c: 4008 lw a0,0(s0) - 3c8e: 85d6 mv a1,s5 - 3c90: c60fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3c94: 41042783 lw a5,1040(s0) - 3c98: 06f54763 blt a0,a5,3d06 - stream->buf_write_pos = 0; - 3c9c: 40042823 sw zero,1040(s0) - while (*s) - 3ca0: 0004c703 lbu a4,0(s1) - 3ca4: f761 bnez a4,3c6c - 3ca6: 6446 ld s0,80(sp) - 3ca8: 6906 ld s2,64(sp) - 3caa: 79e2 ld s3,56(sp) - 3cac: 7a42 ld s4,48(sp) - 3cae: 7aa2 ld s5,40(sp) - 3cb0: 7b02 ld s6,32(sp) - 3cb2: 6be2 ld s7,24(sp) -} - 3cb4: 60e6 ld ra,88(sp) - 3cb6: 64a6 ld s1,72(sp) - return 0; - 3cb8: 4501 li a0,0 -} - 3cba: 6125 addi sp,sp,96 - 3cbc: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3cbe: 4008 lw a0,0(s0) - 3cc0: 4605 li a2,1 - 3cc2: 85de mv a1,s7 - char ch = (char)c; - 3cc4: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3cc8: c28fc0ef jal f0 - 3ccc: f9350de3 beq a0,s3,3c66 - stream->error = 1; - 3cd0: 01342423 sw s3,8(s0) -} - 3cd4: 60e6 ld ra,88(sp) - 3cd6: 6446 ld s0,80(sp) - 3cd8: 6906 ld s2,64(sp) - 3cda: 79e2 ld s3,56(sp) - 3cdc: 7a42 ld s4,48(sp) - 3cde: 7aa2 ld s5,40(sp) - 3ce0: 7b02 ld s6,32(sp) - 3ce2: 6be2 ld s7,24(sp) - 3ce4: 64a6 ld s1,72(sp) - return -1; - 3ce6: 557d li a0,-1 -} - 3ce8: 6125 addi sp,sp,96 - 3cea: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3cec: f7471de3 bne a4,s4,3c66 - if (stream->buf_write_pos > 0) - 3cf0: f6c05be3 blez a2,3c66 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cf4: 4008 lw a0,0(s0) - 3cf6: 01040593 addi a1,s0,16 - 3cfa: bf6fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3cfe: 41042783 lw a5,1040(s0) - 3d02: f8f55de3 bge a0,a5,3c9c - stream->error = 1; - 3d06: 4785 li a5,1 - 3d08: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d0a: 40042823 sw zero,1040(s0) - return EOF; - 3d0e: bfa1 j 3c66 - return -1; - 3d10: 557d li a0,-1 -} - 3d12: 8082 ret - -0000000000003d14 : - if (!stream) - 3d14: c949 beqz a0,3da6 - if (stream->buf_write_pos > 0) - 3d16: 41052603 lw a2,1040(a0) -{ - 3d1a: 1141 addi sp,sp,-16 - 3d1c: e022 sd s0,0(sp) - 3d1e: e406 sd ra,8(sp) - 3d20: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3d22: 04c04863 bgtz a2,3d72 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3d26: 41442783 lw a5,1044(s0) - 3d2a: 41842703 lw a4,1048(s0) - 3d2e: 00e7dd63 bge a5,a4,3d48 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d32: 0017871b addiw a4,a5,1 - 3d36: 40e42a23 sw a4,1044(s0) - 3d3a: 943e add s0,s0,a5 - 3d3c: 01044503 lbu a0,16(s0) -} - 3d40: 60a2 ld ra,8(sp) - 3d42: 6402 ld s0,0(sp) - 3d44: 0141 addi sp,sp,16 - 3d46: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3d48: 4008 lw a0,0(s0) - 3d4a: 40000613 li a2,1024 - 3d4e: 01040593 addi a1,s0,16 - 3d52: b96fc0ef jal e8 - 3d56: 87aa mv a5,a0 - if (ret <= 0) - 3d58: 02a05e63 blez a0,3d94 - stream->buf_read_cnt = (int)ret; - 3d5c: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d60: 4785 li a5,1 - 3d62: 01044503 lbu a0,16(s0) -} - 3d66: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d68: 40f42a23 sw a5,1044(s0) -} - 3d6c: 6402 ld s0,0(sp) - 3d6e: 0141 addi sp,sp,16 - 3d70: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d72: 4108 lw a0,0(a0) - 3d74: 01040593 addi a1,s0,16 - 3d78: b78fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3d7c: 41042783 lw a5,1040(s0) - 3d80: 00f54563 blt a0,a5,3d8a - stream->buf_write_pos = 0; - 3d84: 40042823 sw zero,1040(s0) - 3d88: bf79 j 3d26 - stream->error = 1; - 3d8a: 4785 li a5,1 - 3d8c: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d8e: 40042823 sw zero,1040(s0) - return EOF; - 3d92: bf51 j 3d26 - if (ret == 0) - 3d94: e509 bnez a0,3d9e - stream->eof = 1; - 3d96: 4785 li a5,1 - 3d98: c45c sw a5,12(s0) - return EOF; - 3d9a: 557d li a0,-1 - 3d9c: b755 j 3d40 - stream->error = 1; - 3d9e: 4785 li a5,1 - 3da0: c41c sw a5,8(s0) - return EOF; - 3da2: 557d li a0,-1 - 3da4: bf71 j 3d40 - 3da6: 557d li a0,-1 -} - 3da8: 8082 ret - -0000000000003daa : - if (!stream || n <= 0) - 3daa: ce5d beqz a2,3e68 - 3dac: 0ab05e63 blez a1,3e68 -{ - 3db0: 715d addi sp,sp,-80 - 3db2: e0a2 sd s0,64(sp) - 3db4: fc26 sd s1,56(sp) - 3db6: f84a sd s2,48(sp) - 3db8: f44e sd s3,40(sp) - 3dba: f052 sd s4,32(sp) - 3dbc: ec56 sd s5,24(sp) - 3dbe: e85a sd s6,16(sp) - 3dc0: e45e sd s7,8(sp) - 3dc2: e486 sd ra,72(sp) - 3dc4: 8432 mv s0,a2 - 3dc6: 8aaa mv s5,a0 - 3dc8: 892a mv s2,a0 - 3dca: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 3dce: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3dd0: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3dd4: 4b05 li s6,1 - if (c == '\n') - 3dd6: 4a29 li s4,10 - while (i < n - 1) - 3dd8: 05748163 beq s1,s7,3e1a - if (stream->buf_write_pos > 0) - 3ddc: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3de0: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 3de2: 06c04963 bgtz a2,3e54 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3de6: 41442783 lw a5,1044(s0) - 3dea: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3dee: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3df2: 0017851b addiw a0,a5,1 - 3df6: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3dfa: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3dfc: 02e7de63 bge a5,a4,3e38 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e00: 40a42a23 sw a0,1044(s0) - 3e04: 0106c783 lbu a5,16(a3) - 3e08: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 3e0c: 00f90023 sb a5,0(s2) - 3e10: 2485 addiw s1,s1,1 - if (c == '\n') - 3e12: 0905 addi s2,s2,1 - 3e14: fd4712e3 bne a4,s4,3dd8 - str[i++] = (char)c; - 3e18: 8ba6 mv s7,s1 - str[i] = '\0'; - 3e1a: 9bd6 add s7,s7,s5 - 3e1c: 000b8023 sb zero,0(s7) - return str; - 3e20: 8556 mv a0,s5 -} - 3e22: 60a6 ld ra,72(sp) - 3e24: 6406 ld s0,64(sp) - 3e26: 74e2 ld s1,56(sp) - 3e28: 7942 ld s2,48(sp) - 3e2a: 79a2 ld s3,40(sp) - 3e2c: 7a02 ld s4,32(sp) - 3e2e: 6ae2 ld s5,24(sp) - 3e30: 6b42 ld s6,16(sp) - 3e32: 6ba2 ld s7,8(sp) - 3e34: 6161 addi sp,sp,80 - 3e36: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3e38: 4008 lw a0,0(s0) - 3e3a: aaefc0ef jal e8 - if (ret <= 0) - 3e3e: 02a05c63 blez a0,3e76 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e42: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 3e46: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e4a: 41642a23 sw s6,1044(s0) - 3e4e: 0007871b sext.w a4,a5 - if (c == -1) - 3e52: bf6d j 3e0c - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3e54: 4008 lw a0,0(s0) - 3e56: a9afc0ef jal f0 - if (ret < stream->buf_write_pos) - 3e5a: 41042783 lw a5,1040(s0) - 3e5e: 00f54763 blt a0,a5,3e6c - stream->buf_write_pos = 0; - 3e62: 40042823 sw zero,1040(s0) - 3e66: b741 j 3de6 - return NULL; - 3e68: 4501 li a0,0 -} - 3e6a: 8082 ret - stream->error = 1; - 3e6c: 4785 li a5,1 - 3e6e: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3e70: 40042823 sw zero,1040(s0) - return EOF; - 3e74: bf8d j 3de6 - stream->eof = 1; - 3e76: 4785 li a5,1 - if (ret == 0) - 3e78: e509 bnez a0,3e82 - stream->eof = 1; - 3e7a: c45c sw a5,12(s0) - if (i == 0) - 3e7c: fcd1 bnez s1,3e18 - return NULL; - 3e7e: 4501 li a0,0 - 3e80: b74d j 3e22 - stream->error = 1; - 3e82: c41c sw a5,8(s0) - if (c == -1) - 3e84: bfe5 j 3e7c - -0000000000003e86 : -{ - 3e86: 715d addi sp,sp,-80 - 3e88: e486 sd ra,72(sp) - 3e8a: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 3e8c: 0e068963 beqz a3,3f7e - 3e90: ec56 sd s5,24(sp) - return 0; - 3e92: 4981 li s3,0 - 3e94: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 3e96: c9bd beqz a1,3f0c - 3e98: ca35 beqz a2,3f0c - if (stream->buf_write_pos > 0) - 3e9a: 4106a783 lw a5,1040(a3) - 3e9e: e0a2 sd s0,64(sp) - 3ea0: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 3ea2: 02c589b3 mul s3,a1,a2 - 3ea6: 8436 mv s0,a3 - 3ea8: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 3eaa: 0af04d63 bgtz a5,3f64 - while (bytes_read < total_bytes) - 3eae: 04098d63 beqz s3,3f08 - 3eb2: fc26 sd s1,56(sp) - 3eb4: e85a sd s6,16(sp) - 3eb6: e45e sd s7,8(sp) - 3eb8: f84a sd s2,48(sp) - 3eba: 4481 li s1,0 - if (remaining >= BUFSIZ) - 3ebc: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ec0: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ec4: 41442703 lw a4,1044(s0) - 3ec8: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 3ecc: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ed0: 06f74463 blt a4,a5,3f38 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3ed4: 4008 lw a0,0(s0) - 3ed6: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 3eda: 02cb7f63 bgeu s6,a2,3f18 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3ede: a0afc0ef jal e8 - if (ret <= 0) - 3ee2: 0aa05463 blez a0,3f8a - bytes_read += ret; - 3ee6: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 3ee8: fd34eee3 bltu s1,s3,3ec4 - return bytes_read / size; - 3eec: 0354d9b3 divu s3,s1,s5 - 3ef0: 6406 ld s0,64(sp) -} - 3ef2: 60a6 ld ra,72(sp) - return bytes_read / size; - 3ef4: 74e2 ld s1,56(sp) - 3ef6: 7942 ld s2,48(sp) - 3ef8: 7a02 ld s4,32(sp) - 3efa: 6ae2 ld s5,24(sp) - 3efc: 6b42 ld s6,16(sp) - 3efe: 6ba2 ld s7,8(sp) -} - 3f00: 854e mv a0,s3 - 3f02: 79a2 ld s3,40(sp) - 3f04: 6161 addi sp,sp,80 - 3f06: 8082 ret - 3f08: 6406 ld s0,64(sp) - 3f0a: 7a02 ld s4,32(sp) - 3f0c: 60a6 ld ra,72(sp) - 3f0e: 6ae2 ld s5,24(sp) - 3f10: 854e mv a0,s3 - 3f12: 79a2 ld s3,40(sp) - 3f14: 6161 addi sp,sp,80 - 3f16: 8082 ret - stream->buf_read_pos = 0; - 3f18: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 3f1c: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3f20: 40000613 li a2,1024 - 3f24: 85de mv a1,s7 - 3f26: 9c2fc0ef jal e8 - if (ret <= 0) - 3f2a: 06a05063 blez a0,3f8a - stream->buf_read_cnt = (int)ret; - 3f2e: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 3f32: f934e9e3 bltu s1,s3,3ec4 - 3f36: bf5d j 3eec - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 3f38: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f3c: 00eb85b3 add a1,s7,a4 - 3f40: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 3f44: 01267363 bgeu a2,s2,3f4a - 3f48: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f4a: 864a mv a2,s2 - 3f4c: 3e1000ef jal 4b2c - stream->buf_read_pos += to_copy; - 3f50: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 3f54: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 3f56: 012787bb addw a5,a5,s2 - 3f5a: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 3f5e: f734e3e3 bltu s1,s3,3ec4 - 3f62: b769 j 3eec - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3f64: 4288 lw a0,0(a3) - 3f66: 863e mv a2,a5 - 3f68: 01068593 addi a1,a3,16 - 3f6c: 984fc0ef jal f0 - if (ret < stream->buf_write_pos) - 3f70: 41042783 lw a5,1040(s0) - 3f74: 02f54163 blt a0,a5,3f96 - stream->buf_write_pos = 0; - 3f78: 40042823 sw zero,1040(s0) - 3f7c: bf0d j 3eae -} - 3f7e: 60a6 ld ra,72(sp) - return 0; - 3f80: 4981 li s3,0 -} - 3f82: 854e mv a0,s3 - 3f84: 79a2 ld s3,40(sp) - 3f86: 6161 addi sp,sp,80 - 3f88: 8082 ret - stream->eof = 1; - 3f8a: 4785 li a5,1 - if (ret == 0) - 3f8c: e119 bnez a0,3f92 - stream->eof = 1; - 3f8e: c45c sw a5,12(s0) - 3f90: bfb1 j 3eec - stream->error = 1; - 3f92: c41c sw a5,8(s0) - return bytes_read / size; - 3f94: bfa1 j 3eec - stream->error = 1; - 3f96: 4785 li a5,1 - 3f98: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3f9a: 40042823 sw zero,1040(s0) - return EOF; - 3f9e: bf01 j 3eae - -0000000000003fa0 : -{ - 3fa0: 711d addi sp,sp,-96 - 3fa2: ec86 sd ra,88(sp) - 3fa4: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 3fa6: 10068063 beqz a3,40a6 - 3faa: f456 sd s5,40(sp) - 3fac: 8aaa mv s5,a0 - 3fae: 10050263 beqz a0,40b2 - 3fb2: f05a sd s6,32(sp) - return 0; - 3fb4: 4901 li s2,0 - 3fb6: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 3fb8: c1d9 beqz a1,403e - 3fba: c251 beqz a2,403e - if (stream->buf_mode == 2) - 3fbc: 41c6a703 lw a4,1052(a3) - 3fc0: e8a2 sd s0,80(sp) - 3fc2: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 3fc4: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 3fc8: 8436 mv s0,a3 - 3fca: 0ef70b63 beq a4,a5,40c0 - 3fce: fc4e sd s3,56(sp) - 3fd0: ec5e sd s7,24(sp) - 3fd2: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 3fd4: 4981 li s3,0 - 3fd6: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fda: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 3fde: 12090263 beqz s2,4102 - 3fe2: e4a6 sd s1,72(sp) - 3fe4: f852 sd s4,48(sp) - 3fe6: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fe8: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 3fec: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3ff0: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3ff4: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 3ff8: 00fb8533 add a0,s7,a5 - 3ffc: 8652 mv a2,s4 - if (remaining <= space_left) - 3ffe: 059a6763 bltu s4,s9,404c - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 4002: 8666 mv a2,s9 - 4004: 329000ef jal 4b2c - stream->buf_write_pos += remaining; - 4008: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 400c: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 4010: 019786bb addw a3,a5,s9 - 4014: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 4018: 06e68a63 beq a3,a4,408c - return bytes_written / size; - 401c: 03695933 divu s2,s2,s6 - 4020: 6446 ld s0,80(sp) - 4022: 64a6 ld s1,72(sp) - 4024: 79e2 ld s3,56(sp) - 4026: 7a42 ld s4,48(sp) - 4028: 7aa2 ld s5,40(sp) - 402a: 7b02 ld s6,32(sp) - 402c: 6be2 ld s7,24(sp) - 402e: 6c42 ld s8,16(sp) - 4030: 6ca2 ld s9,8(sp) -} - 4032: 60e6 ld ra,88(sp) - 4034: 854a mv a0,s2 - 4036: 6906 ld s2,64(sp) - 4038: 6125 addi sp,sp,96 - 403a: 8082 ret - 403c: 6446 ld s0,80(sp) - 403e: 60e6 ld ra,88(sp) - 4040: 7aa2 ld s5,40(sp) - 4042: 7b02 ld s6,32(sp) - 4044: 854a mv a0,s2 - 4046: 6906 ld s2,64(sp) - 4048: 6125 addi sp,sp,96 - 404a: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 404c: 2e1000ef jal 4b2c - stream->buf_write_pos += space_left; - 4050: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4054: 85de mv a1,s7 - bytes_written += space_left; - 4056: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 4058: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 405c: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 4060: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4064: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 4066: 00904763 bgtz s1,4074 - while (bytes_written < total_bytes) - 406a: f729efe3 bltu s3,s2,3fe8 - return bytes_written / size; - 406e: 0369d933 divu s2,s3,s6 - 4072: b77d j 4020 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4074: 4008 lw a0,0(s0) - 4076: 87afc0ef jal f0 - if (ret < stream->buf_write_pos) - 407a: 41042783 lw a5,1040(s0) - 407e: 08f54963 blt a0,a5,4110 - stream->buf_write_pos = 0; - 4082: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 4086: f729e1e3 bltu s3,s2,3fe8 - 408a: b7d5 j 406e - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 408c: 4008 lw a0,0(s0) - 408e: 40000613 li a2,1024 - 4092: 85de mv a1,s7 - 4094: 85cfc0ef jal f0 - if (ret < stream->buf_write_pos) - 4098: 41042783 lw a5,1040(s0) - 409c: 08f54163 blt a0,a5,411e - stream->buf_write_pos = 0; - 40a0: 40042823 sw zero,1040(s0) - 40a4: bfa5 j 401c -} - 40a6: 60e6 ld ra,88(sp) - return 0; - 40a8: 4901 li s2,0 -} - 40aa: 854a mv a0,s2 - 40ac: 6906 ld s2,64(sp) - 40ae: 6125 addi sp,sp,96 - 40b0: 8082 ret - 40b2: 60e6 ld ra,88(sp) - return 0; - 40b4: 4901 li s2,0 - 40b6: 7aa2 ld s5,40(sp) -} - 40b8: 854a mv a0,s2 - 40ba: 6906 ld s2,64(sp) - 40bc: 6125 addi sp,sp,96 - 40be: 8082 ret - while (bytes_written < total_bytes) - 40c0: f6090ee3 beqz s2,403c - 40c4: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 40c6: 4481 li s1,0 - 40c8: a021 j 40d0 - bytes_written += ret; - 40ca: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 40cc: 0324f463 bgeu s1,s2,40f4 - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 40d0: 4008 lw a0,0(s0) - 40d2: 40990633 sub a2,s2,s1 - 40d6: 009a85b3 add a1,s5,s1 - 40da: 816fc0ef jal f0 - if (ret <= 0) - 40de: fea046e3 bgtz a0,40ca - stream->error = 1; - 40e2: 4785 li a5,1 - return bytes_written / size; - 40e4: 0364d933 divu s2,s1,s6 - stream->error = 1; - 40e8: c41c sw a5,8(s0) - break; - 40ea: 64a6 ld s1,72(sp) - 40ec: 6446 ld s0,80(sp) - 40ee: 7aa2 ld s5,40(sp) - 40f0: 7b02 ld s6,32(sp) - 40f2: b781 j 4032 - return bytes_written / size; - 40f4: 0364d933 divu s2,s1,s6 - 40f8: 6446 ld s0,80(sp) - 40fa: 64a6 ld s1,72(sp) - 40fc: 7aa2 ld s5,40(sp) - 40fe: 7b02 ld s6,32(sp) - 4100: bf0d j 4032 - 4102: 6446 ld s0,80(sp) - 4104: 79e2 ld s3,56(sp) - 4106: 7aa2 ld s5,40(sp) - 4108: 7b02 ld s6,32(sp) - 410a: 6be2 ld s7,24(sp) - 410c: 6c42 ld s8,16(sp) - 410e: b715 j 4032 - stream->error = 1; - 4110: 4785 li a5,1 - 4112: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4114: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 4118: ed29e8e3 bltu s3,s2,3fe8 - 411c: bf89 j 406e - stream->error = 1; - 411e: 4785 li a5,1 - 4120: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4122: 40042823 sw zero,1040(s0) - return EOF; - 4126: bddd j 401c - -0000000000004128 : - if (!stream) - 4128: c925 beqz a0,4198 -{ - 412a: 1101 addi sp,sp,-32 - 412c: e04a sd s2,0(sp) - 412e: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 4130: 41052603 lw a2,1040(a0) -{ - 4134: e822 sd s0,16(sp) - 4136: e426 sd s1,8(sp) - 4138: ec06 sd ra,24(sp) - 413a: 842a mv s0,a0 - 413c: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 413e: 02c04863 bgtz a2,416e - if (lseek(stream->fd, offset, whence) < 0) - 4142: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 4144: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4148: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 414c: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 4150: 864a mv a2,s2 - 4152: 0004859b sext.w a1,s1 - 4156: 82afc0ef jal 180 - 415a: 87aa mv a5,a0 - return 0; - 415c: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 415e: 0207c463 bltz a5,4186 -} - 4162: 60e2 ld ra,24(sp) - 4164: 6442 ld s0,16(sp) - 4166: 64a2 ld s1,8(sp) - 4168: 6902 ld s2,0(sp) - 416a: 6105 addi sp,sp,32 - 416c: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 416e: 4108 lw a0,0(a0) - 4170: 01040593 addi a1,s0,16 - 4174: f7dfb0ef jal f0 - if (ret < stream->buf_write_pos) - 4178: 41042783 lw a5,1040(s0) - 417c: 00f54963 blt a0,a5,418e - stream->buf_write_pos = 0; - 4180: 40042823 sw zero,1040(s0) - 4184: bf7d j 4142 - stream->error = 1; - 4186: 4785 li a5,1 - 4188: c41c sw a5,8(s0) - return -1; - 418a: 557d li a0,-1 - 418c: bfd9 j 4162 - stream->error = 1; - 418e: 4785 li a5,1 - 4190: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4192: 40042823 sw zero,1040(s0) - return EOF; - 4196: b775 j 4142 - return -1; - 4198: 557d li a0,-1 -} - 419a: 8082 ret - -000000000000419c : - if (!stream) - 419c: c505 beqz a0,41c4 -{ - 419e: 1141 addi sp,sp,-16 - 41a0: e022 sd s0,0(sp) - 41a2: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 41a4: 4108 lw a0,0(a0) - 41a6: 4605 li a2,1 - 41a8: 4581 li a1,0 -{ - 41aa: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 41ac: fd5fb0ef jal 180 - if (ret < 0) - 41b0: 00054663 bltz a0,41bc -} - 41b4: 60a2 ld ra,8(sp) - 41b6: 6402 ld s0,0(sp) - 41b8: 0141 addi sp,sp,16 - 41ba: 8082 ret - stream->error = 1; - 41bc: 4785 li a5,1 - 41be: c41c sw a5,8(s0) - return -1L; - 41c0: 557d li a0,-1 - 41c2: bfcd j 41b4 - 41c4: 557d li a0,-1 -} - 41c6: 8082 ret - -00000000000041c8 : - if (stream) - 41c8: c915 beqz a0,41fc - if (stream->buf_write_pos > 0) - 41ca: 41052603 lw a2,1040(a0) -{ - 41ce: 1141 addi sp,sp,-16 - 41d0: e022 sd s0,0(sp) - 41d2: e406 sd ra,8(sp) - 41d4: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 41d6: 02c04463 bgtz a2,41fe - if (lseek(stream->fd, offset, whence) < 0) - 41da: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 41dc: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 41e0: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 41e4: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 41e8: 4601 li a2,0 - 41ea: 4581 li a1,0 - 41ec: f95fb0ef jal 180 -} - 41f0: 60a2 ld ra,8(sp) - stream->error = 0; - 41f2: 00042423 sw zero,8(s0) -} - 41f6: 6402 ld s0,0(sp) - 41f8: 0141 addi sp,sp,16 - 41fa: 8082 ret - 41fc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 41fe: 4108 lw a0,0(a0) - 4200: 01040593 addi a1,s0,16 - 4204: eedfb0ef jal f0 - if (ret < stream->buf_write_pos) - 4208: 41042783 lw a5,1040(s0) - 420c: 00f54563 blt a0,a5,4216 - stream->buf_write_pos = 0; - 4210: 40042823 sw zero,1040(s0) - 4214: b7d9 j 41da - stream->error = 1; - 4216: 4785 li a5,1 - 4218: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 421a: 40042823 sw zero,1040(s0) - return EOF; - 421e: bf75 j 41da - -0000000000004220 : - return (stream) ? stream->eof : 1; - 4220: c119 beqz a0,4226 - 4222: 4548 lw a0,12(a0) - 4224: 8082 ret - 4226: 4505 li a0,1 -} - 4228: 8082 ret - -000000000000422a : - return (stream) ? stream->error : 1; - 422a: c119 beqz a0,4230 - 422c: 4508 lw a0,8(a0) - 422e: 8082 ret - 4230: 4505 li a0,1 -} - 4232: 8082 ret - -0000000000004234 : - if (stream) - 4234: c509 beqz a0,423e - stream->error = 0; - 4236: 00052423 sw zero,8(a0) - stream->eof = 0; - 423a: 00052623 sw zero,12(a0) -} - 423e: 8082 ret - -0000000000004240 : - if (!stream || c == EOF) - 4240: c19d beqz a1,4266 - 4242: 57fd li a5,-1 - 4244: 02f50163 beq a0,a5,4266 - if (stream->buf_read_pos > 0) - 4248: 4145a783 lw a5,1044(a1) - 424c: 00f05d63 blez a5,4266 - stream->buf_read_pos--; - 4250: fff7871b addiw a4,a5,-1 - 4254: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 4258: 00e587b3 add a5,a1,a4 - 425c: 00a78823 sb a0,16(a5) - stream->eof = 0; - 4260: 0005a623 sw zero,12(a1) - return c; - 4264: 8082 ret - return EOF; - 4266: 557d li a0,-1 - 4268: 8082 ret - -000000000000426a : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 426a: 1141 addi sp,sp,-16 - 426c: e422 sd s0,8(sp) - 426e: 8eaa mv t4,a0 -{ - const char *s = nptr; - 4270: 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'; } - 4272: 02000313 li t1,32 - 4276: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 4278: 0008c783 lbu a5,0(a7) - 427c: 00188813 addi a6,a7,1 - 4280: ff77871b addiw a4,a5,-9 - 4284: 0ff77693 zext.b a3,a4 - 4288: 0007871b sext.w a4,a5 - 428c: 04678363 beq a5,t1,42d2 - 4290: 04de7163 bgeu t3,a3,42d2 - } while (isspace(c)); - - if (c == '-') - 4294: 02d00793 li a5,45 - 4298: 0ef70863 beq a4,a5,4388 - { - neg = 1; - c = *s++; - } - else if (c == '+') - 429c: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 42a0: 4381 li t2,0 - else if (c == '+') - 42a2: 08f70c63 beq a4,a5,433a - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 42a6: ea05 bnez a2,42d6 - 42a8: 03000793 li a5,48 - 42ac: 0ef70463 beq a4,a5,4394 - 42b0: 00ccd8b7 lui a7,0xccd - 42b4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5445> - 42b8: 08b2 slli a7,a7,0xc - 42ba: ccd88893 addi a7,a7,-819 - 42be: 08b2 slli a7,a7,0xc - 42c0: ccd88893 addi a7,a7,-819 - 42c4: 08b6 slli a7,a7,0xd - 42c6: 4415 li s0,5 - 42c8: 99988893 addi a7,a7,-1639 - 42cc: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 42ce: 4629 li a2,10 - 42d0: a829 j 42ea -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 42d2: 88c2 mv a7,a6 - 42d4: b755 j 4278 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 42d6: 47c1 li a5,16 - 42d8: 0cf60d63 beq a2,a5,43b2 - - cutoff = ULLONG_MAX / (unsigned long long)base; - 42dc: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42de: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 42e2: 82b2 mv t0,a2 - 42e4: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42e8: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 42ea: 4301 li t1,0 - 42ec: 4501 li a0,0 - { - if (isdigit(c)) - 42ee: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42f0: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42f2: 5f7d li t5,-1 - if (isdigit(c)) - 42f4: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 42f8: 0007069b sext.w a3,a4 - 42fc: 00fe7e63 bgeu t3,a5,4318 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 4300: f9f6879b addiw a5,a3,-97 - 4304: 04fff063 bgeu t6,a5,4344 - 4308: fbf6869b addiw a3,a3,-65 - 430c: 04dfe163 bltu t6,a3,434e - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 4310: 03700793 li a5,55 - 4314: 40f707bb subw a5,a4,a5 - if (c >= base) - 4318: 02c7db63 bge a5,a2,434e - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 431c: 01e30b63 beq t1,t5,4332 - any = -1; - 4320: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4322: 00a8e863 bltu a7,a0,4332 - 4326: 05150e63 beq a0,a7,4382 - else - { - any = 1; - 432a: 4305 li t1,1 - acc *= base; - 432c: 02550533 mul a0,a0,t0 - acc += c; - 4330: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 4332: 0805 addi a6,a6,1 - 4334: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 4338: bf75 j 42f4 - c = *s++; - 433a: 00084703 lbu a4,0(a6) - 433e: 00288813 addi a6,a7,2 - 4342: b795 j 42a6 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 4344: 05700793 li a5,87 - 4348: 40f707bb subw a5,a4,a5 - 434c: b7f1 j 4318 - } - } - - if (any < 0) - 434e: 57fd li a5,-1 - 4350: 00f30e63 beq t1,a5,436c - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 4354: 00038463 beqz t2,435c - acc = -acc; - 4358: 40a00533 neg a0,a0 - - if (endptr != 0) - 435c: c589 beqz a1,4366 - *endptr = (char *)(any ? s - 1 : nptr); - 435e: 00031f63 bnez t1,437c - 4362: 01d5b023 sd t4,0(a1) - - return acc; -} - 4366: 6422 ld s0,8(sp) - 4368: 0141 addi sp,sp,16 - 436a: 8082 ret - errno = ERANGE; - 436c: 02200793 li a5,34 - 4370: 00003717 auipc a4,0x3 - 4374: 3ef72023 sw a5,992(a4) # 7750 - acc = ULLONG_MAX; - 4378: 557d li a0,-1 - if (endptr != 0) - 437a: d5f5 beqz a1,4366 - *endptr = (char *)(any ? s - 1 : nptr); - 437c: fff80e93 addi t4,a6,-1 - 4380: b7cd j 4362 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4382: faf448e3 blt s0,a5,4332 - 4386: b755 j 432a - c = *s++; - 4388: 00084703 lbu a4,0(a6) - neg = 1; - 438c: 4385 li t2,1 - c = *s++; - 438e: 00288813 addi a6,a7,2 - 4392: bf11 j 42a6 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4394: 00084783 lbu a5,0(a6) - 4398: 05800693 li a3,88 - 439c: 0df7f793 andi a5,a5,223 - 43a0: 02d78b63 beq a5,a3,43d6 - 43a4: 58fd li a7,-1 - 43a6: 441d li s0,7 - 43a8: 0038d893 srli a7,a7,0x3 - 43ac: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 43ae: 4621 li a2,8 - 43b0: bf2d j 42ea - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 43b2: 03000793 li a5,48 - 43b6: 00f70863 beq a4,a5,43c6 - 43ba: 58fd li a7,-1 - 43bc: 443d li s0,15 - 43be: 0048d893 srli a7,a7,0x4 - 43c2: 42c1 li t0,16 - 43c4: b71d j 42ea - 43c6: 00084783 lbu a5,0(a6) - 43ca: 05800693 li a3,88 - 43ce: 0df7f793 andi a5,a5,223 - 43d2: fed794e3 bne a5,a3,43ba - s += 2; - 43d6: 58fd li a7,-1 - c = s[1]; - 43d8: 00184703 lbu a4,1(a6) - s += 2; - 43dc: 443d li s0,15 - 43de: 0809 addi a6,a6,2 - 43e0: 0048d893 srli a7,a7,0x4 - 43e4: 42c1 li t0,16 - base = 16; - 43e6: 4641 li a2,16 - 43e8: b709 j 42ea - -00000000000043ea : - if (__atexit_func_count >= ATEXIT_MAX) - 43ea: 00003717 auipc a4,0x3 - 43ee: 36670713 addi a4,a4,870 # 7750 - 43f2: 435c lw a5,4(a4) - 43f4: 46fd li a3,31 - 43f6: 00f6ca63 blt a3,a5,440a - __atexit_funcs[__atexit_func_count++] = function; - 43fa: 00379693 slli a3,a5,0x3 - 43fe: 96ba add a3,a3,a4 - 4400: 2785 addiw a5,a5,1 - 4402: e688 sd a0,8(a3) - 4404: c35c sw a5,4(a4) - return 0; - 4406: 4501 li a0,0 - 4408: 8082 ret - return -1; - 440a: 557d li a0,-1 -} - 440c: 8082 ret - -000000000000440e : -{ - 440e: 1101 addi sp,sp,-32 - 4410: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 4412: 00003417 auipc s0,0x3 - 4416: 33e40413 addi s0,s0,830 # 7750 - 441a: 405c lw a5,4(s0) -{ - 441c: e426 sd s1,8(sp) - 441e: ec06 sd ra,24(sp) - 4420: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 4422: 00f05d63 blez a5,443c - (__atexit_funcs[--__atexit_func_count])(); - 4426: fff7871b addiw a4,a5,-1 - 442a: 87ba mv a5,a4 - 442c: 070e slli a4,a4,0x3 - 442e: 9722 add a4,a4,s0 - 4430: 6718 ld a4,8(a4) - 4432: c05c sw a5,4(s0) - 4434: 9702 jalr a4 - while (__atexit_func_count > 0) - 4436: 405c lw a5,4(s0) - 4438: fef047e3 bgtz a5,4426 - sys_exit(status); - 443c: 8526 mv a0,s1 - 443e: c8bfb0ef jal c8 - while (1) - 4442: a001 j 4442 - -0000000000004444 : -{ - 4444: 1141 addi sp,sp,-16 - exit(127); - 4446: 07f00513 li a0,127 -{ - 444a: e406 sd ra,8(sp) - exit(127); - 444c: fc3ff0ef jal 440e - -0000000000004450 : -} - 4450: 4501 li a0,0 - 4452: 8082 ret - -0000000000004454 : -} - 4454: 557d li a0,-1 - 4456: 8082 ret - -0000000000004458 : - if (!ptr) - 4458: c121 beqz a0,4498 - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 445a: 00003617 auipc a2,0x3 - 445e: 2f660613 addi a2,a2,758 # 7750 - 4462: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 4466: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 446a: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 446c: 02d7f763 bgeu a5,a3,449a - 4470: 00e6e463 bltu a3,a4,4478 - if (p >= p->next && (bp > p || bp < p->next)) - 4474: 02e7e763 bltu a5,a4,44a2 - if ((char *)bp + bp->size == (char *)p->next) - 4478: ff053583 ld a1,-16(a0) - 447c: 00b68833 add a6,a3,a1 - 4480: 03070363 beq a4,a6,44a6 - if ((char *)p + p->size == (char *)bp) - 4484: 638c ld a1,0(a5) - 4486: fee53c23 sd a4,-8(a0) - 448a: 00b78833 add a6,a5,a1 - 448e: 03068963 beq a3,a6,44c0 - 4492: e794 sd a3,8(a5) - freep = p; - 4494: 10f63423 sd a5,264(a2) -} - 4498: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 449a: 00e7e463 bltu a5,a4,44a2 - 449e: fce6ede3 bltu a3,a4,4478 -{ - 44a2: 87ba mv a5,a4 - 44a4: b7d9 j 446a - bp->size += p->next->size; - 44a6: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 44aa: 6718 ld a4,8(a4) - bp->size += p->next->size; - 44ac: 95c2 add a1,a1,a6 - 44ae: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 44b2: 638c ld a1,0(a5) - 44b4: fee53c23 sd a4,-8(a0) - 44b8: 00b78833 add a6,a5,a1 - 44bc: fd069be3 bne a3,a6,4492 - p->size += bp->size; - 44c0: ff053503 ld a0,-16(a0) - p->next = bp->next; - 44c4: 86ba mv a3,a4 - p->size += bp->size; - 44c6: 00b50733 add a4,a0,a1 - 44ca: e398 sd a4,0(a5) - p->next = bp->next; - 44cc: b7d9 j 4492 - -00000000000044ce : - if (size == 0) - 44ce: c169 beqz a0,4590 -{ - 44d0: 7179 addi sp,sp,-48 - 44d2: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 44d4: 00003497 auipc s1,0x3 - 44d8: 27c48493 addi s1,s1,636 # 7750 - 44dc: 1084b783 ld a5,264(s1) -{ - 44e0: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 44e2: 057d addi a0,a0,31 -{ - 44e4: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 44e6: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 44ea: c3d1 beqz a5,456e - for (p = prevp->next;; prevp = p, p = p->next) - 44ec: 6788 ld a0,8(a5) - if (p->size >= size) - 44ee: 6118 ld a4,0(a0) - 44f0: 06877163 bgeu a4,s0,4552 - 44f4: e44e sd s3,8(sp) - 44f6: e052 sd s4,0(sp) - 44f8: e84a sd s2,16(sp) - if (nu < 4096) - 44fa: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 44fc: 59fd li s3,-1 - 44fe: a029 j 4508 - for (p = prevp->next;; prevp = p, p = p->next) - 4500: 6788 ld a0,8(a5) - if (p->size >= size) - 4502: 6118 ld a4,0(a0) - 4504: 04877463 bgeu a4,s0,454c - if (p == freep) - 4508: 1084b703 ld a4,264(s1) - 450c: 87aa mv a5,a0 - 450e: fee519e3 bne a0,a4,4500 - if (nu < 4096) - 4512: 8922 mv s2,s0 - 4514: 01447363 bgeu s0,s4,451a - 4518: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 451a: 854a mv a0,s2 - 451c: c3dfb0ef jal 158 - 4520: 87aa mv a5,a0 - free((void *)(up + 1)); - 4522: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 4524: 01378963 beq a5,s3,4536 - up->size = nu; - 4528: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 452c: f2dff0ef jal 4458 - return freep; - 4530: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 4534: f7f1 bnez a5,4500 -} - 4536: 70a2 ld ra,40(sp) - 4538: 7402 ld s0,32(sp) - errno = ENOMEM; - 453a: 47b1 li a5,12 - 453c: c09c sw a5,0(s1) - return NULL; - 453e: 6942 ld s2,16(sp) - 4540: 69a2 ld s3,8(sp) - 4542: 6a02 ld s4,0(sp) -} - 4544: 64e2 ld s1,24(sp) - return NULL; - 4546: 4501 li a0,0 -} - 4548: 6145 addi sp,sp,48 - 454a: 8082 ret - 454c: 6942 ld s2,16(sp) - 454e: 69a2 ld s3,8(sp) - 4550: 6a02 ld s4,0(sp) - if (p->size == size) - 4552: 02e40c63 beq s0,a4,458a - p->size -= size; - 4556: 8f01 sub a4,a4,s0 - 4558: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 455a: 953a add a0,a0,a4 - p->size = size; - 455c: e100 sd s0,0(a0) -} - 455e: 70a2 ld ra,40(sp) - 4560: 7402 ld s0,32(sp) - freep = prevp; - 4562: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 4566: 0541 addi a0,a0,16 -} - 4568: 64e2 ld s1,24(sp) - 456a: 6145 addi sp,sp,48 - 456c: 8082 ret - base.next = freep = prevp = &base; - 456e: 00003517 auipc a0,0x3 - 4572: 2f250513 addi a0,a0,754 # 7860 - 4576: 10a4b423 sd a0,264(s1) - 457a: 10a4bc23 sd a0,280(s1) - base.size = 0; - 457e: 00003797 auipc a5,0x3 - 4582: 2e07b123 sd zero,738(a5) # 7860 - if (p->size >= size) - 4586: f43d bnez s0,44f4 - base.next = freep = prevp = &base; - 4588: 87aa mv a5,a0 - prevp->next = p->next; - 458a: 6518 ld a4,8(a0) - 458c: e798 sd a4,8(a5) - 458e: bfc1 j 455e - return NULL; - 4590: 4501 li a0,0 -} - 4592: 8082 ret - -0000000000004594 : - if (__builtin_mul_overflow(nmemb, size, &total)) - 4594: 02b537b3 mulhu a5,a0,a1 -{ - 4598: 1101 addi sp,sp,-32 - 459a: e822 sd s0,16(sp) - 459c: ec06 sd ra,24(sp) - 459e: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 45a0: 02b50433 mul s0,a0,a1 - 45a4: e385 bnez a5,45c4 - void *p = malloc(total); - 45a6: 8522 mv a0,s0 - 45a8: f27ff0ef jal 44ce - 45ac: 84aa mv s1,a0 - if (p) - 45ae: c509 beqz a0,45b8 - memset(p, 0, total); - 45b0: 8622 mv a2,s0 - 45b2: 4581 li a1,0 - 45b4: 524000ef jal 4ad8 -} - 45b8: 60e2 ld ra,24(sp) - 45ba: 6442 ld s0,16(sp) - 45bc: 8526 mv a0,s1 - 45be: 64a2 ld s1,8(sp) - 45c0: 6105 addi sp,sp,32 - 45c2: 8082 ret - 45c4: 60e2 ld ra,24(sp) - 45c6: 6442 ld s0,16(sp) - errno = ENOMEM; - 45c8: 47b1 li a5,12 - return NULL; - 45ca: 4481 li s1,0 - errno = ENOMEM; - 45cc: 00003717 auipc a4,0x3 - 45d0: 18f72223 sw a5,388(a4) # 7750 -} - 45d4: 8526 mv a0,s1 - 45d6: 64a2 ld s1,8(sp) - 45d8: 6105 addi sp,sp,32 - 45da: 8082 ret - -00000000000045dc : - if (!ptr) - 45dc: c929 beqz a0,462e -{ - 45de: 1101 addi sp,sp,-32 - 45e0: ec06 sd ra,24(sp) - 45e2: e426 sd s1,8(sp) - if (size == 0) - 45e4: c5b9 beqz a1,4632 - if (bp->size >= new_size) - 45e6: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 45ea: 01f58793 addi a5,a1,31 - 45ee: e822 sd s0,16(sp) - 45f0: 9bc1 andi a5,a5,-16 - 45f2: 842a mv s0,a0 - return ptr; - 45f4: 84aa mv s1,a0 - if (bp->size >= new_size) - 45f6: 00f76863 bltu a4,a5,4606 - 45fa: 6442 ld s0,16(sp) -} - 45fc: 60e2 ld ra,24(sp) - 45fe: 8526 mv a0,s1 - 4600: 64a2 ld s1,8(sp) - 4602: 6105 addi sp,sp,32 - 4604: 8082 ret - void *new_ptr = malloc(size); - 4606: 852e mv a0,a1 - 4608: ec7ff0ef jal 44ce - 460c: 84aa mv s1,a0 - if (!new_ptr) - 460e: d575 beqz a0,45fa - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 4610: ff043603 ld a2,-16(s0) - 4614: 85a2 mv a1,s0 - 4616: 1641 addi a2,a2,-16 - 4618: 514000ef jal 4b2c - free(ptr); - 461c: 8522 mv a0,s0 - 461e: e3bff0ef jal 4458 -} - 4622: 60e2 ld ra,24(sp) - free(ptr); - 4624: 6442 ld s0,16(sp) -} - 4626: 8526 mv a0,s1 - 4628: 64a2 ld s1,8(sp) - 462a: 6105 addi sp,sp,32 - 462c: 8082 ret - return malloc(size); - 462e: 852e mv a0,a1 - 4630: bd79 j 44ce - free(ptr); - 4632: e27ff0ef jal 4458 - return NULL; - 4636: 4481 li s1,0 - 4638: b7d1 j 45fc - -000000000000463a : - if (base < 0 || base == 1 || base > 36) - 463a: 02400813 li a6,36 -{ - 463e: 86aa mv a3,a0 - 4640: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4642: 00c86663 bltu a6,a2,464e - 4646: 4805 li a6,1 - 4648: 01060363 beq a2,a6,464e - 464c: b939 j 426a - if (endptr) - 464e: c311 beqz a4,4652 - *endptr = (char *)nptr; - 4650: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4652: 00003797 auipc a5,0x3 - 4656: 0e07af23 sw zero,254(a5) # 7750 -} - 465a: 4501 li a0,0 - 465c: 8082 ret - -000000000000465e : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 465e: 1141 addi sp,sp,-16 - 4660: e406 sd ra,8(sp) - 4662: e022 sd s0,0(sp) - const char *s = nptr; - 4664: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 4666: 02000813 li a6,32 - 466a: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 466c: 0006c783 lbu a5,0(a3) - 4670: 0685 addi a3,a3,1 - 4672: ff77871b addiw a4,a5,-9 - 4676: 0ff77713 zext.b a4,a4 - 467a: 0007841b sext.w s0,a5 - 467e: ff0787e3 beq a5,a6,466c - 4682: fee8f5e3 bgeu a7,a4,466c - if (base < 0 || base == 1 || base > 36) - 4686: 02400793 li a5,36 - 468a: 02c7ec63 bltu a5,a2,46c2 - 468e: 4785 li a5,1 - 4690: 02f60963 beq a2,a5,46c2 - 4694: bd7ff0ef jal 426a - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 4698: 00003797 auipc a5,0x3 - 469c: 0b878793 addi a5,a5,184 # 7750 - 46a0: 4394 lw a3,0(a5) - 46a2: 02200713 li a4,34 - 46a6: 04e68363 beq a3,a4,46ec - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 46aa: 02d00713 li a4,45 - 46ae: 02e40563 beq s0,a4,46d8 - 46b2: 00055f63 bgez a0,46d0 - { - errno = ERANGE; - 46b6: 02200713 li a4,34 - 46ba: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 46bc: 557d li a0,-1 - 46be: 8105 srli a0,a0,0x1 - 46c0: a801 j 46d0 - if (endptr) - 46c2: c191 beqz a1,46c6 - *endptr = (char *)nptr; - 46c4: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 46c6: 00003797 auipc a5,0x3 - 46ca: 0807a523 sw zero,138(a5) # 7750 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 46ce: 4501 li a0,0 -} - 46d0: 60a2 ld ra,8(sp) - 46d2: 6402 ld s0,0(sp) - 46d4: 0141 addi sp,sp,16 - 46d6: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 46d8: 577d li a4,-1 - 46da: 177e slli a4,a4,0x3f - 46dc: 02a76263 bltu a4,a0,4700 -} - 46e0: 60a2 ld ra,8(sp) - 46e2: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 46e4: 40a00533 neg a0,a0 -} - 46e8: 0141 addi sp,sp,16 - 46ea: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 46ec: 577d li a4,-1 - 46ee: fae51ee3 bne a0,a4,46aa - return neg ? LLONG_MIN : LLONG_MAX; - 46f2: 02d00793 li a5,45 - 46f6: fcf413e3 bne s0,a5,46bc - return LLONG_MIN; - 46fa: 557d li a0,-1 - 46fc: 157e slli a0,a0,0x3f - 46fe: bfc9 j 46d0 - errno = ERANGE; - 4700: 02200713 li a4,34 - 4704: c398 sw a4,0(a5) - return LLONG_MIN; - 4706: bfd5 j 46fa - -0000000000004708 : - if (base < 0 || base == 1 || base > 36) - 4708: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 470c: 86aa mv a3,a0 - 470e: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4710: 00c86663 bltu a6,a2,471c - 4714: 4805 li a6,1 - 4716: 01060363 beq a2,a6,471c - 471a: be81 j 426a - if (endptr) - 471c: c311 beqz a4,4720 - *endptr = (char *)nptr; - 471e: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4720: 00003797 auipc a5,0x3 - 4724: 0207a823 sw zero,48(a5) # 7750 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 4728: 4501 li a0,0 - 472a: 8082 ret - -000000000000472c : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 472c: bf0d j 465e - -000000000000472e : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 472e: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 4730: 4629 li a2,10 - 4732: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4734: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 4736: f29ff0ef jal 465e -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 473a: 60a2 ld ra,8(sp) - 473c: 2501 sext.w a0,a0 - 473e: 0141 addi sp,sp,16 - 4740: 8082 ret - -0000000000004742 : - long long ret = strtoll(nptr, endptr, base); - 4742: 4629 li a2,10 - 4744: 4581 li a1,0 - 4746: bf21 j 465e - -0000000000004748 : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 4748: 4629 li a2,10 - 474a: 4581 li a1,0 - 474c: bf09 j 465e - -000000000000474e : - 474e: 02000693 li a3,32 - 4752: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 4754: 00054783 lbu a5,0(a0) - 4758: ff77871b addiw a4,a5,-9 - 475c: 0ff77713 zext.b a4,a4 - 4760: 06d78263 beq a5,a3,47c4 - 4764: 06e67063 bgeu a2,a4,47c4 - s++; - if (*s == '-') - 4768: 02d00713 li a4,45 - 476c: 08e78e63 beq a5,a4,4808 - { - sign = -1; - s++; - } - else if (*s == '+') - 4770: 02b00713 li a4,43 - 4774: 0ae78263 beq a5,a4,4818 - 4778: 00001717 auipc a4,0x1 - 477c: 0f073507 fld fa0,240(a4) # 5868 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 4780: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 4784: 46a5 li a3,9 - 4786: f20007d3 fmv.d.x fa5,zero - 478a: 8732 mv a4,a2 - 478c: 02c6e363 bltu a3,a2,47b2 - 4790: 00001797 auipc a5,0x1 - 4794: 0e07b687 fld fa3,224(a5) # 5870 - 4798: 4625 li a2,9 - 479a: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 479e: d2070753 fcvt.d.w fa4,a4 - s++; - 47a2: 0505 addi a0,a0,1 - 47a4: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 47a8: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 47ac: 8736 mv a4,a3 - while (isdigit(*s)) - 47ae: fed676e3 bgeu a2,a3,479a - } - if (*s == '.') - 47b2: 02e00713 li a4,46 - 47b6: 00e78963 beq a5,a4,47c8 - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 47ba: c191 beqz a1,47be - *endptr = (char *)s; - 47bc: e188 sd a0,0(a1) - return val * sign; -} - 47be: 12a7f553 fmul.d fa0,fa5,fa0 - 47c2: 8082 ret - s++; - 47c4: 0505 addi a0,a0,1 - 47c6: b779 j 4754 - while (isdigit(*s)) - 47c8: 00154703 lbu a4,1(a0) - 47cc: 46a5 li a3,9 - s++; - 47ce: 0505 addi a0,a0,1 - 47d0: fd07071b addiw a4,a4,-48 - 47d4: 87ba mv a5,a4 - while (isdigit(*s)) - 47d6: fee6e2e3 bltu a3,a4,47ba - double factor = 1.0; - 47da: 00001717 auipc a4,0x1 - 47de: 08e73707 fld fa4,142(a4) # 5868 - 47e2: 00001717 auipc a4,0x1 - 47e6: 0a673607 fld fa2,166(a4) # 5888 - factor *= 0.1; - 47ea: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 47ee: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 47f2: d20786d3 fcvt.d.w fa3,a5 - s++; - 47f6: 0505 addi a0,a0,1 - 47f8: fd07071b addiw a4,a4,-48 - 47fc: 87ba mv a5,a4 - val += (*s - '0') * factor; - 47fe: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 4802: fee6f4e3 bgeu a3,a4,47ea - 4806: bf55 j 47ba - while (isdigit(*s)) - 4808: 00154783 lbu a5,1(a0) - 480c: 00001717 auipc a4,0x1 - 4810: 05473507 fld fa0,84(a4) # 5860 - s++; - 4814: 0505 addi a0,a0,1 - 4816: b7ad j 4780 - while (isdigit(*s)) - 4818: 00154783 lbu a5,1(a0) - 481c: 00001717 auipc a4,0x1 - 4820: 04c73507 fld fa0,76(a4) # 5868 - s++; - 4824: 0505 addi a0,a0,1 - 4826: bfa9 j 4780 - -0000000000004828 : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 4828: 4581 li a1,0 - 482a: b715 j 474e - -000000000000482c : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 482c: 1141 addi sp,sp,-16 - 482e: e406 sd ra,8(sp) - 4830: f1fff0ef jal 474e - 4834: 60a2 ld ra,8(sp) - 4836: 40157553 fcvt.s.d fa0,fa0 - 483a: 0141 addi sp,sp,16 - 483c: 8082 ret - -000000000000483e : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 483e: 4785 li a5,1 - 4840: 0cb7fd63 bgeu a5,a1,491a -{ - 4844: 715d addi sp,sp,-80 - 4846: f44e sd s3,40(sp) - 4848: e486 sd ra,72(sp) - 484a: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 484c: c279 beqz a2,4912 - 484e: e85a sd s6,16(sp) - 4850: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 4852: 1b7d addi s6,s6,-1 - 4854: fc26 sd s1,56(sp) - 4856: 033b04b3 mul s1,s6,s3 - 485a: ec56 sd s5,24(sp) - 485c: 8aaa mv s5,a0 - 485e: f052 sd s4,32(sp) - 4860: e45e sd s7,8(sp) - 4862: e0a2 sd s0,64(sp) - 4864: f84a sd s2,48(sp) - 4866: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 4868: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 486a: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 486c: 069af763 bgeu s5,s1,48da - char *j = base_ptr; - 4870: 8956 mv s2,s5 - char *i = base_ptr; - 4872: 8456 mv s0,s5 - 4874: a021 j 487c - for (; j < pivot; j += size) - 4876: 994e add s2,s2,s3 - 4878: 00997f63 bgeu s2,s1,4896 - { - if (compar(j, pivot) < 0) - 487c: 85a6 mv a1,s1 - 487e: 854a mv a0,s2 - 4880: 9a02 jalr s4 - 4882: fe055ae3 bgez a0,4876 - { - if (i != j) - 4886: 05241d63 bne s0,s2,48e0 - 488a: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 488e: 8432 mv s0,a2 - for (; j < pivot; j += size) - 4890: 994e add s2,s2,s3 - 4892: fe9965e3 bltu s2,s1,487c - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 4896: 415405b3 sub a1,s0,s5 - 489a: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 489e: 40bb0b33 sub s6,s6,a1 - while (size--) - 48a2: 013406b3 add a3,s0,s3 - *a++ = *b; - 48a6: 0004c703 lbu a4,0(s1) - temp = *a; - 48aa: 00044783 lbu a5,0(s0) - *b++ = temp; - 48ae: 0485 addi s1,s1,1 - *a++ = *b; - 48b0: 0405 addi s0,s0,1 - 48b2: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 48b6: fef48fa3 sb a5,-1(s1) - while (size--) - 48ba: fed416e3 bne s0,a3,48a6 - qsort(base, left_count, size, compar); - 48be: 86d2 mv a3,s4 - 48c0: 864e mv a2,s3 - 48c2: 8556 mv a0,s5 - 48c4: f7bff0ef jal 483e - if (nmemb < 2 || size == 0) - 48c8: 036bfe63 bgeu s7,s6,4904 - char *pivot = base_ptr + (nmemb - 1) * size; - 48cc: 1b7d addi s6,s6,-1 - 48ce: 033b04b3 mul s1,s6,s3 - 48d2: 8aa2 mv s5,s0 - 48d4: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 48d6: f89aede3 bltu s5,s1,4870 - char *i = base_ptr; - 48da: 8456 mv s0,s5 - for (; j < pivot; j += size) - 48dc: 4581 li a1,0 - 48de: b7d1 j 48a2 - 48e0: 01340633 add a2,s0,s3 - if (i != j) - 48e4: 874a mv a4,s2 - 48e6: 87a2 mv a5,s0 - *a++ = *b; - 48e8: 00074683 lbu a3,0(a4) - temp = *a; - 48ec: 0007c803 lbu a6,0(a5) - *b++ = temp; - 48f0: 0705 addi a4,a4,1 - *a++ = *b; - 48f2: 0785 addi a5,a5,1 - 48f4: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 48f8: ff070fa3 sb a6,-1(a4) - while (size--) - 48fc: fec796e3 bne a5,a2,48e8 - i += size; - 4900: 8432 mv s0,a2 - 4902: b779 j 4890 - 4904: 6406 ld s0,64(sp) - 4906: 74e2 ld s1,56(sp) - 4908: 7942 ld s2,48(sp) - 490a: 7a02 ld s4,32(sp) - 490c: 6ae2 ld s5,24(sp) - 490e: 6b42 ld s6,16(sp) - 4910: 6ba2 ld s7,8(sp) -} - 4912: 60a6 ld ra,72(sp) - 4914: 79a2 ld s3,40(sp) - 4916: 6161 addi sp,sp,80 - 4918: 8082 ret - 491a: 8082 ret - -000000000000491c : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 491c: 715d addi sp,sp,-80 - 491e: e486 sd ra,72(sp) - 4920: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 4922: c629 beqz a2,496c - 4924: f84a sd s2,48(sp) - 4926: f44e sd s3,40(sp) - 4928: f052 sd s4,32(sp) - 492a: ec56 sd s5,24(sp) - 492c: e85a sd s6,16(sp) - 492e: e45e sd s7,8(sp) - 4930: e0a2 sd s0,64(sp) - 4932: 8932 mv s2,a2 - 4934: 8a2a mv s4,a0 - 4936: 8aae mv s5,a1 - 4938: 8b36 mv s6,a3 - 493a: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 493c: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 493e: 01298433 add s0,s3,s2 - 4942: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 4944: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 4948: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 494a: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 494c: 85a6 mv a1,s1 - 494e: 9b82 jalr s7 - if (cmp < 0) - 4950: 02054463 bltz a0,4978 - u = idx; - else if (cmp > 0) - 4954: c515 beqz a0,4980 - l = idx + 1; - 4956: 00140993 addi s3,s0,1 - while (l < u) - 495a: ff29e2e3 bltu s3,s2,493e - 495e: 6406 ld s0,64(sp) - 4960: 7942 ld s2,48(sp) - 4962: 79a2 ld s3,40(sp) - 4964: 7a02 ld s4,32(sp) - 4966: 6ae2 ld s5,24(sp) - 4968: 6b42 ld s6,16(sp) - 496a: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 496c: 60a6 ld ra,72(sp) - return NULL; - 496e: 4481 li s1,0 -} - 4970: 8526 mv a0,s1 - 4972: 74e2 ld s1,56(sp) - 4974: 6161 addi sp,sp,80 - 4976: 8082 ret - u = idx; - 4978: 8922 mv s2,s0 - while (l < u) - 497a: fd29e2e3 bltu s3,s2,493e - 497e: b7c5 j 495e - 4980: 6406 ld s0,64(sp) -} - 4982: 60a6 ld ra,72(sp) - 4984: 7942 ld s2,48(sp) - 4986: 79a2 ld s3,40(sp) - 4988: 7a02 ld s4,32(sp) - 498a: 6ae2 ld s5,24(sp) - 498c: 6b42 ld s6,16(sp) - 498e: 6ba2 ld s7,8(sp) - 4990: 8526 mv a0,s1 - 4992: 74e2 ld s1,56(sp) - 4994: 6161 addi sp,sp,80 - 4996: 8082 ret - -0000000000004998 : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 4998: 41f5579b sraiw a5,a0,0x1f - 499c: 8d3d xor a0,a0,a5 - 499e: 9d1d subw a0,a0,a5 - 49a0: 8082 ret - -00000000000049a2 : -long labs(long j) { return (j < 0) ? -j : j; } - 49a2: 43f55793 srai a5,a0,0x3f - 49a6: 8d3d xor a0,a0,a5 - 49a8: 8d1d sub a0,a0,a5 - 49aa: 8082 ret - -00000000000049ac : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 49ac: 43f55793 srai a5,a0,0x3f - 49b0: 8d3d xor a0,a0,a5 - 49b2: 8d1d sub a0,a0,a5 - 49b4: 8082 ret - -00000000000049b6
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 49b6: 02b547bb divw a5,a0,a1 -{ - 49ba: 1141 addi sp,sp,-16 - return res; -} - 49bc: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 49be: 02b5653b remw a0,a0,a1 - return res; - 49c2: 1782 slli a5,a5,0x20 - 49c4: 9381 srli a5,a5,0x20 - 49c6: 1502 slli a0,a0,0x20 -} - 49c8: 8d5d or a0,a0,a5 - 49ca: 8082 ret - -00000000000049cc : -ldiv_t ldiv(long numer, long denom) -{ - 49cc: 1141 addi sp,sp,-16 - 49ce: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 49d0: 02b54533 div a0,a0,a1 - 49d4: 0141 addi sp,sp,16 - 49d6: 02b7e5b3 rem a1,a5,a1 - 49da: 8082 ret - -00000000000049dc : -lldiv_t lldiv(long long numer, long long denom) -{ - 49dc: 1141 addi sp,sp,-16 - 49de: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 49e0: 02b54533 div a0,a0,a1 - 49e4: 0141 addi sp,sp,16 - 49e6: 02b7e5b3 rem a1,a5,a1 - 49ea: 8082 ret - -00000000000049ec : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 49ec: 00003697 auipc a3,0x3 - 49f0: d1c68693 addi a3,a3,-740 # 7708 - 49f4: 629c ld a5,0(a3) - 49f6: 41c65737 lui a4,0x41c65 - 49fa: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d5e5> - 49fe: 02e787b3 mul a5,a5,a4 - 4a02: 670d lui a4,0x3 - 4a04: 03970713 addi a4,a4,57 # 3039 - 4a08: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 4a0a: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 4a0e: e29c sd a5,0(a3) -} - 4a10: 9145 srli a0,a0,0x31 - 4a12: 8082 ret - -0000000000004a14 : -void srand(unsigned int seed) { next = seed; } - 4a14: 1502 slli a0,a0,0x20 - 4a16: 9101 srli a0,a0,0x20 - 4a18: 00003797 auipc a5,0x3 - 4a1c: cea7b823 sd a0,-784(a5) # 7708 - 4a20: 8082 ret - -0000000000004a22 : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 4a22: c901 beqz a0,4a32 - 4a24: 00054783 lbu a5,0(a0) - 4a28: 4501 li a0,0 - 4a2a: c789 beqz a5,4a34 - 4a2c: 00b03533 snez a0,a1 - 4a30: 8082 ret - 4a32: 4501 li a0,0 - 4a34: 8082 ret - -0000000000004a36 : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 4a36: 87aa mv a5,a0 - if (!s) - 4a38: cd81 beqz a1,4a50 - return 0; - if (n == 0) - return -1; - 4a3a: 557d li a0,-1 - if (n == 0) - 4a3c: ca19 beqz a2,4a52 - if (pwc) - 4a3e: c781 beqz a5,4a46 - *pwc = (wchar_t)*s; - 4a40: 0005c703 lbu a4,0(a1) - 4a44: c398 sw a4,0(a5) - return (*s != 0); - 4a46: 0005c503 lbu a0,0(a1) - 4a4a: 00a03533 snez a0,a0 - 4a4e: 8082 ret - return 0; - 4a50: 4501 li a0,0 -} - 4a52: 8082 ret - -0000000000004a54 : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 4a54: c509 beqz a0,4a5e - return 0; - *s = (char)wchar; - 4a56: 00b50023 sb a1,0(a0) - return 1; - 4a5a: 4505 li a0,1 - 4a5c: 8082 ret - return 0; - 4a5e: 4501 li a0,0 -} - 4a60: 8082 ret - -0000000000004a62 : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a62: 0005c703 lbu a4,0(a1) - 4a66: cb0d beqz a4,4a98 - 4a68: ca15 beqz a2,4a9c - 4a6a: 86aa mv a3,a0 - size_t i = 0; - 4a6c: 4781 li a5,0 - 4a6e: a019 j 4a74 - while (src[i] && i < n) - 4a70: 02f60263 beq a2,a5,4a94 - { - dest[i] = (wchar_t)src[i]; - i++; - 4a74: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 4a76: c298 sw a4,0(a3) - while (src[i] && i < n) - 4a78: 00f58733 add a4,a1,a5 - 4a7c: 00074703 lbu a4,0(a4) - 4a80: 0691 addi a3,a3,4 - 4a82: f77d bnez a4,4a70 - } - if (i < n) - 4a84: 00c7f763 bgeu a5,a2,4a92 - dest[i] = 0; - 4a88: 00279713 slli a4,a5,0x2 - 4a8c: 953a add a0,a0,a4 - 4a8e: 00052023 sw zero,0(a0) - size_t i = 0; - 4a92: 863e mv a2,a5 - 4a94: 8532 mv a0,a2 - 4a96: 8082 ret - 4a98: 4781 li a5,0 - 4a9a: b7ed j 4a84 - 4a9c: 4501 li a0,0 - return i; -} - 4a9e: 8082 ret - -0000000000004aa0 : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4aa0: 4198 lw a4,0(a1) - 4aa2: c71d beqz a4,4ad0 - 4aa4: ca05 beqz a2,4ad4 - 4aa6: 0591 addi a1,a1,4 - size_t i = 0; - 4aa8: 4781 li a5,0 - 4aaa: a019 j 4ab0 - while (src[i] && i < n) - 4aac: 02f60063 beq a2,a5,4acc - { - dest[i] = (char)src[i]; - 4ab0: 00f506b3 add a3,a0,a5 - 4ab4: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 4ab8: 4198 lw a4,0(a1) - i++; - 4aba: 0785 addi a5,a5,1 - while (src[i] && i < n) - 4abc: 0591 addi a1,a1,4 - 4abe: f77d bnez a4,4aac - } - if (i < n) - 4ac0: 00c7f563 bgeu a5,a2,4aca - dest[i] = 0; - 4ac4: 953e add a0,a0,a5 - 4ac6: 00050023 sb zero,0(a0) - size_t i = 0; - 4aca: 863e mv a2,a5 - 4acc: 8532 mv a0,a2 - 4ace: 8082 ret - 4ad0: 4781 li a5,0 - 4ad2: b7fd j 4ac0 - 4ad4: 4501 li a0,0 - return i; - 4ad6: 8082 ret - -0000000000004ad8 : - -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; - 4ad8: 0ff5f593 zext.b a1,a1 - 4adc: 87aa mv a5,a0 - 4ade: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 4ae2: c611 beqz a2,4aee - cdst[i] = (char)c; - 4ae4: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 4ae8: 0785 addi a5,a5,1 - 4aea: fee79de3 bne a5,a4,4ae4 - return dst; -} - 4aee: 8082 ret - -0000000000004af0 : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 4af0: 02b50d63 beq a0,a1,4b2a - return vdst; - - if (src > dst) - 4af4: 00b57e63 bgeu a0,a1,4b10 - { - while (n--) - 4af8: ca0d beqz a2,4b2a - 4afa: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 4afc: 87aa mv a5,a0 - *dst++ = *src++; - 4afe: 0005c703 lbu a4,0(a1) - 4b02: 0785 addi a5,a5,1 - 4b04: 0585 addi a1,a1,1 - 4b06: fee78fa3 sb a4,-1(a5) - while (n--) - 4b0a: fec79ae3 bne a5,a2,4afe - 4b0e: 8082 ret - } - else - { - dst += n; - 4b10: 00c50733 add a4,a0,a2 - src += n; - 4b14: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 4b18: ca09 beqz a2,4b2a - *--dst = *--src; - 4b1a: fff7c683 lbu a3,-1(a5) - 4b1e: 17fd addi a5,a5,-1 - 4b20: 177d addi a4,a4,-1 - 4b22: 00d70023 sb a3,0(a4) - while (n-- > 0) - 4b26: fef59ae3 bne a1,a5,4b1a - } - return vdst; -} - 4b2a: 8082 ret - -0000000000004b2c : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 4b2c: b7d1 j 4af0 - -0000000000004b2e : - -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--) - 4b2e: c205 beqz a2,4b4e - 4b30: 962a add a2,a2,a0 - 4b32: a019 j 4b38 - 4b34: 00c50d63 beq a0,a2,4b4e - { - if (*p1 != *p2) - 4b38: 00054783 lbu a5,0(a0) - 4b3c: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 4b40: 0505 addi a0,a0,1 - p2++; - 4b42: 0585 addi a1,a1,1 - if (*p1 != *p2) - 4b44: fee788e3 beq a5,a4,4b34 - return *p1 - *p2; - 4b48: 40e7853b subw a0,a5,a4 - 4b4c: 8082 ret - } - return 0; - 4b4e: 4501 li a0,0 -} - 4b50: 8082 ret - -0000000000004b52 : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 4b52: ce09 beqz a2,4b6c - { - if (*p == (unsigned char)c) - 4b54: 0ff5f593 zext.b a1,a1 - 4b58: 962a add a2,a2,a0 - 4b5a: a021 j 4b62 - return (void *)p; - p++; - 4b5c: 0505 addi a0,a0,1 - while (n--) - 4b5e: 00a60763 beq a2,a0,4b6c - if (*p == (unsigned char)c) - 4b62: 00054783 lbu a5,0(a0) - 4b66: feb79be3 bne a5,a1,4b5c - } - return NULL; -} - 4b6a: 8082 ret - return NULL; - 4b6c: 4501 li a0,0 -} - 4b6e: 8082 ret - -0000000000004b70 : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 4b70: 00054783 lbu a5,0(a0) - 4b74: cb89 beqz a5,4b86 - const char *p = s; - 4b76: 87aa mv a5,a0 - while (*p) - 4b78: 0017c703 lbu a4,1(a5) - p++; - 4b7c: 0785 addi a5,a5,1 - while (*p) - 4b7e: ff6d bnez a4,4b78 - return (size_t)(p - s); - 4b80: 40a78533 sub a0,a5,a0 - 4b84: 8082 ret - while (*p) - 4b86: 4501 li a0,0 -} - 4b88: 8082 ret - -0000000000004b8a : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 4b8a: 87aa mv a5,a0 - 4b8c: 0005c703 lbu a4,0(a1) - 4b90: 0785 addi a5,a5,1 - 4b92: 0585 addi a1,a1,1 - 4b94: fee78fa3 sb a4,-1(a5) - 4b98: fb75 bnez a4,4b8c - ; - return os; -} - 4b9a: 8082 ret - -0000000000004b9c : -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++) - 4b9c: 4781 li a5,0 - 4b9e: e619 bnez a2,4bac - 4ba0: 8082 ret - dst[i] = src[i]; - 4ba2: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4ba6: 0785 addi a5,a5,1 - 4ba8: 02f60263 beq a2,a5,4bcc - 4bac: 00f58733 add a4,a1,a5 - 4bb0: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 4bb4: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 4bb8: f76d bnez a4,4ba2 - - for (; i < n; i++) - 4bba: 00c7f963 bgeu a5,a2,4bcc - 4bbe: 87b6 mv a5,a3 - 4bc0: 962a add a2,a2,a0 - dst[i] = '\0'; - 4bc2: 00078023 sb zero,0(a5) - for (; i < n; i++) - 4bc6: 0785 addi a5,a5,1 - 4bc8: fec79de3 bne a5,a2,4bc2 - - return os; -} - 4bcc: 8082 ret - -0000000000004bce : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 4bce: 00054783 lbu a5,0(a0) - 4bd2: cf91 beqz a5,4bee - 4bd4: 87aa mv a5,a0 - 4bd6: 0017c703 lbu a4,1(a5) - dst++; - 4bda: 0785 addi a5,a5,1 - while (*dst) - 4bdc: ff6d bnez a4,4bd6 - while ((*dst++ = *src++) != 0) - 4bde: 0005c703 lbu a4,0(a1) - 4be2: 0785 addi a5,a5,1 - 4be4: 0585 addi a1,a1,1 - 4be6: fee78fa3 sb a4,-1(a5) - 4bea: fb75 bnez a4,4bde - ; - return os; -} - 4bec: 8082 ret - while ((*dst++ = *src++) != 0) - 4bee: 0005c703 lbu a4,0(a1) - while (*dst) - 4bf2: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 4bf4: 0785 addi a5,a5,1 - 4bf6: fee78fa3 sb a4,-1(a5) - 4bfa: 0585 addi a1,a1,1 - 4bfc: f36d bnez a4,4bde - 4bfe: 8082 ret - -0000000000004c00 : - while (*p) - 4c00: 00054783 lbu a5,0(a0) - const char *p = s; - 4c04: 872a mv a4,a0 - while (*p) - 4c06: c789 beqz a5,4c10 - 4c08: 00174783 lbu a5,1(a4) - p++; - 4c0c: 0705 addi a4,a4,1 - while (*p) - 4c0e: ffed bnez a5,4c08 - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 4c10: 86ba mv a3,a4 - 4c12: 4781 li a5,0 - 4c14: 88ba mv a7,a4 - 4c16: ea01 bnez a2,4c26 - 4c18: a839 j 4c36 - dst[i] = src[i]; - 4c1a: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4c1e: 00188693 addi a3,a7,1 - 4c22: 00f60d63 beq a2,a5,4c3c - 4c26: 00f58833 add a6,a1,a5 - 4c2a: 00084803 lbu a6,0(a6) - 4c2e: 0785 addi a5,a5,1 - dst[i] = src[i]; - 4c30: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 4c32: fe0814e3 bnez a6,4c1a - - dst[i] = '\0'; - 4c36: 00088023 sb zero,0(a7) - - return os; -} - 4c3a: 8082 ret - dst[i] = '\0'; - 4c3c: 00c708b3 add a7,a4,a2 - 4c40: 00088023 sb zero,0(a7) -} - 4c44: 8082 ret - -0000000000004c46 : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 4c46: 00054783 lbu a5,0(a0) - 4c4a: e791 bnez a5,4c56 - 4c4c: a02d j 4c76 - 4c4e: 00054783 lbu a5,0(a0) - 4c52: cf89 beqz a5,4c6c - 4c54: 85b6 mv a1,a3 - 4c56: 0005c703 lbu a4,0(a1) - { - p++; - 4c5a: 0505 addi a0,a0,1 - q++; - 4c5c: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 4c60: fef707e3 beq a4,a5,4c4e - } - return (int)((unsigned char)*p - (unsigned char)*q); - 4c64: 0007851b sext.w a0,a5 -} - 4c68: 9d19 subw a0,a0,a4 - 4c6a: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c6c: 0015c703 lbu a4,1(a1) - 4c70: 4501 li a0,0 -} - 4c72: 9d19 subw a0,a0,a4 - 4c74: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c76: 0005c703 lbu a4,0(a1) - 4c7a: 4501 li a0,0 - 4c7c: b7f5 j 4c68 - -0000000000004c7e : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 4c7e: ca0d beqz a2,4cb0 - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 4c80: 00054783 lbu a5,0(a0) - 4c84: 167d addi a2,a2,-1 - 4c86: 00c506b3 add a3,a0,a2 - 4c8a: eb89 bnez a5,4c9c - 4c8c: a80d j 4cbe - { - if (n == 0 || *s1 == '\0') - 4c8e: 00d50d63 beq a0,a3,4ca8 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c92: 00154783 lbu a5,1(a0) - break; - s1++; - 4c96: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c98: cf91 beqz a5,4cb4 - 4c9a: 85b2 mv a1,a2 - 4c9c: 0005c703 lbu a4,0(a1) - s2++; - 4ca0: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4ca4: fef705e3 beq a4,a5,4c8e - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4ca8: 0007851b sext.w a0,a5 - 4cac: 9d19 subw a0,a0,a4 - 4cae: 8082 ret - return 0; - 4cb0: 4501 li a0,0 -} - 4cb2: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4cb4: 0015c703 lbu a4,1(a1) - 4cb8: 4501 li a0,0 - 4cba: 9d19 subw a0,a0,a4 - 4cbc: 8082 ret - 4cbe: 0005c703 lbu a4,0(a1) - 4cc2: 4501 li a0,0 - 4cc4: b7e5 j 4cac - -0000000000004cc6 : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 4cc6: 0ff5f593 zext.b a1,a1 - 4cca: a019 j 4cd0 - { - if (!*s++) - 4ccc: 0505 addi a0,a0,1 - 4cce: c791 beqz a5,4cda - while (*s != (char)c) - 4cd0: 00054783 lbu a5,0(a0) - 4cd4: feb79ce3 bne a5,a1,4ccc - 4cd8: 8082 ret - return NULL; - 4cda: 4501 li a0,0 - } - return (char *)s; -} - 4cdc: 8082 ret - -0000000000004cde : - -char *strrchr(const char *s, int c) -{ - 4cde: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 4ce0: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 4ce4: 4501 li a0,0 - if (*s == (char)c) - 4ce6: 0007c703 lbu a4,0(a5) - 4cea: 00e59363 bne a1,a4,4cf0 - last = s; - 4cee: 853e mv a0,a5 - } while (*s++); - 4cf0: 0785 addi a5,a5,1 - 4cf2: fb75 bnez a4,4ce6 - - return (char *)last; -} - 4cf4: 8082 ret - -0000000000004cf6 : - while (*p) - 4cf6: 0005c883 lbu a7,0(a1) - 4cfa: 04088a63 beqz a7,4d4e - const char *p = s; - 4cfe: 87ae mv a5,a1 - while (*p) - 4d00: 0017c703 lbu a4,1(a5) - p++; - 4d04: 0785 addi a5,a5,1 - while (*p) - 4d06: ff6d bnez a4,4d00 - return (size_t)(p - s); - 4d08: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 4d0c: 04b78163 beq a5,a1,4d4e - return (char *)haystack; - - for (; *haystack; haystack++) - 4d10: 00054783 lbu a5,0(a0) - 4d14: cf85 beqz a5,4d4c - 4d16: 187d addi a6,a6,-1 - 4d18: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 4d1a: 02f89463 bne a7,a5,4d42 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d1e: 00054703 lbu a4,0(a0) - 4d22: 8646 mv a2,a7 - 4d24: 86ae mv a3,a1 - 4d26: 87aa mv a5,a0 - 4d28: eb11 bnez a4,4d3c - 4d2a: a821 j 4d42 - if (n == 0 || *s1 == '\0') - 4d2c: 03078163 beq a5,a6,4d4e - while (n-- > 0 && *s1 && *s1 == *s2) - 4d30: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4d34: 0006c603 lbu a2,0(a3) - s1++; - 4d38: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d3a: cb19 beqz a4,4d50 - s2++; - 4d3c: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d3e: fee607e3 beq a2,a4,4d2c - for (; *haystack; haystack++) - 4d42: 00154783 lbu a5,1(a0) - 4d46: 0805 addi a6,a6,1 - 4d48: 0505 addi a0,a0,1 - 4d4a: fbe1 bnez a5,4d1a - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 4d4c: 4501 li a0,0 -} - 4d4e: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 4d50: de7d beqz a2,4d4e - for (; *haystack; haystack++) - 4d52: 00154783 lbu a5,1(a0) - 4d56: 0805 addi a6,a6,1 - 4d58: 0505 addi a0,a0,1 - 4d5a: f3e1 bnez a5,4d1a - 4d5c: bfc5 j 4d4c - -0000000000004d5e : - -char *strdup(const char *s) -{ - 4d5e: 1101 addi sp,sp,-32 - 4d60: e426 sd s1,8(sp) - 4d62: ec06 sd ra,24(sp) - 4d64: e822 sd s0,16(sp) - while (*p) - 4d66: 00054783 lbu a5,0(a0) -{ - 4d6a: 84aa mv s1,a0 - while (*p) - 4d6c: cb8d beqz a5,4d9e - const char *p = s; - 4d6e: 862a mv a2,a0 - while (*p) - 4d70: 00164783 lbu a5,1(a2) - p++; - 4d74: 0605 addi a2,a2,1 - while (*p) - 4d76: ffed bnez a5,4d70 - return (size_t)(p - s); - 4d78: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 4d7a: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 4d7e: 8522 mv a0,s0 - 4d80: f4eff0ef jal 44ce - if (new_str == NULL) - 4d84: c901 beqz a0,4d94 - return memmove(vdst, vsrc, n); - 4d86: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 4d88: 6442 ld s0,16(sp) - 4d8a: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 4d8c: 85a6 mv a1,s1 -} - 4d8e: 64a2 ld s1,8(sp) - 4d90: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 4d92: bbb9 j 4af0 -} - 4d94: 60e2 ld ra,24(sp) - 4d96: 6442 ld s0,16(sp) - 4d98: 64a2 ld s1,8(sp) - 4d9a: 6105 addi sp,sp,32 - 4d9c: 8082 ret - while (*p) - 4d9e: 4405 li s0,1 - 4da0: bff9 j 4d7e - -0000000000004da2 : - 4da2: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 4da6: 1101 addi sp,sp,-32 - 4da8: ec06 sd ra,24(sp) - 4daa: e822 sd s0,16(sp) - 4dac: 86b2 mv a3,a2 - while (*p) - 4dae: cf8d beqz a5,4de8 - const char *p = s; - 4db0: 87ae mv a5,a1 - while (*p) - 4db2: 0017c703 lbu a4,1(a5) - p++; - 4db6: 0785 addi a5,a5,1 - while (*p) - 4db8: ff6d bnez a4,4db2 - return (size_t)(p - s); - 4dba: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 4dbe: c285 beqz a3,4dde - 4dc0: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dc2: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 4dc6: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dca: 00d47563 bgeu s0,a3,4dd4 - dst[copy_len] = '\0'; - 4dce: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dd2: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 4dd4: d1dff0ef jal 4af0 - dst[copy_len] = '\0'; - 4dd8: 00048023 sb zero,0(s1) - } - - return src_len; - 4ddc: 64a2 ld s1,8(sp) -} - 4dde: 60e2 ld ra,24(sp) - 4de0: 8522 mv a0,s0 - 4de2: 6442 ld s0,16(sp) - 4de4: 6105 addi sp,sp,32 - 4de6: 8082 ret - if (size > 0) - 4de8: e219 bnez a2,4dee - return (size_t)(p - s); - 4dea: 4401 li s0,0 - 4dec: bfcd j 4dde - 4dee: e426 sd s1,8(sp) - 4df0: 4401 li s0,0 - if (size > 0) - 4df2: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4df4: 4601 li a2,0 - 4df6: bff9 j 4dd4 - -0000000000004df8 : - while (*p) - 4df8: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 4dfc: 7179 addi sp,sp,-48 - 4dfe: e84a sd s2,16(sp) - 4e00: f406 sd ra,40(sp) - 4e02: f022 sd s0,32(sp) - 4e04: ec26 sd s1,24(sp) - 4e06: 892a mv s2,a0 - while (*p) - 4e08: c7b5 beqz a5,4e74 - const char *p = s; - 4e0a: 87ae mv a5,a1 - while (*p) - 4e0c: 0017c703 lbu a4,1(a5) - p++; - 4e10: 0785 addi a5,a5,1 - while (*p) - 4e12: ff6d bnez a4,4e0c - return (size_t)(p - s); - 4e14: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 4e18: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 4e1a: e609 bnez a2,4e24 - 4e1c: a0a1 j 4e64 - dst_len++; - 4e1e: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 4e20: 04860263 beq a2,s0,4e64 - 4e24: 00890533 add a0,s2,s0 - 4e28: 00054783 lbu a5,0(a0) - 4e2c: fbed bnez a5,4e1e - - if (dst_len == size) - 4e2e: 02860b63 beq a2,s0,4e64 - 4e32: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 4e34: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e38: 89a6 mv s3,s1 - 4e3a: 02f4f263 bgeu s1,a5,4e5e - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 4e3e: 994e add s2,s2,s3 - 4e40: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 4e42: 864e mv a2,s3 - 4e44: cadff0ef jal 4af0 - dst[dst_len + copy_len] = '\0'; - 4e48: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x688> - - return dst_len + src_len; - 4e4c: 00940533 add a0,s0,s1 -} - 4e50: 70a2 ld ra,40(sp) - 4e52: 7402 ld s0,32(sp) - return dst_len + src_len; - 4e54: 69a2 ld s3,8(sp) -} - 4e56: 64e2 ld s1,24(sp) - 4e58: 6942 ld s2,16(sp) - 4e5a: 6145 addi sp,sp,48 - 4e5c: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e5e: fff78993 addi s3,a5,-1 - 4e62: bff1 j 4e3e -} - 4e64: 70a2 ld ra,40(sp) - 4e66: 7402 ld s0,32(sp) - 4e68: 6942 ld s2,16(sp) - return size + src_len; - 4e6a: 00960533 add a0,a2,s1 -} - 4e6e: 64e2 ld s1,24(sp) - 4e70: 6145 addi sp,sp,48 - 4e72: 8082 ret - while (*p) - 4e74: 4481 li s1,0 - 4e76: b74d j 4e18 - -0000000000004e78 : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 4e78: 00054683 lbu a3,0(a0) - 4e7c: c695 beqz a3,4ea8 - { - for (a = accept; *a; a++) - 4e7e: 0005c803 lbu a6,0(a1) - 4e82: 862a mv a2,a0 - 4e84: 00080f63 beqz a6,4ea2 - 4e88: 87ae mv a5,a1 - 4e8a: 8742 mv a4,a6 - 4e8c: a021 j 4e94 - 4e8e: 0007c703 lbu a4,0(a5) - 4e92: cb01 beqz a4,4ea2 - 4e94: 0785 addi a5,a5,1 - { - if (*p == *a) - 4e96: fee69ce3 bne a3,a4,4e8e - while (*p) - 4e9a: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 4e9e: 0605 addi a2,a2,1 - while (*p) - 4ea0: f6e5 bnez a3,4e88 - } - return (size_t)(p - s); - 4ea2: 40a60533 sub a0,a2,a0 - 4ea6: 8082 ret - while (*p) - 4ea8: 4501 li a0,0 -} - 4eaa: 8082 ret - -0000000000004eac : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 4eac: 00054683 lbu a3,0(a0) - 4eb0: ce85 beqz a3,4ee8 - { - for (r = reject; *r; r++) - 4eb2: 0005c803 lbu a6,0(a1) - const char *p = s; - 4eb6: 862a mv a2,a0 - for (r = reject; *r; r++) - 4eb8: 02080363 beqz a6,4ede - 4ebc: 87ae mv a5,a1 - 4ebe: 8742 mv a4,a6 - 4ec0: a021 j 4ec8 - 4ec2: 0007c703 lbu a4,0(a5) - 4ec6: c719 beqz a4,4ed4 - 4ec8: 0785 addi a5,a5,1 - { - if (*p == *r) - 4eca: fed71ce3 bne a4,a3,4ec2 - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 4ece: 40a60533 sub a0,a2,a0 - 4ed2: 8082 ret - while (*p) - 4ed4: 00164683 lbu a3,1(a2) - p++; - 4ed8: 0605 addi a2,a2,1 - while (*p) - 4eda: f2ed bnez a3,4ebc - 4edc: bfcd j 4ece - 4ede: 00164683 lbu a3,1(a2) - p++; - 4ee2: 0605 addi a2,a2,1 - while (*p) - 4ee4: feed bnez a3,4ede - 4ee6: b7e5 j 4ece - 4ee8: 4501 li a0,0 -} - 4eea: 8082 ret - -0000000000004eec : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 4eec: 00054683 lbu a3,0(a0) - 4ef0: c295 beqz a3,4f14 - { - for (a = accept; *a; a++) - 4ef2: 0005c603 lbu a2,0(a1) - 4ef6: c20d beqz a2,4f18 - 4ef8: 87ae mv a5,a1 - 4efa: 8732 mv a4,a2 - 4efc: a021 j 4f04 - 4efe: 0007c703 lbu a4,0(a5) - 4f02: c709 beqz a4,4f0c - 4f04: 0785 addi a5,a5,1 - { - if (*s == *a) - 4f06: fed71ce3 bne a4,a3,4efe - return (char *)s; - } - s++; - } - return NULL; -} - 4f0a: 8082 ret - while (*s) - 4f0c: 00154683 lbu a3,1(a0) - s++; - 4f10: 0505 addi a0,a0,1 - while (*s) - 4f12: f2fd bnez a3,4ef8 - return NULL; - 4f14: 4501 li a0,0 -} - 4f16: 8082 ret - while (*s) - 4f18: 00154683 lbu a3,1(a0) - s++; - 4f1c: 0505 addi a0,a0,1 - while (*s) - 4f1e: feed bnez a3,4f18 - 4f20: bfd5 j 4f14 - -0000000000004f22 : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 4f22: 00003897 auipc a7,0x3 - 4f26: 94e88893 addi a7,a7,-1714 # 7870 - 4f2a: cd25 beqz a0,4fa2 - while (*p) - 4f2c: 00054683 lbu a3,0(a0) - 4f30: c295 beqz a3,4f54 - for (a = accept; *a; a++) - 4f32: 0005c803 lbu a6,0(a1) - 4f36: 02080463 beqz a6,4f5e - 4f3a: 87ae mv a5,a1 - 4f3c: 8742 mv a4,a6 - 4f3e: a021 j 4f46 - 4f40: 0007c703 lbu a4,0(a5) - 4f44: cf09 beqz a4,4f5e - 4f46: 0785 addi a5,a5,1 - if (*p == *a) - 4f48: fee69ce3 bne a3,a4,4f40 - while (*p) - 4f4c: 00154683 lbu a3,1(a0) - p++; - 4f50: 0505 addi a0,a0,1 - while (*p) - 4f52: f6e5 bnez a3,4f3a - 4f54: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 4f56: 00f8b023 sd a5,0(a7) - return NULL; - 4f5a: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 4f5c: 8082 ret - if (*str == '\0') - 4f5e: 00054603 lbu a2,0(a0) - 4f62: da6d beqz a2,4f54 - 4f64: 86aa mv a3,a0 - for (a = accept; *a; a++) - 4f66: 04080163 beqz a6,4fa8 - 4f6a: 8742 mv a4,a6 - 4f6c: 87ae mv a5,a1 - 4f6e: a021 j 4f76 - 4f70: 0007c703 lbu a4,0(a5) - 4f74: cb19 beqz a4,4f8a - 4f76: 0785 addi a5,a5,1 - if (*s == *a) - 4f78: fee61ce3 bne a2,a4,4f70 - olds = str + 1; - 4f7c: 00168793 addi a5,a3,1 - *str = '\0'; - 4f80: 00068023 sb zero,0(a3) - olds = str; - 4f84: 00f8b023 sd a5,0(a7) -} - 4f88: 8082 ret - while (*s) - 4f8a: 0016c603 lbu a2,1(a3) - s++; - 4f8e: 0685 addi a3,a3,1 - while (*s) - 4f90: fe69 bnez a2,4f6a - 4f92: 87aa mv a5,a0 - while (*s != (char)c) - 4f94: 0017c703 lbu a4,1(a5) - if (!*s++) - 4f98: 0785 addi a5,a5,1 - while (*s != (char)c) - 4f9a: ff6d bnez a4,4f94 - olds = str; - 4f9c: 00f8b023 sd a5,0(a7) -} - 4fa0: 8082 ret - str = olds; - 4fa2: 0008b503 ld a0,0(a7) - 4fa6: b759 j 4f2c - while (*s) - 4fa8: 0016c603 lbu a2,1(a3) - s++; - 4fac: 0685 addi a3,a3,1 - while (*s) - 4fae: fe6d bnez a2,4fa8 - 4fb0: b7cd j 4f92 - -0000000000004fb2 : - -char *strerror(int errnum) -{ - 4fb2: 87aa mv a5,a0 - - switch (errnum) - 4fb4: cd09 beqz a0,4fce - 4fb6: 4731 li a4,12 - 4fb8: 00000517 auipc a0,0x0 - 4fbc: 1b050513 addi a0,a0,432 # 5168 <_GLOBAL__sub_I__ZSt3cin+0x178> - 4fc0: 00e78b63 beq a5,a4,4fd6 - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 4fc4: 00000517 auipc a0,0x0 - 4fc8: 1b450513 addi a0,a0,436 # 5178 <_GLOBAL__sub_I__ZSt3cin+0x188> - 4fcc: 8082 ret - return "Success"; - 4fce: 00000517 auipc a0,0x0 - 4fd2: 19250513 addi a0,a0,402 # 5160 <_GLOBAL__sub_I__ZSt3cin+0x170> - } - 4fd6: 8082 ret - -0000000000004fd8 <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 4fd8: cf6ff06f j 44ce - -0000000000004fdc <_Znam>: -} - -void *operator new[](unsigned long n) - 4fdc: cf2ff06f j 44ce - -0000000000004fe0 <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 4fe0: c78ff06f j 4458 - -0000000000004fe4 <_ZdaPv>: -} - -void operator delete[](void *p) - 4fe4: c74ff06f j 4458 - -0000000000004fe8 <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 4fe8: c70ff06f j 4458 - -0000000000004fec <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 4fec: c6cff06f j 4458 - -0000000000004ff0 <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 4ff0: 00002797 auipc a5,0x2 - 4ff4: 7307b783 ld a5,1840(a5) # 7720 <_GLOBAL_OFFSET_TABLE_+0x10> - 4ff8: 6390 ld a2,0(a5) - ostream cout(stdout); - 4ffa: 00002797 auipc a5,0x2 - 4ffe: 71e7b783 ld a5,1822(a5) # 7718 <_GLOBAL_OFFSET_TABLE_+0x8> - 5002: 6394 ld a3,0(a5) - ostream cerr(stderr); - 5004: 00002797 auipc a5,0x2 - 5008: 7247b783 ld a5,1828(a5) # 7728 <_GLOBAL_OFFSET_TABLE_+0x18> - 500c: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 500e: 00003797 auipc a5,0x3 - 5012: 86a78793 addi a5,a5,-1942 # 7878 <_ZSt3cin> - 5016: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 5018: e794 sd a3,8(a5) - 501a: eb98 sd a4,16(a5) -} // namespace std - 501c: 8082 ret diff --git a/build/user/initcode.out b/build/user/initcode.out deleted file mode 100755 index 9b46ae7..0000000 Binary files a/build/user/initcode.out and /dev/null differ diff --git a/build/user/ls b/build/user/ls deleted file mode 100755 index 9061337..0000000 Binary files a/build/user/ls and /dev/null differ diff --git a/build/user/ls.asm b/build/user/ls.asm deleted file mode 100644 index 78dc8f2..0000000 --- a/build/user/ls.asm +++ /dev/null @@ -1,10822 +0,0 @@ - -build/user/ls: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000000000000 <_Z8fmt_namePcPKc>: -void fmt_name(char *dst, const char *src) -{ - int i; - char *d = dst; - - for (i = 0; i < 8; i++) - 0: 872e mv a4,a1 - 2: 00850613 addi a2,a0,8 - char *d = dst; - 6: 87aa mv a5,a0 - { - if (src[i] == ' ') - 8: 02000813 li a6,32 - c: 00074683 lbu a3,0(a4) - for (i = 0; i < 8; i++) - 10: 0705 addi a4,a4,1 - if (src[i] == ' ') - 12: 07068663 beq a3,a6,7e <_Z8fmt_namePcPKc+0x7e> - break; - *d++ = src[i]; - 16: 0785 addi a5,a5,1 - 18: fed78fa3 sb a3,-1(a5) - for (i = 0; i < 8; i++) - 1c: fec798e3 bne a5,a2,c <_Z8fmt_namePcPKc+0xc> - } - - if (src[8] != ' ') - 20: 0085c703 lbu a4,8(a1) - 24: 02000793 li a5,32 - 28: 02f70663 beq a4,a5,54 <_Z8fmt_namePcPKc+0x54> - { - *d++ = '.'; - 2c: 02e00713 li a4,46 - 30: 00160793 addi a5,a2,1 - 34: 00e60023 sb a4,0(a2) - for (i = 8; i < 11; i++) - 38: 05a1 addi a1,a1,8 - 3a: 0611 addi a2,a2,4 - { - if (src[i] == ' ') - 3c: 02000693 li a3,32 - 40: 0005c703 lbu a4,0(a1) - for (i = 8; i < 11; i++) - 44: 0585 addi a1,a1,1 - if (src[i] == ' ') - 46: 02d70e63 beq a4,a3,82 <_Z8fmt_namePcPKc+0x82> - break; - *d++ = src[i]; - 4a: 0785 addi a5,a5,1 - 4c: fee78fa3 sb a4,-1(a5) - for (i = 8; i < 11; i++) - 50: fef618e3 bne a2,a5,40 <_Z8fmt_namePcPKc+0x40> - } - } - *d = 0; - 54: 00060023 sb zero,0(a2) - - for (d = dst; *d; d++) - 58: 00054783 lbu a5,0(a0) - 5c: c385 beqz a5,7c <_Z8fmt_namePcPKc+0x7c> - { - if (*d >= 'A' && *d <= 'Z') - 5e: 46e5 li a3,25 - 60: fbf7871b addiw a4,a5,-65 - 64: 0ff77713 zext.b a4,a4 - *d += 32; - 68: 0207879b addiw a5,a5,32 - if (*d >= 'A' && *d <= 'Z') - 6c: 00e6e463 bltu a3,a4,74 <_Z8fmt_namePcPKc+0x74> - *d += 32; - 70: 00f50023 sb a5,0(a0) - for (d = dst; *d; d++) - 74: 00154783 lbu a5,1(a0) - 78: 0505 addi a0,a0,1 - 7a: f3fd bnez a5,60 <_Z8fmt_namePcPKc+0x60> - } -} - 7c: 8082 ret - 7e: 863e mv a2,a5 - 80: b745 j 20 <_Z8fmt_namePcPKc+0x20> - 82: 863e mv a2,a5 - 84: bfc1 j 54 <_Z8fmt_namePcPKc+0x54> - -0000000000000086 <_Z2lsPKc>: - -void ls(const char *path) -{ - 86: 7119 addi sp,sp,-128 - int fd; - struct FAT32_DirEnt de; - char name_buf[16]; - - if ((fd = open(path, O_RDONLY)) < 0) - 88: 4581 li a1,0 -{ - 8a: f0ca sd s2,96(sp) - 8c: fc86 sd ra,120(sp) - 8e: 892a mv s2,a0 - if ((fd = open(path, O_RDONLY)) < 0) - 90: 156000ef jal 1e6 - 94: 08054e63 bltz a0,130 <_Z2lsPKc+0xaa> - 98: f8a2 sd s0,112(sp) - 9a: f4a6 sd s1,104(sp) - 9c: ecce sd s3,88(sp) - 9e: e8d2 sd s4,80(sp) - a0: e4d6 sd s5,72(sp) - a2: e0da sd s6,64(sp) - a4: fc5e sd s7,56(sp) - a6: 84aa mv s1,a0 - a8: 0800 addi s0,sp,16 - if (de.name[0] == 0) - { - break; - } - - if ((unsigned char)de.name[0] == 0xE5) - aa: 0e500993 li s3,229 - { - continue; - } - - if ((de.attr & ATTR_LONG_NAME) == ATTR_LONG_NAME) - ae: 4a3d li s4,15 - { - continue; - } - - fmt_name(name_buf, de.name); - b0: 890a mv s2,sp - - printf("%s %d\t%s\n", - b2: 00005b17 auipc s6,0x5 - b6: 05eb0b13 addi s6,s6,94 # 5110 <_GLOBAL__sub_I__ZSt3cin+0x4a> - ba: 00005a97 auipc s5,0x5 - be: 076a8a93 addi s5,s5,118 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x6a> - c2: 00005b97 auipc s7,0x5 - c6: 03eb8b93 addi s7,s7,62 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x3a> - while (read(fd, &de, sizeof(de)) == sizeof(de)) - ca: 85a2 mv a1,s0 - cc: 02000613 li a2,32 - d0: 8526 mv a0,s1 - d2: 0ec000ef jal 1be - d6: 872a mv a4,a0 - d8: 02000793 li a5,32 - fmt_name(name_buf, de.name); - dc: 85a2 mv a1,s0 - de: 854a mv a0,s2 - while (read(fd, &de, sizeof(de)) == sizeof(de)) - e0: 02f71a63 bne a4,a5,114 <_Z2lsPKc+0x8e> - if (de.name[0] == 0) - e4: 01014783 lbu a5,16(sp) - e8: c795 beqz a5,114 <_Z2lsPKc+0x8e> - if ((unsigned char)de.name[0] == 0xE5) - ea: ff3780e3 beq a5,s3,ca <_Z2lsPKc+0x44> - if ((de.attr & ATTR_LONG_NAME) == ATTR_LONG_NAME) - ee: 01b14783 lbu a5,27(sp) - f2: 8bbd andi a5,a5,15 - f4: fd478be3 beq a5,s4,ca <_Z2lsPKc+0x44> - fmt_name(name_buf, de.name); - f8: f09ff0ef jal 0 <_Z8fmt_namePcPKc> - printf("%s %d\t%s\n", - fc: 01b14783 lbu a5,27(sp) - 100: 86ca mv a3,s2 - 102: 8556 mv a0,s5 - 104: 8bc1 andi a5,a5,16 - 106: 85da mv a1,s6 - 108: c391 beqz a5,10c <_Z2lsPKc+0x86> - 10a: 85de mv a1,s7 - 10c: 5632 lw a2,44(sp) - 10e: 0c3030ef jal 39d0 - 112: bf65 j ca <_Z2lsPKc+0x44> - (de.attr & ATTR_DIRECTORY) ? "" : " ", - de.fileSize, - name_buf); - } - - close(fd); - 114: 8526 mv a0,s1 - 116: 0b8000ef jal 1ce -} - 11a: 70e6 ld ra,120(sp) - close(fd); - 11c: 7446 ld s0,112(sp) - 11e: 74a6 ld s1,104(sp) - 120: 69e6 ld s3,88(sp) - 122: 6a46 ld s4,80(sp) - 124: 6aa6 ld s5,72(sp) - 126: 6b06 ld s6,64(sp) - 128: 7be2 ld s7,56(sp) -} - 12a: 7906 ld s2,96(sp) - 12c: 6109 addi sp,sp,128 - 12e: 8082 ret - 130: 70e6 ld ra,120(sp) - printf("ls: cannot open %s\n", path); - 132: 85ca mv a1,s2 -} - 134: 7906 ld s2,96(sp) - printf("ls: cannot open %s\n", path); - 136: 00005517 auipc a0,0x5 - 13a: fe250513 addi a0,a0,-30 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x52> -} - 13e: 6109 addi sp,sp,128 - printf("ls: cannot open %s\n", path); - 140: 0910306f j 39d0 - -0000000000000144
: - -int main(int argc, char *argv[]) -{ - 144: 1101 addi sp,sp,-32 - 146: ec06 sd ra,24(sp) - if (argc < 2) - 148: 4785 li a5,1 - 14a: 02a7de63 bge a5,a0,186 - 14e: e426 sd s1,8(sp) - 150: ffe5049b addiw s1,a0,-2 - 154: 02049793 slli a5,s1,0x20 - 158: 01d7d493 srli s1,a5,0x1d - 15c: 01058793 addi a5,a1,16 - 160: e822 sd s0,16(sp) - 162: 94be add s1,s1,a5 - 164: 00858413 addi s0,a1,8 - } - else - { - for (int i = 1; i < argc; i++) - { - ls(argv[i]); - 168: 6008 ld a0,0(s0) - for (int i = 1; i < argc; i++) - 16a: 0421 addi s0,s0,8 - ls(argv[i]); - 16c: f1bff0ef jal 86 <_Z2lsPKc> - for (int i = 1; i < argc; i++) - 170: fe941ce3 bne s0,s1,168 - 174: 6442 ld s0,16(sp) - 176: 64a2 ld s1,8(sp) - } - } - exit(0); - 178: 4501 li a0,0 - 17a: 36a040ef jal 44e4 - 17e: 60e2 ld ra,24(sp) - 180: 4501 li a0,0 - 182: 6105 addi sp,sp,32 - 184: 8082 ret - ls("."); - 186: 00005517 auipc a0,0x5 - 18a: fba50513 addi a0,a0,-70 # 5140 <_GLOBAL__sub_I__ZSt3cin+0x7a> - 18e: ef9ff0ef jal 86 <_Z2lsPKc> - 192: b7dd j 178 - -0000000000000194 <_start>: -.global _start - -_start: - - - call main - 194: fb1ff0ef jal 144
- - call exit - 198: 34c040ef jal 44e4 - - 19c: a001 j 19c <_start+0x8> - -000000000000019e : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - 19e: 488d li a7,3 - 1a0: 00000073 ecall - 1a4: 8082 ret - -00000000000001a6 : - -SYSCALL(fork) - 1a6: 4889 li a7,2 - 1a8: 00000073 ecall - 1ac: 8082 ret - -00000000000001ae : -SYSCALL(wait) - 1ae: 4891 li a7,4 - 1b0: 00000073 ecall - 1b4: 8082 ret - -00000000000001b6 : -SYSCALL(pipe) - 1b6: 4895 li a7,5 - 1b8: 00000073 ecall - 1bc: 8082 ret - -00000000000001be : -SYSCALL(read) - 1be: 4899 li a7,6 - 1c0: 00000073 ecall - 1c4: 8082 ret - -00000000000001c6 : -SYSCALL(write) - 1c6: 48c5 li a7,17 - 1c8: 00000073 ecall - 1cc: 8082 ret - -00000000000001ce : -SYSCALL(close) - 1ce: 48d9 li a7,22 - 1d0: 00000073 ecall - 1d4: 8082 ret - -00000000000001d6 : -SYSCALL(kill) - 1d6: 489d li a7,7 - 1d8: 00000073 ecall - 1dc: 8082 ret - -00000000000001de : -SYSCALL(exec) - 1de: 48a1 li a7,8 - 1e0: 00000073 ecall - 1e4: 8082 ret - -00000000000001e6 : -SYSCALL(open) - 1e6: 48c1 li a7,16 - 1e8: 00000073 ecall - 1ec: 8082 ret - -00000000000001ee : -SYSCALL(mknod) - 1ee: 48c9 li a7,18 - 1f0: 00000073 ecall - 1f4: 8082 ret - -00000000000001f6 : -SYSCALL(unlink) - 1f6: 48cd li a7,19 - 1f8: 00000073 ecall - 1fc: 8082 ret - -00000000000001fe : -SYSCALL(fstat) - 1fe: 48a5 li a7,9 - 200: 00000073 ecall - 204: 8082 ret - -0000000000000206 : -SYSCALL(link) - 206: 48d1 li a7,20 - 208: 00000073 ecall - 20c: 8082 ret - -000000000000020e : -SYSCALL(mkdir) - 20e: 48d5 li a7,21 - 210: 00000073 ecall - 214: 8082 ret - -0000000000000216 : -SYSCALL(chdir) - 216: 48a9 li a7,10 - 218: 00000073 ecall - 21c: 8082 ret - -000000000000021e : -SYSCALL(dup) - 21e: 48ad li a7,11 - 220: 00000073 ecall - 224: 8082 ret - -0000000000000226 : -SYSCALL(getpid) - 226: 48b1 li a7,12 - 228: 00000073 ecall - 22c: 8082 ret - -000000000000022e : -SYSCALL(sbrk) - 22e: 48b5 li a7,13 - 230: 00000073 ecall - 234: 8082 ret - -0000000000000236 : -SYSCALL(sleep) - 236: 48b9 li a7,14 - 238: 00000073 ecall - 23c: 8082 ret - -000000000000023e : -SYSCALL(uptime) - 23e: 48bd li a7,15 - 240: 00000073 ecall - 244: 8082 ret - -0000000000000246 : -SYSCALL(putc) - 246: 4885 li a7,1 - 248: 00000073 ecall - 24c: 8082 ret - -000000000000024e : -SYSCALL(disk_test) - 24e: 48dd li a7,23 - 250: 00000073 ecall - 254: 8082 ret - -0000000000000256 : -SYSCALL(lseek) - 256: 48e1 li a7,24 - 258: 00000073 ecall - 25c: 8082 ret - -000000000000025e : - 25e: 48e5 li a7,25 - 260: 00000073 ecall - 264: 8082 ret - -0000000000000266 : - 266: 45dc lw a5,12(a1) - 268: 4598 lw a4,8(a1) - 26a: 9fb1 addw a5,a5,a2 - 26c: c5dc sw a5,12(a1) - 26e: 0007069b sext.w a3,a4 - 272: 00e65463 bge a2,a4,27a - 276: 0006069b sext.w a3,a2 - 27a: c685 beqz a3,2a2 - 27c: 619c ld a5,0(a1) - 27e: 00a78e63 beq a5,a0,29a - 282: 00d50633 add a2,a0,a3 - 286: 00054703 lbu a4,0(a0) - 28a: 0505 addi a0,a0,1 - 28c: 0785 addi a5,a5,1 - 28e: fee78fa3 sb a4,-1(a5) - 292: fec56ae3 bltu a0,a2,286 - 296: 6188 ld a0,0(a1) - 298: 4598 lw a4,8(a1) - 29a: 9f15 subw a4,a4,a3 - 29c: 9536 add a0,a0,a3 - 29e: e188 sd a0,0(a1) - 2a0: c598 sw a4,8(a1) - 2a2: 1ff00793 li a5,511 - 2a6: 00e7d463 bge a5,a4,2ae - 2aa: 6188 ld a0,0(a1) - 2ac: 8082 ret - 2ae: 01058513 addi a0,a1,16 - 2b2: 8082 ret - -00000000000002b4 : - 2b4: 45dc lw a5,12(a1) - 2b6: 01058513 addi a0,a1,16 - 2ba: 9fb1 addw a5,a5,a2 - 2bc: c5dc sw a5,12(a1) - 2be: 8082 ret - -00000000000002c0 : - 2c0: e20508d3 fmv.x.d a7,fa0 - 2c4: 82aa mv t0,a0 - 2c6: 4348d813 srai a6,a7,0x34 - 2ca: 8ec6 mv t4,a7 - 2cc: 7ff87813 andi a6,a6,2047 - 2d0: 8346 mv t1,a7 - 2d2: 03f8d513 srli a0,a7,0x3f - 2d6: 0008d663 bgez a7,2e2 - 2da: 22a517d3 fneg.d fa5,fa0 - 2de: e20788d3 fmv.x.d a7,fa5 - 2e2: 7ff00e13 li t3,2047 - 2e6: 35c80663 beq a6,t3,632 - 2ea: 1101 addi sp,sp,-32 - 2ec: 14080363 beqz a6,432 - 2f0: c018081b addiw a6,a6,-1023 - 2f4: ec22 sd s0,24(sp) - 2f6: 02081313 slli t1,a6,0x20 - 2fa: 66034d63 bltz t1,974 - 2fe: 4d100313 li t1,1233 - 302: 0303033b mulw t1,t1,a6 - 306: 4849 li a6,18 - 308: 40c3531b sraiw t1,t1,0xc - 30c: 0013039b addiw t2,t1,1 - 310: 4078083b subw a6,a6,t2 - 314: 4359 li t1,22 - 316: 17036163 bltu t1,a6,478 - 31a: 00005317 auipc t1,0x5 - 31e: 16630313 addi t1,t1,358 # 5480 - 322: 080e slli a6,a6,0x3 - 324: 981a add a6,a6,t1 - 326: 00083e03 ld t3,0(a6) - 32a: 00083607 fld fa2,0(a6) - 32e: f20887d3 fmv.d.x fa5,a7 - 332: f8000837 lui a6,0xf8000 - 336: 01187333 and t1,a6,a7 - 33a: 01c87833 and a6,a6,t3 - 33e: 12f676d3 fmul.d fa3,fa2,fa5 - 342: f20807d3 fmv.d.x fa5,a6 - 346: f2030753 fmv.d.x fa4,t1 - 34a: f20305d3 fmv.d.x fa1,t1 - 34e: 0af67653 fsub.d fa2,fa2,fa5 - 352: f20887d3 fmv.d.x fa5,a7 - 356: 0ae7f753 fsub.d fa4,fa5,fa4 - 35a: f20807d3 fmv.d.x fa5,a6 - 35e: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 362: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 366: f20805d3 fmv.d.x fa1,a6 - 36a: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 36e: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 372: 02d777d3 fadd.d fa5,fa4,fa3 - 376: 3782e837 lui a6,0x3782e - 37a: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826157> - 37e: 0832 slli a6,a6,0xc - 380: 9d980813 addi a6,a6,-1575 - 384: 084a slli a6,a6,0x12 - 386: 187d addi a6,a6,-1 - 388: c22798d3 fcvt.l.d a7,fa5,rtz - 38c: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 390: 00070e1b sext.w t3,a4 - 394: d228f653 fcvt.d.l fa2,a7 - 398: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 39c: 0ad77753 fsub.d fa4,fa4,fa3 - 3a0: 0af5f6d3 fsub.d fa3,fa1,fa5 - 3a4: 0ad5f553 fsub.d fa0,fa1,fa3 - 3a8: 02d67653 fadd.d fa2,fa2,fa3 - 3ac: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 3b0: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 3b4: 02b7f7d3 fadd.d fa5,fa5,fa1 - 3b8: 02e7f7d3 fadd.d fa5,fa5,fa4 - 3bc: c2279fd3 fcvt.l.d t6,fa5,rtz - 3c0: 9fc6 add t6,t6,a7 - 3c2: 19f87063 bgeu a6,t6,542 - 3c6: 2385 addiw t2,t2,1 - 3c8: 300e4363 bltz t3,6ce - 3cc: 00e3833b addw t1,t2,a4 - 3d0: 475d li a4,23 - 3d2: 30677663 bgeu a4,t1,6de - 3d6: 577d li a4,-1 - 3d8: 9301 srli a4,a4,0x20 - 3da: 43f75863 bge a4,t6,80a - 3de: 07d00313 li t1,125 - 3e2: 877e mv a4,t6 - 3e4: 4e01 li t3,0 - 3e6: 3e800813 li a6,1000 - 3ea: 130e slli t1,t1,0x23 - 3ec: a039 j 3fa - 3ee: 030747b3 div a5,a4,a6 - 3f2: 4e05 li t3,1 - 3f4: 40674c63 blt a4,t1,80c - 3f8: 873e mv a4,a5 - 3fa: 030768b3 rem a7,a4,a6 - 3fe: fe0888e3 beqz a7,3ee - 402: 400e0163 beqz t3,804 - 406: 8fbe mv t6,a5 - 408: 05f5e7b7 lui a5,0x5f5e - 40c: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56787> - 410: 04060413 addi s0,a2,64 - 414: 03860613 addi a2,a2,56 - 418: 15f7c863 blt a5,t6,568 - 41c: 000f871b sext.w a4,t6 - 420: 20070463 beqz a4,628 - 424: 4f01 li t5,0 - 426: 4f81 li t6,0 - 428: 00006e97 auipc t4,0x6 - 42c: 658e8e93 addi t4,t4,1624 # 6a80 - 430: aaa9 j 58a - 432: 0306 slli t1,t1,0x1 - 434: 3e030e63 beqz t1,830 - 438: 4305 li t1,1 - 43a: ec22 sd s0,24(sp) - 43c: 00ce9e13 slli t3,t4,0xc - 440: 134e slli t1,t1,0x33 - 442: 520e4063 bltz t3,962 - 446: 40135313 srai t1,t1,0x1 - 44a: 01d37e33 and t3,t1,t4 - 44e: 8f42 mv t5,a6 - 450: 387d addiw a6,a6,-1 - 452: fe0e0ae3 beqz t3,446 - 456: 26900313 li t1,617 - 45a: c00f081b addiw a6,t5,-1024 - 45e: 0268083b mulw a6,a6,t1 - 462: 41f8531b sraiw t1,a6,0x1f - 466: 0153531b srliw t1,t1,0x15 - 46a: 0103033b addw t1,t1,a6 - 46e: 40b3539b sraiw t2,t1,0xb - 472: 4849 li a6,18 - 474: 4078083b subw a6,a6,t2 - 478: 41f8531b sraiw t1,a6,0x1f - 47c: 00684eb3 xor t4,a6,t1 - 480: 406e8f3b subw t5,t4,t1 - 484: 2c900313 li t1,713 - 488: 03e3033b mulw t1,t1,t5 - 48c: 4e35 li t3,13 - 48e: 8efa mv t4,t5 - 490: 40e35f9b sraiw t6,t1,0xe - 494: 837e mv t1,t6 - 496: 23fe4363 blt t3,t6,6bc - 49a: 5e25 li t3,-23 - 49c: 026e0e3b mulw t3,t3,t1 - 4a0: 01de0ebb addw t4,t3,t4 - 4a4: 22084f63 bltz a6,6e2 - 4a8: f2000753 fmv.d.x fa4,zero - 4ac: 00005e17 auipc t3,0x5 - 4b0: fd4e0e13 addi t3,t3,-44 # 5480 - 4b4: 380e9e63 bnez t4,850 - 4b8: f20887d3 fmv.d.x fa5,a7 - 4bc: fff30f1b addiw t5,t1,-1 - 4c0: 0f0e slli t5,t5,0x3 - 4c2: 02f777d3 fadd.d fa5,fa4,fa5 - 4c6: 030e slli t1,t1,0x3 - 4c8: 9f72 add t5,t5,t3 - 4ca: 9e1a add t3,t3,t1 - 4cc: 2e0e3e03 ld t3,736(t3) - 4d0: 2e8f3587 fld fa1,744(t5) - 4d4: f8000837 lui a6,0xf8000 - 4d8: e2078ed3 fmv.x.d t4,fa5 - 4dc: 12b7f6d3 fmul.d fa3,fa5,fa1 - 4e0: f2088653 fmv.d.x fa2,a7 - 4e4: 01d87333 and t1,a6,t4 - 4e8: 01c87833 and a6,a6,t3 - 4ec: f20807d3 fmv.d.x fa5,a6 - 4f0: f2030053 fmv.d.x ft0,t1 - 4f4: 0af5f553 fsub.d fa0,fa1,fa5 - 4f8: f20e87d3 fmv.d.x fa5,t4 - 4fc: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 500: f20807d3 fmv.d.x fa5,a6 - 504: f2030653 fmv.d.x fa2,t1 - 508: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 50c: f20e87d3 fmv.d.x fa5,t4 - 510: 0a177753 fsub.d fa4,fa4,ft1 - 514: f20300d3 fmv.d.x ft1,t1 - 518: 0a07f7d3 fsub.d fa5,fa5,ft0 - 51c: 350f3007 fld ft0,848(t5) - 520: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 524: 12b77753 fmul.d fa4,fa4,fa1 - 528: f20805d3 fmv.d.x fa1,a6 - 52c: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 530: f20e85d3 fmv.d.x fa1,t4 - 534: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 538: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 53c: 02e7f753 fadd.d fa4,fa5,fa4 - 540: bd0d j 372 - 542: 00e3833b addw t1,t2,a4 - 546: 2a0e4663 bltz t3,7f2 - 54a: 475d li a4,23 - 54c: 10677663 bgeu a4,t1,658 - 550: e80f93e3 bnez t6,3d6 - 554: 05f5e7b7 lui a5,0x5f5e - 558: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56787> - 55c: 04060413 addi s0,a2,64 - 560: 03860613 addi a2,a2,56 - 564: ebf7dce3 bge a5,t6,41c - 568: 4f01 li t5,0 - 56a: 00006e97 auipc t4,0x6 - 56e: 516e8e93 addi t4,t4,1302 # 6a80 - 572: 05f5e7b7 lui a5,0x5f5e - 576: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56788> - 57a: 02ffe833 rem a6,t6,a5 - 57e: 02ffcfb3 div t6,t6,a5 - 582: 0008071b sext.w a4,a6 - 586: 0a080463 beqz a6,62e - 58a: 8822 mv a6,s0 - 58c: 06400893 li a7,100 - 590: 06300e13 li t3,99 - 594: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8686> - 596: 0007031b sext.w t1,a4 - 59a: 031777bb remuw a5,a4,a7 - 59e: 2785 addiw a5,a5,1 - 5a0: 0017979b slliw a5,a5,0x1 - 5a4: 1782 slli a5,a5,0x20 - 5a6: 9381 srli a5,a5,0x20 - 5a8: 97f6 add a5,a5,t4 - 5aa: 0007d783 lhu a5,0(a5) - 5ae: 0317573b divuw a4,a4,a7 - 5b2: 00f81023 sh a5,0(a6) - 5b6: fc6e6fe3 bltu t3,t1,594 - 5ba: 008f0f3b addw t5,t5,s0 - 5be: 410f0f3b subw t5,t5,a6 - 5c2: 020f8f63 beqz t6,600 - 5c6: 87c2 mv a5,a6 - 5c8: 03000713 li a4,48 - 5cc: 04c80c63 beq a6,a2,624 - 5d0: 17fd addi a5,a5,-1 - 5d2: 00e78023 sb a4,0(a5) - 5d6: fec79de3 bne a5,a2,5d0 - 5da: 408807b3 sub a5,a6,s0 - 5de: 00ff07bb addw a5,t5,a5 - 5e2: 1461 addi s0,s0,-8 - 5e4: 00878f1b addiw t5,a5,8 - 5e8: 05f5e7b7 lui a5,0x5f5e - 5ec: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56787> - 5f0: ff840613 addi a2,s0,-8 - 5f4: f7f7cfe3 blt a5,t6,572 - 5f8: 000f871b sext.w a4,t6 - 5fc: 4f81 li t6,0 - 5fe: b771 j 58a - 600: 020f0563 beqz t5,62a - 604: 00084703 lbu a4,0(a6) - 608: 03000793 li a5,48 - 60c: 22f70f63 beq a4,a5,84a - 610: 2f01 sext.w t5,t5 - 612: 0076a023 sw t2,0(a3) - 616: 6462 ld s0,24(sp) - 618: 0102b023 sd a6,0(t0) - 61c: 01e5a023 sw t5,0(a1) - 620: 6105 addi sp,sp,32 - 622: 8082 ret - 624: 8442 mv s0,a6 - 626: b7c9 j 5e8 - 628: 8822 mv a6,s0 - 62a: 4f01 li t5,0 - 62c: b7dd j 612 - 62e: 8822 mv a6,s0 - 630: bf59 j 5c6 - 632: 0eb2 slli t4,t4,0xc - 634: 00005797 auipc a5,0x5 - 638: b1c78793 addi a5,a5,-1252 # 5150 <_GLOBAL__sub_I__ZSt3cin+0x8a> - 63c: 000e8663 beqz t4,648 - 640: 00005797 auipc a5,0x5 - 644: b0878793 addi a5,a5,-1272 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x82> - 648: 00f2b023 sd a5,0(t0) - 64c: 679d lui a5,0x7 - 64e: c29c sw a5,0(a3) - 650: 4f0d li t5,3 - 652: 01e5a023 sw t5,0(a1) - 656: 8082 ret - 658: 3b9ad737 lui a4,0x3b9ad - 65c: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5087> - 660: 07f76f63 bltu a4,t6,6de - 664: 4805 li a6,1 - 666: 02081713 slli a4,a6,0x20 - 66a: 01d75893 srli a7,a4,0x1d - 66e: 00005717 auipc a4,0x5 - 672: 1ca70713 addi a4,a4,458 # 5838 - 676: 9746 add a4,a4,a7 - 678: 4e51 li t3,20 - 67a: a021 j 682 - 67c: 2805 addiw a6,a6,1 - 67e: edc809e3 beq a6,t3,550 - 682: 00073883 ld a7,0(a4) - 686: 0721 addi a4,a4,8 - 688: ff1ffae3 bgeu t6,a7,67c - 68c: ed0372e3 bgeu t1,a6,550 - 690: 4068083b subw a6,a6,t1 - 694: 475d li a4,23 - 696: eb076de3 bltu a4,a6,550 - 69a: 080e slli a6,a6,0x3 - 69c: 00005717 auipc a4,0x5 - 6a0: de470713 addi a4,a4,-540 # 5480 - 6a4: 9742 add a4,a4,a6 - 6a6: 3b873803 ld a6,952(a4) - 6aa: 00185713 srli a4,a6,0x1 - 6ae: 977e add a4,a4,t6 - 6b0: 01176363 bltu a4,a7,6b6 - 6b4: 2385 addiw t2,t2,1 - 6b6: 03075fb3 divu t6,a4,a6 - 6ba: bd59 j 550 - 6bc: 4335 li t1,13 - 6be: 5e25 li t3,-23 - 6c0: 026e0e3b mulw t3,t3,t1 - 6c4: 01de0ebb addw t4,t3,t4 - 6c8: de0850e3 bgez a6,4a8 - 6cc: a819 j 6e2 - 6ce: 02571313 slli t1,a4,0x25 - 6d2: 02535313 srli t1,t1,0x25 - 6d6: 0305 addi t1,t1,1 - 6d8: 475d li a4,23 - 6da: ce676ee3 bltu a4,t1,3d6 - 6de: 4829 li a6,10 - 6e0: b759 j 666 - 6e2: 260e8663 beqz t4,94e - 6e6: 00231e13 slli t3,t1,0x2 - 6ea: 41c30e33 sub t3,t1,t3 - 6ee: 0e0e slli t3,t3,0x3 - 6f0: 9e1a add t3,t3,t1 - 6f2: fffe881b addiw a6,t4,-1 - 6f6: 9e7a add t3,t3,t5 - 6f8: 00005e97 auipc t4,0x5 - 6fc: d88e8e93 addi t4,t4,-632 # 5480 - 700: 0e0e slli t3,t3,0x3 - 702: 080e slli a6,a6,0x3 - 704: 9876 add a6,a6,t4 - 706: 9ef2 add t4,t4,t3 - 708: 0b883607 fld fa2,184(a6) - 70c: f20887d3 fmv.d.x fa5,a7 - 710: 0b0ebf03 ld t5,176(t4) - 714: f8000e37 lui t3,0xf8000 - 718: 011e7eb3 and t4,t3,a7 - 71c: 12f676d3 fmul.d fa3,fa2,fa5 - 720: 01ee7e33 and t3,t3,t5 - 724: f20e07d3 fmv.d.x fa5,t3 - 728: f20e0753 fmv.d.x fa4,t3 - 72c: f20e8553 fmv.d.x fa0,t4 - 730: 0af67653 fsub.d fa2,fa2,fa5 - 734: f20e87d3 fmv.d.x fa5,t4 - 738: f20e85d3 fmv.d.x fa1,t4 - 73c: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 740: f2088753 fmv.d.x fa4,a7 - 744: 0ab775d3 fsub.d fa1,fa4,fa1 - 748: 16883707 fld fa4,360(a6) - 74c: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 750: f20e0553 fmv.d.x fa0,t3 - 754: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 758: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 75c: f20887d3 fmv.d.x fa5,a7 - 760: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 764: c00f87e3 beqz t6,372 - 768: 02d777d3 fadd.d fa5,fa4,fa3 - 76c: fff3089b addiw a7,t1,-1 - 770: 00005817 auipc a6,0x5 - 774: d1080813 addi a6,a6,-752 # 5480 - 778: 030e slli t1,t1,0x3 - 77a: 088e slli a7,a7,0x3 - 77c: 98c2 add a7,a7,a6 - 77e: 981a add a6,a6,t1 - 780: e2078e53 fmv.x.d t3,fa5 - 784: 21083e83 ld t4,528(a6) - 788: f8000837 lui a6,0xf8000 - 78c: 2188b507 fld fa0,536(a7) - 790: 01c87333 and t1,a6,t3 - 794: 01d87833 and a6,a6,t4 - 798: f2080653 fmv.d.x fa2,a6 - 79c: 12f577d3 fmul.d fa5,fa0,fa5 - 7a0: 2808b587 fld fa1,640(a7) - 7a4: 0ac57053 fsub.d ft0,fa0,fa2 - 7a8: f20e0653 fmv.d.x fa2,t3 - 7ac: 0ad67153 fsub.d ft2,fa2,fa3 - 7b0: f20806d3 fmv.d.x fa3,a6 - 7b4: f2030653 fmv.d.x fa2,t1 - 7b8: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 7bc: f20e06d3 fmv.d.x fa3,t3 - 7c0: 0ac6f653 fsub.d fa2,fa3,fa2 - 7c4: 22f786d3 fmv.d fa3,fa5 - 7c8: 0a2777d3 fsub.d fa5,fa4,ft2 - 7cc: f2030753 fmv.d.x fa4,t1 - 7d0: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 7d4: 12a7f7d3 fmul.d fa5,fa5,fa0 - 7d8: f2080553 fmv.d.x fa0,a6 - 7dc: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 7e0: f20e0553 fmv.d.x fa0,t3 - 7e4: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 7e8: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 7ec: 02f67753 fadd.d fa4,fa2,fa5 - 7f0: b649 j 372 - 7f2: 02571313 slli t1,a4,0x25 - 7f6: 02535313 srli t1,t1,0x25 - 7fa: 0305 addi t1,t1,1 - 7fc: 475d li a4,23 - 7fe: d46769e3 bltu a4,t1,550 - 802: bd99 j 658 - 804: 87fe mv a5,t6 - 806: 8fbe mv t6,a5 - 808: b101 j 408 - 80a: 87fe mv a5,t6 - 80c: 3e800713 li a4,1000 - 810: 02e7f73b remuw a4,a5,a4 - 814: 2781 sext.w a5,a5 - 816: eb01 bnez a4,826 - 818: 3e800813 li a6,1000 - 81c: 0307d7bb divuw a5,a5,a6 - 820: 0307f73b remuw a4,a5,a6 - 824: df65 beqz a4,81c - 826: 02079f93 slli t6,a5,0x20 - 82a: 020fdf93 srli t6,t6,0x20 - 82e: b31d j 554 - 830: 4785 li a5,1 - 832: c29c sw a5,0(a3) - 834: 00c2b023 sd a2,0(t0) - 838: 03000793 li a5,48 - 83c: 00f60023 sb a5,0(a2) - 840: 4f05 li t5,1 - 842: 01e5a023 sw t5,0(a1) - 846: 6105 addi sp,sp,32 - 848: 8082 ret - 84a: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8689> - 84c: 3f7d addiw t5,t5,-1 - 84e: b3d1 j 612 - 850: e826 sd s1,16(sp) - 852: e44a sd s2,8(sp) - 854: 4859 li a6,22 - 856: 8976 mv s2,t4 - 858: 11d84363 blt a6,t4,95e - 85c: 0009049b sext.w s1,s2 - 860: 00005e17 auipc t3,0x5 - 864: c20e0e13 addi t3,t3,-992 # 5480 - 868: 00349813 slli a6,s1,0x3 - 86c: 9872 add a6,a6,t3 - 86e: 00083687 fld fa3,0(a6) - 872: 00083803 ld a6,0(a6) - 876: f20887d3 fmv.d.x fa5,a7 - 87a: f8000fb7 lui t6,0xf8000 - 87e: 010ff833 and a6,t6,a6 - 882: 12f6f553 fmul.d fa0,fa3,fa5 - 886: f20807d3 fmv.d.x fa5,a6 - 88a: 011ff433 and s0,t6,a7 - 88e: f2040753 fmv.d.x fa4,s0 - 892: 0af6f6d3 fsub.d fa3,fa3,fa5 - 896: f20887d3 fmv.d.x fa5,a7 - 89a: f2080653 fmv.d.x fa2,a6 - 89e: 412e8ebb subw t4,t4,s2 - 8a2: 0ae7f753 fsub.d fa4,fa5,fa4 - 8a6: f20407d3 fmv.d.x fa5,s0 - 8aa: e20508d3 fmv.x.d a7,fa0 - 8ae: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 8b2: f2040653 fmv.d.x fa2,s0 - 8b6: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 8ba: f2080653 fmv.d.x fa2,a6 - 8be: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 8c2: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 8c6: 080e8963 beqz t4,958 - 8ca: 02e577d3 fadd.d fa5,fa0,fa4 - 8ce: 0e8e slli t4,t4,0x3 - 8d0: 01de0833 add a6,t3,t4 - 8d4: 00083587 fld fa1,0(a6) - 8d8: 00231893 slli a7,t1,0x2 - 8dc: 411308b3 sub a7,t1,a7 - 8e0: 00389813 slli a6,a7,0x3 - 8e4: e2078453 fmv.x.d s0,fa5 - 8e8: 12f5f7d3 fmul.d fa5,fa1,fa5 - 8ec: 981a add a6,a6,t1 - 8ee: 987a add a6,a6,t5 - 8f0: 40980833 sub a6,a6,s1 - 8f4: 080e slli a6,a6,0x3 - 8f6: 9872 add a6,a6,t3 - 8f8: 00083e83 ld t4,0(a6) - 8fc: 008ff833 and a6,t6,s0 - 900: e20788d3 fmv.x.d a7,fa5 - 904: f20806d3 fmv.d.x fa3,a6 - 908: f20407d3 fmv.d.x fa5,s0 - 90c: 01dfffb3 and t6,t6,t4 - 910: f20880d3 fmv.d.x ft1,a7 - 914: 0ad7f653 fsub.d fa2,fa5,fa3 - 918: f20f87d3 fmv.d.x fa5,t6 - 91c: 64c2 ld s1,16(sp) - 91e: 6922 ld s2,8(sp) - 920: 0af5f053 fsub.d ft0,fa1,fa5 - 924: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 928: f20407d3 fmv.d.x fa5,s0 - 92c: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 930: f2080553 fmv.d.x fa0,a6 - 934: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 938: 0af77753 fsub.d fa4,fa4,fa5 - 93c: f20f87d3 fmv.d.x fa5,t6 - 940: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 944: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 948: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 94c: b6b5 j 4b8 - 94e: f20886d3 fmv.d.x fa3,a7 - 952: f2000753 fmv.d.x fa4,zero - 956: b539 j 764 - 958: 64c2 ld s1,16(sp) - 95a: 6922 ld s2,8(sp) - 95c: beb1 j 4b8 - 95e: 4959 li s2,22 - 960: bdf5 j 85c - 962: e826 sd s1,16(sp) - 964: e44a sd s2,8(sp) - 966: ecc00393 li t2,-308 - 96a: 4eed li t4,27 - 96c: 4335 li t1,13 - 96e: 14600f13 li t5,326 - 972: b5cd j 854 - 974: 26900313 li t1,617 - 978: 0303083b mulw a6,t1,a6 - 97c: 41f8531b sraiw t1,a6,0x1f - 980: 0153531b srliw t1,t1,0x15 - 984: 0103033b addw t1,t1,a6 - 988: 40b3539b sraiw t2,t1,0xb - 98c: 4849 li a6,18 - 98e: 4078083b subw a6,a6,t2 - 992: b249 j 314 - -0000000000000994 <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 994: 87aa mv a5,a0 - if (ctx->fd == -1) - 996: 4508 lw a0,8(a0) - 998: 577d li a4,-1 - 99a: 00e51d63 bne a0,a4,9b4 <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 99e: 6b94 ld a3,16(a5) - 9a0: 6398 ld a4,0(a5) - 9a2: 9736 add a4,a4,a3 - 9a4: 00074603 lbu a2,0(a4) - 9a8: c60d beqz a2,9d2 <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 9aa: 0685 addi a3,a3,1 - 9ac: eb94 sd a3,16(a5) - 9ae: 00074503 lbu a0,0(a4) - 9b2: 8082 ret -static int _in_char(_InContext *ctx) - 9b4: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 9b6: 4605 li a2,1 - 9b8: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 9bc: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 9be: 801ff0ef jal 1be - 9c2: 4785 li a5,1 - 9c4: 00f51963 bne a0,a5,9d6 <_in_char.part.0+0x42> - return (unsigned char)c; - 9c8: 00f14503 lbu a0,15(sp) -} - 9cc: 60e2 ld ra,24(sp) - 9ce: 6105 addi sp,sp,32 - 9d0: 8082 ret - return -1; - 9d2: 557d li a0,-1 -} - 9d4: 8082 ret - return -1; - 9d6: 557d li a0,-1 - 9d8: bfd5 j 9cc <_in_char.part.0+0x38> - -00000000000009da <_skip_space>: -{ - 9da: 7139 addi sp,sp,-64 - 9dc: f822 sd s0,48(sp) - 9de: f426 sd s1,40(sp) - 9e0: f04a sd s2,32(sp) - 9e2: ec4e sd s3,24(sp) - 9e4: e852 sd s4,16(sp) - 9e6: fc06 sd ra,56(sp) - 9e8: 842a mv s0,a0 - ctx->ungotten = -1; - 9ea: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 9ec: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9f0: 02000913 li s2,32 - 9f4: 4991 li s3,4 - if (ctx->ungotten >= 0) - 9f6: 4c1c lw a5,24(s0) - 9f8: 0407d163 bgez a5,a3a <_skip_space+0x60> - if (ctx->fd == -1) - 9fc: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 9fe: 4605 li a2,1 - a00: 85d2 mv a1,s4 - if (ctx->fd == -1) - a02: 02951e63 bne a0,s1,a3e <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - a06: 6818 ld a4,16(s0) - a08: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - a0a: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - a0e: 97ba add a5,a5,a4 - a10: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x60> - a14: cb19 beqz a4,a2a <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - a16: e814 sd a3,16(s0) - a18: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - a1c: ff77871b addiw a4,a5,-9 - a20: fd278be3 beq a5,s2,9f6 <_skip_space+0x1c> - a24: fce9f9e3 bgeu s3,a4,9f6 <_skip_space+0x1c> - ctx->ungotten = c; - a28: cc1c sw a5,24(s0) -} - a2a: 70e2 ld ra,56(sp) - a2c: 7442 ld s0,48(sp) - a2e: 74a2 ld s1,40(sp) - a30: 7902 ld s2,32(sp) - a32: 69e2 ld s3,24(sp) - a34: 6a42 ld s4,16(sp) - a36: 6121 addi sp,sp,64 - a38: 8082 ret - ctx->ungotten = -1; - a3a: cc04 sw s1,24(s0) - return c; - a3c: b7c5 j a1c <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - a3e: f80ff0ef jal 1be - a42: 4785 li a5,1 - a44: fef513e3 bne a0,a5,a2a <_skip_space+0x50> - return (unsigned char)c; - a48: 00f14783 lbu a5,15(sp) - a4c: bfc1 j a1c <_skip_space+0x42> - -0000000000000a4e <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - a4e: 7155 addi sp,sp,-208 - a50: e586 sd ra,200(sp) - a52: e95a sd s6,144(sp) - while (*p) - a54: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - a58: e432 sd a2,8(sp) - while (*p) - a5a: 68078b63 beqz a5,10f0 <_vscanf_core.constprop.0+0x6a2> - a5e: e1a2 sd s0,192(sp) - a60: fd26 sd s1,184(sp) - a62: f152 sd s4,160(sp) - a64: ed56 sd s5,152(sp) - a66: f4ee sd s11,104(sp) - a68: 842e mv s0,a1 - a6a: 8daa mv s11,a0 - int assigned = 0; - a6c: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - a6e: 02000493 li s1,32 - a72: 4a91 li s5,4 - if (*p != '%') - a74: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - a78: 04978763 beq a5,s1,ac6 <_vscanf_core.constprop.0+0x78> - a7c: ff77869b addiw a3,a5,-9 - a80: 0ff6f693 zext.b a3,a3 - a84: 04daf163 bgeu s5,a3,ac6 <_vscanf_core.constprop.0+0x78> - if (*p != '%') - a88: 07478d63 beq a5,s4,b02 <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - a8c: 856e mv a0,s11 - a8e: f4dff0ef jal 9da <_skip_space> - if (ctx->ungotten >= 0) - a92: 018da503 lw a0,24(s11) - a96: 04055a63 bgez a0,aea <_vscanf_core.constprop.0+0x9c> - a9a: 856e mv a0,s11 - a9c: ef9ff0ef jal 994 <_in_char.part.0> - if (c != *p) - aa0: 00044783 lbu a5,0(s0) - aa4: 04a78a63 beq a5,a0,af8 <_vscanf_core.constprop.0+0xaa> - if (c != -1) - aa8: 57fd li a5,-1 - aaa: 00f50463 beq a0,a5,ab2 <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - aae: 00adac23 sw a0,24(s11) - ab2: 640e ld s0,192(sp) - ab4: 74ea ld s1,184(sp) - ab6: 7a0a ld s4,160(sp) - ab8: 6aea ld s5,152(sp) - aba: 7da6 ld s11,104(sp) -} - abc: 60ae ld ra,200(sp) - abe: 855a mv a0,s6 - ac0: 6b4a ld s6,144(sp) - ac2: 6169 addi sp,sp,208 - ac4: 8082 ret - _skip_space(ctx); - ac6: 856e mv a0,s11 - ac8: f13ff0ef jal 9da <_skip_space> - while (isspace(*p)) - acc: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - ad0: 4611 li a2,4 - ad2: ff77869b addiw a3,a5,-9 - ad6: 0ff6f693 zext.b a3,a3 - ada: 00978663 beq a5,s1,ae6 <_vscanf_core.constprop.0+0x98> - ade: 00d67463 bgeu a2,a3,ae6 <_vscanf_core.constprop.0+0x98> - while (*p) - ae2: fbd9 bnez a5,a78 <_vscanf_core.constprop.0+0x2a> - ae4: b7f9 j ab2 <_vscanf_core.constprop.0+0x64> - p++; - ae6: 0405 addi s0,s0,1 - ae8: b7d5 j acc <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - aea: 57fd li a5,-1 - aec: 00fdac23 sw a5,24(s11) - if (c != *p) - af0: 00044783 lbu a5,0(s0) - af4: faa79ae3 bne a5,a0,aa8 <_vscanf_core.constprop.0+0x5a> - while (*p) - af8: 00144783 lbu a5,1(s0) - p++; - afc: 0405 addi s0,s0,1 - while (*p) - afe: ffad bnez a5,a78 <_vscanf_core.constprop.0+0x2a> - b00: bf4d j ab2 <_vscanf_core.constprop.0+0x64> - b02: f94a sd s2,176(sp) - b04: f54e sd s3,168(sp) - b06: e55e sd s7,136(sp) - b08: e162 sd s8,128(sp) - if (*p == '*') - b0a: 00144583 lbu a1,1(s0) - b0e: 02a00793 li a5,42 - b12: 22f58d63 beq a1,a5,d4c <_vscanf_core.constprop.0+0x2fe> - p++; - b16: 0405 addi s0,s0,1 - int suppress = 0; - b18: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - b1a: fd05861b addiw a2,a1,-48 - b1e: 0ff67693 zext.b a3,a2 - b22: 47a5 li a5,9 - b24: 36d7e763 bltu a5,a3,e92 <_vscanf_core.constprop.0+0x444> - b28: 4781 li a5,0 - b2a: 4825 li a6,9 - b2c: a019 j b32 <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - b2e: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - b32: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - b36: 00f6093b addw s2,a2,a5 - b3a: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - b3e: fd05861b addiw a2,a1,-48 - b42: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - b46: 012686bb addw a3,a3,s2 - p++; - b4a: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - b4c: fea871e3 bgeu a6,a0,b2e <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - b50: 06c00693 li a3,108 - p++; - b54: 00140b93 addi s7,s0,1 - if (*p == 'l') - b58: 1ed58f63 beq a1,a3,d56 <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - b5c: 06800693 li a3,104 - b60: 2ad58863 beq a1,a3,e10 <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - b64: 00044c03 lbu s8,0(s0) - b68: 8ba2 mv s7,s0 - int len_mod = 0; - b6a: ec02 sd zero,24(sp) - char spec = *p++; - b6c: 06300693 li a3,99 - b70: 001b8413 addi s0,s7,1 - if (!spec) - b74: 2adc0863 beq s8,a3,e24 <_vscanf_core.constprop.0+0x3d6> - b78: 1f86fc63 bgeu a3,s8,d70 <_vscanf_core.constprop.0+0x322> - b7c: f9cc069b addiw a3,s8,-100 - b80: 0ff6f693 zext.b a3,a3 - b84: 4651 li a2,20 - b86: 0cd66e63 bltu a2,a3,c62 <_vscanf_core.constprop.0+0x214> - b8a: 00120637 lui a2,0x120 - b8e: 4585 li a1,1 - b90: 00d595b3 sll a1,a1,a3 - b94: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1186a9> - b98: 8e6d and a2,a2,a1 - b9a: ee69 bnez a2,c74 <_vscanf_core.constprop.0+0x226> - b9c: 89b9 andi a1,a1,14 - b9e: 1e059263 bnez a1,d82 <_vscanf_core.constprop.0+0x334> - ba2: 463d li a2,15 - ba4: 0ac69f63 bne a3,a2,c62 <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - ba8: 856e mv a0,s11 - baa: e31ff0ef jal 9da <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - bae: ec02 sd zero,24(sp) - bb0: 00099763 bnez s3,bbe <_vscanf_core.constprop.0+0x170> - bb4: 67a2 ld a5,8(sp) - bb6: 6398 ld a4,0(a5) - bb8: 07a1 addi a5,a5,8 - bba: e43e sd a5,8(sp) - bbc: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - bbe: 018da503 lw a0,24(s11) - bc2: 2e055b63 bgez a0,eb8 <_vscanf_core.constprop.0+0x46a> - bc6: 856e mv a0,s11 - bc8: dcdff0ef jal 994 <_in_char.part.0> - while (c != -1 && !isspace(c)) - bcc: 56fd li a3,-1 - bce: 6ad50363 beq a0,a3,1274 <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - bd2: 02000693 li a3,32 - bd6: 3ed50963 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - bda: 46a5 li a3,9 - bdc: 3ed50663 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - be0: 46a9 li a3,10 - be2: 3ed50363 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - be6: 46ad li a3,11 - be8: 3ed50063 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - bec: 46b1 li a3,12 - bee: 3cd50d63 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - bf2: 46b5 li a3,13 - bf4: 3cd50a63 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x57a> - bf8: 67e2 ld a5,24(sp) - bfa: fce6 sd s9,120(sp) - bfc: f8ea sd s10,112(sp) - bfe: e83e sd a5,16(sp) - c00: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - c02: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - c04: 02000c93 li s9,32 - if (width > 0 && i >= width) - c08: 01205463 blez s2,c10 <_vscanf_core.constprop.0+0x1c2> - c0c: 052d5563 bge s10,s2,c56 <_vscanf_core.constprop.0+0x208> - if (!suppress) - c10: 00099563 bnez s3,c1a <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - c14: 67c2 ld a5,16(sp) - c16: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - c1a: 018da503 lw a0,24(s11) - i++; - c1e: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - c20: 30055963 bgez a0,f32 <_vscanf_core.constprop.0+0x4e4> - c24: 856e mv a0,s11 - c26: d6fff0ef jal 994 <_in_char.part.0> - while (c != -1 && !isspace(c)) - c2a: 27850663 beq a0,s8,e96 <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - c2e: 03950463 beq a0,s9,c56 <_vscanf_core.constprop.0+0x208> - c32: 47a5 li a5,9 - c34: 02f50163 beq a0,a5,c56 <_vscanf_core.constprop.0+0x208> - c38: 47a9 li a5,10 - c3a: 00f50e63 beq a0,a5,c56 <_vscanf_core.constprop.0+0x208> - c3e: 47ad li a5,11 - c40: 00f50b63 beq a0,a5,c56 <_vscanf_core.constprop.0+0x208> - c44: 47b1 li a5,12 - c46: 00f50863 beq a0,a5,c56 <_vscanf_core.constprop.0+0x208> - c4a: 67c2 ld a5,16(sp) - c4c: 0785 addi a5,a5,1 - c4e: e83e sd a5,16(sp) - c50: 47b5 li a5,13 - c52: faf51be3 bne a0,a5,c08 <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - c56: 64098a63 beqz s3,12aa <_vscanf_core.constprop.0+0x85c> - c5a: 7ce6 ld s9,120(sp) - c5c: 7d46 ld s10,112(sp) - ctx->ungotten = c; - c5e: 00adac23 sw a0,24(s11) - while (*p) - c62: 001bc783 lbu a5,1(s7) - c66: 794a ld s2,176(sp) - c68: 79aa ld s3,168(sp) - c6a: 6baa ld s7,136(sp) - c6c: 6c0a ld s8,128(sp) - c6e: e00795e3 bnez a5,a78 <_vscanf_core.constprop.0+0x2a> - c72: b581 j ab2 <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - c74: 856e mv a0,s11 - c76: f8ea sd s10,112(sp) - c78: d63ff0ef jal 9da <_skip_space> - if (ctx->ungotten >= 0) - c7c: 018da503 lw a0,24(s11) - c80: 24055063 bgez a0,ec0 <_vscanf_core.constprop.0+0x472> - c84: 856e mv a0,s11 - c86: d0fff0ef jal 994 <_in_char.part.0> - if (c == '-' || c == '+') - c8a: fd55069b addiw a3,a0,-43 - c8e: 9af5 andi a3,a3,-3 - c90: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - c92: 4d01 li s10,0 - if (c == '-' || c == '+') - c94: 3e068863 beqz a3,1084 <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - c98: 07800693 li a3,120 - c9c: 4641 li a2,16 - c9e: 00dc0863 beq s8,a3,cae <_vscanf_core.constprop.0+0x260> - ca2: 06900693 li a3,105 - ca6: 4629 li a2,10 - ca8: 00dc1363 bne s8,a3,cae <_vscanf_core.constprop.0+0x260> - cac: 4601 li a2,0 - while (c != -1 && i < 63) - cae: 56fd li a3,-1 - cb0: 5cd50863 beq a0,a3,1280 <_vscanf_core.constprop.0+0x832> - cb4: fce6 sd s9,120(sp) - cb6: 02010893 addi a7,sp,32 - cba: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - cbe: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - cc0: fd05069b addiw a3,a0,-48 - cc4: 0005031b sext.w t1,a0 - cc8: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ccc: 27960a63 beq a2,s9,f40 <_vscanf_core.constprop.0+0x4f2> - cd0: 2a060d63 beqz a2,f8a <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - cd4: 07800793 li a5,120 - cd8: 2ef50363 beq a0,a5,fbe <_vscanf_core.constprop.0+0x570> - cdc: fa850693 addi a3,a0,-88 - ce0: 0016b693 seqz a3,a3 - ce4: 4301 li t1,0 - if (width > 0 && i >= width) - ce6: 01205463 blez s2,cee <_vscanf_core.constprop.0+0x2a0> - cea: 032d5a63 bge s10,s2,d1e <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - cee: 0066e6b3 or a3,a3,t1 - cf2: 8ecd or a3,a3,a1 - cf4: c68d beqz a3,d1e <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - cf6: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - cfa: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - cfe: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - d00: 22055c63 bgez a0,f38 <_vscanf_core.constprop.0+0x4ea> - d04: 856e mv a0,s11 - d06: e832 sd a2,16(sp) - d08: c8dff0ef jal 994 <_in_char.part.0> - while (c != -1 && i < 63) - d0c: 57fd li a5,-1 - d0e: 6642 ld a2,16(sp) - d10: 3cf50263 beq a0,a5,10d4 <_vscanf_core.constprop.0+0x686> - d14: 03f00693 li a3,63 - d18: 0c05 addi s8,s8,1 - d1a: fadd13e3 bne s10,a3,cc0 <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - d1e: 040d0793 addi a5,s10,64 - d22: 1018 addi a4,sp,32 - d24: 97ba add a5,a5,a4 - d26: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - d2a: 00adac23 sw a0,24(s11) - d2e: 7ce6 ld s9,120(sp) - if (i == 0) - d30: 1e0d0663 beqz s10,f1c <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - d34: 36098363 beqz s3,109a <_vscanf_core.constprop.0+0x64c> - while (*p) - d38: 001bc783 lbu a5,1(s7) - { - d3c: 794a ld s2,176(sp) - d3e: 79aa ld s3,168(sp) - d40: 6baa ld s7,136(sp) - d42: 6c0a ld s8,128(sp) - d44: 7d46 ld s10,112(sp) - while (*p) - d46: d20799e3 bnez a5,a78 <_vscanf_core.constprop.0+0x2a> - d4a: b3a5 j ab2 <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - d4c: 00244583 lbu a1,2(s0) - suppress = 1; - d50: 4985 li s3,1 - p++; - d52: 0409 addi s0,s0,2 - d54: b3d9 j b1a <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - d56: 00144c03 lbu s8,1(s0) - len_mod = 1; - d5a: 4785 li a5,1 - d5c: ec3e sd a5,24(sp) - if (*p == 'l') - d5e: e0bc17e3 bne s8,a1,b6c <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - d62: 4789 li a5,2 - char spec = *p++; - d64: 00244c03 lbu s8,2(s0) - p++; - d68: 00240b93 addi s7,s0,2 - len_mod = 2; - d6c: ec3e sd a5,24(sp) - d6e: bbfd j b6c <_vscanf_core.constprop.0+0x11e> - d70: 100c0763 beqz s8,e7e <_vscanf_core.constprop.0+0x430> - d74: fbbc079b addiw a5,s8,-69 - d78: 0ff7f793 zext.b a5,a5 - d7c: 4689 li a3,2 - d7e: eef6e2e3 bltu a3,a5,c62 <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - d82: 856e mv a0,s11 - d84: f8ea sd s10,112(sp) - d86: c55ff0ef jal 9da <_skip_space> - if (ctx->ungotten >= 0) - d8a: 018da783 lw a5,24(s11) - d8e: 1207dd63 bgez a5,ec8 <_vscanf_core.constprop.0+0x47a> - d92: 856e mv a0,s11 - d94: c01ff0ef jal 994 <_in_char.part.0> - if (c == '-' || c == '+') - d98: fd55069b addiw a3,a0,-43 - d9c: ffd6f613 andi a2,a3,-3 - da0: 2601 sext.w a2,a2 - da2: 87aa mv a5,a0 - da4: 12060c63 beqz a2,edc <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - da8: 567d li a2,-1 - daa: 16c50963 beq a0,a2,f1c <_vscanf_core.constprop.0+0x4ce> - dae: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - db0: 4d01 li s10,0 - db2: 80000937 lui s2,0x80000 - db6: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8687> - db8: 0932 slli s2,s2,0xc - dba: 80194913 xori s2,s2,-2047 - dbe: 093e slli s2,s2,0xf - dc0: 02010813 addi a6,sp,32 - dc4: 01a80cb3 add s9,a6,s10 - dc8: 03a00c13 li s8,58 - dcc: 1935 addi s2,s2,-19 - dce: a831 j dea <_vscanf_core.constprop.0+0x39c> - dd0: bc5ff0ef jal 994 <_in_char.part.0> - while (c != -1 && i < 63) - dd4: 577d li a4,-1 - dd6: 87aa mv a5,a0 - dd8: 2ee50563 beq a0,a4,10c2 <_vscanf_core.constprop.0+0x674> - ddc: 03f00713 li a4,63 - de0: 0c85 addi s9,s9,1 - de2: 1eed0e63 beq s10,a4,fde <_vscanf_core.constprop.0+0x590> - de6: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - dea: 00d95633 srl a2,s2,a3 - dee: 856e mv a0,s11 - df0: 8a05 andi a2,a2,1 - df2: 1edc6663 bltu s8,a3,fde <_vscanf_core.constprop.0+0x590> - df6: 1e060463 beqz a2,fde <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - dfa: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - dfe: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - e02: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - e04: fc07c6e3 bltz a5,dd0 <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - e08: 577d li a4,-1 - e0a: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - e0e: b7f9 j ddc <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - e10: 00144c03 lbu s8,1(s0) - int len_mod = 0; - e14: ec02 sd zero,24(sp) - if (*p == 'h') - e16: d4bc1be3 bne s8,a1,b6c <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - e1a: 00244c03 lbu s8,2(s0) - p++; - e1e: 00240b93 addi s7,s0,2 - e22: b3a9 j b6c <_vscanf_core.constprop.0+0x11e> - e24: fce6 sd s9,120(sp) - e26: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - e28: 00090c1b sext.w s8,s2 - e2c: 0d205a63 blez s2,f00 <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - e30: 4d01 li s10,0 - e32: 06098d63 beqz s3,eac <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - e36: 9c6a add s8,s8,s10 - if (c == -1) - e38: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - e3a: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - e3e: 856e mv a0,s11 - if (ctx->ungotten >= 0) - e40: 0207dc63 bgez a5,e78 <_vscanf_core.constprop.0+0x42a> - e44: b51ff0ef jal 994 <_in_char.part.0> - e48: 87aa mv a5,a0 - if (c == -1) - e4a: 0b950d63 beq a0,s9,f04 <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - e4e: 00099463 bnez s3,e56 <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - e52: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - e56: 0d05 addi s10,s10,1 - e58: ffac11e3 bne s8,s10,e3a <_vscanf_core.constprop.0+0x3ec> - while (*p) - e5c: 001bc783 lbu a5,1(s7) - if (!suppress) - e60: 00099363 bnez s3,e66 <_vscanf_core.constprop.0+0x418> - assigned++; - e64: 2b05 addiw s6,s6,1 - e66: 794a ld s2,176(sp) - e68: 79aa ld s3,168(sp) - e6a: 6baa ld s7,136(sp) - e6c: 6c0a ld s8,128(sp) - e6e: 7ce6 ld s9,120(sp) - e70: 7d46 ld s10,112(sp) - while (*p) - e72: c00793e3 bnez a5,a78 <_vscanf_core.constprop.0+0x2a> - e76: b935 j ab2 <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - e78: 019dac23 sw s9,24(s11) - if (c == -1) - e7c: bfc9 j e4e <_vscanf_core.constprop.0+0x400> - e7e: 640e ld s0,192(sp) - e80: 74ea ld s1,184(sp) - e82: 794a ld s2,176(sp) - e84: 79aa ld s3,168(sp) - e86: 7a0a ld s4,160(sp) - e88: 6aea ld s5,152(sp) - e8a: 6baa ld s7,136(sp) - e8c: 6c0a ld s8,128(sp) - e8e: 7da6 ld s11,104(sp) - e90: b135 j abc <_vscanf_core.constprop.0+0x6e> - int width = -1; - e92: 597d li s2,-1 - e94: b975 j b50 <_vscanf_core.constprop.0+0x102> - if (!suppress) - e96: 3c099c63 bnez s3,126e <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - e9a: 67e2 ld a5,24(sp) - e9c: 01a786b3 add a3,a5,s10 - ea0: 00068023 sb zero,0(a3) - while (*p) - ea4: 001bc783 lbu a5,1(s7) - assigned++; - ea8: 2b05 addiw s6,s6,1 - eaa: bf75 j e66 <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - eac: 67a2 ld a5,8(sp) - eae: 0007bd03 ld s10,0(a5) - eb2: 07a1 addi a5,a5,8 - eb4: e43e sd a5,8(sp) - eb6: b741 j e36 <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - eb8: 56fd li a3,-1 - eba: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - ebe: bb11 j bd2 <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - ec0: 56fd li a3,-1 - ec2: 00ddac23 sw a3,24(s11) - return c; - ec6: b3d1 j c8a <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - ec8: fd57869b addiw a3,a5,-43 - ecc: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - ed0: 55fd li a1,-1 - ed2: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - ed6: 2601 sext.w a2,a2 - ed8: ec061be3 bnez a2,dae <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - edc: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - ee0: 018da783 lw a5,24(s11) - ee4: 2207da63 bgez a5,1118 <_vscanf_core.constprop.0+0x6ca> - ee8: 856e mv a0,s11 - eea: aabff0ef jal 994 <_in_char.part.0> - while (c != -1 && i < 63) - eee: 567d li a2,-1 - ef0: 87aa mv a5,a0 - num_buf[i++] = (char)c; - ef2: 4d05 li s10,1 - ef4: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - ef8: 3ac50163 beq a0,a2,129a <_vscanf_core.constprop.0+0x84c> - efc: fce6 sd s9,120(sp) - efe: bd55 j db2 <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - f00: 4c05 li s8,1 - f02: b73d j e30 <_vscanf_core.constprop.0+0x3e2> - f04: 640e ld s0,192(sp) - f06: 74ea ld s1,184(sp) - f08: 794a ld s2,176(sp) - f0a: 79aa ld s3,168(sp) - f0c: 7a0a ld s4,160(sp) - f0e: 6aea ld s5,152(sp) - f10: 6baa ld s7,136(sp) - f12: 6c0a ld s8,128(sp) - f14: 7ce6 ld s9,120(sp) - f16: 7d46 ld s10,112(sp) - f18: 7da6 ld s11,104(sp) - f1a: b64d j abc <_vscanf_core.constprop.0+0x6e> - f1c: 640e ld s0,192(sp) - f1e: 74ea ld s1,184(sp) - f20: 794a ld s2,176(sp) - f22: 79aa ld s3,168(sp) - f24: 7a0a ld s4,160(sp) - f26: 6aea ld s5,152(sp) - f28: 6baa ld s7,136(sp) - f2a: 6c0a ld s8,128(sp) - f2c: 7d46 ld s10,112(sp) - f2e: 7da6 ld s11,104(sp) - f30: b671 j abc <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - f32: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - f36: b9e5 j c2e <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - f38: 57fd li a5,-1 - f3a: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - f3e: bbd9 j d14 <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - f40: f9f3069b addiw a3,t1,-97 - f44: 4795 li a5,5 - f46: 06d7f263 bgeu a5,a3,faa <_vscanf_core.constprop.0+0x55c> - f4a: fbf3031b addiw t1,t1,-65 - f4e: 4795 li a5,5 - f50: 0467fd63 bgeu a5,t1,faa <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - f54: 07800693 li a3,120 - f58: 18d50763 beq a0,a3,10e6 <_vscanf_core.constprop.0+0x698> - f5c: fa850693 addi a3,a0,-88 - f60: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - f64: 4301 li t1,0 - f66: 32061663 bnez a2,1292 <_vscanf_core.constprop.0+0x844> - f6a: 4785 li a5,1 - f6c: 4601 li a2,0 - f6e: d6fd1ce3 bne s10,a5,ce6 <_vscanf_core.constprop.0+0x298> - f72: 02014e03 lbu t3,32(sp) - f76: 03000793 li a5,48 - f7a: d6fe16e3 bne t3,a5,ce6 <_vscanf_core.constprop.0+0x298> - f7e: d60684e3 beqz a3,ce6 <_vscanf_core.constprop.0+0x298> - base = 16; - f82: 4641 li a2,16 - if (width > 0 && i >= width) - f84: d7a919e3 bne s2,s10,cf6 <_vscanf_core.constprop.0+0x2a8> - f88: bb59 j d1e <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - f8a: f9f3069b addiw a3,t1,-97 - f8e: 4795 li a5,5 - f90: 02d7f263 bgeu a5,a3,fb4 <_vscanf_core.constprop.0+0x566> - f94: fbf3031b addiw t1,t1,-65 - f98: 0467f063 bgeu a5,t1,fd8 <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - f9c: 07800693 li a3,120 - fa0: fad51ee3 bne a0,a3,f5c <_vscanf_core.constprop.0+0x50e> - fa4: 4301 li t1,0 - fa6: 4685 li a3,1 - fa8: b7c9 j f6a <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - faa: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - fac: 4681 li a3,0 - if (width > 0 && i >= width) - fae: d3204ee3 bgtz s2,cea <_vscanf_core.constprop.0+0x29c> - fb2: bb35 j cee <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - fb4: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - fb6: 4305 li t1,1 - if (width > 0 && i >= width) - fb8: d32049e3 bgtz s2,cea <_vscanf_core.constprop.0+0x29c> - fbc: bb0d j cee <_vscanf_core.constprop.0+0x2a0> - fbe: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - fc0: 4685 li a3,1 - if (width > 0 && i >= width) - fc2: d32044e3 bgtz s2,cea <_vscanf_core.constprop.0+0x29c> - fc6: bb05 j cf6 <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - fc8: c8099be3 bnez s3,c5e <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - fcc: 67e2 ld a5,24(sp) - fce: 00078023 sb zero,0(a5) - ctx->ungotten = c; - fd2: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - fd6: b171 j c62 <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - fd8: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - fda: 4305 li t1,1 - fdc: b779 j f6a <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - fde: 040d0713 addi a4,s10,64 - fe2: 1014 addi a3,sp,32 - fe4: 96ba add a3,a3,a4 - fe6: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - fea: 00fdac23 sw a5,24(s11) - if (i == 0) - fee: f00d0be3 beqz s10,f04 <_vscanf_core.constprop.0+0x4b6> - ff2: 7ce6 ld s9,120(sp) - if (!suppress) - ff4: d40992e3 bnez s3,d38 <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - ff8: 02014603 lbu a2,32(sp) - ffc: 02d00793 li a5,45 - 1000: 1af60963 beq a2,a5,11b2 <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - 1004: 02b00793 li a5,43 - 1008: 20f60a63 beq a2,a5,121c <_vscanf_core.constprop.0+0x7ce> - 100c: 00005797 auipc a5,0x5 - 1010: 8e47b587 fld fa1,-1820(a5) # 58f0 - 1014: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - 1016: fd06069b addiw a3,a2,-48 - 101a: 0ff6f513 zext.b a0,a3 - 101e: 45a5 li a1,9 - 1020: f20007d3 fmv.d.x fa5,zero - 1024: 02a5e463 bltu a1,a0,104c <_vscanf_core.constprop.0+0x5fe> - 1028: 00005717 auipc a4,0x5 - 102c: 8d073707 fld fa4,-1840(a4) # 58f8 - 1030: 4525 li a0,9 - 1032: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - 1036: d20686d3 fcvt.d.w fa3,a3 - str++; - 103a: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 103c: fd06069b addiw a3,a2,-48 - 1040: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - 1044: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - 1048: feb575e3 bgeu a0,a1,1032 <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - 104c: 02e00693 li a3,46 - 1050: 16d60a63 beq a2,a3,11c4 <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - 1054: 0007c683 lbu a3,0(a5) - 1058: 0df6f693 andi a3,a3,223 - 105c: 04500613 li a2,69 - 1060: 0cc68463 beq a3,a2,1128 <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - 1064: 6722 ld a4,8(sp) - if (len_mod == 1) - 1066: 4685 li a3,1 - return sign * val; - 1068: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - 106c: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - 106e: 0721 addi a4,a4,8 - 1070: e43a sd a4,8(sp) - if (len_mod == 1) - 1072: 6762 ld a4,24(sp) - 1074: 18d70b63 beq a4,a3,120a <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - 1078: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - 107c: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - 107e: 00f7a027 fsw fa5,0(a5) - 1082: b95d j d38 <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - 1084: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - 1088: 018da503 lw a0,24(s11) - 108c: 06055463 bgez a0,10f4 <_vscanf_core.constprop.0+0x6a6> - 1090: 856e mv a0,s11 - 1092: 903ff0ef jal 994 <_in_char.part.0> - num_buf[i++] = (char)c; - 1096: 4d05 li s10,1 - 1098: b101 j c98 <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - 109a: 4581 li a1,0 - 109c: 1008 addi a0,sp,32 - 109e: 696030ef jal 4734 - *va_arg(ap, int64 *) = val; - 10a2: 67a2 ld a5,8(sp) - if (len_mod == 2) - 10a4: 6762 ld a4,24(sp) - 10a6: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - 10a8: 07a1 addi a5,a5,8 - if (len_mod == 2) - 10aa: 16d70363 beq a4,a3,1210 <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - 10ae: 6722 ld a4,8(sp) - else if (len_mod == 1) - 10b0: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - 10b2: 6314 ld a3,0(a4) - else if (len_mod == 1) - 10b4: 6762 ld a4,24(sp) - 10b6: 16c70163 beq a4,a2,1218 <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - 10ba: c288 sw a0,0(a3) - assigned++; - 10bc: 2b05 addiw s6,s6,1 - 10be: e43e sd a5,8(sp) - 10c0: b9a5 j d38 <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - 10c2: 040d0793 addi a5,s10,64 - 10c6: 1018 addi a4,sp,32 - 10c8: 00e785b3 add a1,a5,a4 - 10cc: fc058023 sb zero,-64(a1) - if (i == 0) - 10d0: 7ce6 ld s9,120(sp) - 10d2: b70d j ff4 <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - 10d4: 040d0793 addi a5,s10,64 - 10d8: 1018 addi a4,sp,32 - 10da: 00e78833 add a6,a5,a4 - 10de: fc080023 sb zero,-64(a6) - if (i == 0) - 10e2: 7ce6 ld s9,120(sp) - 10e4: b981 j d34 <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - 10e6: 4301 li t1,0 - 10e8: 4685 li a3,1 - if (width > 0 && i >= width) - 10ea: c12040e3 bgtz s2,cea <_vscanf_core.constprop.0+0x29c> - 10ee: b101 j cee <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - 10f0: 4b01 li s6,0 - 10f2: b2e9 j abc <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - 10f4: 56fd li a3,-1 - 10f6: fce6 sd s9,120(sp) - 10f8: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 10fc: 07800693 li a3,120 - 1100: 4641 li a2,16 - num_buf[i++] = (char)c; - 1102: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1104: badc09e3 beq s8,a3,cb6 <_vscanf_core.constprop.0+0x268> - 1108: 06900693 li a3,105 - 110c: 4629 li a2,10 - num_buf[i++] = (char)c; - 110e: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1110: badc13e3 bne s8,a3,cb6 <_vscanf_core.constprop.0+0x268> - 1114: 4601 li a2,0 - 1116: b645 j cb6 <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - 1118: 56fd li a3,-1 - 111a: fce6 sd s9,120(sp) - 111c: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 1120: 4d05 li s10,1 - 1122: fd57869b addiw a3,a5,-43 - 1126: b171 j db2 <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 1128: 0017c583 lbu a1,1(a5) - 112c: 02d00693 li a3,45 - 1130: 0ed58f63 beq a1,a3,122e <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 1134: 02b00693 li a3,43 - 1138: 10d58e63 beq a1,a3,1254 <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 113c: fd05861b addiw a2,a1,-48 - 1140: 0ff67513 zext.b a0,a2 - 1144: 45a5 li a1,9 - str++; - 1146: 00178693 addi a3,a5,1 - int esign = 1; - 114a: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 114c: 04a5ec63 bltu a1,a0,11a4 <_vscanf_core.constprop.0+0x756> - 1150: 4525 li a0,9 - 1152: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 1156: 0029979b slliw a5,s3,0x2 - 115a: 013787bb addw a5,a5,s3 - 115e: 0017979b slliw a5,a5,0x1 - 1162: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 1166: fd05861b addiw a2,a1,-48 - 116a: 0ff67593 zext.b a1,a2 - str++; - 116e: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 1170: feb571e3 bgeu a0,a1,1152 <_vscanf_core.constprop.0+0x704> - while (eval--) - 1174: fff9879b addiw a5,s3,-1 - 1178: 12098463 beqz s3,12a0 <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 117c: 00004717 auipc a4,0x4 - 1180: 77473687 fld fa3,1908(a4) # 58f0 - 1184: 00004717 auipc a4,0x4 - 1188: 77473707 fld fa4,1908(a4) # 58f8 - while (eval--) - 118c: 56fd li a3,-1 - 118e: 37fd addiw a5,a5,-1 - p *= 10.0; - 1190: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 1194: fed79de3 bne a5,a3,118e <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 1198: 4785 li a5,1 - 119a: 00f80963 beq a6,a5,11ac <_vscanf_core.constprop.0+0x75e> - val /= p; - 119e: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 11a2: b5c9 j 1064 <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 11a4: 00004797 auipc a5,0x4 - 11a8: 74c7b687 fld fa3,1868(a5) # 58f0 - val *= p; - 11ac: 12d7f7d3 fmul.d fa5,fa5,fa3 - 11b0: bd55 j 1064 <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 11b2: 00004797 auipc a5,0x4 - 11b6: 7367b587 fld fa1,1846(a5) # 58e8 - 11ba: 02114603 lbu a2,33(sp) - str++; - 11be: 02110793 addi a5,sp,33 - 11c2: bd91 j 1016 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 11c4: 0017c683 lbu a3,1(a5) - 11c8: 45a5 li a1,9 - str++; - 11ca: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 11cc: fd06861b addiw a2,a3,-48 - 11d0: 0ff67513 zext.b a0,a2 - 11d4: e8a5e2e3 bltu a1,a0,1058 <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 11d8: 00004717 auipc a4,0x4 - 11dc: 72073707 fld fa4,1824(a4) # 58f8 - 11e0: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 11e4: 4525 li a0,9 - val += (*str - '0') / div; - 11e6: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 11ea: 0017c683 lbu a3,1(a5) - str++; - 11ee: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 11f0: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 11f4: fd06861b addiw a2,a3,-48 - 11f8: 0ff67593 zext.b a1,a2 - div *= 10.0; - 11fc: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 1200: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 1204: feb571e3 bgeu a0,a1,11e6 <_vscanf_core.constprop.0+0x798> - 1208: bd81 j 1058 <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 120a: a39c fsd fa5,0(a5) - assigned++; - 120c: 2b05 addiw s6,s6,1 - 120e: b62d j d38 <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 1210: 6722 ld a4,8(sp) - 1212: 6314 ld a3,0(a4) - 1214: e288 sd a0,0(a3) - 1216: b55d j 10bc <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 1218: e288 sd a0,0(a3) - 121a: b54d j 10bc <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 121c: 00004797 auipc a5,0x4 - 1220: 6d47b587 fld fa1,1748(a5) # 58f0 - 1224: 02114603 lbu a2,33(sp) - str++; - 1228: 02110793 addi a5,sp,33 - 122c: b3ed j 1016 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 122e: 0027c583 lbu a1,2(a5) - str++; - 1232: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1236: 4525 li a0,9 - 1238: fd05861b addiw a2,a1,-48 - 123c: 0ff67793 zext.b a5,a2 - esign = -1; - 1240: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 1242: f0f577e3 bgeu a0,a5,1150 <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 1246: 00004797 auipc a5,0x4 - 124a: 6aa7b687 fld fa3,1706(a5) # 58f0 - val /= p; - 124e: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 1252: bd09 j 1064 <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 1254: 0027c583 lbu a1,2(a5) - str++; - 1258: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 125c: 4525 li a0,9 - 125e: fd05861b addiw a2,a1,-48 - 1262: 0ff67793 zext.b a5,a2 - 1266: f2f56fe3 bltu a0,a5,11a4 <_vscanf_core.constprop.0+0x756> - int esign = 1; - 126a: 4805 li a6,1 - 126c: b5d5 j 1150 <_vscanf_core.constprop.0+0x702> - while (*p) - 126e: 001bc783 lbu a5,1(s7) - 1272: bed5 j e66 <_vscanf_core.constprop.0+0x418> - if (!suppress) - 1274: 9e0997e3 bnez s3,c62 <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 1278: 67e2 ld a5,24(sp) - 127a: 00078023 sb zero,0(a5) - 127e: b2d5 j c62 <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 1280: 040d0793 addi a5,s10,64 - 1284: 1018 addi a4,sp,32 - 1286: 97ba add a5,a5,a4 - 1288: fc078023 sb zero,-64(a5) - if (i == 0) - 128c: aa0d14e3 bnez s10,d34 <_vscanf_core.constprop.0+0x2e6> - 1290: b171 j f1c <_vscanf_core.constprop.0+0x4ce> - 1292: 4641 li a2,16 - if (width > 0 && i >= width) - 1294: a5204be3 bgtz s2,cea <_vscanf_core.constprop.0+0x29c> - 1298: bc99 j cee <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 129a: 020100a3 sb zero,33(sp) - if (i == 0) - 129e: bb99 j ff4 <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 12a0: 00004797 auipc a5,0x4 - 12a4: 6507b687 fld fa3,1616(a5) # 58f0 - 12a8: bdc5 j 1198 <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 12aa: 67e2 ld a5,24(sp) - 12ac: 01a786b3 add a3,a5,s10 - 12b0: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 12b4: 00adac23 sw a0,24(s11) - while (*p) - 12b8: 001bc783 lbu a5,1(s7) - 12bc: b6f5 j ea8 <_vscanf_core.constprop.0+0x45a> - -00000000000012be <_out_char>: -{ - 12be: 7179 addi sp,sp,-48 - 12c0: ec26 sd s1,24(sp) - if (ctx->stream) - 12c2: 6d04 ld s1,24(a0) -{ - 12c4: f022 sd s0,32(sp) - 12c6: f406 sd ra,40(sp) - 12c8: 842a mv s0,a0 - 12ca: 872e mv a4,a1 - if (ctx->stream) - 12cc: c0a1 beqz s1,130c <_out_char+0x4e> - 12ce: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 12d0: 41c4a903 lw s2,1052(s1) - 12d4: 4789 li a5,2 - 12d6: 04f90d63 beq s2,a5,1330 <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 12da: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 12de: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 12e2: 0017861b addiw a2,a5,1 - 12e6: 40c4a823 sw a2,1040(s1) - 12ea: 97a6 add a5,a5,s1 - 12ec: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 12f0: 08c6c063 blt a3,a2,1370 <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 12f4: 4785 li a5,1 - 12f6: 04f90a63 beq s2,a5,134a <_out_char+0x8c> - ctx->written++; - 12fa: 681c ld a5,16(s0) - 12fc: 6942 ld s2,16(sp) -} - 12fe: 70a2 ld ra,40(sp) - ctx->written++; - 1300: 0785 addi a5,a5,1 - 1302: e81c sd a5,16(s0) -} - 1304: 7402 ld s0,32(sp) - 1306: 64e2 ld s1,24(sp) - 1308: 6145 addi sp,sp,48 - 130a: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 130c: 6514 ld a3,8(a0) - 130e: 691c ld a5,16(a0) - 1310: ca89 beqz a3,1322 <_out_char+0x64> - 1312: 16fd addi a3,a3,-1 - 1314: 00d7f763 bgeu a5,a3,1322 <_out_char+0x64> - ctx->buf[ctx->written] = c; - 1318: 6114 ld a3,0(a0) - 131a: 97b6 add a5,a5,a3 - 131c: 00b78023 sb a1,0(a5) - ctx->written++; - 1320: 691c ld a5,16(a0) - 1322: 0785 addi a5,a5,1 -} - 1324: 70a2 ld ra,40(sp) - ctx->written++; - 1326: e81c sd a5,16(s0) -} - 1328: 7402 ld s0,32(sp) - 132a: 64e2 ld s1,24(sp) - 132c: 6145 addi sp,sp,48 - 132e: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 1330: 4088 lw a0,0(s1) - 1332: 4605 li a2,1 - 1334: 00f10593 addi a1,sp,15 - char ch = (char)c; - 1338: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 133c: e8bfe0ef jal 1c6 - 1340: 4785 li a5,1 - 1342: faf50ce3 beq a0,a5,12fa <_out_char+0x3c> - stream->error = 1; - 1346: c49c sw a5,8(s1) - return EOF; - 1348: bf4d j 12fa <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 134a: 47a9 li a5,10 - 134c: faf597e3 bne a1,a5,12fa <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 1350: fac055e3 blez a2,12fa <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 1354: 4088 lw a0,0(s1) - 1356: 01048593 addi a1,s1,16 - 135a: e6dfe0ef jal 1c6 - if (ret < stream->buf_write_pos) - 135e: 4104a783 lw a5,1040(s1) - 1362: 02f55063 bge a0,a5,1382 <_out_char+0xc4> - stream->error = 1; - 1366: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 136a: 4004a823 sw zero,1040(s1) - return EOF; - 136e: b771 j 12fa <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 1370: 4088 lw a0,0(s1) - 1372: 01048593 addi a1,s1,16 - 1376: e51fe0ef jal 1c6 - if (ret < stream->buf_write_pos) - 137a: 4104a783 lw a5,1040(s1) - 137e: 00f54563 blt a0,a5,1388 <_out_char+0xca> - stream->buf_write_pos = 0; - 1382: 4004a823 sw zero,1040(s1) - 1386: bf95 j 12fa <_out_char+0x3c> - stream->error = 1; - 1388: 4785 li a5,1 - 138a: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 138c: 4004a823 sw zero,1040(s1) - return EOF; - 1390: b7ad j 12fa <_out_char+0x3c> - -0000000000001392 : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 1392: 00005797 auipc a5,0x5 - 1396: 6ee78793 addi a5,a5,1774 # 6a80 - 139a: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 139e: 0ca786a3 sb a0,205(a5) -} - 13a2: 8082 ret - -00000000000013a4 : - - 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) -{ - 13a4: 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; - 13a8: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13ac: 252523b7 lui t2,0x25252 - 13b0: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524abad> -{ - 13b4: 29913c23 sd s9,664(sp) - 13b8: 29b13423 sd s11,648(sp) - int tlen = 0; - 13bc: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13be: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 13c2: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800708> -{ - 13c6: 2e813023 sd s0,736(sp) - 13ca: 2c913c23 sd s1,728(sp) - 13ce: 2d213823 sd s2,720(sp) - 13d2: 2d313423 sd s3,712(sp) - 13d6: 2b713423 sd s7,680(sp) - 13da: 2b813023 sd s8,672(sp) - 13de: 29a13823 sd s10,656(sp) - 13e2: 2e113423 sd ra,744(sp) - 13e6: 8d66 mv s10,s9 - 13e8: 8432 mv s0,a2 - 13ea: 8c9e mv s9,t2 - 13ec: 89aa mv s3,a0 - 13ee: e42e sd a1,8(sp) - 13f0: 84b6 mv s1,a3 - 13f2: 8bba mv s7,a4 - 13f4: fc02 sd zero,56(sp) - for (;;) { - 13f6: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 13f8: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8587> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 13fc: 20000c13 li s8,512 - 1400: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 1402: 0034f793 andi a5,s1,3 - 1406: c7a9 beqz a5,1450 - if (f[0] == '%') - 1408: 0004c783 lbu a5,0(s1) - 140c: 02500713 li a4,37 - 1410: 0ee78263 beq a5,a4,14f4 - if (f[0] == 0) - 1414: cbd9 beqz a5,14aa - stbsp__chk_cb_buf(1); - 1416: 02098663 beqz s3,1442 - 141a: 4124063b subw a2,s0,s2 - 141e: 1fe00713 li a4,510 - 1422: 02c75063 bge a4,a2,1442 - 1426: 65a2 ld a1,8(sp) - 1428: 854a mv a0,s2 - 142a: e81e sd t2,16(sp) - 142c: 00cd0d3b addw s10,s10,a2 - 1430: 9982 jalr s3 - 1432: 892a mv s2,a0 - 1434: e119 bnez a0,143a - 1436: 0200106f j 2456 - *bf++ = f[0]; - 143a: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 143e: 63c2 ld t2,16(sp) - 1440: 842a mv s0,a0 - ++f; - 1442: 0485 addi s1,s1,1 - *bf++ = f[0]; - 1444: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 1448: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 144c: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 144e: ffcd bnez a5,1408 - v = *(stbsp__uint32 *)f; - 1450: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 1452: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1456: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 145a: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 145e: 01b7073b addw a4,a4,s11 - 1462: 8f7d and a4,a4,a5 - 1464: 2701 sext.w a4,a4 - 1466: f34d bnez a4,1408 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1468: 460d li a2,3 - 146a: a805 j 149a - if (callback) - 146c: 00098863 beqz s3,147c - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1470: 412407b3 sub a5,s0,s2 - 1474: 40fc07bb subw a5,s8,a5 - 1478: f8f658e3 bge a2,a5,1408 - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 147c: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 147e: 40d4 lw a3,4(s1) - } - bf += 4; - 1480: 0411 addi s0,s0,4 - f += 4; - 1482: 0491 addi s1,s1,4 - c = (~v) & 0x80808080; - 1484: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1488: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 148c: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1490: 01b7073b addw a4,a4,s11 - 1494: 8f7d and a4,a4,a5 - 1496: 2701 sext.w a4,a4 - 1498: fb25 bnez a4,1408 - if ((v - 0x01010101) & c) - 149a: 01b6873b addw a4,a3,s11 - 149e: 8ff9 and a5,a5,a4 - 14a0: 2781 sext.w a5,a5 - 14a2: d7e9 beqz a5,146c - if (f[0] == 0) - 14a4: 0004c783 lbu a5,0(s1) - 14a8: f7bd bnez a5,1416 -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 14aa: 8cea mv s9,s10 - 14ac: 412404bb subw s1,s0,s2 - if (!callback) - 14b0: 70098563 beqz s3,1bba - stbsp__flush_cb(); - 14b4: 00905663 blez s1,14c0 - 14b8: 65a2 ld a1,8(sp) - 14ba: 8626 mv a2,s1 - 14bc: 854a mv a0,s2 - 14be: 9982 jalr s3 - 14c0: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 14c4: 2e813083 ld ra,744(sp) - 14c8: 2e013403 ld s0,736(sp) - 14cc: 2d813483 ld s1,728(sp) - 14d0: 2d013903 ld s2,720(sp) - 14d4: 2c813983 ld s3,712(sp) - 14d8: 2a813b83 ld s7,680(sp) - 14dc: 2a013c03 ld s8,672(sp) - 14e0: 29013d03 ld s10,656(sp) - 14e4: 28813d83 ld s11,648(sp) - 14e8: 8566 mv a0,s9 - 14ea: 29813c83 ld s9,664(sp) - 14ee: 2f010113 addi sp,sp,752 - 14f2: 8082 ret - 14f4: 2d413023 sd s4,704(sp) - 14f8: 2b513c23 sd s5,696(sp) - 14fc: 2b613823 sd s6,688(sp) - tz = 0; - 1500: 00248693 addi a3,s1,2 - fl = 0; - 1504: 4e01 li t3,0 - switch (f[0]) { - 1506: 03f00593 li a1,63 - 150a: 00004617 auipc a2,0x4 - 150e: d0660613 addi a2,a2,-762 # 5210 <_GLOBAL__sub_I__ZSt3cin+0x14a> - 1512: fff6c783 lbu a5,-1(a3) - 1516: fff68493 addi s1,a3,-1 - 151a: fe07871b addiw a4,a5,-32 - 151e: 0ff77713 zext.b a4,a4 - 1522: 00e5ec63 bltu a1,a4,153a - 1526: 070a slli a4,a4,0x2 - 1528: 9732 add a4,a4,a2 - 152a: 4318 lw a4,0(a4) - 152c: 9732 add a4,a4,a2 - 152e: 8702 jr a4 - if (f[0] == '*') { - 1530: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 1534: 010e6e13 ori t3,t3,16 - ++f; - 1538: 0485 addi s1,s1,1 - if (f[0] == '*') { - 153a: 02a00713 li a4,42 - 153e: 0ce79163 bne a5,a4,1600 - fw = va_arg(va, stbsp__uint32); - 1542: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 1546: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 154a: 0ba1 addi s7,s7,8 - ++f; - 154c: 0485 addi s1,s1,1 - if (f[0] == '.') { - 154e: 02e00713 li a4,46 - pr = -1; - 1552: 58fd li a7,-1 - if (f[0] == '.') { - 1554: 0ee78663 beq a5,a4,1640 - switch (f[0]) { - 1558: 04900713 li a4,73 - 155c: 10e78263 beq a5,a4,1660 - 1560: f987871b addiw a4,a5,-104 - 1564: 0ff77713 zext.b a4,a4 - 1568: 46c9 li a3,18 - 156a: 02e6e063 bltu a3,a4,158a - 156e: 00004697 auipc a3,0x4 - 1572: da268693 addi a3,a3,-606 # 5310 <_GLOBAL__sub_I__ZSt3cin+0x24a> - 1576: 070a slli a4,a4,0x2 - 1578: 9736 add a4,a4,a3 - 157a: 4318 lw a4,0(a4) - 157c: 9736 add a4,a4,a3 - 157e: 8702 jr a4 - if (f[0] == 'h') - 1580: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 1584: 020e6e13 ori t3,t3,32 - ++f; - 1588: 0485 addi s1,s1,1 - switch (f[0]) { - 158a: fbf7871b addiw a4,a5,-65 - 158e: 0ff77713 zext.b a4,a4 - 1592: 03700693 li a3,55 - 1596: 0ee6ea63 bltu a3,a4,168a - 159a: 00004697 auipc a3,0x4 - 159e: dc268693 addi a3,a3,-574 # 535c <_GLOBAL__sub_I__ZSt3cin+0x296> - 15a2: 070a slli a4,a4,0x2 - 15a4: 9736 add a4,a4,a3 - 15a6: 4318 lw a4,0(a4) - 15a8: 9736 add a4,a4,a3 - 15aa: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 15ac: 400e6e13 ori t3,t3,1024 - continue; - 15b0: 0685 addi a3,a3,1 - 15b2: b785 j 1512 - fl |= STBSP__LEFTJUST; - 15b4: 001e6e13 ori t3,t3,1 - continue; - 15b8: 0685 addi a3,a3,1 - 15ba: bfa1 j 1512 - fl |= STBSP__LEADINGPLUS; - 15bc: 002e6e13 ori t3,t3,2 - continue; - 15c0: 0685 addi a3,a3,1 - 15c2: bf81 j 1512 - fl |= STBSP__TRIPLET_COMMA; - 15c4: 040e6e13 ori t3,t3,64 - continue; - 15c8: 0685 addi a3,a3,1 - 15ca: b7a1 j 1512 - if (fl & STBSP__METRIC_SUFFIX) { - 15cc: 100e7793 andi a5,t3,256 - 15d0: 8772 mv a4,t3 - 15d2: 56078363 beqz a5,1b38 - if (fl & STBSP__METRIC_1024) { - 15d6: 6785 lui a5,0x1 - 15d8: 034e1513 slli a0,t3,0x34 - 15dc: 80078793 addi a5,a5,-2048 # 800 - 15e0: 5c055863 bgez a0,1bb0 - fl |= STBSP__METRIC_JEDEC; - 15e4: 6785 lui a5,0x1 - 15e6: 8f5d or a4,a4,a5 - 15e8: 00070e1b sext.w t3,a4 - 15ec: 0685 addi a3,a3,1 - 15ee: b715 j 1512 - fl |= STBSP__LEADING_0X; - 15f0: 008e6e13 ori t3,t3,8 - continue; - 15f4: 0685 addi a3,a3,1 - 15f6: bf31 j 1512 - fl |= STBSP__LEADINGSPACE; - 15f8: 004e6e13 ori t3,t3,4 - continue; - 15fc: 0685 addi a3,a3,1 - 15fe: bf11 j 1512 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1600: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x582> - 1604: 0ff77713 zext.b a4,a4 - 1608: 4625 li a2,9 - fw = 0; - 160a: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 160c: 46a5 li a3,9 - 160e: f4e660e3 bltu a2,a4,154e - fw = fw * 10 + f[0] - '0'; - 1612: 002b171b slliw a4,s6,0x2 - 1616: 0167073b addw a4,a4,s6 - 161a: 0017171b slliw a4,a4,0x1 - f++; - 161e: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 1620: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1622: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 1626: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 162a: fd07871b addiw a4,a5,-48 - 162e: 0ff77713 zext.b a4,a4 - 1632: fee6f0e3 bgeu a3,a4,1612 - if (f[0] == '.') { - 1636: 02e00713 li a4,46 - pr = -1; - 163a: 58fd li a7,-1 - if (f[0] == '.') { - 163c: f0e79ee3 bne a5,a4,1558 - if (f[0] == '*') { - 1640: 0014c783 lbu a5,1(s1) - 1644: 02a00713 li a4,42 - 1648: 52e79763 bne a5,a4,1b76 - while ((f[0] >= '0') && (f[0] <= '9')) { - 164c: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 1650: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 1654: 000ba883 lw a7,0(s7) - ++f; - 1658: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 165a: 0ba1 addi s7,s7,8 - switch (f[0]) { - 165c: f0e792e3 bne a5,a4,1560 - if ((f[1] == '6') && (f[2] == '4')) { - 1660: 0014c783 lbu a5,1(s1) - 1664: 03600713 li a4,54 - 1668: 00e79463 bne a5,a4,1670 - 166c: 1e60106f j 2852 - } else if ((f[1] == '3') && (f[2] == '2')) { - 1670: 03300713 li a4,51 - 1674: 6ae796e3 bne a5,a4,2520 - 1678: 0024c683 lbu a3,2(s1) - 167c: 03200713 li a4,50 - 1680: 00e69463 bne a3,a4,1688 - 1684: 0ae0106f j 2732 - ++f; - 1688: 0485 addi s1,s1,1 - *s = f[0]; - 168a: 26f10fa3 sb a5,639(sp) - l = 1; - 168e: 4785 li a5,1 - 1690: d0be sw a5,96(sp) - lead[0] = 0; - 1692: 06010423 sb zero,104(sp) - tail[0] = 0; - 1696: 06010823 sb zero,112(sp) - dp = 0; - 169a: d282 sw zero,100(sp) - 169c: e0de sd s7,64(sp) - 169e: 4701 li a4,0 - 16a0: 4301 li t1,0 - 16a2: 4f81 li t6,0 - 16a4: 4685 li a3,1 - 16a6: 4a01 li s4,0 - cs = 0; - 16a8: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 16aa: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 16ae: 4e01 li t3,0 - tz = 0; - 16b0: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 16b2: 010e7793 andi a5,t3,16 - 16b6: 40078ee3 beqz a5,22d2 - pr = (fw > pr) ? fw : pr; - 16ba: 87ba mv a5,a4 - 16bc: 00675363 bge a4,t1,16c2 - 16c0: 879a mv a5,t1 - 16c2: 0007871b sext.w a4,a5 - fw = 0; - 16c6: 4301 li t1,0 - if (fw + pr) { - 16c8: 62070563 beqz a4,1cf2 - sn = lead + 1; - 16cc: 06910793 addi a5,sp,105 - 16d0: fcbe sd a5,120(sp) - while (lead[0]) { - 16d2: 0a0a0863 beqz s4,1782 - stbsp__cb_buf_clamp(i, lead[0]); - 16d6: f026 sd s1,32(sp) - 16d8: f436 sd a3,40(sp) - 16da: 854a mv a0,s2 - 16dc: 86d2 mv a3,s4 - 16de: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 16e0: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 16e4: 89be mv s3,a5 - 16e6: 20000b13 li s6,512 - 16ea: 87a2 mv a5,s0 - 16ec: e846 sd a7,16(sp) - 16ee: 846a mv s0,s10 - 16f0: ec7e sd t6,24(sp) - 16f2: 8d6e mv s10,s11 - 16f4: f872 sd t3,48(sp) - 16f6: 8de6 mv s11,s9 - 16f8: 8a3a mv s4,a4 - 16fa: e496 sd t0,72(sp) - 16fc: 891a mv s2,t1 - 16fe: 8c9e mv s9,t2 - 1700: 0006871b sext.w a4,a3 - 1704: 2e0482e3 beqz s1,21e8 - 1708: 40a7863b subw a2,a5,a0 - 170c: 40cb083b subw a6,s6,a2 - 1710: 85c2 mv a1,a6 - 1712: 01075363 bge a4,a6,1718 - 1716: 85ba mv a1,a4 - lead[0] -= (char)i; - 1718: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 171a: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 171e: 06d10423 sb a3,104(sp) - while (i) { - 1722: c70d beqz a4,174c - 1724: 7866 ld a6,120(sp) - 1726: 02071593 slli a1,a4,0x20 - 172a: 9181 srli a1,a1,0x20 - 172c: 00b78633 add a2,a5,a1 - 1730: 8742 mv a4,a6 - *bf++ = *sn++; - 1732: 00074683 lbu a3,0(a4) - 1736: 0785 addi a5,a5,1 - while (i) { - 1738: 0705 addi a4,a4,1 - *bf++ = *sn++; - 173a: fed78fa3 sb a3,-1(a5) - while (i) { - 173e: fec79ae3 bne a5,a2,1732 - 1742: 982e add a6,a6,a1 - 1744: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1746: c899 beqz s1,175c - 1748: 40a7863b subw a2,a5,a0 - 174c: 00cbd863 bge s7,a2,175c - 1750: 65a2 ld a1,8(sp) - 1752: 9c31 addw s0,s0,a2 - 1754: 9482 jalr s1 - 1756: 34050ee3 beqz a0,22b2 - 175a: 87aa mv a5,a0 - while (lead[0]) { - 175c: 06814683 lbu a3,104(sp) - 1760: f2c5 bnez a3,1700 - 1762: 83e6 mv t2,s9 - 1764: 68c2 ld a7,16(sp) - 1766: 8cee mv s9,s11 - 1768: 6fe2 ld t6,24(sp) - 176a: 8dea mv s11,s10 - 176c: 76a2 ld a3,40(sp) - 176e: 8d22 mv s10,s0 - 1770: 7e42 ld t3,48(sp) - 1772: 843e mv s0,a5 - 1774: 62a6 ld t0,72(sp) - 1776: 87ce mv a5,s3 - 1778: 89a6 mv s3,s1 - 177a: 7482 ld s1,32(sp) - 177c: 834a mv t1,s2 - 177e: 8752 mv a4,s4 - 1780: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 1782: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 1786: 0182d61b srliw a2,t0,0x18 - 178a: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 178e: 4a01 li s4,0 - 1790: 000b0e63 beqz s6,17ac - cs &= 0xffffff; - 1794: 02829a13 slli s4,t0,0x28 - 1798: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 179c: 00ea0a3b addw s4,s4,a4 - 17a0: 0016059b addiw a1,a2,1 - 17a4: 02ba7a3b remuw s4,s4,a1 - 17a8: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 17ac: 0ce05763 blez a4,187a - *(stbsp__uint32 *)bf = 0x30303030; - 17b0: 30303837 lui a6,0x30303 - 17b4: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb6b8> - 17b8: f026 sd s1,32(sp) - 17ba: 854a mv a0,s2 - 17bc: 84da mv s1,s6 - 17be: 895e mv s2,s7 - 17c0: e4d6 sd s5,72(sp) - 17c2: 8b4e mv s6,s3 - 17c4: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 17c6: 1fe00293 li t0,510 - 17ca: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 17cc: 00005f17 auipc t5,0x5 - 17d0: 2b4f0f13 addi t5,t5,692 # 6a80 - 17d4: 8de6 mv s11,s9 - *bf++ = '0'; - 17d6: 03000e93 li t4,48 - 17da: e846 sd a7,16(sp) - 17dc: ec7e sd t6,24(sp) - 17de: f436 sd a3,40(sp) - 17e0: f872 sd t3,48(sp) - 17e2: e89a sd t1,80(sp) - 17e4: 89ba mv s3,a4 - 17e6: ecbe sd a5,88(sp) - 17e8: 8bc2 mv s7,a6 - 17ea: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 17ec: 240b0ee3 beqz s6,2248 - 17f0: 40a407b3 sub a5,s0,a0 - 17f4: 40fc063b subw a2,s8,a5 - 17f8: 87b2 mv a5,a2 - 17fa: 00c9d363 bge s3,a2,1800 - 17fe: 87ce mv a5,s3 - 1800: 0007859b sext.w a1,a5 - pr -= i; - 1804: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 1808: 32048c63 beqz s1,1b40 - while (i) { - 180c: 34058a63 beqz a1,1b60 - 1810: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 1812: 0cdf4603 lbu a2,205(t5) - 1816: 9181 srli a1,a1,0x20 - 1818: 95a2 add a1,a1,s0 - 181a: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 181c: c481 beqz s1,1824 - 181e: 1d4901e3 beq s2,s4,21e0 - 1822: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 1824: 03000793 li a5,48 - 1828: fef40fa3 sb a5,-1(s0) - while (i) { - 182c: fe8597e3 bne a1,s0,181a - stbsp__chk_cb_buf(1); - 1830: 320b0b63 beqz s6,1b66 - 1834: 40a5863b subw a2,a1,a0 - 1838: 32c2d763 bge t0,a2,1b66 - 183c: 65a2 ld a1,8(sp) - 183e: 01560abb addw s5,a2,s5 - 1842: 9b02 jalr s6 - 1844: 3a050ce3 beqz a0,23fc - 1848: 842a mv s0,a0 - 184a: 1fe00293 li t0,510 - 184e: 00005f17 auipc t5,0x5 - 1852: 232f0f13 addi t5,t5,562 # 6a80 - 1856: 03000e93 li t4,48 - while (pr > 0) { - 185a: f93049e3 bgtz s3,17ec - while (lead[0]) { - 185e: 83e6 mv t2,s9 - 1860: 68c2 ld a7,16(sp) - 1862: 8cee mv s9,s11 - 1864: 6fe2 ld t6,24(sp) - 1866: 8dea mv s11,s10 - 1868: 7482 ld s1,32(sp) - 186a: 8d56 mv s10,s5 - 186c: 76a2 ld a3,40(sp) - 186e: 7e42 ld t3,48(sp) - 1870: 6346 ld t1,80(sp) - 1872: 67e6 ld a5,88(sp) - 1874: 6aa6 ld s5,72(sp) - 1876: 892a mv s2,a0 - 1878: 89da mv s3,s6 - 187a: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 187e: fcbe sd a5,120(sp) - while (lead[0]) { - 1880: 0a0a0263 beqz s4,1924 - stbsp__cb_buf_clamp(i, lead[0]); - 1884: ec26 sd s1,24(sp) - 1886: f036 sd a3,32(sp) - 1888: 854a mv a0,s2 - 188a: 86d2 mv a3,s4 - 188c: 84ce mv s1,s3 - 188e: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 1890: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 1894: 846a mv s0,s10 - 1896: 20000b13 li s6,512 - 189a: 8d6e mv s10,s11 - 189c: e846 sd a7,16(sp) - 189e: 8de6 mv s11,s9 - 18a0: 8a7e mv s4,t6 - 18a2: 8972 mv s2,t3 - 18a4: 899a mv s3,t1 - 18a6: 8c9e mv s9,t2 - 18a8: 0006871b sext.w a4,a3 - 18ac: 140482e3 beqz s1,21f0 - 18b0: 40a7863b subw a2,a5,a0 - 18b4: 40cb083b subw a6,s6,a2 - 18b8: 85c2 mv a1,a6 - 18ba: 01075363 bge a4,a6,18c0 - 18be: 85ba mv a1,a4 - lead[0] -= (char)i; - 18c0: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 18c2: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 18c6: 06d10423 sb a3,104(sp) - while (i) { - 18ca: c70d beqz a4,18f4 - 18cc: 7866 ld a6,120(sp) - 18ce: 02071593 slli a1,a4,0x20 - 18d2: 9181 srli a1,a1,0x20 - 18d4: 00b78633 add a2,a5,a1 - 18d8: 8742 mv a4,a6 - *bf++ = *sn++; - 18da: 00074683 lbu a3,0(a4) - 18de: 0785 addi a5,a5,1 - while (i) { - 18e0: 0705 addi a4,a4,1 - *bf++ = *sn++; - 18e2: fed78fa3 sb a3,-1(a5) - while (i) { - 18e6: fec79ae3 bne a5,a2,18da - 18ea: 982e add a6,a6,a1 - 18ec: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 18ee: c899 beqz s1,1904 - 18f0: 40a7863b subw a2,a5,a0 - 18f4: 00cbd863 bge s7,a2,1904 - 18f8: 65a2 ld a1,8(sp) - 18fa: 9c31 addw s0,s0,a2 - 18fc: 9482 jalr s1 - 18fe: 1a050ae3 beqz a0,22b2 - 1902: 87aa mv a5,a0 - while (lead[0]) { - 1904: 06814683 lbu a3,104(sp) - 1908: f2c5 bnez a3,18a8 - 190a: 834e mv t1,s3 - 190c: 68c2 ld a7,16(sp) - 190e: 89a6 mv s3,s1 - 1910: 7682 ld a3,32(sp) - 1912: 64e2 ld s1,24(sp) - 1914: 8e4a mv t3,s2 - 1916: 83e6 mv t2,s9 - 1918: 8fd2 mv t6,s4 - 191a: 8cee mv s9,s11 - 191c: 892a mv s2,a0 - 191e: 8dea mv s11,s10 - 1920: 8d22 mv s10,s0 - 1922: 843e mv s0,a5 - while (n) { - 1924: c6f9 beqz a3,19f2 - STBSP__UNALIGNED(while (i >= 4) { - 1926: ec26 sd s1,24(sp) - 1928: 854a mv a0,s2 - 192a: 84d6 mv s1,s5 - 192c: 896a mv s2,s10 - 192e: 87a2 mv a5,s0 - 1930: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 1932: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 1936: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 1938: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 193c: 4a0d li s4,3 - 193e: e87e sd t6,16(sp) - 1940: f072 sd t3,32(sp) - 1942: 8ac6 mv s5,a7 - 1944: f41a sd t1,40(sp) - 1946: 8436 mv s0,a3 - 1948: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 194a: 0004071b sext.w a4,s0 - 194e: 100982e3 beqz s3,2252 - 1952: 40a78633 sub a2,a5,a0 - 1956: 40cb05bb subw a1,s6,a2 - 195a: 862e mv a2,a1 - 195c: 00b75363 bge a4,a1,1962 - 1960: 863a mv a2,a4 - 1962: 0006071b sext.w a4,a2 - n -= i; - 1966: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 1968: 14ea50e3 bge s4,a4,22a8 - 196c: ffc70f1b addiw t5,a4,-4 - 1970: 002f5e9b srliw t4,t5,0x2 - 1974: 001e8e1b addiw t3,t4,1 - 1978: 0e0a slli t3,t3,0x2 - 197a: 01c785b3 add a1,a5,t3 - 197e: 8626 mv a2,s1 - 1980: 4218 lw a4,0(a2) - 1982: 0791 addi a5,a5,4 - 1984: 0611 addi a2,a2,4 - 1986: 2701 sext.w a4,a4 - 1988: fee7ae23 sw a4,-4(a5) - 198c: feb79ae3 bne a5,a1,1980 - 1990: 002e9e9b slliw t4,t4,0x2 - 1994: 41df073b subw a4,t5,t4 - while (i) { - 1998: 94f2 add s1,s1,t3 - 199a: c31d beqz a4,19c0 - 199c: 8626 mv a2,s1 - 199e: 87ae mv a5,a1 - 19a0: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 19a4: 00064e83 lbu t4,0(a2) - 19a8: 0785 addi a5,a5,1 - while (i) { - 19aa: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 19ae: ffd78fa3 sb t4,-1(a5) - 19b2: 0605 addi a2,a2,1 - while (i) { - 19b4: ffcf18e3 bne t5,t3,19a4 - 19b8: 1702 slli a4,a4,0x20 - 19ba: 9301 srli a4,a4,0x20 - 19bc: 95ba add a1,a1,a4 - 19be: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 19c0: 1a098763 beqz s3,1b6e - 19c4: 40a5863b subw a2,a1,a0 - 19c8: 1acbd363 bge s7,a2,1b6e - 19cc: 65a2 ld a1,8(sp) - 19ce: 0126093b addw s2,a2,s2 - 19d2: 9982 jalr s3 - 19d4: 20050be3 beqz a0,23ea - 19d8: 87aa mv a5,a0 - while (n) { - 19da: f825 bnez s0,194a - 19dc: 6fc2 ld t6,16(sp) - 19de: 64e2 ld s1,24(sp) - 19e0: 7e02 ld t3,32(sp) - 19e2: 7322 ld t1,40(sp) - 19e4: 83e6 mv t2,s9 - 19e6: 88d6 mv a7,s5 - 19e8: 8cee mv s9,s11 - 19ea: 843e mv s0,a5 - 19ec: 8dea mv s11,s10 - 19ee: 8d4a mv s10,s2 - 19f0: 892a mv s2,a0 - while (tz) { - 19f2: 08088863 beqz a7,1a82 - *(stbsp__uint32 *)bf = 0x30303030; - 19f6: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 19fa: 03000a13 li s4,48 - while (i >= 4) { - 19fe: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 1a00: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 1a04: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb6b8> - stbsp__cb_buf_clamp(i, tz); - 1a08: 20000b93 li s7,512 - 1a0c: 040989e3 beqz s3,225e - 1a10: 41240633 sub a2,s0,s2 - 1a14: 40cb87bb subw a5,s7,a2 - 1a18: 873e mv a4,a5 - 1a1a: 00f8d363 bge a7,a5,1a20 - 1a1e: 8746 mv a4,a7 - 1a20: 0007079b sext.w a5,a4 - tz -= i; - 1a24: 40e888bb subw a7,a7,a4 - while (i) { - 1a28: 08078ee3 beqz a5,22c4 - if ((((stbsp__uintptr)bf) & 3) == 0) - 1a2c: 00347713 andi a4,s0,3 - 1a30: e719 bnez a4,1a3e - 1a32: 0390006f j 226a - 1a36: 00347713 andi a4,s0,3 - 1a3a: 7a070f63 beqz a4,21f8 - *bf++ = '0'; - 1a3e: 01440023 sb s4,0(s0) - --i; - 1a42: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 1a44: 0405 addi s0,s0,1 - while (i) { - 1a46: fbe5 bnez a5,1a36 - stbsp__chk_cb_buf(1); - 1a48: 02098b63 beqz s3,1a7e - 1a4c: 4124063b subw a2,s0,s2 - 1a50: 02c6d763 bge a3,a2,1a7e - 1a54: 65a2 ld a1,8(sp) - 1a56: 854a mv a0,s2 - 1a58: f81e sd t2,48(sp) - 1a5a: f41a sd t1,40(sp) - 1a5c: f072 sd t3,32(sp) - 1a5e: ec7e sd t6,24(sp) - 1a60: e846 sd a7,16(sp) - 1a62: 00cd0d3b addw s10,s10,a2 - 1a66: 9982 jalr s3 - 1a68: 892a mv s2,a0 - 1a6a: 1a0502e3 beqz a0,240e - 1a6e: 73c2 ld t2,48(sp) - 1a70: 7322 ld t1,40(sp) - 1a72: 7e02 ld t3,32(sp) - 1a74: 6fe2 ld t6,24(sp) - 1a76: 68c2 ld a7,16(sp) - 1a78: 842a mv s0,a0 - 1a7a: 1fe00693 li a3,510 - while (tz) { - 1a7e: f80897e3 bnez a7,1a0c - sn = tail + 1; - 1a82: 07110793 addi a5,sp,113 - 1a86: fcbe sd a5,120(sp) - while (tail[0]) { - 1a88: 080f8763 beqz t6,1b16 - stbsp__cb_buf_clamp(i, tail[0]); - 1a8c: 854a mv a0,s2 - 1a8e: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 1a90: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 1a94: 8d4e mv s10,s3 - 1a96: 20000a13 li s4,512 - 1a9a: 8bf2 mv s7,t3 - 1a9c: 891a mv s2,t1 - 1a9e: 899e mv s3,t2 - 1aa0: 000f879b sext.w a5,t6 - 1aa4: 7c0d0863 beqz s10,2274 - 1aa8: 40a4063b subw a2,s0,a0 - 1aac: 40ca06bb subw a3,s4,a2 - 1ab0: 8736 mv a4,a3 - 1ab2: 00d7d363 bge a5,a3,1ab8 - 1ab6: 873e mv a4,a5 - tail[0] -= (char)i; - 1ab8: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 1abc: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 1ac0: 07f10823 sb t6,112(sp) - while (i) { - 1ac4: c795 beqz a5,1af0 - 1ac6: 75e6 ld a1,120(sp) - 1ac8: 02079613 slli a2,a5,0x20 - 1acc: 9201 srli a2,a2,0x20 - 1ace: 00c406b3 add a3,s0,a2 - 1ad2: 87ae mv a5,a1 - *bf++ = *sn++; - 1ad4: 0007c703 lbu a4,0(a5) - 1ad8: 0405 addi s0,s0,1 - while (i) { - 1ada: 0785 addi a5,a5,1 - *bf++ = *sn++; - 1adc: fee40fa3 sb a4,-1(s0) - while (i) { - 1ae0: fed41ae3 bne s0,a3,1ad4 - 1ae4: 95b2 add a1,a1,a2 - 1ae6: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 1ae8: 000d0d63 beqz s10,1b02 - 1aec: 40a4063b subw a2,s0,a0 - 1af0: 00cad963 bge s5,a2,1b02 - 1af4: 65a2 ld a1,8(sp) - 1af6: 00cb0b3b addw s6,s6,a2 - 1afa: 9d02 jalr s10 - 1afc: 200509e3 beqz a0,250e - 1b00: 842a mv s0,a0 - while (tail[0]) { - 1b02: 07014f83 lbu t6,112(sp) - 1b06: f80f9de3 bnez t6,1aa0 - 1b0a: 834a mv t1,s2 - 1b0c: 83ce mv t2,s3 - 1b0e: 8e5e mv t3,s7 - 1b10: 89ea mv s3,s10 - 1b12: 892a mv s2,a0 - 1b14: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 1b16: 001e7e13 andi t3,t3,1 - 1b1a: 000e0663 beqz t3,1b26 - if (fw > 0) { - 1b1e: 00605463 blez t1,1b26 - 1b22: 0300106f j 2b52 - for (;;) { - 1b26: 6b86 ld s7,64(sp) - 1b28: 2c013a03 ld s4,704(sp) - 1b2c: 2b813a83 ld s5,696(sp) - 1b30: 2b013b03 ld s6,688(sp) - ++f; - 1b34: 0485 addi s1,s1,1 - for (;;) { - 1b36: b0f1 j 1402 - fl |= STBSP__METRIC_SUFFIX; - 1b38: 100e6e13 ori t3,t3,256 - continue; - 1b3c: 0685 addi a3,a3,1 - 1b3e: bad1 j 1512 - while (i) { - 1b40: 0e0580e3 beqz a1,2420 - if ((((stbsp__uintptr)bf) & 3) == 0) - 1b44: 00347793 andi a5,s0,3 - 1b48: e799 bnez a5,1b56 - 1b4a: 0dd0006f j 2426 - 1b4e: 00347793 andi a5,s0,3 - 1b52: 72078463 beqz a5,227a - *bf++ = '0'; - 1b56: 01d40023 sb t4,0(s0) - --i; - 1b5a: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 1b5c: 0405 addi s0,s0,1 - while (i) { - 1b5e: f9e5 bnez a1,1b4e - while (i) { - 1b60: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 1b62: cc0b19e3 bnez s6,1834 - 1b66: 842e mv s0,a1 - while (pr > 0) { - 1b68: c93042e3 bgtz s3,17ec - 1b6c: b9cd j 185e - while (i) { - 1b6e: 87ae mv a5,a1 - while (n) { - 1b70: dc041de3 bnez s0,194a - 1b74: b5a5 j 19dc - while ((f[0] >= '0') && (f[0] <= '9')) { - 1b76: fd07871b addiw a4,a5,-48 - 1b7a: 0ff77713 zext.b a4,a4 - 1b7e: 4625 li a2,9 - ++f; - 1b80: 0485 addi s1,s1,1 - pr = 0; - 1b82: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1b84: 46a5 li a3,9 - 1b86: 9ce669e3 bltu a2,a4,1558 - pr = pr * 10 + f[0] - '0'; - 1b8a: 0028971b slliw a4,a7,0x2 - 1b8e: 0117073b addw a4,a4,a7 - 1b92: 0017171b slliw a4,a4,0x1 - f++; - 1b96: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 1b98: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1b9a: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 1b9e: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1ba2: fd07871b addiw a4,a5,-48 - 1ba6: 0ff77713 zext.b a4,a4 - 1baa: fee6f0e3 bgeu a3,a4,1b8a - 1bae: b26d j 1558 - fl |= STBSP__METRIC_1024; - 1bb0: 8f5d or a4,a4,a5 - 1bb2: 00070e1b sext.w t3,a4 - 1bb6: 0685 addi a3,a3,1 - 1bb8: baa9 j 1512 - *bf = 0; - 1bba: 00040023 sb zero,0(s0) - 1bbe: b209 j 14c0 - if (f[0] == 'l') { - 1bc0: 0014c783 lbu a5,1(s1) - 1bc4: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 1bc8: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 1bcc: 00e78c63 beq a5,a4,1be4 - ++f; - 1bd0: 0485 addi s1,s1,1 - 1bd2: ba65 j 158a - if (f[0] == 'h') - 1bd4: 0014c783 lbu a5,1(s1) - 1bd8: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 1bdc: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 1be0: fee798e3 bne a5,a4,1bd0 - if ((f[1] == '6') && (f[2] == '4')) { - 1be4: 0024c783 lbu a5,2(s1) - ++f; - 1be8: 0489 addi s1,s1,2 - 1bea: b245 j 158a - s = va_arg(va, char *); - 1bec: 008b8713 addi a4,s7,8 - 1bf0: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 1bf2: 020e7693 andi a3,t3,32 - 1bf6: 8772 mv a4,t3 - 1bf8: 24069ee3 bnez a3,2654 - stbsp__int32 i = va_arg(va, stbsp__int32); - 1bfc: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 1c00: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 1c04: 02069f13 slli t5,a3,0x20 - 1c08: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 1c0c: 00c78a63 beq a5,a2,1c20 - 1c10: 0006d863 bgez a3,1c20 - fl |= STBSP__NEGATIVE; - 1c14: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 1c18: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 1c1c: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 1c20: 100e7693 andi a3,t3,256 - 1c24: 5c0683e3 beqz a3,29ea - if (n64 < 1024) - 1c28: 3ff00793 li a5,1023 - 1c2c: 01e7e463 bltu a5,t5,1c34 - 1c30: 0ea0106f j 2d1a - else if (pr == -1) - 1c34: 57fd li a5,-1 - 1c36: 30f887e3 beq a7,a5,2744 - fv = (double)(stbsp__int64)n64; - 1c3a: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 1c3e: 034e1793 slli a5,t3,0x34 - 1c42: 0007c463 bltz a5,1c4a - 1c46: 2300106f j 2e76 - divisor = 1024.0; - 1c4a: 00004797 auipc a5,0x4 - 1c4e: cb67b787 fld fa5,-842(a5) # 5900 - if ((fv < divisor) && (fv > -divisor)) - 1c52: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 1c56: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 1c5a: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 1c5e: a2f517d3 flt.d a5,fa0,fa5 - 1c62: c789 beqz a5,1c6c - 1c64: a2a717d3 flt.d a5,fa4,fa0 - 1c68: 3e079863 bnez a5,2058 - fl += 0x1000000; - 1c6c: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 1c70: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 1c74: feee65e3 bltu t3,a4,1c5e - 1c78: a6c5 j 2058 - h = (f[0] == 'X') ? hexu : hex; - 1c7a: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 1c7e: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 1c82: 00005817 auipc a6,0x5 - 1c86: ee680813 addi a6,a6,-282 # 6b68 - 1c8a: 00d79663 bne a5,a3,1c96 - 1c8e: 00005817 auipc a6,0x5 - 1c92: ec280813 addi a6,a6,-318 # 6b50 - l = (4 << 4) | (4 << 8); - 1c96: 44000793 li a5,1088 - 1c9a: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 1c9c: 008e7793 andi a5,t3,8 - 1ca0: 7a079263 bnez a5,2444 - lead[0] = 0; - 1ca4: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 1ca8: 008b8793 addi a5,s7,8 - 1cac: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 1cae: 72070b63 beqz a4,23e4 - n64 = va_arg(va, stbsp__uint64); - 1cb2: 000bb683 ld a3,0(s7) - dp = 0; - 1cb6: d282 sw zero,100(sp) - tail[0] = 0; - 1cb8: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1cbc: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 1cc0: 380694e3 bnez a3,2848 - lead[0] = 0; - 1cc4: 06010423 sb zero,104(sp) - if (pr == 0) { - 1cc8: 78089a63 bnez a7,245c - if (fw < (stbsp__int32)n) - 1ccc: fffb4313 not t1,s6 - 1cd0: 43f35313 srai t1,t1,0x3f - l = 0; - 1cd4: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 1cd6: 01637333 and t1,t1,s6 - goto scopy; - 1cda: 4701 li a4,0 - 1cdc: 4f81 li t6,0 - 1cde: 4a01 li s4,0 - cs = 0; - 1ce0: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 1ce2: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 1ce6: 9c0506e3 beqz a0,16b2 - if (fw + pr) { - 1cea: 00e307bb addw a5,t1,a4 - 1cee: 9c079fe3 bnez a5,16cc - 1cf2: 06910793 addi a5,sp,105 - 1cf6: b661 j 187e - h = (f[0] == 'E') ? hexu : hex; - 1cf8: 04500713 li a4,69 - 1cfc: 00005317 auipc t1,0x5 - 1d00: e6c30313 addi t1,t1,-404 # 6b68 - 1d04: 1ce78ae3 beq a5,a4,26d8 - fv = va_arg(va, double); - 1d08: 008b8713 addi a4,s7,8 - if (pr == -1) - 1d0c: 57fd li a5,-1 - fv = va_arg(va, double); - 1d0e: e0ba sd a4,64(sp) - 1d10: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1d14: 1af88ce3 beq a7,a5,26cc - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1d18: 80000737 lui a4,0x80000 - 1d1c: 00e8e733 or a4,a7,a4 - 1d20: 2701 sext.w a4,a4 - 1d22: 10d4 addi a3,sp,100 - 1d24: 0110 addi a2,sp,128 - 1d26: 108c addi a1,sp,96 - 1d28: 18a8 addi a0,sp,120 - 1d2a: f41e sd t2,40(sp) - 1d2c: f01a sd t1,32(sp) - 1d2e: ec72 sd t3,24(sp) - 1d30: e846 sd a7,16(sp) - 1d32: d8efe0ef jal 2c0 - 1d36: 68c2 ld a7,16(sp) - 1d38: 6e62 ld t3,24(sp) - 1d3a: 7302 ld t1,32(sp) - 1d3c: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 1d3e: 5796 lw a5,100(sp) - s = (char *)sn; - 1d40: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 1d42: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1d44: 3c0511e3 bnez a0,2906 - tail[0] = 0; - 1d48: 06010823 sb zero,112(sp) - sign[0] = 0; - 1d4c: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 1d50: 004e7713 andi a4,t3,4 - 1d54: 6a070ee3 beqz a4,2c10 - sign[0] = 1; - 1d58: 6709 lui a4,0x2 - 1d5a: 0705 addi a4,a4,1 # 2001 - 1d5c: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1d60: 671d lui a4,0x7 - 1d62: 1ee794e3 bne a5,a4,274a - if (pr < (stbsp__int32)l) - 1d66: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1d6a: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 1d6e: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 1d72: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 1d76: 97fd srai a5,a5,0x3f - 1d78: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1d7a: 00fa073b addw a4,s4,a5 - 1d7e: 01f7063b addw a2,a4,t6 - 1d82: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1d84: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 1d88: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 1d8a: 835a mv t1,s6 - 1d8c: 00cb5363 bge s6,a2,1d92 - 1d90: 8332 mv t1,a2 - fw -= n; - 1d92: 40e3033b subw t1,t1,a4 - cs = 0; - 1d96: 4281 li t0,0 - pr -= l; - 1d98: 40d7873b subw a4,a5,a3 - tz = 0; - 1d9c: 4881 li a7,0 - goto scopy; - 1d9e: b7a1 j 1ce6 - h = (f[0] == 'G') ? hexu : hex; - 1da0: 04700713 li a4,71 - 1da4: 00005317 auipc t1,0x5 - 1da8: dc430313 addi t1,t1,-572 # 6b68 - 1dac: 14e783e3 beq a5,a4,26f2 - fv = va_arg(va, double); - 1db0: 008b8713 addi a4,s7,8 - if (pr == -1) - 1db4: 57fd li a5,-1 - fv = va_arg(va, double); - 1db6: e0ba sd a4,64(sp) - 1db8: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1dbc: 12f884e3 beq a7,a5,26e4 - else if (pr == 0) - 1dc0: 6e0887e3 beqz a7,2cae - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1dc4: fff8871b addiw a4,a7,-1 - 1dc8: 800007b7 lui a5,0x80000 - 1dcc: 8f5d or a4,a4,a5 - 1dce: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 1dd0: 00088a9b sext.w s5,a7 - 1dd4: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1dd6: 10d4 addi a3,sp,100 - 1dd8: 0110 addi a2,sp,128 - 1dda: 108c addi a1,sp,96 - 1ddc: 18a8 addi a0,sp,120 - 1dde: f01e sd t2,32(sp) - 1de0: ec1a sd t1,24(sp) - 1de2: e872 sd t3,16(sp) - 1de4: cdcfe0ef jal 2c0 - 1de8: 6e42 ld t3,16(sp) - 1dea: 6362 ld t1,24(sp) - 1dec: 7382 ld t2,32(sp) - 1dee: 4281 li t0,0 - 1df0: c509 beqz a0,1dfa - fl |= STBSP__NEGATIVE; - 1df2: 080e6e13 ori t3,t3,128 - 1df6: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 1dfa: 5806 lw a6,96(sp) - 1dfc: 010af463 bgeu s5,a6,1e04 - l = pr; - 1e00: d0d6 sw s5,96(sp) - 1e02: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1e04: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1e06: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1e08: 01076463 bltu a4,a6,1e10 - 1e0c: 1800106f j 2f8c - 1e10: 7be6 ld s7,120(sp) - 1e12: fff8071b addiw a4,a6,-1 - 1e16: 1702 slli a4,a4,0x20 - 1e18: 9301 srli a4,a4,0x20 - 1e1a: 001a0e9b addiw t4,s4,1 - 1e1e: 75e2 ld a1,56(sp) - 1e20: 8ade mv s5,s7 - 1e22: 975e add a4,a4,s7 - 1e24: 410e8ebb subw t4,t4,a6 - 1e28: 88d2 mv a7,s4 - 1e2a: 86c2 mv a3,a6 - 1e2c: 4f01 li t5,0 - 1e2e: 03000f93 li t6,48 - 1e32: e842 sd a6,16(sp) - 1e34: a809 j 1e46 - --pr; - 1e36: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1e38: 211e80e3 beq t4,a7,2838 - 1e3c: 177d addi a4,a4,-1 # 6fff <_stdout+0x5f> - 1e3e: 4f05 li t5,1 - 1e40: 1e088ce3 beqz a7,2838 - --l; - 1e44: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1e46: 00074803 lbu a6,0(a4) - 1e4a: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8687> - 1e4e: 0006851b sext.w a0,a3 - 1e52: 2581 sext.w a1,a1 - 1e54: 0006069b sext.w a3,a2 - 1e58: fdf80fe3 beq a6,t6,1e36 - 1e5c: 6842 ld a6,16(sp) - 1e5e: fc2e sd a1,56(sp) - 1e60: 86c2 mv a3,a6 - 1e62: 000f0463 beqz t5,1e6a - 1e66: d0ae sw a1,96(sp) - 1e68: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1e6a: 5775 li a4,-3 - 1e6c: 08e7cee3 blt a5,a4,2708 - 1e70: 08fa4be3 blt s4,a5,2706 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1e74: 0005071b sext.w a4,a0 - if (dp > 0) { - 1e78: 7ef057e3 blez a5,2e66 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1e7c: 4881 li a7,0 - 1e7e: 00e7d463 bge a5,a4,1e86 - 1e82: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 1e86: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 1e8a: 20029463 bnez t0,2092 - } else if (fl & STBSP__LEADINGSPACE) { - 1e8e: 004e7713 andi a4,t3,4 - 1e92: 000715e3 bnez a4,269c - } else if (fl & STBSP__LEADINGPLUS) { - 1e96: 002e7713 andi a4,t3,2 - 1e9a: 660719e3 bnez a4,2d0c - sign[0] = 0; - 1e9e: 06010423 sb zero,104(sp) - 1ea2: aaed j 209c - h = (f[0] == 'A') ? hexu : hex; - 1ea4: 04100713 li a4,65 - 1ea8: 00005597 auipc a1,0x5 - 1eac: cc058593 addi a1,a1,-832 # 6b68 - 1eb0: 00e783e3 beq a5,a4,26b6 - fv = va_arg(va, double); - 1eb4: 008b8693 addi a3,s7,8 - if (pr == -1) - 1eb8: 577d li a4,-1 - fv = va_arg(va, double); - 1eba: e0b6 sd a3,64(sp) - 1ebc: 000bb783 ld a5,0(s7) - if (pr == -1) - 1ec0: 7ee88963 beq a7,a4,26b2 - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1ec4: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1ec8: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1ecc: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1ed0: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1ed2: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 1ed6: 7a07c863 bltz a5,2686 - } else if (fl & STBSP__LEADINGSPACE) { - 1eda: 004e7793 andi a5,t3,4 - 1ede: 60078ee3 beqz a5,2cfa - 1ee2: 6789 lui a5,0x2 - 1ee4: 2785 addiw a5,a5,1 # 2001 - sign[0] = 1; - 1ee6: 06f11423 sh a5,104(sp) - 1eea: 468d li a3,3 - 1eec: 4a0d li s4,3 - 1eee: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 1ef0: 4705 li a4,1 - 1ef2: 1752 slli a4,a4,0x34 - if (dp == -1023) - 1ef4: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 1ef8: 8f49 or a4,a4,a0 - if (dp == -1023) - 1efa: 5cf600e3 beq a2,a5,2cba - if (pr < 15) - 1efe: 4539 li a0,14 - n64 <<= (64 - 56); - 1f00: 00871793 slli a5,a4,0x8 - if (pr < 15) - 1f04: 251546e3 blt a0,a7,2950 - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 1f08: 4705 li a4,1 - 1f0a: 0028951b slliw a0,a7,0x2 - 1f0e: 176e slli a4,a4,0x3b - 1f10: 00a75733 srl a4,a4,a0 - 1f14: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 1f16: 03c75793 srli a5,a4,0x3c - 1f1a: 97ae add a5,a5,a1 - 1f1c: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 1f20: 22080793 addi a5,a6,544 - 1f24: 06010813 addi a6,sp,96 - 1f28: 97c2 add a5,a5,a6 - 1f2a: 03000813 li a6,48 - 1f2e: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 1f32: 22068793 addi a5,a3,544 - 1f36: 1094 addi a3,sp,96 - 1f38: 96be add a3,a3,a5 - 1f3a: 07800793 li a5,120 - 1f3e: def68423 sb a5,-536(a3) - lead[0] += 2; - 1f42: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 1f46: 0ca10023 sb a0,192(sp) - if (pr) - 1f4a: 740893e3 bnez a7,2e90 - sn = s; - 1f4e: 0c110793 addi a5,sp,193 - 1f52: fcbe sd a5,120(sp) - 1f54: 4701 li a4,0 - 1f56: 4501 li a0,0 - 1f58: 4305 li t1,1 - 1f5a: 4685 li a3,1 - tail[1] = h[17]; - 1f5c: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 1f60: 02b00793 li a5,43 - tail[1] = h[17]; - 1f64: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 1f68: 00065663 bgez a2,1f74 - dp = -dp; - 1f6c: 40c0063b negw a2,a2 - tail[2] = '-'; - 1f70: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 1f74: 4829 li a6,10 - 1f76: 030665bb remw a1,a2,a6 - 1f7a: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1f7e: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 1f82: 0305859b addiw a1,a1,48 - 1f86: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1f8a: 18cec3e3 blt t4,a2,2910 - 1f8e: 06300e93 li t4,99 - 1f92: 54cec1e3 blt t4,a2,2cd4 - 1f96: 4ea5 li t4,9 - 1f98: 72ced6e3 bge t4,a2,2ec4 - dp /= 10; - 1f9c: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 1fa0: 4611 li a2,4 - 1fa2: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 1fa6: 06b10a23 sb a1,116(sp) - 1faa: 4811 li a6,4 - 1fac: 4f91 li t6,4 - 1fae: 0307879b addiw a5,a5,48 - 1fb2: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 1fb6: 006a07bb addw a5,s4,t1 - 1fba: 010787bb addw a5,a5,a6 - 1fbe: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 1fc2: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 1fc4: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 1fc6: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1fc8: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1fcc: 835a mv t1,s6 - 1fce: 00cb5363 bge s6,a2,1fd4 - 1fd2: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 1fd4: 030002b7 lui t0,0x3000 - fw -= n; - 1fd8: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 1fdc: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8689> - s = num + 64; - 1fde: 0c010a93 addi s5,sp,192 - goto scopy; - 1fe2: b311 j 1ce6 - h = (f[0] == 'B') ? hexu : hex; - 1fe4: 04200713 li a4,66 - 1fe8: 00005817 auipc a6,0x5 - 1fec: b8080813 addi a6,a6,-1152 # 6b68 - 1ff0: 6ce78963 beq a5,a4,26c2 - if (fl & STBSP__LEADING_0X) { - 1ff4: 008e7793 andi a5,t3,8 - 1ff8: 66079e63 bnez a5,2674 - lead[0] = 0; - 1ffc: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 2000: 18000793 li a5,384 - 2004: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 2006: 020e7713 andi a4,t3,32 - goto radixnum; - 200a: b979 j 1ca8 - *s = (char)va_arg(va, int); - 200c: 000ba783 lw a5,0(s7) - l = 1; - 2010: 4705 li a4,1 - 2012: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 2014: 26f10fa3 sb a5,639(sp) - 2018: 008b8793 addi a5,s7,8 - lead[0] = 0; - 201c: 06010423 sb zero,104(sp) - tail[0] = 0; - 2020: 06010823 sb zero,112(sp) - dp = 0; - 2024: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 2026: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 2028: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 202c: 835a mv t1,s6 - 202e: 69605063 blez s6,26ae - fw -= n; - 2032: 337d addiw t1,t1,-1 - goto scopy; - 2034: 4701 li a4,0 - 2036: 4f81 li t6,0 - 2038: 4685 li a3,1 - 203a: 4a01 li s4,0 - cs = 0; - 203c: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 203e: 27f10a93 addi s5,sp,639 - tz = 0; - 2042: 4881 li a7,0 - goto scopy; - 2044: b14d j 1ce6 - fv = va_arg(va, double); - 2046: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 204a: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 204e: e0ba sd a4,64(sp) - 2050: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 2054: be0795e3 bnez a5,1c3e - if (pr == -1) - 2058: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 205a: 0008871b sext.w a4,a7 - if (pr == -1) - 205e: 00f89463 bne a7,a5,2066 - 2062: 4719 li a4,6 - pr = 6; // default is 6 - 2064: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2066: 10d4 addi a3,sp,100 - 2068: 0110 addi a2,sp,128 - 206a: 108c addi a1,sp,96 - 206c: 18a8 addi a0,sp,120 - 206e: f01e sd t2,32(sp) - 2070: ec72 sd t3,24(sp) - 2072: e846 sd a7,16(sp) - 2074: a4cfe0ef jal 2c0 - 2078: 6e62 ld t3,24(sp) - 207a: 68c2 ld a7,16(sp) - 207c: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 207e: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 2080: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 2082: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2086: e00500e3 beqz a0,1e86 - fl |= STBSP__NEGATIVE; - 208a: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 208e: 06010823 sb zero,112(sp) - sign[0] = 1; - 2092: 670d lui a4,0x3 - 2094: d0170713 addi a4,a4,-767 # 2d01 - 2098: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 209c: 671d lui a4,0x7 - 209e: 7ce78963 beq a5,a4,2870 - if (dp <= 0) { - 20a2: 46f05fe3 blez a5,2d20 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 20a6: 040e7313 andi t1,t3,64 - 20aa: 00078e9b sext.w t4,a5 - 20ae: 4581 li a1,0 - 20b0: 00030963 beqz t1,20c2 - 20b4: 25800593 li a1,600 - 20b8: 41d585bb subw a1,a1,t4 - 20bc: 470d li a4,3 - 20be: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 20c2: 00005a17 auipc s4,0x5 - 20c6: 9bea0a13 addi s4,s4,-1602 # 6a80 - s = (char *)sn; - 20ca: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 20cc: 0cda4283 lbu t0,205(s4) - s = num + 64; - 20d0: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 20d4: 44defb63 bgeu t4,a3,252a - n = 0; - 20d8: 4501 li a0,0 - s = num + 64; - 20da: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 20dc: 4b91 li s7,4 - 20de: a015 j 2102 - 20e0: 8642 mv a2,a6 - 20e2: 883a mv a6,a4 - 20e4: 8732 mv a4,a2 - *s++ = sn[n]; - 20e6: 02051613 slli a2,a0,0x20 - 20ea: 9201 srli a2,a2,0x20 - 20ec: 967a add a2,a2,t5 - 20ee: 00064f83 lbu t6,0(a2) - ++n; - 20f2: 0015061b addiw a2,a0,1 - 20f6: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 20fa: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x5f> - if (n >= (stbsp__uint32)dp) - 20fe: 7bd57563 bgeu a0,t4,28a8 - *s++ = stbsp__comma; - 2102: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2106: fc030de3 beqz t1,20e0 - 210a: 2585 addiw a1,a1,1 - 210c: fd759ae3 bne a1,s7,20e0 - *s++ = stbsp__comma; - 2110: fe580fa3 sb t0,-1(a6) - 2114: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2116: 4585 li a1,1 - 2118: b7f9 j 20e6 - *d = tlen + (int)(bf - buf); - 211a: 000bb703 ld a4,0(s7) - 211e: 412407b3 sub a5,s0,s2 - 2122: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 2126: 008b8693 addi a3,s7,8 - 212a: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 212c: c31c sw a5,0(a4) - } break; - 212e: bae5 j 1b26 - if (fl & STBSP__LEADING_0X) { - 2130: 008e7793 andi a5,t3,8 - 2134: 50079b63 bnez a5,264a - lead[0] = 0; - 2138: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 213c: 33000793 li a5,816 - 2140: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 2142: 020e7713 andi a4,t3,32 - h = hexu; - 2146: 00005817 auipc a6,0x5 - 214a: a0a80813 addi a6,a6,-1526 # 6b50 - goto radixnum; - 214e: bea9 j 1ca8 - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 2150: fefe7e13 andi t3,t3,-17 - 2154: 020e6e13 ori t3,t3,32 - 2158: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 215c: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 215e: 00005817 auipc a6,0x5 - 2162: a0a80813 addi a6,a6,-1526 # 6b68 - 2166: be05 j 1c96 - s = va_arg(va, char *); - 2168: 000bba83 ld s5,0(s7) - 216c: 008b8793 addi a5,s7,8 - 2170: e0be sd a5,64(sp) - if (s == 0) - 2172: 360a8ee3 beqz s5,2cee - if (((stbsp__uintptr)sn & 3) == 0) - 2176: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 217a: 5208c663 bltz a7,26a6 - 217e: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 2182: 2a0782e3 beqz a5,2c26 - if (!limit || *sn == 0) - 2186: 5a068b63 beqz a3,273c - if (((stbsp__uintptr)sn & 3) == 0) - 218a: 87d6 mv a5,s5 - 218c: a801 j 219c - ++sn; - 218e: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 2190: 0037f713 andi a4,a5,3 - --limit; - 2194: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 2196: 280709e3 beqz a4,2c28 - if (!limit || *sn == 0) - 219a: c681 beqz a3,21a2 - 219c: 0007c703 lbu a4,0(a5) - 21a0: f77d bnez a4,218e - return (stbsp__uint32)(sn - s); - 21a2: 415787b3 sub a5,a5,s5 - 21a6: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 21aa: fff6c713 not a4,a3 - 21ae: 977d srai a4,a4,0x3f - 21b0: 8f7d and a4,a4,a5 - 21b2: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 21b6: 863e mv a2,a5 - pr -= l; - 21b8: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 21ba: d0b6 sw a3,96(sp) - lead[0] = 0; - 21bc: 06010423 sb zero,104(sp) - tail[0] = 0; - 21c0: 06010823 sb zero,112(sp) - dp = 0; - 21c4: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 21c6: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 21ca: 835a mv t1,s6 - 21cc: 00fb5363 bge s6,a5,21d2 - 21d0: 833e mv t1,a5 - fw -= n; - 21d2: 40c3033b subw t1,t1,a2 - goto scopy; - 21d6: 4f81 li t6,0 - 21d8: 4a01 li s4,0 - cs = 0; - 21da: 4281 li t0,0 - tz = 0; - 21dc: 4881 li a7,0 - goto scopy; - 21de: b621 j 1ce6 - *bf++ = stbsp__comma; - 21e0: 87b2 mv a5,a2 - cs = 0; - 21e2: 4a01 li s4,0 - 21e4: e44ff06f j 1828 - lead[0] -= (char)i; - 21e8: 06010423 sb zero,104(sp) - while (i) { - 21ec: d38ff06f j 1724 - lead[0] -= (char)i; - 21f0: 06010423 sb zero,104(sp) - while (i) { - 21f4: ed8ff06f j 18cc - while (i >= 4) { - 21f8: 06fadc63 bge s5,a5,2270 - tz -= i; - 21fc: 8722 mv a4,s0 - 21fe: 0007851b sext.w a0,a5 - while (i >= 4) { - 2202: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 2206: 01672023 sw s6,0(a4) - bf += 4; - 220a: 0711 addi a4,a4,4 - while (i >= 4) { - 220c: 40e5863b subw a2,a1,a4 - 2210: fecacbe3 blt s5,a2,2206 - 2214: ffc5061b addiw a2,a0,-4 - 2218: 0026561b srliw a2,a2,0x2 - 221c: 0016071b addiw a4,a2,1 - 2220: 37f1 addiw a5,a5,-4 - 2222: 0026161b slliw a2,a2,0x2 - 2226: 070a slli a4,a4,0x2 - 2228: 9722 add a4,a4,s0 - 222a: 9f91 subw a5,a5,a2 - while (i) { - 222c: 843a mv s0,a4 - 222e: 80078de3 beqz a5,1a48 - 2232: 1782 slli a5,a5,0x20 - 2234: 9381 srli a5,a5,0x20 - 2236: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 223a: 0705 addi a4,a4,1 - 223c: ff470fa3 sb s4,-1(a4) - while (i) { - 2240: fe871de3 bne a4,s0,223a - 2244: 805ff06f j 1a48 - stbsp__cb_buf_clamp(i, pr); - 2248: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 224a: 4981 li s3,0 - 224c: dc049263 bnez s1,1810 - 2250: b8d5 j 1b44 - STBSP__UNALIGNED(while (i >= 4) { - 2252: 4401 li s0,0 - 2254: 85be mv a1,a5 - 2256: f0ea4b63 blt s4,a4,196c - 225a: f42ff06f j 199c - if ((((stbsp__uintptr)bf) & 3) == 0) - 225e: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 2262: 87c6 mv a5,a7 - tz -= i; - 2264: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2266: fc071c63 bnez a4,1a3e - while (i >= 4) { - 226a: 470d li a4,3 - 226c: f8f748e3 blt a4,a5,21fc - 2270: 8722 mv a4,s0 - 2272: b7c1 j 2232 - tail[0] -= (char)i; - 2274: 06010823 sb zero,112(sp) - while (i) { - 2278: b0b9 j 1ac6 - while (i >= 4) { - 227a: 478d li a5,3 - 227c: 8622 mv a2,s0 - 227e: d8b7d963 bge a5,a1,1810 - 2282: ffc5839b addiw t2,a1,-4 - 2286: 0023d79b srliw a5,t2,0x2 - 228a: 0017859b addiw a1,a5,1 - 228e: 058a slli a1,a1,0x2 - 2290: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 2292: 01762023 sw s7,0(a2) - bf += 4; - 2296: 0611 addi a2,a2,4 - while (i >= 4) { - 2298: fe861de3 bne a2,s0,2292 - 229c: 0027979b slliw a5,a5,0x2 - 22a0: 40f385bb subw a1,t2,a5 - 22a4: d68ff06f j 180c - while (i) { - 22a8: 85be mv a1,a5 - 22aa: ee071963 bnez a4,199c - 22ae: f16ff06f j 19c4 - 22b2: 2c013a03 ld s4,704(sp) - 22b6: 2b813a83 ld s5,696(sp) - 22ba: 2b013b03 ld s6,688(sp) - 22be: 8ca2 mv s9,s0 - 22c0: a04ff06f j 14c4 - stbsp__chk_cb_buf(1); - 22c4: 2601 sext.w a2,a2 - 22c6: 1fe00793 li a5,510 - 22ca: f8c7c563 blt a5,a2,1a54 - 22ce: f3eff06f j 1a0c - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 22d2: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 22d6: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 22da: 2e01 sext.w t3,t3 - if (fw + pr) { - 22dc: a0078be3 beqz a5,1cf2 - while (fw > 0) { - 22e0: be605663 blez t1,16cc - *(stbsp__uint32 *)bf = 0x20202020; - 22e4: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 22e8: 854a mv a0,s2 - 22ea: 894e mv s2,s3 - 22ec: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 22ee: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa6a8> - stbsp__cb_buf_clamp(i, fw); - 22f2: ec52 sd s4,24(sp) - 22f4: f426 sd s1,40(sp) - 22f6: 87a2 mv a5,s0 - 22f8: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 22fa: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 22fe: 8d6e mv s10,s11 - *bf++ = ' '; - 2300: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 2304: 8de6 mv s11,s9 - while (i >= 4) { - 2306: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 2308: 20000e93 li t4,512 - 230c: e846 sd a7,16(sp) - 230e: f07e sd t6,32(sp) - 2310: f836 sd a3,48(sp) - 2312: e4f2 sd t3,72(sp) - 2314: e8ba sd a4,80(sp) - 2316: ec96 sd t0,88(sp) - 2318: 841a mv s0,t1 - 231a: 8a42 mv s4,a6 - 231c: 8c9e mv s9,t2 - 231e: 0c090063 beqz s2,23de - 2322: 40a78633 sub a2,a5,a0 - 2326: 40ce873b subw a4,t4,a2 - 232a: 86ba mv a3,a4 - 232c: 00e45363 bge s0,a4,2332 - 2330: 86a2 mv a3,s0 - 2332: 0006871b sext.w a4,a3 - fw -= i; - 2336: 9c15 subw s0,s0,a3 - while (i) { - 2338: e719 bnez a4,2346 - 233a: a095 j 239e - *bf++ = ' '; - 233c: 01678023 sb s6,0(a5) - --i; - 2340: 377d addiw a4,a4,-1 - *bf++ = ' '; - 2342: 0785 addi a5,a5,1 - while (i) { - 2344: cb29 beqz a4,2396 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2346: 0037f693 andi a3,a5,3 - 234a: faed bnez a3,233c - while (i >= 4) { - 234c: 86be mv a3,a5 - 234e: 00070f9b sext.w t6,a4 - 2352: 00f705bb addw a1,a4,a5 - 2356: 02ebd763 bge s7,a4,2384 - *(stbsp__uint32 *)bf = 0x20202020; - 235a: 0146a023 sw s4,0(a3) - bf += 4; - 235e: 0691 addi a3,a3,4 - while (i >= 4) { - 2360: 40d5863b subw a2,a1,a3 - 2364: fecbcbe3 blt s7,a2,235a - 2368: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8684> - 236c: 0026561b srliw a2,a2,0x2 - 2370: 0016069b addiw a3,a2,1 - 2374: 3771 addiw a4,a4,-4 - 2376: 0026161b slliw a2,a2,0x2 - 237a: 068a slli a3,a3,0x2 - 237c: 96be add a3,a3,a5 - 237e: 9f11 subw a4,a4,a2 - while (i) { - 2380: 87b6 mv a5,a3 - 2382: cb11 beqz a4,2396 - 2384: 1702 slli a4,a4,0x20 - 2386: 9301 srli a4,a4,0x20 - 2388: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 238c: 0685 addi a3,a3,1 - 238e: ff668fa3 sb s6,-1(a3) - while (i) { - 2392: fef69de3 bne a3,a5,238c - stbsp__chk_cb_buf(1); - 2396: 40a78633 sub a2,a5,a0 - 239a: 00090e63 beqz s2,23b6 - 239e: 2601 sext.w a2,a2 - 23a0: 00cf5b63 bge t5,a2,23b6 - 23a4: 85ce mv a1,s3 - 23a6: 9cb1 addw s1,s1,a2 - 23a8: 9902 jalr s2 - 23aa: c541 beqz a0,2432 - 23ac: 87aa mv a5,a0 - 23ae: 20000e93 li t4,512 - 23b2: 1fe00f13 li t5,510 - while (fw > 0) { - 23b6: f68044e3 bgtz s0,231e - 23ba: 8322 mv t1,s0 - 23bc: 89ca mv s3,s2 - 23be: 83e6 mv t2,s9 - 23c0: 68c2 ld a7,16(sp) - 23c2: 8cee mv s9,s11 - 23c4: 6a62 ld s4,24(sp) - 23c6: 8dea mv s11,s10 - 23c8: 7f82 ld t6,32(sp) - 23ca: 8d26 mv s10,s1 - 23cc: 76c2 ld a3,48(sp) - 23ce: 6e26 ld t3,72(sp) - 23d0: 6746 ld a4,80(sp) - 23d2: 62e6 ld t0,88(sp) - 23d4: 74a2 ld s1,40(sp) - 23d6: 892a mv s2,a0 - 23d8: 843e mv s0,a5 - 23da: af2ff06f j 16cc - stbsp__cb_buf_clamp(i, fw); - 23de: 8722 mv a4,s0 - 23e0: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 23e2: b795 j 2346 - n64 = va_arg(va, stbsp__uint32); - 23e4: 000be683 lwu a3,0(s7) - 23e8: b0f9 j 1cb6 - 23ea: 2c013a03 ld s4,704(sp) - 23ee: 2b813a83 ld s5,696(sp) - 23f2: 2b013b03 ld s6,688(sp) - 23f6: 8cca mv s9,s2 - 23f8: 8ccff06f j 14c4 - 23fc: 8cd6 mv s9,s5 - 23fe: 2c013a03 ld s4,704(sp) - 2402: 2b813a83 ld s5,696(sp) - 2406: 2b013b03 ld s6,688(sp) - 240a: 8baff06f j 14c4 - 240e: 2c013a03 ld s4,704(sp) - 2412: 2b813a83 ld s5,696(sp) - 2416: 2b013b03 ld s6,688(sp) - 241a: 8cea mv s9,s10 - 241c: 8a8ff06f j 14c4 - while (i) { - 2420: 85a2 mv a1,s0 - 2422: c12ff06f j 1834 - while (i >= 4) { - 2426: 478d li a5,3 - 2428: 8622 mv a2,s0 - 242a: e4b7cce3 blt a5,a1,2282 - 242e: be2ff06f j 1810 - 2432: 2c013a03 ld s4,704(sp) - 2436: 2b813a83 ld s5,696(sp) - 243a: 2b013b03 ld s6,688(sp) - 243e: 8ca6 mv s9,s1 - 2440: 884ff06f j 14c4 - lead[2] = h[16]; - 2444: 01084683 lbu a3,16(a6) - lead[0] = 2; - 2448: 678d lui a5,0x3 - 244a: 0789 addi a5,a5,2 # 3002 - 244c: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 2450: 06d10523 sb a3,106(sp) - 2454: b891 j 1ca8 - 2456: 8cea mv s9,s10 - 2458: 86cff06f j 14c4 - 245c: 4f81 li t6,0 - 245e: 4a01 li s4,0 - 2460: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 2462: 00004f17 auipc t5,0x4 - 2466: 6ebf4f03 lbu t5,1771(t5) # 6b4d - 246a: 0510 addi a2,sp,640 - 246c: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2470: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 2472: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2476: 0007029b sext.w t0,a4 - 247a: 005317bb sllw a5,t1,t0 - 247e: 37fd addiw a5,a5,-1 - 2480: 8ff5 and a5,a5,a3 - 2482: 97c2 add a5,a5,a6 - 2484: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 2488: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 248c: fff60a93 addi s5,a2,-1 - 2490: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 2494: e691 bnez a3,24a0 - 2496: 051c addi a5,sp,640 - 2498: 415787bb subw a5,a5,s5 - 249c: 0317dd63 bge a5,a7,24d6 - if (fl & STBSP__TRIPLET_COMMA) { - 24a0: 020e8963 beqz t4,24d2 - ++l; - 24a4: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 24a8: 0047d29b srliw t0,a5,0x4 - 24ac: 00f2c2b3 xor t0,t0,a5 - 24b0: 00f2f293 andi t0,t0,15 - ++l; - 24b4: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 24b8: 0087d71b srliw a4,a5,0x8 - 24bc: 00029b63 bnez t0,24d2 - l &= ~15; - 24c0: 9bc1 andi a5,a5,-16 - 24c2: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 24c6: ffe60a93 addi s5,a2,-2 - 24ca: ffe60f23 sb t5,-2(a2) - 24ce: 0087d71b srliw a4,a5,0x8 - 24d2: 8656 mv a2,s5 - 24d4: b74d j 2476 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 24d6: 0045d29b srliw t0,a1,0x4 - 24da: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 24de: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 24e2: 0182929b slliw t0,t0,0x18 - 24e6: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 24ea: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 24ee: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 24f0: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 24f2: 86be mv a3,a5 - 24f4: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 24f8: 835a mv t1,s6 - 24fa: 00cb5363 bge s6,a2,2500 - 24fe: 8332 mv t1,a2 - fw -= n; - 2500: 41f3033b subw t1,t1,t6 - pr -= l; - 2504: 9f1d subw a4,a4,a5 - goto scopy; - 2506: 4f81 li t6,0 - tz = 0; - 2508: 4881 li a7,0 - goto scopy; - 250a: fdcff06f j 1ce6 - 250e: 8cda mv s9,s6 - 2510: 2c013a03 ld s4,704(sp) - 2514: 2b813a83 ld s5,696(sp) - 2518: 2b013b03 ld s6,688(sp) - 251c: fa9fe06f j 14c4 - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 2520: 020e6e13 ori t3,t3,32 - ++f; - 2524: 0485 addi s1,s1,1 - 2526: 864ff06f j 158a - n = 0; - 252a: 4601 li a2,0 - s = num + 64; - 252c: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 252e: 4511 li a0,4 - *s++ = stbsp__comma; - 2530: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2534: 00030563 beqz t1,253e - 2538: 2585 addiw a1,a1,1 - 253a: 10a58363 beq a1,a0,2640 - 253e: 873e mv a4,a5 - *s++ = sn[n]; - 2540: 02061793 slli a5,a2,0x20 - 2544: 9381 srli a5,a5,0x20 - 2546: 97fa add a5,a5,t5 - 2548: 0007c803 lbu a6,0(a5) - ++n; - 254c: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 254e: ff070fa3 sb a6,-1(a4) - if (n >= l) - 2552: fcd66fe3 bltu a2,a3,2530 - if (n < (stbsp__uint32)dp) { - 2556: 0bd663e3 bltu a2,t4,2dfc - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 255a: 415707b3 sub a5,a4,s5 - 255e: 030002b7 lui t0,0x3000 - 2562: 00f282bb addw t0,t0,a5 - if (pr) { - 2566: 00088a63 beqz a7,257a - *s++ = stbsp__period; - 256a: 0cca4683 lbu a3,204(s4) - 256e: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 2572: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 2576: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 257a: 100e7713 andi a4,t3,256 - 257e: 86f2 mv a3,t3 - 2580: 2c070163 beqz a4,2842 - if (fl & STBSP__METRIC_NOSPACE) - 2584: 40ae5f9b sraiw t6,t3,0xa - 2588: 001fcf93 xori t6,t6,1 - 258c: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 2590: 02000713 li a4,32 - 2594: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 2598: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 259c: 018e561b srliw a2,t3,0x18 - 25a0: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 25a4: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 25a8: c225 beqz a2,2608 - if (fl & STBSP__METRIC_1024) - 25aa: 001f859b addiw a1,t6,1 - 25ae: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 25b2: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 25b4: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 25b8: 85b2 mv a1,a2 - 25ba: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 25bc: 06055ee3 bgez a0,2e38 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 25c0: 00003517 auipc a0,0x3 - 25c4: ba050513 addi a0,a0,-1120 # 5160 <_GLOBAL__sub_I__ZSt3cin+0x9a> - 25c8: 972a add a4,a4,a0 - 25ca: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 25ce: 6709 lui a4,0x2 - 25d0: 80070713 addi a4,a4,-2048 # 1800 - 25d4: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 25d6: 06010813 addi a6,sp,96 - 25da: 22060693 addi a3,a2,544 - 25de: 96c2 add a3,a3,a6 - 25e0: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff8478> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 25e4: 8007071b addiw a4,a4,-2048 - 25e8: 060715e3 bnez a4,2e52 - tail[idx + 1] = 'i'; - 25ec: 2f89 addiw t6,t6,2 - 25ee: 0ffff593 zext.b a1,t6 - 25f2: 1094 addi a3,sp,96 - 25f4: 22058713 addi a4,a1,544 - 25f8: 9736 add a4,a4,a3 - 25fa: 06900693 li a3,105 - 25fe: 8fae mv t6,a1 - 2600: ded70823 sb a3,-528(a4) - tail[0] = idx; - 2604: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2608: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 260c: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 2610: fff6c713 not a4,a3 - 2614: 977d srai a4,a4,0x3f - 2616: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2618: 00fa073b addw a4,s4,a5 - 261c: 9f2d addw a4,a4,a1 - 261e: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 2622: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 2624: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2626: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2628: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 262c: 835a mv t1,s6 - 262e: 00cb5363 bge s6,a2,2634 - 2632: 8332 mv t1,a2 - fw -= n; - 2634: 40e3033b subw t1,t1,a4 - pr -= l; - 2638: 40d7873b subw a4,a5,a3 - goto scopy; - 263c: eaaff06f j 1ce6 - *s++ = stbsp__comma; - 2640: fe578fa3 sb t0,-1(a5) - 2644: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2646: 4585 li a1,1 - 2648: bde5 j 2540 - lead[0] = 1; - 264a: 678d lui a5,0x3 - 264c: 0785 addi a5,a5,1 # 3001 - 264e: 06f11423 sh a5,104(sp) - 2652: b4ed j 213c - if ((f[0] != 'u') && (i64 < 0)) { - 2654: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 2658: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 265c: dcd78263 beq a5,a3,1c20 - 2660: dc0f5063 bgez t5,1c20 - fl |= STBSP__NEGATIVE; - 2664: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 2668: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 266c: 00070e1b sext.w t3,a4 - 2670: db0ff06f j 1c20 - lead[2] = h[0xb]; - 2674: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 2678: 678d lui a5,0x3 - 267a: 0789 addi a5,a5,2 # 3002 - 267c: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 2680: 06e10523 sb a4,106(sp) - 2684: bab5 j 2000 - sign[0] = 1; - 2686: 678d lui a5,0x3 - 2688: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 268c: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 2690: 06f11423 sh a5,104(sp) - 2694: 468d li a3,3 - 2696: 4a0d li s4,3 - 2698: 4809 li a6,2 - 269a: b899 j 1ef0 - sign[0] = 1; - 269c: 6709 lui a4,0x2 - 269e: 0705 addi a4,a4,1 # 2001 - 26a0: 06e11423 sh a4,104(sp) - 26a4: bae5 j 209c - if (((stbsp__uintptr)sn & 3) == 0) - 26a6: 0e0780e3 beqz a5,2f86 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 26aa: 56fd li a3,-1 - 26ac: bcf9 j 218a - if (fw < (stbsp__int32)n) - 26ae: 4305 li t1,1 - 26b0: b249 j 2032 - pr = 6; // default is 6 - 26b2: 4899 li a7,6 - 26b4: b801 j 1ec4 - h = (f[0] == 'A') ? hexu : hex; - 26b6: 00004597 auipc a1,0x4 - 26ba: 49a58593 addi a1,a1,1178 # 6b50 - 26be: ff6ff06f j 1eb4 - h = (f[0] == 'B') ? hexu : hex; - 26c2: 00004817 auipc a6,0x4 - 26c6: 48e80813 addi a6,a6,1166 # 6b50 - 26ca: b22d j 1ff4 - 26cc: 80000737 lui a4,0x80000 - 26d0: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff868e> - pr = 6; // default is 6 - 26d2: 4899 li a7,6 - 26d4: e4eff06f j 1d22 - h = (f[0] == 'E') ? hexu : hex; - 26d8: 00004317 auipc t1,0x4 - 26dc: 47830313 addi t1,t1,1144 # 6b50 - 26e0: e28ff06f j 1d08 - 26e4: 80000737 lui a4,0x80000 - 26e8: 4a99 li s5,6 - 26ea: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff868d> - pr = 6; - 26ec: 4a19 li s4,6 - 26ee: ee8ff06f j 1dd6 - h = (f[0] == 'G') ? hexu : hex; - 26f2: 00004317 auipc t1,0x4 - 26f6: 45e30313 addi t1,t1,1118 # 6b50 - 26fa: eb6ff06f j 1db0 - 26fe: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2700: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2702: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2704: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2706: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 2708: 0005071b sext.w a4,a0 - 270c: 01175f63 bge a4,a7,272a - pr = l - 1; - 2710: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 2714: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2718: 70028c63 beqz t0,2e30 - sign[0] = 1; - 271c: 670d lui a4,0x3 - 271e: d0170713 addi a4,a4,-767 # 2d01 - 2722: 06e11423 sh a4,104(sp) - 2726: e3aff06f j 1d60 - else if (pr) - 272a: fe0885e3 beqz a7,2714 - --pr; // when using %e, there is one digit before the decimal - 272e: 38fd addiw a7,a7,-1 - 2730: b7d5 j 2714 - switch (f[0]) { - 2732: 0034c783 lbu a5,3(s1) - f += 3; - 2736: 048d addi s1,s1,3 - 2738: e53fe06f j 158a - if (!limit || *sn == 0) - 273c: 4601 li a2,0 - 273e: 4701 li a4,0 - 2740: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 2742: bca5 j 21ba - pr = 1; - 2744: 4885 li a7,1 - 2746: cf4ff06f j 1c3a - *s++ = sn[0]; - 274a: 000ac703 lbu a4,0(s5) - 274e: 0ce10023 sb a4,192(sp) - if (pr) - 2752: 54088563 beqz a7,2c9c - *s++ = stbsp__period; - 2756: 00004617 auipc a2,0x4 - 275a: 3f664603 lbu a2,1014(a2) # 6b4c - if ((l - 1) > (stbsp__uint32)pr) - 275e: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 2762: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 2766: 0008851b sext.w a0,a7 - 276a: 0007061b sext.w a2,a4 - 276e: 52c57163 bgeu a0,a2,2c90 - l = pr + 1; - 2772: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 2776: 8746 mv a4,a7 - 2778: 02071613 slli a2,a4,0x20 - 277c: 9201 srli a2,a2,0x20 - 277e: 0c210713 addi a4,sp,194 - 2782: 0a85 addi s5,s5,1 - 2784: 963a add a2,a2,a4 - *s++ = sn[n]; - 2786: 000ac583 lbu a1,0(s5) - 278a: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 278c: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 278e: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 2792: fec71ae3 bne a4,a2,2786 - tail[1] = h[0xe]; - 2796: 00e34803 lbu a6,14(t1) - dp -= 1; - 279a: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 279e: 02b00593 li a1,43 - tail[1] = h[0xe]; - 27a2: 070108a3 sb a6,113(sp) - if (dp < 0) { - 27a6: 00075663 bgez a4,27b2 - dp = -dp; - 27aa: 4705 li a4,1 - 27ac: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 27ae: 02d00593 li a1,45 - 27b2: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 27b6: 06300793 li a5,99 - 27ba: 4ee7d663 bge a5,a4,2ca6 - 27be: 4595 li a1,5 - 27c0: 4f95 li t6,5 - 27c2: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 27c4: 47a9 li a5,10 - dp /= 10; - 27c6: 02f7433b divw t1,a4,a5 - --n; - 27ca: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 27ce: 020f1293 slli t0,t5,0x20 - 27d2: 220e8813 addi a6,t4,544 - 27d6: 06010893 addi a7,sp,96 - 27da: 0202d293 srli t0,t0,0x20 - 27de: 01180eb3 add t4,a6,a7 - 27e2: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff88a8> - 27e6: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 27ea: 07f10823 sb t6,112(sp) - if (n <= 3) - 27ee: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 27f0: 02f7673b remw a4,a4,a5 - dp /= 10; - 27f4: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 27f8: 02f36abb remw s5,t1,a5 - 27fc: 0307071b addiw a4,a4,48 - 2800: deee8823 sb a4,-528(t4) - 2804: 030a871b addiw a4,s5,48 - 2808: dee28823 sb a4,-528(t0) - if (n <= 3) - 280c: 014f0a63 beq t5,s4,2820 - dp /= 10; - 2810: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 2814: 02f867bb remw a5,a6,a5 - 2818: 0307879b addiw a5,a5,48 - 281c: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 2820: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 2822: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 2826: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 282a: 40d508bb subw a7,a0,a3 - 282e: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2830: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 2834: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8689> - 2836: bbc9 j 2608 - 2838: fc2e sd a1,56(sp) - 283a: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 283c: 8536 mv a0,a3 - 283e: e2cff06f j 1e6a - flt_lead: - 2842: 4581 li a1,0 - 2844: 4f81 li t6,0 - 2846: b3c9 j 2608 - n = pr + lead[0] + tail[0] + tz; - 2848: 06814a03 lbu s4,104(sp) - 284c: 000a0f9b sext.w t6,s4 - 2850: b901 j 2460 - if ((f[1] == '6') && (f[2] == '4')) { - 2852: 0024c683 lbu a3,2(s1) - 2856: 03400713 li a4,52 - 285a: 00e68463 beq a3,a4,2862 - 285e: e2bfe06f j 1688 - switch (f[0]) { - 2862: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2866: 020e6e13 ori t3,t3,32 - f += 3; - 286a: 048d addi s1,s1,3 - 286c: d1ffe06f j 158a - if (pr < (stbsp__int32)l) - 2870: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2874: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 2878: fff7c793 not a5,a5 - 287c: 97fd srai a5,a5,0x3f - 287e: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2880: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 2884: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 2886: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 2888: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 288c: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 288e: 835a mv t1,s6 - 2890: 00cb5363 bge s6,a2,2896 - 2894: 8332 mv t1,a2 - fw -= n; - 2896: 40e3033b subw t1,t1,a4 - goto scopy; - 289a: 4f81 li t6,0 - pr -= l; - 289c: 40d7873b subw a4,a5,a3 - cs = 0; - 28a0: 4281 li t0,0 - tz = 0; - 28a2: 4881 li a7,0 - goto scopy; - 28a4: c42ff06f j 1ce6 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 28a8: 415705b3 sub a1,a4,s5 - 28ac: 030002b7 lui t0,0x3000 - 28b0: 00b282bb addw t0,t0,a1 - l = pr - n; - 28b4: 0008859b sext.w a1,a7 - if (pr) - 28b8: 42088763 beqz a7,2ce6 - *s++ = stbsp__period; - 28bc: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 28c0: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 28c4: 00280713 addi a4,a6,2 - 28c8: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 28cc: 4065ed63 bltu a1,t1,2ce6 - while (n < l) { - 28d0: 5ed57863 bgeu a0,a3,2ec0 - 28d4: 40c687bb subw a5,a3,a2 - 28d8: 37fd addiw a5,a5,-1 - 28da: 1782 slli a5,a5,0x20 - 28dc: 9381 srli a5,a5,0x20 - 28de: 1602 slli a2,a2,0x20 - 28e0: 9201 srli a2,a2,0x20 - 28e2: 0785 addi a5,a5,1 - 28e4: 967a add a2,a2,t5 - 28e6: 97ba add a5,a5,a4 - *s++ = sn[n]; - 28e8: 00064503 lbu a0,0(a2) - 28ec: 0705 addi a4,a4,1 - while (n < l) { - 28ee: 0605 addi a2,a2,1 - *s++ = sn[n]; - 28f0: fea70fa3 sb a0,-1(a4) - while (n < l) { - 28f4: fef71ae3 bne a4,a5,28e8 - tz = pr - (l - dp); - 28f8: 01d585bb addw a1,a1,t4 - 28fc: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2900: 415787b3 sub a5,a5,s5 - 2904: b99d j 257a - fl |= STBSP__NEGATIVE; - 2906: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 290a: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 290e: b539 j 271c - tail[0] = (char)n; - 2910: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 2912: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 2916: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 291a: 4819 li a6,6 - 291c: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 291e: 4599 li a1,6 - dp /= 10; - 2920: 4f29 li t5,10 - if (n <= 3) - 2922: 428d li t0,3 - 2924: 87b2 mv a5,a2 - dp /= 10; - 2926: 03e7c7bb divw a5,a5,t5 - --n; - 292a: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 292c: 02059613 slli a2,a1,0x20 - 2930: 9201 srli a2,a2,0x20 - 2932: 06010e93 addi t4,sp,96 - 2936: 22060613 addi a2,a2,544 - 293a: 9676 add a2,a2,t4 - 293c: 03e7eebb remw t4,a5,t5 - 2940: 030e8e9b addiw t4,t4,48 - 2944: dfd60823 sb t4,-528(a2) - if (n <= 3) - 2948: fc559fe3 bne a1,t0,2926 - 294c: e6aff06f j 1fb6 - *s++ = h[(n64 >> 60) & 15]; - 2950: 93f1 srli a5,a5,0x3c - 2952: 97ae add a5,a5,a1 - 2954: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 2958: 1088 addi a0,sp,96 - 295a: 22080793 addi a5,a6,544 - 295e: 97aa add a5,a5,a0 - 2960: 03000513 li a0,48 - 2964: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 2968: 22068793 addi a5,a3,544 - 296c: 1094 addi a3,sp,96 - 296e: 96be add a3,a3,a5 - *s++ = stbsp__period; - 2970: 00004517 auipc a0,0x4 - 2974: 1dc54503 lbu a0,476(a0) # 6b4c - lead[2 + lead[0]] = 'x'; - 2978: 07800813 li a6,120 - sn = s; - 297c: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 2980: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 2984: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 2988: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 298c: 0c610023 sb t1,192(sp) - n64 <<= 4; - 2990: 0732 slli a4,a4,0xc - sn = s; - 2992: fcbe sd a5,120(sp) - n = pr; - 2994: 0008869b sext.w a3,a7 - while (n--) { - 2998: 4831 li a6,12 - if (n > 13) - 299a: 4535 li a0,13 - tz = pr - n; - 299c: 40a688bb subw a7,a3,a0 - while (n--) { - 29a0: 02081313 slli t1,a6,0x20 - 29a4: 02035313 srli t1,t1,0x20 - 29a8: 22030693 addi a3,t1,544 - 29ac: 1088 addi a0,sp,96 - 29ae: 9536 add a0,a0,a3 - 29b0: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 29b4: 03c75693 srli a3,a4,0x3c - 29b8: 96ae add a3,a3,a1 - 29ba: 0006c683 lbu a3,0(a3) - 29be: 0785 addi a5,a5,1 - n64 <<= 4; - 29c0: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 29c2: fed78fa3 sb a3,-1(a5) - while (n--) { - 29c6: fea797e3 bne a5,a0,29b4 - l = (int)(s - (num + 64)); - 29ca: 280d addiw a6,a6,3 - 29cc: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 29d0: fff6c713 not a4,a3 - 29d4: 977d srai a4,a4,0x3f - 29d6: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 29da: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 29de: 0007031b sext.w t1,a4 - pr -= l; - 29e2: 4107073b subw a4,a4,a6 - 29e6: d76ff06f j 1f5c - *--s = stbsp__comma; - 29ea: 00004a17 auipc s4,0x4 - 29ee: 096a0a13 addi s4,s4,150 # 6a80 - if (n64 >= 100000000) { - 29f2: 05f5e7b7 lui a5,0x5f5e - 29f6: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56787> - n = (stbsp__uint32)(n64 % 100000000); - 29fa: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 29fe: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 2a02: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 2a04: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56788> - l = 0; - 2a08: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2a0a: 040e7813 andi a6,t3,64 - 2a0e: 4701 li a4,0 - 2a10: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 2a12: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 2a16: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2a18: 430d li t1,3 - n /= 10; - 2a1a: 45a9 li a1,10 - while (n) { - 2a1c: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a1e: 06400f93 li t6,100 - if (n64 >= 100000000) { - 2a22: 67c2 ld a5,16(sp) - char *o = s - 8; - 2a24: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 2a28: 0fe7f763 bgeu a5,t5,2b16 - n = (stbsp__uint32)(n64 % 100000000); - 2a2c: 6662 ld a2,24(sp) - 2a2e: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 2a32: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2a36: 0e080463 beqz a6,2b1e - while (n) { - 2a3a: cb85 beqz a5,2a6a - *--s = stbsp__comma; - 2a3c: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2a3e: 00671763 bne a4,t1,2a4c - --o; - 2a42: 017a8023 sb s7,0(s5) - 2a46: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 2a48: 1afd addi s5,s5,-1 - l = 0; - 2a4a: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2a4c: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 2a4e: 02b7f63b remuw a2,a5,a1 - 2a52: 0306061b addiw a2,a2,48 - 2a56: 00ca8023 sb a2,0(s5) - n /= 10; - 2a5a: 02b7d63b divuw a2,a5,a1 - while (n) { - 2a5e: 00fef563 bgeu t4,a5,2a68 - *--s = stbsp__comma; - 2a62: 1afd addi s5,s5,-1 - 2a64: 87b2 mv a5,a2 - 2a66: bfe1 j 2a3e - while (n) { - 2a68: 4285 li t0,1 - if (n64 == 0) { - 2a6a: 020f0063 beqz t5,2a8a - while (s != o) - 2a6e: fb550ae3 beq a0,s5,2a22 - *--s = stbsp__comma; - 2a72: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2a74: 00080663 beqz a6,2a80 - 2a78: 08670863 beq a4,t1,2b08 - 2a7c: 2705 addiw a4,a4,1 - 2a7e: 4285 li t0,1 - *--s = '0'; - 2a80: 03000793 li a5,48 - 2a84: 00fa8023 sb a5,0(s5) - 2a88: b7dd j 2a6e - 2a8a: 00028363 beqz t0,2a90 - 2a8e: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2a90: 000ac703 lbu a4,0(s5) - 2a94: 03000793 li a5,48 - 2a98: 34f70b63 beq a4,a5,2dee - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2a9c: 051c addi a5,sp,640 - 2a9e: 415786bb subw a3,a5,s5 - tail[0] = 0; - 2aa2: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2aa6: 080e7713 andi a4,t3,128 - 2aaa: 87f2 mv a5,t3 - 2aac: 32070863 beqz a4,2ddc - 2ab0: 678d lui a5,0x3 - 2ab2: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 2ab6: 06f11423 sh a5,104(sp) - 2aba: 4705 li a4,1 - 2abc: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2abe: d0b6 sw a3,96(sp) - if (l == 0) { - 2ac0: 30068163 beqz a3,2dc2 - cs = l + (3 << 24); - 2ac4: 030002b7 lui t0,0x3000 - 2ac8: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 2acc: 0006861b sext.w a2,a3 - if (pr < 0) - 2ad0: fff8c793 not a5,a7 - 2ad4: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 2ad6: 00f8f7b3 and a5,a7,a5 - 2ada: 0007859b sext.w a1,a5 - 2ade: 00c5d363 bge a1,a2,2ae4 - 2ae2: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 2ae4: 00f7063b addw a2,a4,a5 - 2ae8: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2aea: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 2aec: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2af0: 835a mv t1,s6 - 2af2: 00cb5363 bge s6,a2,2af8 - 2af6: 8332 mv t1,a2 - fw -= n; - 2af8: 40e3033b subw t1,t1,a4 - scopy: - 2afc: 4f81 li t6,0 - pr -= l; - 2afe: 40d7873b subw a4,a5,a3 - tz = 0; - 2b02: 4881 li a7,0 - scopy: - 2b04: 9e2ff06f j 1ce6 - *--s = stbsp__comma; - 2b08: 87de mv a5,s7 - --o; - 2b0a: 157d addi a0,a0,-1 - l = 0; - 2b0c: 4701 li a4,0 - --o; - 2b0e: 4285 li t0,1 - 2b10: 00fa8023 sb a5,0(s5) - 2b14: bfa9 j 2a6e - n = (stbsp__uint32)n64; - 2b16: 000f079b sext.w a5,t5 - n64 = 0; - 2b1a: 4f01 li t5,0 - 2b1c: bf29 j 2a36 - 2b1e: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2b20: 03f7f63b remuw a2,a5,t6 - s -= 2; - 2b24: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2b26: 0007889b sext.w a7,a5 - 2b2a: 2605 addiw a2,a2,1 - 2b2c: 0016161b slliw a2,a2,0x1 - 2b30: 1602 slli a2,a2,0x20 - 2b32: 9201 srli a2,a2,0x20 - 2b34: 9652 add a2,a2,s4 - 2b36: 00065603 lhu a2,0(a2) - n /= 100; - 2b3a: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2b3e: 00ca9023 sh a2,0(s5) - } while (n); - 2b42: 06300613 li a2,99 - 2b46: fd166de3 bltu a2,a7,2b20 - 2b4a: 7882 ld a7,32(sp) - if (n64 == 0) { - 2b4c: f20f11e3 bnez t5,2a6e - 2b50: bf2d j 2a8a - *(stbsp__uint32 *)bf = 0x20202020; - 2b52: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2b56: 854a mv a0,s2 - *bf++ = ' '; - 2b58: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 2b5c: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa6a8> - stbsp__chk_cb_buf(1); - 2b60: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 2b64: 20000b93 li s7,512 - 2b68: 891a mv s2,t1 - 2b6a: 0a098063 beqz s3,2c0a - 2b6e: 40a40633 sub a2,s0,a0 - 2b72: 40cb87bb subw a5,s7,a2 - 2b76: 873e mv a4,a5 - 2b78: 00f95363 bge s2,a5,2b7e - 2b7c: 874a mv a4,s2 - 2b7e: 0007079b sext.w a5,a4 - fw -= i; - 2b82: 40e9093b subw s2,s2,a4 - while (i) { - 2b86: e799 bnez a5,2b94 - 2b88: a281 j 2cc8 - *bf++ = ' '; - 2b8a: 01540023 sb s5,0(s0) - --i; - 2b8e: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 2b90: 0405 addi s0,s0,1 - while (i) { - 2b92: cba1 beqz a5,2be2 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2b94: 00347713 andi a4,s0,3 - 2b98: fb6d bnez a4,2b8a - while (i >= 4) { - 2b9a: 470d li a4,3 - 2b9c: 40f75363 bge a4,a5,2fa2 - 2ba0: ffc7869b addiw a3,a5,-4 - 2ba4: 0026d79b srliw a5,a3,0x2 - 2ba8: 0017871b addiw a4,a5,1 - 2bac: 070a slli a4,a4,0x2 - 2bae: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 2bb0: 01642023 sw s6,0(s0) - bf += 4; - 2bb4: 0411 addi s0,s0,4 - while (i >= 4) { - 2bb6: fee41de3 bne s0,a4,2bb0 - 2bba: 0027979b slliw a5,a5,0x2 - 2bbe: 40f687bb subw a5,a3,a5 - while (i--) - 2bc2: fff7869b addiw a3,a5,-1 - 2bc6: cf91 beqz a5,2be2 - 2bc8: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 2bca: 0705 addi a4,a4,1 - while (i--) - 2bcc: 0007061b sext.w a2,a4 - *bf++ = ' '; - 2bd0: ff570fa3 sb s5,-1(a4) - while (i--) - 2bd4: fec79be3 bne a5,a2,2bca - 2bd8: 2685 addiw a3,a3,1 - 2bda: 02069793 slli a5,a3,0x20 - 2bde: 9381 srli a5,a5,0x20 - 2be0: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 2be2: 00098f63 beqz s3,2c00 - 2be6: 40a4063b subw a2,s0,a0 - 2bea: 00ca5b63 bge s4,a2,2c00 - 2bee: 65a2 ld a1,8(sp) - 2bf0: e81e sd t2,16(sp) - 2bf2: 00cd0d3b addw s10,s10,a2 - 2bf6: 9982 jalr s3 - 2bf8: 80050be3 beqz a0,240e - 2bfc: 63c2 ld t2,16(sp) - 2bfe: 842a mv s0,a0 - while (fw) { - 2c00: f60915e3 bnez s2,2b6a - 2c04: 892a mv s2,a0 - 2c06: f21fe06f j 1b26 - stbsp__cb_buf_clamp(i, fw); - 2c0a: 87ca mv a5,s2 - fw -= i; - 2c0c: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2c0e: b759 j 2b94 - } else if (fl & STBSP__LEADINGPLUS) { - 2c10: 002e7713 andi a4,t3,2 - 2c14: 94070663 beqz a4,1d60 - sign[0] = 1; - 2c18: 670d lui a4,0x3 - 2c1a: b0170713 addi a4,a4,-1279 # 2b01 - 2c1e: 06e11423 sh a4,104(sp) - 2c22: 93eff06f j 1d60 - if (((stbsp__uintptr)sn & 3) == 0) - 2c26: 87d6 mv a5,s5 - while (limit >= 4) { - 2c28: 470d li a4,3 - 2c2a: 22d77763 bgeu a4,a3,2e58 - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2c2e: feff05b7 lui a1,0xfeff0 - 2c32: 80808637 lui a2,0x80808 - 2c36: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8587> - 2c3a: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800708> - while (limit >= 4) { - 2c3e: 480d li a6,3 - 2c40: a029 j 2c4a - limit -= 4; - 2c42: 36f1 addiw a3,a3,-4 - sn += 4; - 2c44: 0791 addi a5,a5,4 - while (limit >= 4) { - 2c46: 20d87963 bgeu a6,a3,2e58 - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 2c4a: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2c4c: 00b7053b addw a0,a4,a1 - 2c50: fff74713 not a4,a4 - 2c54: 8f69 and a4,a4,a0 - 2c56: 8f71 and a4,a4,a2 - 2c58: 2701 sext.w a4,a4 - 2c5a: d765 beqz a4,2c42 - 2c5c: 02069713 slli a4,a3,0x20 - 2c60: 9301 srli a4,a4,0x20 - 2c62: 973e add a4,a4,a5 - 2c64: a021 j 2c6c - ++sn; - 2c66: 0785 addi a5,a5,1 - while (limit && *sn) { - 2c68: 00e78663 beq a5,a4,2c74 - 2c6c: 0007c683 lbu a3,0(a5) - 2c70: fafd bnez a3,2c66 - 2c72: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 2c74: 41570733 sub a4,a4,s5 - 2c78: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 2c7c: fff6c793 not a5,a3 - 2c80: 97fd srai a5,a5,0x3f - 2c82: 8f7d and a4,a4,a5 - 2c84: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2c88: 863e mv a2,a5 - pr -= l; - 2c8a: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 2c8c: d2eff06f j 21ba - for (n = 1; n < l; n++) - 2c90: 4605 li a2,1 - 2c92: aed663e3 bltu a2,a3,2778 - 2c96: 0c210613 addi a2,sp,194 - 2c9a: bcf5 j 2796 - l = pr + 1; - 2c9c: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 2c9e: 4501 li a0,0 - *s++ = sn[0]; - 2ca0: 0c110613 addi a2,sp,193 - 2ca4: bccd j 2796 - 2ca6: 4591 li a1,4 - 2ca8: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 2caa: 4e91 li t4,4 - 2cac: be21 j 27c4 - 2cae: 4a85 li s5,1 - 2cb0: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 2cb4: 4a05 li s4,1 - 2cb6: 920ff06f j 1dd6 - dp = (n64) ? -1022 : 0; - 2cba: 4601 li a2,0 - 2cbc: c119 beqz a0,2cc2 - 2cbe: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2cc2: 872a mv a4,a0 - 2cc4: a3aff06f j 1efe - stbsp__chk_cb_buf(1); - 2cc8: 2601 sext.w a2,a2 - 2cca: 1fe00793 li a5,510 - 2cce: f2c7c0e3 blt a5,a2,2bee - 2cd2: bd61 j 2b6a - tail[0] = (char)n; - 2cd4: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 2cd6: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 2cda: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2cde: 4815 li a6,5 - 2ce0: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2ce2: 4595 li a1,5 - 2ce4: b935 j 2920 - l = pr + dp; - 2ce6: 011786bb addw a3,a5,a7 - 2cea: d0b6 sw a3,96(sp) - 2cec: b6d5 j 28d0 - s = (char *)"null"; - 2cee: 00002a97 auipc s5,0x2 - 2cf2: 46aa8a93 addi s5,s5,1130 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x92> - 2cf6: c80ff06f j 2176 - } else if (fl & STBSP__LEADINGPLUS) { - 2cfa: 002e7793 andi a5,t3,2 - 2cfe: 1c079c63 bnez a5,2ed6 - sign[0] = 0; - 2d02: 4689 li a3,2 - 2d04: 4a09 li s4,2 - 2d06: 4805 li a6,1 - 2d08: 9e8ff06f j 1ef0 - sign[0] = 1; - 2d0c: 670d lui a4,0x3 - 2d0e: b0170713 addi a4,a4,-1279 # 2b01 - 2d12: 06e11423 sh a4,104(sp) - 2d16: b86ff06f j 209c - pr = 0; - 2d1a: 4881 li a7,0 - 2d1c: f1ffe06f j 1c3a - *s++ = '0'; - 2d20: 03000713 li a4,48 - 2d24: 0ce10023 sb a4,192(sp) - if (pr) - 2d28: 1a088c63 beqz a7,2ee0 - *s++ = stbsp__period; - 2d2c: 00004717 auipc a4,0x4 - 2d30: e2074703 lbu a4,-480(a4) # 6b4c - n = -dp; - 2d34: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 2d38: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 2d3c: 0007871b sext.w a4,a5 - 2d40: 00e8d363 bge a7,a4,2d46 - 2d44: 87c6 mv a5,a7 - 2d46: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 2d4a: 00d7833b addw t1,a5,a3 - 2d4e: 883a mv a6,a4 - while (i) { - 2d50: 0c210793 addi a5,sp,194 - *s++ = '0'; - 2d54: 03000513 li a0,48 - while (i) { - 2d58: e711 bnez a4,2d64 - 2d5a: a271 j 2ee6 - if ((((stbsp__uintptr)s) & 3) == 0) - 2d5c: 0037f613 andi a2,a5,3 - 2d60: 18060563 beqz a2,2eea - *s++ = '0'; - 2d64: 85ba mv a1,a4 - 2d66: 00a78023 sb a0,0(a5) - --i; - 2d6a: 377d addiw a4,a4,-1 - *s++ = '0'; - 2d6c: 0785 addi a5,a5,1 - while (i) { - 2d6e: f77d bnez a4,2d5c - if ((stbsp__int32)(l + n) > pr) - 2d70: 0003071b sext.w a4,t1 - 2d74: 4108863b subw a2,a7,a6 - 2d78: 00e8d563 bge a7,a4,2d82 - l = pr - n; - 2d7c: 0006069b sext.w a3,a2 - 2d80: d0b2 sw a2,96(sp) - while (i) { - 2d82: c68d beqz a3,2dac - 2d84: 7566 ld a0,120(sp) - 2d86: 02069813 slli a6,a3,0x20 - 2d8a: 02085813 srli a6,a6,0x20 - 2d8e: 01078eb3 add t4,a5,a6 - 2d92: 85aa mv a1,a0 - 2d94: 873e mv a4,a5 - *s++ = *sn++; - 2d96: 0005c883 lbu a7,0(a1) - 2d9a: 0705 addi a4,a4,1 - while (i) { - 2d9c: 0585 addi a1,a1,1 - *s++ = *sn++; - 2d9e: ff170fa3 sb a7,-1(a4) - while (i) { - 2da2: ffd71ae3 bne a4,t4,2d96 - 2da6: 9542 add a0,a0,a6 - 2da8: 97c2 add a5,a5,a6 - 2daa: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2dac: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2db0: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 2db4: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2db8: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2dbc: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8689> - 2dbe: fbcff06f j 257a - *--s = '0'; - 2dc2: 03000793 li a5,48 - 2dc6: fefa8fa3 sb a5,-1(s5) - l = 1; - 2dca: 030002b7 lui t0,0x3000 - 2dce: 4785 li a5,1 - 2dd0: d0be sw a5,96(sp) - *--s = '0'; - 2dd2: 1afd addi s5,s5,-1 - l = 1; - 2dd4: 4605 li a2,1 - 2dd6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8689> - 2dd8: 4685 li a3,1 - 2dda: b9dd j 2ad0 - } else if (fl & STBSP__LEADINGSPACE) { - 2ddc: 004e7713 andi a4,t3,4 - 2de0: e74d bnez a4,2e8a - } else if (fl & STBSP__LEADINGPLUS) { - 2de2: 8b89 andi a5,a5,2 - 2de4: efd9 bnez a5,2e82 - sign[0] = 0; - 2de6: 06010423 sb zero,104(sp) - 2dea: 4a01 li s4,0 - 2dec: b9c9 j 2abe - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2dee: 051c addi a5,sp,640 - 2df0: cafa89e3 beq s5,a5,2aa2 - ++s; - 2df4: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2df6: 415786bb subw a3,a5,s5 - 2dfa: b165 j 2aa2 - n = dp - n; - 2dfc: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2e00: 12030e63 beqz t1,2f3c - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2e04: 4511 li a0,4 - 2e06: 03000613 li a2,48 - *s++ = stbsp__comma; - 2e0a: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2e0e: 00030563 beqz t1,2e18 - 2e12: 2585 addiw a1,a1,1 - 2e14: 00a58963 beq a1,a0,2e26 - 2e18: 8736 mv a4,a3 - --n; - 2e1a: 37fd addiw a5,a5,-1 - 2e1c: fec70fa3 sb a2,-1(a4) - while (n) { - 2e20: f7ed bnez a5,2e0a - 2e22: f38ff06f j 255a - 2e26: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 2e2a: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2e2c: 4585 li a1,1 - 2e2e: b7f5 j 2e1a - sign[0] = 0; - 2e30: 06010423 sb zero,104(sp) - 2e34: f1dfe06f j 1d50 - tail[idx + 1] = "_kMGT"[fl >> 24]; - 2e38: 00002697 auipc a3,0x2 - 2e3c: 33068693 addi a3,a3,816 # 5168 <_GLOBAL__sub_I__ZSt3cin+0xa2> - 2e40: 9736 add a4,a4,a3 - 2e42: 00074683 lbu a3,0(a4) - 2e46: 1088 addi a0,sp,96 - 2e48: 22060713 addi a4,a2,544 - 2e4c: 972a add a4,a4,a0 - 2e4e: ded70823 sb a3,-528(a4) - idx++; - 2e52: 8fb2 mv t6,a2 - 2e54: fb0ff06f j 2604 - while (limit && *sn) { - 2e58: e00692e3 bnez a3,2c5c - 2e5c: bd19 j 2c72 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2e5e: 0008071b sext.w a4,a6 - 2e62: 86c2 mv a3,a6 - 2e64: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 2e66: 863a mv a2,a4 - 2e68: 00e8d363 bge a7,a4,2e6e - 2e6c: 8646 mv a2,a7 - 2e6e: 40f608bb subw a7,a2,a5 - 2e72: 814ff06f j 1e86 - divisor = 1000.0f; - 2e76: 00003797 auipc a5,0x3 - 2e7a: a927b787 fld fa5,-1390(a5) # 5908 - 2e7e: dd5fe06f j 1c52 - 2e82: 678d lui a5,0x3 - 2e84: b017879b addiw a5,a5,-1279 # 2b01 - 2e88: b13d j 2ab6 - 2e8a: 6789 lui a5,0x2 - 2e8c: 2785 addiw a5,a5,1 # 2001 - 2e8e: b125 j 2ab6 - *s++ = stbsp__period; - 2e90: 00004517 auipc a0,0x4 - 2e94: cbc54503 lbu a0,-836(a0) # 6b4c - sn = s; - 2e98: 0c210793 addi a5,sp,194 - n = pr; - 2e9c: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 2ea0: 0ca100a3 sb a0,193(sp) - sn = s; - 2ea4: fcbe sd a5,120(sp) - if (n > 13) - 2ea6: 4535 li a0,13 - n64 <<= 4; - 2ea8: 0712 slli a4,a4,0x4 - if (n > 13) - 2eaa: 8836 mv a6,a3 - 2eac: 00d57363 bgeu a0,a3,2eb2 - 2eb0: 4835 li a6,13 - 2eb2: 0008051b sext.w a0,a6 - while (n--) { - 2eb6: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 2eb8: af1542e3 blt a0,a7,299c - tz = 0; - 2ebc: 4881 li a7,0 - 2ebe: b4cd j 29a0 - while (n < l) { - 2ec0: 87ba mv a5,a4 - 2ec2: bc1d j 28f8 - tail[0] = (char)n; - 2ec4: 478d li a5,3 - 2ec6: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2eca: 06b109a3 sb a1,115(sp) - 2ece: 480d li a6,3 - 2ed0: 4f8d li t6,3 - 2ed2: 8e4ff06f j 1fb6 - 2ed6: 678d lui a5,0x3 - 2ed8: b017879b addiw a5,a5,-1279 # 2b01 - 2edc: 80aff06f j 1ee6 - if (pr) - 2ee0: 8336 mv t1,a3 - *s++ = '0'; - 2ee2: 0c110793 addi a5,sp,193 - while (i) { - 2ee6: 4801 li a6,0 - 2ee8: b561 j 2d70 - while (i >= 4) { - 2eea: 460d li a2,3 - 2eec: 04e65663 bge a2,a4,2f38 - 2ef0: ffb5871b addiw a4,a1,-5 - 2ef4: 0027559b srliw a1,a4,0x2 - 2ef8: 0015861b addiw a2,a1,1 - 2efc: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2efe: 30303537 lui a0,0x30303 - 2f02: 963e add a2,a2,a5 - 2f04: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb6b8> - 2f08: c388 sw a0,0(a5) - s += 4; - 2f0a: 0791 addi a5,a5,4 - while (i >= 4) { - 2f0c: fef61ee3 bne a2,a5,2f08 - 2f10: 0025959b slliw a1,a1,0x2 - 2f14: 9f0d subw a4,a4,a1 - while (i) { - 2f16: e4070de3 beqz a4,2d70 - *s++ = '0'; - 2f1a: 03000513 li a0,48 - while (i) { - 2f1e: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 2f22: 0605 addi a2,a2,1 - while (i) { - 2f24: 00060e9b sext.w t4,a2 - *s++ = '0'; - 2f28: fea60fa3 sb a0,-1(a2) - while (i) { - 2f2c: ffd59be3 bne a1,t4,2f22 - 2f30: 1702 slli a4,a4,0x20 - 2f32: 9301 srli a4,a4,0x20 - 2f34: 97ba add a5,a5,a4 - 2f36: bd2d j 2d70 - while (i >= 4) { - 2f38: 863e mv a2,a5 - 2f3a: b7c5 j 2f1a - if ((((stbsp__uintptr)s) & 3) == 0) - 2f3c: 00377693 andi a3,a4,3 - 2f40: ce81 beqz a3,2f58 - *s++ = '0'; - 2f42: 03000693 li a3,48 - 2f46: 00d70023 sb a3,0(a4) - --n; - 2f4a: 37fd addiw a5,a5,-1 - *s++ = '0'; - 2f4c: 0705 addi a4,a4,1 - while (n) { - 2f4e: e0078663 beqz a5,255a - if ((((stbsp__uintptr)s) & 3) == 0) - 2f52: 00377613 andi a2,a4,3 - 2f56: fa65 bnez a2,2f46 - while (n >= 4) { - 2f58: 468d li a3,3 - 2f5a: eaf6f5e3 bgeu a3,a5,2e04 - 2f5e: ffc7869b addiw a3,a5,-4 - 2f62: 0026d69b srliw a3,a3,0x2 - 2f66: 2685 addiw a3,a3,1 - 2f68: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2f6a: 30303637 lui a2,0x30303 - 2f6e: 96ba add a3,a3,a4 - 2f70: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb6b8> - 2f74: c310 sw a2,0(a4) - s += 4; - 2f76: 0711 addi a4,a4,4 - while (n >= 4) { - 2f78: fed71ee3 bne a4,a3,2f74 - 2f7c: 8b8d andi a5,a5,3 - while (n) { - 2f7e: e80793e3 bnez a5,2e04 - 2f82: dd8ff06f j 255a - if (((stbsp__uintptr)sn & 3) == 0) - 2f86: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2f88: 56fd li a3,-1 - 2f8a: b155 j 2c2e - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2f8c: 5775 li a4,-3 - 2f8e: 00e7ce63 blt a5,a4,2faa - 2f92: f6fa4663 blt s4,a5,26fe - if (dp > 0) { - 2f96: ecf054e3 blez a5,2e5e - 2f9a: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2f9c: 4881 li a7,0 - 2f9e: ee9fe06f j 1e86 - while (i--) - 2fa2: fff7869b addiw a3,a5,-1 - 2fa6: 8722 mv a4,s0 - 2fa8: b105 j 2bc8 - if (pr > (stbsp__int32)l) - 2faa: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2fae: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 2fb0: 86c2 mv a3,a6 - 2fb2: 88d2 mv a7,s4 - 2fb4: f7475d63 bge a4,s4,272e - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2fb8: 8542 mv a0,a6 - 2fba: f56ff06f j 2710 - -0000000000002fbe : -{ - 2fbe: 715d addi sp,sp,-80 - va_start(va, fmt); - 2fc0: 02010313 addi t1,sp,32 -{ - 2fc4: f032 sd a2,32(sp) - 2fc6: f436 sd a3,40(sp) - 2fc8: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2fca: 86ae mv a3,a1 - 2fcc: 862a mv a2,a0 - 2fce: 871a mv a4,t1 - 2fd0: 4581 li a1,0 - 2fd2: 4501 li a0,0 -{ - 2fd4: ec06 sd ra,24(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(vsprintfcb)(0, 0, buf, fmt, va); - 2fde: bc6fe0ef jal 13a4 -} - 2fe2: 60e2 ld ra,24(sp) - 2fe4: 6161 addi sp,sp,80 - 2fe6: 8082 ret - -0000000000002fe8 : -{ - 2fe8: dd010113 addi sp,sp,-560 - 2fec: 22813023 sd s0,544(sp) - 2ff0: 20913c23 sd s1,536(sp) - 2ff4: 22113423 sd ra,552(sp) - 2ff8: 84ae mv s1,a1 - 2ffa: 842a mv s0,a0 - 2ffc: 88b2 mv a7,a2 - 2ffe: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 3000: e591 bnez a1,300c - 3002: c141 beqz a0,3082 - c.buf = buf; - 3004: e02a sd a0,0(sp) - c.count = count; - 3006: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3008: 0810 addi a2,sp,16 - 300a: a089 j 304c - if (len > c->count) - 300c: 0015a593 slti a1,a1,1 - 3010: 40b005bb negw a1,a1 - 3014: 8de5 and a1,a1,s1 - c.buf = buf; - 3016: e02a sd a0,0(sp) - c.count = count; - 3018: c426 sw s1,8(sp) - c.length = 0; - 301a: c602 sw zero,12(sp) - if (len > c->count) - 301c: 2581 sext.w a1,a1 - if (len) { - 301e: 0804d663 bgez s1,30aa - s = buf; - 3022: 4781 li a5,0 - if (buf != c->buf) { - 3024: c911 beqz a0,3038 - *d++ = *s++; - 3026: 0007c803 lbu a6,0(a5) - 302a: 0785 addi a5,a5,1 - 302c: 00f40533 add a0,s0,a5 - 3030: ff050fa3 sb a6,-1(a0) - } while (s < se); - 3034: feb7e9e3 bltu a5,a1,3026 - c->count -= len; - 3038: 40b486bb subw a3,s1,a1 - c->buf += len; - 303c: 95a2 add a1,a1,s0 - 303e: e02e sd a1,0(sp) - c->count -= len; - 3040: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3042: 1ff00793 li a5,511 - 3046: fcd7d1e3 bge a5,a3,3008 - 304a: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 304c: 86c6 mv a3,a7 - 304e: 858a mv a1,sp - 3050: ffffd517 auipc a0,0xffffd - 3054: 21650513 addi a0,a0,534 # 266 - 3058: b4cfe0ef jal 13a4 - l = (int)( c.buf - buf ); - 305c: 6782 ld a5,0(sp) - 305e: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 3060: 0097c463 blt a5,s1,3068 - l = count - 1; - 3064: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 3068: 943e add s0,s0,a5 - 306a: 00040023 sb zero,0(s0) -} - 306e: 22813083 ld ra,552(sp) - 3072: 22013403 ld s0,544(sp) - 3076: 4532 lw a0,12(sp) - 3078: 21813483 ld s1,536(sp) - 307c: 23010113 addi sp,sp,560 - 3080: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3082: 86b2 mv a3,a2 - 3084: 858a mv a1,sp - 3086: 0810 addi a2,sp,16 - 3088: ffffd517 auipc a0,0xffffd - 308c: 22c50513 addi a0,a0,556 # 2b4 - c.length = 0; - 3090: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3092: b12fe0ef jal 13a4 -} - 3096: 22813083 ld ra,552(sp) - 309a: 22013403 ld s0,544(sp) - 309e: 4532 lw a0,12(sp) - 30a0: 21813483 ld s1,536(sp) - 30a4: 23010113 addi sp,sp,560 - 30a8: 8082 ret - 30aa: 86a6 mv a3,s1 - 30ac: bf59 j 3042 - -00000000000030ae : -{ - 30ae: 715d addi sp,sp,-80 - va_start(va, fmt); - 30b0: 02810313 addi t1,sp,40 -{ - 30b4: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 30b6: 869a mv a3,t1 -{ - 30b8: ec06 sd ra,24(sp) - 30ba: f83a sd a4,48(sp) - 30bc: fc3e sd a5,56(sp) - 30be: e0c2 sd a6,64(sp) - 30c0: e4c6 sd a7,72(sp) - va_start(va, fmt); - 30c2: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 30c4: f25ff0ef jal 2fe8 -} - 30c8: 60e2 ld ra,24(sp) - 30ca: 6161 addi sp,sp,80 - 30cc: 8082 ret - -00000000000030ce : -{ - 30ce: 86ae mv a3,a1 - 30d0: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 30d2: 4581 li a1,0 - 30d4: 862a mv a2,a0 - 30d6: 4501 li a0,0 - 30d8: accfe06f j 13a4 - -00000000000030dc : -{ - 30dc: 7119 addi sp,sp,-128 - va_start(ap, format); - 30de: 05010313 addi t1,sp,80 -{ - 30e2: e0a2 sd s0,64(sp) - 30e4: fc26 sd s1,56(sp) - 30e6: 842a mv s0,a0 - 30e8: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 30ea: 0808 addi a0,sp,16 - ctx.limit = size; - 30ec: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 30ee: 861a mv a2,t1 -{ - 30f0: e486 sd ra,72(sp) - 30f2: ecb6 sd a3,88(sp) - 30f4: f0ba sd a4,96(sp) - 30f6: f4be sd a5,104(sp) - 30f8: f8c2 sd a6,112(sp) - 30fa: fcc6 sd a7,120(sp) - va_start(ap, format); - 30fc: e41a sd t1,8(sp) - ctx.buf = str; - 30fe: e822 sd s0,16(sp) - ctx.limit = size; - 3100: ec26 sd s1,24(sp) - ctx.written = 0; - 3102: f002 sd zero,32(sp) - ctx.stream = NULL; - 3104: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 3106: 02c000ef jal 3132 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 310a: 7502 ld a0,32(sp) - 310c: 00950b63 beq a0,s1,3122 - str[ctx.written] = '\0'; - 3110: 942a add s0,s0,a0 - 3112: 00040023 sb zero,0(s0) -} - 3116: 60a6 ld ra,72(sp) - 3118: 6406 ld s0,64(sp) - 311a: 74e2 ld s1,56(sp) - 311c: 2501 sext.w a0,a0 - 311e: 6109 addi sp,sp,128 - 3120: 8082 ret - str[size - 1] = '\0'; - 3122: fe040f23 sb zero,-2(s0) -} - 3126: 60a6 ld ra,72(sp) - 3128: 6406 ld s0,64(sp) - 312a: 74e2 ld s1,56(sp) - 312c: 2501 sext.w a0,a0 - 312e: 6109 addi sp,sp,128 - 3130: 8082 ret - -0000000000003132 <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 3132: 7129 addi sp,sp,-320 - 3134: edee sd s11,216(sp) - 3136: fe06 sd ra,312(sp) - 3138: 8dae mv s11,a1 - while (*p) - 313a: 0005c583 lbu a1,0(a1) - 313e: cde9 beqz a1,3218 <_vprintf_core.constprop.0.isra.0+0xe6> - 3140: f626 sd s1,296(sp) - 3142: f24a sd s2,288(sp) - 3144: ee4e sd s3,280(sp) - 3146: e656 sd s5,264(sp) - 3148: f9e2 sd s8,240(sp) - 314a: fa22 sd s0,304(sp) - 314c: ea52 sd s4,272(sp) - 314e: e25a sd s6,256(sp) - 3150: fdde sd s7,248(sp) - 3152: f5e6 sd s9,232(sp) - 3154: f1ea sd s10,224(sp) - 3156: 84aa mv s1,a0 - 3158: 8c32 mv s8,a2 - if (*p != '%') - 315a: 02500a93 li s5,37 - 315e: 49c1 li s3,16 - 3160: 00002917 auipc s2,0x2 - 3164: 2dc90913 addi s2,s2,732 # 543c <_GLOBAL__sub_I__ZSt3cin+0x376> - 3168: a039 j 3176 <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 316a: 8526 mv a0,s1 - 316c: 952fe0ef jal 12be <_out_char> - while (*p) - 3170: 000dc583 lbu a1,0(s11) - 3174: c5d9 beqz a1,3202 <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 3176: 0d85 addi s11,s11,1 - if (*p != '%') - 3178: ff5599e3 bne a1,s5,316a <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 317c: 4501 li a0,0 - 317e: 4881 li a7,0 - 3180: 4581 li a1,0 - 3182: 4b01 li s6,0 - 3184: 4a01 li s4,0 - if (*p == '-') - 3186: 000dcc83 lbu s9,0(s11) - 318a: fe0c871b addiw a4,s9,-32 - 318e: 0ff77713 zext.b a4,a4 - 3192: 00e9e763 bltu s3,a4,31a0 <_vprintf_core.constprop.0.isra.0+0x6e> - 3196: 070a slli a4,a4,0x2 - 3198: 974a add a4,a4,s2 - 319a: 4318 lw a4,0(a4) - 319c: 974a add a4,a4,s2 - 319e: 8702 jr a4 - if (*p == '*') - 31a0: 02a00793 li a5,42 - 31a4: 16fc9c63 bne s9,a5,331c <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 31a8: 000c2403 lw s0,0(s8) - 31ac: 0c21 addi s8,s8,8 - if (width < 0) - 31ae: 00045563 bgez s0,31b8 <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 31b2: 4080043b negw s0,s0 - flag_left = 1; - 31b6: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 31b8: 001dcc83 lbu s9,1(s11) - p++; - 31bc: 0d85 addi s11,s11,1 - if (*p == '.') - 31be: 02e00793 li a5,46 - int precision = -1; - 31c2: 5bfd li s7,-1 - if (*p == '.') - 31c4: 18fc8a63 beq s9,a5,3358 <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 31c8: 06c00693 li a3,108 - 31cc: 8666 mv a2,s9 - 31ce: 1adc8663 beq s9,a3,337a <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 31d2: 07a00693 li a3,122 - p++; - 31d6: 0d85 addi s11,s11,1 - else if (*p == 'z') - 31d8: 24dc8163 beq s9,a3,341a <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 31dc: 06400693 li a3,100 - 31e0: 4adc8163 beq s9,a3,3682 <_vprintf_core.constprop.0.isra.0+0x550> - 31e4: 06400693 li a3,100 - int len_mod = 0; - 31e8: 4e81 li t4,0 - 31ea: 1b96e663 bltu a3,s9,3396 <_vprintf_core.constprop.0.isra.0+0x264> - 31ee: 04700693 li a3,71 - 31f2: 2796e463 bltu a3,s9,345a <_vprintf_core.constprop.0.isra.0+0x328> - 31f6: 04400693 li a3,68 - 31fa: 0596e363 bltu a3,s9,3240 <_vprintf_core.constprop.0.isra.0+0x10e> - 31fe: 240c9363 bnez s9,3444 <_vprintf_core.constprop.0.isra.0+0x312> - 3202: 7452 ld s0,304(sp) - 3204: 74b2 ld s1,296(sp) - 3206: 7912 ld s2,288(sp) - 3208: 69f2 ld s3,280(sp) - 320a: 6a52 ld s4,272(sp) - 320c: 6ab2 ld s5,264(sp) - 320e: 6b12 ld s6,256(sp) - 3210: 7bee ld s7,248(sp) - 3212: 7c4e ld s8,240(sp) - 3214: 7cae ld s9,232(sp) - 3216: 7d0e ld s10,224(sp) -} - 3218: 70f2 ld ra,312(sp) - 321a: 6dee ld s11,216(sp) - 321c: 6131 addi sp,sp,320 - 321e: 8082 ret - if (*p == '-') - 3220: 4585 li a1,1 - p++; - 3222: 0d85 addi s11,s11,1 - if (*p == '-') - 3224: b78d j 3186 <_vprintf_core.constprop.0.isra.0+0x54> - 3226: 4505 li a0,1 - p++; - 3228: 0d85 addi s11,s11,1 - while (1) - 322a: bfb1 j 3186 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 322c: 4885 li a7,1 - p++; - 322e: 0d85 addi s11,s11,1 - while (1) - 3230: bf99 j 3186 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3232: 4b05 li s6,1 - p++; - 3234: 0d85 addi s11,s11,1 - while (1) - 3236: bf81 j 3186 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3238: 4a05 li s4,1 - p++; - 323a: 0d85 addi s11,s11,1 - while (1) - 323c: b7a9 j 3186 <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 323e: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 3240: 02500693 li a3,37 - 3244: 02d10823 sb a3,48(sp) - 3248: 4d05 li s10,1 - if (flag_left) - 324a: 000a0763 beqz s4,3258 <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 324e: 02d00693 li a3,45 - 3252: 02d108a3 sb a3,49(sp) - 3256: 4d09 li s10,2 - if (flag_zero) - 3258: 000b0c63 beqz s6,3270 <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 325c: 0c0d0793 addi a5,s10,192 - 3260: 0818 addi a4,sp,16 - 3262: 00e786b3 add a3,a5,a4 - 3266: 03000613 li a2,48 - 326a: f6c68023 sb a2,-160(a3) - 326e: 2d05 addiw s10,s10,1 - if (flag_plus) - 3270: c999 beqz a1,3286 <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 3272: 0c0d0793 addi a5,s10,192 - 3276: 0818 addi a4,sp,16 - 3278: 00e786b3 add a3,a5,a4 - 327c: 02b00613 li a2,43 - 3280: f6c68023 sb a2,-160(a3) - 3284: 2d05 addiw s10,s10,1 - if (flag_space) - 3286: 00088c63 beqz a7,329e <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 328a: 0c0d0793 addi a5,s10,192 - 328e: 0818 addi a4,sp,16 - 3290: 00e786b3 add a3,a5,a4 - 3294: 02000613 li a2,32 - 3298: f6c68023 sb a2,-160(a3) - 329c: 2d05 addiw s10,s10,1 - if (flag_hash) - 329e: c919 beqz a0,32b4 <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 32a0: 0c0d0793 addi a5,s10,192 - 32a4: 0818 addi a4,sp,16 - 32a6: 00e786b3 add a3,a5,a4 - 32aa: 02300613 li a2,35 - 32ae: f6c68023 sb a2,-160(a3) - 32b2: 2d05 addiw s10,s10,1 - if (width > 0) - 32b4: 03010a13 addi s4,sp,48 - 32b8: 28804563 bgtz s0,3542 <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 32bc: 260bd763 bgez s7,352a <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 32c0: 0c0d0793 addi a5,s10,192 - 32c4: 0818 addi a4,sp,16 - 32c6: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 32ca: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 32ce: 001d071b addiw a4,s10,1 - 32d2: 0c070793 addi a5,a4,192 - 32d6: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 32d8: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 32dc: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 32de: 08000593 li a1,128 - 32e2: 8652 mv a2,s4 - 32e4: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 32e6: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 32ea: dc5ff0ef jal 30ae - for (int i = 0; f_buf[i] != '\0'; i++) - 32ee: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 32f2: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 32f4: 05110413 addi s0,sp,81 - 32f8: e6058ce3 beqz a1,3170 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 32fc: 8526 mv a0,s1 - 32fe: fc1fd0ef jal 12be <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 3302: 00044583 lbu a1,0(s0) - 3306: 0405 addi s0,s0,1 - 3308: e60584e3 beqz a1,3170 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 330c: 8526 mv a0,s1 - 330e: fb1fd0ef jal 12be <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 3312: 00044583 lbu a1,0(s0) - 3316: 0405 addi s0,s0,1 - 3318: f1f5 bnez a1,32fc <_vprintf_core.constprop.0.isra.0+0x1ca> - 331a: bd99 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 331c: fd0c869b addiw a3,s9,-48 - 3320: 0ff6f313 zext.b t1,a3 - 3324: 4725 li a4,9 - int width = 0; - 3326: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 3328: 4625 li a2,9 - 332a: e8676ae3 bltu a4,t1,31be <_vprintf_core.constprop.0.isra.0+0x8c> - 332e: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 3332: 0024171b slliw a4,s0,0x2 - 3336: 9f21 addw a4,a4,s0 - 3338: 0017171b slliw a4,a4,0x1 - 333c: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 3340: fd0c869b addiw a3,s9,-48 - 3344: 0ff6f713 zext.b a4,a3 - p++; - 3348: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 334a: fee672e3 bgeu a2,a4,332e <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 334e: 02e00793 li a5,46 - int precision = -1; - 3352: 5bfd li s7,-1 - if (*p == '.') - 3354: e6fc9ae3 bne s9,a5,31c8 <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 3358: 001dcc83 lbu s9,1(s11) - 335c: 02a00793 li a5,42 - 3360: 16fc9f63 bne s9,a5,34de <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 3364: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 3368: 06c00693 li a3,108 - precision = va_arg(ap, int); - 336c: 000c2b83 lw s7,0(s8) - p++; - 3370: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 3372: 0c21 addi s8,s8,8 - if (*p == 'l') - 3374: 8666 mv a2,s9 - 3376: e4dc9ee3 bne s9,a3,31d2 <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 337a: 001dcc83 lbu s9,1(s11) - 337e: 08cc8d63 beq s9,a2,3418 <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 3382: 06400693 li a3,100 - 3386: 0d89 addi s11,s11,2 - if (!spec) - 3388: 4cdc8c63 beq s9,a3,3860 <_vprintf_core.constprop.0.isra.0+0x72e> - 338c: 06400693 li a3,100 - len_mod = 1; - 3390: 4e85 li t4,1 - 3392: e596fee3 bgeu a3,s9,31ee <_vprintf_core.constprop.0.isra.0+0xbc> - 3396: f9bc869b addiw a3,s9,-101 - 339a: 0ff6f693 zext.b a3,a3 - 339e: 464d li a2,19 - 33a0: 12d66863 bltu a2,a3,34d0 <_vprintf_core.constprop.0.isra.0+0x39e> - 33a4: 4e05 li t3,1 - 33a6: 00091637 lui a2,0x91 - 33aa: 00de1333 sll t1,t3,a3 - 33ae: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88e98> - 33b2: 00c37633 and a2,t1,a2 - 33b6: 1a061463 bnez a2,355e <_vprintf_core.constprop.0.isra.0+0x42c> - 33ba: 00737313 andi t1,t1,7 - 33be: e80311e3 bnez t1,3240 <_vprintf_core.constprop.0.isra.0+0x10e> - 33c2: 4639 li a2,14 - 33c4: 10c69663 bne a3,a2,34d0 <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 33c8: 000c3c83 ld s9,0(s8) - if (!s) - 33cc: 420c8863 beqz s9,37fc <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 33d0: 000cc683 lbu a3,0(s9) - 33d4: 38068863 beqz a3,3764 <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 33d8: 8666 mv a2,s9 - int len = 0; - 33da: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 33dc: 00db8863 beq s7,a3,33ec <_vprintf_core.constprop.0.isra.0+0x2ba> - 33e0: 00164583 lbu a1,1(a2) - len++; - 33e4: 2685 addiw a3,a3,1 - tmp++; - 33e6: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 33e8: f9f5 bnez a1,33dc <_vprintf_core.constprop.0.isra.0+0x2aa> - 33ea: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 33ec: 268bc563 blt s7,s0,3656 <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 33f0: 4401 li s0,0 - 33f2: 020b8163 beqz s7,3414 <_vprintf_core.constprop.0.isra.0+0x2e2> - 33f6: 4d01 li s10,0 - _out_char(ctx, s[i]); - 33f8: 01ac86b3 add a3,s9,s10 - 33fc: 0006c583 lbu a1,0(a3) - 3400: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 3402: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 3404: ebbfd0ef jal 12be <_out_char> - for (int i = 0; i < len; i++) - 3408: 000d069b sext.w a3,s10 - 340c: ff76c6e3 blt a3,s7,33f8 <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 3410: 260a1463 bnez s4,3678 <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 3414: 0c21 addi s8,s8,8 - 3416: bba9 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 3418: 0d89 addi s11,s11,2 - char spec = *p++; - 341a: 000dcc83 lbu s9,0(s11) - 341e: 06400693 li a3,100 - 3422: 001d8793 addi a5,s11,1 - if (!spec) - 3426: 3edc8063 beq s9,a3,3806 <_vprintf_core.constprop.0.isra.0+0x6d4> - 342a: 0796ea63 bltu a3,s9,349e <_vprintf_core.constprop.0.isra.0+0x36c> - 342e: 04700693 li a3,71 - 3432: 0f96e263 bltu a3,s9,3516 <_vprintf_core.constprop.0.isra.0+0x3e4> - 3436: 04400693 li a3,68 - 343a: e196e2e3 bltu a3,s9,323e <_vprintf_core.constprop.0.isra.0+0x10c> - 343e: dc0c82e3 beqz s9,3202 <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 3442: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 3444: 02500593 li a1,37 - 3448: 8526 mv a0,s1 - 344a: e75fd0ef jal 12be <_out_char> - if (spec != '%') - 344e: 02500713 li a4,37 - 3452: d0ec8fe3 beq s9,a4,3170 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 3456: 85e6 mv a1,s9 - 3458: bb09 j 316a <_vprintf_core.constprop.0.isra.0+0x38> - 345a: 05800693 li a3,88 - 345e: 2edc8263 beq s9,a3,3742 <_vprintf_core.constprop.0.isra.0+0x610> - 3462: 06300713 li a4,99 - 3466: 06ec9563 bne s9,a4,34d0 <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 346a: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 346e: 8722 mv a4,s0 - 3470: 00804363 bgtz s0,3476 <_vprintf_core.constprop.0.isra.0+0x344> - 3474: 4705 li a4,1 - 3476: fff7041b addiw s0,a4,-1 - if (!flag_left) - 347a: 3c0a0463 beqz s4,3842 <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 347e: 85e6 mv a1,s9 - 3480: 8526 mv a0,s1 - 3482: e3dfd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 3486: 4a01 li s4,0 - 3488: d451 beqz s0,3414 <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 348a: 02000593 li a1,32 - 348e: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3490: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3492: e2dfd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 3496: ff441ae3 bne s0,s4,348a <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 349a: 0c21 addi s8,s8,8 - 349c: b9d1 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - 349e: f9bc861b addiw a2,s9,-101 - 34a2: 0ff67613 zext.b a2,a2 - 34a6: 46cd li a3,19 - 34a8: 40c6e963 bltu a3,a2,38ba <_vprintf_core.constprop.0.isra.0+0x788> - 34ac: 00091337 lui t1,0x91 - 34b0: 4685 li a3,1 - 34b2: 00c696b3 sll a3,a3,a2 - 34b6: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88e98> - 34ba: 0066f333 and t1,a3,t1 - 34be: 34031c63 bnez t1,3816 <_vprintf_core.constprop.0.isra.0+0x6e4> - 34c2: 8a9d andi a3,a3,7 - 34c4: d6069de3 bnez a3,323e <_vprintf_core.constprop.0.isra.0+0x10c> - 34c8: 46b9 li a3,14 - char spec = *p++; - 34ca: 8dbe mv s11,a5 - 34cc: eed60ee3 beq a2,a3,33c8 <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 34d0: 02500593 li a1,37 - 34d4: 8526 mv a0,s1 - 34d6: de9fd0ef jal 12be <_out_char> - _out_char(ctx, spec); - 34da: 85e6 mv a1,s9 - 34dc: b179 j 316a <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 34de: fd0c869b addiw a3,s9,-48 - 34e2: 0ff6fe13 zext.b t3,a3 - 34e6: 4625 li a2,9 - p++; - 34e8: 0d85 addi s11,s11,1 - precision = 0; - 34ea: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 34ec: 4325 li t1,9 - 34ee: cdc66de3 bltu a2,t3,31c8 <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 34f2: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 34f6: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 34fa: 0176073b addw a4,a2,s7 - 34fe: 0017171b slliw a4,a4,0x1 - 3502: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 3506: fd0c869b addiw a3,s9,-48 - 350a: 0ff6f613 zext.b a2,a3 - p++; - 350e: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 3510: fec371e3 bgeu t1,a2,34f2 <_vprintf_core.constprop.0.isra.0+0x3c0> - 3514: b955 j 31c8 <_vprintf_core.constprop.0.isra.0+0x96> - 3516: 05800693 li a3,88 - 351a: 3cdc8d63 beq s9,a3,38f4 <_vprintf_core.constprop.0.isra.0+0x7c2> - 351e: 06300713 li a4,99 - char spec = *p++; - 3522: 8dbe mv s11,a5 - 3524: f4ec83e3 beq s9,a4,346a <_vprintf_core.constprop.0.isra.0+0x338> - 3528: b765 j 34d0 <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 352a: 01aa0533 add a0,s4,s10 - 352e: 865e mv a2,s7 - 3530: 00002597 auipc a1,0x2 - 3534: c9058593 addi a1,a1,-880 # 51c0 <_GLOBAL__sub_I__ZSt3cin+0xfa> - 3538: ba5ff0ef jal 30dc - 353c: 00ad0d3b addw s10,s10,a0 - 3540: b341 j 32c0 <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 3542: 01aa0533 add a0,s4,s10 - 3546: 8622 mv a2,s0 - 3548: 00002597 auipc a1,0x2 - 354c: c7058593 addi a1,a1,-912 # 51b8 <_GLOBAL__sub_I__ZSt3cin+0xf2> - 3550: b8dff0ef jal 30dc - 3554: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 3558: d60bc4e3 bltz s7,32c0 <_vprintf_core.constprop.0.isra.0+0x18e> - 355c: b7f9 j 352a <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 355e: 06900693 li a3,105 - 3562: 10dc8e63 beq s9,a3,367e <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 3566: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 356a: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 356e: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3570: 38dc9d63 bne s9,a3,390a <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 3574: 33ce8963 beq t4,t3,38a6 <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3578: 000c6e03 lwu t3,0(s8) - 357c: 85f6 mv a1,t4 - 357e: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3580: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3582: 00002f97 auipc t6,0x2 - 3586: c06f8f93 addi t6,t6,-1018 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - if (val == 0) - 358a: 120e0363 beqz t3,36b0 <_vprintf_core.constprop.0.isra.0+0x57e> - 358e: 01010293 addi t0,sp,16 - sign_char = '-'; - 3592: 8616 mv a2,t0 - 3594: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 3596: 0266f8b3 remu a7,a3,t1 - 359a: 8f32 mv t5,a2 - while (val != 0) - 359c: 0605 addi a2,a2,1 - 359e: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 35a0: 98fe add a7,a7,t6 - 35a2: 0008c883 lbu a7,0(a7) - val /= base; - 35a6: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 35aa: ff160fa3 sb a7,-1(a2) - while (val != 0) - 35ae: fe6ef4e3 bgeu t4,t1,3596 <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 35b2: 405f0f3b subw t5,t5,t0 - 35b6: 2f05 addiw t5,t5,1 - if (precision >= 0) - 35b8: 100bc363 bltz s7,36be <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 35bc: 1d7f4d63 blt t5,s7,3796 <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 35c0: 340b9163 bnez s7,3902 <_vprintf_core.constprop.0.isra.0+0x7d0> - 35c4: 200e0763 beqz t3,37d2 <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 35c8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35cc: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 35d0: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35d2: 28dc8e63 beq s9,a3,386e <_vprintf_core.constprop.0.isra.0+0x73c> - 35d6: 2a051663 bnez a0,3882 <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35da: 00bf05bb addw a1,t5,a1 - 35de: 8d52 mv s10,s4 - 35e0: 4b01 li s6,0 - char *prefix_str = NULL; - 35e2: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35e4: 1085d263 bge a1,s0,36e8 <_vprintf_core.constprop.0.isra.0+0x5b6> - 35e8: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 35ea: 100d0a63 beqz s10,36fe <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 35ee: 6782 ld a5,0(sp) - 35f0: 10079263 bnez a5,36f4 <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 35f4: 000c8c63 beqz s9,360c <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 35f8: 000cc583 lbu a1,0(s9) - 35fc: 8526 mv a0,s1 - 35fe: cc1fd0ef jal 12be <_out_char> - _out_char(ctx, prefix_str[1]); - 3602: 001cc583 lbu a1,1(s9) - 3606: 8526 mv a0,s1 - 3608: cb7fd0ef jal 12be <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 360c: 180b0263 beqz s6,3790 <_vprintf_core.constprop.0.isra.0+0x65e> - 3610: 100a1863 bnez s4,3720 <_vprintf_core.constprop.0.isra.0+0x5ee> - 3614: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 3618: 2a0b8363 beqz s7,38be <_vprintf_core.constprop.0.isra.0+0x78c> - 361c: 4c81 li s9,0 - _out_char(ctx, '0'); - 361e: 03000593 li a1,48 - 3622: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 3624: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 3626: c99fd0ef jal 12be <_out_char> - for (int i = 0; i < total_zeros; i++) - 362a: ff7c9ae3 bne s9,s7,361e <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 362e: 57fd li a5,-1 - 3630: 00fc0f63 beq s8,a5,364e <_vprintf_core.constprop.0.isra.0+0x51c> - 3634: 01010c93 addi s9,sp,16 - 3638: 9ce2 add s9,s9,s8 - 363a: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 363e: 000cc583 lbu a1,0(s9) - 3642: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 3644: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 3646: c79fd0ef jal 12be <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 364a: ff9c1ae3 bne s8,s9,363e <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 364e: 0c0a1e63 bnez s4,372a <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 3652: 6c22 ld s8,8(sp) - 3654: be31 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 3656: 4174043b subw s0,s0,s7 - if (!flag_left) - 365a: 100a0a63 beqz s4,376e <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 365e: d80b9ce3 bnez s7,33f6 <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 3662: 4a01 li s4,0 - _out_char(ctx, ' '); - 3664: 02000593 li a1,32 - 3668: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 366a: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 366c: c53fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 3670: ff441ae3 bne s0,s4,3664 <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 3674: 0c21 addi s8,s8,8 - 3676: bced j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 3678: f46d bnez s0,3662 <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 367a: 0c21 addi s8,s8,8 - 367c: bcd5 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 367e: 1fce8163 beq t4,t3,3860 <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3682: 000c2e03 lw t3,0(s8) - 3686: 008c0793 addi a5,s8,8 - 368a: e43e sd a5,8(sp) - int64 sval = (int64)val; - 368c: 86f2 mv a3,t3 - if (sval < 0) - 368e: 1406cb63 bltz a3,37e4 <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 3692: 02b00793 li a5,43 - 3696: e03e sd a5,0(sp) - else if (flag_plus) - 3698: e589 bnez a1,36a2 <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 369a: 00589793 slli a5,a7,0x5 - 369e: e03e sd a5,0(sp) - 36a0: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 36a2: 4329 li t1,10 - 36a4: 00002f97 auipc t6,0x2 - 36a8: ae4f8f93 addi t6,t6,-1308 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - if (val == 0) - 36ac: ee0e11e3 bnez t3,358e <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 36b0: 03000693 li a3,48 - 36b4: 00d10823 sb a3,16(sp) - return i; - 36b8: 4f05 li t5,1 - if (precision >= 0) - 36ba: f00bd1e3 bgez s7,35bc <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 36be: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36c2: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 36c6: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 36ca: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 36cc: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36ce: 0d1c9f63 bne s9,a7,37ac <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 36d2: 00002c97 auipc s9,0x2 - 36d6: acec8c93 addi s9,s9,-1330 # 51a0 <_GLOBAL__sub_I__ZSt3cin+0xda> - prefix_len += 2; - 36da: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36dc: 017585bb addw a1,a1,s7 - 36e0: 01e585bb addw a1,a1,t5 - 36e4: f085c2e3 blt a1,s0,35e8 <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 36e8: 080d0f63 beqz s10,3786 <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 36ec: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36ee: 4401 li s0,0 - if (sign_char) - 36f0: f00782e3 beqz a5,35f4 <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 36f4: 6582 ld a1,0(sp) - 36f6: 8526 mv a0,s1 - 36f8: bc7fd0ef jal 12be <_out_char> - 36fc: bde5 j 35f4 <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, ' '); - 36fe: 02000593 li a1,32 - 3702: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3704: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3706: bb9fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 370a: efa402e3 beq s0,s10,35ee <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 370e: 02000593 li a1,32 - 3712: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3714: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3716: ba9fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 371a: ffa412e3 bne s0,s10,36fe <_vprintf_core.constprop.0.isra.0+0x5cc> - 371e: bdc1 j 35ee <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 3720: ee0b9ee3 bnez s7,361c <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 3724: 577d li a4,-1 - 3726: f0ec17e3 bne s8,a4,3634 <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 372a: d405 beqz s0,3652 <_vprintf_core.constprop.0.isra.0+0x520> - 372c: 4a01 li s4,0 - _out_char(ctx, ' '); - 372e: 02000593 li a1,32 - 3732: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3734: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3736: b89fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 373a: fe8a1ae3 bne s4,s0,372e <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 373e: 6c22 ld s8,8(sp) - 3740: bc05 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 3742: 008c0793 addi a5,s8,8 - 3746: e43e sd a5,8(sp) - else if (len_mod == 1) - 3748: 180e9163 bnez t4,38ca <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 374c: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3750: 4581 li a1,0 - 3752: 05800c93 li s9,88 - 3756: e002 sd zero,0(sp) - 3758: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 375a: 00002f97 auipc t6,0x2 - 375e: a16f8f93 addi t6,t6,-1514 # 5170 <_GLOBAL__sub_I__ZSt3cin+0xaa> - 3762: b525 j 358a <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 3764: ca8058e3 blez s0,3414 <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 3768: ee0a1de3 bnez s4,3662 <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 376c: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 376e: 4d01 li s10,0 - _out_char(ctx, ' '); - 3770: 02000593 li a1,32 - 3774: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3776: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 3778: b47fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 377c: fe8d1ae3 bne s10,s0,3770 <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 3780: c60b9be3 bnez s7,33f6 <_vprintf_core.constprop.0.isra.0+0x2c4> - 3784: b941 j 3414 <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 3786: 6782 ld a5,0(sp) - 3788: 4401 li s0,0 - 378a: f7ad bnez a5,36f4 <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 378c: e60c96e3 bnez s9,35f8 <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 3790: e80b96e3 bnez s7,361c <_vprintf_core.constprop.0.isra.0+0x4ea> - 3794: bd69 j 362e <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 3796: 41eb8bbb subw s7,s7,t5 - 379a: 8d52 mv s10,s4 - 379c: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 379e: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37a2: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 37a6: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37a8: f31c85e3 beq s9,a7,36d2 <_vprintf_core.constprop.0.isra.0+0x5a0> - 37ac: cd09 beqz a0,37c6 <_vprintf_core.constprop.0.isra.0+0x694> - 37ae: 000e0c63 beqz t3,37c6 <_vprintf_core.constprop.0.isra.0+0x694> - 37b2: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 37b6: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37ba: f0ac8ce3 beq s9,a0,36d2 <_vprintf_core.constprop.0.isra.0+0x5a0> - 37be: 05800613 li a2,88 - 37c2: 12cc8463 beq s9,a2,38ea <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 37c6: 00bb85bb addw a1,s7,a1 - 37ca: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 37ce: 4c81 li s9,0 - 37d0: bd11 j 35e4 <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 37d2: 07000693 li a3,112 - 37d6: 8d52 mv s10,s4 - 37d8: 4b01 li s6,0 - 37da: 08dc8d63 beq s9,a3,3874 <_vprintf_core.constprop.0.isra.0+0x742> - 37de: 5c7d li s8,-1 - char *prefix_str = NULL; - 37e0: 4c81 li s9,0 - 37e2: b509 j 35e4 <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 37e4: 02d00793 li a5,45 - val = (uint64)(-sval); - 37e8: 40d00e33 neg t3,a3 - 37ec: 4585 li a1,1 - 37ee: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37f0: 00002f97 auipc t6,0x2 - 37f4: 998f8f93 addi t6,t6,-1640 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - sign_char = '-'; - 37f8: e03e sd a5,0(sp) - 37fa: bb51 j 358e <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 37fc: 00002c97 auipc s9,0x2 - 3800: 9b4c8c93 addi s9,s9,-1612 # 51b0 <_GLOBAL__sub_I__ZSt3cin+0xea> - 3804: bed1 j 33d8 <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3806: 000c3683 ld a3,0(s8) - 380a: 008c0713 addi a4,s8,8 - 380e: e43a sd a4,8(sp) - 3810: 8dbe mv s11,a5 - 3812: 8e36 mv t3,a3 - if (is_signed) - 3814: bdad j 368e <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 3816: 06900693 li a3,105 - 381a: fedc86e3 beq s9,a3,3806 <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 381e: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3822: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3826: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3828: 06dc9063 bne s9,a3,3888 <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 382c: 000c3e03 ld t3,0(s8) - 3830: 8dbe mv s11,a5 - 3832: 4581 li a1,0 - 3834: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3836: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3838: 00002f97 auipc t6,0x2 - 383c: 950f8f93 addi t6,t6,-1712 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - 3840: b3a9 j 358a <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 3842: c809 beqz s0,3854 <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 3844: 02000593 li a1,32 - 3848: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 384a: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 384c: a73fd0ef jal 12be <_out_char> - for (int i = 0; i < padding; i++) - 3850: ff441ae3 bne s0,s4,3844 <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 3854: 85e6 mv a1,s9 - 3856: 8526 mv a0,s1 - 3858: a67fd0ef jal 12be <_out_char> - const char *s = va_arg(ap, char *); - 385c: 0c21 addi s8,s8,8 - 385e: ba09 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3860: 000c3683 ld a3,0(s8) - 3864: 008c0793 addi a5,s8,8 - 3868: e43e sd a5,8(sp) - 386a: 8e36 mv t3,a3 - if (is_signed) - 386c: b50d j 368e <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 386e: 8d52 mv s10,s4 - 3870: 4b01 li s6,0 - 3872: b585 j 36d2 <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 3874: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3876: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 3878: 00002c97 auipc s9,0x2 - 387c: 928c8c93 addi s9,s9,-1752 # 51a0 <_GLOBAL__sub_I__ZSt3cin+0xda> - 3880: bda9 j 36da <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3882: 8d52 mv s10,s4 - 3884: 4b01 li s6,0 - 3886: b735 j 37b2 <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3888: 07000693 li a3,112 - 388c: 04dc8263 beq s9,a3,38d0 <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3890: 000c3e03 ld t3,0(s8) - 3894: 8dbe mv s11,a5 - 3896: 4581 li a1,0 - 3898: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 389a: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 389c: 00002f97 auipc t6,0x2 - 38a0: 8ecf8f93 addi t6,t6,-1812 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - 38a4: b1dd j 358a <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 38a6: 000c3e03 ld t3,0(s8) - 38aa: 4581 li a1,0 - 38ac: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 38ae: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 38b0: 00002f97 auipc t6,0x2 - 38b4: 8d8f8f93 addi t6,t6,-1832 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - 38b8: b9c9 j 358a <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 38ba: 8dbe mv s11,a5 - 38bc: b911 j 34d0 <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 38be: 577d li a4,-1 - 38c0: 4401 li s0,0 - 38c2: d6ec19e3 bne s8,a4,3634 <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 38c6: 6c22 ld s8,8(sp) - 38c8: b065 j 3170 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 38ca: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 38ce: b549 j 3750 <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 38d0: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 38d2: 000c3e03 ld t3,0(s8) - 38d6: 4581 li a1,0 - 38d8: 07000c93 li s9,112 - 38dc: e002 sd zero,0(sp) - 38de: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 38e0: 00002f97 auipc t6,0x2 - 38e4: 8a8f8f93 addi t6,t6,-1880 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - 38e8: b14d j 358a <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 38ea: 00002c97 auipc s9,0x2 - 38ee: 8bec8c93 addi s9,s9,-1858 # 51a8 <_GLOBAL__sub_I__ZSt3cin+0xe2> - 38f2: b3e5 j 36da <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 38f4: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 38f8: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 38fc: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 38fe: 8dbe mv s11,a5 - 3900: bd81 j 3750 <_vprintf_core.constprop.0.isra.0+0x61e> - 3902: 8d52 mv s10,s4 - 3904: 4b01 li s6,0 - 3906: 4b81 li s7,0 - 3908: bd59 j 379e <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 390a: 07000693 li a3,112 - 390e: fcdc82e3 beq s9,a3,38d2 <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 3912: 01ce8c63 beq t4,t3,392a <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3916: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 391a: 4581 li a1,0 - 391c: e002 sd zero,0(sp) - 391e: 4329 li t1,10 - 3920: 00002f97 auipc t6,0x2 - 3924: 868f8f93 addi t6,t6,-1944 # 5188 <_GLOBAL__sub_I__ZSt3cin+0xc2> - 3928: b18d j 358a <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 392a: 000c3e03 ld t3,0(s8) - if (is_signed) - 392e: b7f5 j 391a <_vprintf_core.constprop.0.isra.0+0x7e8> - -0000000000003930 : -{ - 3930: 7139 addi sp,sp,-64 - 3932: f822 sd s0,48(sp) - 3934: f426 sd s1,40(sp) - 3936: 842e mv s0,a1 - 3938: 84aa mv s1,a0 - 393a: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 393c: 850a mv a0,sp - 393e: 8636 mv a2,a3 -{ - 3940: fc06 sd ra,56(sp) - ctx.buf = str; - 3942: e026 sd s1,0(sp) - ctx.limit = size; - 3944: e422 sd s0,8(sp) - ctx.written = 0; - 3946: e802 sd zero,16(sp) - ctx.stream = NULL; - 3948: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 394a: fe8ff0ef jal 3132 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 394e: 6542 ld a0,16(sp) - if (size > 0) - 3950: c411 beqz s0,395c - if (ctx.written < size) - 3952: 00857b63 bgeu a0,s0,3968 - str[ctx.written] = '\0'; - 3956: 94aa add s1,s1,a0 - 3958: 00048023 sb zero,0(s1) -} - 395c: 70e2 ld ra,56(sp) - 395e: 7442 ld s0,48(sp) - 3960: 74a2 ld s1,40(sp) - 3962: 2501 sext.w a0,a0 - 3964: 6121 addi sp,sp,64 - 3966: 8082 ret - str[size - 1] = '\0'; - 3968: 94a2 add s1,s1,s0 - 396a: fe048fa3 sb zero,-1(s1) -} - 396e: 70e2 ld ra,56(sp) - 3970: 7442 ld s0,48(sp) - 3972: 74a2 ld s1,40(sp) - 3974: 2501 sext.w a0,a0 - 3976: 6121 addi sp,sp,64 - 3978: 8082 ret - -000000000000397a : -{ - 397a: 7119 addi sp,sp,-128 - 397c: e0a2 sd s0,64(sp) - 397e: fc26 sd s1,56(sp) - 3980: 842e mv s0,a1 - 3982: 84aa mv s1,a0 - 3984: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 3986: 0808 addi a0,sp,16 - va_start(ap, format); - 3988: 08b0 addi a2,sp,88 -{ - 398a: e486 sd ra,72(sp) - 398c: ecb6 sd a3,88(sp) - 398e: f0ba sd a4,96(sp) - 3990: f4be sd a5,104(sp) - 3992: f8c2 sd a6,112(sp) - 3994: fcc6 sd a7,120(sp) - va_start(ap, format); - 3996: e432 sd a2,8(sp) - ctx.buf = str; - 3998: e826 sd s1,16(sp) - ctx.limit = size; - 399a: ec22 sd s0,24(sp) - ctx.written = 0; - 399c: f002 sd zero,32(sp) - ctx.stream = NULL; - 399e: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 39a0: f92ff0ef jal 3132 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 39a4: 7502 ld a0,32(sp) - if (size > 0) - 39a6: c411 beqz s0,39b2 - if (ctx.written < size) - 39a8: 00857b63 bgeu a0,s0,39be - str[ctx.written] = '\0'; - 39ac: 94aa add s1,s1,a0 - 39ae: 00048023 sb zero,0(s1) -} - 39b2: 60a6 ld ra,72(sp) - 39b4: 6406 ld s0,64(sp) - 39b6: 74e2 ld s1,56(sp) - 39b8: 2501 sext.w a0,a0 - 39ba: 6109 addi sp,sp,128 - 39bc: 8082 ret - str[size - 1] = '\0'; - 39be: 94a2 add s1,s1,s0 - 39c0: fe048fa3 sb zero,-1(s1) -} - 39c4: 60a6 ld ra,72(sp) - 39c6: 6406 ld s0,64(sp) - 39c8: 74e2 ld s1,56(sp) - 39ca: 2501 sext.w a0,a0 - 39cc: 6109 addi sp,sp,128 - 39ce: 8082 ret - -00000000000039d0 : -{ - 39d0: 7119 addi sp,sp,-128 - va_start(ap, format); - 39d2: 04810313 addi t1,sp,72 -{ - 39d6: e4ae sd a1,72(sp) - 39d8: e8b2 sd a2,80(sp) - 39da: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 39dc: 85aa mv a1,a0 - ctx.stream = stdout; - 39de: 00004797 auipc a5,0x4 - 39e2: e027b783 ld a5,-510(a5) # 77e0 - _vprintf_core(&ctx, format, ap); - 39e6: 0808 addi a0,sp,16 - 39e8: 861a mv a2,t1 -{ - 39ea: fc06 sd ra,56(sp) - 39ec: ecb6 sd a3,88(sp) - 39ee: f0ba sd a4,96(sp) - 39f0: f8c2 sd a6,112(sp) - 39f2: fcc6 sd a7,120(sp) - va_start(ap, format); - 39f4: e41a sd t1,8(sp) - ctx.buf = NULL; - 39f6: e802 sd zero,16(sp) - ctx.limit = 0; - 39f8: ec02 sd zero,24(sp) - ctx.written = 0; - 39fa: f002 sd zero,32(sp) - ctx.stream = stdout; - 39fc: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 39fe: f34ff0ef jal 3132 <_vprintf_core.constprop.0.isra.0> -} - 3a02: 70e2 ld ra,56(sp) - 3a04: 5502 lw a0,32(sp) - 3a06: 6109 addi sp,sp,128 - 3a08: 8082 ret - -0000000000003a0a : -{ - 3a0a: 7159 addi sp,sp,-112 - va_start(ap, format); - 3a0c: 04010e13 addi t3,sp,64 -{ - 3a10: 8eaa mv t4,a0 - ctx.fd = -1; - 3a12: 537d li t1,-1 -{ - 3a14: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3a16: 0808 addi a0,sp,16 - 3a18: 8672 mv a2,t3 -{ - 3a1a: fc06 sd ra,56(sp) - 3a1c: e4b6 sd a3,72(sp) - 3a1e: e8ba sd a4,80(sp) - 3a20: ecbe sd a5,88(sp) - 3a22: f0c2 sd a6,96(sp) - 3a24: f4c6 sd a7,104(sp) - va_start(ap, format); - 3a26: e472 sd t3,8(sp) - ctx.buf = str; - 3a28: e876 sd t4,16(sp) - ctx.fd = -1; - 3a2a: cc1a sw t1,24(sp) - ctx.pos = 0; - 3a2c: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3a2e: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3a30: 81efd0ef jal a4e <_vscanf_core.constprop.0> -} - 3a34: 70e2 ld ra,56(sp) - 3a36: 6165 addi sp,sp,112 - 3a38: 8082 ret - -0000000000003a3a : -{ - 3a3a: 7119 addi sp,sp,-128 - va_start(ap, format); - 3a3c: 04810313 addi t1,sp,72 -{ - 3a40: e4ae sd a1,72(sp) - 3a42: e8b2 sd a2,80(sp) - 3a44: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3a46: 85aa mv a1,a0 - ctx.ungotten = -1; - 3a48: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 3a4a: 0808 addi a0,sp,16 - 3a4c: 861a mv a2,t1 -{ - 3a4e: fc06 sd ra,56(sp) - 3a50: ecb6 sd a3,88(sp) - 3a52: f0ba sd a4,96(sp) - 3a54: f8c2 sd a6,112(sp) - 3a56: fcc6 sd a7,120(sp) - va_start(ap, format); - 3a58: e41a sd t1,8(sp) - ctx.buf = NULL; - 3a5a: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 3a5c: cc02 sw zero,24(sp) - ctx.pos = 0; - 3a5e: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3a60: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3a62: fedfc0ef jal a4e <_vscanf_core.constprop.0> -} - 3a66: 70e2 ld ra,56(sp) - 3a68: 6109 addi sp,sp,128 - 3a6a: 8082 ret - -0000000000003a6c : -{ - 3a6c: 1101 addi sp,sp,-32 - 3a6e: e426 sd s1,8(sp) - 3a70: 84ae mv s1,a1 - 3a72: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 3a74: 00001597 auipc a1,0x1 - 3a78: 75458593 addi a1,a1,1876 # 51c8 <_GLOBAL__sub_I__ZSt3cin+0x102> -{ - 3a7c: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 3a7e: 8526 mv a0,s1 -{ - 3a80: e822 sd s0,16(sp) - 3a82: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 3a84: 298010ef jal 4d1c - 3a88: 842a mv s0,a0 - 3a8a: c919 beqz a0,3aa0 - else if (strcmp(mode, "w") == 0) - 3a8c: 00001597 auipc a1,0x1 - 3a90: 74458593 addi a1,a1,1860 # 51d0 <_GLOBAL__sub_I__ZSt3cin+0x10a> - 3a94: 8526 mv a0,s1 - 3a96: 286010ef jal 4d1c - flags = O_WRONLY | O_CREAT | O_TRUNC; - 3a9a: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 3a9e: ed39 bnez a0,3afc - int64 fd = open(filename, flags); - 3aa0: 85a2 mv a1,s0 - 3aa2: 854a mv a0,s2 - 3aa4: f42fc0ef jal 1e6 - 3aa8: 84aa mv s1,a0 - if (fd < 0) - 3aaa: 06054c63 bltz a0,3b22 - FILE *f = (FILE *)malloc(sizeof(FILE)); - 3aae: 42000513 li a0,1056 - 3ab2: 2f3000ef jal 45a4 - 3ab6: 892a mv s2,a0 - if (!f) - 3ab8: c53d beqz a0,3b26 - memset(f, 0, sizeof(FILE)); - 3aba: 42000613 li a2,1056 - 3abe: 4581 li a1,0 - 3ac0: 0ee010ef jal 4bae - if (fd == 1) - 3ac4: 4785 li a5,1 - f->fd = (int)fd; - 3ac6: 00992023 sw s1,0(s2) - f->flags = flags; - 3aca: 00892223 sw s0,4(s2) - if (fd == 1) - 3ace: 00f48e63 beq s1,a5,3aea - else if (fd == 2) - 3ad2: 4789 li a5,2 - 3ad4: 00f48b63 beq s1,a5,3aea - f->buf_mode = 0; - 3ad8: 40092e23 sw zero,1052(s2) -} - 3adc: 60e2 ld ra,24(sp) - 3ade: 6442 ld s0,16(sp) - 3ae0: 64a2 ld s1,8(sp) - 3ae2: 854a mv a0,s2 - 3ae4: 6902 ld s2,0(sp) - 3ae6: 6105 addi sp,sp,32 - 3ae8: 8082 ret - 3aea: 60e2 ld ra,24(sp) - 3aec: 6442 ld s0,16(sp) - f->buf_mode = 2; - 3aee: 40992e23 sw s1,1052(s2) -} - 3af2: 854a mv a0,s2 - 3af4: 64a2 ld s1,8(sp) - 3af6: 6902 ld s2,0(sp) - 3af8: 6105 addi sp,sp,32 - 3afa: 8082 ret - else if (strcmp(mode, "a") == 0) - 3afc: 00001597 auipc a1,0x1 - 3b00: 6dc58593 addi a1,a1,1756 # 51d8 <_GLOBAL__sub_I__ZSt3cin+0x112> - 3b04: 8526 mv a0,s1 - 3b06: 216010ef jal 4d1c - flags = O_WRONLY | O_CREAT | O_APPEND; - 3b0a: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 3b0e: d949 beqz a0,3aa0 - else if (strcmp(mode, "r+") == 0) - 3b10: 00001597 auipc a1,0x1 - 3b14: 6d058593 addi a1,a1,1744 # 51e0 <_GLOBAL__sub_I__ZSt3cin+0x11a> - 3b18: 8526 mv a0,s1 - 3b1a: 202010ef jal 4d1c - flags = O_RDWR; - 3b1e: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 3b20: d141 beqz a0,3aa0 - return NULL; - 3b22: 4901 li s2,0 - 3b24: bf65 j 3adc - close(fd); - 3b26: 8526 mv a0,s1 - 3b28: ea6fc0ef jal 1ce - return NULL; - 3b2c: 4901 li s2,0 - 3b2e: b77d j 3adc - -0000000000003b30 : - if (!stream) - 3b30: cd29 beqz a0,3b8a - if (stream->buf_write_pos > 0) - 3b32: 41052603 lw a2,1040(a0) -{ - 3b36: 1141 addi sp,sp,-16 - 3b38: e022 sd s0,0(sp) - 3b3a: e406 sd ra,8(sp) - 3b3c: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3b3e: 02c04a63 bgtz a2,3b72 - if (stream != stdin && stream != stdout && stream != stderr) - 3b42: 00004797 auipc a5,0x4 - 3b46: c9e78793 addi a5,a5,-866 # 77e0 - 3b4a: 6798 ld a4,8(a5) - 3b4c: 00870e63 beq a4,s0,3b68 - 3b50: 6398 ld a4,0(a5) - 3b52: 00870b63 beq a4,s0,3b68 - 3b56: 6b9c ld a5,16(a5) - 3b58: 00878863 beq a5,s0,3b68 - close(stream->fd); - 3b5c: 4008 lw a0,0(s0) - 3b5e: e70fc0ef jal 1ce - free(stream); - 3b62: 8522 mv a0,s0 - 3b64: 1cb000ef jal 452e -} - 3b68: 60a2 ld ra,8(sp) - 3b6a: 6402 ld s0,0(sp) - return 0; - 3b6c: 4501 li a0,0 -} - 3b6e: 0141 addi sp,sp,16 - 3b70: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3b72: 4108 lw a0,0(a0) - 3b74: 01040593 addi a1,s0,16 - 3b78: e4efc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3b7c: 41042783 lw a5,1040(s0) - 3b80: 00f54763 blt a0,a5,3b8e - stream->buf_write_pos = 0; - 3b84: 40042823 sw zero,1040(s0) - 3b88: bf6d j 3b42 - return -1; - 3b8a: 557d li a0,-1 -} - 3b8c: 8082 ret - stream->error = 1; - 3b8e: 4785 li a5,1 - 3b90: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3b92: 40042823 sw zero,1040(s0) - return EOF; - 3b96: b775 j 3b42 - -0000000000003b98 : - if (!stream) - 3b98: c121 beqz a0,3bd8 - if (stream->buf_write_pos > 0) - 3b9a: 41052603 lw a2,1040(a0) -{ - 3b9e: 1141 addi sp,sp,-16 - 3ba0: e022 sd s0,0(sp) - 3ba2: e406 sd ra,8(sp) - 3ba4: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3ba6: 00c04763 bgtz a2,3bb4 - return 0; - 3baa: 4501 li a0,0 -} - 3bac: 60a2 ld ra,8(sp) - 3bae: 6402 ld s0,0(sp) - 3bb0: 0141 addi sp,sp,16 - 3bb2: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3bb4: 4108 lw a0,0(a0) - 3bb6: 01040593 addi a1,s0,16 - 3bba: e0cfc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3bbe: 41042783 lw a5,1040(s0) - 3bc2: 00f54563 blt a0,a5,3bcc - stream->buf_write_pos = 0; - 3bc6: 40042823 sw zero,1040(s0) - 3bca: b7c5 j 3baa - stream->error = 1; - 3bcc: 4785 li a5,1 - 3bce: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3bd0: 40042823 sw zero,1040(s0) - return EOF; - 3bd4: 557d li a0,-1 - 3bd6: bfd9 j 3bac - 3bd8: 557d li a0,-1 -} - 3bda: 8082 ret - -0000000000003bdc : -{ - 3bdc: 7159 addi sp,sp,-112 - 3bde: fc06 sd ra,56(sp) - 3be0: e0b2 sd a2,64(sp) - 3be2: e4b6 sd a3,72(sp) - 3be4: e8ba sd a4,80(sp) - 3be6: ecbe sd a5,88(sp) - 3be8: f0c2 sd a6,96(sp) - 3bea: f4c6 sd a7,104(sp) - if (!stream) - 3bec: cd19 beqz a0,3c0a - va_start(ap, format); - 3bee: 832a mv t1,a0 - 3bf0: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 3bf2: 0808 addi a0,sp,16 - va_start(ap, format); - 3bf4: e432 sd a2,8(sp) - ctx.buf = NULL; - 3bf6: e802 sd zero,16(sp) - ctx.limit = 0; - 3bf8: ec02 sd zero,24(sp) - ctx.written = 0; - 3bfa: f002 sd zero,32(sp) - ctx.stream = stream; - 3bfc: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 3bfe: d34ff0ef jal 3132 <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 3c02: 5502 lw a0,32(sp) -} - 3c04: 70e2 ld ra,56(sp) - 3c06: 6165 addi sp,sp,112 - 3c08: 8082 ret - return -1; - 3c0a: 557d li a0,-1 - 3c0c: bfe5 j 3c04 - -0000000000003c0e : -{ - 3c0e: 7159 addi sp,sp,-112 - 3c10: fc06 sd ra,56(sp) - 3c12: e0b2 sd a2,64(sp) - 3c14: e4b6 sd a3,72(sp) - 3c16: e8ba sd a4,80(sp) - 3c18: ecbe sd a5,88(sp) - 3c1a: f0c2 sd a6,96(sp) - 3c1c: f4c6 sd a7,104(sp) - if (!stream) - 3c1e: cd19 beqz a0,3c3c - ctx.fd = stream->fd; - 3c20: 411c lw a5,0(a0) - va_start(ap, format); - 3c22: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 3c24: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 3c26: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 3c28: 57fd li a5,-1 - va_start(ap, format); - 3c2a: e432 sd a2,8(sp) - ctx.buf = NULL; - 3c2c: e802 sd zero,16(sp) - ctx.pos = 0; - 3c2e: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3c30: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3c32: e1dfc0ef jal a4e <_vscanf_core.constprop.0> -} - 3c36: 70e2 ld ra,56(sp) - 3c38: 6165 addi sp,sp,112 - 3c3a: 8082 ret - return -1; - 3c3c: 557d li a0,-1 - 3c3e: bfe5 j 3c36 - -0000000000003c40 : - if (!stream) - 3c40: c1e1 beqz a1,3d00 -{ - 3c42: 7179 addi sp,sp,-48 - 3c44: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 3c46: 41c5a903 lw s2,1052(a1) -{ - 3c4a: f022 sd s0,32(sp) - 3c4c: ec26 sd s1,24(sp) - 3c4e: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 3c50: 4789 li a5,2 - 3c52: 842e mv s0,a1 - 3c54: 84aa mv s1,a0 - char ch = (char)c; - 3c56: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 3c5a: 02f90963 beq s2,a5,3c8c - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c5e: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 3c62: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c66: 0017861b addiw a2,a5,1 - 3c6a: 40c5a823 sw a2,1040(a1) - 3c6e: 97ae add a5,a5,a1 - 3c70: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3c74: 06c6c463 blt a3,a2,3cdc - else if (stream->buf_mode == 1 && c == '\n') - 3c78: 4785 li a5,1 - 3c7a: 02f90e63 beq s2,a5,3cb6 - return c; - 3c7e: 8526 mv a0,s1 -} - 3c80: 70a2 ld ra,40(sp) - 3c82: 7402 ld s0,32(sp) - 3c84: 64e2 ld s1,24(sp) - 3c86: 6942 ld s2,16(sp) - 3c88: 6145 addi sp,sp,48 - 3c8a: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3c8c: 4188 lw a0,0(a1) - 3c8e: 4605 li a2,1 - 3c90: 00f10593 addi a1,sp,15 - char ch = (char)c; - 3c94: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3c98: d2efc0ef jal 1c6 - 3c9c: 872a mv a4,a0 - 3c9e: 4785 li a5,1 - return c; - 3ca0: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 3ca2: fcf70fe3 beq a4,a5,3c80 -} - 3ca6: 70a2 ld ra,40(sp) - stream->error = 1; - 3ca8: c41c sw a5,8(s0) -} - 3caa: 7402 ld s0,32(sp) - 3cac: 64e2 ld s1,24(sp) - 3cae: 6942 ld s2,16(sp) - return EOF; - 3cb0: 557d li a0,-1 -} - 3cb2: 6145 addi sp,sp,48 - 3cb4: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3cb6: 47a9 li a5,10 - 3cb8: fcf513e3 bne a0,a5,3c7e - if (stream->buf_write_pos > 0) - 3cbc: fcc051e3 blez a2,3c7e - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cc0: 4188 lw a0,0(a1) - 3cc2: 05c1 addi a1,a1,16 - 3cc4: d02fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3cc8: 41042783 lw a5,1040(s0) - 3ccc: 02f55063 bge a0,a5,3cec - stream->error = 1; - 3cd0: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 3cd4: 40042823 sw zero,1040(s0) - return c; - 3cd8: 8526 mv a0,s1 - 3cda: b75d j 3c80 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cdc: 4188 lw a0,0(a1) - 3cde: 05c1 addi a1,a1,16 - 3ce0: ce6fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3ce4: 41042783 lw a5,1040(s0) - 3ce8: 00f54663 blt a0,a5,3cf4 - stream->buf_write_pos = 0; - 3cec: 40042823 sw zero,1040(s0) - return c; - 3cf0: 8526 mv a0,s1 - 3cf2: b779 j 3c80 - stream->error = 1; - 3cf4: 4785 li a5,1 - 3cf6: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3cf8: 40042823 sw zero,1040(s0) - return c; - 3cfc: 8526 mv a0,s1 - 3cfe: b749 j 3c80 - return EOF; - 3d00: 557d li a0,-1 -} - 3d02: 8082 ret - -0000000000003d04 : - if (!stream) - 3d04: c1ed beqz a1,3de6 -{ - 3d06: 711d addi sp,sp,-96 - 3d08: e4a6 sd s1,72(sp) - 3d0a: ec86 sd ra,88(sp) - while (*s) - 3d0c: 00054703 lbu a4,0(a0) - 3d10: 84aa mv s1,a0 - 3d12: cf25 beqz a4,3d8a - 3d14: e8a2 sd s0,80(sp) - 3d16: e0ca sd s2,64(sp) - 3d18: fc4e sd s3,56(sp) - 3d1a: f852 sd s4,48(sp) - 3d1c: f456 sd s5,40(sp) - 3d1e: f05a sd s6,32(sp) - 3d20: ec5e sd s7,24(sp) - 3d22: 842e mv s0,a1 - if (stream->buf_mode == 2) - 3d24: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 3d26: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 3d2a: 4985 li s3,1 - 3d2c: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d2e: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 3d32: 00f10b93 addi s7,sp,15 - 3d36: a031 j 3d42 - else if (stream->buf_mode == 1 && c == '\n') - 3d38: 09368563 beq a3,s3,3dc2 - while (*s) - 3d3c: 0004c703 lbu a4,0(s1) - 3d40: cf15 beqz a4,3d7c - if (stream->buf_mode == 2) - 3d42: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 3d46: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 3d48: 05268663 beq a3,s2,3d94 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3d4c: 41042783 lw a5,1040(s0) - 3d50: 0017861b addiw a2,a5,1 - 3d54: 40c42823 sw a2,1040(s0) - 3d58: 97a2 add a5,a5,s0 - 3d5a: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3d5e: fccb5de3 bge s6,a2,3d38 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d62: 4008 lw a0,0(s0) - 3d64: 85d6 mv a1,s5 - 3d66: c60fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3d6a: 41042783 lw a5,1040(s0) - 3d6e: 06f54763 blt a0,a5,3ddc - stream->buf_write_pos = 0; - 3d72: 40042823 sw zero,1040(s0) - while (*s) - 3d76: 0004c703 lbu a4,0(s1) - 3d7a: f761 bnez a4,3d42 - 3d7c: 6446 ld s0,80(sp) - 3d7e: 6906 ld s2,64(sp) - 3d80: 79e2 ld s3,56(sp) - 3d82: 7a42 ld s4,48(sp) - 3d84: 7aa2 ld s5,40(sp) - 3d86: 7b02 ld s6,32(sp) - 3d88: 6be2 ld s7,24(sp) -} - 3d8a: 60e6 ld ra,88(sp) - 3d8c: 64a6 ld s1,72(sp) - return 0; - 3d8e: 4501 li a0,0 -} - 3d90: 6125 addi sp,sp,96 - 3d92: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3d94: 4008 lw a0,0(s0) - 3d96: 4605 li a2,1 - 3d98: 85de mv a1,s7 - char ch = (char)c; - 3d9a: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3d9e: c28fc0ef jal 1c6 - 3da2: f9350de3 beq a0,s3,3d3c - stream->error = 1; - 3da6: 01342423 sw s3,8(s0) -} - 3daa: 60e6 ld ra,88(sp) - 3dac: 6446 ld s0,80(sp) - 3dae: 6906 ld s2,64(sp) - 3db0: 79e2 ld s3,56(sp) - 3db2: 7a42 ld s4,48(sp) - 3db4: 7aa2 ld s5,40(sp) - 3db6: 7b02 ld s6,32(sp) - 3db8: 6be2 ld s7,24(sp) - 3dba: 64a6 ld s1,72(sp) - return -1; - 3dbc: 557d li a0,-1 -} - 3dbe: 6125 addi sp,sp,96 - 3dc0: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3dc2: f7471de3 bne a4,s4,3d3c - if (stream->buf_write_pos > 0) - 3dc6: f6c05be3 blez a2,3d3c - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3dca: 4008 lw a0,0(s0) - 3dcc: 01040593 addi a1,s0,16 - 3dd0: bf6fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3dd4: 41042783 lw a5,1040(s0) - 3dd8: f8f55de3 bge a0,a5,3d72 - stream->error = 1; - 3ddc: 4785 li a5,1 - 3dde: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3de0: 40042823 sw zero,1040(s0) - return EOF; - 3de4: bfa1 j 3d3c - return -1; - 3de6: 557d li a0,-1 -} - 3de8: 8082 ret - -0000000000003dea : - if (!stream) - 3dea: c949 beqz a0,3e7c - if (stream->buf_write_pos > 0) - 3dec: 41052603 lw a2,1040(a0) -{ - 3df0: 1141 addi sp,sp,-16 - 3df2: e022 sd s0,0(sp) - 3df4: e406 sd ra,8(sp) - 3df6: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3df8: 04c04863 bgtz a2,3e48 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3dfc: 41442783 lw a5,1044(s0) - 3e00: 41842703 lw a4,1048(s0) - 3e04: 00e7dd63 bge a5,a4,3e1e - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e08: 0017871b addiw a4,a5,1 - 3e0c: 40e42a23 sw a4,1044(s0) - 3e10: 943e add s0,s0,a5 - 3e12: 01044503 lbu a0,16(s0) -} - 3e16: 60a2 ld ra,8(sp) - 3e18: 6402 ld s0,0(sp) - 3e1a: 0141 addi sp,sp,16 - 3e1c: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3e1e: 4008 lw a0,0(s0) - 3e20: 40000613 li a2,1024 - 3e24: 01040593 addi a1,s0,16 - 3e28: b96fc0ef jal 1be - 3e2c: 87aa mv a5,a0 - if (ret <= 0) - 3e2e: 02a05e63 blez a0,3e6a - stream->buf_read_cnt = (int)ret; - 3e32: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e36: 4785 li a5,1 - 3e38: 01044503 lbu a0,16(s0) -} - 3e3c: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e3e: 40f42a23 sw a5,1044(s0) -} - 3e42: 6402 ld s0,0(sp) - 3e44: 0141 addi sp,sp,16 - 3e46: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3e48: 4108 lw a0,0(a0) - 3e4a: 01040593 addi a1,s0,16 - 3e4e: b78fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3e52: 41042783 lw a5,1040(s0) - 3e56: 00f54563 blt a0,a5,3e60 - stream->buf_write_pos = 0; - 3e5a: 40042823 sw zero,1040(s0) - 3e5e: bf79 j 3dfc - stream->error = 1; - 3e60: 4785 li a5,1 - 3e62: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3e64: 40042823 sw zero,1040(s0) - return EOF; - 3e68: bf51 j 3dfc - if (ret == 0) - 3e6a: e509 bnez a0,3e74 - stream->eof = 1; - 3e6c: 4785 li a5,1 - 3e6e: c45c sw a5,12(s0) - return EOF; - 3e70: 557d li a0,-1 - 3e72: b755 j 3e16 - stream->error = 1; - 3e74: 4785 li a5,1 - 3e76: c41c sw a5,8(s0) - return EOF; - 3e78: 557d li a0,-1 - 3e7a: bf71 j 3e16 - 3e7c: 557d li a0,-1 -} - 3e7e: 8082 ret - -0000000000003e80 : - if (!stream || n <= 0) - 3e80: ce5d beqz a2,3f3e - 3e82: 0ab05e63 blez a1,3f3e -{ - 3e86: 715d addi sp,sp,-80 - 3e88: e0a2 sd s0,64(sp) - 3e8a: fc26 sd s1,56(sp) - 3e8c: f84a sd s2,48(sp) - 3e8e: f44e sd s3,40(sp) - 3e90: f052 sd s4,32(sp) - 3e92: ec56 sd s5,24(sp) - 3e94: e85a sd s6,16(sp) - 3e96: e45e sd s7,8(sp) - 3e98: e486 sd ra,72(sp) - 3e9a: 8432 mv s0,a2 - 3e9c: 8aaa mv s5,a0 - 3e9e: 892a mv s2,a0 - 3ea0: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 3ea4: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3ea6: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3eaa: 4b05 li s6,1 - if (c == '\n') - 3eac: 4a29 li s4,10 - while (i < n - 1) - 3eae: 05748163 beq s1,s7,3ef0 - if (stream->buf_write_pos > 0) - 3eb2: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3eb6: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 3eb8: 06c04963 bgtz a2,3f2a - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ebc: 41442783 lw a5,1044(s0) - 3ec0: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ec4: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3ec8: 0017851b addiw a0,a5,1 - 3ecc: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ed0: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3ed2: 02e7de63 bge a5,a4,3f0e - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3ed6: 40a42a23 sw a0,1044(s0) - 3eda: 0106c783 lbu a5,16(a3) - 3ede: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 3ee2: 00f90023 sb a5,0(s2) - 3ee6: 2485 addiw s1,s1,1 - if (c == '\n') - 3ee8: 0905 addi s2,s2,1 - 3eea: fd4712e3 bne a4,s4,3eae - str[i++] = (char)c; - 3eee: 8ba6 mv s7,s1 - str[i] = '\0'; - 3ef0: 9bd6 add s7,s7,s5 - 3ef2: 000b8023 sb zero,0(s7) - return str; - 3ef6: 8556 mv a0,s5 -} - 3ef8: 60a6 ld ra,72(sp) - 3efa: 6406 ld s0,64(sp) - 3efc: 74e2 ld s1,56(sp) - 3efe: 7942 ld s2,48(sp) - 3f00: 79a2 ld s3,40(sp) - 3f02: 7a02 ld s4,32(sp) - 3f04: 6ae2 ld s5,24(sp) - 3f06: 6b42 ld s6,16(sp) - 3f08: 6ba2 ld s7,8(sp) - 3f0a: 6161 addi sp,sp,80 - 3f0c: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3f0e: 4008 lw a0,0(s0) - 3f10: aaefc0ef jal 1be - if (ret <= 0) - 3f14: 02a05c63 blez a0,3f4c - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3f18: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 3f1c: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3f20: 41642a23 sw s6,1044(s0) - 3f24: 0007871b sext.w a4,a5 - if (c == -1) - 3f28: bf6d j 3ee2 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3f2a: 4008 lw a0,0(s0) - 3f2c: a9afc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 3f30: 41042783 lw a5,1040(s0) - 3f34: 00f54763 blt a0,a5,3f42 - stream->buf_write_pos = 0; - 3f38: 40042823 sw zero,1040(s0) - 3f3c: b741 j 3ebc - return NULL; - 3f3e: 4501 li a0,0 -} - 3f40: 8082 ret - stream->error = 1; - 3f42: 4785 li a5,1 - 3f44: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3f46: 40042823 sw zero,1040(s0) - return EOF; - 3f4a: bf8d j 3ebc - stream->eof = 1; - 3f4c: 4785 li a5,1 - if (ret == 0) - 3f4e: e509 bnez a0,3f58 - stream->eof = 1; - 3f50: c45c sw a5,12(s0) - if (i == 0) - 3f52: fcd1 bnez s1,3eee - return NULL; - 3f54: 4501 li a0,0 - 3f56: b74d j 3ef8 - stream->error = 1; - 3f58: c41c sw a5,8(s0) - if (c == -1) - 3f5a: bfe5 j 3f52 - -0000000000003f5c : -{ - 3f5c: 715d addi sp,sp,-80 - 3f5e: e486 sd ra,72(sp) - 3f60: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 3f62: 0e068963 beqz a3,4054 - 3f66: ec56 sd s5,24(sp) - return 0; - 3f68: 4981 li s3,0 - 3f6a: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 3f6c: c9bd beqz a1,3fe2 - 3f6e: ca35 beqz a2,3fe2 - if (stream->buf_write_pos > 0) - 3f70: 4106a783 lw a5,1040(a3) - 3f74: e0a2 sd s0,64(sp) - 3f76: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 3f78: 02c589b3 mul s3,a1,a2 - 3f7c: 8436 mv s0,a3 - 3f7e: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 3f80: 0af04d63 bgtz a5,403a - while (bytes_read < total_bytes) - 3f84: 04098d63 beqz s3,3fde - 3f88: fc26 sd s1,56(sp) - 3f8a: e85a sd s6,16(sp) - 3f8c: e45e sd s7,8(sp) - 3f8e: f84a sd s2,48(sp) - 3f90: 4481 li s1,0 - if (remaining >= BUFSIZ) - 3f92: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3f96: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3f9a: 41442703 lw a4,1044(s0) - 3f9e: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 3fa2: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3fa6: 06f74463 blt a4,a5,400e - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3faa: 4008 lw a0,0(s0) - 3fac: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 3fb0: 02cb7f63 bgeu s6,a2,3fee - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3fb4: a0afc0ef jal 1be - if (ret <= 0) - 3fb8: 0aa05463 blez a0,4060 - bytes_read += ret; - 3fbc: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 3fbe: fd34eee3 bltu s1,s3,3f9a - return bytes_read / size; - 3fc2: 0354d9b3 divu s3,s1,s5 - 3fc6: 6406 ld s0,64(sp) -} - 3fc8: 60a6 ld ra,72(sp) - return bytes_read / size; - 3fca: 74e2 ld s1,56(sp) - 3fcc: 7942 ld s2,48(sp) - 3fce: 7a02 ld s4,32(sp) - 3fd0: 6ae2 ld s5,24(sp) - 3fd2: 6b42 ld s6,16(sp) - 3fd4: 6ba2 ld s7,8(sp) -} - 3fd6: 854e mv a0,s3 - 3fd8: 79a2 ld s3,40(sp) - 3fda: 6161 addi sp,sp,80 - 3fdc: 8082 ret - 3fde: 6406 ld s0,64(sp) - 3fe0: 7a02 ld s4,32(sp) - 3fe2: 60a6 ld ra,72(sp) - 3fe4: 6ae2 ld s5,24(sp) - 3fe6: 854e mv a0,s3 - 3fe8: 79a2 ld s3,40(sp) - 3fea: 6161 addi sp,sp,80 - 3fec: 8082 ret - stream->buf_read_pos = 0; - 3fee: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 3ff2: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ff6: 40000613 li a2,1024 - 3ffa: 85de mv a1,s7 - 3ffc: 9c2fc0ef jal 1be - if (ret <= 0) - 4000: 06a05063 blez a0,4060 - stream->buf_read_cnt = (int)ret; - 4004: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 4008: f934e9e3 bltu s1,s3,3f9a - 400c: bf5d j 3fc2 - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 400e: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4012: 00eb85b3 add a1,s7,a4 - 4016: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 401a: 01267363 bgeu a2,s2,4020 - 401e: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4020: 864a mv a2,s2 - 4022: 3e1000ef jal 4c02 - stream->buf_read_pos += to_copy; - 4026: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 402a: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 402c: 012787bb addw a5,a5,s2 - 4030: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 4034: f734e3e3 bltu s1,s3,3f9a - 4038: b769 j 3fc2 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 403a: 4288 lw a0,0(a3) - 403c: 863e mv a2,a5 - 403e: 01068593 addi a1,a3,16 - 4042: 984fc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 4046: 41042783 lw a5,1040(s0) - 404a: 02f54163 blt a0,a5,406c - stream->buf_write_pos = 0; - 404e: 40042823 sw zero,1040(s0) - 4052: bf0d j 3f84 -} - 4054: 60a6 ld ra,72(sp) - return 0; - 4056: 4981 li s3,0 -} - 4058: 854e mv a0,s3 - 405a: 79a2 ld s3,40(sp) - 405c: 6161 addi sp,sp,80 - 405e: 8082 ret - stream->eof = 1; - 4060: 4785 li a5,1 - if (ret == 0) - 4062: e119 bnez a0,4068 - stream->eof = 1; - 4064: c45c sw a5,12(s0) - 4066: bfb1 j 3fc2 - stream->error = 1; - 4068: c41c sw a5,8(s0) - return bytes_read / size; - 406a: bfa1 j 3fc2 - stream->error = 1; - 406c: 4785 li a5,1 - 406e: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4070: 40042823 sw zero,1040(s0) - return EOF; - 4074: bf01 j 3f84 - -0000000000004076 : -{ - 4076: 711d addi sp,sp,-96 - 4078: ec86 sd ra,88(sp) - 407a: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 407c: 10068063 beqz a3,417c - 4080: f456 sd s5,40(sp) - 4082: 8aaa mv s5,a0 - 4084: 10050263 beqz a0,4188 - 4088: f05a sd s6,32(sp) - return 0; - 408a: 4901 li s2,0 - 408c: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 408e: c1d9 beqz a1,4114 - 4090: c251 beqz a2,4114 - if (stream->buf_mode == 2) - 4092: 41c6a703 lw a4,1052(a3) - 4096: e8a2 sd s0,80(sp) - 4098: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 409a: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 409e: 8436 mv s0,a3 - 40a0: 0ef70b63 beq a4,a5,4196 - 40a4: fc4e sd s3,56(sp) - 40a6: ec5e sd s7,24(sp) - 40a8: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 40aa: 4981 li s3,0 - 40ac: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 40b0: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 40b4: 12090263 beqz s2,41d8 - 40b8: e4a6 sd s1,72(sp) - 40ba: f852 sd s4,48(sp) - 40bc: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 40be: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 40c2: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 40c6: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 40ca: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 40ce: 00fb8533 add a0,s7,a5 - 40d2: 8652 mv a2,s4 - if (remaining <= space_left) - 40d4: 059a6763 bltu s4,s9,4122 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 40d8: 8666 mv a2,s9 - 40da: 329000ef jal 4c02 - stream->buf_write_pos += remaining; - 40de: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 40e2: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 40e6: 019786bb addw a3,a5,s9 - 40ea: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 40ee: 06e68a63 beq a3,a4,4162 - return bytes_written / size; - 40f2: 03695933 divu s2,s2,s6 - 40f6: 6446 ld s0,80(sp) - 40f8: 64a6 ld s1,72(sp) - 40fa: 79e2 ld s3,56(sp) - 40fc: 7a42 ld s4,48(sp) - 40fe: 7aa2 ld s5,40(sp) - 4100: 7b02 ld s6,32(sp) - 4102: 6be2 ld s7,24(sp) - 4104: 6c42 ld s8,16(sp) - 4106: 6ca2 ld s9,8(sp) -} - 4108: 60e6 ld ra,88(sp) - 410a: 854a mv a0,s2 - 410c: 6906 ld s2,64(sp) - 410e: 6125 addi sp,sp,96 - 4110: 8082 ret - 4112: 6446 ld s0,80(sp) - 4114: 60e6 ld ra,88(sp) - 4116: 7aa2 ld s5,40(sp) - 4118: 7b02 ld s6,32(sp) - 411a: 854a mv a0,s2 - 411c: 6906 ld s2,64(sp) - 411e: 6125 addi sp,sp,96 - 4120: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 4122: 2e1000ef jal 4c02 - stream->buf_write_pos += space_left; - 4126: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 412a: 85de mv a1,s7 - bytes_written += space_left; - 412c: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 412e: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4132: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 4136: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 413a: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 413c: 00904763 bgtz s1,414a - while (bytes_written < total_bytes) - 4140: f729efe3 bltu s3,s2,40be - return bytes_written / size; - 4144: 0369d933 divu s2,s3,s6 - 4148: b77d j 40f6 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 414a: 4008 lw a0,0(s0) - 414c: 87afc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 4150: 41042783 lw a5,1040(s0) - 4154: 08f54963 blt a0,a5,41e6 - stream->buf_write_pos = 0; - 4158: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 415c: f729e1e3 bltu s3,s2,40be - 4160: b7d5 j 4144 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4162: 4008 lw a0,0(s0) - 4164: 40000613 li a2,1024 - 4168: 85de mv a1,s7 - 416a: 85cfc0ef jal 1c6 - if (ret < stream->buf_write_pos) - 416e: 41042783 lw a5,1040(s0) - 4172: 08f54163 blt a0,a5,41f4 - stream->buf_write_pos = 0; - 4176: 40042823 sw zero,1040(s0) - 417a: bfa5 j 40f2 -} - 417c: 60e6 ld ra,88(sp) - return 0; - 417e: 4901 li s2,0 -} - 4180: 854a mv a0,s2 - 4182: 6906 ld s2,64(sp) - 4184: 6125 addi sp,sp,96 - 4186: 8082 ret - 4188: 60e6 ld ra,88(sp) - return 0; - 418a: 4901 li s2,0 - 418c: 7aa2 ld s5,40(sp) -} - 418e: 854a mv a0,s2 - 4190: 6906 ld s2,64(sp) - 4192: 6125 addi sp,sp,96 - 4194: 8082 ret - while (bytes_written < total_bytes) - 4196: f6090ee3 beqz s2,4112 - 419a: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 419c: 4481 li s1,0 - 419e: a021 j 41a6 - bytes_written += ret; - 41a0: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 41a2: 0324f463 bgeu s1,s2,41ca - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 41a6: 4008 lw a0,0(s0) - 41a8: 40990633 sub a2,s2,s1 - 41ac: 009a85b3 add a1,s5,s1 - 41b0: 816fc0ef jal 1c6 - if (ret <= 0) - 41b4: fea046e3 bgtz a0,41a0 - stream->error = 1; - 41b8: 4785 li a5,1 - return bytes_written / size; - 41ba: 0364d933 divu s2,s1,s6 - stream->error = 1; - 41be: c41c sw a5,8(s0) - break; - 41c0: 64a6 ld s1,72(sp) - 41c2: 6446 ld s0,80(sp) - 41c4: 7aa2 ld s5,40(sp) - 41c6: 7b02 ld s6,32(sp) - 41c8: b781 j 4108 - return bytes_written / size; - 41ca: 0364d933 divu s2,s1,s6 - 41ce: 6446 ld s0,80(sp) - 41d0: 64a6 ld s1,72(sp) - 41d2: 7aa2 ld s5,40(sp) - 41d4: 7b02 ld s6,32(sp) - 41d6: bf0d j 4108 - 41d8: 6446 ld s0,80(sp) - 41da: 79e2 ld s3,56(sp) - 41dc: 7aa2 ld s5,40(sp) - 41de: 7b02 ld s6,32(sp) - 41e0: 6be2 ld s7,24(sp) - 41e2: 6c42 ld s8,16(sp) - 41e4: b715 j 4108 - stream->error = 1; - 41e6: 4785 li a5,1 - 41e8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 41ea: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 41ee: ed29e8e3 bltu s3,s2,40be - 41f2: bf89 j 4144 - stream->error = 1; - 41f4: 4785 li a5,1 - 41f6: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 41f8: 40042823 sw zero,1040(s0) - return EOF; - 41fc: bddd j 40f2 - -00000000000041fe : - if (!stream) - 41fe: c925 beqz a0,426e -{ - 4200: 1101 addi sp,sp,-32 - 4202: e04a sd s2,0(sp) - 4204: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 4206: 41052603 lw a2,1040(a0) -{ - 420a: e822 sd s0,16(sp) - 420c: e426 sd s1,8(sp) - 420e: ec06 sd ra,24(sp) - 4210: 842a mv s0,a0 - 4212: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 4214: 02c04863 bgtz a2,4244 - if (lseek(stream->fd, offset, whence) < 0) - 4218: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 421a: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 421e: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 4222: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 4226: 864a mv a2,s2 - 4228: 0004859b sext.w a1,s1 - 422c: 82afc0ef jal 256 - 4230: 87aa mv a5,a0 - return 0; - 4232: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 4234: 0207c463 bltz a5,425c -} - 4238: 60e2 ld ra,24(sp) - 423a: 6442 ld s0,16(sp) - 423c: 64a2 ld s1,8(sp) - 423e: 6902 ld s2,0(sp) - 4240: 6105 addi sp,sp,32 - 4242: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4244: 4108 lw a0,0(a0) - 4246: 01040593 addi a1,s0,16 - 424a: f7dfb0ef jal 1c6 - if (ret < stream->buf_write_pos) - 424e: 41042783 lw a5,1040(s0) - 4252: 00f54963 blt a0,a5,4264 - stream->buf_write_pos = 0; - 4256: 40042823 sw zero,1040(s0) - 425a: bf7d j 4218 - stream->error = 1; - 425c: 4785 li a5,1 - 425e: c41c sw a5,8(s0) - return -1; - 4260: 557d li a0,-1 - 4262: bfd9 j 4238 - stream->error = 1; - 4264: 4785 li a5,1 - 4266: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4268: 40042823 sw zero,1040(s0) - return EOF; - 426c: b775 j 4218 - return -1; - 426e: 557d li a0,-1 -} - 4270: 8082 ret - -0000000000004272 : - if (!stream) - 4272: c505 beqz a0,429a -{ - 4274: 1141 addi sp,sp,-16 - 4276: e022 sd s0,0(sp) - 4278: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 427a: 4108 lw a0,0(a0) - 427c: 4605 li a2,1 - 427e: 4581 li a1,0 -{ - 4280: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 4282: fd5fb0ef jal 256 - if (ret < 0) - 4286: 00054663 bltz a0,4292 -} - 428a: 60a2 ld ra,8(sp) - 428c: 6402 ld s0,0(sp) - 428e: 0141 addi sp,sp,16 - 4290: 8082 ret - stream->error = 1; - 4292: 4785 li a5,1 - 4294: c41c sw a5,8(s0) - return -1L; - 4296: 557d li a0,-1 - 4298: bfcd j 428a - 429a: 557d li a0,-1 -} - 429c: 8082 ret - -000000000000429e : - if (stream) - 429e: c915 beqz a0,42d2 - if (stream->buf_write_pos > 0) - 42a0: 41052603 lw a2,1040(a0) -{ - 42a4: 1141 addi sp,sp,-16 - 42a6: e022 sd s0,0(sp) - 42a8: e406 sd ra,8(sp) - 42aa: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 42ac: 02c04463 bgtz a2,42d4 - if (lseek(stream->fd, offset, whence) < 0) - 42b0: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 42b2: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 42b6: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 42ba: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 42be: 4601 li a2,0 - 42c0: 4581 li a1,0 - 42c2: f95fb0ef jal 256 -} - 42c6: 60a2 ld ra,8(sp) - stream->error = 0; - 42c8: 00042423 sw zero,8(s0) -} - 42cc: 6402 ld s0,0(sp) - 42ce: 0141 addi sp,sp,16 - 42d0: 8082 ret - 42d2: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 42d4: 4108 lw a0,0(a0) - 42d6: 01040593 addi a1,s0,16 - 42da: eedfb0ef jal 1c6 - if (ret < stream->buf_write_pos) - 42de: 41042783 lw a5,1040(s0) - 42e2: 00f54563 blt a0,a5,42ec - stream->buf_write_pos = 0; - 42e6: 40042823 sw zero,1040(s0) - 42ea: b7d9 j 42b0 - stream->error = 1; - 42ec: 4785 li a5,1 - 42ee: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 42f0: 40042823 sw zero,1040(s0) - return EOF; - 42f4: bf75 j 42b0 - -00000000000042f6 : - return (stream) ? stream->eof : 1; - 42f6: c119 beqz a0,42fc - 42f8: 4548 lw a0,12(a0) - 42fa: 8082 ret - 42fc: 4505 li a0,1 -} - 42fe: 8082 ret - -0000000000004300 : - return (stream) ? stream->error : 1; - 4300: c119 beqz a0,4306 - 4302: 4508 lw a0,8(a0) - 4304: 8082 ret - 4306: 4505 li a0,1 -} - 4308: 8082 ret - -000000000000430a : - if (stream) - 430a: c509 beqz a0,4314 - stream->error = 0; - 430c: 00052423 sw zero,8(a0) - stream->eof = 0; - 4310: 00052623 sw zero,12(a0) -} - 4314: 8082 ret - -0000000000004316 : - if (!stream || c == EOF) - 4316: c19d beqz a1,433c - 4318: 57fd li a5,-1 - 431a: 02f50163 beq a0,a5,433c - if (stream->buf_read_pos > 0) - 431e: 4145a783 lw a5,1044(a1) - 4322: 00f05d63 blez a5,433c - stream->buf_read_pos--; - 4326: fff7871b addiw a4,a5,-1 - 432a: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 432e: 00e587b3 add a5,a1,a4 - 4332: 00a78823 sb a0,16(a5) - stream->eof = 0; - 4336: 0005a623 sw zero,12(a1) - return c; - 433a: 8082 ret - return EOF; - 433c: 557d li a0,-1 - 433e: 8082 ret - -0000000000004340 : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 4340: 1141 addi sp,sp,-16 - 4342: e422 sd s0,8(sp) - 4344: 8eaa mv t4,a0 -{ - const char *s = nptr; - 4346: 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'; } - 4348: 02000313 li t1,32 - 434c: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 434e: 0008c783 lbu a5,0(a7) - 4352: 00188813 addi a6,a7,1 - 4356: ff77871b addiw a4,a5,-9 - 435a: 0ff77693 zext.b a3,a4 - 435e: 0007871b sext.w a4,a5 - 4362: 04678363 beq a5,t1,43a8 - 4366: 04de7163 bgeu t3,a3,43a8 - } while (isspace(c)); - - if (c == '-') - 436a: 02d00793 li a5,45 - 436e: 0ef70863 beq a4,a5,445e - { - neg = 1; - c = *s++; - } - else if (c == '+') - 4372: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 4376: 4381 li t2,0 - else if (c == '+') - 4378: 08f70c63 beq a4,a5,4410 - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 437c: ea05 bnez a2,43ac - 437e: 03000793 li a5,48 - 4382: 0ef70463 beq a4,a5,446a - 4386: 00ccd8b7 lui a7,0xccd - 438a: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5355> - 438e: 08b2 slli a7,a7,0xc - 4390: ccd88893 addi a7,a7,-819 - 4394: 08b2 slli a7,a7,0xc - 4396: ccd88893 addi a7,a7,-819 - 439a: 08b6 slli a7,a7,0xd - 439c: 4415 li s0,5 - 439e: 99988893 addi a7,a7,-1639 - 43a2: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 43a4: 4629 li a2,10 - 43a6: a829 j 43c0 -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 43a8: 88c2 mv a7,a6 - 43aa: b755 j 434e - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 43ac: 47c1 li a5,16 - 43ae: 0cf60d63 beq a2,a5,4488 - - cutoff = ULLONG_MAX / (unsigned long long)base; - 43b2: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 43b4: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 43b8: 82b2 mv t0,a2 - 43ba: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 43be: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 43c0: 4301 li t1,0 - 43c2: 4501 li a0,0 - { - if (isdigit(c)) - 43c4: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 43c6: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 43c8: 5f7d li t5,-1 - if (isdigit(c)) - 43ca: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 43ce: 0007069b sext.w a3,a4 - 43d2: 00fe7e63 bgeu t3,a5,43ee - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 43d6: f9f6879b addiw a5,a3,-97 - 43da: 04fff063 bgeu t6,a5,441a - 43de: fbf6869b addiw a3,a3,-65 - 43e2: 04dfe163 bltu t6,a3,4424 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 43e6: 03700793 li a5,55 - 43ea: 40f707bb subw a5,a4,a5 - if (c >= base) - 43ee: 02c7db63 bge a5,a2,4424 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 43f2: 01e30b63 beq t1,t5,4408 - any = -1; - 43f6: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 43f8: 00a8e863 bltu a7,a0,4408 - 43fc: 05150e63 beq a0,a7,4458 - else - { - any = 1; - 4400: 4305 li t1,1 - acc *= base; - 4402: 02550533 mul a0,a0,t0 - acc += c; - 4406: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 4408: 0805 addi a6,a6,1 - 440a: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 440e: bf75 j 43ca - c = *s++; - 4410: 00084703 lbu a4,0(a6) - 4414: 00288813 addi a6,a7,2 - 4418: b795 j 437c - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 441a: 05700793 li a5,87 - 441e: 40f707bb subw a5,a4,a5 - 4422: b7f1 j 43ee - } - } - - if (any < 0) - 4424: 57fd li a5,-1 - 4426: 00f30e63 beq t1,a5,4442 - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 442a: 00038463 beqz t2,4432 - acc = -acc; - 442e: 40a00533 neg a0,a0 - - if (endptr != 0) - 4432: c589 beqz a1,443c - *endptr = (char *)(any ? s - 1 : nptr); - 4434: 00031f63 bnez t1,4452 - 4438: 01d5b023 sd t4,0(a1) - - return acc; -} - 443c: 6422 ld s0,8(sp) - 443e: 0141 addi sp,sp,16 - 4440: 8082 ret - errno = ERANGE; - 4442: 02200793 li a5,34 - 4446: 00003717 auipc a4,0x3 - 444a: 3ef72d23 sw a5,1018(a4) # 7840 - acc = ULLONG_MAX; - 444e: 557d li a0,-1 - if (endptr != 0) - 4450: d5f5 beqz a1,443c - *endptr = (char *)(any ? s - 1 : nptr); - 4452: fff80e93 addi t4,a6,-1 - 4456: b7cd j 4438 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 4458: faf448e3 blt s0,a5,4408 - 445c: b755 j 4400 - c = *s++; - 445e: 00084703 lbu a4,0(a6) - neg = 1; - 4462: 4385 li t2,1 - c = *s++; - 4464: 00288813 addi a6,a7,2 - 4468: bf11 j 437c - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 446a: 00084783 lbu a5,0(a6) - 446e: 05800693 li a3,88 - 4472: 0df7f793 andi a5,a5,223 - 4476: 02d78b63 beq a5,a3,44ac - 447a: 58fd li a7,-1 - 447c: 441d li s0,7 - 447e: 0038d893 srli a7,a7,0x3 - 4482: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 4484: 4621 li a2,8 - 4486: bf2d j 43c0 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 4488: 03000793 li a5,48 - 448c: 00f70863 beq a4,a5,449c - 4490: 58fd li a7,-1 - 4492: 443d li s0,15 - 4494: 0048d893 srli a7,a7,0x4 - 4498: 42c1 li t0,16 - 449a: b71d j 43c0 - 449c: 00084783 lbu a5,0(a6) - 44a0: 05800693 li a3,88 - 44a4: 0df7f793 andi a5,a5,223 - 44a8: fed794e3 bne a5,a3,4490 - s += 2; - 44ac: 58fd li a7,-1 - c = s[1]; - 44ae: 00184703 lbu a4,1(a6) - s += 2; - 44b2: 443d li s0,15 - 44b4: 0809 addi a6,a6,2 - 44b6: 0048d893 srli a7,a7,0x4 - 44ba: 42c1 li t0,16 - base = 16; - 44bc: 4641 li a2,16 - 44be: b709 j 43c0 - -00000000000044c0 : - if (__atexit_func_count >= ATEXIT_MAX) - 44c0: 00003717 auipc a4,0x3 - 44c4: 38070713 addi a4,a4,896 # 7840 - 44c8: 435c lw a5,4(a4) - 44ca: 46fd li a3,31 - 44cc: 00f6ca63 blt a3,a5,44e0 - __atexit_funcs[__atexit_func_count++] = function; - 44d0: 00379693 slli a3,a5,0x3 - 44d4: 96ba add a3,a3,a4 - 44d6: 2785 addiw a5,a5,1 - 44d8: e688 sd a0,8(a3) - 44da: c35c sw a5,4(a4) - return 0; - 44dc: 4501 li a0,0 - 44de: 8082 ret - return -1; - 44e0: 557d li a0,-1 -} - 44e2: 8082 ret - -00000000000044e4 : -{ - 44e4: 1101 addi sp,sp,-32 - 44e6: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 44e8: 00003417 auipc s0,0x3 - 44ec: 35840413 addi s0,s0,856 # 7840 - 44f0: 405c lw a5,4(s0) -{ - 44f2: e426 sd s1,8(sp) - 44f4: ec06 sd ra,24(sp) - 44f6: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 44f8: 00f05d63 blez a5,4512 - (__atexit_funcs[--__atexit_func_count])(); - 44fc: fff7871b addiw a4,a5,-1 - 4500: 87ba mv a5,a4 - 4502: 070e slli a4,a4,0x3 - 4504: 9722 add a4,a4,s0 - 4506: 6718 ld a4,8(a4) - 4508: c05c sw a5,4(s0) - 450a: 9702 jalr a4 - while (__atexit_func_count > 0) - 450c: 405c lw a5,4(s0) - 450e: fef047e3 bgtz a5,44fc - sys_exit(status); - 4512: 8526 mv a0,s1 - 4514: c8bfb0ef jal 19e - while (1) - 4518: a001 j 4518 - -000000000000451a : -{ - 451a: 1141 addi sp,sp,-16 - exit(127); - 451c: 07f00513 li a0,127 -{ - 4520: e406 sd ra,8(sp) - exit(127); - 4522: fc3ff0ef jal 44e4 - -0000000000004526 : -} - 4526: 4501 li a0,0 - 4528: 8082 ret - -000000000000452a : -} - 452a: 557d li a0,-1 - 452c: 8082 ret - -000000000000452e : - if (!ptr) - 452e: c121 beqz a0,456e - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 4530: 00003617 auipc a2,0x3 - 4534: 31060613 addi a2,a2,784 # 7840 - 4538: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 453c: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 4540: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 4542: 02d7f763 bgeu a5,a3,4570 - 4546: 00e6e463 bltu a3,a4,454e - if (p >= p->next && (bp > p || bp < p->next)) - 454a: 02e7e763 bltu a5,a4,4578 - if ((char *)bp + bp->size == (char *)p->next) - 454e: ff053583 ld a1,-16(a0) - 4552: 00b68833 add a6,a3,a1 - 4556: 03070363 beq a4,a6,457c - if ((char *)p + p->size == (char *)bp) - 455a: 638c ld a1,0(a5) - 455c: fee53c23 sd a4,-8(a0) - 4560: 00b78833 add a6,a5,a1 - 4564: 03068963 beq a3,a6,4596 - 4568: e794 sd a3,8(a5) - freep = p; - 456a: 10f63423 sd a5,264(a2) -} - 456e: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 4570: 00e7e463 bltu a5,a4,4578 - 4574: fce6ede3 bltu a3,a4,454e -{ - 4578: 87ba mv a5,a4 - 457a: b7d9 j 4540 - bp->size += p->next->size; - 457c: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 4580: 6718 ld a4,8(a4) - bp->size += p->next->size; - 4582: 95c2 add a1,a1,a6 - 4584: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 4588: 638c ld a1,0(a5) - 458a: fee53c23 sd a4,-8(a0) - 458e: 00b78833 add a6,a5,a1 - 4592: fd069be3 bne a3,a6,4568 - p->size += bp->size; - 4596: ff053503 ld a0,-16(a0) - p->next = bp->next; - 459a: 86ba mv a3,a4 - p->size += bp->size; - 459c: 00b50733 add a4,a0,a1 - 45a0: e398 sd a4,0(a5) - p->next = bp->next; - 45a2: b7d9 j 4568 - -00000000000045a4 : - if (size == 0) - 45a4: c169 beqz a0,4666 -{ - 45a6: 7179 addi sp,sp,-48 - 45a8: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 45aa: 00003497 auipc s1,0x3 - 45ae: 29648493 addi s1,s1,662 # 7840 - 45b2: 1084b783 ld a5,264(s1) -{ - 45b6: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 45b8: 057d addi a0,a0,31 -{ - 45ba: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 45bc: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 45c0: c3d1 beqz a5,4644 - for (p = prevp->next;; prevp = p, p = p->next) - 45c2: 6788 ld a0,8(a5) - if (p->size >= size) - 45c4: 6118 ld a4,0(a0) - 45c6: 06877163 bgeu a4,s0,4628 - 45ca: e44e sd s3,8(sp) - 45cc: e052 sd s4,0(sp) - 45ce: e84a sd s2,16(sp) - if (nu < 4096) - 45d0: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 45d2: 59fd li s3,-1 - 45d4: a029 j 45de - for (p = prevp->next;; prevp = p, p = p->next) - 45d6: 6788 ld a0,8(a5) - if (p->size >= size) - 45d8: 6118 ld a4,0(a0) - 45da: 04877463 bgeu a4,s0,4622 - if (p == freep) - 45de: 1084b703 ld a4,264(s1) - 45e2: 87aa mv a5,a0 - 45e4: fee519e3 bne a0,a4,45d6 - if (nu < 4096) - 45e8: 8922 mv s2,s0 - 45ea: 01447363 bgeu s0,s4,45f0 - 45ee: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 45f0: 854a mv a0,s2 - 45f2: c3dfb0ef jal 22e - 45f6: 87aa mv a5,a0 - free((void *)(up + 1)); - 45f8: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 45fa: 01378963 beq a5,s3,460c - up->size = nu; - 45fe: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 4602: f2dff0ef jal 452e - return freep; - 4606: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 460a: f7f1 bnez a5,45d6 -} - 460c: 70a2 ld ra,40(sp) - 460e: 7402 ld s0,32(sp) - errno = ENOMEM; - 4610: 47b1 li a5,12 - 4612: c09c sw a5,0(s1) - return NULL; - 4614: 6942 ld s2,16(sp) - 4616: 69a2 ld s3,8(sp) - 4618: 6a02 ld s4,0(sp) -} - 461a: 64e2 ld s1,24(sp) - return NULL; - 461c: 4501 li a0,0 -} - 461e: 6145 addi sp,sp,48 - 4620: 8082 ret - 4622: 6942 ld s2,16(sp) - 4624: 69a2 ld s3,8(sp) - 4626: 6a02 ld s4,0(sp) - if (p->size == size) - 4628: 02e40c63 beq s0,a4,4660 - p->size -= size; - 462c: 8f01 sub a4,a4,s0 - 462e: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 4630: 953a add a0,a0,a4 - p->size = size; - 4632: e100 sd s0,0(a0) -} - 4634: 70a2 ld ra,40(sp) - 4636: 7402 ld s0,32(sp) - freep = prevp; - 4638: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 463c: 0541 addi a0,a0,16 -} - 463e: 64e2 ld s1,24(sp) - 4640: 6145 addi sp,sp,48 - 4642: 8082 ret - base.next = freep = prevp = &base; - 4644: 00003517 auipc a0,0x3 - 4648: 30c50513 addi a0,a0,780 # 7950 - 464c: 10a4b423 sd a0,264(s1) - 4650: 10a4bc23 sd a0,280(s1) - base.size = 0; - 4654: 00003797 auipc a5,0x3 - 4658: 2e07be23 sd zero,764(a5) # 7950 - if (p->size >= size) - 465c: f43d bnez s0,45ca - base.next = freep = prevp = &base; - 465e: 87aa mv a5,a0 - prevp->next = p->next; - 4660: 6518 ld a4,8(a0) - 4662: e798 sd a4,8(a5) - 4664: bfc1 j 4634 - return NULL; - 4666: 4501 li a0,0 -} - 4668: 8082 ret - -000000000000466a : - if (__builtin_mul_overflow(nmemb, size, &total)) - 466a: 02b537b3 mulhu a5,a0,a1 -{ - 466e: 1101 addi sp,sp,-32 - 4670: e822 sd s0,16(sp) - 4672: ec06 sd ra,24(sp) - 4674: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 4676: 02b50433 mul s0,a0,a1 - 467a: e385 bnez a5,469a - void *p = malloc(total); - 467c: 8522 mv a0,s0 - 467e: f27ff0ef jal 45a4 - 4682: 84aa mv s1,a0 - if (p) - 4684: c509 beqz a0,468e - memset(p, 0, total); - 4686: 8622 mv a2,s0 - 4688: 4581 li a1,0 - 468a: 524000ef jal 4bae -} - 468e: 60e2 ld ra,24(sp) - 4690: 6442 ld s0,16(sp) - 4692: 8526 mv a0,s1 - 4694: 64a2 ld s1,8(sp) - 4696: 6105 addi sp,sp,32 - 4698: 8082 ret - 469a: 60e2 ld ra,24(sp) - 469c: 6442 ld s0,16(sp) - errno = ENOMEM; - 469e: 47b1 li a5,12 - return NULL; - 46a0: 4481 li s1,0 - errno = ENOMEM; - 46a2: 00003717 auipc a4,0x3 - 46a6: 18f72f23 sw a5,414(a4) # 7840 -} - 46aa: 8526 mv a0,s1 - 46ac: 64a2 ld s1,8(sp) - 46ae: 6105 addi sp,sp,32 - 46b0: 8082 ret - -00000000000046b2 : - if (!ptr) - 46b2: c929 beqz a0,4704 -{ - 46b4: 1101 addi sp,sp,-32 - 46b6: ec06 sd ra,24(sp) - 46b8: e426 sd s1,8(sp) - if (size == 0) - 46ba: c5b9 beqz a1,4708 - if (bp->size >= new_size) - 46bc: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 46c0: 01f58793 addi a5,a1,31 - 46c4: e822 sd s0,16(sp) - 46c6: 9bc1 andi a5,a5,-16 - 46c8: 842a mv s0,a0 - return ptr; - 46ca: 84aa mv s1,a0 - if (bp->size >= new_size) - 46cc: 00f76863 bltu a4,a5,46dc - 46d0: 6442 ld s0,16(sp) -} - 46d2: 60e2 ld ra,24(sp) - 46d4: 8526 mv a0,s1 - 46d6: 64a2 ld s1,8(sp) - 46d8: 6105 addi sp,sp,32 - 46da: 8082 ret - void *new_ptr = malloc(size); - 46dc: 852e mv a0,a1 - 46de: ec7ff0ef jal 45a4 - 46e2: 84aa mv s1,a0 - if (!new_ptr) - 46e4: d575 beqz a0,46d0 - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 46e6: ff043603 ld a2,-16(s0) - 46ea: 85a2 mv a1,s0 - 46ec: 1641 addi a2,a2,-16 - 46ee: 514000ef jal 4c02 - free(ptr); - 46f2: 8522 mv a0,s0 - 46f4: e3bff0ef jal 452e -} - 46f8: 60e2 ld ra,24(sp) - free(ptr); - 46fa: 6442 ld s0,16(sp) -} - 46fc: 8526 mv a0,s1 - 46fe: 64a2 ld s1,8(sp) - 4700: 6105 addi sp,sp,32 - 4702: 8082 ret - return malloc(size); - 4704: 852e mv a0,a1 - 4706: bd79 j 45a4 - free(ptr); - 4708: e27ff0ef jal 452e - return NULL; - 470c: 4481 li s1,0 - 470e: b7d1 j 46d2 - -0000000000004710 : - if (base < 0 || base == 1 || base > 36) - 4710: 02400813 li a6,36 -{ - 4714: 86aa mv a3,a0 - 4716: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 4718: 00c86663 bltu a6,a2,4724 - 471c: 4805 li a6,1 - 471e: 01060363 beq a2,a6,4724 - 4722: b939 j 4340 - if (endptr) - 4724: c311 beqz a4,4728 - *endptr = (char *)nptr; - 4726: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 4728: 00003797 auipc a5,0x3 - 472c: 1007ac23 sw zero,280(a5) # 7840 -} - 4730: 4501 li a0,0 - 4732: 8082 ret - -0000000000004734 : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 4734: 1141 addi sp,sp,-16 - 4736: e406 sd ra,8(sp) - 4738: e022 sd s0,0(sp) - const char *s = nptr; - 473a: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 473c: 02000813 li a6,32 - 4740: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 4742: 0006c783 lbu a5,0(a3) - 4746: 0685 addi a3,a3,1 - 4748: ff77871b addiw a4,a5,-9 - 474c: 0ff77713 zext.b a4,a4 - 4750: 0007841b sext.w s0,a5 - 4754: ff0787e3 beq a5,a6,4742 - 4758: fee8f5e3 bgeu a7,a4,4742 - if (base < 0 || base == 1 || base > 36) - 475c: 02400793 li a5,36 - 4760: 02c7ec63 bltu a5,a2,4798 - 4764: 4785 li a5,1 - 4766: 02f60963 beq a2,a5,4798 - 476a: bd7ff0ef jal 4340 - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 476e: 00003797 auipc a5,0x3 - 4772: 0d278793 addi a5,a5,210 # 7840 - 4776: 4394 lw a3,0(a5) - 4778: 02200713 li a4,34 - 477c: 04e68363 beq a3,a4,47c2 - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 4780: 02d00713 li a4,45 - 4784: 02e40563 beq s0,a4,47ae - 4788: 00055f63 bgez a0,47a6 - { - errno = ERANGE; - 478c: 02200713 li a4,34 - 4790: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 4792: 557d li a0,-1 - 4794: 8105 srli a0,a0,0x1 - 4796: a801 j 47a6 - if (endptr) - 4798: c191 beqz a1,479c - *endptr = (char *)nptr; - 479a: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 479c: 00003797 auipc a5,0x3 - 47a0: 0a07a223 sw zero,164(a5) # 7840 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 47a4: 4501 li a0,0 -} - 47a6: 60a2 ld ra,8(sp) - 47a8: 6402 ld s0,0(sp) - 47aa: 0141 addi sp,sp,16 - 47ac: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 47ae: 577d li a4,-1 - 47b0: 177e slli a4,a4,0x3f - 47b2: 02a76263 bltu a4,a0,47d6 -} - 47b6: 60a2 ld ra,8(sp) - 47b8: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 47ba: 40a00533 neg a0,a0 -} - 47be: 0141 addi sp,sp,16 - 47c0: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 47c2: 577d li a4,-1 - 47c4: fae51ee3 bne a0,a4,4780 - return neg ? LLONG_MIN : LLONG_MAX; - 47c8: 02d00793 li a5,45 - 47cc: fcf413e3 bne s0,a5,4792 - return LLONG_MIN; - 47d0: 557d li a0,-1 - 47d2: 157e slli a0,a0,0x3f - 47d4: bfc9 j 47a6 - errno = ERANGE; - 47d6: 02200713 li a4,34 - 47da: c398 sw a4,0(a5) - return LLONG_MIN; - 47dc: bfd5 j 47d0 - -00000000000047de : - if (base < 0 || base == 1 || base > 36) - 47de: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 47e2: 86aa mv a3,a0 - 47e4: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 47e6: 00c86663 bltu a6,a2,47f2 - 47ea: 4805 li a6,1 - 47ec: 01060363 beq a2,a6,47f2 - 47f0: be81 j 4340 - if (endptr) - 47f2: c311 beqz a4,47f6 - *endptr = (char *)nptr; - 47f4: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 47f6: 00003797 auipc a5,0x3 - 47fa: 0407a523 sw zero,74(a5) # 7840 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 47fe: 4501 li a0,0 - 4800: 8082 ret - -0000000000004802 : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 4802: bf0d j 4734 - -0000000000004804 : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4804: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 4806: 4629 li a2,10 - 4808: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 480a: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 480c: f29ff0ef jal 4734 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4810: 60a2 ld ra,8(sp) - 4812: 2501 sext.w a0,a0 - 4814: 0141 addi sp,sp,16 - 4816: 8082 ret - -0000000000004818 : - long long ret = strtoll(nptr, endptr, base); - 4818: 4629 li a2,10 - 481a: 4581 li a1,0 - 481c: bf21 j 4734 - -000000000000481e : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 481e: 4629 li a2,10 - 4820: 4581 li a1,0 - 4822: bf09 j 4734 - -0000000000004824 : - 4824: 02000693 li a3,32 - 4828: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 482a: 00054783 lbu a5,0(a0) - 482e: ff77871b addiw a4,a5,-9 - 4832: 0ff77713 zext.b a4,a4 - 4836: 06d78263 beq a5,a3,489a - 483a: 06e67063 bgeu a2,a4,489a - s++; - if (*s == '-') - 483e: 02d00713 li a4,45 - 4842: 08e78e63 beq a5,a4,48de - { - sign = -1; - s++; - } - else if (*s == '+') - 4846: 02b00713 li a4,43 - 484a: 0ae78263 beq a5,a4,48ee - 484e: 00001717 auipc a4,0x1 - 4852: 0a273507 fld fa0,162(a4) # 58f0 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 4856: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 485a: 46a5 li a3,9 - 485c: f20007d3 fmv.d.x fa5,zero - 4860: 8732 mv a4,a2 - 4862: 02c6e363 bltu a3,a2,4888 - 4866: 00001797 auipc a5,0x1 - 486a: 0927b687 fld fa3,146(a5) # 58f8 - 486e: 4625 li a2,9 - 4870: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 4874: d2070753 fcvt.d.w fa4,a4 - s++; - 4878: 0505 addi a0,a0,1 - 487a: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 487e: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 4882: 8736 mv a4,a3 - while (isdigit(*s)) - 4884: fed676e3 bgeu a2,a3,4870 - } - if (*s == '.') - 4888: 02e00713 li a4,46 - 488c: 00e78963 beq a5,a4,489e - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 4890: c191 beqz a1,4894 - *endptr = (char *)s; - 4892: e188 sd a0,0(a1) - return val * sign; -} - 4894: 12a7f553 fmul.d fa0,fa5,fa0 - 4898: 8082 ret - s++; - 489a: 0505 addi a0,a0,1 - 489c: b779 j 482a - while (isdigit(*s)) - 489e: 00154703 lbu a4,1(a0) - 48a2: 46a5 li a3,9 - s++; - 48a4: 0505 addi a0,a0,1 - 48a6: fd07071b addiw a4,a4,-48 - 48aa: 87ba mv a5,a4 - while (isdigit(*s)) - 48ac: fee6e2e3 bltu a3,a4,4890 - double factor = 1.0; - 48b0: 00001717 auipc a4,0x1 - 48b4: 04073707 fld fa4,64(a4) # 58f0 - 48b8: 00001717 auipc a4,0x1 - 48bc: 05873607 fld fa2,88(a4) # 5910 - factor *= 0.1; - 48c0: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 48c4: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 48c8: d20786d3 fcvt.d.w fa3,a5 - s++; - 48cc: 0505 addi a0,a0,1 - 48ce: fd07071b addiw a4,a4,-48 - 48d2: 87ba mv a5,a4 - val += (*s - '0') * factor; - 48d4: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 48d8: fee6f4e3 bgeu a3,a4,48c0 - 48dc: bf55 j 4890 - while (isdigit(*s)) - 48de: 00154783 lbu a5,1(a0) - 48e2: 00001717 auipc a4,0x1 - 48e6: 00673507 fld fa0,6(a4) # 58e8 - s++; - 48ea: 0505 addi a0,a0,1 - 48ec: b7ad j 4856 - while (isdigit(*s)) - 48ee: 00154783 lbu a5,1(a0) - 48f2: 00001717 auipc a4,0x1 - 48f6: ffe73507 fld fa0,-2(a4) # 58f0 - s++; - 48fa: 0505 addi a0,a0,1 - 48fc: bfa9 j 4856 - -00000000000048fe : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 48fe: 4581 li a1,0 - 4900: b715 j 4824 - -0000000000004902 : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 4902: 1141 addi sp,sp,-16 - 4904: e406 sd ra,8(sp) - 4906: f1fff0ef jal 4824 - 490a: 60a2 ld ra,8(sp) - 490c: 40157553 fcvt.s.d fa0,fa0 - 4910: 0141 addi sp,sp,16 - 4912: 8082 ret - -0000000000004914 : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 4914: 4785 li a5,1 - 4916: 0cb7fd63 bgeu a5,a1,49f0 -{ - 491a: 715d addi sp,sp,-80 - 491c: f44e sd s3,40(sp) - 491e: e486 sd ra,72(sp) - 4920: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 4922: c279 beqz a2,49e8 - 4924: e85a sd s6,16(sp) - 4926: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 4928: 1b7d addi s6,s6,-1 - 492a: fc26 sd s1,56(sp) - 492c: 033b04b3 mul s1,s6,s3 - 4930: ec56 sd s5,24(sp) - 4932: 8aaa mv s5,a0 - 4934: f052 sd s4,32(sp) - 4936: e45e sd s7,8(sp) - 4938: e0a2 sd s0,64(sp) - 493a: f84a sd s2,48(sp) - 493c: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 493e: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 4940: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 4942: 069af763 bgeu s5,s1,49b0 - char *j = base_ptr; - 4946: 8956 mv s2,s5 - char *i = base_ptr; - 4948: 8456 mv s0,s5 - 494a: a021 j 4952 - for (; j < pivot; j += size) - 494c: 994e add s2,s2,s3 - 494e: 00997f63 bgeu s2,s1,496c - { - if (compar(j, pivot) < 0) - 4952: 85a6 mv a1,s1 - 4954: 854a mv a0,s2 - 4956: 9a02 jalr s4 - 4958: fe055ae3 bgez a0,494c - { - if (i != j) - 495c: 05241d63 bne s0,s2,49b6 - 4960: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 4964: 8432 mv s0,a2 - for (; j < pivot; j += size) - 4966: 994e add s2,s2,s3 - 4968: fe9965e3 bltu s2,s1,4952 - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 496c: 415405b3 sub a1,s0,s5 - 4970: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 4974: 40bb0b33 sub s6,s6,a1 - while (size--) - 4978: 013406b3 add a3,s0,s3 - *a++ = *b; - 497c: 0004c703 lbu a4,0(s1) - temp = *a; - 4980: 00044783 lbu a5,0(s0) - *b++ = temp; - 4984: 0485 addi s1,s1,1 - *a++ = *b; - 4986: 0405 addi s0,s0,1 - 4988: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 498c: fef48fa3 sb a5,-1(s1) - while (size--) - 4990: fed416e3 bne s0,a3,497c - qsort(base, left_count, size, compar); - 4994: 86d2 mv a3,s4 - 4996: 864e mv a2,s3 - 4998: 8556 mv a0,s5 - 499a: f7bff0ef jal 4914 - if (nmemb < 2 || size == 0) - 499e: 036bfe63 bgeu s7,s6,49da - char *pivot = base_ptr + (nmemb - 1) * size; - 49a2: 1b7d addi s6,s6,-1 - 49a4: 033b04b3 mul s1,s6,s3 - 49a8: 8aa2 mv s5,s0 - 49aa: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 49ac: f89aede3 bltu s5,s1,4946 - char *i = base_ptr; - 49b0: 8456 mv s0,s5 - for (; j < pivot; j += size) - 49b2: 4581 li a1,0 - 49b4: b7d1 j 4978 - 49b6: 01340633 add a2,s0,s3 - if (i != j) - 49ba: 874a mv a4,s2 - 49bc: 87a2 mv a5,s0 - *a++ = *b; - 49be: 00074683 lbu a3,0(a4) - temp = *a; - 49c2: 0007c803 lbu a6,0(a5) - *b++ = temp; - 49c6: 0705 addi a4,a4,1 - *a++ = *b; - 49c8: 0785 addi a5,a5,1 - 49ca: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 49ce: ff070fa3 sb a6,-1(a4) - while (size--) - 49d2: fec796e3 bne a5,a2,49be - i += size; - 49d6: 8432 mv s0,a2 - 49d8: b779 j 4966 - 49da: 6406 ld s0,64(sp) - 49dc: 74e2 ld s1,56(sp) - 49de: 7942 ld s2,48(sp) - 49e0: 7a02 ld s4,32(sp) - 49e2: 6ae2 ld s5,24(sp) - 49e4: 6b42 ld s6,16(sp) - 49e6: 6ba2 ld s7,8(sp) -} - 49e8: 60a6 ld ra,72(sp) - 49ea: 79a2 ld s3,40(sp) - 49ec: 6161 addi sp,sp,80 - 49ee: 8082 ret - 49f0: 8082 ret - -00000000000049f2 : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 49f2: 715d addi sp,sp,-80 - 49f4: e486 sd ra,72(sp) - 49f6: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 49f8: c629 beqz a2,4a42 - 49fa: f84a sd s2,48(sp) - 49fc: f44e sd s3,40(sp) - 49fe: f052 sd s4,32(sp) - 4a00: ec56 sd s5,24(sp) - 4a02: e85a sd s6,16(sp) - 4a04: e45e sd s7,8(sp) - 4a06: e0a2 sd s0,64(sp) - 4a08: 8932 mv s2,a2 - 4a0a: 8a2a mv s4,a0 - 4a0c: 8aae mv s5,a1 - 4a0e: 8b36 mv s6,a3 - 4a10: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 4a12: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 4a14: 01298433 add s0,s3,s2 - 4a18: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 4a1a: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 4a1e: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 4a20: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 4a22: 85a6 mv a1,s1 - 4a24: 9b82 jalr s7 - if (cmp < 0) - 4a26: 02054463 bltz a0,4a4e - u = idx; - else if (cmp > 0) - 4a2a: c515 beqz a0,4a56 - l = idx + 1; - 4a2c: 00140993 addi s3,s0,1 - while (l < u) - 4a30: ff29e2e3 bltu s3,s2,4a14 - 4a34: 6406 ld s0,64(sp) - 4a36: 7942 ld s2,48(sp) - 4a38: 79a2 ld s3,40(sp) - 4a3a: 7a02 ld s4,32(sp) - 4a3c: 6ae2 ld s5,24(sp) - 4a3e: 6b42 ld s6,16(sp) - 4a40: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 4a42: 60a6 ld ra,72(sp) - return NULL; - 4a44: 4481 li s1,0 -} - 4a46: 8526 mv a0,s1 - 4a48: 74e2 ld s1,56(sp) - 4a4a: 6161 addi sp,sp,80 - 4a4c: 8082 ret - u = idx; - 4a4e: 8922 mv s2,s0 - while (l < u) - 4a50: fd29e2e3 bltu s3,s2,4a14 - 4a54: b7c5 j 4a34 - 4a56: 6406 ld s0,64(sp) -} - 4a58: 60a6 ld ra,72(sp) - 4a5a: 7942 ld s2,48(sp) - 4a5c: 79a2 ld s3,40(sp) - 4a5e: 7a02 ld s4,32(sp) - 4a60: 6ae2 ld s5,24(sp) - 4a62: 6b42 ld s6,16(sp) - 4a64: 6ba2 ld s7,8(sp) - 4a66: 8526 mv a0,s1 - 4a68: 74e2 ld s1,56(sp) - 4a6a: 6161 addi sp,sp,80 - 4a6c: 8082 ret - -0000000000004a6e : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 4a6e: 41f5579b sraiw a5,a0,0x1f - 4a72: 8d3d xor a0,a0,a5 - 4a74: 9d1d subw a0,a0,a5 - 4a76: 8082 ret - -0000000000004a78 : -long labs(long j) { return (j < 0) ? -j : j; } - 4a78: 43f55793 srai a5,a0,0x3f - 4a7c: 8d3d xor a0,a0,a5 - 4a7e: 8d1d sub a0,a0,a5 - 4a80: 8082 ret - -0000000000004a82 : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 4a82: 43f55793 srai a5,a0,0x3f - 4a86: 8d3d xor a0,a0,a5 - 4a88: 8d1d sub a0,a0,a5 - 4a8a: 8082 ret - -0000000000004a8c
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 4a8c: 02b547bb divw a5,a0,a1 -{ - 4a90: 1141 addi sp,sp,-16 - return res; -} - 4a92: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 4a94: 02b5653b remw a0,a0,a1 - return res; - 4a98: 1782 slli a5,a5,0x20 - 4a9a: 9381 srli a5,a5,0x20 - 4a9c: 1502 slli a0,a0,0x20 -} - 4a9e: 8d5d or a0,a0,a5 - 4aa0: 8082 ret - -0000000000004aa2 : -ldiv_t ldiv(long numer, long denom) -{ - 4aa2: 1141 addi sp,sp,-16 - 4aa4: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 4aa6: 02b54533 div a0,a0,a1 - 4aaa: 0141 addi sp,sp,16 - 4aac: 02b7e5b3 rem a1,a5,a1 - 4ab0: 8082 ret - -0000000000004ab2 : -lldiv_t lldiv(long long numer, long long denom) -{ - 4ab2: 1141 addi sp,sp,-16 - 4ab4: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 4ab6: 02b54533 div a0,a0,a1 - 4aba: 0141 addi sp,sp,16 - 4abc: 02b7e5b3 rem a1,a5,a1 - 4ac0: 8082 ret - -0000000000004ac2 : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 4ac2: 00003697 auipc a3,0x3 - 4ac6: d3668693 addi a3,a3,-714 # 77f8 - 4aca: 629c ld a5,0(a3) - 4acc: 41c65737 lui a4,0x41c65 - 4ad0: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d4f5> - 4ad4: 02e787b3 mul a5,a5,a4 - 4ad8: 670d lui a4,0x3 - 4ada: 03970713 addi a4,a4,57 # 3039 - 4ade: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 4ae0: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 4ae4: e29c sd a5,0(a3) -} - 4ae6: 9145 srli a0,a0,0x31 - 4ae8: 8082 ret - -0000000000004aea : -void srand(unsigned int seed) { next = seed; } - 4aea: 1502 slli a0,a0,0x20 - 4aec: 9101 srli a0,a0,0x20 - 4aee: 00003797 auipc a5,0x3 - 4af2: d0a7b523 sd a0,-758(a5) # 77f8 - 4af6: 8082 ret - -0000000000004af8 : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 4af8: c901 beqz a0,4b08 - 4afa: 00054783 lbu a5,0(a0) - 4afe: 4501 li a0,0 - 4b00: c789 beqz a5,4b0a - 4b02: 00b03533 snez a0,a1 - 4b06: 8082 ret - 4b08: 4501 li a0,0 - 4b0a: 8082 ret - -0000000000004b0c : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 4b0c: 87aa mv a5,a0 - if (!s) - 4b0e: cd81 beqz a1,4b26 - return 0; - if (n == 0) - return -1; - 4b10: 557d li a0,-1 - if (n == 0) - 4b12: ca19 beqz a2,4b28 - if (pwc) - 4b14: c781 beqz a5,4b1c - *pwc = (wchar_t)*s; - 4b16: 0005c703 lbu a4,0(a1) - 4b1a: c398 sw a4,0(a5) - return (*s != 0); - 4b1c: 0005c503 lbu a0,0(a1) - 4b20: 00a03533 snez a0,a0 - 4b24: 8082 ret - return 0; - 4b26: 4501 li a0,0 -} - 4b28: 8082 ret - -0000000000004b2a : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 4b2a: c509 beqz a0,4b34 - return 0; - *s = (char)wchar; - 4b2c: 00b50023 sb a1,0(a0) - return 1; - 4b30: 4505 li a0,1 - 4b32: 8082 ret - return 0; - 4b34: 4501 li a0,0 -} - 4b36: 8082 ret - -0000000000004b38 : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4b38: 0005c703 lbu a4,0(a1) - 4b3c: cb0d beqz a4,4b6e - 4b3e: ca15 beqz a2,4b72 - 4b40: 86aa mv a3,a0 - size_t i = 0; - 4b42: 4781 li a5,0 - 4b44: a019 j 4b4a - while (src[i] && i < n) - 4b46: 02f60263 beq a2,a5,4b6a - { - dest[i] = (wchar_t)src[i]; - i++; - 4b4a: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 4b4c: c298 sw a4,0(a3) - while (src[i] && i < n) - 4b4e: 00f58733 add a4,a1,a5 - 4b52: 00074703 lbu a4,0(a4) - 4b56: 0691 addi a3,a3,4 - 4b58: f77d bnez a4,4b46 - } - if (i < n) - 4b5a: 00c7f763 bgeu a5,a2,4b68 - dest[i] = 0; - 4b5e: 00279713 slli a4,a5,0x2 - 4b62: 953a add a0,a0,a4 - 4b64: 00052023 sw zero,0(a0) - size_t i = 0; - 4b68: 863e mv a2,a5 - 4b6a: 8532 mv a0,a2 - 4b6c: 8082 ret - 4b6e: 4781 li a5,0 - 4b70: b7ed j 4b5a - 4b72: 4501 li a0,0 - return i; -} - 4b74: 8082 ret - -0000000000004b76 : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4b76: 4198 lw a4,0(a1) - 4b78: c71d beqz a4,4ba6 - 4b7a: ca05 beqz a2,4baa - 4b7c: 0591 addi a1,a1,4 - size_t i = 0; - 4b7e: 4781 li a5,0 - 4b80: a019 j 4b86 - while (src[i] && i < n) - 4b82: 02f60063 beq a2,a5,4ba2 - { - dest[i] = (char)src[i]; - 4b86: 00f506b3 add a3,a0,a5 - 4b8a: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 4b8e: 4198 lw a4,0(a1) - i++; - 4b90: 0785 addi a5,a5,1 - while (src[i] && i < n) - 4b92: 0591 addi a1,a1,4 - 4b94: f77d bnez a4,4b82 - } - if (i < n) - 4b96: 00c7f563 bgeu a5,a2,4ba0 - dest[i] = 0; - 4b9a: 953e add a0,a0,a5 - 4b9c: 00050023 sb zero,0(a0) - size_t i = 0; - 4ba0: 863e mv a2,a5 - 4ba2: 8532 mv a0,a2 - 4ba4: 8082 ret - 4ba6: 4781 li a5,0 - 4ba8: b7fd j 4b96 - 4baa: 4501 li a0,0 - return i; - 4bac: 8082 ret - -0000000000004bae : - -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; - 4bae: 0ff5f593 zext.b a1,a1 - 4bb2: 87aa mv a5,a0 - 4bb4: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 4bb8: c611 beqz a2,4bc4 - cdst[i] = (char)c; - 4bba: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 4bbe: 0785 addi a5,a5,1 - 4bc0: fee79de3 bne a5,a4,4bba - return dst; -} - 4bc4: 8082 ret - -0000000000004bc6 : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 4bc6: 02b50d63 beq a0,a1,4c00 - return vdst; - - if (src > dst) - 4bca: 00b57e63 bgeu a0,a1,4be6 - { - while (n--) - 4bce: ca0d beqz a2,4c00 - 4bd0: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 4bd2: 87aa mv a5,a0 - *dst++ = *src++; - 4bd4: 0005c703 lbu a4,0(a1) - 4bd8: 0785 addi a5,a5,1 - 4bda: 0585 addi a1,a1,1 - 4bdc: fee78fa3 sb a4,-1(a5) - while (n--) - 4be0: fec79ae3 bne a5,a2,4bd4 - 4be4: 8082 ret - } - else - { - dst += n; - 4be6: 00c50733 add a4,a0,a2 - src += n; - 4bea: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 4bee: ca09 beqz a2,4c00 - *--dst = *--src; - 4bf0: fff7c683 lbu a3,-1(a5) - 4bf4: 17fd addi a5,a5,-1 - 4bf6: 177d addi a4,a4,-1 - 4bf8: 00d70023 sb a3,0(a4) - while (n-- > 0) - 4bfc: fef59ae3 bne a1,a5,4bf0 - } - return vdst; -} - 4c00: 8082 ret - -0000000000004c02 : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 4c02: b7d1 j 4bc6 - -0000000000004c04 : - -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--) - 4c04: c205 beqz a2,4c24 - 4c06: 962a add a2,a2,a0 - 4c08: a019 j 4c0e - 4c0a: 00c50d63 beq a0,a2,4c24 - { - if (*p1 != *p2) - 4c0e: 00054783 lbu a5,0(a0) - 4c12: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 4c16: 0505 addi a0,a0,1 - p2++; - 4c18: 0585 addi a1,a1,1 - if (*p1 != *p2) - 4c1a: fee788e3 beq a5,a4,4c0a - return *p1 - *p2; - 4c1e: 40e7853b subw a0,a5,a4 - 4c22: 8082 ret - } - return 0; - 4c24: 4501 li a0,0 -} - 4c26: 8082 ret - -0000000000004c28 : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 4c28: ce09 beqz a2,4c42 - { - if (*p == (unsigned char)c) - 4c2a: 0ff5f593 zext.b a1,a1 - 4c2e: 962a add a2,a2,a0 - 4c30: a021 j 4c38 - return (void *)p; - p++; - 4c32: 0505 addi a0,a0,1 - while (n--) - 4c34: 00a60763 beq a2,a0,4c42 - if (*p == (unsigned char)c) - 4c38: 00054783 lbu a5,0(a0) - 4c3c: feb79be3 bne a5,a1,4c32 - } - return NULL; -} - 4c40: 8082 ret - return NULL; - 4c42: 4501 li a0,0 -} - 4c44: 8082 ret - -0000000000004c46 : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 4c46: 00054783 lbu a5,0(a0) - 4c4a: cb89 beqz a5,4c5c - const char *p = s; - 4c4c: 87aa mv a5,a0 - while (*p) - 4c4e: 0017c703 lbu a4,1(a5) - p++; - 4c52: 0785 addi a5,a5,1 - while (*p) - 4c54: ff6d bnez a4,4c4e - return (size_t)(p - s); - 4c56: 40a78533 sub a0,a5,a0 - 4c5a: 8082 ret - while (*p) - 4c5c: 4501 li a0,0 -} - 4c5e: 8082 ret - -0000000000004c60 : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 4c60: 87aa mv a5,a0 - 4c62: 0005c703 lbu a4,0(a1) - 4c66: 0785 addi a5,a5,1 - 4c68: 0585 addi a1,a1,1 - 4c6a: fee78fa3 sb a4,-1(a5) - 4c6e: fb75 bnez a4,4c62 - ; - return os; -} - 4c70: 8082 ret - -0000000000004c72 : -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++) - 4c72: 4781 li a5,0 - 4c74: e619 bnez a2,4c82 - 4c76: 8082 ret - dst[i] = src[i]; - 4c78: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4c7c: 0785 addi a5,a5,1 - 4c7e: 02f60263 beq a2,a5,4ca2 - 4c82: 00f58733 add a4,a1,a5 - 4c86: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 4c8a: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 4c8e: f76d bnez a4,4c78 - - for (; i < n; i++) - 4c90: 00c7f963 bgeu a5,a2,4ca2 - 4c94: 87b6 mv a5,a3 - 4c96: 962a add a2,a2,a0 - dst[i] = '\0'; - 4c98: 00078023 sb zero,0(a5) - for (; i < n; i++) - 4c9c: 0785 addi a5,a5,1 - 4c9e: fec79de3 bne a5,a2,4c98 - - return os; -} - 4ca2: 8082 ret - -0000000000004ca4 : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 4ca4: 00054783 lbu a5,0(a0) - 4ca8: cf91 beqz a5,4cc4 - 4caa: 87aa mv a5,a0 - 4cac: 0017c703 lbu a4,1(a5) - dst++; - 4cb0: 0785 addi a5,a5,1 - while (*dst) - 4cb2: ff6d bnez a4,4cac - while ((*dst++ = *src++) != 0) - 4cb4: 0005c703 lbu a4,0(a1) - 4cb8: 0785 addi a5,a5,1 - 4cba: 0585 addi a1,a1,1 - 4cbc: fee78fa3 sb a4,-1(a5) - 4cc0: fb75 bnez a4,4cb4 - ; - return os; -} - 4cc2: 8082 ret - while ((*dst++ = *src++) != 0) - 4cc4: 0005c703 lbu a4,0(a1) - while (*dst) - 4cc8: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 4cca: 0785 addi a5,a5,1 - 4ccc: fee78fa3 sb a4,-1(a5) - 4cd0: 0585 addi a1,a1,1 - 4cd2: f36d bnez a4,4cb4 - 4cd4: 8082 ret - -0000000000004cd6 : - while (*p) - 4cd6: 00054783 lbu a5,0(a0) - const char *p = s; - 4cda: 872a mv a4,a0 - while (*p) - 4cdc: c789 beqz a5,4ce6 - 4cde: 00174783 lbu a5,1(a4) - p++; - 4ce2: 0705 addi a4,a4,1 - while (*p) - 4ce4: ffed bnez a5,4cde - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 4ce6: 86ba mv a3,a4 - 4ce8: 4781 li a5,0 - 4cea: 88ba mv a7,a4 - 4cec: ea01 bnez a2,4cfc - 4cee: a839 j 4d0c - dst[i] = src[i]; - 4cf0: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4cf4: 00188693 addi a3,a7,1 - 4cf8: 00f60d63 beq a2,a5,4d12 - 4cfc: 00f58833 add a6,a1,a5 - 4d00: 00084803 lbu a6,0(a6) - 4d04: 0785 addi a5,a5,1 - dst[i] = src[i]; - 4d06: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 4d08: fe0814e3 bnez a6,4cf0 - - dst[i] = '\0'; - 4d0c: 00088023 sb zero,0(a7) - - return os; -} - 4d10: 8082 ret - dst[i] = '\0'; - 4d12: 00c708b3 add a7,a4,a2 - 4d16: 00088023 sb zero,0(a7) -} - 4d1a: 8082 ret - -0000000000004d1c : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 4d1c: 00054783 lbu a5,0(a0) - 4d20: e791 bnez a5,4d2c - 4d22: a02d j 4d4c - 4d24: 00054783 lbu a5,0(a0) - 4d28: cf89 beqz a5,4d42 - 4d2a: 85b6 mv a1,a3 - 4d2c: 0005c703 lbu a4,0(a1) - { - p++; - 4d30: 0505 addi a0,a0,1 - q++; - 4d32: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 4d36: fef707e3 beq a4,a5,4d24 - } - return (int)((unsigned char)*p - (unsigned char)*q); - 4d3a: 0007851b sext.w a0,a5 -} - 4d3e: 9d19 subw a0,a0,a4 - 4d40: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4d42: 0015c703 lbu a4,1(a1) - 4d46: 4501 li a0,0 -} - 4d48: 9d19 subw a0,a0,a4 - 4d4a: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4d4c: 0005c703 lbu a4,0(a1) - 4d50: 4501 li a0,0 - 4d52: b7f5 j 4d3e - -0000000000004d54 : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 4d54: ca0d beqz a2,4d86 - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 4d56: 00054783 lbu a5,0(a0) - 4d5a: 167d addi a2,a2,-1 - 4d5c: 00c506b3 add a3,a0,a2 - 4d60: eb89 bnez a5,4d72 - 4d62: a80d j 4d94 - { - if (n == 0 || *s1 == '\0') - 4d64: 00d50d63 beq a0,a3,4d7e - while (n-- > 0 && *s1 && *s1 == *s2) - 4d68: 00154783 lbu a5,1(a0) - break; - s1++; - 4d6c: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d6e: cf91 beqz a5,4d8a - 4d70: 85b2 mv a1,a2 - 4d72: 0005c703 lbu a4,0(a1) - s2++; - 4d76: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4d7a: fef705e3 beq a4,a5,4d64 - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4d7e: 0007851b sext.w a0,a5 - 4d82: 9d19 subw a0,a0,a4 - 4d84: 8082 ret - return 0; - 4d86: 4501 li a0,0 -} - 4d88: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4d8a: 0015c703 lbu a4,1(a1) - 4d8e: 4501 li a0,0 - 4d90: 9d19 subw a0,a0,a4 - 4d92: 8082 ret - 4d94: 0005c703 lbu a4,0(a1) - 4d98: 4501 li a0,0 - 4d9a: b7e5 j 4d82 - -0000000000004d9c : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 4d9c: 0ff5f593 zext.b a1,a1 - 4da0: a019 j 4da6 - { - if (!*s++) - 4da2: 0505 addi a0,a0,1 - 4da4: c791 beqz a5,4db0 - while (*s != (char)c) - 4da6: 00054783 lbu a5,0(a0) - 4daa: feb79ce3 bne a5,a1,4da2 - 4dae: 8082 ret - return NULL; - 4db0: 4501 li a0,0 - } - return (char *)s; -} - 4db2: 8082 ret - -0000000000004db4 : - -char *strrchr(const char *s, int c) -{ - 4db4: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 4db6: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 4dba: 4501 li a0,0 - if (*s == (char)c) - 4dbc: 0007c703 lbu a4,0(a5) - 4dc0: 00e59363 bne a1,a4,4dc6 - last = s; - 4dc4: 853e mv a0,a5 - } while (*s++); - 4dc6: 0785 addi a5,a5,1 - 4dc8: fb75 bnez a4,4dbc - - return (char *)last; -} - 4dca: 8082 ret - -0000000000004dcc : - while (*p) - 4dcc: 0005c883 lbu a7,0(a1) - 4dd0: 04088a63 beqz a7,4e24 - const char *p = s; - 4dd4: 87ae mv a5,a1 - while (*p) - 4dd6: 0017c703 lbu a4,1(a5) - p++; - 4dda: 0785 addi a5,a5,1 - while (*p) - 4ddc: ff6d bnez a4,4dd6 - return (size_t)(p - s); - 4dde: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 4de2: 04b78163 beq a5,a1,4e24 - return (char *)haystack; - - for (; *haystack; haystack++) - 4de6: 00054783 lbu a5,0(a0) - 4dea: cf85 beqz a5,4e22 - 4dec: 187d addi a6,a6,-1 - 4dee: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 4df0: 02f89463 bne a7,a5,4e18 - while (n-- > 0 && *s1 && *s1 == *s2) - 4df4: 00054703 lbu a4,0(a0) - 4df8: 8646 mv a2,a7 - 4dfa: 86ae mv a3,a1 - 4dfc: 87aa mv a5,a0 - 4dfe: eb11 bnez a4,4e12 - 4e00: a821 j 4e18 - if (n == 0 || *s1 == '\0') - 4e02: 03078163 beq a5,a6,4e24 - while (n-- > 0 && *s1 && *s1 == *s2) - 4e06: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4e0a: 0006c603 lbu a2,0(a3) - s1++; - 4e0e: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4e10: cb19 beqz a4,4e26 - s2++; - 4e12: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4e14: fee607e3 beq a2,a4,4e02 - for (; *haystack; haystack++) - 4e18: 00154783 lbu a5,1(a0) - 4e1c: 0805 addi a6,a6,1 - 4e1e: 0505 addi a0,a0,1 - 4e20: fbe1 bnez a5,4df0 - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 4e22: 4501 li a0,0 -} - 4e24: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 4e26: de7d beqz a2,4e24 - for (; *haystack; haystack++) - 4e28: 00154783 lbu a5,1(a0) - 4e2c: 0805 addi a6,a6,1 - 4e2e: 0505 addi a0,a0,1 - 4e30: f3e1 bnez a5,4df0 - 4e32: bfc5 j 4e22 - -0000000000004e34 : - -char *strdup(const char *s) -{ - 4e34: 1101 addi sp,sp,-32 - 4e36: e426 sd s1,8(sp) - 4e38: ec06 sd ra,24(sp) - 4e3a: e822 sd s0,16(sp) - while (*p) - 4e3c: 00054783 lbu a5,0(a0) -{ - 4e40: 84aa mv s1,a0 - while (*p) - 4e42: cb8d beqz a5,4e74 - const char *p = s; - 4e44: 862a mv a2,a0 - while (*p) - 4e46: 00164783 lbu a5,1(a2) - p++; - 4e4a: 0605 addi a2,a2,1 - while (*p) - 4e4c: ffed bnez a5,4e46 - return (size_t)(p - s); - 4e4e: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 4e50: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 4e54: 8522 mv a0,s0 - 4e56: f4eff0ef jal 45a4 - if (new_str == NULL) - 4e5a: c901 beqz a0,4e6a - return memmove(vdst, vsrc, n); - 4e5c: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 4e5e: 6442 ld s0,16(sp) - 4e60: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 4e62: 85a6 mv a1,s1 -} - 4e64: 64a2 ld s1,8(sp) - 4e66: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 4e68: bbb9 j 4bc6 -} - 4e6a: 60e2 ld ra,24(sp) - 4e6c: 6442 ld s0,16(sp) - 4e6e: 64a2 ld s1,8(sp) - 4e70: 6105 addi sp,sp,32 - 4e72: 8082 ret - while (*p) - 4e74: 4405 li s0,1 - 4e76: bff9 j 4e54 - -0000000000004e78 : - 4e78: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 4e7c: 1101 addi sp,sp,-32 - 4e7e: ec06 sd ra,24(sp) - 4e80: e822 sd s0,16(sp) - 4e82: 86b2 mv a3,a2 - while (*p) - 4e84: cf8d beqz a5,4ebe - const char *p = s; - 4e86: 87ae mv a5,a1 - while (*p) - 4e88: 0017c703 lbu a4,1(a5) - p++; - 4e8c: 0785 addi a5,a5,1 - while (*p) - 4e8e: ff6d bnez a4,4e88 - return (size_t)(p - s); - 4e90: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 4e94: c285 beqz a3,4eb4 - 4e96: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4e98: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 4e9c: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4ea0: 00d47563 bgeu s0,a3,4eaa - dst[copy_len] = '\0'; - 4ea4: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4ea8: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 4eaa: d1dff0ef jal 4bc6 - dst[copy_len] = '\0'; - 4eae: 00048023 sb zero,0(s1) - } - - return src_len; - 4eb2: 64a2 ld s1,8(sp) -} - 4eb4: 60e2 ld ra,24(sp) - 4eb6: 8522 mv a0,s0 - 4eb8: 6442 ld s0,16(sp) - 4eba: 6105 addi sp,sp,32 - 4ebc: 8082 ret - if (size > 0) - 4ebe: e219 bnez a2,4ec4 - return (size_t)(p - s); - 4ec0: 4401 li s0,0 - 4ec2: bfcd j 4eb4 - 4ec4: e426 sd s1,8(sp) - 4ec6: 4401 li s0,0 - if (size > 0) - 4ec8: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4eca: 4601 li a2,0 - 4ecc: bff9 j 4eaa - -0000000000004ece : - while (*p) - 4ece: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 4ed2: 7179 addi sp,sp,-48 - 4ed4: e84a sd s2,16(sp) - 4ed6: f406 sd ra,40(sp) - 4ed8: f022 sd s0,32(sp) - 4eda: ec26 sd s1,24(sp) - 4edc: 892a mv s2,a0 - while (*p) - 4ede: c7b5 beqz a5,4f4a - const char *p = s; - 4ee0: 87ae mv a5,a1 - while (*p) - 4ee2: 0017c703 lbu a4,1(a5) - p++; - 4ee6: 0785 addi a5,a5,1 - while (*p) - 4ee8: ff6d bnez a4,4ee2 - return (size_t)(p - s); - 4eea: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 4eee: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 4ef0: e609 bnez a2,4efa - 4ef2: a0a1 j 4f3a - dst_len++; - 4ef4: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 4ef6: 04860263 beq a2,s0,4f3a - 4efa: 00890533 add a0,s2,s0 - 4efe: 00054783 lbu a5,0(a0) - 4f02: fbed bnez a5,4ef4 - - if (dst_len == size) - 4f04: 02860b63 beq a2,s0,4f3a - 4f08: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 4f0a: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4f0e: 89a6 mv s3,s1 - 4f10: 02f4f263 bgeu s1,a5,4f34 - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 4f14: 994e add s2,s2,s3 - 4f16: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 4f18: 864e mv a2,s3 - 4f1a: cadff0ef jal 4bc6 - dst[dst_len + copy_len] = '\0'; - 4f1e: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x5b2> - - return dst_len + src_len; - 4f22: 00940533 add a0,s0,s1 -} - 4f26: 70a2 ld ra,40(sp) - 4f28: 7402 ld s0,32(sp) - return dst_len + src_len; - 4f2a: 69a2 ld s3,8(sp) -} - 4f2c: 64e2 ld s1,24(sp) - 4f2e: 6942 ld s2,16(sp) - 4f30: 6145 addi sp,sp,48 - 4f32: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4f34: fff78993 addi s3,a5,-1 - 4f38: bff1 j 4f14 -} - 4f3a: 70a2 ld ra,40(sp) - 4f3c: 7402 ld s0,32(sp) - 4f3e: 6942 ld s2,16(sp) - return size + src_len; - 4f40: 00960533 add a0,a2,s1 -} - 4f44: 64e2 ld s1,24(sp) - 4f46: 6145 addi sp,sp,48 - 4f48: 8082 ret - while (*p) - 4f4a: 4481 li s1,0 - 4f4c: b74d j 4eee - -0000000000004f4e : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 4f4e: 00054683 lbu a3,0(a0) - 4f52: c695 beqz a3,4f7e - { - for (a = accept; *a; a++) - 4f54: 0005c803 lbu a6,0(a1) - 4f58: 862a mv a2,a0 - 4f5a: 00080f63 beqz a6,4f78 - 4f5e: 87ae mv a5,a1 - 4f60: 8742 mv a4,a6 - 4f62: a021 j 4f6a - 4f64: 0007c703 lbu a4,0(a5) - 4f68: cb01 beqz a4,4f78 - 4f6a: 0785 addi a5,a5,1 - { - if (*p == *a) - 4f6c: fee69ce3 bne a3,a4,4f64 - while (*p) - 4f70: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 4f74: 0605 addi a2,a2,1 - while (*p) - 4f76: f6e5 bnez a3,4f5e - } - return (size_t)(p - s); - 4f78: 40a60533 sub a0,a2,a0 - 4f7c: 8082 ret - while (*p) - 4f7e: 4501 li a0,0 -} - 4f80: 8082 ret - -0000000000004f82 : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 4f82: 00054683 lbu a3,0(a0) - 4f86: ce85 beqz a3,4fbe - { - for (r = reject; *r; r++) - 4f88: 0005c803 lbu a6,0(a1) - const char *p = s; - 4f8c: 862a mv a2,a0 - for (r = reject; *r; r++) - 4f8e: 02080363 beqz a6,4fb4 - 4f92: 87ae mv a5,a1 - 4f94: 8742 mv a4,a6 - 4f96: a021 j 4f9e - 4f98: 0007c703 lbu a4,0(a5) - 4f9c: c719 beqz a4,4faa - 4f9e: 0785 addi a5,a5,1 - { - if (*p == *r) - 4fa0: fed71ce3 bne a4,a3,4f98 - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 4fa4: 40a60533 sub a0,a2,a0 - 4fa8: 8082 ret - while (*p) - 4faa: 00164683 lbu a3,1(a2) - p++; - 4fae: 0605 addi a2,a2,1 - while (*p) - 4fb0: f2ed bnez a3,4f92 - 4fb2: bfcd j 4fa4 - 4fb4: 00164683 lbu a3,1(a2) - p++; - 4fb8: 0605 addi a2,a2,1 - while (*p) - 4fba: feed bnez a3,4fb4 - 4fbc: b7e5 j 4fa4 - 4fbe: 4501 li a0,0 -} - 4fc0: 8082 ret - -0000000000004fc2 : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 4fc2: 00054683 lbu a3,0(a0) - 4fc6: c295 beqz a3,4fea - { - for (a = accept; *a; a++) - 4fc8: 0005c603 lbu a2,0(a1) - 4fcc: c20d beqz a2,4fee - 4fce: 87ae mv a5,a1 - 4fd0: 8732 mv a4,a2 - 4fd2: a021 j 4fda - 4fd4: 0007c703 lbu a4,0(a5) - 4fd8: c709 beqz a4,4fe2 - 4fda: 0785 addi a5,a5,1 - { - if (*s == *a) - 4fdc: fed71ce3 bne a4,a3,4fd4 - return (char *)s; - } - s++; - } - return NULL; -} - 4fe0: 8082 ret - while (*s) - 4fe2: 00154683 lbu a3,1(a0) - s++; - 4fe6: 0505 addi a0,a0,1 - while (*s) - 4fe8: f2fd bnez a3,4fce - return NULL; - 4fea: 4501 li a0,0 -} - 4fec: 8082 ret - while (*s) - 4fee: 00154683 lbu a3,1(a0) - s++; - 4ff2: 0505 addi a0,a0,1 - while (*s) - 4ff4: feed bnez a3,4fee - 4ff6: bfd5 j 4fea - -0000000000004ff8 : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 4ff8: 00003897 auipc a7,0x3 - 4ffc: 96888893 addi a7,a7,-1688 # 7960 - 5000: cd25 beqz a0,5078 - while (*p) - 5002: 00054683 lbu a3,0(a0) - 5006: c295 beqz a3,502a - for (a = accept; *a; a++) - 5008: 0005c803 lbu a6,0(a1) - 500c: 02080463 beqz a6,5034 - 5010: 87ae mv a5,a1 - 5012: 8742 mv a4,a6 - 5014: a021 j 501c - 5016: 0007c703 lbu a4,0(a5) - 501a: cf09 beqz a4,5034 - 501c: 0785 addi a5,a5,1 - if (*p == *a) - 501e: fee69ce3 bne a3,a4,5016 - while (*p) - 5022: 00154683 lbu a3,1(a0) - p++; - 5026: 0505 addi a0,a0,1 - while (*p) - 5028: f6e5 bnez a3,5010 - 502a: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 502c: 00f8b023 sd a5,0(a7) - return NULL; - 5030: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 5032: 8082 ret - if (*str == '\0') - 5034: 00054603 lbu a2,0(a0) - 5038: da6d beqz a2,502a - 503a: 86aa mv a3,a0 - for (a = accept; *a; a++) - 503c: 04080163 beqz a6,507e - 5040: 8742 mv a4,a6 - 5042: 87ae mv a5,a1 - 5044: a021 j 504c - 5046: 0007c703 lbu a4,0(a5) - 504a: cb19 beqz a4,5060 - 504c: 0785 addi a5,a5,1 - if (*s == *a) - 504e: fee61ce3 bne a2,a4,5046 - olds = str + 1; - 5052: 00168793 addi a5,a3,1 - *str = '\0'; - 5056: 00068023 sb zero,0(a3) - olds = str; - 505a: 00f8b023 sd a5,0(a7) -} - 505e: 8082 ret - while (*s) - 5060: 0016c603 lbu a2,1(a3) - s++; - 5064: 0685 addi a3,a3,1 - while (*s) - 5066: fe69 bnez a2,5040 - 5068: 87aa mv a5,a0 - while (*s != (char)c) - 506a: 0017c703 lbu a4,1(a5) - if (!*s++) - 506e: 0785 addi a5,a5,1 - while (*s != (char)c) - 5070: ff6d bnez a4,506a - olds = str; - 5072: 00f8b023 sd a5,0(a7) -} - 5076: 8082 ret - str = olds; - 5078: 0008b503 ld a0,0(a7) - 507c: b759 j 5002 - while (*s) - 507e: 0016c603 lbu a2,1(a3) - s++; - 5082: 0685 addi a3,a3,1 - while (*s) - 5084: fe6d bnez a2,507e - 5086: b7cd j 5068 - -0000000000005088 : - -char *strerror(int errnum) -{ - 5088: 87aa mv a5,a0 - - switch (errnum) - 508a: cd09 beqz a0,50a4 - 508c: 4731 li a4,12 - 508e: 00000517 auipc a0,0x0 - 5092: 16250513 addi a0,a0,354 # 51f0 <_GLOBAL__sub_I__ZSt3cin+0x12a> - 5096: 00e78b63 beq a5,a4,50ac - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 509a: 00000517 auipc a0,0x0 - 509e: 16650513 addi a0,a0,358 # 5200 <_GLOBAL__sub_I__ZSt3cin+0x13a> - 50a2: 8082 ret - return "Success"; - 50a4: 00000517 auipc a0,0x0 - 50a8: 14450513 addi a0,a0,324 # 51e8 <_GLOBAL__sub_I__ZSt3cin+0x122> - } - 50ac: 8082 ret - -00000000000050ae <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 50ae: cf6ff06f j 45a4 - -00000000000050b2 <_Znam>: -} - -void *operator new[](unsigned long n) - 50b2: cf2ff06f j 45a4 - -00000000000050b6 <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 50b6: c78ff06f j 452e - -00000000000050ba <_ZdaPv>: -} - -void operator delete[](void *p) - 50ba: c74ff06f j 452e - -00000000000050be <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 50be: c70ff06f j 452e - -00000000000050c2 <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 50c2: c6cff06f j 452e - -00000000000050c6 <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 50c6: 00002797 auipc a5,0x2 - 50ca: 74a7b783 ld a5,1866(a5) # 7810 <_GLOBAL_OFFSET_TABLE_+0x10> - 50ce: 6390 ld a2,0(a5) - ostream cout(stdout); - 50d0: 00002797 auipc a5,0x2 - 50d4: 7387b783 ld a5,1848(a5) # 7808 <_GLOBAL_OFFSET_TABLE_+0x8> - 50d8: 6394 ld a3,0(a5) - ostream cerr(stderr); - 50da: 00002797 auipc a5,0x2 - 50de: 73e7b783 ld a5,1854(a5) # 7818 <_GLOBAL_OFFSET_TABLE_+0x18> - 50e2: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 50e4: 00003797 auipc a5,0x3 - 50e8: 88478793 addi a5,a5,-1916 # 7968 <_ZSt3cin> - 50ec: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 50ee: e794 sd a3,8(a5) - 50f0: eb98 sd a4,16(a5) -} // namespace std - 50f2: 8082 ret diff --git a/build/user/ls.sym b/build/user/ls.sym deleted file mode 100644 index f6529cc..0000000 --- a/build/user/ls.sym +++ /dev/null @@ -1,191 +0,0 @@ -0000000000000000 .text -00000000000050f8 .rodata -0000000000005918 .eh_frame -0000000000006a78 .data -0000000000007800 .got -0000000000007820 .got.plt -0000000000007830 .init_array -0000000000007838 .bss -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_loclists -0000000000000000 .debug_aranges -0000000000000000 .debug_rnglists -0000000000000000 .debug_line -0000000000000000 .debug_str -0000000000000000 .debug_line_str -0000000000000000 .comment -0000000000000000 .riscv.attributes -0000000000000000 ls.cc -0000000000000000 entry.o -0000000000000000 usys.o -0000000000000000 stdio.c -0000000000000266 stbsp__clamp_callback -00000000000002b4 stbsp__count_clamp_callback -00000000000002c0 stbsp__real_to_str -0000000000000994 _in_char.part.0 -00000000000009da _skip_space -0000000000000a4e _vscanf_core.constprop.0 -00000000000012be _out_char -0000000000003132 _vprintf_core.constprop.0.isra.0 -0000000000006a80 stbsp__digitpair -0000000000006b4c stbsp__period -0000000000006b4d stbsp__comma -0000000000006b50 hexu.1 -0000000000006b68 hex.0 -0000000000006b80 _stderr -0000000000006fa0 _stdout -00000000000073c0 _stdin -0000000000005480 stbsp__bot -0000000000005538 stbsp__negbot -00000000000055e8 stbsp__negboterr -0000000000005698 stbsp__negtop -0000000000005700 stbsp__negtoperr -0000000000005768 stbsp__top -00000000000057d0 stbsp__toperr -0000000000005838 stbsp__powten -0000000000000000 stdlib.c -0000000000004340 strtoull.part.0 -00000000000077f8 next -0000000000007844 __atexit_func_count -0000000000007848 __atexit_funcs -0000000000007948 freep -0000000000007950 base -0000000000000000 string.c -0000000000007960 olds.0 -0000000000000000 cxx.cc -0000000000000000 iostream.cpp -00000000000050c6 _GLOBAL__sub_I__ZSt3cin -0000000000007800 _GLOBAL_OFFSET_TABLE_ -0000000000004c60 strcpy -00000000000039d0 printf -00000000000077e0 stdout -00000000000058dc STDOUT_FD -0000000000004316 ungetc -0000000000005088 strerror -0000000000004bc6 memmove -000000000000397a snprintf -00000000000001ee mknod -0000000000004818 atol -0000000000004526 getenv -00000000000050ae _Znwm -0000000000007840 errno -0000000000004a78 labs -00000000000049f2 bsearch -0000000000000226 getpid -0000000000004914 qsort -0000000000003c0e fscanf -0000000000003e80 fgets -0000000000007978 _ZSt4cerr -0000000000004c02 memcpy -000000000000452a system -00000000000042f6 feof -00000000000045a4 malloc -0000000000000236 sleep -0000000000003930 vsnprintf -0000000000004734 strtoll -00000000000047de strtoul -0000000000004b2a wctomb -0000000000004b76 wcstombs -0000000000003b98 fflush -0000000000004b38 mbstowcs -0000000000000256 lseek -00000000000050b6 _ZdlPv -000000000000451a abort -0000000000004802 strtol -00000000000001b6 pipe -0000000000004af8 mblen -0000000000004db4 strrchr -000000000000466a calloc -0000000000004824 strtod -000000000000024e disk_test -00000000000001c6 write -00000000000048fe atof -0000000000000086 _Z2lsPKc -00000000000001fe fstat -0000000000003bdc fprintf -00000000000001d6 kill -0000000000004ca4 strcat -0000000000000216 chdir -00000000000041fe fseek -00000000000030ce stbsp_vsprintf -00000000000001de exec -0000000000004c28 memchr -00000000000077e8 stdin -00000000000001ae wait -0000000000002fe8 stbsp_vsnprintf -0000000000000194 _start -0000000000004300 ferror -0000000000004dcc strstr -0000000000004ac2 rand -00000000000001be read -0000000000004e78 strlcpy -0000000000004d54 strncmp -0000000000001392 stbsp_set_separators -00000000000050be _ZdlPvm -0000000000004c72 strncpy -00000000000001f6 unlink -00000000000046b2 realloc -0000000000004ff8 strtok -0000000000004c04 memcmp -00000000000001a6 fork -0000000000003a0a sscanf -0000000000004cd6 strncat -0000000000003f5c fread -000000000000022e sbrk -0000000000004e34 strdup -000000000000023e uptime -0000000000004710 strtoull -0000000000002fbe stbsp_sprintf -0000000000003a6c fopen -0000000000004bae memset -0000000000000144 main -0000000000004272 ftell -0000000000004aea srand -0000000000004ece strlcat -000000000000430a clearerr -00000000000050ba _ZdaPv -0000000000003b30 fclose -0000000000000246 putc -0000000000004d1c strcmp -000000000000025e shutdown -000000000000021e dup -0000000000003dea fgetc -00000000000030dc sprintf -0000000000004902 strtof -00000000000044c0 atexit -0000000000004f82 strcspn -00000000000030ae stbsp_snprintf -0000000000007968 _ZSt3cin -0000000000003a3a scanf -00000000000077f0 stderr -0000000000004aa2 ldiv -0000000000003c40 fputc -00000000000050b2 _Znam -0000000000004ab2 lldiv -0000000000004076 fwrite -000000000000429e rewind -0000000000007970 _ZSt4cout -0000000000000206 link -00000000000044e4 exit -000000000000019e sys_exit -0000000000004a82 llabs -0000000000004804 atoi -00000000000058d8 STDERR_FD -0000000000004f4e strspn -0000000000004c46 strlen -00000000000013a4 stbsp_vsprintfcb -00000000000001e6 open -00000000000058e0 STDIN_FD -000000000000481e atoll -0000000000004a8c div -0000000000004a6e abs -0000000000004d9c strchr -0000000000003d04 fputs -00000000000050c2 _ZdaPvm -0000000000000000 _Z8fmt_namePcPKc -000000000000020e mkdir -00000000000001ce close -0000000000004b0c mbtowc -0000000000004fc2 strpbrk -000000000000452e free diff --git a/build/user/mkdir b/build/user/mkdir deleted file mode 100755 index a87fa88..0000000 Binary files a/build/user/mkdir and /dev/null differ diff --git a/build/user/mkdir.asm b/build/user/mkdir.asm deleted file mode 100644 index ec4427e..0000000 --- a/build/user/mkdir.asm +++ /dev/null @@ -1,10640 +0,0 @@ - -build/user/mkdir: file format elf64-littleriscv - - -Disassembly of section .text: - -0000000000000000
: -#include "ulib/stdio.h" -#include "user/user.h" - -int main(int argc, char* argv[]) -{ - 0: 1101 addi sp,sp,-32 - 2: ec06 sd ra,24(sp) - if (argc < 2) - 4: 4785 li a5,1 - 6: 04a7de63 bge a5,a0,62 - { - printf("Usage: mkdir ...\n"); - exit(1); - } - - for (int i = 1; i < argc; i++) - a: e426 sd s1,8(sp) - c: ffe5049b addiw s1,a0,-2 - 10: 02049793 slli a5,s1,0x20 - 14: 01d7d493 srli s1,a5,0x1d - 18: 01058793 addi a5,a1,16 - 1c: e822 sd s0,16(sp) - 1e: e04a sd s2,0(sp) - 20: 00858413 addi s0,a1,8 - 24: 94be add s1,s1,a5 - { - if (mkdir(argv[i]) < 0) - { - printf("mkdir: cannot create directory '%s'\n", argv[i]); - 26: 00005917 auipc s2,0x5 - 2a: fda90913 addi s2,s2,-38 # 5000 <_GLOBAL__sub_I__ZSt3cin+0x58> - 2e: a021 j 36 - for (int i = 1; i < argc; i++) - 30: 0421 addi s0,s0,8 - 32: 00940e63 beq s0,s1,4e - if (mkdir(argv[i]) < 0) - 36: 6008 ld a0,0(s0) - 38: 0b8000ef jal f0 - 3c: fe055ae3 bgez a0,30 - printf("mkdir: cannot create directory '%s'\n", argv[i]); - 40: 600c ld a1,0(s0) - 42: 854a mv a0,s2 - for (int i = 1; i < argc; i++) - 44: 0421 addi s0,s0,8 - printf("mkdir: cannot create directory '%s'\n", argv[i]); - 46: 06d030ef jal 38b2 - for (int i = 1; i < argc; i++) - 4a: fe9416e3 bne s0,s1,36 - 4e: 6442 ld s0,16(sp) - 50: 64a2 ld s1,8(sp) - 52: 6902 ld s2,0(sp) - } - } - - exit(0); - 54: 4501 li a0,0 - 56: 370040ef jal 43c6 - 5a: 60e2 ld ra,24(sp) - 5c: 4501 li a0,0 - 5e: 6105 addi sp,sp,32 - 60: 8082 ret - printf("Usage: mkdir ...\n"); - 62: 00005517 auipc a0,0x5 - 66: f7e50513 addi a0,a0,-130 # 4fe0 <_GLOBAL__sub_I__ZSt3cin+0x38> - 6a: 049030ef jal 38b2 - exit(1); - 6e: 4505 li a0,1 - 70: 356040ef jal 43c6 - for (int i = 1; i < argc; i++) - 74: b7c5 j 54 - -0000000000000076 <_start>: -.global _start - -_start: - - - call main - 76: f8bff0ef jal 0
- - call exit - 7a: 34c040ef jal 43c6 - - 7e: a001 j 7e <_start+0x8> - -0000000000000080 : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - 80: 488d li a7,3 - 82: 00000073 ecall - 86: 8082 ret - -0000000000000088 : - -SYSCALL(fork) - 88: 4889 li a7,2 - 8a: 00000073 ecall - 8e: 8082 ret - -0000000000000090 : -SYSCALL(wait) - 90: 4891 li a7,4 - 92: 00000073 ecall - 96: 8082 ret - -0000000000000098 : -SYSCALL(pipe) - 98: 4895 li a7,5 - 9a: 00000073 ecall - 9e: 8082 ret - -00000000000000a0 : -SYSCALL(read) - a0: 4899 li a7,6 - a2: 00000073 ecall - a6: 8082 ret - -00000000000000a8 : -SYSCALL(write) - a8: 48c5 li a7,17 - aa: 00000073 ecall - ae: 8082 ret - -00000000000000b0 : -SYSCALL(close) - b0: 48d9 li a7,22 - b2: 00000073 ecall - b6: 8082 ret - -00000000000000b8 : -SYSCALL(kill) - b8: 489d li a7,7 - ba: 00000073 ecall - be: 8082 ret - -00000000000000c0 : -SYSCALL(exec) - c0: 48a1 li a7,8 - c2: 00000073 ecall - c6: 8082 ret - -00000000000000c8 : -SYSCALL(open) - c8: 48c1 li a7,16 - ca: 00000073 ecall - ce: 8082 ret - -00000000000000d0 : -SYSCALL(mknod) - d0: 48c9 li a7,18 - d2: 00000073 ecall - d6: 8082 ret - -00000000000000d8 : -SYSCALL(unlink) - d8: 48cd li a7,19 - da: 00000073 ecall - de: 8082 ret - -00000000000000e0 : -SYSCALL(fstat) - e0: 48a5 li a7,9 - e2: 00000073 ecall - e6: 8082 ret - -00000000000000e8 : -SYSCALL(link) - e8: 48d1 li a7,20 - ea: 00000073 ecall - ee: 8082 ret - -00000000000000f0 : -SYSCALL(mkdir) - f0: 48d5 li a7,21 - f2: 00000073 ecall - f6: 8082 ret - -00000000000000f8 : -SYSCALL(chdir) - f8: 48a9 li a7,10 - fa: 00000073 ecall - fe: 8082 ret - -0000000000000100 : -SYSCALL(dup) - 100: 48ad li a7,11 - 102: 00000073 ecall - 106: 8082 ret - -0000000000000108 : -SYSCALL(getpid) - 108: 48b1 li a7,12 - 10a: 00000073 ecall - 10e: 8082 ret - -0000000000000110 : -SYSCALL(sbrk) - 110: 48b5 li a7,13 - 112: 00000073 ecall - 116: 8082 ret - -0000000000000118 : -SYSCALL(sleep) - 118: 48b9 li a7,14 - 11a: 00000073 ecall - 11e: 8082 ret - -0000000000000120 : -SYSCALL(uptime) - 120: 48bd li a7,15 - 122: 00000073 ecall - 126: 8082 ret - -0000000000000128 : -SYSCALL(putc) - 128: 4885 li a7,1 - 12a: 00000073 ecall - 12e: 8082 ret - -0000000000000130 : -SYSCALL(disk_test) - 130: 48dd li a7,23 - 132: 00000073 ecall - 136: 8082 ret - -0000000000000138 : -SYSCALL(lseek) - 138: 48e1 li a7,24 - 13a: 00000073 ecall - 13e: 8082 ret - -0000000000000140 : - 140: 48e5 li a7,25 - 142: 00000073 ecall - 146: 8082 ret - -0000000000000148 : - 148: 45dc lw a5,12(a1) - 14a: 4598 lw a4,8(a1) - 14c: 9fb1 addw a5,a5,a2 - 14e: c5dc sw a5,12(a1) - 150: 0007069b sext.w a3,a4 - 154: 00e65463 bge a2,a4,15c - 158: 0006069b sext.w a3,a2 - 15c: c685 beqz a3,184 - 15e: 619c ld a5,0(a1) - 160: 00a78e63 beq a5,a0,17c - 164: 00d50633 add a2,a0,a3 - 168: 00054703 lbu a4,0(a0) - 16c: 0505 addi a0,a0,1 - 16e: 0785 addi a5,a5,1 - 170: fee78fa3 sb a4,-1(a5) - 174: fec56ae3 bltu a0,a2,168 - 178: 6188 ld a0,0(a1) - 17a: 4598 lw a4,8(a1) - 17c: 9f15 subw a4,a4,a3 - 17e: 9536 add a0,a0,a3 - 180: e188 sd a0,0(a1) - 182: c598 sw a4,8(a1) - 184: 1ff00793 li a5,511 - 188: 00e7d463 bge a5,a4,190 - 18c: 6188 ld a0,0(a1) - 18e: 8082 ret - 190: 01058513 addi a0,a1,16 - 194: 8082 ret - -0000000000000196 : - 196: 45dc lw a5,12(a1) - 198: 01058513 addi a0,a1,16 - 19c: 9fb1 addw a5,a5,a2 - 19e: c5dc sw a5,12(a1) - 1a0: 8082 ret - -00000000000001a2 : - 1a2: e20508d3 fmv.x.d a7,fa0 - 1a6: 82aa mv t0,a0 - 1a8: 4348d813 srai a6,a7,0x34 - 1ac: 8ec6 mv t4,a7 - 1ae: 7ff87813 andi a6,a6,2047 - 1b2: 8346 mv t1,a7 - 1b4: 03f8d513 srli a0,a7,0x3f - 1b8: 0008d663 bgez a7,1c4 - 1bc: 22a517d3 fneg.d fa5,fa0 - 1c0: e20788d3 fmv.x.d a7,fa5 - 1c4: 7ff00e13 li t3,2047 - 1c8: 35c80663 beq a6,t3,514 - 1cc: 1101 addi sp,sp,-32 - 1ce: 14080363 beqz a6,314 - 1d2: c018081b addiw a6,a6,-1023 - 1d6: ec22 sd s0,24(sp) - 1d8: 02081313 slli t1,a6,0x20 - 1dc: 66034d63 bltz t1,856 - 1e0: 4d100313 li t1,1233 - 1e4: 0303033b mulw t1,t1,a6 - 1e8: 4849 li a6,18 - 1ea: 40c3531b sraiw t1,t1,0xc - 1ee: 0013039b addiw t2,t1,1 - 1f2: 4078083b subw a6,a6,t2 - 1f6: 4359 li t1,22 - 1f8: 17036163 bltu t1,a6,35a - 1fc: 00005317 auipc t1,0x5 - 200: 16430313 addi t1,t1,356 # 5360 - 204: 080e slli a6,a6,0x3 - 206: 981a add a6,a6,t1 - 208: 00083e03 ld t3,0(a6) - 20c: 00083607 fld fa2,0(a6) - 210: f20887d3 fmv.d.x fa5,a7 - 214: f8000837 lui a6,0xf8000 - 218: 01187333 and t1,a6,a7 - 21c: 01c87833 and a6,a6,t3 - 220: 12f676d3 fmul.d fa3,fa2,fa5 - 224: f20807d3 fmv.d.x fa5,a6 - 228: f2030753 fmv.d.x fa4,t1 - 22c: f20305d3 fmv.d.x fa1,t1 - 230: 0af67653 fsub.d fa2,fa2,fa5 - 234: f20887d3 fmv.d.x fa5,a7 - 238: 0ae7f753 fsub.d fa4,fa5,fa4 - 23c: f20807d3 fmv.d.x fa5,a6 - 240: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 244: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 248: f20805d3 fmv.d.x fa1,a6 - 24c: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 250: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 254: 02d777d3 fadd.d fa5,fa4,fa3 - 258: 3782e837 lui a6,0x3782e - 25c: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x378262d7> - 260: 0832 slli a6,a6,0xc - 262: 9d980813 addi a6,a6,-1575 - 266: 084a slli a6,a6,0x12 - 268: 187d addi a6,a6,-1 - 26a: c22798d3 fcvt.l.d a7,fa5,rtz - 26e: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 272: 00070e1b sext.w t3,a4 - 276: d228f653 fcvt.d.l fa2,a7 - 27a: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 27e: 0ad77753 fsub.d fa4,fa4,fa3 - 282: 0af5f6d3 fsub.d fa3,fa1,fa5 - 286: 0ad5f553 fsub.d fa0,fa1,fa3 - 28a: 02d67653 fadd.d fa2,fa2,fa3 - 28e: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 292: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 296: 02b7f7d3 fadd.d fa5,fa5,fa1 - 29a: 02e7f7d3 fadd.d fa5,fa5,fa4 - 29e: c2279fd3 fcvt.l.d t6,fa5,rtz - 2a2: 9fc6 add t6,t6,a7 - 2a4: 19f87063 bgeu a6,t6,424 - 2a8: 2385 addiw t2,t2,1 - 2aa: 300e4363 bltz t3,5b0 - 2ae: 00e3833b addw t1,t2,a4 - 2b2: 475d li a4,23 - 2b4: 30677663 bgeu a4,t1,5c0 - 2b8: 577d li a4,-1 - 2ba: 9301 srli a4,a4,0x20 - 2bc: 43f75863 bge a4,t6,6ec - 2c0: 07d00313 li t1,125 - 2c4: 877e mv a4,t6 - 2c6: 4e01 li t3,0 - 2c8: 3e800813 li a6,1000 - 2cc: 130e slli t1,t1,0x23 - 2ce: a039 j 2dc - 2d0: 030747b3 div a5,a4,a6 - 2d4: 4e05 li t3,1 - 2d6: 40674c63 blt a4,t1,6ee - 2da: 873e mv a4,a5 - 2dc: 030768b3 rem a7,a4,a6 - 2e0: fe0888e3 beqz a7,2d0 - 2e4: 400e0163 beqz t3,6e6 - 2e8: 8fbe mv t6,a5 - 2ea: 05f5e7b7 lui a5,0x5f5e - 2ee: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56907> - 2f2: 04060413 addi s0,a2,64 - 2f6: 03860613 addi a2,a2,56 - 2fa: 15f7c863 blt a5,t6,44a - 2fe: 000f871b sext.w a4,t6 - 302: 20070463 beqz a4,50a - 306: 4f01 li t5,0 - 308: 4f81 li t6,0 - 30a: 00006e97 auipc t4,0x6 - 30e: 5f6e8e93 addi t4,t4,1526 # 6900 - 312: aaa9 j 46c - 314: 0306 slli t1,t1,0x1 - 316: 3e030e63 beqz t1,712 - 31a: 4305 li t1,1 - 31c: ec22 sd s0,24(sp) - 31e: 00ce9e13 slli t3,t4,0xc - 322: 134e slli t1,t1,0x33 - 324: 520e4063 bltz t3,844 - 328: 40135313 srai t1,t1,0x1 - 32c: 01d37e33 and t3,t1,t4 - 330: 8f42 mv t5,a6 - 332: 387d addiw a6,a6,-1 - 334: fe0e0ae3 beqz t3,328 - 338: 26900313 li t1,617 - 33c: c00f081b addiw a6,t5,-1024 - 340: 0268083b mulw a6,a6,t1 - 344: 41f8531b sraiw t1,a6,0x1f - 348: 0153531b srliw t1,t1,0x15 - 34c: 0103033b addw t1,t1,a6 - 350: 40b3539b sraiw t2,t1,0xb - 354: 4849 li a6,18 - 356: 4078083b subw a6,a6,t2 - 35a: 41f8531b sraiw t1,a6,0x1f - 35e: 00684eb3 xor t4,a6,t1 - 362: 406e8f3b subw t5,t4,t1 - 366: 2c900313 li t1,713 - 36a: 03e3033b mulw t1,t1,t5 - 36e: 4e35 li t3,13 - 370: 8efa mv t4,t5 - 372: 40e35f9b sraiw t6,t1,0xe - 376: 837e mv t1,t6 - 378: 23fe4363 blt t3,t6,59e - 37c: 5e25 li t3,-23 - 37e: 026e0e3b mulw t3,t3,t1 - 382: 01de0ebb addw t4,t3,t4 - 386: 22084f63 bltz a6,5c4 - 38a: f2000753 fmv.d.x fa4,zero - 38e: 00005e17 auipc t3,0x5 - 392: fd2e0e13 addi t3,t3,-46 # 5360 - 396: 380e9e63 bnez t4,732 - 39a: f20887d3 fmv.d.x fa5,a7 - 39e: fff30f1b addiw t5,t1,-1 - 3a2: 0f0e slli t5,t5,0x3 - 3a4: 02f777d3 fadd.d fa5,fa4,fa5 - 3a8: 030e slli t1,t1,0x3 - 3aa: 9f72 add t5,t5,t3 - 3ac: 9e1a add t3,t3,t1 - 3ae: 2e0e3e03 ld t3,736(t3) - 3b2: 2e8f3587 fld fa1,744(t5) - 3b6: f8000837 lui a6,0xf8000 - 3ba: e2078ed3 fmv.x.d t4,fa5 - 3be: 12b7f6d3 fmul.d fa3,fa5,fa1 - 3c2: f2088653 fmv.d.x fa2,a7 - 3c6: 01d87333 and t1,a6,t4 - 3ca: 01c87833 and a6,a6,t3 - 3ce: f20807d3 fmv.d.x fa5,a6 - 3d2: f2030053 fmv.d.x ft0,t1 - 3d6: 0af5f553 fsub.d fa0,fa1,fa5 - 3da: f20e87d3 fmv.d.x fa5,t4 - 3de: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 3e2: f20807d3 fmv.d.x fa5,a6 - 3e6: f2030653 fmv.d.x fa2,t1 - 3ea: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 3ee: f20e87d3 fmv.d.x fa5,t4 - 3f2: 0a177753 fsub.d fa4,fa4,ft1 - 3f6: f20300d3 fmv.d.x ft1,t1 - 3fa: 0a07f7d3 fsub.d fa5,fa5,ft0 - 3fe: 350f3007 fld ft0,848(t5) - 402: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 406: 12b77753 fmul.d fa4,fa4,fa1 - 40a: f20805d3 fmv.d.x fa1,a6 - 40e: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 412: f20e85d3 fmv.d.x fa1,t4 - 416: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 41a: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 41e: 02e7f753 fadd.d fa4,fa5,fa4 - 422: bd0d j 254 - 424: 00e3833b addw t1,t2,a4 - 428: 2a0e4663 bltz t3,6d4 - 42c: 475d li a4,23 - 42e: 10677663 bgeu a4,t1,53a - 432: e80f93e3 bnez t6,2b8 - 436: 05f5e7b7 lui a5,0x5f5e - 43a: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56907> - 43e: 04060413 addi s0,a2,64 - 442: 03860613 addi a2,a2,56 - 446: ebf7dce3 bge a5,t6,2fe - 44a: 4f01 li t5,0 - 44c: 00006e97 auipc t4,0x6 - 450: 4b4e8e93 addi t4,t4,1204 # 6900 - 454: 05f5e7b7 lui a5,0x5f5e - 458: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56908> - 45c: 02ffe833 rem a6,t6,a5 - 460: 02ffcfb3 div t6,t6,a5 - 464: 0008071b sext.w a4,a6 - 468: 0a080463 beqz a6,510 - 46c: 8822 mv a6,s0 - 46e: 06400893 li a7,100 - 472: 06300e13 li t3,99 - 476: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8806> - 478: 0007031b sext.w t1,a4 - 47c: 031777bb remuw a5,a4,a7 - 480: 2785 addiw a5,a5,1 - 482: 0017979b slliw a5,a5,0x1 - 486: 1782 slli a5,a5,0x20 - 488: 9381 srli a5,a5,0x20 - 48a: 97f6 add a5,a5,t4 - 48c: 0007d783 lhu a5,0(a5) - 490: 0317573b divuw a4,a4,a7 - 494: 00f81023 sh a5,0(a6) - 498: fc6e6fe3 bltu t3,t1,476 - 49c: 008f0f3b addw t5,t5,s0 - 4a0: 410f0f3b subw t5,t5,a6 - 4a4: 020f8f63 beqz t6,4e2 - 4a8: 87c2 mv a5,a6 - 4aa: 03000713 li a4,48 - 4ae: 04c80c63 beq a6,a2,506 - 4b2: 17fd addi a5,a5,-1 - 4b4: 00e78023 sb a4,0(a5) - 4b8: fec79de3 bne a5,a2,4b2 - 4bc: 408807b3 sub a5,a6,s0 - 4c0: 00ff07bb addw a5,t5,a5 - 4c4: 1461 addi s0,s0,-8 - 4c6: 00878f1b addiw t5,a5,8 - 4ca: 05f5e7b7 lui a5,0x5f5e - 4ce: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56907> - 4d2: ff840613 addi a2,s0,-8 - 4d6: f7f7cfe3 blt a5,t6,454 - 4da: 000f871b sext.w a4,t6 - 4de: 4f81 li t6,0 - 4e0: b771 j 46c - 4e2: 020f0563 beqz t5,50c - 4e6: 00084703 lbu a4,0(a6) - 4ea: 03000793 li a5,48 - 4ee: 22f70f63 beq a4,a5,72c - 4f2: 2f01 sext.w t5,t5 - 4f4: 0076a023 sw t2,0(a3) - 4f8: 6462 ld s0,24(sp) - 4fa: 0102b023 sd a6,0(t0) - 4fe: 01e5a023 sw t5,0(a1) - 502: 6105 addi sp,sp,32 - 504: 8082 ret - 506: 8442 mv s0,a6 - 508: b7c9 j 4ca - 50a: 8822 mv a6,s0 - 50c: 4f01 li t5,0 - 50e: b7dd j 4f4 - 510: 8822 mv a6,s0 - 512: bf59 j 4a8 - 514: 0eb2 slli t4,t4,0xc - 516: 00005797 auipc a5,0x5 - 51a: b1a78793 addi a5,a5,-1254 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x88> - 51e: 000e8663 beqz t4,52a - 522: 00005797 auipc a5,0x5 - 526: b0678793 addi a5,a5,-1274 # 5028 <_GLOBAL__sub_I__ZSt3cin+0x80> - 52a: 00f2b023 sd a5,0(t0) - 52e: 679d lui a5,0x7 - 530: c29c sw a5,0(a3) - 532: 4f0d li t5,3 - 534: 01e5a023 sw t5,0(a1) - 538: 8082 ret - 53a: 3b9ad737 lui a4,0x3b9ad - 53e: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5207> - 542: 07f76f63 bltu a4,t6,5c0 - 546: 4805 li a6,1 - 548: 02081713 slli a4,a6,0x20 - 54c: 01d75893 srli a7,a4,0x1d - 550: 00005717 auipc a4,0x5 - 554: 1c870713 addi a4,a4,456 # 5718 - 558: 9746 add a4,a4,a7 - 55a: 4e51 li t3,20 - 55c: a021 j 564 - 55e: 2805 addiw a6,a6,1 - 560: edc809e3 beq a6,t3,432 - 564: 00073883 ld a7,0(a4) - 568: 0721 addi a4,a4,8 - 56a: ff1ffae3 bgeu t6,a7,55e - 56e: ed0372e3 bgeu t1,a6,432 - 572: 4068083b subw a6,a6,t1 - 576: 475d li a4,23 - 578: eb076de3 bltu a4,a6,432 - 57c: 080e slli a6,a6,0x3 - 57e: 00005717 auipc a4,0x5 - 582: de270713 addi a4,a4,-542 # 5360 - 586: 9742 add a4,a4,a6 - 588: 3b873803 ld a6,952(a4) - 58c: 00185713 srli a4,a6,0x1 - 590: 977e add a4,a4,t6 - 592: 01176363 bltu a4,a7,598 - 596: 2385 addiw t2,t2,1 - 598: 03075fb3 divu t6,a4,a6 - 59c: bd59 j 432 - 59e: 4335 li t1,13 - 5a0: 5e25 li t3,-23 - 5a2: 026e0e3b mulw t3,t3,t1 - 5a6: 01de0ebb addw t4,t3,t4 - 5aa: de0850e3 bgez a6,38a - 5ae: a819 j 5c4 - 5b0: 02571313 slli t1,a4,0x25 - 5b4: 02535313 srli t1,t1,0x25 - 5b8: 0305 addi t1,t1,1 - 5ba: 475d li a4,23 - 5bc: ce676ee3 bltu a4,t1,2b8 - 5c0: 4829 li a6,10 - 5c2: b759 j 548 - 5c4: 260e8663 beqz t4,830 - 5c8: 00231e13 slli t3,t1,0x2 - 5cc: 41c30e33 sub t3,t1,t3 - 5d0: 0e0e slli t3,t3,0x3 - 5d2: 9e1a add t3,t3,t1 - 5d4: fffe881b addiw a6,t4,-1 - 5d8: 9e7a add t3,t3,t5 - 5da: 00005e97 auipc t4,0x5 - 5de: d86e8e93 addi t4,t4,-634 # 5360 - 5e2: 0e0e slli t3,t3,0x3 - 5e4: 080e slli a6,a6,0x3 - 5e6: 9876 add a6,a6,t4 - 5e8: 9ef2 add t4,t4,t3 - 5ea: 0b883607 fld fa2,184(a6) - 5ee: f20887d3 fmv.d.x fa5,a7 - 5f2: 0b0ebf03 ld t5,176(t4) - 5f6: f8000e37 lui t3,0xf8000 - 5fa: 011e7eb3 and t4,t3,a7 - 5fe: 12f676d3 fmul.d fa3,fa2,fa5 - 602: 01ee7e33 and t3,t3,t5 - 606: f20e07d3 fmv.d.x fa5,t3 - 60a: f20e0753 fmv.d.x fa4,t3 - 60e: f20e8553 fmv.d.x fa0,t4 - 612: 0af67653 fsub.d fa2,fa2,fa5 - 616: f20e87d3 fmv.d.x fa5,t4 - 61a: f20e85d3 fmv.d.x fa1,t4 - 61e: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 622: f2088753 fmv.d.x fa4,a7 - 626: 0ab775d3 fsub.d fa1,fa4,fa1 - 62a: 16883707 fld fa4,360(a6) - 62e: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 632: f20e0553 fmv.d.x fa0,t3 - 636: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 63a: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 63e: f20887d3 fmv.d.x fa5,a7 - 642: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 646: c00f87e3 beqz t6,254 - 64a: 02d777d3 fadd.d fa5,fa4,fa3 - 64e: fff3089b addiw a7,t1,-1 - 652: 00005817 auipc a6,0x5 - 656: d0e80813 addi a6,a6,-754 # 5360 - 65a: 030e slli t1,t1,0x3 - 65c: 088e slli a7,a7,0x3 - 65e: 98c2 add a7,a7,a6 - 660: 981a add a6,a6,t1 - 662: e2078e53 fmv.x.d t3,fa5 - 666: 21083e83 ld t4,528(a6) - 66a: f8000837 lui a6,0xf8000 - 66e: 2188b507 fld fa0,536(a7) - 672: 01c87333 and t1,a6,t3 - 676: 01d87833 and a6,a6,t4 - 67a: f2080653 fmv.d.x fa2,a6 - 67e: 12f577d3 fmul.d fa5,fa0,fa5 - 682: 2808b587 fld fa1,640(a7) - 686: 0ac57053 fsub.d ft0,fa0,fa2 - 68a: f20e0653 fmv.d.x fa2,t3 - 68e: 0ad67153 fsub.d ft2,fa2,fa3 - 692: f20806d3 fmv.d.x fa3,a6 - 696: f2030653 fmv.d.x fa2,t1 - 69a: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 69e: f20e06d3 fmv.d.x fa3,t3 - 6a2: 0ac6f653 fsub.d fa2,fa3,fa2 - 6a6: 22f786d3 fmv.d fa3,fa5 - 6aa: 0a2777d3 fsub.d fa5,fa4,ft2 - 6ae: f2030753 fmv.d.x fa4,t1 - 6b2: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 6b6: 12a7f7d3 fmul.d fa5,fa5,fa0 - 6ba: f2080553 fmv.d.x fa0,a6 - 6be: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 6c2: f20e0553 fmv.d.x fa0,t3 - 6c6: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 6ca: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 6ce: 02f67753 fadd.d fa4,fa2,fa5 - 6d2: b649 j 254 - 6d4: 02571313 slli t1,a4,0x25 - 6d8: 02535313 srli t1,t1,0x25 - 6dc: 0305 addi t1,t1,1 - 6de: 475d li a4,23 - 6e0: d46769e3 bltu a4,t1,432 - 6e4: bd99 j 53a - 6e6: 87fe mv a5,t6 - 6e8: 8fbe mv t6,a5 - 6ea: b101 j 2ea - 6ec: 87fe mv a5,t6 - 6ee: 3e800713 li a4,1000 - 6f2: 02e7f73b remuw a4,a5,a4 - 6f6: 2781 sext.w a5,a5 - 6f8: eb01 bnez a4,708 - 6fa: 3e800813 li a6,1000 - 6fe: 0307d7bb divuw a5,a5,a6 - 702: 0307f73b remuw a4,a5,a6 - 706: df65 beqz a4,6fe - 708: 02079f93 slli t6,a5,0x20 - 70c: 020fdf93 srli t6,t6,0x20 - 710: b31d j 436 - 712: 4785 li a5,1 - 714: c29c sw a5,0(a3) - 716: 00c2b023 sd a2,0(t0) - 71a: 03000793 li a5,48 - 71e: 00f60023 sb a5,0(a2) - 722: 4f05 li t5,1 - 724: 01e5a023 sw t5,0(a1) - 728: 6105 addi sp,sp,32 - 72a: 8082 ret - 72c: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8809> - 72e: 3f7d addiw t5,t5,-1 - 730: b3d1 j 4f4 - 732: e826 sd s1,16(sp) - 734: e44a sd s2,8(sp) - 736: 4859 li a6,22 - 738: 8976 mv s2,t4 - 73a: 11d84363 blt a6,t4,840 - 73e: 0009049b sext.w s1,s2 - 742: 00005e17 auipc t3,0x5 - 746: c1ee0e13 addi t3,t3,-994 # 5360 - 74a: 00349813 slli a6,s1,0x3 - 74e: 9872 add a6,a6,t3 - 750: 00083687 fld fa3,0(a6) - 754: 00083803 ld a6,0(a6) - 758: f20887d3 fmv.d.x fa5,a7 - 75c: f8000fb7 lui t6,0xf8000 - 760: 010ff833 and a6,t6,a6 - 764: 12f6f553 fmul.d fa0,fa3,fa5 - 768: f20807d3 fmv.d.x fa5,a6 - 76c: 011ff433 and s0,t6,a7 - 770: f2040753 fmv.d.x fa4,s0 - 774: 0af6f6d3 fsub.d fa3,fa3,fa5 - 778: f20887d3 fmv.d.x fa5,a7 - 77c: f2080653 fmv.d.x fa2,a6 - 780: 412e8ebb subw t4,t4,s2 - 784: 0ae7f753 fsub.d fa4,fa5,fa4 - 788: f20407d3 fmv.d.x fa5,s0 - 78c: e20508d3 fmv.x.d a7,fa0 - 790: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 794: f2040653 fmv.d.x fa2,s0 - 798: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 79c: f2080653 fmv.d.x fa2,a6 - 7a0: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 7a4: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 7a8: 080e8963 beqz t4,83a - 7ac: 02e577d3 fadd.d fa5,fa0,fa4 - 7b0: 0e8e slli t4,t4,0x3 - 7b2: 01de0833 add a6,t3,t4 - 7b6: 00083587 fld fa1,0(a6) - 7ba: 00231893 slli a7,t1,0x2 - 7be: 411308b3 sub a7,t1,a7 - 7c2: 00389813 slli a6,a7,0x3 - 7c6: e2078453 fmv.x.d s0,fa5 - 7ca: 12f5f7d3 fmul.d fa5,fa1,fa5 - 7ce: 981a add a6,a6,t1 - 7d0: 987a add a6,a6,t5 - 7d2: 40980833 sub a6,a6,s1 - 7d6: 080e slli a6,a6,0x3 - 7d8: 9872 add a6,a6,t3 - 7da: 00083e83 ld t4,0(a6) - 7de: 008ff833 and a6,t6,s0 - 7e2: e20788d3 fmv.x.d a7,fa5 - 7e6: f20806d3 fmv.d.x fa3,a6 - 7ea: f20407d3 fmv.d.x fa5,s0 - 7ee: 01dfffb3 and t6,t6,t4 - 7f2: f20880d3 fmv.d.x ft1,a7 - 7f6: 0ad7f653 fsub.d fa2,fa5,fa3 - 7fa: f20f87d3 fmv.d.x fa5,t6 - 7fe: 64c2 ld s1,16(sp) - 800: 6922 ld s2,8(sp) - 802: 0af5f053 fsub.d ft0,fa1,fa5 - 806: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 80a: f20407d3 fmv.d.x fa5,s0 - 80e: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 812: f2080553 fmv.d.x fa0,a6 - 816: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 81a: 0af77753 fsub.d fa4,fa4,fa5 - 81e: f20f87d3 fmv.d.x fa5,t6 - 822: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 826: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 82a: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 82e: b6b5 j 39a - 830: f20886d3 fmv.d.x fa3,a7 - 834: f2000753 fmv.d.x fa4,zero - 838: b539 j 646 - 83a: 64c2 ld s1,16(sp) - 83c: 6922 ld s2,8(sp) - 83e: beb1 j 39a - 840: 4959 li s2,22 - 842: bdf5 j 73e - 844: e826 sd s1,16(sp) - 846: e44a sd s2,8(sp) - 848: ecc00393 li t2,-308 - 84c: 4eed li t4,27 - 84e: 4335 li t1,13 - 850: 14600f13 li t5,326 - 854: b5cd j 736 - 856: 26900313 li t1,617 - 85a: 0303083b mulw a6,t1,a6 - 85e: 41f8531b sraiw t1,a6,0x1f - 862: 0153531b srliw t1,t1,0x15 - 866: 0103033b addw t1,t1,a6 - 86a: 40b3539b sraiw t2,t1,0xb - 86e: 4849 li a6,18 - 870: 4078083b subw a6,a6,t2 - 874: b249 j 1f6 - -0000000000000876 <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 876: 87aa mv a5,a0 - if (ctx->fd == -1) - 878: 4508 lw a0,8(a0) - 87a: 577d li a4,-1 - 87c: 00e51d63 bne a0,a4,896 <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 880: 6b94 ld a3,16(a5) - 882: 6398 ld a4,0(a5) - 884: 9736 add a4,a4,a3 - 886: 00074603 lbu a2,0(a4) - 88a: c60d beqz a2,8b4 <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 88c: 0685 addi a3,a3,1 - 88e: eb94 sd a3,16(a5) - 890: 00074503 lbu a0,0(a4) - 894: 8082 ret -static int _in_char(_InContext *ctx) - 896: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 898: 4605 li a2,1 - 89a: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 89e: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 8a0: 801ff0ef jal a0 - 8a4: 4785 li a5,1 - 8a6: 00f51963 bne a0,a5,8b8 <_in_char.part.0+0x42> - return (unsigned char)c; - 8aa: 00f14503 lbu a0,15(sp) -} - 8ae: 60e2 ld ra,24(sp) - 8b0: 6105 addi sp,sp,32 - 8b2: 8082 ret - return -1; - 8b4: 557d li a0,-1 -} - 8b6: 8082 ret - return -1; - 8b8: 557d li a0,-1 - 8ba: bfd5 j 8ae <_in_char.part.0+0x38> - -00000000000008bc <_skip_space>: -{ - 8bc: 7139 addi sp,sp,-64 - 8be: f822 sd s0,48(sp) - 8c0: f426 sd s1,40(sp) - 8c2: f04a sd s2,32(sp) - 8c4: ec4e sd s3,24(sp) - 8c6: e852 sd s4,16(sp) - 8c8: fc06 sd ra,56(sp) - 8ca: 842a mv s0,a0 - ctx->ungotten = -1; - 8cc: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 8ce: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 8d2: 02000913 li s2,32 - 8d6: 4991 li s3,4 - if (ctx->ungotten >= 0) - 8d8: 4c1c lw a5,24(s0) - 8da: 0407d163 bgez a5,91c <_skip_space+0x60> - if (ctx->fd == -1) - 8de: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 8e0: 4605 li a2,1 - 8e2: 85d2 mv a1,s4 - if (ctx->fd == -1) - 8e4: 02951e63 bne a0,s1,920 <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - 8e8: 6818 ld a4,16(s0) - 8ea: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - 8ec: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - 8f0: 97ba add a5,a5,a4 - 8f2: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x1e0> - 8f6: cb19 beqz a4,90c <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - 8f8: e814 sd a3,16(s0) - 8fa: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 8fe: ff77871b addiw a4,a5,-9 - 902: fd278be3 beq a5,s2,8d8 <_skip_space+0x1c> - 906: fce9f9e3 bgeu s3,a4,8d8 <_skip_space+0x1c> - ctx->ungotten = c; - 90a: cc1c sw a5,24(s0) -} - 90c: 70e2 ld ra,56(sp) - 90e: 7442 ld s0,48(sp) - 910: 74a2 ld s1,40(sp) - 912: 7902 ld s2,32(sp) - 914: 69e2 ld s3,24(sp) - 916: 6a42 ld s4,16(sp) - 918: 6121 addi sp,sp,64 - 91a: 8082 ret - ctx->ungotten = -1; - 91c: cc04 sw s1,24(s0) - return c; - 91e: b7c5 j 8fe <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - 920: f80ff0ef jal a0 - 924: 4785 li a5,1 - 926: fef513e3 bne a0,a5,90c <_skip_space+0x50> - return (unsigned char)c; - 92a: 00f14783 lbu a5,15(sp) - 92e: bfc1 j 8fe <_skip_space+0x42> - -0000000000000930 <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 930: 7155 addi sp,sp,-208 - 932: e586 sd ra,200(sp) - 934: e95a sd s6,144(sp) - while (*p) - 936: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 93a: e432 sd a2,8(sp) - while (*p) - 93c: 68078b63 beqz a5,fd2 <_vscanf_core.constprop.0+0x6a2> - 940: e1a2 sd s0,192(sp) - 942: fd26 sd s1,184(sp) - 944: f152 sd s4,160(sp) - 946: ed56 sd s5,152(sp) - 948: f4ee sd s11,104(sp) - 94a: 842e mv s0,a1 - 94c: 8daa mv s11,a0 - int assigned = 0; - 94e: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 950: 02000493 li s1,32 - 954: 4a91 li s5,4 - if (*p != '%') - 956: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 95a: 04978763 beq a5,s1,9a8 <_vscanf_core.constprop.0+0x78> - 95e: ff77869b addiw a3,a5,-9 - 962: 0ff6f693 zext.b a3,a3 - 966: 04daf163 bgeu s5,a3,9a8 <_vscanf_core.constprop.0+0x78> - if (*p != '%') - 96a: 07478d63 beq a5,s4,9e4 <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - 96e: 856e mv a0,s11 - 970: f4dff0ef jal 8bc <_skip_space> - if (ctx->ungotten >= 0) - 974: 018da503 lw a0,24(s11) - 978: 04055a63 bgez a0,9cc <_vscanf_core.constprop.0+0x9c> - 97c: 856e mv a0,s11 - 97e: ef9ff0ef jal 876 <_in_char.part.0> - if (c != *p) - 982: 00044783 lbu a5,0(s0) - 986: 04a78a63 beq a5,a0,9da <_vscanf_core.constprop.0+0xaa> - if (c != -1) - 98a: 57fd li a5,-1 - 98c: 00f50463 beq a0,a5,994 <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - 990: 00adac23 sw a0,24(s11) - 994: 640e ld s0,192(sp) - 996: 74ea ld s1,184(sp) - 998: 7a0a ld s4,160(sp) - 99a: 6aea ld s5,152(sp) - 99c: 7da6 ld s11,104(sp) -} - 99e: 60ae ld ra,200(sp) - 9a0: 855a mv a0,s6 - 9a2: 6b4a ld s6,144(sp) - 9a4: 6169 addi sp,sp,208 - 9a6: 8082 ret - _skip_space(ctx); - 9a8: 856e mv a0,s11 - 9aa: f13ff0ef jal 8bc <_skip_space> - while (isspace(*p)) - 9ae: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 9b2: 4611 li a2,4 - 9b4: ff77869b addiw a3,a5,-9 - 9b8: 0ff6f693 zext.b a3,a3 - 9bc: 00978663 beq a5,s1,9c8 <_vscanf_core.constprop.0+0x98> - 9c0: 00d67463 bgeu a2,a3,9c8 <_vscanf_core.constprop.0+0x98> - while (*p) - 9c4: fbd9 bnez a5,95a <_vscanf_core.constprop.0+0x2a> - 9c6: b7f9 j 994 <_vscanf_core.constprop.0+0x64> - p++; - 9c8: 0405 addi s0,s0,1 - 9ca: b7d5 j 9ae <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - 9cc: 57fd li a5,-1 - 9ce: 00fdac23 sw a5,24(s11) - if (c != *p) - 9d2: 00044783 lbu a5,0(s0) - 9d6: faa79ae3 bne a5,a0,98a <_vscanf_core.constprop.0+0x5a> - while (*p) - 9da: 00144783 lbu a5,1(s0) - p++; - 9de: 0405 addi s0,s0,1 - while (*p) - 9e0: ffad bnez a5,95a <_vscanf_core.constprop.0+0x2a> - 9e2: bf4d j 994 <_vscanf_core.constprop.0+0x64> - 9e4: f94a sd s2,176(sp) - 9e6: f54e sd s3,168(sp) - 9e8: e55e sd s7,136(sp) - 9ea: e162 sd s8,128(sp) - if (*p == '*') - 9ec: 00144583 lbu a1,1(s0) - 9f0: 02a00793 li a5,42 - 9f4: 22f58d63 beq a1,a5,c2e <_vscanf_core.constprop.0+0x2fe> - p++; - 9f8: 0405 addi s0,s0,1 - int suppress = 0; - 9fa: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - 9fc: fd05861b addiw a2,a1,-48 - a00: 0ff67693 zext.b a3,a2 - a04: 47a5 li a5,9 - a06: 36d7e763 bltu a5,a3,d74 <_vscanf_core.constprop.0+0x444> - a0a: 4781 li a5,0 - a0c: 4825 li a6,9 - a0e: a019 j a14 <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - a10: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - a14: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - a18: 00f6093b addw s2,a2,a5 - a1c: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - a20: fd05861b addiw a2,a1,-48 - a24: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - a28: 012686bb addw a3,a3,s2 - p++; - a2c: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - a2e: fea871e3 bgeu a6,a0,a10 <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - a32: 06c00693 li a3,108 - p++; - a36: 00140b93 addi s7,s0,1 - if (*p == 'l') - a3a: 1ed58f63 beq a1,a3,c38 <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - a3e: 06800693 li a3,104 - a42: 2ad58863 beq a1,a3,cf2 <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - a46: 00044c03 lbu s8,0(s0) - a4a: 8ba2 mv s7,s0 - int len_mod = 0; - a4c: ec02 sd zero,24(sp) - char spec = *p++; - a4e: 06300693 li a3,99 - a52: 001b8413 addi s0,s7,1 - if (!spec) - a56: 2adc0863 beq s8,a3,d06 <_vscanf_core.constprop.0+0x3d6> - a5a: 1f86fc63 bgeu a3,s8,c52 <_vscanf_core.constprop.0+0x322> - a5e: f9cc069b addiw a3,s8,-100 - a62: 0ff6f693 zext.b a3,a3 - a66: 4651 li a2,20 - a68: 0cd66e63 bltu a2,a3,b44 <_vscanf_core.constprop.0+0x214> - a6c: 00120637 lui a2,0x120 - a70: 4585 li a1,1 - a72: 00d595b3 sll a1,a1,a3 - a76: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x118829> - a7a: 8e6d and a2,a2,a1 - a7c: ee69 bnez a2,b56 <_vscanf_core.constprop.0+0x226> - a7e: 89b9 andi a1,a1,14 - a80: 1e059263 bnez a1,c64 <_vscanf_core.constprop.0+0x334> - a84: 463d li a2,15 - a86: 0ac69f63 bne a3,a2,b44 <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - a8a: 856e mv a0,s11 - a8c: e31ff0ef jal 8bc <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - a90: ec02 sd zero,24(sp) - a92: 00099763 bnez s3,aa0 <_vscanf_core.constprop.0+0x170> - a96: 67a2 ld a5,8(sp) - a98: 6398 ld a4,0(a5) - a9a: 07a1 addi a5,a5,8 - a9c: e43e sd a5,8(sp) - a9e: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - aa0: 018da503 lw a0,24(s11) - aa4: 2e055b63 bgez a0,d9a <_vscanf_core.constprop.0+0x46a> - aa8: 856e mv a0,s11 - aaa: dcdff0ef jal 876 <_in_char.part.0> - while (c != -1 && !isspace(c)) - aae: 56fd li a3,-1 - ab0: 6ad50363 beq a0,a3,1156 <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - ab4: 02000693 li a3,32 - ab8: 3ed50963 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - abc: 46a5 li a3,9 - abe: 3ed50663 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - ac2: 46a9 li a3,10 - ac4: 3ed50363 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - ac8: 46ad li a3,11 - aca: 3ed50063 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - ace: 46b1 li a3,12 - ad0: 3cd50d63 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - ad4: 46b5 li a3,13 - ad6: 3cd50a63 beq a0,a3,eaa <_vscanf_core.constprop.0+0x57a> - ada: 67e2 ld a5,24(sp) - adc: fce6 sd s9,120(sp) - ade: f8ea sd s10,112(sp) - ae0: e83e sd a5,16(sp) - ae2: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - ae4: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - ae6: 02000c93 li s9,32 - if (width > 0 && i >= width) - aea: 01205463 blez s2,af2 <_vscanf_core.constprop.0+0x1c2> - aee: 052d5563 bge s10,s2,b38 <_vscanf_core.constprop.0+0x208> - if (!suppress) - af2: 00099563 bnez s3,afc <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - af6: 67c2 ld a5,16(sp) - af8: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - afc: 018da503 lw a0,24(s11) - i++; - b00: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - b02: 30055963 bgez a0,e14 <_vscanf_core.constprop.0+0x4e4> - b06: 856e mv a0,s11 - b08: d6fff0ef jal 876 <_in_char.part.0> - while (c != -1 && !isspace(c)) - b0c: 27850663 beq a0,s8,d78 <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - b10: 03950463 beq a0,s9,b38 <_vscanf_core.constprop.0+0x208> - b14: 47a5 li a5,9 - b16: 02f50163 beq a0,a5,b38 <_vscanf_core.constprop.0+0x208> - b1a: 47a9 li a5,10 - b1c: 00f50e63 beq a0,a5,b38 <_vscanf_core.constprop.0+0x208> - b20: 47ad li a5,11 - b22: 00f50b63 beq a0,a5,b38 <_vscanf_core.constprop.0+0x208> - b26: 47b1 li a5,12 - b28: 00f50863 beq a0,a5,b38 <_vscanf_core.constprop.0+0x208> - b2c: 67c2 ld a5,16(sp) - b2e: 0785 addi a5,a5,1 - b30: e83e sd a5,16(sp) - b32: 47b5 li a5,13 - b34: faf51be3 bne a0,a5,aea <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - b38: 64098a63 beqz s3,118c <_vscanf_core.constprop.0+0x85c> - b3c: 7ce6 ld s9,120(sp) - b3e: 7d46 ld s10,112(sp) - ctx->ungotten = c; - b40: 00adac23 sw a0,24(s11) - while (*p) - b44: 001bc783 lbu a5,1(s7) - b48: 794a ld s2,176(sp) - b4a: 79aa ld s3,168(sp) - b4c: 6baa ld s7,136(sp) - b4e: 6c0a ld s8,128(sp) - b50: e00795e3 bnez a5,95a <_vscanf_core.constprop.0+0x2a> - b54: b581 j 994 <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - b56: 856e mv a0,s11 - b58: f8ea sd s10,112(sp) - b5a: d63ff0ef jal 8bc <_skip_space> - if (ctx->ungotten >= 0) - b5e: 018da503 lw a0,24(s11) - b62: 24055063 bgez a0,da2 <_vscanf_core.constprop.0+0x472> - b66: 856e mv a0,s11 - b68: d0fff0ef jal 876 <_in_char.part.0> - if (c == '-' || c == '+') - b6c: fd55069b addiw a3,a0,-43 - b70: 9af5 andi a3,a3,-3 - b72: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - b74: 4d01 li s10,0 - if (c == '-' || c == '+') - b76: 3e068863 beqz a3,f66 <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - b7a: 07800693 li a3,120 - b7e: 4641 li a2,16 - b80: 00dc0863 beq s8,a3,b90 <_vscanf_core.constprop.0+0x260> - b84: 06900693 li a3,105 - b88: 4629 li a2,10 - b8a: 00dc1363 bne s8,a3,b90 <_vscanf_core.constprop.0+0x260> - b8e: 4601 li a2,0 - while (c != -1 && i < 63) - b90: 56fd li a3,-1 - b92: 5cd50863 beq a0,a3,1162 <_vscanf_core.constprop.0+0x832> - b96: fce6 sd s9,120(sp) - b98: 02010893 addi a7,sp,32 - b9c: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ba0: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - ba2: fd05069b addiw a3,a0,-48 - ba6: 0005031b sext.w t1,a0 - baa: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - bae: 27960a63 beq a2,s9,e22 <_vscanf_core.constprop.0+0x4f2> - bb2: 2a060d63 beqz a2,e6c <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - bb6: 07800793 li a5,120 - bba: 2ef50363 beq a0,a5,ea0 <_vscanf_core.constprop.0+0x570> - bbe: fa850693 addi a3,a0,-88 - bc2: 0016b693 seqz a3,a3 - bc6: 4301 li t1,0 - if (width > 0 && i >= width) - bc8: 01205463 blez s2,bd0 <_vscanf_core.constprop.0+0x2a0> - bcc: 032d5a63 bge s10,s2,c00 <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - bd0: 0066e6b3 or a3,a3,t1 - bd4: 8ecd or a3,a3,a1 - bd6: c68d beqz a3,c00 <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - bd8: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - bdc: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - be0: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - be2: 22055c63 bgez a0,e1a <_vscanf_core.constprop.0+0x4ea> - be6: 856e mv a0,s11 - be8: e832 sd a2,16(sp) - bea: c8dff0ef jal 876 <_in_char.part.0> - while (c != -1 && i < 63) - bee: 57fd li a5,-1 - bf0: 6642 ld a2,16(sp) - bf2: 3cf50263 beq a0,a5,fb6 <_vscanf_core.constprop.0+0x686> - bf6: 03f00693 li a3,63 - bfa: 0c05 addi s8,s8,1 - bfc: fadd13e3 bne s10,a3,ba2 <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - c00: 040d0793 addi a5,s10,64 - c04: 1018 addi a4,sp,32 - c06: 97ba add a5,a5,a4 - c08: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - c0c: 00adac23 sw a0,24(s11) - c10: 7ce6 ld s9,120(sp) - if (i == 0) - c12: 1e0d0663 beqz s10,dfe <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - c16: 36098363 beqz s3,f7c <_vscanf_core.constprop.0+0x64c> - while (*p) - c1a: 001bc783 lbu a5,1(s7) - { - c1e: 794a ld s2,176(sp) - c20: 79aa ld s3,168(sp) - c22: 6baa ld s7,136(sp) - c24: 6c0a ld s8,128(sp) - c26: 7d46 ld s10,112(sp) - while (*p) - c28: d20799e3 bnez a5,95a <_vscanf_core.constprop.0+0x2a> - c2c: b3a5 j 994 <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - c2e: 00244583 lbu a1,2(s0) - suppress = 1; - c32: 4985 li s3,1 - p++; - c34: 0409 addi s0,s0,2 - c36: b3d9 j 9fc <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - c38: 00144c03 lbu s8,1(s0) - len_mod = 1; - c3c: 4785 li a5,1 - c3e: ec3e sd a5,24(sp) - if (*p == 'l') - c40: e0bc17e3 bne s8,a1,a4e <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - c44: 4789 li a5,2 - char spec = *p++; - c46: 00244c03 lbu s8,2(s0) - p++; - c4a: 00240b93 addi s7,s0,2 - len_mod = 2; - c4e: ec3e sd a5,24(sp) - c50: bbfd j a4e <_vscanf_core.constprop.0+0x11e> - c52: 100c0763 beqz s8,d60 <_vscanf_core.constprop.0+0x430> - c56: fbbc079b addiw a5,s8,-69 - c5a: 0ff7f793 zext.b a5,a5 - c5e: 4689 li a3,2 - c60: eef6e2e3 bltu a3,a5,b44 <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - c64: 856e mv a0,s11 - c66: f8ea sd s10,112(sp) - c68: c55ff0ef jal 8bc <_skip_space> - if (ctx->ungotten >= 0) - c6c: 018da783 lw a5,24(s11) - c70: 1207dd63 bgez a5,daa <_vscanf_core.constprop.0+0x47a> - c74: 856e mv a0,s11 - c76: c01ff0ef jal 876 <_in_char.part.0> - if (c == '-' || c == '+') - c7a: fd55069b addiw a3,a0,-43 - c7e: ffd6f613 andi a2,a3,-3 - c82: 2601 sext.w a2,a2 - c84: 87aa mv a5,a0 - c86: 12060c63 beqz a2,dbe <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - c8a: 567d li a2,-1 - c8c: 16c50963 beq a0,a2,dfe <_vscanf_core.constprop.0+0x4ce> - c90: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - c92: 4d01 li s10,0 - c94: 80000937 lui s2,0x80000 - c98: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8807> - c9a: 0932 slli s2,s2,0xc - c9c: 80194913 xori s2,s2,-2047 - ca0: 093e slli s2,s2,0xf - ca2: 02010813 addi a6,sp,32 - ca6: 01a80cb3 add s9,a6,s10 - caa: 03a00c13 li s8,58 - cae: 1935 addi s2,s2,-19 - cb0: a831 j ccc <_vscanf_core.constprop.0+0x39c> - cb2: bc5ff0ef jal 876 <_in_char.part.0> - while (c != -1 && i < 63) - cb6: 577d li a4,-1 - cb8: 87aa mv a5,a0 - cba: 2ee50563 beq a0,a4,fa4 <_vscanf_core.constprop.0+0x674> - cbe: 03f00713 li a4,63 - cc2: 0c85 addi s9,s9,1 - cc4: 1eed0e63 beq s10,a4,ec0 <_vscanf_core.constprop.0+0x590> - cc8: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - ccc: 00d95633 srl a2,s2,a3 - cd0: 856e mv a0,s11 - cd2: 8a05 andi a2,a2,1 - cd4: 1edc6663 bltu s8,a3,ec0 <_vscanf_core.constprop.0+0x590> - cd8: 1e060463 beqz a2,ec0 <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - cdc: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - ce0: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - ce4: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - ce6: fc07c6e3 bltz a5,cb2 <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - cea: 577d li a4,-1 - cec: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - cf0: b7f9 j cbe <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - cf2: 00144c03 lbu s8,1(s0) - int len_mod = 0; - cf6: ec02 sd zero,24(sp) - if (*p == 'h') - cf8: d4bc1be3 bne s8,a1,a4e <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - cfc: 00244c03 lbu s8,2(s0) - p++; - d00: 00240b93 addi s7,s0,2 - d04: b3a9 j a4e <_vscanf_core.constprop.0+0x11e> - d06: fce6 sd s9,120(sp) - d08: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - d0a: 00090c1b sext.w s8,s2 - d0e: 0d205a63 blez s2,de2 <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - d12: 4d01 li s10,0 - d14: 06098d63 beqz s3,d8e <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - d18: 9c6a add s8,s8,s10 - if (c == -1) - d1a: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - d1c: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - d20: 856e mv a0,s11 - if (ctx->ungotten >= 0) - d22: 0207dc63 bgez a5,d5a <_vscanf_core.constprop.0+0x42a> - d26: b51ff0ef jal 876 <_in_char.part.0> - d2a: 87aa mv a5,a0 - if (c == -1) - d2c: 0b950d63 beq a0,s9,de6 <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - d30: 00099463 bnez s3,d38 <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - d34: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - d38: 0d05 addi s10,s10,1 - d3a: ffac11e3 bne s8,s10,d1c <_vscanf_core.constprop.0+0x3ec> - while (*p) - d3e: 001bc783 lbu a5,1(s7) - if (!suppress) - d42: 00099363 bnez s3,d48 <_vscanf_core.constprop.0+0x418> - assigned++; - d46: 2b05 addiw s6,s6,1 - d48: 794a ld s2,176(sp) - d4a: 79aa ld s3,168(sp) - d4c: 6baa ld s7,136(sp) - d4e: 6c0a ld s8,128(sp) - d50: 7ce6 ld s9,120(sp) - d52: 7d46 ld s10,112(sp) - while (*p) - d54: c00793e3 bnez a5,95a <_vscanf_core.constprop.0+0x2a> - d58: b935 j 994 <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - d5a: 019dac23 sw s9,24(s11) - if (c == -1) - d5e: bfc9 j d30 <_vscanf_core.constprop.0+0x400> - d60: 640e ld s0,192(sp) - d62: 74ea ld s1,184(sp) - d64: 794a ld s2,176(sp) - d66: 79aa ld s3,168(sp) - d68: 7a0a ld s4,160(sp) - d6a: 6aea ld s5,152(sp) - d6c: 6baa ld s7,136(sp) - d6e: 6c0a ld s8,128(sp) - d70: 7da6 ld s11,104(sp) - d72: b135 j 99e <_vscanf_core.constprop.0+0x6e> - int width = -1; - d74: 597d li s2,-1 - d76: b975 j a32 <_vscanf_core.constprop.0+0x102> - if (!suppress) - d78: 3c099c63 bnez s3,1150 <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - d7c: 67e2 ld a5,24(sp) - d7e: 01a786b3 add a3,a5,s10 - d82: 00068023 sb zero,0(a3) - while (*p) - d86: 001bc783 lbu a5,1(s7) - assigned++; - d8a: 2b05 addiw s6,s6,1 - d8c: bf75 j d48 <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - d8e: 67a2 ld a5,8(sp) - d90: 0007bd03 ld s10,0(a5) - d94: 07a1 addi a5,a5,8 - d96: e43e sd a5,8(sp) - d98: b741 j d18 <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - d9a: 56fd li a3,-1 - d9c: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - da0: bb11 j ab4 <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - da2: 56fd li a3,-1 - da4: 00ddac23 sw a3,24(s11) - return c; - da8: b3d1 j b6c <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - daa: fd57869b addiw a3,a5,-43 - dae: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - db2: 55fd li a1,-1 - db4: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - db8: 2601 sext.w a2,a2 - dba: ec061be3 bnez a2,c90 <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - dbe: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - dc2: 018da783 lw a5,24(s11) - dc6: 2207da63 bgez a5,ffa <_vscanf_core.constprop.0+0x6ca> - dca: 856e mv a0,s11 - dcc: aabff0ef jal 876 <_in_char.part.0> - while (c != -1 && i < 63) - dd0: 567d li a2,-1 - dd2: 87aa mv a5,a0 - num_buf[i++] = (char)c; - dd4: 4d05 li s10,1 - dd6: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - dda: 3ac50163 beq a0,a2,117c <_vscanf_core.constprop.0+0x84c> - dde: fce6 sd s9,120(sp) - de0: bd55 j c94 <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - de2: 4c05 li s8,1 - de4: b73d j d12 <_vscanf_core.constprop.0+0x3e2> - de6: 640e ld s0,192(sp) - de8: 74ea ld s1,184(sp) - dea: 794a ld s2,176(sp) - dec: 79aa ld s3,168(sp) - dee: 7a0a ld s4,160(sp) - df0: 6aea ld s5,152(sp) - df2: 6baa ld s7,136(sp) - df4: 6c0a ld s8,128(sp) - df6: 7ce6 ld s9,120(sp) - df8: 7d46 ld s10,112(sp) - dfa: 7da6 ld s11,104(sp) - dfc: b64d j 99e <_vscanf_core.constprop.0+0x6e> - dfe: 640e ld s0,192(sp) - e00: 74ea ld s1,184(sp) - e02: 794a ld s2,176(sp) - e04: 79aa ld s3,168(sp) - e06: 7a0a ld s4,160(sp) - e08: 6aea ld s5,152(sp) - e0a: 6baa ld s7,136(sp) - e0c: 6c0a ld s8,128(sp) - e0e: 7d46 ld s10,112(sp) - e10: 7da6 ld s11,104(sp) - e12: b671 j 99e <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - e14: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - e18: b9e5 j b10 <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - e1a: 57fd li a5,-1 - e1c: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - e20: bbd9 j bf6 <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e22: f9f3069b addiw a3,t1,-97 - e26: 4795 li a5,5 - e28: 06d7f263 bgeu a5,a3,e8c <_vscanf_core.constprop.0+0x55c> - e2c: fbf3031b addiw t1,t1,-65 - e30: 4795 li a5,5 - e32: 0467fd63 bgeu a5,t1,e8c <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - e36: 07800693 li a3,120 - e3a: 18d50763 beq a0,a3,fc8 <_vscanf_core.constprop.0+0x698> - e3e: fa850693 addi a3,a0,-88 - e42: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - e46: 4301 li t1,0 - e48: 32061663 bnez a2,1174 <_vscanf_core.constprop.0+0x844> - e4c: 4785 li a5,1 - e4e: 4601 li a2,0 - e50: d6fd1ce3 bne s10,a5,bc8 <_vscanf_core.constprop.0+0x298> - e54: 02014e03 lbu t3,32(sp) - e58: 03000793 li a5,48 - e5c: d6fe16e3 bne t3,a5,bc8 <_vscanf_core.constprop.0+0x298> - e60: d60684e3 beqz a3,bc8 <_vscanf_core.constprop.0+0x298> - base = 16; - e64: 4641 li a2,16 - if (width > 0 && i >= width) - e66: d7a919e3 bne s2,s10,bd8 <_vscanf_core.constprop.0+0x2a8> - e6a: bb59 j c00 <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e6c: f9f3069b addiw a3,t1,-97 - e70: 4795 li a5,5 - e72: 02d7f263 bgeu a5,a3,e96 <_vscanf_core.constprop.0+0x566> - e76: fbf3031b addiw t1,t1,-65 - e7a: 0467f063 bgeu a5,t1,eba <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - e7e: 07800693 li a3,120 - e82: fad51ee3 bne a0,a3,e3e <_vscanf_core.constprop.0+0x50e> - e86: 4301 li t1,0 - e88: 4685 li a3,1 - e8a: b7c9 j e4c <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e8c: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - e8e: 4681 li a3,0 - if (width > 0 && i >= width) - e90: d3204ee3 bgtz s2,bcc <_vscanf_core.constprop.0+0x29c> - e94: bb35 j bd0 <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - e96: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - e98: 4305 li t1,1 - if (width > 0 && i >= width) - e9a: d32049e3 bgtz s2,bcc <_vscanf_core.constprop.0+0x29c> - e9e: bb0d j bd0 <_vscanf_core.constprop.0+0x2a0> - ea0: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - ea2: 4685 li a3,1 - if (width > 0 && i >= width) - ea4: d32044e3 bgtz s2,bcc <_vscanf_core.constprop.0+0x29c> - ea8: bb05 j bd8 <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - eaa: c8099be3 bnez s3,b40 <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - eae: 67e2 ld a5,24(sp) - eb0: 00078023 sb zero,0(a5) - ctx->ungotten = c; - eb4: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - eb8: b171 j b44 <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - eba: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - ebc: 4305 li t1,1 - ebe: b779 j e4c <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - ec0: 040d0713 addi a4,s10,64 - ec4: 1014 addi a3,sp,32 - ec6: 96ba add a3,a3,a4 - ec8: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - ecc: 00fdac23 sw a5,24(s11) - if (i == 0) - ed0: f00d0be3 beqz s10,de6 <_vscanf_core.constprop.0+0x4b6> - ed4: 7ce6 ld s9,120(sp) - if (!suppress) - ed6: d40992e3 bnez s3,c1a <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - eda: 02014603 lbu a2,32(sp) - ede: 02d00793 li a5,45 - ee2: 1af60963 beq a2,a5,1094 <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - ee6: 02b00793 li a5,43 - eea: 20f60a63 beq a2,a5,10fe <_vscanf_core.constprop.0+0x7ce> - eee: 00005797 auipc a5,0x5 - ef2: 8e27b587 fld fa1,-1822(a5) # 57d0 - ef6: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - ef8: fd06069b addiw a3,a2,-48 - efc: 0ff6f513 zext.b a0,a3 - f00: 45a5 li a1,9 - f02: f20007d3 fmv.d.x fa5,zero - f06: 02a5e463 bltu a1,a0,f2e <_vscanf_core.constprop.0+0x5fe> - f0a: 00005717 auipc a4,0x5 - f0e: 8ce73707 fld fa4,-1842(a4) # 57d8 - f12: 4525 li a0,9 - f14: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - f18: d20686d3 fcvt.d.w fa3,a3 - str++; - f1c: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - f1e: fd06069b addiw a3,a2,-48 - f22: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - f26: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - f2a: feb575e3 bgeu a0,a1,f14 <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - f2e: 02e00693 li a3,46 - f32: 16d60a63 beq a2,a3,10a6 <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - f36: 0007c683 lbu a3,0(a5) - f3a: 0df6f693 andi a3,a3,223 - f3e: 04500613 li a2,69 - f42: 0cc68463 beq a3,a2,100a <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - f46: 6722 ld a4,8(sp) - if (len_mod == 1) - f48: 4685 li a3,1 - return sign * val; - f4a: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - f4e: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - f50: 0721 addi a4,a4,8 - f52: e43a sd a4,8(sp) - if (len_mod == 1) - f54: 6762 ld a4,24(sp) - f56: 18d70b63 beq a4,a3,10ec <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - f5a: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - f5e: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - f60: 00f7a027 fsw fa5,0(a5) - f64: b95d j c1a <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - f66: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - f6a: 018da503 lw a0,24(s11) - f6e: 06055463 bgez a0,fd6 <_vscanf_core.constprop.0+0x6a6> - f72: 856e mv a0,s11 - f74: 903ff0ef jal 876 <_in_char.part.0> - num_buf[i++] = (char)c; - f78: 4d05 li s10,1 - f7a: b101 j b7a <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - f7c: 4581 li a1,0 - f7e: 1008 addi a0,sp,32 - f80: 696030ef jal 4616 - *va_arg(ap, int64 *) = val; - f84: 67a2 ld a5,8(sp) - if (len_mod == 2) - f86: 6762 ld a4,24(sp) - f88: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - f8a: 07a1 addi a5,a5,8 - if (len_mod == 2) - f8c: 16d70363 beq a4,a3,10f2 <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - f90: 6722 ld a4,8(sp) - else if (len_mod == 1) - f92: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - f94: 6314 ld a3,0(a4) - else if (len_mod == 1) - f96: 6762 ld a4,24(sp) - f98: 16c70163 beq a4,a2,10fa <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - f9c: c288 sw a0,0(a3) - assigned++; - f9e: 2b05 addiw s6,s6,1 - fa0: e43e sd a5,8(sp) - fa2: b9a5 j c1a <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - fa4: 040d0793 addi a5,s10,64 - fa8: 1018 addi a4,sp,32 - faa: 00e785b3 add a1,a5,a4 - fae: fc058023 sb zero,-64(a1) - if (i == 0) - fb2: 7ce6 ld s9,120(sp) - fb4: b70d j ed6 <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - fb6: 040d0793 addi a5,s10,64 - fba: 1018 addi a4,sp,32 - fbc: 00e78833 add a6,a5,a4 - fc0: fc080023 sb zero,-64(a6) - if (i == 0) - fc4: 7ce6 ld s9,120(sp) - fc6: b981 j c16 <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - fc8: 4301 li t1,0 - fca: 4685 li a3,1 - if (width > 0 && i >= width) - fcc: c12040e3 bgtz s2,bcc <_vscanf_core.constprop.0+0x29c> - fd0: b101 j bd0 <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - fd2: 4b01 li s6,0 - fd4: b2e9 j 99e <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - fd6: 56fd li a3,-1 - fd8: fce6 sd s9,120(sp) - fda: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - fde: 07800693 li a3,120 - fe2: 4641 li a2,16 - num_buf[i++] = (char)c; - fe4: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - fe6: badc09e3 beq s8,a3,b98 <_vscanf_core.constprop.0+0x268> - fea: 06900693 li a3,105 - fee: 4629 li a2,10 - num_buf[i++] = (char)c; - ff0: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - ff2: badc13e3 bne s8,a3,b98 <_vscanf_core.constprop.0+0x268> - ff6: 4601 li a2,0 - ff8: b645 j b98 <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - ffa: 56fd li a3,-1 - ffc: fce6 sd s9,120(sp) - ffe: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 1002: 4d05 li s10,1 - 1004: fd57869b addiw a3,a5,-43 - 1008: b171 j c94 <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 100a: 0017c583 lbu a1,1(a5) - 100e: 02d00693 li a3,45 - 1012: 0ed58f63 beq a1,a3,1110 <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 1016: 02b00693 li a3,43 - 101a: 10d58e63 beq a1,a3,1136 <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 101e: fd05861b addiw a2,a1,-48 - 1022: 0ff67513 zext.b a0,a2 - 1026: 45a5 li a1,9 - str++; - 1028: 00178693 addi a3,a5,1 - int esign = 1; - 102c: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 102e: 04a5ec63 bltu a1,a0,1086 <_vscanf_core.constprop.0+0x756> - 1032: 4525 li a0,9 - 1034: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 1038: 0029979b slliw a5,s3,0x2 - 103c: 013787bb addw a5,a5,s3 - 1040: 0017979b slliw a5,a5,0x1 - 1044: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 1048: fd05861b addiw a2,a1,-48 - 104c: 0ff67593 zext.b a1,a2 - str++; - 1050: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 1052: feb571e3 bgeu a0,a1,1034 <_vscanf_core.constprop.0+0x704> - while (eval--) - 1056: fff9879b addiw a5,s3,-1 - 105a: 12098463 beqz s3,1182 <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 105e: 00004717 auipc a4,0x4 - 1062: 77273687 fld fa3,1906(a4) # 57d0 - 1066: 00004717 auipc a4,0x4 - 106a: 77273707 fld fa4,1906(a4) # 57d8 - while (eval--) - 106e: 56fd li a3,-1 - 1070: 37fd addiw a5,a5,-1 - p *= 10.0; - 1072: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 1076: fed79de3 bne a5,a3,1070 <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 107a: 4785 li a5,1 - 107c: 00f80963 beq a6,a5,108e <_vscanf_core.constprop.0+0x75e> - val /= p; - 1080: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 1084: b5c9 j f46 <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 1086: 00004797 auipc a5,0x4 - 108a: 74a7b687 fld fa3,1866(a5) # 57d0 - val *= p; - 108e: 12d7f7d3 fmul.d fa5,fa5,fa3 - 1092: bd55 j f46 <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 1094: 00004797 auipc a5,0x4 - 1098: 7347b587 fld fa1,1844(a5) # 57c8 - 109c: 02114603 lbu a2,33(sp) - str++; - 10a0: 02110793 addi a5,sp,33 - 10a4: bd91 j ef8 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 10a6: 0017c683 lbu a3,1(a5) - 10aa: 45a5 li a1,9 - str++; - 10ac: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 10ae: fd06861b addiw a2,a3,-48 - 10b2: 0ff67513 zext.b a0,a2 - 10b6: e8a5e2e3 bltu a1,a0,f3a <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 10ba: 00004717 auipc a4,0x4 - 10be: 71e73707 fld fa4,1822(a4) # 57d8 - 10c2: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 10c6: 4525 li a0,9 - val += (*str - '0') / div; - 10c8: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 10cc: 0017c683 lbu a3,1(a5) - str++; - 10d0: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 10d2: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 10d6: fd06861b addiw a2,a3,-48 - 10da: 0ff67593 zext.b a1,a2 - div *= 10.0; - 10de: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 10e2: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 10e6: feb571e3 bgeu a0,a1,10c8 <_vscanf_core.constprop.0+0x798> - 10ea: bd81 j f3a <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 10ec: a39c fsd fa5,0(a5) - assigned++; - 10ee: 2b05 addiw s6,s6,1 - 10f0: b62d j c1a <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 10f2: 6722 ld a4,8(sp) - 10f4: 6314 ld a3,0(a4) - 10f6: e288 sd a0,0(a3) - 10f8: b55d j f9e <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 10fa: e288 sd a0,0(a3) - 10fc: b54d j f9e <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 10fe: 00004797 auipc a5,0x4 - 1102: 6d27b587 fld fa1,1746(a5) # 57d0 - 1106: 02114603 lbu a2,33(sp) - str++; - 110a: 02110793 addi a5,sp,33 - 110e: b3ed j ef8 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 1110: 0027c583 lbu a1,2(a5) - str++; - 1114: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 1118: 4525 li a0,9 - 111a: fd05861b addiw a2,a1,-48 - 111e: 0ff67793 zext.b a5,a2 - esign = -1; - 1122: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 1124: f0f577e3 bgeu a0,a5,1032 <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 1128: 00004797 auipc a5,0x4 - 112c: 6a87b687 fld fa3,1704(a5) # 57d0 - val /= p; - 1130: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 1134: bd09 j f46 <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 1136: 0027c583 lbu a1,2(a5) - str++; - 113a: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 113e: 4525 li a0,9 - 1140: fd05861b addiw a2,a1,-48 - 1144: 0ff67793 zext.b a5,a2 - 1148: f2f56fe3 bltu a0,a5,1086 <_vscanf_core.constprop.0+0x756> - int esign = 1; - 114c: 4805 li a6,1 - 114e: b5d5 j 1032 <_vscanf_core.constprop.0+0x702> - while (*p) - 1150: 001bc783 lbu a5,1(s7) - 1154: bed5 j d48 <_vscanf_core.constprop.0+0x418> - if (!suppress) - 1156: 9e0997e3 bnez s3,b44 <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 115a: 67e2 ld a5,24(sp) - 115c: 00078023 sb zero,0(a5) - 1160: b2d5 j b44 <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 1162: 040d0793 addi a5,s10,64 - 1166: 1018 addi a4,sp,32 - 1168: 97ba add a5,a5,a4 - 116a: fc078023 sb zero,-64(a5) - if (i == 0) - 116e: aa0d14e3 bnez s10,c16 <_vscanf_core.constprop.0+0x2e6> - 1172: b171 j dfe <_vscanf_core.constprop.0+0x4ce> - 1174: 4641 li a2,16 - if (width > 0 && i >= width) - 1176: a5204be3 bgtz s2,bcc <_vscanf_core.constprop.0+0x29c> - 117a: bc99 j bd0 <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 117c: 020100a3 sb zero,33(sp) - if (i == 0) - 1180: bb99 j ed6 <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 1182: 00004797 auipc a5,0x4 - 1186: 64e7b687 fld fa3,1614(a5) # 57d0 - 118a: bdc5 j 107a <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 118c: 67e2 ld a5,24(sp) - 118e: 01a786b3 add a3,a5,s10 - 1192: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 1196: 00adac23 sw a0,24(s11) - while (*p) - 119a: 001bc783 lbu a5,1(s7) - 119e: b6f5 j d8a <_vscanf_core.constprop.0+0x45a> - -00000000000011a0 <_out_char>: -{ - 11a0: 7179 addi sp,sp,-48 - 11a2: ec26 sd s1,24(sp) - if (ctx->stream) - 11a4: 6d04 ld s1,24(a0) -{ - 11a6: f022 sd s0,32(sp) - 11a8: f406 sd ra,40(sp) - 11aa: 842a mv s0,a0 - 11ac: 872e mv a4,a1 - if (ctx->stream) - 11ae: c0a1 beqz s1,11ee <_out_char+0x4e> - 11b0: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 11b2: 41c4a903 lw s2,1052(s1) - 11b6: 4789 li a5,2 - 11b8: 04f90d63 beq s2,a5,1212 <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 11bc: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 11c0: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 11c4: 0017861b addiw a2,a5,1 - 11c8: 40c4a823 sw a2,1040(s1) - 11cc: 97a6 add a5,a5,s1 - 11ce: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 11d2: 08c6c063 blt a3,a2,1252 <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 11d6: 4785 li a5,1 - 11d8: 04f90a63 beq s2,a5,122c <_out_char+0x8c> - ctx->written++; - 11dc: 681c ld a5,16(s0) - 11de: 6942 ld s2,16(sp) -} - 11e0: 70a2 ld ra,40(sp) - ctx->written++; - 11e2: 0785 addi a5,a5,1 - 11e4: e81c sd a5,16(s0) -} - 11e6: 7402 ld s0,32(sp) - 11e8: 64e2 ld s1,24(sp) - 11ea: 6145 addi sp,sp,48 - 11ec: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 11ee: 6514 ld a3,8(a0) - 11f0: 691c ld a5,16(a0) - 11f2: ca89 beqz a3,1204 <_out_char+0x64> - 11f4: 16fd addi a3,a3,-1 - 11f6: 00d7f763 bgeu a5,a3,1204 <_out_char+0x64> - ctx->buf[ctx->written] = c; - 11fa: 6114 ld a3,0(a0) - 11fc: 97b6 add a5,a5,a3 - 11fe: 00b78023 sb a1,0(a5) - ctx->written++; - 1202: 691c ld a5,16(a0) - 1204: 0785 addi a5,a5,1 -} - 1206: 70a2 ld ra,40(sp) - ctx->written++; - 1208: e81c sd a5,16(s0) -} - 120a: 7402 ld s0,32(sp) - 120c: 64e2 ld s1,24(sp) - 120e: 6145 addi sp,sp,48 - 1210: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 1212: 4088 lw a0,0(s1) - 1214: 4605 li a2,1 - 1216: 00f10593 addi a1,sp,15 - char ch = (char)c; - 121a: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 121e: e8bfe0ef jal a8 - 1222: 4785 li a5,1 - 1224: faf50ce3 beq a0,a5,11dc <_out_char+0x3c> - stream->error = 1; - 1228: c49c sw a5,8(s1) - return EOF; - 122a: bf4d j 11dc <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 122c: 47a9 li a5,10 - 122e: faf597e3 bne a1,a5,11dc <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 1232: fac055e3 blez a2,11dc <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 1236: 4088 lw a0,0(s1) - 1238: 01048593 addi a1,s1,16 - 123c: e6dfe0ef jal a8 - if (ret < stream->buf_write_pos) - 1240: 4104a783 lw a5,1040(s1) - 1244: 02f55063 bge a0,a5,1264 <_out_char+0xc4> - stream->error = 1; - 1248: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 124c: 4004a823 sw zero,1040(s1) - return EOF; - 1250: b771 j 11dc <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 1252: 4088 lw a0,0(s1) - 1254: 01048593 addi a1,s1,16 - 1258: e51fe0ef jal a8 - if (ret < stream->buf_write_pos) - 125c: 4104a783 lw a5,1040(s1) - 1260: 00f54563 blt a0,a5,126a <_out_char+0xca> - stream->buf_write_pos = 0; - 1264: 4004a823 sw zero,1040(s1) - 1268: bf95 j 11dc <_out_char+0x3c> - stream->error = 1; - 126a: 4785 li a5,1 - 126c: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 126e: 4004a823 sw zero,1040(s1) - return EOF; - 1272: b7ad j 11dc <_out_char+0x3c> - -0000000000001274 : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 1274: 00005797 auipc a5,0x5 - 1278: 68c78793 addi a5,a5,1676 # 6900 - 127c: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 1280: 0ca786a3 sb a0,205(a5) -} - 1284: 8082 ret - -0000000000001286 : - - 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) -{ - 1286: 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; - 128a: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 128e: 252523b7 lui t2,0x25252 - 1292: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524ad2d> -{ - 1296: 29913c23 sd s9,664(sp) - 129a: 29b13423 sd s11,648(sp) - int tlen = 0; - 129e: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12a0: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 12a4: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800888> -{ - 12a8: 2e813023 sd s0,736(sp) - 12ac: 2c913c23 sd s1,728(sp) - 12b0: 2d213823 sd s2,720(sp) - 12b4: 2d313423 sd s3,712(sp) - 12b8: 2b713423 sd s7,680(sp) - 12bc: 2b813023 sd s8,672(sp) - 12c0: 29a13823 sd s10,656(sp) - 12c4: 2e113423 sd ra,744(sp) - 12c8: 8d66 mv s10,s9 - 12ca: 8432 mv s0,a2 - 12cc: 8c9e mv s9,t2 - 12ce: 89aa mv s3,a0 - 12d0: e42e sd a1,8(sp) - 12d2: 84b6 mv s1,a3 - 12d4: 8bba mv s7,a4 - 12d6: fc02 sd zero,56(sp) - for (;;) { - 12d8: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 12da: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8707> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 12de: 20000c13 li s8,512 - 12e2: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 12e4: 0034f793 andi a5,s1,3 - 12e8: c7a9 beqz a5,1332 - if (f[0] == '%') - 12ea: 0004c783 lbu a5,0(s1) - 12ee: 02500713 li a4,37 - 12f2: 0ee78263 beq a5,a4,13d6 - if (f[0] == 0) - 12f6: cbd9 beqz a5,138c - stbsp__chk_cb_buf(1); - 12f8: 02098663 beqz s3,1324 - 12fc: 4124063b subw a2,s0,s2 - 1300: 1fe00713 li a4,510 - 1304: 02c75063 bge a4,a2,1324 - 1308: 65a2 ld a1,8(sp) - 130a: 854a mv a0,s2 - 130c: e81e sd t2,16(sp) - 130e: 00cd0d3b addw s10,s10,a2 - 1312: 9982 jalr s3 - 1314: 892a mv s2,a0 - 1316: e119 bnez a0,131c - 1318: 0200106f j 2338 - *bf++ = f[0]; - 131c: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 1320: 63c2 ld t2,16(sp) - 1322: 842a mv s0,a0 - ++f; - 1324: 0485 addi s1,s1,1 - *bf++ = f[0]; - 1326: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 132a: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 132e: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 1330: ffcd bnez a5,12ea - v = *(stbsp__uint32 *)f; - 1332: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 1334: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1338: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 133c: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1340: 01b7073b addw a4,a4,s11 - 1344: 8f7d and a4,a4,a5 - 1346: 2701 sext.w a4,a4 - 1348: f34d bnez a4,12ea - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 134a: 460d li a2,3 - 134c: a805 j 137c - if (callback) - 134e: 00098863 beqz s3,135e - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 1352: 412407b3 sub a5,s0,s2 - 1356: 40fc07bb subw a5,s8,a5 - 135a: f8f658e3 bge a2,a5,12ea - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 135e: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 1360: 40d4 lw a3,4(s1) - } - bf += 4; - 1362: 0411 addi s0,s0,4 - f += 4; - 1364: 0491 addi s1,s1,4 - c = (~v) & 0x80808080; - 1366: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 136a: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 136e: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 1372: 01b7073b addw a4,a4,s11 - 1376: 8f7d and a4,a4,a5 - 1378: 2701 sext.w a4,a4 - 137a: fb25 bnez a4,12ea - if ((v - 0x01010101) & c) - 137c: 01b6873b addw a4,a3,s11 - 1380: 8ff9 and a5,a5,a4 - 1382: 2781 sext.w a5,a5 - 1384: d7e9 beqz a5,134e - if (f[0] == 0) - 1386: 0004c783 lbu a5,0(s1) - 138a: f7bd bnez a5,12f8 -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 138c: 8cea mv s9,s10 - 138e: 412404bb subw s1,s0,s2 - if (!callback) - 1392: 70098563 beqz s3,1a9c - stbsp__flush_cb(); - 1396: 00905663 blez s1,13a2 - 139a: 65a2 ld a1,8(sp) - 139c: 8626 mv a2,s1 - 139e: 854a mv a0,s2 - 13a0: 9982 jalr s3 - 13a2: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 13a6: 2e813083 ld ra,744(sp) - 13aa: 2e013403 ld s0,736(sp) - 13ae: 2d813483 ld s1,728(sp) - 13b2: 2d013903 ld s2,720(sp) - 13b6: 2c813983 ld s3,712(sp) - 13ba: 2a813b83 ld s7,680(sp) - 13be: 2a013c03 ld s8,672(sp) - 13c2: 29013d03 ld s10,656(sp) - 13c6: 28813d83 ld s11,648(sp) - 13ca: 8566 mv a0,s9 - 13cc: 29813c83 ld s9,664(sp) - 13d0: 2f010113 addi sp,sp,752 - 13d4: 8082 ret - 13d6: 2d413023 sd s4,704(sp) - 13da: 2b513c23 sd s5,696(sp) - 13de: 2b613823 sd s6,688(sp) - tz = 0; - 13e2: 00248693 addi a3,s1,2 - fl = 0; - 13e6: 4e01 li t3,0 - switch (f[0]) { - 13e8: 03f00593 li a1,63 - 13ec: 00004617 auipc a2,0x4 - 13f0: d0460613 addi a2,a2,-764 # 50f0 <_GLOBAL__sub_I__ZSt3cin+0x148> - 13f4: fff6c783 lbu a5,-1(a3) - 13f8: fff68493 addi s1,a3,-1 - 13fc: fe07871b addiw a4,a5,-32 - 1400: 0ff77713 zext.b a4,a4 - 1404: 00e5ec63 bltu a1,a4,141c - 1408: 070a slli a4,a4,0x2 - 140a: 9732 add a4,a4,a2 - 140c: 4318 lw a4,0(a4) - 140e: 9732 add a4,a4,a2 - 1410: 8702 jr a4 - if (f[0] == '*') { - 1412: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 1416: 010e6e13 ori t3,t3,16 - ++f; - 141a: 0485 addi s1,s1,1 - if (f[0] == '*') { - 141c: 02a00713 li a4,42 - 1420: 0ce79163 bne a5,a4,14e2 - fw = va_arg(va, stbsp__uint32); - 1424: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 1428: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 142c: 0ba1 addi s7,s7,8 - ++f; - 142e: 0485 addi s1,s1,1 - if (f[0] == '.') { - 1430: 02e00713 li a4,46 - pr = -1; - 1434: 58fd li a7,-1 - if (f[0] == '.') { - 1436: 0ee78663 beq a5,a4,1522 - switch (f[0]) { - 143a: 04900713 li a4,73 - 143e: 10e78263 beq a5,a4,1542 - 1442: f987871b addiw a4,a5,-104 - 1446: 0ff77713 zext.b a4,a4 - 144a: 46c9 li a3,18 - 144c: 02e6e063 bltu a3,a4,146c - 1450: 00004697 auipc a3,0x4 - 1454: da068693 addi a3,a3,-608 # 51f0 <_GLOBAL__sub_I__ZSt3cin+0x248> - 1458: 070a slli a4,a4,0x2 - 145a: 9736 add a4,a4,a3 - 145c: 4318 lw a4,0(a4) - 145e: 9736 add a4,a4,a3 - 1460: 8702 jr a4 - if (f[0] == 'h') - 1462: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 1466: 020e6e13 ori t3,t3,32 - ++f; - 146a: 0485 addi s1,s1,1 - switch (f[0]) { - 146c: fbf7871b addiw a4,a5,-65 - 1470: 0ff77713 zext.b a4,a4 - 1474: 03700693 li a3,55 - 1478: 0ee6ea63 bltu a3,a4,156c - 147c: 00004697 auipc a3,0x4 - 1480: dc068693 addi a3,a3,-576 # 523c <_GLOBAL__sub_I__ZSt3cin+0x294> - 1484: 070a slli a4,a4,0x2 - 1486: 9736 add a4,a4,a3 - 1488: 4318 lw a4,0(a4) - 148a: 9736 add a4,a4,a3 - 148c: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 148e: 400e6e13 ori t3,t3,1024 - continue; - 1492: 0685 addi a3,a3,1 - 1494: b785 j 13f4 - fl |= STBSP__LEFTJUST; - 1496: 001e6e13 ori t3,t3,1 - continue; - 149a: 0685 addi a3,a3,1 - 149c: bfa1 j 13f4 - fl |= STBSP__LEADINGPLUS; - 149e: 002e6e13 ori t3,t3,2 - continue; - 14a2: 0685 addi a3,a3,1 - 14a4: bf81 j 13f4 - fl |= STBSP__TRIPLET_COMMA; - 14a6: 040e6e13 ori t3,t3,64 - continue; - 14aa: 0685 addi a3,a3,1 - 14ac: b7a1 j 13f4 - if (fl & STBSP__METRIC_SUFFIX) { - 14ae: 100e7793 andi a5,t3,256 - 14b2: 8772 mv a4,t3 - 14b4: 56078363 beqz a5,1a1a - if (fl & STBSP__METRIC_1024) { - 14b8: 6785 lui a5,0x1 - 14ba: 034e1513 slli a0,t3,0x34 - 14be: 80078793 addi a5,a5,-2048 # 800 - 14c2: 5c055863 bgez a0,1a92 - fl |= STBSP__METRIC_JEDEC; - 14c6: 6785 lui a5,0x1 - 14c8: 8f5d or a4,a4,a5 - 14ca: 00070e1b sext.w t3,a4 - 14ce: 0685 addi a3,a3,1 - 14d0: b715 j 13f4 - fl |= STBSP__LEADING_0X; - 14d2: 008e6e13 ori t3,t3,8 - continue; - 14d6: 0685 addi a3,a3,1 - 14d8: bf31 j 13f4 - fl |= STBSP__LEADINGSPACE; - 14da: 004e6e13 ori t3,t3,4 - continue; - 14de: 0685 addi a3,a3,1 - 14e0: bf11 j 13f4 - while ((f[0] >= '0') && (f[0] <= '9')) { - 14e2: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x6a0> - 14e6: 0ff77713 zext.b a4,a4 - 14ea: 4625 li a2,9 - fw = 0; - 14ec: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 14ee: 46a5 li a3,9 - 14f0: f4e660e3 bltu a2,a4,1430 - fw = fw * 10 + f[0] - '0'; - 14f4: 002b171b slliw a4,s6,0x2 - 14f8: 0167073b addw a4,a4,s6 - 14fc: 0017171b slliw a4,a4,0x1 - f++; - 1500: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 1502: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1504: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 1508: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 150c: fd07871b addiw a4,a5,-48 - 1510: 0ff77713 zext.b a4,a4 - 1514: fee6f0e3 bgeu a3,a4,14f4 - if (f[0] == '.') { - 1518: 02e00713 li a4,46 - pr = -1; - 151c: 58fd li a7,-1 - if (f[0] == '.') { - 151e: f0e79ee3 bne a5,a4,143a - if (f[0] == '*') { - 1522: 0014c783 lbu a5,1(s1) - 1526: 02a00713 li a4,42 - 152a: 52e79763 bne a5,a4,1a58 - while ((f[0] >= '0') && (f[0] <= '9')) { - 152e: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 1532: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 1536: 000ba883 lw a7,0(s7) - ++f; - 153a: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 153c: 0ba1 addi s7,s7,8 - switch (f[0]) { - 153e: f0e792e3 bne a5,a4,1442 - if ((f[1] == '6') && (f[2] == '4')) { - 1542: 0014c783 lbu a5,1(s1) - 1546: 03600713 li a4,54 - 154a: 00e79463 bne a5,a4,1552 - 154e: 1e60106f j 2734 - } else if ((f[1] == '3') && (f[2] == '2')) { - 1552: 03300713 li a4,51 - 1556: 6ae796e3 bne a5,a4,2402 - 155a: 0024c683 lbu a3,2(s1) - 155e: 03200713 li a4,50 - 1562: 00e69463 bne a3,a4,156a - 1566: 0ae0106f j 2614 - ++f; - 156a: 0485 addi s1,s1,1 - *s = f[0]; - 156c: 26f10fa3 sb a5,639(sp) - l = 1; - 1570: 4785 li a5,1 - 1572: d0be sw a5,96(sp) - lead[0] = 0; - 1574: 06010423 sb zero,104(sp) - tail[0] = 0; - 1578: 06010823 sb zero,112(sp) - dp = 0; - 157c: d282 sw zero,100(sp) - 157e: e0de sd s7,64(sp) - 1580: 4701 li a4,0 - 1582: 4301 li t1,0 - 1584: 4f81 li t6,0 - 1586: 4685 li a3,1 - 1588: 4a01 li s4,0 - cs = 0; - 158a: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 158c: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 1590: 4e01 li t3,0 - tz = 0; - 1592: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 1594: 010e7793 andi a5,t3,16 - 1598: 40078ee3 beqz a5,21b4 - pr = (fw > pr) ? fw : pr; - 159c: 87ba mv a5,a4 - 159e: 00675363 bge a4,t1,15a4 - 15a2: 879a mv a5,t1 - 15a4: 0007871b sext.w a4,a5 - fw = 0; - 15a8: 4301 li t1,0 - if (fw + pr) { - 15aa: 62070563 beqz a4,1bd4 - sn = lead + 1; - 15ae: 06910793 addi a5,sp,105 - 15b2: fcbe sd a5,120(sp) - while (lead[0]) { - 15b4: 0a0a0863 beqz s4,1664 - stbsp__cb_buf_clamp(i, lead[0]); - 15b8: f026 sd s1,32(sp) - 15ba: f436 sd a3,40(sp) - 15bc: 854a mv a0,s2 - 15be: 86d2 mv a3,s4 - 15c0: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 15c2: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 15c6: 89be mv s3,a5 - 15c8: 20000b13 li s6,512 - 15cc: 87a2 mv a5,s0 - 15ce: e846 sd a7,16(sp) - 15d0: 846a mv s0,s10 - 15d2: ec7e sd t6,24(sp) - 15d4: 8d6e mv s10,s11 - 15d6: f872 sd t3,48(sp) - 15d8: 8de6 mv s11,s9 - 15da: 8a3a mv s4,a4 - 15dc: e496 sd t0,72(sp) - 15de: 891a mv s2,t1 - 15e0: 8c9e mv s9,t2 - 15e2: 0006871b sext.w a4,a3 - 15e6: 2e0482e3 beqz s1,20ca - 15ea: 40a7863b subw a2,a5,a0 - 15ee: 40cb083b subw a6,s6,a2 - 15f2: 85c2 mv a1,a6 - 15f4: 01075363 bge a4,a6,15fa - 15f8: 85ba mv a1,a4 - lead[0] -= (char)i; - 15fa: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 15fc: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 1600: 06d10423 sb a3,104(sp) - while (i) { - 1604: c70d beqz a4,162e - 1606: 7866 ld a6,120(sp) - 1608: 02071593 slli a1,a4,0x20 - 160c: 9181 srli a1,a1,0x20 - 160e: 00b78633 add a2,a5,a1 - 1612: 8742 mv a4,a6 - *bf++ = *sn++; - 1614: 00074683 lbu a3,0(a4) - 1618: 0785 addi a5,a5,1 - while (i) { - 161a: 0705 addi a4,a4,1 - *bf++ = *sn++; - 161c: fed78fa3 sb a3,-1(a5) - while (i) { - 1620: fec79ae3 bne a5,a2,1614 - 1624: 982e add a6,a6,a1 - 1626: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 1628: c899 beqz s1,163e - 162a: 40a7863b subw a2,a5,a0 - 162e: 00cbd863 bge s7,a2,163e - 1632: 65a2 ld a1,8(sp) - 1634: 9c31 addw s0,s0,a2 - 1636: 9482 jalr s1 - 1638: 34050ee3 beqz a0,2194 - 163c: 87aa mv a5,a0 - while (lead[0]) { - 163e: 06814683 lbu a3,104(sp) - 1642: f2c5 bnez a3,15e2 - 1644: 83e6 mv t2,s9 - 1646: 68c2 ld a7,16(sp) - 1648: 8cee mv s9,s11 - 164a: 6fe2 ld t6,24(sp) - 164c: 8dea mv s11,s10 - 164e: 76a2 ld a3,40(sp) - 1650: 8d22 mv s10,s0 - 1652: 7e42 ld t3,48(sp) - 1654: 843e mv s0,a5 - 1656: 62a6 ld t0,72(sp) - 1658: 87ce mv a5,s3 - 165a: 89a6 mv s3,s1 - 165c: 7482 ld s1,32(sp) - 165e: 834a mv t1,s2 - 1660: 8752 mv a4,s4 - 1662: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 1664: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 1668: 0182d61b srliw a2,t0,0x18 - 166c: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 1670: 4a01 li s4,0 - 1672: 000b0e63 beqz s6,168e - cs &= 0xffffff; - 1676: 02829a13 slli s4,t0,0x28 - 167a: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 167e: 00ea0a3b addw s4,s4,a4 - 1682: 0016059b addiw a1,a2,1 - 1686: 02ba7a3b remuw s4,s4,a1 - 168a: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 168e: 0ce05763 blez a4,175c - *(stbsp__uint32 *)bf = 0x30303030; - 1692: 30303837 lui a6,0x30303 - 1696: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb838> - 169a: f026 sd s1,32(sp) - 169c: 854a mv a0,s2 - 169e: 84da mv s1,s6 - 16a0: 895e mv s2,s7 - 16a2: e4d6 sd s5,72(sp) - 16a4: 8b4e mv s6,s3 - 16a6: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 16a8: 1fe00293 li t0,510 - 16ac: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 16ae: 00005f17 auipc t5,0x5 - 16b2: 252f0f13 addi t5,t5,594 # 6900 - 16b6: 8de6 mv s11,s9 - *bf++ = '0'; - 16b8: 03000e93 li t4,48 - 16bc: e846 sd a7,16(sp) - 16be: ec7e sd t6,24(sp) - 16c0: f436 sd a3,40(sp) - 16c2: f872 sd t3,48(sp) - 16c4: e89a sd t1,80(sp) - 16c6: 89ba mv s3,a4 - 16c8: ecbe sd a5,88(sp) - 16ca: 8bc2 mv s7,a6 - 16cc: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 16ce: 240b0ee3 beqz s6,212a - 16d2: 40a407b3 sub a5,s0,a0 - 16d6: 40fc063b subw a2,s8,a5 - 16da: 87b2 mv a5,a2 - 16dc: 00c9d363 bge s3,a2,16e2 - 16e0: 87ce mv a5,s3 - 16e2: 0007859b sext.w a1,a5 - pr -= i; - 16e6: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 16ea: 32048c63 beqz s1,1a22 - while (i) { - 16ee: 34058a63 beqz a1,1a42 - 16f2: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 16f4: 0cdf4603 lbu a2,205(t5) - 16f8: 9181 srli a1,a1,0x20 - 16fa: 95a2 add a1,a1,s0 - 16fc: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 16fe: c481 beqz s1,1706 - 1700: 1d4901e3 beq s2,s4,20c2 - 1704: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 1706: 03000793 li a5,48 - 170a: fef40fa3 sb a5,-1(s0) - while (i) { - 170e: fe8597e3 bne a1,s0,16fc - stbsp__chk_cb_buf(1); - 1712: 320b0b63 beqz s6,1a48 - 1716: 40a5863b subw a2,a1,a0 - 171a: 32c2d763 bge t0,a2,1a48 - 171e: 65a2 ld a1,8(sp) - 1720: 01560abb addw s5,a2,s5 - 1724: 9b02 jalr s6 - 1726: 3a050ce3 beqz a0,22de - 172a: 842a mv s0,a0 - 172c: 1fe00293 li t0,510 - 1730: 00005f17 auipc t5,0x5 - 1734: 1d0f0f13 addi t5,t5,464 # 6900 - 1738: 03000e93 li t4,48 - while (pr > 0) { - 173c: f93049e3 bgtz s3,16ce - while (lead[0]) { - 1740: 83e6 mv t2,s9 - 1742: 68c2 ld a7,16(sp) - 1744: 8cee mv s9,s11 - 1746: 6fe2 ld t6,24(sp) - 1748: 8dea mv s11,s10 - 174a: 7482 ld s1,32(sp) - 174c: 8d56 mv s10,s5 - 174e: 76a2 ld a3,40(sp) - 1750: 7e42 ld t3,48(sp) - 1752: 6346 ld t1,80(sp) - 1754: 67e6 ld a5,88(sp) - 1756: 6aa6 ld s5,72(sp) - 1758: 892a mv s2,a0 - 175a: 89da mv s3,s6 - 175c: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 1760: fcbe sd a5,120(sp) - while (lead[0]) { - 1762: 0a0a0263 beqz s4,1806 - stbsp__cb_buf_clamp(i, lead[0]); - 1766: ec26 sd s1,24(sp) - 1768: f036 sd a3,32(sp) - 176a: 854a mv a0,s2 - 176c: 86d2 mv a3,s4 - 176e: 84ce mv s1,s3 - 1770: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 1772: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 1776: 846a mv s0,s10 - 1778: 20000b13 li s6,512 - 177c: 8d6e mv s10,s11 - 177e: e846 sd a7,16(sp) - 1780: 8de6 mv s11,s9 - 1782: 8a7e mv s4,t6 - 1784: 8972 mv s2,t3 - 1786: 899a mv s3,t1 - 1788: 8c9e mv s9,t2 - 178a: 0006871b sext.w a4,a3 - 178e: 140482e3 beqz s1,20d2 - 1792: 40a7863b subw a2,a5,a0 - 1796: 40cb083b subw a6,s6,a2 - 179a: 85c2 mv a1,a6 - 179c: 01075363 bge a4,a6,17a2 - 17a0: 85ba mv a1,a4 - lead[0] -= (char)i; - 17a2: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 17a4: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 17a8: 06d10423 sb a3,104(sp) - while (i) { - 17ac: c70d beqz a4,17d6 - 17ae: 7866 ld a6,120(sp) - 17b0: 02071593 slli a1,a4,0x20 - 17b4: 9181 srli a1,a1,0x20 - 17b6: 00b78633 add a2,a5,a1 - 17ba: 8742 mv a4,a6 - *bf++ = *sn++; - 17bc: 00074683 lbu a3,0(a4) - 17c0: 0785 addi a5,a5,1 - while (i) { - 17c2: 0705 addi a4,a4,1 - *bf++ = *sn++; - 17c4: fed78fa3 sb a3,-1(a5) - while (i) { - 17c8: fec79ae3 bne a5,a2,17bc - 17cc: 982e add a6,a6,a1 - 17ce: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 17d0: c899 beqz s1,17e6 - 17d2: 40a7863b subw a2,a5,a0 - 17d6: 00cbd863 bge s7,a2,17e6 - 17da: 65a2 ld a1,8(sp) - 17dc: 9c31 addw s0,s0,a2 - 17de: 9482 jalr s1 - 17e0: 1a050ae3 beqz a0,2194 - 17e4: 87aa mv a5,a0 - while (lead[0]) { - 17e6: 06814683 lbu a3,104(sp) - 17ea: f2c5 bnez a3,178a - 17ec: 834e mv t1,s3 - 17ee: 68c2 ld a7,16(sp) - 17f0: 89a6 mv s3,s1 - 17f2: 7682 ld a3,32(sp) - 17f4: 64e2 ld s1,24(sp) - 17f6: 8e4a mv t3,s2 - 17f8: 83e6 mv t2,s9 - 17fa: 8fd2 mv t6,s4 - 17fc: 8cee mv s9,s11 - 17fe: 892a mv s2,a0 - 1800: 8dea mv s11,s10 - 1802: 8d22 mv s10,s0 - 1804: 843e mv s0,a5 - while (n) { - 1806: c6f9 beqz a3,18d4 - STBSP__UNALIGNED(while (i >= 4) { - 1808: ec26 sd s1,24(sp) - 180a: 854a mv a0,s2 - 180c: 84d6 mv s1,s5 - 180e: 896a mv s2,s10 - 1810: 87a2 mv a5,s0 - 1812: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 1814: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 1818: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 181a: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 181e: 4a0d li s4,3 - 1820: e87e sd t6,16(sp) - 1822: f072 sd t3,32(sp) - 1824: 8ac6 mv s5,a7 - 1826: f41a sd t1,40(sp) - 1828: 8436 mv s0,a3 - 182a: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 182c: 0004071b sext.w a4,s0 - 1830: 100982e3 beqz s3,2134 - 1834: 40a78633 sub a2,a5,a0 - 1838: 40cb05bb subw a1,s6,a2 - 183c: 862e mv a2,a1 - 183e: 00b75363 bge a4,a1,1844 - 1842: 863a mv a2,a4 - 1844: 0006071b sext.w a4,a2 - n -= i; - 1848: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 184a: 14ea50e3 bge s4,a4,218a - 184e: ffc70f1b addiw t5,a4,-4 - 1852: 002f5e9b srliw t4,t5,0x2 - 1856: 001e8e1b addiw t3,t4,1 - 185a: 0e0a slli t3,t3,0x2 - 185c: 01c785b3 add a1,a5,t3 - 1860: 8626 mv a2,s1 - 1862: 4218 lw a4,0(a2) - 1864: 0791 addi a5,a5,4 - 1866: 0611 addi a2,a2,4 - 1868: 2701 sext.w a4,a4 - 186a: fee7ae23 sw a4,-4(a5) - 186e: feb79ae3 bne a5,a1,1862 - 1872: 002e9e9b slliw t4,t4,0x2 - 1876: 41df073b subw a4,t5,t4 - while (i) { - 187a: 94f2 add s1,s1,t3 - 187c: c31d beqz a4,18a2 - 187e: 8626 mv a2,s1 - 1880: 87ae mv a5,a1 - 1882: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 1886: 00064e83 lbu t4,0(a2) - 188a: 0785 addi a5,a5,1 - while (i) { - 188c: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 1890: ffd78fa3 sb t4,-1(a5) - 1894: 0605 addi a2,a2,1 - while (i) { - 1896: ffcf18e3 bne t5,t3,1886 - 189a: 1702 slli a4,a4,0x20 - 189c: 9301 srli a4,a4,0x20 - 189e: 95ba add a1,a1,a4 - 18a0: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 18a2: 1a098763 beqz s3,1a50 - 18a6: 40a5863b subw a2,a1,a0 - 18aa: 1acbd363 bge s7,a2,1a50 - 18ae: 65a2 ld a1,8(sp) - 18b0: 0126093b addw s2,a2,s2 - 18b4: 9982 jalr s3 - 18b6: 20050be3 beqz a0,22cc - 18ba: 87aa mv a5,a0 - while (n) { - 18bc: f825 bnez s0,182c - 18be: 6fc2 ld t6,16(sp) - 18c0: 64e2 ld s1,24(sp) - 18c2: 7e02 ld t3,32(sp) - 18c4: 7322 ld t1,40(sp) - 18c6: 83e6 mv t2,s9 - 18c8: 88d6 mv a7,s5 - 18ca: 8cee mv s9,s11 - 18cc: 843e mv s0,a5 - 18ce: 8dea mv s11,s10 - 18d0: 8d4a mv s10,s2 - 18d2: 892a mv s2,a0 - while (tz) { - 18d4: 08088863 beqz a7,1964 - *(stbsp__uint32 *)bf = 0x30303030; - 18d8: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 18dc: 03000a13 li s4,48 - while (i >= 4) { - 18e0: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 18e2: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 18e6: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb838> - stbsp__cb_buf_clamp(i, tz); - 18ea: 20000b93 li s7,512 - 18ee: 040989e3 beqz s3,2140 - 18f2: 41240633 sub a2,s0,s2 - 18f6: 40cb87bb subw a5,s7,a2 - 18fa: 873e mv a4,a5 - 18fc: 00f8d363 bge a7,a5,1902 - 1900: 8746 mv a4,a7 - 1902: 0007079b sext.w a5,a4 - tz -= i; - 1906: 40e888bb subw a7,a7,a4 - while (i) { - 190a: 08078ee3 beqz a5,21a6 - if ((((stbsp__uintptr)bf) & 3) == 0) - 190e: 00347713 andi a4,s0,3 - 1912: e719 bnez a4,1920 - 1914: 0390006f j 214c - 1918: 00347713 andi a4,s0,3 - 191c: 7a070f63 beqz a4,20da - *bf++ = '0'; - 1920: 01440023 sb s4,0(s0) - --i; - 1924: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 1926: 0405 addi s0,s0,1 - while (i) { - 1928: fbe5 bnez a5,1918 - stbsp__chk_cb_buf(1); - 192a: 02098b63 beqz s3,1960 - 192e: 4124063b subw a2,s0,s2 - 1932: 02c6d763 bge a3,a2,1960 - 1936: 65a2 ld a1,8(sp) - 1938: 854a mv a0,s2 - 193a: f81e sd t2,48(sp) - 193c: f41a sd t1,40(sp) - 193e: f072 sd t3,32(sp) - 1940: ec7e sd t6,24(sp) - 1942: e846 sd a7,16(sp) - 1944: 00cd0d3b addw s10,s10,a2 - 1948: 9982 jalr s3 - 194a: 892a mv s2,a0 - 194c: 1a0502e3 beqz a0,22f0 - 1950: 73c2 ld t2,48(sp) - 1952: 7322 ld t1,40(sp) - 1954: 7e02 ld t3,32(sp) - 1956: 6fe2 ld t6,24(sp) - 1958: 68c2 ld a7,16(sp) - 195a: 842a mv s0,a0 - 195c: 1fe00693 li a3,510 - while (tz) { - 1960: f80897e3 bnez a7,18ee - sn = tail + 1; - 1964: 07110793 addi a5,sp,113 - 1968: fcbe sd a5,120(sp) - while (tail[0]) { - 196a: 080f8763 beqz t6,19f8 - stbsp__cb_buf_clamp(i, tail[0]); - 196e: 854a mv a0,s2 - 1970: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 1972: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 1976: 8d4e mv s10,s3 - 1978: 20000a13 li s4,512 - 197c: 8bf2 mv s7,t3 - 197e: 891a mv s2,t1 - 1980: 899e mv s3,t2 - 1982: 000f879b sext.w a5,t6 - 1986: 7c0d0863 beqz s10,2156 - 198a: 40a4063b subw a2,s0,a0 - 198e: 40ca06bb subw a3,s4,a2 - 1992: 8736 mv a4,a3 - 1994: 00d7d363 bge a5,a3,199a - 1998: 873e mv a4,a5 - tail[0] -= (char)i; - 199a: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 199e: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 19a2: 07f10823 sb t6,112(sp) - while (i) { - 19a6: c795 beqz a5,19d2 - 19a8: 75e6 ld a1,120(sp) - 19aa: 02079613 slli a2,a5,0x20 - 19ae: 9201 srli a2,a2,0x20 - 19b0: 00c406b3 add a3,s0,a2 - 19b4: 87ae mv a5,a1 - *bf++ = *sn++; - 19b6: 0007c703 lbu a4,0(a5) - 19ba: 0405 addi s0,s0,1 - while (i) { - 19bc: 0785 addi a5,a5,1 - *bf++ = *sn++; - 19be: fee40fa3 sb a4,-1(s0) - while (i) { - 19c2: fed41ae3 bne s0,a3,19b6 - 19c6: 95b2 add a1,a1,a2 - 19c8: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 19ca: 000d0d63 beqz s10,19e4 - 19ce: 40a4063b subw a2,s0,a0 - 19d2: 00cad963 bge s5,a2,19e4 - 19d6: 65a2 ld a1,8(sp) - 19d8: 00cb0b3b addw s6,s6,a2 - 19dc: 9d02 jalr s10 - 19de: 200509e3 beqz a0,23f0 - 19e2: 842a mv s0,a0 - while (tail[0]) { - 19e4: 07014f83 lbu t6,112(sp) - 19e8: f80f9de3 bnez t6,1982 - 19ec: 834a mv t1,s2 - 19ee: 83ce mv t2,s3 - 19f0: 8e5e mv t3,s7 - 19f2: 89ea mv s3,s10 - 19f4: 892a mv s2,a0 - 19f6: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 19f8: 001e7e13 andi t3,t3,1 - 19fc: 000e0663 beqz t3,1a08 - if (fw > 0) { - 1a00: 00605463 blez t1,1a08 - 1a04: 0300106f j 2a34 - for (;;) { - 1a08: 6b86 ld s7,64(sp) - 1a0a: 2c013a03 ld s4,704(sp) - 1a0e: 2b813a83 ld s5,696(sp) - 1a12: 2b013b03 ld s6,688(sp) - ++f; - 1a16: 0485 addi s1,s1,1 - for (;;) { - 1a18: b0f1 j 12e4 - fl |= STBSP__METRIC_SUFFIX; - 1a1a: 100e6e13 ori t3,t3,256 - continue; - 1a1e: 0685 addi a3,a3,1 - 1a20: bad1 j 13f4 - while (i) { - 1a22: 0e0580e3 beqz a1,2302 - if ((((stbsp__uintptr)bf) & 3) == 0) - 1a26: 00347793 andi a5,s0,3 - 1a2a: e799 bnez a5,1a38 - 1a2c: 0dd0006f j 2308 - 1a30: 00347793 andi a5,s0,3 - 1a34: 72078463 beqz a5,215c - *bf++ = '0'; - 1a38: 01d40023 sb t4,0(s0) - --i; - 1a3c: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 1a3e: 0405 addi s0,s0,1 - while (i) { - 1a40: f9e5 bnez a1,1a30 - while (i) { - 1a42: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 1a44: cc0b19e3 bnez s6,1716 - 1a48: 842e mv s0,a1 - while (pr > 0) { - 1a4a: c93042e3 bgtz s3,16ce - 1a4e: b9cd j 1740 - while (i) { - 1a50: 87ae mv a5,a1 - while (n) { - 1a52: dc041de3 bnez s0,182c - 1a56: b5a5 j 18be - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a58: fd07871b addiw a4,a5,-48 - 1a5c: 0ff77713 zext.b a4,a4 - 1a60: 4625 li a2,9 - ++f; - 1a62: 0485 addi s1,s1,1 - pr = 0; - 1a64: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a66: 46a5 li a3,9 - 1a68: 9ce669e3 bltu a2,a4,143a - pr = pr * 10 + f[0] - '0'; - 1a6c: 0028971b slliw a4,a7,0x2 - 1a70: 0117073b addw a4,a4,a7 - 1a74: 0017171b slliw a4,a4,0x1 - f++; - 1a78: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 1a7a: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a7c: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 1a80: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 1a84: fd07871b addiw a4,a5,-48 - 1a88: 0ff77713 zext.b a4,a4 - 1a8c: fee6f0e3 bgeu a3,a4,1a6c - 1a90: b26d j 143a - fl |= STBSP__METRIC_1024; - 1a92: 8f5d or a4,a4,a5 - 1a94: 00070e1b sext.w t3,a4 - 1a98: 0685 addi a3,a3,1 - 1a9a: baa9 j 13f4 - *bf = 0; - 1a9c: 00040023 sb zero,0(s0) - 1aa0: b209 j 13a2 - if (f[0] == 'l') { - 1aa2: 0014c783 lbu a5,1(s1) - 1aa6: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 1aaa: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 1aae: 00e78c63 beq a5,a4,1ac6 - ++f; - 1ab2: 0485 addi s1,s1,1 - 1ab4: ba65 j 146c - if (f[0] == 'h') - 1ab6: 0014c783 lbu a5,1(s1) - 1aba: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 1abe: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 1ac2: fee798e3 bne a5,a4,1ab2 - if ((f[1] == '6') && (f[2] == '4')) { - 1ac6: 0024c783 lbu a5,2(s1) - ++f; - 1aca: 0489 addi s1,s1,2 - 1acc: b245 j 146c - s = va_arg(va, char *); - 1ace: 008b8713 addi a4,s7,8 - 1ad2: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 1ad4: 020e7693 andi a3,t3,32 - 1ad8: 8772 mv a4,t3 - 1ada: 24069ee3 bnez a3,2536 - stbsp__int32 i = va_arg(va, stbsp__int32); - 1ade: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 1ae2: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 1ae6: 02069f13 slli t5,a3,0x20 - 1aea: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 1aee: 00c78a63 beq a5,a2,1b02 - 1af2: 0006d863 bgez a3,1b02 - fl |= STBSP__NEGATIVE; - 1af6: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 1afa: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 1afe: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 1b02: 100e7693 andi a3,t3,256 - 1b06: 5c0683e3 beqz a3,28cc - if (n64 < 1024) - 1b0a: 3ff00793 li a5,1023 - 1b0e: 01e7e463 bltu a5,t5,1b16 - 1b12: 0ea0106f j 2bfc - else if (pr == -1) - 1b16: 57fd li a5,-1 - 1b18: 30f887e3 beq a7,a5,2626 - fv = (double)(stbsp__int64)n64; - 1b1c: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 1b20: 034e1793 slli a5,t3,0x34 - 1b24: 0007c463 bltz a5,1b2c - 1b28: 2300106f j 2d58 - divisor = 1024.0; - 1b2c: 00004797 auipc a5,0x4 - 1b30: cb47b787 fld fa5,-844(a5) # 57e0 - if ((fv < divisor) && (fv > -divisor)) - 1b34: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 1b38: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 1b3c: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 1b40: a2f517d3 flt.d a5,fa0,fa5 - 1b44: c789 beqz a5,1b4e - 1b46: a2a717d3 flt.d a5,fa4,fa0 - 1b4a: 3e079863 bnez a5,1f3a - fl += 0x1000000; - 1b4e: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 1b52: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 1b56: feee65e3 bltu t3,a4,1b40 - 1b5a: a6c5 j 1f3a - h = (f[0] == 'X') ? hexu : hex; - 1b5c: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 1b60: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 1b64: 00005817 auipc a6,0x5 - 1b68: e8480813 addi a6,a6,-380 # 69e8 - 1b6c: 00d79663 bne a5,a3,1b78 - 1b70: 00005817 auipc a6,0x5 - 1b74: e6080813 addi a6,a6,-416 # 69d0 - l = (4 << 4) | (4 << 8); - 1b78: 44000793 li a5,1088 - 1b7c: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 1b7e: 008e7793 andi a5,t3,8 - 1b82: 7a079263 bnez a5,2326 - lead[0] = 0; - 1b86: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 1b8a: 008b8793 addi a5,s7,8 - 1b8e: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 1b90: 72070b63 beqz a4,22c6 - n64 = va_arg(va, stbsp__uint64); - 1b94: 000bb683 ld a3,0(s7) - dp = 0; - 1b98: d282 sw zero,100(sp) - tail[0] = 0; - 1b9a: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1b9e: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 1ba2: 380694e3 bnez a3,272a - lead[0] = 0; - 1ba6: 06010423 sb zero,104(sp) - if (pr == 0) { - 1baa: 78089a63 bnez a7,233e - if (fw < (stbsp__int32)n) - 1bae: fffb4313 not t1,s6 - 1bb2: 43f35313 srai t1,t1,0x3f - l = 0; - 1bb6: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 1bb8: 01637333 and t1,t1,s6 - goto scopy; - 1bbc: 4701 li a4,0 - 1bbe: 4f81 li t6,0 - 1bc0: 4a01 li s4,0 - cs = 0; - 1bc2: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 1bc4: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 1bc8: 9c0506e3 beqz a0,1594 - if (fw + pr) { - 1bcc: 00e307bb addw a5,t1,a4 - 1bd0: 9c079fe3 bnez a5,15ae - 1bd4: 06910793 addi a5,sp,105 - 1bd8: b661 j 1760 - h = (f[0] == 'E') ? hexu : hex; - 1bda: 04500713 li a4,69 - 1bde: 00005317 auipc t1,0x5 - 1be2: e0a30313 addi t1,t1,-502 # 69e8 - 1be6: 1ce78ae3 beq a5,a4,25ba - fv = va_arg(va, double); - 1bea: 008b8713 addi a4,s7,8 - if (pr == -1) - 1bee: 57fd li a5,-1 - fv = va_arg(va, double); - 1bf0: e0ba sd a4,64(sp) - 1bf2: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1bf6: 1af88ce3 beq a7,a5,25ae - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1bfa: 80000737 lui a4,0x80000 - 1bfe: 00e8e733 or a4,a7,a4 - 1c02: 2701 sext.w a4,a4 - 1c04: 10d4 addi a3,sp,100 - 1c06: 0110 addi a2,sp,128 - 1c08: 108c addi a1,sp,96 - 1c0a: 18a8 addi a0,sp,120 - 1c0c: f41e sd t2,40(sp) - 1c0e: f01a sd t1,32(sp) - 1c10: ec72 sd t3,24(sp) - 1c12: e846 sd a7,16(sp) - 1c14: d8efe0ef jal 1a2 - 1c18: 68c2 ld a7,16(sp) - 1c1a: 6e62 ld t3,24(sp) - 1c1c: 7302 ld t1,32(sp) - 1c1e: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 1c20: 5796 lw a5,100(sp) - s = (char *)sn; - 1c22: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 1c24: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 1c26: 3c0511e3 bnez a0,27e8 - tail[0] = 0; - 1c2a: 06010823 sb zero,112(sp) - sign[0] = 0; - 1c2e: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 1c32: 004e7713 andi a4,t3,4 - 1c36: 6a070ee3 beqz a4,2af2 - sign[0] = 1; - 1c3a: 6709 lui a4,0x2 - 1c3c: 0705 addi a4,a4,1 # 2001 - 1c3e: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1c42: 671d lui a4,0x7 - 1c44: 1ee794e3 bne a5,a4,262c - if (pr < (stbsp__int32)l) - 1c48: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c4c: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 1c50: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 1c54: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 1c58: 97fd srai a5,a5,0x3f - 1c5a: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 1c5c: 00fa073b addw a4,s4,a5 - 1c60: 01f7063b addw a2,a4,t6 - 1c64: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1c66: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 1c6a: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 1c6c: 835a mv t1,s6 - 1c6e: 00cb5363 bge s6,a2,1c74 - 1c72: 8332 mv t1,a2 - fw -= n; - 1c74: 40e3033b subw t1,t1,a4 - cs = 0; - 1c78: 4281 li t0,0 - pr -= l; - 1c7a: 40d7873b subw a4,a5,a3 - tz = 0; - 1c7e: 4881 li a7,0 - goto scopy; - 1c80: b7a1 j 1bc8 - h = (f[0] == 'G') ? hexu : hex; - 1c82: 04700713 li a4,71 - 1c86: 00005317 auipc t1,0x5 - 1c8a: d6230313 addi t1,t1,-670 # 69e8 - 1c8e: 14e783e3 beq a5,a4,25d4 - fv = va_arg(va, double); - 1c92: 008b8713 addi a4,s7,8 - if (pr == -1) - 1c96: 57fd li a5,-1 - fv = va_arg(va, double); - 1c98: e0ba sd a4,64(sp) - 1c9a: 000bb507 fld fa0,0(s7) - if (pr == -1) - 1c9e: 12f884e3 beq a7,a5,25c6 - else if (pr == 0) - 1ca2: 6e0887e3 beqz a7,2b90 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1ca6: fff8871b addiw a4,a7,-1 - 1caa: 800007b7 lui a5,0x80000 - 1cae: 8f5d or a4,a4,a5 - 1cb0: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 1cb2: 00088a9b sext.w s5,a7 - 1cb6: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 1cb8: 10d4 addi a3,sp,100 - 1cba: 0110 addi a2,sp,128 - 1cbc: 108c addi a1,sp,96 - 1cbe: 18a8 addi a0,sp,120 - 1cc0: f01e sd t2,32(sp) - 1cc2: ec1a sd t1,24(sp) - 1cc4: e872 sd t3,16(sp) - 1cc6: cdcfe0ef jal 1a2 - 1cca: 6e42 ld t3,16(sp) - 1ccc: 6362 ld t1,24(sp) - 1cce: 7382 ld t2,32(sp) - 1cd0: 4281 li t0,0 - 1cd2: c509 beqz a0,1cdc - fl |= STBSP__NEGATIVE; - 1cd4: 080e6e13 ori t3,t3,128 - 1cd8: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 1cdc: 5806 lw a6,96(sp) - 1cde: 010af463 bgeu s5,a6,1ce6 - l = pr; - 1ce2: d0d6 sw s5,96(sp) - 1ce4: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1ce6: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1ce8: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1cea: 01076463 bltu a4,a6,1cf2 - 1cee: 1800106f j 2e6e - 1cf2: 7be6 ld s7,120(sp) - 1cf4: fff8071b addiw a4,a6,-1 - 1cf8: 1702 slli a4,a4,0x20 - 1cfa: 9301 srli a4,a4,0x20 - 1cfc: 001a0e9b addiw t4,s4,1 - 1d00: 75e2 ld a1,56(sp) - 1d02: 8ade mv s5,s7 - 1d04: 975e add a4,a4,s7 - 1d06: 410e8ebb subw t4,t4,a6 - 1d0a: 88d2 mv a7,s4 - 1d0c: 86c2 mv a3,a6 - 1d0e: 4f01 li t5,0 - 1d10: 03000f93 li t6,48 - 1d14: e842 sd a6,16(sp) - 1d16: a809 j 1d28 - --pr; - 1d18: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d1a: 211e80e3 beq t4,a7,271a - 1d1e: 177d addi a4,a4,-1 # 6fff <_stdout+0x1df> - 1d20: 4f05 li t5,1 - 1d22: 1e088ce3 beqz a7,271a - --l; - 1d26: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 1d28: 00074803 lbu a6,0(a4) - 1d2c: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8807> - 1d30: 0006851b sext.w a0,a3 - 1d34: 2581 sext.w a1,a1 - 1d36: 0006069b sext.w a3,a2 - 1d3a: fdf80fe3 beq a6,t6,1d18 - 1d3e: 6842 ld a6,16(sp) - 1d40: fc2e sd a1,56(sp) - 1d42: 86c2 mv a3,a6 - 1d44: 000f0463 beqz t5,1d4c - 1d48: d0ae sw a1,96(sp) - 1d4a: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 1d4c: 5775 li a4,-3 - 1d4e: 08e7cee3 blt a5,a4,25ea - 1d52: 08fa4be3 blt s4,a5,25e8 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d56: 0005071b sext.w a4,a0 - if (dp > 0) { - 1d5a: 7ef057e3 blez a5,2d48 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 1d5e: 4881 li a7,0 - 1d60: 00e7d463 bge a5,a4,1d68 - 1d64: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 1d68: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 1d6c: 20029463 bnez t0,1f74 - } else if (fl & STBSP__LEADINGSPACE) { - 1d70: 004e7713 andi a4,t3,4 - 1d74: 000715e3 bnez a4,257e - } else if (fl & STBSP__LEADINGPLUS) { - 1d78: 002e7713 andi a4,t3,2 - 1d7c: 660719e3 bnez a4,2bee - sign[0] = 0; - 1d80: 06010423 sb zero,104(sp) - 1d84: aaed j 1f7e - h = (f[0] == 'A') ? hexu : hex; - 1d86: 04100713 li a4,65 - 1d8a: 00005597 auipc a1,0x5 - 1d8e: c5e58593 addi a1,a1,-930 # 69e8 - 1d92: 00e783e3 beq a5,a4,2598 - fv = va_arg(va, double); - 1d96: 008b8693 addi a3,s7,8 - if (pr == -1) - 1d9a: 577d li a4,-1 - fv = va_arg(va, double); - 1d9c: e0b6 sd a3,64(sp) - 1d9e: 000bb783 ld a5,0(s7) - if (pr == -1) - 1da2: 7ee88963 beq a7,a4,2594 - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1da6: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1daa: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1dae: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 1db2: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 1db4: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 1db8: 7a07c863 bltz a5,2568 - } else if (fl & STBSP__LEADINGSPACE) { - 1dbc: 004e7793 andi a5,t3,4 - 1dc0: 60078ee3 beqz a5,2bdc - 1dc4: 6789 lui a5,0x2 - 1dc6: 2785 addiw a5,a5,1 # 2001 - sign[0] = 1; - 1dc8: 06f11423 sh a5,104(sp) - 1dcc: 468d li a3,3 - 1dce: 4a0d li s4,3 - 1dd0: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 1dd2: 4705 li a4,1 - 1dd4: 1752 slli a4,a4,0x34 - if (dp == -1023) - 1dd6: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 1dda: 8f49 or a4,a4,a0 - if (dp == -1023) - 1ddc: 5cf600e3 beq a2,a5,2b9c - if (pr < 15) - 1de0: 4539 li a0,14 - n64 <<= (64 - 56); - 1de2: 00871793 slli a5,a4,0x8 - if (pr < 15) - 1de6: 251546e3 blt a0,a7,2832 - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 1dea: 4705 li a4,1 - 1dec: 0028951b slliw a0,a7,0x2 - 1df0: 176e slli a4,a4,0x3b - 1df2: 00a75733 srl a4,a4,a0 - 1df6: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 1df8: 03c75793 srli a5,a4,0x3c - 1dfc: 97ae add a5,a5,a1 - 1dfe: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 1e02: 22080793 addi a5,a6,544 - 1e06: 06010813 addi a6,sp,96 - 1e0a: 97c2 add a5,a5,a6 - 1e0c: 03000813 li a6,48 - 1e10: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 1e14: 22068793 addi a5,a3,544 - 1e18: 1094 addi a3,sp,96 - 1e1a: 96be add a3,a3,a5 - 1e1c: 07800793 li a5,120 - 1e20: def68423 sb a5,-536(a3) - lead[0] += 2; - 1e24: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 1e28: 0ca10023 sb a0,192(sp) - if (pr) - 1e2c: 740893e3 bnez a7,2d72 - sn = s; - 1e30: 0c110793 addi a5,sp,193 - 1e34: fcbe sd a5,120(sp) - 1e36: 4701 li a4,0 - 1e38: 4501 li a0,0 - 1e3a: 4305 li t1,1 - 1e3c: 4685 li a3,1 - tail[1] = h[17]; - 1e3e: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 1e42: 02b00793 li a5,43 - tail[1] = h[17]; - 1e46: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 1e4a: 00065663 bgez a2,1e56 - dp = -dp; - 1e4e: 40c0063b negw a2,a2 - tail[2] = '-'; - 1e52: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 1e56: 4829 li a6,10 - 1e58: 030665bb remw a1,a2,a6 - 1e5c: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1e60: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 1e64: 0305859b addiw a1,a1,48 - 1e68: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 1e6c: 18cec3e3 blt t4,a2,27f2 - 1e70: 06300e93 li t4,99 - 1e74: 54cec1e3 blt t4,a2,2bb6 - 1e78: 4ea5 li t4,9 - 1e7a: 72ced6e3 bge t4,a2,2da6 - dp /= 10; - 1e7e: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 1e82: 4611 li a2,4 - 1e84: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 1e88: 06b10a23 sb a1,116(sp) - 1e8c: 4811 li a6,4 - 1e8e: 4f91 li t6,4 - 1e90: 0307879b addiw a5,a5,48 - 1e94: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 1e98: 006a07bb addw a5,s4,t1 - 1e9c: 010787bb addw a5,a5,a6 - 1ea0: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 1ea4: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 1ea6: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 1ea8: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 1eaa: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1eae: 835a mv t1,s6 - 1eb0: 00cb5363 bge s6,a2,1eb6 - 1eb4: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 1eb6: 030002b7 lui t0,0x3000 - fw -= n; - 1eba: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 1ebe: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8809> - s = num + 64; - 1ec0: 0c010a93 addi s5,sp,192 - goto scopy; - 1ec4: b311 j 1bc8 - h = (f[0] == 'B') ? hexu : hex; - 1ec6: 04200713 li a4,66 - 1eca: 00005817 auipc a6,0x5 - 1ece: b1e80813 addi a6,a6,-1250 # 69e8 - 1ed2: 6ce78963 beq a5,a4,25a4 - if (fl & STBSP__LEADING_0X) { - 1ed6: 008e7793 andi a5,t3,8 - 1eda: 66079e63 bnez a5,2556 - lead[0] = 0; - 1ede: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 1ee2: 18000793 li a5,384 - 1ee6: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 1ee8: 020e7713 andi a4,t3,32 - goto radixnum; - 1eec: b979 j 1b8a - *s = (char)va_arg(va, int); - 1eee: 000ba783 lw a5,0(s7) - l = 1; - 1ef2: 4705 li a4,1 - 1ef4: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 1ef6: 26f10fa3 sb a5,639(sp) - 1efa: 008b8793 addi a5,s7,8 - lead[0] = 0; - 1efe: 06010423 sb zero,104(sp) - tail[0] = 0; - 1f02: 06010823 sb zero,112(sp) - dp = 0; - 1f06: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 1f08: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 1f0a: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 1f0e: 835a mv t1,s6 - 1f10: 69605063 blez s6,2590 - fw -= n; - 1f14: 337d addiw t1,t1,-1 - goto scopy; - 1f16: 4701 li a4,0 - 1f18: 4f81 li t6,0 - 1f1a: 4685 li a3,1 - 1f1c: 4a01 li s4,0 - cs = 0; - 1f1e: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 1f20: 27f10a93 addi s5,sp,639 - tz = 0; - 1f24: 4881 li a7,0 - goto scopy; - 1f26: b14d j 1bc8 - fv = va_arg(va, double); - 1f28: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 1f2c: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 1f30: e0ba sd a4,64(sp) - 1f32: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 1f36: be0795e3 bnez a5,1b20 - if (pr == -1) - 1f3a: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f3c: 0008871b sext.w a4,a7 - if (pr == -1) - 1f40: 00f89463 bne a7,a5,1f48 - 1f44: 4719 li a4,6 - pr = 6; // default is 6 - 1f46: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f48: 10d4 addi a3,sp,100 - 1f4a: 0110 addi a2,sp,128 - 1f4c: 108c addi a1,sp,96 - 1f4e: 18a8 addi a0,sp,120 - 1f50: f01e sd t2,32(sp) - 1f52: ec72 sd t3,24(sp) - 1f54: e846 sd a7,16(sp) - 1f56: a4cfe0ef jal 1a2 - 1f5a: 6e62 ld t3,24(sp) - 1f5c: 68c2 ld a7,16(sp) - 1f5e: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 1f60: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 1f62: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 1f64: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 1f68: e00500e3 beqz a0,1d68 - fl |= STBSP__NEGATIVE; - 1f6c: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 1f70: 06010823 sb zero,112(sp) - sign[0] = 1; - 1f74: 670d lui a4,0x3 - 1f76: d0170713 addi a4,a4,-767 # 2d01 - 1f7a: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 1f7e: 671d lui a4,0x7 - 1f80: 7ce78963 beq a5,a4,2752 - if (dp <= 0) { - 1f84: 46f05fe3 blez a5,2c02 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 1f88: 040e7313 andi t1,t3,64 - 1f8c: 00078e9b sext.w t4,a5 - 1f90: 4581 li a1,0 - 1f92: 00030963 beqz t1,1fa4 - 1f96: 25800593 li a1,600 - 1f9a: 41d585bb subw a1,a1,t4 - 1f9e: 470d li a4,3 - 1fa0: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 1fa4: 00005a17 auipc s4,0x5 - 1fa8: 95ca0a13 addi s4,s4,-1700 # 6900 - s = (char *)sn; - 1fac: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 1fae: 0cda4283 lbu t0,205(s4) - s = num + 64; - 1fb2: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 1fb6: 44defb63 bgeu t4,a3,240c - n = 0; - 1fba: 4501 li a0,0 - s = num + 64; - 1fbc: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1fbe: 4b91 li s7,4 - 1fc0: a015 j 1fe4 - 1fc2: 8642 mv a2,a6 - 1fc4: 883a mv a6,a4 - 1fc6: 8732 mv a4,a2 - *s++ = sn[n]; - 1fc8: 02051613 slli a2,a0,0x20 - 1fcc: 9201 srli a2,a2,0x20 - 1fce: 967a add a2,a2,t5 - 1fd0: 00064f83 lbu t6,0(a2) - ++n; - 1fd4: 0015061b addiw a2,a0,1 - 1fd8: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 1fdc: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x1df> - if (n >= (stbsp__uint32)dp) - 1fe0: 7bd57563 bgeu a0,t4,278a - *s++ = stbsp__comma; - 1fe4: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1fe8: fc030de3 beqz t1,1fc2 - 1fec: 2585 addiw a1,a1,1 - 1fee: fd759ae3 bne a1,s7,1fc2 - *s++ = stbsp__comma; - 1ff2: fe580fa3 sb t0,-1(a6) - 1ff6: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 1ff8: 4585 li a1,1 - 1ffa: b7f9 j 1fc8 - *d = tlen + (int)(bf - buf); - 1ffc: 000bb703 ld a4,0(s7) - 2000: 412407b3 sub a5,s0,s2 - 2004: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 2008: 008b8693 addi a3,s7,8 - 200c: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 200e: c31c sw a5,0(a4) - } break; - 2010: bae5 j 1a08 - if (fl & STBSP__LEADING_0X) { - 2012: 008e7793 andi a5,t3,8 - 2016: 50079b63 bnez a5,252c - lead[0] = 0; - 201a: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 201e: 33000793 li a5,816 - 2022: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 2024: 020e7713 andi a4,t3,32 - h = hexu; - 2028: 00005817 auipc a6,0x5 - 202c: 9a880813 addi a6,a6,-1624 # 69d0 - goto radixnum; - 2030: bea9 j 1b8a - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 2032: fefe7e13 andi t3,t3,-17 - 2036: 020e6e13 ori t3,t3,32 - 203a: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 203e: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 2040: 00005817 auipc a6,0x5 - 2044: 9a880813 addi a6,a6,-1624 # 69e8 - 2048: be05 j 1b78 - s = va_arg(va, char *); - 204a: 000bba83 ld s5,0(s7) - 204e: 008b8793 addi a5,s7,8 - 2052: e0be sd a5,64(sp) - if (s == 0) - 2054: 360a8ee3 beqz s5,2bd0 - if (((stbsp__uintptr)sn & 3) == 0) - 2058: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 205c: 5208c663 bltz a7,2588 - 2060: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 2064: 2a0782e3 beqz a5,2b08 - if (!limit || *sn == 0) - 2068: 5a068b63 beqz a3,261e - if (((stbsp__uintptr)sn & 3) == 0) - 206c: 87d6 mv a5,s5 - 206e: a801 j 207e - ++sn; - 2070: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 2072: 0037f713 andi a4,a5,3 - --limit; - 2076: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 2078: 280709e3 beqz a4,2b0a - if (!limit || *sn == 0) - 207c: c681 beqz a3,2084 - 207e: 0007c703 lbu a4,0(a5) - 2082: f77d bnez a4,2070 - return (stbsp__uint32)(sn - s); - 2084: 415787b3 sub a5,a5,s5 - 2088: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 208c: fff6c713 not a4,a3 - 2090: 977d srai a4,a4,0x3f - 2092: 8f7d and a4,a4,a5 - 2094: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2098: 863e mv a2,a5 - pr -= l; - 209a: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 209c: d0b6 sw a3,96(sp) - lead[0] = 0; - 209e: 06010423 sb zero,104(sp) - tail[0] = 0; - 20a2: 06010823 sb zero,112(sp) - dp = 0; - 20a6: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 20a8: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 20ac: 835a mv t1,s6 - 20ae: 00fb5363 bge s6,a5,20b4 - 20b2: 833e mv t1,a5 - fw -= n; - 20b4: 40c3033b subw t1,t1,a2 - goto scopy; - 20b8: 4f81 li t6,0 - 20ba: 4a01 li s4,0 - cs = 0; - 20bc: 4281 li t0,0 - tz = 0; - 20be: 4881 li a7,0 - goto scopy; - 20c0: b621 j 1bc8 - *bf++ = stbsp__comma; - 20c2: 87b2 mv a5,a2 - cs = 0; - 20c4: 4a01 li s4,0 - 20c6: e44ff06f j 170a - lead[0] -= (char)i; - 20ca: 06010423 sb zero,104(sp) - while (i) { - 20ce: d38ff06f j 1606 - lead[0] -= (char)i; - 20d2: 06010423 sb zero,104(sp) - while (i) { - 20d6: ed8ff06f j 17ae - while (i >= 4) { - 20da: 06fadc63 bge s5,a5,2152 - tz -= i; - 20de: 8722 mv a4,s0 - 20e0: 0007851b sext.w a0,a5 - while (i >= 4) { - 20e4: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 20e8: 01672023 sw s6,0(a4) - bf += 4; - 20ec: 0711 addi a4,a4,4 - while (i >= 4) { - 20ee: 40e5863b subw a2,a1,a4 - 20f2: fecacbe3 blt s5,a2,20e8 - 20f6: ffc5061b addiw a2,a0,-4 - 20fa: 0026561b srliw a2,a2,0x2 - 20fe: 0016071b addiw a4,a2,1 - 2102: 37f1 addiw a5,a5,-4 - 2104: 0026161b slliw a2,a2,0x2 - 2108: 070a slli a4,a4,0x2 - 210a: 9722 add a4,a4,s0 - 210c: 9f91 subw a5,a5,a2 - while (i) { - 210e: 843a mv s0,a4 - 2110: 80078de3 beqz a5,192a - 2114: 1782 slli a5,a5,0x20 - 2116: 9381 srli a5,a5,0x20 - 2118: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 211c: 0705 addi a4,a4,1 - 211e: ff470fa3 sb s4,-1(a4) - while (i) { - 2122: fe871de3 bne a4,s0,211c - 2126: 805ff06f j 192a - stbsp__cb_buf_clamp(i, pr); - 212a: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 212c: 4981 li s3,0 - 212e: dc049263 bnez s1,16f2 - 2132: b8d5 j 1a26 - STBSP__UNALIGNED(while (i >= 4) { - 2134: 4401 li s0,0 - 2136: 85be mv a1,a5 - 2138: f0ea4b63 blt s4,a4,184e - 213c: f42ff06f j 187e - if ((((stbsp__uintptr)bf) & 3) == 0) - 2140: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 2144: 87c6 mv a5,a7 - tz -= i; - 2146: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2148: fc071c63 bnez a4,1920 - while (i >= 4) { - 214c: 470d li a4,3 - 214e: f8f748e3 blt a4,a5,20de - 2152: 8722 mv a4,s0 - 2154: b7c1 j 2114 - tail[0] -= (char)i; - 2156: 06010823 sb zero,112(sp) - while (i) { - 215a: b0b9 j 19a8 - while (i >= 4) { - 215c: 478d li a5,3 - 215e: 8622 mv a2,s0 - 2160: d8b7d963 bge a5,a1,16f2 - 2164: ffc5839b addiw t2,a1,-4 - 2168: 0023d79b srliw a5,t2,0x2 - 216c: 0017859b addiw a1,a5,1 - 2170: 058a slli a1,a1,0x2 - 2172: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 2174: 01762023 sw s7,0(a2) - bf += 4; - 2178: 0611 addi a2,a2,4 - while (i >= 4) { - 217a: fe861de3 bne a2,s0,2174 - 217e: 0027979b slliw a5,a5,0x2 - 2182: 40f385bb subw a1,t2,a5 - 2186: d68ff06f j 16ee - while (i) { - 218a: 85be mv a1,a5 - 218c: ee071963 bnez a4,187e - 2190: f16ff06f j 18a6 - 2194: 2c013a03 ld s4,704(sp) - 2198: 2b813a83 ld s5,696(sp) - 219c: 2b013b03 ld s6,688(sp) - 21a0: 8ca2 mv s9,s0 - 21a2: a04ff06f j 13a6 - stbsp__chk_cb_buf(1); - 21a6: 2601 sext.w a2,a2 - 21a8: 1fe00793 li a5,510 - 21ac: f8c7c563 blt a5,a2,1936 - 21b0: f3eff06f j 18ee - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21b4: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 21b8: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 21bc: 2e01 sext.w t3,t3 - if (fw + pr) { - 21be: a0078be3 beqz a5,1bd4 - while (fw > 0) { - 21c2: be605663 blez t1,15ae - *(stbsp__uint32 *)bf = 0x20202020; - 21c6: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 21ca: 854a mv a0,s2 - 21cc: 894e mv s2,s3 - 21ce: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 21d0: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa828> - stbsp__cb_buf_clamp(i, fw); - 21d4: ec52 sd s4,24(sp) - 21d6: f426 sd s1,40(sp) - 21d8: 87a2 mv a5,s0 - 21da: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 21dc: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 21e0: 8d6e mv s10,s11 - *bf++ = ' '; - 21e2: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 21e6: 8de6 mv s11,s9 - while (i >= 4) { - 21e8: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 21ea: 20000e93 li t4,512 - 21ee: e846 sd a7,16(sp) - 21f0: f07e sd t6,32(sp) - 21f2: f836 sd a3,48(sp) - 21f4: e4f2 sd t3,72(sp) - 21f6: e8ba sd a4,80(sp) - 21f8: ec96 sd t0,88(sp) - 21fa: 841a mv s0,t1 - 21fc: 8a42 mv s4,a6 - 21fe: 8c9e mv s9,t2 - 2200: 0c090063 beqz s2,22c0 - 2204: 40a78633 sub a2,a5,a0 - 2208: 40ce873b subw a4,t4,a2 - 220c: 86ba mv a3,a4 - 220e: 00e45363 bge s0,a4,2214 - 2212: 86a2 mv a3,s0 - 2214: 0006871b sext.w a4,a3 - fw -= i; - 2218: 9c15 subw s0,s0,a3 - while (i) { - 221a: e719 bnez a4,2228 - 221c: a095 j 2280 - *bf++ = ' '; - 221e: 01678023 sb s6,0(a5) - --i; - 2222: 377d addiw a4,a4,-1 - *bf++ = ' '; - 2224: 0785 addi a5,a5,1 - while (i) { - 2226: cb29 beqz a4,2278 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2228: 0037f693 andi a3,a5,3 - 222c: faed bnez a3,221e - while (i >= 4) { - 222e: 86be mv a3,a5 - 2230: 00070f9b sext.w t6,a4 - 2234: 00f705bb addw a1,a4,a5 - 2238: 02ebd763 bge s7,a4,2266 - *(stbsp__uint32 *)bf = 0x20202020; - 223c: 0146a023 sw s4,0(a3) - bf += 4; - 2240: 0691 addi a3,a3,4 - while (i >= 4) { - 2242: 40d5863b subw a2,a1,a3 - 2246: fecbcbe3 blt s7,a2,223c - 224a: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8804> - 224e: 0026561b srliw a2,a2,0x2 - 2252: 0016069b addiw a3,a2,1 - 2256: 3771 addiw a4,a4,-4 - 2258: 0026161b slliw a2,a2,0x2 - 225c: 068a slli a3,a3,0x2 - 225e: 96be add a3,a3,a5 - 2260: 9f11 subw a4,a4,a2 - while (i) { - 2262: 87b6 mv a5,a3 - 2264: cb11 beqz a4,2278 - 2266: 1702 slli a4,a4,0x20 - 2268: 9301 srli a4,a4,0x20 - 226a: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 226e: 0685 addi a3,a3,1 - 2270: ff668fa3 sb s6,-1(a3) - while (i) { - 2274: fef69de3 bne a3,a5,226e - stbsp__chk_cb_buf(1); - 2278: 40a78633 sub a2,a5,a0 - 227c: 00090e63 beqz s2,2298 - 2280: 2601 sext.w a2,a2 - 2282: 00cf5b63 bge t5,a2,2298 - 2286: 85ce mv a1,s3 - 2288: 9cb1 addw s1,s1,a2 - 228a: 9902 jalr s2 - 228c: c541 beqz a0,2314 - 228e: 87aa mv a5,a0 - 2290: 20000e93 li t4,512 - 2294: 1fe00f13 li t5,510 - while (fw > 0) { - 2298: f68044e3 bgtz s0,2200 - 229c: 8322 mv t1,s0 - 229e: 89ca mv s3,s2 - 22a0: 83e6 mv t2,s9 - 22a2: 68c2 ld a7,16(sp) - 22a4: 8cee mv s9,s11 - 22a6: 6a62 ld s4,24(sp) - 22a8: 8dea mv s11,s10 - 22aa: 7f82 ld t6,32(sp) - 22ac: 8d26 mv s10,s1 - 22ae: 76c2 ld a3,48(sp) - 22b0: 6e26 ld t3,72(sp) - 22b2: 6746 ld a4,80(sp) - 22b4: 62e6 ld t0,88(sp) - 22b6: 74a2 ld s1,40(sp) - 22b8: 892a mv s2,a0 - 22ba: 843e mv s0,a5 - 22bc: af2ff06f j 15ae - stbsp__cb_buf_clamp(i, fw); - 22c0: 8722 mv a4,s0 - 22c2: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 22c4: b795 j 2228 - n64 = va_arg(va, stbsp__uint32); - 22c6: 000be683 lwu a3,0(s7) - 22ca: b0f9 j 1b98 - 22cc: 2c013a03 ld s4,704(sp) - 22d0: 2b813a83 ld s5,696(sp) - 22d4: 2b013b03 ld s6,688(sp) - 22d8: 8cca mv s9,s2 - 22da: 8ccff06f j 13a6 - 22de: 8cd6 mv s9,s5 - 22e0: 2c013a03 ld s4,704(sp) - 22e4: 2b813a83 ld s5,696(sp) - 22e8: 2b013b03 ld s6,688(sp) - 22ec: 8baff06f j 13a6 - 22f0: 2c013a03 ld s4,704(sp) - 22f4: 2b813a83 ld s5,696(sp) - 22f8: 2b013b03 ld s6,688(sp) - 22fc: 8cea mv s9,s10 - 22fe: 8a8ff06f j 13a6 - while (i) { - 2302: 85a2 mv a1,s0 - 2304: c12ff06f j 1716 - while (i >= 4) { - 2308: 478d li a5,3 - 230a: 8622 mv a2,s0 - 230c: e4b7cce3 blt a5,a1,2164 - 2310: be2ff06f j 16f2 - 2314: 2c013a03 ld s4,704(sp) - 2318: 2b813a83 ld s5,696(sp) - 231c: 2b013b03 ld s6,688(sp) - 2320: 8ca6 mv s9,s1 - 2322: 884ff06f j 13a6 - lead[2] = h[16]; - 2326: 01084683 lbu a3,16(a6) - lead[0] = 2; - 232a: 678d lui a5,0x3 - 232c: 0789 addi a5,a5,2 # 3002 - 232e: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 2332: 06d10523 sb a3,106(sp) - 2336: b891 j 1b8a - 2338: 8cea mv s9,s10 - 233a: 86cff06f j 13a6 - 233e: 4f81 li t6,0 - 2340: 4a01 li s4,0 - 2342: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 2344: 00004f17 auipc t5,0x4 - 2348: 689f4f03 lbu t5,1673(t5) # 69cd - 234c: 0510 addi a2,sp,640 - 234e: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2352: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 2354: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 2358: 0007029b sext.w t0,a4 - 235c: 005317bb sllw a5,t1,t0 - 2360: 37fd addiw a5,a5,-1 - 2362: 8ff5 and a5,a5,a3 - 2364: 97c2 add a5,a5,a6 - 2366: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 236a: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 236e: fff60a93 addi s5,a2,-1 - 2372: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 2376: e691 bnez a3,2382 - 2378: 051c addi a5,sp,640 - 237a: 415787bb subw a5,a5,s5 - 237e: 0317dd63 bge a5,a7,23b8 - if (fl & STBSP__TRIPLET_COMMA) { - 2382: 020e8963 beqz t4,23b4 - ++l; - 2386: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 238a: 0047d29b srliw t0,a5,0x4 - 238e: 00f2c2b3 xor t0,t0,a5 - 2392: 00f2f293 andi t0,t0,15 - ++l; - 2396: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 239a: 0087d71b srliw a4,a5,0x8 - 239e: 00029b63 bnez t0,23b4 - l &= ~15; - 23a2: 9bc1 andi a5,a5,-16 - 23a4: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 23a8: ffe60a93 addi s5,a2,-2 - 23ac: ffe60f23 sb t5,-2(a2) - 23b0: 0087d71b srliw a4,a5,0x8 - 23b4: 8656 mv a2,s5 - 23b6: b74d j 2358 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23b8: 0045d29b srliw t0,a1,0x4 - 23bc: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 23c0: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23c4: 0182929b slliw t0,t0,0x18 - 23c8: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 23cc: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 23d0: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 23d2: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 23d4: 86be mv a3,a5 - 23d6: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 23da: 835a mv t1,s6 - 23dc: 00cb5363 bge s6,a2,23e2 - 23e0: 8332 mv t1,a2 - fw -= n; - 23e2: 41f3033b subw t1,t1,t6 - pr -= l; - 23e6: 9f1d subw a4,a4,a5 - goto scopy; - 23e8: 4f81 li t6,0 - tz = 0; - 23ea: 4881 li a7,0 - goto scopy; - 23ec: fdcff06f j 1bc8 - 23f0: 8cda mv s9,s6 - 23f2: 2c013a03 ld s4,704(sp) - 23f6: 2b813a83 ld s5,696(sp) - 23fa: 2b013b03 ld s6,688(sp) - 23fe: fa9fe06f j 13a6 - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 2402: 020e6e13 ori t3,t3,32 - ++f; - 2406: 0485 addi s1,s1,1 - 2408: 864ff06f j 146c - n = 0; - 240c: 4601 li a2,0 - s = num + 64; - 240e: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2410: 4511 li a0,4 - *s++ = stbsp__comma; - 2412: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2416: 00030563 beqz t1,2420 - 241a: 2585 addiw a1,a1,1 - 241c: 10a58363 beq a1,a0,2522 - 2420: 873e mv a4,a5 - *s++ = sn[n]; - 2422: 02061793 slli a5,a2,0x20 - 2426: 9381 srli a5,a5,0x20 - 2428: 97fa add a5,a5,t5 - 242a: 0007c803 lbu a6,0(a5) - ++n; - 242e: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 2430: ff070fa3 sb a6,-1(a4) - if (n >= l) - 2434: fcd66fe3 bltu a2,a3,2412 - if (n < (stbsp__uint32)dp) { - 2438: 0bd663e3 bltu a2,t4,2cde - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 243c: 415707b3 sub a5,a4,s5 - 2440: 030002b7 lui t0,0x3000 - 2444: 00f282bb addw t0,t0,a5 - if (pr) { - 2448: 00088a63 beqz a7,245c - *s++ = stbsp__period; - 244c: 0cca4683 lbu a3,204(s4) - 2450: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 2454: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 2458: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 245c: 100e7713 andi a4,t3,256 - 2460: 86f2 mv a3,t3 - 2462: 2c070163 beqz a4,2724 - if (fl & STBSP__METRIC_NOSPACE) - 2466: 40ae5f9b sraiw t6,t3,0xa - 246a: 001fcf93 xori t6,t6,1 - 246e: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 2472: 02000713 li a4,32 - 2476: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 247a: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 247e: 018e561b srliw a2,t3,0x18 - 2482: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 2486: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 248a: c225 beqz a2,24ea - if (fl & STBSP__METRIC_1024) - 248c: 001f859b addiw a1,t6,1 - 2490: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 2494: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 2496: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 249a: 85b2 mv a1,a2 - 249c: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 249e: 06055ee3 bgez a0,2d1a - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24a2: 00003517 auipc a0,0x3 - 24a6: b9e50513 addi a0,a0,-1122 # 5040 <_GLOBAL__sub_I__ZSt3cin+0x98> - 24aa: 972a add a4,a4,a0 - 24ac: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24b0: 6709 lui a4,0x2 - 24b2: 80070713 addi a4,a4,-2048 # 1800 - 24b6: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 24b8: 06010813 addi a6,sp,96 - 24bc: 22060693 addi a3,a2,544 - 24c0: 96c2 add a3,a3,a6 - 24c2: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff85f8> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 24c6: 8007071b addiw a4,a4,-2048 - 24ca: 060715e3 bnez a4,2d34 - tail[idx + 1] = 'i'; - 24ce: 2f89 addiw t6,t6,2 - 24d0: 0ffff593 zext.b a1,t6 - 24d4: 1094 addi a3,sp,96 - 24d6: 22058713 addi a4,a1,544 - 24da: 9736 add a4,a4,a3 - 24dc: 06900693 li a3,105 - 24e0: 8fae mv t6,a1 - 24e2: ded70823 sb a3,-528(a4) - tail[0] = idx; - 24e6: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 24ea: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 24ee: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 24f2: fff6c713 not a4,a3 - 24f6: 977d srai a4,a4,0x3f - 24f8: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 24fa: 00fa073b addw a4,s4,a5 - 24fe: 9f2d addw a4,a4,a1 - 2500: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 2504: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 2506: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 2508: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 250a: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 250e: 835a mv t1,s6 - 2510: 00cb5363 bge s6,a2,2516 - 2514: 8332 mv t1,a2 - fw -= n; - 2516: 40e3033b subw t1,t1,a4 - pr -= l; - 251a: 40d7873b subw a4,a5,a3 - goto scopy; - 251e: eaaff06f j 1bc8 - *s++ = stbsp__comma; - 2522: fe578fa3 sb t0,-1(a5) - 2526: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2528: 4585 li a1,1 - 252a: bde5 j 2422 - lead[0] = 1; - 252c: 678d lui a5,0x3 - 252e: 0785 addi a5,a5,1 # 3001 - 2530: 06f11423 sh a5,104(sp) - 2534: b4ed j 201e - if ((f[0] != 'u') && (i64 < 0)) { - 2536: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 253a: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 253e: dcd78263 beq a5,a3,1b02 - 2542: dc0f5063 bgez t5,1b02 - fl |= STBSP__NEGATIVE; - 2546: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 254a: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 254e: 00070e1b sext.w t3,a4 - 2552: db0ff06f j 1b02 - lead[2] = h[0xb]; - 2556: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 255a: 678d lui a5,0x3 - 255c: 0789 addi a5,a5,2 # 3002 - 255e: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 2562: 06e10523 sb a4,106(sp) - 2566: bab5 j 1ee2 - sign[0] = 1; - 2568: 678d lui a5,0x3 - 256a: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 256e: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 2572: 06f11423 sh a5,104(sp) - 2576: 468d li a3,3 - 2578: 4a0d li s4,3 - 257a: 4809 li a6,2 - 257c: b899 j 1dd2 - sign[0] = 1; - 257e: 6709 lui a4,0x2 - 2580: 0705 addi a4,a4,1 # 2001 - 2582: 06e11423 sh a4,104(sp) - 2586: bae5 j 1f7e - if (((stbsp__uintptr)sn & 3) == 0) - 2588: 0e0780e3 beqz a5,2e68 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 258c: 56fd li a3,-1 - 258e: bcf9 j 206c - if (fw < (stbsp__int32)n) - 2590: 4305 li t1,1 - 2592: b249 j 1f14 - pr = 6; // default is 6 - 2594: 4899 li a7,6 - 2596: b801 j 1da6 - h = (f[0] == 'A') ? hexu : hex; - 2598: 00004597 auipc a1,0x4 - 259c: 43858593 addi a1,a1,1080 # 69d0 - 25a0: ff6ff06f j 1d96 - h = (f[0] == 'B') ? hexu : hex; - 25a4: 00004817 auipc a6,0x4 - 25a8: 42c80813 addi a6,a6,1068 # 69d0 - 25ac: b22d j 1ed6 - 25ae: 80000737 lui a4,0x80000 - 25b2: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff880e> - pr = 6; // default is 6 - 25b4: 4899 li a7,6 - 25b6: e4eff06f j 1c04 - h = (f[0] == 'E') ? hexu : hex; - 25ba: 00004317 auipc t1,0x4 - 25be: 41630313 addi t1,t1,1046 # 69d0 - 25c2: e28ff06f j 1bea - 25c6: 80000737 lui a4,0x80000 - 25ca: 4a99 li s5,6 - 25cc: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff880d> - pr = 6; - 25ce: 4a19 li s4,6 - 25d0: ee8ff06f j 1cb8 - h = (f[0] == 'G') ? hexu : hex; - 25d4: 00004317 auipc t1,0x4 - 25d8: 3fc30313 addi t1,t1,1020 # 69d0 - 25dc: eb6ff06f j 1c92 - 25e0: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 25e2: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 25e4: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 25e6: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 25e8: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 25ea: 0005071b sext.w a4,a0 - 25ee: 01175f63 bge a4,a7,260c - pr = l - 1; - 25f2: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 25f6: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 25fa: 70028c63 beqz t0,2d12 - sign[0] = 1; - 25fe: 670d lui a4,0x3 - 2600: d0170713 addi a4,a4,-767 # 2d01 - 2604: 06e11423 sh a4,104(sp) - 2608: e3aff06f j 1c42 - else if (pr) - 260c: fe0885e3 beqz a7,25f6 - --pr; // when using %e, there is one digit before the decimal - 2610: 38fd addiw a7,a7,-1 - 2612: b7d5 j 25f6 - switch (f[0]) { - 2614: 0034c783 lbu a5,3(s1) - f += 3; - 2618: 048d addi s1,s1,3 - 261a: e53fe06f j 146c - if (!limit || *sn == 0) - 261e: 4601 li a2,0 - 2620: 4701 li a4,0 - 2622: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 2624: bca5 j 209c - pr = 1; - 2626: 4885 li a7,1 - 2628: cf4ff06f j 1b1c - *s++ = sn[0]; - 262c: 000ac703 lbu a4,0(s5) - 2630: 0ce10023 sb a4,192(sp) - if (pr) - 2634: 54088563 beqz a7,2b7e - *s++ = stbsp__period; - 2638: 00004617 auipc a2,0x4 - 263c: 39464603 lbu a2,916(a2) # 69cc - if ((l - 1) > (stbsp__uint32)pr) - 2640: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 2644: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 2648: 0008851b sext.w a0,a7 - 264c: 0007061b sext.w a2,a4 - 2650: 52c57163 bgeu a0,a2,2b72 - l = pr + 1; - 2654: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 2658: 8746 mv a4,a7 - 265a: 02071613 slli a2,a4,0x20 - 265e: 9201 srli a2,a2,0x20 - 2660: 0c210713 addi a4,sp,194 - 2664: 0a85 addi s5,s5,1 - 2666: 963a add a2,a2,a4 - *s++ = sn[n]; - 2668: 000ac583 lbu a1,0(s5) - 266c: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 266e: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 2670: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 2674: fec71ae3 bne a4,a2,2668 - tail[1] = h[0xe]; - 2678: 00e34803 lbu a6,14(t1) - dp -= 1; - 267c: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 2680: 02b00593 li a1,43 - tail[1] = h[0xe]; - 2684: 070108a3 sb a6,113(sp) - if (dp < 0) { - 2688: 00075663 bgez a4,2694 - dp = -dp; - 268c: 4705 li a4,1 - 268e: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 2690: 02d00593 li a1,45 - 2694: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 2698: 06300793 li a5,99 - 269c: 4ee7d663 bge a5,a4,2b88 - 26a0: 4595 li a1,5 - 26a2: 4f95 li t6,5 - 26a4: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 26a6: 47a9 li a5,10 - dp /= 10; - 26a8: 02f7433b divw t1,a4,a5 - --n; - 26ac: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 26b0: 020f1293 slli t0,t5,0x20 - 26b4: 220e8813 addi a6,t4,544 - 26b8: 06010893 addi a7,sp,96 - 26bc: 0202d293 srli t0,t0,0x20 - 26c0: 01180eb3 add t4,a6,a7 - 26c4: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff8a28> - 26c8: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 26cc: 07f10823 sb t6,112(sp) - if (n <= 3) - 26d0: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 26d2: 02f7673b remw a4,a4,a5 - dp /= 10; - 26d6: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 26da: 02f36abb remw s5,t1,a5 - 26de: 0307071b addiw a4,a4,48 - 26e2: deee8823 sb a4,-528(t4) - 26e6: 030a871b addiw a4,s5,48 - 26ea: dee28823 sb a4,-528(t0) - if (n <= 3) - 26ee: 014f0a63 beq t5,s4,2702 - dp /= 10; - 26f2: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 26f6: 02f867bb remw a5,a6,a5 - 26fa: 0307879b addiw a5,a5,48 - 26fe: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 2702: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 2704: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 2708: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 270c: 40d508bb subw a7,a0,a3 - 2710: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2712: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 2716: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8809> - 2718: bbc9 j 24ea - 271a: fc2e sd a1,56(sp) - 271c: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 271e: 8536 mv a0,a3 - 2720: e2cff06f j 1d4c - flt_lead: - 2724: 4581 li a1,0 - 2726: 4f81 li t6,0 - 2728: b3c9 j 24ea - n = pr + lead[0] + tail[0] + tz; - 272a: 06814a03 lbu s4,104(sp) - 272e: 000a0f9b sext.w t6,s4 - 2732: b901 j 2342 - if ((f[1] == '6') && (f[2] == '4')) { - 2734: 0024c683 lbu a3,2(s1) - 2738: 03400713 li a4,52 - 273c: 00e68463 beq a3,a4,2744 - 2740: e2bfe06f j 156a - switch (f[0]) { - 2744: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2748: 020e6e13 ori t3,t3,32 - f += 3; - 274c: 048d addi s1,s1,3 - 274e: d1ffe06f j 146c - if (pr < (stbsp__int32)l) - 2752: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2756: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 275a: fff7c793 not a5,a5 - 275e: 97fd srai a5,a5,0x3f - 2760: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2762: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 2766: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 2768: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 276a: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 276e: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 2770: 835a mv t1,s6 - 2772: 00cb5363 bge s6,a2,2778 - 2776: 8332 mv t1,a2 - fw -= n; - 2778: 40e3033b subw t1,t1,a4 - goto scopy; - 277c: 4f81 li t6,0 - pr -= l; - 277e: 40d7873b subw a4,a5,a3 - cs = 0; - 2782: 4281 li t0,0 - tz = 0; - 2784: 4881 li a7,0 - goto scopy; - 2786: c42ff06f j 1bc8 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 278a: 415705b3 sub a1,a4,s5 - 278e: 030002b7 lui t0,0x3000 - 2792: 00b282bb addw t0,t0,a1 - l = pr - n; - 2796: 0008859b sext.w a1,a7 - if (pr) - 279a: 42088763 beqz a7,2bc8 - *s++ = stbsp__period; - 279e: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 27a2: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 27a6: 00280713 addi a4,a6,2 - 27aa: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 27ae: 4065ed63 bltu a1,t1,2bc8 - while (n < l) { - 27b2: 5ed57863 bgeu a0,a3,2da2 - 27b6: 40c687bb subw a5,a3,a2 - 27ba: 37fd addiw a5,a5,-1 - 27bc: 1782 slli a5,a5,0x20 - 27be: 9381 srli a5,a5,0x20 - 27c0: 1602 slli a2,a2,0x20 - 27c2: 9201 srli a2,a2,0x20 - 27c4: 0785 addi a5,a5,1 - 27c6: 967a add a2,a2,t5 - 27c8: 97ba add a5,a5,a4 - *s++ = sn[n]; - 27ca: 00064503 lbu a0,0(a2) - 27ce: 0705 addi a4,a4,1 - while (n < l) { - 27d0: 0605 addi a2,a2,1 - *s++ = sn[n]; - 27d2: fea70fa3 sb a0,-1(a4) - while (n < l) { - 27d6: fef71ae3 bne a4,a5,27ca - tz = pr - (l - dp); - 27da: 01d585bb addw a1,a1,t4 - 27de: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 27e2: 415787b3 sub a5,a5,s5 - 27e6: b99d j 245c - fl |= STBSP__NEGATIVE; - 27e8: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 27ec: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 27f0: b539 j 25fe - tail[0] = (char)n; - 27f2: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 27f4: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 27f8: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 27fc: 4819 li a6,6 - 27fe: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2800: 4599 li a1,6 - dp /= 10; - 2802: 4f29 li t5,10 - if (n <= 3) - 2804: 428d li t0,3 - 2806: 87b2 mv a5,a2 - dp /= 10; - 2808: 03e7c7bb divw a5,a5,t5 - --n; - 280c: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 280e: 02059613 slli a2,a1,0x20 - 2812: 9201 srli a2,a2,0x20 - 2814: 06010e93 addi t4,sp,96 - 2818: 22060613 addi a2,a2,544 - 281c: 9676 add a2,a2,t4 - 281e: 03e7eebb remw t4,a5,t5 - 2822: 030e8e9b addiw t4,t4,48 - 2826: dfd60823 sb t4,-528(a2) - if (n <= 3) - 282a: fc559fe3 bne a1,t0,2808 - 282e: e6aff06f j 1e98 - *s++ = h[(n64 >> 60) & 15]; - 2832: 93f1 srli a5,a5,0x3c - 2834: 97ae add a5,a5,a1 - 2836: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 283a: 1088 addi a0,sp,96 - 283c: 22080793 addi a5,a6,544 - 2840: 97aa add a5,a5,a0 - 2842: 03000513 li a0,48 - 2846: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 284a: 22068793 addi a5,a3,544 - 284e: 1094 addi a3,sp,96 - 2850: 96be add a3,a3,a5 - *s++ = stbsp__period; - 2852: 00004517 auipc a0,0x4 - 2856: 17a54503 lbu a0,378(a0) # 69cc - lead[2 + lead[0]] = 'x'; - 285a: 07800813 li a6,120 - sn = s; - 285e: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 2862: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 2866: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 286a: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 286e: 0c610023 sb t1,192(sp) - n64 <<= 4; - 2872: 0732 slli a4,a4,0xc - sn = s; - 2874: fcbe sd a5,120(sp) - n = pr; - 2876: 0008869b sext.w a3,a7 - while (n--) { - 287a: 4831 li a6,12 - if (n > 13) - 287c: 4535 li a0,13 - tz = pr - n; - 287e: 40a688bb subw a7,a3,a0 - while (n--) { - 2882: 02081313 slli t1,a6,0x20 - 2886: 02035313 srli t1,t1,0x20 - 288a: 22030693 addi a3,t1,544 - 288e: 1088 addi a0,sp,96 - 2890: 9536 add a0,a0,a3 - 2892: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 2896: 03c75693 srli a3,a4,0x3c - 289a: 96ae add a3,a3,a1 - 289c: 0006c683 lbu a3,0(a3) - 28a0: 0785 addi a5,a5,1 - n64 <<= 4; - 28a2: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 28a4: fed78fa3 sb a3,-1(a5) - while (n--) { - 28a8: fea797e3 bne a5,a0,2896 - l = (int)(s - (num + 64)); - 28ac: 280d addiw a6,a6,3 - 28ae: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 28b2: fff6c713 not a4,a3 - 28b6: 977d srai a4,a4,0x3f - 28b8: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 28bc: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 28c0: 0007031b sext.w t1,a4 - pr -= l; - 28c4: 4107073b subw a4,a4,a6 - 28c8: d76ff06f j 1e3e - *--s = stbsp__comma; - 28cc: 00004a17 auipc s4,0x4 - 28d0: 034a0a13 addi s4,s4,52 # 6900 - if (n64 >= 100000000) { - 28d4: 05f5e7b7 lui a5,0x5f5e - 28d8: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56907> - n = (stbsp__uint32)(n64 % 100000000); - 28dc: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 28e0: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 28e4: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 28e6: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56908> - l = 0; - 28ea: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 28ec: 040e7813 andi a6,t3,64 - 28f0: 4701 li a4,0 - 28f2: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 28f4: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 28f8: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 28fa: 430d li t1,3 - n /= 10; - 28fc: 45a9 li a1,10 - while (n) { - 28fe: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2900: 06400f93 li t6,100 - if (n64 >= 100000000) { - 2904: 67c2 ld a5,16(sp) - char *o = s - 8; - 2906: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 290a: 0fe7f763 bgeu a5,t5,29f8 - n = (stbsp__uint32)(n64 % 100000000); - 290e: 6662 ld a2,24(sp) - 2910: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 2914: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2918: 0e080463 beqz a6,2a00 - while (n) { - 291c: cb85 beqz a5,294c - *--s = stbsp__comma; - 291e: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2920: 00671763 bne a4,t1,292e - --o; - 2924: 017a8023 sb s7,0(s5) - 2928: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 292a: 1afd addi s5,s5,-1 - l = 0; - 292c: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 292e: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 2930: 02b7f63b remuw a2,a5,a1 - 2934: 0306061b addiw a2,a2,48 - 2938: 00ca8023 sb a2,0(s5) - n /= 10; - 293c: 02b7d63b divuw a2,a5,a1 - while (n) { - 2940: 00fef563 bgeu t4,a5,294a - *--s = stbsp__comma; - 2944: 1afd addi s5,s5,-1 - 2946: 87b2 mv a5,a2 - 2948: bfe1 j 2920 - while (n) { - 294a: 4285 li t0,1 - if (n64 == 0) { - 294c: 020f0063 beqz t5,296c - while (s != o) - 2950: fb550ae3 beq a0,s5,2904 - *--s = stbsp__comma; - 2954: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 2956: 00080663 beqz a6,2962 - 295a: 08670863 beq a4,t1,29ea - 295e: 2705 addiw a4,a4,1 - 2960: 4285 li t0,1 - *--s = '0'; - 2962: 03000793 li a5,48 - 2966: 00fa8023 sb a5,0(s5) - 296a: b7dd j 2950 - 296c: 00028363 beqz t0,2972 - 2970: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2972: 000ac703 lbu a4,0(s5) - 2976: 03000793 li a5,48 - 297a: 34f70b63 beq a4,a5,2cd0 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 297e: 051c addi a5,sp,640 - 2980: 415786bb subw a3,a5,s5 - tail[0] = 0; - 2984: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2988: 080e7713 andi a4,t3,128 - 298c: 87f2 mv a5,t3 - 298e: 32070863 beqz a4,2cbe - 2992: 678d lui a5,0x3 - 2994: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 2998: 06f11423 sh a5,104(sp) - 299c: 4705 li a4,1 - 299e: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 29a0: d0b6 sw a3,96(sp) - if (l == 0) { - 29a2: 30068163 beqz a3,2ca4 - cs = l + (3 << 24); - 29a6: 030002b7 lui t0,0x3000 - 29aa: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 29ae: 0006861b sext.w a2,a3 - if (pr < 0) - 29b2: fff8c793 not a5,a7 - 29b6: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 29b8: 00f8f7b3 and a5,a7,a5 - 29bc: 0007859b sext.w a1,a5 - 29c0: 00c5d363 bge a1,a2,29c6 - 29c4: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 29c6: 00f7063b addw a2,a4,a5 - 29ca: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 29cc: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 29ce: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 29d2: 835a mv t1,s6 - 29d4: 00cb5363 bge s6,a2,29da - 29d8: 8332 mv t1,a2 - fw -= n; - 29da: 40e3033b subw t1,t1,a4 - scopy: - 29de: 4f81 li t6,0 - pr -= l; - 29e0: 40d7873b subw a4,a5,a3 - tz = 0; - 29e4: 4881 li a7,0 - scopy: - 29e6: 9e2ff06f j 1bc8 - *--s = stbsp__comma; - 29ea: 87de mv a5,s7 - --o; - 29ec: 157d addi a0,a0,-1 - l = 0; - 29ee: 4701 li a4,0 - --o; - 29f0: 4285 li t0,1 - 29f2: 00fa8023 sb a5,0(s5) - 29f6: bfa9 j 2950 - n = (stbsp__uint32)n64; - 29f8: 000f079b sext.w a5,t5 - n64 = 0; - 29fc: 4f01 li t5,0 - 29fe: bf29 j 2918 - 2a00: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a02: 03f7f63b remuw a2,a5,t6 - s -= 2; - 2a06: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a08: 0007889b sext.w a7,a5 - 2a0c: 2605 addiw a2,a2,1 - 2a0e: 0016161b slliw a2,a2,0x1 - 2a12: 1602 slli a2,a2,0x20 - 2a14: 9201 srli a2,a2,0x20 - 2a16: 9652 add a2,a2,s4 - 2a18: 00065603 lhu a2,0(a2) - n /= 100; - 2a1c: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 2a20: 00ca9023 sh a2,0(s5) - } while (n); - 2a24: 06300613 li a2,99 - 2a28: fd166de3 bltu a2,a7,2a02 - 2a2c: 7882 ld a7,32(sp) - if (n64 == 0) { - 2a2e: f20f11e3 bnez t5,2950 - 2a32: bf2d j 296c - *(stbsp__uint32 *)bf = 0x20202020; - 2a34: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 2a38: 854a mv a0,s2 - *bf++ = ' '; - 2a3a: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 2a3e: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa828> - stbsp__chk_cb_buf(1); - 2a42: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 2a46: 20000b93 li s7,512 - 2a4a: 891a mv s2,t1 - 2a4c: 0a098063 beqz s3,2aec - 2a50: 40a40633 sub a2,s0,a0 - 2a54: 40cb87bb subw a5,s7,a2 - 2a58: 873e mv a4,a5 - 2a5a: 00f95363 bge s2,a5,2a60 - 2a5e: 874a mv a4,s2 - 2a60: 0007079b sext.w a5,a4 - fw -= i; - 2a64: 40e9093b subw s2,s2,a4 - while (i) { - 2a68: e799 bnez a5,2a76 - 2a6a: a281 j 2baa - *bf++ = ' '; - 2a6c: 01540023 sb s5,0(s0) - --i; - 2a70: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 2a72: 0405 addi s0,s0,1 - while (i) { - 2a74: cba1 beqz a5,2ac4 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2a76: 00347713 andi a4,s0,3 - 2a7a: fb6d bnez a4,2a6c - while (i >= 4) { - 2a7c: 470d li a4,3 - 2a7e: 40f75363 bge a4,a5,2e84 - 2a82: ffc7869b addiw a3,a5,-4 - 2a86: 0026d79b srliw a5,a3,0x2 - 2a8a: 0017871b addiw a4,a5,1 - 2a8e: 070a slli a4,a4,0x2 - 2a90: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 2a92: 01642023 sw s6,0(s0) - bf += 4; - 2a96: 0411 addi s0,s0,4 - while (i >= 4) { - 2a98: fee41de3 bne s0,a4,2a92 - 2a9c: 0027979b slliw a5,a5,0x2 - 2aa0: 40f687bb subw a5,a3,a5 - while (i--) - 2aa4: fff7869b addiw a3,a5,-1 - 2aa8: cf91 beqz a5,2ac4 - 2aaa: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 2aac: 0705 addi a4,a4,1 - while (i--) - 2aae: 0007061b sext.w a2,a4 - *bf++ = ' '; - 2ab2: ff570fa3 sb s5,-1(a4) - while (i--) - 2ab6: fec79be3 bne a5,a2,2aac - 2aba: 2685 addiw a3,a3,1 - 2abc: 02069793 slli a5,a3,0x20 - 2ac0: 9381 srli a5,a5,0x20 - 2ac2: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 2ac4: 00098f63 beqz s3,2ae2 - 2ac8: 40a4063b subw a2,s0,a0 - 2acc: 00ca5b63 bge s4,a2,2ae2 - 2ad0: 65a2 ld a1,8(sp) - 2ad2: e81e sd t2,16(sp) - 2ad4: 00cd0d3b addw s10,s10,a2 - 2ad8: 9982 jalr s3 - 2ada: 80050be3 beqz a0,22f0 - 2ade: 63c2 ld t2,16(sp) - 2ae0: 842a mv s0,a0 - while (fw) { - 2ae2: f60915e3 bnez s2,2a4c - 2ae6: 892a mv s2,a0 - 2ae8: f21fe06f j 1a08 - stbsp__cb_buf_clamp(i, fw); - 2aec: 87ca mv a5,s2 - fw -= i; - 2aee: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 2af0: b759 j 2a76 - } else if (fl & STBSP__LEADINGPLUS) { - 2af2: 002e7713 andi a4,t3,2 - 2af6: 94070663 beqz a4,1c42 - sign[0] = 1; - 2afa: 670d lui a4,0x3 - 2afc: b0170713 addi a4,a4,-1279 # 2b01 - 2b00: 06e11423 sh a4,104(sp) - 2b04: 93eff06f j 1c42 - if (((stbsp__uintptr)sn & 3) == 0) - 2b08: 87d6 mv a5,s5 - while (limit >= 4) { - 2b0a: 470d li a4,3 - 2b0c: 22d77763 bgeu a4,a3,2d3a - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b10: feff05b7 lui a1,0xfeff0 - 2b14: 80808637 lui a2,0x80808 - 2b18: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8707> - 2b1c: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800888> - while (limit >= 4) { - 2b20: 480d li a6,3 - 2b22: a029 j 2b2c - limit -= 4; - 2b24: 36f1 addiw a3,a3,-4 - sn += 4; - 2b26: 0791 addi a5,a5,4 - while (limit >= 4) { - 2b28: 20d87963 bgeu a6,a3,2d3a - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 2b2c: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 2b2e: 00b7053b addw a0,a4,a1 - 2b32: fff74713 not a4,a4 - 2b36: 8f69 and a4,a4,a0 - 2b38: 8f71 and a4,a4,a2 - 2b3a: 2701 sext.w a4,a4 - 2b3c: d765 beqz a4,2b24 - 2b3e: 02069713 slli a4,a3,0x20 - 2b42: 9301 srli a4,a4,0x20 - 2b44: 973e add a4,a4,a5 - 2b46: a021 j 2b4e - ++sn; - 2b48: 0785 addi a5,a5,1 - while (limit && *sn) { - 2b4a: 00e78663 beq a5,a4,2b56 - 2b4e: 0007c683 lbu a3,0(a5) - 2b52: fafd bnez a3,2b48 - 2b54: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 2b56: 41570733 sub a4,a4,s5 - 2b5a: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 2b5e: fff6c793 not a5,a3 - 2b62: 97fd srai a5,a5,0x3f - 2b64: 8f7d and a4,a4,a5 - 2b66: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 2b6a: 863e mv a2,a5 - pr -= l; - 2b6c: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 2b6e: d2eff06f j 209c - for (n = 1; n < l; n++) - 2b72: 4605 li a2,1 - 2b74: aed663e3 bltu a2,a3,265a - 2b78: 0c210613 addi a2,sp,194 - 2b7c: bcf5 j 2678 - l = pr + 1; - 2b7e: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 2b80: 4501 li a0,0 - *s++ = sn[0]; - 2b82: 0c110613 addi a2,sp,193 - 2b86: bccd j 2678 - 2b88: 4591 li a1,4 - 2b8a: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 2b8c: 4e91 li t4,4 - 2b8e: be21 j 26a6 - 2b90: 4a85 li s5,1 - 2b92: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 2b96: 4a05 li s4,1 - 2b98: 920ff06f j 1cb8 - dp = (n64) ? -1022 : 0; - 2b9c: 4601 li a2,0 - 2b9e: c119 beqz a0,2ba4 - 2ba0: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2ba4: 872a mv a4,a0 - 2ba6: a3aff06f j 1de0 - stbsp__chk_cb_buf(1); - 2baa: 2601 sext.w a2,a2 - 2bac: 1fe00793 li a5,510 - 2bb0: f2c7c0e3 blt a5,a2,2ad0 - 2bb4: bd61 j 2a4c - tail[0] = (char)n; - 2bb6: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 2bb8: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 2bbc: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2bc0: 4815 li a6,5 - 2bc2: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2bc4: 4595 li a1,5 - 2bc6: b935 j 2802 - l = pr + dp; - 2bc8: 011786bb addw a3,a5,a7 - 2bcc: d0b6 sw a3,96(sp) - 2bce: b6d5 j 27b2 - s = (char *)"null"; - 2bd0: 00002a97 auipc s5,0x2 - 2bd4: 468a8a93 addi s5,s5,1128 # 5038 <_GLOBAL__sub_I__ZSt3cin+0x90> - 2bd8: c80ff06f j 2058 - } else if (fl & STBSP__LEADINGPLUS) { - 2bdc: 002e7793 andi a5,t3,2 - 2be0: 1c079c63 bnez a5,2db8 - sign[0] = 0; - 2be4: 4689 li a3,2 - 2be6: 4a09 li s4,2 - 2be8: 4805 li a6,1 - 2bea: 9e8ff06f j 1dd2 - sign[0] = 1; - 2bee: 670d lui a4,0x3 - 2bf0: b0170713 addi a4,a4,-1279 # 2b01 - 2bf4: 06e11423 sh a4,104(sp) - 2bf8: b86ff06f j 1f7e - pr = 0; - 2bfc: 4881 li a7,0 - 2bfe: f1ffe06f j 1b1c - *s++ = '0'; - 2c02: 03000713 li a4,48 - 2c06: 0ce10023 sb a4,192(sp) - if (pr) - 2c0a: 1a088c63 beqz a7,2dc2 - *s++ = stbsp__period; - 2c0e: 00004717 auipc a4,0x4 - 2c12: dbe74703 lbu a4,-578(a4) # 69cc - n = -dp; - 2c16: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 2c1a: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 2c1e: 0007871b sext.w a4,a5 - 2c22: 00e8d363 bge a7,a4,2c28 - 2c26: 87c6 mv a5,a7 - 2c28: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 2c2c: 00d7833b addw t1,a5,a3 - 2c30: 883a mv a6,a4 - while (i) { - 2c32: 0c210793 addi a5,sp,194 - *s++ = '0'; - 2c36: 03000513 li a0,48 - while (i) { - 2c3a: e711 bnez a4,2c46 - 2c3c: a271 j 2dc8 - if ((((stbsp__uintptr)s) & 3) == 0) - 2c3e: 0037f613 andi a2,a5,3 - 2c42: 18060563 beqz a2,2dcc - *s++ = '0'; - 2c46: 85ba mv a1,a4 - 2c48: 00a78023 sb a0,0(a5) - --i; - 2c4c: 377d addiw a4,a4,-1 - *s++ = '0'; - 2c4e: 0785 addi a5,a5,1 - while (i) { - 2c50: f77d bnez a4,2c3e - if ((stbsp__int32)(l + n) > pr) - 2c52: 0003071b sext.w a4,t1 - 2c56: 4108863b subw a2,a7,a6 - 2c5a: 00e8d563 bge a7,a4,2c64 - l = pr - n; - 2c5e: 0006069b sext.w a3,a2 - 2c62: d0b2 sw a2,96(sp) - while (i) { - 2c64: c68d beqz a3,2c8e - 2c66: 7566 ld a0,120(sp) - 2c68: 02069813 slli a6,a3,0x20 - 2c6c: 02085813 srli a6,a6,0x20 - 2c70: 01078eb3 add t4,a5,a6 - 2c74: 85aa mv a1,a0 - 2c76: 873e mv a4,a5 - *s++ = *sn++; - 2c78: 0005c883 lbu a7,0(a1) - 2c7c: 0705 addi a4,a4,1 - while (i) { - 2c7e: 0585 addi a1,a1,1 - *s++ = *sn++; - 2c80: ff170fa3 sb a7,-1(a4) - while (i) { - 2c84: ffd71ae3 bne a4,t4,2c78 - 2c88: 9542 add a0,a0,a6 - 2c8a: 97c2 add a5,a5,a6 - 2c8c: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 2c8e: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2c92: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 2c96: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 2c9a: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2c9e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8809> - 2ca0: fbcff06f j 245c - *--s = '0'; - 2ca4: 03000793 li a5,48 - 2ca8: fefa8fa3 sb a5,-1(s5) - l = 1; - 2cac: 030002b7 lui t0,0x3000 - 2cb0: 4785 li a5,1 - 2cb2: d0be sw a5,96(sp) - *--s = '0'; - 2cb4: 1afd addi s5,s5,-1 - l = 1; - 2cb6: 4605 li a2,1 - 2cb8: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8809> - 2cba: 4685 li a3,1 - 2cbc: b9dd j 29b2 - } else if (fl & STBSP__LEADINGSPACE) { - 2cbe: 004e7713 andi a4,t3,4 - 2cc2: e74d bnez a4,2d6c - } else if (fl & STBSP__LEADINGPLUS) { - 2cc4: 8b89 andi a5,a5,2 - 2cc6: efd9 bnez a5,2d64 - sign[0] = 0; - 2cc8: 06010423 sb zero,104(sp) - 2ccc: 4a01 li s4,0 - 2cce: b9c9 j 29a0 - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 2cd0: 051c addi a5,sp,640 - 2cd2: cafa89e3 beq s5,a5,2984 - ++s; - 2cd6: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 2cd8: 415786bb subw a3,a5,s5 - 2cdc: b165 j 2984 - n = dp - n; - 2cde: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2ce2: 12030e63 beqz t1,2e1e - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2ce6: 4511 li a0,4 - 2ce8: 03000613 li a2,48 - *s++ = stbsp__comma; - 2cec: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2cf0: 00030563 beqz t1,2cfa - 2cf4: 2585 addiw a1,a1,1 - 2cf6: 00a58963 beq a1,a0,2d08 - 2cfa: 8736 mv a4,a3 - --n; - 2cfc: 37fd addiw a5,a5,-1 - 2cfe: fec70fa3 sb a2,-1(a4) - while (n) { - 2d02: f7ed bnez a5,2cec - 2d04: f38ff06f j 243c - 2d08: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 2d0c: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2d0e: 4585 li a1,1 - 2d10: b7f5 j 2cfc - sign[0] = 0; - 2d12: 06010423 sb zero,104(sp) - 2d16: f1dfe06f j 1c32 - tail[idx + 1] = "_kMGT"[fl >> 24]; - 2d1a: 00002697 auipc a3,0x2 - 2d1e: 32e68693 addi a3,a3,814 # 5048 <_GLOBAL__sub_I__ZSt3cin+0xa0> - 2d22: 9736 add a4,a4,a3 - 2d24: 00074683 lbu a3,0(a4) - 2d28: 1088 addi a0,sp,96 - 2d2a: 22060713 addi a4,a2,544 - 2d2e: 972a add a4,a4,a0 - 2d30: ded70823 sb a3,-528(a4) - idx++; - 2d34: 8fb2 mv t6,a2 - 2d36: fb0ff06f j 24e6 - while (limit && *sn) { - 2d3a: e00692e3 bnez a3,2b3e - 2d3e: bd19 j 2b54 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d40: 0008071b sext.w a4,a6 - 2d44: 86c2 mv a3,a6 - 2d46: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 2d48: 863a mv a2,a4 - 2d4a: 00e8d363 bge a7,a4,2d50 - 2d4e: 8646 mv a2,a7 - 2d50: 40f608bb subw a7,a2,a5 - 2d54: 814ff06f j 1d68 - divisor = 1000.0f; - 2d58: 00003797 auipc a5,0x3 - 2d5c: a907b787 fld fa5,-1392(a5) # 57e8 - 2d60: dd5fe06f j 1b34 - 2d64: 678d lui a5,0x3 - 2d66: b017879b addiw a5,a5,-1279 # 2b01 - 2d6a: b13d j 2998 - 2d6c: 6789 lui a5,0x2 - 2d6e: 2785 addiw a5,a5,1 # 2001 - 2d70: b125 j 2998 - *s++ = stbsp__period; - 2d72: 00004517 auipc a0,0x4 - 2d76: c5a54503 lbu a0,-934(a0) # 69cc - sn = s; - 2d7a: 0c210793 addi a5,sp,194 - n = pr; - 2d7e: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 2d82: 0ca100a3 sb a0,193(sp) - sn = s; - 2d86: fcbe sd a5,120(sp) - if (n > 13) - 2d88: 4535 li a0,13 - n64 <<= 4; - 2d8a: 0712 slli a4,a4,0x4 - if (n > 13) - 2d8c: 8836 mv a6,a3 - 2d8e: 00d57363 bgeu a0,a3,2d94 - 2d92: 4835 li a6,13 - 2d94: 0008051b sext.w a0,a6 - while (n--) { - 2d98: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 2d9a: af1542e3 blt a0,a7,287e - tz = 0; - 2d9e: 4881 li a7,0 - 2da0: b4cd j 2882 - while (n < l) { - 2da2: 87ba mv a5,a4 - 2da4: bc1d j 27da - tail[0] = (char)n; - 2da6: 478d li a5,3 - 2da8: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 2dac: 06b109a3 sb a1,115(sp) - 2db0: 480d li a6,3 - 2db2: 4f8d li t6,3 - 2db4: 8e4ff06f j 1e98 - 2db8: 678d lui a5,0x3 - 2dba: b017879b addiw a5,a5,-1279 # 2b01 - 2dbe: 80aff06f j 1dc8 - if (pr) - 2dc2: 8336 mv t1,a3 - *s++ = '0'; - 2dc4: 0c110793 addi a5,sp,193 - while (i) { - 2dc8: 4801 li a6,0 - 2dca: b561 j 2c52 - while (i >= 4) { - 2dcc: 460d li a2,3 - 2dce: 04e65663 bge a2,a4,2e1a - 2dd2: ffb5871b addiw a4,a1,-5 - 2dd6: 0027559b srliw a1,a4,0x2 - 2dda: 0015861b addiw a2,a1,1 - 2dde: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2de0: 30303537 lui a0,0x30303 - 2de4: 963e add a2,a2,a5 - 2de6: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb838> - 2dea: c388 sw a0,0(a5) - s += 4; - 2dec: 0791 addi a5,a5,4 - while (i >= 4) { - 2dee: fef61ee3 bne a2,a5,2dea - 2df2: 0025959b slliw a1,a1,0x2 - 2df6: 9f0d subw a4,a4,a1 - while (i) { - 2df8: e4070de3 beqz a4,2c52 - *s++ = '0'; - 2dfc: 03000513 li a0,48 - while (i) { - 2e00: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 2e04: 0605 addi a2,a2,1 - while (i) { - 2e06: 00060e9b sext.w t4,a2 - *s++ = '0'; - 2e0a: fea60fa3 sb a0,-1(a2) - while (i) { - 2e0e: ffd59be3 bne a1,t4,2e04 - 2e12: 1702 slli a4,a4,0x20 - 2e14: 9301 srli a4,a4,0x20 - 2e16: 97ba add a5,a5,a4 - 2e18: bd2d j 2c52 - while (i >= 4) { - 2e1a: 863e mv a2,a5 - 2e1c: b7c5 j 2dfc - if ((((stbsp__uintptr)s) & 3) == 0) - 2e1e: 00377693 andi a3,a4,3 - 2e22: ce81 beqz a3,2e3a - *s++ = '0'; - 2e24: 03000693 li a3,48 - 2e28: 00d70023 sb a3,0(a4) - --n; - 2e2c: 37fd addiw a5,a5,-1 - *s++ = '0'; - 2e2e: 0705 addi a4,a4,1 - while (n) { - 2e30: e0078663 beqz a5,243c - if ((((stbsp__uintptr)s) & 3) == 0) - 2e34: 00377613 andi a2,a4,3 - 2e38: fa65 bnez a2,2e28 - while (n >= 4) { - 2e3a: 468d li a3,3 - 2e3c: eaf6f5e3 bgeu a3,a5,2ce6 - 2e40: ffc7869b addiw a3,a5,-4 - 2e44: 0026d69b srliw a3,a3,0x2 - 2e48: 2685 addiw a3,a3,1 - 2e4a: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 2e4c: 30303637 lui a2,0x30303 - 2e50: 96ba add a3,a3,a4 - 2e52: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb838> - 2e56: c310 sw a2,0(a4) - s += 4; - 2e58: 0711 addi a4,a4,4 - while (n >= 4) { - 2e5a: fed71ee3 bne a4,a3,2e56 - 2e5e: 8b8d andi a5,a5,3 - while (n) { - 2e60: e80793e3 bnez a5,2ce6 - 2e64: dd8ff06f j 243c - if (((stbsp__uintptr)sn & 3) == 0) - 2e68: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2e6a: 56fd li a3,-1 - 2e6c: b155 j 2b10 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2e6e: 5775 li a4,-3 - 2e70: 00e7ce63 blt a5,a4,2e8c - 2e74: f6fa4663 blt s4,a5,25e0 - if (dp > 0) { - 2e78: ecf054e3 blez a5,2d40 - 2e7c: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2e7e: 4881 li a7,0 - 2e80: ee9fe06f j 1d68 - while (i--) - 2e84: fff7869b addiw a3,a5,-1 - 2e88: 8722 mv a4,s0 - 2e8a: b105 j 2aaa - if (pr > (stbsp__int32)l) - 2e8c: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2e90: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 2e92: 86c2 mv a3,a6 - 2e94: 88d2 mv a7,s4 - 2e96: f7475d63 bge a4,s4,2610 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2e9a: 8542 mv a0,a6 - 2e9c: f56ff06f j 25f2 - -0000000000002ea0 : -{ - 2ea0: 715d addi sp,sp,-80 - va_start(va, fmt); - 2ea2: 02010313 addi t1,sp,32 -{ - 2ea6: f032 sd a2,32(sp) - 2ea8: f436 sd a3,40(sp) - 2eaa: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2eac: 86ae mv a3,a1 - 2eae: 862a mv a2,a0 - 2eb0: 871a mv a4,t1 - 2eb2: 4581 li a1,0 - 2eb4: 4501 li a0,0 -{ - 2eb6: ec06 sd ra,24(sp) - 2eb8: fc3e sd a5,56(sp) - 2eba: e0c2 sd a6,64(sp) - 2ebc: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2ebe: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2ec0: bc6fe0ef jal 1286 -} - 2ec4: 60e2 ld ra,24(sp) - 2ec6: 6161 addi sp,sp,80 - 2ec8: 8082 ret - -0000000000002eca : -{ - 2eca: dd010113 addi sp,sp,-560 - 2ece: 22813023 sd s0,544(sp) - 2ed2: 20913c23 sd s1,536(sp) - 2ed6: 22113423 sd ra,552(sp) - 2eda: 84ae mv s1,a1 - 2edc: 842a mv s0,a0 - 2ede: 88b2 mv a7,a2 - 2ee0: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 2ee2: e591 bnez a1,2eee - 2ee4: c141 beqz a0,2f64 - c.buf = buf; - 2ee6: e02a sd a0,0(sp) - c.count = count; - 2ee8: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2eea: 0810 addi a2,sp,16 - 2eec: a089 j 2f2e - if (len > c->count) - 2eee: 0015a593 slti a1,a1,1 - 2ef2: 40b005bb negw a1,a1 - 2ef6: 8de5 and a1,a1,s1 - c.buf = buf; - 2ef8: e02a sd a0,0(sp) - c.count = count; - 2efa: c426 sw s1,8(sp) - c.length = 0; - 2efc: c602 sw zero,12(sp) - if (len > c->count) - 2efe: 2581 sext.w a1,a1 - if (len) { - 2f00: 0804d663 bgez s1,2f8c - s = buf; - 2f04: 4781 li a5,0 - if (buf != c->buf) { - 2f06: c911 beqz a0,2f1a - *d++ = *s++; - 2f08: 0007c803 lbu a6,0(a5) - 2f0c: 0785 addi a5,a5,1 - 2f0e: 00f40533 add a0,s0,a5 - 2f12: ff050fa3 sb a6,-1(a0) - } while (s < se); - 2f16: feb7e9e3 bltu a5,a1,2f08 - c->count -= len; - 2f1a: 40b486bb subw a3,s1,a1 - c->buf += len; - 2f1e: 95a2 add a1,a1,s0 - 2f20: e02e sd a1,0(sp) - c->count -= len; - 2f22: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 2f24: 1ff00793 li a5,511 - 2f28: fcd7d1e3 bge a5,a3,2eea - 2f2c: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 2f2e: 86c6 mv a3,a7 - 2f30: 858a mv a1,sp - 2f32: ffffd517 auipc a0,0xffffd - 2f36: 21650513 addi a0,a0,534 # 148 - 2f3a: b4cfe0ef jal 1286 - l = (int)( c.buf - buf ); - 2f3e: 6782 ld a5,0(sp) - 2f40: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 2f42: 0097c463 blt a5,s1,2f4a - l = count - 1; - 2f46: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 2f4a: 943e add s0,s0,a5 - 2f4c: 00040023 sb zero,0(s0) -} - 2f50: 22813083 ld ra,552(sp) - 2f54: 22013403 ld s0,544(sp) - 2f58: 4532 lw a0,12(sp) - 2f5a: 21813483 ld s1,536(sp) - 2f5e: 23010113 addi sp,sp,560 - 2f62: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2f64: 86b2 mv a3,a2 - 2f66: 858a mv a1,sp - 2f68: 0810 addi a2,sp,16 - 2f6a: ffffd517 auipc a0,0xffffd - 2f6e: 22c50513 addi a0,a0,556 # 196 - c.length = 0; - 2f72: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 2f74: b12fe0ef jal 1286 -} - 2f78: 22813083 ld ra,552(sp) - 2f7c: 22013403 ld s0,544(sp) - 2f80: 4532 lw a0,12(sp) - 2f82: 21813483 ld s1,536(sp) - 2f86: 23010113 addi sp,sp,560 - 2f8a: 8082 ret - 2f8c: 86a6 mv a3,s1 - 2f8e: bf59 j 2f24 - -0000000000002f90 : -{ - 2f90: 715d addi sp,sp,-80 - va_start(va, fmt); - 2f92: 02810313 addi t1,sp,40 -{ - 2f96: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2f98: 869a mv a3,t1 -{ - 2f9a: ec06 sd ra,24(sp) - 2f9c: f83a sd a4,48(sp) - 2f9e: fc3e sd a5,56(sp) - 2fa0: e0c2 sd a6,64(sp) - 2fa2: e4c6 sd a7,72(sp) - va_start(va, fmt); - 2fa4: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 2fa6: f25ff0ef jal 2eca -} - 2faa: 60e2 ld ra,24(sp) - 2fac: 6161 addi sp,sp,80 - 2fae: 8082 ret - -0000000000002fb0 : -{ - 2fb0: 86ae mv a3,a1 - 2fb2: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 2fb4: 4581 li a1,0 - 2fb6: 862a mv a2,a0 - 2fb8: 4501 li a0,0 - 2fba: accfe06f j 1286 - -0000000000002fbe : -{ - 2fbe: 7119 addi sp,sp,-128 - va_start(ap, format); - 2fc0: 05010313 addi t1,sp,80 -{ - 2fc4: e0a2 sd s0,64(sp) - 2fc6: fc26 sd s1,56(sp) - 2fc8: 842a mv s0,a0 - 2fca: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 2fcc: 0808 addi a0,sp,16 - ctx.limit = size; - 2fce: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 2fd0: 861a mv a2,t1 -{ - 2fd2: e486 sd ra,72(sp) - 2fd4: ecb6 sd a3,88(sp) - 2fd6: f0ba sd a4,96(sp) - 2fd8: f4be sd a5,104(sp) - 2fda: f8c2 sd a6,112(sp) - 2fdc: fcc6 sd a7,120(sp) - va_start(ap, format); - 2fde: e41a sd t1,8(sp) - ctx.buf = str; - 2fe0: e822 sd s0,16(sp) - ctx.limit = size; - 2fe2: ec26 sd s1,24(sp) - ctx.written = 0; - 2fe4: f002 sd zero,32(sp) - ctx.stream = NULL; - 2fe6: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 2fe8: 02c000ef jal 3014 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 2fec: 7502 ld a0,32(sp) - 2fee: 00950b63 beq a0,s1,3004 - str[ctx.written] = '\0'; - 2ff2: 942a add s0,s0,a0 - 2ff4: 00040023 sb zero,0(s0) -} - 2ff8: 60a6 ld ra,72(sp) - 2ffa: 6406 ld s0,64(sp) - 2ffc: 74e2 ld s1,56(sp) - 2ffe: 2501 sext.w a0,a0 - 3000: 6109 addi sp,sp,128 - 3002: 8082 ret - str[size - 1] = '\0'; - 3004: fe040f23 sb zero,-2(s0) -} - 3008: 60a6 ld ra,72(sp) - 300a: 6406 ld s0,64(sp) - 300c: 74e2 ld s1,56(sp) - 300e: 2501 sext.w a0,a0 - 3010: 6109 addi sp,sp,128 - 3012: 8082 ret - -0000000000003014 <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 3014: 7129 addi sp,sp,-320 - 3016: edee sd s11,216(sp) - 3018: fe06 sd ra,312(sp) - 301a: 8dae mv s11,a1 - while (*p) - 301c: 0005c583 lbu a1,0(a1) - 3020: cde9 beqz a1,30fa <_vprintf_core.constprop.0.isra.0+0xe6> - 3022: f626 sd s1,296(sp) - 3024: f24a sd s2,288(sp) - 3026: ee4e sd s3,280(sp) - 3028: e656 sd s5,264(sp) - 302a: f9e2 sd s8,240(sp) - 302c: fa22 sd s0,304(sp) - 302e: ea52 sd s4,272(sp) - 3030: e25a sd s6,256(sp) - 3032: fdde sd s7,248(sp) - 3034: f5e6 sd s9,232(sp) - 3036: f1ea sd s10,224(sp) - 3038: 84aa mv s1,a0 - 303a: 8c32 mv s8,a2 - if (*p != '%') - 303c: 02500a93 li s5,37 - 3040: 49c1 li s3,16 - 3042: 00002917 auipc s2,0x2 - 3046: 2da90913 addi s2,s2,730 # 531c <_GLOBAL__sub_I__ZSt3cin+0x374> - 304a: a039 j 3058 <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 304c: 8526 mv a0,s1 - 304e: 952fe0ef jal 11a0 <_out_char> - while (*p) - 3052: 000dc583 lbu a1,0(s11) - 3056: c5d9 beqz a1,30e4 <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 3058: 0d85 addi s11,s11,1 - if (*p != '%') - 305a: ff5599e3 bne a1,s5,304c <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 305e: 4501 li a0,0 - 3060: 4881 li a7,0 - 3062: 4581 li a1,0 - 3064: 4b01 li s6,0 - 3066: 4a01 li s4,0 - if (*p == '-') - 3068: 000dcc83 lbu s9,0(s11) - 306c: fe0c871b addiw a4,s9,-32 - 3070: 0ff77713 zext.b a4,a4 - 3074: 00e9e763 bltu s3,a4,3082 <_vprintf_core.constprop.0.isra.0+0x6e> - 3078: 070a slli a4,a4,0x2 - 307a: 974a add a4,a4,s2 - 307c: 4318 lw a4,0(a4) - 307e: 974a add a4,a4,s2 - 3080: 8702 jr a4 - if (*p == '*') - 3082: 02a00793 li a5,42 - 3086: 16fc9c63 bne s9,a5,31fe <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 308a: 000c2403 lw s0,0(s8) - 308e: 0c21 addi s8,s8,8 - if (width < 0) - 3090: 00045563 bgez s0,309a <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 3094: 4080043b negw s0,s0 - flag_left = 1; - 3098: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 309a: 001dcc83 lbu s9,1(s11) - p++; - 309e: 0d85 addi s11,s11,1 - if (*p == '.') - 30a0: 02e00793 li a5,46 - int precision = -1; - 30a4: 5bfd li s7,-1 - if (*p == '.') - 30a6: 18fc8a63 beq s9,a5,323a <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 30aa: 06c00693 li a3,108 - 30ae: 8666 mv a2,s9 - 30b0: 1adc8663 beq s9,a3,325c <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 30b4: 07a00693 li a3,122 - p++; - 30b8: 0d85 addi s11,s11,1 - else if (*p == 'z') - 30ba: 24dc8163 beq s9,a3,32fc <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 30be: 06400693 li a3,100 - 30c2: 4adc8163 beq s9,a3,3564 <_vprintf_core.constprop.0.isra.0+0x550> - 30c6: 06400693 li a3,100 - int len_mod = 0; - 30ca: 4e81 li t4,0 - 30cc: 1b96e663 bltu a3,s9,3278 <_vprintf_core.constprop.0.isra.0+0x264> - 30d0: 04700693 li a3,71 - 30d4: 2796e463 bltu a3,s9,333c <_vprintf_core.constprop.0.isra.0+0x328> - 30d8: 04400693 li a3,68 - 30dc: 0596e363 bltu a3,s9,3122 <_vprintf_core.constprop.0.isra.0+0x10e> - 30e0: 240c9363 bnez s9,3326 <_vprintf_core.constprop.0.isra.0+0x312> - 30e4: 7452 ld s0,304(sp) - 30e6: 74b2 ld s1,296(sp) - 30e8: 7912 ld s2,288(sp) - 30ea: 69f2 ld s3,280(sp) - 30ec: 6a52 ld s4,272(sp) - 30ee: 6ab2 ld s5,264(sp) - 30f0: 6b12 ld s6,256(sp) - 30f2: 7bee ld s7,248(sp) - 30f4: 7c4e ld s8,240(sp) - 30f6: 7cae ld s9,232(sp) - 30f8: 7d0e ld s10,224(sp) -} - 30fa: 70f2 ld ra,312(sp) - 30fc: 6dee ld s11,216(sp) - 30fe: 6131 addi sp,sp,320 - 3100: 8082 ret - if (*p == '-') - 3102: 4585 li a1,1 - p++; - 3104: 0d85 addi s11,s11,1 - if (*p == '-') - 3106: b78d j 3068 <_vprintf_core.constprop.0.isra.0+0x54> - 3108: 4505 li a0,1 - p++; - 310a: 0d85 addi s11,s11,1 - while (1) - 310c: bfb1 j 3068 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 310e: 4885 li a7,1 - p++; - 3110: 0d85 addi s11,s11,1 - while (1) - 3112: bf99 j 3068 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 3114: 4b05 li s6,1 - p++; - 3116: 0d85 addi s11,s11,1 - while (1) - 3118: bf81 j 3068 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 311a: 4a05 li s4,1 - p++; - 311c: 0d85 addi s11,s11,1 - while (1) - 311e: b7a9 j 3068 <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 3120: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 3122: 02500693 li a3,37 - 3126: 02d10823 sb a3,48(sp) - 312a: 4d05 li s10,1 - if (flag_left) - 312c: 000a0763 beqz s4,313a <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 3130: 02d00693 li a3,45 - 3134: 02d108a3 sb a3,49(sp) - 3138: 4d09 li s10,2 - if (flag_zero) - 313a: 000b0c63 beqz s6,3152 <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 313e: 0c0d0793 addi a5,s10,192 - 3142: 0818 addi a4,sp,16 - 3144: 00e786b3 add a3,a5,a4 - 3148: 03000613 li a2,48 - 314c: f6c68023 sb a2,-160(a3) - 3150: 2d05 addiw s10,s10,1 - if (flag_plus) - 3152: c999 beqz a1,3168 <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 3154: 0c0d0793 addi a5,s10,192 - 3158: 0818 addi a4,sp,16 - 315a: 00e786b3 add a3,a5,a4 - 315e: 02b00613 li a2,43 - 3162: f6c68023 sb a2,-160(a3) - 3166: 2d05 addiw s10,s10,1 - if (flag_space) - 3168: 00088c63 beqz a7,3180 <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 316c: 0c0d0793 addi a5,s10,192 - 3170: 0818 addi a4,sp,16 - 3172: 00e786b3 add a3,a5,a4 - 3176: 02000613 li a2,32 - 317a: f6c68023 sb a2,-160(a3) - 317e: 2d05 addiw s10,s10,1 - if (flag_hash) - 3180: c919 beqz a0,3196 <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 3182: 0c0d0793 addi a5,s10,192 - 3186: 0818 addi a4,sp,16 - 3188: 00e786b3 add a3,a5,a4 - 318c: 02300613 li a2,35 - 3190: f6c68023 sb a2,-160(a3) - 3194: 2d05 addiw s10,s10,1 - if (width > 0) - 3196: 03010a13 addi s4,sp,48 - 319a: 28804563 bgtz s0,3424 <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 319e: 260bd763 bgez s7,340c <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 31a2: 0c0d0793 addi a5,s10,192 - 31a6: 0818 addi a4,sp,16 - 31a8: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31ac: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 31b0: 001d071b addiw a4,s10,1 - 31b4: 0c070793 addi a5,a4,192 - 31b8: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 31ba: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 31be: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31c0: 08000593 li a1,128 - 31c4: 8652 mv a2,s4 - 31c6: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 31c8: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 31cc: dc5ff0ef jal 2f90 - for (int i = 0; f_buf[i] != '\0'; i++) - 31d0: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 31d4: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 31d6: 05110413 addi s0,sp,81 - 31da: e6058ce3 beqz a1,3052 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 31de: 8526 mv a0,s1 - 31e0: fc1fd0ef jal 11a0 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 31e4: 00044583 lbu a1,0(s0) - 31e8: 0405 addi s0,s0,1 - 31ea: e60584e3 beqz a1,3052 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 31ee: 8526 mv a0,s1 - 31f0: fb1fd0ef jal 11a0 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 31f4: 00044583 lbu a1,0(s0) - 31f8: 0405 addi s0,s0,1 - 31fa: f1f5 bnez a1,31de <_vprintf_core.constprop.0.isra.0+0x1ca> - 31fc: bd99 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 31fe: fd0c869b addiw a3,s9,-48 - 3202: 0ff6f313 zext.b t1,a3 - 3206: 4725 li a4,9 - int width = 0; - 3208: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 320a: 4625 li a2,9 - 320c: e8676ae3 bltu a4,t1,30a0 <_vprintf_core.constprop.0.isra.0+0x8c> - 3210: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 3214: 0024171b slliw a4,s0,0x2 - 3218: 9f21 addw a4,a4,s0 - 321a: 0017171b slliw a4,a4,0x1 - 321e: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 3222: fd0c869b addiw a3,s9,-48 - 3226: 0ff6f713 zext.b a4,a3 - p++; - 322a: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 322c: fee672e3 bgeu a2,a4,3210 <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 3230: 02e00793 li a5,46 - int precision = -1; - 3234: 5bfd li s7,-1 - if (*p == '.') - 3236: e6fc9ae3 bne s9,a5,30aa <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 323a: 001dcc83 lbu s9,1(s11) - 323e: 02a00793 li a5,42 - 3242: 16fc9f63 bne s9,a5,33c0 <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 3246: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 324a: 06c00693 li a3,108 - precision = va_arg(ap, int); - 324e: 000c2b83 lw s7,0(s8) - p++; - 3252: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 3254: 0c21 addi s8,s8,8 - if (*p == 'l') - 3256: 8666 mv a2,s9 - 3258: e4dc9ee3 bne s9,a3,30b4 <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 325c: 001dcc83 lbu s9,1(s11) - 3260: 08cc8d63 beq s9,a2,32fa <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 3264: 06400693 li a3,100 - 3268: 0d89 addi s11,s11,2 - if (!spec) - 326a: 4cdc8c63 beq s9,a3,3742 <_vprintf_core.constprop.0.isra.0+0x72e> - 326e: 06400693 li a3,100 - len_mod = 1; - 3272: 4e85 li t4,1 - 3274: e596fee3 bgeu a3,s9,30d0 <_vprintf_core.constprop.0.isra.0+0xbc> - 3278: f9bc869b addiw a3,s9,-101 - 327c: 0ff6f693 zext.b a3,a3 - 3280: 464d li a2,19 - 3282: 12d66863 bltu a2,a3,33b2 <_vprintf_core.constprop.0.isra.0+0x39e> - 3286: 4e05 li t3,1 - 3288: 00091637 lui a2,0x91 - 328c: 00de1333 sll t1,t3,a3 - 3290: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x89018> - 3294: 00c37633 and a2,t1,a2 - 3298: 1a061463 bnez a2,3440 <_vprintf_core.constprop.0.isra.0+0x42c> - 329c: 00737313 andi t1,t1,7 - 32a0: e80311e3 bnez t1,3122 <_vprintf_core.constprop.0.isra.0+0x10e> - 32a4: 4639 li a2,14 - 32a6: 10c69663 bne a3,a2,33b2 <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 32aa: 000c3c83 ld s9,0(s8) - if (!s) - 32ae: 420c8863 beqz s9,36de <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 32b2: 000cc683 lbu a3,0(s9) - 32b6: 38068863 beqz a3,3646 <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 32ba: 8666 mv a2,s9 - int len = 0; - 32bc: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 32be: 00db8863 beq s7,a3,32ce <_vprintf_core.constprop.0.isra.0+0x2ba> - 32c2: 00164583 lbu a1,1(a2) - len++; - 32c6: 2685 addiw a3,a3,1 - tmp++; - 32c8: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 32ca: f9f5 bnez a1,32be <_vprintf_core.constprop.0.isra.0+0x2aa> - 32cc: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 32ce: 268bc563 blt s7,s0,3538 <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 32d2: 4401 li s0,0 - 32d4: 020b8163 beqz s7,32f6 <_vprintf_core.constprop.0.isra.0+0x2e2> - 32d8: 4d01 li s10,0 - _out_char(ctx, s[i]); - 32da: 01ac86b3 add a3,s9,s10 - 32de: 0006c583 lbu a1,0(a3) - 32e2: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 32e4: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 32e6: ebbfd0ef jal 11a0 <_out_char> - for (int i = 0; i < len; i++) - 32ea: 000d069b sext.w a3,s10 - 32ee: ff76c6e3 blt a3,s7,32da <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 32f2: 260a1463 bnez s4,355a <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 32f6: 0c21 addi s8,s8,8 - 32f8: bba9 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 32fa: 0d89 addi s11,s11,2 - char spec = *p++; - 32fc: 000dcc83 lbu s9,0(s11) - 3300: 06400693 li a3,100 - 3304: 001d8793 addi a5,s11,1 - if (!spec) - 3308: 3edc8063 beq s9,a3,36e8 <_vprintf_core.constprop.0.isra.0+0x6d4> - 330c: 0796ea63 bltu a3,s9,3380 <_vprintf_core.constprop.0.isra.0+0x36c> - 3310: 04700693 li a3,71 - 3314: 0f96e263 bltu a3,s9,33f8 <_vprintf_core.constprop.0.isra.0+0x3e4> - 3318: 04400693 li a3,68 - 331c: e196e2e3 bltu a3,s9,3120 <_vprintf_core.constprop.0.isra.0+0x10c> - 3320: dc0c82e3 beqz s9,30e4 <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 3324: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 3326: 02500593 li a1,37 - 332a: 8526 mv a0,s1 - 332c: e75fd0ef jal 11a0 <_out_char> - if (spec != '%') - 3330: 02500713 li a4,37 - 3334: d0ec8fe3 beq s9,a4,3052 <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 3338: 85e6 mv a1,s9 - 333a: bb09 j 304c <_vprintf_core.constprop.0.isra.0+0x38> - 333c: 05800693 li a3,88 - 3340: 2edc8263 beq s9,a3,3624 <_vprintf_core.constprop.0.isra.0+0x610> - 3344: 06300713 li a4,99 - 3348: 06ec9563 bne s9,a4,33b2 <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 334c: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 3350: 8722 mv a4,s0 - 3352: 00804363 bgtz s0,3358 <_vprintf_core.constprop.0.isra.0+0x344> - 3356: 4705 li a4,1 - 3358: fff7041b addiw s0,a4,-1 - if (!flag_left) - 335c: 3c0a0463 beqz s4,3724 <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 3360: 85e6 mv a1,s9 - 3362: 8526 mv a0,s1 - 3364: e3dfd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 3368: 4a01 li s4,0 - 336a: d451 beqz s0,32f6 <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 336c: 02000593 li a1,32 - 3370: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3372: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3374: e2dfd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 3378: ff441ae3 bne s0,s4,336c <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 337c: 0c21 addi s8,s8,8 - 337e: b9d1 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - 3380: f9bc861b addiw a2,s9,-101 - 3384: 0ff67613 zext.b a2,a2 - 3388: 46cd li a3,19 - 338a: 40c6e963 bltu a3,a2,379c <_vprintf_core.constprop.0.isra.0+0x788> - 338e: 00091337 lui t1,0x91 - 3392: 4685 li a3,1 - 3394: 00c696b3 sll a3,a3,a2 - 3398: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x89018> - 339c: 0066f333 and t1,a3,t1 - 33a0: 34031c63 bnez t1,36f8 <_vprintf_core.constprop.0.isra.0+0x6e4> - 33a4: 8a9d andi a3,a3,7 - 33a6: d6069de3 bnez a3,3120 <_vprintf_core.constprop.0.isra.0+0x10c> - 33aa: 46b9 li a3,14 - char spec = *p++; - 33ac: 8dbe mv s11,a5 - 33ae: eed60ee3 beq a2,a3,32aa <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 33b2: 02500593 li a1,37 - 33b6: 8526 mv a0,s1 - 33b8: de9fd0ef jal 11a0 <_out_char> - _out_char(ctx, spec); - 33bc: 85e6 mv a1,s9 - 33be: b179 j 304c <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 33c0: fd0c869b addiw a3,s9,-48 - 33c4: 0ff6fe13 zext.b t3,a3 - 33c8: 4625 li a2,9 - p++; - 33ca: 0d85 addi s11,s11,1 - precision = 0; - 33cc: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 33ce: 4325 li t1,9 - 33d0: cdc66de3 bltu a2,t3,30aa <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 33d4: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 33d8: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 33dc: 0176073b addw a4,a2,s7 - 33e0: 0017171b slliw a4,a4,0x1 - 33e4: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 33e8: fd0c869b addiw a3,s9,-48 - 33ec: 0ff6f613 zext.b a2,a3 - p++; - 33f0: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 33f2: fec371e3 bgeu t1,a2,33d4 <_vprintf_core.constprop.0.isra.0+0x3c0> - 33f6: b955 j 30aa <_vprintf_core.constprop.0.isra.0+0x96> - 33f8: 05800693 li a3,88 - 33fc: 3cdc8d63 beq s9,a3,37d6 <_vprintf_core.constprop.0.isra.0+0x7c2> - 3400: 06300713 li a4,99 - char spec = *p++; - 3404: 8dbe mv s11,a5 - 3406: f4ec83e3 beq s9,a4,334c <_vprintf_core.constprop.0.isra.0+0x338> - 340a: b765 j 33b2 <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 340c: 01aa0533 add a0,s4,s10 - 3410: 865e mv a2,s7 - 3412: 00002597 auipc a1,0x2 - 3416: c8e58593 addi a1,a1,-882 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xf8> - 341a: ba5ff0ef jal 2fbe - 341e: 00ad0d3b addw s10,s10,a0 - 3422: b341 j 31a2 <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 3424: 01aa0533 add a0,s4,s10 - 3428: 8622 mv a2,s0 - 342a: 00002597 auipc a1,0x2 - 342e: c6e58593 addi a1,a1,-914 # 5098 <_GLOBAL__sub_I__ZSt3cin+0xf0> - 3432: b8dff0ef jal 2fbe - 3436: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 343a: d60bc4e3 bltz s7,31a2 <_vprintf_core.constprop.0.isra.0+0x18e> - 343e: b7f9 j 340c <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 3440: 06900693 li a3,105 - 3444: 10dc8e63 beq s9,a3,3560 <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 3448: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 344c: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3450: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3452: 38dc9d63 bne s9,a3,37ec <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 3456: 33ce8963 beq t4,t3,3788 <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 345a: 000c6e03 lwu t3,0(s8) - 345e: 85f6 mv a1,t4 - 3460: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3462: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3464: 00002f97 auipc t6,0x2 - 3468: c04f8f93 addi t6,t6,-1020 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - if (val == 0) - 346c: 120e0363 beqz t3,3592 <_vprintf_core.constprop.0.isra.0+0x57e> - 3470: 01010293 addi t0,sp,16 - sign_char = '-'; - 3474: 8616 mv a2,t0 - 3476: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 3478: 0266f8b3 remu a7,a3,t1 - 347c: 8f32 mv t5,a2 - while (val != 0) - 347e: 0605 addi a2,a2,1 - 3480: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 3482: 98fe add a7,a7,t6 - 3484: 0008c883 lbu a7,0(a7) - val /= base; - 3488: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 348c: ff160fa3 sb a7,-1(a2) - while (val != 0) - 3490: fe6ef4e3 bgeu t4,t1,3478 <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 3494: 405f0f3b subw t5,t5,t0 - 3498: 2f05 addiw t5,t5,1 - if (precision >= 0) - 349a: 100bc363 bltz s7,35a0 <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 349e: 1d7f4d63 blt t5,s7,3678 <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 34a2: 340b9163 bnez s7,37e4 <_vprintf_core.constprop.0.isra.0+0x7d0> - 34a6: 200e0763 beqz t3,36b4 <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 34aa: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34ae: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 34b2: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 34b4: 28dc8e63 beq s9,a3,3750 <_vprintf_core.constprop.0.isra.0+0x73c> - 34b8: 2a051663 bnez a0,3764 <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 34bc: 00bf05bb addw a1,t5,a1 - 34c0: 8d52 mv s10,s4 - 34c2: 4b01 li s6,0 - char *prefix_str = NULL; - 34c4: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 34c6: 1085d263 bge a1,s0,35ca <_vprintf_core.constprop.0.isra.0+0x5b6> - 34ca: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 34cc: 100d0a63 beqz s10,35e0 <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 34d0: 6782 ld a5,0(sp) - 34d2: 10079263 bnez a5,35d6 <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 34d6: 000c8c63 beqz s9,34ee <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 34da: 000cc583 lbu a1,0(s9) - 34de: 8526 mv a0,s1 - 34e0: cc1fd0ef jal 11a0 <_out_char> - _out_char(ctx, prefix_str[1]); - 34e4: 001cc583 lbu a1,1(s9) - 34e8: 8526 mv a0,s1 - 34ea: cb7fd0ef jal 11a0 <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 34ee: 180b0263 beqz s6,3672 <_vprintf_core.constprop.0.isra.0+0x65e> - 34f2: 100a1863 bnez s4,3602 <_vprintf_core.constprop.0.isra.0+0x5ee> - 34f6: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 34fa: 2a0b8363 beqz s7,37a0 <_vprintf_core.constprop.0.isra.0+0x78c> - 34fe: 4c81 li s9,0 - _out_char(ctx, '0'); - 3500: 03000593 li a1,48 - 3504: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 3506: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 3508: c99fd0ef jal 11a0 <_out_char> - for (int i = 0; i < total_zeros; i++) - 350c: ff7c9ae3 bne s9,s7,3500 <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 3510: 57fd li a5,-1 - 3512: 00fc0f63 beq s8,a5,3530 <_vprintf_core.constprop.0.isra.0+0x51c> - 3516: 01010c93 addi s9,sp,16 - 351a: 9ce2 add s9,s9,s8 - 351c: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 3520: 000cc583 lbu a1,0(s9) - 3524: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 3526: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 3528: c79fd0ef jal 11a0 <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 352c: ff9c1ae3 bne s8,s9,3520 <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 3530: 0c0a1e63 bnez s4,360c <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 3534: 6c22 ld s8,8(sp) - 3536: be31 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 3538: 4174043b subw s0,s0,s7 - if (!flag_left) - 353c: 100a0a63 beqz s4,3650 <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 3540: d80b9ce3 bnez s7,32d8 <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 3544: 4a01 li s4,0 - _out_char(ctx, ' '); - 3546: 02000593 li a1,32 - 354a: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 354c: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 354e: c53fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 3552: ff441ae3 bne s0,s4,3546 <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 3556: 0c21 addi s8,s8,8 - 3558: bced j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 355a: f46d bnez s0,3544 <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 355c: 0c21 addi s8,s8,8 - 355e: bcd5 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 3560: 1fce8163 beq t4,t3,3742 <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 3564: 000c2e03 lw t3,0(s8) - 3568: 008c0793 addi a5,s8,8 - 356c: e43e sd a5,8(sp) - int64 sval = (int64)val; - 356e: 86f2 mv a3,t3 - if (sval < 0) - 3570: 1406cb63 bltz a3,36c6 <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 3574: 02b00793 li a5,43 - 3578: e03e sd a5,0(sp) - else if (flag_plus) - 357a: e589 bnez a1,3584 <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 357c: 00589793 slli a5,a7,0x5 - 3580: e03e sd a5,0(sp) - 3582: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3584: 4329 li t1,10 - 3586: 00002f97 auipc t6,0x2 - 358a: ae2f8f93 addi t6,t6,-1310 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - if (val == 0) - 358e: ee0e11e3 bnez t3,3470 <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 3592: 03000693 li a3,48 - 3596: 00d10823 sb a3,16(sp) - return i; - 359a: 4f05 li t5,1 - if (precision >= 0) - 359c: f00bd1e3 bgez s7,349e <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 35a0: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35a4: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 35a8: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 35ac: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 35ae: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 35b0: 0d1c9f63 bne s9,a7,368e <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 35b4: 00002c97 auipc s9,0x2 - 35b8: accc8c93 addi s9,s9,-1332 # 5080 <_GLOBAL__sub_I__ZSt3cin+0xd8> - prefix_len += 2; - 35bc: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35be: 017585bb addw a1,a1,s7 - 35c2: 01e585bb addw a1,a1,t5 - 35c6: f085c2e3 blt a1,s0,34ca <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 35ca: 080d0f63 beqz s10,3668 <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 35ce: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 35d0: 4401 li s0,0 - if (sign_char) - 35d2: f00782e3 beqz a5,34d6 <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 35d6: 6582 ld a1,0(sp) - 35d8: 8526 mv a0,s1 - 35da: bc7fd0ef jal 11a0 <_out_char> - 35de: bde5 j 34d6 <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, ' '); - 35e0: 02000593 li a1,32 - 35e4: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 35e6: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 35e8: bb9fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 35ec: efa402e3 beq s0,s10,34d0 <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 35f0: 02000593 li a1,32 - 35f4: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 35f6: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 35f8: ba9fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 35fc: ffa412e3 bne s0,s10,35e0 <_vprintf_core.constprop.0.isra.0+0x5cc> - 3600: bdc1 j 34d0 <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 3602: ee0b9ee3 bnez s7,34fe <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 3606: 577d li a4,-1 - 3608: f0ec17e3 bne s8,a4,3516 <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 360c: d405 beqz s0,3534 <_vprintf_core.constprop.0.isra.0+0x520> - 360e: 4a01 li s4,0 - _out_char(ctx, ' '); - 3610: 02000593 li a1,32 - 3614: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3616: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 3618: b89fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 361c: fe8a1ae3 bne s4,s0,3610 <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 3620: 6c22 ld s8,8(sp) - 3622: bc05 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 3624: 008c0793 addi a5,s8,8 - 3628: e43e sd a5,8(sp) - else if (len_mod == 1) - 362a: 180e9163 bnez t4,37ac <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 362e: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3632: 4581 li a1,0 - 3634: 05800c93 li s9,88 - 3638: e002 sd zero,0(sp) - 363a: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 363c: 00002f97 auipc t6,0x2 - 3640: a14f8f93 addi t6,t6,-1516 # 5050 <_GLOBAL__sub_I__ZSt3cin+0xa8> - 3644: b525 j 346c <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 3646: ca8058e3 blez s0,32f6 <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 364a: ee0a1de3 bnez s4,3544 <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 364e: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 3650: 4d01 li s10,0 - _out_char(ctx, ' '); - 3652: 02000593 li a1,32 - 3656: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 3658: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 365a: b47fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 365e: fe8d1ae3 bne s10,s0,3652 <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 3662: c60b9be3 bnez s7,32d8 <_vprintf_core.constprop.0.isra.0+0x2c4> - 3666: b941 j 32f6 <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 3668: 6782 ld a5,0(sp) - 366a: 4401 li s0,0 - 366c: f7ad bnez a5,35d6 <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 366e: e60c96e3 bnez s9,34da <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 3672: e80b96e3 bnez s7,34fe <_vprintf_core.constprop.0.isra.0+0x4ea> - 3676: bd69 j 3510 <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 3678: 41eb8bbb subw s7,s7,t5 - 367c: 8d52 mv s10,s4 - 367e: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 3680: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3684: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 3688: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 368a: f31c85e3 beq s9,a7,35b4 <_vprintf_core.constprop.0.isra.0+0x5a0> - 368e: cd09 beqz a0,36a8 <_vprintf_core.constprop.0.isra.0+0x694> - 3690: 000e0c63 beqz t3,36a8 <_vprintf_core.constprop.0.isra.0+0x694> - 3694: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 3698: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 369c: f0ac8ce3 beq s9,a0,35b4 <_vprintf_core.constprop.0.isra.0+0x5a0> - 36a0: 05800613 li a2,88 - 36a4: 12cc8463 beq s9,a2,37cc <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 36a8: 00bb85bb addw a1,s7,a1 - 36ac: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 36b0: 4c81 li s9,0 - 36b2: bd11 j 34c6 <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 36b4: 07000693 li a3,112 - 36b8: 8d52 mv s10,s4 - 36ba: 4b01 li s6,0 - 36bc: 08dc8d63 beq s9,a3,3756 <_vprintf_core.constprop.0.isra.0+0x742> - 36c0: 5c7d li s8,-1 - char *prefix_str = NULL; - 36c2: 4c81 li s9,0 - 36c4: b509 j 34c6 <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 36c6: 02d00793 li a5,45 - val = (uint64)(-sval); - 36ca: 40d00e33 neg t3,a3 - 36ce: 4585 li a1,1 - 36d0: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 36d2: 00002f97 auipc t6,0x2 - 36d6: 996f8f93 addi t6,t6,-1642 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - sign_char = '-'; - 36da: e03e sd a5,0(sp) - 36dc: bb51 j 3470 <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 36de: 00002c97 auipc s9,0x2 - 36e2: 9b2c8c93 addi s9,s9,-1614 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xe8> - 36e6: bed1 j 32ba <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 36e8: 000c3683 ld a3,0(s8) - 36ec: 008c0713 addi a4,s8,8 - 36f0: e43a sd a4,8(sp) - 36f2: 8dbe mv s11,a5 - 36f4: 8e36 mv t3,a3 - if (is_signed) - 36f6: bdad j 3570 <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 36f8: 06900693 li a3,105 - 36fc: fedc86e3 beq s9,a3,36e8 <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 3700: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3704: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 3708: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 370a: 06dc9063 bne s9,a3,376a <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 370e: 000c3e03 ld t3,0(s8) - 3712: 8dbe mv s11,a5 - 3714: 4581 li a1,0 - 3716: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3718: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 371a: 00002f97 auipc t6,0x2 - 371e: 94ef8f93 addi t6,t6,-1714 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 3722: b3a9 j 346c <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 3724: c809 beqz s0,3736 <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 3726: 02000593 li a1,32 - 372a: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 372c: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 372e: a73fd0ef jal 11a0 <_out_char> - for (int i = 0; i < padding; i++) - 3732: ff441ae3 bne s0,s4,3726 <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 3736: 85e6 mv a1,s9 - 3738: 8526 mv a0,s1 - 373a: a67fd0ef jal 11a0 <_out_char> - const char *s = va_arg(ap, char *); - 373e: 0c21 addi s8,s8,8 - 3740: ba09 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3742: 000c3683 ld a3,0(s8) - 3746: 008c0793 addi a5,s8,8 - 374a: e43e sd a5,8(sp) - 374c: 8e36 mv t3,a3 - if (is_signed) - 374e: b50d j 3570 <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3750: 8d52 mv s10,s4 - 3752: 4b01 li s6,0 - 3754: b585 j 35b4 <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 3756: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3758: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 375a: 00002c97 auipc s9,0x2 - 375e: 926c8c93 addi s9,s9,-1754 # 5080 <_GLOBAL__sub_I__ZSt3cin+0xd8> - 3762: bda9 j 35bc <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 3764: 8d52 mv s10,s4 - 3766: 4b01 li s6,0 - 3768: b735 j 3694 <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 376a: 07000693 li a3,112 - 376e: 04dc8263 beq s9,a3,37b2 <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 3772: 000c3e03 ld t3,0(s8) - 3776: 8dbe mv s11,a5 - 3778: 4581 li a1,0 - 377a: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 377c: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 377e: 00002f97 auipc t6,0x2 - 3782: 8eaf8f93 addi t6,t6,-1814 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 3786: b1dd j 346c <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 3788: 000c3e03 ld t3,0(s8) - 378c: 4581 li a1,0 - 378e: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 3790: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 3792: 00002f97 auipc t6,0x2 - 3796: 8d6f8f93 addi t6,t6,-1834 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 379a: b9c9 j 346c <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 379c: 8dbe mv s11,a5 - 379e: b911 j 33b2 <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 37a0: 577d li a4,-1 - 37a2: 4401 li s0,0 - 37a4: d6ec19e3 bne s8,a4,3516 <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 37a8: 6c22 ld s8,8(sp) - 37aa: b065 j 3052 <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 37ac: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37b0: b549 j 3632 <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37b2: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 37b4: 000c3e03 ld t3,0(s8) - 37b8: 4581 li a1,0 - 37ba: 07000c93 li s9,112 - 37be: e002 sd zero,0(sp) - 37c0: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37c2: 00002f97 auipc t6,0x2 - 37c6: 8a6f8f93 addi t6,t6,-1882 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 37ca: b14d j 346c <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 37cc: 00002c97 auipc s9,0x2 - 37d0: 8bcc8c93 addi s9,s9,-1860 # 5088 <_GLOBAL__sub_I__ZSt3cin+0xe0> - 37d4: b3e5 j 35bc <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 37d6: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37da: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 37de: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 37e0: 8dbe mv s11,a5 - 37e2: bd81 j 3632 <_vprintf_core.constprop.0.isra.0+0x61e> - 37e4: 8d52 mv s10,s4 - 37e6: 4b01 li s6,0 - 37e8: 4b81 li s7,0 - 37ea: bd59 j 3680 <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 37ec: 07000693 li a3,112 - 37f0: fcdc82e3 beq s9,a3,37b4 <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 37f4: 01ce8c63 beq t4,t3,380c <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 37f8: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 37fc: 4581 li a1,0 - 37fe: e002 sd zero,0(sp) - 3800: 4329 li t1,10 - 3802: 00002f97 auipc t6,0x2 - 3806: 866f8f93 addi t6,t6,-1946 # 5068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 380a: b18d j 346c <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 380c: 000c3e03 ld t3,0(s8) - if (is_signed) - 3810: b7f5 j 37fc <_vprintf_core.constprop.0.isra.0+0x7e8> - -0000000000003812 : -{ - 3812: 7139 addi sp,sp,-64 - 3814: f822 sd s0,48(sp) - 3816: f426 sd s1,40(sp) - 3818: 842e mv s0,a1 - 381a: 84aa mv s1,a0 - 381c: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 381e: 850a mv a0,sp - 3820: 8636 mv a2,a3 -{ - 3822: fc06 sd ra,56(sp) - ctx.buf = str; - 3824: e026 sd s1,0(sp) - ctx.limit = size; - 3826: e422 sd s0,8(sp) - ctx.written = 0; - 3828: e802 sd zero,16(sp) - ctx.stream = NULL; - 382a: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 382c: fe8ff0ef jal 3014 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3830: 6542 ld a0,16(sp) - if (size > 0) - 3832: c411 beqz s0,383e - if (ctx.written < size) - 3834: 00857b63 bgeu a0,s0,384a - str[ctx.written] = '\0'; - 3838: 94aa add s1,s1,a0 - 383a: 00048023 sb zero,0(s1) -} - 383e: 70e2 ld ra,56(sp) - 3840: 7442 ld s0,48(sp) - 3842: 74a2 ld s1,40(sp) - 3844: 2501 sext.w a0,a0 - 3846: 6121 addi sp,sp,64 - 3848: 8082 ret - str[size - 1] = '\0'; - 384a: 94a2 add s1,s1,s0 - 384c: fe048fa3 sb zero,-1(s1) -} - 3850: 70e2 ld ra,56(sp) - 3852: 7442 ld s0,48(sp) - 3854: 74a2 ld s1,40(sp) - 3856: 2501 sext.w a0,a0 - 3858: 6121 addi sp,sp,64 - 385a: 8082 ret - -000000000000385c : -{ - 385c: 7119 addi sp,sp,-128 - 385e: e0a2 sd s0,64(sp) - 3860: fc26 sd s1,56(sp) - 3862: 842e mv s0,a1 - 3864: 84aa mv s1,a0 - 3866: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 3868: 0808 addi a0,sp,16 - va_start(ap, format); - 386a: 08b0 addi a2,sp,88 -{ - 386c: e486 sd ra,72(sp) - 386e: ecb6 sd a3,88(sp) - 3870: f0ba sd a4,96(sp) - 3872: f4be sd a5,104(sp) - 3874: f8c2 sd a6,112(sp) - 3876: fcc6 sd a7,120(sp) - va_start(ap, format); - 3878: e432 sd a2,8(sp) - ctx.buf = str; - 387a: e826 sd s1,16(sp) - ctx.limit = size; - 387c: ec22 sd s0,24(sp) - ctx.written = 0; - 387e: f002 sd zero,32(sp) - ctx.stream = NULL; - 3880: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 3882: f92ff0ef jal 3014 <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 3886: 7502 ld a0,32(sp) - if (size > 0) - 3888: c411 beqz s0,3894 - if (ctx.written < size) - 388a: 00857b63 bgeu a0,s0,38a0 - str[ctx.written] = '\0'; - 388e: 94aa add s1,s1,a0 - 3890: 00048023 sb zero,0(s1) -} - 3894: 60a6 ld ra,72(sp) - 3896: 6406 ld s0,64(sp) - 3898: 74e2 ld s1,56(sp) - 389a: 2501 sext.w a0,a0 - 389c: 6109 addi sp,sp,128 - 389e: 8082 ret - str[size - 1] = '\0'; - 38a0: 94a2 add s1,s1,s0 - 38a2: fe048fa3 sb zero,-1(s1) -} - 38a6: 60a6 ld ra,72(sp) - 38a8: 6406 ld s0,64(sp) - 38aa: 74e2 ld s1,56(sp) - 38ac: 2501 sext.w a0,a0 - 38ae: 6109 addi sp,sp,128 - 38b0: 8082 ret - -00000000000038b2 : -{ - 38b2: 7119 addi sp,sp,-128 - va_start(ap, format); - 38b4: 04810313 addi t1,sp,72 -{ - 38b8: e4ae sd a1,72(sp) - 38ba: e8b2 sd a2,80(sp) - 38bc: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 38be: 85aa mv a1,a0 - ctx.stream = stdout; - 38c0: 00004797 auipc a5,0x4 - 38c4: da07b783 ld a5,-608(a5) # 7660 - _vprintf_core(&ctx, format, ap); - 38c8: 0808 addi a0,sp,16 - 38ca: 861a mv a2,t1 -{ - 38cc: fc06 sd ra,56(sp) - 38ce: ecb6 sd a3,88(sp) - 38d0: f0ba sd a4,96(sp) - 38d2: f8c2 sd a6,112(sp) - 38d4: fcc6 sd a7,120(sp) - va_start(ap, format); - 38d6: e41a sd t1,8(sp) - ctx.buf = NULL; - 38d8: e802 sd zero,16(sp) - ctx.limit = 0; - 38da: ec02 sd zero,24(sp) - ctx.written = 0; - 38dc: f002 sd zero,32(sp) - ctx.stream = stdout; - 38de: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 38e0: f34ff0ef jal 3014 <_vprintf_core.constprop.0.isra.0> -} - 38e4: 70e2 ld ra,56(sp) - 38e6: 5502 lw a0,32(sp) - 38e8: 6109 addi sp,sp,128 - 38ea: 8082 ret - -00000000000038ec : -{ - 38ec: 7159 addi sp,sp,-112 - va_start(ap, format); - 38ee: 04010e13 addi t3,sp,64 -{ - 38f2: 8eaa mv t4,a0 - ctx.fd = -1; - 38f4: 537d li t1,-1 -{ - 38f6: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 38f8: 0808 addi a0,sp,16 - 38fa: 8672 mv a2,t3 -{ - 38fc: fc06 sd ra,56(sp) - 38fe: e4b6 sd a3,72(sp) - 3900: e8ba sd a4,80(sp) - 3902: ecbe sd a5,88(sp) - 3904: f0c2 sd a6,96(sp) - 3906: f4c6 sd a7,104(sp) - va_start(ap, format); - 3908: e472 sd t3,8(sp) - ctx.buf = str; - 390a: e876 sd t4,16(sp) - ctx.fd = -1; - 390c: cc1a sw t1,24(sp) - ctx.pos = 0; - 390e: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3910: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3912: 81efd0ef jal 930 <_vscanf_core.constprop.0> -} - 3916: 70e2 ld ra,56(sp) - 3918: 6165 addi sp,sp,112 - 391a: 8082 ret - -000000000000391c : -{ - 391c: 7119 addi sp,sp,-128 - va_start(ap, format); - 391e: 04810313 addi t1,sp,72 -{ - 3922: e4ae sd a1,72(sp) - 3924: e8b2 sd a2,80(sp) - 3926: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3928: 85aa mv a1,a0 - ctx.ungotten = -1; - 392a: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 392c: 0808 addi a0,sp,16 - 392e: 861a mv a2,t1 -{ - 3930: fc06 sd ra,56(sp) - 3932: ecb6 sd a3,88(sp) - 3934: f0ba sd a4,96(sp) - 3936: f8c2 sd a6,112(sp) - 3938: fcc6 sd a7,120(sp) - va_start(ap, format); - 393a: e41a sd t1,8(sp) - ctx.buf = NULL; - 393c: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 393e: cc02 sw zero,24(sp) - ctx.pos = 0; - 3940: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3942: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3944: fedfc0ef jal 930 <_vscanf_core.constprop.0> -} - 3948: 70e2 ld ra,56(sp) - 394a: 6109 addi sp,sp,128 - 394c: 8082 ret - -000000000000394e : -{ - 394e: 1101 addi sp,sp,-32 - 3950: e426 sd s1,8(sp) - 3952: 84ae mv s1,a1 - 3954: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 3956: 00001597 auipc a1,0x1 - 395a: 75258593 addi a1,a1,1874 # 50a8 <_GLOBAL__sub_I__ZSt3cin+0x100> -{ - 395e: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 3960: 8526 mv a0,s1 -{ - 3962: e822 sd s0,16(sp) - 3964: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 3966: 298010ef jal 4bfe - 396a: 842a mv s0,a0 - 396c: c919 beqz a0,3982 - else if (strcmp(mode, "w") == 0) - 396e: 00001597 auipc a1,0x1 - 3972: 74258593 addi a1,a1,1858 # 50b0 <_GLOBAL__sub_I__ZSt3cin+0x108> - 3976: 8526 mv a0,s1 - 3978: 286010ef jal 4bfe - flags = O_WRONLY | O_CREAT | O_TRUNC; - 397c: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 3980: ed39 bnez a0,39de - int64 fd = open(filename, flags); - 3982: 85a2 mv a1,s0 - 3984: 854a mv a0,s2 - 3986: f42fc0ef jal c8 - 398a: 84aa mv s1,a0 - if (fd < 0) - 398c: 06054c63 bltz a0,3a04 - FILE *f = (FILE *)malloc(sizeof(FILE)); - 3990: 42000513 li a0,1056 - 3994: 2f3000ef jal 4486 - 3998: 892a mv s2,a0 - if (!f) - 399a: c53d beqz a0,3a08 - memset(f, 0, sizeof(FILE)); - 399c: 42000613 li a2,1056 - 39a0: 4581 li a1,0 - 39a2: 0ee010ef jal 4a90 - if (fd == 1) - 39a6: 4785 li a5,1 - f->fd = (int)fd; - 39a8: 00992023 sw s1,0(s2) - f->flags = flags; - 39ac: 00892223 sw s0,4(s2) - if (fd == 1) - 39b0: 00f48e63 beq s1,a5,39cc - else if (fd == 2) - 39b4: 4789 li a5,2 - 39b6: 00f48b63 beq s1,a5,39cc - f->buf_mode = 0; - 39ba: 40092e23 sw zero,1052(s2) -} - 39be: 60e2 ld ra,24(sp) - 39c0: 6442 ld s0,16(sp) - 39c2: 64a2 ld s1,8(sp) - 39c4: 854a mv a0,s2 - 39c6: 6902 ld s2,0(sp) - 39c8: 6105 addi sp,sp,32 - 39ca: 8082 ret - 39cc: 60e2 ld ra,24(sp) - 39ce: 6442 ld s0,16(sp) - f->buf_mode = 2; - 39d0: 40992e23 sw s1,1052(s2) -} - 39d4: 854a mv a0,s2 - 39d6: 64a2 ld s1,8(sp) - 39d8: 6902 ld s2,0(sp) - 39da: 6105 addi sp,sp,32 - 39dc: 8082 ret - else if (strcmp(mode, "a") == 0) - 39de: 00001597 auipc a1,0x1 - 39e2: 6da58593 addi a1,a1,1754 # 50b8 <_GLOBAL__sub_I__ZSt3cin+0x110> - 39e6: 8526 mv a0,s1 - 39e8: 216010ef jal 4bfe - flags = O_WRONLY | O_CREAT | O_APPEND; - 39ec: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 39f0: d949 beqz a0,3982 - else if (strcmp(mode, "r+") == 0) - 39f2: 00001597 auipc a1,0x1 - 39f6: 6ce58593 addi a1,a1,1742 # 50c0 <_GLOBAL__sub_I__ZSt3cin+0x118> - 39fa: 8526 mv a0,s1 - 39fc: 202010ef jal 4bfe - flags = O_RDWR; - 3a00: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 3a02: d141 beqz a0,3982 - return NULL; - 3a04: 4901 li s2,0 - 3a06: bf65 j 39be - close(fd); - 3a08: 8526 mv a0,s1 - 3a0a: ea6fc0ef jal b0 - return NULL; - 3a0e: 4901 li s2,0 - 3a10: b77d j 39be - -0000000000003a12 : - if (!stream) - 3a12: cd29 beqz a0,3a6c - if (stream->buf_write_pos > 0) - 3a14: 41052603 lw a2,1040(a0) -{ - 3a18: 1141 addi sp,sp,-16 - 3a1a: e022 sd s0,0(sp) - 3a1c: e406 sd ra,8(sp) - 3a1e: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a20: 02c04a63 bgtz a2,3a54 - if (stream != stdin && stream != stdout && stream != stderr) - 3a24: 00004797 auipc a5,0x4 - 3a28: c3c78793 addi a5,a5,-964 # 7660 - 3a2c: 6798 ld a4,8(a5) - 3a2e: 00870e63 beq a4,s0,3a4a - 3a32: 6398 ld a4,0(a5) - 3a34: 00870b63 beq a4,s0,3a4a - 3a38: 6b9c ld a5,16(a5) - 3a3a: 00878863 beq a5,s0,3a4a - close(stream->fd); - 3a3e: 4008 lw a0,0(s0) - 3a40: e70fc0ef jal b0 - free(stream); - 3a44: 8522 mv a0,s0 - 3a46: 1cb000ef jal 4410 -} - 3a4a: 60a2 ld ra,8(sp) - 3a4c: 6402 ld s0,0(sp) - return 0; - 3a4e: 4501 li a0,0 -} - 3a50: 0141 addi sp,sp,16 - 3a52: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a54: 4108 lw a0,0(a0) - 3a56: 01040593 addi a1,s0,16 - 3a5a: e4efc0ef jal a8 - if (ret < stream->buf_write_pos) - 3a5e: 41042783 lw a5,1040(s0) - 3a62: 00f54763 blt a0,a5,3a70 - stream->buf_write_pos = 0; - 3a66: 40042823 sw zero,1040(s0) - 3a6a: bf6d j 3a24 - return -1; - 3a6c: 557d li a0,-1 -} - 3a6e: 8082 ret - stream->error = 1; - 3a70: 4785 li a5,1 - 3a72: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3a74: 40042823 sw zero,1040(s0) - return EOF; - 3a78: b775 j 3a24 - -0000000000003a7a : - if (!stream) - 3a7a: c121 beqz a0,3aba - if (stream->buf_write_pos > 0) - 3a7c: 41052603 lw a2,1040(a0) -{ - 3a80: 1141 addi sp,sp,-16 - 3a82: e022 sd s0,0(sp) - 3a84: e406 sd ra,8(sp) - 3a86: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3a88: 00c04763 bgtz a2,3a96 - return 0; - 3a8c: 4501 li a0,0 -} - 3a8e: 60a2 ld ra,8(sp) - 3a90: 6402 ld s0,0(sp) - 3a92: 0141 addi sp,sp,16 - 3a94: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3a96: 4108 lw a0,0(a0) - 3a98: 01040593 addi a1,s0,16 - 3a9c: e0cfc0ef jal a8 - if (ret < stream->buf_write_pos) - 3aa0: 41042783 lw a5,1040(s0) - 3aa4: 00f54563 blt a0,a5,3aae - stream->buf_write_pos = 0; - 3aa8: 40042823 sw zero,1040(s0) - 3aac: b7c5 j 3a8c - stream->error = 1; - 3aae: 4785 li a5,1 - 3ab0: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3ab2: 40042823 sw zero,1040(s0) - return EOF; - 3ab6: 557d li a0,-1 - 3ab8: bfd9 j 3a8e - 3aba: 557d li a0,-1 -} - 3abc: 8082 ret - -0000000000003abe : -{ - 3abe: 7159 addi sp,sp,-112 - 3ac0: fc06 sd ra,56(sp) - 3ac2: e0b2 sd a2,64(sp) - 3ac4: e4b6 sd a3,72(sp) - 3ac6: e8ba sd a4,80(sp) - 3ac8: ecbe sd a5,88(sp) - 3aca: f0c2 sd a6,96(sp) - 3acc: f4c6 sd a7,104(sp) - if (!stream) - 3ace: cd19 beqz a0,3aec - va_start(ap, format); - 3ad0: 832a mv t1,a0 - 3ad2: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 3ad4: 0808 addi a0,sp,16 - va_start(ap, format); - 3ad6: e432 sd a2,8(sp) - ctx.buf = NULL; - 3ad8: e802 sd zero,16(sp) - ctx.limit = 0; - 3ada: ec02 sd zero,24(sp) - ctx.written = 0; - 3adc: f002 sd zero,32(sp) - ctx.stream = stream; - 3ade: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 3ae0: d34ff0ef jal 3014 <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 3ae4: 5502 lw a0,32(sp) -} - 3ae6: 70e2 ld ra,56(sp) - 3ae8: 6165 addi sp,sp,112 - 3aea: 8082 ret - return -1; - 3aec: 557d li a0,-1 - 3aee: bfe5 j 3ae6 - -0000000000003af0 : -{ - 3af0: 7159 addi sp,sp,-112 - 3af2: fc06 sd ra,56(sp) - 3af4: e0b2 sd a2,64(sp) - 3af6: e4b6 sd a3,72(sp) - 3af8: e8ba sd a4,80(sp) - 3afa: ecbe sd a5,88(sp) - 3afc: f0c2 sd a6,96(sp) - 3afe: f4c6 sd a7,104(sp) - if (!stream) - 3b00: cd19 beqz a0,3b1e - ctx.fd = stream->fd; - 3b02: 411c lw a5,0(a0) - va_start(ap, format); - 3b04: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 3b06: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 3b08: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 3b0a: 57fd li a5,-1 - va_start(ap, format); - 3b0c: e432 sd a2,8(sp) - ctx.buf = NULL; - 3b0e: e802 sd zero,16(sp) - ctx.pos = 0; - 3b10: f002 sd zero,32(sp) - ctx.ungotten = -1; - 3b12: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 3b14: e1dfc0ef jal 930 <_vscanf_core.constprop.0> -} - 3b18: 70e2 ld ra,56(sp) - 3b1a: 6165 addi sp,sp,112 - 3b1c: 8082 ret - return -1; - 3b1e: 557d li a0,-1 - 3b20: bfe5 j 3b18 - -0000000000003b22 : - if (!stream) - 3b22: c1e1 beqz a1,3be2 -{ - 3b24: 7179 addi sp,sp,-48 - 3b26: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 3b28: 41c5a903 lw s2,1052(a1) -{ - 3b2c: f022 sd s0,32(sp) - 3b2e: ec26 sd s1,24(sp) - 3b30: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 3b32: 4789 li a5,2 - 3b34: 842e mv s0,a1 - 3b36: 84aa mv s1,a0 - char ch = (char)c; - 3b38: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 3b3c: 02f90963 beq s2,a5,3b6e - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b40: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 3b44: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3b48: 0017861b addiw a2,a5,1 - 3b4c: 40c5a823 sw a2,1040(a1) - 3b50: 97ae add a5,a5,a1 - 3b52: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3b56: 06c6c463 blt a3,a2,3bbe - else if (stream->buf_mode == 1 && c == '\n') - 3b5a: 4785 li a5,1 - 3b5c: 02f90e63 beq s2,a5,3b98 - return c; - 3b60: 8526 mv a0,s1 -} - 3b62: 70a2 ld ra,40(sp) - 3b64: 7402 ld s0,32(sp) - 3b66: 64e2 ld s1,24(sp) - 3b68: 6942 ld s2,16(sp) - 3b6a: 6145 addi sp,sp,48 - 3b6c: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3b6e: 4188 lw a0,0(a1) - 3b70: 4605 li a2,1 - 3b72: 00f10593 addi a1,sp,15 - char ch = (char)c; - 3b76: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3b7a: d2efc0ef jal a8 - 3b7e: 872a mv a4,a0 - 3b80: 4785 li a5,1 - return c; - 3b82: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 3b84: fcf70fe3 beq a4,a5,3b62 -} - 3b88: 70a2 ld ra,40(sp) - stream->error = 1; - 3b8a: c41c sw a5,8(s0) -} - 3b8c: 7402 ld s0,32(sp) - 3b8e: 64e2 ld s1,24(sp) - 3b90: 6942 ld s2,16(sp) - return EOF; - 3b92: 557d li a0,-1 -} - 3b94: 6145 addi sp,sp,48 - 3b96: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3b98: 47a9 li a5,10 - 3b9a: fcf513e3 bne a0,a5,3b60 - if (stream->buf_write_pos > 0) - 3b9e: fcc051e3 blez a2,3b60 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3ba2: 4188 lw a0,0(a1) - 3ba4: 05c1 addi a1,a1,16 - 3ba6: d02fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3baa: 41042783 lw a5,1040(s0) - 3bae: 02f55063 bge a0,a5,3bce - stream->error = 1; - 3bb2: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 3bb6: 40042823 sw zero,1040(s0) - return c; - 3bba: 8526 mv a0,s1 - 3bbc: b75d j 3b62 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3bbe: 4188 lw a0,0(a1) - 3bc0: 05c1 addi a1,a1,16 - 3bc2: ce6fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3bc6: 41042783 lw a5,1040(s0) - 3bca: 00f54663 blt a0,a5,3bd6 - stream->buf_write_pos = 0; - 3bce: 40042823 sw zero,1040(s0) - return c; - 3bd2: 8526 mv a0,s1 - 3bd4: b779 j 3b62 - stream->error = 1; - 3bd6: 4785 li a5,1 - 3bd8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3bda: 40042823 sw zero,1040(s0) - return c; - 3bde: 8526 mv a0,s1 - 3be0: b749 j 3b62 - return EOF; - 3be2: 557d li a0,-1 -} - 3be4: 8082 ret - -0000000000003be6 : - if (!stream) - 3be6: c1ed beqz a1,3cc8 -{ - 3be8: 711d addi sp,sp,-96 - 3bea: e4a6 sd s1,72(sp) - 3bec: ec86 sd ra,88(sp) - while (*s) - 3bee: 00054703 lbu a4,0(a0) - 3bf2: 84aa mv s1,a0 - 3bf4: cf25 beqz a4,3c6c - 3bf6: e8a2 sd s0,80(sp) - 3bf8: e0ca sd s2,64(sp) - 3bfa: fc4e sd s3,56(sp) - 3bfc: f852 sd s4,48(sp) - 3bfe: f456 sd s5,40(sp) - 3c00: f05a sd s6,32(sp) - 3c02: ec5e sd s7,24(sp) - 3c04: 842e mv s0,a1 - if (stream->buf_mode == 2) - 3c06: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 3c08: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 3c0c: 4985 li s3,1 - 3c0e: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c10: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 3c14: 00f10b93 addi s7,sp,15 - 3c18: a031 j 3c24 - else if (stream->buf_mode == 1 && c == '\n') - 3c1a: 09368563 beq a3,s3,3ca4 - while (*s) - 3c1e: 0004c703 lbu a4,0(s1) - 3c22: cf15 beqz a4,3c5e - if (stream->buf_mode == 2) - 3c24: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 3c28: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 3c2a: 05268663 beq a3,s2,3c76 - stream->buffer[stream->buf_write_pos++] = (char)c; - 3c2e: 41042783 lw a5,1040(s0) - 3c32: 0017861b addiw a2,a5,1 - 3c36: 40c42823 sw a2,1040(s0) - 3c3a: 97a2 add a5,a5,s0 - 3c3c: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 3c40: fccb5de3 bge s6,a2,3c1a - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3c44: 4008 lw a0,0(s0) - 3c46: 85d6 mv a1,s5 - 3c48: c60fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3c4c: 41042783 lw a5,1040(s0) - 3c50: 06f54763 blt a0,a5,3cbe - stream->buf_write_pos = 0; - 3c54: 40042823 sw zero,1040(s0) - while (*s) - 3c58: 0004c703 lbu a4,0(s1) - 3c5c: f761 bnez a4,3c24 - 3c5e: 6446 ld s0,80(sp) - 3c60: 6906 ld s2,64(sp) - 3c62: 79e2 ld s3,56(sp) - 3c64: 7a42 ld s4,48(sp) - 3c66: 7aa2 ld s5,40(sp) - 3c68: 7b02 ld s6,32(sp) - 3c6a: 6be2 ld s7,24(sp) -} - 3c6c: 60e6 ld ra,88(sp) - 3c6e: 64a6 ld s1,72(sp) - return 0; - 3c70: 4501 li a0,0 -} - 3c72: 6125 addi sp,sp,96 - 3c74: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 3c76: 4008 lw a0,0(s0) - 3c78: 4605 li a2,1 - 3c7a: 85de mv a1,s7 - char ch = (char)c; - 3c7c: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 3c80: c28fc0ef jal a8 - 3c84: f9350de3 beq a0,s3,3c1e - stream->error = 1; - 3c88: 01342423 sw s3,8(s0) -} - 3c8c: 60e6 ld ra,88(sp) - 3c8e: 6446 ld s0,80(sp) - 3c90: 6906 ld s2,64(sp) - 3c92: 79e2 ld s3,56(sp) - 3c94: 7a42 ld s4,48(sp) - 3c96: 7aa2 ld s5,40(sp) - 3c98: 7b02 ld s6,32(sp) - 3c9a: 6be2 ld s7,24(sp) - 3c9c: 64a6 ld s1,72(sp) - return -1; - 3c9e: 557d li a0,-1 -} - 3ca0: 6125 addi sp,sp,96 - 3ca2: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 3ca4: f7471de3 bne a4,s4,3c1e - if (stream->buf_write_pos > 0) - 3ca8: f6c05be3 blez a2,3c1e - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3cac: 4008 lw a0,0(s0) - 3cae: 01040593 addi a1,s0,16 - 3cb2: bf6fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3cb6: 41042783 lw a5,1040(s0) - 3cba: f8f55de3 bge a0,a5,3c54 - stream->error = 1; - 3cbe: 4785 li a5,1 - 3cc0: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3cc2: 40042823 sw zero,1040(s0) - return EOF; - 3cc6: bfa1 j 3c1e - return -1; - 3cc8: 557d li a0,-1 -} - 3cca: 8082 ret - -0000000000003ccc : - if (!stream) - 3ccc: c949 beqz a0,3d5e - if (stream->buf_write_pos > 0) - 3cce: 41052603 lw a2,1040(a0) -{ - 3cd2: 1141 addi sp,sp,-16 - 3cd4: e022 sd s0,0(sp) - 3cd6: e406 sd ra,8(sp) - 3cd8: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 3cda: 04c04863 bgtz a2,3d2a - if (stream->buf_read_pos < stream->buf_read_cnt) - 3cde: 41442783 lw a5,1044(s0) - 3ce2: 41842703 lw a4,1048(s0) - 3ce6: 00e7dd63 bge a5,a4,3d00 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3cea: 0017871b addiw a4,a5,1 - 3cee: 40e42a23 sw a4,1044(s0) - 3cf2: 943e add s0,s0,a5 - 3cf4: 01044503 lbu a0,16(s0) -} - 3cf8: 60a2 ld ra,8(sp) - 3cfa: 6402 ld s0,0(sp) - 3cfc: 0141 addi sp,sp,16 - 3cfe: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3d00: 4008 lw a0,0(s0) - 3d02: 40000613 li a2,1024 - 3d06: 01040593 addi a1,s0,16 - 3d0a: b96fc0ef jal a0 - 3d0e: 87aa mv a5,a0 - if (ret <= 0) - 3d10: 02a05e63 blez a0,3d4c - stream->buf_read_cnt = (int)ret; - 3d14: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d18: 4785 li a5,1 - 3d1a: 01044503 lbu a0,16(s0) -} - 3d1e: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d20: 40f42a23 sw a5,1044(s0) -} - 3d24: 6402 ld s0,0(sp) - 3d26: 0141 addi sp,sp,16 - 3d28: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d2a: 4108 lw a0,0(a0) - 3d2c: 01040593 addi a1,s0,16 - 3d30: b78fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3d34: 41042783 lw a5,1040(s0) - 3d38: 00f54563 blt a0,a5,3d42 - stream->buf_write_pos = 0; - 3d3c: 40042823 sw zero,1040(s0) - 3d40: bf79 j 3cde - stream->error = 1; - 3d42: 4785 li a5,1 - 3d44: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3d46: 40042823 sw zero,1040(s0) - return EOF; - 3d4a: bf51 j 3cde - if (ret == 0) - 3d4c: e509 bnez a0,3d56 - stream->eof = 1; - 3d4e: 4785 li a5,1 - 3d50: c45c sw a5,12(s0) - return EOF; - 3d52: 557d li a0,-1 - 3d54: b755 j 3cf8 - stream->error = 1; - 3d56: 4785 li a5,1 - 3d58: c41c sw a5,8(s0) - return EOF; - 3d5a: 557d li a0,-1 - 3d5c: bf71 j 3cf8 - 3d5e: 557d li a0,-1 -} - 3d60: 8082 ret - -0000000000003d62 : - if (!stream || n <= 0) - 3d62: ce5d beqz a2,3e20 - 3d64: 0ab05e63 blez a1,3e20 -{ - 3d68: 715d addi sp,sp,-80 - 3d6a: e0a2 sd s0,64(sp) - 3d6c: fc26 sd s1,56(sp) - 3d6e: f84a sd s2,48(sp) - 3d70: f44e sd s3,40(sp) - 3d72: f052 sd s4,32(sp) - 3d74: ec56 sd s5,24(sp) - 3d76: e85a sd s6,16(sp) - 3d78: e45e sd s7,8(sp) - 3d7a: e486 sd ra,72(sp) - 3d7c: 8432 mv s0,a2 - 3d7e: 8aaa mv s5,a0 - 3d80: 892a mv s2,a0 - 3d82: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 3d86: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d88: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3d8c: 4b05 li s6,1 - if (c == '\n') - 3d8e: 4a29 li s4,10 - while (i < n - 1) - 3d90: 05748163 beq s1,s7,3dd2 - if (stream->buf_write_pos > 0) - 3d94: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3d98: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 3d9a: 06c04963 bgtz a2,3e0c - if (stream->buf_read_pos < stream->buf_read_cnt) - 3d9e: 41442783 lw a5,1044(s0) - 3da2: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3da6: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3daa: 0017851b addiw a0,a5,1 - 3dae: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3db2: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3db4: 02e7de63 bge a5,a4,3df0 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3db8: 40a42a23 sw a0,1044(s0) - 3dbc: 0106c783 lbu a5,16(a3) - 3dc0: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 3dc4: 00f90023 sb a5,0(s2) - 3dc8: 2485 addiw s1,s1,1 - if (c == '\n') - 3dca: 0905 addi s2,s2,1 - 3dcc: fd4712e3 bne a4,s4,3d90 - str[i++] = (char)c; - 3dd0: 8ba6 mv s7,s1 - str[i] = '\0'; - 3dd2: 9bd6 add s7,s7,s5 - 3dd4: 000b8023 sb zero,0(s7) - return str; - 3dd8: 8556 mv a0,s5 -} - 3dda: 60a6 ld ra,72(sp) - 3ddc: 6406 ld s0,64(sp) - 3dde: 74e2 ld s1,56(sp) - 3de0: 7942 ld s2,48(sp) - 3de2: 79a2 ld s3,40(sp) - 3de4: 7a02 ld s4,32(sp) - 3de6: 6ae2 ld s5,24(sp) - 3de8: 6b42 ld s6,16(sp) - 3dea: 6ba2 ld s7,8(sp) - 3dec: 6161 addi sp,sp,80 - 3dee: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3df0: 4008 lw a0,0(s0) - 3df2: aaefc0ef jal a0 - if (ret <= 0) - 3df6: 02a05c63 blez a0,3e2e - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3dfa: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 3dfe: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 3e02: 41642a23 sw s6,1044(s0) - 3e06: 0007871b sext.w a4,a5 - if (c == -1) - 3e0a: bf6d j 3dc4 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3e0c: 4008 lw a0,0(s0) - 3e0e: a9afc0ef jal a8 - if (ret < stream->buf_write_pos) - 3e12: 41042783 lw a5,1040(s0) - 3e16: 00f54763 blt a0,a5,3e24 - stream->buf_write_pos = 0; - 3e1a: 40042823 sw zero,1040(s0) - 3e1e: b741 j 3d9e - return NULL; - 3e20: 4501 li a0,0 -} - 3e22: 8082 ret - stream->error = 1; - 3e24: 4785 li a5,1 - 3e26: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3e28: 40042823 sw zero,1040(s0) - return EOF; - 3e2c: bf8d j 3d9e - stream->eof = 1; - 3e2e: 4785 li a5,1 - if (ret == 0) - 3e30: e509 bnez a0,3e3a - stream->eof = 1; - 3e32: c45c sw a5,12(s0) - if (i == 0) - 3e34: fcd1 bnez s1,3dd0 - return NULL; - 3e36: 4501 li a0,0 - 3e38: b74d j 3dda - stream->error = 1; - 3e3a: c41c sw a5,8(s0) - if (c == -1) - 3e3c: bfe5 j 3e34 - -0000000000003e3e : -{ - 3e3e: 715d addi sp,sp,-80 - 3e40: e486 sd ra,72(sp) - 3e42: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 3e44: 0e068963 beqz a3,3f36 - 3e48: ec56 sd s5,24(sp) - return 0; - 3e4a: 4981 li s3,0 - 3e4c: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 3e4e: c9bd beqz a1,3ec4 - 3e50: ca35 beqz a2,3ec4 - if (stream->buf_write_pos > 0) - 3e52: 4106a783 lw a5,1040(a3) - 3e56: e0a2 sd s0,64(sp) - 3e58: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 3e5a: 02c589b3 mul s3,a1,a2 - 3e5e: 8436 mv s0,a3 - 3e60: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 3e62: 0af04d63 bgtz a5,3f1c - while (bytes_read < total_bytes) - 3e66: 04098d63 beqz s3,3ec0 - 3e6a: fc26 sd s1,56(sp) - 3e6c: e85a sd s6,16(sp) - 3e6e: e45e sd s7,8(sp) - 3e70: f84a sd s2,48(sp) - 3e72: 4481 li s1,0 - if (remaining >= BUFSIZ) - 3e74: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3e78: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3e7c: 41442703 lw a4,1044(s0) - 3e80: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 3e84: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 3e88: 06f74463 blt a4,a5,3ef0 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3e8c: 4008 lw a0,0(s0) - 3e8e: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 3e92: 02cb7f63 bgeu s6,a2,3ed0 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 3e96: a0afc0ef jal a0 - if (ret <= 0) - 3e9a: 0aa05463 blez a0,3f42 - bytes_read += ret; - 3e9e: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 3ea0: fd34eee3 bltu s1,s3,3e7c - return bytes_read / size; - 3ea4: 0354d9b3 divu s3,s1,s5 - 3ea8: 6406 ld s0,64(sp) -} - 3eaa: 60a6 ld ra,72(sp) - return bytes_read / size; - 3eac: 74e2 ld s1,56(sp) - 3eae: 7942 ld s2,48(sp) - 3eb0: 7a02 ld s4,32(sp) - 3eb2: 6ae2 ld s5,24(sp) - 3eb4: 6b42 ld s6,16(sp) - 3eb6: 6ba2 ld s7,8(sp) -} - 3eb8: 854e mv a0,s3 - 3eba: 79a2 ld s3,40(sp) - 3ebc: 6161 addi sp,sp,80 - 3ebe: 8082 ret - 3ec0: 6406 ld s0,64(sp) - 3ec2: 7a02 ld s4,32(sp) - 3ec4: 60a6 ld ra,72(sp) - 3ec6: 6ae2 ld s5,24(sp) - 3ec8: 854e mv a0,s3 - 3eca: 79a2 ld s3,40(sp) - 3ecc: 6161 addi sp,sp,80 - 3ece: 8082 ret - stream->buf_read_pos = 0; - 3ed0: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 3ed4: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 3ed8: 40000613 li a2,1024 - 3edc: 85de mv a1,s7 - 3ede: 9c2fc0ef jal a0 - if (ret <= 0) - 3ee2: 06a05063 blez a0,3f42 - stream->buf_read_cnt = (int)ret; - 3ee6: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 3eea: f934e9e3 bltu s1,s3,3e7c - 3eee: bf5d j 3ea4 - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 3ef0: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3ef4: 00eb85b3 add a1,s7,a4 - 3ef8: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 3efc: 01267363 bgeu a2,s2,3f02 - 3f00: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 3f02: 864a mv a2,s2 - 3f04: 3e1000ef jal 4ae4 - stream->buf_read_pos += to_copy; - 3f08: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 3f0c: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 3f0e: 012787bb addw a5,a5,s2 - 3f12: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 3f16: f734e3e3 bltu s1,s3,3e7c - 3f1a: b769 j 3ea4 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 3f1c: 4288 lw a0,0(a3) - 3f1e: 863e mv a2,a5 - 3f20: 01068593 addi a1,a3,16 - 3f24: 984fc0ef jal a8 - if (ret < stream->buf_write_pos) - 3f28: 41042783 lw a5,1040(s0) - 3f2c: 02f54163 blt a0,a5,3f4e - stream->buf_write_pos = 0; - 3f30: 40042823 sw zero,1040(s0) - 3f34: bf0d j 3e66 -} - 3f36: 60a6 ld ra,72(sp) - return 0; - 3f38: 4981 li s3,0 -} - 3f3a: 854e mv a0,s3 - 3f3c: 79a2 ld s3,40(sp) - 3f3e: 6161 addi sp,sp,80 - 3f40: 8082 ret - stream->eof = 1; - 3f42: 4785 li a5,1 - if (ret == 0) - 3f44: e119 bnez a0,3f4a - stream->eof = 1; - 3f46: c45c sw a5,12(s0) - 3f48: bfb1 j 3ea4 - stream->error = 1; - 3f4a: c41c sw a5,8(s0) - return bytes_read / size; - 3f4c: bfa1 j 3ea4 - stream->error = 1; - 3f4e: 4785 li a5,1 - 3f50: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 3f52: 40042823 sw zero,1040(s0) - return EOF; - 3f56: bf01 j 3e66 - -0000000000003f58 : -{ - 3f58: 711d addi sp,sp,-96 - 3f5a: ec86 sd ra,88(sp) - 3f5c: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 3f5e: 10068063 beqz a3,405e - 3f62: f456 sd s5,40(sp) - 3f64: 8aaa mv s5,a0 - 3f66: 10050263 beqz a0,406a - 3f6a: f05a sd s6,32(sp) - return 0; - 3f6c: 4901 li s2,0 - 3f6e: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 3f70: c1d9 beqz a1,3ff6 - 3f72: c251 beqz a2,3ff6 - if (stream->buf_mode == 2) - 3f74: 41c6a703 lw a4,1052(a3) - 3f78: e8a2 sd s0,80(sp) - 3f7a: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 3f7c: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 3f80: 8436 mv s0,a3 - 3f82: 0ef70b63 beq a4,a5,4078 - 3f86: fc4e sd s3,56(sp) - 3f88: ec5e sd s7,24(sp) - 3f8a: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 3f8c: 4981 li s3,0 - 3f8e: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3f92: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 3f96: 12090263 beqz s2,40ba - 3f9a: e4a6 sd s1,72(sp) - 3f9c: f852 sd s4,48(sp) - 3f9e: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fa0: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 3fa4: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3fa8: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 3fac: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 3fb0: 00fb8533 add a0,s7,a5 - 3fb4: 8652 mv a2,s4 - if (remaining <= space_left) - 3fb6: 059a6763 bltu s4,s9,4004 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 3fba: 8666 mv a2,s9 - 3fbc: 329000ef jal 4ae4 - stream->buf_write_pos += remaining; - 3fc0: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 3fc4: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 3fc8: 019786bb addw a3,a5,s9 - 3fcc: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 3fd0: 06e68a63 beq a3,a4,4044 - return bytes_written / size; - 3fd4: 03695933 divu s2,s2,s6 - 3fd8: 6446 ld s0,80(sp) - 3fda: 64a6 ld s1,72(sp) - 3fdc: 79e2 ld s3,56(sp) - 3fde: 7a42 ld s4,48(sp) - 3fe0: 7aa2 ld s5,40(sp) - 3fe2: 7b02 ld s6,32(sp) - 3fe4: 6be2 ld s7,24(sp) - 3fe6: 6c42 ld s8,16(sp) - 3fe8: 6ca2 ld s9,8(sp) -} - 3fea: 60e6 ld ra,88(sp) - 3fec: 854a mv a0,s2 - 3fee: 6906 ld s2,64(sp) - 3ff0: 6125 addi sp,sp,96 - 3ff2: 8082 ret - 3ff4: 6446 ld s0,80(sp) - 3ff6: 60e6 ld ra,88(sp) - 3ff8: 7aa2 ld s5,40(sp) - 3ffa: 7b02 ld s6,32(sp) - 3ffc: 854a mv a0,s2 - 3ffe: 6906 ld s2,64(sp) - 4000: 6125 addi sp,sp,96 - 4002: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 4004: 2e1000ef jal 4ae4 - stream->buf_write_pos += space_left; - 4008: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 400c: 85de mv a1,s7 - bytes_written += space_left; - 400e: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 4010: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4014: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 4018: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 401c: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 401e: 00904763 bgtz s1,402c - while (bytes_written < total_bytes) - 4022: f729efe3 bltu s3,s2,3fa0 - return bytes_written / size; - 4026: 0369d933 divu s2,s3,s6 - 402a: b77d j 3fd8 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 402c: 4008 lw a0,0(s0) - 402e: 87afc0ef jal a8 - if (ret < stream->buf_write_pos) - 4032: 41042783 lw a5,1040(s0) - 4036: 08f54963 blt a0,a5,40c8 - stream->buf_write_pos = 0; - 403a: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 403e: f729e1e3 bltu s3,s2,3fa0 - 4042: b7d5 j 4026 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4044: 4008 lw a0,0(s0) - 4046: 40000613 li a2,1024 - 404a: 85de mv a1,s7 - 404c: 85cfc0ef jal a8 - if (ret < stream->buf_write_pos) - 4050: 41042783 lw a5,1040(s0) - 4054: 08f54163 blt a0,a5,40d6 - stream->buf_write_pos = 0; - 4058: 40042823 sw zero,1040(s0) - 405c: bfa5 j 3fd4 -} - 405e: 60e6 ld ra,88(sp) - return 0; - 4060: 4901 li s2,0 -} - 4062: 854a mv a0,s2 - 4064: 6906 ld s2,64(sp) - 4066: 6125 addi sp,sp,96 - 4068: 8082 ret - 406a: 60e6 ld ra,88(sp) - return 0; - 406c: 4901 li s2,0 - 406e: 7aa2 ld s5,40(sp) -} - 4070: 854a mv a0,s2 - 4072: 6906 ld s2,64(sp) - 4074: 6125 addi sp,sp,96 - 4076: 8082 ret - while (bytes_written < total_bytes) - 4078: f6090ee3 beqz s2,3ff4 - 407c: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 407e: 4481 li s1,0 - 4080: a021 j 4088 - bytes_written += ret; - 4082: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 4084: 0324f463 bgeu s1,s2,40ac - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 4088: 4008 lw a0,0(s0) - 408a: 40990633 sub a2,s2,s1 - 408e: 009a85b3 add a1,s5,s1 - 4092: 816fc0ef jal a8 - if (ret <= 0) - 4096: fea046e3 bgtz a0,4082 - stream->error = 1; - 409a: 4785 li a5,1 - return bytes_written / size; - 409c: 0364d933 divu s2,s1,s6 - stream->error = 1; - 40a0: c41c sw a5,8(s0) - break; - 40a2: 64a6 ld s1,72(sp) - 40a4: 6446 ld s0,80(sp) - 40a6: 7aa2 ld s5,40(sp) - 40a8: 7b02 ld s6,32(sp) - 40aa: b781 j 3fea - return bytes_written / size; - 40ac: 0364d933 divu s2,s1,s6 - 40b0: 6446 ld s0,80(sp) - 40b2: 64a6 ld s1,72(sp) - 40b4: 7aa2 ld s5,40(sp) - 40b6: 7b02 ld s6,32(sp) - 40b8: bf0d j 3fea - 40ba: 6446 ld s0,80(sp) - 40bc: 79e2 ld s3,56(sp) - 40be: 7aa2 ld s5,40(sp) - 40c0: 7b02 ld s6,32(sp) - 40c2: 6be2 ld s7,24(sp) - 40c4: 6c42 ld s8,16(sp) - 40c6: b715 j 3fea - stream->error = 1; - 40c8: 4785 li a5,1 - 40ca: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 40cc: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 40d0: ed29e8e3 bltu s3,s2,3fa0 - 40d4: bf89 j 4026 - stream->error = 1; - 40d6: 4785 li a5,1 - 40d8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 40da: 40042823 sw zero,1040(s0) - return EOF; - 40de: bddd j 3fd4 - -00000000000040e0 : - if (!stream) - 40e0: c925 beqz a0,4150 -{ - 40e2: 1101 addi sp,sp,-32 - 40e4: e04a sd s2,0(sp) - 40e6: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 40e8: 41052603 lw a2,1040(a0) -{ - 40ec: e822 sd s0,16(sp) - 40ee: e426 sd s1,8(sp) - 40f0: ec06 sd ra,24(sp) - 40f2: 842a mv s0,a0 - 40f4: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 40f6: 02c04863 bgtz a2,4126 - if (lseek(stream->fd, offset, whence) < 0) - 40fa: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 40fc: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4100: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 4104: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 4108: 864a mv a2,s2 - 410a: 0004859b sext.w a1,s1 - 410e: 82afc0ef jal 138 - 4112: 87aa mv a5,a0 - return 0; - 4114: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 4116: 0207c463 bltz a5,413e -} - 411a: 60e2 ld ra,24(sp) - 411c: 6442 ld s0,16(sp) - 411e: 64a2 ld s1,8(sp) - 4120: 6902 ld s2,0(sp) - 4122: 6105 addi sp,sp,32 - 4124: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4126: 4108 lw a0,0(a0) - 4128: 01040593 addi a1,s0,16 - 412c: f7dfb0ef jal a8 - if (ret < stream->buf_write_pos) - 4130: 41042783 lw a5,1040(s0) - 4134: 00f54963 blt a0,a5,4146 - stream->buf_write_pos = 0; - 4138: 40042823 sw zero,1040(s0) - 413c: bf7d j 40fa - stream->error = 1; - 413e: 4785 li a5,1 - 4140: c41c sw a5,8(s0) - return -1; - 4142: 557d li a0,-1 - 4144: bfd9 j 411a - stream->error = 1; - 4146: 4785 li a5,1 - 4148: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 414a: 40042823 sw zero,1040(s0) - return EOF; - 414e: b775 j 40fa - return -1; - 4150: 557d li a0,-1 -} - 4152: 8082 ret - -0000000000004154 : - if (!stream) - 4154: c505 beqz a0,417c -{ - 4156: 1141 addi sp,sp,-16 - 4158: e022 sd s0,0(sp) - 415a: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 415c: 4108 lw a0,0(a0) - 415e: 4605 li a2,1 - 4160: 4581 li a1,0 -{ - 4162: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 4164: fd5fb0ef jal 138 - if (ret < 0) - 4168: 00054663 bltz a0,4174 -} - 416c: 60a2 ld ra,8(sp) - 416e: 6402 ld s0,0(sp) - 4170: 0141 addi sp,sp,16 - 4172: 8082 ret - stream->error = 1; - 4174: 4785 li a5,1 - 4176: c41c sw a5,8(s0) - return -1L; - 4178: 557d li a0,-1 - 417a: bfcd j 416c - 417c: 557d li a0,-1 -} - 417e: 8082 ret - -0000000000004180 : - if (stream) - 4180: c915 beqz a0,41b4 - if (stream->buf_write_pos > 0) - 4182: 41052603 lw a2,1040(a0) -{ - 4186: 1141 addi sp,sp,-16 - 4188: e022 sd s0,0(sp) - 418a: e406 sd ra,8(sp) - 418c: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 418e: 02c04463 bgtz a2,41b6 - if (lseek(stream->fd, offset, whence) < 0) - 4192: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 4194: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4198: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 419c: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 41a0: 4601 li a2,0 - 41a2: 4581 li a1,0 - 41a4: f95fb0ef jal 138 -} - 41a8: 60a2 ld ra,8(sp) - stream->error = 0; - 41aa: 00042423 sw zero,8(s0) -} - 41ae: 6402 ld s0,0(sp) - 41b0: 0141 addi sp,sp,16 - 41b2: 8082 ret - 41b4: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 41b6: 4108 lw a0,0(a0) - 41b8: 01040593 addi a1,s0,16 - 41bc: eedfb0ef jal a8 - if (ret < stream->buf_write_pos) - 41c0: 41042783 lw a5,1040(s0) - 41c4: 00f54563 blt a0,a5,41ce - stream->buf_write_pos = 0; - 41c8: 40042823 sw zero,1040(s0) - 41cc: b7d9 j 4192 - stream->error = 1; - 41ce: 4785 li a5,1 - 41d0: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 41d2: 40042823 sw zero,1040(s0) - return EOF; - 41d6: bf75 j 4192 - -00000000000041d8 : - return (stream) ? stream->eof : 1; - 41d8: c119 beqz a0,41de - 41da: 4548 lw a0,12(a0) - 41dc: 8082 ret - 41de: 4505 li a0,1 -} - 41e0: 8082 ret - -00000000000041e2 : - return (stream) ? stream->error : 1; - 41e2: c119 beqz a0,41e8 - 41e4: 4508 lw a0,8(a0) - 41e6: 8082 ret - 41e8: 4505 li a0,1 -} - 41ea: 8082 ret - -00000000000041ec : - if (stream) - 41ec: c509 beqz a0,41f6 - stream->error = 0; - 41ee: 00052423 sw zero,8(a0) - stream->eof = 0; - 41f2: 00052623 sw zero,12(a0) -} - 41f6: 8082 ret - -00000000000041f8 : - if (!stream || c == EOF) - 41f8: c19d beqz a1,421e - 41fa: 57fd li a5,-1 - 41fc: 02f50163 beq a0,a5,421e - if (stream->buf_read_pos > 0) - 4200: 4145a783 lw a5,1044(a1) - 4204: 00f05d63 blez a5,421e - stream->buf_read_pos--; - 4208: fff7871b addiw a4,a5,-1 - 420c: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 4210: 00e587b3 add a5,a1,a4 - 4214: 00a78823 sb a0,16(a5) - stream->eof = 0; - 4218: 0005a623 sw zero,12(a1) - return c; - 421c: 8082 ret - return EOF; - 421e: 557d li a0,-1 - 4220: 8082 ret - -0000000000004222 : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 4222: 1141 addi sp,sp,-16 - 4224: e422 sd s0,8(sp) - 4226: 8eaa mv t4,a0 -{ - const char *s = nptr; - 4228: 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'; } - 422a: 02000313 li t1,32 - 422e: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 4230: 0008c783 lbu a5,0(a7) - 4234: 00188813 addi a6,a7,1 - 4238: ff77871b addiw a4,a5,-9 - 423c: 0ff77693 zext.b a3,a4 - 4240: 0007871b sext.w a4,a5 - 4244: 04678363 beq a5,t1,428a - 4248: 04de7163 bgeu t3,a3,428a - } while (isspace(c)); - - if (c == '-') - 424c: 02d00793 li a5,45 - 4250: 0ef70863 beq a4,a5,4340 - { - neg = 1; - c = *s++; - } - else if (c == '+') - 4254: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 4258: 4381 li t2,0 - else if (c == '+') - 425a: 08f70c63 beq a4,a5,42f2 - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 425e: ea05 bnez a2,428e - 4260: 03000793 li a5,48 - 4264: 0ef70463 beq a4,a5,434c - 4268: 00ccd8b7 lui a7,0xccd - 426c: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc54d5> - 4270: 08b2 slli a7,a7,0xc - 4272: ccd88893 addi a7,a7,-819 - 4276: 08b2 slli a7,a7,0xc - 4278: ccd88893 addi a7,a7,-819 - 427c: 08b6 slli a7,a7,0xd - 427e: 4415 li s0,5 - 4280: 99988893 addi a7,a7,-1639 - 4284: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 4286: 4629 li a2,10 - 4288: a829 j 42a2 -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 428a: 88c2 mv a7,a6 - 428c: b755 j 4230 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 428e: 47c1 li a5,16 - 4290: 0cf60d63 beq a2,a5,436a - - cutoff = ULLONG_MAX / (unsigned long long)base; - 4294: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 4296: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 429a: 82b2 mv t0,a2 - 429c: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 42a0: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 42a2: 4301 li t1,0 - 42a4: 4501 li a0,0 - { - if (isdigit(c)) - 42a6: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42a8: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42aa: 5f7d li t5,-1 - if (isdigit(c)) - 42ac: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 42b0: 0007069b sext.w a3,a4 - 42b4: 00fe7e63 bgeu t3,a5,42d0 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 42b8: f9f6879b addiw a5,a3,-97 - 42bc: 04fff063 bgeu t6,a5,42fc - 42c0: fbf6869b addiw a3,a3,-65 - 42c4: 04dfe163 bltu t6,a3,4306 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 42c8: 03700793 li a5,55 - 42cc: 40f707bb subw a5,a4,a5 - if (c >= base) - 42d0: 02c7db63 bge a5,a2,4306 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42d4: 01e30b63 beq t1,t5,42ea - any = -1; - 42d8: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 42da: 00a8e863 bltu a7,a0,42ea - 42de: 05150e63 beq a0,a7,433a - else - { - any = 1; - 42e2: 4305 li t1,1 - acc *= base; - 42e4: 02550533 mul a0,a0,t0 - acc += c; - 42e8: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 42ea: 0805 addi a6,a6,1 - 42ec: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 42f0: bf75 j 42ac - c = *s++; - 42f2: 00084703 lbu a4,0(a6) - 42f6: 00288813 addi a6,a7,2 - 42fa: b795 j 425e - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 42fc: 05700793 li a5,87 - 4300: 40f707bb subw a5,a4,a5 - 4304: b7f1 j 42d0 - } - } - - if (any < 0) - 4306: 57fd li a5,-1 - 4308: 00f30e63 beq t1,a5,4324 - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 430c: 00038463 beqz t2,4314 - acc = -acc; - 4310: 40a00533 neg a0,a0 - - if (endptr != 0) - 4314: c589 beqz a1,431e - *endptr = (char *)(any ? s - 1 : nptr); - 4316: 00031f63 bnez t1,4334 - 431a: 01d5b023 sd t4,0(a1) - - return acc; -} - 431e: 6422 ld s0,8(sp) - 4320: 0141 addi sp,sp,16 - 4322: 8082 ret - errno = ERANGE; - 4324: 02200793 li a5,34 - 4328: 00003717 auipc a4,0x3 - 432c: 38f72c23 sw a5,920(a4) # 76c0 - acc = ULLONG_MAX; - 4330: 557d li a0,-1 - if (endptr != 0) - 4332: d5f5 beqz a1,431e - *endptr = (char *)(any ? s - 1 : nptr); - 4334: fff80e93 addi t4,a6,-1 - 4338: b7cd j 431a - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 433a: faf448e3 blt s0,a5,42ea - 433e: b755 j 42e2 - c = *s++; - 4340: 00084703 lbu a4,0(a6) - neg = 1; - 4344: 4385 li t2,1 - c = *s++; - 4346: 00288813 addi a6,a7,2 - 434a: bf11 j 425e - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 434c: 00084783 lbu a5,0(a6) - 4350: 05800693 li a3,88 - 4354: 0df7f793 andi a5,a5,223 - 4358: 02d78b63 beq a5,a3,438e - 435c: 58fd li a7,-1 - 435e: 441d li s0,7 - 4360: 0038d893 srli a7,a7,0x3 - 4364: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 4366: 4621 li a2,8 - 4368: bf2d j 42a2 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 436a: 03000793 li a5,48 - 436e: 00f70863 beq a4,a5,437e - 4372: 58fd li a7,-1 - 4374: 443d li s0,15 - 4376: 0048d893 srli a7,a7,0x4 - 437a: 42c1 li t0,16 - 437c: b71d j 42a2 - 437e: 00084783 lbu a5,0(a6) - 4382: 05800693 li a3,88 - 4386: 0df7f793 andi a5,a5,223 - 438a: fed794e3 bne a5,a3,4372 - s += 2; - 438e: 58fd li a7,-1 - c = s[1]; - 4390: 00184703 lbu a4,1(a6) - s += 2; - 4394: 443d li s0,15 - 4396: 0809 addi a6,a6,2 - 4398: 0048d893 srli a7,a7,0x4 - 439c: 42c1 li t0,16 - base = 16; - 439e: 4641 li a2,16 - 43a0: b709 j 42a2 - -00000000000043a2 : - if (__atexit_func_count >= ATEXIT_MAX) - 43a2: 00003717 auipc a4,0x3 - 43a6: 31e70713 addi a4,a4,798 # 76c0 - 43aa: 435c lw a5,4(a4) - 43ac: 46fd li a3,31 - 43ae: 00f6ca63 blt a3,a5,43c2 - __atexit_funcs[__atexit_func_count++] = function; - 43b2: 00379693 slli a3,a5,0x3 - 43b6: 96ba add a3,a3,a4 - 43b8: 2785 addiw a5,a5,1 - 43ba: e688 sd a0,8(a3) - 43bc: c35c sw a5,4(a4) - return 0; - 43be: 4501 li a0,0 - 43c0: 8082 ret - return -1; - 43c2: 557d li a0,-1 -} - 43c4: 8082 ret - -00000000000043c6 : -{ - 43c6: 1101 addi sp,sp,-32 - 43c8: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 43ca: 00003417 auipc s0,0x3 - 43ce: 2f640413 addi s0,s0,758 # 76c0 - 43d2: 405c lw a5,4(s0) -{ - 43d4: e426 sd s1,8(sp) - 43d6: ec06 sd ra,24(sp) - 43d8: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 43da: 00f05d63 blez a5,43f4 - (__atexit_funcs[--__atexit_func_count])(); - 43de: fff7871b addiw a4,a5,-1 - 43e2: 87ba mv a5,a4 - 43e4: 070e slli a4,a4,0x3 - 43e6: 9722 add a4,a4,s0 - 43e8: 6718 ld a4,8(a4) - 43ea: c05c sw a5,4(s0) - 43ec: 9702 jalr a4 - while (__atexit_func_count > 0) - 43ee: 405c lw a5,4(s0) - 43f0: fef047e3 bgtz a5,43de - sys_exit(status); - 43f4: 8526 mv a0,s1 - 43f6: c8bfb0ef jal 80 - while (1) - 43fa: a001 j 43fa - -00000000000043fc : -{ - 43fc: 1141 addi sp,sp,-16 - exit(127); - 43fe: 07f00513 li a0,127 -{ - 4402: e406 sd ra,8(sp) - exit(127); - 4404: fc3ff0ef jal 43c6 - -0000000000004408 : -} - 4408: 4501 li a0,0 - 440a: 8082 ret - -000000000000440c : -} - 440c: 557d li a0,-1 - 440e: 8082 ret - -0000000000004410 : - if (!ptr) - 4410: c121 beqz a0,4450 - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 4412: 00003617 auipc a2,0x3 - 4416: 2ae60613 addi a2,a2,686 # 76c0 - 441a: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 441e: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 4422: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 4424: 02d7f763 bgeu a5,a3,4452 - 4428: 00e6e463 bltu a3,a4,4430 - if (p >= p->next && (bp > p || bp < p->next)) - 442c: 02e7e763 bltu a5,a4,445a - if ((char *)bp + bp->size == (char *)p->next) - 4430: ff053583 ld a1,-16(a0) - 4434: 00b68833 add a6,a3,a1 - 4438: 03070363 beq a4,a6,445e - if ((char *)p + p->size == (char *)bp) - 443c: 638c ld a1,0(a5) - 443e: fee53c23 sd a4,-8(a0) - 4442: 00b78833 add a6,a5,a1 - 4446: 03068963 beq a3,a6,4478 - 444a: e794 sd a3,8(a5) - freep = p; - 444c: 10f63423 sd a5,264(a2) -} - 4450: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 4452: 00e7e463 bltu a5,a4,445a - 4456: fce6ede3 bltu a3,a4,4430 -{ - 445a: 87ba mv a5,a4 - 445c: b7d9 j 4422 - bp->size += p->next->size; - 445e: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 4462: 6718 ld a4,8(a4) - bp->size += p->next->size; - 4464: 95c2 add a1,a1,a6 - 4466: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 446a: 638c ld a1,0(a5) - 446c: fee53c23 sd a4,-8(a0) - 4470: 00b78833 add a6,a5,a1 - 4474: fd069be3 bne a3,a6,444a - p->size += bp->size; - 4478: ff053503 ld a0,-16(a0) - p->next = bp->next; - 447c: 86ba mv a3,a4 - p->size += bp->size; - 447e: 00b50733 add a4,a0,a1 - 4482: e398 sd a4,0(a5) - p->next = bp->next; - 4484: b7d9 j 444a - -0000000000004486 : - if (size == 0) - 4486: c169 beqz a0,4548 -{ - 4488: 7179 addi sp,sp,-48 - 448a: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 448c: 00003497 auipc s1,0x3 - 4490: 23448493 addi s1,s1,564 # 76c0 - 4494: 1084b783 ld a5,264(s1) -{ - 4498: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 449a: 057d addi a0,a0,31 -{ - 449c: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 449e: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 44a2: c3d1 beqz a5,4526 - for (p = prevp->next;; prevp = p, p = p->next) - 44a4: 6788 ld a0,8(a5) - if (p->size >= size) - 44a6: 6118 ld a4,0(a0) - 44a8: 06877163 bgeu a4,s0,450a - 44ac: e44e sd s3,8(sp) - 44ae: e052 sd s4,0(sp) - 44b0: e84a sd s2,16(sp) - if (nu < 4096) - 44b2: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 44b4: 59fd li s3,-1 - 44b6: a029 j 44c0 - for (p = prevp->next;; prevp = p, p = p->next) - 44b8: 6788 ld a0,8(a5) - if (p->size >= size) - 44ba: 6118 ld a4,0(a0) - 44bc: 04877463 bgeu a4,s0,4504 - if (p == freep) - 44c0: 1084b703 ld a4,264(s1) - 44c4: 87aa mv a5,a0 - 44c6: fee519e3 bne a0,a4,44b8 - if (nu < 4096) - 44ca: 8922 mv s2,s0 - 44cc: 01447363 bgeu s0,s4,44d2 - 44d0: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 44d2: 854a mv a0,s2 - 44d4: c3dfb0ef jal 110 - 44d8: 87aa mv a5,a0 - free((void *)(up + 1)); - 44da: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 44dc: 01378963 beq a5,s3,44ee - up->size = nu; - 44e0: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 44e4: f2dff0ef jal 4410 - return freep; - 44e8: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 44ec: f7f1 bnez a5,44b8 -} - 44ee: 70a2 ld ra,40(sp) - 44f0: 7402 ld s0,32(sp) - errno = ENOMEM; - 44f2: 47b1 li a5,12 - 44f4: c09c sw a5,0(s1) - return NULL; - 44f6: 6942 ld s2,16(sp) - 44f8: 69a2 ld s3,8(sp) - 44fa: 6a02 ld s4,0(sp) -} - 44fc: 64e2 ld s1,24(sp) - return NULL; - 44fe: 4501 li a0,0 -} - 4500: 6145 addi sp,sp,48 - 4502: 8082 ret - 4504: 6942 ld s2,16(sp) - 4506: 69a2 ld s3,8(sp) - 4508: 6a02 ld s4,0(sp) - if (p->size == size) - 450a: 02e40c63 beq s0,a4,4542 - p->size -= size; - 450e: 8f01 sub a4,a4,s0 - 4510: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 4512: 953a add a0,a0,a4 - p->size = size; - 4514: e100 sd s0,0(a0) -} - 4516: 70a2 ld ra,40(sp) - 4518: 7402 ld s0,32(sp) - freep = prevp; - 451a: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 451e: 0541 addi a0,a0,16 -} - 4520: 64e2 ld s1,24(sp) - 4522: 6145 addi sp,sp,48 - 4524: 8082 ret - base.next = freep = prevp = &base; - 4526: 00003517 auipc a0,0x3 - 452a: 2aa50513 addi a0,a0,682 # 77d0 - 452e: 10a4b423 sd a0,264(s1) - 4532: 10a4bc23 sd a0,280(s1) - base.size = 0; - 4536: 00003797 auipc a5,0x3 - 453a: 2807bd23 sd zero,666(a5) # 77d0 - if (p->size >= size) - 453e: f43d bnez s0,44ac - base.next = freep = prevp = &base; - 4540: 87aa mv a5,a0 - prevp->next = p->next; - 4542: 6518 ld a4,8(a0) - 4544: e798 sd a4,8(a5) - 4546: bfc1 j 4516 - return NULL; - 4548: 4501 li a0,0 -} - 454a: 8082 ret - -000000000000454c : - if (__builtin_mul_overflow(nmemb, size, &total)) - 454c: 02b537b3 mulhu a5,a0,a1 -{ - 4550: 1101 addi sp,sp,-32 - 4552: e822 sd s0,16(sp) - 4554: ec06 sd ra,24(sp) - 4556: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 4558: 02b50433 mul s0,a0,a1 - 455c: e385 bnez a5,457c - void *p = malloc(total); - 455e: 8522 mv a0,s0 - 4560: f27ff0ef jal 4486 - 4564: 84aa mv s1,a0 - if (p) - 4566: c509 beqz a0,4570 - memset(p, 0, total); - 4568: 8622 mv a2,s0 - 456a: 4581 li a1,0 - 456c: 524000ef jal 4a90 -} - 4570: 60e2 ld ra,24(sp) - 4572: 6442 ld s0,16(sp) - 4574: 8526 mv a0,s1 - 4576: 64a2 ld s1,8(sp) - 4578: 6105 addi sp,sp,32 - 457a: 8082 ret - 457c: 60e2 ld ra,24(sp) - 457e: 6442 ld s0,16(sp) - errno = ENOMEM; - 4580: 47b1 li a5,12 - return NULL; - 4582: 4481 li s1,0 - errno = ENOMEM; - 4584: 00003717 auipc a4,0x3 - 4588: 12f72e23 sw a5,316(a4) # 76c0 -} - 458c: 8526 mv a0,s1 - 458e: 64a2 ld s1,8(sp) - 4590: 6105 addi sp,sp,32 - 4592: 8082 ret - -0000000000004594 : - if (!ptr) - 4594: c929 beqz a0,45e6 -{ - 4596: 1101 addi sp,sp,-32 - 4598: ec06 sd ra,24(sp) - 459a: e426 sd s1,8(sp) - if (size == 0) - 459c: c5b9 beqz a1,45ea - if (bp->size >= new_size) - 459e: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 45a2: 01f58793 addi a5,a1,31 - 45a6: e822 sd s0,16(sp) - 45a8: 9bc1 andi a5,a5,-16 - 45aa: 842a mv s0,a0 - return ptr; - 45ac: 84aa mv s1,a0 - if (bp->size >= new_size) - 45ae: 00f76863 bltu a4,a5,45be - 45b2: 6442 ld s0,16(sp) -} - 45b4: 60e2 ld ra,24(sp) - 45b6: 8526 mv a0,s1 - 45b8: 64a2 ld s1,8(sp) - 45ba: 6105 addi sp,sp,32 - 45bc: 8082 ret - void *new_ptr = malloc(size); - 45be: 852e mv a0,a1 - 45c0: ec7ff0ef jal 4486 - 45c4: 84aa mv s1,a0 - if (!new_ptr) - 45c6: d575 beqz a0,45b2 - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 45c8: ff043603 ld a2,-16(s0) - 45cc: 85a2 mv a1,s0 - 45ce: 1641 addi a2,a2,-16 - 45d0: 514000ef jal 4ae4 - free(ptr); - 45d4: 8522 mv a0,s0 - 45d6: e3bff0ef jal 4410 -} - 45da: 60e2 ld ra,24(sp) - free(ptr); - 45dc: 6442 ld s0,16(sp) -} - 45de: 8526 mv a0,s1 - 45e0: 64a2 ld s1,8(sp) - 45e2: 6105 addi sp,sp,32 - 45e4: 8082 ret - return malloc(size); - 45e6: 852e mv a0,a1 - 45e8: bd79 j 4486 - free(ptr); - 45ea: e27ff0ef jal 4410 - return NULL; - 45ee: 4481 li s1,0 - 45f0: b7d1 j 45b4 - -00000000000045f2 : - if (base < 0 || base == 1 || base > 36) - 45f2: 02400813 li a6,36 -{ - 45f6: 86aa mv a3,a0 - 45f8: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 45fa: 00c86663 bltu a6,a2,4606 - 45fe: 4805 li a6,1 - 4600: 01060363 beq a2,a6,4606 - 4604: b939 j 4222 - if (endptr) - 4606: c311 beqz a4,460a - *endptr = (char *)nptr; - 4608: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 460a: 00003797 auipc a5,0x3 - 460e: 0a07ab23 sw zero,182(a5) # 76c0 -} - 4612: 4501 li a0,0 - 4614: 8082 ret - -0000000000004616 : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 4616: 1141 addi sp,sp,-16 - 4618: e406 sd ra,8(sp) - 461a: e022 sd s0,0(sp) - const char *s = nptr; - 461c: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 461e: 02000813 li a6,32 - 4622: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 4624: 0006c783 lbu a5,0(a3) - 4628: 0685 addi a3,a3,1 - 462a: ff77871b addiw a4,a5,-9 - 462e: 0ff77713 zext.b a4,a4 - 4632: 0007841b sext.w s0,a5 - 4636: ff0787e3 beq a5,a6,4624 - 463a: fee8f5e3 bgeu a7,a4,4624 - if (base < 0 || base == 1 || base > 36) - 463e: 02400793 li a5,36 - 4642: 02c7ec63 bltu a5,a2,467a - 4646: 4785 li a5,1 - 4648: 02f60963 beq a2,a5,467a - 464c: bd7ff0ef jal 4222 - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 4650: 00003797 auipc a5,0x3 - 4654: 07078793 addi a5,a5,112 # 76c0 - 4658: 4394 lw a3,0(a5) - 465a: 02200713 li a4,34 - 465e: 04e68363 beq a3,a4,46a4 - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 4662: 02d00713 li a4,45 - 4666: 02e40563 beq s0,a4,4690 - 466a: 00055f63 bgez a0,4688 - { - errno = ERANGE; - 466e: 02200713 li a4,34 - 4672: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 4674: 557d li a0,-1 - 4676: 8105 srli a0,a0,0x1 - 4678: a801 j 4688 - if (endptr) - 467a: c191 beqz a1,467e - *endptr = (char *)nptr; - 467c: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 467e: 00003797 auipc a5,0x3 - 4682: 0407a123 sw zero,66(a5) # 76c0 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 4686: 4501 li a0,0 -} - 4688: 60a2 ld ra,8(sp) - 468a: 6402 ld s0,0(sp) - 468c: 0141 addi sp,sp,16 - 468e: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 4690: 577d li a4,-1 - 4692: 177e slli a4,a4,0x3f - 4694: 02a76263 bltu a4,a0,46b8 -} - 4698: 60a2 ld ra,8(sp) - 469a: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 469c: 40a00533 neg a0,a0 -} - 46a0: 0141 addi sp,sp,16 - 46a2: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 46a4: 577d li a4,-1 - 46a6: fae51ee3 bne a0,a4,4662 - return neg ? LLONG_MIN : LLONG_MAX; - 46aa: 02d00793 li a5,45 - 46ae: fcf413e3 bne s0,a5,4674 - return LLONG_MIN; - 46b2: 557d li a0,-1 - 46b4: 157e slli a0,a0,0x3f - 46b6: bfc9 j 4688 - errno = ERANGE; - 46b8: 02200713 li a4,34 - 46bc: c398 sw a4,0(a5) - return LLONG_MIN; - 46be: bfd5 j 46b2 - -00000000000046c0 : - if (base < 0 || base == 1 || base > 36) - 46c0: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 46c4: 86aa mv a3,a0 - 46c6: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 46c8: 00c86663 bltu a6,a2,46d4 - 46cc: 4805 li a6,1 - 46ce: 01060363 beq a2,a6,46d4 - 46d2: be81 j 4222 - if (endptr) - 46d4: c311 beqz a4,46d8 - *endptr = (char *)nptr; - 46d6: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 46d8: 00003797 auipc a5,0x3 - 46dc: fe07a423 sw zero,-24(a5) # 76c0 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 46e0: 4501 li a0,0 - 46e2: 8082 ret - -00000000000046e4 : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 46e4: bf0d j 4616 - -00000000000046e6 : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46e6: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 46e8: 4629 li a2,10 - 46ea: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46ec: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 46ee: f29ff0ef jal 4616 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 46f2: 60a2 ld ra,8(sp) - 46f4: 2501 sext.w a0,a0 - 46f6: 0141 addi sp,sp,16 - 46f8: 8082 ret - -00000000000046fa : - long long ret = strtoll(nptr, endptr, base); - 46fa: 4629 li a2,10 - 46fc: 4581 li a1,0 - 46fe: bf21 j 4616 - -0000000000004700 : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 4700: 4629 li a2,10 - 4702: 4581 li a1,0 - 4704: bf09 j 4616 - -0000000000004706 : - 4706: 02000693 li a3,32 - 470a: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 470c: 00054783 lbu a5,0(a0) - 4710: ff77871b addiw a4,a5,-9 - 4714: 0ff77713 zext.b a4,a4 - 4718: 06d78263 beq a5,a3,477c - 471c: 06e67063 bgeu a2,a4,477c - s++; - if (*s == '-') - 4720: 02d00713 li a4,45 - 4724: 08e78e63 beq a5,a4,47c0 - { - sign = -1; - s++; - } - else if (*s == '+') - 4728: 02b00713 li a4,43 - 472c: 0ae78263 beq a5,a4,47d0 - 4730: 00001717 auipc a4,0x1 - 4734: 0a073507 fld fa0,160(a4) # 57d0 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 4738: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 473c: 46a5 li a3,9 - 473e: f20007d3 fmv.d.x fa5,zero - 4742: 8732 mv a4,a2 - 4744: 02c6e363 bltu a3,a2,476a - 4748: 00001797 auipc a5,0x1 - 474c: 0907b687 fld fa3,144(a5) # 57d8 - 4750: 4625 li a2,9 - 4752: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 4756: d2070753 fcvt.d.w fa4,a4 - s++; - 475a: 0505 addi a0,a0,1 - 475c: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 4760: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 4764: 8736 mv a4,a3 - while (isdigit(*s)) - 4766: fed676e3 bgeu a2,a3,4752 - } - if (*s == '.') - 476a: 02e00713 li a4,46 - 476e: 00e78963 beq a5,a4,4780 - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 4772: c191 beqz a1,4776 - *endptr = (char *)s; - 4774: e188 sd a0,0(a1) - return val * sign; -} - 4776: 12a7f553 fmul.d fa0,fa5,fa0 - 477a: 8082 ret - s++; - 477c: 0505 addi a0,a0,1 - 477e: b779 j 470c - while (isdigit(*s)) - 4780: 00154703 lbu a4,1(a0) - 4784: 46a5 li a3,9 - s++; - 4786: 0505 addi a0,a0,1 - 4788: fd07071b addiw a4,a4,-48 - 478c: 87ba mv a5,a4 - while (isdigit(*s)) - 478e: fee6e2e3 bltu a3,a4,4772 - double factor = 1.0; - 4792: 00001717 auipc a4,0x1 - 4796: 03e73707 fld fa4,62(a4) # 57d0 - 479a: 00001717 auipc a4,0x1 - 479e: 05673607 fld fa2,86(a4) # 57f0 - factor *= 0.1; - 47a2: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 47a6: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 47aa: d20786d3 fcvt.d.w fa3,a5 - s++; - 47ae: 0505 addi a0,a0,1 - 47b0: fd07071b addiw a4,a4,-48 - 47b4: 87ba mv a5,a4 - val += (*s - '0') * factor; - 47b6: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 47ba: fee6f4e3 bgeu a3,a4,47a2 - 47be: bf55 j 4772 - while (isdigit(*s)) - 47c0: 00154783 lbu a5,1(a0) - 47c4: 00001717 auipc a4,0x1 - 47c8: 00473507 fld fa0,4(a4) # 57c8 - s++; - 47cc: 0505 addi a0,a0,1 - 47ce: b7ad j 4738 - while (isdigit(*s)) - 47d0: 00154783 lbu a5,1(a0) - 47d4: 00001717 auipc a4,0x1 - 47d8: ffc73507 fld fa0,-4(a4) # 57d0 - s++; - 47dc: 0505 addi a0,a0,1 - 47de: bfa9 j 4738 - -00000000000047e0 : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 47e0: 4581 li a1,0 - 47e2: b715 j 4706 - -00000000000047e4 : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 47e4: 1141 addi sp,sp,-16 - 47e6: e406 sd ra,8(sp) - 47e8: f1fff0ef jal 4706 - 47ec: 60a2 ld ra,8(sp) - 47ee: 40157553 fcvt.s.d fa0,fa0 - 47f2: 0141 addi sp,sp,16 - 47f4: 8082 ret - -00000000000047f6 : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 47f6: 4785 li a5,1 - 47f8: 0cb7fd63 bgeu a5,a1,48d2 -{ - 47fc: 715d addi sp,sp,-80 - 47fe: f44e sd s3,40(sp) - 4800: e486 sd ra,72(sp) - 4802: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 4804: c279 beqz a2,48ca - 4806: e85a sd s6,16(sp) - 4808: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 480a: 1b7d addi s6,s6,-1 - 480c: fc26 sd s1,56(sp) - 480e: 033b04b3 mul s1,s6,s3 - 4812: ec56 sd s5,24(sp) - 4814: 8aaa mv s5,a0 - 4816: f052 sd s4,32(sp) - 4818: e45e sd s7,8(sp) - 481a: e0a2 sd s0,64(sp) - 481c: f84a sd s2,48(sp) - 481e: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 4820: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 4822: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 4824: 069af763 bgeu s5,s1,4892 - char *j = base_ptr; - 4828: 8956 mv s2,s5 - char *i = base_ptr; - 482a: 8456 mv s0,s5 - 482c: a021 j 4834 - for (; j < pivot; j += size) - 482e: 994e add s2,s2,s3 - 4830: 00997f63 bgeu s2,s1,484e - { - if (compar(j, pivot) < 0) - 4834: 85a6 mv a1,s1 - 4836: 854a mv a0,s2 - 4838: 9a02 jalr s4 - 483a: fe055ae3 bgez a0,482e - { - if (i != j) - 483e: 05241d63 bne s0,s2,4898 - 4842: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 4846: 8432 mv s0,a2 - for (; j < pivot; j += size) - 4848: 994e add s2,s2,s3 - 484a: fe9965e3 bltu s2,s1,4834 - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 484e: 415405b3 sub a1,s0,s5 - 4852: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 4856: 40bb0b33 sub s6,s6,a1 - while (size--) - 485a: 013406b3 add a3,s0,s3 - *a++ = *b; - 485e: 0004c703 lbu a4,0(s1) - temp = *a; - 4862: 00044783 lbu a5,0(s0) - *b++ = temp; - 4866: 0485 addi s1,s1,1 - *a++ = *b; - 4868: 0405 addi s0,s0,1 - 486a: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 486e: fef48fa3 sb a5,-1(s1) - while (size--) - 4872: fed416e3 bne s0,a3,485e - qsort(base, left_count, size, compar); - 4876: 86d2 mv a3,s4 - 4878: 864e mv a2,s3 - 487a: 8556 mv a0,s5 - 487c: f7bff0ef jal 47f6 - if (nmemb < 2 || size == 0) - 4880: 036bfe63 bgeu s7,s6,48bc - char *pivot = base_ptr + (nmemb - 1) * size; - 4884: 1b7d addi s6,s6,-1 - 4886: 033b04b3 mul s1,s6,s3 - 488a: 8aa2 mv s5,s0 - 488c: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 488e: f89aede3 bltu s5,s1,4828 - char *i = base_ptr; - 4892: 8456 mv s0,s5 - for (; j < pivot; j += size) - 4894: 4581 li a1,0 - 4896: b7d1 j 485a - 4898: 01340633 add a2,s0,s3 - if (i != j) - 489c: 874a mv a4,s2 - 489e: 87a2 mv a5,s0 - *a++ = *b; - 48a0: 00074683 lbu a3,0(a4) - temp = *a; - 48a4: 0007c803 lbu a6,0(a5) - *b++ = temp; - 48a8: 0705 addi a4,a4,1 - *a++ = *b; - 48aa: 0785 addi a5,a5,1 - 48ac: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 48b0: ff070fa3 sb a6,-1(a4) - while (size--) - 48b4: fec796e3 bne a5,a2,48a0 - i += size; - 48b8: 8432 mv s0,a2 - 48ba: b779 j 4848 - 48bc: 6406 ld s0,64(sp) - 48be: 74e2 ld s1,56(sp) - 48c0: 7942 ld s2,48(sp) - 48c2: 7a02 ld s4,32(sp) - 48c4: 6ae2 ld s5,24(sp) - 48c6: 6b42 ld s6,16(sp) - 48c8: 6ba2 ld s7,8(sp) -} - 48ca: 60a6 ld ra,72(sp) - 48cc: 79a2 ld s3,40(sp) - 48ce: 6161 addi sp,sp,80 - 48d0: 8082 ret - 48d2: 8082 ret - -00000000000048d4 : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 48d4: 715d addi sp,sp,-80 - 48d6: e486 sd ra,72(sp) - 48d8: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 48da: c629 beqz a2,4924 - 48dc: f84a sd s2,48(sp) - 48de: f44e sd s3,40(sp) - 48e0: f052 sd s4,32(sp) - 48e2: ec56 sd s5,24(sp) - 48e4: e85a sd s6,16(sp) - 48e6: e45e sd s7,8(sp) - 48e8: e0a2 sd s0,64(sp) - 48ea: 8932 mv s2,a2 - 48ec: 8a2a mv s4,a0 - 48ee: 8aae mv s5,a1 - 48f0: 8b36 mv s6,a3 - 48f2: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 48f4: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 48f6: 01298433 add s0,s3,s2 - 48fa: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 48fc: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 4900: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 4902: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 4904: 85a6 mv a1,s1 - 4906: 9b82 jalr s7 - if (cmp < 0) - 4908: 02054463 bltz a0,4930 - u = idx; - else if (cmp > 0) - 490c: c515 beqz a0,4938 - l = idx + 1; - 490e: 00140993 addi s3,s0,1 - while (l < u) - 4912: ff29e2e3 bltu s3,s2,48f6 - 4916: 6406 ld s0,64(sp) - 4918: 7942 ld s2,48(sp) - 491a: 79a2 ld s3,40(sp) - 491c: 7a02 ld s4,32(sp) - 491e: 6ae2 ld s5,24(sp) - 4920: 6b42 ld s6,16(sp) - 4922: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 4924: 60a6 ld ra,72(sp) - return NULL; - 4926: 4481 li s1,0 -} - 4928: 8526 mv a0,s1 - 492a: 74e2 ld s1,56(sp) - 492c: 6161 addi sp,sp,80 - 492e: 8082 ret - u = idx; - 4930: 8922 mv s2,s0 - while (l < u) - 4932: fd29e2e3 bltu s3,s2,48f6 - 4936: b7c5 j 4916 - 4938: 6406 ld s0,64(sp) -} - 493a: 60a6 ld ra,72(sp) - 493c: 7942 ld s2,48(sp) - 493e: 79a2 ld s3,40(sp) - 4940: 7a02 ld s4,32(sp) - 4942: 6ae2 ld s5,24(sp) - 4944: 6b42 ld s6,16(sp) - 4946: 6ba2 ld s7,8(sp) - 4948: 8526 mv a0,s1 - 494a: 74e2 ld s1,56(sp) - 494c: 6161 addi sp,sp,80 - 494e: 8082 ret - -0000000000004950 : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 4950: 41f5579b sraiw a5,a0,0x1f - 4954: 8d3d xor a0,a0,a5 - 4956: 9d1d subw a0,a0,a5 - 4958: 8082 ret - -000000000000495a : -long labs(long j) { return (j < 0) ? -j : j; } - 495a: 43f55793 srai a5,a0,0x3f - 495e: 8d3d xor a0,a0,a5 - 4960: 8d1d sub a0,a0,a5 - 4962: 8082 ret - -0000000000004964 : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 4964: 43f55793 srai a5,a0,0x3f - 4968: 8d3d xor a0,a0,a5 - 496a: 8d1d sub a0,a0,a5 - 496c: 8082 ret - -000000000000496e
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 496e: 02b547bb divw a5,a0,a1 -{ - 4972: 1141 addi sp,sp,-16 - return res; -} - 4974: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 4976: 02b5653b remw a0,a0,a1 - return res; - 497a: 1782 slli a5,a5,0x20 - 497c: 9381 srli a5,a5,0x20 - 497e: 1502 slli a0,a0,0x20 -} - 4980: 8d5d or a0,a0,a5 - 4982: 8082 ret - -0000000000004984 : -ldiv_t ldiv(long numer, long denom) -{ - 4984: 1141 addi sp,sp,-16 - 4986: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 4988: 02b54533 div a0,a0,a1 - 498c: 0141 addi sp,sp,16 - 498e: 02b7e5b3 rem a1,a5,a1 - 4992: 8082 ret - -0000000000004994 : -lldiv_t lldiv(long long numer, long long denom) -{ - 4994: 1141 addi sp,sp,-16 - 4996: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 4998: 02b54533 div a0,a0,a1 - 499c: 0141 addi sp,sp,16 - 499e: 02b7e5b3 rem a1,a5,a1 - 49a2: 8082 ret - -00000000000049a4 : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 49a4: 00003697 auipc a3,0x3 - 49a8: cd468693 addi a3,a3,-812 # 7678 - 49ac: 629c ld a5,0(a3) - 49ae: 41c65737 lui a4,0x41c65 - 49b2: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d675> - 49b6: 02e787b3 mul a5,a5,a4 - 49ba: 670d lui a4,0x3 - 49bc: 03970713 addi a4,a4,57 # 3039 <_vprintf_core.constprop.0.isra.0+0x25> - 49c0: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 49c2: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 49c6: e29c sd a5,0(a3) -} - 49c8: 9145 srli a0,a0,0x31 - 49ca: 8082 ret - -00000000000049cc : -void srand(unsigned int seed) { next = seed; } - 49cc: 1502 slli a0,a0,0x20 - 49ce: 9101 srli a0,a0,0x20 - 49d0: 00003797 auipc a5,0x3 - 49d4: caa7b423 sd a0,-856(a5) # 7678 - 49d8: 8082 ret - -00000000000049da : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 49da: c901 beqz a0,49ea - 49dc: 00054783 lbu a5,0(a0) - 49e0: 4501 li a0,0 - 49e2: c789 beqz a5,49ec - 49e4: 00b03533 snez a0,a1 - 49e8: 8082 ret - 49ea: 4501 li a0,0 - 49ec: 8082 ret - -00000000000049ee : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 49ee: 87aa mv a5,a0 - if (!s) - 49f0: cd81 beqz a1,4a08 - return 0; - if (n == 0) - return -1; - 49f2: 557d li a0,-1 - if (n == 0) - 49f4: ca19 beqz a2,4a0a - if (pwc) - 49f6: c781 beqz a5,49fe - *pwc = (wchar_t)*s; - 49f8: 0005c703 lbu a4,0(a1) - 49fc: c398 sw a4,0(a5) - return (*s != 0); - 49fe: 0005c503 lbu a0,0(a1) - 4a02: 00a03533 snez a0,a0 - 4a06: 8082 ret - return 0; - 4a08: 4501 li a0,0 -} - 4a0a: 8082 ret - -0000000000004a0c : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 4a0c: c509 beqz a0,4a16 - return 0; - *s = (char)wchar; - 4a0e: 00b50023 sb a1,0(a0) - return 1; - 4a12: 4505 li a0,1 - 4a14: 8082 ret - return 0; - 4a16: 4501 li a0,0 -} - 4a18: 8082 ret - -0000000000004a1a : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a1a: 0005c703 lbu a4,0(a1) - 4a1e: cb0d beqz a4,4a50 - 4a20: ca15 beqz a2,4a54 - 4a22: 86aa mv a3,a0 - size_t i = 0; - 4a24: 4781 li a5,0 - 4a26: a019 j 4a2c - while (src[i] && i < n) - 4a28: 02f60263 beq a2,a5,4a4c - { - dest[i] = (wchar_t)src[i]; - i++; - 4a2c: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 4a2e: c298 sw a4,0(a3) - while (src[i] && i < n) - 4a30: 00f58733 add a4,a1,a5 - 4a34: 00074703 lbu a4,0(a4) - 4a38: 0691 addi a3,a3,4 - 4a3a: f77d bnez a4,4a28 - } - if (i < n) - 4a3c: 00c7f763 bgeu a5,a2,4a4a - dest[i] = 0; - 4a40: 00279713 slli a4,a5,0x2 - 4a44: 953a add a0,a0,a4 - 4a46: 00052023 sw zero,0(a0) - size_t i = 0; - 4a4a: 863e mv a2,a5 - 4a4c: 8532 mv a0,a2 - 4a4e: 8082 ret - 4a50: 4781 li a5,0 - 4a52: b7ed j 4a3c - 4a54: 4501 li a0,0 - return i; -} - 4a56: 8082 ret - -0000000000004a58 : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 4a58: 4198 lw a4,0(a1) - 4a5a: c71d beqz a4,4a88 - 4a5c: ca05 beqz a2,4a8c - 4a5e: 0591 addi a1,a1,4 - size_t i = 0; - 4a60: 4781 li a5,0 - 4a62: a019 j 4a68 - while (src[i] && i < n) - 4a64: 02f60063 beq a2,a5,4a84 - { - dest[i] = (char)src[i]; - 4a68: 00f506b3 add a3,a0,a5 - 4a6c: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 4a70: 4198 lw a4,0(a1) - i++; - 4a72: 0785 addi a5,a5,1 - while (src[i] && i < n) - 4a74: 0591 addi a1,a1,4 - 4a76: f77d bnez a4,4a64 - } - if (i < n) - 4a78: 00c7f563 bgeu a5,a2,4a82 - dest[i] = 0; - 4a7c: 953e add a0,a0,a5 - 4a7e: 00050023 sb zero,0(a0) - size_t i = 0; - 4a82: 863e mv a2,a5 - 4a84: 8532 mv a0,a2 - 4a86: 8082 ret - 4a88: 4781 li a5,0 - 4a8a: b7fd j 4a78 - 4a8c: 4501 li a0,0 - return i; - 4a8e: 8082 ret - -0000000000004a90 : - -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; - 4a90: 0ff5f593 zext.b a1,a1 - 4a94: 87aa mv a5,a0 - 4a96: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 4a9a: c611 beqz a2,4aa6 - cdst[i] = (char)c; - 4a9c: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 4aa0: 0785 addi a5,a5,1 - 4aa2: fee79de3 bne a5,a4,4a9c - return dst; -} - 4aa6: 8082 ret - -0000000000004aa8 : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 4aa8: 02b50d63 beq a0,a1,4ae2 - return vdst; - - if (src > dst) - 4aac: 00b57e63 bgeu a0,a1,4ac8 - { - while (n--) - 4ab0: ca0d beqz a2,4ae2 - 4ab2: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 4ab4: 87aa mv a5,a0 - *dst++ = *src++; - 4ab6: 0005c703 lbu a4,0(a1) - 4aba: 0785 addi a5,a5,1 - 4abc: 0585 addi a1,a1,1 - 4abe: fee78fa3 sb a4,-1(a5) - while (n--) - 4ac2: fec79ae3 bne a5,a2,4ab6 - 4ac6: 8082 ret - } - else - { - dst += n; - 4ac8: 00c50733 add a4,a0,a2 - src += n; - 4acc: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 4ad0: ca09 beqz a2,4ae2 - *--dst = *--src; - 4ad2: fff7c683 lbu a3,-1(a5) - 4ad6: 17fd addi a5,a5,-1 - 4ad8: 177d addi a4,a4,-1 - 4ada: 00d70023 sb a3,0(a4) - while (n-- > 0) - 4ade: fef59ae3 bne a1,a5,4ad2 - } - return vdst; -} - 4ae2: 8082 ret - -0000000000004ae4 : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 4ae4: b7d1 j 4aa8 - -0000000000004ae6 : - -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--) - 4ae6: c205 beqz a2,4b06 - 4ae8: 962a add a2,a2,a0 - 4aea: a019 j 4af0 - 4aec: 00c50d63 beq a0,a2,4b06 - { - if (*p1 != *p2) - 4af0: 00054783 lbu a5,0(a0) - 4af4: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 4af8: 0505 addi a0,a0,1 - p2++; - 4afa: 0585 addi a1,a1,1 - if (*p1 != *p2) - 4afc: fee788e3 beq a5,a4,4aec - return *p1 - *p2; - 4b00: 40e7853b subw a0,a5,a4 - 4b04: 8082 ret - } - return 0; - 4b06: 4501 li a0,0 -} - 4b08: 8082 ret - -0000000000004b0a : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 4b0a: ce09 beqz a2,4b24 - { - if (*p == (unsigned char)c) - 4b0c: 0ff5f593 zext.b a1,a1 - 4b10: 962a add a2,a2,a0 - 4b12: a021 j 4b1a - return (void *)p; - p++; - 4b14: 0505 addi a0,a0,1 - while (n--) - 4b16: 00a60763 beq a2,a0,4b24 - if (*p == (unsigned char)c) - 4b1a: 00054783 lbu a5,0(a0) - 4b1e: feb79be3 bne a5,a1,4b14 - } - return NULL; -} - 4b22: 8082 ret - return NULL; - 4b24: 4501 li a0,0 -} - 4b26: 8082 ret - -0000000000004b28 : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 4b28: 00054783 lbu a5,0(a0) - 4b2c: cb89 beqz a5,4b3e - const char *p = s; - 4b2e: 87aa mv a5,a0 - while (*p) - 4b30: 0017c703 lbu a4,1(a5) - p++; - 4b34: 0785 addi a5,a5,1 - while (*p) - 4b36: ff6d bnez a4,4b30 - return (size_t)(p - s); - 4b38: 40a78533 sub a0,a5,a0 - 4b3c: 8082 ret - while (*p) - 4b3e: 4501 li a0,0 -} - 4b40: 8082 ret - -0000000000004b42 : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 4b42: 87aa mv a5,a0 - 4b44: 0005c703 lbu a4,0(a1) - 4b48: 0785 addi a5,a5,1 - 4b4a: 0585 addi a1,a1,1 - 4b4c: fee78fa3 sb a4,-1(a5) - 4b50: fb75 bnez a4,4b44 - ; - return os; -} - 4b52: 8082 ret - -0000000000004b54 : -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++) - 4b54: 4781 li a5,0 - 4b56: e619 bnez a2,4b64 - 4b58: 8082 ret - dst[i] = src[i]; - 4b5a: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4b5e: 0785 addi a5,a5,1 - 4b60: 02f60263 beq a2,a5,4b84 - 4b64: 00f58733 add a4,a1,a5 - 4b68: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 4b6c: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 4b70: f76d bnez a4,4b5a - - for (; i < n; i++) - 4b72: 00c7f963 bgeu a5,a2,4b84 - 4b76: 87b6 mv a5,a3 - 4b78: 962a add a2,a2,a0 - dst[i] = '\0'; - 4b7a: 00078023 sb zero,0(a5) - for (; i < n; i++) - 4b7e: 0785 addi a5,a5,1 - 4b80: fec79de3 bne a5,a2,4b7a - - return os; -} - 4b84: 8082 ret - -0000000000004b86 : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 4b86: 00054783 lbu a5,0(a0) - 4b8a: cf91 beqz a5,4ba6 - 4b8c: 87aa mv a5,a0 - 4b8e: 0017c703 lbu a4,1(a5) - dst++; - 4b92: 0785 addi a5,a5,1 - while (*dst) - 4b94: ff6d bnez a4,4b8e - while ((*dst++ = *src++) != 0) - 4b96: 0005c703 lbu a4,0(a1) - 4b9a: 0785 addi a5,a5,1 - 4b9c: 0585 addi a1,a1,1 - 4b9e: fee78fa3 sb a4,-1(a5) - 4ba2: fb75 bnez a4,4b96 - ; - return os; -} - 4ba4: 8082 ret - while ((*dst++ = *src++) != 0) - 4ba6: 0005c703 lbu a4,0(a1) - while (*dst) - 4baa: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 4bac: 0785 addi a5,a5,1 - 4bae: fee78fa3 sb a4,-1(a5) - 4bb2: 0585 addi a1,a1,1 - 4bb4: f36d bnez a4,4b96 - 4bb6: 8082 ret - -0000000000004bb8 : - while (*p) - 4bb8: 00054783 lbu a5,0(a0) - const char *p = s; - 4bbc: 872a mv a4,a0 - while (*p) - 4bbe: c789 beqz a5,4bc8 - 4bc0: 00174783 lbu a5,1(a4) - p++; - 4bc4: 0705 addi a4,a4,1 - while (*p) - 4bc6: ffed bnez a5,4bc0 - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 4bc8: 86ba mv a3,a4 - 4bca: 4781 li a5,0 - 4bcc: 88ba mv a7,a4 - 4bce: ea01 bnez a2,4bde - 4bd0: a839 j 4bee - dst[i] = src[i]; - 4bd2: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 4bd6: 00188693 addi a3,a7,1 - 4bda: 00f60d63 beq a2,a5,4bf4 - 4bde: 00f58833 add a6,a1,a5 - 4be2: 00084803 lbu a6,0(a6) - 4be6: 0785 addi a5,a5,1 - dst[i] = src[i]; - 4be8: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 4bea: fe0814e3 bnez a6,4bd2 - - dst[i] = '\0'; - 4bee: 00088023 sb zero,0(a7) - - return os; -} - 4bf2: 8082 ret - dst[i] = '\0'; - 4bf4: 00c708b3 add a7,a4,a2 - 4bf8: 00088023 sb zero,0(a7) -} - 4bfc: 8082 ret - -0000000000004bfe : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 4bfe: 00054783 lbu a5,0(a0) - 4c02: e791 bnez a5,4c0e - 4c04: a02d j 4c2e - 4c06: 00054783 lbu a5,0(a0) - 4c0a: cf89 beqz a5,4c24 - 4c0c: 85b6 mv a1,a3 - 4c0e: 0005c703 lbu a4,0(a1) - { - p++; - 4c12: 0505 addi a0,a0,1 - q++; - 4c14: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 4c18: fef707e3 beq a4,a5,4c06 - } - return (int)((unsigned char)*p - (unsigned char)*q); - 4c1c: 0007851b sext.w a0,a5 -} - 4c20: 9d19 subw a0,a0,a4 - 4c22: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c24: 0015c703 lbu a4,1(a1) - 4c28: 4501 li a0,0 -} - 4c2a: 9d19 subw a0,a0,a4 - 4c2c: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 4c2e: 0005c703 lbu a4,0(a1) - 4c32: 4501 li a0,0 - 4c34: b7f5 j 4c20 - -0000000000004c36 : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 4c36: ca0d beqz a2,4c68 - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 4c38: 00054783 lbu a5,0(a0) - 4c3c: 167d addi a2,a2,-1 - 4c3e: 00c506b3 add a3,a0,a2 - 4c42: eb89 bnez a5,4c54 - 4c44: a80d j 4c76 - { - if (n == 0 || *s1 == '\0') - 4c46: 00d50d63 beq a0,a3,4c60 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c4a: 00154783 lbu a5,1(a0) - break; - s1++; - 4c4e: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c50: cf91 beqz a5,4c6c - 4c52: 85b2 mv a1,a2 - 4c54: 0005c703 lbu a4,0(a1) - s2++; - 4c58: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4c5c: fef705e3 beq a4,a5,4c46 - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c60: 0007851b sext.w a0,a5 - 4c64: 9d19 subw a0,a0,a4 - 4c66: 8082 ret - return 0; - 4c68: 4501 li a0,0 -} - 4c6a: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c6c: 0015c703 lbu a4,1(a1) - 4c70: 4501 li a0,0 - 4c72: 9d19 subw a0,a0,a4 - 4c74: 8082 ret - 4c76: 0005c703 lbu a4,0(a1) - 4c7a: 4501 li a0,0 - 4c7c: b7e5 j 4c64 - -0000000000004c7e : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 4c7e: 0ff5f593 zext.b a1,a1 - 4c82: a019 j 4c88 - { - if (!*s++) - 4c84: 0505 addi a0,a0,1 - 4c86: c791 beqz a5,4c92 - while (*s != (char)c) - 4c88: 00054783 lbu a5,0(a0) - 4c8c: feb79ce3 bne a5,a1,4c84 - 4c90: 8082 ret - return NULL; - 4c92: 4501 li a0,0 - } - return (char *)s; -} - 4c94: 8082 ret - -0000000000004c96 : - -char *strrchr(const char *s, int c) -{ - 4c96: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 4c98: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 4c9c: 4501 li a0,0 - if (*s == (char)c) - 4c9e: 0007c703 lbu a4,0(a5) - 4ca2: 00e59363 bne a1,a4,4ca8 - last = s; - 4ca6: 853e mv a0,a5 - } while (*s++); - 4ca8: 0785 addi a5,a5,1 - 4caa: fb75 bnez a4,4c9e - - return (char *)last; -} - 4cac: 8082 ret - -0000000000004cae : - while (*p) - 4cae: 0005c883 lbu a7,0(a1) - 4cb2: 04088a63 beqz a7,4d06 - const char *p = s; - 4cb6: 87ae mv a5,a1 - while (*p) - 4cb8: 0017c703 lbu a4,1(a5) - p++; - 4cbc: 0785 addi a5,a5,1 - while (*p) - 4cbe: ff6d bnez a4,4cb8 - return (size_t)(p - s); - 4cc0: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 4cc4: 04b78163 beq a5,a1,4d06 - return (char *)haystack; - - for (; *haystack; haystack++) - 4cc8: 00054783 lbu a5,0(a0) - 4ccc: cf85 beqz a5,4d04 - 4cce: 187d addi a6,a6,-1 - 4cd0: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 4cd2: 02f89463 bne a7,a5,4cfa - while (n-- > 0 && *s1 && *s1 == *s2) - 4cd6: 00054703 lbu a4,0(a0) - 4cda: 8646 mv a2,a7 - 4cdc: 86ae mv a3,a1 - 4cde: 87aa mv a5,a0 - 4ce0: eb11 bnez a4,4cf4 - 4ce2: a821 j 4cfa - if (n == 0 || *s1 == '\0') - 4ce4: 03078163 beq a5,a6,4d06 - while (n-- > 0 && *s1 && *s1 == *s2) - 4ce8: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4cec: 0006c603 lbu a2,0(a3) - s1++; - 4cf0: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4cf2: cb19 beqz a4,4d08 - s2++; - 4cf4: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 4cf6: fee607e3 beq a2,a4,4ce4 - for (; *haystack; haystack++) - 4cfa: 00154783 lbu a5,1(a0) - 4cfe: 0805 addi a6,a6,1 - 4d00: 0505 addi a0,a0,1 - 4d02: fbe1 bnez a5,4cd2 - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 4d04: 4501 li a0,0 -} - 4d06: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 4d08: de7d beqz a2,4d06 - for (; *haystack; haystack++) - 4d0a: 00154783 lbu a5,1(a0) - 4d0e: 0805 addi a6,a6,1 - 4d10: 0505 addi a0,a0,1 - 4d12: f3e1 bnez a5,4cd2 - 4d14: bfc5 j 4d04 - -0000000000004d16 : - -char *strdup(const char *s) -{ - 4d16: 1101 addi sp,sp,-32 - 4d18: e426 sd s1,8(sp) - 4d1a: ec06 sd ra,24(sp) - 4d1c: e822 sd s0,16(sp) - while (*p) - 4d1e: 00054783 lbu a5,0(a0) -{ - 4d22: 84aa mv s1,a0 - while (*p) - 4d24: cb8d beqz a5,4d56 - const char *p = s; - 4d26: 862a mv a2,a0 - while (*p) - 4d28: 00164783 lbu a5,1(a2) - p++; - 4d2c: 0605 addi a2,a2,1 - while (*p) - 4d2e: ffed bnez a5,4d28 - return (size_t)(p - s); - 4d30: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 4d32: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 4d36: 8522 mv a0,s0 - 4d38: f4eff0ef jal 4486 - if (new_str == NULL) - 4d3c: c901 beqz a0,4d4c - return memmove(vdst, vsrc, n); - 4d3e: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 4d40: 6442 ld s0,16(sp) - 4d42: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 4d44: 85a6 mv a1,s1 -} - 4d46: 64a2 ld s1,8(sp) - 4d48: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 4d4a: bbb9 j 4aa8 -} - 4d4c: 60e2 ld ra,24(sp) - 4d4e: 6442 ld s0,16(sp) - 4d50: 64a2 ld s1,8(sp) - 4d52: 6105 addi sp,sp,32 - 4d54: 8082 ret - while (*p) - 4d56: 4405 li s0,1 - 4d58: bff9 j 4d36 - -0000000000004d5a : - 4d5a: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 4d5e: 1101 addi sp,sp,-32 - 4d60: ec06 sd ra,24(sp) - 4d62: e822 sd s0,16(sp) - 4d64: 86b2 mv a3,a2 - while (*p) - 4d66: cf8d beqz a5,4da0 - const char *p = s; - 4d68: 87ae mv a5,a1 - while (*p) - 4d6a: 0017c703 lbu a4,1(a5) - p++; - 4d6e: 0785 addi a5,a5,1 - while (*p) - 4d70: ff6d bnez a4,4d6a - return (size_t)(p - s); - 4d72: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 4d76: c285 beqz a3,4d96 - 4d78: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d7a: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 4d7e: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d82: 00d47563 bgeu s0,a3,4d8c - dst[copy_len] = '\0'; - 4d86: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d8a: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 4d8c: d1dff0ef jal 4aa8 - dst[copy_len] = '\0'; - 4d90: 00048023 sb zero,0(s1) - } - - return src_len; - 4d94: 64a2 ld s1,8(sp) -} - 4d96: 60e2 ld ra,24(sp) - 4d98: 8522 mv a0,s0 - 4d9a: 6442 ld s0,16(sp) - 4d9c: 6105 addi sp,sp,32 - 4d9e: 8082 ret - if (size > 0) - 4da0: e219 bnez a2,4da6 - return (size_t)(p - s); - 4da2: 4401 li s0,0 - 4da4: bfcd j 4d96 - 4da6: e426 sd s1,8(sp) - 4da8: 4401 li s0,0 - if (size > 0) - 4daa: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dac: 4601 li a2,0 - 4dae: bff9 j 4d8c - -0000000000004db0 : - while (*p) - 4db0: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 4db4: 7179 addi sp,sp,-48 - 4db6: e84a sd s2,16(sp) - 4db8: f406 sd ra,40(sp) - 4dba: f022 sd s0,32(sp) - 4dbc: ec26 sd s1,24(sp) - 4dbe: 892a mv s2,a0 - while (*p) - 4dc0: c7b5 beqz a5,4e2c - const char *p = s; - 4dc2: 87ae mv a5,a1 - while (*p) - 4dc4: 0017c703 lbu a4,1(a5) - p++; - 4dc8: 0785 addi a5,a5,1 - while (*p) - 4dca: ff6d bnez a4,4dc4 - return (size_t)(p - s); - 4dcc: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 4dd0: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 4dd2: e609 bnez a2,4ddc - 4dd4: a0a1 j 4e1c - dst_len++; - 4dd6: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 4dd8: 04860263 beq a2,s0,4e1c - 4ddc: 00890533 add a0,s2,s0 - 4de0: 00054783 lbu a5,0(a0) - 4de4: fbed bnez a5,4dd6 - - if (dst_len == size) - 4de6: 02860b63 beq a2,s0,4e1c - 4dea: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 4dec: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4df0: 89a6 mv s3,s1 - 4df2: 02f4f263 bgeu s1,a5,4e16 - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 4df6: 994e add s2,s2,s3 - 4df8: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 4dfa: 864e mv a2,s3 - 4dfc: cadff0ef jal 4aa8 - dst[dst_len + copy_len] = '\0'; - 4e00: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x6d0> - - return dst_len + src_len; - 4e04: 00940533 add a0,s0,s1 -} - 4e08: 70a2 ld ra,40(sp) - 4e0a: 7402 ld s0,32(sp) - return dst_len + src_len; - 4e0c: 69a2 ld s3,8(sp) -} - 4e0e: 64e2 ld s1,24(sp) - 4e10: 6942 ld s2,16(sp) - 4e12: 6145 addi sp,sp,48 - 4e14: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e16: fff78993 addi s3,a5,-1 - 4e1a: bff1 j 4df6 -} - 4e1c: 70a2 ld ra,40(sp) - 4e1e: 7402 ld s0,32(sp) - 4e20: 6942 ld s2,16(sp) - return size + src_len; - 4e22: 00960533 add a0,a2,s1 -} - 4e26: 64e2 ld s1,24(sp) - 4e28: 6145 addi sp,sp,48 - 4e2a: 8082 ret - while (*p) - 4e2c: 4481 li s1,0 - 4e2e: b74d j 4dd0 - -0000000000004e30 : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 4e30: 00054683 lbu a3,0(a0) - 4e34: c695 beqz a3,4e60 - { - for (a = accept; *a; a++) - 4e36: 0005c803 lbu a6,0(a1) - 4e3a: 862a mv a2,a0 - 4e3c: 00080f63 beqz a6,4e5a - 4e40: 87ae mv a5,a1 - 4e42: 8742 mv a4,a6 - 4e44: a021 j 4e4c - 4e46: 0007c703 lbu a4,0(a5) - 4e4a: cb01 beqz a4,4e5a - 4e4c: 0785 addi a5,a5,1 - { - if (*p == *a) - 4e4e: fee69ce3 bne a3,a4,4e46 - while (*p) - 4e52: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 4e56: 0605 addi a2,a2,1 - while (*p) - 4e58: f6e5 bnez a3,4e40 - } - return (size_t)(p - s); - 4e5a: 40a60533 sub a0,a2,a0 - 4e5e: 8082 ret - while (*p) - 4e60: 4501 li a0,0 -} - 4e62: 8082 ret - -0000000000004e64 : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 4e64: 00054683 lbu a3,0(a0) - 4e68: ce85 beqz a3,4ea0 - { - for (r = reject; *r; r++) - 4e6a: 0005c803 lbu a6,0(a1) - const char *p = s; - 4e6e: 862a mv a2,a0 - for (r = reject; *r; r++) - 4e70: 02080363 beqz a6,4e96 - 4e74: 87ae mv a5,a1 - 4e76: 8742 mv a4,a6 - 4e78: a021 j 4e80 - 4e7a: 0007c703 lbu a4,0(a5) - 4e7e: c719 beqz a4,4e8c - 4e80: 0785 addi a5,a5,1 - { - if (*p == *r) - 4e82: fed71ce3 bne a4,a3,4e7a - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 4e86: 40a60533 sub a0,a2,a0 - 4e8a: 8082 ret - while (*p) - 4e8c: 00164683 lbu a3,1(a2) - p++; - 4e90: 0605 addi a2,a2,1 - while (*p) - 4e92: f2ed bnez a3,4e74 - 4e94: bfcd j 4e86 - 4e96: 00164683 lbu a3,1(a2) - p++; - 4e9a: 0605 addi a2,a2,1 - while (*p) - 4e9c: feed bnez a3,4e96 - 4e9e: b7e5 j 4e86 - 4ea0: 4501 li a0,0 -} - 4ea2: 8082 ret - -0000000000004ea4 : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 4ea4: 00054683 lbu a3,0(a0) - 4ea8: c295 beqz a3,4ecc - { - for (a = accept; *a; a++) - 4eaa: 0005c603 lbu a2,0(a1) - 4eae: c20d beqz a2,4ed0 - 4eb0: 87ae mv a5,a1 - 4eb2: 8732 mv a4,a2 - 4eb4: a021 j 4ebc - 4eb6: 0007c703 lbu a4,0(a5) - 4eba: c709 beqz a4,4ec4 - 4ebc: 0785 addi a5,a5,1 - { - if (*s == *a) - 4ebe: fed71ce3 bne a4,a3,4eb6 - return (char *)s; - } - s++; - } - return NULL; -} - 4ec2: 8082 ret - while (*s) - 4ec4: 00154683 lbu a3,1(a0) - s++; - 4ec8: 0505 addi a0,a0,1 - while (*s) - 4eca: f2fd bnez a3,4eb0 - return NULL; - 4ecc: 4501 li a0,0 -} - 4ece: 8082 ret - while (*s) - 4ed0: 00154683 lbu a3,1(a0) - s++; - 4ed4: 0505 addi a0,a0,1 - while (*s) - 4ed6: feed bnez a3,4ed0 - 4ed8: bfd5 j 4ecc - -0000000000004eda : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 4eda: 00003897 auipc a7,0x3 - 4ede: 90688893 addi a7,a7,-1786 # 77e0 - 4ee2: cd25 beqz a0,4f5a - while (*p) - 4ee4: 00054683 lbu a3,0(a0) - 4ee8: c295 beqz a3,4f0c - for (a = accept; *a; a++) - 4eea: 0005c803 lbu a6,0(a1) - 4eee: 02080463 beqz a6,4f16 - 4ef2: 87ae mv a5,a1 - 4ef4: 8742 mv a4,a6 - 4ef6: a021 j 4efe - 4ef8: 0007c703 lbu a4,0(a5) - 4efc: cf09 beqz a4,4f16 - 4efe: 0785 addi a5,a5,1 - if (*p == *a) - 4f00: fee69ce3 bne a3,a4,4ef8 - while (*p) - 4f04: 00154683 lbu a3,1(a0) - p++; - 4f08: 0505 addi a0,a0,1 - while (*p) - 4f0a: f6e5 bnez a3,4ef2 - 4f0c: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 4f0e: 00f8b023 sd a5,0(a7) - return NULL; - 4f12: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 4f14: 8082 ret - if (*str == '\0') - 4f16: 00054603 lbu a2,0(a0) - 4f1a: da6d beqz a2,4f0c - 4f1c: 86aa mv a3,a0 - for (a = accept; *a; a++) - 4f1e: 04080163 beqz a6,4f60 - 4f22: 8742 mv a4,a6 - 4f24: 87ae mv a5,a1 - 4f26: a021 j 4f2e - 4f28: 0007c703 lbu a4,0(a5) - 4f2c: cb19 beqz a4,4f42 - 4f2e: 0785 addi a5,a5,1 - if (*s == *a) - 4f30: fee61ce3 bne a2,a4,4f28 - olds = str + 1; - 4f34: 00168793 addi a5,a3,1 - *str = '\0'; - 4f38: 00068023 sb zero,0(a3) - olds = str; - 4f3c: 00f8b023 sd a5,0(a7) -} - 4f40: 8082 ret - while (*s) - 4f42: 0016c603 lbu a2,1(a3) - s++; - 4f46: 0685 addi a3,a3,1 - while (*s) - 4f48: fe69 bnez a2,4f22 - 4f4a: 87aa mv a5,a0 - while (*s != (char)c) - 4f4c: 0017c703 lbu a4,1(a5) - if (!*s++) - 4f50: 0785 addi a5,a5,1 - while (*s != (char)c) - 4f52: ff6d bnez a4,4f4c - olds = str; - 4f54: 00f8b023 sd a5,0(a7) -} - 4f58: 8082 ret - str = olds; - 4f5a: 0008b503 ld a0,0(a7) - 4f5e: b759 j 4ee4 - while (*s) - 4f60: 0016c603 lbu a2,1(a3) - s++; - 4f64: 0685 addi a3,a3,1 - while (*s) - 4f66: fe6d bnez a2,4f60 - 4f68: b7cd j 4f4a - -0000000000004f6a : - -char *strerror(int errnum) -{ - 4f6a: 87aa mv a5,a0 - - switch (errnum) - 4f6c: cd09 beqz a0,4f86 - 4f6e: 4731 li a4,12 - 4f70: 00000517 auipc a0,0x0 - 4f74: 16050513 addi a0,a0,352 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x128> - 4f78: 00e78b63 beq a5,a4,4f8e - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 4f7c: 00000517 auipc a0,0x0 - 4f80: 16450513 addi a0,a0,356 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x138> - 4f84: 8082 ret - return "Success"; - 4f86: 00000517 auipc a0,0x0 - 4f8a: 14250513 addi a0,a0,322 # 50c8 <_GLOBAL__sub_I__ZSt3cin+0x120> - } - 4f8e: 8082 ret - -0000000000004f90 <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 4f90: cf6ff06f j 4486 - -0000000000004f94 <_Znam>: -} - -void *operator new[](unsigned long n) - 4f94: cf2ff06f j 4486 - -0000000000004f98 <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 4f98: c78ff06f j 4410 - -0000000000004f9c <_ZdaPv>: -} - -void operator delete[](void *p) - 4f9c: c74ff06f j 4410 - -0000000000004fa0 <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 4fa0: c70ff06f j 4410 - -0000000000004fa4 <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 4fa4: c6cff06f j 4410 - -0000000000004fa8 <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 4fa8: 00002797 auipc a5,0x2 - 4fac: 6e87b783 ld a5,1768(a5) # 7690 <_GLOBAL_OFFSET_TABLE_+0x10> - 4fb0: 6390 ld a2,0(a5) - ostream cout(stdout); - 4fb2: 00002797 auipc a5,0x2 - 4fb6: 6d67b783 ld a5,1750(a5) # 7688 <_GLOBAL_OFFSET_TABLE_+0x8> - 4fba: 6394 ld a3,0(a5) - ostream cerr(stderr); - 4fbc: 00002797 auipc a5,0x2 - 4fc0: 6dc7b783 ld a5,1756(a5) # 7698 <_GLOBAL_OFFSET_TABLE_+0x18> - 4fc4: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 4fc6: 00003797 auipc a5,0x3 - 4fca: 82278793 addi a5,a5,-2014 # 77e8 <_ZSt3cin> - 4fce: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 4fd0: e794 sd a3,8(a5) - 4fd2: eb98 sd a4,16(a5) -} // namespace std - 4fd4: 8082 ret diff --git a/build/user/mkdir.sym b/build/user/mkdir.sym deleted file mode 100644 index 475d722..0000000 --- a/build/user/mkdir.sym +++ /dev/null @@ -1,189 +0,0 @@ -0000000000000000 .text -0000000000004fd8 .rodata -00000000000057f8 .eh_frame -00000000000068f8 .data -0000000000007680 .got -00000000000076a0 .got.plt -00000000000076b0 .init_array -00000000000076b8 .bss -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_loclists -0000000000000000 .debug_aranges -0000000000000000 .debug_rnglists -0000000000000000 .debug_line -0000000000000000 .debug_str -0000000000000000 .debug_line_str -0000000000000000 .comment -0000000000000000 .riscv.attributes -0000000000000000 mkdir.cc -0000000000000000 entry.o -0000000000000000 usys.o -0000000000000000 stdio.c -0000000000000148 stbsp__clamp_callback -0000000000000196 stbsp__count_clamp_callback -00000000000001a2 stbsp__real_to_str -0000000000000876 _in_char.part.0 -00000000000008bc _skip_space -0000000000000930 _vscanf_core.constprop.0 -00000000000011a0 _out_char -0000000000003014 _vprintf_core.constprop.0.isra.0 -0000000000006900 stbsp__digitpair -00000000000069cc stbsp__period -00000000000069cd stbsp__comma -00000000000069d0 hexu.1 -00000000000069e8 hex.0 -0000000000006a00 _stderr -0000000000006e20 _stdout -0000000000007240 _stdin -0000000000005360 stbsp__bot -0000000000005418 stbsp__negbot -00000000000054c8 stbsp__negboterr -0000000000005578 stbsp__negtop -00000000000055e0 stbsp__negtoperr -0000000000005648 stbsp__top -00000000000056b0 stbsp__toperr -0000000000005718 stbsp__powten -0000000000000000 stdlib.c -0000000000004222 strtoull.part.0 -0000000000007678 next -00000000000076c4 __atexit_func_count -00000000000076c8 __atexit_funcs -00000000000077c8 freep -00000000000077d0 base -0000000000000000 string.c -00000000000077e0 olds.0 -0000000000000000 cxx.cc -0000000000000000 iostream.cpp -0000000000004fa8 _GLOBAL__sub_I__ZSt3cin -0000000000007680 _GLOBAL_OFFSET_TABLE_ -0000000000004b42 strcpy -00000000000038b2 printf -0000000000007660 stdout -00000000000057bc STDOUT_FD -00000000000041f8 ungetc -0000000000004f6a strerror -0000000000004aa8 memmove -000000000000385c snprintf -00000000000000d0 mknod -00000000000046fa atol -0000000000004408 getenv -0000000000004f90 _Znwm -00000000000076c0 errno -000000000000495a labs -00000000000048d4 bsearch -0000000000000108 getpid -00000000000047f6 qsort -0000000000003af0 fscanf -0000000000003d62 fgets -00000000000077f8 _ZSt4cerr -0000000000004ae4 memcpy -000000000000440c system -00000000000041d8 feof -0000000000004486 malloc -0000000000000118 sleep -0000000000003812 vsnprintf -0000000000004616 strtoll -00000000000046c0 strtoul -0000000000004a0c wctomb -0000000000004a58 wcstombs -0000000000003a7a fflush -0000000000004a1a mbstowcs -0000000000000138 lseek -0000000000004f98 _ZdlPv -00000000000043fc abort -00000000000046e4 strtol -0000000000000098 pipe -00000000000049da mblen -0000000000004c96 strrchr -000000000000454c calloc -0000000000004706 strtod -0000000000000130 disk_test -00000000000000a8 write -00000000000047e0 atof -00000000000000e0 fstat -0000000000003abe fprintf -00000000000000b8 kill -0000000000004b86 strcat -00000000000000f8 chdir -00000000000040e0 fseek -0000000000002fb0 stbsp_vsprintf -00000000000000c0 exec -0000000000004b0a memchr -0000000000007668 stdin -0000000000000090 wait -0000000000002eca stbsp_vsnprintf -0000000000000076 _start -00000000000041e2 ferror -0000000000004cae strstr -00000000000049a4 rand -00000000000000a0 read -0000000000004d5a strlcpy -0000000000004c36 strncmp -0000000000001274 stbsp_set_separators -0000000000004fa0 _ZdlPvm -0000000000004b54 strncpy -00000000000000d8 unlink -0000000000004594 realloc -0000000000004eda strtok -0000000000004ae6 memcmp -0000000000000088 fork -00000000000038ec sscanf -0000000000004bb8 strncat -0000000000003e3e fread -0000000000000110 sbrk -0000000000004d16 strdup -0000000000000120 uptime -00000000000045f2 strtoull -0000000000002ea0 stbsp_sprintf -000000000000394e fopen -0000000000004a90 memset -0000000000000000 main -0000000000004154 ftell -00000000000049cc srand -0000000000004db0 strlcat -00000000000041ec clearerr -0000000000004f9c _ZdaPv -0000000000003a12 fclose -0000000000000128 putc -0000000000004bfe strcmp -0000000000000140 shutdown -0000000000000100 dup -0000000000003ccc fgetc -0000000000002fbe sprintf -00000000000047e4 strtof -00000000000043a2 atexit -0000000000004e64 strcspn -0000000000002f90 stbsp_snprintf -00000000000077e8 _ZSt3cin -000000000000391c scanf -0000000000007670 stderr -0000000000004984 ldiv -0000000000003b22 fputc -0000000000004f94 _Znam -0000000000004994 lldiv -0000000000003f58 fwrite -0000000000004180 rewind -00000000000077f0 _ZSt4cout -00000000000000e8 link -00000000000043c6 exit -0000000000000080 sys_exit -0000000000004964 llabs -00000000000046e6 atoi -00000000000057b8 STDERR_FD -0000000000004e30 strspn -0000000000004b28 strlen -0000000000001286 stbsp_vsprintfcb -00000000000000c8 open -00000000000057c0 STDIN_FD -0000000000004700 atoll -000000000000496e div -0000000000004950 abs -0000000000004c7e strchr -0000000000003be6 fputs -0000000000004fa4 _ZdaPvm -00000000000000f0 mkdir -00000000000000b0 close -00000000000049ee mbtowc -0000000000004ea4 strpbrk -0000000000004410 free diff --git a/build/user/sh b/build/user/sh deleted file mode 100755 index b6dd520..0000000 Binary files a/build/user/sh and /dev/null differ diff --git a/build/user/sh.asm b/build/user/sh.asm deleted file mode 100644 index f7b0cd9..0000000 --- a/build/user/sh.asm +++ /dev/null @@ -1,12619 +0,0 @@ - -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: 04450513 addi a0,a0,68 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> -{ - c: e406 sd ra,8(sp) - printf("shell panic: %s\n", s); - e: 0ed040ef jal 48fa - exit(1); -} - 12: 60a2 ld ra,8(sp) - exit(1); - 14: 4505 li a0,1 -} - 16: 0141 addi sp,sp,16 - exit(1); - 18: 3f60506f j 540e - -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: 0ae010ef jal 10d0 - 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: 00858593 addi a1,a1,8 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x50> - 40: 00006517 auipc a0,0x6 - 44: 00850513 addi a0,a0,8 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 48: 0b3040ef jal 48fa - exit(1); - 4c: 4505 li a0,1 - 4e: 3c0050ef jal 540e -} - 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: 1101 addi sp,sp,-32 - 5e: e822 sd s0,16(sp) - 60: e426 sd s1,8(sp) - 62: 842a mv s0,a0 - 64: 84ae mv s1,a1 - write(1, "$ ", 2); - 66: 4609 li a2,2 - 68: 00006597 auipc a1,0x6 - 6c: 06058593 addi a1,a1,96 # 60c8 <_GLOBAL__sub_I__ZSt3cin+0xd8> - 70: 4505 li a0,1 -{ - 72: ec06 sd ra,24(sp) - write(1, "$ ", 2); - 74: 07c010ef jal 10f0 - memset(buf, 0, nbuf); - 78: 8626 mv a2,s1 - 7a: 4581 li a1,0 - 7c: 8522 mv a0,s0 - 7e: 25b050ef jal 5ad8 - - int n = read(0, buf, nbuf - 1); - 82: fff4861b addiw a2,s1,-1 - 86: 85a2 mv a1,s0 - 88: 4501 li a0,0 - 8a: 05e010ef jal 10e8 - - if (n < 0) - 8e: 00054b63 bltz a0,a4 <_Z6getcmdPci+0x48> - return -1; - - buf[n] = 0; - 92: 942a add s0,s0,a0 - 94: 00040023 sb zero,0(s0) - return 0; - 98: 4501 li a0,0 -} - 9a: 60e2 ld ra,24(sp) - 9c: 6442 ld s0,16(sp) - 9e: 64a2 ld s1,8(sp) - a0: 6105 addi sp,sp,32 - a2: 8082 ret - return -1; - a4: 557d li a0,-1 - a6: bfd5 j 9a <_Z6getcmdPci+0x3e> - -00000000000000a8 <_ZN12RedirCommandD1Ev>: - ~RedirCommand() { delete sub_cmd; } - a8: 87aa mv a5,a0 - aa: 6508 ld a0,8(a0) - ac: 00008717 auipc a4,0x8 - b0: dcc70713 addi a4,a4,-564 # 7e78 <_ZTV12RedirCommand+0x10> - b4: e398 sd a4,0(a5) - b6: c501 beqz a0,be <_ZN12RedirCommandD1Ev+0x16> - b8: 611c ld a5,0(a0) - ba: 679c ld a5,8(a5) - bc: 8782 jr a5 - be: 8082 ret - -00000000000000c0 <_ZN11PipeCommandD1Ev>: - ~PipeCommand() - c0: 1141 addi sp,sp,-16 - c2: e022 sd s0,0(sp) - c4: 842a mv s0,a0 - delete left; - c6: 6508 ld a0,8(a0) - ~PipeCommand() - c8: e406 sd ra,8(sp) - { - ca: 00008797 auipc a5,0x8 - ce: dd678793 addi a5,a5,-554 # 7ea0 <_ZTV11PipeCommand+0x10> - d2: e01c sd a5,0(s0) - delete left; - d4: c501 beqz a0,dc <_ZN11PipeCommandD1Ev+0x1c> - d6: 611c ld a5,0(a0) - d8: 679c ld a5,8(a5) - da: 9782 jalr a5 - delete right; - dc: 6808 ld a0,16(s0) - de: c519 beqz a0,ec <_ZN11PipeCommandD1Ev+0x2c> - e0: 611c ld a5,0(a0) - } - e2: 6402 ld s0,0(sp) - e4: 60a2 ld ra,8(sp) - delete right; - e6: 679c ld a5,8(a5) - } - e8: 0141 addi sp,sp,16 - delete right; - ea: 8782 jr a5 - } - ec: 60a2 ld ra,8(sp) - ee: 6402 ld s0,0(sp) - f0: 0141 addi sp,sp,16 - f2: 8082 ret - -00000000000000f4 <_ZN11ListCommandD1Ev>: - ~ListCommand() - f4: 1141 addi sp,sp,-16 - f6: e022 sd s0,0(sp) - f8: 842a mv s0,a0 - delete left; - fa: 6508 ld a0,8(a0) - ~ListCommand() - fc: e406 sd ra,8(sp) - { - fe: 00008797 auipc a5,0x8 - 102: dca78793 addi a5,a5,-566 # 7ec8 <_ZTV11ListCommand+0x10> - 106: e01c sd a5,0(s0) - delete left; - 108: c501 beqz a0,110 <_ZN11ListCommandD1Ev+0x1c> - 10a: 611c ld a5,0(a0) - 10c: 679c ld a5,8(a5) - 10e: 9782 jalr a5 - delete right; - 110: 6808 ld a0,16(s0) - 112: c519 beqz a0,120 <_ZN11ListCommandD1Ev+0x2c> - 114: 611c ld a5,0(a0) - } - 116: 6402 ld s0,0(sp) - 118: 60a2 ld ra,8(sp) - delete right; - 11a: 679c ld a5,8(a5) - } - 11c: 0141 addi sp,sp,16 - delete right; - 11e: 8782 jr a5 - } - 120: 60a2 ld ra,8(sp) - 122: 6402 ld s0,0(sp) - 124: 0141 addi sp,sp,16 - 126: 8082 ret - -0000000000000128 <_ZN11BackCommandD1Ev>: - ~BackCommand() { delete sub_cmd; } - 128: 87aa mv a5,a0 - 12a: 6508 ld a0,8(a0) - 12c: 00008717 auipc a4,0x8 - 130: dc470713 addi a4,a4,-572 # 7ef0 <_ZTV11BackCommand+0x10> - 134: e398 sd a4,0(a5) - 136: c501 beqz a0,13e <_ZN11BackCommandD1Ev+0x16> - 138: 611c ld a5,0(a0) - 13a: 679c ld a5,8(a5) - 13c: 8782 jr a5 - 13e: 8082 ret - -0000000000000140 <_ZN11ExecCommandD1Ev>: -struct ExecCommand : public Command - 140: 8082 ret - -0000000000000142 <_ZN12RedirCommand3runEv>: - void run() override - 142: 1141 addi sp,sp,-16 - 144: e022 sd s0,0(sp) - 146: 842a mv s0,a0 - close(fd); - 148: 5148 lw a0,36(a0) - void run() override - 14a: e406 sd ra,8(sp) - close(fd); - 14c: 7ad000ef jal 10f8 - if (open(file, mode) < 0) - 150: 500c lw a1,32(s0) - 152: 6808 ld a0,16(s0) - 154: 7bd000ef jal 1110 - 158: 00054963 bltz a0,16a <_ZN12RedirCommand3runEv+0x28> - sub_cmd->run(); - 15c: 6408 ld a0,8(s0) - } - 15e: 6402 ld s0,0(sp) - 160: 60a2 ld ra,8(sp) - sub_cmd->run(); - 162: 611c ld a5,0(a0) - 164: 6b9c ld a5,16(a5) - } - 166: 0141 addi sp,sp,16 - sub_cmd->run(); - 168: 8782 jr a5 - printf("open %s failed\n", file); - 16a: 680c ld a1,16(s0) - 16c: 00006517 auipc a0,0x6 - 170: eb450513 addi a0,a0,-332 # 6020 <_GLOBAL__sub_I__ZSt3cin+0x30> - 174: 786040ef jal 48fa - exit(1); - 178: 4505 li a0,1 - 17a: 294050ef jal 540e - sub_cmd->run(); - 17e: 6408 ld a0,8(s0) - } - 180: 6402 ld s0,0(sp) - 182: 60a2 ld ra,8(sp) - sub_cmd->run(); - 184: 611c ld a5,0(a0) - 186: 6b9c ld a5,16(a5) - } - 188: 0141 addi sp,sp,16 - sub_cmd->run(); - 18a: 8782 jr a5 - -000000000000018c <_ZN11ExecCommand3runEv>: - void run() override - 18c: 1141 addi sp,sp,-16 - 18e: e022 sd s0,0(sp) - 190: 842a mv s0,a0 - if (argv[0] == nullptr) - 192: 6508 ld a0,8(a0) - void run() override - 194: e406 sd ra,8(sp) - if (argv[0] == nullptr) - 196: c115 beqz a0,1ba <_ZN11ExecCommand3runEv+0x2e> - exec(argv[0], argv); - 198: 00840593 addi a1,s0,8 - 19c: 76d000ef jal 1108 - printf("exec %s failed\n", argv[0]); - 1a0: 640c ld a1,8(s0) - 1a2: 00006517 auipc a0,0x6 - 1a6: e8e50513 addi a0,a0,-370 # 6030 <_GLOBAL__sub_I__ZSt3cin+0x40> - 1aa: 750040ef jal 48fa - } - 1ae: 6402 ld s0,0(sp) - 1b0: 60a2 ld ra,8(sp) - exit(1); - 1b2: 4505 li a0,1 - } - 1b4: 0141 addi sp,sp,16 - exit(1); - 1b6: 2580506f j 540e - exit(1); - 1ba: 4505 li a0,1 - 1bc: 252050ef jal 540e - exec(argv[0], argv); - 1c0: 6408 ld a0,8(s0) - 1c2: bfd9 j 198 <_ZN11ExecCommand3runEv+0xc> - -00000000000001c4 <_ZN11ExecCommandD0Ev>: -struct ExecCommand : public Command - 1c4: 05800593 li a1,88 - 1c8: 6210506f j 5fe8 <_ZdlPvm> - -00000000000001cc <_ZN12RedirCommandD0Ev>: - ~RedirCommand() { delete sub_cmd; } - 1cc: 1141 addi sp,sp,-16 - 1ce: e022 sd s0,0(sp) - 1d0: 842a mv s0,a0 - 1d2: 6508 ld a0,8(a0) - 1d4: e406 sd ra,8(sp) - 1d6: 00008797 auipc a5,0x8 - 1da: ca278793 addi a5,a5,-862 # 7e78 <_ZTV12RedirCommand+0x10> - 1de: e01c sd a5,0(s0) - 1e0: c501 beqz a0,1e8 <_ZN12RedirCommandD0Ev+0x1c> - 1e2: 611c ld a5,0(a0) - 1e4: 679c ld a5,8(a5) - 1e6: 9782 jalr a5 - 1e8: 8522 mv a0,s0 - 1ea: 6402 ld s0,0(sp) - 1ec: 60a2 ld ra,8(sp) - 1ee: 02800593 li a1,40 - 1f2: 0141 addi sp,sp,16 - 1f4: 5f50506f j 5fe8 <_ZdlPvm> - -00000000000001f8 <_ZN11BackCommandD0Ev>: - ~BackCommand() { delete sub_cmd; } - 1f8: 1141 addi sp,sp,-16 - 1fa: e022 sd s0,0(sp) - 1fc: 842a mv s0,a0 - 1fe: 6508 ld a0,8(a0) - 200: e406 sd ra,8(sp) - 202: 00008797 auipc a5,0x8 - 206: cee78793 addi a5,a5,-786 # 7ef0 <_ZTV11BackCommand+0x10> - 20a: e01c sd a5,0(s0) - 20c: c501 beqz a0,214 <_ZN11BackCommandD0Ev+0x1c> - 20e: 611c ld a5,0(a0) - 210: 679c ld a5,8(a5) - 212: 9782 jalr a5 - 214: 8522 mv a0,s0 - 216: 6402 ld s0,0(sp) - 218: 60a2 ld ra,8(sp) - 21a: 45c1 li a1,16 - 21c: 0141 addi sp,sp,16 - 21e: 5cb0506f j 5fe8 <_ZdlPvm> - -0000000000000222 <_ZN11PipeCommandD0Ev>: - ~PipeCommand() - 222: 1141 addi sp,sp,-16 - 224: e022 sd s0,0(sp) - 226: 842a mv s0,a0 - delete left; - 228: 6508 ld a0,8(a0) - ~PipeCommand() - 22a: e406 sd ra,8(sp) - { - 22c: 00008797 auipc a5,0x8 - 230: c7478793 addi a5,a5,-908 # 7ea0 <_ZTV11PipeCommand+0x10> - 234: e01c sd a5,0(s0) - delete left; - 236: c501 beqz a0,23e <_ZN11PipeCommandD0Ev+0x1c> - 238: 611c ld a5,0(a0) - 23a: 679c ld a5,8(a5) - 23c: 9782 jalr a5 - delete right; - 23e: 6808 ld a0,16(s0) - 240: c501 beqz a0,248 <_ZN11PipeCommandD0Ev+0x26> - 242: 611c ld a5,0(a0) - 244: 679c ld a5,8(a5) - 246: 9782 jalr a5 - } - 248: 8522 mv a0,s0 - 24a: 6402 ld s0,0(sp) - 24c: 60a2 ld ra,8(sp) - 24e: 45e1 li a1,24 - 250: 0141 addi sp,sp,16 - 252: 5970506f j 5fe8 <_ZdlPvm> - -0000000000000256 <_ZN11ListCommandD0Ev>: - ~ListCommand() - 256: 1141 addi sp,sp,-16 - 258: e022 sd s0,0(sp) - 25a: 842a mv s0,a0 - delete left; - 25c: 6508 ld a0,8(a0) - ~ListCommand() - 25e: e406 sd ra,8(sp) - { - 260: 00008797 auipc a5,0x8 - 264: c6878793 addi a5,a5,-920 # 7ec8 <_ZTV11ListCommand+0x10> - 268: e01c sd a5,0(s0) - delete left; - 26a: c501 beqz a0,272 <_ZN11ListCommandD0Ev+0x1c> - 26c: 611c ld a5,0(a0) - 26e: 679c ld a5,8(a5) - 270: 9782 jalr a5 - delete right; - 272: 6808 ld a0,16(s0) - 274: c501 beqz a0,27c <_ZN11ListCommandD0Ev+0x26> - 276: 611c ld a5,0(a0) - 278: 679c ld a5,8(a5) - 27a: 9782 jalr a5 - } - 27c: 8522 mv a0,s0 - 27e: 6402 ld s0,0(sp) - 280: 60a2 ld ra,8(sp) - 282: 45e1 li a1,24 - 284: 0141 addi sp,sp,16 - 286: 5630506f j 5fe8 <_ZdlPvm> - -000000000000028a <_ZN11BackCommand3runEv>: - void run() override - 28a: 1141 addi sp,sp,-16 - 28c: e022 sd s0,0(sp) - 28e: e406 sd ra,8(sp) - 290: 842a mv s0,a0 - int pid = fork(); - 292: 63f000ef jal 10d0 - if (pid == -1) - 296: 57fd li a5,-1 - 298: 00f50d63 beq a0,a5,2b2 <_ZN11BackCommand3runEv+0x28> - if (fork_or_panic() == 0) - 29c: e509 bnez a0,2a6 <_ZN11BackCommand3runEv+0x1c> - sub_cmd->run(); - 29e: 6408 ld a0,8(s0) - 2a0: 611c ld a5,0(a0) - 2a2: 6b9c ld a5,16(a5) - 2a4: 9782 jalr a5 - } - 2a6: 6402 ld s0,0(sp) - 2a8: 60a2 ld ra,8(sp) - exit(0); - 2aa: 4501 li a0,0 - } - 2ac: 0141 addi sp,sp,16 - exit(0); - 2ae: 1600506f j 540e - printf("shell panic: %s\n", s); - 2b2: 00006597 auipc a1,0x6 - 2b6: d8e58593 addi a1,a1,-626 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x50> - 2ba: 00006517 auipc a0,0x6 - 2be: d8e50513 addi a0,a0,-626 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 2c2: 638040ef jal 48fa - exit(1); - 2c6: 4505 li a0,1 - 2c8: 146050ef jal 540e - } - 2cc: 6402 ld s0,0(sp) - 2ce: 60a2 ld ra,8(sp) - exit(0); - 2d0: 4501 li a0,0 - } - 2d2: 0141 addi sp,sp,16 - exit(0); - 2d4: 13a0506f j 540e - -00000000000002d8 <_ZN11ListCommand3runEv>: - void run() override - 2d8: 1141 addi sp,sp,-16 - 2da: e022 sd s0,0(sp) - 2dc: e406 sd ra,8(sp) - 2de: 842a mv s0,a0 - int pid = fork(); - 2e0: 5f1000ef jal 10d0 - if (pid == -1) - 2e4: 57fd li a5,-1 - 2e6: 02f50163 beq a0,a5,308 <_ZN11ListCommand3runEv+0x30> - if (fork_or_panic() == 0) - 2ea: e509 bnez a0,2f4 <_ZN11ListCommand3runEv+0x1c> - left->run(); - 2ec: 6408 ld a0,8(s0) - 2ee: 611c ld a5,0(a0) - 2f0: 6b9c ld a5,16(a5) - 2f2: 9782 jalr a5 - wait(0); - 2f4: 4501 li a0,0 - 2f6: 5e3000ef jal 10d8 - right->run(); - 2fa: 6808 ld a0,16(s0) - } - 2fc: 6402 ld s0,0(sp) - 2fe: 60a2 ld ra,8(sp) - right->run(); - 300: 611c ld a5,0(a0) - 302: 6b9c ld a5,16(a5) - } - 304: 0141 addi sp,sp,16 - right->run(); - 306: 8782 jr a5 - printf("shell panic: %s\n", s); - 308: 00006597 auipc a1,0x6 - 30c: d3858593 addi a1,a1,-712 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x50> - 310: 00006517 auipc a0,0x6 - 314: d3850513 addi a0,a0,-712 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 318: 5e2040ef jal 48fa - exit(1); - 31c: 4505 li a0,1 - 31e: 0f0050ef jal 540e - return pid; - 322: bfc9 j 2f4 <_ZN11ListCommand3runEv+0x1c> - -0000000000000324 <_ZN11PipeCommand3runEv>: - void run() override - 324: 1101 addi sp,sp,-32 - 326: e822 sd s0,16(sp) - 328: 842a mv s0,a0 - if (pipe(p) < 0) - 32a: 0028 addi a0,sp,8 - void run() override - 32c: ec06 sd ra,24(sp) - if (pipe(p) < 0) - 32e: 5b3000ef jal 10e0 - 332: 0a054463 bltz a0,3da <_ZN11PipeCommand3runEv+0xb6> - int pid = fork(); - 336: 59b000ef jal 10d0 - if (pid == -1) - 33a: 57fd li a5,-1 - 33c: 0cf50163 beq a0,a5,3fe <_ZN11PipeCommand3runEv+0xda> - if (fork_or_panic() == 0) - 340: c931 beqz a0,394 <_ZN11PipeCommand3runEv+0x70> - int pid = fork(); - 342: 58f000ef jal 10d0 - if (pid == -1) - 346: 577d li a4,-1 - 348: 06e50b63 beq a0,a4,3be <_ZN11PipeCommand3runEv+0x9a> - if (fork_or_panic() == 0) - 34c: c505 beqz a0,374 <_ZN11PipeCommand3runEv+0x50> - close(p[0]); - 34e: 4522 lw a0,8(sp) - 350: 5a9000ef jal 10f8 - close(p[1]); - 354: 4532 lw a0,12(sp) - 356: 5a3000ef jal 10f8 - wait(0); - 35a: 4501 li a0,0 - 35c: 57d000ef jal 10d8 - wait(0); - 360: 4501 li a0,0 - 362: 577000ef jal 10d8 - exit(0); - 366: 4501 li a0,0 - 368: 0a6050ef jal 540e - } - 36c: 60e2 ld ra,24(sp) - 36e: 6442 ld s0,16(sp) - 370: 6105 addi sp,sp,32 - 372: 8082 ret - close(0); // close stdin - 374: 585000ef jal 10f8 - dup(p[0]); // dup read-end to stdin - 378: 4522 lw a0,8(sp) - 37a: 5cf000ef jal 1148 - close(p[0]); - 37e: 4522 lw a0,8(sp) - 380: 579000ef jal 10f8 - close(p[1]); - 384: 4532 lw a0,12(sp) - 386: 573000ef jal 10f8 - right->run(); - 38a: 6808 ld a0,16(s0) - 38c: 611c ld a5,0(a0) - 38e: 6b9c ld a5,16(a5) - 390: 9782 jalr a5 - 392: bf75 j 34e <_ZN11PipeCommand3runEv+0x2a> - close(1); // close stdout - 394: 4505 li a0,1 - 396: 563000ef jal 10f8 - dup(p[1]); // dup write-end to stdout - 39a: 4532 lw a0,12(sp) - 39c: 5ad000ef jal 1148 - close(p[0]); - 3a0: 4522 lw a0,8(sp) - 3a2: 557000ef jal 10f8 - close(p[1]); - 3a6: 4532 lw a0,12(sp) - 3a8: 551000ef jal 10f8 - left->run(); - 3ac: 6408 ld a0,8(s0) - 3ae: 611c ld a5,0(a0) - 3b0: 6b9c ld a5,16(a5) - 3b2: 9782 jalr a5 - int pid = fork(); - 3b4: 51d000ef jal 10d0 - if (pid == -1) - 3b8: 577d li a4,-1 - 3ba: f8e519e3 bne a0,a4,34c <_ZN11PipeCommand3runEv+0x28> - printf("shell panic: %s\n", s); - 3be: 00006597 auipc a1,0x6 - 3c2: c8258593 addi a1,a1,-894 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x50> - 3c6: 00006517 auipc a0,0x6 - 3ca: c8250513 addi a0,a0,-894 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 3ce: 52c040ef jal 48fa - exit(1); - 3d2: 4505 li a0,1 - 3d4: 03a050ef jal 540e - return pid; - 3d8: bf9d j 34e <_ZN11PipeCommand3runEv+0x2a> - printf("shell panic: %s\n", s); - 3da: 00006597 auipc a1,0x6 - 3de: c8658593 addi a1,a1,-890 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x70> - 3e2: 00006517 auipc a0,0x6 - 3e6: c6650513 addi a0,a0,-922 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 3ea: 510040ef jal 48fa - exit(1); - 3ee: 4505 li a0,1 - 3f0: 01e050ef jal 540e - int pid = fork(); - 3f4: 4dd000ef jal 10d0 - if (pid == -1) - 3f8: 57fd li a5,-1 - 3fa: f4f513e3 bne a0,a5,340 <_ZN11PipeCommand3runEv+0x1c> - printf("shell panic: %s\n", s); - 3fe: 00006597 auipc a1,0x6 - 402: c4258593 addi a1,a1,-958 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x50> - 406: 00006517 auipc a0,0x6 - 40a: c4250513 addi a0,a0,-958 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 40e: 4ec040ef jal 48fa - exit(1); - 412: 4505 li a0,1 - 414: 7fb040ef jal 540e - return pid; - 418: b72d j 342 <_ZN11PipeCommand3runEv+0x1e> - -000000000000041a <_ZN6Parser12parse_redirsEP7CommandPPcS2_>: - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 41a: 4785 li a5,1 - 41c: 1782 slli a5,a5,0x20 - static Command *parse_redirs(Command *cmd, char **ps, char *es) - 41e: 7119 addi sp,sp,-128 - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 420: 60178793 addi a5,a5,1537 - static Command *parse_redirs(Command *cmd, char **ps, char *es) - 424: f8a2 sd s0,112(sp) - 426: f4a6 sd s1,104(sp) - 428: e4d6 sd s5,72(sp) - 42a: e0da sd s6,64(sp) - 42c: f862 sd s8,48(sp) - 42e: f466 sd s9,40(sp) - 430: fc86 sd ra,120(sp) - 432: f0ca sd s2,96(sp) - 434: ecce sd s3,88(sp) - 436: e8d2 sd s4,80(sp) - 438: fc5e sd s7,56(sp) - 43a: f06a sd s10,32(sp) - 43c: ec6e sd s11,24(sp) - 43e: 8aae mv s5,a1 - 440: 8432 mv s0,a2 - while (peek(ps, es, "<>")) - 442: 8c2a mv s8,a0 - 444: 00008497 auipc s1,0x8 - 448: ac448493 addi s1,s1,-1340 # 7f08 - switch (*s) - 44c: 03c00b13 li s6,60 - if (get_token(ps, es, &q, &eq) != 'a') - 450: 06100c93 li s9,97 - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 454: e43e sd a5,8(sp) - char *s = *ps; - 456: 000ab903 ld s2,0(s5) - while (s < es && strchr(WHITESPACE, *s)) - 45a: 00896663 bltu s2,s0,466 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x4c> - 45e: a811 j 472 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x58> - s++; - 460: 0905 addi s2,s2,1 - while (s < es && strchr(WHITESPACE, *s)) - 462: 01240863 beq s0,s2,472 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x58> - 466: 00094583 lbu a1,0(s2) - 46a: 6088 ld a0,0(s1) - 46c: 05b050ef jal 5cc6 - 470: f965 bnez a0,460 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x46> - *ps = s; - 472: 012ab023 sd s2,0(s5) - return *s && strchr(toks, *s); - 476: 00094583 lbu a1,0(s2) - 47a: e18d bnez a1,49c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x82> - } - 47c: 70e6 ld ra,120(sp) - 47e: 7446 ld s0,112(sp) - 480: 74a6 ld s1,104(sp) - 482: 7906 ld s2,96(sp) - 484: 69e6 ld s3,88(sp) - 486: 6a46 ld s4,80(sp) - 488: 6aa6 ld s5,72(sp) - 48a: 6b06 ld s6,64(sp) - 48c: 7be2 ld s7,56(sp) - 48e: 7ca2 ld s9,40(sp) - 490: 7d02 ld s10,32(sp) - 492: 6de2 ld s11,24(sp) - 494: 8562 mv a0,s8 - 496: 7c42 ld s8,48(sp) - 498: 6109 addi sp,sp,128 - 49a: 8082 ret - return *s && strchr(toks, *s); - 49c: 00006517 auipc a0,0x6 - 4a0: bec50513 addi a0,a0,-1044 # 6088 <_GLOBAL__sub_I__ZSt3cin+0x98> - 4a4: 023050ef jal 5cc6 - 4a8: d971 beqz a0,47c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x62> - s = *ps; - 4aa: 000abd83 ld s11,0(s5) - while (s < es && strchr(WHITESPACE, *s)) - 4ae: 008de663 bltu s11,s0,4ba <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xa0> - 4b2: a811 j 4c6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xac> - s++; - 4b4: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 4b6: 01b40863 beq s0,s11,4c6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xac> - 4ba: 000dc583 lbu a1,0(s11) - 4be: 6088 ld a0,0(s1) - 4c0: 007050ef jal 5cc6 - 4c4: f965 bnez a0,4b4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x9a> - ret = *s; - 4c6: 000dc983 lbu s3,0(s11) - switch (*s) - 4ca: 193b6e63 bltu s6,s3,666 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x24c> - 4ce: 03a00713 li a4,58 - 4d2: 01376f63 bltu a4,s3,4f0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> - 4d6: 00098e63 beqz s3,4f2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> - 4da: 02600713 li a4,38 - 4de: 00e98963 beq s3,a4,4f0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> - 4e2: fd89871b addiw a4,s3,-40 - 4e6: 0ff77713 zext.b a4,a4 - 4ea: 4685 li a3,1 - 4ec: 0ce6ef63 bltu a3,a4,5ca <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1b0> - s++; - 4f0: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 4f2: 108df363 bgeu s11,s0,5f8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1de> - 4f6: 8926 mv s2,s1 - 4f8: a021 j 500 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xe6> - s++; - 4fa: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 4fc: 25b40963 beq s0,s11,74e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> - 500: 000dc583 lbu a1,0(s11) - 504: 6088 ld a0,0(s1) - 506: 7c0050ef jal 5cc6 - 50a: f965 bnez a0,4fa <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xe0> - *ps = s; - 50c: 01bab023 sd s11,0(s5) - while (s < es && strchr(WHITESPACE, *s)) - 510: 008de663 bltu s11,s0,51c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x102> - 514: a0e5 j 5fc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1e2> - s++; - 516: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 518: 01b40863 beq s0,s11,528 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x10e> - 51c: 000dc583 lbu a1,0(s11) - 520: 6088 ld a0,0(s1) - 522: 7a4050ef jal 5cc6 - 526: f965 bnez a0,516 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xfc> - ret = *s; - 528: 000dca03 lbu s4,0(s11) - switch (*s) - 52c: 154b6963 bltu s6,s4,67e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x264> - 530: 03a00713 li a4,58 - 534: 01476f63 bltu a4,s4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - 538: 0c0a0c63 beqz s4,610 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1f6> - 53c: 02600713 li a4,38 - 540: 00ea0963 beq s4,a4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - 544: fd8a071b addiw a4,s4,-40 - 548: 0ff77713 zext.b a4,a4 - 54c: 4685 li a3,1 - 54e: 18e6e163 bltu a3,a4,6d0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2b6> - ret = *s; - 552: 8bee mv s7,s11 - s++; - 554: 0d85 addi s11,s11,1 - ret = *s; - 556: 2a01 sext.w s4,s4 - while (s < es && strchr(WHITESPACE, *s)) - 558: 8926 mv s2,s1 - 55a: 0c8df063 bgeu s11,s0,61a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> - ret = *s; - 55e: 8d6e mv s10,s11 - 560: a021 j 568 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x14e> - s++; - 562: 0d05 addi s10,s10,1 - while (s < es && strchr(WHITESPACE, *s)) - 564: 008d7963 bgeu s10,s0,576 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x15c> - 568: 000d4583 lbu a1,0(s10) - 56c: 00093503 ld a0,0(s2) - 570: 756050ef jal 5cc6 - 574: f57d bnez a0,562 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x148> - *ps = s; - 576: 01aab023 sd s10,0(s5) - if (get_token(ps, es, &q, &eq) != 'a') - 57a: 0b9a1263 bne s4,s9,61e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x204> - *eq = 0; // Null terminate filename immediately - 57e: 000d8023 sb zero,0(s11) - switch (tok) - 582: 0b698f63 beq s3,s6,640 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x226> - 586: 03e00713 li a4,62 - 58a: 10e98c63 beq s3,a4,6a2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x288> - 58e: 02b00713 li a4,43 - 592: ece992e3 bne s3,a4,456 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> - cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? - 596: 02800513 li a0,40 - 59a: 23f050ef jal 5fd8 <_Znwm> - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 59e: 4705 li a4,1 - 5a0: 1702 slli a4,a4,0x20 - 5a2: 20170713 addi a4,a4,513 - 5a6: 00008797 auipc a5,0x8 - 5aa: 8d278793 addi a5,a5,-1838 # 7e78 <_ZTV12RedirCommand+0x10> - 5ae: 01853423 sd s8,8(a0) - 5b2: e11c sd a5,0(a0) - 5b4: 01753823 sd s7,16(a0) - 5b8: 01b53c23 sd s11,24(a0) - 5bc: f118 sd a4,32(a0) - cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? - 5be: 8c2a mv s8,a0 - break; - 5c0: bd59 j 456 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> - switch (*s) - 5c2: 07c00713 li a4,124 - 5c6: f2e985e3 beq s3,a4,4f0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - 5ca: 008dec63 bltu s11,s0,5e2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1c8> - 5ce: a01d j 5f4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> - 5d0: 000dc583 lbu a1,0(s11) - 5d4: 6488 ld a0,8(s1) - 5d6: 6f0050ef jal 5cc6 - 5da: e911 bnez a0,5ee <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1d4> - s++; - 5dc: 0d85 addi s11,s11,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - 5de: 01b40b63 beq s0,s11,5f4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> - 5e2: 000dc583 lbu a1,0(s11) - 5e6: 6088 ld a0,0(s1) - 5e8: 6de050ef jal 5cc6 - 5ec: d175 beqz a0,5d0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1b6> - 5ee: 06100993 li s3,97 - 5f2: b701 j 4f2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> - 5f4: 06100993 li s3,97 - *ps = s; - 5f8: 01bab023 sd s11,0(s5) - ret = *s; - 5fc: 000dca03 lbu s4,0(s11) - switch (*s) - 600: 114b6963 bltu s6,s4,712 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2f8> - 604: 03a00713 li a4,58 - 608: f54765e3 bltu a4,s4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - 60c: 120a1063 bnez s4,72c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x312> - while (s < es && strchr(WHITESPACE, *s)) - 610: 8bee mv s7,s11 - ret = *s; - 612: 4a01 li s4,0 - 614: 8926 mv s2,s1 - while (s < es && strchr(WHITESPACE, *s)) - 616: f48de4e3 bltu s11,s0,55e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> - *ps = s; - 61a: 01bab023 sd s11,0(s5) - printf("shell panic: %s\n", s); - 61e: 00006597 auipc a1,0x6 - 622: a4a58593 addi a1,a1,-1462 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x78> - 626: 00006517 auipc a0,0x6 - 62a: a2250513 addi a0,a0,-1502 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 62e: 2cc040ef jal 48fa - exit(1); - 632: 4505 li a0,1 - 634: 5db040ef jal 540e - *eq = 0; // Null terminate filename immediately - 638: 000d8023 sb zero,0(s11) - switch (tok) - 63c: f56995e3 bne s3,s6,586 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x16c> - cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); - 640: 02800513 li a0,40 - 644: 195050ef jal 5fd8 <_Znwm> - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 648: 00008797 auipc a5,0x8 - 64c: 83078793 addi a5,a5,-2000 # 7e78 <_ZTV12RedirCommand+0x10> - 650: 01853423 sd s8,8(a0) - 654: e11c sd a5,0(a0) - 656: 01753823 sd s7,16(a0) - 65a: 01b53c23 sd s11,24(a0) - 65e: 02053023 sd zero,32(a0) - cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); - 662: 8c2a mv s8,a0 - break; - 664: bbcd j 456 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> - switch (*s) - 666: 03e00713 li a4,62 - 66a: f4e99ce3 bne s3,a4,5c2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1a8> - if (*s == '>') - 66e: 001dc703 lbu a4,1(s11) - 672: e7371fe3 bne a4,s3,4f0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> - s++; - 676: 0d89 addi s11,s11,2 - 678: 02b00993 li s3,43 - 67c: bd9d j 4f2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> - switch (*s) - 67e: 03e00713 li a4,62 - 682: 8bee mv s7,s11 - 684: 04ea1263 bne s4,a4,6c8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2ae> - if (*s == '>') - 688: 001dc683 lbu a3,1(s11) - 68c: 03e00713 li a4,62 - 690: 06e68a63 beq a3,a4,704 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2ea> - s++; - 694: 0d85 addi s11,s11,1 - ret = *s; - 696: 03e00a13 li s4,62 - 69a: 8926 mv s2,s1 - while (s < es && strchr(WHITESPACE, *s)) - 69c: ec8de1e3 bltu s11,s0,55e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> - 6a0: bfad j 61a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> - cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); - 6a2: 02800513 li a0,40 - 6a6: 133050ef jal 5fd8 <_Znwm> - : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} - 6aa: 00007797 auipc a5,0x7 - 6ae: 7ce78793 addi a5,a5,1998 # 7e78 <_ZTV12RedirCommand+0x10> - 6b2: e11c sd a5,0(a0) - 6b4: 67a2 ld a5,8(sp) - 6b6: 01853423 sd s8,8(a0) - 6ba: 01753823 sd s7,16(a0) - 6be: 01b53c23 sd s11,24(a0) - 6c2: f11c sd a5,32(a0) - cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); - 6c4: 8c2a mv s8,a0 - break; - 6c6: bb41 j 456 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> - switch (*s) - 6c8: 07c00713 li a4,124 - 6cc: e8ea03e3 beq s4,a4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - 6d0: 048dfa63 bgeu s11,s0,724 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x30a> - 6d4: 8d6e mv s10,s11 - 6d6: a811 j 6ea <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2d0> - 6d8: 000d4583 lbu a1,0(s10) - 6dc: 6488 ld a0,8(s1) - 6de: 5e8050ef jal 5cc6 - 6e2: e911 bnez a0,6f6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2dc> - s++; - 6e4: 0d05 addi s10,s10,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - 6e6: 05a40f63 beq s0,s10,744 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> - 6ea: 000d4583 lbu a1,0(s10) - 6ee: 6088 ld a0,0(s1) - 6f0: 5d6050ef jal 5cc6 - 6f4: d175 beqz a0,6d8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2be> - while (s < es && strchr(WHITESPACE, *s)) - 6f6: 048d7763 bgeu s10,s0,744 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> - 6fa: 8bee mv s7,s11 - 6fc: 06100a13 li s4,97 - 700: 8dea mv s11,s10 - 702: bdb1 j 55e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> - s++; - 704: 0d89 addi s11,s11,2 - ret = '+'; - 706: 02b00a13 li s4,43 - 70a: 8926 mv s2,s1 - while (s < es && strchr(WHITESPACE, *s)) - 70c: e48de9e3 bltu s11,s0,55e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> - 710: b729 j 61a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> - switch (*s) - 712: 03e00713 li a4,62 - 716: 8bee mv s7,s11 - 718: f6ea08e3 beq s4,a4,688 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x26e> - 71c: 07c00713 li a4,124 - 720: e2ea09e3 beq s4,a4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - *ps = s; - 724: 01bab023 sd s11,0(s5) - 728: 8bee mv s7,s11 - 72a: bd91 j 57e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x164> - switch (*s) - 72c: 02600713 li a4,38 - 730: e2ea01e3 beq s4,a4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - 734: fd8a071b addiw a4,s4,-40 - 738: 0ff77713 zext.b a4,a4 - 73c: 4685 li a3,1 - 73e: e0e6fae3 bgeu a3,a4,552 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> - 742: b7cd j 724 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x30a> - *ps = s; - 744: 8bee mv s7,s11 - 746: 01aab023 sd s10,0(s5) - 74a: 8dea mv s11,s10 - 74c: bd0d j 57e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x164> - 74e: 008ab023 sd s0,0(s5) - while (s < es && strchr(WHITESPACE, *s)) - 752: b56d j 5fc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1e2> - -0000000000000754 <_ZN6Parser10parse_pipeEPPcS0_>: - static Command *parse_pipe(char **ps, char *es) - 754: 7119 addi sp,sp,-128 - 756: e8d2 sd s4,80(sp) - 758: 8a2a mv s4,a0 - ExecCommand *cmd = new ExecCommand(); - 75a: 05800513 li a0,88 - static Command *parse_pipe(char **ps, char *es) - 75e: fc86 sd ra,120(sp) - 760: f8a2 sd s0,112(sp) - 762: f4a6 sd s1,104(sp) - 764: 842e mv s0,a1 - 766: e4d6 sd s5,72(sp) - 768: e0da sd s6,64(sp) - 76a: fc5e sd s7,56(sp) - 76c: f466 sd s9,40(sp) - 76e: f06a sd s10,32(sp) - 770: f0ca sd s2,96(sp) - 772: ecce sd s3,88(sp) - 774: f862 sd s8,48(sp) - 776: ec6e sd s11,24(sp) - ExecCommand *cmd = new ExecCommand(); - 778: 061050ef jal 5fd8 <_Znwm> - 77c: 84aa mv s1,a0 - { - 77e: 00007797 auipc a5,0x7 - 782: 6d278793 addi a5,a5,1746 # 7e50 <_ZTV11ExecCommand+0x10> - memset(argv, 0, sizeof(argv)); - 786: 00850b93 addi s7,a0,8 - { - 78a: e09c sd a5,0(s1) - ExecCommand *cmd = new ExecCommand(); - 78c: e42a sd a0,8(sp) - memset(argv, 0, sizeof(argv)); - 78e: 05000613 li a2,80 - 792: 4581 li a1,0 - 794: 855e mv a0,s7 - 796: 342050ef jal 5ad8 - ret = parse_redirs(ret, ps, es); - 79a: 8526 mv a0,s1 - 79c: 8622 mv a2,s0 - 79e: 85d2 mv a1,s4 - 7a0: c7bff0ef jal 41a <_ZN6Parser12parse_redirsEP7CommandPPcS2_> - char *s = *ps; - 7a4: 000a3d03 ld s10,0(s4) - ret = parse_redirs(ret, ps, es); - 7a8: 8aaa mv s5,a0 - argc = 0; - 7aa: 4b01 li s6,0 - while (s < es && strchr(WHITESPACE, *s)) - 7ac: 00007497 auipc s1,0x7 - 7b0: 75c48493 addi s1,s1,1884 # 7f08 - if (*s == '>') - 7b4: 03e00c93 li s9,62 - while (s < es && strchr(WHITESPACE, *s)) - 7b8: 0c8d7f63 bgeu s10,s0,896 <_ZN6Parser10parse_pipeEPPcS0_+0x142> - 7bc: 89a6 mv s3,s1 - 7be: a021 j 7c6 <_ZN6Parser10parse_pipeEPPcS0_+0x72> - s++; - 7c0: 0d05 addi s10,s10,1 - while (s < es && strchr(WHITESPACE, *s)) - 7c2: 01a40863 beq s0,s10,7d2 <_ZN6Parser10parse_pipeEPPcS0_+0x7e> - 7c6: 000d4583 lbu a1,0(s10) - 7ca: 6088 ld a0,0(s1) - 7cc: 4fa050ef jal 5cc6 - 7d0: f965 bnez a0,7c0 <_ZN6Parser10parse_pipeEPPcS0_+0x6c> - *ps = s; - 7d2: 01aa3023 sd s10,0(s4) - return *s && strchr(toks, *s); - 7d6: 000d4583 lbu a1,0(s10) - 7da: 10059063 bnez a1,8da <_ZN6Parser10parse_pipeEPPcS0_+0x186> - while (s < es && strchr(WHITESPACE, *s)) - 7de: 008d6863 bltu s10,s0,7ee <_ZN6Parser10parse_pipeEPPcS0_+0x9a> - 7e2: a6ad j b4c <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> - s++; - 7e4: 0d05 addi s10,s10,1 - ret = *s; - 7e6: 000d4903 lbu s2,0(s10) - while (s < es && strchr(WHITESPACE, *s)) - 7ea: 0ba40f63 beq s0,s10,8a8 <_ZN6Parser10parse_pipeEPPcS0_+0x154> - 7ee: 000d4583 lbu a1,0(s10) - 7f2: 6088 ld a0,0(s1) - 7f4: 4d2050ef jal 5cc6 - 7f8: f575 bnez a0,7e4 <_ZN6Parser10parse_pipeEPPcS0_+0x90> - ret = *s; - 7fa: 000d4903 lbu s2,0(s10) - switch (*s) - 7fe: 08090f63 beqz s2,89c <_ZN6Parser10parse_pipeEPPcS0_+0x148> - 802: 1b990663 beq s2,s9,9ae <_ZN6Parser10parse_pipeEPPcS0_+0x25a> - 806: 2d2ceb63 bltu s9,s2,adc <_ZN6Parser10parse_pipeEPPcS0_+0x388> - 80a: 02900713 li a4,41 - 80e: 29276663 bltu a4,s2,a9a <_ZN6Parser10parse_pipeEPPcS0_+0x346> - 812: 02700713 li a4,39 - 816: 01276663 bltu a4,s2,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - 81a: 02600713 li a4,38 - 81e: 28e91563 bne s2,a4,aa8 <_ZN6Parser10parse_pipeEPPcS0_+0x354> - ret = *s; - 822: 8c6a mv s8,s10 - s++; - 824: 0d05 addi s10,s10,1 - ret = *s; - 826: 2901 sext.w s2,s2 - 828: 89a6 mv s3,s1 - while (s < es && strchr(WHITESPACE, *s)) - 82a: 168d7f63 bgeu s10,s0,9a8 <_ZN6Parser10parse_pipeEPPcS0_+0x254> - ret = *s; - 82e: 8dea mv s11,s10 - 830: a021 j 838 <_ZN6Parser10parse_pipeEPPcS0_+0xe4> - s++; - 832: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 834: 008df963 bgeu s11,s0,846 <_ZN6Parser10parse_pipeEPPcS0_+0xf2> - 838: 000dc583 lbu a1,0(s11) - 83c: 0009b503 ld a0,0(s3) - 840: 486050ef jal 5cc6 - 844: f57d bnez a0,832 <_ZN6Parser10parse_pipeEPPcS0_+0xde> - *ps = s; - 846: 01ba3023 sd s11,0(s4) - if ((tok = get_token(ps, es, &q, &eq)) == 0) - 84a: 0a090163 beqz s2,8ec <_ZN6Parser10parse_pipeEPPcS0_+0x198> - if (tok != 'a') - 84e: 06100793 li a5,97 - 852: 00f90f63 beq s2,a5,870 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> - printf("shell panic: %s\n", s); - 856: 00006597 auipc a1,0x6 - 85a: 83a58593 addi a1,a1,-1990 # 6090 <_GLOBAL__sub_I__ZSt3cin+0xa0> - 85e: 00005517 auipc a0,0x5 - 862: 7ea50513 addi a0,a0,2026 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 866: 094040ef jal 48fa - exit(1); - 86a: 4505 li a0,1 - 86c: 3a3040ef jal 540e - cmd->argv[argc] = q; - 870: 018bb023 sd s8,0(s7) - *eq = 0; // Temp - 874: 000d0023 sb zero,0(s10) - argc++; - 878: 2b05 addiw s6,s6,1 - if (argc >= MAX_ARGS) - 87a: 47a5 li a5,9 - 87c: 0d67c463 blt a5,s6,944 <_ZN6Parser10parse_pipeEPPcS0_+0x1f0> - ret = parse_redirs(ret, ps, es); - 880: 8556 mv a0,s5 - 882: 8622 mv a2,s0 - 884: 85d2 mv a1,s4 - 886: b95ff0ef jal 41a <_ZN6Parser12parse_redirsEP7CommandPPcS2_> - char *s = *ps; - 88a: 000a3d03 ld s10,0(s4) - ret = parse_redirs(ret, ps, es); - 88e: 8aaa mv s5,a0 - 890: 0ba1 addi s7,s7,8 - while (s < es && strchr(WHITESPACE, *s)) - 892: f28d65e3 bltu s10,s0,7bc <_ZN6Parser10parse_pipeEPPcS0_+0x68> - return *s && strchr(toks, *s); - 896: 000d4583 lbu a1,0(s10) - 89a: e1a1 bnez a1,8da <_ZN6Parser10parse_pipeEPPcS0_+0x186> - while (s < es && strchr(WHITESPACE, *s)) - 89c: 2a8d7863 bgeu s10,s0,b4c <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> - 8a0: 8c6a mv s8,s10 - ret = *s; - 8a2: 4901 li s2,0 - 8a4: 89a6 mv s3,s1 - 8a6: b761 j 82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - switch (*s) - 8a8: 0f990463 beq s2,s9,990 <_ZN6Parser10parse_pipeEPPcS0_+0x23c> - 8ac: 0d2cea63 bltu s9,s2,980 <_ZN6Parser10parse_pipeEPPcS0_+0x22c> - 8b0: 02900793 li a5,41 - 8b4: 1127ef63 bltu a5,s2,9d2 <_ZN6Parser10parse_pipeEPPcS0_+0x27e> - 8b8: 02700713 li a4,39 - 8bc: f72763e3 bltu a4,s2,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - 8c0: 28090663 beqz s2,b4c <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> - 8c4: 02600713 li a4,38 - 8c8: 0ce91063 bne s2,a4,988 <_ZN6Parser10parse_pipeEPPcS0_+0x234> - ret = *s; - 8cc: 8c6a mv s8,s10 - s++; - 8ce: 0d05 addi s10,s10,1 - ret = *s; - 8d0: 2901 sext.w s2,s2 - 8d2: 89a6 mv s3,s1 - while (s < es && strchr(WHITESPACE, *s)) - 8d4: f48d6de3 bltu s10,s0,82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - 8d8: a8c1 j 9a8 <_ZN6Parser10parse_pipeEPPcS0_+0x254> - return *s && strchr(toks, *s); - 8da: 00005517 auipc a0,0x5 - 8de: 7ce50513 addi a0,a0,1998 # 60a8 <_GLOBAL__sub_I__ZSt3cin+0xb8> - 8e2: 3e4050ef jal 5cc6 - 8e6: cd2d beqz a0,960 <_ZN6Parser10parse_pipeEPPcS0_+0x20c> - char *s = *ps; - 8e8: 000a3d83 ld s11,0(s4) - cmd->argv[argc] = 0; - 8ec: 67a2 ld a5,8(sp) - 8ee: 0b0e slli s6,s6,0x3 - 8f0: 97da add a5,a5,s6 - 8f2: 0007b423 sd zero,8(a5) - while (s < es && strchr(WHITESPACE, *s)) - 8f6: 028df163 bgeu s11,s0,918 <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> - 8fa: 00007997 auipc s3,0x7 - 8fe: 60e98993 addi s3,s3,1550 # 7f08 - 902: a021 j 90a <_ZN6Parser10parse_pipeEPPcS0_+0x1b6> - s++; - 904: 0d85 addi s11,s11,1 - while (s < es && strchr(WHITESPACE, *s)) - 906: 01b40963 beq s0,s11,918 <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> - 90a: 000dc583 lbu a1,0(s11) - 90e: 0009b503 ld a0,0(s3) - 912: 3b4050ef jal 5cc6 - 916: f57d bnez a0,904 <_ZN6Parser10parse_pipeEPPcS0_+0x1b0> - *ps = s; - 918: 01ba3023 sd s11,0(s4) - return *s && strchr(toks, *s); - 91c: 000dc583 lbu a1,0(s11) - 920: e5f9 bnez a1,9ee <_ZN6Parser10parse_pipeEPPcS0_+0x29a> - Command *cmd = parse_exec(ps, es); - 922: 8456 mv s0,s5 - } - 924: 70e6 ld ra,120(sp) - 926: 8522 mv a0,s0 - 928: 7446 ld s0,112(sp) - 92a: 74a6 ld s1,104(sp) - 92c: 7906 ld s2,96(sp) - 92e: 69e6 ld s3,88(sp) - 930: 6a46 ld s4,80(sp) - 932: 6aa6 ld s5,72(sp) - 934: 6b06 ld s6,64(sp) - 936: 7be2 ld s7,56(sp) - 938: 7c42 ld s8,48(sp) - 93a: 7ca2 ld s9,40(sp) - 93c: 7d02 ld s10,32(sp) - 93e: 6de2 ld s11,24(sp) - 940: 6109 addi sp,sp,128 - 942: 8082 ret - printf("shell panic: %s\n", s); - 944: 00005597 auipc a1,0x5 - 948: 75458593 addi a1,a1,1876 # 6098 <_GLOBAL__sub_I__ZSt3cin+0xa8> - 94c: 00005517 auipc a0,0x5 - 950: 6fc50513 addi a0,a0,1788 # 6048 <_GLOBAL__sub_I__ZSt3cin+0x58> - 954: 7a7030ef jal 48fa - exit(1); - 958: 4505 li a0,1 - 95a: 2b5040ef jal 540e -} - 95e: b70d j 880 <_ZN6Parser10parse_pipeEPPcS0_+0x12c> - char *s = *ps; - 960: 000a3d03 ld s10,0(s4) - 964: 89a6 mv s3,s1 - ret = *s; - 966: 000d4903 lbu s2,0(s10) - while (s < es && strchr(WHITESPACE, *s)) - 96a: e88d62e3 bltu s10,s0,7ee <_ZN6Parser10parse_pipeEPPcS0_+0x9a> - switch (*s) - 96e: 03c00713 li a4,60 - 972: 1f277163 bgeu a4,s2,b54 <_ZN6Parser10parse_pipeEPPcS0_+0x400> - 976: 03e00713 li a4,62 - 97a: 8c6a mv s8,s10 - 97c: 00e90b63 beq s2,a4,992 <_ZN6Parser10parse_pipeEPPcS0_+0x23e> - 980: 07c00713 li a4,124 - 984: e8e90fe3 beq s2,a4,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - *ps = s; - 988: 01aa3023 sd s10,0(s4) - 98c: 8c6a mv s8,s10 - 98e: b5cd j 870 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> - switch (*s) - 990: 8c22 mv s8,s0 - if (*s == '>') - 992: 001c4783 lbu a5,1(s8) - 996: 03978163 beq a5,s9,9b8 <_ZN6Parser10parse_pipeEPPcS0_+0x264> - s++; - 99a: 001c0d13 addi s10,s8,1 - ret = *s; - 99e: 03e00913 li s2,62 - 9a2: 89a6 mv s3,s1 - while (s < es && strchr(WHITESPACE, *s)) - 9a4: e88d65e3 bltu s10,s0,82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - *ps = s; - 9a8: 01aa3023 sd s10,0(s4) - if (tok != 'a') - 9ac: b56d j 856 <_ZN6Parser10parse_pipeEPPcS0_+0x102> - switch (*s) - 9ae: 8c6a mv s8,s10 - if (*s == '>') - 9b0: 001c4783 lbu a5,1(s8) - 9b4: ff9793e3 bne a5,s9,99a <_ZN6Parser10parse_pipeEPPcS0_+0x246> - s++; - 9b8: 002c0d13 addi s10,s8,2 - ret = '+'; - 9bc: 02b00913 li s2,43 - 9c0: 00007997 auipc s3,0x7 - 9c4: 54898993 addi s3,s3,1352 # 7f08 - while (s < es && strchr(WHITESPACE, *s)) - 9c8: e68d63e3 bltu s10,s0,82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - *ps = s; - 9cc: 01aa3023 sd s10,0(s4) - if (tok != 'a') - 9d0: b559 j 856 <_ZN6Parser10parse_pipeEPPcS0_+0x102> - switch (*s) - 9d2: fc59071b addiw a4,s2,-59 - 9d6: 0ff77713 zext.b a4,a4 - 9da: 4685 li a3,1 - 9dc: fae6e6e3 bltu a3,a4,988 <_ZN6Parser10parse_pipeEPPcS0_+0x234> - ret = *s; - 9e0: 8c6a mv s8,s10 - s++; - 9e2: 0d05 addi s10,s10,1 - ret = *s; - 9e4: 2901 sext.w s2,s2 - 9e6: 89a6 mv s3,s1 - while (s < es && strchr(WHITESPACE, *s)) - 9e8: e48d63e3 bltu s10,s0,82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - 9ec: bf75 j 9a8 <_ZN6Parser10parse_pipeEPPcS0_+0x254> - return *s && strchr(toks, *s); - 9ee: 00005517 auipc a0,0x5 - 9f2: 6c250513 addi a0,a0,1730 # 60b0 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 9f6: 2d0050ef jal 5cc6 - 9fa: d505 beqz a0,922 <_ZN6Parser10parse_pipeEPPcS0_+0x1ce> - s = *ps; - 9fc: 000a3483 ld s1,0(s4) - while (s < es && strchr(WHITESPACE, *s)) - a00: 0284f163 bgeu s1,s0,a22 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> - a04: 00007997 auipc s3,0x7 - a08: 50498993 addi s3,s3,1284 # 7f08 - a0c: a021 j a14 <_ZN6Parser10parse_pipeEPPcS0_+0x2c0> - s++; - a0e: 0485 addi s1,s1,1 - while (s < es && strchr(WHITESPACE, *s)) - a10: 00940963 beq s0,s1,a22 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> - a14: 0004c583 lbu a1,0(s1) - a18: 0009b503 ld a0,0(s3) - a1c: 2aa050ef jal 5cc6 - a20: f57d bnez a0,a0e <_ZN6Parser10parse_pipeEPPcS0_+0x2ba> - ret = *s; - a22: 0004c783 lbu a5,0(s1) - switch (*s) - a26: 03c00713 li a4,60 - a2a: 0cf76963 bltu a4,a5,afc <_ZN6Parser10parse_pipeEPPcS0_+0x3a8> - a2e: 03a00713 li a4,58 - a32: 00f76e63 bltu a4,a5,a4e <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> - a36: cf89 beqz a5,a50 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> - a38: 02600713 li a4,38 - a3c: 00e78963 beq a5,a4,a4e <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> - a40: fd87879b addiw a5,a5,-40 - a44: 0ff7f793 zext.b a5,a5 - a48: 4705 li a4,1 - a4a: 0cf76763 bltu a4,a5,b18 <_ZN6Parser10parse_pipeEPPcS0_+0x3c4> - s++; - a4e: 0485 addi s1,s1,1 - while (s < es && strchr(WHITESPACE, *s)) - a50: 00007997 auipc s3,0x7 - a54: 4b898993 addi s3,s3,1208 # 7f08 - a58: 0084e663 bltu s1,s0,a64 <_ZN6Parser10parse_pipeEPPcS0_+0x310> - a5c: a819 j a72 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> - s++; - a5e: 0485 addi s1,s1,1 - while (s < es && strchr(WHITESPACE, *s)) - a60: 0e940463 beq s0,s1,b48 <_ZN6Parser10parse_pipeEPPcS0_+0x3f4> - a64: 0004c583 lbu a1,0(s1) - a68: 0009b503 ld a0,0(s3) - a6c: 25a050ef jal 5cc6 - a70: f57d bnez a0,a5e <_ZN6Parser10parse_pipeEPPcS0_+0x30a> - *ps = s; - a72: 009a3023 sd s1,0(s4) - cmd = new PipeCommand(cmd, parse_pipe(ps, es)); - a76: 4561 li a0,24 - a78: 560050ef jal 5fd8 <_Znwm> - a7c: 87aa mv a5,a0 - a7e: 85a2 mv a1,s0 - a80: 8552 mv a0,s4 - a82: 843e mv s0,a5 - a84: cd1ff0ef jal 754 <_ZN6Parser10parse_pipeEPPcS0_> - PipeCommand(Command *l, Command *r) : left(l), right(r) {} - a88: 00007797 auipc a5,0x7 - a8c: 41878793 addi a5,a5,1048 # 7ea0 <_ZTV11PipeCommand+0x10> - a90: e01c sd a5,0(s0) - a92: 01543423 sd s5,8(s0) - a96: e808 sd a0,16(s0) - a98: b571 j 924 <_ZN6Parser10parse_pipeEPPcS0_+0x1d0> - switch (*s) - a9a: fc59071b addiw a4,s2,-59 - a9e: 0ff77713 zext.b a4,a4 - aa2: 4685 li a3,1 - aa4: d6e6ffe3 bgeu a3,a4,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - aa8: ee8d70e3 bgeu s10,s0,988 <_ZN6Parser10parse_pipeEPPcS0_+0x234> - aac: 8dea mv s11,s10 - aae: a811 j ac2 <_ZN6Parser10parse_pipeEPPcS0_+0x36e> - ab0: 000dc583 lbu a1,0(s11) - ab4: 6488 ld a0,8(s1) - ab6: 210050ef jal 5cc6 - aba: e911 bnez a0,ace <_ZN6Parser10parse_pipeEPPcS0_+0x37a> - s++; - abc: 0d85 addi s11,s11,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - abe: 03b40a63 beq s0,s11,af2 <_ZN6Parser10parse_pipeEPPcS0_+0x39e> - ac2: 000dc583 lbu a1,0(s11) - ac6: 6088 ld a0,0(s1) - ac8: 1fe050ef jal 5cc6 - acc: d175 beqz a0,ab0 <_ZN6Parser10parse_pipeEPPcS0_+0x35c> - while (s < es && strchr(WHITESPACE, *s)) - ace: 8c6a mv s8,s10 - ad0: 0a8df463 bgeu s11,s0,b78 <_ZN6Parser10parse_pipeEPPcS0_+0x424> - ad4: 06100913 li s2,97 - ad8: 8d6e mv s10,s11 - ada: bb91 j 82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - switch (*s) - adc: 07c00713 li a4,124 - ae0: fce914e3 bne s2,a4,aa8 <_ZN6Parser10parse_pipeEPPcS0_+0x354> - ret = *s; - ae4: 8c6a mv s8,s10 - s++; - ae6: 0d05 addi s10,s10,1 - ret = *s; - ae8: 2901 sext.w s2,s2 - aea: 89a6 mv s3,s1 - while (s < es && strchr(WHITESPACE, *s)) - aec: d48d61e3 bltu s10,s0,82e <_ZN6Parser10parse_pipeEPPcS0_+0xda> - af0: bd65 j 9a8 <_ZN6Parser10parse_pipeEPPcS0_+0x254> - *ps = s; - af2: 8c6a mv s8,s10 - af4: 008a3023 sd s0,0(s4) - af8: 8d22 mv s10,s0 - afa: bb9d j 870 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> - switch (*s) - afc: 03e00713 li a4,62 - b00: 00e79863 bne a5,a4,b10 <_ZN6Parser10parse_pipeEPPcS0_+0x3bc> - if (*s == '>') - b04: 0014c703 lbu a4,1(s1) - b08: f4f713e3 bne a4,a5,a4e <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> - s++; - b0c: 0489 addi s1,s1,2 - b0e: b789 j a50 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> - switch (*s) - b10: 07c00713 li a4,124 - b14: f2e78de3 beq a5,a4,a4e <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - b18: f484fde3 bgeu s1,s0,a72 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> - b1c: 00007997 auipc s3,0x7 - b20: 3ec98993 addi s3,s3,1004 # 7f08 - b24: 0004c583 lbu a1,0(s1) - b28: 0009b503 ld a0,0(s3) - b2c: 19a050ef jal 5cc6 - b30: f105 bnez a0,a50 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> - b32: 0004c583 lbu a1,0(s1) - b36: 0089b503 ld a0,8(s3) - b3a: 18c050ef jal 5cc6 - b3e: f00519e3 bnez a0,a50 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> - s++; - b42: 0485 addi s1,s1,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - b44: fe9410e3 bne s0,s1,b24 <_ZN6Parser10parse_pipeEPPcS0_+0x3d0> - b48: 84a2 mv s1,s0 - b4a: b725 j a72 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> - *ps = s; - b4c: 01aa3023 sd s10,0(s4) - b50: 8dea mv s11,s10 - b52: bb69 j 8ec <_ZN6Parser10parse_pipeEPPcS0_+0x198> - switch (*s) - b54: 03a00713 li a4,58 - b58: cd2765e3 bltu a4,s2,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - b5c: fe0908e3 beqz s2,b4c <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> - b60: 02600713 li a4,38 - b64: cae90fe3 beq s2,a4,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - b68: fd89071b addiw a4,s2,-40 - b6c: 0ff77713 zext.b a4,a4 - b70: 4685 li a3,1 - b72: cae6f8e3 bgeu a3,a4,822 <_ZN6Parser10parse_pipeEPPcS0_+0xce> - b76: bd09 j 988 <_ZN6Parser10parse_pipeEPPcS0_+0x234> - *ps = s; - b78: 01ba3023 sd s11,0(s4) - b7c: 8d6e mv s10,s11 - b7e: 06100913 li s2,97 - b82: b1f1 j 84e <_ZN6Parser10parse_pipeEPPcS0_+0xfa> - -0000000000000b84 <_ZN6Parser10parse_lineEPPcS0_>: - static Command *parse_line(char **ps, char *es) - b84: 7159 addi sp,sp,-112 - b86: eca6 sd s1,88(sp) - b88: e8ca sd s2,80(sp) - b8a: e4ce sd s3,72(sp) - b8c: e0d2 sd s4,64(sp) - b8e: fc56 sd s5,56(sp) - b90: f85a sd s6,48(sp) - b92: f45e sd s7,40(sp) - b94: f062 sd s8,32(sp) - b96: ec66 sd s9,24(sp) - b98: e86a sd s10,16(sp) - b9a: e46e sd s11,8(sp) - b9c: f486 sd ra,104(sp) - b9e: f0a2 sd s0,96(sp) - ba0: 89aa mv s3,a0 - ba2: 84ae mv s1,a1 - Command *cmd = parse_pipe(ps, es); - ba4: bb1ff0ef jal 754 <_ZN6Parser10parse_pipeEPPcS0_> - ba8: 8a2a mv s4,a0 - while (peek(ps, es, "&")) - baa: 00007917 auipc s2,0x7 - bae: 35e90913 addi s2,s2,862 # 7f08 - return *s && strchr(toks, *s); - bb2: 00005c97 auipc s9,0x5 - bb6: 506c8c93 addi s9,s9,1286 # 60b8 <_GLOBAL__sub_I__ZSt3cin+0xc8> - switch (*s) - bba: 03c00b13 li s6,60 - bbe: 03e00b93 li s7,62 - bc2: 07c00d93 li s11,124 - bc6: 03a00c13 li s8,58 - bca: 02600d13 li s10,38 - BackCommand(Command *c) : sub_cmd(c) {} - bce: 00007a97 auipc s5,0x7 - bd2: 322a8a93 addi s5,s5,802 # 7ef0 <_ZTV11BackCommand+0x10> - char *s = *ps; - bd6: 0009b403 ld s0,0(s3) - while (s < es && strchr(WHITESPACE, *s)) - bda: 00946663 bltu s0,s1,be6 <_ZN6Parser10parse_lineEPPcS0_+0x62> - bde: a819 j bf4 <_ZN6Parser10parse_lineEPPcS0_+0x70> - s++; - be0: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - be2: 00848963 beq s1,s0,bf4 <_ZN6Parser10parse_lineEPPcS0_+0x70> - be6: 00044583 lbu a1,0(s0) - bea: 00093503 ld a0,0(s2) - bee: 0d8050ef jal 5cc6 - bf2: f57d bnez a0,be0 <_ZN6Parser10parse_lineEPPcS0_+0x5c> - *ps = s; - bf4: 0089b023 sd s0,0(s3) - return *s && strchr(toks, *s); - bf8: 00044583 lbu a1,0(s0) - bfc: e9a9 bnez a1,c4e <_ZN6Parser10parse_lineEPPcS0_+0xca> - while (s < es && strchr(WHITESPACE, *s)) - bfe: 02947163 bgeu s0,s1,c20 <_ZN6Parser10parse_lineEPPcS0_+0x9c> - c02: 00007917 auipc s2,0x7 - c06: 30690913 addi s2,s2,774 # 7f08 - c0a: a021 j c12 <_ZN6Parser10parse_lineEPPcS0_+0x8e> - s++; - c0c: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - c0e: 00848963 beq s1,s0,c20 <_ZN6Parser10parse_lineEPPcS0_+0x9c> - c12: 00044583 lbu a1,0(s0) - c16: 00093503 ld a0,0(s2) - c1a: 0ac050ef jal 5cc6 - c1e: f57d bnez a0,c0c <_ZN6Parser10parse_lineEPPcS0_+0x88> - *ps = s; - c20: 0089b023 sd s0,0(s3) - return *s && strchr(toks, *s); - c24: 00044583 lbu a1,0(s0) - c28: 0e059a63 bnez a1,d1c <_ZN6Parser10parse_lineEPPcS0_+0x198> - c2c: 8452 mv s0,s4 - } - c2e: 70a6 ld ra,104(sp) - c30: 8522 mv a0,s0 - c32: 7406 ld s0,96(sp) - c34: 64e6 ld s1,88(sp) - c36: 6946 ld s2,80(sp) - c38: 69a6 ld s3,72(sp) - c3a: 6a06 ld s4,64(sp) - c3c: 7ae2 ld s5,56(sp) - c3e: 7b42 ld s6,48(sp) - c40: 7ba2 ld s7,40(sp) - c42: 7c02 ld s8,32(sp) - c44: 6ce2 ld s9,24(sp) - c46: 6d42 ld s10,16(sp) - c48: 6da2 ld s11,8(sp) - c4a: 6165 addi sp,sp,112 - c4c: 8082 ret - return *s && strchr(toks, *s); - c4e: 8566 mv a0,s9 - c50: 076050ef jal 5cc6 - s = *ps; - c54: 0009b403 ld s0,0(s3) - return *s && strchr(toks, *s); - c58: d15d beqz a0,bfe <_ZN6Parser10parse_lineEPPcS0_+0x7a> - while (s < es && strchr(WHITESPACE, *s)) - c5a: 00946663 bltu s0,s1,c66 <_ZN6Parser10parse_lineEPPcS0_+0xe2> - c5e: a819 j c74 <_ZN6Parser10parse_lineEPPcS0_+0xf0> - s++; - c60: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - c62: 00848963 beq s1,s0,c74 <_ZN6Parser10parse_lineEPPcS0_+0xf0> - c66: 00044583 lbu a1,0(s0) - c6a: 00093503 ld a0,0(s2) - c6e: 058050ef jal 5cc6 - c72: f57d bnez a0,c60 <_ZN6Parser10parse_lineEPPcS0_+0xdc> - ret = *s; - c74: 00044783 lbu a5,0(s0) - switch (*s) - c78: 08fb6a63 bltu s6,a5,d0c <_ZN6Parser10parse_lineEPPcS0_+0x188> - c7c: 00fc6c63 bltu s8,a5,c94 <_ZN6Parser10parse_lineEPPcS0_+0x110> - c80: cb99 beqz a5,c96 <_ZN6Parser10parse_lineEPPcS0_+0x112> - c82: 01a78963 beq a5,s10,c94 <_ZN6Parser10parse_lineEPPcS0_+0x110> - c86: fd87879b addiw a5,a5,-40 - c8a: 0ff7f793 zext.b a5,a5 - c8e: 4705 li a4,1 - c90: 02f76d63 bltu a4,a5,cca <_ZN6Parser10parse_lineEPPcS0_+0x146> - s++; - c94: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - c96: 00946663 bltu s0,s1,ca2 <_ZN6Parser10parse_lineEPPcS0_+0x11e> - c9a: a819 j cb0 <_ZN6Parser10parse_lineEPPcS0_+0x12c> - s++; - c9c: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - c9e: 04848b63 beq s1,s0,cf4 <_ZN6Parser10parse_lineEPPcS0_+0x170> - ca2: 00044583 lbu a1,0(s0) - ca6: 00093503 ld a0,0(s2) - caa: 01c050ef jal 5cc6 - cae: f57d bnez a0,c9c <_ZN6Parser10parse_lineEPPcS0_+0x118> - *ps = s; - cb0: 0089b023 sd s0,0(s3) - cmd = new BackCommand(cmd); - cb4: 4541 li a0,16 - cb6: 322050ef jal 5fd8 <_Znwm> - BackCommand(Command *c) : sub_cmd(c) {} - cba: 01453423 sd s4,8(a0) - cbe: 01553023 sd s5,0(a0) - cmd = new BackCommand(cmd); - cc2: 8a2a mv s4,a0 - cc4: bf09 j bd6 <_ZN6Parser10parse_lineEPPcS0_+0x52> - switch (*s) - cc6: fdb787e3 beq a5,s11,c94 <_ZN6Parser10parse_lineEPPcS0_+0x110> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - cca: 00946d63 bltu s0,s1,ce4 <_ZN6Parser10parse_lineEPPcS0_+0x160> - cce: b7cd j cb0 <_ZN6Parser10parse_lineEPPcS0_+0x12c> - cd0: 00044583 lbu a1,0(s0) - cd4: 00893503 ld a0,8(s2) - cd8: 7ef040ef jal 5cc6 - cdc: fd4d bnez a0,c96 <_ZN6Parser10parse_lineEPPcS0_+0x112> - s++; - cde: 0405 addi s0,s0,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - ce0: 00848a63 beq s1,s0,cf4 <_ZN6Parser10parse_lineEPPcS0_+0x170> - ce4: 00044583 lbu a1,0(s0) - ce8: 00093503 ld a0,0(s2) - cec: 7db040ef jal 5cc6 - cf0: d165 beqz a0,cd0 <_ZN6Parser10parse_lineEPPcS0_+0x14c> - cf2: b755 j c96 <_ZN6Parser10parse_lineEPPcS0_+0x112> - cf4: 8426 mv s0,s1 - *ps = s; - cf6: 0089b023 sd s0,0(s3) - cmd = new BackCommand(cmd); - cfa: 4541 li a0,16 - cfc: 2dc050ef jal 5fd8 <_Znwm> - BackCommand(Command *c) : sub_cmd(c) {} - d00: 01453423 sd s4,8(a0) - d04: 01553023 sd s5,0(a0) - cmd = new BackCommand(cmd); - d08: 8a2a mv s4,a0 - d0a: b5f1 j bd6 <_ZN6Parser10parse_lineEPPcS0_+0x52> - switch (*s) - d0c: fb779de3 bne a5,s7,cc6 <_ZN6Parser10parse_lineEPPcS0_+0x142> - if (*s == '>') - d10: 00144783 lbu a5,1(s0) - d14: f97790e3 bne a5,s7,c94 <_ZN6Parser10parse_lineEPPcS0_+0x110> - s++; - d18: 0409 addi s0,s0,2 - d1a: bfb5 j c96 <_ZN6Parser10parse_lineEPPcS0_+0x112> - return *s && strchr(toks, *s); - d1c: 00005517 auipc a0,0x5 - d20: 3a450513 addi a0,a0,932 # 60c0 <_GLOBAL__sub_I__ZSt3cin+0xd0> - d24: 7a3040ef jal 5cc6 - d28: f00502e3 beqz a0,c2c <_ZN6Parser10parse_lineEPPcS0_+0xa8> - s = *ps; - d2c: 0009b403 ld s0,0(s3) - ret = *s; - d30: 00044783 lbu a5,0(s0) - while (s < es && strchr(WHITESPACE, *s)) - d34: 0e947863 bgeu s0,s1,e24 <_ZN6Parser10parse_lineEPPcS0_+0x2a0> - d38: 00007917 auipc s2,0x7 - d3c: 1d090913 addi s2,s2,464 # 7f08 - d40: a021 j d48 <_ZN6Parser10parse_lineEPPcS0_+0x1c4> - s++; - d42: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - d44: 00848963 beq s1,s0,d56 <_ZN6Parser10parse_lineEPPcS0_+0x1d2> - d48: 00044583 lbu a1,0(s0) - d4c: 00093503 ld a0,0(s2) - d50: 777040ef jal 5cc6 - d54: f57d bnez a0,d42 <_ZN6Parser10parse_lineEPPcS0_+0x1be> - ret = *s; - d56: 00044783 lbu a5,0(s0) - switch (*s) - d5a: 02900713 li a4,41 - d5e: 04f76b63 bltu a4,a5,db4 <_ZN6Parser10parse_lineEPPcS0_+0x230> - d62: 02700713 li a4,39 - d66: 08f76f63 bltu a4,a5,e04 <_ZN6Parser10parse_lineEPPcS0_+0x280> - d6a: efd9 bnez a5,e08 <_ZN6Parser10parse_lineEPPcS0_+0x284> - while (s < es && strchr(WHITESPACE, *s)) - d6c: 00007917 auipc s2,0x7 - d70: 19c90913 addi s2,s2,412 # 7f08 - d74: 00946663 bltu s0,s1,d80 <_ZN6Parser10parse_lineEPPcS0_+0x1fc> - d78: a819 j d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - s++; - d7a: 0405 addi s0,s0,1 - while (s < es && strchr(WHITESPACE, *s)) - d7c: 06848c63 beq s1,s0,df4 <_ZN6Parser10parse_lineEPPcS0_+0x270> - d80: 00044583 lbu a1,0(s0) - d84: 00093503 ld a0,0(s2) - d88: 73f040ef jal 5cc6 - d8c: f57d bnez a0,d7a <_ZN6Parser10parse_lineEPPcS0_+0x1f6> - *ps = s; - d8e: 0089b023 sd s0,0(s3) - cmd = new ListCommand(cmd, parse_line(ps, es)); - d92: 4561 li a0,24 - d94: 244050ef jal 5fd8 <_Znwm> - d98: 842a mv s0,a0 - d9a: 85a6 mv a1,s1 - d9c: 854e mv a0,s3 - d9e: de7ff0ef jal b84 <_ZN6Parser10parse_lineEPPcS0_> - ListCommand(Command *l, Command *r) : left(l), right(r) {} - da2: 00007797 auipc a5,0x7 - da6: 12678793 addi a5,a5,294 # 7ec8 <_ZTV11ListCommand+0x10> - daa: e01c sd a5,0(s0) - dac: 01443423 sd s4,8(s0) - db0: e808 sd a0,16(s0) - db2: bdb5 j c2e <_ZN6Parser10parse_lineEPPcS0_+0xaa> - switch (*s) - db4: 03e00713 li a4,62 - db8: 04e78063 beq a5,a4,df8 <_ZN6Parser10parse_lineEPPcS0_+0x274> - dbc: 04f76c63 bltu a4,a5,e14 <_ZN6Parser10parse_lineEPPcS0_+0x290> - dc0: fc57879b addiw a5,a5,-59 - dc4: 0ff7f793 zext.b a5,a5 - dc8: 4705 li a4,1 - dca: 02f77d63 bgeu a4,a5,e04 <_ZN6Parser10parse_lineEPPcS0_+0x280> - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - dce: fc9470e3 bgeu s0,s1,d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - dd2: 00044583 lbu a1,0(s0) - dd6: 00093503 ld a0,0(s2) - dda: 6ed040ef jal 5cc6 - dde: f559 bnez a0,d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - de0: 00044583 lbu a1,0(s0) - de4: 00893503 ld a0,8(s2) - de8: 6df040ef jal 5cc6 - dec: f141 bnez a0,d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - s++; - dee: 0405 addi s0,s0,1 - while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) - df0: fe8491e3 bne s1,s0,dd2 <_ZN6Parser10parse_lineEPPcS0_+0x24e> - df4: 8426 mv s0,s1 - df6: bf61 j d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - if (*s == '>') - df8: 00144703 lbu a4,1(s0) - dfc: 03e00793 li a5,62 - e00: 02f70063 beq a4,a5,e20 <_ZN6Parser10parse_lineEPPcS0_+0x29c> - s++; - e04: 0405 addi s0,s0,1 - e06: b79d j d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - switch (*s) - e08: 02600713 li a4,38 - e0c: fce791e3 bne a5,a4,dce <_ZN6Parser10parse_lineEPPcS0_+0x24a> - s++; - e10: 0405 addi s0,s0,1 - e12: bfa9 j d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - switch (*s) - e14: 07c00713 li a4,124 - e18: fae79be3 bne a5,a4,dce <_ZN6Parser10parse_lineEPPcS0_+0x24a> - s++; - e1c: 0405 addi s0,s0,1 - e1e: b7b9 j d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - s++; - e20: 0409 addi s0,s0,2 - e22: b7a9 j d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - switch (*s) - e24: 03c00713 li a4,60 - e28: 02f76463 bltu a4,a5,e50 <_ZN6Parser10parse_lineEPPcS0_+0x2cc> - e2c: 03a00713 li a4,58 - e30: fcf76ae3 bltu a4,a5,e04 <_ZN6Parser10parse_lineEPPcS0_+0x280> - e34: dfa9 beqz a5,d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - e36: 02600713 li a4,38 - e3a: fce785e3 beq a5,a4,e04 <_ZN6Parser10parse_lineEPPcS0_+0x280> - e3e: fd87879b addiw a5,a5,-40 - e42: 0ff7f793 zext.b a5,a5 - e46: 4705 li a4,1 - e48: f4f763e3 bltu a4,a5,d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - s++; - e4c: 0405 addi s0,s0,1 - e4e: bf39 j d6c <_ZN6Parser10parse_lineEPPcS0_+0x1e8> - switch (*s) - e50: 03e00713 li a4,62 - e54: fae782e3 beq a5,a4,df8 <_ZN6Parser10parse_lineEPPcS0_+0x274> - e58: 07c00713 li a4,124 - e5c: f2e799e3 bne a5,a4,d8e <_ZN6Parser10parse_lineEPPcS0_+0x20a> - e60: b755 j e04 <_ZN6Parser10parse_lineEPPcS0_+0x280> - -0000000000000e62
: - -int main() -{ - e62: 7119 addi sp,sp,-128 - // close(fd); - // break; - // } - // } - - printf(ANSI_GREEN"\n[Lume Shell] Welcome! \n"ANSI_RESET); - e64: 00005517 auipc a0,0x5 - e68: 26c50513 addi a0,a0,620 # 60d0 <_GLOBAL__sub_I__ZSt3cin+0xe0> -{ - e6c: fc86 sd ra,120(sp) - e6e: f8a2 sd s0,112(sp) - e70: f4a6 sd s1,104(sp) - e72: f0ca sd s2,96(sp) - e74: ecce sd s3,88(sp) - e76: e8d2 sd s4,80(sp) - e78: e4d6 sd s5,72(sp) - e7a: e0da sd s6,64(sp) - e7c: fc5e sd s7,56(sp) - printf(ANSI_GREEN"\n[Lume Shell] Welcome! \n"ANSI_RESET); - e7e: 27d030ef jal 48fa - printf(ANSI_YELLOW "[Lume Shell] Start your journey of exploration!"ANSI_RESET); - e82: 00005517 auipc a0,0x5 - e86: 27650513 addi a0,a0,630 # 60f8 <_GLOBAL__sub_I__ZSt3cin+0x108> - e8a: 271030ef jal 48fa - printf("\n"); - e8e: 00005517 auipc a0,0x5 - e92: 2aa50513 addi a0,a0,682 # 6138 <_GLOBAL__sub_I__ZSt3cin+0x148> - e96: 265030ef jal 48fa - - while (getcmd(buf, sizeof(buf)) >= 0) - e9a: 00008417 auipc s0,0x8 - e9e: e3640413 addi s0,s0,-458 # 8cd0 <_ZZ4mainE3buf> - write(1, "$ ", 2); - ea2: 00005497 auipc s1,0x5 - ea6: 22648493 addi s1,s1,550 # 60c8 <_GLOBAL__sub_I__ZSt3cin+0xd8> - { - int len = strlen(buf); - if (len > 0 && buf[len - 1] == '\n') - eaa: 4b29 li s6,10 - { - printf("cannot cd %s\n", path); - } - continue; - } - if (strcmp(buf, "shutdown") == 0 || strcmp(buf, "poweroff") == 0) - eac: 00005917 auipc s2,0x5 - eb0: 2bc90913 addi s2,s2,700 # 6168 <_GLOBAL__sub_I__ZSt3cin+0x178> - eb4: 00005997 auipc s3,0x5 - eb8: 2ec98993 addi s3,s3,748 # 61a0 <_GLOBAL__sub_I__ZSt3cin+0x1b0> - if (pid == -1) - ebc: 5bfd li s7,-1 - { - printf(ANSI_BLUE"System shutting down..."ANSI_RESET); - ebe: 00005a97 auipc s5,0x5 - ec2: 2baa8a93 addi s5,s5,698 # 6178 <_GLOBAL__sub_I__ZSt3cin+0x188> - printf("\n"); - ec6: 00005a17 auipc s4,0x5 - eca: 272a0a13 addi s4,s4,626 # 6138 <_GLOBAL__sub_I__ZSt3cin+0x148> - write(1, "$ ", 2); - ece: 4609 li a2,2 - ed0: 85a6 mv a1,s1 - ed2: 4505 li a0,1 - ed4: 21c000ef jal 10f0 - memset(buf, 0, nbuf); - ed8: 06400613 li a2,100 - edc: 4581 li a1,0 - ede: 8522 mv a0,s0 - ee0: 3f9040ef jal 5ad8 - int n = read(0, buf, nbuf - 1); - ee4: 06300613 li a2,99 - ee8: 85a2 mv a1,s0 - eea: 4501 li a0,0 - eec: 1fc000ef jal 10e8 - if (n < 0) - ef0: 1a054b63 bltz a0,10a6 - buf[n] = 0; - ef4: 00a407b3 add a5,s0,a0 - ef8: 00078023 sb zero,0(a5) - int len = strlen(buf); - efc: 8522 mv a0,s0 - efe: 473040ef jal 5b70 - f02: 2501 sext.w a0,a0 - if (len > 0 && buf[len - 1] == '\n') - f04: 00a05a63 blez a0,f18 - f08: 357d addiw a0,a0,-1 - f0a: 9522 add a0,a0,s0 - f0c: 00054783 lbu a5,0(a0) - f10: 01679463 bne a5,s6,f18 - buf[len - 1] = 0; - f14: 00050023 sb zero,0(a0) - if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) - f18: 00044703 lbu a4,0(s0) - f1c: 06300793 li a5,99 - f20: 00f71863 bne a4,a5,f30 - f24: 00144703 lbu a4,1(s0) - f28: 06400793 li a5,100 - f2c: 02f70e63 beq a4,a5,f68 - if (strcmp(buf, "shutdown") == 0 || strcmp(buf, "poweroff") == 0) - f30: 85ca mv a1,s2 - f32: 8522 mv a0,s0 - f34: 513040ef jal 5c46 - f38: cd19 beqz a0,f56 - f3a: 85ce mv a1,s3 - f3c: 8522 mv a0,s0 - f3e: 509040ef jal 5c46 - f42: c911 beqz a0,f56 - int pid = fork(); - f44: 18c000ef jal 10d0 - if (pid == -1) - f48: 0f750c63 beq a0,s7,1040 - shutdown(); - - continue; - } - - if (fork_or_panic() == 0) - f4c: c52d beqz a0,fb6 - cmd->run(); - delete cmd; - } - exit(0); - } - wait(0); - f4e: 4501 li a0,0 - f50: 188000ef jal 10d8 - f54: bfad j ece - printf(ANSI_BLUE"System shutting down..."ANSI_RESET); - f56: 8556 mv a0,s5 - f58: 1a3030ef jal 48fa - printf("\n"); - f5c: 8552 mv a0,s4 - f5e: 19d030ef jal 48fa - shutdown(); - f62: 226000ef jal 1188 - continue; - f66: b7a5 j ece - if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) - f68: 00244703 lbu a4,2(s0) - f6c: 02000793 li a5,32 - f70: fce7e0e3 bltu a5,a4,f30 - f74: 4785 li a5,1 - f76: 1782 slli a5,a5,0x20 - f78: 40178793 addi a5,a5,1025 - f7c: 00e7d7b3 srl a5,a5,a4 - f80: 8b85 andi a5,a5,1 - f82: d7dd beqz a5,f30 - if (buf[strlen(buf) - 1] == '\n') - f84: 00008517 auipc a0,0x8 - f88: d4c50513 addi a0,a0,-692 # 8cd0 <_ZZ4mainE3buf> - f8c: 3e5040ef jal 5b70 - f90: 9522 add a0,a0,s0 - f92: fff54703 lbu a4,-1(a0) - f96: 47a9 li a5,10 - f98: 0ef70c63 beq a4,a5,1090 - if (buf[2] == '\n' || buf[2] == 0) - f9c: 00244783 lbu a5,2(s0) - fa0: 4729 li a4,10 - fa2: 00e78363 beq a5,a4,fa8 - fa6: e3f1 bnez a5,106a - printf("cd: argument missing\n"); - fa8: 00005517 auipc a0,0x5 - fac: 19850513 addi a0,a0,408 # 6140 <_GLOBAL__sub_I__ZSt3cin+0x150> - fb0: 14b030ef jal 48fa - continue; - fb4: bf29 j ece - char *es = s + strlen(s); - fb6: 00008517 auipc a0,0x8 - fba: d1a50513 addi a0,a0,-742 # 8cd0 <_ZZ4mainE3buf> - fbe: f862 sd s8,48(sp) - fc0: f466 sd s9,40(sp) - fc2: ec6e sd s11,24(sp) - fc4: e422 sd s0,8(sp) - fc6: 3ab040ef jal 5b70 - fca: 00a40cb3 add s9,s0,a0 - Command *cmd = parse_line(&s, es); - fce: 85e6 mv a1,s9 - fd0: 0028 addi a0,sp,8 - fd2: bb3ff0ef jal b84 <_ZN6Parser10parse_lineEPPcS0_> - char *s = *ps; - fd6: 6c22 ld s8,8(sp) - Command *cmd = parse_line(&s, es); - fd8: 8daa mv s11,a0 - while (s < es && strchr(WHITESPACE, *s)) - fda: 039c7363 bgeu s8,s9,1000 - fde: f06a sd s10,32(sp) - fe0: 00007d17 auipc s10,0x7 - fe4: f28d0d13 addi s10,s10,-216 # 7f08 - fe8: a021 j ff0 - s++; - fea: 0c05 addi s8,s8,1 - while (s < es && strchr(WHITESPACE, *s)) - fec: 018c8963 beq s9,s8,ffe - ff0: 000c4583 lbu a1,0(s8) - ff4: 000d3503 ld a0,0(s10) - ff8: 4cf040ef jal 5cc6 - ffc: f57d bnez a0,fea - ffe: 7d02 ld s10,32(sp) - *ps = s; - 1000: e462 sd s8,8(sp) - return *s && strchr(toks, *s); - 1002: 000c4583 lbu a1,0(s8) - 1006: e9b9 bnez a1,105c - if (s != es) - 1008: 65a2 ld a1,8(sp) - 100a: 00bc8863 beq s9,a1,101a - printf("leftovers: %s\n", s); - 100e: 00005517 auipc a0,0x5 - 1012: 1a250513 addi a0,a0,418 # 61b0 <_GLOBAL__sub_I__ZSt3cin+0x1c0> - 1016: 0e5030ef jal 48fa - if (cmd) - 101a: 000d8c63 beqz s11,1032 - cmd->run(); - 101e: 000db783 ld a5,0(s11) - 1022: 856e mv a0,s11 - 1024: 6b9c ld a5,16(a5) - 1026: 9782 jalr a5 - delete cmd; - 1028: 000db783 ld a5,0(s11) - 102c: 856e mv a0,s11 - 102e: 679c ld a5,8(a5) - 1030: 9782 jalr a5 - exit(0); - 1032: 4501 li a0,0 - 1034: 3da040ef jal 540e - 1038: 7c42 ld s8,48(sp) - 103a: 7ca2 ld s9,40(sp) - 103c: 6de2 ld s11,24(sp) - 103e: bf01 j f4e - printf("shell panic: %s\n", s); - 1040: 00005597 auipc a1,0x5 - 1044: 00058593 mv a1,a1 - 1048: 00005517 auipc a0,0x5 - 104c: 00050513 mv a0,a0 - 1050: 0ab030ef jal 48fa - exit(1); - 1054: 4505 li a0,1 - 1056: 3b8040ef jal 540e - return pid; - 105a: bdd5 j f4e - return *s && strchr(toks, *s); - 105c: 00005517 auipc a0,0x5 - 1060: ffc50513 addi a0,a0,-4 # 6058 <_GLOBAL__sub_I__ZSt3cin+0x68> - 1064: 463040ef jal 5cc6 - 1068: b745 j 1008 - if (chdir(path) < 0) - 106a: 00008517 auipc a0,0x8 - 106e: c6950513 addi a0,a0,-919 # 8cd3 <_ZZ4mainE3buf+0x3> - 1072: 0ce000ef jal 1140 - 1076: e4055ce3 bgez a0,ece - printf("cannot cd %s\n", path); - 107a: 00008597 auipc a1,0x8 - 107e: c5958593 addi a1,a1,-935 # 8cd3 <_ZZ4mainE3buf+0x3> - 1082: 00005517 auipc a0,0x5 - 1086: 0d650513 addi a0,a0,214 # 6158 <_GLOBAL__sub_I__ZSt3cin+0x168> - 108a: 071030ef jal 48fa - 108e: b581 j ece - buf[strlen(buf) - 1] = 0; - 1090: 00008517 auipc a0,0x8 - 1094: c4050513 addi a0,a0,-960 # 8cd0 <_ZZ4mainE3buf> - 1098: 2d9040ef jal 5b70 - 109c: 00a407b3 add a5,s0,a0 - 10a0: fe078fa3 sb zero,-1(a5) - 10a4: bde5 j f9c - } - return 0; - 10a6: 70e6 ld ra,120(sp) - 10a8: 7446 ld s0,112(sp) - 10aa: 74a6 ld s1,104(sp) - 10ac: 7906 ld s2,96(sp) - 10ae: 69e6 ld s3,88(sp) - 10b0: 6a46 ld s4,80(sp) - 10b2: 6aa6 ld s5,72(sp) - 10b4: 6b06 ld s6,64(sp) - 10b6: 7be2 ld s7,56(sp) - 10b8: 4501 li a0,0 - 10ba: 6109 addi sp,sp,128 - 10bc: 8082 ret - -00000000000010be <_start>: -.global _start - -_start: - - - call main - 10be: da5ff0ef jal e62
- - call exit - 10c2: 34c040ef jal 540e - - 10c6: a001 j 10c6 <_start+0x8> - -00000000000010c8 : - name: \ - li a7, SYS_ ## sysname; \ - ecall; \ - ret - -SYSCALL_NAME(sys_exit, exit) - 10c8: 488d li a7,3 - 10ca: 00000073 ecall - 10ce: 8082 ret - -00000000000010d0 : - -SYSCALL(fork) - 10d0: 4889 li a7,2 - 10d2: 00000073 ecall - 10d6: 8082 ret - -00000000000010d8 : -SYSCALL(wait) - 10d8: 4891 li a7,4 - 10da: 00000073 ecall - 10de: 8082 ret - -00000000000010e0 : -SYSCALL(pipe) - 10e0: 4895 li a7,5 - 10e2: 00000073 ecall - 10e6: 8082 ret - -00000000000010e8 : -SYSCALL(read) - 10e8: 4899 li a7,6 - 10ea: 00000073 ecall - 10ee: 8082 ret - -00000000000010f0 : -SYSCALL(write) - 10f0: 48c5 li a7,17 - 10f2: 00000073 ecall - 10f6: 8082 ret - -00000000000010f8 : -SYSCALL(close) - 10f8: 48d9 li a7,22 - 10fa: 00000073 ecall - 10fe: 8082 ret - -0000000000001100 : -SYSCALL(kill) - 1100: 489d li a7,7 - 1102: 00000073 ecall - 1106: 8082 ret - -0000000000001108 : -SYSCALL(exec) - 1108: 48a1 li a7,8 - 110a: 00000073 ecall - 110e: 8082 ret - -0000000000001110 : -SYSCALL(open) - 1110: 48c1 li a7,16 - 1112: 00000073 ecall - 1116: 8082 ret - -0000000000001118 : -SYSCALL(mknod) - 1118: 48c9 li a7,18 - 111a: 00000073 ecall - 111e: 8082 ret - -0000000000001120 : -SYSCALL(unlink) - 1120: 48cd li a7,19 - 1122: 00000073 ecall - 1126: 8082 ret - -0000000000001128 : -SYSCALL(fstat) - 1128: 48a5 li a7,9 - 112a: 00000073 ecall - 112e: 8082 ret - -0000000000001130 : -SYSCALL(link) - 1130: 48d1 li a7,20 - 1132: 00000073 ecall - 1136: 8082 ret - -0000000000001138 : -SYSCALL(mkdir) - 1138: 48d5 li a7,21 - 113a: 00000073 ecall - 113e: 8082 ret - -0000000000001140 : -SYSCALL(chdir) - 1140: 48a9 li a7,10 - 1142: 00000073 ecall - 1146: 8082 ret - -0000000000001148 : -SYSCALL(dup) - 1148: 48ad li a7,11 - 114a: 00000073 ecall - 114e: 8082 ret - -0000000000001150 : -SYSCALL(getpid) - 1150: 48b1 li a7,12 - 1152: 00000073 ecall - 1156: 8082 ret - -0000000000001158 : -SYSCALL(sbrk) - 1158: 48b5 li a7,13 - 115a: 00000073 ecall - 115e: 8082 ret - -0000000000001160 : -SYSCALL(sleep) - 1160: 48b9 li a7,14 - 1162: 00000073 ecall - 1166: 8082 ret - -0000000000001168 : -SYSCALL(uptime) - 1168: 48bd li a7,15 - 116a: 00000073 ecall - 116e: 8082 ret - -0000000000001170 : -SYSCALL(putc) - 1170: 4885 li a7,1 - 1172: 00000073 ecall - 1176: 8082 ret - -0000000000001178 : -SYSCALL(disk_test) - 1178: 48dd li a7,23 - 117a: 00000073 ecall - 117e: 8082 ret - -0000000000001180 : -SYSCALL(lseek) - 1180: 48e1 li a7,24 - 1182: 00000073 ecall - 1186: 8082 ret - -0000000000001188 : - 1188: 48e5 li a7,25 - 118a: 00000073 ecall - 118e: 8082 ret - -0000000000001190 : - 1190: 45dc lw a5,12(a1) - 1192: 4598 lw a4,8(a1) - 1194: 9fb1 addw a5,a5,a2 - 1196: c5dc sw a5,12(a1) - 1198: 0007069b sext.w a3,a4 - 119c: 00e65463 bge a2,a4,11a4 - 11a0: 0006069b sext.w a3,a2 - 11a4: c685 beqz a3,11cc - 11a6: 619c ld a5,0(a1) - 11a8: 00a78e63 beq a5,a0,11c4 - 11ac: 00d50633 add a2,a0,a3 - 11b0: 00054703 lbu a4,0(a0) - 11b4: 0505 addi a0,a0,1 - 11b6: 0785 addi a5,a5,1 - 11b8: fee78fa3 sb a4,-1(a5) - 11bc: fec56ae3 bltu a0,a2,11b0 - 11c0: 6188 ld a0,0(a1) - 11c2: 4598 lw a4,8(a1) - 11c4: 9f15 subw a4,a4,a3 - 11c6: 9536 add a0,a0,a3 - 11c8: e188 sd a0,0(a1) - 11ca: c598 sw a4,8(a1) - 11cc: 1ff00793 li a5,511 - 11d0: 00e7d463 bge a5,a4,11d8 - 11d4: 6188 ld a0,0(a1) - 11d6: 8082 ret - 11d8: 01058513 addi a0,a1,16 - 11dc: 8082 ret - -00000000000011de : - 11de: 45dc lw a5,12(a1) - 11e0: 01058513 addi a0,a1,16 - 11e4: 9fb1 addw a5,a5,a2 - 11e6: c5dc sw a5,12(a1) - 11e8: 8082 ret - -00000000000011ea : - 11ea: e20508d3 fmv.x.d a7,fa0 - 11ee: 82aa mv t0,a0 - 11f0: 4348d813 srai a6,a7,0x34 - 11f4: 8ec6 mv t4,a7 - 11f6: 7ff87813 andi a6,a6,2047 - 11fa: 8346 mv t1,a7 - 11fc: 03f8d513 srli a0,a7,0x3f - 1200: 0008d663 bgez a7,120c - 1204: 22a517d3 fneg.d fa5,fa0 - 1208: e20788d3 fmv.x.d a7,fa5 - 120c: 7ff00e13 li t3,2047 - 1210: 35c80663 beq a6,t3,155c - 1214: 1101 addi sp,sp,-32 - 1216: 14080363 beqz a6,135c - 121a: c018081b addiw a6,a6,-1023 - 121e: ec22 sd s0,24(sp) - 1220: 02081313 slli t1,a6,0x20 - 1224: 66034d63 bltz t1,189e - 1228: 4d100313 li t1,1233 - 122c: 0303033b mulw t1,t1,a6 - 1230: 4849 li a6,18 - 1232: 40c3531b sraiw t1,t1,0xc - 1236: 0013039b addiw t2,t1,1 - 123a: 4078083b subw a6,a6,t2 - 123e: 4359 li t1,22 - 1240: 17036163 bltu t1,a6,13a2 - 1244: 00005317 auipc t1,0x5 - 1248: 2c430313 addi t1,t1,708 # 6508 - 124c: 080e slli a6,a6,0x3 - 124e: 981a add a6,a6,t1 - 1250: 00083e03 ld t3,0(a6) - 1254: 00083607 fld fa2,0(a6) - 1258: f20887d3 fmv.d.x fa5,a7 - 125c: f8000837 lui a6,0xf8000 - 1260: 01187333 and t1,a6,a7 - 1264: 01c87833 and a6,a6,t3 - 1268: 12f676d3 fmul.d fa3,fa2,fa5 - 126c: f20807d3 fmv.d.x fa5,a6 - 1270: f2030753 fmv.d.x fa4,t1 - 1274: f20305d3 fmv.d.x fa1,t1 - 1278: 0af67653 fsub.d fa2,fa2,fa5 - 127c: f20887d3 fmv.d.x fa5,a7 - 1280: 0ae7f753 fsub.d fa4,fa5,fa4 - 1284: f20807d3 fmv.d.x fa5,a6 - 1288: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 128c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 1290: f20805d3 fmv.d.x fa1,a6 - 1294: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 1298: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 129c: 02d777d3 fadd.d fa5,fa4,fa3 - 12a0: 3782e837 lui a6,0x3782e - 12a4: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37824c5f> - 12a8: 0832 slli a6,a6,0xc - 12aa: 9d980813 addi a6,a6,-1575 - 12ae: 084a slli a6,a6,0x12 - 12b0: 187d addi a6,a6,-1 - 12b2: c22798d3 fcvt.l.d a7,fa5,rtz - 12b6: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 12ba: 00070e1b sext.w t3,a4 - 12be: d228f653 fcvt.d.l fa2,a7 - 12c2: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 12c6: 0ad77753 fsub.d fa4,fa4,fa3 - 12ca: 0af5f6d3 fsub.d fa3,fa1,fa5 - 12ce: 0ad5f553 fsub.d fa0,fa1,fa3 - 12d2: 02d67653 fadd.d fa2,fa2,fa3 - 12d6: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 12da: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 12de: 02b7f7d3 fadd.d fa5,fa5,fa1 - 12e2: 02e7f7d3 fadd.d fa5,fa5,fa4 - 12e6: c2279fd3 fcvt.l.d t6,fa5,rtz - 12ea: 9fc6 add t6,t6,a7 - 12ec: 19f87063 bgeu a6,t6,146c - 12f0: 2385 addiw t2,t2,1 - 12f2: 300e4363 bltz t3,15f8 - 12f6: 00e3833b addw t1,t2,a4 - 12fa: 475d li a4,23 - 12fc: 30677663 bgeu a4,t1,1608 - 1300: 577d li a4,-1 - 1302: 9301 srli a4,a4,0x20 - 1304: 43f75863 bge a4,t6,1734 - 1308: 07d00313 li t1,125 - 130c: 877e mv a4,t6 - 130e: 4e01 li t3,0 - 1310: 3e800813 li a6,1000 - 1314: 130e slli t1,t1,0x23 - 1316: a039 j 1324 - 1318: 030747b3 div a5,a4,a6 - 131c: 4e05 li t3,1 - 131e: 40674c63 blt a4,t1,1736 - 1322: 873e mv a4,a5 - 1324: 030768b3 rem a7,a4,a6 - 1328: fe0888e3 beqz a7,1318 - 132c: 400e0163 beqz t3,172e - 1330: 8fbe mv t6,a5 - 1332: 05f5e7b7 lui a5,0x5f5e - 1336: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5528f> - 133a: 04060413 addi s0,a2,64 - 133e: 03860613 addi a2,a2,56 - 1342: 15f7c863 blt a5,t6,1492 - 1346: 000f871b sext.w a4,t6 - 134a: 20070463 beqz a4,1552 - 134e: 4f01 li t5,0 - 1350: 4f81 li t6,0 - 1352: 00007e97 auipc t4,0x7 - 1356: bc6e8e93 addi t4,t4,-1082 # 7f18 - 135a: aaa9 j 14b4 - 135c: 0306 slli t1,t1,0x1 - 135e: 3e030e63 beqz t1,175a - 1362: 4305 li t1,1 - 1364: ec22 sd s0,24(sp) - 1366: 00ce9e13 slli t3,t4,0xc - 136a: 134e slli t1,t1,0x33 - 136c: 520e4063 bltz t3,188c - 1370: 40135313 srai t1,t1,0x1 - 1374: 01d37e33 and t3,t1,t4 - 1378: 8f42 mv t5,a6 - 137a: 387d addiw a6,a6,-1 - 137c: fe0e0ae3 beqz t3,1370 - 1380: 26900313 li t1,617 - 1384: c00f081b addiw a6,t5,-1024 - 1388: 0268083b mulw a6,a6,t1 - 138c: 41f8531b sraiw t1,a6,0x1f - 1390: 0153531b srliw t1,t1,0x15 - 1394: 0103033b addw t1,t1,a6 - 1398: 40b3539b sraiw t2,t1,0xb - 139c: 4849 li a6,18 - 139e: 4078083b subw a6,a6,t2 - 13a2: 41f8531b sraiw t1,a6,0x1f - 13a6: 00684eb3 xor t4,a6,t1 - 13aa: 406e8f3b subw t5,t4,t1 - 13ae: 2c900313 li t1,713 - 13b2: 03e3033b mulw t1,t1,t5 - 13b6: 4e35 li t3,13 - 13b8: 8efa mv t4,t5 - 13ba: 40e35f9b sraiw t6,t1,0xe - 13be: 837e mv t1,t6 - 13c0: 23fe4363 blt t3,t6,15e6 - 13c4: 5e25 li t3,-23 - 13c6: 026e0e3b mulw t3,t3,t1 - 13ca: 01de0ebb addw t4,t3,t4 - 13ce: 22084f63 bltz a6,160c - 13d2: f2000753 fmv.d.x fa4,zero - 13d6: 00005e17 auipc t3,0x5 - 13da: 132e0e13 addi t3,t3,306 # 6508 - 13de: 380e9e63 bnez t4,177a - 13e2: f20887d3 fmv.d.x fa5,a7 - 13e6: fff30f1b addiw t5,t1,-1 - 13ea: 0f0e slli t5,t5,0x3 - 13ec: 02f777d3 fadd.d fa5,fa4,fa5 - 13f0: 030e slli t1,t1,0x3 - 13f2: 9f72 add t5,t5,t3 - 13f4: 9e1a add t3,t3,t1 - 13f6: 2e0e3e03 ld t3,736(t3) - 13fa: 2e8f3587 fld fa1,744(t5) - 13fe: f8000837 lui a6,0xf8000 - 1402: e2078ed3 fmv.x.d t4,fa5 - 1406: 12b7f6d3 fmul.d fa3,fa5,fa1 - 140a: f2088653 fmv.d.x fa2,a7 - 140e: 01d87333 and t1,a6,t4 - 1412: 01c87833 and a6,a6,t3 - 1416: f20807d3 fmv.d.x fa5,a6 - 141a: f2030053 fmv.d.x ft0,t1 - 141e: 0af5f553 fsub.d fa0,fa1,fa5 - 1422: f20e87d3 fmv.d.x fa5,t4 - 1426: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 142a: f20807d3 fmv.d.x fa5,a6 - 142e: f2030653 fmv.d.x fa2,t1 - 1432: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 1436: f20e87d3 fmv.d.x fa5,t4 - 143a: 0a177753 fsub.d fa4,fa4,ft1 - 143e: f20300d3 fmv.d.x ft1,t1 - 1442: 0a07f7d3 fsub.d fa5,fa5,ft0 - 1446: 350f3007 fld ft0,848(t5) - 144a: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 144e: 12b77753 fmul.d fa4,fa4,fa1 - 1452: f20805d3 fmv.d.x fa1,a6 - 1456: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 145a: f20e85d3 fmv.d.x fa1,t4 - 145e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 1462: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 1466: 02e7f753 fadd.d fa4,fa5,fa4 - 146a: bd0d j 129c - 146c: 00e3833b addw t1,t2,a4 - 1470: 2a0e4663 bltz t3,171c - 1474: 475d li a4,23 - 1476: 10677663 bgeu a4,t1,1582 - 147a: e80f93e3 bnez t6,1300 - 147e: 05f5e7b7 lui a5,0x5f5e - 1482: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5528f> - 1486: 04060413 addi s0,a2,64 - 148a: 03860613 addi a2,a2,56 - 148e: ebf7dce3 bge a5,t6,1346 - 1492: 4f01 li t5,0 - 1494: 00007e97 auipc t4,0x7 - 1498: a84e8e93 addi t4,t4,-1404 # 7f18 - 149c: 05f5e7b7 lui a5,0x5f5e - 14a0: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f55290> - 14a4: 02ffe833 rem a6,t6,a5 - 14a8: 02ffcfb3 div t6,t6,a5 - 14ac: 0008071b sext.w a4,a6 - 14b0: 0a080463 beqz a6,1558 - 14b4: 8822 mv a6,s0 - 14b6: 06400893 li a7,100 - 14ba: 06300e13 li t3,99 - 14be: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff718e> - 14c0: 0007031b sext.w t1,a4 - 14c4: 031777bb remuw a5,a4,a7 - 14c8: 2785 addiw a5,a5,1 - 14ca: 0017979b slliw a5,a5,0x1 - 14ce: 1782 slli a5,a5,0x20 - 14d0: 9381 srli a5,a5,0x20 - 14d2: 97f6 add a5,a5,t4 - 14d4: 0007d783 lhu a5,0(a5) - 14d8: 0317573b divuw a4,a4,a7 - 14dc: 00f81023 sh a5,0(a6) - 14e0: fc6e6fe3 bltu t3,t1,14be - 14e4: 008f0f3b addw t5,t5,s0 - 14e8: 410f0f3b subw t5,t5,a6 - 14ec: 020f8f63 beqz t6,152a - 14f0: 87c2 mv a5,a6 - 14f2: 03000713 li a4,48 - 14f6: 04c80c63 beq a6,a2,154e - 14fa: 17fd addi a5,a5,-1 - 14fc: 00e78023 sb a4,0(a5) - 1500: fec79de3 bne a5,a2,14fa - 1504: 408807b3 sub a5,a6,s0 - 1508: 00ff07bb addw a5,t5,a5 - 150c: 1461 addi s0,s0,-8 - 150e: 00878f1b addiw t5,a5,8 - 1512: 05f5e7b7 lui a5,0x5f5e - 1516: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5528f> - 151a: ff840613 addi a2,s0,-8 - 151e: f7f7cfe3 blt a5,t6,149c - 1522: 000f871b sext.w a4,t6 - 1526: 4f81 li t6,0 - 1528: b771 j 14b4 - 152a: 020f0563 beqz t5,1554 - 152e: 00084703 lbu a4,0(a6) - 1532: 03000793 li a5,48 - 1536: 22f70f63 beq a4,a5,1774 - 153a: 2f01 sext.w t5,t5 - 153c: 0076a023 sw t2,0(a3) - 1540: 6462 ld s0,24(sp) - 1542: 0102b023 sd a6,0(t0) - 1546: 01e5a023 sw t5,0(a1) - 154a: 6105 addi sp,sp,32 - 154c: 8082 ret - 154e: 8442 mv s0,a6 - 1550: b7c9 j 1512 - 1552: 8822 mv a6,s0 - 1554: 4f01 li t5,0 - 1556: b7dd j 153c - 1558: 8822 mv a6,s0 - 155a: bf59 j 14f0 - 155c: 0eb2 slli t4,t4,0xc - 155e: 00005797 auipc a5,0x5 - 1562: c7a78793 addi a5,a5,-902 # 61d8 <_GLOBAL__sub_I__ZSt3cin+0x1e8> - 1566: 000e8663 beqz t4,1572 - 156a: 00005797 auipc a5,0x5 - 156e: c6678793 addi a5,a5,-922 # 61d0 <_GLOBAL__sub_I__ZSt3cin+0x1e0> - 1572: 00f2b023 sd a5,0(t0) - 1576: 679d lui a5,0x7 - 1578: c29c sw a5,0(a3) - 157a: 4f0d li t5,3 - 157c: 01e5a023 sw t5,0(a1) - 1580: 8082 ret - 1582: 3b9ad737 lui a4,0x3b9ad - 1586: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a3b8f> - 158a: 07f76f63 bltu a4,t6,1608 - 158e: 4805 li a6,1 - 1590: 02081713 slli a4,a6,0x20 - 1594: 01d75893 srli a7,a4,0x1d - 1598: 00005717 auipc a4,0x5 - 159c: 32870713 addi a4,a4,808 # 68c0 - 15a0: 9746 add a4,a4,a7 - 15a2: 4e51 li t3,20 - 15a4: a021 j 15ac - 15a6: 2805 addiw a6,a6,1 - 15a8: edc809e3 beq a6,t3,147a - 15ac: 00073883 ld a7,0(a4) - 15b0: 0721 addi a4,a4,8 - 15b2: ff1ffae3 bgeu t6,a7,15a6 - 15b6: ed0372e3 bgeu t1,a6,147a - 15ba: 4068083b subw a6,a6,t1 - 15be: 475d li a4,23 - 15c0: eb076de3 bltu a4,a6,147a - 15c4: 080e slli a6,a6,0x3 - 15c6: 00005717 auipc a4,0x5 - 15ca: f4270713 addi a4,a4,-190 # 6508 - 15ce: 9742 add a4,a4,a6 - 15d0: 3b873803 ld a6,952(a4) - 15d4: 00185713 srli a4,a6,0x1 - 15d8: 977e add a4,a4,t6 - 15da: 01176363 bltu a4,a7,15e0 - 15de: 2385 addiw t2,t2,1 - 15e0: 03075fb3 divu t6,a4,a6 - 15e4: bd59 j 147a - 15e6: 4335 li t1,13 - 15e8: 5e25 li t3,-23 - 15ea: 026e0e3b mulw t3,t3,t1 - 15ee: 01de0ebb addw t4,t3,t4 - 15f2: de0850e3 bgez a6,13d2 - 15f6: a819 j 160c - 15f8: 02571313 slli t1,a4,0x25 - 15fc: 02535313 srli t1,t1,0x25 - 1600: 0305 addi t1,t1,1 - 1602: 475d li a4,23 - 1604: ce676ee3 bltu a4,t1,1300 - 1608: 4829 li a6,10 - 160a: b759 j 1590 - 160c: 260e8663 beqz t4,1878 - 1610: 00231e13 slli t3,t1,0x2 - 1614: 41c30e33 sub t3,t1,t3 - 1618: 0e0e slli t3,t3,0x3 - 161a: 9e1a add t3,t3,t1 - 161c: fffe881b addiw a6,t4,-1 - 1620: 9e7a add t3,t3,t5 - 1622: 00005e97 auipc t4,0x5 - 1626: ee6e8e93 addi t4,t4,-282 # 6508 - 162a: 0e0e slli t3,t3,0x3 - 162c: 080e slli a6,a6,0x3 - 162e: 9876 add a6,a6,t4 - 1630: 9ef2 add t4,t4,t3 - 1632: 0b883607 fld fa2,184(a6) - 1636: f20887d3 fmv.d.x fa5,a7 - 163a: 0b0ebf03 ld t5,176(t4) - 163e: f8000e37 lui t3,0xf8000 - 1642: 011e7eb3 and t4,t3,a7 - 1646: 12f676d3 fmul.d fa3,fa2,fa5 - 164a: 01ee7e33 and t3,t3,t5 - 164e: f20e07d3 fmv.d.x fa5,t3 - 1652: f20e0753 fmv.d.x fa4,t3 - 1656: f20e8553 fmv.d.x fa0,t4 - 165a: 0af67653 fsub.d fa2,fa2,fa5 - 165e: f20e87d3 fmv.d.x fa5,t4 - 1662: f20e85d3 fmv.d.x fa1,t4 - 1666: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 166a: f2088753 fmv.d.x fa4,a7 - 166e: 0ab775d3 fsub.d fa1,fa4,fa1 - 1672: 16883707 fld fa4,360(a6) - 1676: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 167a: f20e0553 fmv.d.x fa0,t3 - 167e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 1682: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 1686: f20887d3 fmv.d.x fa5,a7 - 168a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 168e: c00f87e3 beqz t6,129c - 1692: 02d777d3 fadd.d fa5,fa4,fa3 - 1696: fff3089b addiw a7,t1,-1 - 169a: 00005817 auipc a6,0x5 - 169e: e6e80813 addi a6,a6,-402 # 6508 - 16a2: 030e slli t1,t1,0x3 - 16a4: 088e slli a7,a7,0x3 - 16a6: 98c2 add a7,a7,a6 - 16a8: 981a add a6,a6,t1 - 16aa: e2078e53 fmv.x.d t3,fa5 - 16ae: 21083e83 ld t4,528(a6) - 16b2: f8000837 lui a6,0xf8000 - 16b6: 2188b507 fld fa0,536(a7) - 16ba: 01c87333 and t1,a6,t3 - 16be: 01d87833 and a6,a6,t4 - 16c2: f2080653 fmv.d.x fa2,a6 - 16c6: 12f577d3 fmul.d fa5,fa0,fa5 - 16ca: 2808b587 fld fa1,640(a7) - 16ce: 0ac57053 fsub.d ft0,fa0,fa2 - 16d2: f20e0653 fmv.d.x fa2,t3 - 16d6: 0ad67153 fsub.d ft2,fa2,fa3 - 16da: f20806d3 fmv.d.x fa3,a6 - 16de: f2030653 fmv.d.x fa2,t1 - 16e2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 16e6: f20e06d3 fmv.d.x fa3,t3 - 16ea: 0ac6f653 fsub.d fa2,fa3,fa2 - 16ee: 22f786d3 fmv.d fa3,fa5 - 16f2: 0a2777d3 fsub.d fa5,fa4,ft2 - 16f6: f2030753 fmv.d.x fa4,t1 - 16fa: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 16fe: 12a7f7d3 fmul.d fa5,fa5,fa0 - 1702: f2080553 fmv.d.x fa0,a6 - 1706: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 170a: f20e0553 fmv.d.x fa0,t3 - 170e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 1712: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 1716: 02f67753 fadd.d fa4,fa2,fa5 - 171a: b649 j 129c - 171c: 02571313 slli t1,a4,0x25 - 1720: 02535313 srli t1,t1,0x25 - 1724: 0305 addi t1,t1,1 - 1726: 475d li a4,23 - 1728: d46769e3 bltu a4,t1,147a - 172c: bd99 j 1582 - 172e: 87fe mv a5,t6 - 1730: 8fbe mv t6,a5 - 1732: b101 j 1332 - 1734: 87fe mv a5,t6 - 1736: 3e800713 li a4,1000 - 173a: 02e7f73b remuw a4,a5,a4 - 173e: 2781 sext.w a5,a5 - 1740: eb01 bnez a4,1750 - 1742: 3e800813 li a6,1000 - 1746: 0307d7bb divuw a5,a5,a6 - 174a: 0307f73b remuw a4,a5,a6 - 174e: df65 beqz a4,1746 - 1750: 02079f93 slli t6,a5,0x20 - 1754: 020fdf93 srli t6,t6,0x20 - 1758: b31d j 147e - 175a: 4785 li a5,1 - 175c: c29c sw a5,0(a3) - 175e: 00c2b023 sd a2,0(t0) - 1762: 03000793 li a5,48 - 1766: 00f60023 sb a5,0(a2) - 176a: 4f05 li t5,1 - 176c: 01e5a023 sw t5,0(a1) - 1770: 6105 addi sp,sp,32 - 1772: 8082 ret - 1774: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff7191> - 1776: 3f7d addiw t5,t5,-1 - 1778: b3d1 j 153c - 177a: e826 sd s1,16(sp) - 177c: e44a sd s2,8(sp) - 177e: 4859 li a6,22 - 1780: 8976 mv s2,t4 - 1782: 11d84363 blt a6,t4,1888 - 1786: 0009049b sext.w s1,s2 - 178a: 00005e17 auipc t3,0x5 - 178e: d7ee0e13 addi t3,t3,-642 # 6508 - 1792: 00349813 slli a6,s1,0x3 - 1796: 9872 add a6,a6,t3 - 1798: 00083687 fld fa3,0(a6) - 179c: 00083803 ld a6,0(a6) - 17a0: f20887d3 fmv.d.x fa5,a7 - 17a4: f8000fb7 lui t6,0xf8000 - 17a8: 010ff833 and a6,t6,a6 - 17ac: 12f6f553 fmul.d fa0,fa3,fa5 - 17b0: f20807d3 fmv.d.x fa5,a6 - 17b4: 011ff433 and s0,t6,a7 - 17b8: f2040753 fmv.d.x fa4,s0 - 17bc: 0af6f6d3 fsub.d fa3,fa3,fa5 - 17c0: f20887d3 fmv.d.x fa5,a7 - 17c4: f2080653 fmv.d.x fa2,a6 - 17c8: 412e8ebb subw t4,t4,s2 - 17cc: 0ae7f753 fsub.d fa4,fa5,fa4 - 17d0: f20407d3 fmv.d.x fa5,s0 - 17d4: e20508d3 fmv.x.d a7,fa0 - 17d8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 17dc: f2040653 fmv.d.x fa2,s0 - 17e0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 17e4: f2080653 fmv.d.x fa2,a6 - 17e8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 17ec: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 17f0: 080e8963 beqz t4,1882 - 17f4: 02e577d3 fadd.d fa5,fa0,fa4 - 17f8: 0e8e slli t4,t4,0x3 - 17fa: 01de0833 add a6,t3,t4 - 17fe: 00083587 fld fa1,0(a6) - 1802: 00231893 slli a7,t1,0x2 - 1806: 411308b3 sub a7,t1,a7 - 180a: 00389813 slli a6,a7,0x3 - 180e: e2078453 fmv.x.d s0,fa5 - 1812: 12f5f7d3 fmul.d fa5,fa1,fa5 - 1816: 981a add a6,a6,t1 - 1818: 987a add a6,a6,t5 - 181a: 40980833 sub a6,a6,s1 - 181e: 080e slli a6,a6,0x3 - 1820: 9872 add a6,a6,t3 - 1822: 00083e83 ld t4,0(a6) - 1826: 008ff833 and a6,t6,s0 - 182a: e20788d3 fmv.x.d a7,fa5 - 182e: f20806d3 fmv.d.x fa3,a6 - 1832: f20407d3 fmv.d.x fa5,s0 - 1836: 01dfffb3 and t6,t6,t4 - 183a: f20880d3 fmv.d.x ft1,a7 - 183e: 0ad7f653 fsub.d fa2,fa5,fa3 - 1842: f20f87d3 fmv.d.x fa5,t6 - 1846: 64c2 ld s1,16(sp) - 1848: 6922 ld s2,8(sp) - 184a: 0af5f053 fsub.d ft0,fa1,fa5 - 184e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 1852: f20407d3 fmv.d.x fa5,s0 - 1856: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 185a: f2080553 fmv.d.x fa0,a6 - 185e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 1862: 0af77753 fsub.d fa4,fa4,fa5 - 1866: f20f87d3 fmv.d.x fa5,t6 - 186a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 186e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 1872: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 1876: b6b5 j 13e2 - 1878: f20886d3 fmv.d.x fa3,a7 - 187c: f2000753 fmv.d.x fa4,zero - 1880: b539 j 168e - 1882: 64c2 ld s1,16(sp) - 1884: 6922 ld s2,8(sp) - 1886: beb1 j 13e2 - 1888: 4959 li s2,22 - 188a: bdf5 j 1786 - 188c: e826 sd s1,16(sp) - 188e: e44a sd s2,8(sp) - 1890: ecc00393 li t2,-308 - 1894: 4eed li t4,27 - 1896: 4335 li t1,13 - 1898: 14600f13 li t5,326 - 189c: b5cd j 177e - 189e: 26900313 li t1,617 - 18a2: 0303083b mulw a6,t1,a6 - 18a6: 41f8531b sraiw t1,a6,0x1f - 18aa: 0153531b srliw t1,t1,0x15 - 18ae: 0103033b addw t1,t1,a6 - 18b2: 40b3539b sraiw t2,t1,0xb - 18b6: 4849 li a6,18 - 18b8: 4078083b subw a6,a6,t2 - 18bc: b249 j 123e - -00000000000018be <_in_char.part.0>: -static int _in_char(_InContext *ctx) - 18be: 87aa mv a5,a0 - if (ctx->fd == -1) - 18c0: 4508 lw a0,8(a0) - 18c2: 577d li a4,-1 - 18c4: 00e51d63 bne a0,a4,18de <_in_char.part.0+0x20> - if (ctx->buf[ctx->pos] == '\0') - 18c8: 6b94 ld a3,16(a5) - 18ca: 6398 ld a4,0(a5) - 18cc: 9736 add a4,a4,a3 - 18ce: 00074603 lbu a2,0(a4) - 18d2: c60d beqz a2,18fc <_in_char.part.0+0x3e> - return (unsigned char)ctx->buf[ctx->pos++]; - 18d4: 0685 addi a3,a3,1 - 18d6: eb94 sd a3,16(a5) - 18d8: 00074503 lbu a0,0(a4) - 18dc: 8082 ret -static int _in_char(_InContext *ctx) - 18de: 1101 addi sp,sp,-32 - if (read(ctx->fd, &c, 1) == 1) - 18e0: 4605 li a2,1 - 18e2: 00f10593 addi a1,sp,15 -static int _in_char(_InContext *ctx) - 18e6: ec06 sd ra,24(sp) - if (read(ctx->fd, &c, 1) == 1) - 18e8: 801ff0ef jal 10e8 - 18ec: 4785 li a5,1 - 18ee: 00f51963 bne a0,a5,1900 <_in_char.part.0+0x42> - return (unsigned char)c; - 18f2: 00f14503 lbu a0,15(sp) -} - 18f6: 60e2 ld ra,24(sp) - 18f8: 6105 addi sp,sp,32 - 18fa: 8082 ret - return -1; - 18fc: 557d li a0,-1 -} - 18fe: 8082 ret - return -1; - 1900: 557d li a0,-1 - 1902: bfd5 j 18f6 <_in_char.part.0+0x38> - -0000000000001904 <_skip_space>: -{ - 1904: 7139 addi sp,sp,-64 - 1906: f822 sd s0,48(sp) - 1908: f426 sd s1,40(sp) - 190a: f04a sd s2,32(sp) - 190c: ec4e sd s3,24(sp) - 190e: e852 sd s4,16(sp) - 1910: fc06 sd ra,56(sp) - 1912: 842a mv s0,a0 - ctx->ungotten = -1; - 1914: 54fd li s1,-1 - if (read(ctx->fd, &c, 1) == 1) - 1916: 00f10a13 addi s4,sp,15 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 191a: 02000913 li s2,32 - 191e: 4991 li s3,4 - if (ctx->ungotten >= 0) - 1920: 4c1c lw a5,24(s0) - 1922: 0407d163 bgez a5,1964 <_skip_space+0x60> - if (ctx->fd == -1) - 1926: 4408 lw a0,8(s0) - if (read(ctx->fd, &c, 1) == 1) - 1928: 4605 li a2,1 - 192a: 85d2 mv a1,s4 - if (ctx->fd == -1) - 192c: 02951e63 bne a0,s1,1968 <_skip_space+0x64> - if (ctx->buf[ctx->pos] == '\0') - 1930: 6818 ld a4,16(s0) - 1932: 601c ld a5,0(s0) - return (unsigned char)ctx->buf[ctx->pos++]; - 1934: 00170693 addi a3,a4,1 - if (ctx->buf[ctx->pos] == '\0') - 1938: 97ba add a5,a5,a4 - 193a: 0007c703 lbu a4,0(a5) # 7000 - 193e: cb19 beqz a4,1954 <_skip_space+0x50> - return (unsigned char)ctx->buf[ctx->pos++]; - 1940: e814 sd a3,16(s0) - 1942: 0007c783 lbu a5,0(a5) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1946: ff77871b addiw a4,a5,-9 - 194a: fd278be3 beq a5,s2,1920 <_skip_space+0x1c> - 194e: fce9f9e3 bgeu s3,a4,1920 <_skip_space+0x1c> - ctx->ungotten = c; - 1952: cc1c sw a5,24(s0) -} - 1954: 70e2 ld ra,56(sp) - 1956: 7442 ld s0,48(sp) - 1958: 74a2 ld s1,40(sp) - 195a: 7902 ld s2,32(sp) - 195c: 69e2 ld s3,24(sp) - 195e: 6a42 ld s4,16(sp) - 1960: 6121 addi sp,sp,64 - 1962: 8082 ret - ctx->ungotten = -1; - 1964: cc04 sw s1,24(s0) - return c; - 1966: b7c5 j 1946 <_skip_space+0x42> - if (read(ctx->fd, &c, 1) == 1) - 1968: f80ff0ef jal 10e8 - 196c: 4785 li a5,1 - 196e: fef513e3 bne a0,a5,1954 <_skip_space+0x50> - return (unsigned char)c; - 1972: 00f14783 lbu a5,15(sp) - 1976: bfc1 j 1946 <_skip_space+0x42> - -0000000000001978 <_vscanf_core.constprop.0>: -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 1978: 7155 addi sp,sp,-208 - 197a: e586 sd ra,200(sp) - 197c: e95a sd s6,144(sp) - while (*p) - 197e: 0005c783 lbu a5,0(a1) -static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 1982: e432 sd a2,8(sp) - while (*p) - 1984: 68078b63 beqz a5,201a <_vscanf_core.constprop.0+0x6a2> - 1988: e1a2 sd s0,192(sp) - 198a: fd26 sd s1,184(sp) - 198c: f152 sd s4,160(sp) - 198e: ed56 sd s5,152(sp) - 1990: f4ee sd s11,104(sp) - 1992: 842e mv s0,a1 - 1994: 8daa mv s11,a0 - int assigned = 0; - 1996: 4b01 li s6,0 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1998: 02000493 li s1,32 - 199c: 4a91 li s5,4 - if (*p != '%') - 199e: 02500a13 li s4,37 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 19a2: 04978763 beq a5,s1,19f0 <_vscanf_core.constprop.0+0x78> - 19a6: ff77869b addiw a3,a5,-9 - 19aa: 0ff6f693 zext.b a3,a3 - 19ae: 04daf163 bgeu s5,a3,19f0 <_vscanf_core.constprop.0+0x78> - if (*p != '%') - 19b2: 07478d63 beq a5,s4,1a2c <_vscanf_core.constprop.0+0xb4> - _skip_space(ctx); - 19b6: 856e mv a0,s11 - 19b8: f4dff0ef jal 1904 <_skip_space> - if (ctx->ungotten >= 0) - 19bc: 018da503 lw a0,24(s11) - 19c0: 04055a63 bgez a0,1a14 <_vscanf_core.constprop.0+0x9c> - 19c4: 856e mv a0,s11 - 19c6: ef9ff0ef jal 18be <_in_char.part.0> - if (c != *p) - 19ca: 00044783 lbu a5,0(s0) - 19ce: 04a78a63 beq a5,a0,1a22 <_vscanf_core.constprop.0+0xaa> - if (c != -1) - 19d2: 57fd li a5,-1 - 19d4: 00f50463 beq a0,a5,19dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = c; - 19d8: 00adac23 sw a0,24(s11) - 19dc: 640e ld s0,192(sp) - 19de: 74ea ld s1,184(sp) - 19e0: 7a0a ld s4,160(sp) - 19e2: 6aea ld s5,152(sp) - 19e4: 7da6 ld s11,104(sp) -} - 19e6: 60ae ld ra,200(sp) - 19e8: 855a mv a0,s6 - 19ea: 6b4a ld s6,144(sp) - 19ec: 6169 addi sp,sp,208 - 19ee: 8082 ret - _skip_space(ctx); - 19f0: 856e mv a0,s11 - 19f2: f13ff0ef jal 1904 <_skip_space> - while (isspace(*p)) - 19f6: 00044783 lbu a5,0(s0) - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 19fa: 4611 li a2,4 - 19fc: ff77869b addiw a3,a5,-9 - 1a00: 0ff6f693 zext.b a3,a3 - 1a04: 00978663 beq a5,s1,1a10 <_vscanf_core.constprop.0+0x98> - 1a08: 00d67463 bgeu a2,a3,1a10 <_vscanf_core.constprop.0+0x98> - while (*p) - 1a0c: fbd9 bnez a5,19a2 <_vscanf_core.constprop.0+0x2a> - 1a0e: b7f9 j 19dc <_vscanf_core.constprop.0+0x64> - p++; - 1a10: 0405 addi s0,s0,1 - 1a12: b7d5 j 19f6 <_vscanf_core.constprop.0+0x7e> - ctx->ungotten = -1; - 1a14: 57fd li a5,-1 - 1a16: 00fdac23 sw a5,24(s11) - if (c != *p) - 1a1a: 00044783 lbu a5,0(s0) - 1a1e: faa79ae3 bne a5,a0,19d2 <_vscanf_core.constprop.0+0x5a> - while (*p) - 1a22: 00144783 lbu a5,1(s0) - p++; - 1a26: 0405 addi s0,s0,1 - while (*p) - 1a28: ffad bnez a5,19a2 <_vscanf_core.constprop.0+0x2a> - 1a2a: bf4d j 19dc <_vscanf_core.constprop.0+0x64> - 1a2c: f94a sd s2,176(sp) - 1a2e: f54e sd s3,168(sp) - 1a30: e55e sd s7,136(sp) - 1a32: e162 sd s8,128(sp) - if (*p == '*') - 1a34: 00144583 lbu a1,1(s0) - 1a38: 02a00793 li a5,42 - 1a3c: 22f58d63 beq a1,a5,1c76 <_vscanf_core.constprop.0+0x2fe> - p++; - 1a40: 0405 addi s0,s0,1 - int suppress = 0; - 1a42: 4981 li s3,0 - while (*p >= '0' && *p <= '9') - 1a44: fd05861b addiw a2,a1,-48 - 1a48: 0ff67693 zext.b a3,a2 - 1a4c: 47a5 li a5,9 - 1a4e: 36d7e763 bltu a5,a3,1dbc <_vscanf_core.constprop.0+0x444> - 1a52: 4781 li a5,0 - 1a54: 4825 li a6,9 - 1a56: a019 j 1a5c <_vscanf_core.constprop.0+0xe4> - width = width * 10 + (*p - '0'); - 1a58: 0016979b slliw a5,a3,0x1 - while (*p >= '0' && *p <= '9') - 1a5c: 00144583 lbu a1,1(s0) - width = width * 10 + (*p - '0'); - 1a60: 00f6093b addw s2,a2,a5 - 1a64: 0029169b slliw a3,s2,0x2 - while (*p >= '0' && *p <= '9') - 1a68: fd05861b addiw a2,a1,-48 - 1a6c: 0ff67513 zext.b a0,a2 - width = width * 10 + (*p - '0'); - 1a70: 012686bb addw a3,a3,s2 - p++; - 1a74: 0405 addi s0,s0,1 - while (*p >= '0' && *p <= '9') - 1a76: fea871e3 bgeu a6,a0,1a58 <_vscanf_core.constprop.0+0xe0> - if (*p == 'l') - 1a7a: 06c00693 li a3,108 - p++; - 1a7e: 00140b93 addi s7,s0,1 - if (*p == 'l') - 1a82: 1ed58f63 beq a1,a3,1c80 <_vscanf_core.constprop.0+0x308> - else if (*p == 'h') - 1a86: 06800693 li a3,104 - 1a8a: 2ad58863 beq a1,a3,1d3a <_vscanf_core.constprop.0+0x3c2> - char spec = *p++; - 1a8e: 00044c03 lbu s8,0(s0) - 1a92: 8ba2 mv s7,s0 - int len_mod = 0; - 1a94: ec02 sd zero,24(sp) - char spec = *p++; - 1a96: 06300693 li a3,99 - 1a9a: 001b8413 addi s0,s7,1 - if (!spec) - 1a9e: 2adc0863 beq s8,a3,1d4e <_vscanf_core.constprop.0+0x3d6> - 1aa2: 1f86fc63 bgeu a3,s8,1c9a <_vscanf_core.constprop.0+0x322> - 1aa6: f9cc069b addiw a3,s8,-100 - 1aaa: 0ff6f693 zext.b a3,a3 - 1aae: 4651 li a2,20 - 1ab0: 0cd66e63 bltu a2,a3,1b8c <_vscanf_core.constprop.0+0x214> - 1ab4: 00120637 lui a2,0x120 - 1ab8: 4585 li a1,1 - 1aba: 00d595b3 sll a1,a1,a3 - 1abe: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1171b1> - 1ac2: 8e6d and a2,a2,a1 - 1ac4: ee69 bnez a2,1b9e <_vscanf_core.constprop.0+0x226> - 1ac6: 89b9 andi a1,a1,14 - 1ac8: 1e059263 bnez a1,1cac <_vscanf_core.constprop.0+0x334> - 1acc: 463d li a2,15 - 1ace: 0ac69f63 bne a3,a2,1b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - 1ad2: 856e mv a0,s11 - 1ad4: e31ff0ef jal 1904 <_skip_space> - char *buf = suppress ? NULL : va_arg(ap, char *); - 1ad8: ec02 sd zero,24(sp) - 1ada: 00099763 bnez s3,1ae8 <_vscanf_core.constprop.0+0x170> - 1ade: 67a2 ld a5,8(sp) - 1ae0: 6398 ld a4,0(a5) - 1ae2: 07a1 addi a5,a5,8 - 1ae4: e43e sd a5,8(sp) - 1ae6: ec3a sd a4,24(sp) - if (ctx->ungotten >= 0) - 1ae8: 018da503 lw a0,24(s11) - 1aec: 2e055b63 bgez a0,1de2 <_vscanf_core.constprop.0+0x46a> - 1af0: 856e mv a0,s11 - 1af2: dcdff0ef jal 18be <_in_char.part.0> - while (c != -1 && !isspace(c)) - 1af6: 56fd li a3,-1 - 1af8: 6ad50363 beq a0,a3,219e <_vscanf_core.constprop.0+0x826> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1afc: 02000693 li a3,32 - 1b00: 3ed50963 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b04: 46a5 li a3,9 - 1b06: 3ed50663 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b0a: 46a9 li a3,10 - 1b0c: 3ed50363 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b10: 46ad li a3,11 - 1b12: 3ed50063 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b16: 46b1 li a3,12 - 1b18: 3cd50d63 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b1c: 46b5 li a3,13 - 1b1e: 3cd50a63 beq a0,a3,1ef2 <_vscanf_core.constprop.0+0x57a> - 1b22: 67e2 ld a5,24(sp) - 1b24: fce6 sd s9,120(sp) - 1b26: f8ea sd s10,112(sp) - 1b28: e83e sd a5,16(sp) - 1b2a: 4d01 li s10,0 - while (c != -1 && !isspace(c)) - 1b2c: 5c7d li s8,-1 - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1b2e: 02000c93 li s9,32 - if (width > 0 && i >= width) - 1b32: 01205463 blez s2,1b3a <_vscanf_core.constprop.0+0x1c2> - 1b36: 052d5563 bge s10,s2,1b80 <_vscanf_core.constprop.0+0x208> - if (!suppress) - 1b3a: 00099563 bnez s3,1b44 <_vscanf_core.constprop.0+0x1cc> - buf[i] = (char)c; - 1b3e: 67c2 ld a5,16(sp) - 1b40: 00a78023 sb a0,0(a5) - if (ctx->ungotten >= 0) - 1b44: 018da503 lw a0,24(s11) - i++; - 1b48: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - 1b4a: 30055963 bgez a0,1e5c <_vscanf_core.constprop.0+0x4e4> - 1b4e: 856e mv a0,s11 - 1b50: d6fff0ef jal 18be <_in_char.part.0> - while (c != -1 && !isspace(c)) - 1b54: 27850663 beq a0,s8,1dc0 <_vscanf_core.constprop.0+0x448> - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1b58: 03950463 beq a0,s9,1b80 <_vscanf_core.constprop.0+0x208> - 1b5c: 47a5 li a5,9 - 1b5e: 02f50163 beq a0,a5,1b80 <_vscanf_core.constprop.0+0x208> - 1b62: 47a9 li a5,10 - 1b64: 00f50e63 beq a0,a5,1b80 <_vscanf_core.constprop.0+0x208> - 1b68: 47ad li a5,11 - 1b6a: 00f50b63 beq a0,a5,1b80 <_vscanf_core.constprop.0+0x208> - 1b6e: 47b1 li a5,12 - 1b70: 00f50863 beq a0,a5,1b80 <_vscanf_core.constprop.0+0x208> - 1b74: 67c2 ld a5,16(sp) - 1b76: 0785 addi a5,a5,1 - 1b78: e83e sd a5,16(sp) - 1b7a: 47b5 li a5,13 - 1b7c: faf51be3 bne a0,a5,1b32 <_vscanf_core.constprop.0+0x1ba> - if (!suppress) - 1b80: 64098a63 beqz s3,21d4 <_vscanf_core.constprop.0+0x85c> - 1b84: 7ce6 ld s9,120(sp) - 1b86: 7d46 ld s10,112(sp) - ctx->ungotten = c; - 1b88: 00adac23 sw a0,24(s11) - while (*p) - 1b8c: 001bc783 lbu a5,1(s7) - 1b90: 794a ld s2,176(sp) - 1b92: 79aa ld s3,168(sp) - 1b94: 6baa ld s7,136(sp) - 1b96: 6c0a ld s8,128(sp) - 1b98: e00795e3 bnez a5,19a2 <_vscanf_core.constprop.0+0x2a> - 1b9c: b581 j 19dc <_vscanf_core.constprop.0+0x64> - _skip_space(ctx); - 1b9e: 856e mv a0,s11 - 1ba0: f8ea sd s10,112(sp) - 1ba2: d63ff0ef jal 1904 <_skip_space> - if (ctx->ungotten >= 0) - 1ba6: 018da503 lw a0,24(s11) - 1baa: 24055063 bgez a0,1dea <_vscanf_core.constprop.0+0x472> - 1bae: 856e mv a0,s11 - 1bb0: d0fff0ef jal 18be <_in_char.part.0> - if (c == '-' || c == '+') - 1bb4: fd55069b addiw a3,a0,-43 - 1bb8: 9af5 andi a3,a3,-3 - 1bba: 2681 sext.w a3,a3 - int i = 0, c = _in_char(ctx); - 1bbc: 4d01 li s10,0 - if (c == '-' || c == '+') - 1bbe: 3e068863 beqz a3,1fae <_vscanf_core.constprop.0+0x636> - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1bc2: 07800693 li a3,120 - 1bc6: 4641 li a2,16 - 1bc8: 00dc0863 beq s8,a3,1bd8 <_vscanf_core.constprop.0+0x260> - 1bcc: 06900693 li a3,105 - 1bd0: 4629 li a2,10 - 1bd2: 00dc1363 bne s8,a3,1bd8 <_vscanf_core.constprop.0+0x260> - 1bd6: 4601 li a2,0 - while (c != -1 && i < 63) - 1bd8: 56fd li a3,-1 - 1bda: 5cd50863 beq a0,a3,21aa <_vscanf_core.constprop.0+0x832> - 1bde: fce6 sd s9,120(sp) - 1be0: 02010893 addi a7,sp,32 - 1be4: 01a88c33 add s8,a7,s10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1be8: 4cc1 li s9,16 - int digit = (c >= '0' && c <= '9'); - 1bea: fd05069b addiw a3,a0,-48 - 1bee: 0005031b sext.w t1,a0 - 1bf2: 00a6b593 sltiu a1,a3,10 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1bf6: 27960a63 beq a2,s9,1e6a <_vscanf_core.constprop.0+0x4f2> - 1bfa: 2a060d63 beqz a2,1eb4 <_vscanf_core.constprop.0+0x53c> - int x = (c == 'x' || c == 'X'); - 1bfe: 07800793 li a5,120 - 1c02: 2ef50363 beq a0,a5,1ee8 <_vscanf_core.constprop.0+0x570> - 1c06: fa850693 addi a3,a0,-88 - 1c0a: 0016b693 seqz a3,a3 - 1c0e: 4301 li t1,0 - if (width > 0 && i >= width) - 1c10: 01205463 blez s2,1c18 <_vscanf_core.constprop.0+0x2a0> - 1c14: 032d5a63 bge s10,s2,1c48 <_vscanf_core.constprop.0+0x2d0> - if (digit || hex || x) - 1c18: 0066e6b3 or a3,a3,t1 - 1c1c: 8ecd or a3,a3,a1 - 1c1e: c68d beqz a3,1c48 <_vscanf_core.constprop.0+0x2d0> - num_buf[i++] = (char)c; - 1c20: 00ac0023 sb a0,0(s8) - if (ctx->ungotten >= 0) - 1c24: 018da503 lw a0,24(s11) - num_buf[i++] = (char)c; - 1c28: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - 1c2a: 22055c63 bgez a0,1e62 <_vscanf_core.constprop.0+0x4ea> - 1c2e: 856e mv a0,s11 - 1c30: e832 sd a2,16(sp) - 1c32: c8dff0ef jal 18be <_in_char.part.0> - while (c != -1 && i < 63) - 1c36: 57fd li a5,-1 - 1c38: 6642 ld a2,16(sp) - 1c3a: 3cf50263 beq a0,a5,1ffe <_vscanf_core.constprop.0+0x686> - 1c3e: 03f00693 li a3,63 - 1c42: 0c05 addi s8,s8,1 - 1c44: fadd13e3 bne s10,a3,1bea <_vscanf_core.constprop.0+0x272> - num_buf[i] = '\0'; - 1c48: 040d0793 addi a5,s10,64 - 1c4c: 1018 addi a4,sp,32 - 1c4e: 97ba add a5,a5,a4 - 1c50: fc078023 sb zero,-64(a5) - ctx->ungotten = c; - 1c54: 00adac23 sw a0,24(s11) - 1c58: 7ce6 ld s9,120(sp) - if (i == 0) - 1c5a: 1e0d0663 beqz s10,1e46 <_vscanf_core.constprop.0+0x4ce> - if (!suppress) - 1c5e: 36098363 beqz s3,1fc4 <_vscanf_core.constprop.0+0x64c> - while (*p) - 1c62: 001bc783 lbu a5,1(s7) - { - 1c66: 794a ld s2,176(sp) - 1c68: 79aa ld s3,168(sp) - 1c6a: 6baa ld s7,136(sp) - 1c6c: 6c0a ld s8,128(sp) - 1c6e: 7d46 ld s10,112(sp) - while (*p) - 1c70: d20799e3 bnez a5,19a2 <_vscanf_core.constprop.0+0x2a> - 1c74: b3a5 j 19dc <_vscanf_core.constprop.0+0x64> - while (*p >= '0' && *p <= '9') - 1c76: 00244583 lbu a1,2(s0) - suppress = 1; - 1c7a: 4985 li s3,1 - p++; - 1c7c: 0409 addi s0,s0,2 - 1c7e: b3d9 j 1a44 <_vscanf_core.constprop.0+0xcc> - if (*p == 'l') - 1c80: 00144c03 lbu s8,1(s0) - len_mod = 1; - 1c84: 4785 li a5,1 - 1c86: ec3e sd a5,24(sp) - if (*p == 'l') - 1c88: e0bc17e3 bne s8,a1,1a96 <_vscanf_core.constprop.0+0x11e> - len_mod = 2; - 1c8c: 4789 li a5,2 - char spec = *p++; - 1c8e: 00244c03 lbu s8,2(s0) - p++; - 1c92: 00240b93 addi s7,s0,2 - len_mod = 2; - 1c96: ec3e sd a5,24(sp) - 1c98: bbfd j 1a96 <_vscanf_core.constprop.0+0x11e> - 1c9a: 100c0763 beqz s8,1da8 <_vscanf_core.constprop.0+0x430> - 1c9e: fbbc079b addiw a5,s8,-69 - 1ca2: 0ff7f793 zext.b a5,a5 - 1ca6: 4689 li a3,2 - 1ca8: eef6e2e3 bltu a3,a5,1b8c <_vscanf_core.constprop.0+0x214> - _skip_space(ctx); - 1cac: 856e mv a0,s11 - 1cae: f8ea sd s10,112(sp) - 1cb0: c55ff0ef jal 1904 <_skip_space> - if (ctx->ungotten >= 0) - 1cb4: 018da783 lw a5,24(s11) - 1cb8: 1207dd63 bgez a5,1df2 <_vscanf_core.constprop.0+0x47a> - 1cbc: 856e mv a0,s11 - 1cbe: c01ff0ef jal 18be <_in_char.part.0> - if (c == '-' || c == '+') - 1cc2: fd55069b addiw a3,a0,-43 - 1cc6: ffd6f613 andi a2,a3,-3 - 1cca: 2601 sext.w a2,a2 - 1ccc: 87aa mv a5,a0 - 1cce: 12060c63 beqz a2,1e06 <_vscanf_core.constprop.0+0x48e> - while (c != -1 && i < 63) - 1cd2: 567d li a2,-1 - 1cd4: 16c50963 beq a0,a2,1e46 <_vscanf_core.constprop.0+0x4ce> - 1cd8: fce6 sd s9,120(sp) - int i = 0, c = _in_char(ctx); - 1cda: 4d01 li s10,0 - 1cdc: 80000937 lui s2,0x80000 - 1ce0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff718f> - 1ce2: 0932 slli s2,s2,0xc - 1ce4: 80194913 xori s2,s2,-2047 - 1ce8: 093e slli s2,s2,0xf - 1cea: 02010813 addi a6,sp,32 - 1cee: 01a80cb3 add s9,a6,s10 - 1cf2: 03a00c13 li s8,58 - 1cf6: 1935 addi s2,s2,-19 - 1cf8: a831 j 1d14 <_vscanf_core.constprop.0+0x39c> - 1cfa: bc5ff0ef jal 18be <_in_char.part.0> - while (c != -1 && i < 63) - 1cfe: 577d li a4,-1 - 1d00: 87aa mv a5,a0 - 1d02: 2ee50563 beq a0,a4,1fec <_vscanf_core.constprop.0+0x674> - 1d06: 03f00713 li a4,63 - 1d0a: 0c85 addi s9,s9,1 - 1d0c: 1eed0e63 beq s10,a4,1f08 <_vscanf_core.constprop.0+0x590> - 1d10: fd57869b addiw a3,a5,-43 - int c = ctx->ungotten; - 1d14: 00d95633 srl a2,s2,a3 - 1d18: 856e mv a0,s11 - 1d1a: 8a05 andi a2,a2,1 - 1d1c: 1edc6663 bltu s8,a3,1f08 <_vscanf_core.constprop.0+0x590> - 1d20: 1e060463 beqz a2,1f08 <_vscanf_core.constprop.0+0x590> - num_buf[i++] = (char)c; - 1d24: 00fc8023 sb a5,0(s9) - if (ctx->ungotten >= 0) - 1d28: 018da783 lw a5,24(s11) - num_buf[i++] = (char)c; - 1d2c: 2d05 addiw s10,s10,1 - if (ctx->ungotten >= 0) - 1d2e: fc07c6e3 bltz a5,1cfa <_vscanf_core.constprop.0+0x382> - ctx->ungotten = -1; - 1d32: 577d li a4,-1 - 1d34: 00edac23 sw a4,24(s11) - while (c != -1 && i < 63) - 1d38: b7f9 j 1d06 <_vscanf_core.constprop.0+0x38e> - if (*p == 'h') - 1d3a: 00144c03 lbu s8,1(s0) - int len_mod = 0; - 1d3e: ec02 sd zero,24(sp) - if (*p == 'h') - 1d40: d4bc1be3 bne s8,a1,1a96 <_vscanf_core.constprop.0+0x11e> - char spec = *p++; - 1d44: 00244c03 lbu s8,2(s0) - p++; - 1d48: 00240b93 addi s7,s0,2 - 1d4c: b3a9 j 1a96 <_vscanf_core.constprop.0+0x11e> - 1d4e: fce6 sd s9,120(sp) - 1d50: f8ea sd s10,112(sp) - int count = (width > 0) ? width : 1; - 1d52: 00090c1b sext.w s8,s2 - 1d56: 0d205a63 blez s2,1e2a <_vscanf_core.constprop.0+0x4b2> - char *buf = suppress ? NULL : va_arg(ap, char *); - 1d5a: 4d01 li s10,0 - 1d5c: 06098d63 beqz s3,1dd6 <_vscanf_core.constprop.0+0x45e> - for (int i = 0; i < count; i++) - 1d60: 9c6a add s8,s8,s10 - if (c == -1) - 1d62: 5cfd li s9,-1 - if (ctx->ungotten >= 0) - 1d64: 018da783 lw a5,24(s11) - ctx->ungotten = -1; - 1d68: 856e mv a0,s11 - if (ctx->ungotten >= 0) - 1d6a: 0207dc63 bgez a5,1da2 <_vscanf_core.constprop.0+0x42a> - 1d6e: b51ff0ef jal 18be <_in_char.part.0> - 1d72: 87aa mv a5,a0 - if (c == -1) - 1d74: 0b950d63 beq a0,s9,1e2e <_vscanf_core.constprop.0+0x4b6> - if (!suppress) - 1d78: 00099463 bnez s3,1d80 <_vscanf_core.constprop.0+0x408> - buf[i] = (char)c; - 1d7c: 00fd0023 sb a5,0(s10) - for (int i = 0; i < count; i++) - 1d80: 0d05 addi s10,s10,1 - 1d82: ffac11e3 bne s8,s10,1d64 <_vscanf_core.constprop.0+0x3ec> - while (*p) - 1d86: 001bc783 lbu a5,1(s7) - if (!suppress) - 1d8a: 00099363 bnez s3,1d90 <_vscanf_core.constprop.0+0x418> - assigned++; - 1d8e: 2b05 addiw s6,s6,1 - 1d90: 794a ld s2,176(sp) - 1d92: 79aa ld s3,168(sp) - 1d94: 6baa ld s7,136(sp) - 1d96: 6c0a ld s8,128(sp) - 1d98: 7ce6 ld s9,120(sp) - 1d9a: 7d46 ld s10,112(sp) - while (*p) - 1d9c: c00793e3 bnez a5,19a2 <_vscanf_core.constprop.0+0x2a> - 1da0: b935 j 19dc <_vscanf_core.constprop.0+0x64> - ctx->ungotten = -1; - 1da2: 019dac23 sw s9,24(s11) - if (c == -1) - 1da6: bfc9 j 1d78 <_vscanf_core.constprop.0+0x400> - 1da8: 640e ld s0,192(sp) - 1daa: 74ea ld s1,184(sp) - 1dac: 794a ld s2,176(sp) - 1dae: 79aa ld s3,168(sp) - 1db0: 7a0a ld s4,160(sp) - 1db2: 6aea ld s5,152(sp) - 1db4: 6baa ld s7,136(sp) - 1db6: 6c0a ld s8,128(sp) - 1db8: 7da6 ld s11,104(sp) - 1dba: b135 j 19e6 <_vscanf_core.constprop.0+0x6e> - int width = -1; - 1dbc: 597d li s2,-1 - 1dbe: b975 j 1a7a <_vscanf_core.constprop.0+0x102> - if (!suppress) - 1dc0: 3c099c63 bnez s3,2198 <_vscanf_core.constprop.0+0x820> - buf[i] = '\0'; - 1dc4: 67e2 ld a5,24(sp) - 1dc6: 01a786b3 add a3,a5,s10 - 1dca: 00068023 sb zero,0(a3) - while (*p) - 1dce: 001bc783 lbu a5,1(s7) - assigned++; - 1dd2: 2b05 addiw s6,s6,1 - 1dd4: bf75 j 1d90 <_vscanf_core.constprop.0+0x418> - char *buf = suppress ? NULL : va_arg(ap, char *); - 1dd6: 67a2 ld a5,8(sp) - 1dd8: 0007bd03 ld s10,0(a5) - 1ddc: 07a1 addi a5,a5,8 - 1dde: e43e sd a5,8(sp) - 1de0: b741 j 1d60 <_vscanf_core.constprop.0+0x3e8> - ctx->ungotten = -1; - 1de2: 56fd li a3,-1 - 1de4: 00ddac23 sw a3,24(s11) - while (c != -1 && !isspace(c)) - 1de8: bb11 j 1afc <_vscanf_core.constprop.0+0x184> - ctx->ungotten = -1; - 1dea: 56fd li a3,-1 - 1dec: 00ddac23 sw a3,24(s11) - return c; - 1df0: b3d1 j 1bb4 <_vscanf_core.constprop.0+0x23c> - if (c == '-' || c == '+') - 1df2: fd57869b addiw a3,a5,-43 - 1df6: ffd6f613 andi a2,a3,-3 - ctx->ungotten = -1; - 1dfa: 55fd li a1,-1 - 1dfc: 00bdac23 sw a1,24(s11) - if (c == '-' || c == '+') - 1e00: 2601 sext.w a2,a2 - 1e02: ec061be3 bnez a2,1cd8 <_vscanf_core.constprop.0+0x360> - num_buf[i++] = (char)c; - 1e06: 02f10023 sb a5,32(sp) - if (ctx->ungotten >= 0) - 1e0a: 018da783 lw a5,24(s11) - 1e0e: 2207da63 bgez a5,2042 <_vscanf_core.constprop.0+0x6ca> - 1e12: 856e mv a0,s11 - 1e14: aabff0ef jal 18be <_in_char.part.0> - while (c != -1 && i < 63) - 1e18: 567d li a2,-1 - 1e1a: 87aa mv a5,a0 - num_buf[i++] = (char)c; - 1e1c: 4d05 li s10,1 - 1e1e: fd55069b addiw a3,a0,-43 - while (c != -1 && i < 63) - 1e22: 3ac50163 beq a0,a2,21c4 <_vscanf_core.constprop.0+0x84c> - 1e26: fce6 sd s9,120(sp) - 1e28: bd55 j 1cdc <_vscanf_core.constprop.0+0x364> - int count = (width > 0) ? width : 1; - 1e2a: 4c05 li s8,1 - 1e2c: b73d j 1d5a <_vscanf_core.constprop.0+0x3e2> - 1e2e: 640e ld s0,192(sp) - 1e30: 74ea ld s1,184(sp) - 1e32: 794a ld s2,176(sp) - 1e34: 79aa ld s3,168(sp) - 1e36: 7a0a ld s4,160(sp) - 1e38: 6aea ld s5,152(sp) - 1e3a: 6baa ld s7,136(sp) - 1e3c: 6c0a ld s8,128(sp) - 1e3e: 7ce6 ld s9,120(sp) - 1e40: 7d46 ld s10,112(sp) - 1e42: 7da6 ld s11,104(sp) - 1e44: b64d j 19e6 <_vscanf_core.constprop.0+0x6e> - 1e46: 640e ld s0,192(sp) - 1e48: 74ea ld s1,184(sp) - 1e4a: 794a ld s2,176(sp) - 1e4c: 79aa ld s3,168(sp) - 1e4e: 7a0a ld s4,160(sp) - 1e50: 6aea ld s5,152(sp) - 1e52: 6baa ld s7,136(sp) - 1e54: 6c0a ld s8,128(sp) - 1e56: 7d46 ld s10,112(sp) - 1e58: 7da6 ld s11,104(sp) - 1e5a: b671 j 19e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - 1e5c: 018dac23 sw s8,24(s11) - while (c != -1 && !isspace(c)) - 1e60: b9e5 j 1b58 <_vscanf_core.constprop.0+0x1e0> - ctx->ungotten = -1; - 1e62: 57fd li a5,-1 - 1e64: 00fdac23 sw a5,24(s11) - while (c != -1 && i < 63) - 1e68: bbd9 j 1c3e <_vscanf_core.constprop.0+0x2c6> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1e6a: f9f3069b addiw a3,t1,-97 - 1e6e: 4795 li a5,5 - 1e70: 06d7f263 bgeu a5,a3,1ed4 <_vscanf_core.constprop.0+0x55c> - 1e74: fbf3031b addiw t1,t1,-65 - 1e78: 4795 li a5,5 - 1e7a: 0467fd63 bgeu a5,t1,1ed4 <_vscanf_core.constprop.0+0x55c> - int x = (c == 'x' || c == 'X'); - 1e7e: 07800693 li a3,120 - 1e82: 18d50763 beq a0,a3,2010 <_vscanf_core.constprop.0+0x698> - 1e86: fa850693 addi a3,a0,-88 - 1e8a: 0016b693 seqz a3,a3 - if (base == 0 && i == 1 && num_buf[0] == '0' && x) - 1e8e: 4301 li t1,0 - 1e90: 32061663 bnez a2,21bc <_vscanf_core.constprop.0+0x844> - 1e94: 4785 li a5,1 - 1e96: 4601 li a2,0 - 1e98: d6fd1ce3 bne s10,a5,1c10 <_vscanf_core.constprop.0+0x298> - 1e9c: 02014e03 lbu t3,32(sp) - 1ea0: 03000793 li a5,48 - 1ea4: d6fe16e3 bne t3,a5,1c10 <_vscanf_core.constprop.0+0x298> - 1ea8: d60684e3 beqz a3,1c10 <_vscanf_core.constprop.0+0x298> - base = 16; - 1eac: 4641 li a2,16 - if (width > 0 && i >= width) - 1eae: d7a919e3 bne s2,s10,1c20 <_vscanf_core.constprop.0+0x2a8> - 1eb2: bb59 j 1c48 <_vscanf_core.constprop.0+0x2d0> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1eb4: f9f3069b addiw a3,t1,-97 - 1eb8: 4795 li a5,5 - 1eba: 02d7f263 bgeu a5,a3,1ede <_vscanf_core.constprop.0+0x566> - 1ebe: fbf3031b addiw t1,t1,-65 - 1ec2: 0467f063 bgeu a5,t1,1f02 <_vscanf_core.constprop.0+0x58a> - int x = (c == 'x' || c == 'X'); - 1ec6: 07800693 li a3,120 - 1eca: fad51ee3 bne a0,a3,1e86 <_vscanf_core.constprop.0+0x50e> - 1ece: 4301 li t1,0 - 1ed0: 4685 li a3,1 - 1ed2: b7c9 j 1e94 <_vscanf_core.constprop.0+0x51c> - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1ed4: 4305 li t1,1 - int x = (c == 'x' || c == 'X'); - 1ed6: 4681 li a3,0 - if (width > 0 && i >= width) - 1ed8: d3204ee3 bgtz s2,1c14 <_vscanf_core.constprop.0+0x29c> - 1edc: bb35 j 1c18 <_vscanf_core.constprop.0+0x2a0> - int x = (c == 'x' || c == 'X'); - 1ede: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1ee0: 4305 li t1,1 - if (width > 0 && i >= width) - 1ee2: d32049e3 bgtz s2,1c14 <_vscanf_core.constprop.0+0x29c> - 1ee6: bb0d j 1c18 <_vscanf_core.constprop.0+0x2a0> - 1ee8: 4301 li t1,0 - int x = (c == 'x' || c == 'X'); - 1eea: 4685 li a3,1 - if (width > 0 && i >= width) - 1eec: d32044e3 bgtz s2,1c14 <_vscanf_core.constprop.0+0x29c> - 1ef0: bb05 j 1c20 <_vscanf_core.constprop.0+0x2a8> - if (!suppress) - 1ef2: c8099be3 bnez s3,1b88 <_vscanf_core.constprop.0+0x210> - buf[i] = '\0'; - 1ef6: 67e2 ld a5,24(sp) - 1ef8: 00078023 sb zero,0(a5) - ctx->ungotten = c; - 1efc: 00adac23 sw a0,24(s11) - if (i > 0 && !suppress) - 1f00: b171 j 1b8c <_vscanf_core.constprop.0+0x214> - int x = (c == 'x' || c == 'X'); - 1f02: 4681 li a3,0 - int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1f04: 4305 li t1,1 - 1f06: b779 j 1e94 <_vscanf_core.constprop.0+0x51c> - num_buf[i] = '\0'; - 1f08: 040d0713 addi a4,s10,64 - 1f0c: 1014 addi a3,sp,32 - 1f0e: 96ba add a3,a3,a4 - 1f10: fc068023 sb zero,-64(a3) - ctx->ungotten = c; - 1f14: 00fdac23 sw a5,24(s11) - if (i == 0) - 1f18: f00d0be3 beqz s10,1e2e <_vscanf_core.constprop.0+0x4b6> - 1f1c: 7ce6 ld s9,120(sp) - if (!suppress) - 1f1e: d40992e3 bnez s3,1c62 <_vscanf_core.constprop.0+0x2ea> - if (*str == '-') - 1f22: 02014603 lbu a2,32(sp) - 1f26: 02d00793 li a5,45 - 1f2a: 1af60963 beq a2,a5,20dc <_vscanf_core.constprop.0+0x764> - else if (*str == '+') - 1f2e: 02b00793 li a5,43 - 1f32: 20f60a63 beq a2,a5,2146 <_vscanf_core.constprop.0+0x7ce> - 1f36: 00005797 auipc a5,0x5 - 1f3a: a427b587 fld fa1,-1470(a5) # 6978 - 1f3e: 101c addi a5,sp,32 - while (*str >= '0' && *str <= '9') - 1f40: fd06069b addiw a3,a2,-48 - 1f44: 0ff6f513 zext.b a0,a3 - 1f48: 45a5 li a1,9 - 1f4a: f20007d3 fmv.d.x fa5,zero - 1f4e: 02a5e463 bltu a1,a0,1f76 <_vscanf_core.constprop.0+0x5fe> - 1f52: 00005717 auipc a4,0x5 - 1f56: a2e73707 fld fa4,-1490(a4) # 6980 - 1f5a: 4525 li a0,9 - 1f5c: 0017c603 lbu a2,1(a5) - val = val * 10.0 + (*str - '0'); - 1f60: d20686d3 fcvt.d.w fa3,a3 - str++; - 1f64: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 1f66: fd06069b addiw a3,a2,-48 - 1f6a: 0ff6f593 zext.b a1,a3 - val = val * 10.0 + (*str - '0'); - 1f6e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 - while (*str >= '0' && *str <= '9') - 1f72: feb575e3 bgeu a0,a1,1f5c <_vscanf_core.constprop.0+0x5e4> - if (*str == '.') - 1f76: 02e00693 li a3,46 - 1f7a: 16d60a63 beq a2,a3,20ee <_vscanf_core.constprop.0+0x776> - if (*str == 'e' || *str == 'E') - 1f7e: 0007c683 lbu a3,0(a5) - 1f82: 0df6f693 andi a3,a3,223 - 1f86: 04500613 li a2,69 - 1f8a: 0cc68463 beq a3,a2,2052 <_vscanf_core.constprop.0+0x6da> - *va_arg(ap, double *) = val; - 1f8e: 6722 ld a4,8(sp) - if (len_mod == 1) - 1f90: 4685 li a3,1 - return sign * val; - 1f92: 12b7f7d3 fmul.d fa5,fa5,fa1 - *va_arg(ap, double *) = val; - 1f96: 631c ld a5,0(a4) - *va_arg(ap, int64 *) = val; - 1f98: 0721 addi a4,a4,8 - 1f9a: e43a sd a4,8(sp) - if (len_mod == 1) - 1f9c: 6762 ld a4,24(sp) - 1f9e: 18d70b63 beq a4,a3,2134 <_vscanf_core.constprop.0+0x7bc> - *va_arg(ap, float *) = (float)val; - 1fa2: 4017f7d3 fcvt.s.d fa5,fa5 - assigned++; - 1fa6: 2b05 addiw s6,s6,1 - *va_arg(ap, float *) = (float)val; - 1fa8: 00f7a027 fsw fa5,0(a5) - 1fac: b95d j 1c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i++] = (char)c; - 1fae: 02a10023 sb a0,32(sp) - if (ctx->ungotten >= 0) - 1fb2: 018da503 lw a0,24(s11) - 1fb6: 06055463 bgez a0,201e <_vscanf_core.constprop.0+0x6a6> - 1fba: 856e mv a0,s11 - 1fbc: 903ff0ef jal 18be <_in_char.part.0> - num_buf[i++] = (char)c; - 1fc0: 4d05 li s10,1 - 1fc2: b101 j 1bc2 <_vscanf_core.constprop.0+0x24a> - int64 val = strtoll(num_buf, NULL, base); - 1fc4: 4581 li a1,0 - 1fc6: 1008 addi a0,sp,32 - 1fc8: 696030ef jal 565e - *va_arg(ap, int64 *) = val; - 1fcc: 67a2 ld a5,8(sp) - if (len_mod == 2) - 1fce: 6762 ld a4,24(sp) - 1fd0: 4689 li a3,2 - *va_arg(ap, int64 *) = val; - 1fd2: 07a1 addi a5,a5,8 - if (len_mod == 2) - 1fd4: 16d70363 beq a4,a3,213a <_vscanf_core.constprop.0+0x7c2> - *va_arg(ap, int64 *) = val; - 1fd8: 6722 ld a4,8(sp) - else if (len_mod == 1) - 1fda: 4605 li a2,1 - *va_arg(ap, int64 *) = val; - 1fdc: 6314 ld a3,0(a4) - else if (len_mod == 1) - 1fde: 6762 ld a4,24(sp) - 1fe0: 16c70163 beq a4,a2,2142 <_vscanf_core.constprop.0+0x7ca> - *va_arg(ap, int *) = (int)val; - 1fe4: c288 sw a0,0(a3) - assigned++; - 1fe6: 2b05 addiw s6,s6,1 - 1fe8: e43e sd a5,8(sp) - 1fea: b9a5 j 1c62 <_vscanf_core.constprop.0+0x2ea> - num_buf[i] = '\0'; - 1fec: 040d0793 addi a5,s10,64 - 1ff0: 1018 addi a4,sp,32 - 1ff2: 00e785b3 add a1,a5,a4 - 1ff6: fc058023 sb zero,-64(a1) - if (i == 0) - 1ffa: 7ce6 ld s9,120(sp) - 1ffc: b70d j 1f1e <_vscanf_core.constprop.0+0x5a6> - num_buf[i] = '\0'; - 1ffe: 040d0793 addi a5,s10,64 - 2002: 1018 addi a4,sp,32 - 2004: 00e78833 add a6,a5,a4 - 2008: fc080023 sb zero,-64(a6) - if (i == 0) - 200c: 7ce6 ld s9,120(sp) - 200e: b981 j 1c5e <_vscanf_core.constprop.0+0x2e6> - int x = (c == 'x' || c == 'X'); - 2010: 4301 li t1,0 - 2012: 4685 li a3,1 - if (width > 0 && i >= width) - 2014: c12040e3 bgtz s2,1c14 <_vscanf_core.constprop.0+0x29c> - 2018: b101 j 1c18 <_vscanf_core.constprop.0+0x2a0> - int assigned = 0; - 201a: 4b01 li s6,0 - 201c: b2e9 j 19e6 <_vscanf_core.constprop.0+0x6e> - ctx->ungotten = -1; - 201e: 56fd li a3,-1 - 2020: fce6 sd s9,120(sp) - 2022: 00ddac23 sw a3,24(s11) - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 2026: 07800693 li a3,120 - 202a: 4641 li a2,16 - num_buf[i++] = (char)c; - 202c: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 202e: badc09e3 beq s8,a3,1be0 <_vscanf_core.constprop.0+0x268> - 2032: 06900693 li a3,105 - 2036: 4629 li a2,10 - num_buf[i++] = (char)c; - 2038: 4d05 li s10,1 - int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 203a: badc13e3 bne s8,a3,1be0 <_vscanf_core.constprop.0+0x268> - 203e: 4601 li a2,0 - 2040: b645 j 1be0 <_vscanf_core.constprop.0+0x268> - ctx->ungotten = -1; - 2042: 56fd li a3,-1 - 2044: fce6 sd s9,120(sp) - 2046: 00ddac23 sw a3,24(s11) - num_buf[i++] = (char)c; - 204a: 4d05 li s10,1 - 204c: fd57869b addiw a3,a5,-43 - 2050: b171 j 1cdc <_vscanf_core.constprop.0+0x364> - if (*str == '-') - 2052: 0017c583 lbu a1,1(a5) - 2056: 02d00693 li a3,45 - 205a: 0ed58f63 beq a1,a3,2158 <_vscanf_core.constprop.0+0x7e0> - else if (*str == '+') - 205e: 02b00693 li a3,43 - 2062: 10d58e63 beq a1,a3,217e <_vscanf_core.constprop.0+0x806> - while (*str >= '0' && *str <= '9') - 2066: fd05861b addiw a2,a1,-48 - 206a: 0ff67513 zext.b a0,a2 - 206e: 45a5 li a1,9 - str++; - 2070: 00178693 addi a3,a5,1 - int esign = 1; - 2074: 4805 li a6,1 - while (*str >= '0' && *str <= '9') - 2076: 04a5ec63 bltu a1,a0,20ce <_vscanf_core.constprop.0+0x756> - 207a: 4525 li a0,9 - 207c: 0016c583 lbu a1,1(a3) - eval = eval * 10 + (*str - '0'); - 2080: 0029979b slliw a5,s3,0x2 - 2084: 013787bb addw a5,a5,s3 - 2088: 0017979b slliw a5,a5,0x1 - 208c: 00f609bb addw s3,a2,a5 - while (*str >= '0' && *str <= '9') - 2090: fd05861b addiw a2,a1,-48 - 2094: 0ff67593 zext.b a1,a2 - str++; - 2098: 0685 addi a3,a3,1 - while (*str >= '0' && *str <= '9') - 209a: feb571e3 bgeu a0,a1,207c <_vscanf_core.constprop.0+0x704> - while (eval--) - 209e: fff9879b addiw a5,s3,-1 - 20a2: 12098463 beqz s3,21ca <_vscanf_core.constprop.0+0x852> - double p = 1.0; - 20a6: 00005717 auipc a4,0x5 - 20aa: 8d273687 fld fa3,-1838(a4) # 6978 - 20ae: 00005717 auipc a4,0x5 - 20b2: 8d273707 fld fa4,-1838(a4) # 6980 - while (eval--) - 20b6: 56fd li a3,-1 - 20b8: 37fd addiw a5,a5,-1 - p *= 10.0; - 20ba: 12e6f6d3 fmul.d fa3,fa3,fa4 - while (eval--) - 20be: fed79de3 bne a5,a3,20b8 <_vscanf_core.constprop.0+0x740> - if (esign == 1) - 20c2: 4785 li a5,1 - 20c4: 00f80963 beq a6,a5,20d6 <_vscanf_core.constprop.0+0x75e> - val /= p; - 20c8: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 20cc: b5c9 j 1f8e <_vscanf_core.constprop.0+0x616> - double p = 1.0; - 20ce: 00005797 auipc a5,0x5 - 20d2: 8aa7b687 fld fa3,-1878(a5) # 6978 - val *= p; - 20d6: 12d7f7d3 fmul.d fa5,fa5,fa3 - 20da: bd55 j 1f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 20dc: 00005797 auipc a5,0x5 - 20e0: 8947b587 fld fa1,-1900(a5) # 6970 - 20e4: 02114603 lbu a2,33(sp) - str++; - 20e8: 02110793 addi a5,sp,33 - 20ec: bd91 j 1f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 20ee: 0017c683 lbu a3,1(a5) - 20f2: 45a5 li a1,9 - str++; - 20f4: 0785 addi a5,a5,1 - while (*str >= '0' && *str <= '9') - 20f6: fd06861b addiw a2,a3,-48 - 20fa: 0ff67513 zext.b a0,a2 - 20fe: e8a5e2e3 bltu a1,a0,1f82 <_vscanf_core.constprop.0+0x60a> - double div = 10.0; - 2102: 00005717 auipc a4,0x5 - 2106: 87e73707 fld fa4,-1922(a4) # 6980 - 210a: 22e70653 fmv.d fa2,fa4 - while (*str >= '0' && *str <= '9') - 210e: 4525 li a0,9 - val += (*str - '0') / div; - 2110: d20606d3 fcvt.d.w fa3,a2 - while (*str >= '0' && *str <= '9') - 2114: 0017c683 lbu a3,1(a5) - str++; - 2118: 0785 addi a5,a5,1 - val += (*str - '0') / div; - 211a: 1ac6f6d3 fdiv.d fa3,fa3,fa2 - while (*str >= '0' && *str <= '9') - 211e: fd06861b addiw a2,a3,-48 - 2122: 0ff67593 zext.b a1,a2 - div *= 10.0; - 2126: 12e67653 fmul.d fa2,fa2,fa4 - val += (*str - '0') / div; - 212a: 02d7f7d3 fadd.d fa5,fa5,fa3 - while (*str >= '0' && *str <= '9') - 212e: feb571e3 bgeu a0,a1,2110 <_vscanf_core.constprop.0+0x798> - 2132: bd81 j 1f82 <_vscanf_core.constprop.0+0x60a> - *va_arg(ap, double *) = val; - 2134: a39c fsd fa5,0(a5) - assigned++; - 2136: 2b05 addiw s6,s6,1 - 2138: b62d j 1c62 <_vscanf_core.constprop.0+0x2ea> - *va_arg(ap, int64 *) = val; - 213a: 6722 ld a4,8(sp) - 213c: 6314 ld a3,0(a4) - 213e: e288 sd a0,0(a3) - 2140: b55d j 1fe6 <_vscanf_core.constprop.0+0x66e> - *va_arg(ap, long *) = (long)val; - 2142: e288 sd a0,0(a3) - 2144: b54d j 1fe6 <_vscanf_core.constprop.0+0x66e> - while (*str >= '0' && *str <= '9') - 2146: 00005797 auipc a5,0x5 - 214a: 8327b587 fld fa1,-1998(a5) # 6978 - 214e: 02114603 lbu a2,33(sp) - str++; - 2152: 02110793 addi a5,sp,33 - 2156: b3ed j 1f40 <_vscanf_core.constprop.0+0x5c8> - while (*str >= '0' && *str <= '9') - 2158: 0027c583 lbu a1,2(a5) - str++; - 215c: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 2160: 4525 li a0,9 - 2162: fd05861b addiw a2,a1,-48 - 2166: 0ff67793 zext.b a5,a2 - esign = -1; - 216a: 587d li a6,-1 - while (*str >= '0' && *str <= '9') - 216c: f0f577e3 bgeu a0,a5,207a <_vscanf_core.constprop.0+0x702> - double p = 1.0; - 2170: 00005797 auipc a5,0x5 - 2174: 8087b687 fld fa3,-2040(a5) # 6978 - val /= p; - 2178: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 217c: bd09 j 1f8e <_vscanf_core.constprop.0+0x616> - while (*str >= '0' && *str <= '9') - 217e: 0027c583 lbu a1,2(a5) - str++; - 2182: 00278693 addi a3,a5,2 - while (*str >= '0' && *str <= '9') - 2186: 4525 li a0,9 - 2188: fd05861b addiw a2,a1,-48 - 218c: 0ff67793 zext.b a5,a2 - 2190: f2f56fe3 bltu a0,a5,20ce <_vscanf_core.constprop.0+0x756> - int esign = 1; - 2194: 4805 li a6,1 - 2196: b5d5 j 207a <_vscanf_core.constprop.0+0x702> - while (*p) - 2198: 001bc783 lbu a5,1(s7) - 219c: bed5 j 1d90 <_vscanf_core.constprop.0+0x418> - if (!suppress) - 219e: 9e0997e3 bnez s3,1b8c <_vscanf_core.constprop.0+0x214> - buf[i] = '\0'; - 21a2: 67e2 ld a5,24(sp) - 21a4: 00078023 sb zero,0(a5) - 21a8: b2d5 j 1b8c <_vscanf_core.constprop.0+0x214> - num_buf[i] = '\0'; - 21aa: 040d0793 addi a5,s10,64 - 21ae: 1018 addi a4,sp,32 - 21b0: 97ba add a5,a5,a4 - 21b2: fc078023 sb zero,-64(a5) - if (i == 0) - 21b6: aa0d14e3 bnez s10,1c5e <_vscanf_core.constprop.0+0x2e6> - 21ba: b171 j 1e46 <_vscanf_core.constprop.0+0x4ce> - 21bc: 4641 li a2,16 - if (width > 0 && i >= width) - 21be: a5204be3 bgtz s2,1c14 <_vscanf_core.constprop.0+0x29c> - 21c2: bc99 j 1c18 <_vscanf_core.constprop.0+0x2a0> - num_buf[i] = '\0'; - 21c4: 020100a3 sb zero,33(sp) - if (i == 0) - 21c8: bb99 j 1f1e <_vscanf_core.constprop.0+0x5a6> - double p = 1.0; - 21ca: 00004797 auipc a5,0x4 - 21ce: 7ae7b687 fld fa3,1966(a5) # 6978 - 21d2: bdc5 j 20c2 <_vscanf_core.constprop.0+0x74a> - buf[i] = '\0'; - 21d4: 67e2 ld a5,24(sp) - 21d6: 01a786b3 add a3,a5,s10 - 21da: 00068023 sb zero,0(a3) - ctx->ungotten = c; - 21de: 00adac23 sw a0,24(s11) - while (*p) - 21e2: 001bc783 lbu a5,1(s7) - 21e6: b6f5 j 1dd2 <_vscanf_core.constprop.0+0x45a> - -00000000000021e8 <_out_char>: -{ - 21e8: 7179 addi sp,sp,-48 - 21ea: ec26 sd s1,24(sp) - if (ctx->stream) - 21ec: 6d04 ld s1,24(a0) -{ - 21ee: f022 sd s0,32(sp) - 21f0: f406 sd ra,40(sp) - 21f2: 842a mv s0,a0 - 21f4: 872e mv a4,a1 - if (ctx->stream) - 21f6: c0a1 beqz s1,2236 <_out_char+0x4e> - 21f8: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 21fa: 41c4a903 lw s2,1052(s1) - 21fe: 4789 li a5,2 - 2200: 04f90d63 beq s2,a5,225a <_out_char+0x72> - stream->buffer[stream->buf_write_pos++] = (char)c; - 2204: 4104a783 lw a5,1040(s1) - if (stream->buf_write_pos >= BUFSIZ) - 2208: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 220c: 0017861b addiw a2,a5,1 - 2210: 40c4a823 sw a2,1040(s1) - 2214: 97a6 add a5,a5,s1 - 2216: 00b78823 sb a1,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 221a: 08c6c063 blt a3,a2,229a <_out_char+0xb2> - else if (stream->buf_mode == 1 && c == '\n') - 221e: 4785 li a5,1 - 2220: 04f90a63 beq s2,a5,2274 <_out_char+0x8c> - ctx->written++; - 2224: 681c ld a5,16(s0) - 2226: 6942 ld s2,16(sp) -} - 2228: 70a2 ld ra,40(sp) - ctx->written++; - 222a: 0785 addi a5,a5,1 - 222c: e81c sd a5,16(s0) -} - 222e: 7402 ld s0,32(sp) - 2230: 64e2 ld s1,24(sp) - 2232: 6145 addi sp,sp,48 - 2234: 8082 ret - if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 2236: 6514 ld a3,8(a0) - 2238: 691c ld a5,16(a0) - 223a: ca89 beqz a3,224c <_out_char+0x64> - 223c: 16fd addi a3,a3,-1 - 223e: 00d7f763 bgeu a5,a3,224c <_out_char+0x64> - ctx->buf[ctx->written] = c; - 2242: 6114 ld a3,0(a0) - 2244: 97b6 add a5,a5,a3 - 2246: 00b78023 sb a1,0(a5) - ctx->written++; - 224a: 691c ld a5,16(a0) - 224c: 0785 addi a5,a5,1 -} - 224e: 70a2 ld ra,40(sp) - ctx->written++; - 2250: e81c sd a5,16(s0) -} - 2252: 7402 ld s0,32(sp) - 2254: 64e2 ld s1,24(sp) - 2256: 6145 addi sp,sp,48 - 2258: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 225a: 4088 lw a0,0(s1) - 225c: 4605 li a2,1 - 225e: 00f10593 addi a1,sp,15 - char ch = (char)c; - 2262: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 2266: e8bfe0ef jal 10f0 - 226a: 4785 li a5,1 - 226c: faf50ce3 beq a0,a5,2224 <_out_char+0x3c> - stream->error = 1; - 2270: c49c sw a5,8(s1) - return EOF; - 2272: bf4d j 2224 <_out_char+0x3c> - else if (stream->buf_mode == 1 && c == '\n') - 2274: 47a9 li a5,10 - 2276: faf597e3 bne a1,a5,2224 <_out_char+0x3c> - if (stream->buf_write_pos > 0) - 227a: fac055e3 blez a2,2224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 227e: 4088 lw a0,0(s1) - 2280: 01048593 addi a1,s1,16 - 2284: e6dfe0ef jal 10f0 - if (ret < stream->buf_write_pos) - 2288: 4104a783 lw a5,1040(s1) - 228c: 02f55063 bge a0,a5,22ac <_out_char+0xc4> - stream->error = 1; - 2290: 0124a423 sw s2,8(s1) - stream->buf_write_pos = 0; - 2294: 4004a823 sw zero,1040(s1) - return EOF; - 2298: b771 j 2224 <_out_char+0x3c> - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 229a: 4088 lw a0,0(s1) - 229c: 01048593 addi a1,s1,16 - 22a0: e51fe0ef jal 10f0 - if (ret < stream->buf_write_pos) - 22a4: 4104a783 lw a5,1040(s1) - 22a8: 00f54563 blt a0,a5,22b2 <_out_char+0xca> - stream->buf_write_pos = 0; - 22ac: 4004a823 sw zero,1040(s1) - 22b0: bf95 j 2224 <_out_char+0x3c> - stream->error = 1; - 22b2: 4785 li a5,1 - 22b4: c49c sw a5,8(s1) - stream->buf_write_pos = 0; - 22b6: 4004a823 sw zero,1040(s1) - return EOF; - 22ba: b7ad j 2224 <_out_char+0x3c> - -00000000000022bc : - "75767778798081828384858687888990919293949596979899" -}; - -STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) -{ - stbsp__period = pperiod; - 22bc: 00006797 auipc a5,0x6 - 22c0: c5c78793 addi a5,a5,-932 # 7f18 - 22c4: 0cb78623 sb a1,204(a5) - stbsp__comma = pcomma; - 22c8: 0ca786a3 sb a0,205(a5) -} - 22cc: 8082 ret - -00000000000022ce : - - 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) -{ - 22ce: 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; - 22d2: 808087b7 lui a5,0x80808 - if (((v ^ 0x25252525) - 0x01010101) & c) - 22d6: 252523b7 lui t2,0x25252 - 22da: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x252496b5> -{ - 22de: 29913c23 sd s9,664(sp) - 22e2: 29b13423 sd s11,648(sp) - int tlen = 0; - 22e6: 4c81 li s9,0 - if (((v ^ 0x25252525) - 0x01010101) & c) - 22e8: feff0db7 lui s11,0xfeff0 - c = (~v) & 0x80808080; - 22ec: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff210> -{ - 22f0: 2e813023 sd s0,736(sp) - 22f4: 2c913c23 sd s1,728(sp) - 22f8: 2d213823 sd s2,720(sp) - 22fc: 2d313423 sd s3,712(sp) - 2300: 2b713423 sd s7,680(sp) - 2304: 2b813023 sd s8,672(sp) - 2308: 29a13823 sd s10,656(sp) - 230c: 2e113423 sd ra,744(sp) - 2310: 8d66 mv s10,s9 - 2312: 8432 mv s0,a2 - 2314: 8c9e mv s9,t2 - 2316: 89aa mv s3,a0 - 2318: e42e sd a1,8(sp) - 231a: 84b6 mv s1,a3 - 231c: 8bba mv s7,a4 - 231e: fc02 sd zero,56(sp) - for (;;) { - 2320: 8932 mv s2,a2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 2322: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe708f> - goto schk1; - if ((v - 0x01010101) & c) - goto schk2; - if (callback) - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 2326: 20000c13 li s8,512 - 232a: 83be mv t2,a5 - while (((stbsp__uintptr)f) & 3) { - 232c: 0034f793 andi a5,s1,3 - 2330: c7a9 beqz a5,237a - if (f[0] == '%') - 2332: 0004c783 lbu a5,0(s1) - 2336: 02500713 li a4,37 - 233a: 0ee78263 beq a5,a4,241e - if (f[0] == 0) - 233e: cbd9 beqz a5,23d4 - stbsp__chk_cb_buf(1); - 2340: 02098663 beqz s3,236c - 2344: 4124063b subw a2,s0,s2 - 2348: 1fe00713 li a4,510 - 234c: 02c75063 bge a4,a2,236c - 2350: 65a2 ld a1,8(sp) - 2352: 854a mv a0,s2 - 2354: e81e sd t2,16(sp) - 2356: 00cd0d3b addw s10,s10,a2 - 235a: 9982 jalr s3 - 235c: 892a mv s2,a0 - 235e: e119 bnez a0,2364 - 2360: 0200106f j 3380 - *bf++ = f[0]; - 2364: 0004c783 lbu a5,0(s1) - stbsp__chk_cb_buf(1); - 2368: 63c2 ld t2,16(sp) - 236a: 842a mv s0,a0 - ++f; - 236c: 0485 addi s1,s1,1 - *bf++ = f[0]; - 236e: 00f40023 sb a5,0(s0) - while (((stbsp__uintptr)f) & 3) { - 2372: 0034f793 andi a5,s1,3 - *bf++ = f[0]; - 2376: 0405 addi s0,s0,1 - while (((stbsp__uintptr)f) & 3) { - 2378: ffcd bnez a5,2332 - v = *(stbsp__uint32 *)f; - 237a: 4094 lw a3,0(s1) - c = (~v) & 0x80808080; - 237c: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 2380: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 2384: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 2388: 01b7073b addw a4,a4,s11 - 238c: 8f7d and a4,a4,a5 - 238e: 2701 sext.w a4,a4 - 2390: f34d bnez a4,2332 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 2392: 460d li a2,3 - 2394: a805 j 23c4 - if (callback) - 2396: 00098863 beqz s3,23a6 - if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 239a: 412407b3 sub a5,s0,s2 - 239e: 40fc07bb subw a5,s8,a5 - 23a2: f8f658e3 bge a2,a5,2332 - bf[2] = f[2]; - bf[3] = f[3]; - } else - #endif - { - *(stbsp__uint32 *)bf = v; - 23a6: c014 sw a3,0(s0) - v = *(stbsp__uint32 *)f; - 23a8: 40d4 lw a3,4(s1) - } - bf += 4; - 23aa: 0411 addi s0,s0,4 - f += 4; - 23ac: 0491 addi s1,s1,4 - c = (~v) & 0x80808080; - 23ae: fff6c793 not a5,a3 - if (((v ^ 0x25252525) - 0x01010101) & c) - 23b2: 0196c733 xor a4,a3,s9 - c = (~v) & 0x80808080; - 23b6: 0077f7b3 and a5,a5,t2 - if (((v ^ 0x25252525) - 0x01010101) & c) - 23ba: 01b7073b addw a4,a4,s11 - 23be: 8f7d and a4,a4,a5 - 23c0: 2701 sext.w a4,a4 - 23c2: fb25 bnez a4,2332 - if ((v - 0x01010101) & c) - 23c4: 01b6873b addw a4,a3,s11 - 23c8: 8ff9 and a5,a5,a4 - 23ca: 2781 sext.w a5,a5 - 23cc: d7e9 beqz a5,2396 - if (f[0] == 0) - 23ce: 0004c783 lbu a5,0(s1) - 23d2: f7bd bnez a5,2340 -endfmt: - - if (!callback) - *bf = 0; - else - stbsp__flush_cb(); - 23d4: 8cea mv s9,s10 - 23d6: 412404bb subw s1,s0,s2 - if (!callback) - 23da: 70098563 beqz s3,2ae4 - stbsp__flush_cb(); - 23de: 00905663 blez s1,23ea - 23e2: 65a2 ld a1,8(sp) - 23e4: 8626 mv a2,s1 - 23e6: 854a mv a0,s2 - 23e8: 9982 jalr s3 - 23ea: 009c8cbb addw s9,s9,s1 - -done: - return tlen + (int)(bf - buf); -} - 23ee: 2e813083 ld ra,744(sp) - 23f2: 2e013403 ld s0,736(sp) - 23f6: 2d813483 ld s1,728(sp) - 23fa: 2d013903 ld s2,720(sp) - 23fe: 2c813983 ld s3,712(sp) - 2402: 2a813b83 ld s7,680(sp) - 2406: 2a013c03 ld s8,672(sp) - 240a: 29013d03 ld s10,656(sp) - 240e: 28813d83 ld s11,648(sp) - 2412: 8566 mv a0,s9 - 2414: 29813c83 ld s9,664(sp) - 2418: 2f010113 addi sp,sp,752 - 241c: 8082 ret - 241e: 2d413023 sd s4,704(sp) - 2422: 2b513c23 sd s5,696(sp) - 2426: 2b613823 sd s6,688(sp) - tz = 0; - 242a: 00248693 addi a3,s1,2 - fl = 0; - 242e: 4e01 li t3,0 - switch (f[0]) { - 2430: 03f00593 li a1,63 - 2434: 00004617 auipc a2,0x4 - 2438: e6460613 addi a2,a2,-412 # 6298 <_GLOBAL__sub_I__ZSt3cin+0x2a8> - 243c: fff6c783 lbu a5,-1(a3) - 2440: fff68493 addi s1,a3,-1 - 2444: fe07871b addiw a4,a5,-32 - 2448: 0ff77713 zext.b a4,a4 - 244c: 00e5ec63 bltu a1,a4,2464 - 2450: 070a slli a4,a4,0x2 - 2452: 9732 add a4,a4,a2 - 2454: 4318 lw a4,0(a4) - 2456: 9732 add a4,a4,a2 - 2458: 8702 jr a4 - if (f[0] == '*') { - 245a: 0014c783 lbu a5,1(s1) - fl |= STBSP__LEADINGZERO; - 245e: 010e6e13 ori t3,t3,16 - ++f; - 2462: 0485 addi s1,s1,1 - if (f[0] == '*') { - 2464: 02a00713 li a4,42 - 2468: 0ce79163 bne a5,a4,252a - fw = va_arg(va, stbsp__uint32); - 246c: 000bab03 lw s6,0(s7) - while ((f[0] >= '0') && (f[0] <= '9')) { - 2470: 0014c783 lbu a5,1(s1) - fw = va_arg(va, stbsp__uint32); - 2474: 0ba1 addi s7,s7,8 - ++f; - 2476: 0485 addi s1,s1,1 - if (f[0] == '.') { - 2478: 02e00713 li a4,46 - pr = -1; - 247c: 58fd li a7,-1 - if (f[0] == '.') { - 247e: 0ee78663 beq a5,a4,256a - switch (f[0]) { - 2482: 04900713 li a4,73 - 2486: 10e78263 beq a5,a4,258a - 248a: f987871b addiw a4,a5,-104 - 248e: 0ff77713 zext.b a4,a4 - 2492: 46c9 li a3,18 - 2494: 02e6e063 bltu a3,a4,24b4 - 2498: 00004697 auipc a3,0x4 - 249c: f0068693 addi a3,a3,-256 # 6398 <_GLOBAL__sub_I__ZSt3cin+0x3a8> - 24a0: 070a slli a4,a4,0x2 - 24a2: 9736 add a4,a4,a3 - 24a4: 4318 lw a4,0(a4) - 24a6: 9736 add a4,a4,a3 - 24a8: 8702 jr a4 - if (f[0] == 'h') - 24aa: 0014c783 lbu a5,1(s1) - fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 24ae: 020e6e13 ori t3,t3,32 - ++f; - 24b2: 0485 addi s1,s1,1 - switch (f[0]) { - 24b4: fbf7871b addiw a4,a5,-65 - 24b8: 0ff77713 zext.b a4,a4 - 24bc: 03700693 li a3,55 - 24c0: 0ee6ea63 bltu a3,a4,25b4 - 24c4: 00004697 auipc a3,0x4 - 24c8: f2068693 addi a3,a3,-224 # 63e4 <_GLOBAL__sub_I__ZSt3cin+0x3f4> - 24cc: 070a slli a4,a4,0x2 - 24ce: 9736 add a4,a4,a3 - 24d0: 4318 lw a4,0(a4) - 24d2: 9736 add a4,a4,a3 - 24d4: 8702 jr a4 - fl |= STBSP__METRIC_NOSPACE; - 24d6: 400e6e13 ori t3,t3,1024 - continue; - 24da: 0685 addi a3,a3,1 - 24dc: b785 j 243c - fl |= STBSP__LEFTJUST; - 24de: 001e6e13 ori t3,t3,1 - continue; - 24e2: 0685 addi a3,a3,1 - 24e4: bfa1 j 243c - fl |= STBSP__LEADINGPLUS; - 24e6: 002e6e13 ori t3,t3,2 - continue; - 24ea: 0685 addi a3,a3,1 - 24ec: bf81 j 243c - fl |= STBSP__TRIPLET_COMMA; - 24ee: 040e6e13 ori t3,t3,64 - continue; - 24f2: 0685 addi a3,a3,1 - 24f4: b7a1 j 243c - if (fl & STBSP__METRIC_SUFFIX) { - 24f6: 100e7793 andi a5,t3,256 - 24fa: 8772 mv a4,t3 - 24fc: 56078363 beqz a5,2a62 - if (fl & STBSP__METRIC_1024) { - 2500: 6785 lui a5,0x1 - 2502: 034e1513 slli a0,t3,0x34 - 2506: 80078793 addi a5,a5,-2048 # 800 <_ZN6Parser10parse_pipeEPPcS0_+0xac> - 250a: 5c055863 bgez a0,2ada - fl |= STBSP__METRIC_JEDEC; - 250e: 6785 lui a5,0x1 - 2510: 8f5d or a4,a4,a5 - 2512: 00070e1b sext.w t3,a4 - 2516: 0685 addi a3,a3,1 - 2518: b715 j 243c - fl |= STBSP__LEADING_0X; - 251a: 008e6e13 ori t3,t3,8 - continue; - 251e: 0685 addi a3,a3,1 - 2520: bf31 j 243c - fl |= STBSP__LEADINGSPACE; - 2522: 004e6e13 ori t3,t3,4 - continue; - 2526: 0685 addi a3,a3,1 - 2528: bf11 j 243c - while ((f[0] >= '0') && (f[0] <= '9')) { - 252a: fd07871b addiw a4,a5,-48 # fd0 - 252e: 0ff77713 zext.b a4,a4 - 2532: 4625 li a2,9 - fw = 0; - 2534: 4b01 li s6,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2536: 46a5 li a3,9 - 2538: f4e660e3 bltu a2,a4,2478 - fw = fw * 10 + f[0] - '0'; - 253c: 002b171b slliw a4,s6,0x2 - 2540: 0167073b addw a4,a4,s6 - 2544: 0017171b slliw a4,a4,0x1 - f++; - 2548: 0485 addi s1,s1,1 - fw = fw * 10 + f[0] - '0'; - 254a: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 254c: 0004c783 lbu a5,0(s1) - fw = fw * 10 + f[0] - '0'; - 2550: fd070b1b addiw s6,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2554: fd07871b addiw a4,a5,-48 - 2558: 0ff77713 zext.b a4,a4 - 255c: fee6f0e3 bgeu a3,a4,253c - if (f[0] == '.') { - 2560: 02e00713 li a4,46 - pr = -1; - 2564: 58fd li a7,-1 - if (f[0] == '.') { - 2566: f0e79ee3 bne a5,a4,2482 - if (f[0] == '*') { - 256a: 0014c783 lbu a5,1(s1) - 256e: 02a00713 li a4,42 - 2572: 52e79763 bne a5,a4,2aa0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2576: 0024c783 lbu a5,2(s1) - switch (f[0]) { - 257a: 04900713 li a4,73 - pr = va_arg(va, stbsp__uint32); - 257e: 000ba883 lw a7,0(s7) - ++f; - 2582: 0489 addi s1,s1,2 - pr = va_arg(va, stbsp__uint32); - 2584: 0ba1 addi s7,s7,8 - switch (f[0]) { - 2586: f0e792e3 bne a5,a4,248a - if ((f[1] == '6') && (f[2] == '4')) { - 258a: 0014c783 lbu a5,1(s1) - 258e: 03600713 li a4,54 - 2592: 00e79463 bne a5,a4,259a - 2596: 1e60106f j 377c - } else if ((f[1] == '3') && (f[2] == '2')) { - 259a: 03300713 li a4,51 - 259e: 6ae796e3 bne a5,a4,344a - 25a2: 0024c683 lbu a3,2(s1) - 25a6: 03200713 li a4,50 - 25aa: 00e69463 bne a3,a4,25b2 - 25ae: 0ae0106f j 365c - ++f; - 25b2: 0485 addi s1,s1,1 - *s = f[0]; - 25b4: 26f10fa3 sb a5,639(sp) - l = 1; - 25b8: 4785 li a5,1 - 25ba: d0be sw a5,96(sp) - lead[0] = 0; - 25bc: 06010423 sb zero,104(sp) - tail[0] = 0; - 25c0: 06010823 sb zero,112(sp) - dp = 0; - 25c4: d282 sw zero,100(sp) - 25c6: e0de sd s7,64(sp) - 25c8: 4701 li a4,0 - 25ca: 4301 li t1,0 - 25cc: 4f81 li t6,0 - 25ce: 4685 li a3,1 - 25d0: 4a01 li s4,0 - cs = 0; - 25d2: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 25d4: 27f10a93 addi s5,sp,639 - fw = fl = 0; - 25d8: 4e01 li t3,0 - tz = 0; - 25da: 4881 li a7,0 - if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 25dc: 010e7793 andi a5,t3,16 - 25e0: 40078ee3 beqz a5,31fc - pr = (fw > pr) ? fw : pr; - 25e4: 87ba mv a5,a4 - 25e6: 00675363 bge a4,t1,25ec - 25ea: 879a mv a5,t1 - 25ec: 0007871b sext.w a4,a5 - fw = 0; - 25f0: 4301 li t1,0 - if (fw + pr) { - 25f2: 62070563 beqz a4,2c1c - sn = lead + 1; - 25f6: 06910793 addi a5,sp,105 - 25fa: fcbe sd a5,120(sp) - while (lead[0]) { - 25fc: 0a0a0863 beqz s4,26ac - stbsp__cb_buf_clamp(i, lead[0]); - 2600: f026 sd s1,32(sp) - 2602: f436 sd a3,40(sp) - 2604: 854a mv a0,s2 - 2606: 86d2 mv a3,s4 - 2608: 84ce mv s1,s3 - stbsp__chk_cb_buf(1); - 260a: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 260e: 89be mv s3,a5 - 2610: 20000b13 li s6,512 - 2614: 87a2 mv a5,s0 - 2616: e846 sd a7,16(sp) - 2618: 846a mv s0,s10 - 261a: ec7e sd t6,24(sp) - 261c: 8d6e mv s10,s11 - 261e: f872 sd t3,48(sp) - 2620: 8de6 mv s11,s9 - 2622: 8a3a mv s4,a4 - 2624: e496 sd t0,72(sp) - 2626: 891a mv s2,t1 - 2628: 8c9e mv s9,t2 - 262a: 0006871b sext.w a4,a3 - 262e: 2e0482e3 beqz s1,3112 - 2632: 40a7863b subw a2,a5,a0 - 2636: 40cb083b subw a6,s6,a2 - 263a: 85c2 mv a1,a6 - 263c: 01075363 bge a4,a6,2642 - 2640: 85ba mv a1,a4 - lead[0] -= (char)i; - 2642: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 2644: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 2648: 06d10423 sb a3,104(sp) - while (i) { - 264c: c70d beqz a4,2676 - 264e: 7866 ld a6,120(sp) - 2650: 02071593 slli a1,a4,0x20 - 2654: 9181 srli a1,a1,0x20 - 2656: 00b78633 add a2,a5,a1 - 265a: 8742 mv a4,a6 - *bf++ = *sn++; - 265c: 00074683 lbu a3,0(a4) - 2660: 0785 addi a5,a5,1 - while (i) { - 2662: 0705 addi a4,a4,1 - *bf++ = *sn++; - 2664: fed78fa3 sb a3,-1(a5) - while (i) { - 2668: fec79ae3 bne a5,a2,265c - 266c: 982e add a6,a6,a1 - 266e: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 2670: c899 beqz s1,2686 - 2672: 40a7863b subw a2,a5,a0 - 2676: 00cbd863 bge s7,a2,2686 - 267a: 65a2 ld a1,8(sp) - 267c: 9c31 addw s0,s0,a2 - 267e: 9482 jalr s1 - 2680: 34050ee3 beqz a0,31dc - 2684: 87aa mv a5,a0 - while (lead[0]) { - 2686: 06814683 lbu a3,104(sp) - 268a: f2c5 bnez a3,262a - 268c: 83e6 mv t2,s9 - 268e: 68c2 ld a7,16(sp) - 2690: 8cee mv s9,s11 - 2692: 6fe2 ld t6,24(sp) - 2694: 8dea mv s11,s10 - 2696: 76a2 ld a3,40(sp) - 2698: 8d22 mv s10,s0 - 269a: 7e42 ld t3,48(sp) - 269c: 843e mv s0,a5 - 269e: 62a6 ld t0,72(sp) - 26a0: 87ce mv a5,s3 - 26a2: 89a6 mv s3,s1 - 26a4: 7482 ld s1,32(sp) - 26a6: 834a mv t1,s2 - 26a8: 8752 mv a4,s4 - 26aa: 892a mv s2,a0 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 26ac: 040e7b13 andi s6,t3,64 - c = cs >> 24; - 26b0: 0182d61b srliw a2,t0,0x18 - 26b4: 0182db9b srliw s7,t0,0x18 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 26b8: 4a01 li s4,0 - 26ba: 000b0e63 beqz s6,26d6 - cs &= 0xffffff; - 26be: 02829a13 slli s4,t0,0x28 - 26c2: 028a5a13 srli s4,s4,0x28 - cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 26c6: 00ea0a3b addw s4,s4,a4 - 26ca: 0016059b addiw a1,a2,1 - 26ce: 02ba7a3b remuw s4,s4,a1 - 26d2: 41460a3b subw s4,a2,s4 - while (pr > 0) { - 26d6: 0ce05763 blez a4,27a4 - *(stbsp__uint32 *)bf = 0x30303030; - 26da: 30303837 lui a6,0x30303 - 26de: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fa1c0> - 26e2: f026 sd s1,32(sp) - 26e4: 854a mv a0,s2 - 26e6: 84da mv s1,s6 - 26e8: 895e mv s2,s7 - 26ea: e4d6 sd s5,72(sp) - 26ec: 8b4e mv s6,s3 - 26ee: 8aea mv s5,s10 - stbsp__chk_cb_buf(1); - 26f0: 1fe00293 li t0,510 - 26f4: 8d6e mv s10,s11 - *bf++ = stbsp__comma; - 26f6: 00006f17 auipc t5,0x6 - 26fa: 822f0f13 addi t5,t5,-2014 # 7f18 - 26fe: 8de6 mv s11,s9 - *bf++ = '0'; - 2700: 03000e93 li t4,48 - 2704: e846 sd a7,16(sp) - 2706: ec7e sd t6,24(sp) - 2708: f436 sd a3,40(sp) - 270a: f872 sd t3,48(sp) - 270c: e89a sd t1,80(sp) - 270e: 89ba mv s3,a4 - 2710: ecbe sd a5,88(sp) - 2712: 8bc2 mv s7,a6 - 2714: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, pr); - 2716: 240b0ee3 beqz s6,3172 - 271a: 40a407b3 sub a5,s0,a0 - 271e: 40fc063b subw a2,s8,a5 - 2722: 87b2 mv a5,a2 - 2724: 00c9d363 bge s3,a2,272a - 2728: 87ce mv a5,s3 - 272a: 0007859b sext.w a1,a5 - pr -= i; - 272e: 40f989bb subw s3,s3,a5 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2732: 32048c63 beqz s1,2a6a - while (i) { - 2736: 34058a63 beqz a1,2a8a - 273a: 1582 slli a1,a1,0x20 - *bf++ = stbsp__comma; - 273c: 0cdf4603 lbu a2,205(t5) - 2740: 9181 srli a1,a1,0x20 - 2742: 95a2 add a1,a1,s0 - 2744: 0405 addi s0,s0,1 - if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 2746: c481 beqz s1,274e - 2748: 1d4901e3 beq s2,s4,310a - 274c: 2a05 addiw s4,s4,1 - *bf++ = '0'; - 274e: 03000793 li a5,48 - 2752: fef40fa3 sb a5,-1(s0) - while (i) { - 2756: fe8597e3 bne a1,s0,2744 - stbsp__chk_cb_buf(1); - 275a: 320b0b63 beqz s6,2a90 - 275e: 40a5863b subw a2,a1,a0 - 2762: 32c2d763 bge t0,a2,2a90 - 2766: 65a2 ld a1,8(sp) - 2768: 01560abb addw s5,a2,s5 - 276c: 9b02 jalr s6 - 276e: 3a050ce3 beqz a0,3326 - 2772: 842a mv s0,a0 - 2774: 1fe00293 li t0,510 - 2778: 00005f17 auipc t5,0x5 - 277c: 7a0f0f13 addi t5,t5,1952 # 7f18 - 2780: 03000e93 li t4,48 - while (pr > 0) { - 2784: f93049e3 bgtz s3,2716 - while (lead[0]) { - 2788: 83e6 mv t2,s9 - 278a: 68c2 ld a7,16(sp) - 278c: 8cee mv s9,s11 - 278e: 6fe2 ld t6,24(sp) - 2790: 8dea mv s11,s10 - 2792: 7482 ld s1,32(sp) - 2794: 8d56 mv s10,s5 - 2796: 76a2 ld a3,40(sp) - 2798: 7e42 ld t3,48(sp) - 279a: 6346 ld t1,80(sp) - 279c: 67e6 ld a5,88(sp) - 279e: 6aa6 ld s5,72(sp) - 27a0: 892a mv s2,a0 - 27a2: 89da mv s3,s6 - 27a4: 06814a03 lbu s4,104(sp) - sn = lead + 1; - 27a8: fcbe sd a5,120(sp) - while (lead[0]) { - 27aa: 0a0a0263 beqz s4,284e - stbsp__cb_buf_clamp(i, lead[0]); - 27ae: ec26 sd s1,24(sp) - 27b0: f036 sd a3,32(sp) - 27b2: 854a mv a0,s2 - 27b4: 86d2 mv a3,s4 - 27b6: 84ce mv s1,s3 - 27b8: 87a2 mv a5,s0 - stbsp__chk_cb_buf(1); - 27ba: 1fe00b93 li s7,510 - stbsp__cb_buf_clamp(i, lead[0]); - 27be: 846a mv s0,s10 - 27c0: 20000b13 li s6,512 - 27c4: 8d6e mv s10,s11 - 27c6: e846 sd a7,16(sp) - 27c8: 8de6 mv s11,s9 - 27ca: 8a7e mv s4,t6 - 27cc: 8972 mv s2,t3 - 27ce: 899a mv s3,t1 - 27d0: 8c9e mv s9,t2 - 27d2: 0006871b sext.w a4,a3 - 27d6: 140482e3 beqz s1,311a - 27da: 40a7863b subw a2,a5,a0 - 27de: 40cb083b subw a6,s6,a2 - 27e2: 85c2 mv a1,a6 - 27e4: 01075363 bge a4,a6,27ea - 27e8: 85ba mv a1,a4 - lead[0] -= (char)i; - 27ea: 9e8d subw a3,a3,a1 - stbsp__cb_buf_clamp(i, lead[0]); - 27ec: 0005871b sext.w a4,a1 - lead[0] -= (char)i; - 27f0: 06d10423 sb a3,104(sp) - while (i) { - 27f4: c70d beqz a4,281e - 27f6: 7866 ld a6,120(sp) - 27f8: 02071593 slli a1,a4,0x20 - 27fc: 9181 srli a1,a1,0x20 - 27fe: 00b78633 add a2,a5,a1 - 2802: 8742 mv a4,a6 - *bf++ = *sn++; - 2804: 00074683 lbu a3,0(a4) - 2808: 0785 addi a5,a5,1 - while (i) { - 280a: 0705 addi a4,a4,1 - *bf++ = *sn++; - 280c: fed78fa3 sb a3,-1(a5) - while (i) { - 2810: fec79ae3 bne a5,a2,2804 - 2814: 982e add a6,a6,a1 - 2816: fcc2 sd a6,120(sp) - stbsp__chk_cb_buf(1); - 2818: c899 beqz s1,282e - 281a: 40a7863b subw a2,a5,a0 - 281e: 00cbd863 bge s7,a2,282e - 2822: 65a2 ld a1,8(sp) - 2824: 9c31 addw s0,s0,a2 - 2826: 9482 jalr s1 - 2828: 1a050ae3 beqz a0,31dc - 282c: 87aa mv a5,a0 - while (lead[0]) { - 282e: 06814683 lbu a3,104(sp) - 2832: f2c5 bnez a3,27d2 - 2834: 834e mv t1,s3 - 2836: 68c2 ld a7,16(sp) - 2838: 89a6 mv s3,s1 - 283a: 7682 ld a3,32(sp) - 283c: 64e2 ld s1,24(sp) - 283e: 8e4a mv t3,s2 - 2840: 83e6 mv t2,s9 - 2842: 8fd2 mv t6,s4 - 2844: 8cee mv s9,s11 - 2846: 892a mv s2,a0 - 2848: 8dea mv s11,s10 - 284a: 8d22 mv s10,s0 - 284c: 843e mv s0,a5 - while (n) { - 284e: c6f9 beqz a3,291c - STBSP__UNALIGNED(while (i >= 4) { - 2850: ec26 sd s1,24(sp) - 2852: 854a mv a0,s2 - 2854: 84d6 mv s1,s5 - 2856: 896a mv s2,s10 - 2858: 87a2 mv a5,s0 - 285a: 8d6e mv s10,s11 - stbsp__chk_cb_buf(1); - 285c: 1fe00b93 li s7,510 - STBSP__UNALIGNED(while (i >= 4) { - 2860: 8de6 mv s11,s9 - stbsp__cb_buf_clamp(i, n); - 2862: 20000b13 li s6,512 - STBSP__UNALIGNED(while (i >= 4) { - 2866: 4a0d li s4,3 - 2868: e87e sd t6,16(sp) - 286a: f072 sd t3,32(sp) - 286c: 8ac6 mv s5,a7 - 286e: f41a sd t1,40(sp) - 2870: 8436 mv s0,a3 - 2872: 8c9e mv s9,t2 - stbsp__cb_buf_clamp(i, n); - 2874: 0004071b sext.w a4,s0 - 2878: 100982e3 beqz s3,317c - 287c: 40a78633 sub a2,a5,a0 - 2880: 40cb05bb subw a1,s6,a2 - 2884: 862e mv a2,a1 - 2886: 00b75363 bge a4,a1,288c - 288a: 863a mv a2,a4 - 288c: 0006071b sext.w a4,a2 - n -= i; - 2890: 9c11 subw s0,s0,a2 - STBSP__UNALIGNED(while (i >= 4) { - 2892: 14ea50e3 bge s4,a4,31d2 - 2896: ffc70f1b addiw t5,a4,-4 - 289a: 002f5e9b srliw t4,t5,0x2 - 289e: 001e8e1b addiw t3,t4,1 - 28a2: 0e0a slli t3,t3,0x2 - 28a4: 01c785b3 add a1,a5,t3 - 28a8: 8626 mv a2,s1 - 28aa: 4218 lw a4,0(a2) - 28ac: 0791 addi a5,a5,4 - 28ae: 0611 addi a2,a2,4 - 28b0: 2701 sext.w a4,a4 - 28b2: fee7ae23 sw a4,-4(a5) - 28b6: feb79ae3 bne a5,a1,28aa - 28ba: 002e9e9b slliw t4,t4,0x2 - 28be: 41df073b subw a4,t5,t4 - while (i) { - 28c2: 94f2 add s1,s1,t3 - 28c4: c31d beqz a4,28ea - 28c6: 8626 mv a2,s1 - 28c8: 87ae mv a5,a1 - 28ca: 00e58f3b addw t5,a1,a4 - *bf++ = *s++; - 28ce: 00064e83 lbu t4,0(a2) - 28d2: 0785 addi a5,a5,1 - while (i) { - 28d4: 00078e1b sext.w t3,a5 - *bf++ = *s++; - 28d8: ffd78fa3 sb t4,-1(a5) - 28dc: 0605 addi a2,a2,1 - while (i) { - 28de: ffcf18e3 bne t5,t3,28ce - 28e2: 1702 slli a4,a4,0x20 - 28e4: 9301 srli a4,a4,0x20 - 28e6: 95ba add a1,a1,a4 - 28e8: 94ba add s1,s1,a4 - stbsp__chk_cb_buf(1); - 28ea: 1a098763 beqz s3,2a98 - 28ee: 40a5863b subw a2,a1,a0 - 28f2: 1acbd363 bge s7,a2,2a98 - 28f6: 65a2 ld a1,8(sp) - 28f8: 0126093b addw s2,a2,s2 - 28fc: 9982 jalr s3 - 28fe: 20050be3 beqz a0,3314 - 2902: 87aa mv a5,a0 - while (n) { - 2904: f825 bnez s0,2874 - 2906: 6fc2 ld t6,16(sp) - 2908: 64e2 ld s1,24(sp) - 290a: 7e02 ld t3,32(sp) - 290c: 7322 ld t1,40(sp) - 290e: 83e6 mv t2,s9 - 2910: 88d6 mv a7,s5 - 2912: 8cee mv s9,s11 - 2914: 843e mv s0,a5 - 2916: 8dea mv s11,s10 - 2918: 8d4a mv s10,s2 - 291a: 892a mv s2,a0 - while (tz) { - 291c: 08088863 beqz a7,29ac - *(stbsp__uint32 *)bf = 0x30303030; - 2920: 30303b37 lui s6,0x30303 - *bf++ = '0'; - 2924: 03000a13 li s4,48 - while (i >= 4) { - 2928: 4a8d li s5,3 - stbsp__chk_cb_buf(1); - 292a: 1fe00693 li a3,510 - *(stbsp__uint32 *)bf = 0x30303030; - 292e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fa1c0> - stbsp__cb_buf_clamp(i, tz); - 2932: 20000b93 li s7,512 - 2936: 040989e3 beqz s3,3188 - 293a: 41240633 sub a2,s0,s2 - 293e: 40cb87bb subw a5,s7,a2 - 2942: 873e mv a4,a5 - 2944: 00f8d363 bge a7,a5,294a - 2948: 8746 mv a4,a7 - 294a: 0007079b sext.w a5,a4 - tz -= i; - 294e: 40e888bb subw a7,a7,a4 - while (i) { - 2952: 08078ee3 beqz a5,31ee - if ((((stbsp__uintptr)bf) & 3) == 0) - 2956: 00347713 andi a4,s0,3 - 295a: e719 bnez a4,2968 - 295c: 0390006f j 3194 - 2960: 00347713 andi a4,s0,3 - 2964: 7a070f63 beqz a4,3122 - *bf++ = '0'; - 2968: 01440023 sb s4,0(s0) - --i; - 296c: 37fd addiw a5,a5,-1 - *bf++ = '0'; - 296e: 0405 addi s0,s0,1 - while (i) { - 2970: fbe5 bnez a5,2960 - stbsp__chk_cb_buf(1); - 2972: 02098b63 beqz s3,29a8 - 2976: 4124063b subw a2,s0,s2 - 297a: 02c6d763 bge a3,a2,29a8 - 297e: 65a2 ld a1,8(sp) - 2980: 854a mv a0,s2 - 2982: f81e sd t2,48(sp) - 2984: f41a sd t1,40(sp) - 2986: f072 sd t3,32(sp) - 2988: ec7e sd t6,24(sp) - 298a: e846 sd a7,16(sp) - 298c: 00cd0d3b addw s10,s10,a2 - 2990: 9982 jalr s3 - 2992: 892a mv s2,a0 - 2994: 1a0502e3 beqz a0,3338 - 2998: 73c2 ld t2,48(sp) - 299a: 7322 ld t1,40(sp) - 299c: 7e02 ld t3,32(sp) - 299e: 6fe2 ld t6,24(sp) - 29a0: 68c2 ld a7,16(sp) - 29a2: 842a mv s0,a0 - 29a4: 1fe00693 li a3,510 - while (tz) { - 29a8: f80897e3 bnez a7,2936 - sn = tail + 1; - 29ac: 07110793 addi a5,sp,113 - 29b0: fcbe sd a5,120(sp) - while (tail[0]) { - 29b2: 080f8763 beqz t6,2a40 - stbsp__cb_buf_clamp(i, tail[0]); - 29b6: 854a mv a0,s2 - 29b8: 8b6a mv s6,s10 - stbsp__chk_cb_buf(1); - 29ba: 1fe00a93 li s5,510 - stbsp__cb_buf_clamp(i, tail[0]); - 29be: 8d4e mv s10,s3 - 29c0: 20000a13 li s4,512 - 29c4: 8bf2 mv s7,t3 - 29c6: 891a mv s2,t1 - 29c8: 899e mv s3,t2 - 29ca: 000f879b sext.w a5,t6 - 29ce: 7c0d0863 beqz s10,319e - 29d2: 40a4063b subw a2,s0,a0 - 29d6: 40ca06bb subw a3,s4,a2 - 29da: 8736 mv a4,a3 - 29dc: 00d7d363 bge a5,a3,29e2 - 29e0: 873e mv a4,a5 - tail[0] -= (char)i; - 29e2: 40ef8fbb subw t6,t6,a4 - stbsp__cb_buf_clamp(i, tail[0]); - 29e6: 0007079b sext.w a5,a4 - tail[0] -= (char)i; - 29ea: 07f10823 sb t6,112(sp) - while (i) { - 29ee: c795 beqz a5,2a1a - 29f0: 75e6 ld a1,120(sp) - 29f2: 02079613 slli a2,a5,0x20 - 29f6: 9201 srli a2,a2,0x20 - 29f8: 00c406b3 add a3,s0,a2 - 29fc: 87ae mv a5,a1 - *bf++ = *sn++; - 29fe: 0007c703 lbu a4,0(a5) - 2a02: 0405 addi s0,s0,1 - while (i) { - 2a04: 0785 addi a5,a5,1 - *bf++ = *sn++; - 2a06: fee40fa3 sb a4,-1(s0) - while (i) { - 2a0a: fed41ae3 bne s0,a3,29fe - 2a0e: 95b2 add a1,a1,a2 - 2a10: fcae sd a1,120(sp) - stbsp__chk_cb_buf(1); - 2a12: 000d0d63 beqz s10,2a2c - 2a16: 40a4063b subw a2,s0,a0 - 2a1a: 00cad963 bge s5,a2,2a2c - 2a1e: 65a2 ld a1,8(sp) - 2a20: 00cb0b3b addw s6,s6,a2 - 2a24: 9d02 jalr s10 - 2a26: 200509e3 beqz a0,3438 - 2a2a: 842a mv s0,a0 - while (tail[0]) { - 2a2c: 07014f83 lbu t6,112(sp) - 2a30: f80f9de3 bnez t6,29ca - 2a34: 834a mv t1,s2 - 2a36: 83ce mv t2,s3 - 2a38: 8e5e mv t3,s7 - 2a3a: 89ea mv s3,s10 - 2a3c: 892a mv s2,a0 - 2a3e: 8d5a mv s10,s6 - if (fl & STBSP__LEFTJUST) - 2a40: 001e7e13 andi t3,t3,1 - 2a44: 000e0663 beqz t3,2a50 - if (fw > 0) { - 2a48: 00605463 blez t1,2a50 - 2a4c: 0300106f j 3a7c - for (;;) { - 2a50: 6b86 ld s7,64(sp) - 2a52: 2c013a03 ld s4,704(sp) - 2a56: 2b813a83 ld s5,696(sp) - 2a5a: 2b013b03 ld s6,688(sp) - ++f; - 2a5e: 0485 addi s1,s1,1 - for (;;) { - 2a60: b0f1 j 232c - fl |= STBSP__METRIC_SUFFIX; - 2a62: 100e6e13 ori t3,t3,256 - continue; - 2a66: 0685 addi a3,a3,1 - 2a68: bad1 j 243c - while (i) { - 2a6a: 0e0580e3 beqz a1,334a - if ((((stbsp__uintptr)bf) & 3) == 0) - 2a6e: 00347793 andi a5,s0,3 - 2a72: e799 bnez a5,2a80 - 2a74: 0dd0006f j 3350 - 2a78: 00347793 andi a5,s0,3 - 2a7c: 72078463 beqz a5,31a4 - *bf++ = '0'; - 2a80: 01d40023 sb t4,0(s0) - --i; - 2a84: 35fd addiw a1,a1,-1 - *bf++ = '0'; - 2a86: 0405 addi s0,s0,1 - while (i) { - 2a88: f9e5 bnez a1,2a78 - while (i) { - 2a8a: 85a2 mv a1,s0 - stbsp__chk_cb_buf(1); - 2a8c: cc0b19e3 bnez s6,275e - 2a90: 842e mv s0,a1 - while (pr > 0) { - 2a92: c93042e3 bgtz s3,2716 - 2a96: b9cd j 2788 - while (i) { - 2a98: 87ae mv a5,a1 - while (n) { - 2a9a: dc041de3 bnez s0,2874 - 2a9e: b5a5 j 2906 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2aa0: fd07871b addiw a4,a5,-48 - 2aa4: 0ff77713 zext.b a4,a4 - 2aa8: 4625 li a2,9 - ++f; - 2aaa: 0485 addi s1,s1,1 - pr = 0; - 2aac: 4881 li a7,0 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2aae: 46a5 li a3,9 - 2ab0: 9ce669e3 bltu a2,a4,2482 - pr = pr * 10 + f[0] - '0'; - 2ab4: 0028971b slliw a4,a7,0x2 - 2ab8: 0117073b addw a4,a4,a7 - 2abc: 0017171b slliw a4,a4,0x1 - f++; - 2ac0: 0485 addi s1,s1,1 - pr = pr * 10 + f[0] - '0'; - 2ac2: 9f3d addw a4,a4,a5 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2ac4: 0004c783 lbu a5,0(s1) - pr = pr * 10 + f[0] - '0'; - 2ac8: fd07089b addiw a7,a4,-48 - while ((f[0] >= '0') && (f[0] <= '9')) { - 2acc: fd07871b addiw a4,a5,-48 - 2ad0: 0ff77713 zext.b a4,a4 - 2ad4: fee6f0e3 bgeu a3,a4,2ab4 - 2ad8: b26d j 2482 - fl |= STBSP__METRIC_1024; - 2ada: 8f5d or a4,a4,a5 - 2adc: 00070e1b sext.w t3,a4 - 2ae0: 0685 addi a3,a3,1 - 2ae2: baa9 j 243c - *bf = 0; - 2ae4: 00040023 sb zero,0(s0) - 2ae8: b209 j 23ea - if (f[0] == 'l') { - 2aea: 0014c783 lbu a5,1(s1) - 2aee: 06c00713 li a4,108 - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2af2: 020e6e13 ori t3,t3,32 - if (f[0] == 'l') { - 2af6: 00e78c63 beq a5,a4,2b0e - ++f; - 2afa: 0485 addi s1,s1,1 - 2afc: ba65 j 24b4 - if (f[0] == 'h') - 2afe: 0014c783 lbu a5,1(s1) - 2b02: 06800713 li a4,104 - fl |= STBSP__HALFWIDTH; - 2b06: 200e6e13 ori t3,t3,512 - if (f[0] == 'h') - 2b0a: fee798e3 bne a5,a4,2afa - if ((f[1] == '6') && (f[2] == '4')) { - 2b0e: 0024c783 lbu a5,2(s1) - ++f; - 2b12: 0489 addi s1,s1,2 - 2b14: b245 j 24b4 - s = va_arg(va, char *); - 2b16: 008b8713 addi a4,s7,8 - 2b1a: e0ba sd a4,64(sp) - if (fl & STBSP__INTMAX) { - 2b1c: 020e7693 andi a3,t3,32 - 2b20: 8772 mv a4,t3 - 2b22: 24069ee3 bnez a3,357e - stbsp__int32 i = va_arg(va, stbsp__int32); - 2b26: 000ba683 lw a3,0(s7) - if ((f[0] != 'u') && (i < 0)) { - 2b2a: 07500613 li a2,117 - n64 = (stbsp__uint32)i; - 2b2e: 02069f13 slli t5,a3,0x20 - 2b32: 020f5f13 srli t5,t5,0x20 - if ((f[0] != 'u') && (i < 0)) { - 2b36: 00c78a63 beq a5,a2,2b4a - 2b3a: 0006d863 bgez a3,2b4a - fl |= STBSP__NEGATIVE; - 2b3e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint32)-i; - 2b42: 40d00f3b negw t5,a3 - fl |= STBSP__NEGATIVE; - 2b46: 00070e1b sext.w t3,a4 - if (fl & STBSP__METRIC_SUFFIX) { - 2b4a: 100e7693 andi a3,t3,256 - 2b4e: 5c0683e3 beqz a3,3914 - if (n64 < 1024) - 2b52: 3ff00793 li a5,1023 - 2b56: 01e7e463 bltu a5,t5,2b5e - 2b5a: 0ea0106f j 3c44 - else if (pr == -1) - 2b5e: 57fd li a5,-1 - 2b60: 30f887e3 beq a7,a5,366e - fv = (double)(stbsp__int64)n64; - 2b64: d22f7553 fcvt.d.l fa0,t5 - if (fl & STBSP__METRIC_1024) - 2b68: 034e1793 slli a5,t3,0x34 - 2b6c: 0007c463 bltz a5,2b74 - 2b70: 2300106f j 3da0 - divisor = 1024.0; - 2b74: 00004797 auipc a5,0x4 - 2b78: e147b787 fld fa5,-492(a5) # 6988 - if ((fv < divisor) && (fv > -divisor)) - 2b7c: 22f79753 fneg.d fa4,fa5 - fl += 0x1000000; - 2b80: 010006b7 lui a3,0x1000 - while (fl < 0x4000000) { - 2b84: 04000737 lui a4,0x4000 - if ((fv < divisor) && (fv > -divisor)) - 2b88: a2f517d3 flt.d a5,fa0,fa5 - 2b8c: c789 beqz a5,2b96 - 2b8e: a2a717d3 flt.d a5,fa4,fa0 - 2b92: 3e079863 bnez a5,2f82 - fl += 0x1000000; - 2b96: 01c68e3b addw t3,a3,t3 - fv /= divisor; - 2b9a: 1af57553 fdiv.d fa0,fa0,fa5 - while (fl < 0x4000000) { - 2b9e: feee65e3 bltu t3,a4,2b88 - 2ba2: a6c5 j 2f82 - h = (f[0] == 'X') ? hexu : hex; - 2ba4: 05800693 li a3,88 - if (fl & STBSP__INTMAX) { - 2ba8: 020e7713 andi a4,t3,32 - h = (f[0] == 'X') ? hexu : hex; - 2bac: 00005817 auipc a6,0x5 - 2bb0: 45480813 addi a6,a6,1108 # 8000 - 2bb4: 00d79663 bne a5,a3,2bc0 - 2bb8: 00005817 auipc a6,0x5 - 2bbc: 43080813 addi a6,a6,1072 # 7fe8 - l = (4 << 4) | (4 << 8); - 2bc0: 44000793 li a5,1088 - 2bc4: d0be sw a5,96(sp) - if (fl & STBSP__LEADING_0X) { - 2bc6: 008e7793 andi a5,t3,8 - 2bca: 7a079263 bnez a5,336e - lead[0] = 0; - 2bce: 06010423 sb zero,104(sp) - s = va_arg(va, char *); - 2bd2: 008b8793 addi a5,s7,8 - 2bd6: e0be sd a5,64(sp) - if (fl & STBSP__INTMAX) - 2bd8: 72070b63 beqz a4,330e - n64 = va_arg(va, stbsp__uint64); - 2bdc: 000bb683 ld a3,0(s7) - dp = 0; - 2be0: d282 sw zero,100(sp) - tail[0] = 0; - 2be2: 06010823 sb zero,112(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 2be6: 001e7513 andi a0,t3,1 - if (n64 == 0) { - 2bea: 380694e3 bnez a3,3772 - lead[0] = 0; - 2bee: 06010423 sb zero,104(sp) - if (pr == 0) { - 2bf2: 78089a63 bnez a7,3386 - if (fw < (stbsp__int32)n) - 2bf6: fffb4313 not t1,s6 - 2bfa: 43f35313 srai t1,t1,0x3f - l = 0; - 2bfe: d082 sw zero,96(sp) - if (fw < (stbsp__int32)n) - 2c00: 01637333 and t1,t1,s6 - goto scopy; - 2c04: 4701 li a4,0 - 2c06: 4f81 li t6,0 - 2c08: 4a01 li s4,0 - cs = 0; - 2c0a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 2c0c: 28010a93 addi s5,sp,640 - if ((fl & STBSP__LEFTJUST) == 0) { - 2c10: 9c0506e3 beqz a0,25dc - if (fw + pr) { - 2c14: 00e307bb addw a5,t1,a4 - 2c18: 9c079fe3 bnez a5,25f6 - 2c1c: 06910793 addi a5,sp,105 - 2c20: b661 j 27a8 - h = (f[0] == 'E') ? hexu : hex; - 2c22: 04500713 li a4,69 - 2c26: 00005317 auipc t1,0x5 - 2c2a: 3da30313 addi t1,t1,986 # 8000 - 2c2e: 1ce78ae3 beq a5,a4,3602 - fv = va_arg(va, double); - 2c32: 008b8713 addi a4,s7,8 - if (pr == -1) - 2c36: 57fd li a5,-1 - fv = va_arg(va, double); - 2c38: e0ba sd a4,64(sp) - 2c3a: 000bb507 fld fa0,0(s7) - if (pr == -1) - 2c3e: 1af88ce3 beq a7,a5,35f6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 2c42: 80000737 lui a4,0x80000 - 2c46: 00e8e733 or a4,a7,a4 - 2c4a: 2701 sext.w a4,a4 - 2c4c: 10d4 addi a3,sp,100 - 2c4e: 0110 addi a2,sp,128 - 2c50: 108c addi a1,sp,96 - 2c52: 18a8 addi a0,sp,120 - 2c54: f41e sd t2,40(sp) - 2c56: f01a sd t1,32(sp) - 2c58: ec72 sd t3,24(sp) - 2c5a: e846 sd a7,16(sp) - 2c5c: d8efe0ef jal 11ea - 2c60: 68c2 ld a7,16(sp) - 2c62: 6e62 ld t3,24(sp) - 2c64: 7302 ld t1,32(sp) - 2c66: 73a2 ld t2,40(sp) - if (dp == STBSP__SPECIAL) { - 2c68: 5796 lw a5,100(sp) - s = (char *)sn; - 2c6a: 7ae6 ld s5,120(sp) - if ((l - 1) > (stbsp__uint32)pr) - 2c6c: 5686 lw a3,96(sp) - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 2c6e: 3c0511e3 bnez a0,3830 - tail[0] = 0; - 2c72: 06010823 sb zero,112(sp) - sign[0] = 0; - 2c76: 06010423 sb zero,104(sp) - } else if (fl & STBSP__LEADINGSPACE) { - 2c7a: 004e7713 andi a4,t3,4 - 2c7e: 6a070ee3 beqz a4,3b3a - sign[0] = 1; - 2c82: 6709 lui a4,0x2 - 2c84: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x689> - 2c86: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 2c8a: 671d lui a4,0x7 - 2c8c: 1ee794e3 bne a5,a4,3674 - if (pr < (stbsp__int32)l) - 2c90: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2c94: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 2c98: fff7c793 not a5,a5 - n = pr + lead[0] + tail[0] + tz; - 2c9c: 07014f83 lbu t6,112(sp) - if (pr < (stbsp__int32)l) - 2ca0: 97fd srai a5,a5,0x3f - 2ca2: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 2ca4: 00fa073b addw a4,s4,a5 - 2ca8: 01f7063b addw a2,a4,t6 - 2cac: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 2cae: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 2cb2: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 2cb4: 835a mv t1,s6 - 2cb6: 00cb5363 bge s6,a2,2cbc - 2cba: 8332 mv t1,a2 - fw -= n; - 2cbc: 40e3033b subw t1,t1,a4 - cs = 0; - 2cc0: 4281 li t0,0 - pr -= l; - 2cc2: 40d7873b subw a4,a5,a3 - tz = 0; - 2cc6: 4881 li a7,0 - goto scopy; - 2cc8: b7a1 j 2c10 - h = (f[0] == 'G') ? hexu : hex; - 2cca: 04700713 li a4,71 - 2cce: 00005317 auipc t1,0x5 - 2cd2: 33230313 addi t1,t1,818 # 8000 - 2cd6: 14e783e3 beq a5,a4,361c - fv = va_arg(va, double); - 2cda: 008b8713 addi a4,s7,8 - if (pr == -1) - 2cde: 57fd li a5,-1 - fv = va_arg(va, double); - 2ce0: e0ba sd a4,64(sp) - 2ce2: 000bb507 fld fa0,0(s7) - if (pr == -1) - 2ce6: 12f884e3 beq a7,a5,360e - else if (pr == 0) - 2cea: 6e0887e3 beqz a7,3bd8 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 2cee: fff8871b addiw a4,a7,-1 - 2cf2: 800007b7 lui a5,0x80000 - 2cf6: 8f5d or a4,a4,a5 - 2cf8: 2701 sext.w a4,a4 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2cfa: 00088a9b sext.w s5,a7 - 2cfe: 8a46 mv s4,a7 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 2d00: 10d4 addi a3,sp,100 - 2d02: 0110 addi a2,sp,128 - 2d04: 108c addi a1,sp,96 - 2d06: 18a8 addi a0,sp,120 - 2d08: f01e sd t2,32(sp) - 2d0a: ec1a sd t1,24(sp) - 2d0c: e872 sd t3,16(sp) - 2d0e: cdcfe0ef jal 11ea - 2d12: 6e42 ld t3,16(sp) - 2d14: 6362 ld t1,24(sp) - 2d16: 7382 ld t2,32(sp) - 2d18: 4281 li t0,0 - 2d1a: c509 beqz a0,2d24 - fl |= STBSP__NEGATIVE; - 2d1c: 080e6e13 ori t3,t3,128 - 2d20: 08000293 li t0,128 - if (l > (stbsp__uint32)pr) - 2d24: 5806 lw a6,96(sp) - 2d26: 010af463 bgeu s5,a6,2d2e - l = pr; - 2d2a: d0d6 sw s5,96(sp) - 2d2c: 8856 mv a6,s5 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d2e: 4705 li a4,1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2d30: 5796 lw a5,100(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d32: 01076463 bltu a4,a6,2d3a - 2d36: 1800106f j 3eb6 - 2d3a: 7be6 ld s7,120(sp) - 2d3c: fff8071b addiw a4,a6,-1 - 2d40: 1702 slli a4,a4,0x20 - 2d42: 9301 srli a4,a4,0x20 - 2d44: 001a0e9b addiw t4,s4,1 - 2d48: 75e2 ld a1,56(sp) - 2d4a: 8ade mv s5,s7 - 2d4c: 975e add a4,a4,s7 - 2d4e: 410e8ebb subw t4,t4,a6 - 2d52: 88d2 mv a7,s4 - 2d54: 86c2 mv a3,a6 - 2d56: 4f01 li t5,0 - 2d58: 03000f93 li t6,48 - 2d5c: e842 sd a6,16(sp) - 2d5e: a809 j 2d70 - --pr; - 2d60: 38fd addiw a7,a7,-1 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d62: 211e80e3 beq t4,a7,3762 - 2d66: 177d addi a4,a4,-1 # 6fff - 2d68: 4f05 li t5,1 - 2d6a: 1e088ce3 beqz a7,3762 - --l; - 2d6e: 85b6 mv a1,a3 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d70: 00074803 lbu a6,0(a4) - 2d74: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff718f> - 2d78: 0006851b sext.w a0,a3 - 2d7c: 2581 sext.w a1,a1 - 2d7e: 0006069b sext.w a3,a2 - 2d82: fdf80fe3 beq a6,t6,2d60 - 2d86: 6842 ld a6,16(sp) - 2d88: fc2e sd a1,56(sp) - 2d8a: 86c2 mv a3,a6 - 2d8c: 000f0463 beqz t5,2d94 - 2d90: d0ae sw a1,96(sp) - 2d92: 86ae mv a3,a1 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2d94: 5775 li a4,-3 - 2d96: 08e7cee3 blt a5,a4,3632 - 2d9a: 08fa4be3 blt s4,a5,3630 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d9e: 0005071b sext.w a4,a0 - if (dp > 0) { - 2da2: 7ef057e3 blez a5,3d90 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2da6: 4881 li a7,0 - 2da8: 00e7d463 bge a5,a4,2db0 - 2dac: 40f508bb subw a7,a0,a5 - tail[0] = 0; - 2db0: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 2db4: 20029463 bnez t0,2fbc - } else if (fl & STBSP__LEADINGSPACE) { - 2db8: 004e7713 andi a4,t3,4 - 2dbc: 000715e3 bnez a4,35c6 - } else if (fl & STBSP__LEADINGPLUS) { - 2dc0: 002e7713 andi a4,t3,2 - 2dc4: 660719e3 bnez a4,3c36 - sign[0] = 0; - 2dc8: 06010423 sb zero,104(sp) - 2dcc: aaed j 2fc6 - h = (f[0] == 'A') ? hexu : hex; - 2dce: 04100713 li a4,65 - 2dd2: 00005597 auipc a1,0x5 - 2dd6: 22e58593 addi a1,a1,558 # 8000 - 2dda: 00e783e3 beq a5,a4,35e0 - fv = va_arg(va, double); - 2dde: 008b8693 addi a3,s7,8 - if (pr == -1) - 2de2: 577d li a4,-1 - fv = va_arg(va, double); - 2de4: e0b6 sd a3,64(sp) - 2de6: 000bb783 ld a5,0(s7) - if (pr == -1) - 2dea: 7ee88963 beq a7,a4,35dc - d = value; - - STBSP__COPYFP(b, d); - - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2dee: 4347d613 srai a2,a5,0x34 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2df2: 00c79513 slli a0,a5,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2df6: 7ff67613 andi a2,a2,2047 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2dfa: 8131 srli a0,a0,0xc - *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2dfc: c016061b addiw a2,a2,-1023 - if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 2e00: 7a07c863 bltz a5,35b0 - } else if (fl & STBSP__LEADINGSPACE) { - 2e04: 004e7793 andi a5,t3,4 - 2e08: 60078ee3 beqz a5,3c24 - 2e0c: 6789 lui a5,0x2 - 2e0e: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x689> - sign[0] = 1; - 2e10: 06f11423 sh a5,104(sp) - 2e14: 468d li a3,3 - 2e16: 4a0d li s4,3 - 2e18: 4809 li a6,2 - n64 |= (((stbsp__uint64)1) << 52); - 2e1a: 4705 li a4,1 - 2e1c: 1752 slli a4,a4,0x34 - if (dp == -1023) - 2e1e: c0100793 li a5,-1023 - n64 |= (((stbsp__uint64)1) << 52); - 2e22: 8f49 or a4,a4,a0 - if (dp == -1023) - 2e24: 5cf600e3 beq a2,a5,3be4 - if (pr < 15) - 2e28: 4539 li a0,14 - n64 <<= (64 - 56); - 2e2a: 00871793 slli a5,a4,0x8 - if (pr < 15) - 2e2e: 251546e3 blt a0,a7,387a - n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 2e32: 4705 li a4,1 - 2e34: 0028951b slliw a0,a7,0x2 - 2e38: 176e slli a4,a4,0x3b - 2e3a: 00a75733 srl a4,a4,a0 - 2e3e: 973e add a4,a4,a5 - *s++ = h[(n64 >> 60) & 15]; - 2e40: 03c75793 srli a5,a4,0x3c - 2e44: 97ae add a5,a5,a1 - 2e46: 0007c503 lbu a0,0(a5) - lead[1 + lead[0]] = '0'; - 2e4a: 22080793 addi a5,a6,544 - 2e4e: 06010813 addi a6,sp,96 - 2e52: 97c2 add a5,a5,a6 - 2e54: 03000813 li a6,48 - 2e58: df078423 sb a6,-536(a5) - lead[2 + lead[0]] = 'x'; - 2e5c: 22068793 addi a5,a3,544 - 2e60: 1094 addi a3,sp,96 - 2e62: 96be add a3,a3,a5 - 2e64: 07800793 li a5,120 - 2e68: def68423 sb a5,-536(a3) - lead[0] += 2; - 2e6c: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 2e70: 0ca10023 sb a0,192(sp) - if (pr) - 2e74: 740893e3 bnez a7,3dba - sn = s; - 2e78: 0c110793 addi a5,sp,193 - 2e7c: fcbe sd a5,120(sp) - 2e7e: 4701 li a4,0 - 2e80: 4501 li a0,0 - 2e82: 4305 li t1,1 - 2e84: 4685 li a3,1 - tail[1] = h[17]; - 2e86: 0115c583 lbu a1,17(a1) - tail[2] = '+'; - 2e8a: 02b00793 li a5,43 - tail[1] = h[17]; - 2e8e: 06b108a3 sb a1,113(sp) - if (dp < 0) { - 2e92: 00065663 bgez a2,2e9e - dp = -dp; - 2e96: 40c0063b negw a2,a2 - tail[2] = '-'; - 2e9a: 02d00793 li a5,45 - tail[n] = '0' + dp % 10; - 2e9e: 4829 li a6,10 - 2ea0: 030665bb remw a1,a2,a6 - 2ea4: 06f10923 sb a5,114(sp) - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2ea8: 3e700e93 li t4,999 - tail[n] = '0' + dp % 10; - 2eac: 0305859b addiw a1,a1,48 - 2eb0: 0ff5f593 zext.b a1,a1 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2eb4: 18cec3e3 blt t4,a2,383a - 2eb8: 06300e93 li t4,99 - 2ebc: 54cec1e3 blt t4,a2,3bfe - 2ec0: 4ea5 li t4,9 - 2ec2: 72ced6e3 bge t4,a2,3dee - dp /= 10; - 2ec6: 030647bb divw a5,a2,a6 - tail[0] = (char)n; - 2eca: 4611 li a2,4 - 2ecc: 06c10823 sb a2,112(sp) - tail[n] = '0' + dp % 10; - 2ed0: 06b10a23 sb a1,116(sp) - 2ed4: 4811 li a6,4 - 2ed6: 4f91 li t6,4 - 2ed8: 0307879b addiw a5,a5,48 - 2edc: 06f109a3 sb a5,115(sp) - n = pr + lead[0] + tail[0] + tz; - 2ee0: 006a07bb addw a5,s4,t1 - 2ee4: 010787bb addw a5,a5,a6 - 2ee8: 0117863b addw a2,a5,a7 - dp = (int)(s - sn); - 2eec: d2aa sw a0,100(sp) - l = (int)(s - (num + 64)); - 2eee: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 2ef0: 87b2 mv a5,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 2ef2: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2ef6: 835a mv t1,s6 - 2ef8: 00cb5363 bge s6,a2,2efe - 2efc: 8332 mv t1,a2 - cs = 1 + (3 << 24); - 2efe: 030002b7 lui t0,0x3000 - fw -= n; - 2f02: 40f3033b subw t1,t1,a5 - cs = 1 + (3 << 24); - 2f06: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7191> - s = num + 64; - 2f08: 0c010a93 addi s5,sp,192 - goto scopy; - 2f0c: b311 j 2c10 - h = (f[0] == 'B') ? hexu : hex; - 2f0e: 04200713 li a4,66 - 2f12: 00005817 auipc a6,0x5 - 2f16: 0ee80813 addi a6,a6,238 # 8000 - 2f1a: 6ce78963 beq a5,a4,35ec - if (fl & STBSP__LEADING_0X) { - 2f1e: 008e7793 andi a5,t3,8 - 2f22: 66079e63 bnez a5,359e - lead[0] = 0; - 2f26: 06010423 sb zero,104(sp) - l = (8 << 4) | (1 << 8); - 2f2a: 18000793 li a5,384 - 2f2e: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 2f30: 020e7713 andi a4,t3,32 - goto radixnum; - 2f34: b979 j 2bd2 - *s = (char)va_arg(va, int); - 2f36: 000ba783 lw a5,0(s7) - l = 1; - 2f3a: 4705 li a4,1 - 2f3c: d0ba sw a4,96(sp) - *s = (char)va_arg(va, int); - 2f3e: 26f10fa3 sb a5,639(sp) - 2f42: 008b8793 addi a5,s7,8 - lead[0] = 0; - 2f46: 06010423 sb zero,104(sp) - tail[0] = 0; - 2f4a: 06010823 sb zero,112(sp) - dp = 0; - 2f4e: d282 sw zero,100(sp) - *s = (char)va_arg(va, int); - 2f50: e0be sd a5,64(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 2f52: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 2f56: 835a mv t1,s6 - 2f58: 69605063 blez s6,35d8 - fw -= n; - 2f5c: 337d addiw t1,t1,-1 - goto scopy; - 2f5e: 4701 li a4,0 - 2f60: 4f81 li t6,0 - 2f62: 4685 li a3,1 - 2f64: 4a01 li s4,0 - cs = 0; - 2f66: 4281 li t0,0 - s = num + STBSP__NUMSZ - 1; - 2f68: 27f10a93 addi s5,sp,639 - tz = 0; - 2f6c: 4881 li a7,0 - goto scopy; - 2f6e: b14d j 2c10 - fv = va_arg(va, double); - 2f70: 008b8713 addi a4,s7,8 - if (fl & STBSP__METRIC_SUFFIX) { - 2f74: 100e7793 andi a5,t3,256 - fv = va_arg(va, double); - 2f78: e0ba sd a4,64(sp) - 2f7a: 000bb507 fld fa0,0(s7) - if (fl & STBSP__METRIC_SUFFIX) { - 2f7e: be0795e3 bnez a5,2b68 - if (pr == -1) - 2f82: 57fd li a5,-1 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2f84: 0008871b sext.w a4,a7 - if (pr == -1) - 2f88: 00f89463 bne a7,a5,2f90 - 2f8c: 4719 li a4,6 - pr = 6; // default is 6 - 2f8e: 4899 li a7,6 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2f90: 10d4 addi a3,sp,100 - 2f92: 0110 addi a2,sp,128 - 2f94: 108c addi a1,sp,96 - 2f96: 18a8 addi a0,sp,120 - 2f98: f01e sd t2,32(sp) - 2f9a: ec72 sd t3,24(sp) - 2f9c: e846 sd a7,16(sp) - 2f9e: a4cfe0ef jal 11ea - 2fa2: 6e62 ld t3,24(sp) - 2fa4: 68c2 ld a7,16(sp) - 2fa6: 7382 ld t2,32(sp) - if (dp == STBSP__SPECIAL) { - 2fa8: 5796 lw a5,100(sp) - if ((stbsp__int32)(l + n) > pr) - 2faa: 5686 lw a3,96(sp) - if (fl & STBSP__NEGATIVE) { - 2fac: 080e7293 andi t0,t3,128 - if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2fb0: e00500e3 beqz a0,2db0 - fl |= STBSP__NEGATIVE; - 2fb4: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 2fb8: 06010823 sb zero,112(sp) - sign[0] = 1; - 2fbc: 670d lui a4,0x3 - 2fbe: d0170713 addi a4,a4,-767 # 2d01 - 2fc2: 06e11423 sh a4,104(sp) - if (dp == STBSP__SPECIAL) { - 2fc6: 671d lui a4,0x7 - 2fc8: 7ce78963 beq a5,a4,379a - if (dp <= 0) { - 2fcc: 46f05fe3 blez a5,3c4a - cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 2fd0: 040e7313 andi t1,t3,64 - 2fd4: 00078e9b sext.w t4,a5 - 2fd8: 4581 li a1,0 - 2fda: 00030963 beqz t1,2fec - 2fde: 25800593 li a1,600 - 2fe2: 41d585bb subw a1,a1,t4 - 2fe6: 470d li a4,3 - 2fe8: 02e5f5bb remuw a1,a1,a4 - *s++ = stbsp__comma; - 2fec: 00005a17 auipc s4,0x5 - 2ff0: f2ca0a13 addi s4,s4,-212 # 7f18 - s = (char *)sn; - 2ff4: 7f66 ld t5,120(sp) - *s++ = stbsp__comma; - 2ff6: 0cda4283 lbu t0,205(s4) - s = num + 64; - 2ffa: 0c010a93 addi s5,sp,192 - if ((stbsp__uint32)dp >= l) { - 2ffe: 44defb63 bgeu t4,a3,3454 - n = 0; - 3002: 4501 li a0,0 - s = num + 64; - 3004: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3006: 4b91 li s7,4 - 3008: a015 j 302c - 300a: 8642 mv a2,a6 - 300c: 883a mv a6,a4 - 300e: 8732 mv a4,a2 - *s++ = sn[n]; - 3010: 02051613 slli a2,a0,0x20 - 3014: 9201 srli a2,a2,0x20 - 3016: 967a add a2,a2,t5 - 3018: 00064f83 lbu t6,0(a2) - ++n; - 301c: 0015061b addiw a2,a0,1 - 3020: 0006051b sext.w a0,a2 - *s++ = sn[n]; - 3024: fff70fa3 sb t6,-1(a4) # 6fff - if (n >= (stbsp__uint32)dp) - 3028: 7bd57563 bgeu a0,t4,37d2 - *s++ = stbsp__comma; - 302c: 00170813 addi a6,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3030: fc030de3 beqz t1,300a - 3034: 2585 addiw a1,a1,1 - 3036: fd759ae3 bne a1,s7,300a - *s++ = stbsp__comma; - 303a: fe580fa3 sb t0,-1(a6) - 303e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3040: 4585 li a1,1 - 3042: b7f9 j 3010 - *d = tlen + (int)(bf - buf); - 3044: 000bb703 ld a4,0(s7) - 3048: 412407b3 sub a5,s0,s2 - 304c: 01a787bb addw a5,a5,s10 - int *d = va_arg(va, int *); - 3050: 008b8693 addi a3,s7,8 - 3054: e0b6 sd a3,64(sp) - *d = tlen + (int)(bf - buf); - 3056: c31c sw a5,0(a4) - } break; - 3058: bae5 j 2a50 - if (fl & STBSP__LEADING_0X) { - 305a: 008e7793 andi a5,t3,8 - 305e: 50079b63 bnez a5,3574 - lead[0] = 0; - 3062: 06010423 sb zero,104(sp) - l = (3 << 4) | (3 << 8); - 3066: 33000793 li a5,816 - 306a: d0be sw a5,96(sp) - if (fl & STBSP__INTMAX) { - 306c: 020e7713 andi a4,t3,32 - h = hexu; - 3070: 00005817 auipc a6,0x5 - 3074: f7880813 addi a6,a6,-136 # 7fe8 - goto radixnum; - 3078: bea9 j 2bd2 - fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 307a: fefe7e13 andi t3,t3,-17 - 307e: 020e6e13 ori t3,t3,32 - 3082: 02000713 li a4,32 - pr = sizeof(void *) * 2; - 3086: 48c1 li a7,16 - h = (f[0] == 'X') ? hexu : hex; - 3088: 00005817 auipc a6,0x5 - 308c: f7880813 addi a6,a6,-136 # 8000 - 3090: be05 j 2bc0 - s = va_arg(va, char *); - 3092: 000bba83 ld s5,0(s7) - 3096: 008b8793 addi a5,s7,8 - 309a: e0be sd a5,64(sp) - if (s == 0) - 309c: 360a8ee3 beqz s5,3c18 - if (((stbsp__uintptr)sn & 3) == 0) - 30a0: 003af793 andi a5,s5,3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 30a4: 5208c663 bltz a7,35d0 - 30a8: 0008869b sext.w a3,a7 - if (((stbsp__uintptr)sn & 3) == 0) - 30ac: 2a0782e3 beqz a5,3b50 - if (!limit || *sn == 0) - 30b0: 5a068b63 beqz a3,3666 - if (((stbsp__uintptr)sn & 3) == 0) - 30b4: 87d6 mv a5,s5 - 30b6: a801 j 30c6 - ++sn; - 30b8: 0785 addi a5,a5,1 - if (((stbsp__uintptr)sn & 3) == 0) - 30ba: 0037f713 andi a4,a5,3 - --limit; - 30be: 36fd addiw a3,a3,-1 - if (((stbsp__uintptr)sn & 3) == 0) - 30c0: 280709e3 beqz a4,3b52 - if (!limit || *sn == 0) - 30c4: c681 beqz a3,30cc - 30c6: 0007c703 lbu a4,0(a5) - 30ca: f77d bnez a4,30b8 - return (stbsp__uint32)(sn - s); - 30cc: 415787b3 sub a5,a5,s5 - 30d0: 0007869b sext.w a3,a5 - if (pr < (stbsp__int32)l) - 30d4: fff6c713 not a4,a3 - 30d8: 977d srai a4,a4,0x3f - 30da: 8f7d and a4,a4,a5 - 30dc: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 30e0: 863e mv a2,a5 - pr -= l; - 30e2: 9f15 subw a4,a4,a3 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 30e4: d0b6 sw a3,96(sp) - lead[0] = 0; - 30e6: 06010423 sb zero,104(sp) - tail[0] = 0; - 30ea: 06010823 sb zero,112(sp) - dp = 0; - 30ee: d282 sw zero,100(sp) - if ((fl & STBSP__LEFTJUST) == 0) { - 30f0: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 30f4: 835a mv t1,s6 - 30f6: 00fb5363 bge s6,a5,30fc - 30fa: 833e mv t1,a5 - fw -= n; - 30fc: 40c3033b subw t1,t1,a2 - goto scopy; - 3100: 4f81 li t6,0 - 3102: 4a01 li s4,0 - cs = 0; - 3104: 4281 li t0,0 - tz = 0; - 3106: 4881 li a7,0 - goto scopy; - 3108: b621 j 2c10 - *bf++ = stbsp__comma; - 310a: 87b2 mv a5,a2 - cs = 0; - 310c: 4a01 li s4,0 - 310e: e44ff06f j 2752 - lead[0] -= (char)i; - 3112: 06010423 sb zero,104(sp) - while (i) { - 3116: d38ff06f j 264e - lead[0] -= (char)i; - 311a: 06010423 sb zero,104(sp) - while (i) { - 311e: ed8ff06f j 27f6 - while (i >= 4) { - 3122: 06fadc63 bge s5,a5,319a - tz -= i; - 3126: 8722 mv a4,s0 - 3128: 0007851b sext.w a0,a5 - while (i >= 4) { - 312c: 008785bb addw a1,a5,s0 - *(stbsp__uint32 *)bf = 0x30303030; - 3130: 01672023 sw s6,0(a4) - bf += 4; - 3134: 0711 addi a4,a4,4 - while (i >= 4) { - 3136: 40e5863b subw a2,a1,a4 - 313a: fecacbe3 blt s5,a2,3130 - 313e: ffc5061b addiw a2,a0,-4 - 3142: 0026561b srliw a2,a2,0x2 - 3146: 0016071b addiw a4,a2,1 - 314a: 37f1 addiw a5,a5,-4 - 314c: 0026161b slliw a2,a2,0x2 - 3150: 070a slli a4,a4,0x2 - 3152: 9722 add a4,a4,s0 - 3154: 9f91 subw a5,a5,a2 - while (i) { - 3156: 843a mv s0,a4 - 3158: 80078de3 beqz a5,2972 - 315c: 1782 slli a5,a5,0x20 - 315e: 9381 srli a5,a5,0x20 - 3160: 00f70433 add s0,a4,a5 - *bf++ = '0'; - 3164: 0705 addi a4,a4,1 - 3166: ff470fa3 sb s4,-1(a4) - while (i) { - 316a: fe871de3 bne a4,s0,3164 - 316e: 805ff06f j 2972 - stbsp__cb_buf_clamp(i, pr); - 3172: 85ce mv a1,s3 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3174: 4981 li s3,0 - 3176: dc049263 bnez s1,273a - 317a: b8d5 j 2a6e - STBSP__UNALIGNED(while (i >= 4) { - 317c: 4401 li s0,0 - 317e: 85be mv a1,a5 - 3180: f0ea4b63 blt s4,a4,2896 - 3184: f42ff06f j 28c6 - if ((((stbsp__uintptr)bf) & 3) == 0) - 3188: 00347713 andi a4,s0,3 - stbsp__cb_buf_clamp(i, tz); - 318c: 87c6 mv a5,a7 - tz -= i; - 318e: 4881 li a7,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 3190: fc071c63 bnez a4,2968 - while (i >= 4) { - 3194: 470d li a4,3 - 3196: f8f748e3 blt a4,a5,3126 - 319a: 8722 mv a4,s0 - 319c: b7c1 j 315c - tail[0] -= (char)i; - 319e: 06010823 sb zero,112(sp) - while (i) { - 31a2: b0b9 j 29f0 - while (i >= 4) { - 31a4: 478d li a5,3 - 31a6: 8622 mv a2,s0 - 31a8: d8b7d963 bge a5,a1,273a - 31ac: ffc5839b addiw t2,a1,-4 - 31b0: 0023d79b srliw a5,t2,0x2 - 31b4: 0017859b addiw a1,a5,1 - 31b8: 058a slli a1,a1,0x2 - 31ba: 942e add s0,s0,a1 - *(stbsp__uint32 *)bf = 0x30303030; - 31bc: 01762023 sw s7,0(a2) - bf += 4; - 31c0: 0611 addi a2,a2,4 - while (i >= 4) { - 31c2: fe861de3 bne a2,s0,31bc - 31c6: 0027979b slliw a5,a5,0x2 - 31ca: 40f385bb subw a1,t2,a5 - 31ce: d68ff06f j 2736 - while (i) { - 31d2: 85be mv a1,a5 - 31d4: ee071963 bnez a4,28c6 - 31d8: f16ff06f j 28ee - 31dc: 2c013a03 ld s4,704(sp) - 31e0: 2b813a83 ld s5,696(sp) - 31e4: 2b013b03 ld s6,688(sp) - 31e8: 8ca2 mv s9,s0 - 31ea: a04ff06f j 23ee - stbsp__chk_cb_buf(1); - 31ee: 2601 sext.w a2,a2 - 31f0: 1fe00793 li a5,510 - 31f4: f8c7c563 blt a5,a2,297e - 31f8: f3eff06f j 2936 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 31fc: fbfe7e13 andi t3,t3,-65 - if (fw + pr) { - 3200: 006707bb addw a5,a4,t1 - fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 3204: 2e01 sext.w t3,t3 - if (fw + pr) { - 3206: a0078be3 beqz a5,2c1c - while (fw > 0) { - 320a: be605663 blez t1,25f6 - *(stbsp__uint32 *)bf = 0x20202020; - 320e: 20202837 lui a6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 3212: 854a mv a0,s2 - 3214: 894e mv s2,s3 - 3216: 69a2 ld s3,8(sp) - *(stbsp__uint32 *)bf = 0x20202020; - 3218: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201f91b0> - stbsp__cb_buf_clamp(i, fw); - 321c: ec52 sd s4,24(sp) - 321e: f426 sd s1,40(sp) - 3220: 87a2 mv a5,s0 - 3222: 84ea mv s1,s10 - stbsp__chk_cb_buf(1); - 3224: 1fe00f13 li t5,510 - stbsp__cb_buf_clamp(i, fw); - 3228: 8d6e mv s10,s11 - *bf++ = ' '; - 322a: 02000b13 li s6,32 - stbsp__cb_buf_clamp(i, fw); - 322e: 8de6 mv s11,s9 - while (i >= 4) { - 3230: 4b8d li s7,3 - stbsp__cb_buf_clamp(i, fw); - 3232: 20000e93 li t4,512 - 3236: e846 sd a7,16(sp) - 3238: f07e sd t6,32(sp) - 323a: f836 sd a3,48(sp) - 323c: e4f2 sd t3,72(sp) - 323e: e8ba sd a4,80(sp) - 3240: ec96 sd t0,88(sp) - 3242: 841a mv s0,t1 - 3244: 8a42 mv s4,a6 - 3246: 8c9e mv s9,t2 - 3248: 0c090063 beqz s2,3308 - 324c: 40a78633 sub a2,a5,a0 - 3250: 40ce873b subw a4,t4,a2 - 3254: 86ba mv a3,a4 - 3256: 00e45363 bge s0,a4,325c - 325a: 86a2 mv a3,s0 - 325c: 0006871b sext.w a4,a3 - fw -= i; - 3260: 9c15 subw s0,s0,a3 - while (i) { - 3262: e719 bnez a4,3270 - 3264: a095 j 32c8 - *bf++ = ' '; - 3266: 01678023 sb s6,0(a5) - --i; - 326a: 377d addiw a4,a4,-1 - *bf++ = ' '; - 326c: 0785 addi a5,a5,1 - while (i) { - 326e: cb29 beqz a4,32c0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 3270: 0037f693 andi a3,a5,3 - 3274: faed bnez a3,3266 - while (i >= 4) { - 3276: 86be mv a3,a5 - 3278: 00070f9b sext.w t6,a4 - 327c: 00f705bb addw a1,a4,a5 - 3280: 02ebd763 bge s7,a4,32ae - *(stbsp__uint32 *)bf = 0x20202020; - 3284: 0146a023 sw s4,0(a3) - bf += 4; - 3288: 0691 addi a3,a3,4 - while (i >= 4) { - 328a: 40d5863b subw a2,a1,a3 - 328e: fecbcbe3 blt s7,a2,3284 - 3292: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff718c> - 3296: 0026561b srliw a2,a2,0x2 - 329a: 0016069b addiw a3,a2,1 - 329e: 3771 addiw a4,a4,-4 - 32a0: 0026161b slliw a2,a2,0x2 - 32a4: 068a slli a3,a3,0x2 - 32a6: 96be add a3,a3,a5 - 32a8: 9f11 subw a4,a4,a2 - while (i) { - 32aa: 87b6 mv a5,a3 - 32ac: cb11 beqz a4,32c0 - 32ae: 1702 slli a4,a4,0x20 - 32b0: 9301 srli a4,a4,0x20 - 32b2: 00e687b3 add a5,a3,a4 - *bf++ = ' '; - 32b6: 0685 addi a3,a3,1 - 32b8: ff668fa3 sb s6,-1(a3) - while (i) { - 32bc: fef69de3 bne a3,a5,32b6 - stbsp__chk_cb_buf(1); - 32c0: 40a78633 sub a2,a5,a0 - 32c4: 00090e63 beqz s2,32e0 - 32c8: 2601 sext.w a2,a2 - 32ca: 00cf5b63 bge t5,a2,32e0 - 32ce: 85ce mv a1,s3 - 32d0: 9cb1 addw s1,s1,a2 - 32d2: 9902 jalr s2 - 32d4: c541 beqz a0,335c - 32d6: 87aa mv a5,a0 - 32d8: 20000e93 li t4,512 - 32dc: 1fe00f13 li t5,510 - while (fw > 0) { - 32e0: f68044e3 bgtz s0,3248 - 32e4: 8322 mv t1,s0 - 32e6: 89ca mv s3,s2 - 32e8: 83e6 mv t2,s9 - 32ea: 68c2 ld a7,16(sp) - 32ec: 8cee mv s9,s11 - 32ee: 6a62 ld s4,24(sp) - 32f0: 8dea mv s11,s10 - 32f2: 7f82 ld t6,32(sp) - 32f4: 8d26 mv s10,s1 - 32f6: 76c2 ld a3,48(sp) - 32f8: 6e26 ld t3,72(sp) - 32fa: 6746 ld a4,80(sp) - 32fc: 62e6 ld t0,88(sp) - 32fe: 74a2 ld s1,40(sp) - 3300: 892a mv s2,a0 - 3302: 843e mv s0,a5 - 3304: af2ff06f j 25f6 - stbsp__cb_buf_clamp(i, fw); - 3308: 8722 mv a4,s0 - 330a: 4401 li s0,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 330c: b795 j 3270 - n64 = va_arg(va, stbsp__uint32); - 330e: 000be683 lwu a3,0(s7) - 3312: b0f9 j 2be0 - 3314: 2c013a03 ld s4,704(sp) - 3318: 2b813a83 ld s5,696(sp) - 331c: 2b013b03 ld s6,688(sp) - 3320: 8cca mv s9,s2 - 3322: 8ccff06f j 23ee - 3326: 8cd6 mv s9,s5 - 3328: 2c013a03 ld s4,704(sp) - 332c: 2b813a83 ld s5,696(sp) - 3330: 2b013b03 ld s6,688(sp) - 3334: 8baff06f j 23ee - 3338: 2c013a03 ld s4,704(sp) - 333c: 2b813a83 ld s5,696(sp) - 3340: 2b013b03 ld s6,688(sp) - 3344: 8cea mv s9,s10 - 3346: 8a8ff06f j 23ee - while (i) { - 334a: 85a2 mv a1,s0 - 334c: c12ff06f j 275e - while (i >= 4) { - 3350: 478d li a5,3 - 3352: 8622 mv a2,s0 - 3354: e4b7cce3 blt a5,a1,31ac - 3358: be2ff06f j 273a - 335c: 2c013a03 ld s4,704(sp) - 3360: 2b813a83 ld s5,696(sp) - 3364: 2b013b03 ld s6,688(sp) - 3368: 8ca6 mv s9,s1 - 336a: 884ff06f j 23ee - lead[2] = h[16]; - 336e: 01084683 lbu a3,16(a6) - lead[0] = 2; - 3372: 678d lui a5,0x3 - 3374: 0789 addi a5,a5,2 # 3002 - 3376: 06f11423 sh a5,104(sp) - lead[2] = h[16]; - 337a: 06d10523 sb a3,106(sp) - 337e: b891 j 2bd2 - 3380: 8cea mv s9,s10 - 3382: 86cff06f j 23ee - 3386: 4f81 li t6,0 - 3388: 4a01 li s4,0 - 338a: 5586 lw a1,96(sp) - *--s = stbsp__comma; - 338c: 00005f17 auipc t5,0x5 - 3390: c59f4f03 lbu t5,-935(t5) # 7fe5 - 3394: 0510 addi a2,sp,640 - 3396: 0085d71b srliw a4,a1,0x8 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 339a: 4305 li t1,1 - if (fl & STBSP__TRIPLET_COMMA) { - 339c: 040e7e93 andi t4,t3,64 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 33a0: 0007029b sext.w t0,a4 - 33a4: 005317bb sllw a5,t1,t0 - 33a8: 37fd addiw a5,a5,-1 - 33aa: 8ff5 and a5,a5,a3 - 33ac: 97c2 add a5,a5,a6 - 33ae: 0007c783 lbu a5,0(a5) - n64 >>= (l >> 8); - 33b2: 0056d6b3 srl a3,a3,t0 - *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 33b6: fff60a93 addi s5,a2,-1 - 33ba: fef60fa3 sb a5,-1(a2) - if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 33be: e691 bnez a3,33ca - 33c0: 051c addi a5,sp,640 - 33c2: 415787bb subw a5,a5,s5 - 33c6: 0317dd63 bge a5,a7,3400 - if (fl & STBSP__TRIPLET_COMMA) { - 33ca: 020e8963 beqz t4,33fc - ++l; - 33ce: 0015879b addiw a5,a1,1 - if ((l & 15) == ((l >> 4) & 15)) { - 33d2: 0047d29b srliw t0,a5,0x4 - 33d6: 00f2c2b3 xor t0,t0,a5 - 33da: 00f2f293 andi t0,t0,15 - ++l; - 33de: 0007859b sext.w a1,a5 - if ((l & 15) == ((l >> 4) & 15)) { - 33e2: 0087d71b srliw a4,a5,0x8 - 33e6: 00029b63 bnez t0,33fc - l &= ~15; - 33ea: 9bc1 andi a5,a5,-16 - 33ec: 0007859b sext.w a1,a5 - *--s = stbsp__comma; - 33f0: ffe60a93 addi s5,a2,-2 - 33f4: ffe60f23 sb t5,-2(a2) - 33f8: 0087d71b srliw a4,a5,0x8 - 33fc: 8656 mv a2,s5 - 33fe: b74d j 33a0 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 3400: 0045d29b srliw t0,a1,0x4 - 3404: 0f0006b7 lui a3,0xf000 - if (pr < (stbsp__int32)l) - 3408: 0007871b sext.w a4,a5 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 340c: 0182929b slliw t0,t0,0x18 - 3410: 00d2f2b3 and t0,t0,a3 - n = pr + lead[0] + tail[0] + tz; - 3414: 00ef863b addw a2,t6,a4 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 3418: d0be sw a5,96(sp) - n = pr + lead[0] + tail[0] + tz; - 341a: 8fb2 mv t6,a2 - cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 341c: 86be mv a3,a5 - 341e: 00f282bb addw t0,t0,a5 - if (fw < (stbsp__int32)n) - 3422: 835a mv t1,s6 - 3424: 00cb5363 bge s6,a2,342a - 3428: 8332 mv t1,a2 - fw -= n; - 342a: 41f3033b subw t1,t1,t6 - pr -= l; - 342e: 9f1d subw a4,a4,a5 - goto scopy; - 3430: 4f81 li t6,0 - tz = 0; - 3432: 4881 li a7,0 - goto scopy; - 3434: fdcff06f j 2c10 - 3438: 8cda mv s9,s6 - 343a: 2c013a03 ld s4,704(sp) - 343e: 2b813a83 ld s5,696(sp) - 3442: 2b013b03 ld s6,688(sp) - 3446: fa9fe06f j 23ee - fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 344a: 020e6e13 ori t3,t3,32 - ++f; - 344e: 0485 addi s1,s1,1 - 3450: 864ff06f j 24b4 - n = 0; - 3454: 4601 li a2,0 - s = num + 64; - 3456: 8756 mv a4,s5 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3458: 4511 li a0,4 - *s++ = stbsp__comma; - 345a: 00170793 addi a5,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 345e: 00030563 beqz t1,3468 - 3462: 2585 addiw a1,a1,1 - 3464: 10a58363 beq a1,a0,356a - 3468: 873e mv a4,a5 - *s++ = sn[n]; - 346a: 02061793 slli a5,a2,0x20 - 346e: 9381 srli a5,a5,0x20 - 3470: 97fa add a5,a5,t5 - 3472: 0007c803 lbu a6,0(a5) - ++n; - 3476: 2605 addiw a2,a2,1 - *s++ = sn[n]; - 3478: ff070fa3 sb a6,-1(a4) - if (n >= l) - 347c: fcd66fe3 bltu a2,a3,345a - if (n < (stbsp__uint32)dp) { - 3480: 0bd663e3 bltu a2,t4,3d26 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 3484: 415707b3 sub a5,a4,s5 - 3488: 030002b7 lui t0,0x3000 - 348c: 00f282bb addw t0,t0,a5 - if (pr) { - 3490: 00088a63 beqz a7,34a4 - *s++ = stbsp__period; - 3494: 0cca4683 lbu a3,204(s4) - 3498: 00170793 addi a5,a4,1 - l = (stbsp__uint32)(s - (num + 64)); - 349c: 415787b3 sub a5,a5,s5 - *s++ = stbsp__period; - 34a0: 00d70023 sb a3,0(a4) - if (fl & STBSP__METRIC_SUFFIX) { - 34a4: 100e7713 andi a4,t3,256 - 34a8: 86f2 mv a3,t3 - 34aa: 2c070163 beqz a4,376c - if (fl & STBSP__METRIC_NOSPACE) - 34ae: 40ae5f9b sraiw t6,t3,0xa - 34b2: 001fcf93 xori t6,t6,1 - 34b6: 001fff93 andi t6,t6,1 - tail[1] = ' '; - 34ba: 02000713 li a4,32 - 34be: 06e108a3 sb a4,113(sp) - tail[0] = idx; - 34c2: 07f10823 sb t6,112(sp) - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 34c6: 018e561b srliw a2,t3,0x18 - 34ca: 018e571b srliw a4,t3,0x18 - n = pr + lead[0] + tail[0] + tz; - 34ce: 000f859b sext.w a1,t6 - if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 34d2: c225 beqz a2,3532 - if (fl & STBSP__METRIC_1024) - 34d4: 001f859b addiw a1,t6,1 - 34d8: 0ff5f613 zext.b a2,a1 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 34dc: 1702 slli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 34de: 03469513 slli a0,a3,0x34 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 34e2: 85b2 mv a1,a2 - 34e4: 9301 srli a4,a4,0x20 - if (fl & STBSP__METRIC_1024) - 34e6: 06055ee3 bgez a0,3d62 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 34ea: 00003517 auipc a0,0x3 - 34ee: cfe50513 addi a0,a0,-770 # 61e8 <_GLOBAL__sub_I__ZSt3cin+0x1f8> - 34f2: 972a add a4,a4,a0 - 34f4: 00074503 lbu a0,0(a4) - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 34f8: 6709 lui a4,0x2 - 34fa: 80070713 addi a4,a4,-2048 # 1800 - 34fe: 8f75 and a4,a4,a3 - tail[idx + 1] = "_KMGT"[fl >> 24]; - 3500: 06010813 addi a6,sp,96 - 3504: 22060693 addi a3,a2,544 - 3508: 96c2 add a3,a3,a6 - 350a: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff6f80> - if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 350e: 8007071b addiw a4,a4,-2048 - 3512: 060715e3 bnez a4,3d7c - tail[idx + 1] = 'i'; - 3516: 2f89 addiw t6,t6,2 - 3518: 0ffff593 zext.b a1,t6 - 351c: 1094 addi a3,sp,96 - 351e: 22058713 addi a4,a1,544 - 3522: 9736 add a4,a4,a3 - 3524: 06900693 li a3,105 - 3528: 8fae mv t6,a1 - 352a: ded70823 sb a3,-528(a4) - tail[0] = idx; - 352e: 07f10823 sb t6,112(sp) - l = (stbsp__uint32)(s - (num + 64)); - 3532: 0007869b sext.w a3,a5 - n = pr + lead[0] + tail[0] + tz; - 3536: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 353a: fff6c713 not a4,a3 - 353e: 977d srai a4,a4,0x3f - 3540: 8ff9 and a5,a5,a4 - n = pr + lead[0] + tail[0] + tz; - 3542: 00fa073b addw a4,s4,a5 - 3546: 9f2d addw a4,a4,a1 - 3548: 0117063b addw a2,a4,a7 - l = (stbsp__uint32)(s - (num + 64)); - 354c: d0b6 sw a3,96(sp) - n = pr + lead[0] + tail[0] + tz; - 354e: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 3550: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 3552: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 3556: 835a mv t1,s6 - 3558: 00cb5363 bge s6,a2,355e - 355c: 8332 mv t1,a2 - fw -= n; - 355e: 40e3033b subw t1,t1,a4 - pr -= l; - 3562: 40d7873b subw a4,a5,a3 - goto scopy; - 3566: eaaff06f j 2c10 - *s++ = stbsp__comma; - 356a: fe578fa3 sb t0,-1(a5) - 356e: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3570: 4585 li a1,1 - 3572: bde5 j 346a - lead[0] = 1; - 3574: 678d lui a5,0x3 - 3576: 0785 addi a5,a5,1 # 3001 - 3578: 06f11423 sh a5,104(sp) - 357c: b4ed j 3066 - if ((f[0] != 'u') && (i64 < 0)) { - 357e: 07500693 li a3,117 - stbsp__int64 i64 = va_arg(va, stbsp__int64); - 3582: 000bbf03 ld t5,0(s7) - if ((f[0] != 'u') && (i64 < 0)) { - 3586: dcd78263 beq a5,a3,2b4a - 358a: dc0f5063 bgez t5,2b4a - fl |= STBSP__NEGATIVE; - 358e: 08076713 ori a4,a4,128 - n64 = (stbsp__uint64)-i64; - 3592: 41e00f33 neg t5,t5 - fl |= STBSP__NEGATIVE; - 3596: 00070e1b sext.w t3,a4 - 359a: db0ff06f j 2b4a - lead[2] = h[0xb]; - 359e: 00b84703 lbu a4,11(a6) - lead[0] = 2; - 35a2: 678d lui a5,0x3 - 35a4: 0789 addi a5,a5,2 # 3002 - 35a6: 06f11423 sh a5,104(sp) - lead[2] = h[0xb]; - 35aa: 06e10523 sb a4,106(sp) - 35ae: bab5 j 2f2a - sign[0] = 1; - 35b0: 678d lui a5,0x3 - 35b2: d0178793 addi a5,a5,-767 # 2d01 - fl |= STBSP__NEGATIVE; - 35b6: 080e6e13 ori t3,t3,128 - sign[0] = 1; - 35ba: 06f11423 sh a5,104(sp) - 35be: 468d li a3,3 - 35c0: 4a0d li s4,3 - 35c2: 4809 li a6,2 - 35c4: b899 j 2e1a - sign[0] = 1; - 35c6: 6709 lui a4,0x2 - 35c8: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x689> - 35ca: 06e11423 sh a4,104(sp) - 35ce: bae5 j 2fc6 - if (((stbsp__uintptr)sn & 3) == 0) - 35d0: 0e0780e3 beqz a5,3eb0 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 35d4: 56fd li a3,-1 - 35d6: bcf9 j 30b4 - if (fw < (stbsp__int32)n) - 35d8: 4305 li t1,1 - 35da: b249 j 2f5c - pr = 6; // default is 6 - 35dc: 4899 li a7,6 - 35de: b801 j 2dee - h = (f[0] == 'A') ? hexu : hex; - 35e0: 00005597 auipc a1,0x5 - 35e4: a0858593 addi a1,a1,-1528 # 7fe8 - 35e8: ff6ff06f j 2dde - h = (f[0] == 'B') ? hexu : hex; - 35ec: 00005817 auipc a6,0x5 - 35f0: 9fc80813 addi a6,a6,-1540 # 7fe8 - 35f4: b22d j 2f1e - 35f6: 80000737 lui a4,0x80000 - 35fa: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff7196> - pr = 6; // default is 6 - 35fc: 4899 li a7,6 - 35fe: e4eff06f j 2c4c - h = (f[0] == 'E') ? hexu : hex; - 3602: 00005317 auipc t1,0x5 - 3606: 9e630313 addi t1,t1,-1562 # 7fe8 - 360a: e28ff06f j 2c32 - 360e: 80000737 lui a4,0x80000 - 3612: 4a99 li s5,6 - 3614: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff7195> - pr = 6; - 3616: 4a19 li s4,6 - 3618: ee8ff06f j 2d00 - h = (f[0] == 'G') ? hexu : hex; - 361c: 00005317 auipc t1,0x5 - 3620: 9cc30313 addi t1,t1,-1588 # 7fe8 - 3624: eb6ff06f j 2cda - 3628: 7be6 ld s7,120(sp) - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 362a: 86c2 mv a3,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 362c: 8542 mv a0,a6 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 362e: 88d2 mv a7,s4 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3630: 8ade mv s5,s7 - if (pr > (stbsp__int32)l) - 3632: 0005071b sext.w a4,a0 - 3636: 01175f63 bge a4,a7,3654 - pr = l - 1; - 363a: fff5089b addiw a7,a0,-1 - tail[0] = 0; - 363e: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 3642: 70028c63 beqz t0,3d5a - sign[0] = 1; - 3646: 670d lui a4,0x3 - 3648: d0170713 addi a4,a4,-767 # 2d01 - 364c: 06e11423 sh a4,104(sp) - 3650: e3aff06f j 2c8a - else if (pr) - 3654: fe0885e3 beqz a7,363e - --pr; // when using %e, there is one digit before the decimal - 3658: 38fd addiw a7,a7,-1 - 365a: b7d5 j 363e - switch (f[0]) { - 365c: 0034c783 lbu a5,3(s1) - f += 3; - 3660: 048d addi s1,s1,3 - 3662: e53fe06f j 24b4 - if (!limit || *sn == 0) - 3666: 4601 li a2,0 - 3668: 4701 li a4,0 - 366a: 4781 li a5,0 - return (stbsp__uint32)(sn - s); - 366c: bca5 j 30e4 - pr = 1; - 366e: 4885 li a7,1 - 3670: cf4ff06f j 2b64 - *s++ = sn[0]; - 3674: 000ac703 lbu a4,0(s5) - 3678: 0ce10023 sb a4,192(sp) - if (pr) - 367c: 54088563 beqz a7,3bc6 - *s++ = stbsp__period; - 3680: 00005617 auipc a2,0x5 - 3684: 96464603 lbu a2,-1692(a2) # 7fe4 - if ((l - 1) > (stbsp__uint32)pr) - 3688: fff6871b addiw a4,a3,-1 - *s++ = stbsp__period; - 368c: 0cc100a3 sb a2,193(sp) - if ((l - 1) > (stbsp__uint32)pr) - 3690: 0008851b sext.w a0,a7 - 3694: 0007061b sext.w a2,a4 - 3698: 52c57163 bgeu a0,a2,3bba - l = pr + 1; - 369c: 0018869b addiw a3,a7,1 - for (n = 1; n < l; n++) - 36a0: 8746 mv a4,a7 - 36a2: 02071613 slli a2,a4,0x20 - 36a6: 9201 srli a2,a2,0x20 - 36a8: 0c210713 addi a4,sp,194 - 36ac: 0a85 addi s5,s5,1 - 36ae: 963a add a2,a2,a4 - *s++ = sn[n]; - 36b0: 000ac583 lbu a1,0(s5) - 36b4: 0705 addi a4,a4,1 - for (n = 1; n < l; n++) - 36b6: 0a85 addi s5,s5,1 - *s++ = sn[n]; - 36b8: feb70fa3 sb a1,-1(a4) - for (n = 1; n < l; n++) - 36bc: fec71ae3 bne a4,a2,36b0 - tail[1] = h[0xe]; - 36c0: 00e34803 lbu a6,14(t1) - dp -= 1; - 36c4: fff7871b addiw a4,a5,-1 - tail[2] = '+'; - 36c8: 02b00593 li a1,43 - tail[1] = h[0xe]; - 36cc: 070108a3 sb a6,113(sp) - if (dp < 0) { - 36d0: 00075663 bgez a4,36dc - dp = -dp; - 36d4: 4705 li a4,1 - 36d6: 9f1d subw a4,a4,a5 - tail[2] = '-'; - 36d8: 02d00593 li a1,45 - 36dc: 06b10923 sb a1,114(sp) - n = (dp >= 100) ? 5 : 4; - 36e0: 06300793 li a5,99 - 36e4: 4ee7d663 bge a5,a4,3bd0 - 36e8: 4595 li a1,5 - 36ea: 4f95 li t6,5 - 36ec: 4e95 li t4,5 - tail[n] = '0' + dp % 10; - 36ee: 47a9 li a5,10 - dp /= 10; - 36f0: 02f7433b divw t1,a4,a5 - --n; - 36f4: fffe8f1b addiw t5,t4,-1 - tail[n] = '0' + dp % 10; - 36f8: 020f1293 slli t0,t5,0x20 - 36fc: 220e8813 addi a6,t4,544 - 3700: 06010893 addi a7,sp,96 - 3704: 0202d293 srli t0,t0,0x20 - 3708: 01180eb3 add t4,a6,a7 - 370c: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff73b0> - 3710: 011802b3 add t0,a6,a7 - tail[0] = (char)n; - 3714: 07f10823 sb t6,112(sp) - if (n <= 3) - 3718: 4a0d li s4,3 - tail[n] = '0' + dp % 10; - 371a: 02f7673b remw a4,a4,a5 - dp /= 10; - 371e: 0003081b sext.w a6,t1 - tail[n] = '0' + dp % 10; - 3722: 02f36abb remw s5,t1,a5 - 3726: 0307071b addiw a4,a4,48 - 372a: deee8823 sb a4,-528(t4) - 372e: 030a871b addiw a4,s5,48 - 3732: dee28823 sb a4,-528(t0) - if (n <= 3) - 3736: 014f0a63 beq t5,s4,374a - dp /= 10; - 373a: 02f3483b divw a6,t1,a5 - tail[n] = '0' + dp % 10; - 373e: 02f867bb remw a5,a6,a5 - 3742: 0307879b addiw a5,a5,48 - 3746: 06f109a3 sb a5,115(sp) - tz = pr - (l - 1); - 374a: 2505 addiw a0,a0,1 - l = (stbsp__uint32)(s - (num + 64)); - 374c: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens - 3750: 030002b7 lui t0,0x3000 - tz = pr - (l - 1); - 3754: 40d508bb subw a7,a0,a3 - 3758: d2c2 sw a6,100(sp) - l = (stbsp__uint32)(s - (num + 64)); - 375a: 415607b3 sub a5,a2,s5 - cs = 1 + (3 << 24); // how many tens - 375e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7191> - 3760: bbc9 j 3532 - 3762: fc2e sd a1,56(sp) - 3764: d0b2 sw a2,96(sp) - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3766: 8536 mv a0,a3 - 3768: e2cff06f j 2d94 - flt_lead: - 376c: 4581 li a1,0 - 376e: 4f81 li t6,0 - 3770: b3c9 j 3532 - n = pr + lead[0] + tail[0] + tz; - 3772: 06814a03 lbu s4,104(sp) - 3776: 000a0f9b sext.w t6,s4 - 377a: b901 j 338a - if ((f[1] == '6') && (f[2] == '4')) { - 377c: 0024c683 lbu a3,2(s1) - 3780: 03400713 li a4,52 - 3784: 00e68463 beq a3,a4,378c - 3788: e2bfe06f j 25b2 - switch (f[0]) { - 378c: 0034c783 lbu a5,3(s1) - fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 3790: 020e6e13 ori t3,t3,32 - f += 3; - 3794: 048d addi s1,s1,3 - 3796: d1ffe06f j 24b4 - if (pr < (stbsp__int32)l) - 379a: 0006879b sext.w a5,a3 - n = pr + lead[0] + tail[0] + tz; - 379e: 06814a03 lbu s4,104(sp) - if (pr < (stbsp__int32)l) - 37a2: fff7c793 not a5,a5 - 37a6: 97fd srai a5,a5,0x3f - 37a8: 8ff5 and a5,a5,a3 - n = pr + lead[0] + tail[0] + tz; - 37aa: 00fa063b addw a2,s4,a5 - s = (char *)sn; - 37ae: 7ae6 ld s5,120(sp) - n = pr + lead[0] + tail[0] + tz; - 37b0: 8732 mv a4,a2 - if ((fl & STBSP__LEFTJUST) == 0) { - 37b2: 001e7513 andi a0,t3,1 - if (pr < (stbsp__int32)l) - 37b6: 2781 sext.w a5,a5 - if (fw < (stbsp__int32)n) - 37b8: 835a mv t1,s6 - 37ba: 00cb5363 bge s6,a2,37c0 - 37be: 8332 mv t1,a2 - fw -= n; - 37c0: 40e3033b subw t1,t1,a4 - goto scopy; - 37c4: 4f81 li t6,0 - pr -= l; - 37c6: 40d7873b subw a4,a5,a3 - cs = 0; - 37ca: 4281 li t0,0 - tz = 0; - 37cc: 4881 li a7,0 - goto scopy; - 37ce: c42ff06f j 2c10 - cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 37d2: 415705b3 sub a1,a4,s5 - 37d6: 030002b7 lui t0,0x3000 - 37da: 00b282bb addw t0,t0,a1 - l = pr - n; - 37de: 0008859b sext.w a1,a7 - if (pr) - 37e2: 42088763 beqz a7,3c10 - *s++ = stbsp__period; - 37e6: 0cca4f83 lbu t6,204(s4) - if ((l - dp) > (stbsp__uint32)pr) - 37ea: 41d6833b subw t1,a3,t4 - *s++ = stbsp__period; - 37ee: 00280713 addi a4,a6,2 - 37f2: 01f800a3 sb t6,1(a6) - if ((l - dp) > (stbsp__uint32)pr) - 37f6: 4065ed63 bltu a1,t1,3c10 - while (n < l) { - 37fa: 5ed57863 bgeu a0,a3,3dea - 37fe: 40c687bb subw a5,a3,a2 - 3802: 37fd addiw a5,a5,-1 - 3804: 1782 slli a5,a5,0x20 - 3806: 9381 srli a5,a5,0x20 - 3808: 1602 slli a2,a2,0x20 - 380a: 9201 srli a2,a2,0x20 - 380c: 0785 addi a5,a5,1 - 380e: 967a add a2,a2,t5 - 3810: 97ba add a5,a5,a4 - *s++ = sn[n]; - 3812: 00064503 lbu a0,0(a2) - 3816: 0705 addi a4,a4,1 - while (n < l) { - 3818: 0605 addi a2,a2,1 - *s++ = sn[n]; - 381a: fea70fa3 sb a0,-1(a4) - while (n < l) { - 381e: fef71ae3 bne a4,a5,3812 - tz = pr - (l - dp); - 3822: 01d585bb addw a1,a1,t4 - 3826: 40d588bb subw a7,a1,a3 - l = (stbsp__uint32)(s - (num + 64)); - 382a: 415787b3 sub a5,a5,s5 - 382e: b99d j 34a4 - fl |= STBSP__NEGATIVE; - 3830: 080e6e13 ori t3,t3,128 - tail[0] = 0; - 3834: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 3838: b539 j 3646 - tail[0] = (char)n; - 383a: 4799 li a5,6 - tail[n] = '0' + dp % 10; - 383c: 06b10b23 sb a1,118(sp) - tail[0] = (char)n; - 3840: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 3844: 4819 li a6,6 - 3846: 4f99 li t6,6 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 3848: 4599 li a1,6 - dp /= 10; - 384a: 4f29 li t5,10 - if (n <= 3) - 384c: 428d li t0,3 - 384e: 87b2 mv a5,a2 - dp /= 10; - 3850: 03e7c7bb divw a5,a5,t5 - --n; - 3854: 35fd addiw a1,a1,-1 - tail[n] = '0' + dp % 10; - 3856: 02059613 slli a2,a1,0x20 - 385a: 9201 srli a2,a2,0x20 - 385c: 06010e93 addi t4,sp,96 - 3860: 22060613 addi a2,a2,544 - 3864: 9676 add a2,a2,t4 - 3866: 03e7eebb remw t4,a5,t5 - 386a: 030e8e9b addiw t4,t4,48 - 386e: dfd60823 sb t4,-528(a2) - if (n <= 3) - 3872: fc559fe3 bne a1,t0,3850 - 3876: e6aff06f j 2ee0 - *s++ = h[(n64 >> 60) & 15]; - 387a: 93f1 srli a5,a5,0x3c - 387c: 97ae add a5,a5,a1 - 387e: 0007c303 lbu t1,0(a5) - lead[1 + lead[0]] = '0'; - 3882: 1088 addi a0,sp,96 - 3884: 22080793 addi a5,a6,544 - 3888: 97aa add a5,a5,a0 - 388a: 03000513 li a0,48 - 388e: dea78423 sb a0,-536(a5) - lead[2 + lead[0]] = 'x'; - 3892: 22068793 addi a5,a3,544 - 3896: 1094 addi a3,sp,96 - 3898: 96be add a3,a3,a5 - *s++ = stbsp__period; - 389a: 00004517 auipc a0,0x4 - 389e: 74a54503 lbu a0,1866(a0) # 7fe4 - lead[2 + lead[0]] = 'x'; - 38a2: 07800813 li a6,120 - sn = s; - 38a6: 0c210793 addi a5,sp,194 - lead[2 + lead[0]] = 'x'; - 38aa: df068423 sb a6,-536(a3) - *s++ = stbsp__period; - 38ae: 0ca100a3 sb a0,193(sp) - lead[0] += 2; - 38b2: 07410423 sb s4,104(sp) - *s++ = h[(n64 >> 60) & 15]; - 38b6: 0c610023 sb t1,192(sp) - n64 <<= 4; - 38ba: 0732 slli a4,a4,0xc - sn = s; - 38bc: fcbe sd a5,120(sp) - n = pr; - 38be: 0008869b sext.w a3,a7 - while (n--) { - 38c2: 4831 li a6,12 - if (n > 13) - 38c4: 4535 li a0,13 - tz = pr - n; - 38c6: 40a688bb subw a7,a3,a0 - while (n--) { - 38ca: 02081313 slli t1,a6,0x20 - 38ce: 02035313 srli t1,t1,0x20 - 38d2: 22030693 addi a3,t1,544 - 38d6: 1088 addi a0,sp,96 - 38d8: 9536 add a0,a0,a3 - 38da: e4350513 addi a0,a0,-445 - *s++ = h[(n64 >> 60) & 15]; - 38de: 03c75693 srli a3,a4,0x3c - 38e2: 96ae add a3,a3,a1 - 38e4: 0006c683 lbu a3,0(a3) - 38e8: 0785 addi a5,a5,1 - n64 <<= 4; - 38ea: 0712 slli a4,a4,0x4 - *s++ = h[(n64 >> 60) & 15]; - 38ec: fed78fa3 sb a3,-1(a5) - while (n--) { - 38f0: fea797e3 bne a5,a0,38de - l = (int)(s - (num + 64)); - 38f4: 280d addiw a6,a6,3 - 38f6: 0008069b sext.w a3,a6 - if (pr < (stbsp__int32)l) - 38fa: fff6c713 not a4,a3 - 38fe: 977d srai a4,a4,0x3f - 3900: 00e87733 and a4,a6,a4 - dp = (int)(s - sn); - 3904: 0013051b addiw a0,t1,1 - if (pr < (stbsp__int32)l) - 3908: 0007031b sext.w t1,a4 - pr -= l; - 390c: 4107073b subw a4,a4,a6 - 3910: d76ff06f j 2e86 - *--s = stbsp__comma; - 3914: 00004a17 auipc s4,0x4 - 3918: 604a0a13 addi s4,s4,1540 # 7f18 - if (n64 >= 100000000) { - 391c: 05f5e7b7 lui a5,0x5f5e - 3920: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5528f> - n = (stbsp__uint32)(n64 % 100000000); - 3924: 05f5e637 lui a2,0x5f5e - *--s = stbsp__comma; - 3928: 0cda4b83 lbu s7,205(s4) - if (n64 >= 100000000) { - 392c: e83e sd a5,16(sp) - n = (stbsp__uint32)(n64 % 100000000); - 392e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f55290> - l = 0; - 3932: d082 sw zero,96(sp) - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3934: 040e7813 andi a6,t3,64 - 3938: 4701 li a4,0 - 393a: 4281 li t0,0 - s = num + STBSP__NUMSZ; - 393c: 28010a93 addi s5,sp,640 - n = (stbsp__uint32)(n64 % 100000000); - 3940: ec3e sd a5,24(sp) - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3942: 430d li t1,3 - n /= 10; - 3944: 45a9 li a1,10 - while (n) { - 3946: 4ea5 li t4,9 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3948: 06400f93 li t6,100 - if (n64 >= 100000000) { - 394c: 67c2 ld a5,16(sp) - char *o = s - 8; - 394e: ff8a8513 addi a0,s5,-8 - if (n64 >= 100000000) { - 3952: 0fe7f763 bgeu a5,t5,3a40 - n = (stbsp__uint32)(n64 % 100000000); - 3956: 6662 ld a2,24(sp) - 3958: 02cf77b3 remu a5,t5,a2 - n64 /= 100000000; - 395c: 02cf5f33 divu t5,t5,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3960: 0e080463 beqz a6,3a48 - while (n) { - 3964: cb85 beqz a5,3994 - *--s = stbsp__comma; - 3966: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3968: 00671763 bne a4,t1,3976 - --o; - 396c: 017a8023 sb s7,0(s5) - 3970: 157d addi a0,a0,-1 - *--s = stbsp__comma; - 3972: 1afd addi s5,s5,-1 - l = 0; - 3974: 4701 li a4,0 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3976: 2705 addiw a4,a4,1 - *--s = (char)(n % 10) + '0'; - 3978: 02b7f63b remuw a2,a5,a1 - 397c: 0306061b addiw a2,a2,48 - 3980: 00ca8023 sb a2,0(s5) - n /= 10; - 3984: 02b7d63b divuw a2,a5,a1 - while (n) { - 3988: 00fef563 bgeu t4,a5,3992 - *--s = stbsp__comma; - 398c: 1afd addi s5,s5,-1 - 398e: 87b2 mv a5,a2 - 3990: bfe1 j 3968 - while (n) { - 3992: 4285 li t0,1 - if (n64 == 0) { - 3994: 020f0063 beqz t5,39b4 - while (s != o) - 3998: fb550ae3 beq a0,s5,394c - *--s = stbsp__comma; - 399c: 1afd addi s5,s5,-1 - if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 399e: 00080663 beqz a6,39aa - 39a2: 08670863 beq a4,t1,3a32 - 39a6: 2705 addiw a4,a4,1 - 39a8: 4285 li t0,1 - *--s = '0'; - 39aa: 03000793 li a5,48 - 39ae: 00fa8023 sb a5,0(s5) - 39b2: b7dd j 3998 - 39b4: 00028363 beqz t0,39ba - 39b8: d0ba sw a4,96(sp) - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 39ba: 000ac703 lbu a4,0(s5) - 39be: 03000793 li a5,48 - 39c2: 34f70b63 beq a4,a5,3d18 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 39c6: 051c addi a5,sp,640 - 39c8: 415786bb subw a3,a5,s5 - tail[0] = 0; - 39cc: 06010823 sb zero,112(sp) - if (fl & STBSP__NEGATIVE) { - 39d0: 080e7713 andi a4,t3,128 - 39d4: 87f2 mv a5,t3 - 39d6: 32070863 beqz a4,3d06 - 39da: 678d lui a5,0x3 - 39dc: d017879b addiw a5,a5,-767 # 2d01 - sign[0] = 1; - 39e0: 06f11423 sh a5,104(sp) - 39e4: 4705 li a4,1 - 39e6: 4a05 li s4,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 39e8: d0b6 sw a3,96(sp) - if (l == 0) { - 39ea: 30068163 beqz a3,3cec - cs = l + (3 << 24); - 39ee: 030002b7 lui t0,0x3000 - 39f2: 00d282bb addw t0,t0,a3 - if (pr < (stbsp__int32)l) - 39f6: 0006861b sext.w a2,a3 - if (pr < 0) - 39fa: fff8c793 not a5,a7 - 39fe: 97fd srai a5,a5,0x3f - if (pr < (stbsp__int32)l) - 3a00: 00f8f7b3 and a5,a7,a5 - 3a04: 0007859b sext.w a1,a5 - 3a08: 00c5d363 bge a1,a2,3a0e - 3a0c: 87b2 mv a5,a2 - n = pr + lead[0] + tail[0] + tz; - 3a0e: 00f7063b addw a2,a4,a5 - 3a12: 8732 mv a4,a2 - if (pr < (stbsp__int32)l) - 3a14: 2781 sext.w a5,a5 - if ((fl & STBSP__LEFTJUST) == 0) { - 3a16: 001e7513 andi a0,t3,1 - if (fw < (stbsp__int32)n) - 3a1a: 835a mv t1,s6 - 3a1c: 00cb5363 bge s6,a2,3a22 - 3a20: 8332 mv t1,a2 - fw -= n; - 3a22: 40e3033b subw t1,t1,a4 - scopy: - 3a26: 4f81 li t6,0 - pr -= l; - 3a28: 40d7873b subw a4,a5,a3 - tz = 0; - 3a2c: 4881 li a7,0 - scopy: - 3a2e: 9e2ff06f j 2c10 - *--s = stbsp__comma; - 3a32: 87de mv a5,s7 - --o; - 3a34: 157d addi a0,a0,-1 - l = 0; - 3a36: 4701 li a4,0 - --o; - 3a38: 4285 li t0,1 - 3a3a: 00fa8023 sb a5,0(s5) - 3a3e: bfa9 j 3998 - n = (stbsp__uint32)n64; - 3a40: 000f079b sext.w a5,t5 - n64 = 0; - 3a44: 4f01 li t5,0 - 3a46: bf29 j 3960 - 3a48: f046 sd a7,32(sp) - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a4a: 03f7f63b remuw a2,a5,t6 - s -= 2; - 3a4e: 1af9 addi s5,s5,-2 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a50: 0007889b sext.w a7,a5 - 3a54: 2605 addiw a2,a2,1 - 3a56: 0016161b slliw a2,a2,0x1 - 3a5a: 1602 slli a2,a2,0x20 - 3a5c: 9201 srli a2,a2,0x20 - 3a5e: 9652 add a2,a2,s4 - 3a60: 00065603 lhu a2,0(a2) - n /= 100; - 3a64: 03f7d7bb divuw a5,a5,t6 - *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a68: 00ca9023 sh a2,0(s5) - } while (n); - 3a6c: 06300613 li a2,99 - 3a70: fd166de3 bltu a2,a7,3a4a - 3a74: 7882 ld a7,32(sp) - if (n64 == 0) { - 3a76: f20f11e3 bnez t5,3998 - 3a7a: bf2d j 39b4 - *(stbsp__uint32 *)bf = 0x20202020; - 3a7c: 20202b37 lui s6,0x20202 - stbsp__cb_buf_clamp(i, fw); - 3a80: 854a mv a0,s2 - *bf++ = ' '; - 3a82: 02000a93 li s5,32 - *(stbsp__uint32 *)bf = 0x20202020; - 3a86: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201f91b0> - stbsp__chk_cb_buf(1); - 3a8a: 1fe00a13 li s4,510 - stbsp__cb_buf_clamp(i, fw); - 3a8e: 20000b93 li s7,512 - 3a92: 891a mv s2,t1 - 3a94: 0a098063 beqz s3,3b34 - 3a98: 40a40633 sub a2,s0,a0 - 3a9c: 40cb87bb subw a5,s7,a2 - 3aa0: 873e mv a4,a5 - 3aa2: 00f95363 bge s2,a5,3aa8 - 3aa6: 874a mv a4,s2 - 3aa8: 0007079b sext.w a5,a4 - fw -= i; - 3aac: 40e9093b subw s2,s2,a4 - while (i) { - 3ab0: e799 bnez a5,3abe - 3ab2: a281 j 3bf2 - *bf++ = ' '; - 3ab4: 01540023 sb s5,0(s0) - --i; - 3ab8: 37fd addiw a5,a5,-1 - *bf++ = ' '; - 3aba: 0405 addi s0,s0,1 - while (i) { - 3abc: cba1 beqz a5,3b0c - if ((((stbsp__uintptr)bf) & 3) == 0) - 3abe: 00347713 andi a4,s0,3 - 3ac2: fb6d bnez a4,3ab4 - while (i >= 4) { - 3ac4: 470d li a4,3 - 3ac6: 40f75363 bge a4,a5,3ecc - 3aca: ffc7869b addiw a3,a5,-4 - 3ace: 0026d79b srliw a5,a3,0x2 - 3ad2: 0017871b addiw a4,a5,1 - 3ad6: 070a slli a4,a4,0x2 - 3ad8: 9722 add a4,a4,s0 - *(stbsp__uint32 *)bf = 0x20202020; - 3ada: 01642023 sw s6,0(s0) - bf += 4; - 3ade: 0411 addi s0,s0,4 - while (i >= 4) { - 3ae0: fee41de3 bne s0,a4,3ada - 3ae4: 0027979b slliw a5,a5,0x2 - 3ae8: 40f687bb subw a5,a3,a5 - while (i--) - 3aec: fff7869b addiw a3,a5,-1 - 3af0: cf91 beqz a5,3b0c - 3af2: 9fa1 addw a5,a5,s0 - *bf++ = ' '; - 3af4: 0705 addi a4,a4,1 - while (i--) - 3af6: 0007061b sext.w a2,a4 - *bf++ = ' '; - 3afa: ff570fa3 sb s5,-1(a4) - while (i--) - 3afe: fec79be3 bne a5,a2,3af4 - 3b02: 2685 addiw a3,a3,1 - 3b04: 02069793 slli a5,a3,0x20 - 3b08: 9381 srli a5,a5,0x20 - 3b0a: 943e add s0,s0,a5 - stbsp__chk_cb_buf(1); - 3b0c: 00098f63 beqz s3,3b2a - 3b10: 40a4063b subw a2,s0,a0 - 3b14: 00ca5b63 bge s4,a2,3b2a - 3b18: 65a2 ld a1,8(sp) - 3b1a: e81e sd t2,16(sp) - 3b1c: 00cd0d3b addw s10,s10,a2 - 3b20: 9982 jalr s3 - 3b22: 80050be3 beqz a0,3338 - 3b26: 63c2 ld t2,16(sp) - 3b28: 842a mv s0,a0 - while (fw) { - 3b2a: f60915e3 bnez s2,3a94 - 3b2e: 892a mv s2,a0 - 3b30: f21fe06f j 2a50 - stbsp__cb_buf_clamp(i, fw); - 3b34: 87ca mv a5,s2 - fw -= i; - 3b36: 4901 li s2,0 - if ((((stbsp__uintptr)bf) & 3) == 0) - 3b38: b759 j 3abe - } else if (fl & STBSP__LEADINGPLUS) { - 3b3a: 002e7713 andi a4,t3,2 - 3b3e: 94070663 beqz a4,2c8a - sign[0] = 1; - 3b42: 670d lui a4,0x3 - 3b44: b0170713 addi a4,a4,-1279 # 2b01 - 3b48: 06e11423 sh a4,104(sp) - 3b4c: 93eff06f j 2c8a - if (((stbsp__uintptr)sn & 3) == 0) - 3b50: 87d6 mv a5,s5 - while (limit >= 4) { - 3b52: 470d li a4,3 - 3b54: 22d77763 bgeu a4,a3,3d82 - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 3b58: feff05b7 lui a1,0xfeff0 - 3b5c: 80808637 lui a2,0x80808 - 3b60: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe708f> - 3b64: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff210> - while (limit >= 4) { - 3b68: 480d li a6,3 - 3b6a: a029 j 3b74 - limit -= 4; - 3b6c: 36f1 addiw a3,a3,-4 - sn += 4; - 3b6e: 0791 addi a5,a5,4 - while (limit >= 4) { - 3b70: 20d87963 bgeu a6,a3,3d82 - stbsp__uint32 v = *(stbsp__uint32 *)sn; - 3b74: 4398 lw a4,0(a5) - if ((v - 0x01010101) & (~v) & 0x80808080UL) - 3b76: 00b7053b addw a0,a4,a1 - 3b7a: fff74713 not a4,a4 - 3b7e: 8f69 and a4,a4,a0 - 3b80: 8f71 and a4,a4,a2 - 3b82: 2701 sext.w a4,a4 - 3b84: d765 beqz a4,3b6c - 3b86: 02069713 slli a4,a3,0x20 - 3b8a: 9301 srli a4,a4,0x20 - 3b8c: 973e add a4,a4,a5 - 3b8e: a021 j 3b96 - ++sn; - 3b90: 0785 addi a5,a5,1 - while (limit && *sn) { - 3b92: 00e78663 beq a5,a4,3b9e - 3b96: 0007c683 lbu a3,0(a5) - 3b9a: fafd bnez a3,3b90 - 3b9c: 873e mv a4,a5 - return (stbsp__uint32)(sn - s); - 3b9e: 41570733 sub a4,a4,s5 - 3ba2: 0007069b sext.w a3,a4 - if (pr < (stbsp__int32)l) - 3ba6: fff6c793 not a5,a3 - 3baa: 97fd srai a5,a5,0x3f - 3bac: 8f7d and a4,a4,a5 - 3bae: 0007079b sext.w a5,a4 - n = pr + lead[0] + tail[0] + tz; - 3bb2: 863e mv a2,a5 - pr -= l; - 3bb4: 9f15 subw a4,a4,a3 - return (stbsp__uint32)(sn - s); - 3bb6: d2eff06f j 30e4 - for (n = 1; n < l; n++) - 3bba: 4605 li a2,1 - 3bbc: aed663e3 bltu a2,a3,36a2 - 3bc0: 0c210613 addi a2,sp,194 - 3bc4: bcf5 j 36c0 - l = pr + 1; - 3bc6: 4685 li a3,1 - if ((l - 1) > (stbsp__uint32)pr) - 3bc8: 4501 li a0,0 - *s++ = sn[0]; - 3bca: 0c110613 addi a2,sp,193 - 3bce: bccd j 36c0 - 3bd0: 4591 li a1,4 - 3bd2: 4f91 li t6,4 - n = (dp >= 100) ? 5 : 4; - 3bd4: 4e91 li t4,4 - 3bd6: be21 j 36ee - 3bd8: 4a85 li s5,1 - 3bda: 80000737 lui a4,0x80000 - pr = 1; // default is 6 - 3bde: 4a05 li s4,1 - 3be0: 920ff06f j 2d00 - dp = (n64) ? -1022 : 0; - 3be4: 4601 li a2,0 - 3be6: c119 beqz a0,3bec - 3be8: c0200613 li a2,-1022 - *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 3bec: 872a mv a4,a0 - 3bee: a3aff06f j 2e28 - stbsp__chk_cb_buf(1); - 3bf2: 2601 sext.w a2,a2 - 3bf4: 1fe00793 li a5,510 - 3bf8: f2c7c0e3 blt a5,a2,3b18 - 3bfc: bd61 j 3a94 - tail[0] = (char)n; - 3bfe: 4795 li a5,5 - tail[n] = '0' + dp % 10; - 3c00: 06b10aa3 sb a1,117(sp) - tail[0] = (char)n; - 3c04: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 3c08: 4815 li a6,5 - 3c0a: 4f95 li t6,5 - n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 3c0c: 4595 li a1,5 - 3c0e: b935 j 384a - l = pr + dp; - 3c10: 011786bb addw a3,a5,a7 - 3c14: d0b6 sw a3,96(sp) - 3c16: b6d5 j 37fa - s = (char *)"null"; - 3c18: 00002a97 auipc s5,0x2 - 3c1c: 5c8a8a93 addi s5,s5,1480 # 61e0 <_GLOBAL__sub_I__ZSt3cin+0x1f0> - 3c20: c80ff06f j 30a0 - } else if (fl & STBSP__LEADINGPLUS) { - 3c24: 002e7793 andi a5,t3,2 - 3c28: 1c079c63 bnez a5,3e00 - sign[0] = 0; - 3c2c: 4689 li a3,2 - 3c2e: 4a09 li s4,2 - 3c30: 4805 li a6,1 - 3c32: 9e8ff06f j 2e1a - sign[0] = 1; - 3c36: 670d lui a4,0x3 - 3c38: b0170713 addi a4,a4,-1279 # 2b01 - 3c3c: 06e11423 sh a4,104(sp) - 3c40: b86ff06f j 2fc6 - pr = 0; - 3c44: 4881 li a7,0 - 3c46: f1ffe06f j 2b64 - *s++ = '0'; - 3c4a: 03000713 li a4,48 - 3c4e: 0ce10023 sb a4,192(sp) - if (pr) - 3c52: 1a088c63 beqz a7,3e0a - *s++ = stbsp__period; - 3c56: 00004717 auipc a4,0x4 - 3c5a: 38e74703 lbu a4,910(a4) # 7fe4 - n = -dp; - 3c5e: 40f007bb negw a5,a5 - *s++ = stbsp__period; - 3c62: 0ce100a3 sb a4,193(sp) - if ((stbsp__int32)n > pr) - 3c66: 0007871b sext.w a4,a5 - 3c6a: 00e8d363 bge a7,a4,3c70 - 3c6e: 87c6 mv a5,a7 - 3c70: 0007871b sext.w a4,a5 - if ((stbsp__int32)(l + n) > pr) - 3c74: 00d7833b addw t1,a5,a3 - 3c78: 883a mv a6,a4 - while (i) { - 3c7a: 0c210793 addi a5,sp,194 - *s++ = '0'; - 3c7e: 03000513 li a0,48 - while (i) { - 3c82: e711 bnez a4,3c8e - 3c84: a271 j 3e10 - if ((((stbsp__uintptr)s) & 3) == 0) - 3c86: 0037f613 andi a2,a5,3 - 3c8a: 18060563 beqz a2,3e14 - *s++ = '0'; - 3c8e: 85ba mv a1,a4 - 3c90: 00a78023 sb a0,0(a5) - --i; - 3c94: 377d addiw a4,a4,-1 - *s++ = '0'; - 3c96: 0785 addi a5,a5,1 - while (i) { - 3c98: f77d bnez a4,3c86 - if ((stbsp__int32)(l + n) > pr) - 3c9a: 0003071b sext.w a4,t1 - 3c9e: 4108863b subw a2,a7,a6 - 3ca2: 00e8d563 bge a7,a4,3cac - l = pr - n; - 3ca6: 0006069b sext.w a3,a2 - 3caa: d0b2 sw a2,96(sp) - while (i) { - 3cac: c68d beqz a3,3cd6 - 3cae: 7566 ld a0,120(sp) - 3cb0: 02069813 slli a6,a3,0x20 - 3cb4: 02085813 srli a6,a6,0x20 - 3cb8: 01078eb3 add t4,a5,a6 - 3cbc: 85aa mv a1,a0 - 3cbe: 873e mv a4,a5 - *s++ = *sn++; - 3cc0: 0005c883 lbu a7,0(a1) - 3cc4: 0705 addi a4,a4,1 - while (i) { - 3cc6: 0585 addi a1,a1,1 - *s++ = *sn++; - 3cc8: ff170fa3 sb a7,-1(a4) - while (i) { - 3ccc: ffd71ae3 bne a4,t4,3cc0 - 3cd0: 9542 add a0,a0,a6 - 3cd2: 97c2 add a5,a5,a6 - 3cd4: fcaa sd a0,120(sp) - l = (stbsp__uint32)(s - (num + 64)); - 3cd6: 0c010a93 addi s5,sp,192 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 3cda: 030002b7 lui t0,0x3000 - tz = pr - (n + l); - 3cde: 40d608bb subw a7,a2,a3 - l = (stbsp__uint32)(s - (num + 64)); - 3ce2: 415787b3 sub a5,a5,s5 - cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 3ce6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7191> - 3ce8: fbcff06f j 34a4 - *--s = '0'; - 3cec: 03000793 li a5,48 - 3cf0: fefa8fa3 sb a5,-1(s5) - l = 1; - 3cf4: 030002b7 lui t0,0x3000 - 3cf8: 4785 li a5,1 - 3cfa: d0be sw a5,96(sp) - *--s = '0'; - 3cfc: 1afd addi s5,s5,-1 - l = 1; - 3cfe: 4605 li a2,1 - 3d00: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7191> - 3d02: 4685 li a3,1 - 3d04: b9dd j 39fa - } else if (fl & STBSP__LEADINGSPACE) { - 3d06: 004e7713 andi a4,t3,4 - 3d0a: e74d bnez a4,3db4 - } else if (fl & STBSP__LEADINGPLUS) { - 3d0c: 8b89 andi a5,a5,2 - 3d0e: efd9 bnez a5,3dac - sign[0] = 0; - 3d10: 06010423 sb zero,104(sp) - 3d14: 4a01 li s4,0 - 3d16: b9c9 j 39e8 - if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 3d18: 051c addi a5,sp,640 - 3d1a: cafa89e3 beq s5,a5,39cc - ++s; - 3d1e: 0a85 addi s5,s5,1 - l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 3d20: 415786bb subw a3,a5,s5 - 3d24: b165 j 39cc - n = dp - n; - 3d26: 40ce87bb subw a5,t4,a2 - if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3d2a: 12030e63 beqz t1,3e66 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3d2e: 4511 li a0,4 - 3d30: 03000613 li a2,48 - *s++ = stbsp__comma; - 3d34: 00170693 addi a3,a4,1 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3d38: 00030563 beqz t1,3d42 - 3d3c: 2585 addiw a1,a1,1 - 3d3e: 00a58963 beq a1,a0,3d50 - 3d42: 8736 mv a4,a3 - --n; - 3d44: 37fd addiw a5,a5,-1 - 3d46: fec70fa3 sb a2,-1(a4) - while (n) { - 3d4a: f7ed bnez a5,3d34 - 3d4c: f38ff06f j 3484 - 3d50: fe568fa3 sb t0,-1(a3) - *s++ = stbsp__comma; - 3d54: 0709 addi a4,a4,2 - if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3d56: 4585 li a1,1 - 3d58: b7f5 j 3d44 - sign[0] = 0; - 3d5a: 06010423 sb zero,104(sp) - 3d5e: f1dfe06f j 2c7a - tail[idx + 1] = "_kMGT"[fl >> 24]; - 3d62: 00002697 auipc a3,0x2 - 3d66: 48e68693 addi a3,a3,1166 # 61f0 <_GLOBAL__sub_I__ZSt3cin+0x200> - 3d6a: 9736 add a4,a4,a3 - 3d6c: 00074683 lbu a3,0(a4) - 3d70: 1088 addi a0,sp,96 - 3d72: 22060713 addi a4,a2,544 - 3d76: 972a add a4,a4,a0 - 3d78: ded70823 sb a3,-528(a4) - idx++; - 3d7c: 8fb2 mv t6,a2 - 3d7e: fb0ff06f j 352e - while (limit && *sn) { - 3d82: e00692e3 bnez a3,3b86 - 3d86: bd19 j 3b9c - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 3d88: 0008071b sext.w a4,a6 - 3d8c: 86c2 mv a3,a6 - 3d8e: 88d2 mv a7,s4 - pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 3d90: 863a mv a2,a4 - 3d92: 00e8d363 bge a7,a4,3d98 - 3d96: 8646 mv a2,a7 - 3d98: 40f608bb subw a7,a2,a5 - 3d9c: 814ff06f j 2db0 - divisor = 1000.0f; - 3da0: 00003797 auipc a5,0x3 - 3da4: bf07b787 fld fa5,-1040(a5) # 6990 - 3da8: dd5fe06f j 2b7c - 3dac: 678d lui a5,0x3 - 3dae: b017879b addiw a5,a5,-1279 # 2b01 - 3db2: b13d j 39e0 - 3db4: 6789 lui a5,0x2 - 3db6: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x689> - 3db8: b125 j 39e0 - *s++ = stbsp__period; - 3dba: 00004517 auipc a0,0x4 - 3dbe: 22a54503 lbu a0,554(a0) # 7fe4 - sn = s; - 3dc2: 0c210793 addi a5,sp,194 - n = pr; - 3dc6: 0008869b sext.w a3,a7 - *s++ = stbsp__period; - 3dca: 0ca100a3 sb a0,193(sp) - sn = s; - 3dce: fcbe sd a5,120(sp) - if (n > 13) - 3dd0: 4535 li a0,13 - n64 <<= 4; - 3dd2: 0712 slli a4,a4,0x4 - if (n > 13) - 3dd4: 8836 mv a6,a3 - 3dd6: 00d57363 bgeu a0,a3,3ddc - 3dda: 4835 li a6,13 - 3ddc: 0008051b sext.w a0,a6 - while (n--) { - 3de0: 387d addiw a6,a6,-1 - if (pr > (stbsp__int32)n) - 3de2: af1542e3 blt a0,a7,38c6 - tz = 0; - 3de6: 4881 li a7,0 - 3de8: b4cd j 38ca - while (n < l) { - 3dea: 87ba mv a5,a4 - 3dec: bc1d j 3822 - tail[0] = (char)n; - 3dee: 478d li a5,3 - 3df0: 06f10823 sb a5,112(sp) - tail[n] = '0' + dp % 10; - 3df4: 06b109a3 sb a1,115(sp) - 3df8: 480d li a6,3 - 3dfa: 4f8d li t6,3 - 3dfc: 8e4ff06f j 2ee0 - 3e00: 678d lui a5,0x3 - 3e02: b017879b addiw a5,a5,-1279 # 2b01 - 3e06: 80aff06f j 2e10 - if (pr) - 3e0a: 8336 mv t1,a3 - *s++ = '0'; - 3e0c: 0c110793 addi a5,sp,193 - while (i) { - 3e10: 4801 li a6,0 - 3e12: b561 j 3c9a - while (i >= 4) { - 3e14: 460d li a2,3 - 3e16: 04e65663 bge a2,a4,3e62 - 3e1a: ffb5871b addiw a4,a1,-5 - 3e1e: 0027559b srliw a1,a4,0x2 - 3e22: 0015861b addiw a2,a1,1 - 3e26: 060a slli a2,a2,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 3e28: 30303537 lui a0,0x30303 - 3e2c: 963e add a2,a2,a5 - 3e2e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fa1c0> - 3e32: c388 sw a0,0(a5) - s += 4; - 3e34: 0791 addi a5,a5,4 - while (i >= 4) { - 3e36: fef61ee3 bne a2,a5,3e32 - 3e3a: 0025959b slliw a1,a1,0x2 - 3e3e: 9f0d subw a4,a4,a1 - while (i) { - 3e40: e4070de3 beqz a4,3c9a - *s++ = '0'; - 3e44: 03000513 li a0,48 - while (i) { - 3e48: 00f705bb addw a1,a4,a5 - *s++ = '0'; - 3e4c: 0605 addi a2,a2,1 - while (i) { - 3e4e: 00060e9b sext.w t4,a2 - *s++ = '0'; - 3e52: fea60fa3 sb a0,-1(a2) - while (i) { - 3e56: ffd59be3 bne a1,t4,3e4c - 3e5a: 1702 slli a4,a4,0x20 - 3e5c: 9301 srli a4,a4,0x20 - 3e5e: 97ba add a5,a5,a4 - 3e60: bd2d j 3c9a - while (i >= 4) { - 3e62: 863e mv a2,a5 - 3e64: b7c5 j 3e44 - if ((((stbsp__uintptr)s) & 3) == 0) - 3e66: 00377693 andi a3,a4,3 - 3e6a: ce81 beqz a3,3e82 - *s++ = '0'; - 3e6c: 03000693 li a3,48 - 3e70: 00d70023 sb a3,0(a4) - --n; - 3e74: 37fd addiw a5,a5,-1 - *s++ = '0'; - 3e76: 0705 addi a4,a4,1 - while (n) { - 3e78: e0078663 beqz a5,3484 - if ((((stbsp__uintptr)s) & 3) == 0) - 3e7c: 00377613 andi a2,a4,3 - 3e80: fa65 bnez a2,3e70 - while (n >= 4) { - 3e82: 468d li a3,3 - 3e84: eaf6f5e3 bgeu a3,a5,3d2e - 3e88: ffc7869b addiw a3,a5,-4 - 3e8c: 0026d69b srliw a3,a3,0x2 - 3e90: 2685 addiw a3,a3,1 - 3e92: 068a slli a3,a3,0x2 - *(stbsp__uint32 *)s = 0x30303030; - 3e94: 30303637 lui a2,0x30303 - 3e98: 96ba add a3,a3,a4 - 3e9a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fa1c0> - 3e9e: c310 sw a2,0(a4) - s += 4; - 3ea0: 0711 addi a4,a4,4 - while (n >= 4) { - 3ea2: fed71ee3 bne a4,a3,3e9e - 3ea6: 8b8d andi a5,a5,3 - while (n) { - 3ea8: e80793e3 bnez a5,3d2e - 3eac: dd8ff06f j 3484 - if (((stbsp__uintptr)sn & 3) == 0) - 3eb0: 87d6 mv a5,s5 - l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 3eb2: 56fd li a3,-1 - 3eb4: b155 j 3b58 - if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 3eb6: 5775 li a4,-3 - 3eb8: 00e7ce63 blt a5,a4,3ed4 - 3ebc: f6fa4663 blt s4,a5,3628 - if (dp > 0) { - 3ec0: ecf054e3 blez a5,3d88 - 3ec4: 86c2 mv a3,a6 - pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 3ec6: 4881 li a7,0 - 3ec8: ee9fe06f j 2db0 - while (i--) - 3ecc: fff7869b addiw a3,a5,-1 - 3ed0: 8722 mv a4,s0 - 3ed2: b105 j 3af2 - if (pr > (stbsp__int32)l) - 3ed4: 0008071b sext.w a4,a6 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3ed8: 7ae6 ld s5,120(sp) - if (pr > (stbsp__int32)l) - 3eda: 86c2 mv a3,a6 - 3edc: 88d2 mv a7,s4 - 3ede: f7475d63 bge a4,s4,3658 - while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3ee2: 8542 mv a0,a6 - 3ee4: f56ff06f j 363a - -0000000000003ee8 : -{ - 3ee8: 715d addi sp,sp,-80 - va_start(va, fmt); - 3eea: 02010313 addi t1,sp,32 -{ - 3eee: f032 sd a2,32(sp) - 3ef0: f436 sd a3,40(sp) - 3ef2: f83a sd a4,48(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3ef4: 86ae mv a3,a1 - 3ef6: 862a mv a2,a0 - 3ef8: 871a mv a4,t1 - 3efa: 4581 li a1,0 - 3efc: 4501 li a0,0 -{ - 3efe: ec06 sd ra,24(sp) - 3f00: fc3e sd a5,56(sp) - 3f02: e0c2 sd a6,64(sp) - 3f04: e4c6 sd a7,72(sp) - va_start(va, fmt); - 3f06: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3f08: bc6fe0ef jal 22ce -} - 3f0c: 60e2 ld ra,24(sp) - 3f0e: 6161 addi sp,sp,80 - 3f10: 8082 ret - -0000000000003f12 : -{ - 3f12: dd010113 addi sp,sp,-560 - 3f16: 22813023 sd s0,544(sp) - 3f1a: 20913c23 sd s1,536(sp) - 3f1e: 22113423 sd ra,552(sp) - 3f22: 84ae mv s1,a1 - 3f24: 842a mv s0,a0 - 3f26: 88b2 mv a7,a2 - 3f28: 8736 mv a4,a3 - if ( (count == 0) && !buf ) - 3f2a: e591 bnez a1,3f36 - 3f2c: c141 beqz a0,3fac - c.buf = buf; - 3f2e: e02a sd a0,0(sp) - c.count = count; - 3f30: e402 sd zero,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3f32: 0810 addi a2,sp,16 - 3f34: a089 j 3f76 - if (len > c->count) - 3f36: 0015a593 slti a1,a1,1 - 3f3a: 40b005bb negw a1,a1 - 3f3e: 8de5 and a1,a1,s1 - c.buf = buf; - 3f40: e02a sd a0,0(sp) - c.count = count; - 3f42: c426 sw s1,8(sp) - c.length = 0; - 3f44: c602 sw zero,12(sp) - if (len > c->count) - 3f46: 2581 sext.w a1,a1 - if (len) { - 3f48: 0804d663 bgez s1,3fd4 - s = buf; - 3f4c: 4781 li a5,0 - if (buf != c->buf) { - 3f4e: c911 beqz a0,3f62 - *d++ = *s++; - 3f50: 0007c803 lbu a6,0(a5) - 3f54: 0785 addi a5,a5,1 - 3f56: 00f40533 add a0,s0,a5 - 3f5a: ff050fa3 sb a6,-1(a0) - } while (s < se); - 3f5e: feb7e9e3 bltu a5,a1,3f50 - c->count -= len; - 3f62: 40b486bb subw a3,s1,a1 - c->buf += len; - 3f66: 95a2 add a1,a1,s0 - 3f68: e02e sd a1,0(sp) - c->count -= len; - 3f6a: c436 sw a3,8(sp) - return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3f6c: 1ff00793 li a5,511 - 3f70: fcd7d1e3 bge a5,a3,3f32 - 3f74: 6602 ld a2,0(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 3f76: 86c6 mv a3,a7 - 3f78: 858a mv a1,sp - 3f7a: ffffd517 auipc a0,0xffffd - 3f7e: 21650513 addi a0,a0,534 # 1190 - 3f82: b4cfe0ef jal 22ce - l = (int)( c.buf - buf ); - 3f86: 6782 ld a5,0(sp) - 3f88: 9f81 subw a5,a5,s0 - if ( l >= count ) // should never be greater, only equal (or less) than count - 3f8a: 0097c463 blt a5,s1,3f92 - l = count - 1; - 3f8e: fff4879b addiw a5,s1,-1 - buf[l] = 0; - 3f92: 943e add s0,s0,a5 - 3f94: 00040023 sb zero,0(s0) -} - 3f98: 22813083 ld ra,552(sp) - 3f9c: 22013403 ld s0,544(sp) - 3fa0: 4532 lw a0,12(sp) - 3fa2: 21813483 ld s1,536(sp) - 3fa6: 23010113 addi sp,sp,560 - 3faa: 8082 ret - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3fac: 86b2 mv a3,a2 - 3fae: 858a mv a1,sp - 3fb0: 0810 addi a2,sp,16 - 3fb2: ffffd517 auipc a0,0xffffd - 3fb6: 22c50513 addi a0,a0,556 # 11de - c.length = 0; - 3fba: c602 sw zero,12(sp) - STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3fbc: b12fe0ef jal 22ce -} - 3fc0: 22813083 ld ra,552(sp) - 3fc4: 22013403 ld s0,544(sp) - 3fc8: 4532 lw a0,12(sp) - 3fca: 21813483 ld s1,536(sp) - 3fce: 23010113 addi sp,sp,560 - 3fd2: 8082 ret - 3fd4: 86a6 mv a3,s1 - 3fd6: bf59 j 3f6c - -0000000000003fd8 : -{ - 3fd8: 715d addi sp,sp,-80 - va_start(va, fmt); - 3fda: 02810313 addi t1,sp,40 -{ - 3fde: f436 sd a3,40(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 3fe0: 869a mv a3,t1 -{ - 3fe2: ec06 sd ra,24(sp) - 3fe4: f83a sd a4,48(sp) - 3fe6: fc3e sd a5,56(sp) - 3fe8: e0c2 sd a6,64(sp) - 3fea: e4c6 sd a7,72(sp) - va_start(va, fmt); - 3fec: e41a sd t1,8(sp) - result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 3fee: f25ff0ef jal 3f12 -} - 3ff2: 60e2 ld ra,24(sp) - 3ff4: 6161 addi sp,sp,80 - 3ff6: 8082 ret - -0000000000003ff8 : -{ - 3ff8: 86ae mv a3,a1 - 3ffa: 8732 mv a4,a2 - return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3ffc: 4581 li a1,0 - 3ffe: 862a mv a2,a0 - 4000: 4501 li a0,0 - 4002: accfe06f j 22ce - -0000000000004006 : -{ - 4006: 7119 addi sp,sp,-128 - va_start(ap, format); - 4008: 05010313 addi t1,sp,80 -{ - 400c: e0a2 sd s0,64(sp) - 400e: fc26 sd s1,56(sp) - 4010: 842a mv s0,a0 - 4012: e8b2 sd a2,80(sp) - _vprintf_core(&ctx, format, ap); - 4014: 0808 addi a0,sp,16 - ctx.limit = size; - 4016: 54fd li s1,-1 - _vprintf_core(&ctx, format, ap); - 4018: 861a mv a2,t1 -{ - 401a: e486 sd ra,72(sp) - 401c: ecb6 sd a3,88(sp) - 401e: f0ba sd a4,96(sp) - 4020: f4be sd a5,104(sp) - 4022: f8c2 sd a6,112(sp) - 4024: fcc6 sd a7,120(sp) - va_start(ap, format); - 4026: e41a sd t1,8(sp) - ctx.buf = str; - 4028: e822 sd s0,16(sp) - ctx.limit = size; - 402a: ec26 sd s1,24(sp) - ctx.written = 0; - 402c: f002 sd zero,32(sp) - ctx.stream = NULL; - 402e: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 4030: 02c000ef jal 405c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 4034: 7502 ld a0,32(sp) - 4036: 00950b63 beq a0,s1,404c - str[ctx.written] = '\0'; - 403a: 942a add s0,s0,a0 - 403c: 00040023 sb zero,0(s0) -} - 4040: 60a6 ld ra,72(sp) - 4042: 6406 ld s0,64(sp) - 4044: 74e2 ld s1,56(sp) - 4046: 2501 sext.w a0,a0 - 4048: 6109 addi sp,sp,128 - 404a: 8082 ret - str[size - 1] = '\0'; - 404c: fe040f23 sb zero,-2(s0) -} - 4050: 60a6 ld ra,72(sp) - 4052: 6406 ld s0,64(sp) - 4054: 74e2 ld s1,56(sp) - 4056: 2501 sext.w a0,a0 - 4058: 6109 addi sp,sp,128 - 405a: 8082 ret - -000000000000405c <_vprintf_core.constprop.0.isra.0>: -static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 405c: 7129 addi sp,sp,-320 - 405e: edee sd s11,216(sp) - 4060: fe06 sd ra,312(sp) - 4062: 8dae mv s11,a1 - while (*p) - 4064: 0005c583 lbu a1,0(a1) - 4068: cde9 beqz a1,4142 <_vprintf_core.constprop.0.isra.0+0xe6> - 406a: f626 sd s1,296(sp) - 406c: f24a sd s2,288(sp) - 406e: ee4e sd s3,280(sp) - 4070: e656 sd s5,264(sp) - 4072: f9e2 sd s8,240(sp) - 4074: fa22 sd s0,304(sp) - 4076: ea52 sd s4,272(sp) - 4078: e25a sd s6,256(sp) - 407a: fdde sd s7,248(sp) - 407c: f5e6 sd s9,232(sp) - 407e: f1ea sd s10,224(sp) - 4080: 84aa mv s1,a0 - 4082: 8c32 mv s8,a2 - if (*p != '%') - 4084: 02500a93 li s5,37 - 4088: 49c1 li s3,16 - 408a: 00002917 auipc s2,0x2 - 408e: 43a90913 addi s2,s2,1082 # 64c4 <_GLOBAL__sub_I__ZSt3cin+0x4d4> - 4092: a039 j 40a0 <_vprintf_core.constprop.0.isra.0+0x44> - _out_char(ctx, spec); - 4094: 8526 mv a0,s1 - 4096: 952fe0ef jal 21e8 <_out_char> - while (*p) - 409a: 000dc583 lbu a1,0(s11) - 409e: c5d9 beqz a1,412c <_vprintf_core.constprop.0.isra.0+0xd0> - _out_char(ctx, *p++); - 40a0: 0d85 addi s11,s11,1 - if (*p != '%') - 40a2: ff5599e3 bne a1,s5,4094 <_vprintf_core.constprop.0.isra.0+0x38> - int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 40a6: 4501 li a0,0 - 40a8: 4881 li a7,0 - 40aa: 4581 li a1,0 - 40ac: 4b01 li s6,0 - 40ae: 4a01 li s4,0 - if (*p == '-') - 40b0: 000dcc83 lbu s9,0(s11) - 40b4: fe0c871b addiw a4,s9,-32 - 40b8: 0ff77713 zext.b a4,a4 - 40bc: 00e9e763 bltu s3,a4,40ca <_vprintf_core.constprop.0.isra.0+0x6e> - 40c0: 070a slli a4,a4,0x2 - 40c2: 974a add a4,a4,s2 - 40c4: 4318 lw a4,0(a4) - 40c6: 974a add a4,a4,s2 - 40c8: 8702 jr a4 - if (*p == '*') - 40ca: 02a00793 li a5,42 - 40ce: 16fc9c63 bne s9,a5,4246 <_vprintf_core.constprop.0.isra.0+0x1ea> - width = va_arg(ap, int); - 40d2: 000c2403 lw s0,0(s8) - 40d6: 0c21 addi s8,s8,8 - if (width < 0) - 40d8: 00045563 bgez s0,40e2 <_vprintf_core.constprop.0.isra.0+0x86> - width = -width; - 40dc: 4080043b negw s0,s0 - flag_left = 1; - 40e0: 4a05 li s4,1 - while (*p >= '0' && *p <= '9') - 40e2: 001dcc83 lbu s9,1(s11) - p++; - 40e6: 0d85 addi s11,s11,1 - if (*p == '.') - 40e8: 02e00793 li a5,46 - int precision = -1; - 40ec: 5bfd li s7,-1 - if (*p == '.') - 40ee: 18fc8a63 beq s9,a5,4282 <_vprintf_core.constprop.0.isra.0+0x226> - if (*p == 'l') - 40f2: 06c00693 li a3,108 - 40f6: 8666 mv a2,s9 - 40f8: 1adc8663 beq s9,a3,42a4 <_vprintf_core.constprop.0.isra.0+0x248> - else if (*p == 'z') - 40fc: 07a00693 li a3,122 - p++; - 4100: 0d85 addi s11,s11,1 - else if (*p == 'z') - 4102: 24dc8163 beq s9,a3,4344 <_vprintf_core.constprop.0.isra.0+0x2e8> - if (!spec) - 4106: 06400693 li a3,100 - 410a: 4adc8163 beq s9,a3,45ac <_vprintf_core.constprop.0.isra.0+0x550> - 410e: 06400693 li a3,100 - int len_mod = 0; - 4112: 4e81 li t4,0 - 4114: 1b96e663 bltu a3,s9,42c0 <_vprintf_core.constprop.0.isra.0+0x264> - 4118: 04700693 li a3,71 - 411c: 2796e463 bltu a3,s9,4384 <_vprintf_core.constprop.0.isra.0+0x328> - 4120: 04400693 li a3,68 - 4124: 0596e363 bltu a3,s9,416a <_vprintf_core.constprop.0.isra.0+0x10e> - 4128: 240c9363 bnez s9,436e <_vprintf_core.constprop.0.isra.0+0x312> - 412c: 7452 ld s0,304(sp) - 412e: 74b2 ld s1,296(sp) - 4130: 7912 ld s2,288(sp) - 4132: 69f2 ld s3,280(sp) - 4134: 6a52 ld s4,272(sp) - 4136: 6ab2 ld s5,264(sp) - 4138: 6b12 ld s6,256(sp) - 413a: 7bee ld s7,248(sp) - 413c: 7c4e ld s8,240(sp) - 413e: 7cae ld s9,232(sp) - 4140: 7d0e ld s10,224(sp) -} - 4142: 70f2 ld ra,312(sp) - 4144: 6dee ld s11,216(sp) - 4146: 6131 addi sp,sp,320 - 4148: 8082 ret - if (*p == '-') - 414a: 4585 li a1,1 - p++; - 414c: 0d85 addi s11,s11,1 - if (*p == '-') - 414e: b78d j 40b0 <_vprintf_core.constprop.0.isra.0+0x54> - 4150: 4505 li a0,1 - p++; - 4152: 0d85 addi s11,s11,1 - while (1) - 4154: bfb1 j 40b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 4156: 4885 li a7,1 - p++; - 4158: 0d85 addi s11,s11,1 - while (1) - 415a: bf99 j 40b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 415c: 4b05 li s6,1 - p++; - 415e: 0d85 addi s11,s11,1 - while (1) - 4160: bf81 j 40b0 <_vprintf_core.constprop.0.isra.0+0x54> - if (*p == '-') - 4162: 4a05 li s4,1 - p++; - 4164: 0d85 addi s11,s11,1 - while (1) - 4166: b7a9 j 40b0 <_vprintf_core.constprop.0.isra.0+0x54> - char spec = *p++; - 4168: 8dbe mv s11,a5 - fmt_tmp[f_idx++] = '%'; - 416a: 02500693 li a3,37 - 416e: 02d10823 sb a3,48(sp) - 4172: 4d05 li s10,1 - if (flag_left) - 4174: 000a0763 beqz s4,4182 <_vprintf_core.constprop.0.isra.0+0x126> - fmt_tmp[f_idx++] = '-'; - 4178: 02d00693 li a3,45 - 417c: 02d108a3 sb a3,49(sp) - 4180: 4d09 li s10,2 - if (flag_zero) - 4182: 000b0c63 beqz s6,419a <_vprintf_core.constprop.0.isra.0+0x13e> - fmt_tmp[f_idx++] = '0'; - 4186: 0c0d0793 addi a5,s10,192 - 418a: 0818 addi a4,sp,16 - 418c: 00e786b3 add a3,a5,a4 - 4190: 03000613 li a2,48 - 4194: f6c68023 sb a2,-160(a3) - 4198: 2d05 addiw s10,s10,1 - if (flag_plus) - 419a: c999 beqz a1,41b0 <_vprintf_core.constprop.0.isra.0+0x154> - fmt_tmp[f_idx++] = '+'; - 419c: 0c0d0793 addi a5,s10,192 - 41a0: 0818 addi a4,sp,16 - 41a2: 00e786b3 add a3,a5,a4 - 41a6: 02b00613 li a2,43 - 41aa: f6c68023 sb a2,-160(a3) - 41ae: 2d05 addiw s10,s10,1 - if (flag_space) - 41b0: 00088c63 beqz a7,41c8 <_vprintf_core.constprop.0.isra.0+0x16c> - fmt_tmp[f_idx++] = ' '; - 41b4: 0c0d0793 addi a5,s10,192 - 41b8: 0818 addi a4,sp,16 - 41ba: 00e786b3 add a3,a5,a4 - 41be: 02000613 li a2,32 - 41c2: f6c68023 sb a2,-160(a3) - 41c6: 2d05 addiw s10,s10,1 - if (flag_hash) - 41c8: c919 beqz a0,41de <_vprintf_core.constprop.0.isra.0+0x182> - fmt_tmp[f_idx++] = '#'; - 41ca: 0c0d0793 addi a5,s10,192 - 41ce: 0818 addi a4,sp,16 - 41d0: 00e786b3 add a3,a5,a4 - 41d4: 02300613 li a2,35 - 41d8: f6c68023 sb a2,-160(a3) - 41dc: 2d05 addiw s10,s10,1 - if (width > 0) - 41de: 03010a13 addi s4,sp,48 - 41e2: 28804563 bgtz s0,446c <_vprintf_core.constprop.0.isra.0+0x410> - if (precision >= 0) - 41e6: 260bd763 bgez s7,4454 <_vprintf_core.constprop.0.isra.0+0x3f8> - fmt_tmp[f_idx++] = spec; - 41ea: 0c0d0793 addi a5,s10,192 - 41ee: 0818 addi a4,sp,16 - 41f0: 00e78633 add a2,a5,a4 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 41f4: 000c3683 ld a3,0(s8) - fmt_tmp[f_idx] = '\0'; - 41f8: 001d071b addiw a4,s10,1 - 41fc: 0c070793 addi a5,a4,192 - 4200: 0818 addi a4,sp,16 - fmt_tmp[f_idx++] = spec; - 4202: f7960023 sb s9,-160(a2) - fmt_tmp[f_idx] = '\0'; - 4206: 973e add a4,a4,a5 - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 4208: 08000593 li a1,128 - 420c: 8652 mv a2,s4 - 420e: 0888 addi a0,sp,80 - fmt_tmp[f_idx] = '\0'; - 4210: f6070023 sb zero,-160(a4) - stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 4214: dc5ff0ef jal 3fd8 - for (int i = 0; f_buf[i] != '\0'; i++) - 4218: 05014583 lbu a1,80(sp) - double f_val = va_arg(ap, double); - 421c: 0c21 addi s8,s8,8 - for (int i = 0; f_buf[i] != '\0'; i++) - 421e: 05110413 addi s0,sp,81 - 4222: e6058ce3 beqz a1,409a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 4226: 8526 mv a0,s1 - 4228: fc1fd0ef jal 21e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 422c: 00044583 lbu a1,0(s0) - 4230: 0405 addi s0,s0,1 - 4232: e60584e3 beqz a1,409a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, f_buf[i]); - 4236: 8526 mv a0,s1 - 4238: fb1fd0ef jal 21e8 <_out_char> - for (int i = 0; f_buf[i] != '\0'; i++) - 423c: 00044583 lbu a1,0(s0) - 4240: 0405 addi s0,s0,1 - 4242: f1f5 bnez a1,4226 <_vprintf_core.constprop.0.isra.0+0x1ca> - 4244: bd99 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - while (*p >= '0' && *p <= '9') - 4246: fd0c869b addiw a3,s9,-48 - 424a: 0ff6f313 zext.b t1,a3 - 424e: 4725 li a4,9 - int width = 0; - 4250: 4401 li s0,0 - while (*p >= '0' && *p <= '9') - 4252: 4625 li a2,9 - 4254: e8676ae3 bltu a4,t1,40e8 <_vprintf_core.constprop.0.isra.0+0x8c> - 4258: 001dcc83 lbu s9,1(s11) - width = width * 10 + (*p - '0'); - 425c: 0024171b slliw a4,s0,0x2 - 4260: 9f21 addw a4,a4,s0 - 4262: 0017171b slliw a4,a4,0x1 - 4266: 00e6843b addw s0,a3,a4 - while (*p >= '0' && *p <= '9') - 426a: fd0c869b addiw a3,s9,-48 - 426e: 0ff6f713 zext.b a4,a3 - p++; - 4272: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 4274: fee672e3 bgeu a2,a4,4258 <_vprintf_core.constprop.0.isra.0+0x1fc> - if (*p == '.') - 4278: 02e00793 li a5,46 - int precision = -1; - 427c: 5bfd li s7,-1 - if (*p == '.') - 427e: e6fc9ae3 bne s9,a5,40f2 <_vprintf_core.constprop.0.isra.0+0x96> - if (*p == '*') - 4282: 001dcc83 lbu s9,1(s11) - 4286: 02a00793 li a5,42 - 428a: 16fc9f63 bne s9,a5,4408 <_vprintf_core.constprop.0.isra.0+0x3ac> - while (*p >= '0' && *p <= '9') - 428e: 002dcc83 lbu s9,2(s11) - if (*p == 'l') - 4292: 06c00693 li a3,108 - precision = va_arg(ap, int); - 4296: 000c2b83 lw s7,0(s8) - p++; - 429a: 0d89 addi s11,s11,2 - precision = va_arg(ap, int); - 429c: 0c21 addi s8,s8,8 - if (*p == 'l') - 429e: 8666 mv a2,s9 - 42a0: e4dc9ee3 bne s9,a3,40fc <_vprintf_core.constprop.0.isra.0+0xa0> - if (*p == 'l') - 42a4: 001dcc83 lbu s9,1(s11) - 42a8: 08cc8d63 beq s9,a2,4342 <_vprintf_core.constprop.0.isra.0+0x2e6> - char spec = *p++; - 42ac: 06400693 li a3,100 - 42b0: 0d89 addi s11,s11,2 - if (!spec) - 42b2: 4cdc8c63 beq s9,a3,478a <_vprintf_core.constprop.0.isra.0+0x72e> - 42b6: 06400693 li a3,100 - len_mod = 1; - 42ba: 4e85 li t4,1 - 42bc: e596fee3 bgeu a3,s9,4118 <_vprintf_core.constprop.0.isra.0+0xbc> - 42c0: f9bc869b addiw a3,s9,-101 - 42c4: 0ff6f693 zext.b a3,a3 - 42c8: 464d li a2,19 - 42ca: 12d66863 bltu a2,a3,43fa <_vprintf_core.constprop.0.isra.0+0x39e> - 42ce: 4e05 li t3,1 - 42d0: 00091637 lui a2,0x91 - 42d4: 00de1333 sll t1,t3,a3 - 42d8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x879a0> - 42dc: 00c37633 and a2,t1,a2 - 42e0: 1a061463 bnez a2,4488 <_vprintf_core.constprop.0.isra.0+0x42c> - 42e4: 00737313 andi t1,t1,7 - 42e8: e80311e3 bnez t1,416a <_vprintf_core.constprop.0.isra.0+0x10e> - 42ec: 4639 li a2,14 - 42ee: 10c69663 bne a3,a2,43fa <_vprintf_core.constprop.0.isra.0+0x39e> - const char *s = va_arg(ap, char *); - 42f2: 000c3c83 ld s9,0(s8) - if (!s) - 42f6: 420c8863 beqz s9,4726 <_vprintf_core.constprop.0.isra.0+0x6ca> - while (*tmp && (precision < 0 || len < precision)) - 42fa: 000cc683 lbu a3,0(s9) - 42fe: 38068863 beqz a3,468e <_vprintf_core.constprop.0.isra.0+0x632> - const char *tmp = s; - 4302: 8666 mv a2,s9 - int len = 0; - 4304: 4681 li a3,0 - while (*tmp && (precision < 0 || len < precision)) - 4306: 00db8863 beq s7,a3,4316 <_vprintf_core.constprop.0.isra.0+0x2ba> - 430a: 00164583 lbu a1,1(a2) - len++; - 430e: 2685 addiw a3,a3,1 - tmp++; - 4310: 0605 addi a2,a2,1 - while (*tmp && (precision < 0 || len < precision)) - 4312: f9f5 bnez a1,4306 <_vprintf_core.constprop.0.isra.0+0x2aa> - 4314: 8bb6 mv s7,a3 - int padding = (width > len) ? width - len : 0; - 4316: 268bc563 blt s7,s0,4580 <_vprintf_core.constprop.0.isra.0+0x524> - for (int i = 0; i < len; i++) - 431a: 4401 li s0,0 - 431c: 020b8163 beqz s7,433e <_vprintf_core.constprop.0.isra.0+0x2e2> - 4320: 4d01 li s10,0 - _out_char(ctx, s[i]); - 4322: 01ac86b3 add a3,s9,s10 - 4326: 0006c583 lbu a1,0(a3) - 432a: 8526 mv a0,s1 - for (int i = 0; i < len; i++) - 432c: 0d05 addi s10,s10,1 - _out_char(ctx, s[i]); - 432e: ebbfd0ef jal 21e8 <_out_char> - for (int i = 0; i < len; i++) - 4332: 000d069b sext.w a3,s10 - 4336: ff76c6e3 blt a3,s7,4322 <_vprintf_core.constprop.0.isra.0+0x2c6> - if (flag_left) - 433a: 260a1463 bnez s4,45a2 <_vprintf_core.constprop.0.isra.0+0x546> - const char *s = va_arg(ap, char *); - 433e: 0c21 addi s8,s8,8 - 4340: bba9 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - p++; - 4342: 0d89 addi s11,s11,2 - char spec = *p++; - 4344: 000dcc83 lbu s9,0(s11) - 4348: 06400693 li a3,100 - 434c: 001d8793 addi a5,s11,1 - if (!spec) - 4350: 3edc8063 beq s9,a3,4730 <_vprintf_core.constprop.0.isra.0+0x6d4> - 4354: 0796ea63 bltu a3,s9,43c8 <_vprintf_core.constprop.0.isra.0+0x36c> - 4358: 04700693 li a3,71 - 435c: 0f96e263 bltu a3,s9,4440 <_vprintf_core.constprop.0.isra.0+0x3e4> - 4360: 04400693 li a3,68 - 4364: e196e2e3 bltu a3,s9,4168 <_vprintf_core.constprop.0.isra.0+0x10c> - 4368: dc0c82e3 beqz s9,412c <_vprintf_core.constprop.0.isra.0+0xd0> - char spec = *p++; - 436c: 8dbe mv s11,a5 - _out_char(ctx, '%'); - 436e: 02500593 li a1,37 - 4372: 8526 mv a0,s1 - 4374: e75fd0ef jal 21e8 <_out_char> - if (spec != '%') - 4378: 02500713 li a4,37 - 437c: d0ec8fe3 beq s9,a4,409a <_vprintf_core.constprop.0.isra.0+0x3e> - _out_char(ctx, spec); - 4380: 85e6 mv a1,s9 - 4382: bb09 j 4094 <_vprintf_core.constprop.0.isra.0+0x38> - 4384: 05800693 li a3,88 - 4388: 2edc8263 beq s9,a3,466c <_vprintf_core.constprop.0.isra.0+0x610> - 438c: 06300713 li a4,99 - 4390: 06ec9563 bne s9,a4,43fa <_vprintf_core.constprop.0.isra.0+0x39e> - char c = (char)va_arg(ap, int); - 4394: 000c4c83 lbu s9,0(s8) - int padding = (width > 1) ? width - 1 : 0; - 4398: 8722 mv a4,s0 - 439a: 00804363 bgtz s0,43a0 <_vprintf_core.constprop.0.isra.0+0x344> - 439e: 4705 li a4,1 - 43a0: fff7041b addiw s0,a4,-1 - if (!flag_left) - 43a4: 3c0a0463 beqz s4,476c <_vprintf_core.constprop.0.isra.0+0x710> - _out_char(ctx, c); - 43a8: 85e6 mv a1,s9 - 43aa: 8526 mv a0,s1 - 43ac: e3dfd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 43b0: 4a01 li s4,0 - 43b2: d451 beqz s0,433e <_vprintf_core.constprop.0.isra.0+0x2e2> - _out_char(ctx, ' '); - 43b4: 02000593 li a1,32 - 43b8: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 43ba: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 43bc: e2dfd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 43c0: ff441ae3 bne s0,s4,43b4 <_vprintf_core.constprop.0.isra.0+0x358> - const char *s = va_arg(ap, char *); - 43c4: 0c21 addi s8,s8,8 - 43c6: b9d1 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - 43c8: f9bc861b addiw a2,s9,-101 - 43cc: 0ff67613 zext.b a2,a2 - 43d0: 46cd li a3,19 - 43d2: 40c6e963 bltu a3,a2,47e4 <_vprintf_core.constprop.0.isra.0+0x788> - 43d6: 00091337 lui t1,0x91 - 43da: 4685 li a3,1 - 43dc: 00c696b3 sll a3,a3,a2 - 43e0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x879a0> - 43e4: 0066f333 and t1,a3,t1 - 43e8: 34031c63 bnez t1,4740 <_vprintf_core.constprop.0.isra.0+0x6e4> - 43ec: 8a9d andi a3,a3,7 - 43ee: d6069de3 bnez a3,4168 <_vprintf_core.constprop.0.isra.0+0x10c> - 43f2: 46b9 li a3,14 - char spec = *p++; - 43f4: 8dbe mv s11,a5 - 43f6: eed60ee3 beq a2,a3,42f2 <_vprintf_core.constprop.0.isra.0+0x296> - _out_char(ctx, '%'); - 43fa: 02500593 li a1,37 - 43fe: 8526 mv a0,s1 - 4400: de9fd0ef jal 21e8 <_out_char> - _out_char(ctx, spec); - 4404: 85e6 mv a1,s9 - 4406: b179 j 4094 <_vprintf_core.constprop.0.isra.0+0x38> - while (*p >= '0' && *p <= '9') - 4408: fd0c869b addiw a3,s9,-48 - 440c: 0ff6fe13 zext.b t3,a3 - 4410: 4625 li a2,9 - p++; - 4412: 0d85 addi s11,s11,1 - precision = 0; - 4414: 4b81 li s7,0 - while (*p >= '0' && *p <= '9') - 4416: 4325 li t1,9 - 4418: cdc66de3 bltu a2,t3,40f2 <_vprintf_core.constprop.0.isra.0+0x96> - precision = precision * 10 + (*p - '0'); - 441c: 002b961b slliw a2,s7,0x2 - while (*p >= '0' && *p <= '9') - 4420: 001dcc83 lbu s9,1(s11) - precision = precision * 10 + (*p - '0'); - 4424: 0176073b addw a4,a2,s7 - 4428: 0017171b slliw a4,a4,0x1 - 442c: 00e68bbb addw s7,a3,a4 - while (*p >= '0' && *p <= '9') - 4430: fd0c869b addiw a3,s9,-48 - 4434: 0ff6f613 zext.b a2,a3 - p++; - 4438: 0d85 addi s11,s11,1 - while (*p >= '0' && *p <= '9') - 443a: fec371e3 bgeu t1,a2,441c <_vprintf_core.constprop.0.isra.0+0x3c0> - 443e: b955 j 40f2 <_vprintf_core.constprop.0.isra.0+0x96> - 4440: 05800693 li a3,88 - 4444: 3cdc8d63 beq s9,a3,481e <_vprintf_core.constprop.0.isra.0+0x7c2> - 4448: 06300713 li a4,99 - char spec = *p++; - 444c: 8dbe mv s11,a5 - 444e: f4ec83e3 beq s9,a4,4394 <_vprintf_core.constprop.0.isra.0+0x338> - 4452: b765 j 43fa <_vprintf_core.constprop.0.isra.0+0x39e> - f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 4454: 01aa0533 add a0,s4,s10 - 4458: 865e mv a2,s7 - 445a: 00002597 auipc a1,0x2 - 445e: dee58593 addi a1,a1,-530 # 6248 <_GLOBAL__sub_I__ZSt3cin+0x258> - 4462: ba5ff0ef jal 4006 - 4466: 00ad0d3b addw s10,s10,a0 - 446a: b341 j 41ea <_vprintf_core.constprop.0.isra.0+0x18e> - f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 446c: 01aa0533 add a0,s4,s10 - 4470: 8622 mv a2,s0 - 4472: 00002597 auipc a1,0x2 - 4476: dce58593 addi a1,a1,-562 # 6240 <_GLOBAL__sub_I__ZSt3cin+0x250> - 447a: b8dff0ef jal 4006 - 447e: 00ad0d3b addw s10,s10,a0 - if (precision >= 0) - 4482: d60bc4e3 bltz s7,41ea <_vprintf_core.constprop.0.isra.0+0x18e> - 4486: b7f9 j 4454 <_vprintf_core.constprop.0.isra.0+0x3f8> - int is_signed = (spec == 'd' || spec == 'i'); - 4488: 06900693 li a3,105 - 448c: 10dc8e63 beq s9,a3,45a8 <_vprintf_core.constprop.0.isra.0+0x54c> - val = (uint64)va_arg(ap, void *); - 4490: 008c0793 addi a5,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4494: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 4498: e43e sd a5,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 449a: 38dc9d63 bne s9,a3,4834 <_vprintf_core.constprop.0.isra.0+0x7d8> - else if (len_mod == 1) - 449e: 33ce8963 beq t4,t3,47d0 <_vprintf_core.constprop.0.isra.0+0x774> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 44a2: 000c6e03 lwu t3,0(s8) - 44a6: 85f6 mv a1,t4 - 44a8: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 44aa: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 44ac: 00002f97 auipc t6,0x2 - 44b0: d64f8f93 addi t6,t6,-668 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - if (val == 0) - 44b4: 120e0363 beqz t3,45da <_vprintf_core.constprop.0.isra.0+0x57e> - 44b8: 01010293 addi t0,sp,16 - sign_char = '-'; - 44bc: 8616 mv a2,t0 - 44be: 86f2 mv a3,t3 - buf[i++] = digits[val % base]; - 44c0: 0266f8b3 remu a7,a3,t1 - 44c4: 8f32 mv t5,a2 - while (val != 0) - 44c6: 0605 addi a2,a2,1 - 44c8: 8eb6 mv t4,a3 - buf[i++] = digits[val % base]; - 44ca: 98fe add a7,a7,t6 - 44cc: 0008c883 lbu a7,0(a7) - val /= base; - 44d0: 0266d6b3 divu a3,a3,t1 - buf[i++] = digits[val % base]; - 44d4: ff160fa3 sb a7,-1(a2) - while (val != 0) - 44d8: fe6ef4e3 bgeu t4,t1,44c0 <_vprintf_core.constprop.0.isra.0+0x464> - buf[i++] = digits[val % base]; - 44dc: 405f0f3b subw t5,t5,t0 - 44e0: 2f05 addiw t5,t5,1 - if (precision >= 0) - 44e2: 100bc363 bltz s7,45e8 <_vprintf_core.constprop.0.isra.0+0x58c> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 44e6: 1d7f4d63 blt t5,s7,46c0 <_vprintf_core.constprop.0.isra.0+0x664> - if (precision == 0 && val == 0) - 44ea: 340b9163 bnez s7,482c <_vprintf_core.constprop.0.isra.0+0x7d0> - 44ee: 200e0763 beqz t3,46fc <_vprintf_core.constprop.0.isra.0+0x6a0> - for (int i = digit_len - 1; i >= 0; i--) - 44f2: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 44f6: 07000693 li a3,112 - for (int i = digit_len - 1; i >= 0; i--) - 44fa: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 44fc: 28dc8e63 beq s9,a3,4798 <_vprintf_core.constprop.0.isra.0+0x73c> - 4500: 2a051663 bnez a0,47ac <_vprintf_core.constprop.0.isra.0+0x750> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 4504: 00bf05bb addw a1,t5,a1 - 4508: 8d52 mv s10,s4 - 450a: 4b01 li s6,0 - char *prefix_str = NULL; - 450c: 4c81 li s9,0 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 450e: 1085d263 bge a1,s0,4612 <_vprintf_core.constprop.0.isra.0+0x5b6> - 4512: 9c0d subw s0,s0,a1 - if (!flag_left && !flag_zero) - 4514: 100d0a63 beqz s10,4628 <_vprintf_core.constprop.0.isra.0+0x5cc> - if (sign_char) - 4518: 6782 ld a5,0(sp) - 451a: 10079263 bnez a5,461e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 451e: 000c8c63 beqz s9,4536 <_vprintf_core.constprop.0.isra.0+0x4da> - _out_char(ctx, prefix_str[0]); - 4522: 000cc583 lbu a1,0(s9) - 4526: 8526 mv a0,s1 - 4528: cc1fd0ef jal 21e8 <_out_char> - _out_char(ctx, prefix_str[1]); - 452c: 001cc583 lbu a1,1(s9) - 4530: 8526 mv a0,s1 - 4532: cb7fd0ef jal 21e8 <_out_char> - int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 4536: 180b0263 beqz s6,46ba <_vprintf_core.constprop.0.isra.0+0x65e> - 453a: 100a1863 bnez s4,464a <_vprintf_core.constprop.0.isra.0+0x5ee> - 453e: 008b8bbb addw s7,s7,s0 - for (int i = 0; i < total_zeros; i++) - 4542: 2a0b8363 beqz s7,47e8 <_vprintf_core.constprop.0.isra.0+0x78c> - 4546: 4c81 li s9,0 - _out_char(ctx, '0'); - 4548: 03000593 li a1,48 - 454c: 8526 mv a0,s1 - for (int i = 0; i < total_zeros; i++) - 454e: 2c85 addiw s9,s9,1 - _out_char(ctx, '0'); - 4550: c99fd0ef jal 21e8 <_out_char> - for (int i = 0; i < total_zeros; i++) - 4554: ff7c9ae3 bne s9,s7,4548 <_vprintf_core.constprop.0.isra.0+0x4ec> - for (int i = digit_len - 1; i >= 0; i--) - 4558: 57fd li a5,-1 - 455a: 00fc0f63 beq s8,a5,4578 <_vprintf_core.constprop.0.isra.0+0x51c> - 455e: 01010c93 addi s9,sp,16 - 4562: 9ce2 add s9,s9,s8 - 4564: 00f10c13 addi s8,sp,15 - _out_char(ctx, num_buf[i]); - 4568: 000cc583 lbu a1,0(s9) - 456c: 8526 mv a0,s1 - for (int i = digit_len - 1; i >= 0; i--) - 456e: 1cfd addi s9,s9,-1 - _out_char(ctx, num_buf[i]); - 4570: c79fd0ef jal 21e8 <_out_char> - for (int i = digit_len - 1; i >= 0; i--) - 4574: ff9c1ae3 bne s8,s9,4568 <_vprintf_core.constprop.0.isra.0+0x50c> - if (flag_left) - 4578: 0c0a1e63 bnez s4,4654 <_vprintf_core.constprop.0.isra.0+0x5f8> - char spec = *p++; - 457c: 6c22 ld s8,8(sp) - 457e: be31 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - int padding = (width > len) ? width - len : 0; - 4580: 4174043b subw s0,s0,s7 - if (!flag_left) - 4584: 100a0a63 beqz s4,4698 <_vprintf_core.constprop.0.isra.0+0x63c> - for (int i = 0; i < len; i++) - 4588: d80b9ce3 bnez s7,4320 <_vprintf_core.constprop.0.isra.0+0x2c4> - for (int i = 0; i < padding; i++) - 458c: 4a01 li s4,0 - _out_char(ctx, ' '); - 458e: 02000593 li a1,32 - 4592: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 4594: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 4596: c53fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 459a: ff441ae3 bne s0,s4,458e <_vprintf_core.constprop.0.isra.0+0x532> - const char *s = va_arg(ap, char *); - 459e: 0c21 addi s8,s8,8 - 45a0: bced j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - for (int i = 0; i < padding; i++) - 45a2: f46d bnez s0,458c <_vprintf_core.constprop.0.isra.0+0x530> - const char *s = va_arg(ap, char *); - 45a4: 0c21 addi s8,s8,8 - 45a6: bcd5 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - else if (len_mod == 1) - 45a8: 1fce8163 beq t4,t3,478a <_vprintf_core.constprop.0.isra.0+0x72e> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 45ac: 000c2e03 lw t3,0(s8) - 45b0: 008c0793 addi a5,s8,8 - 45b4: e43e sd a5,8(sp) - int64 sval = (int64)val; - 45b6: 86f2 mv a3,t3 - if (sval < 0) - 45b8: 1406cb63 bltz a3,470e <_vprintf_core.constprop.0.isra.0+0x6b2> - sign_char = '+'; - 45bc: 02b00793 li a5,43 - 45c0: e03e sd a5,0(sp) - else if (flag_plus) - 45c2: e589 bnez a1,45cc <_vprintf_core.constprop.0.isra.0+0x570> - else if (flag_space) - 45c4: 00589793 slli a5,a7,0x5 - 45c8: e03e sd a5,0(sp) - 45ca: 85c6 mv a1,a7 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 45cc: 4329 li t1,10 - 45ce: 00002f97 auipc t6,0x2 - 45d2: c42f8f93 addi t6,t6,-958 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - if (val == 0) - 45d6: ee0e11e3 bnez t3,44b8 <_vprintf_core.constprop.0.isra.0+0x45c> - buf[i++] = '0'; - 45da: 03000693 li a3,48 - 45de: 00d10823 sb a3,16(sp) - return i; - 45e2: 4f05 li t5,1 - if (precision >= 0) - 45e4: f00bd1e3 bgez s7,44e6 <_vprintf_core.constprop.0.isra.0+0x48a> - for (int i = digit_len - 1; i >= 0; i--) - 45e8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 45ec: 07000893 li a7,112 - if (!flag_left && !flag_zero) - 45f0: 016a6d33 or s10,s4,s6 - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 45f4: 4b81 li s7,0 - for (int i = digit_len - 1; i >= 0; i--) - 45f6: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 45f8: 0d1c9f63 bne s9,a7,46d6 <_vprintf_core.constprop.0.isra.0+0x67a> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 45fc: 00002c97 auipc s9,0x2 - 4600: c2cc8c93 addi s9,s9,-980 # 6228 <_GLOBAL__sub_I__ZSt3cin+0x238> - prefix_len += 2; - 4604: 2589 addiw a1,a1,2 - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 4606: 017585bb addw a1,a1,s7 - 460a: 01e585bb addw a1,a1,t5 - 460e: f085c2e3 blt a1,s0,4512 <_vprintf_core.constprop.0.isra.0+0x4b6> - if (!flag_left && !flag_zero) - 4612: 080d0f63 beqz s10,46b0 <_vprintf_core.constprop.0.isra.0+0x654> - if (sign_char) - 4616: 6782 ld a5,0(sp) - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 4618: 4401 li s0,0 - if (sign_char) - 461a: f00782e3 beqz a5,451e <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, sign_char); - 461e: 6582 ld a1,0(sp) - 4620: 8526 mv a0,s1 - 4622: bc7fd0ef jal 21e8 <_out_char> - 4626: bde5 j 451e <_vprintf_core.constprop.0.isra.0+0x4c2> - _out_char(ctx, ' '); - 4628: 02000593 li a1,32 - 462c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 462e: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 4630: bb9fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 4634: efa402e3 beq s0,s10,4518 <_vprintf_core.constprop.0.isra.0+0x4bc> - _out_char(ctx, ' '); - 4638: 02000593 li a1,32 - 463c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 463e: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 4640: ba9fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 4644: ffa412e3 bne s0,s10,4628 <_vprintf_core.constprop.0.isra.0+0x5cc> - 4648: bdc1 j 4518 <_vprintf_core.constprop.0.isra.0+0x4bc> - for (int i = 0; i < total_zeros; i++) - 464a: ee0b9ee3 bnez s7,4546 <_vprintf_core.constprop.0.isra.0+0x4ea> - for (int i = digit_len - 1; i >= 0; i--) - 464e: 577d li a4,-1 - 4650: f0ec17e3 bne s8,a4,455e <_vprintf_core.constprop.0.isra.0+0x502> - for (int i = 0; i < padding; i++) - 4654: d405 beqz s0,457c <_vprintf_core.constprop.0.isra.0+0x520> - 4656: 4a01 li s4,0 - _out_char(ctx, ' '); - 4658: 02000593 li a1,32 - 465c: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 465e: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 4660: b89fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 4664: fe8a1ae3 bne s4,s0,4658 <_vprintf_core.constprop.0.isra.0+0x5fc> - char spec = *p++; - 4668: 6c22 ld s8,8(sp) - 466a: bc05 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - val = (uint64)va_arg(ap, void *); - 466c: 008c0793 addi a5,s8,8 - 4670: e43e sd a5,8(sp) - else if (len_mod == 1) - 4672: 180e9163 bnez t4,47f4 <_vprintf_core.constprop.0.isra.0+0x798> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 4676: 000c6e03 lwu t3,0(s8) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 467a: 4581 li a1,0 - 467c: 05800c93 li s9,88 - 4680: e002 sd zero,0(sp) - 4682: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4684: 00002f97 auipc t6,0x2 - 4688: b74f8f93 addi t6,t6,-1164 # 61f8 <_GLOBAL__sub_I__ZSt3cin+0x208> - 468c: b525 j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - int padding = (width > len) ? width - len : 0; - 468e: ca8058e3 blez s0,433e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (!flag_left) - 4692: ee0a1de3 bnez s4,458c <_vprintf_core.constprop.0.isra.0+0x530> - int len = 0; - 4696: 4b81 li s7,0 - for (int i = 0; i < padding; i++) - 4698: 4d01 li s10,0 - _out_char(ctx, ' '); - 469a: 02000593 li a1,32 - 469e: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 46a0: 2d05 addiw s10,s10,1 - _out_char(ctx, ' '); - 46a2: b47fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 46a6: fe8d1ae3 bne s10,s0,469a <_vprintf_core.constprop.0.isra.0+0x63e> - for (int i = 0; i < len; i++) - 46aa: c60b9be3 bnez s7,4320 <_vprintf_core.constprop.0.isra.0+0x2c4> - 46ae: b941 j 433e <_vprintf_core.constprop.0.isra.0+0x2e2> - if (sign_char) - 46b0: 6782 ld a5,0(sp) - 46b2: 4401 li s0,0 - 46b4: f7ad bnez a5,461e <_vprintf_core.constprop.0.isra.0+0x5c2> - if (prefix_str) - 46b6: e60c96e3 bnez s9,4522 <_vprintf_core.constprop.0.isra.0+0x4c6> - for (int i = 0; i < total_zeros; i++) - 46ba: e80b96e3 bnez s7,4546 <_vprintf_core.constprop.0.isra.0+0x4ea> - 46be: bd69 j 4558 <_vprintf_core.constprop.0.isra.0+0x4fc> - int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 46c0: 41eb8bbb subw s7,s7,t5 - 46c4: 8d52 mv s10,s4 - 46c6: 4b01 li s6,0 - for (int i = digit_len - 1; i >= 0; i--) - 46c8: ffff0c1b addiw s8,t5,-1 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46cc: 07000893 li a7,112 - for (int i = digit_len - 1; i >= 0; i--) - 46d0: 8662 mv a2,s8 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46d2: f31c85e3 beq s9,a7,45fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 46d6: cd09 beqz a0,46f0 <_vprintf_core.constprop.0.isra.0+0x694> - 46d8: 000e0c63 beqz t3,46f0 <_vprintf_core.constprop.0.isra.0+0x694> - 46dc: 07800513 li a0,120 - for (int i = digit_len - 1; i >= 0; i--) - 46e0: 00060c1b sext.w s8,a2 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46e4: f0ac8ce3 beq s9,a0,45fc <_vprintf_core.constprop.0.isra.0+0x5a0> - 46e8: 05800613 li a2,88 - 46ec: 12cc8463 beq s9,a2,4814 <_vprintf_core.constprop.0.isra.0+0x7b8> - int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 46f0: 00bb85bb addw a1,s7,a1 - 46f4: 01e585bb addw a1,a1,t5 - char *prefix_str = NULL; - 46f8: 4c81 li s9,0 - 46fa: bd11 j 450e <_vprintf_core.constprop.0.isra.0+0x4b2> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46fc: 07000693 li a3,112 - 4700: 8d52 mv s10,s4 - 4702: 4b01 li s6,0 - 4704: 08dc8d63 beq s9,a3,479e <_vprintf_core.constprop.0.isra.0+0x742> - 4708: 5c7d li s8,-1 - char *prefix_str = NULL; - 470a: 4c81 li s9,0 - 470c: b509 j 450e <_vprintf_core.constprop.0.isra.0+0x4b2> - sign_char = '-'; - 470e: 02d00793 li a5,45 - val = (uint64)(-sval); - 4712: 40d00e33 neg t3,a3 - 4716: 4585 li a1,1 - 4718: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 471a: 00002f97 auipc t6,0x2 - 471e: af6f8f93 addi t6,t6,-1290 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - sign_char = '-'; - 4722: e03e sd a5,0(sp) - 4724: bb51 j 44b8 <_vprintf_core.constprop.0.isra.0+0x45c> - s = "(null)"; - 4726: 00002c97 auipc s9,0x2 - 472a: b12c8c93 addi s9,s9,-1262 # 6238 <_GLOBAL__sub_I__ZSt3cin+0x248> - 472e: bed1 j 4302 <_vprintf_core.constprop.0.isra.0+0x2a6> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4730: 000c3683 ld a3,0(s8) - 4734: 008c0713 addi a4,s8,8 - 4738: e43a sd a4,8(sp) - 473a: 8dbe mv s11,a5 - 473c: 8e36 mv t3,a3 - if (is_signed) - 473e: bdad j 45b8 <_vprintf_core.constprop.0.isra.0+0x55c> - int is_signed = (spec == 'd' || spec == 'i'); - 4740: 06900693 li a3,105 - 4744: fedc86e3 beq s9,a3,4730 <_vprintf_core.constprop.0.isra.0+0x6d4> - val = (uint64)va_arg(ap, void *); - 4748: 008c0713 addi a4,s8,8 - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 474c: 07800693 li a3,120 - val = (uint64)va_arg(ap, void *); - 4750: e43a sd a4,8(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4752: 06dc9063 bne s9,a3,47b2 <_vprintf_core.constprop.0.isra.0+0x756> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4756: 000c3e03 ld t3,0(s8) - 475a: 8dbe mv s11,a5 - 475c: 4581 li a1,0 - 475e: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4760: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4762: 00002f97 auipc t6,0x2 - 4766: aaef8f93 addi t6,t6,-1362 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - 476a: b3a9 j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - for (int i = 0; i < padding; i++) - 476c: c809 beqz s0,477e <_vprintf_core.constprop.0.isra.0+0x722> - _out_char(ctx, ' '); - 476e: 02000593 li a1,32 - 4772: 8526 mv a0,s1 - for (int i = 0; i < padding; i++) - 4774: 2a05 addiw s4,s4,1 - _out_char(ctx, ' '); - 4776: a73fd0ef jal 21e8 <_out_char> - for (int i = 0; i < padding; i++) - 477a: ff441ae3 bne s0,s4,476e <_vprintf_core.constprop.0.isra.0+0x712> - _out_char(ctx, c); - 477e: 85e6 mv a1,s9 - 4780: 8526 mv a0,s1 - 4782: a67fd0ef jal 21e8 <_out_char> - const char *s = va_arg(ap, char *); - 4786: 0c21 addi s8,s8,8 - 4788: ba09 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 478a: 000c3683 ld a3,0(s8) - 478e: 008c0793 addi a5,s8,8 - 4792: e43e sd a5,8(sp) - 4794: 8e36 mv t3,a3 - if (is_signed) - 4796: b50d j 45b8 <_vprintf_core.constprop.0.isra.0+0x55c> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 4798: 8d52 mv s10,s4 - 479a: 4b01 li s6,0 - 479c: b585 j 45fc <_vprintf_core.constprop.0.isra.0+0x5a0> - digit_len = 0; - 479e: 4f01 li t5,0 - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 47a0: 5c7d li s8,-1 - prefix_str = (spec == 'X') ? "0X" : "0x"; - 47a2: 00002c97 auipc s9,0x2 - 47a6: a86c8c93 addi s9,s9,-1402 # 6228 <_GLOBAL__sub_I__ZSt3cin+0x238> - 47aa: bda9 j 4604 <_vprintf_core.constprop.0.isra.0+0x5a8> - if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 47ac: 8d52 mv s10,s4 - 47ae: 4b01 li s6,0 - 47b0: b735 j 46dc <_vprintf_core.constprop.0.isra.0+0x680> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47b2: 07000693 li a3,112 - 47b6: 04dc8263 beq s9,a3,47fa <_vprintf_core.constprop.0.isra.0+0x79e> - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 47ba: 000c3e03 ld t3,0(s8) - 47be: 8dbe mv s11,a5 - 47c0: 4581 li a1,0 - 47c2: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47c4: 4329 li t1,10 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47c6: 00002f97 auipc t6,0x2 - 47ca: a4af8f93 addi t6,t6,-1462 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - 47ce: b1dd j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 47d0: 000c3e03 ld t3,0(s8) - 47d4: 4581 li a1,0 - 47d6: e002 sd zero,0(sp) - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47d8: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47da: 00002f97 auipc t6,0x2 - 47de: a36f8f93 addi t6,t6,-1482 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - 47e2: b9c9 j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - char spec = *p++; - 47e4: 8dbe mv s11,a5 - 47e6: b911 j 43fa <_vprintf_core.constprop.0.isra.0+0x39e> - for (int i = digit_len - 1; i >= 0; i--) - 47e8: 577d li a4,-1 - 47ea: 4401 li s0,0 - 47ec: d6ec19e3 bne s8,a4,455e <_vprintf_core.constprop.0.isra.0+0x502> - char spec = *p++; - 47f0: 6c22 ld s8,8(sp) - 47f2: b065 j 409a <_vprintf_core.constprop.0.isra.0+0x3e> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 47f4: 000c3e03 ld t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47f8: b549 j 467a <_vprintf_core.constprop.0.isra.0+0x61e> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47fa: 8dbe mv s11,a5 - val = (uint64)va_arg(ap, void *); - 47fc: 000c3e03 ld t3,0(s8) - 4800: 4581 li a1,0 - 4802: 07000c93 li s9,112 - 4806: e002 sd zero,0(sp) - 4808: 4341 li t1,16 - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 480a: 00002f97 auipc t6,0x2 - 480e: a06f8f93 addi t6,t6,-1530 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - 4812: b14d j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - prefix_str = (spec == 'X') ? "0X" : "0x"; - 4814: 00002c97 auipc s9,0x2 - 4818: a1cc8c93 addi s9,s9,-1508 # 6230 <_GLOBAL__sub_I__ZSt3cin+0x240> - 481c: b3e5 j 4604 <_vprintf_core.constprop.0.isra.0+0x5a8> - val = (uint64)va_arg(ap, void *); - 481e: 008c0713 addi a4,s8,8 - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4822: 000c3e03 ld t3,0(s8) - val = (uint64)va_arg(ap, void *); - 4826: e43a sd a4,8(sp) - val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4828: 8dbe mv s11,a5 - 482a: bd81 j 467a <_vprintf_core.constprop.0.isra.0+0x61e> - 482c: 8d52 mv s10,s4 - 482e: 4b01 li s6,0 - 4830: 4b81 li s7,0 - 4832: bd59 j 46c8 <_vprintf_core.constprop.0.isra.0+0x66c> - int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4834: 07000693 li a3,112 - 4838: fcdc82e3 beq s9,a3,47fc <_vprintf_core.constprop.0.isra.0+0x7a0> - else if (len_mod == 1) - 483c: 01ce8c63 beq t4,t3,4854 <_vprintf_core.constprop.0.isra.0+0x7f8> - val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 4840: 000c6e03 lwu t3,0(s8) - const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4844: 4581 li a1,0 - 4846: e002 sd zero,0(sp) - 4848: 4329 li t1,10 - 484a: 00002f97 auipc t6,0x2 - 484e: 9c6f8f93 addi t6,t6,-1594 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x220> - 4852: b18d j 44b4 <_vprintf_core.constprop.0.isra.0+0x458> - val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 4854: 000c3e03 ld t3,0(s8) - if (is_signed) - 4858: b7f5 j 4844 <_vprintf_core.constprop.0.isra.0+0x7e8> - -000000000000485a : -{ - 485a: 7139 addi sp,sp,-64 - 485c: f822 sd s0,48(sp) - 485e: f426 sd s1,40(sp) - 4860: 842e mv s0,a1 - 4862: 84aa mv s1,a0 - 4864: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 4866: 850a mv a0,sp - 4868: 8636 mv a2,a3 -{ - 486a: fc06 sd ra,56(sp) - ctx.buf = str; - 486c: e026 sd s1,0(sp) - ctx.limit = size; - 486e: e422 sd s0,8(sp) - ctx.written = 0; - 4870: e802 sd zero,16(sp) - ctx.stream = NULL; - 4872: ec02 sd zero,24(sp) - _vprintf_core(&ctx, format, ap); - 4874: fe8ff0ef jal 405c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 4878: 6542 ld a0,16(sp) - if (size > 0) - 487a: c411 beqz s0,4886 - if (ctx.written < size) - 487c: 00857b63 bgeu a0,s0,4892 - str[ctx.written] = '\0'; - 4880: 94aa add s1,s1,a0 - 4882: 00048023 sb zero,0(s1) -} - 4886: 70e2 ld ra,56(sp) - 4888: 7442 ld s0,48(sp) - 488a: 74a2 ld s1,40(sp) - 488c: 2501 sext.w a0,a0 - 488e: 6121 addi sp,sp,64 - 4890: 8082 ret - str[size - 1] = '\0'; - 4892: 94a2 add s1,s1,s0 - 4894: fe048fa3 sb zero,-1(s1) -} - 4898: 70e2 ld ra,56(sp) - 489a: 7442 ld s0,48(sp) - 489c: 74a2 ld s1,40(sp) - 489e: 2501 sext.w a0,a0 - 48a0: 6121 addi sp,sp,64 - 48a2: 8082 ret - -00000000000048a4 : -{ - 48a4: 7119 addi sp,sp,-128 - 48a6: e0a2 sd s0,64(sp) - 48a8: fc26 sd s1,56(sp) - 48aa: 842e mv s0,a1 - 48ac: 84aa mv s1,a0 - 48ae: 85b2 mv a1,a2 - _vprintf_core(&ctx, format, ap); - 48b0: 0808 addi a0,sp,16 - va_start(ap, format); - 48b2: 08b0 addi a2,sp,88 -{ - 48b4: e486 sd ra,72(sp) - 48b6: ecb6 sd a3,88(sp) - 48b8: f0ba sd a4,96(sp) - 48ba: f4be sd a5,104(sp) - 48bc: f8c2 sd a6,112(sp) - 48be: fcc6 sd a7,120(sp) - va_start(ap, format); - 48c0: e432 sd a2,8(sp) - ctx.buf = str; - 48c2: e826 sd s1,16(sp) - ctx.limit = size; - 48c4: ec22 sd s0,24(sp) - ctx.written = 0; - 48c6: f002 sd zero,32(sp) - ctx.stream = NULL; - 48c8: f402 sd zero,40(sp) - _vprintf_core(&ctx, format, ap); - 48ca: f92ff0ef jal 405c <_vprintf_core.constprop.0.isra.0> - if (ctx.written < size) - 48ce: 7502 ld a0,32(sp) - if (size > 0) - 48d0: c411 beqz s0,48dc - if (ctx.written < size) - 48d2: 00857b63 bgeu a0,s0,48e8 - str[ctx.written] = '\0'; - 48d6: 94aa add s1,s1,a0 - 48d8: 00048023 sb zero,0(s1) -} - 48dc: 60a6 ld ra,72(sp) - 48de: 6406 ld s0,64(sp) - 48e0: 74e2 ld s1,56(sp) - 48e2: 2501 sext.w a0,a0 - 48e4: 6109 addi sp,sp,128 - 48e6: 8082 ret - str[size - 1] = '\0'; - 48e8: 94a2 add s1,s1,s0 - 48ea: fe048fa3 sb zero,-1(s1) -} - 48ee: 60a6 ld ra,72(sp) - 48f0: 6406 ld s0,64(sp) - 48f2: 74e2 ld s1,56(sp) - 48f4: 2501 sext.w a0,a0 - 48f6: 6109 addi sp,sp,128 - 48f8: 8082 ret - -00000000000048fa : -{ - 48fa: 7119 addi sp,sp,-128 - va_start(ap, format); - 48fc: 04810313 addi t1,sp,72 -{ - 4900: e4ae sd a1,72(sp) - 4902: e8b2 sd a2,80(sp) - 4904: f4be sd a5,104(sp) - _vprintf_core(&ctx, format, ap); - 4906: 85aa mv a1,a0 - ctx.stream = stdout; - 4908: 00004797 auipc a5,0x4 - 490c: 3707b783 ld a5,880(a5) # 8c78 - _vprintf_core(&ctx, format, ap); - 4910: 0808 addi a0,sp,16 - 4912: 861a mv a2,t1 -{ - 4914: fc06 sd ra,56(sp) - 4916: ecb6 sd a3,88(sp) - 4918: f0ba sd a4,96(sp) - 491a: f8c2 sd a6,112(sp) - 491c: fcc6 sd a7,120(sp) - va_start(ap, format); - 491e: e41a sd t1,8(sp) - ctx.buf = NULL; - 4920: e802 sd zero,16(sp) - ctx.limit = 0; - 4922: ec02 sd zero,24(sp) - ctx.written = 0; - 4924: f002 sd zero,32(sp) - ctx.stream = stdout; - 4926: f43e sd a5,40(sp) - _vprintf_core(&ctx, format, ap); - 4928: f34ff0ef jal 405c <_vprintf_core.constprop.0.isra.0> -} - 492c: 70e2 ld ra,56(sp) - 492e: 5502 lw a0,32(sp) - 4930: 6109 addi sp,sp,128 - 4932: 8082 ret - -0000000000004934 : -{ - 4934: 7159 addi sp,sp,-112 - va_start(ap, format); - 4936: 04010e13 addi t3,sp,64 -{ - 493a: 8eaa mv t4,a0 - ctx.fd = -1; - 493c: 537d li t1,-1 -{ - 493e: e0b2 sd a2,64(sp) - int ret = _vscanf_core(&ctx, format, ap); - 4940: 0808 addi a0,sp,16 - 4942: 8672 mv a2,t3 -{ - 4944: fc06 sd ra,56(sp) - 4946: e4b6 sd a3,72(sp) - 4948: e8ba sd a4,80(sp) - 494a: ecbe sd a5,88(sp) - 494c: f0c2 sd a6,96(sp) - 494e: f4c6 sd a7,104(sp) - va_start(ap, format); - 4950: e472 sd t3,8(sp) - ctx.buf = str; - 4952: e876 sd t4,16(sp) - ctx.fd = -1; - 4954: cc1a sw t1,24(sp) - ctx.pos = 0; - 4956: f002 sd zero,32(sp) - ctx.ungotten = -1; - 4958: d41a sw t1,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 495a: 81efd0ef jal 1978 <_vscanf_core.constprop.0> -} - 495e: 70e2 ld ra,56(sp) - 4960: 6165 addi sp,sp,112 - 4962: 8082 ret - -0000000000004964 : -{ - 4964: 7119 addi sp,sp,-128 - va_start(ap, format); - 4966: 04810313 addi t1,sp,72 -{ - 496a: e4ae sd a1,72(sp) - 496c: e8b2 sd a2,80(sp) - 496e: f4be sd a5,104(sp) - int ret = _vscanf_core(&ctx, format, ap); - 4970: 85aa mv a1,a0 - ctx.ungotten = -1; - 4972: 57fd li a5,-1 - int ret = _vscanf_core(&ctx, format, ap); - 4974: 0808 addi a0,sp,16 - 4976: 861a mv a2,t1 -{ - 4978: fc06 sd ra,56(sp) - 497a: ecb6 sd a3,88(sp) - 497c: f0ba sd a4,96(sp) - 497e: f8c2 sd a6,112(sp) - 4980: fcc6 sd a7,120(sp) - va_start(ap, format); - 4982: e41a sd t1,8(sp) - ctx.buf = NULL; - 4984: e802 sd zero,16(sp) - ctx.fd = STDIN_FD; - 4986: cc02 sw zero,24(sp) - ctx.pos = 0; - 4988: f002 sd zero,32(sp) - ctx.ungotten = -1; - 498a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 498c: fedfc0ef jal 1978 <_vscanf_core.constprop.0> -} - 4990: 70e2 ld ra,56(sp) - 4992: 6109 addi sp,sp,128 - 4994: 8082 ret - -0000000000004996 : -{ - 4996: 1101 addi sp,sp,-32 - 4998: e426 sd s1,8(sp) - 499a: 84ae mv s1,a1 - 499c: e04a sd s2,0(sp) - if (strcmp(mode, "r") == 0) - 499e: 00002597 auipc a1,0x2 - 49a2: 8b258593 addi a1,a1,-1870 # 6250 <_GLOBAL__sub_I__ZSt3cin+0x260> -{ - 49a6: 892a mv s2,a0 - if (strcmp(mode, "r") == 0) - 49a8: 8526 mv a0,s1 -{ - 49aa: e822 sd s0,16(sp) - 49ac: ec06 sd ra,24(sp) - if (strcmp(mode, "r") == 0) - 49ae: 298010ef jal 5c46 - 49b2: 842a mv s0,a0 - 49b4: c919 beqz a0,49ca - else if (strcmp(mode, "w") == 0) - 49b6: 00002597 auipc a1,0x2 - 49ba: 8a258593 addi a1,a1,-1886 # 6258 <_GLOBAL__sub_I__ZSt3cin+0x268> - 49be: 8526 mv a0,s1 - 49c0: 286010ef jal 5c46 - flags = O_WRONLY | O_CREAT | O_TRUNC; - 49c4: 24100413 li s0,577 - else if (strcmp(mode, "w") == 0) - 49c8: ed39 bnez a0,4a26 - int64 fd = open(filename, flags); - 49ca: 85a2 mv a1,s0 - 49cc: 854a mv a0,s2 - 49ce: f42fc0ef jal 1110 - 49d2: 84aa mv s1,a0 - if (fd < 0) - 49d4: 06054c63 bltz a0,4a4c - FILE *f = (FILE *)malloc(sizeof(FILE)); - 49d8: 42000513 li a0,1056 - 49dc: 2f3000ef jal 54ce - 49e0: 892a mv s2,a0 - if (!f) - 49e2: c53d beqz a0,4a50 - memset(f, 0, sizeof(FILE)); - 49e4: 42000613 li a2,1056 - 49e8: 4581 li a1,0 - 49ea: 0ee010ef jal 5ad8 - if (fd == 1) - 49ee: 4785 li a5,1 - f->fd = (int)fd; - 49f0: 00992023 sw s1,0(s2) - f->flags = flags; - 49f4: 00892223 sw s0,4(s2) - if (fd == 1) - 49f8: 00f48e63 beq s1,a5,4a14 - else if (fd == 2) - 49fc: 4789 li a5,2 - 49fe: 00f48b63 beq s1,a5,4a14 - f->buf_mode = 0; - 4a02: 40092e23 sw zero,1052(s2) -} - 4a06: 60e2 ld ra,24(sp) - 4a08: 6442 ld s0,16(sp) - 4a0a: 64a2 ld s1,8(sp) - 4a0c: 854a mv a0,s2 - 4a0e: 6902 ld s2,0(sp) - 4a10: 6105 addi sp,sp,32 - 4a12: 8082 ret - 4a14: 60e2 ld ra,24(sp) - 4a16: 6442 ld s0,16(sp) - f->buf_mode = 2; - 4a18: 40992e23 sw s1,1052(s2) -} - 4a1c: 854a mv a0,s2 - 4a1e: 64a2 ld s1,8(sp) - 4a20: 6902 ld s2,0(sp) - 4a22: 6105 addi sp,sp,32 - 4a24: 8082 ret - else if (strcmp(mode, "a") == 0) - 4a26: 00002597 auipc a1,0x2 - 4a2a: 83a58593 addi a1,a1,-1990 # 6260 <_GLOBAL__sub_I__ZSt3cin+0x270> - 4a2e: 8526 mv a0,s1 - 4a30: 216010ef jal 5c46 - flags = O_WRONLY | O_CREAT | O_APPEND; - 4a34: 44100413 li s0,1089 - else if (strcmp(mode, "a") == 0) - 4a38: d949 beqz a0,49ca - else if (strcmp(mode, "r+") == 0) - 4a3a: 00002597 auipc a1,0x2 - 4a3e: 82e58593 addi a1,a1,-2002 # 6268 <_GLOBAL__sub_I__ZSt3cin+0x278> - 4a42: 8526 mv a0,s1 - 4a44: 202010ef jal 5c46 - flags = O_RDWR; - 4a48: 4409 li s0,2 - else if (strcmp(mode, "r+") == 0) - 4a4a: d141 beqz a0,49ca - return NULL; - 4a4c: 4901 li s2,0 - 4a4e: bf65 j 4a06 - close(fd); - 4a50: 8526 mv a0,s1 - 4a52: ea6fc0ef jal 10f8 - return NULL; - 4a56: 4901 li s2,0 - 4a58: b77d j 4a06 - -0000000000004a5a : - if (!stream) - 4a5a: cd29 beqz a0,4ab4 - if (stream->buf_write_pos > 0) - 4a5c: 41052603 lw a2,1040(a0) -{ - 4a60: 1141 addi sp,sp,-16 - 4a62: e022 sd s0,0(sp) - 4a64: e406 sd ra,8(sp) - 4a66: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 4a68: 02c04a63 bgtz a2,4a9c - if (stream != stdin && stream != stdout && stream != stderr) - 4a6c: 00004797 auipc a5,0x4 - 4a70: 20c78793 addi a5,a5,524 # 8c78 - 4a74: 6798 ld a4,8(a5) - 4a76: 00870e63 beq a4,s0,4a92 - 4a7a: 6398 ld a4,0(a5) - 4a7c: 00870b63 beq a4,s0,4a92 - 4a80: 6b9c ld a5,16(a5) - 4a82: 00878863 beq a5,s0,4a92 - close(stream->fd); - 4a86: 4008 lw a0,0(s0) - 4a88: e70fc0ef jal 10f8 - free(stream); - 4a8c: 8522 mv a0,s0 - 4a8e: 1cb000ef jal 5458 -} - 4a92: 60a2 ld ra,8(sp) - 4a94: 6402 ld s0,0(sp) - return 0; - 4a96: 4501 li a0,0 -} - 4a98: 0141 addi sp,sp,16 - 4a9a: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4a9c: 4108 lw a0,0(a0) - 4a9e: 01040593 addi a1,s0,16 - 4aa2: e4efc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4aa6: 41042783 lw a5,1040(s0) - 4aaa: 00f54763 blt a0,a5,4ab8 - stream->buf_write_pos = 0; - 4aae: 40042823 sw zero,1040(s0) - 4ab2: bf6d j 4a6c - return -1; - 4ab4: 557d li a0,-1 -} - 4ab6: 8082 ret - stream->error = 1; - 4ab8: 4785 li a5,1 - 4aba: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4abc: 40042823 sw zero,1040(s0) - return EOF; - 4ac0: b775 j 4a6c - -0000000000004ac2 : - if (!stream) - 4ac2: c121 beqz a0,4b02 - if (stream->buf_write_pos > 0) - 4ac4: 41052603 lw a2,1040(a0) -{ - 4ac8: 1141 addi sp,sp,-16 - 4aca: e022 sd s0,0(sp) - 4acc: e406 sd ra,8(sp) - 4ace: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 4ad0: 00c04763 bgtz a2,4ade - return 0; - 4ad4: 4501 li a0,0 -} - 4ad6: 60a2 ld ra,8(sp) - 4ad8: 6402 ld s0,0(sp) - 4ada: 0141 addi sp,sp,16 - 4adc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4ade: 4108 lw a0,0(a0) - 4ae0: 01040593 addi a1,s0,16 - 4ae4: e0cfc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4ae8: 41042783 lw a5,1040(s0) - 4aec: 00f54563 blt a0,a5,4af6 - stream->buf_write_pos = 0; - 4af0: 40042823 sw zero,1040(s0) - 4af4: b7c5 j 4ad4 - stream->error = 1; - 4af6: 4785 li a5,1 - 4af8: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4afa: 40042823 sw zero,1040(s0) - return EOF; - 4afe: 557d li a0,-1 - 4b00: bfd9 j 4ad6 - 4b02: 557d li a0,-1 -} - 4b04: 8082 ret - -0000000000004b06 : -{ - 4b06: 7159 addi sp,sp,-112 - 4b08: fc06 sd ra,56(sp) - 4b0a: e0b2 sd a2,64(sp) - 4b0c: e4b6 sd a3,72(sp) - 4b0e: e8ba sd a4,80(sp) - 4b10: ecbe sd a5,88(sp) - 4b12: f0c2 sd a6,96(sp) - 4b14: f4c6 sd a7,104(sp) - if (!stream) - 4b16: cd19 beqz a0,4b34 - va_start(ap, format); - 4b18: 832a mv t1,a0 - 4b1a: 0090 addi a2,sp,64 - _vprintf_core(&ctx, format, ap); - 4b1c: 0808 addi a0,sp,16 - va_start(ap, format); - 4b1e: e432 sd a2,8(sp) - ctx.buf = NULL; - 4b20: e802 sd zero,16(sp) - ctx.limit = 0; - 4b22: ec02 sd zero,24(sp) - ctx.written = 0; - 4b24: f002 sd zero,32(sp) - ctx.stream = stream; - 4b26: f41a sd t1,40(sp) - _vprintf_core(&ctx, format, ap); - 4b28: d34ff0ef jal 405c <_vprintf_core.constprop.0.isra.0> - return (int)ctx.written; - 4b2c: 5502 lw a0,32(sp) -} - 4b2e: 70e2 ld ra,56(sp) - 4b30: 6165 addi sp,sp,112 - 4b32: 8082 ret - return -1; - 4b34: 557d li a0,-1 - 4b36: bfe5 j 4b2e - -0000000000004b38 : -{ - 4b38: 7159 addi sp,sp,-112 - 4b3a: fc06 sd ra,56(sp) - 4b3c: e0b2 sd a2,64(sp) - 4b3e: e4b6 sd a3,72(sp) - 4b40: e8ba sd a4,80(sp) - 4b42: ecbe sd a5,88(sp) - 4b44: f0c2 sd a6,96(sp) - 4b46: f4c6 sd a7,104(sp) - if (!stream) - 4b48: cd19 beqz a0,4b66 - ctx.fd = stream->fd; - 4b4a: 411c lw a5,0(a0) - va_start(ap, format); - 4b4c: 0090 addi a2,sp,64 - int ret = _vscanf_core(&ctx, format, ap); - 4b4e: 0808 addi a0,sp,16 - ctx.fd = stream->fd; - 4b50: cc3e sw a5,24(sp) - ctx.ungotten = -1; - 4b52: 57fd li a5,-1 - va_start(ap, format); - 4b54: e432 sd a2,8(sp) - ctx.buf = NULL; - 4b56: e802 sd zero,16(sp) - ctx.pos = 0; - 4b58: f002 sd zero,32(sp) - ctx.ungotten = -1; - 4b5a: d43e sw a5,40(sp) - int ret = _vscanf_core(&ctx, format, ap); - 4b5c: e1dfc0ef jal 1978 <_vscanf_core.constprop.0> -} - 4b60: 70e2 ld ra,56(sp) - 4b62: 6165 addi sp,sp,112 - 4b64: 8082 ret - return -1; - 4b66: 557d li a0,-1 - 4b68: bfe5 j 4b60 - -0000000000004b6a : - if (!stream) - 4b6a: c1e1 beqz a1,4c2a -{ - 4b6c: 7179 addi sp,sp,-48 - 4b6e: e84a sd s2,16(sp) - if (stream->buf_mode == 2) - 4b70: 41c5a903 lw s2,1052(a1) -{ - 4b74: f022 sd s0,32(sp) - 4b76: ec26 sd s1,24(sp) - 4b78: f406 sd ra,40(sp) - if (stream->buf_mode == 2) - 4b7a: 4789 li a5,2 - 4b7c: 842e mv s0,a1 - 4b7e: 84aa mv s1,a0 - char ch = (char)c; - 4b80: 0ff57713 zext.b a4,a0 - if (stream->buf_mode == 2) - 4b84: 02f90963 beq s2,a5,4bb6 - stream->buffer[stream->buf_write_pos++] = (char)c; - 4b88: 4105a783 lw a5,1040(a1) - if (stream->buf_write_pos >= BUFSIZ) - 4b8c: 3ff00693 li a3,1023 - stream->buffer[stream->buf_write_pos++] = (char)c; - 4b90: 0017861b addiw a2,a5,1 - 4b94: 40c5a823 sw a2,1040(a1) - 4b98: 97ae add a5,a5,a1 - 4b9a: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 4b9e: 06c6c463 blt a3,a2,4c06 - else if (stream->buf_mode == 1 && c == '\n') - 4ba2: 4785 li a5,1 - 4ba4: 02f90e63 beq s2,a5,4be0 - return c; - 4ba8: 8526 mv a0,s1 -} - 4baa: 70a2 ld ra,40(sp) - 4bac: 7402 ld s0,32(sp) - 4bae: 64e2 ld s1,24(sp) - 4bb0: 6942 ld s2,16(sp) - 4bb2: 6145 addi sp,sp,48 - 4bb4: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 4bb6: 4188 lw a0,0(a1) - 4bb8: 4605 li a2,1 - 4bba: 00f10593 addi a1,sp,15 - char ch = (char)c; - 4bbe: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 4bc2: d2efc0ef jal 10f0 - 4bc6: 872a mv a4,a0 - 4bc8: 4785 li a5,1 - return c; - 4bca: 8526 mv a0,s1 - if (write(stream->fd, &ch, 1) != 1) - 4bcc: fcf70fe3 beq a4,a5,4baa -} - 4bd0: 70a2 ld ra,40(sp) - stream->error = 1; - 4bd2: c41c sw a5,8(s0) -} - 4bd4: 7402 ld s0,32(sp) - 4bd6: 64e2 ld s1,24(sp) - 4bd8: 6942 ld s2,16(sp) - return EOF; - 4bda: 557d li a0,-1 -} - 4bdc: 6145 addi sp,sp,48 - 4bde: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 4be0: 47a9 li a5,10 - 4be2: fcf513e3 bne a0,a5,4ba8 - if (stream->buf_write_pos > 0) - 4be6: fcc051e3 blez a2,4ba8 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4bea: 4188 lw a0,0(a1) - 4bec: 05c1 addi a1,a1,16 - 4bee: d02fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4bf2: 41042783 lw a5,1040(s0) - 4bf6: 02f55063 bge a0,a5,4c16 - stream->error = 1; - 4bfa: 01242423 sw s2,8(s0) - stream->buf_write_pos = 0; - 4bfe: 40042823 sw zero,1040(s0) - return c; - 4c02: 8526 mv a0,s1 - 4c04: b75d j 4baa - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4c06: 4188 lw a0,0(a1) - 4c08: 05c1 addi a1,a1,16 - 4c0a: ce6fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4c0e: 41042783 lw a5,1040(s0) - 4c12: 00f54663 blt a0,a5,4c1e - stream->buf_write_pos = 0; - 4c16: 40042823 sw zero,1040(s0) - return c; - 4c1a: 8526 mv a0,s1 - 4c1c: b779 j 4baa - stream->error = 1; - 4c1e: 4785 li a5,1 - 4c20: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4c22: 40042823 sw zero,1040(s0) - return c; - 4c26: 8526 mv a0,s1 - 4c28: b749 j 4baa - return EOF; - 4c2a: 557d li a0,-1 -} - 4c2c: 8082 ret - -0000000000004c2e : - if (!stream) - 4c2e: c1ed beqz a1,4d10 -{ - 4c30: 711d addi sp,sp,-96 - 4c32: e4a6 sd s1,72(sp) - 4c34: ec86 sd ra,88(sp) - while (*s) - 4c36: 00054703 lbu a4,0(a0) - 4c3a: 84aa mv s1,a0 - 4c3c: cf25 beqz a4,4cb4 - 4c3e: e8a2 sd s0,80(sp) - 4c40: e0ca sd s2,64(sp) - 4c42: fc4e sd s3,56(sp) - 4c44: f852 sd s4,48(sp) - 4c46: f456 sd s5,40(sp) - 4c48: f05a sd s6,32(sp) - 4c4a: ec5e sd s7,24(sp) - 4c4c: 842e mv s0,a1 - if (stream->buf_mode == 2) - 4c4e: 4909 li s2,2 - if (stream->buf_write_pos >= BUFSIZ) - 4c50: 3ff00b13 li s6,1023 - else if (stream->buf_mode == 1 && c == '\n') - 4c54: 4985 li s3,1 - 4c56: 4a29 li s4,10 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4c58: 01058a93 addi s5,a1,16 - if (write(stream->fd, &ch, 1) != 1) - 4c5c: 00f10b93 addi s7,sp,15 - 4c60: a031 j 4c6c - else if (stream->buf_mode == 1 && c == '\n') - 4c62: 09368563 beq a3,s3,4cec - while (*s) - 4c66: 0004c703 lbu a4,0(s1) - 4c6a: cf15 beqz a4,4ca6 - if (stream->buf_mode == 2) - 4c6c: 41c42683 lw a3,1052(s0) - if (fputc(*s++, stream) == EOF) - 4c70: 0485 addi s1,s1,1 - if (stream->buf_mode == 2) - 4c72: 05268663 beq a3,s2,4cbe - stream->buffer[stream->buf_write_pos++] = (char)c; - 4c76: 41042783 lw a5,1040(s0) - 4c7a: 0017861b addiw a2,a5,1 - 4c7e: 40c42823 sw a2,1040(s0) - 4c82: 97a2 add a5,a5,s0 - 4c84: 00e78823 sb a4,16(a5) - if (stream->buf_write_pos >= BUFSIZ) - 4c88: fccb5de3 bge s6,a2,4c62 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4c8c: 4008 lw a0,0(s0) - 4c8e: 85d6 mv a1,s5 - 4c90: c60fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4c94: 41042783 lw a5,1040(s0) - 4c98: 06f54763 blt a0,a5,4d06 - stream->buf_write_pos = 0; - 4c9c: 40042823 sw zero,1040(s0) - while (*s) - 4ca0: 0004c703 lbu a4,0(s1) - 4ca4: f761 bnez a4,4c6c - 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: 60e6 ld ra,88(sp) - 4cb6: 64a6 ld s1,72(sp) - return 0; - 4cb8: 4501 li a0,0 -} - 4cba: 6125 addi sp,sp,96 - 4cbc: 8082 ret - if (write(stream->fd, &ch, 1) != 1) - 4cbe: 4008 lw a0,0(s0) - 4cc0: 4605 li a2,1 - 4cc2: 85de mv a1,s7 - char ch = (char)c; - 4cc4: 00e107a3 sb a4,15(sp) - if (write(stream->fd, &ch, 1) != 1) - 4cc8: c28fc0ef jal 10f0 - 4ccc: f9350de3 beq a0,s3,4c66 - stream->error = 1; - 4cd0: 01342423 sw s3,8(s0) -} - 4cd4: 60e6 ld ra,88(sp) - 4cd6: 6446 ld s0,80(sp) - 4cd8: 6906 ld s2,64(sp) - 4cda: 79e2 ld s3,56(sp) - 4cdc: 7a42 ld s4,48(sp) - 4cde: 7aa2 ld s5,40(sp) - 4ce0: 7b02 ld s6,32(sp) - 4ce2: 6be2 ld s7,24(sp) - 4ce4: 64a6 ld s1,72(sp) - return -1; - 4ce6: 557d li a0,-1 -} - 4ce8: 6125 addi sp,sp,96 - 4cea: 8082 ret - else if (stream->buf_mode == 1 && c == '\n') - 4cec: f7471de3 bne a4,s4,4c66 - if (stream->buf_write_pos > 0) - 4cf0: f6c05be3 blez a2,4c66 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4cf4: 4008 lw a0,0(s0) - 4cf6: 01040593 addi a1,s0,16 - 4cfa: bf6fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4cfe: 41042783 lw a5,1040(s0) - 4d02: f8f55de3 bge a0,a5,4c9c - stream->error = 1; - 4d06: 4785 li a5,1 - 4d08: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4d0a: 40042823 sw zero,1040(s0) - return EOF; - 4d0e: bfa1 j 4c66 - return -1; - 4d10: 557d li a0,-1 -} - 4d12: 8082 ret - -0000000000004d14 : - if (!stream) - 4d14: c949 beqz a0,4da6 - if (stream->buf_write_pos > 0) - 4d16: 41052603 lw a2,1040(a0) -{ - 4d1a: 1141 addi sp,sp,-16 - 4d1c: e022 sd s0,0(sp) - 4d1e: e406 sd ra,8(sp) - 4d20: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 4d22: 04c04863 bgtz a2,4d72 - if (stream->buf_read_pos < stream->buf_read_cnt) - 4d26: 41442783 lw a5,1044(s0) - 4d2a: 41842703 lw a4,1048(s0) - 4d2e: 00e7dd63 bge a5,a4,4d48 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d32: 0017871b addiw a4,a5,1 - 4d36: 40e42a23 sw a4,1044(s0) - 4d3a: 943e add s0,s0,a5 - 4d3c: 01044503 lbu a0,16(s0) -} - 4d40: 60a2 ld ra,8(sp) - 4d42: 6402 ld s0,0(sp) - 4d44: 0141 addi sp,sp,16 - 4d46: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4d48: 4008 lw a0,0(s0) - 4d4a: 40000613 li a2,1024 - 4d4e: 01040593 addi a1,s0,16 - 4d52: b96fc0ef jal 10e8 - 4d56: 87aa mv a5,a0 - if (ret <= 0) - 4d58: 02a05e63 blez a0,4d94 - stream->buf_read_cnt = (int)ret; - 4d5c: 40f42c23 sw a5,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d60: 4785 li a5,1 - 4d62: 01044503 lbu a0,16(s0) -} - 4d66: 60a2 ld ra,8(sp) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d68: 40f42a23 sw a5,1044(s0) -} - 4d6c: 6402 ld s0,0(sp) - 4d6e: 0141 addi sp,sp,16 - 4d70: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4d72: 4108 lw a0,0(a0) - 4d74: 01040593 addi a1,s0,16 - 4d78: b78fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4d7c: 41042783 lw a5,1040(s0) - 4d80: 00f54563 blt a0,a5,4d8a - stream->buf_write_pos = 0; - 4d84: 40042823 sw zero,1040(s0) - 4d88: bf79 j 4d26 - stream->error = 1; - 4d8a: 4785 li a5,1 - 4d8c: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4d8e: 40042823 sw zero,1040(s0) - return EOF; - 4d92: bf51 j 4d26 - if (ret == 0) - 4d94: e509 bnez a0,4d9e - stream->eof = 1; - 4d96: 4785 li a5,1 - 4d98: c45c sw a5,12(s0) - return EOF; - 4d9a: 557d li a0,-1 - 4d9c: b755 j 4d40 - stream->error = 1; - 4d9e: 4785 li a5,1 - 4da0: c41c sw a5,8(s0) - return EOF; - 4da2: 557d li a0,-1 - 4da4: bf71 j 4d40 - 4da6: 557d li a0,-1 -} - 4da8: 8082 ret - -0000000000004daa : - if (!stream || n <= 0) - 4daa: ce5d beqz a2,4e68 - 4dac: 0ab05e63 blez a1,4e68 -{ - 4db0: 715d addi sp,sp,-80 - 4db2: e0a2 sd s0,64(sp) - 4db4: fc26 sd s1,56(sp) - 4db6: f84a sd s2,48(sp) - 4db8: f44e sd s3,40(sp) - 4dba: f052 sd s4,32(sp) - 4dbc: ec56 sd s5,24(sp) - 4dbe: e85a sd s6,16(sp) - 4dc0: e45e sd s7,8(sp) - 4dc2: e486 sd ra,72(sp) - 4dc4: 8432 mv s0,a2 - 4dc6: 8aaa mv s5,a0 - 4dc8: 892a mv s2,a0 - 4dca: fff58b9b addiw s7,a1,-1 - int i = 0, c; - 4dce: 4481 li s1,0 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4dd0: 01060993 addi s3,a2,16 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4dd4: 4b05 li s6,1 - if (c == '\n') - 4dd6: 4a29 li s4,10 - while (i < n - 1) - 4dd8: 05748163 beq s1,s7,4e1a - if (stream->buf_write_pos > 0) - 4ddc: 41042603 lw a2,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4de0: 85ce mv a1,s3 - if (stream->buf_write_pos > 0) - 4de2: 06c04963 bgtz a2,4e54 - if (stream->buf_read_pos < stream->buf_read_cnt) - 4de6: 41442783 lw a5,1044(s0) - 4dea: 41842703 lw a4,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4dee: 40000613 li a2,1024 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4df2: 0017851b addiw a0,a5,1 - 4df6: 00f406b3 add a3,s0,a5 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4dfa: 85ce mv a1,s3 - if (stream->buf_read_pos < stream->buf_read_cnt) - 4dfc: 02e7de63 bge a5,a4,4e38 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4e00: 40a42a23 sw a0,1044(s0) - 4e04: 0106c783 lbu a5,16(a3) - 4e08: 0007871b sext.w a4,a5 - str[i++] = (char)c; - 4e0c: 00f90023 sb a5,0(s2) - 4e10: 2485 addiw s1,s1,1 - if (c == '\n') - 4e12: 0905 addi s2,s2,1 - 4e14: fd4712e3 bne a4,s4,4dd8 - str[i++] = (char)c; - 4e18: 8ba6 mv s7,s1 - str[i] = '\0'; - 4e1a: 9bd6 add s7,s7,s5 - 4e1c: 000b8023 sb zero,0(s7) - return str; - 4e20: 8556 mv a0,s5 -} - 4e22: 60a6 ld ra,72(sp) - 4e24: 6406 ld s0,64(sp) - 4e26: 74e2 ld s1,56(sp) - 4e28: 7942 ld s2,48(sp) - 4e2a: 79a2 ld s3,40(sp) - 4e2c: 7a02 ld s4,32(sp) - 4e2e: 6ae2 ld s5,24(sp) - 4e30: 6b42 ld s6,16(sp) - 4e32: 6ba2 ld s7,8(sp) - 4e34: 6161 addi sp,sp,80 - 4e36: 8082 ret - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4e38: 4008 lw a0,0(s0) - 4e3a: aaefc0ef jal 10e8 - if (ret <= 0) - 4e3e: 02a05c63 blez a0,4e76 - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4e42: 01044783 lbu a5,16(s0) - stream->buf_read_cnt = (int)ret; - 4e46: 40a42c23 sw a0,1048(s0) - return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4e4a: 41642a23 sw s6,1044(s0) - 4e4e: 0007871b sext.w a4,a5 - if (c == -1) - 4e52: bf6d j 4e0c - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4e54: 4008 lw a0,0(s0) - 4e56: a9afc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4e5a: 41042783 lw a5,1040(s0) - 4e5e: 00f54763 blt a0,a5,4e6c - stream->buf_write_pos = 0; - 4e62: 40042823 sw zero,1040(s0) - 4e66: b741 j 4de6 - return NULL; - 4e68: 4501 li a0,0 -} - 4e6a: 8082 ret - stream->error = 1; - 4e6c: 4785 li a5,1 - 4e6e: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4e70: 40042823 sw zero,1040(s0) - return EOF; - 4e74: bf8d j 4de6 - stream->eof = 1; - 4e76: 4785 li a5,1 - if (ret == 0) - 4e78: e509 bnez a0,4e82 - stream->eof = 1; - 4e7a: c45c sw a5,12(s0) - if (i == 0) - 4e7c: fcd1 bnez s1,4e18 - return NULL; - 4e7e: 4501 li a0,0 - 4e80: b74d j 4e22 - stream->error = 1; - 4e82: c41c sw a5,8(s0) - if (c == -1) - 4e84: bfe5 j 4e7c - -0000000000004e86 : -{ - 4e86: 715d addi sp,sp,-80 - 4e88: e486 sd ra,72(sp) - 4e8a: f44e sd s3,40(sp) - if (!stream || size == 0 || nmemb == 0) - 4e8c: 0e068963 beqz a3,4f7e - 4e90: ec56 sd s5,24(sp) - return 0; - 4e92: 4981 li s3,0 - 4e94: 8aae mv s5,a1 - if (!stream || size == 0 || nmemb == 0) - 4e96: c9bd beqz a1,4f0c - 4e98: ca35 beqz a2,4f0c - if (stream->buf_write_pos > 0) - 4e9a: 4106a783 lw a5,1040(a3) - 4e9e: e0a2 sd s0,64(sp) - 4ea0: f052 sd s4,32(sp) - uint64 total_bytes = size * nmemb; - 4ea2: 02c589b3 mul s3,a1,a2 - 4ea6: 8436 mv s0,a3 - 4ea8: 8a2a mv s4,a0 - if (stream->buf_write_pos > 0) - 4eaa: 0af04d63 bgtz a5,4f64 - while (bytes_read < total_bytes) - 4eae: 04098d63 beqz s3,4f08 - 4eb2: fc26 sd s1,56(sp) - 4eb4: e85a sd s6,16(sp) - 4eb6: e45e sd s7,8(sp) - 4eb8: f84a sd s2,48(sp) - 4eba: 4481 li s1,0 - if (remaining >= BUFSIZ) - 4ebc: 3ff00b13 li s6,1023 - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4ec0: 01040b93 addi s7,s0,16 - if (stream->buf_read_pos < stream->buf_read_cnt) - 4ec4: 41442703 lw a4,1044(s0) - 4ec8: 41842783 lw a5,1048(s0) - uint64 remaining = total_bytes - bytes_read; - 4ecc: 40998633 sub a2,s3,s1 - if (stream->buf_read_pos < stream->buf_read_cnt) - 4ed0: 06f74463 blt a4,a5,4f38 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 4ed4: 4008 lw a0,0(s0) - 4ed6: 009a05b3 add a1,s4,s1 - if (remaining >= BUFSIZ) - 4eda: 02cb7f63 bgeu s6,a2,4f18 - int64 ret = read(stream->fd, dst + bytes_read, remaining); - 4ede: a0afc0ef jal 10e8 - if (ret <= 0) - 4ee2: 0aa05463 blez a0,4f8a - bytes_read += ret; - 4ee6: 94aa add s1,s1,a0 - while (bytes_read < total_bytes) - 4ee8: fd34eee3 bltu s1,s3,4ec4 - return bytes_read / size; - 4eec: 0354d9b3 divu s3,s1,s5 - 4ef0: 6406 ld s0,64(sp) -} - 4ef2: 60a6 ld ra,72(sp) - return bytes_read / size; - 4ef4: 74e2 ld s1,56(sp) - 4ef6: 7942 ld s2,48(sp) - 4ef8: 7a02 ld s4,32(sp) - 4efa: 6ae2 ld s5,24(sp) - 4efc: 6b42 ld s6,16(sp) - 4efe: 6ba2 ld s7,8(sp) -} - 4f00: 854e mv a0,s3 - 4f02: 79a2 ld s3,40(sp) - 4f04: 6161 addi sp,sp,80 - 4f06: 8082 ret - 4f08: 6406 ld s0,64(sp) - 4f0a: 7a02 ld s4,32(sp) - 4f0c: 60a6 ld ra,72(sp) - 4f0e: 6ae2 ld s5,24(sp) - 4f10: 854e mv a0,s3 - 4f12: 79a2 ld s3,40(sp) - 4f14: 6161 addi sp,sp,80 - 4f16: 8082 ret - stream->buf_read_pos = 0; - 4f18: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 4f1c: 40042c23 sw zero,1048(s0) - int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4f20: 40000613 li a2,1024 - 4f24: 85de mv a1,s7 - 4f26: 9c2fc0ef jal 10e8 - if (ret <= 0) - 4f2a: 06a05063 blez a0,4f8a - stream->buf_read_cnt = (int)ret; - 4f2e: 40a42c23 sw a0,1048(s0) - while (bytes_read < total_bytes) - 4f32: f934e9e3 bltu s1,s3,4ec4 - 4f36: bf5d j 4eec - uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 4f38: 40e7893b subw s2,a5,a4 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4f3c: 00eb85b3 add a1,s7,a4 - 4f40: 009a0533 add a0,s4,s1 - uint64 to_copy = (available < remaining) ? available : remaining; - 4f44: 01267363 bgeu a2,s2,4f4a - 4f48: 8932 mv s2,a2 - memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4f4a: 864a mv a2,s2 - 4f4c: 3e1000ef jal 5b2c - stream->buf_read_pos += to_copy; - 4f50: 41442783 lw a5,1044(s0) - bytes_read += to_copy; - 4f54: 94ca add s1,s1,s2 - stream->buf_read_pos += to_copy; - 4f56: 012787bb addw a5,a5,s2 - 4f5a: 40f42a23 sw a5,1044(s0) - while (bytes_read < total_bytes) - 4f5e: f734e3e3 bltu s1,s3,4ec4 - 4f62: b769 j 4eec - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4f64: 4288 lw a0,0(a3) - 4f66: 863e mv a2,a5 - 4f68: 01068593 addi a1,a3,16 - 4f6c: 984fc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 4f70: 41042783 lw a5,1040(s0) - 4f74: 02f54163 blt a0,a5,4f96 - stream->buf_write_pos = 0; - 4f78: 40042823 sw zero,1040(s0) - 4f7c: bf0d j 4eae -} - 4f7e: 60a6 ld ra,72(sp) - return 0; - 4f80: 4981 li s3,0 -} - 4f82: 854e mv a0,s3 - 4f84: 79a2 ld s3,40(sp) - 4f86: 6161 addi sp,sp,80 - 4f88: 8082 ret - stream->eof = 1; - 4f8a: 4785 li a5,1 - if (ret == 0) - 4f8c: e119 bnez a0,4f92 - stream->eof = 1; - 4f8e: c45c sw a5,12(s0) - 4f90: bfb1 j 4eec - stream->error = 1; - 4f92: c41c sw a5,8(s0) - return bytes_read / size; - 4f94: bfa1 j 4eec - stream->error = 1; - 4f96: 4785 li a5,1 - 4f98: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 4f9a: 40042823 sw zero,1040(s0) - return EOF; - 4f9e: bf01 j 4eae - -0000000000004fa0 : -{ - 4fa0: 711d addi sp,sp,-96 - 4fa2: ec86 sd ra,88(sp) - 4fa4: e0ca sd s2,64(sp) - if (!stream || !ptr || size == 0 || nmemb == 0) - 4fa6: 10068063 beqz a3,50a6 - 4faa: f456 sd s5,40(sp) - 4fac: 8aaa mv s5,a0 - 4fae: 10050263 beqz a0,50b2 - 4fb2: f05a sd s6,32(sp) - return 0; - 4fb4: 4901 li s2,0 - 4fb6: 8b2e mv s6,a1 - if (!stream || !ptr || size == 0 || nmemb == 0) - 4fb8: c1d9 beqz a1,503e - 4fba: c251 beqz a2,503e - if (stream->buf_mode == 2) - 4fbc: 41c6a703 lw a4,1052(a3) - 4fc0: e8a2 sd s0,80(sp) - 4fc2: 4789 li a5,2 - uint64 total_bytes = size * nmemb; - 4fc4: 02c58933 mul s2,a1,a2 - if (stream->buf_mode == 2) - 4fc8: 8436 mv s0,a3 - 4fca: 0ef70b63 beq a4,a5,50c0 - 4fce: fc4e sd s3,56(sp) - 4fd0: ec5e sd s7,24(sp) - 4fd2: e862 sd s8,16(sp) - uint64 bytes_written = 0; - 4fd4: 4981 li s3,0 - 4fd6: 01068b93 addi s7,a3,16 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4fda: 40000c13 li s8,1024 - while (bytes_written < total_bytes) - 4fde: 12090263 beqz s2,5102 - 4fe2: e4a6 sd s1,72(sp) - 4fe4: f852 sd s4,48(sp) - 4fe6: e466 sd s9,8(sp) - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4fe8: 41042783 lw a5,1040(s0) - uint64 remaining = total_bytes - bytes_written; - 4fec: 41390cb3 sub s9,s2,s3 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 4ff0: 013a85b3 add a1,s5,s3 - uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4ff4: 40fc0a3b subw s4,s8,a5 - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 4ff8: 00fb8533 add a0,s7,a5 - 4ffc: 8652 mv a2,s4 - if (remaining <= space_left) - 4ffe: 059a6763 bltu s4,s9,504c - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 5002: 8666 mv a2,s9 - 5004: 329000ef jal 5b2c - stream->buf_write_pos += remaining; - 5008: 41042783 lw a5,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 500c: 40000713 li a4,1024 - stream->buf_write_pos += remaining; - 5010: 019786bb addw a3,a5,s9 - 5014: 40d42823 sw a3,1040(s0) - if (stream->buf_write_pos == BUFSIZ) - 5018: 06e68a63 beq a3,a4,508c - return bytes_written / size; - 501c: 03695933 divu s2,s2,s6 - 5020: 6446 ld s0,80(sp) - 5022: 64a6 ld s1,72(sp) - 5024: 79e2 ld s3,56(sp) - 5026: 7a42 ld s4,48(sp) - 5028: 7aa2 ld s5,40(sp) - 502a: 7b02 ld s6,32(sp) - 502c: 6be2 ld s7,24(sp) - 502e: 6c42 ld s8,16(sp) - 5030: 6ca2 ld s9,8(sp) -} - 5032: 60e6 ld ra,88(sp) - 5034: 854a mv a0,s2 - 5036: 6906 ld s2,64(sp) - 5038: 6125 addi sp,sp,96 - 503a: 8082 ret - 503c: 6446 ld s0,80(sp) - 503e: 60e6 ld ra,88(sp) - 5040: 7aa2 ld s5,40(sp) - 5042: 7b02 ld s6,32(sp) - 5044: 854a mv a0,s2 - 5046: 6906 ld s2,64(sp) - 5048: 6125 addi sp,sp,96 - 504a: 8082 ret - memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 504c: 2e1000ef jal 5b2c - stream->buf_write_pos += space_left; - 5050: 41042783 lw a5,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5054: 85de mv a1,s7 - bytes_written += space_left; - 5056: 99d2 add s3,s3,s4 - stream->buf_write_pos += space_left; - 5058: 00fa04bb addw s1,s4,a5 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 505c: 02049613 slli a2,s1,0x20 - stream->buf_write_pos += space_left; - 5060: 40942823 sw s1,1040(s0) - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5064: 9201 srli a2,a2,0x20 - if (stream->buf_write_pos > 0) - 5066: 00904763 bgtz s1,5074 - while (bytes_written < total_bytes) - 506a: f729efe3 bltu s3,s2,4fe8 - return bytes_written / size; - 506e: 0369d933 divu s2,s3,s6 - 5072: b77d j 5020 - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5074: 4008 lw a0,0(s0) - 5076: 87afc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 507a: 41042783 lw a5,1040(s0) - 507e: 08f54963 blt a0,a5,5110 - stream->buf_write_pos = 0; - 5082: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 5086: f729e1e3 bltu s3,s2,4fe8 - 508a: b7d5 j 506e - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 508c: 4008 lw a0,0(s0) - 508e: 40000613 li a2,1024 - 5092: 85de mv a1,s7 - 5094: 85cfc0ef jal 10f0 - if (ret < stream->buf_write_pos) - 5098: 41042783 lw a5,1040(s0) - 509c: 08f54163 blt a0,a5,511e - stream->buf_write_pos = 0; - 50a0: 40042823 sw zero,1040(s0) - 50a4: bfa5 j 501c -} - 50a6: 60e6 ld ra,88(sp) - return 0; - 50a8: 4901 li s2,0 -} - 50aa: 854a mv a0,s2 - 50ac: 6906 ld s2,64(sp) - 50ae: 6125 addi sp,sp,96 - 50b0: 8082 ret - 50b2: 60e6 ld ra,88(sp) - return 0; - 50b4: 4901 li s2,0 - 50b6: 7aa2 ld s5,40(sp) -} - 50b8: 854a mv a0,s2 - 50ba: 6906 ld s2,64(sp) - 50bc: 6125 addi sp,sp,96 - 50be: 8082 ret - while (bytes_written < total_bytes) - 50c0: f6090ee3 beqz s2,503c - 50c4: e4a6 sd s1,72(sp) - uint64 bytes_written = 0; - 50c6: 4481 li s1,0 - 50c8: a021 j 50d0 - bytes_written += ret; - 50ca: 94aa add s1,s1,a0 - while (bytes_written < total_bytes) - 50cc: 0324f463 bgeu s1,s2,50f4 - int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 50d0: 4008 lw a0,0(s0) - 50d2: 40990633 sub a2,s2,s1 - 50d6: 009a85b3 add a1,s5,s1 - 50da: 816fc0ef jal 10f0 - if (ret <= 0) - 50de: fea046e3 bgtz a0,50ca - stream->error = 1; - 50e2: 4785 li a5,1 - return bytes_written / size; - 50e4: 0364d933 divu s2,s1,s6 - stream->error = 1; - 50e8: c41c sw a5,8(s0) - break; - 50ea: 64a6 ld s1,72(sp) - 50ec: 6446 ld s0,80(sp) - 50ee: 7aa2 ld s5,40(sp) - 50f0: 7b02 ld s6,32(sp) - 50f2: b781 j 5032 - return bytes_written / size; - 50f4: 0364d933 divu s2,s1,s6 - 50f8: 6446 ld s0,80(sp) - 50fa: 64a6 ld s1,72(sp) - 50fc: 7aa2 ld s5,40(sp) - 50fe: 7b02 ld s6,32(sp) - 5100: bf0d j 5032 - 5102: 6446 ld s0,80(sp) - 5104: 79e2 ld s3,56(sp) - 5106: 7aa2 ld s5,40(sp) - 5108: 7b02 ld s6,32(sp) - 510a: 6be2 ld s7,24(sp) - 510c: 6c42 ld s8,16(sp) - 510e: b715 j 5032 - stream->error = 1; - 5110: 4785 li a5,1 - 5112: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 5114: 40042823 sw zero,1040(s0) - while (bytes_written < total_bytes) - 5118: ed29e8e3 bltu s3,s2,4fe8 - 511c: bf89 j 506e - stream->error = 1; - 511e: 4785 li a5,1 - 5120: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 5122: 40042823 sw zero,1040(s0) - return EOF; - 5126: bddd j 501c - -0000000000005128 : - if (!stream) - 5128: c925 beqz a0,5198 -{ - 512a: 1101 addi sp,sp,-32 - 512c: e04a sd s2,0(sp) - 512e: 8932 mv s2,a2 - if (stream->buf_write_pos > 0) - 5130: 41052603 lw a2,1040(a0) -{ - 5134: e822 sd s0,16(sp) - 5136: e426 sd s1,8(sp) - 5138: ec06 sd ra,24(sp) - 513a: 842a mv s0,a0 - 513c: 84ae mv s1,a1 - if (stream->buf_write_pos > 0) - 513e: 02c04863 bgtz a2,516e - if (lseek(stream->fd, offset, whence) < 0) - 5142: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 5144: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 5148: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 514c: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 5150: 864a mv a2,s2 - 5152: 0004859b sext.w a1,s1 - 5156: 82afc0ef jal 1180 - 515a: 87aa mv a5,a0 - return 0; - 515c: 4501 li a0,0 - if (lseek(stream->fd, offset, whence) < 0) - 515e: 0207c463 bltz a5,5186 -} - 5162: 60e2 ld ra,24(sp) - 5164: 6442 ld s0,16(sp) - 5166: 64a2 ld s1,8(sp) - 5168: 6902 ld s2,0(sp) - 516a: 6105 addi sp,sp,32 - 516c: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 516e: 4108 lw a0,0(a0) - 5170: 01040593 addi a1,s0,16 - 5174: f7dfb0ef jal 10f0 - if (ret < stream->buf_write_pos) - 5178: 41042783 lw a5,1040(s0) - 517c: 00f54963 blt a0,a5,518e - stream->buf_write_pos = 0; - 5180: 40042823 sw zero,1040(s0) - 5184: bf7d j 5142 - stream->error = 1; - 5186: 4785 li a5,1 - 5188: c41c sw a5,8(s0) - return -1; - 518a: 557d li a0,-1 - 518c: bfd9 j 5162 - stream->error = 1; - 518e: 4785 li a5,1 - 5190: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 5192: 40042823 sw zero,1040(s0) - return EOF; - 5196: b775 j 5142 - return -1; - 5198: 557d li a0,-1 -} - 519a: 8082 ret - -000000000000519c : - if (!stream) - 519c: c505 beqz a0,51c4 -{ - 519e: 1141 addi sp,sp,-16 - 51a0: e022 sd s0,0(sp) - 51a2: 842a mv s0,a0 - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 51a4: 4108 lw a0,0(a0) - 51a6: 4605 li a2,1 - 51a8: 4581 li a1,0 -{ - 51aa: e406 sd ra,8(sp) - int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 51ac: fd5fb0ef jal 1180 - if (ret < 0) - 51b0: 00054663 bltz a0,51bc -} - 51b4: 60a2 ld ra,8(sp) - 51b6: 6402 ld s0,0(sp) - 51b8: 0141 addi sp,sp,16 - 51ba: 8082 ret - stream->error = 1; - 51bc: 4785 li a5,1 - 51be: c41c sw a5,8(s0) - return -1L; - 51c0: 557d li a0,-1 - 51c2: bfcd j 51b4 - 51c4: 557d li a0,-1 -} - 51c6: 8082 ret - -00000000000051c8 : - if (stream) - 51c8: c915 beqz a0,51fc - if (stream->buf_write_pos > 0) - 51ca: 41052603 lw a2,1040(a0) -{ - 51ce: 1141 addi sp,sp,-16 - 51d0: e022 sd s0,0(sp) - 51d2: e406 sd ra,8(sp) - 51d4: 842a mv s0,a0 - if (stream->buf_write_pos > 0) - 51d6: 02c04463 bgtz a2,51fe - if (lseek(stream->fd, offset, whence) < 0) - 51da: 4008 lw a0,0(s0) - stream->buf_read_pos = 0; - 51dc: 40042a23 sw zero,1044(s0) - stream->buf_read_cnt = 0; - 51e0: 40042c23 sw zero,1048(s0) - stream->eof = 0; - 51e4: 00042623 sw zero,12(s0) - if (lseek(stream->fd, offset, whence) < 0) - 51e8: 4601 li a2,0 - 51ea: 4581 li a1,0 - 51ec: f95fb0ef jal 1180 -} - 51f0: 60a2 ld ra,8(sp) - stream->error = 0; - 51f2: 00042423 sw zero,8(s0) -} - 51f6: 6402 ld s0,0(sp) - 51f8: 0141 addi sp,sp,16 - 51fa: 8082 ret - 51fc: 8082 ret - int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 51fe: 4108 lw a0,0(a0) - 5200: 01040593 addi a1,s0,16 - 5204: eedfb0ef jal 10f0 - if (ret < stream->buf_write_pos) - 5208: 41042783 lw a5,1040(s0) - 520c: 00f54563 blt a0,a5,5216 - stream->buf_write_pos = 0; - 5210: 40042823 sw zero,1040(s0) - 5214: b7d9 j 51da - stream->error = 1; - 5216: 4785 li a5,1 - 5218: c41c sw a5,8(s0) - stream->buf_write_pos = 0; - 521a: 40042823 sw zero,1040(s0) - return EOF; - 521e: bf75 j 51da - -0000000000005220 : - return (stream) ? stream->eof : 1; - 5220: c119 beqz a0,5226 - 5222: 4548 lw a0,12(a0) - 5224: 8082 ret - 5226: 4505 li a0,1 -} - 5228: 8082 ret - -000000000000522a : - return (stream) ? stream->error : 1; - 522a: c119 beqz a0,5230 - 522c: 4508 lw a0,8(a0) - 522e: 8082 ret - 5230: 4505 li a0,1 -} - 5232: 8082 ret - -0000000000005234 : - if (stream) - 5234: c509 beqz a0,523e - stream->error = 0; - 5236: 00052423 sw zero,8(a0) - stream->eof = 0; - 523a: 00052623 sw zero,12(a0) -} - 523e: 8082 ret - -0000000000005240 : - if (!stream || c == EOF) - 5240: c19d beqz a1,5266 - 5242: 57fd li a5,-1 - 5244: 02f50163 beq a0,a5,5266 - if (stream->buf_read_pos > 0) - 5248: 4145a783 lw a5,1044(a1) - 524c: 00f05d63 blez a5,5266 - stream->buf_read_pos--; - 5250: fff7871b addiw a4,a5,-1 - 5254: 40e5aa23 sw a4,1044(a1) - stream->buffer[stream->buf_read_pos] = (char)c; - 5258: 00e587b3 add a5,a1,a4 - 525c: 00a78823 sb a0,16(a5) - stream->eof = 0; - 5260: 0005a623 sw zero,12(a1) - return c; - 5264: 8082 ret - return EOF; - 5266: 557d li a0,-1 - 5268: 8082 ret - -000000000000526a : - return new_ptr; -} - -/* String Conversion*/ - -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 526a: 1141 addi sp,sp,-16 - 526c: e422 sd s0,8(sp) - 526e: 8eaa mv t4,a0 -{ - const char *s = nptr; - 5270: 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'; } - 5272: 02000313 li t1,32 - 5276: 4e11 li t3,4 - return 0; - } - - do - { - c = *s++; - 5278: 0008c783 lbu a5,0(a7) - 527c: 00188813 addi a6,a7,1 - 5280: ff77871b addiw a4,a5,-9 - 5284: 0ff77693 zext.b a3,a4 - 5288: 0007871b sext.w a4,a5 - 528c: 04678363 beq a5,t1,52d2 - 5290: 04de7163 bgeu t3,a3,52d2 - } while (isspace(c)); - - if (c == '-') - 5294: 02d00793 li a5,45 - 5298: 0ef70863 beq a4,a5,5388 - { - neg = 1; - c = *s++; - } - else if (c == '+') - 529c: 02b00793 li a5,43 - int neg = 0, any, cutlim; - 52a0: 4381 li t2,0 - else if (c == '+') - 52a2: 08f70c63 beq a4,a5,533a - { - c = *s++; - } - - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 52a6: ea05 bnez a2,52d6 - 52a8: 03000793 li a5,48 - 52ac: 0ef70463 beq a4,a5,5394 - 52b0: 00ccd8b7 lui a7,0xccd - 52b4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc3e5d> - 52b8: 08b2 slli a7,a7,0xc - 52ba: ccd88893 addi a7,a7,-819 - 52be: 08b2 slli a7,a7,0xc - 52c0: ccd88893 addi a7,a7,-819 - 52c4: 08b6 slli a7,a7,0xd - 52c6: 4415 li s0,5 - 52c8: 99988893 addi a7,a7,-1639 - 52cc: 42a9 li t0,10 - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == '0' ? 8 : 10); - 52ce: 4629 li a2,10 - 52d0: a829 j 52ea -unsigned long long strtoull(const char *nptr, char **endptr, int base) - 52d2: 88c2 mv a7,a6 - 52d4: b755 j 5278 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 52d6: 47c1 li a5,16 - 52d8: 0cf60d63 beq a2,a5,53b2 - - cutoff = ULLONG_MAX / (unsigned long long)base; - 52dc: 58fd li a7,-1 - cutlim = ULLONG_MAX % (unsigned long long)base; - 52de: 02c8f433 remu s0,a7,a2 - cutoff = ULLONG_MAX / (unsigned long long)base; - 52e2: 82b2 mv t0,a2 - 52e4: 02c8d8b3 divu a7,a7,a2 - cutlim = ULLONG_MAX % (unsigned long long)base; - 52e8: 2401 sext.w s0,s0 - - for (acc = 0, any = 0;; c = *s++) - 52ea: 4301 li t1,0 - 52ec: 4501 li a0,0 - { - if (isdigit(c)) - 52ee: 4e25 li t3,9 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 52f0: 4fe5 li t6,25 - break; - - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 52f2: 5f7d li t5,-1 - if (isdigit(c)) - 52f4: fd07079b addiw a5,a4,-48 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 52f8: 0007069b sext.w a3,a4 - 52fc: 00fe7e63 bgeu t3,a5,5318 - static inline int isalpha(int c) { return islower(c) || isupper(c); } - 5300: f9f6879b addiw a5,a3,-97 - 5304: 04fff063 bgeu t6,a5,5344 - 5308: fbf6869b addiw a3,a3,-65 - 530c: 04dfe163 bltu t6,a3,534e - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 5310: 03700793 li a5,55 - 5314: 40f707bb subw a5,a4,a5 - if (c >= base) - 5318: 02c7db63 bge a5,a2,534e - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 531c: 01e30b63 beq t1,t5,5332 - any = -1; - 5320: 537d li t1,-1 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 5322: 00a8e863 bltu a7,a0,5332 - 5326: 05150e63 beq a0,a7,5382 - else - { - any = 1; - 532a: 4305 li t1,1 - acc *= base; - 532c: 02550533 mul a0,a0,t0 - acc += c; - 5330: 953e add a0,a0,a5 - for (acc = 0, any = 0;; c = *s++) - 5332: 0805 addi a6,a6,1 - 5334: fff84703 lbu a4,-1(a6) - if (isdigit(c)) - 5338: bf75 j 52f4 - c = *s++; - 533a: 00084703 lbu a4,0(a6) - 533e: 00288813 addi a6,a7,2 - 5342: b795 j 52a6 - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 5344: 05700793 li a5,87 - 5348: 40f707bb subw a5,a4,a5 - 534c: b7f1 j 5318 - } - } - - if (any < 0) - 534e: 57fd li a5,-1 - 5350: 00f30e63 beq t1,a5,536c - { - acc = ULLONG_MAX; - errno = ERANGE; - } - else if (neg) - 5354: 00038463 beqz t2,535c - acc = -acc; - 5358: 40a00533 neg a0,a0 - - if (endptr != 0) - 535c: c589 beqz a1,5366 - *endptr = (char *)(any ? s - 1 : nptr); - 535e: 00031f63 bnez t1,537c - 5362: 01d5b023 sd t4,0(a1) - - return acc; -} - 5366: 6422 ld s0,8(sp) - 5368: 0141 addi sp,sp,16 - 536a: 8082 ret - errno = ERANGE; - 536c: 02200793 li a5,34 - 5370: 00004717 auipc a4,0x4 - 5374: 9cf72423 sw a5,-1592(a4) # 8d38 - acc = ULLONG_MAX; - 5378: 557d li a0,-1 - if (endptr != 0) - 537a: d5f5 beqz a1,5366 - *endptr = (char *)(any ? s - 1 : nptr); - 537c: fff80e93 addi t4,a6,-1 - 5380: b7cd j 5362 - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 5382: faf448e3 blt s0,a5,5332 - 5386: b755 j 532a - c = *s++; - 5388: 00084703 lbu a4,0(a6) - neg = 1; - 538c: 4385 li t2,1 - c = *s++; - 538e: 00288813 addi a6,a7,2 - 5392: bf11 j 52a6 - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 5394: 00084783 lbu a5,0(a6) - 5398: 05800693 li a3,88 - 539c: 0df7f793 andi a5,a5,223 - 53a0: 02d78b63 beq a5,a3,53d6 - 53a4: 58fd li a7,-1 - 53a6: 441d li s0,7 - 53a8: 0038d893 srli a7,a7,0x3 - 53ac: 42a1 li t0,8 - base = (c == '0' ? 8 : 10); - 53ae: 4621 li a2,8 - 53b0: bf2d j 52ea - if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 53b2: 03000793 li a5,48 - 53b6: 00f70863 beq a4,a5,53c6 - 53ba: 58fd li a7,-1 - 53bc: 443d li s0,15 - 53be: 0048d893 srli a7,a7,0x4 - 53c2: 42c1 li t0,16 - 53c4: b71d j 52ea - 53c6: 00084783 lbu a5,0(a6) - 53ca: 05800693 li a3,88 - 53ce: 0df7f793 andi a5,a5,223 - 53d2: fed794e3 bne a5,a3,53ba - s += 2; - 53d6: 58fd li a7,-1 - c = s[1]; - 53d8: 00184703 lbu a4,1(a6) - s += 2; - 53dc: 443d li s0,15 - 53de: 0809 addi a6,a6,2 - 53e0: 0048d893 srli a7,a7,0x4 - 53e4: 42c1 li t0,16 - base = 16; - 53e6: 4641 li a2,16 - 53e8: b709 j 52ea - -00000000000053ea : - if (__atexit_func_count >= ATEXIT_MAX) - 53ea: 00004717 auipc a4,0x4 - 53ee: 94e70713 addi a4,a4,-1714 # 8d38 - 53f2: 435c lw a5,4(a4) - 53f4: 46fd li a3,31 - 53f6: 00f6ca63 blt a3,a5,540a - __atexit_funcs[__atexit_func_count++] = function; - 53fa: 00379693 slli a3,a5,0x3 - 53fe: 96ba add a3,a3,a4 - 5400: 2785 addiw a5,a5,1 - 5402: e688 sd a0,8(a3) - 5404: c35c sw a5,4(a4) - return 0; - 5406: 4501 li a0,0 - 5408: 8082 ret - return -1; - 540a: 557d li a0,-1 -} - 540c: 8082 ret - -000000000000540e : -{ - 540e: 1101 addi sp,sp,-32 - 5410: e822 sd s0,16(sp) - while (__atexit_func_count > 0) - 5412: 00004417 auipc s0,0x4 - 5416: 92640413 addi s0,s0,-1754 # 8d38 - 541a: 405c lw a5,4(s0) -{ - 541c: e426 sd s1,8(sp) - 541e: ec06 sd ra,24(sp) - 5420: 84aa mv s1,a0 - while (__atexit_func_count > 0) - 5422: 00f05d63 blez a5,543c - (__atexit_funcs[--__atexit_func_count])(); - 5426: fff7871b addiw a4,a5,-1 - 542a: 87ba mv a5,a4 - 542c: 070e slli a4,a4,0x3 - 542e: 9722 add a4,a4,s0 - 5430: 6718 ld a4,8(a4) - 5432: c05c sw a5,4(s0) - 5434: 9702 jalr a4 - while (__atexit_func_count > 0) - 5436: 405c lw a5,4(s0) - 5438: fef047e3 bgtz a5,5426 - sys_exit(status); - 543c: 8526 mv a0,s1 - 543e: c8bfb0ef jal 10c8 - while (1) - 5442: a001 j 5442 - -0000000000005444 : -{ - 5444: 1141 addi sp,sp,-16 - exit(127); - 5446: 07f00513 li a0,127 -{ - 544a: e406 sd ra,8(sp) - exit(127); - 544c: fc3ff0ef jal 540e - -0000000000005450 : -} - 5450: 4501 li a0,0 - 5452: 8082 ret - -0000000000005454 : -} - 5454: 557d li a0,-1 - 5456: 8082 ret - -0000000000005458 : - if (!ptr) - 5458: c121 beqz a0,5498 - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 545a: 00004617 auipc a2,0x4 - 545e: 8de60613 addi a2,a2,-1826 # 8d38 - 5462: 10863783 ld a5,264(a2) - bp = (header_t *)ptr - 1; - 5466: ff050693 addi a3,a0,-16 - if (p >= p->next && (bp > p || bp < p->next)) - 546a: 6798 ld a4,8(a5) - for (p = freep; !(bp > p && bp < p->next); p = p->next) - 546c: 02d7f763 bgeu a5,a3,549a - 5470: 00e6e463 bltu a3,a4,5478 - if (p >= p->next && (bp > p || bp < p->next)) - 5474: 02e7e763 bltu a5,a4,54a2 - if ((char *)bp + bp->size == (char *)p->next) - 5478: ff053583 ld a1,-16(a0) - 547c: 00b68833 add a6,a3,a1 - 5480: 03070363 beq a4,a6,54a6 - if ((char *)p + p->size == (char *)bp) - 5484: 638c ld a1,0(a5) - 5486: fee53c23 sd a4,-8(a0) - 548a: 00b78833 add a6,a5,a1 - 548e: 03068963 beq a3,a6,54c0 - 5492: e794 sd a3,8(a5) - freep = p; - 5494: 10f63423 sd a5,264(a2) -} - 5498: 8082 ret - if (p >= p->next && (bp > p || bp < p->next)) - 549a: 00e7e463 bltu a5,a4,54a2 - 549e: fce6ede3 bltu a3,a4,5478 -{ - 54a2: 87ba mv a5,a4 - 54a4: b7d9 j 546a - bp->size += p->next->size; - 54a6: 00073803 ld a6,0(a4) - bp->next = p->next->next; - 54aa: 6718 ld a4,8(a4) - bp->size += p->next->size; - 54ac: 95c2 add a1,a1,a6 - 54ae: feb53823 sd a1,-16(a0) - if ((char *)p + p->size == (char *)bp) - 54b2: 638c ld a1,0(a5) - 54b4: fee53c23 sd a4,-8(a0) - 54b8: 00b78833 add a6,a5,a1 - 54bc: fd069be3 bne a3,a6,5492 - p->size += bp->size; - 54c0: ff053503 ld a0,-16(a0) - p->next = bp->next; - 54c4: 86ba mv a3,a4 - p->size += bp->size; - 54c6: 00b50733 add a4,a0,a1 - 54ca: e398 sd a4,0(a5) - p->next = bp->next; - 54cc: b7d9 j 5492 - -00000000000054ce : - if (size == 0) - 54ce: c169 beqz a0,5590 -{ - 54d0: 7179 addi sp,sp,-48 - 54d2: ec26 sd s1,24(sp) - if ((prevp = freep) == NULL) - 54d4: 00004497 auipc s1,0x4 - 54d8: 86448493 addi s1,s1,-1948 # 8d38 - 54dc: 1084b783 ld a5,264(s1) -{ - 54e0: f022 sd s0,32(sp) - size = ALIGN(size + sizeof(header_t)); - 54e2: 057d addi a0,a0,31 -{ - 54e4: f406 sd ra,40(sp) - size = ALIGN(size + sizeof(header_t)); - 54e6: ff057413 andi s0,a0,-16 - if ((prevp = freep) == NULL) - 54ea: c3d1 beqz a5,556e - for (p = prevp->next;; prevp = p, p = p->next) - 54ec: 6788 ld a0,8(a5) - if (p->size >= size) - 54ee: 6118 ld a4,0(a0) - 54f0: 06877163 bgeu a4,s0,5552 - 54f4: e44e sd s3,8(sp) - 54f6: e052 sd s4,0(sp) - 54f8: e84a sd s2,16(sp) - if (nu < 4096) - 54fa: 6a05 lui s4,0x1 - if (cp == (void *)-1) - 54fc: 59fd li s3,-1 - 54fe: a029 j 5508 - for (p = prevp->next;; prevp = p, p = p->next) - 5500: 6788 ld a0,8(a5) - if (p->size >= size) - 5502: 6118 ld a4,0(a0) - 5504: 04877463 bgeu a4,s0,554c - if (p == freep) - 5508: 1084b703 ld a4,264(s1) - 550c: 87aa mv a5,a0 - 550e: fee519e3 bne a0,a4,5500 - if (nu < 4096) - 5512: 8922 mv s2,s0 - 5514: 01447363 bgeu s0,s4,551a - 5518: 6905 lui s2,0x1 - cp = (char *)sbrk(nu); - 551a: 854a mv a0,s2 - 551c: c3dfb0ef jal 1158 - 5520: 87aa mv a5,a0 - free((void *)(up + 1)); - 5522: 0541 addi a0,a0,16 - if (cp == (void *)-1) - 5524: 01378963 beq a5,s3,5536 - up->size = nu; - 5528: 0127b023 sd s2,0(a5) - free((void *)(up + 1)); - 552c: f2dff0ef jal 5458 - return freep; - 5530: 1084b783 ld a5,264(s1) - if ((p = morecore(size)) == NULL) - 5534: f7f1 bnez a5,5500 -} - 5536: 70a2 ld ra,40(sp) - 5538: 7402 ld s0,32(sp) - errno = ENOMEM; - 553a: 47b1 li a5,12 - 553c: c09c sw a5,0(s1) - return NULL; - 553e: 6942 ld s2,16(sp) - 5540: 69a2 ld s3,8(sp) - 5542: 6a02 ld s4,0(sp) -} - 5544: 64e2 ld s1,24(sp) - return NULL; - 5546: 4501 li a0,0 -} - 5548: 6145 addi sp,sp,48 - 554a: 8082 ret - 554c: 6942 ld s2,16(sp) - 554e: 69a2 ld s3,8(sp) - 5550: 6a02 ld s4,0(sp) - if (p->size == size) - 5552: 02e40c63 beq s0,a4,558a - p->size -= size; - 5556: 8f01 sub a4,a4,s0 - 5558: e118 sd a4,0(a0) - p = (header_t *)((char *)p + p->size); - 555a: 953a add a0,a0,a4 - p->size = size; - 555c: e100 sd s0,0(a0) -} - 555e: 70a2 ld ra,40(sp) - 5560: 7402 ld s0,32(sp) - freep = prevp; - 5562: 10f4b423 sd a5,264(s1) - return (void *)(p + 1); - 5566: 0541 addi a0,a0,16 -} - 5568: 64e2 ld s1,24(sp) - 556a: 6145 addi sp,sp,48 - 556c: 8082 ret - base.next = freep = prevp = &base; - 556e: 00004517 auipc a0,0x4 - 5572: 8da50513 addi a0,a0,-1830 # 8e48 - 5576: 10a4b423 sd a0,264(s1) - 557a: 10a4bc23 sd a0,280(s1) - base.size = 0; - 557e: 00004797 auipc a5,0x4 - 5582: 8c07b523 sd zero,-1846(a5) # 8e48 - if (p->size >= size) - 5586: f43d bnez s0,54f4 - base.next = freep = prevp = &base; - 5588: 87aa mv a5,a0 - prevp->next = p->next; - 558a: 6518 ld a4,8(a0) - 558c: e798 sd a4,8(a5) - 558e: bfc1 j 555e - return NULL; - 5590: 4501 li a0,0 -} - 5592: 8082 ret - -0000000000005594 : - if (__builtin_mul_overflow(nmemb, size, &total)) - 5594: 02b537b3 mulhu a5,a0,a1 -{ - 5598: 1101 addi sp,sp,-32 - 559a: e822 sd s0,16(sp) - 559c: ec06 sd ra,24(sp) - 559e: e426 sd s1,8(sp) - if (__builtin_mul_overflow(nmemb, size, &total)) - 55a0: 02b50433 mul s0,a0,a1 - 55a4: e385 bnez a5,55c4 - void *p = malloc(total); - 55a6: 8522 mv a0,s0 - 55a8: f27ff0ef jal 54ce - 55ac: 84aa mv s1,a0 - if (p) - 55ae: c509 beqz a0,55b8 - memset(p, 0, total); - 55b0: 8622 mv a2,s0 - 55b2: 4581 li a1,0 - 55b4: 524000ef jal 5ad8 -} - 55b8: 60e2 ld ra,24(sp) - 55ba: 6442 ld s0,16(sp) - 55bc: 8526 mv a0,s1 - 55be: 64a2 ld s1,8(sp) - 55c0: 6105 addi sp,sp,32 - 55c2: 8082 ret - 55c4: 60e2 ld ra,24(sp) - 55c6: 6442 ld s0,16(sp) - errno = ENOMEM; - 55c8: 47b1 li a5,12 - return NULL; - 55ca: 4481 li s1,0 - errno = ENOMEM; - 55cc: 00003717 auipc a4,0x3 - 55d0: 76f72623 sw a5,1900(a4) # 8d38 -} - 55d4: 8526 mv a0,s1 - 55d6: 64a2 ld s1,8(sp) - 55d8: 6105 addi sp,sp,32 - 55da: 8082 ret - -00000000000055dc : - if (!ptr) - 55dc: c929 beqz a0,562e -{ - 55de: 1101 addi sp,sp,-32 - 55e0: ec06 sd ra,24(sp) - 55e2: e426 sd s1,8(sp) - if (size == 0) - 55e4: c5b9 beqz a1,5632 - if (bp->size >= new_size) - 55e6: ff053703 ld a4,-16(a0) - size_t new_size = ALIGN(size + sizeof(header_t)); - 55ea: 01f58793 addi a5,a1,31 - 55ee: e822 sd s0,16(sp) - 55f0: 9bc1 andi a5,a5,-16 - 55f2: 842a mv s0,a0 - return ptr; - 55f4: 84aa mv s1,a0 - if (bp->size >= new_size) - 55f6: 00f76863 bltu a4,a5,5606 - 55fa: 6442 ld s0,16(sp) -} - 55fc: 60e2 ld ra,24(sp) - 55fe: 8526 mv a0,s1 - 5600: 64a2 ld s1,8(sp) - 5602: 6105 addi sp,sp,32 - 5604: 8082 ret - void *new_ptr = malloc(size); - 5606: 852e mv a0,a1 - 5608: ec7ff0ef jal 54ce - 560c: 84aa mv s1,a0 - if (!new_ptr) - 560e: d575 beqz a0,55fa - memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 5610: ff043603 ld a2,-16(s0) - 5614: 85a2 mv a1,s0 - 5616: 1641 addi a2,a2,-16 - 5618: 514000ef jal 5b2c - free(ptr); - 561c: 8522 mv a0,s0 - 561e: e3bff0ef jal 5458 -} - 5622: 60e2 ld ra,24(sp) - free(ptr); - 5624: 6442 ld s0,16(sp) -} - 5626: 8526 mv a0,s1 - 5628: 64a2 ld s1,8(sp) - 562a: 6105 addi sp,sp,32 - 562c: 8082 ret - return malloc(size); - 562e: 852e mv a0,a1 - 5630: bd79 j 54ce - free(ptr); - 5632: e27ff0ef jal 5458 - return NULL; - 5636: 4481 li s1,0 - 5638: b7d1 j 55fc - -000000000000563a : - if (base < 0 || base == 1 || base > 36) - 563a: 02400813 li a6,36 -{ - 563e: 86aa mv a3,a0 - 5640: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 5642: 00c86663 bltu a6,a2,564e - 5646: 4805 li a6,1 - 5648: 01060363 beq a2,a6,564e - 564c: b939 j 526a - if (endptr) - 564e: c311 beqz a4,5652 - *endptr = (char *)nptr; - 5650: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 5652: 00003797 auipc a5,0x3 - 5656: 6e07a323 sw zero,1766(a5) # 8d38 -} - 565a: 4501 li a0,0 - 565c: 8082 ret - -000000000000565e : - -long long strtoll(const char *nptr, char **endptr, int base) -{ - 565e: 1141 addi sp,sp,-16 - 5660: e406 sd ra,8(sp) - 5662: e022 sd s0,0(sp) - const char *s = nptr; - 5664: 86aa mv a3,a0 - static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 5666: 02000813 li a6,32 - 566a: 4891 li a7,4 - unsigned long long acc; - int c, neg = 0; - - do - { - c = *s++; - 566c: 0006c783 lbu a5,0(a3) - 5670: 0685 addi a3,a3,1 - 5672: ff77871b addiw a4,a5,-9 - 5676: 0ff77713 zext.b a4,a4 - 567a: 0007841b sext.w s0,a5 - 567e: ff0787e3 beq a5,a6,566c - 5682: fee8f5e3 bgeu a7,a4,566c - if (base < 0 || base == 1 || base > 36) - 5686: 02400793 li a5,36 - 568a: 02c7ec63 bltu a5,a2,56c2 - 568e: 4785 li a5,1 - 5690: 02f60963 beq a2,a5,56c2 - 5694: bd7ff0ef jal 526a - if (c == '-') - neg = 1; - - acc = strtoull(nptr, endptr, base); - - if (errno == ERANGE && acc == ULLONG_MAX) - 5698: 00003797 auipc a5,0x3 - 569c: 6a078793 addi a5,a5,1696 # 8d38 - 56a0: 4394 lw a3,0(a5) - 56a2: 02200713 li a4,34 - 56a6: 04e68363 beq a3,a4,56ec - return neg ? LLONG_MIN : LLONG_MAX; - - if (!neg && acc > (unsigned long long)LLONG_MAX) - 56aa: 02d00713 li a4,45 - 56ae: 02e40563 beq s0,a4,56d8 - 56b2: 00055f63 bgez a0,56d0 - { - errno = ERANGE; - 56b6: 02200713 li a4,34 - 56ba: c398 sw a4,0(a5) - return neg ? LLONG_MIN : LLONG_MAX; - 56bc: 557d li a0,-1 - 56be: 8105 srli a0,a0,0x1 - 56c0: a801 j 56d0 - if (endptr) - 56c2: c191 beqz a1,56c6 - *endptr = (char *)nptr; - 56c4: e188 sd a0,0(a1) - errno = 0; /* EINVAL */ - 56c6: 00003797 auipc a5,0x3 - 56ca: 6607a923 sw zero,1650(a5) # 8d38 - { - errno = ERANGE; - return LLONG_MIN; - } - - return neg ? -(long long)acc : (long long)acc; - 56ce: 4501 li a0,0 -} - 56d0: 60a2 ld ra,8(sp) - 56d2: 6402 ld s0,0(sp) - 56d4: 0141 addi sp,sp,16 - 56d6: 8082 ret - if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 56d8: 577d li a4,-1 - 56da: 177e slli a4,a4,0x3f - 56dc: 02a76263 bltu a4,a0,5700 -} - 56e0: 60a2 ld ra,8(sp) - 56e2: 6402 ld s0,0(sp) - return neg ? -(long long)acc : (long long)acc; - 56e4: 40a00533 neg a0,a0 -} - 56e8: 0141 addi sp,sp,16 - 56ea: 8082 ret - if (errno == ERANGE && acc == ULLONG_MAX) - 56ec: 577d li a4,-1 - 56ee: fae51ee3 bne a0,a4,56aa - return neg ? LLONG_MIN : LLONG_MAX; - 56f2: 02d00793 li a5,45 - 56f6: fcf413e3 bne s0,a5,56bc - return LLONG_MIN; - 56fa: 557d li a0,-1 - 56fc: 157e slli a0,a0,0x3f - 56fe: bfc9 j 56d0 - errno = ERANGE; - 5700: 02200713 li a4,34 - 5704: c398 sw a4,0(a5) - return LLONG_MIN; - 5706: bfd5 j 56fa - -0000000000005708 : - if (base < 0 || base == 1 || base > 36) - 5708: 02400813 li a6,36 - -unsigned long strtoul(const char *nptr, char **endptr, int base) -{ - 570c: 86aa mv a3,a0 - 570e: 872e mv a4,a1 - if (base < 0 || base == 1 || base > 36) - 5710: 00c86663 bltu a6,a2,571c - 5714: 4805 li a6,1 - 5716: 01060363 beq a2,a6,571c - 571a: be81 j 526a - if (endptr) - 571c: c311 beqz a4,5720 - *endptr = (char *)nptr; - 571e: e314 sd a3,0(a4) - errno = 0; /* EINVAL */ - 5720: 00003797 auipc a5,0x3 - 5724: 6007ac23 sw zero,1560(a5) # 8d38 - { - errno = ERANGE; - return ULONG_MAX; - } - return (unsigned long)ret; -} - 5728: 4501 li a0,0 - 572a: 8082 ret - -000000000000572c : - -long strtol(const char *nptr, char **endptr, int base) -{ - long long ret = strtoll(nptr, endptr, base); - 572c: bf0d j 565e - -000000000000572e : - return LONG_MIN; - } - return (long)ret; -} - -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 572e: 1141 addi sp,sp,-16 - long long ret = strtoll(nptr, endptr, base); - 5730: 4629 li a2,10 - 5732: 4581 li a1,0 -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 5734: e406 sd ra,8(sp) - long long ret = strtoll(nptr, endptr, base); - 5736: f29ff0ef jal 565e -int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 573a: 60a2 ld ra,8(sp) - 573c: 2501 sext.w a0,a0 - 573e: 0141 addi sp,sp,16 - 5740: 8082 ret - -0000000000005742 : - long long ret = strtoll(nptr, endptr, base); - 5742: 4629 li a2,10 - 5744: 4581 li a1,0 - 5746: bf21 j 565e - -0000000000005748 : -long atol(const char *nptr) { return strtol(nptr, NULL, 10); } -long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 5748: 4629 li a2,10 - 574a: 4581 li a1,0 - 574c: bf09 j 565e - -000000000000574e : - 574e: 02000693 li a3,32 - 5752: 4611 li a2,4 -{ - double val = 0.0; - int sign = 1; - const char *s = nptr; - - while (isspace(*s)) - 5754: 00054783 lbu a5,0(a0) - 5758: ff77871b addiw a4,a5,-9 - 575c: 0ff77713 zext.b a4,a4 - 5760: 06d78263 beq a5,a3,57c4 - 5764: 06e67063 bgeu a2,a4,57c4 - s++; - if (*s == '-') - 5768: 02d00713 li a4,45 - 576c: 08e78e63 beq a5,a4,5808 - { - sign = -1; - s++; - } - else if (*s == '+') - 5770: 02b00713 li a4,43 - 5774: 0ae78263 beq a5,a4,5818 - 5778: 00001717 auipc a4,0x1 - 577c: 20073507 fld fa0,512(a4) # 6978 - static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 5780: fd07861b addiw a2,a5,-48 - s++; - - while (isdigit(*s)) - 5784: 46a5 li a3,9 - 5786: f20007d3 fmv.d.x fa5,zero - 578a: 8732 mv a4,a2 - 578c: 02c6e363 bltu a3,a2,57b2 - 5790: 00001797 auipc a5,0x1 - 5794: 1f07b687 fld fa3,496(a5) # 6980 - 5798: 4625 li a2,9 - 579a: 00154783 lbu a5,1(a0) - { - val = val * 10.0 + (*s - '0'); - 579e: d2070753 fcvt.d.w fa4,a4 - s++; - 57a2: 0505 addi a0,a0,1 - 57a4: fd07869b addiw a3,a5,-48 - val = val * 10.0 + (*s - '0'); - 57a8: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 57ac: 8736 mv a4,a3 - while (isdigit(*s)) - 57ae: fed676e3 bgeu a2,a3,579a - } - if (*s == '.') - 57b2: 02e00713 li a4,46 - 57b6: 00e78963 beq a5,a4,57c8 - val += (*s - '0') * factor; - s++; - } - } - - if (endptr) - 57ba: c191 beqz a1,57be - *endptr = (char *)s; - 57bc: e188 sd a0,0(a1) - return val * sign; -} - 57be: 12a7f553 fmul.d fa0,fa5,fa0 - 57c2: 8082 ret - s++; - 57c4: 0505 addi a0,a0,1 - 57c6: b779 j 5754 - while (isdigit(*s)) - 57c8: 00154703 lbu a4,1(a0) - 57cc: 46a5 li a3,9 - s++; - 57ce: 0505 addi a0,a0,1 - 57d0: fd07071b addiw a4,a4,-48 - 57d4: 87ba mv a5,a4 - while (isdigit(*s)) - 57d6: fee6e2e3 bltu a3,a4,57ba - double factor = 1.0; - 57da: 00001717 auipc a4,0x1 - 57de: 19e73707 fld fa4,414(a4) # 6978 - 57e2: 00001717 auipc a4,0x1 - 57e6: 1b673607 fld fa2,438(a4) # 6998 - factor *= 0.1; - 57ea: 12c77753 fmul.d fa4,fa4,fa2 - while (isdigit(*s)) - 57ee: 00154703 lbu a4,1(a0) - val += (*s - '0') * factor; - 57f2: d20786d3 fcvt.d.w fa3,a5 - s++; - 57f6: 0505 addi a0,a0,1 - 57f8: fd07071b addiw a4,a4,-48 - 57fc: 87ba mv a5,a4 - val += (*s - '0') * factor; - 57fe: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 - while (isdigit(*s)) - 5802: fee6f4e3 bgeu a3,a4,57ea - 5806: bf55 j 57ba - while (isdigit(*s)) - 5808: 00154783 lbu a5,1(a0) - 580c: 00001717 auipc a4,0x1 - 5810: 16473507 fld fa0,356(a4) # 6970 - s++; - 5814: 0505 addi a0,a0,1 - 5816: b7ad j 5780 - while (isdigit(*s)) - 5818: 00154783 lbu a5,1(a0) - 581c: 00001717 auipc a4,0x1 - 5820: 15c73507 fld fa0,348(a4) # 6978 - s++; - 5824: 0505 addi a0,a0,1 - 5826: bfa9 j 5780 - -0000000000005828 : - -double atof(const char *nptr) { return strtod(nptr, NULL); } - 5828: 4581 li a1,0 - 582a: b715 j 574e - -000000000000582c : -float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 582c: 1141 addi sp,sp,-16 - 582e: e406 sd ra,8(sp) - 5830: f1fff0ef jal 574e - 5834: 60a2 ld ra,8(sp) - 5836: 40157553 fcvt.s.d fa0,fa0 - 583a: 0141 addi sp,sp,16 - 583c: 8082 ret - -000000000000583e : - } -} - -void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - if (nmemb < 2 || size == 0) - 583e: 4785 li a5,1 - 5840: 0cb7fd63 bgeu a5,a1,591a -{ - 5844: 715d addi sp,sp,-80 - 5846: f44e sd s3,40(sp) - 5848: e486 sd ra,72(sp) - 584a: 89b2 mv s3,a2 - if (nmemb < 2 || size == 0) - 584c: c279 beqz a2,5912 - 584e: e85a sd s6,16(sp) - 5850: 8b2e mv s6,a1 - return; - - char *base_ptr = (char *)base; - char *pivot = base_ptr + (nmemb - 1) * size; - 5852: 1b7d addi s6,s6,-1 - 5854: fc26 sd s1,56(sp) - 5856: 033b04b3 mul s1,s6,s3 - 585a: ec56 sd s5,24(sp) - 585c: 8aaa mv s5,a0 - 585e: f052 sd s4,32(sp) - 5860: e45e sd s7,8(sp) - 5862: e0a2 sd s0,64(sp) - 5864: f84a sd s2,48(sp) - 5866: 8a36 mv s4,a3 - if (nmemb < 2 || size == 0) - 5868: 4b85 li s7,1 - char *pivot = base_ptr + (nmemb - 1) * size; - 586a: 94d6 add s1,s1,s5 - char *i = base_ptr; - char *j = base_ptr; - - /* Partition */ - for (; j < pivot; j += size) - 586c: 069af763 bgeu s5,s1,58da - char *j = base_ptr; - 5870: 8956 mv s2,s5 - char *i = base_ptr; - 5872: 8456 mv s0,s5 - 5874: a021 j 587c - for (; j < pivot; j += size) - 5876: 994e add s2,s2,s3 - 5878: 00997f63 bgeu s2,s1,5896 - { - if (compar(j, pivot) < 0) - 587c: 85a6 mv a1,s1 - 587e: 854a mv a0,s2 - 5880: 9a02 jalr s4 - 5882: fe055ae3 bgez a0,5876 - { - if (i != j) - 5886: 05241d63 bne s0,s2,58e0 - 588a: 01390633 add a2,s2,s3 - swap_bytes(i, j, size); - i += size; - 588e: 8432 mv s0,a2 - for (; j < pivot; j += size) - 5890: 994e add s2,s2,s3 - 5892: fe9965e3 bltu s2,s1,587c - } - } - swap_bytes(i, pivot, size); - - /* Recurse */ - size_t left_count = (i - base_ptr) / size; - 5896: 415405b3 sub a1,s0,s5 - 589a: 0335d5b3 divu a1,a1,s3 - qsort(base, left_count, size, compar); - qsort(i + size, nmemb - left_count - 1, size, compar); - 589e: 40bb0b33 sub s6,s6,a1 - while (size--) - 58a2: 013406b3 add a3,s0,s3 - *a++ = *b; - 58a6: 0004c703 lbu a4,0(s1) - temp = *a; - 58aa: 00044783 lbu a5,0(s0) - *b++ = temp; - 58ae: 0485 addi s1,s1,1 - *a++ = *b; - 58b0: 0405 addi s0,s0,1 - 58b2: fee40fa3 sb a4,-1(s0) - *b++ = temp; - 58b6: fef48fa3 sb a5,-1(s1) - while (size--) - 58ba: fed416e3 bne s0,a3,58a6 - qsort(base, left_count, size, compar); - 58be: 86d2 mv a3,s4 - 58c0: 864e mv a2,s3 - 58c2: 8556 mv a0,s5 - 58c4: f7bff0ef jal 583e - if (nmemb < 2 || size == 0) - 58c8: 036bfe63 bgeu s7,s6,5904 - char *pivot = base_ptr + (nmemb - 1) * size; - 58cc: 1b7d addi s6,s6,-1 - 58ce: 033b04b3 mul s1,s6,s3 - 58d2: 8aa2 mv s5,s0 - 58d4: 94d6 add s1,s1,s5 - for (; j < pivot; j += size) - 58d6: f89aede3 bltu s5,s1,5870 - char *i = base_ptr; - 58da: 8456 mv s0,s5 - for (; j < pivot; j += size) - 58dc: 4581 li a1,0 - 58de: b7d1 j 58a2 - 58e0: 01340633 add a2,s0,s3 - if (i != j) - 58e4: 874a mv a4,s2 - 58e6: 87a2 mv a5,s0 - *a++ = *b; - 58e8: 00074683 lbu a3,0(a4) - temp = *a; - 58ec: 0007c803 lbu a6,0(a5) - *b++ = temp; - 58f0: 0705 addi a4,a4,1 - *a++ = *b; - 58f2: 0785 addi a5,a5,1 - 58f4: fed78fa3 sb a3,-1(a5) - *b++ = temp; - 58f8: ff070fa3 sb a6,-1(a4) - while (size--) - 58fc: fec796e3 bne a5,a2,58e8 - i += size; - 5900: 8432 mv s0,a2 - 5902: b779 j 5890 - 5904: 6406 ld s0,64(sp) - 5906: 74e2 ld s1,56(sp) - 5908: 7942 ld s2,48(sp) - 590a: 7a02 ld s4,32(sp) - 590c: 6ae2 ld s5,24(sp) - 590e: 6b42 ld s6,16(sp) - 5910: 6ba2 ld s7,8(sp) -} - 5912: 60a6 ld ra,72(sp) - 5914: 79a2 ld s3,40(sp) - 5916: 6161 addi sp,sp,80 - 5918: 8082 ret - 591a: 8082 ret - -000000000000591c : - -void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) -{ - 591c: 715d addi sp,sp,-80 - 591e: e486 sd ra,72(sp) - 5920: fc26 sd s1,56(sp) - size_t l = 0, u = nmemb; - while (l < u) - 5922: c629 beqz a2,596c - 5924: f84a sd s2,48(sp) - 5926: f44e sd s3,40(sp) - 5928: f052 sd s4,32(sp) - 592a: ec56 sd s5,24(sp) - 592c: e85a sd s6,16(sp) - 592e: e45e sd s7,8(sp) - 5930: e0a2 sd s0,64(sp) - 5932: 8932 mv s2,a2 - 5934: 8a2a mv s4,a0 - 5936: 8aae mv s5,a1 - 5938: 8b36 mv s6,a3 - 593a: 8bba mv s7,a4 - size_t l = 0, u = nmemb; - 593c: 4981 li s3,0 - { - size_t idx = (l + u) / 2; - 593e: 01298433 add s0,s3,s2 - 5942: 8005 srli s0,s0,0x1 - const void *p = (void *)((const char *)base + (idx * size)); - 5944: 036404b3 mul s1,s0,s6 - int cmp = compar(key, p); - 5948: 8552 mv a0,s4 - const void *p = (void *)((const char *)base + (idx * size)); - 594a: 94d6 add s1,s1,s5 - int cmp = compar(key, p); - 594c: 85a6 mv a1,s1 - 594e: 9b82 jalr s7 - if (cmp < 0) - 5950: 02054463 bltz a0,5978 - u = idx; - else if (cmp > 0) - 5954: c515 beqz a0,5980 - l = idx + 1; - 5956: 00140993 addi s3,s0,1 - while (l < u) - 595a: ff29e2e3 bltu s3,s2,593e - 595e: 6406 ld s0,64(sp) - 5960: 7942 ld s2,48(sp) - 5962: 79a2 ld s3,40(sp) - 5964: 7a02 ld s4,32(sp) - 5966: 6ae2 ld s5,24(sp) - 5968: 6b42 ld s6,16(sp) - 596a: 6ba2 ld s7,8(sp) - else - return (void *)p; - } - return NULL; -} - 596c: 60a6 ld ra,72(sp) - return NULL; - 596e: 4481 li s1,0 -} - 5970: 8526 mv a0,s1 - 5972: 74e2 ld s1,56(sp) - 5974: 6161 addi sp,sp,80 - 5976: 8082 ret - u = idx; - 5978: 8922 mv s2,s0 - while (l < u) - 597a: fd29e2e3 bltu s3,s2,593e - 597e: b7c5 j 595e - 5980: 6406 ld s0,64(sp) -} - 5982: 60a6 ld ra,72(sp) - 5984: 7942 ld s2,48(sp) - 5986: 79a2 ld s3,40(sp) - 5988: 7a02 ld s4,32(sp) - 598a: 6ae2 ld s5,24(sp) - 598c: 6b42 ld s6,16(sp) - 598e: 6ba2 ld s7,8(sp) - 5990: 8526 mv a0,s1 - 5992: 74e2 ld s1,56(sp) - 5994: 6161 addi sp,sp,80 - 5996: 8082 ret - -0000000000005998 : - -/* Math & Mics */ - -int abs(int j) { return (j < 0) ? -j : j; } - 5998: 41f5579b sraiw a5,a0,0x1f - 599c: 8d3d xor a0,a0,a5 - 599e: 9d1d subw a0,a0,a5 - 59a0: 8082 ret - -00000000000059a2 : -long labs(long j) { return (j < 0) ? -j : j; } - 59a2: 43f55793 srai a5,a0,0x3f - 59a6: 8d3d xor a0,a0,a5 - 59a8: 8d1d sub a0,a0,a5 - 59aa: 8082 ret - -00000000000059ac : -long long llabs(long long j) { return (j < 0) ? -j : j; } - 59ac: 43f55793 srai a5,a0,0x3f - 59b0: 8d3d xor a0,a0,a5 - 59b2: 8d1d sub a0,a0,a5 - 59b4: 8082 ret - -00000000000059b6
: - -div_t div(int numer, int denom) -{ - div_t res = {numer / denom, numer % denom}; - 59b6: 02b547bb divw a5,a0,a1 -{ - 59ba: 1141 addi sp,sp,-16 - return res; -} - 59bc: 0141 addi sp,sp,16 - div_t res = {numer / denom, numer % denom}; - 59be: 02b5653b remw a0,a0,a1 - return res; - 59c2: 1782 slli a5,a5,0x20 - 59c4: 9381 srli a5,a5,0x20 - 59c6: 1502 slli a0,a0,0x20 -} - 59c8: 8d5d or a0,a0,a5 - 59ca: 8082 ret - -00000000000059cc : -ldiv_t ldiv(long numer, long denom) -{ - 59cc: 1141 addi sp,sp,-16 - 59ce: 87aa mv a5,a0 - ldiv_t res = {numer / denom, numer % denom}; - return res; -} - 59d0: 02b54533 div a0,a0,a1 - 59d4: 0141 addi sp,sp,16 - 59d6: 02b7e5b3 rem a1,a5,a1 - 59da: 8082 ret - -00000000000059dc : -lldiv_t lldiv(long long numer, long long denom) -{ - 59dc: 1141 addi sp,sp,-16 - 59de: 87aa mv a5,a0 - lldiv_t res = {numer / denom, numer % denom}; - return res; -} - 59e0: 02b54533 div a0,a0,a1 - 59e4: 0141 addi sp,sp,16 - 59e6: 02b7e5b3 rem a1,a5,a1 - 59ea: 8082 ret - -00000000000059ec : - -static unsigned long next = 1; -int rand(void) -{ - next = next * 1103515245 + 12345; - 59ec: 00003697 auipc a3,0x3 - 59f0: 2a468693 addi a3,a3,676 # 8c90 - 59f4: 629c ld a5,0(a3) - 59f6: 41c65737 lui a4,0x41c65 - 59fa: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5bffd> - 59fe: 02e787b3 mul a5,a5,a4 - 5a02: 670d lui a4,0x3 - 5a04: 03970713 addi a4,a4,57 # 3039 - 5a08: 97ba add a5,a5,a4 - return (unsigned int)(next / 65536) % 32768; - 5a0a: 02179513 slli a0,a5,0x21 - next = next * 1103515245 + 12345; - 5a0e: e29c sd a5,0(a3) -} - 5a10: 9145 srli a0,a0,0x31 - 5a12: 8082 ret - -0000000000005a14 : -void srand(unsigned int seed) { next = seed; } - 5a14: 1502 slli a0,a0,0x20 - 5a16: 9101 srli a0,a0,0x20 - 5a18: 00003797 auipc a5,0x3 - 5a1c: 26a7bc23 sd a0,632(a5) # 8c90 - 5a20: 8082 ret - -0000000000005a22 : - -/* Stub */ -int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 5a22: c901 beqz a0,5a32 - 5a24: 00054783 lbu a5,0(a0) - 5a28: 4501 li a0,0 - 5a2a: c789 beqz a5,5a34 - 5a2c: 00b03533 snez a0,a1 - 5a30: 8082 ret - 5a32: 4501 li a0,0 - 5a34: 8082 ret - -0000000000005a36 : -int mbtowc(wchar_t *pwc, const char *s, size_t n) -{ - 5a36: 87aa mv a5,a0 - if (!s) - 5a38: cd81 beqz a1,5a50 - return 0; - if (n == 0) - return -1; - 5a3a: 557d li a0,-1 - if (n == 0) - 5a3c: ca19 beqz a2,5a52 - if (pwc) - 5a3e: c781 beqz a5,5a46 - *pwc = (wchar_t)*s; - 5a40: 0005c703 lbu a4,0(a1) - 5a44: c398 sw a4,0(a5) - return (*s != 0); - 5a46: 0005c503 lbu a0,0(a1) - 5a4a: 00a03533 snez a0,a0 - 5a4e: 8082 ret - return 0; - 5a50: 4501 li a0,0 -} - 5a52: 8082 ret - -0000000000005a54 : -int wctomb(char *s, wchar_t wchar) -{ - if (!s) - 5a54: c509 beqz a0,5a5e - return 0; - *s = (char)wchar; - 5a56: 00b50023 sb a1,0(a0) - return 1; - 5a5a: 4505 li a0,1 - 5a5c: 8082 ret - return 0; - 5a5e: 4501 li a0,0 -} - 5a60: 8082 ret - -0000000000005a62 : -size_t mbstowcs(wchar_t *dest, const char *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 5a62: 0005c703 lbu a4,0(a1) - 5a66: cb0d beqz a4,5a98 - 5a68: ca15 beqz a2,5a9c - 5a6a: 86aa mv a3,a0 - size_t i = 0; - 5a6c: 4781 li a5,0 - 5a6e: a019 j 5a74 - while (src[i] && i < n) - 5a70: 02f60263 beq a2,a5,5a94 - { - dest[i] = (wchar_t)src[i]; - i++; - 5a74: 0785 addi a5,a5,1 - dest[i] = (wchar_t)src[i]; - 5a76: c298 sw a4,0(a3) - while (src[i] && i < n) - 5a78: 00f58733 add a4,a1,a5 - 5a7c: 00074703 lbu a4,0(a4) - 5a80: 0691 addi a3,a3,4 - 5a82: f77d bnez a4,5a70 - } - if (i < n) - 5a84: 00c7f763 bgeu a5,a2,5a92 - dest[i] = 0; - 5a88: 00279713 slli a4,a5,0x2 - 5a8c: 953a add a0,a0,a4 - 5a8e: 00052023 sw zero,0(a0) - size_t i = 0; - 5a92: 863e mv a2,a5 - 5a94: 8532 mv a0,a2 - 5a96: 8082 ret - 5a98: 4781 li a5,0 - 5a9a: b7ed j 5a84 - 5a9c: 4501 li a0,0 - return i; -} - 5a9e: 8082 ret - -0000000000005aa0 : -size_t wcstombs(char *dest, const wchar_t *src, size_t n) -{ - size_t i = 0; - while (src[i] && i < n) - 5aa0: 4198 lw a4,0(a1) - 5aa2: c71d beqz a4,5ad0 - 5aa4: ca05 beqz a2,5ad4 - 5aa6: 0591 addi a1,a1,4 - size_t i = 0; - 5aa8: 4781 li a5,0 - 5aaa: a019 j 5ab0 - while (src[i] && i < n) - 5aac: 02f60063 beq a2,a5,5acc - { - dest[i] = (char)src[i]; - 5ab0: 00f506b3 add a3,a0,a5 - 5ab4: 00e68023 sb a4,0(a3) - while (src[i] && i < n) - 5ab8: 4198 lw a4,0(a1) - i++; - 5aba: 0785 addi a5,a5,1 - while (src[i] && i < n) - 5abc: 0591 addi a1,a1,4 - 5abe: f77d bnez a4,5aac - } - if (i < n) - 5ac0: 00c7f563 bgeu a5,a2,5aca - dest[i] = 0; - 5ac4: 953e add a0,a0,a5 - 5ac6: 00050023 sb zero,0(a0) - size_t i = 0; - 5aca: 863e mv a2,a5 - 5acc: 8532 mv a0,a2 - 5ace: 8082 ret - 5ad0: 4781 li a5,0 - 5ad2: b7fd j 5ac0 - 5ad4: 4501 li a0,0 - return i; - 5ad6: 8082 ret - -0000000000005ad8 : - -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; - 5ad8: 0ff5f593 zext.b a1,a1 - 5adc: 87aa mv a5,a0 - 5ade: 00a60733 add a4,a2,a0 - for (size_t i = 0; i < n; i++) - 5ae2: c611 beqz a2,5aee - cdst[i] = (char)c; - 5ae4: 00b78023 sb a1,0(a5) - for (size_t i = 0; i < n; i++) - 5ae8: 0785 addi a5,a5,1 - 5aea: fee79de3 bne a5,a4,5ae4 - return dst; -} - 5aee: 8082 ret - -0000000000005af0 : - -void *memmove(void *vdst, const void *vsrc, size_t n) -{ - char *dst = (char *)vdst; - const char *src = (const char *)vsrc; - if (dst == src) - 5af0: 02b50d63 beq a0,a1,5b2a - return vdst; - - if (src > dst) - 5af4: 00b57e63 bgeu a0,a1,5b10 - { - while (n--) - 5af8: ca0d beqz a2,5b2a - 5afa: 962a add a2,a2,a0 - char *dst = (char *)vdst; - 5afc: 87aa mv a5,a0 - *dst++ = *src++; - 5afe: 0005c703 lbu a4,0(a1) - 5b02: 0785 addi a5,a5,1 - 5b04: 0585 addi a1,a1,1 - 5b06: fee78fa3 sb a4,-1(a5) - while (n--) - 5b0a: fec79ae3 bne a5,a2,5afe - 5b0e: 8082 ret - } - else - { - dst += n; - 5b10: 00c50733 add a4,a0,a2 - src += n; - 5b14: 00c587b3 add a5,a1,a2 - while (n-- > 0) - 5b18: ca09 beqz a2,5b2a - *--dst = *--src; - 5b1a: fff7c683 lbu a3,-1(a5) - 5b1e: 17fd addi a5,a5,-1 - 5b20: 177d addi a4,a4,-1 - 5b22: 00d70023 sb a3,0(a4) - while (n-- > 0) - 5b26: fef59ae3 bne a1,a5,5b1a - } - return vdst; -} - 5b2a: 8082 ret - -0000000000005b2c : - -void *memcpy(void *vdst, const void *vsrc, size_t n) -{ - return memmove(vdst, vsrc, n); - 5b2c: b7d1 j 5af0 - -0000000000005b2e : - -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--) - 5b2e: c205 beqz a2,5b4e - 5b30: 962a add a2,a2,a0 - 5b32: a019 j 5b38 - 5b34: 00c50d63 beq a0,a2,5b4e - { - if (*p1 != *p2) - 5b38: 00054783 lbu a5,0(a0) - 5b3c: 0005c703 lbu a4,0(a1) - return *p1 - *p2; - p1++; - 5b40: 0505 addi a0,a0,1 - p2++; - 5b42: 0585 addi a1,a1,1 - if (*p1 != *p2) - 5b44: fee788e3 beq a5,a4,5b34 - return *p1 - *p2; - 5b48: 40e7853b subw a0,a5,a4 - 5b4c: 8082 ret - } - return 0; - 5b4e: 4501 li a0,0 -} - 5b50: 8082 ret - -0000000000005b52 : - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char *p = (const unsigned char *)s; - while (n--) - 5b52: ce09 beqz a2,5b6c - { - if (*p == (unsigned char)c) - 5b54: 0ff5f593 zext.b a1,a1 - 5b58: 962a add a2,a2,a0 - 5b5a: a021 j 5b62 - return (void *)p; - p++; - 5b5c: 0505 addi a0,a0,1 - while (n--) - 5b5e: 00a60763 beq a2,a0,5b6c - if (*p == (unsigned char)c) - 5b62: 00054783 lbu a5,0(a0) - 5b66: feb79be3 bne a5,a1,5b5c - } - return NULL; -} - 5b6a: 8082 ret - return NULL; - 5b6c: 4501 li a0,0 -} - 5b6e: 8082 ret - -0000000000005b70 : -/* String Manipulation Functions */ - -size_t strlen(const char *s) -{ - const char *p = s; - while (*p) - 5b70: 00054783 lbu a5,0(a0) - 5b74: cb89 beqz a5,5b86 - const char *p = s; - 5b76: 87aa mv a5,a0 - while (*p) - 5b78: 0017c703 lbu a4,1(a5) - p++; - 5b7c: 0785 addi a5,a5,1 - while (*p) - 5b7e: ff6d bnez a4,5b78 - return (size_t)(p - s); - 5b80: 40a78533 sub a0,a5,a0 - 5b84: 8082 ret - while (*p) - 5b86: 4501 li a0,0 -} - 5b88: 8082 ret - -0000000000005b8a : - -char *strcpy(char *dst, const char *src) -{ - char *os = dst; - while ((*dst++ = *src++) != 0) - 5b8a: 87aa mv a5,a0 - 5b8c: 0005c703 lbu a4,0(a1) - 5b90: 0785 addi a5,a5,1 - 5b92: 0585 addi a1,a1,1 - 5b94: fee78fa3 sb a4,-1(a5) - 5b98: fb75 bnez a4,5b8c - ; - return os; -} - 5b9a: 8082 ret - -0000000000005b9c : -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++) - 5b9c: 4781 li a5,0 - 5b9e: e619 bnez a2,5bac - 5ba0: 8082 ret - dst[i] = src[i]; - 5ba2: 00e68023 sb a4,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 5ba6: 0785 addi a5,a5,1 - 5ba8: 02f60263 beq a2,a5,5bcc - 5bac: 00f58733 add a4,a1,a5 - 5bb0: 00074703 lbu a4,0(a4) - dst[i] = src[i]; - 5bb4: 00f506b3 add a3,a0,a5 - for (i = 0; i < n && src[i] != '\0'; i++) - 5bb8: f76d bnez a4,5ba2 - - for (; i < n; i++) - 5bba: 00c7f963 bgeu a5,a2,5bcc - 5bbe: 87b6 mv a5,a3 - 5bc0: 962a add a2,a2,a0 - dst[i] = '\0'; - 5bc2: 00078023 sb zero,0(a5) - for (; i < n; i++) - 5bc6: 0785 addi a5,a5,1 - 5bc8: fec79de3 bne a5,a2,5bc2 - - return os; -} - 5bcc: 8082 ret - -0000000000005bce : - -char *strcat(char *dst, const char *src) -{ - char *os = dst; - while (*dst) - 5bce: 00054783 lbu a5,0(a0) - 5bd2: cf91 beqz a5,5bee - 5bd4: 87aa mv a5,a0 - 5bd6: 0017c703 lbu a4,1(a5) - dst++; - 5bda: 0785 addi a5,a5,1 - while (*dst) - 5bdc: ff6d bnez a4,5bd6 - while ((*dst++ = *src++) != 0) - 5bde: 0005c703 lbu a4,0(a1) - 5be2: 0785 addi a5,a5,1 - 5be4: 0585 addi a1,a1,1 - 5be6: fee78fa3 sb a4,-1(a5) - 5bea: fb75 bnez a4,5bde - ; - return os; -} - 5bec: 8082 ret - while ((*dst++ = *src++) != 0) - 5bee: 0005c703 lbu a4,0(a1) - while (*dst) - 5bf2: 87aa mv a5,a0 - while ((*dst++ = *src++) != 0) - 5bf4: 0785 addi a5,a5,1 - 5bf6: fee78fa3 sb a4,-1(a5) - 5bfa: 0585 addi a1,a1,1 - 5bfc: f36d bnez a4,5bde - 5bfe: 8082 ret - -0000000000005c00 : - while (*p) - 5c00: 00054783 lbu a5,0(a0) - const char *p = s; - 5c04: 872a mv a4,a0 - while (*p) - 5c06: c789 beqz a5,5c10 - 5c08: 00174783 lbu a5,1(a4) - p++; - 5c0c: 0705 addi a4,a4,1 - while (*p) - 5c0e: ffed bnez a5,5c08 - size_t dest_len = strlen(dst); - size_t i; - - dst += dest_len; - - for (i = 0; i < n && src[i] != '\0'; i++) - 5c10: 86ba mv a3,a4 - 5c12: 4781 li a5,0 - 5c14: 88ba mv a7,a4 - 5c16: ea01 bnez a2,5c26 - 5c18: a839 j 5c36 - dst[i] = src[i]; - 5c1a: 01068023 sb a6,0(a3) - for (i = 0; i < n && src[i] != '\0'; i++) - 5c1e: 00188693 addi a3,a7,1 - 5c22: 00f60d63 beq a2,a5,5c3c - 5c26: 00f58833 add a6,a1,a5 - 5c2a: 00084803 lbu a6,0(a6) - 5c2e: 0785 addi a5,a5,1 - dst[i] = src[i]; - 5c30: 88b6 mv a7,a3 - for (i = 0; i < n && src[i] != '\0'; i++) - 5c32: fe0814e3 bnez a6,5c1a - - dst[i] = '\0'; - 5c36: 00088023 sb zero,0(a7) - - return os; -} - 5c3a: 8082 ret - dst[i] = '\0'; - 5c3c: 00c708b3 add a7,a4,a2 - 5c40: 00088023 sb zero,0(a7) -} - 5c44: 8082 ret - -0000000000005c46 : - -int strcmp(const char *p, const char *q) -{ - while (*p && *p == *q) - 5c46: 00054783 lbu a5,0(a0) - 5c4a: e791 bnez a5,5c56 - 5c4c: a02d j 5c76 - 5c4e: 00054783 lbu a5,0(a0) - 5c52: cf89 beqz a5,5c6c - 5c54: 85b6 mv a1,a3 - 5c56: 0005c703 lbu a4,0(a1) - { - p++; - 5c5a: 0505 addi a0,a0,1 - q++; - 5c5c: 00158693 addi a3,a1,1 - while (*p && *p == *q) - 5c60: fef707e3 beq a4,a5,5c4e - } - return (int)((unsigned char)*p - (unsigned char)*q); - 5c64: 0007851b sext.w a0,a5 -} - 5c68: 9d19 subw a0,a0,a4 - 5c6a: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 5c6c: 0015c703 lbu a4,1(a1) - 5c70: 4501 li a0,0 -} - 5c72: 9d19 subw a0,a0,a4 - 5c74: 8082 ret - return (int)((unsigned char)*p - (unsigned char)*q); - 5c76: 0005c703 lbu a4,0(a1) - 5c7a: 4501 li a0,0 - 5c7c: b7f5 j 5c68 - -0000000000005c7e : - -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (n == 0) - 5c7e: ca0d beqz a2,5cb0 - return 0; - - while (n-- > 0 && *s1 && *s1 == *s2) - 5c80: 00054783 lbu a5,0(a0) - 5c84: 167d addi a2,a2,-1 - 5c86: 00c506b3 add a3,a0,a2 - 5c8a: eb89 bnez a5,5c9c - 5c8c: a80d j 5cbe - { - if (n == 0 || *s1 == '\0') - 5c8e: 00d50d63 beq a0,a3,5ca8 - while (n-- > 0 && *s1 && *s1 == *s2) - 5c92: 00154783 lbu a5,1(a0) - break; - s1++; - 5c96: 0505 addi a0,a0,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 5c98: cf91 beqz a5,5cb4 - 5c9a: 85b2 mv a1,a2 - 5c9c: 0005c703 lbu a4,0(a1) - s2++; - 5ca0: 00158613 addi a2,a1,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 5ca4: fef705e3 beq a4,a5,5c8e - } - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5ca8: 0007851b sext.w a0,a5 - 5cac: 9d19 subw a0,a0,a4 - 5cae: 8082 ret - return 0; - 5cb0: 4501 li a0,0 -} - 5cb2: 8082 ret - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5cb4: 0015c703 lbu a4,1(a1) - 5cb8: 4501 li a0,0 - 5cba: 9d19 subw a0,a0,a4 - 5cbc: 8082 ret - 5cbe: 0005c703 lbu a4,0(a1) - 5cc2: 4501 li a0,0 - 5cc4: b7e5 j 5cac - -0000000000005cc6 : - -char *strchr(const char *s, int c) -{ - while (*s != (char)c) - 5cc6: 0ff5f593 zext.b a1,a1 - 5cca: a019 j 5cd0 - { - if (!*s++) - 5ccc: 0505 addi a0,a0,1 - 5cce: c791 beqz a5,5cda - while (*s != (char)c) - 5cd0: 00054783 lbu a5,0(a0) - 5cd4: feb79ce3 bne a5,a1,5ccc - 5cd8: 8082 ret - return NULL; - 5cda: 4501 li a0,0 - } - return (char *)s; -} - 5cdc: 8082 ret - -0000000000005cde : - -char *strrchr(const char *s, int c) -{ - 5cde: 87aa mv a5,a0 - const char *last = NULL; - do - { - if (*s == (char)c) - 5ce0: 0ff5f593 zext.b a1,a1 - const char *last = NULL; - 5ce4: 4501 li a0,0 - if (*s == (char)c) - 5ce6: 0007c703 lbu a4,0(a5) - 5cea: 00e59363 bne a1,a4,5cf0 - last = s; - 5cee: 853e mv a0,a5 - } while (*s++); - 5cf0: 0785 addi a5,a5,1 - 5cf2: fb75 bnez a4,5ce6 - - return (char *)last; -} - 5cf4: 8082 ret - -0000000000005cf6 : - while (*p) - 5cf6: 0005c883 lbu a7,0(a1) - 5cfa: 04088a63 beqz a7,5d4e - const char *p = s; - 5cfe: 87ae mv a5,a1 - while (*p) - 5d00: 0017c703 lbu a4,1(a5) - p++; - 5d04: 0785 addi a5,a5,1 - while (*p) - 5d06: ff6d bnez a4,5d00 - return (size_t)(p - s); - 5d08: 40b78833 sub a6,a5,a1 - - -char *strstr(const char *haystack, const char *needle) -{ - size_t n_len = strlen(needle); - if (n_len == 0) - 5d0c: 04b78163 beq a5,a1,5d4e - return (char *)haystack; - - for (; *haystack; haystack++) - 5d10: 00054783 lbu a5,0(a0) - 5d14: cf85 beqz a5,5d4c - 5d16: 187d addi a6,a6,-1 - 5d18: 982a add a6,a6,a0 - { - if (*haystack != *needle) - 5d1a: 02f89463 bne a7,a5,5d42 - while (n-- > 0 && *s1 && *s1 == *s2) - 5d1e: 00054703 lbu a4,0(a0) - 5d22: 8646 mv a2,a7 - 5d24: 86ae mv a3,a1 - 5d26: 87aa mv a5,a0 - 5d28: eb11 bnez a4,5d3c - 5d2a: a821 j 5d42 - if (n == 0 || *s1 == '\0') - 5d2c: 03078163 beq a5,a6,5d4e - while (n-- > 0 && *s1 && *s1 == *s2) - 5d30: 0017c703 lbu a4,1(a5) - return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5d34: 0006c603 lbu a2,0(a3) - s1++; - 5d38: 0785 addi a5,a5,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 5d3a: cb19 beqz a4,5d50 - s2++; - 5d3c: 0685 addi a3,a3,1 - while (n-- > 0 && *s1 && *s1 == *s2) - 5d3e: fee607e3 beq a2,a4,5d2c - for (; *haystack; haystack++) - 5d42: 00154783 lbu a5,1(a0) - 5d46: 0805 addi a6,a6,1 - 5d48: 0505 addi a0,a0,1 - 5d4a: fbe1 bnez a5,5d1a - continue; - - if (strncmp(haystack, needle, n_len) == 0) - return (char *)haystack; - } - return NULL; - 5d4c: 4501 li a0,0 -} - 5d4e: 8082 ret - if (strncmp(haystack, needle, n_len) == 0) - 5d50: de7d beqz a2,5d4e - for (; *haystack; haystack++) - 5d52: 00154783 lbu a5,1(a0) - 5d56: 0805 addi a6,a6,1 - 5d58: 0505 addi a0,a0,1 - 5d5a: f3e1 bnez a5,5d1a - 5d5c: bfc5 j 5d4c - -0000000000005d5e : - -char *strdup(const char *s) -{ - 5d5e: 1101 addi sp,sp,-32 - 5d60: e426 sd s1,8(sp) - 5d62: ec06 sd ra,24(sp) - 5d64: e822 sd s0,16(sp) - while (*p) - 5d66: 00054783 lbu a5,0(a0) -{ - 5d6a: 84aa mv s1,a0 - while (*p) - 5d6c: cb8d beqz a5,5d9e - const char *p = s; - 5d6e: 862a mv a2,a0 - while (*p) - 5d70: 00164783 lbu a5,1(a2) - p++; - 5d74: 0605 addi a2,a2,1 - while (*p) - 5d76: ffed bnez a5,5d70 - return (size_t)(p - s); - 5d78: 8e05 sub a2,a2,s1 - size_t len = strlen(s) + 1; - 5d7a: 00160413 addi s0,a2,1 - char *new_str = (char *)malloc(len); - 5d7e: 8522 mv a0,s0 - 5d80: f4eff0ef jal 54ce - if (new_str == NULL) - 5d84: c901 beqz a0,5d94 - return memmove(vdst, vsrc, n); - 5d86: 8622 mv a2,s0 - return NULL; - - return (char *)memcpy(new_str, s, len); -} - 5d88: 6442 ld s0,16(sp) - 5d8a: 60e2 ld ra,24(sp) - return memmove(vdst, vsrc, n); - 5d8c: 85a6 mv a1,s1 -} - 5d8e: 64a2 ld s1,8(sp) - 5d90: 6105 addi sp,sp,32 - return memmove(vdst, vsrc, n); - 5d92: bbb9 j 5af0 -} - 5d94: 60e2 ld ra,24(sp) - 5d96: 6442 ld s0,16(sp) - 5d98: 64a2 ld s1,8(sp) - 5d9a: 6105 addi sp,sp,32 - 5d9c: 8082 ret - while (*p) - 5d9e: 4405 li s0,1 - 5da0: bff9 j 5d7e - -0000000000005da2 : - 5da2: 0005c783 lbu a5,0(a1) - -size_t strlcpy(char *dst, const char *src, size_t size) -{ - 5da6: 1101 addi sp,sp,-32 - 5da8: ec06 sd ra,24(sp) - 5daa: e822 sd s0,16(sp) - 5dac: 86b2 mv a3,a2 - while (*p) - 5dae: cf8d beqz a5,5de8 - const char *p = s; - 5db0: 87ae mv a5,a1 - while (*p) - 5db2: 0017c703 lbu a4,1(a5) - p++; - 5db6: 0785 addi a5,a5,1 - while (*p) - 5db8: ff6d bnez a4,5db2 - return (size_t)(p - s); - 5dba: 40b78433 sub s0,a5,a1 - size_t src_len = strlen(src); - - if (size > 0) - 5dbe: c285 beqz a3,5dde - 5dc0: e426 sd s1,8(sp) - { - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5dc2: fff68613 addi a2,a3,-1 - memcpy(dst, src, copy_len); - dst[copy_len] = '\0'; - 5dc6: 00c504b3 add s1,a0,a2 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5dca: 00d47563 bgeu s0,a3,5dd4 - dst[copy_len] = '\0'; - 5dce: 008504b3 add s1,a0,s0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5dd2: 8622 mv a2,s0 - return memmove(vdst, vsrc, n); - 5dd4: d1dff0ef jal 5af0 - dst[copy_len] = '\0'; - 5dd8: 00048023 sb zero,0(s1) - } - - return src_len; - 5ddc: 64a2 ld s1,8(sp) -} - 5dde: 60e2 ld ra,24(sp) - 5de0: 8522 mv a0,s0 - 5de2: 6442 ld s0,16(sp) - 5de4: 6105 addi sp,sp,32 - 5de6: 8082 ret - if (size > 0) - 5de8: e219 bnez a2,5dee - return (size_t)(p - s); - 5dea: 4401 li s0,0 - 5dec: bfcd j 5dde - 5dee: e426 sd s1,8(sp) - 5df0: 4401 li s0,0 - if (size > 0) - 5df2: 84aa mv s1,a0 - size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5df4: 4601 li a2,0 - 5df6: bff9 j 5dd4 - -0000000000005df8 : - while (*p) - 5df8: 0005c783 lbu a5,0(a1) - -size_t strlcat(char *dst, const char *src, size_t size) -{ - 5dfc: 7179 addi sp,sp,-48 - 5dfe: e84a sd s2,16(sp) - 5e00: f406 sd ra,40(sp) - 5e02: f022 sd s0,32(sp) - 5e04: ec26 sd s1,24(sp) - 5e06: 892a mv s2,a0 - while (*p) - 5e08: c7b5 beqz a5,5e74 - const char *p = s; - 5e0a: 87ae mv a5,a1 - while (*p) - 5e0c: 0017c703 lbu a4,1(a5) - p++; - 5e10: 0785 addi a5,a5,1 - while (*p) - 5e12: ff6d bnez a4,5e0c - return (size_t)(p - s); - 5e14: 40b784b3 sub s1,a5,a1 - size_t dst_len = 0; - 5e18: 4401 li s0,0 - size_t src_len = strlen(src); - - while (dst_len < size && dst[dst_len] != '\0') - 5e1a: e609 bnez a2,5e24 - 5e1c: a0a1 j 5e64 - dst_len++; - 5e1e: 0405 addi s0,s0,1 - while (dst_len < size && dst[dst_len] != '\0') - 5e20: 04860263 beq a2,s0,5e64 - 5e24: 00890533 add a0,s2,s0 - 5e28: 00054783 lbu a5,0(a0) - 5e2c: fbed bnez a5,5e1e - - if (dst_len == size) - 5e2e: 02860b63 beq a2,s0,5e64 - 5e32: e44e sd s3,8(sp) - return size + src_len; - - size_t space_left = size - dst_len; - 5e34: 408607b3 sub a5,a2,s0 - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 5e38: 89a6 mv s3,s1 - 5e3a: 02f4f263 bgeu s1,a5,5e5e - - memcpy(dst + dst_len, src, copy_len); - dst[dst_len + copy_len] = '\0'; - 5e3e: 994e add s2,s2,s3 - 5e40: 9922 add s2,s2,s0 - return memmove(vdst, vsrc, n); - 5e42: 864e mv a2,s3 - 5e44: cadff0ef jal 5af0 - dst[dst_len + copy_len] = '\0'; - 5e48: 00090023 sb zero,0(s2) # 1000 - - return dst_len + src_len; - 5e4c: 00940533 add a0,s0,s1 -} - 5e50: 70a2 ld ra,40(sp) - 5e52: 7402 ld s0,32(sp) - return dst_len + src_len; - 5e54: 69a2 ld s3,8(sp) -} - 5e56: 64e2 ld s1,24(sp) - 5e58: 6942 ld s2,16(sp) - 5e5a: 6145 addi sp,sp,48 - 5e5c: 8082 ret - size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 5e5e: fff78993 addi s3,a5,-1 - 5e62: bff1 j 5e3e -} - 5e64: 70a2 ld ra,40(sp) - 5e66: 7402 ld s0,32(sp) - 5e68: 6942 ld s2,16(sp) - return size + src_len; - 5e6a: 00960533 add a0,a2,s1 -} - 5e6e: 64e2 ld s1,24(sp) - 5e70: 6145 addi sp,sp,48 - 5e72: 8082 ret - while (*p) - 5e74: 4481 li s1,0 - 5e76: b74d j 5e18 - -0000000000005e78 : -size_t strspn(const char *s, const char *accept) -{ - const char *p = s; - const char *a; - - while (*p) - 5e78: 00054683 lbu a3,0(a0) - 5e7c: c695 beqz a3,5ea8 - { - for (a = accept; *a; a++) - 5e7e: 0005c803 lbu a6,0(a1) - 5e82: 862a mv a2,a0 - 5e84: 00080f63 beqz a6,5ea2 - 5e88: 87ae mv a5,a1 - 5e8a: 8742 mv a4,a6 - 5e8c: a021 j 5e94 - 5e8e: 0007c703 lbu a4,0(a5) - 5e92: cb01 beqz a4,5ea2 - 5e94: 0785 addi a5,a5,1 - { - if (*p == *a) - 5e96: fee69ce3 bne a3,a4,5e8e - while (*p) - 5e9a: 00164683 lbu a3,1(a2) - break; - } - if (*a == '\0') - return (size_t)(p - s); - p++; - 5e9e: 0605 addi a2,a2,1 - while (*p) - 5ea0: f6e5 bnez a3,5e88 - } - return (size_t)(p - s); - 5ea2: 40a60533 sub a0,a2,a0 - 5ea6: 8082 ret - while (*p) - 5ea8: 4501 li a0,0 -} - 5eaa: 8082 ret - -0000000000005eac : -size_t strcspn(const char *s, const char *reject) -{ - const char *p = s; - const char *r; - - while (*p) - 5eac: 00054683 lbu a3,0(a0) - 5eb0: ce85 beqz a3,5ee8 - { - for (r = reject; *r; r++) - 5eb2: 0005c803 lbu a6,0(a1) - const char *p = s; - 5eb6: 862a mv a2,a0 - for (r = reject; *r; r++) - 5eb8: 02080363 beqz a6,5ede - 5ebc: 87ae mv a5,a1 - 5ebe: 8742 mv a4,a6 - 5ec0: a021 j 5ec8 - 5ec2: 0007c703 lbu a4,0(a5) - 5ec6: c719 beqz a4,5ed4 - 5ec8: 0785 addi a5,a5,1 - { - if (*p == *r) - 5eca: fed71ce3 bne a4,a3,5ec2 - return (size_t)(p - s); - } - p++; - } - return (size_t)(p - s); - 5ece: 40a60533 sub a0,a2,a0 - 5ed2: 8082 ret - while (*p) - 5ed4: 00164683 lbu a3,1(a2) - p++; - 5ed8: 0605 addi a2,a2,1 - while (*p) - 5eda: f2ed bnez a3,5ebc - 5edc: bfcd j 5ece - 5ede: 00164683 lbu a3,1(a2) - p++; - 5ee2: 0605 addi a2,a2,1 - while (*p) - 5ee4: feed bnez a3,5ede - 5ee6: b7e5 j 5ece - 5ee8: 4501 li a0,0 -} - 5eea: 8082 ret - -0000000000005eec : - -char *strpbrk(const char *s, const char *accept) -{ - const char *a; - while (*s) - 5eec: 00054683 lbu a3,0(a0) - 5ef0: c295 beqz a3,5f14 - { - for (a = accept; *a; a++) - 5ef2: 0005c603 lbu a2,0(a1) - 5ef6: c20d beqz a2,5f18 - 5ef8: 87ae mv a5,a1 - 5efa: 8732 mv a4,a2 - 5efc: a021 j 5f04 - 5efe: 0007c703 lbu a4,0(a5) - 5f02: c709 beqz a4,5f0c - 5f04: 0785 addi a5,a5,1 - { - if (*s == *a) - 5f06: fed71ce3 bne a4,a3,5efe - return (char *)s; - } - s++; - } - return NULL; -} - 5f0a: 8082 ret - while (*s) - 5f0c: 00154683 lbu a3,1(a0) - s++; - 5f10: 0505 addi a0,a0,1 - while (*s) - 5f12: f2fd bnez a3,5ef8 - return NULL; - 5f14: 4501 li a0,0 -} - 5f16: 8082 ret - while (*s) - 5f18: 00154683 lbu a3,1(a0) - s++; - 5f1c: 0505 addi a0,a0,1 - while (*s) - 5f1e: feed bnez a3,5f18 - 5f20: bfd5 j 5f14 - -0000000000005f22 : -char *strtok(char *str, const char *delim) -{ - static char *olds; - char *token; - - if (str == NULL) - 5f22: 00003897 auipc a7,0x3 - 5f26: f3688893 addi a7,a7,-202 # 8e58 - 5f2a: cd25 beqz a0,5fa2 - while (*p) - 5f2c: 00054683 lbu a3,0(a0) - 5f30: c295 beqz a3,5f54 - for (a = accept; *a; a++) - 5f32: 0005c803 lbu a6,0(a1) - 5f36: 02080463 beqz a6,5f5e - 5f3a: 87ae mv a5,a1 - 5f3c: 8742 mv a4,a6 - 5f3e: a021 j 5f46 - 5f40: 0007c703 lbu a4,0(a5) - 5f44: cf09 beqz a4,5f5e - 5f46: 0785 addi a5,a5,1 - if (*p == *a) - 5f48: fee69ce3 bne a3,a4,5f40 - while (*p) - 5f4c: 00154683 lbu a3,1(a0) - p++; - 5f50: 0505 addi a0,a0,1 - while (*p) - 5f52: f6e5 bnez a3,5f3a - 5f54: 87aa mv a5,a0 - str = olds; - - str += strspn(str, delim); - if (*str == '\0') - { - olds = str; - 5f56: 00f8b023 sd a5,0(a7) - return NULL; - 5f5a: 4501 li a0,0 - *str = '\0'; - olds = str + 1; - } - - return token; -} - 5f5c: 8082 ret - if (*str == '\0') - 5f5e: 00054603 lbu a2,0(a0) - 5f62: da6d beqz a2,5f54 - 5f64: 86aa mv a3,a0 - for (a = accept; *a; a++) - 5f66: 04080163 beqz a6,5fa8 - 5f6a: 8742 mv a4,a6 - 5f6c: 87ae mv a5,a1 - 5f6e: a021 j 5f76 - 5f70: 0007c703 lbu a4,0(a5) - 5f74: cb19 beqz a4,5f8a - 5f76: 0785 addi a5,a5,1 - if (*s == *a) - 5f78: fee61ce3 bne a2,a4,5f70 - olds = str + 1; - 5f7c: 00168793 addi a5,a3,1 - *str = '\0'; - 5f80: 00068023 sb zero,0(a3) - olds = str; - 5f84: 00f8b023 sd a5,0(a7) -} - 5f88: 8082 ret - while (*s) - 5f8a: 0016c603 lbu a2,1(a3) - s++; - 5f8e: 0685 addi a3,a3,1 - while (*s) - 5f90: fe69 bnez a2,5f6a - 5f92: 87aa mv a5,a0 - while (*s != (char)c) - 5f94: 0017c703 lbu a4,1(a5) - if (!*s++) - 5f98: 0785 addi a5,a5,1 - while (*s != (char)c) - 5f9a: ff6d bnez a4,5f94 - olds = str; - 5f9c: 00f8b023 sd a5,0(a7) -} - 5fa0: 8082 ret - str = olds; - 5fa2: 0008b503 ld a0,0(a7) - 5fa6: b759 j 5f2c - while (*s) - 5fa8: 0016c603 lbu a2,1(a3) - s++; - 5fac: 0685 addi a3,a3,1 - while (*s) - 5fae: fe6d bnez a2,5fa8 - 5fb0: b7cd j 5f92 - -0000000000005fb2 : - -char *strerror(int errnum) -{ - 5fb2: 87aa mv a5,a0 - - switch (errnum) - 5fb4: cd09 beqz a0,5fce - 5fb6: 4731 li a4,12 - 5fb8: 00000517 auipc a0,0x0 - 5fbc: 2c050513 addi a0,a0,704 # 6278 <_GLOBAL__sub_I__ZSt3cin+0x288> - 5fc0: 00e78b63 beq a5,a4,5fd6 - return "Success"; - // case EINVAL: return "Invalid argument"; - case ENOMEM: return "Out of memory"; - - default: - return "Unknown error"; - 5fc4: 00000517 auipc a0,0x0 - 5fc8: 2c450513 addi a0,a0,708 # 6288 <_GLOBAL__sub_I__ZSt3cin+0x298> - 5fcc: 8082 ret - return "Success"; - 5fce: 00000517 auipc a0,0x0 - 5fd2: 2a250513 addi a0,a0,674 # 6270 <_GLOBAL__sub_I__ZSt3cin+0x280> - } - 5fd6: 8082 ret - -0000000000005fd8 <_Znwm>: -#include "ulib/stdlib.h" - -void *operator new(unsigned long n) -{ - return malloc(n); - 5fd8: cf6ff06f j 54ce - -0000000000005fdc <_Znam>: -} - -void *operator new[](unsigned long n) - 5fdc: cf2ff06f j 54ce - -0000000000005fe0 <_ZdlPv>: - return malloc(n); -} - -void operator delete(void *p) -{ - free(p); - 5fe0: c78ff06f j 5458 - -0000000000005fe4 <_ZdaPv>: -} - -void operator delete[](void *p) - 5fe4: c74ff06f j 5458 - -0000000000005fe8 <_ZdlPvm>: - free(p); -} - -void operator delete(void *p, unsigned long) -{ - free(p); - 5fe8: c70ff06f j 5458 - -0000000000005fec <_ZdaPvm>: -} - -void operator delete[](void *p, unsigned long) - 5fec: c6cff06f j 5458 - -0000000000005ff0 <_GLOBAL__sub_I__ZSt3cin>: -#include "ulib/iostream" - -namespace std -{ - istream cin(stdin); - 5ff0: 00003797 auipc a5,0x3 - 5ff4: cb87b783 ld a5,-840(a5) # 8ca8 <_GLOBAL_OFFSET_TABLE_+0x10> - 5ff8: 6390 ld a2,0(a5) - ostream cout(stdout); - 5ffa: 00003797 auipc a5,0x3 - 5ffe: ca67b783 ld a5,-858(a5) # 8ca0 <_GLOBAL_OFFSET_TABLE_+0x8> - 6002: 6394 ld a3,0(a5) - ostream cerr(stderr); - 6004: 00003797 auipc a5,0x3 - 6008: cac7b783 ld a5,-852(a5) # 8cb0 <_GLOBAL_OFFSET_TABLE_+0x18> - 600c: 6398 ld a4,0(a5) - - class istream{ - private: - FILE* _stream; - public: - istream(FILE *f) : _stream(f) {} - 600e: 00003797 auipc a5,0x3 - 6012: e5278793 addi a5,a5,-430 # 8e60 <_ZSt3cin> - 6016: e390 sd a2,0(a5) - ostream(FILE* f) : _stream(f) {} - 6018: e794 sd a3,8(a5) - 601a: eb98 sd a4,16(a5) -} // namespace std - 601c: 8082 ret diff --git a/build/user/sh.o b/build/user/sh.o deleted file mode 100644 index edfee62..0000000 Binary files a/build/user/sh.o and /dev/null differ diff --git a/build/user/sh.sym b/build/user/sh.sym deleted file mode 100644 index f7cf8bd..0000000 --- a/build/user/sh.sym +++ /dev/null @@ -1,223 +0,0 @@ -0000000000000000 .text -0000000000006020 .rodata -00000000000069a0 .eh_frame -0000000000007e38 .data -0000000000008c98 .got -0000000000008cb8 .got.plt -0000000000008cc8 .init_array -0000000000008cd0 .bss -0000000000000000 .debug_info -0000000000000000 .debug_abbrev -0000000000000000 .debug_loclists -0000000000000000 .debug_aranges -0000000000000000 .debug_rnglists -0000000000000000 .debug_line -0000000000000000 .debug_str -0000000000000000 .debug_line_str -0000000000000000 .comment -0000000000000000 .riscv.attributes -0000000000000000 sh.cc -0000000000008cd0 _ZZ4mainE3buf -0000000000000000 entry.o -0000000000000000 usys.o -0000000000000000 stdio.c -0000000000001190 stbsp__clamp_callback -00000000000011de stbsp__count_clamp_callback -00000000000011ea stbsp__real_to_str -00000000000018be _in_char.part.0 -0000000000001904 _skip_space -0000000000001978 _vscanf_core.constprop.0 -00000000000021e8 _out_char -000000000000405c _vprintf_core.constprop.0.isra.0 -0000000000007f18 stbsp__digitpair -0000000000007fe4 stbsp__period -0000000000007fe5 stbsp__comma -0000000000007fe8 hexu.1 -0000000000008000 hex.0 -0000000000008018 _stderr -0000000000008438 _stdout -0000000000008858 _stdin -0000000000006508 stbsp__bot -00000000000065c0 stbsp__negbot -0000000000006670 stbsp__negboterr -0000000000006720 stbsp__negtop -0000000000006788 stbsp__negtoperr -00000000000067f0 stbsp__top -0000000000006858 stbsp__toperr -00000000000068c0 stbsp__powten -0000000000000000 stdlib.c -000000000000526a strtoull.part.0 -0000000000008c90 next -0000000000008d3c __atexit_func_count -0000000000008d40 __atexit_funcs -0000000000008e40 freep -0000000000008e48 base -0000000000000000 string.c -0000000000008e58 olds.0 -0000000000000000 cxx.cc -0000000000000000 iostream.cpp -0000000000005ff0 _GLOBAL__sub_I__ZSt3cin -0000000000008c98 _GLOBAL_OFFSET_TABLE_ -0000000000000324 _ZN11PipeCommand3runEv -0000000000005b8a strcpy -00000000000048fa printf -0000000000008c78 stdout -0000000000006964 STDOUT_FD -0000000000005240 ungetc -0000000000005fb2 strerror -0000000000005af0 memmove -00000000000048a4 snprintf -0000000000001118 mknod -0000000000005742 atol -0000000000005450 getenv -0000000000005fd8 _Znwm -0000000000000222 _ZN11PipeCommandD0Ev -0000000000008d38 errno -00000000000059a2 labs -000000000000591c bsearch -0000000000001150 getpid -000000000000583e qsort -0000000000004b38 fscanf -0000000000004daa fgets -0000000000008e70 _ZSt4cerr -0000000000005b2c memcpy -000000000000018c _ZN11ExecCommand3runEv -0000000000000256 _ZN11ListCommandD0Ev -0000000000005454 system -0000000000005220 feof -00000000000054ce malloc -0000000000001160 sleep -000000000000005c _Z6getcmdPci -000000000000485a vsnprintf -000000000000565e strtoll -0000000000005708 strtoul -0000000000005a54 wctomb -0000000000000754 _ZN6Parser10parse_pipeEPPcS0_ -0000000000005aa0 wcstombs -00000000000001c4 _ZN11ExecCommandD0Ev -0000000000004ac2 fflush -0000000000005a62 mbstowcs -0000000000001180 lseek -0000000000005fe0 _ZdlPv -0000000000005444 abort -000000000000572c strtol -00000000000010e0 pipe -0000000000007f10 SYMBOLS -0000000000005a22 mblen -0000000000005cde strrchr -0000000000007e90 _ZTV11PipeCommand -0000000000005594 calloc -000000000000574e strtod -0000000000001178 disk_test -00000000000010f0 write -0000000000005828 atof -0000000000001128 fstat -0000000000004b06 fprintf -0000000000001100 kill -00000000000000c0 _ZN11PipeCommandD2Ev -0000000000005bce strcat -0000000000000142 _ZN12RedirCommand3runEv -0000000000000b84 _ZN6Parser10parse_lineEPPcS0_ -0000000000001140 chdir -0000000000005128 fseek -0000000000003ff8 stbsp_vsprintf -0000000000001108 exec -0000000000005b52 memchr -0000000000008c80 stdin -00000000000010d8 wait -0000000000003f12 stbsp_vsnprintf -00000000000010be _start -000000000000522a ferror -0000000000005cf6 strstr -00000000000059ec rand -00000000000010e8 read -0000000000005da2 strlcpy -00000000000001cc _ZN12RedirCommandD0Ev -0000000000005c7e strncmp -00000000000022bc stbsp_set_separators -0000000000005fe8 _ZdlPvm -0000000000005b9c strncpy -0000000000001120 unlink -00000000000055dc realloc -0000000000000128 _ZN11BackCommandD1Ev -0000000000005f22 strtok -0000000000005b2e memcmp -00000000000010d0 fork -0000000000004934 sscanf -0000000000005c00 strncat -0000000000004e86 fread -0000000000001158 sbrk -00000000000000f4 _ZN11ListCommandD1Ev -0000000000005d5e strdup -0000000000007e40 _ZTV11ExecCommand -0000000000001168 uptime -000000000000563a strtoull -0000000000003ee8 stbsp_sprintf -0000000000004996 fopen -0000000000005ad8 memset -0000000000000e62 main -000000000000519c ftell -0000000000005a14 srand -0000000000005df8 strlcat -0000000000005234 clearerr -0000000000005fe4 _ZdaPv -0000000000004a5a fclose -00000000000000a8 _ZN12RedirCommandD2Ev -000000000000001c _Z13fork_or_panicv -0000000000001170 putc -0000000000005c46 strcmp -0000000000001188 shutdown -0000000000001148 dup -0000000000000128 _ZN11BackCommandD2Ev -00000000000001f8 _ZN11BackCommandD0Ev -0000000000004d14 fgetc -0000000000004006 sprintf -000000000000582c strtof -00000000000053ea atexit -0000000000005eac strcspn -00000000000000c0 _ZN11PipeCommandD1Ev -0000000000003fd8 stbsp_snprintf -00000000000000f4 _ZN11ListCommandD2Ev -0000000000008e60 _ZSt3cin -0000000000004964 scanf -0000000000008c88 stderr -00000000000002d8 _ZN11ListCommand3runEv -0000000000000140 _ZN11ExecCommandD1Ev -00000000000059cc ldiv -0000000000007e68 _ZTV12RedirCommand -0000000000004b6a fputc -0000000000005fdc _Znam -00000000000059dc lldiv -0000000000004fa0 fwrite -0000000000000140 _ZN11ExecCommandD2Ev -00000000000051c8 rewind -0000000000007f08 WHITESPACE -000000000000041a _ZN6Parser12parse_redirsEP7CommandPPcS2_ -0000000000007eb8 _ZTV11ListCommand -0000000000008e68 _ZSt4cout -0000000000001130 link -000000000000540e exit -00000000000010c8 sys_exit -00000000000059ac llabs -0000000000000000 _Z5panicPKc -000000000000572e atoi -0000000000006960 STDERR_FD -0000000000007ee0 _ZTV11BackCommand -0000000000005e78 strspn -000000000000028a _ZN11BackCommand3runEv -0000000000005b70 strlen -00000000000022ce stbsp_vsprintfcb -0000000000001110 open -0000000000006968 STDIN_FD -0000000000005748 atoll -00000000000059b6 div -0000000000005998 abs -0000000000005cc6 strchr -0000000000004c2e fputs -0000000000005fec _ZdaPvm -0000000000001138 mkdir -00000000000000a8 _ZN12RedirCommandD1Ev -00000000000010f8 close -0000000000005a36 mbtowc -0000000000005eec strpbrk -0000000000005458 free diff --git a/build/user/usys.o b/build/user/usys.o deleted file mode 100644 index 42b9e3a..0000000 Binary files a/build/user/usys.o and /dev/null differ diff --git a/fs.img b/fs.img deleted file mode 100644 index 7e5be8a..0000000 Binary files a/fs.img and /dev/null differ diff --git a/src/fs/fat32.cc b/src/fs/fat32.cc index 5c70f5a..17b543c 100644 --- a/src/fs/fat32.cc +++ b/src/fs/fat32.cc @@ -141,8 +141,6 @@ uint32 FAT32FileSystem::next_cluster(uint32 cluster) 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; @@ -177,6 +175,20 @@ int FAT32Inode::read(char *dst, uint32 off, uint32 n, int isUser) if (first_clus == 0) return 0; + // [FIX] 只有非目录文件才检查 size 边界 + // 目录文件 size 可能为 0,应允许读取直到簇链结束 + if (type != T_DIR) + { + if (off >= size) + { + return 0; + } + if (off + n > size) + { + n = size - off; + } + } + uint32 tot = 0; uint32 clus = first_clus; uint32 clus_sz = fs->bytes_per_cluster; @@ -303,7 +315,7 @@ uint32 FAT32FileSystem::alloc_cluster() uint32 current_fat_sec = fat_start_sector + i; struct Buf *b = BufferCache::bread(0, current_fat_sec / 2); uint32 *table = (uint32 *)(b->data + (current_fat_sec % 2) * 512); - for(uint32 j = 0; j < fat_entries_per_sector; j++) + for (uint32 j = 0; j < fat_entries_per_sector; j++) { if (i == 0 && j < 2) continue; @@ -359,7 +371,6 @@ void FAT32FileSystem::free_cluster_chain(uint32 cluster) cluster = next; } - } void FAT32Inode::update() @@ -654,7 +665,9 @@ int FAT32Inode::unlink(const char *name) uint32_t clus = first_clus; bool found = false; - struct Buf *target_buf = nullptr; + + // [FIX] Deadlock prevention: Do not hold buffer while looking up inode + uint32_t target_block = 0; uint32_t target_offset = 0; struct FAT32_DirEnt de; @@ -681,16 +694,16 @@ int FAT32Inode::unlink(const char *name) if (match_name(de.name, name)) { - target_buf = b; + target_block = (sec + i) / 2; target_offset = ((sec + i) % 2) * 512 + off; found = true; break; } } + BufferCache::brelse(b); // Always release buffer if (found) break; - BufferCache::brelse(b); } if (found) @@ -701,7 +714,7 @@ int FAT32Inode::unlink(const char *name) return -1; } - if (found && target_buf) + if (found) { Inode *target_ip = lookup(name); if (target_ip) @@ -710,7 +723,6 @@ int FAT32Inode::unlink(const char *name) if (target_ip->type == T_DIR) { VFS::iunlockput(target_ip); - BufferCache::brelse(target_buf); return -1; } @@ -719,6 +731,8 @@ int FAT32Inode::unlink(const char *name) VFS::iunlockput(target_ip); } + // Re-read buffer to mark deletion + struct Buf *target_buf = BufferCache::bread(dev, target_block); uint8_t *ptr = (uint8_t *)target_buf->data + target_offset; *ptr = 0xE5; diff --git a/src/fs/file.cc b/src/fs/file.cc index 623b535..9f12dc1 100644 --- a/src/fs/file.cc +++ b/src/fs/file.cc @@ -217,6 +217,16 @@ namespace FileTable if (f->type == FD_INODE) { VFS::ilock(f->ip); + + if (f->ip->type == T_DEVICE) + { + if (f->ip->major == 1) + { + VFS::iunlock(f->ip); + return Drivers::console_read(addr, n); + } + } + int r = f->ip->read((char*)addr, f->off, n, 1); if(r > 0) { @@ -240,6 +250,37 @@ namespace FileTable if (f->type == FD_INODE) { VFS::ilock(f->ip); + + if (f->ip->type == T_DEVICE) + { + if (f->ip->major == 1) // Console + { + VFS::iunlock(f->ip); + struct Proc *proc = myproc(); + constexpr int MAX_WRITE_BUF = 128; + char buf[MAX_WRITE_BUF]; + int i = 0; + while (i < n) + { + int len = n - i; + if (len > MAX_WRITE_BUF) + len = MAX_WRITE_BUF; + + if (VM::copyin(proc->pagetable, buf, addr + i, static_cast(len)) < 0) + { + return -1; + } + + for (int j = 0; j < len; j++) + { + Drivers::uart_putc(buf[j]); + } + i += len; + } + return n; + } + } + int r = f->ip->write((char *)addr, f->off, n, 1); if (r > 0) { diff --git a/src/kernel/syscall.cc b/src/kernel/syscall.cc index 259a5e6..9f88649 100644 --- a/src/kernel/syscall.cc +++ b/src/kernel/syscall.cc @@ -503,7 +503,9 @@ static uint64_t sys_read() // get param: fd, buf, len if (argint(0, &fd) < 0 || argint(2, &n) < 0 || argint(1, (int *)&p) < 0) return -1; - + + p = argraw(1); + struct Proc* proc = myproc(); if (fd == 0 && proc->ofile[fd] == nullptr) { diff --git a/src/user/cat.cc b/src/user/cat.cc new file mode 100644 index 0000000..67feb1c --- /dev/null +++ b/src/user/cat.cc @@ -0,0 +1,48 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "user/user.h" +#include "common/fcntl.h" + +char buf[512]; + +void cat(int fd) +{ + int n; + while ((n = read(fd, buf, sizeof(buf))) > 0) + { + if (write(1, buf, n) != n) + { + printf("cat: write error\n"); + exit(1); + } + } + if (n < 0) + { + printf("cat: read error\n"); + exit(1); + } +} + +int main(int argc, char *argv[]) +{ + int fd, i; + + if (argc <= 1) + { + cat(0); + exit(0); + } + + for (i = 1; i < argc; i++) + { + if ((fd = open(argv[i], O_RDONLY)) < 0) + { + printf("cat: cannot open %s\n", argv[i]); + exit(1); + } + cat(fd); + close(fd); + } + exit(0); +} \ No newline at end of file diff --git a/src/user/cp.cc b/src/user/cp.cc new file mode 100644 index 0000000..9f13bef --- /dev/null +++ b/src/user/cp.cc @@ -0,0 +1,48 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" +#include "common/fcntl.h" + +char buf[512]; + +int main(int argc, char *argv[]) +{ + int fd_src, fd_dst, n; + + if (argc != 3) + { + printf("Usage: cp src dst\n"); + exit(1); + } + + if ((fd_src = open(argv[1], O_RDONLY)) < 0) + { + printf("cp: cannot open source %s\n", argv[1]); + exit(1); + } + + if ((fd_dst = open(argv[2], O_WRONLY | O_CREATE | O_TRUNC)) < 0) + { + printf("cp: cannot create destination %s\n", argv[2]); + close(fd_src); + exit(1); + } + + while ((n = read(fd_src, buf, sizeof(buf))) > 0) + { + if (write(fd_dst, buf, n) != n) + { + printf("cp: write error\n"); + exit(1); + } + } + + if (n < 0) + { + printf("cp: read error\n"); + } + + close(fd_src); + close(fd_dst); + exit(0); +} \ No newline at end of file diff --git a/src/user/grep.cc b/src/user/grep.cc new file mode 100644 index 0000000..5ed61b4 --- /dev/null +++ b/src/user/grep.cc @@ -0,0 +1,68 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "user/user.h" +#include "common/fcntl.h" + +char buf[1024]; + +void grep(char *pattern, int fd) +{ + int n, m; + char *p, *q; + + m = 0; + while ((n = read(fd, buf + m, sizeof(buf) - m - 1)) > 0) + { + m += n; + buf[m] = '\0'; + p = buf; + while ((q = strchr(p, '\n')) != 0) + { + *q = 0; + if (strstr(p, pattern) != 0) + { + printf("%s\n", p); + } + p = q + 1; + } + if (p == buf) + m = 0; + if (m > 0) + { + m -= p - buf; + memmove(buf, p, m); + } + } +} + +int main(int argc, char *argv[]) +{ + int fd, i; + char *pattern; + + if (argc < 2) + { + printf("Usage: grep pattern [file...]\n"); + exit(1); + } + pattern = argv[1]; + + if (argc == 2) + { + grep(pattern, 0); // stdin + exit(0); + } + + for (i = 2; i < argc; i++) + { + if ((fd = open(argv[i], O_RDONLY)) < 0) + { + printf("grep: cannot open %s\n", argv[i]); + exit(1); + } + grep(pattern, fd); + close(fd); + } + exit(0); +} \ No newline at end of file diff --git a/src/user/kill.cc b/src/user/kill.cc new file mode 100644 index 0000000..18b7f02 --- /dev/null +++ b/src/user/kill.cc @@ -0,0 +1,23 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" + +int main(int argc, char *argv[]) +{ + int i; + + if (argc < 2) + { + printf("Usage: kill pid...\n"); + exit(1); + } + for (i = 1; i < argc; i++) + { + int pid = atoi(argv[i]); + if (kill(pid) < 0) + { + printf("kill: failed to kill %d\n", pid); + } + } + exit(0); +} \ No newline at end of file diff --git a/src/user/ln.cc b/src/user/ln.cc new file mode 100644 index 0000000..2370fdc --- /dev/null +++ b/src/user/ln.cc @@ -0,0 +1,18 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" + +int main(int argc, char *argv[]) +{ + if (argc != 3) + { + printf("Usage: ln old new\n"); + exit(1); + } + if (link(argv[1], argv[2]) < 0) + { + printf("link %s %s failed\n", argv[1], argv[2]); + exit(1); + } + exit(0); +} \ No newline at end of file diff --git a/src/user/mv.cc b/src/user/mv.cc new file mode 100644 index 0000000..2d30f01 --- /dev/null +++ b/src/user/mv.cc @@ -0,0 +1,26 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" + +int main(int argc, char *argv[]) +{ + if (argc != 3) + { + printf("Usage: mv old new\n"); + exit(1); + } + + if (link(argv[1], argv[2]) < 0) + { + printf("mv: failed to link %s to %s\n", argv[1], argv[2]); + exit(1); + } + + if (unlink(argv[1]) < 0) + { + printf("mv: failed to unlink %s\n", argv[1]); + exit(1); + } + + exit(0); +} \ No newline at end of file diff --git a/src/user/rm.cc b/src/user/rm.cc new file mode 100644 index 0000000..82b04c5 --- /dev/null +++ b/src/user/rm.cc @@ -0,0 +1,24 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" + +int main(int argc, char *argv[]) +{ + int i; + + if (argc < 2) + { + printf("Usage: rm files...\n"); + exit(1); + } + + for (i = 1; i < argc; i++) + { + if (unlink(argv[i]) < 0) + { + printf("rm: %s failed to delete\n", argv[i]); + exit(1); + } + } + exit(0); +} \ No newline at end of file diff --git a/src/user/sh.cc b/src/user/sh.cc index b4122f7..760f29e 100644 --- a/src/user/sh.cc +++ b/src/user/sh.cc @@ -67,11 +67,26 @@ struct RedirCommand : public Command void run() override { close(fd); - if (open(file, mode) < 0) + + int newfd = open(file, mode); + + if (newfd < 0) { printf("open %s failed\n", file); exit(1); } + + if (newfd != fd) + { + + if (dup(newfd) != fd) + { + printf("Redirection failed: could not move fd %d to %d\n", newfd, fd); + exit(1); + } + close(newfd); + } + sub_cmd->run(); } }; @@ -348,15 +363,6 @@ int main() { static char buf[100]; - // int fd; - // while ((fd = open("console", O_RDWR)) >= 0) - // { - // if (fd >= 3) - // { - // close(fd); - // break; - // } - // } printf(ANSI_GREEN"\n[Lume Shell] Welcome! \n"ANSI_RESET); printf(ANSI_YELLOW "[Lume Shell] Start your journey of exploration!"ANSI_RESET); diff --git a/src/user/touch.cc b/src/user/touch.cc new file mode 100644 index 0000000..b978f52 --- /dev/null +++ b/src/user/touch.cc @@ -0,0 +1,27 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "user/user.h" +#include "common/fcntl.h" + +int main(int argc, char *argv[]) +{ + int i, fd; + + if (argc < 2) + { + printf("Usage: touch files...\n"); + exit(1); + } + + for (i = 1; i < argc; i++) + { + fd = open(argv[i], O_CREATE | O_RDWR); + if (fd < 0) + { + printf("touch: cannot touch %s\n", argv[i]); + exit(1); + } + close(fd); + } + exit(0); +} \ No newline at end of file diff --git a/src/user/wc.cc b/src/user/wc.cc new file mode 100644 index 0000000..654aac2 --- /dev/null +++ b/src/user/wc.cc @@ -0,0 +1,56 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "user/user.h" +#include "common/fcntl.h" + +char buf[512]; + +void wc(int fd, char *name) +{ + int i, n; + int l, w, c, inword; + + l = w = c = 0; + inword = 0; + while ((n = read(fd, buf, sizeof(buf))) > 0) + { + for (i = 0; i < n; i++) + { + c++; + if (buf[i] == '\n') + l++; + if (strchr(" \r\t\n\v", buf[i])) + inword = 0; + else if (!inword) + { + w++; + inword = 1; + } + } + } + printf("%d %d %d %s\n", l, w, c, name); +} + +int main(int argc, char *argv[]) +{ + int fd, i; + + if (argc <= 1) + { + wc(0, ""); + exit(0); + } + + for (i = 1; i < argc; i++) + { + if ((fd = open(argv[i], O_RDONLY)) < 0) + { + printf("wc: cannot open %s\n", argv[i]); + exit(1); + } + wc(fd, argv[i]); + close(fd); + } + exit(0); +} \ No newline at end of file -- cgit v1.2.3