fs_server: file format elf32-littlearm Disassembly of section .init: 00008000 <_init>: 8000: e1a0c00d mov ip, sp 8004: e92ddff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} 8008: e24cb004 sub fp, ip, #4 800c: e24bd028 sub sp, fp, #40 ; 0x28 8010: e89d6ff0 ldm sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} 8014: e12fff1e bx lr Disassembly of section .text: 00008018 <__do_global_dtors_aux>: 8018: e92d4010 push {r4, lr} 801c: e59f4028 ldr r4, [pc, #40] ; 804c <__do_global_dtors_aux+0x34> 8020: e5d43000 ldrb r3, [r4] 8024: e3530000 cmp r3, #0 8028: 1a000005 bne 8044 <__do_global_dtors_aux+0x2c> 802c: e59f301c ldr r3, [pc, #28] ; 8050 <__do_global_dtors_aux+0x38> 8030: e3530000 cmp r3, #0 8034: 159f0018 ldrne r0, [pc, #24] ; 8054 <__do_global_dtors_aux+0x3c> 8038: 1320f000 nopne {0} 803c: e3a03001 mov r3, #1 8040: e5c43000 strb r3, [r4] 8044: e8bd4010 pop {r4, lr} 8048: e12fff1e bx lr 804c: 00013f14 .word 0x00013f14 8050: 00000000 .word 0x00000000 8054: 00013140 .word 0x00013140 00008058 : 8058: e59f3060 ldr r3, [pc, #96] ; 80c0 805c: e3530000 cmp r3, #0 8060: 0a000009 beq 808c 8064: e59f0058 ldr r0, [pc, #88] ; 80c4 8068: e92d4010 push {r4, lr} 806c: e59f1054 ldr r1, [pc, #84] ; 80c8 8070: e320f000 nop {0} 8074: e59f0050 ldr r0, [pc, #80] ; 80cc 8078: e5903000 ldr r3, [r0] 807c: e3530000 cmp r3, #0 8080: 1a000009 bne 80ac 8084: e8bd4010 pop {r4, lr} 8088: e12fff1e bx lr 808c: e59f0038 ldr r0, [pc, #56] ; 80cc 8090: e5903000 ldr r3, [r0] 8094: e3530000 cmp r3, #0 8098: 012fff1e bxeq lr 809c: e59f302c ldr r3, [pc, #44] ; 80d0 80a0: e3530000 cmp r3, #0 80a4: 012fff1e bxeq lr 80a8: e12fff13 bx r3 80ac: e59f301c ldr r3, [pc, #28] ; 80d0 80b0: e3530000 cmp r3, #0 80b4: 0afffff2 beq 8084 80b8: e8bd4010 pop {r4, lr} 80bc: e12fff13 bx r3 80c0: 00000000 .word 0x00000000 80c4: 00013140 .word 0x00013140 80c8: 00013f18 .word 0x00013f18 80cc: 0001314c .word 0x0001314c 80d0: 00000000 .word 0x00000000 000080d4 <_mainCRTStartup>: 80d4: e59f30f0 ldr r3, [pc, #240] ; 81cc <_mainCRTStartup+0xf8> 80d8: e3530000 cmp r3, #0 80dc: 059f30e4 ldreq r3, [pc, #228] ; 81c8 <_mainCRTStartup+0xf4> 80e0: e1a0d003 mov sp, r3 80e4: e10f2000 mrs r2, CPSR 80e8: e312000f tst r2, #15 80ec: 0a000015 beq 8148 <_mainCRTStartup+0x74> 80f0: e321f0d1 msr CPSR_c, #209 ; 0xd1 80f4: e1a0d003 mov sp, r3 80f8: e24daa01 sub sl, sp, #4096 ; 0x1000 80fc: e1a0300a mov r3, sl 8100: e321f0d7 msr CPSR_c, #215 ; 0xd7 8104: e1a0d003 mov sp, r3 8108: e2433a01 sub r3, r3, #4096 ; 0x1000 810c: e321f0db msr CPSR_c, #219 ; 0xdb 8110: e1a0d003 mov sp, r3 8114: e2433a01 sub r3, r3, #4096 ; 0x1000 8118: e321f0d2 msr CPSR_c, #210 ; 0xd2 811c: e1a0d003 mov sp, r3 8120: e2433a02 sub r3, r3, #8192 ; 0x2000 8124: e321f0d3 msr CPSR_c, #211 ; 0xd3 8128: e1a0d003 mov sp, r3 812c: e2433902 sub r3, r3, #32768 ; 0x8000 8130: e3c330ff bic r3, r3, #255 ; 0xff 8134: e3c33cff bic r3, r3, #65280 ; 0xff00 8138: e5033004 str r3, [r3, #-4] 813c: e9532000 ldmdb r3, {sp}^ 8140: e38220c0 orr r2, r2, #192 ; 0xc0 8144: e121f002 msr CPSR_c, r2 8148: e243a801 sub sl, r3, #65536 ; 0x10000 814c: e3b01000 movs r1, #0 8150: e1a0b001 mov fp, r1 8154: e1a07001 mov r7, r1 8158: e59f0078 ldr r0, [pc, #120] ; 81d8 <_mainCRTStartup+0x104> 815c: e59f2078 ldr r2, [pc, #120] ; 81dc <_mainCRTStartup+0x108> 8160: e0522000 subs r2, r2, r0 8164: eb00163c bl da5c 8168: e59f3060 ldr r3, [pc, #96] ; 81d0 <_mainCRTStartup+0xfc> 816c: e3530000 cmp r3, #0 8170: 0a000001 beq 817c <_mainCRTStartup+0xa8> 8174: e1a0e00f mov lr, pc 8178: e1a0f003 mov pc, r3 817c: e59f3050 ldr r3, [pc, #80] ; 81d4 <_mainCRTStartup+0x100> 8180: e3530000 cmp r3, #0 8184: 0a000001 beq 8190 <_mainCRTStartup+0xbc> 8188: e1a0e00f mov lr, pc 818c: e1a0f003 mov pc, r3 8190: e3b00000 movs r0, #0 8194: e3b01000 movs r1, #0 8198: e1b04000 movs r4, r0 819c: e1b05001 movs r5, r1 81a0: e59f0038 ldr r0, [pc, #56] ; 81e0 <_mainCRTStartup+0x10c> 81a4: e3500000 cmp r0, #0 81a8: 0a000001 beq 81b4 <_mainCRTStartup+0xe0> 81ac: e59f0030 ldr r0, [pc, #48] ; 81e4 <_mainCRTStartup+0x110> 81b0: e320f000 nop {0} 81b4: eb001571 bl d780 <__libc_init_array> 81b8: e1b00004 movs r0, r4 81bc: e1b01005 movs r1, r5 81c0: eb0004eb bl 9574
81c4: eb0013cd bl d100 81c8: 00080000 .word 0x00080000 ... 81d8: 00013f14 .word 0x00013f14 81dc: 0003c1a8 .word 0x0003c1a8 ... 000081e8 : #define MAX_SUPPORT_SESSION 1024 static struct CwdPair session_cwd[MAX_SUPPORT_SESSION]; static struct CwdPair* get_session_cwd(void) { 81e8: e92d4810 push {r4, fp, lr} 81ec: e28db008 add fp, sp, #8 81f0: e24dd00c sub sp, sp, #12 int free_idx = -1; 81f4: e3e03000 mvn r3, #0 81f8: e50b3010 str r3, [fp, #-16] for (int i = 0; i < MAX_SUPPORT_SESSION; i++) { 81fc: e3a03000 mov r3, #0 8200: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8204: ea00001b b 8278 // found session cwd if (session_cwd[i].session_id == cur_session_id()) { 8208: e3033f30 movw r3, #16176 ; 0x3f30 820c: e3403001 movt r3, #1 8210: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec 8214: e7934182 ldr r4, [r3, r2, lsl #3] 8218: eb0010ba bl c508 821c: e1a03000 mov r3, r0 8220: e1540003 cmp r4, r3 8224: 1a000005 bne 8240 return &session_cwd[i]; 8228: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 822c: e1a02183 lsl r2, r3, #3 8230: e3033f30 movw r3, #16176 ; 0x3f30 8234: e3403001 movt r3, #1 8238: e0823003 add r3, r2, r3 823c: ea00002c b 82f4 } if (free_idx == -1 && session_cwd[i].session_id == 0) { 8240: e51b3010 ldr r3, [fp, #-16] 8244: e3730001 cmn r3, #1 8248: 1a000007 bne 826c 824c: e3033f30 movw r3, #16176 ; 0x3f30 8250: e3403001 movt r3, #1 8254: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec 8258: e7933182 ldr r3, [r3, r2, lsl #3] 825c: e3530000 cmp r3, #0 8260: 1a000001 bne 826c free_idx = i; 8264: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8268: e50b3010 str r3, [fp, #-16] for (int i = 0; i < MAX_SUPPORT_SESSION; i++) { 826c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8270: e2833001 add r3, r3, #1 8274: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8278: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 827c: e3530b01 cmp r3, #1024 ; 0x400 8280: baffffe0 blt 8208 } } // new a cwd pair for session if (free_idx == -1) { 8284: e51b3010 ldr r3, [fp, #-16] 8288: e3730001 cmn r3, #1 828c: 1a000004 bne 82a4 printf("Connect Session reaches max value.\n"); 8290: e3020774 movw r0, #10100 ; 0x2774 8294: e3400001 movt r0, #1 8298: eb000eb8 bl bd80 return NULL; 829c: e3a03000 mov r3, #0 82a0: ea000013 b 82f4 } session_cwd[free_idx].session_id = cur_session_id(); 82a4: eb001097 bl c508 82a8: e1a01000 mov r1, r0 82ac: e3033f30 movw r3, #16176 ; 0x3f30 82b0: e3403001 movt r3, #1 82b4: e51b2010 ldr r2, [fp, #-16] 82b8: e7831182 str r1, [r3, r2, lsl #3] session_cwd[free_idx].Inode = InodeGet(ROOT_INUM); 82bc: e3a00001 mov r0, #1 82c0: eb000a26 bl ab60 82c4: e1a01000 mov r1, r0 82c8: e3032f30 movw r2, #16176 ; 0x3f30 82cc: e3402001 movt r2, #1 82d0: e51b3010 ldr r3, [fp, #-16] 82d4: e1a03183 lsl r3, r3, #3 82d8: e0823003 add r3, r2, r3 82dc: e5831004 str r1, [r3, #4] return &session_cwd[free_idx]; 82e0: e51b3010 ldr r3, [fp, #-16] 82e4: e1a02183 lsl r2, r3, #3 82e8: e3033f30 movw r3, #16176 ; 0x3f30 82ec: e3403001 movt r3, #1 82f0: e0823003 add r3, r2, r3 } 82f4: e1a00003 mov r0, r3 82f8: e24bd008 sub sp, fp, #8 82fc: e8bd8810 pop {r4, fp, pc} 00008300 : int IPC_DO_SERVE_FUNC(Ipc_ls)(char* path) { 8300: e92d4800 push {fp, lr} 8304: e28db004 add fp, sp, #4 8308: e24dd028 sub sp, sp, #40 ; 0x28 830c: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 struct Inode *dp, *ip; if (*path == '/') { 8310: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8314: e5d33000 ldrb r3, [r3] 8318: e353002f cmp r3, #47 ; 0x2f 831c: 1a000003 bne 8330 dp = InodeGet(ROOT_INUM); 8320: e3a00001 mov r0, #1 8324: eb000a0d bl ab60 8328: e50b0008 str r0, [fp, #-8] 832c: ea00000c b 8364 } else { struct CwdPair* cwd = get_session_cwd(); 8330: ebffffac bl 81e8 8334: e50b0010 str r0, [fp, #-16] if (!cwd) { 8338: e51b3010 ldr r3, [fp, #-16] 833c: e3530000 cmp r3, #0 8340: 1a000004 bne 8358 printf("ls:find current work dir failed\n"); 8344: e3020798 movw r0, #10136 ; 0x2798 8348: e3400001 movt r0, #1 834c: eb000e8b bl bd80 return -1; 8350: e3e03000 mvn r3, #0 8354: ea00003b b 8448 } dp = cwd->Inode; 8358: e51b3010 ldr r3, [fp, #-16] 835c: e5933004 ldr r3, [r3, #4] 8360: e50b3008 str r3, [fp, #-8] } if (!(ip = InodeSeek(dp, path))) { 8364: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 8368: e51b0008 ldr r0, [fp, #-8] 836c: eb000c61 bl b4f8 8370: e50b0014 str r0, [fp, #-20] ; 0xffffffec 8374: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8378: e3530000 cmp r3, #0 837c: 1a000004 bne 8394 printf("ls:find target Inode failed\n"); 8380: e30207bc movw r0, #10172 ; 0x27bc 8384: e3400001 movt r0, #1 8388: eb000e7c bl bd80 return -1; 838c: e3e03000 mvn r3, #0 8390: ea00002c b 8448 } if (ip->type != T_DIR) { 8394: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8398: e1d330f4 ldrsh r3, [r3, #4] 839c: e3530001 cmp r3, #1 83a0: 0a000004 beq 83b8 printf("ls:not a dir\n"); 83a4: e30207dc movw r0, #10204 ; 0x27dc 83a8: e3400001 movt r0, #1 83ac: eb000e73 bl bd80 return -1; 83b0: e3e03000 mvn r3, #0 83b4: ea000023 b 8448 } uint32_t off; struct DirectEntry de; for (off = 0; off < ip->size; off += sizeof(de)) { 83b8: e3a03000 mov r3, #0 83bc: e50b300c str r3, [fp, #-12] 83c0: ea00001a b 8430 if (InodeRead(ip, (char*)&de, off, sizeof(de)) != sizeof(de)) { 83c4: e51b200c ldr r2, [fp, #-12] 83c8: e24b1024 sub r1, fp, #36 ; 0x24 83cc: e3a03010 mov r3, #16 83d0: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec 83d4: eb000c6a bl b584 83d8: e1a03000 mov r3, r0 83dc: e3530010 cmp r3, #16 83e0: 0a000004 beq 83f8 printf("ls:read dir entry failed\n"); 83e4: e30207ec movw r0, #10220 ; 0x27ec 83e8: e3400001 movt r0, #1 83ec: eb000e63 bl bd80 return -1; 83f0: e3e03000 mvn r3, #0 83f4: ea000013 b 8448 } if (de.inum == 0) { 83f8: e15b32b4 ldrh r3, [fp, #-36] ; 0xffffffdc 83fc: e3530000 cmp r3, #0 8400: 0a000006 beq 8420 continue; } printf("%s\n", de.name); 8404: e24b3024 sub r3, fp, #36 ; 0x24 8408: e2833002 add r3, r3, #2 840c: e1a01003 mov r1, r3 8410: e3020808 movw r0, #10248 ; 0x2808 8414: e3400001 movt r0, #1 8418: eb000e58 bl bd80 841c: ea000000 b 8424 continue; 8420: e320f000 nop {0} for (off = 0; off < ip->size; off += sizeof(de)) { 8424: e51b300c ldr r3, [fp, #-12] 8428: e2833010 add r3, r3, #16 842c: e50b300c str r3, [fp, #-12] 8430: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8434: e5932008 ldr r2, [r3, #8] 8438: e51b300c ldr r3, [fp, #-12] 843c: e1520003 cmp r2, r3 8440: 8affffdf bhi 83c4 } return 0; 8444: e3a03000 mov r3, #0 } 8448: e1a00003 mov r0, r3 844c: e24bd004 sub sp, fp, #4 8450: e8bd8800 pop {fp, pc} 00008454 : int IPC_DO_SERVE_FUNC(Ipc_cd)(char* path) { 8454: e92d4800 push {fp, lr} 8458: e28db004 add fp, sp, #4 845c: e24dd018 sub sp, sp, #24 8460: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 struct CwdPair* cwd; struct Inode *dp, *ip; cwd = get_session_cwd(); 8464: ebffff5f bl 81e8 8468: e50b000c str r0, [fp, #-12] if (!cwd) { 846c: e51b300c ldr r3, [fp, #-12] 8470: e3530000 cmp r3, #0 8474: 1a000004 bne 848c printf("cd:find current work dir failed\n"); 8478: e302080c movw r0, #10252 ; 0x280c 847c: e3400001 movt r0, #1 8480: eb000e3e bl bd80 return -1; 8484: e3e03000 mvn r3, #0 8488: ea000023 b 851c } if (*path == '/') { 848c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 8490: e5d33000 ldrb r3, [r3] 8494: e353002f cmp r3, #47 ; 0x2f 8498: 1a000003 bne 84ac dp = InodeGet(ROOT_INUM); 849c: e3a00001 mov r0, #1 84a0: eb0009ae bl ab60 84a4: e50b0008 str r0, [fp, #-8] 84a8: ea000002 b 84b8 } else { dp = cwd->Inode; 84ac: e51b300c ldr r3, [fp, #-12] 84b0: e5933004 ldr r3, [r3, #4] 84b4: e50b3008 str r3, [fp, #-8] } if (!(ip = InodeSeek(dp, path))) { 84b8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 84bc: e51b0008 ldr r0, [fp, #-8] 84c0: eb000c0c bl b4f8 84c4: e50b0010 str r0, [fp, #-16] 84c8: e51b3010 ldr r3, [fp, #-16] 84cc: e3530000 cmp r3, #0 84d0: 1a000004 bne 84e8 /// @todo Is need to create the Inode when the dir is node existed? printf("cd:find target Inode failed\n"); 84d4: e3020830 movw r0, #10288 ; 0x2830 84d8: e3400001 movt r0, #1 84dc: eb000e27 bl bd80 return -1; 84e0: e3e03000 mvn r3, #0 84e4: ea00000c b 851c } if (ip->type != T_DIR) { 84e8: e51b3010 ldr r3, [fp, #-16] 84ec: e1d330f4 ldrsh r3, [r3, #4] 84f0: e3530001 cmp r3, #1 84f4: 0a000004 beq 850c printf("cd:not a dir\n"); 84f8: e3020850 movw r0, #10320 ; 0x2850 84fc: e3400001 movt r0, #1 8500: eb000e1e bl bd80 return -1; 8504: e3e03000 mvn r3, #0 8508: ea000003 b 851c } cwd->Inode = ip; 850c: e51b300c ldr r3, [fp, #-12] 8510: e51b2010 ldr r2, [fp, #-16] 8514: e5832004 str r2, [r3, #4] return 0; 8518: e3a03000 mov r3, #0 } 851c: e1a00003 mov r0, r3 8520: e24bd004 sub sp, fp, #4 8524: e8bd8800 pop {fp, pc} 00008528 : int IPC_DO_SERVE_FUNC(Ipc_mkdir)(char* path) { 8528: e92d4800 push {fp, lr} 852c: e28db004 add fp, sp, #4 8530: e24dd030 sub sp, sp, #48 ; 0x30 8534: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 // printf("Create a new directory: %s\n", path); struct Inode *dp, *ip; if (*path == '/') { 8538: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 853c: e5d33000 ldrb r3, [r3] 8540: e353002f cmp r3, #47 ; 0x2f 8544: 1a000003 bne 8558 dp = InodeGet(ROOT_INUM); 8548: e3a00001 mov r0, #1 854c: eb000983 bl ab60 8550: e50b0008 str r0, [fp, #-8] 8554: ea00000c b 858c } else { struct CwdPair* cwd = get_session_cwd(); 8558: ebffff22 bl 81e8 855c: e50b000c str r0, [fp, #-12] if (!cwd) { 8560: e51b300c ldr r3, [fp, #-12] 8564: e3530000 cmp r3, #0 8568: 1a000004 bne 8580 printf("find current work dir failed\n"); 856c: e3020860 movw r0, #10336 ; 0x2860 8570: e3400001 movt r0, #1 8574: eb000e01 bl bd80 return -1; 8578: e3e03000 mvn r3, #0 857c: ea000033 b 8650 } dp = cwd->Inode; 8580: e51b300c ldr r3, [fp, #-12] 8584: e5933004 ldr r3, [r3, #4] 8588: e50b3008 str r3, [fp, #-8] } if ((ip = InodeSeek(dp, path)) != NULL) { 858c: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 8590: e51b0008 ldr r0, [fp, #-8] 8594: eb000bd7 bl b4f8 8598: e50b0010 str r0, [fp, #-16] 859c: e51b3010 ldr r3, [fp, #-16] 85a0: e3530000 cmp r3, #0 85a4: 0a000004 beq 85bc /// @todo Is need to return target Inode? printf("target Inode existed\n"); 85a8: e3020880 movw r0, #10368 ; 0x2880 85ac: e3400001 movt r0, #1 85b0: eb000df2 bl bd80 return -1; 85b4: e3e03000 mvn r3, #0 85b8: ea000024 b 8650 } char name[DIR_NAME_SIZE] = { 0 }; 85bc: e24b3020 sub r3, fp, #32 85c0: e3a02000 mov r2, #0 85c4: e5832000 str r2, [r3] 85c8: e5832004 str r2, [r3, #4] 85cc: e5832008 str r2, [r3, #8] 85d0: e1c320bc strh r2, [r3, #12] if (!(ip = InodeParentSeek(dp, path, name))) { 85d4: e24b3020 sub r3, fp, #32 85d8: e1a02003 mov r2, r3 85dc: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 85e0: e51b0008 ldr r0, [fp, #-8] 85e4: eb000bd7 bl b548 85e8: e50b0010 str r0, [fp, #-16] 85ec: e51b3010 ldr r3, [fp, #-16] 85f0: e3530000 cmp r3, #0 85f4: 1a000004 bne 860c /// @todo Is need to return target Inode? printf("target parent Inode is not existed\n"); 85f8: e3020898 movw r0, #10392 ; 0x2898 85fc: e3400001 movt r0, #1 8600: eb000dde bl bd80 return -1; 8604: e3e03000 mvn r3, #0 8608: ea000010 b 8650 } if (InodeCreate(ip, name, T_DIR, 0, 0) == 0) { 860c: e24b1020 sub r1, fp, #32 8610: e3a03000 mov r3, #0 8614: e58d3000 str r3, [sp] 8618: e3a03000 mov r3, #0 861c: e3a02001 mov r2, #1 8620: e51b0010 ldr r0, [fp, #-16] 8624: eb000a40 bl af2c 8628: e1a03000 mov r3, r0 862c: e3530000 cmp r3, #0 8630: 1a000005 bne 864c printf("create target Inode %s failed\n", path); 8634: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 8638: e30208bc movw r0, #10428 ; 0x28bc 863c: e3400001 movt r0, #1 8640: eb000dce bl bd80 return -1; 8644: e3e03000 mvn r3, #0 8648: ea000000 b 8650 } return 0; 864c: e3a03000 mov r3, #0 } 8650: e1a00003 mov r0, r3 8654: e24bd004 sub sp, fp, #4 8658: e8bd8800 pop {fp, pc} 0000865c : int IPC_DO_SERVE_FUNC(Ipc_delete)(char* path) { 865c: e92d4800 push {fp, lr} 8660: e28db004 add fp, sp, #4 8664: e24dd028 sub sp, sp, #40 ; 0x28 8668: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 struct Inode *dp, *ip; if (*path == '/') { 866c: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8670: e5d33000 ldrb r3, [r3] 8674: e353002f cmp r3, #47 ; 0x2f 8678: 1a000003 bne 868c dp = InodeGet(ROOT_INUM); 867c: e3a00001 mov r0, #1 8680: eb000936 bl ab60 8684: e50b0008 str r0, [fp, #-8] 8688: ea00000c b 86c0 } else { struct CwdPair* cwd = get_session_cwd(); 868c: ebfffed5 bl 81e8 8690: e50b000c str r0, [fp, #-12] if (!cwd) { 8694: e51b300c ldr r3, [fp, #-12] 8698: e3530000 cmp r3, #0 869c: 1a000004 bne 86b4 printf("delete:find current work dir failed\n"); 86a0: e30208dc movw r0, #10460 ; 0x28dc 86a4: e3400001 movt r0, #1 86a8: eb000db4 bl bd80 return -1; 86ac: e3e03000 mvn r3, #0 86b0: ea000023 b 8744 } dp = cwd->Inode; 86b4: e51b300c ldr r3, [fp, #-12] 86b8: e5933004 ldr r3, [r3, #4] 86bc: e50b3008 str r3, [fp, #-8] } char name[DIR_NAME_SIZE] = { 0 }; 86c0: e24b3020 sub r3, fp, #32 86c4: e3a02000 mov r2, #0 86c8: e5832000 str r2, [r3] 86cc: e5832004 str r2, [r3, #4] 86d0: e5832008 str r2, [r3, #8] 86d4: e1c320bc strh r2, [r3, #12] if (!(ip = InodeParentSeek(dp, path, name))) { 86d8: e24b3020 sub r3, fp, #32 86dc: e1a02003 mov r2, r3 86e0: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 86e4: e51b0008 ldr r0, [fp, #-8] 86e8: eb000b96 bl b548 86ec: e50b0010 str r0, [fp, #-16] 86f0: e51b3010 ldr r3, [fp, #-16] 86f4: e3530000 cmp r3, #0 86f8: 1a000004 bne 8710 printf("delete:target file parent not existed\n"); 86fc: e3020904 movw r0, #10500 ; 0x2904 8700: e3400001 movt r0, #1 8704: eb000d9d bl bd80 return -1; 8708: e3e03000 mvn r3, #0 870c: ea00000c b 8744 } if (InodeDelete(ip, name) < 0) { 8710: e24b3020 sub r3, fp, #32 8714: e1a01003 mov r1, r3 8718: e51b0010 ldr r0, [fp, #-16] 871c: eb0009cf bl ae60 8720: e1a03000 mov r3, r0 8724: e3530000 cmp r3, #0 8728: aa000004 bge 8740 printf("delete:target file not existed\n"); 872c: e302092c movw r0, #10540 ; 0x292c 8730: e3400001 movt r0, #1 8734: eb000d91 bl bd80 return -1; 8738: e3e03000 mvn r3, #0 873c: ea000000 b 8744 } return 0; 8740: e3a03000 mov r3, #0 } 8744: e1a00003 mov r0, r3 8748: e24bd004 sub sp, fp, #4 874c: e8bd8800 pop {fp, pc} 00008750 : /// @todo Support malloc for user int IPC_DO_SERVE_FUNC(Ipc_cat)(char* path) { 8750: e92d4800 push {fp, lr} 8754: e28db004 add fp, sp, #4 8758: e24dd018 sub sp, sp, #24 875c: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 static char buffer[BLOCK_SIZE + 1] = { 0 }; buffer[BLOCK_SIZE] = '\0'; 8760: e3053f30 movw r3, #24368 ; 0x5f30 8764: e3403001 movt r3, #1 8768: e3a02000 mov r2, #0 876c: e5c32200 strb r2, [r3, #512] ; 0x200 struct Inode *dp, *ip; if (*path == '/') { 8770: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 8774: e5d33000 ldrb r3, [r3] 8778: e353002f cmp r3, #47 ; 0x2f 877c: 1a000003 bne 8790 dp = InodeGet(ROOT_INUM); 8780: e3a00001 mov r0, #1 8784: eb0008f5 bl ab60 8788: e50b0008 str r0, [fp, #-8] 878c: ea00000c b 87c4 } else { struct CwdPair* cwd = get_session_cwd(); 8790: ebfffe94 bl 81e8 8794: e50b0010 str r0, [fp, #-16] if (!cwd) { 8798: e51b3010 ldr r3, [fp, #-16] 879c: e3530000 cmp r3, #0 87a0: 1a000004 bne 87b8 printf("delete:find current work dir failed\n"); 87a4: e30208dc movw r0, #10460 ; 0x28dc 87a8: e3400001 movt r0, #1 87ac: eb000d73 bl bd80 return -1; 87b0: e3e03000 mvn r3, #0 87b4: ea000036 b 8894 } dp = cwd->Inode; 87b8: e51b3010 ldr r3, [fp, #-16] 87bc: e5933004 ldr r3, [r3, #4] 87c0: e50b3008 str r3, [fp, #-8] } if (!(ip = InodeSeek(dp, path))) { 87c4: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 87c8: e51b0008 ldr r0, [fp, #-8] 87cc: eb000b49 bl b4f8 87d0: e50b0014 str r0, [fp, #-20] ; 0xffffffec 87d4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 87d8: e3530000 cmp r3, #0 87dc: 1a000004 bne 87f4 printf("delete:target file not existed\n"); 87e0: e302092c movw r0, #10540 ; 0x292c 87e4: e3400001 movt r0, #1 87e8: eb000d64 bl bd80 return -1; 87ec: e3e03000 mvn r3, #0 87f0: ea000027 b 8894 } if (ip->type != T_FILE) { 87f4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 87f8: e1d330f4 ldrsh r3, [r3, #4] 87fc: e3530002 cmp r3, #2 8800: 0a000005 beq 881c printf("cat: %s Is not a file\n", path); 8804: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 8808: e302094c movw r0, #10572 ; 0x294c 880c: e3400001 movt r0, #1 8810: eb000d5a bl bd80 return -1; 8814: e3e03000 mvn r3, #0 8818: ea00001d b 8894 } uint32_t off; for (off = 0; off < ip->size; off += BLOCK_SIZE) { 881c: e3a03000 mov r3, #0 8820: e50b300c str r3, [fp, #-12] 8824: ea000014 b 887c if (InodeRead(ip, buffer, off, BLOCK_SIZE) < 0) { 8828: e51b200c ldr r2, [fp, #-12] 882c: e3a03c02 mov r3, #512 ; 0x200 8830: e3051f30 movw r1, #24368 ; 0x5f30 8834: e3401001 movt r1, #1 8838: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec 883c: eb000b50 bl b584 8840: e1a03000 mov r3, r0 8844: e3530000 cmp r3, #0 8848: aa000003 bge 885c printf("cat: read file data failed\n"); 884c: e3020964 movw r0, #10596 ; 0x2964 8850: e3400001 movt r0, #1 8854: eb000d49 bl bd80 break; 8858: ea00000c b 8890 } printf("%s", buffer); 885c: e3051f30 movw r1, #24368 ; 0x5f30 8860: e3401001 movt r1, #1 8864: e3020980 movw r0, #10624 ; 0x2980 8868: e3400001 movt r0, #1 886c: eb000d43 bl bd80 for (off = 0; off < ip->size; off += BLOCK_SIZE) { 8870: e51b300c ldr r3, [fp, #-12] 8874: e2833c02 add r3, r3, #512 ; 0x200 8878: e50b300c str r3, [fp, #-12] 887c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8880: e5932008 ldr r2, [r3, #8] 8884: e51b300c ldr r3, [fp, #-12] 8888: e1520003 cmp r2, r3 888c: 8affffe5 bhi 8828 } return 0; 8890: e3a03000 mov r3, #0 } 8894: e1a00003 mov r0, r3 8898: e24bd004 sub sp, fp, #4 889c: e8bd8800 pop {fp, pc} 000088a0 : int IPC_DO_SERVE_FUNC(Ipc_open)(char* path) { 88a0: e92d4810 push {r4, fp, lr} 88a4: e28db008 add fp, sp, #8 88a8: e24dd024 sub sp, sp, #36 ; 0x24 88ac: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 // printf("Ipc_open: %s\n", path); int fd; struct FileDescriptor* fdp; fd = AllocFileDescriptor(); 88b0: eb000c5f bl ba34 88b4: e50b0014 str r0, [fp, #-20] ; 0xffffffec if (fd < 0) { 88b8: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 88bc: e3530000 cmp r3, #0 88c0: aa000004 bge 88d8 printf("open: alloc a new fd failed\n"); 88c4: e3020984 movw r0, #10628 ; 0x2984 88c8: e3400001 movt r0, #1 88cc: eb000d2b bl bd80 return -1; 88d0: e3e03000 mvn r3, #0 88d4: ea000039 b 89c0 } fdp = GetFileDescriptor(fd); 88d8: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec 88dc: eb000c22 bl b96c 88e0: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 struct Inode *dp, *ip; if (*path == '/') { 88e4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 88e8: e5d33000 ldrb r3, [r3] 88ec: e353002f cmp r3, #47 ; 0x2f 88f0: 1a000003 bne 8904 dp = InodeGet(ROOT_INUM); 88f4: e3a00001 mov r0, #1 88f8: eb000898 bl ab60 88fc: e50b0010 str r0, [fp, #-16] 8900: ea00000c b 8938 } else { struct CwdPair* cwd = get_session_cwd(); 8904: ebfffe37 bl 81e8 8908: e50b001c str r0, [fp, #-28] ; 0xffffffe4 if (!cwd) { 890c: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8910: e3530000 cmp r3, #0 8914: 1a000004 bne 892c printf("ls:find current work dir failed\n"); 8918: e3020798 movw r0, #10136 ; 0x2798 891c: e3400001 movt r0, #1 8920: eb000d16 bl bd80 return -1; 8924: e3e03000 mvn r3, #0 8928: ea000024 b 89c0 } dp = cwd->Inode; 892c: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8930: e5933004 ldr r3, [r3, #4] 8934: e50b3010 str r3, [fp, #-16] } if ((ip = InodeSeek(dp, path)) == NULL) { 8938: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 893c: e51b0010 ldr r0, [fp, #-16] 8940: eb000aec bl b4f8 8944: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 8948: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 894c: e3530000 cmp r3, #0 8950: 1a000005 bne 896c printf("open: find target Inode failed, path is %s\n", path); 8954: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 8958: e30209a4 movw r0, #10660 ; 0x29a4 895c: e3400001 movt r0, #1 8960: eb000d06 bl bd80 return -1; 8964: e3e03000 mvn r3, #0 8968: ea000014 b 89c0 } /// @todo record absolute path strncpy(fdp->path, path, strlen(path) + 1); 896c: e51b4018 ldr r4, [fp, #-24] ; 0xffffffe8 8970: e51b0028 ldr r0, [fp, #-40] ; 0xffffffd8 8974: eb001506 bl dd94 8978: e1a03000 mov r3, r0 897c: e2833001 add r3, r3, #1 8980: e1a02003 mov r2, r3 8984: e51b1028 ldr r1, [fp, #-40] ; 0xffffffd8 8988: e1a00004 mov r0, r4 898c: eb00155c bl df04 ip->nlink++; 8990: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 8994: e1d330f6 ldrsh r3, [r3, #6] 8998: e6ff3073 uxth r3, r3 899c: e2833001 add r3, r3, #1 89a0: e6ff3073 uxth r3, r3 89a4: e6bf2073 sxth r2, r3 89a8: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 89ac: e1c320b6 strh r2, [r3, #6] fdp->data = ip; 89b0: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 89b4: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 89b8: e5832080 str r2, [r3, #128] ; 0x80 return fd; 89bc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec } 89c0: e1a00003 mov r0, r3 89c4: e24bd008 sub sp, fp, #8 89c8: e8bd8810 pop {r4, fp, pc} 000089cc : int IPC_DO_SERVE_FUNC(Ipc_close)(int* fd) { 89cc: e92d4800 push {fp, lr} 89d0: e28db004 add fp, sp, #4 89d4: e24dd010 sub sp, sp, #16 89d8: e50b0010 str r0, [fp, #-16] struct FileDescriptor* fdp = GetFileDescriptor(*fd); 89dc: e51b3010 ldr r3, [fp, #-16] 89e0: e5933000 ldr r3, [r3] 89e4: e1a00003 mov r0, r3 89e8: eb000bdf bl b96c 89ec: e50b0008 str r0, [fp, #-8] if (!fdp) { 89f0: e51b3008 ldr r3, [fp, #-8] 89f4: e3530000 cmp r3, #0 89f8: 1a000004 bne 8a10 printf("read: fd invalid\n"); 89fc: e30209d0 movw r0, #10704 ; 0x29d0 8a00: e3400001 movt r0, #1 8a04: eb000cdd bl bd80 return -1; 8a08: e3e03000 mvn r3, #0 8a0c: ea00000f b 8a50 } struct Inode* ip = fdp->data; 8a10: e51b3008 ldr r3, [fp, #-8] 8a14: e5933080 ldr r3, [r3, #128] ; 0x80 8a18: e50b300c str r3, [fp, #-12] ip->nlink--; 8a1c: e51b300c ldr r3, [fp, #-12] 8a20: e1d330f6 ldrsh r3, [r3, #6] 8a24: e6ff3073 uxth r3, r3 8a28: e2433001 sub r3, r3, #1 8a2c: e6ff3073 uxth r3, r3 8a30: e6bf2073 sxth r2, r3 8a34: e51b300c ldr r3, [fp, #-12] 8a38: e1c320b6 strh r2, [r3, #6] FreeFileDescriptor(*fd); 8a3c: e51b3010 ldr r3, [fp, #-16] 8a40: e5933000 ldr r3, [r3] 8a44: e1a00003 mov r0, r3 8a48: eb000bdf bl b9cc return 0; 8a4c: e3a03000 mov r3, #0 } 8a50: e1a00003 mov r0, r3 8a54: e24bd004 sub sp, fp, #4 8a58: e8bd8800 pop {fp, pc} 00008a5c : int IPC_DO_SERVE_FUNC(Ipc_read)(int* fd, char* dst, int* offset, int* len) { 8a5c: e92d4800 push {fp, lr} 8a60: e28db004 add fp, sp, #4 8a64: e24dd020 sub sp, sp, #32 8a68: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 8a6c: e50b101c str r1, [fp, #-28] ; 0xffffffe4 8a70: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 8a74: e50b3024 str r3, [fp, #-36] ; 0xffffffdc // printf("Ipc_read, fd is %d, dst: %x, offset: %d, len: %d\n", *fd, dst, *offset, *len); struct FileDescriptor* fdp = GetFileDescriptor(*fd); 8a78: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 8a7c: e5933000 ldr r3, [r3] 8a80: e1a00003 mov r0, r3 8a84: eb000bb8 bl b96c 8a88: e50b0008 str r0, [fp, #-8] if (!fdp) { 8a8c: e51b3008 ldr r3, [fp, #-8] 8a90: e3530000 cmp r3, #0 8a94: 1a000004 bne 8aac printf("read: fd invalid\n"); 8a98: e30209d0 movw r0, #10704 ; 0x29d0 8a9c: e3400001 movt r0, #1 8aa0: eb000cb6 bl bd80 return -1; 8aa4: e3e03000 mvn r3, #0 8aa8: ea000017 b 8b0c } struct Inode* ip = fdp->data; 8aac: e51b3008 ldr r3, [fp, #-8] 8ab0: e5933080 ldr r3, [r3, #128] ; 0x80 8ab4: e50b300c str r3, [fp, #-12] if (ip->type != T_FILE) { 8ab8: e51b300c ldr r3, [fp, #-12] 8abc: e1d330f4 ldrsh r3, [r3, #4] 8ac0: e3530002 cmp r3, #2 8ac4: 0a000006 beq 8ae4 printf("read: %s Is not a file\n", fdp->path); 8ac8: e51b3008 ldr r3, [fp, #-8] 8acc: e1a01003 mov r1, r3 8ad0: e30209e4 movw r0, #10724 ; 0x29e4 8ad4: e3400001 movt r0, #1 8ad8: eb000ca8 bl bd80 return -1; 8adc: e3e03000 mvn r3, #0 8ae0: ea000009 b 8b0c } int cur_read_len = InodeRead(ip, dst, *offset, *len); 8ae4: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 8ae8: e5932000 ldr r2, [r3] 8aec: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc 8af0: e5933000 ldr r3, [r3] 8af4: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 8af8: e51b000c ldr r0, [fp, #-12] 8afc: eb000aa0 bl b584 8b00: e50b0010 str r0, [fp, #-16] return *len; 8b04: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc 8b08: e5933000 ldr r3, [r3] } 8b0c: e1a00003 mov r0, r3 8b10: e24bd004 sub sp, fp, #4 8b14: e8bd8800 pop {fp, pc} 00008b18 : int IPC_DO_SERVE_FUNC(Ipc_write)(int* fd, char* src, int* offset, int* len) { 8b18: e92d4800 push {fp, lr} 8b1c: e28db004 add fp, sp, #4 8b20: e24dd020 sub sp, sp, #32 8b24: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 8b28: e50b101c str r1, [fp, #-28] ; 0xffffffe4 8b2c: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 8b30: e50b3024 str r3, [fp, #-36] ; 0xffffffdc // printf("Ipc_write, fd is %d\n", *fd); struct FileDescriptor* fdp = GetFileDescriptor(*fd); 8b34: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 8b38: e5933000 ldr r3, [r3] 8b3c: e1a00003 mov r0, r3 8b40: eb000b89 bl b96c 8b44: e50b0008 str r0, [fp, #-8] if (!fdp) { 8b48: e51b3008 ldr r3, [fp, #-8] 8b4c: e3530000 cmp r3, #0 8b50: 1a000004 bne 8b68 printf("read: fd invalid\n"); 8b54: e30209d0 movw r0, #10704 ; 0x29d0 8b58: e3400001 movt r0, #1 8b5c: eb000c87 bl bd80 return -1; 8b60: e3e03000 mvn r3, #0 8b64: ea000017 b 8bc8 } struct Inode* ip = fdp->data; 8b68: e51b3008 ldr r3, [fp, #-8] 8b6c: e5933080 ldr r3, [r3, #128] ; 0x80 8b70: e50b300c str r3, [fp, #-12] if (ip->type != T_FILE) { 8b74: e51b300c ldr r3, [fp, #-12] 8b78: e1d330f4 ldrsh r3, [r3, #4] 8b7c: e3530002 cmp r3, #2 8b80: 0a000006 beq 8ba0 printf("read: %s Is not a file\n", fdp->path); 8b84: e51b3008 ldr r3, [fp, #-8] 8b88: e1a01003 mov r1, r3 8b8c: e30209e4 movw r0, #10724 ; 0x29e4 8b90: e3400001 movt r0, #1 8b94: eb000c79 bl bd80 return -1; 8b98: e3e03000 mvn r3, #0 8b9c: ea000009 b 8bc8 } int cur_write_len = InodeWrite(ip, src, *offset, *len); 8ba0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 8ba4: e5933000 ldr r3, [r3] 8ba8: e1a02003 mov r2, r3 8bac: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc 8bb0: e5933000 ldr r3, [r3] 8bb4: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 8bb8: e51b000c ldr r0, [fp, #-12] 8bbc: eb000ad0 bl b704 8bc0: e50b0010 str r0, [fp, #-16] return cur_write_len; 8bc4: e51b3010 ldr r3, [fp, #-16] } 8bc8: e1a00003 mov r0, r3 8bcc: e24bd004 sub sp, fp, #4 8bd0: e8bd8800 pop {fp, pc} 00008bd4 : IPC_SERVER_INTERFACE(Ipc_ls, 1); 8bd4: e92d4800 push {fp, lr} 8bd8: e28db004 add fp, sp, #4 8bdc: e24dd028 sub sp, sp, #40 ; 0x28 8be0: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 8be4: e3a03000 mov r3, #0 8be8: e50b3008 str r3, [fp, #-8] 8bec: ea000014 b 8c44 8bf0: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8bf4: e50b300c str r3, [fp, #-12] 8bf8: e51b3008 ldr r3, [fp, #-8] 8bfc: e50b3010 str r3, [fp, #-16] /// @param msg /// @param arg_num start with 0 for first arg /// @return __attribute__((__always_inline__)) static inline void* ipc_msg_get_nth_arg_buf(struct IpcMsg* msg, int arg_num) { return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 8c00: e51b3010 ldr r3, [fp, #-16] 8c04: e2833003 add r3, r3, #3 8c08: e1a03103 lsl r3, r3, #2 8c0c: e51b200c ldr r2, [fp, #-12] 8c10: e0823003 add r3, r2, r3 8c14: e1d330b0 ldrh r3, [r3] 8c18: e1a02003 mov r2, r3 8c1c: e51b300c ldr r3, [fp, #-12] 8c20: e0832002 add r2, r3, r2 8c24: e51b3008 ldr r3, [fp, #-8] 8c28: e1a03103 lsl r3, r3, #2 8c2c: e24b1004 sub r1, fp, #4 8c30: e0813003 add r3, r1, r3 8c34: e5032018 str r2, [r3, #-24] ; 0xffffffe8 8c38: e51b3008 ldr r3, [fp, #-8] 8c3c: e2833001 add r3, r3, #1 8c40: e50b3008 str r3, [fp, #-8] 8c44: e51b3008 ldr r3, [fp, #-8] 8c48: e3530000 cmp r3, #0 8c4c: daffffe7 ble 8bf0 8c50: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8c54: e1a00003 mov r0, r3 8c58: ebfffda8 bl 8300 8c5c: e1a03000 mov r3, r0 8c60: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 8c64: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8c68: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8c6c: e24b3020 sub r3, fp, #32 8c70: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 /// @brief set return val of ipc call after serve, used by server /// @param msg /// @param ret_val __attribute__((__always_inline__)) static inline void ipc_msg_set_return(struct IpcMsg* msg, int32_t* ret_val) { assert(msg->header.valid == 1); 8c74: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8c78: e5d33000 ldrb r3, [r3] 8c7c: e2033001 and r3, r3, #1 8c80: e6ef3073 uxtb r3, r3 8c84: e3530000 cmp r3, #0 8c88: 1a000007 bne 8cac 8c8c: e30239fc movw r3, #10748 ; 0x29fc 8c90: e3403001 movt r3, #1 8c94: e3022aa0 movw r2, #10912 ; 0x2aa0 8c98: e3402001 movt r2, #1 8c9c: e3a0107e mov r1, #126 ; 0x7e 8ca0: e3020a14 movw r0, #10772 ; 0x2a14 8ca4: e3400001 movt r0, #1 8ca8: eb001280 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 8cac: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8cb0: e2833008 add r3, r3, #8 8cb4: e3a02004 mov r2, #4 8cb8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 8cbc: e1a00003 mov r0, r3 8cc0: eb0012ce bl d800 8cc4: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 8cc8: e5d23000 ldrb r3, [r2] 8ccc: e3833002 orr r3, r3, #2 8cd0: e5c23000 strb r3, [r2] 8cd4: e3a03000 mov r3, #0 8cd8: e1a00003 mov r0, r3 8cdc: e24bd004 sub sp, fp, #4 8ce0: e8bd8800 pop {fp, pc} 00008ce4 : IPC_SERVER_INTERFACE(Ipc_cd, 1); 8ce4: e92d4800 push {fp, lr} 8ce8: e28db004 add fp, sp, #4 8cec: e24dd028 sub sp, sp, #40 ; 0x28 8cf0: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 8cf4: e3a03000 mov r3, #0 8cf8: e50b3008 str r3, [fp, #-8] 8cfc: ea000014 b 8d54 8d00: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8d04: e50b300c str r3, [fp, #-12] 8d08: e51b3008 ldr r3, [fp, #-8] 8d0c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 8d10: e51b3010 ldr r3, [fp, #-16] 8d14: e2833003 add r3, r3, #3 8d18: e1a03103 lsl r3, r3, #2 8d1c: e51b200c ldr r2, [fp, #-12] 8d20: e0823003 add r3, r2, r3 8d24: e1d330b0 ldrh r3, [r3] 8d28: e1a02003 mov r2, r3 8d2c: e51b300c ldr r3, [fp, #-12] 8d30: e0832002 add r2, r3, r2 8d34: e51b3008 ldr r3, [fp, #-8] 8d38: e1a03103 lsl r3, r3, #2 8d3c: e24b1004 sub r1, fp, #4 8d40: e0813003 add r3, r1, r3 8d44: e5032018 str r2, [r3, #-24] ; 0xffffffe8 8d48: e51b3008 ldr r3, [fp, #-8] 8d4c: e2833001 add r3, r3, #1 8d50: e50b3008 str r3, [fp, #-8] 8d54: e51b3008 ldr r3, [fp, #-8] 8d58: e3530000 cmp r3, #0 8d5c: daffffe7 ble 8d00 8d60: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8d64: e1a00003 mov r0, r3 8d68: ebfffdb9 bl 8454 8d6c: e1a03000 mov r3, r0 8d70: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 8d74: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8d78: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8d7c: e24b3020 sub r3, fp, #32 8d80: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 8d84: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8d88: e5d33000 ldrb r3, [r3] 8d8c: e2033001 and r3, r3, #1 8d90: e6ef3073 uxtb r3, r3 8d94: e3530000 cmp r3, #0 8d98: 1a000007 bne 8dbc 8d9c: e30239fc movw r3, #10748 ; 0x29fc 8da0: e3403001 movt r3, #1 8da4: e3022aa0 movw r2, #10912 ; 0x2aa0 8da8: e3402001 movt r2, #1 8dac: e3a0107e mov r1, #126 ; 0x7e 8db0: e3020a14 movw r0, #10772 ; 0x2a14 8db4: e3400001 movt r0, #1 8db8: eb00123c bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 8dbc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8dc0: e2833008 add r3, r3, #8 8dc4: e3a02004 mov r2, #4 8dc8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 8dcc: e1a00003 mov r0, r3 8dd0: eb00128a bl d800 8dd4: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 8dd8: e5d23000 ldrb r3, [r2] 8ddc: e3833002 orr r3, r3, #2 8de0: e5c23000 strb r3, [r2] 8de4: e3a03000 mov r3, #0 8de8: e1a00003 mov r0, r3 8dec: e24bd004 sub sp, fp, #4 8df0: e8bd8800 pop {fp, pc} 00008df4 : IPC_SERVER_INTERFACE(Ipc_mkdir, 1); 8df4: e92d4800 push {fp, lr} 8df8: e28db004 add fp, sp, #4 8dfc: e24dd028 sub sp, sp, #40 ; 0x28 8e00: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 8e04: e3a03000 mov r3, #0 8e08: e50b3008 str r3, [fp, #-8] 8e0c: ea000014 b 8e64 8e10: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8e14: e50b300c str r3, [fp, #-12] 8e18: e51b3008 ldr r3, [fp, #-8] 8e1c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 8e20: e51b3010 ldr r3, [fp, #-16] 8e24: e2833003 add r3, r3, #3 8e28: e1a03103 lsl r3, r3, #2 8e2c: e51b200c ldr r2, [fp, #-12] 8e30: e0823003 add r3, r2, r3 8e34: e1d330b0 ldrh r3, [r3] 8e38: e1a02003 mov r2, r3 8e3c: e51b300c ldr r3, [fp, #-12] 8e40: e0832002 add r2, r3, r2 8e44: e51b3008 ldr r3, [fp, #-8] 8e48: e1a03103 lsl r3, r3, #2 8e4c: e24b1004 sub r1, fp, #4 8e50: e0813003 add r3, r1, r3 8e54: e5032018 str r2, [r3, #-24] ; 0xffffffe8 8e58: e51b3008 ldr r3, [fp, #-8] 8e5c: e2833001 add r3, r3, #1 8e60: e50b3008 str r3, [fp, #-8] 8e64: e51b3008 ldr r3, [fp, #-8] 8e68: e3530000 cmp r3, #0 8e6c: daffffe7 ble 8e10 8e70: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8e74: e1a00003 mov r0, r3 8e78: ebfffdaa bl 8528 8e7c: e1a03000 mov r3, r0 8e80: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 8e84: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8e88: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8e8c: e24b3020 sub r3, fp, #32 8e90: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 8e94: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8e98: e5d33000 ldrb r3, [r3] 8e9c: e2033001 and r3, r3, #1 8ea0: e6ef3073 uxtb r3, r3 8ea4: e3530000 cmp r3, #0 8ea8: 1a000007 bne 8ecc 8eac: e30239fc movw r3, #10748 ; 0x29fc 8eb0: e3403001 movt r3, #1 8eb4: e3022aa0 movw r2, #10912 ; 0x2aa0 8eb8: e3402001 movt r2, #1 8ebc: e3a0107e mov r1, #126 ; 0x7e 8ec0: e3020a14 movw r0, #10772 ; 0x2a14 8ec4: e3400001 movt r0, #1 8ec8: eb0011f8 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 8ecc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8ed0: e2833008 add r3, r3, #8 8ed4: e3a02004 mov r2, #4 8ed8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 8edc: e1a00003 mov r0, r3 8ee0: eb001246 bl d800 8ee4: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 8ee8: e5d23000 ldrb r3, [r2] 8eec: e3833002 orr r3, r3, #2 8ef0: e5c23000 strb r3, [r2] 8ef4: e3a03000 mov r3, #0 8ef8: e1a00003 mov r0, r3 8efc: e24bd004 sub sp, fp, #4 8f00: e8bd8800 pop {fp, pc} 00008f04 : IPC_SERVER_INTERFACE(Ipc_delete, 1); 8f04: e92d4800 push {fp, lr} 8f08: e28db004 add fp, sp, #4 8f0c: e24dd028 sub sp, sp, #40 ; 0x28 8f10: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 8f14: e3a03000 mov r3, #0 8f18: e50b3008 str r3, [fp, #-8] 8f1c: ea000014 b 8f74 8f20: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8f24: e50b300c str r3, [fp, #-12] 8f28: e51b3008 ldr r3, [fp, #-8] 8f2c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 8f30: e51b3010 ldr r3, [fp, #-16] 8f34: e2833003 add r3, r3, #3 8f38: e1a03103 lsl r3, r3, #2 8f3c: e51b200c ldr r2, [fp, #-12] 8f40: e0823003 add r3, r2, r3 8f44: e1d330b0 ldrh r3, [r3] 8f48: e1a02003 mov r2, r3 8f4c: e51b300c ldr r3, [fp, #-12] 8f50: e0832002 add r2, r3, r2 8f54: e51b3008 ldr r3, [fp, #-8] 8f58: e1a03103 lsl r3, r3, #2 8f5c: e24b1004 sub r1, fp, #4 8f60: e0813003 add r3, r1, r3 8f64: e5032018 str r2, [r3, #-24] ; 0xffffffe8 8f68: e51b3008 ldr r3, [fp, #-8] 8f6c: e2833001 add r3, r3, #1 8f70: e50b3008 str r3, [fp, #-8] 8f74: e51b3008 ldr r3, [fp, #-8] 8f78: e3530000 cmp r3, #0 8f7c: daffffe7 ble 8f20 8f80: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 8f84: e1a00003 mov r0, r3 8f88: ebfffdb3 bl 865c 8f8c: e1a03000 mov r3, r0 8f90: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 8f94: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 8f98: e50b3014 str r3, [fp, #-20] ; 0xffffffec 8f9c: e24b3020 sub r3, fp, #32 8fa0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 8fa4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8fa8: e5d33000 ldrb r3, [r3] 8fac: e2033001 and r3, r3, #1 8fb0: e6ef3073 uxtb r3, r3 8fb4: e3530000 cmp r3, #0 8fb8: 1a000007 bne 8fdc 8fbc: e30239fc movw r3, #10748 ; 0x29fc 8fc0: e3403001 movt r3, #1 8fc4: e3022aa0 movw r2, #10912 ; 0x2aa0 8fc8: e3402001 movt r2, #1 8fcc: e3a0107e mov r1, #126 ; 0x7e 8fd0: e3020a14 movw r0, #10772 ; 0x2a14 8fd4: e3400001 movt r0, #1 8fd8: eb0011b4 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 8fdc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 8fe0: e2833008 add r3, r3, #8 8fe4: e3a02004 mov r2, #4 8fe8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 8fec: e1a00003 mov r0, r3 8ff0: eb001202 bl d800 8ff4: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 8ff8: e5d23000 ldrb r3, [r2] 8ffc: e3833002 orr r3, r3, #2 9000: e5c23000 strb r3, [r2] 9004: e3a03000 mov r3, #0 9008: e1a00003 mov r0, r3 900c: e24bd004 sub sp, fp, #4 9010: e8bd8800 pop {fp, pc} 00009014 : IPC_SERVER_INTERFACE(Ipc_cat, 1); 9014: e92d4800 push {fp, lr} 9018: e28db004 add fp, sp, #4 901c: e24dd028 sub sp, sp, #40 ; 0x28 9020: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 9024: e3a03000 mov r3, #0 9028: e50b3008 str r3, [fp, #-8] 902c: ea000014 b 9084 9030: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9034: e50b300c str r3, [fp, #-12] 9038: e51b3008 ldr r3, [fp, #-8] 903c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 9040: e51b3010 ldr r3, [fp, #-16] 9044: e2833003 add r3, r3, #3 9048: e1a03103 lsl r3, r3, #2 904c: e51b200c ldr r2, [fp, #-12] 9050: e0823003 add r3, r2, r3 9054: e1d330b0 ldrh r3, [r3] 9058: e1a02003 mov r2, r3 905c: e51b300c ldr r3, [fp, #-12] 9060: e0832002 add r2, r3, r2 9064: e51b3008 ldr r3, [fp, #-8] 9068: e1a03103 lsl r3, r3, #2 906c: e24b1004 sub r1, fp, #4 9070: e0813003 add r3, r1, r3 9074: e5032018 str r2, [r3, #-24] ; 0xffffffe8 9078: e51b3008 ldr r3, [fp, #-8] 907c: e2833001 add r3, r3, #1 9080: e50b3008 str r3, [fp, #-8] 9084: e51b3008 ldr r3, [fp, #-8] 9088: e3530000 cmp r3, #0 908c: daffffe7 ble 9030 9090: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 9094: e1a00003 mov r0, r3 9098: ebfffdac bl 8750 909c: e1a03000 mov r3, r0 90a0: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 90a4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 90a8: e50b3014 str r3, [fp, #-20] ; 0xffffffec 90ac: e24b3020 sub r3, fp, #32 90b0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 90b4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 90b8: e5d33000 ldrb r3, [r3] 90bc: e2033001 and r3, r3, #1 90c0: e6ef3073 uxtb r3, r3 90c4: e3530000 cmp r3, #0 90c8: 1a000007 bne 90ec 90cc: e30239fc movw r3, #10748 ; 0x29fc 90d0: e3403001 movt r3, #1 90d4: e3022aa0 movw r2, #10912 ; 0x2aa0 90d8: e3402001 movt r2, #1 90dc: e3a0107e mov r1, #126 ; 0x7e 90e0: e3020a14 movw r0, #10772 ; 0x2a14 90e4: e3400001 movt r0, #1 90e8: eb001170 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 90ec: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 90f0: e2833008 add r3, r3, #8 90f4: e3a02004 mov r2, #4 90f8: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 90fc: e1a00003 mov r0, r3 9100: eb0011be bl d800 9104: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 9108: e5d23000 ldrb r3, [r2] 910c: e3833002 orr r3, r3, #2 9110: e5c23000 strb r3, [r2] 9114: e3a03000 mov r3, #0 9118: e1a00003 mov r0, r3 911c: e24bd004 sub sp, fp, #4 9120: e8bd8800 pop {fp, pc} 00009124 : IPC_SERVER_INTERFACE(Ipc_open, 1); 9124: e92d4800 push {fp, lr} 9128: e28db004 add fp, sp, #4 912c: e24dd028 sub sp, sp, #40 ; 0x28 9130: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 9134: e3a03000 mov r3, #0 9138: e50b3008 str r3, [fp, #-8] 913c: ea000014 b 9194 9140: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9144: e50b300c str r3, [fp, #-12] 9148: e51b3008 ldr r3, [fp, #-8] 914c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 9150: e51b3010 ldr r3, [fp, #-16] 9154: e2833003 add r3, r3, #3 9158: e1a03103 lsl r3, r3, #2 915c: e51b200c ldr r2, [fp, #-12] 9160: e0823003 add r3, r2, r3 9164: e1d330b0 ldrh r3, [r3] 9168: e1a02003 mov r2, r3 916c: e51b300c ldr r3, [fp, #-12] 9170: e0832002 add r2, r3, r2 9174: e51b3008 ldr r3, [fp, #-8] 9178: e1a03103 lsl r3, r3, #2 917c: e24b1004 sub r1, fp, #4 9180: e0813003 add r3, r1, r3 9184: e5032018 str r2, [r3, #-24] ; 0xffffffe8 9188: e51b3008 ldr r3, [fp, #-8] 918c: e2833001 add r3, r3, #1 9190: e50b3008 str r3, [fp, #-8] 9194: e51b3008 ldr r3, [fp, #-8] 9198: e3530000 cmp r3, #0 919c: daffffe7 ble 9140 91a0: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 91a4: e1a00003 mov r0, r3 91a8: ebfffdbc bl 88a0 91ac: e1a03000 mov r3, r0 91b0: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 91b4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 91b8: e50b3014 str r3, [fp, #-20] ; 0xffffffec 91bc: e24b3020 sub r3, fp, #32 91c0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 91c4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 91c8: e5d33000 ldrb r3, [r3] 91cc: e2033001 and r3, r3, #1 91d0: e6ef3073 uxtb r3, r3 91d4: e3530000 cmp r3, #0 91d8: 1a000007 bne 91fc 91dc: e30239fc movw r3, #10748 ; 0x29fc 91e0: e3403001 movt r3, #1 91e4: e3022aa0 movw r2, #10912 ; 0x2aa0 91e8: e3402001 movt r2, #1 91ec: e3a0107e mov r1, #126 ; 0x7e 91f0: e3020a14 movw r0, #10772 ; 0x2a14 91f4: e3400001 movt r0, #1 91f8: eb00112c bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 91fc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9200: e2833008 add r3, r3, #8 9204: e3a02004 mov r2, #4 9208: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 920c: e1a00003 mov r0, r3 9210: eb00117a bl d800 9214: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 9218: e5d23000 ldrb r3, [r2] 921c: e3833002 orr r3, r3, #2 9220: e5c23000 strb r3, [r2] 9224: e3a03000 mov r3, #0 9228: e1a00003 mov r0, r3 922c: e24bd004 sub sp, fp, #4 9230: e8bd8800 pop {fp, pc} 00009234 : IPC_SERVER_INTERFACE(Ipc_close, 1); 9234: e92d4800 push {fp, lr} 9238: e28db004 add fp, sp, #4 923c: e24dd028 sub sp, sp, #40 ; 0x28 9240: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 9244: e3a03000 mov r3, #0 9248: e50b3008 str r3, [fp, #-8] 924c: ea000014 b 92a4 9250: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9254: e50b300c str r3, [fp, #-12] 9258: e51b3008 ldr r3, [fp, #-8] 925c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 9260: e51b3010 ldr r3, [fp, #-16] 9264: e2833003 add r3, r3, #3 9268: e1a03103 lsl r3, r3, #2 926c: e51b200c ldr r2, [fp, #-12] 9270: e0823003 add r3, r2, r3 9274: e1d330b0 ldrh r3, [r3] 9278: e1a02003 mov r2, r3 927c: e51b300c ldr r3, [fp, #-12] 9280: e0832002 add r2, r3, r2 9284: e51b3008 ldr r3, [fp, #-8] 9288: e1a03103 lsl r3, r3, #2 928c: e24b1004 sub r1, fp, #4 9290: e0813003 add r3, r1, r3 9294: e5032018 str r2, [r3, #-24] ; 0xffffffe8 9298: e51b3008 ldr r3, [fp, #-8] 929c: e2833001 add r3, r3, #1 92a0: e50b3008 str r3, [fp, #-8] 92a4: e51b3008 ldr r3, [fp, #-8] 92a8: e3530000 cmp r3, #0 92ac: daffffe7 ble 9250 92b0: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 92b4: e1a00003 mov r0, r3 92b8: ebfffdc3 bl 89cc 92bc: e1a03000 mov r3, r0 92c0: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 92c4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 92c8: e50b3014 str r3, [fp, #-20] ; 0xffffffec 92cc: e24b3020 sub r3, fp, #32 92d0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 92d4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 92d8: e5d33000 ldrb r3, [r3] 92dc: e2033001 and r3, r3, #1 92e0: e6ef3073 uxtb r3, r3 92e4: e3530000 cmp r3, #0 92e8: 1a000007 bne 930c 92ec: e30239fc movw r3, #10748 ; 0x29fc 92f0: e3403001 movt r3, #1 92f4: e3022aa0 movw r2, #10912 ; 0x2aa0 92f8: e3402001 movt r2, #1 92fc: e3a0107e mov r1, #126 ; 0x7e 9300: e3020a14 movw r0, #10772 ; 0x2a14 9304: e3400001 movt r0, #1 9308: eb0010e8 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 930c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9310: e2833008 add r3, r3, #8 9314: e3a02004 mov r2, #4 9318: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 931c: e1a00003 mov r0, r3 9320: eb001136 bl d800 9324: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 9328: e5d23000 ldrb r3, [r2] 932c: e3833002 orr r3, r3, #2 9330: e5c23000 strb r3, [r2] 9334: e3a03000 mov r3, #0 9338: e1a00003 mov r0, r3 933c: e24bd004 sub sp, fp, #4 9340: e8bd8800 pop {fp, pc} 00009344 : IPC_SERVER_INTERFACE(Ipc_read, 4); 9344: e92d4800 push {fp, lr} 9348: e28db004 add fp, sp, #4 934c: e24dd030 sub sp, sp, #48 ; 0x30 9350: e50b0030 str r0, [fp, #-48] ; 0xffffffd0 9354: e3a03000 mov r3, #0 9358: e50b3008 str r3, [fp, #-8] 935c: ea000014 b 93b4 9360: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 9364: e50b300c str r3, [fp, #-12] 9368: e51b3008 ldr r3, [fp, #-8] 936c: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 9370: e51b3010 ldr r3, [fp, #-16] 9374: e2833003 add r3, r3, #3 9378: e1a03103 lsl r3, r3, #2 937c: e51b200c ldr r2, [fp, #-12] 9380: e0823003 add r3, r2, r3 9384: e1d330b0 ldrh r3, [r3] 9388: e1a02003 mov r2, r3 938c: e51b300c ldr r3, [fp, #-12] 9390: e0832002 add r2, r3, r2 9394: e51b3008 ldr r3, [fp, #-8] 9398: e1a03103 lsl r3, r3, #2 939c: e24b1004 sub r1, fp, #4 93a0: e0813003 add r3, r1, r3 93a4: e5032024 str r2, [r3, #-36] ; 0xffffffdc 93a8: e51b3008 ldr r3, [fp, #-8] 93ac: e2833001 add r3, r3, #1 93b0: e50b3008 str r3, [fp, #-8] 93b4: e51b3008 ldr r3, [fp, #-8] 93b8: e3530003 cmp r3, #3 93bc: daffffe7 ble 9360 93c0: e51b0028 ldr r0, [fp, #-40] ; 0xffffffd8 93c4: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc 93c8: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 93cc: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 93d0: ebfffda1 bl 8a5c 93d4: e1a03000 mov r3, r0 93d8: e50b302c str r3, [fp, #-44] ; 0xffffffd4 93dc: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 93e0: e50b3014 str r3, [fp, #-20] ; 0xffffffec 93e4: e24b302c sub r3, fp, #44 ; 0x2c 93e8: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 93ec: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 93f0: e5d33000 ldrb r3, [r3] 93f4: e2033001 and r3, r3, #1 93f8: e6ef3073 uxtb r3, r3 93fc: e3530000 cmp r3, #0 9400: 1a000007 bne 9424 9404: e30239fc movw r3, #10748 ; 0x29fc 9408: e3403001 movt r3, #1 940c: e3022aa0 movw r2, #10912 ; 0x2aa0 9410: e3402001 movt r2, #1 9414: e3a0107e mov r1, #126 ; 0x7e 9418: e3020a14 movw r0, #10772 ; 0x2a14 941c: e3400001 movt r0, #1 9420: eb0010a2 bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 9424: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9428: e2833008 add r3, r3, #8 942c: e3a02004 mov r2, #4 9430: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 9434: e1a00003 mov r0, r3 9438: eb0010f0 bl d800 943c: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 9440: e5d23000 ldrb r3, [r2] 9444: e3833002 orr r3, r3, #2 9448: e5c23000 strb r3, [r2] 944c: e3a03000 mov r3, #0 9450: e1a00003 mov r0, r3 9454: e24bd004 sub sp, fp, #4 9458: e8bd8800 pop {fp, pc} 0000945c : IPC_SERVER_INTERFACE(Ipc_write, 4); 945c: e92d4800 push {fp, lr} 9460: e28db004 add fp, sp, #4 9464: e24dd030 sub sp, sp, #48 ; 0x30 9468: e50b0030 str r0, [fp, #-48] ; 0xffffffd0 946c: e3a03000 mov r3, #0 9470: e50b3008 str r3, [fp, #-8] 9474: ea000014 b 94cc 9478: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 947c: e50b300c str r3, [fp, #-12] 9480: e51b3008 ldr r3, [fp, #-8] 9484: e50b3010 str r3, [fp, #-16] return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); 9488: e51b3010 ldr r3, [fp, #-16] 948c: e2833003 add r3, r3, #3 9490: e1a03103 lsl r3, r3, #2 9494: e51b200c ldr r2, [fp, #-12] 9498: e0823003 add r3, r2, r3 949c: e1d330b0 ldrh r3, [r3] 94a0: e1a02003 mov r2, r3 94a4: e51b300c ldr r3, [fp, #-12] 94a8: e0832002 add r2, r3, r2 94ac: e51b3008 ldr r3, [fp, #-8] 94b0: e1a03103 lsl r3, r3, #2 94b4: e24b1004 sub r1, fp, #4 94b8: e0813003 add r3, r1, r3 94bc: e5032024 str r2, [r3, #-36] ; 0xffffffdc 94c0: e51b3008 ldr r3, [fp, #-8] 94c4: e2833001 add r3, r3, #1 94c8: e50b3008 str r3, [fp, #-8] 94cc: e51b3008 ldr r3, [fp, #-8] 94d0: e3530003 cmp r3, #3 94d4: daffffe7 ble 9478 94d8: e51b0028 ldr r0, [fp, #-40] ; 0xffffffd8 94dc: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc 94e0: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 94e4: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 94e8: ebfffd8a bl 8b18 94ec: e1a03000 mov r3, r0 94f0: e50b302c str r3, [fp, #-44] ; 0xffffffd4 94f4: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 94f8: e50b3014 str r3, [fp, #-20] ; 0xffffffec 94fc: e24b302c sub r3, fp, #44 ; 0x2c 9500: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 assert(msg->header.valid == 1); 9504: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9508: e5d33000 ldrb r3, [r3] 950c: e2033001 and r3, r3, #1 9510: e6ef3073 uxtb r3, r3 9514: e3530000 cmp r3, #0 9518: 1a000007 bne 953c 951c: e30239fc movw r3, #10748 ; 0x29fc 9520: e3403001 movt r3, #1 9524: e3022aa0 movw r2, #10912 ; 0x2aa0 9528: e3402001 movt r2, #1 952c: e3a0107e mov r1, #126 ; 0x7e 9530: e3020a14 movw r0, #10772 ; 0x2a14 9534: e3400001 movt r0, #1 9538: eb00105c bl d6b0 <__assert_func> memcpy(&msg->header.ret_val, ret_val, sizeof(msg->header.ret_val)); 953c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9540: e2833008 add r3, r3, #8 9544: e3a02004 mov r2, #4 9548: e51b1018 ldr r1, [fp, #-24] ; 0xffffffe8 954c: e1a00003 mov r0, r3 9550: eb0010aa bl d800 9554: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 9558: e5d23000 ldrb r3, [r2] 955c: e3833002 orr r3, r3, #2 9560: e5c23000 strb r3, [r2] 9564: e3a03000 mov r3, #0 9568: e1a00003 mov r0, r3 956c: e24bd004 sub sp, fp, #4 9570: e8bd8800 pop {fp, pc} 00009574
: Ipc_close, Ipc_read, Ipc_write); int main(int argc, char* argv[]) { 9574: e92d4800 push {fp, lr} 9578: e28db004 add fp, sp, #4 957c: e24dd018 sub sp, sp, #24 9580: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 9584: e50b101c str r1, [fp, #-28] ; 0xffffffe4 sys_state_info info; get_memblock_info(&info); 9588: e24b3010 sub r3, fp, #16 958c: e1a00003 mov r0, r3 9590: eb000f36 bl d270 int len = info.memblock_info.memblock_end - info.memblock_info.memblock_start; 9594: e51b200c ldr r2, [fp, #-12] 9598: e51b3010 ldr r3, [fp, #-16] 959c: e0423003 sub r3, r2, r3 95a0: e50b3008 str r3, [fp, #-8] mmap(FS_IMG_ADDR, info.memblock_info.memblock_start, len, false); 95a4: e51b1010 ldr r1, [fp, #-16] 95a8: e3a03000 mov r3, #0 95ac: e51b2008 ldr r2, [fp, #-8] 95b0: e3a00206 mov r0, #1610612736 ; 0x60000000 95b4: eb000f83 bl d3c8 MemFsInit((uintptr_t)FS_IMG_ADDR, (uint32_t)len); 95b8: e51b3008 ldr r3, [fp, #-8] 95bc: e1a01003 mov r1, r3 95c0: e3a00206 mov r0, #1610612736 ; 0x60000000 95c4: eb000545 bl aae0 if (register_server("MemFS") < 0) { 95c8: e3020a64 movw r0, #10852 ; 0x2a64 95cc: e3400001 movt r0, #1 95d0: eb000ee6 bl d170 95d4: e1a03000 mov r3, r0 95d8: e3530000 cmp r3, #0 95dc: aa000005 bge 95f8 printf("register server name: %s failed.\n", "SimpleServer"); 95e0: e3021a6c movw r1, #10860 ; 0x2a6c 95e4: e3401001 movt r1, #1 95e8: e3020a7c movw r0, #10876 ; 0x2a7c 95ec: e3400001 movt r0, #1 95f0: eb0009e2 bl bd80 exit(); 95f4: eb000ec1 bl d100 } ipc_server_loop(&IpcFsServer); 95f8: e3030154 movw r0, #12628 ; 0x3154 95fc: e3400001 movt r0, #1 9600: eb000bd3 bl c554 // never reached exit(); 9604: eb000ebd bl d100 9608: e3a03000 mov r3, #0 } 960c: e1a00003 mov r0, r3 9610: e24bd004 sub sp, fp, #4 9614: e8bd8800 pop {fp, pc} 00009618 : * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. */ #include "libfs_to_client.h" IPC_INTERFACE(Ipc_ls, 1, path, strlen(path) + 1); 9618: e92d4800 push {fp, lr} 961c: e28db004 add fp, sp, #4 9620: e24dd048 sub sp, sp, #72 ; 0x48 9624: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 9628: e50b104c str r1, [fp, #-76] ; 0xffffffb4 962c: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9630: e3530000 cmp r3, #0 9634: 1a000001 bne 9640 9638: e3e03000 mvn r3, #0 963c: ea00006d b 97f8 9640: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9644: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 9648: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 964c: e50b303c str r3, [fp, #-60] ; 0xffffffc4 9650: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 9654: eb0011ce bl dd94 9658: e1a03000 mov r3, r0 965c: e2833001 add r3, r3, #1 9660: e50b3044 str r3, [fp, #-68] ; 0xffffffbc 9664: e24b3044 sub r3, fp, #68 ; 0x44 9668: e1a02003 mov r2, r3 966c: e3a01001 mov r1, #1 9670: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 9674: eb000a4c bl bfac 9678: e1a03000 mov r3, r0 967c: e50b3008 str r3, [fp, #-8] 9680: e51b3008 ldr r3, [fp, #-8] 9684: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 9688: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 968c: e50b3034 str r3, [fp, #-52] ; 0xffffffcc 9690: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc 9694: eb0011be bl dd94 9698: e1a03000 mov r3, r0 969c: e2833001 add r3, r3, #1 96a0: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc 96a4: e3a01000 mov r1, #0 96a8: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 96ac: eb000aab bl c160 96b0: e3a03001 mov r3, #1 96b4: e50b300c str r3, [fp, #-12] 96b8: e51b3008 ldr r3, [fp, #-8] 96bc: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 96c0: e3a03001 mov r3, #1 96c4: e50b302c str r3, [fp, #-44] ; 0xffffffd4 /// @param msg /// @param opcode /// @return __attribute__((__always_inline__)) static inline bool ipc_msg_set_opcode(struct IpcMsg* msg, int opcode) { if (opcode < 0 || opcode > UINT8_MAX) { 96c8: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 96cc: e3530000 cmp r3, #0 96d0: ba000002 blt 96e0 96d4: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 96d8: e35300ff cmp r3, #255 ; 0xff 96dc: da000001 ble 96e8 return false; 96e0: e3a03000 mov r3, #0 96e4: ea000004 b 96fc } msg->header.opcode = opcode; 96e8: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 96ec: e6ef2073 uxtb r2, r3 96f0: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 96f4: e5c32001 strb r2, [r3, #1] return true; 96f8: e3a03001 mov r3, #1 96fc: e50b300c str r3, [fp, #-12] 9700: e51b0008 ldr r0, [fp, #-8] 9704: eb000b1d bl c380 9708: e51b3008 ldr r3, [fp, #-8] 970c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 9710: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9714: e50b3024 str r3, [fp, #-36] ; 0xffffffdc 9718: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc 971c: eb00119c bl dd94 9720: e1a03000 mov r3, r0 9724: e2833001 add r3, r3, #1 9728: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc 972c: e3a01000 mov r1, #0 9730: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 9734: eb000ad1 bl c280 9738: e3a03001 mov r3, #1 973c: e50b300c str r3, [fp, #-12] 9740: e3a03000 mov r3, #0 9744: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 9748: e51b3008 ldr r3, [fp, #-8] 974c: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 9750: e24b3040 sub r3, fp, #64 ; 0x40 9754: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); 9758: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 975c: e5d33000 ldrb r3, [r3] 9760: e2033002 and r3, r3, #2 9764: e6ef3073 uxtb r3, r3 9768: e3530000 cmp r3, #0 976c: 1a000007 bne 9790 9770: e3023ab4 movw r3, #10932 ; 0x2ab4 9774: e3403001 movt r3, #1 9778: e3022b1c movw r2, #11036 ; 0x2b1c 977c: e3402001 movt r2, #1 9780: e3a01074 mov r1, #116 ; 0x74 9784: e3020acc movw r0, #10956 ; 0x2acc 9788: e3400001 movt r0, #1 978c: eb000fc7 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); 9790: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9794: e2833008 add r3, r3, #8 9798: e3a02004 mov r2, #4 979c: e1a01003 mov r1, r3 97a0: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 97a4: eb001015 bl d800 97a8: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 97ac: e50b3010 str r3, [fp, #-16] /// @brief delete first msg in session /// @param session /// @return __attribute__((__always_inline__)) static inline bool ipc_session_forward(struct Session* session) { struct IpcMsg* msg = IPCSESSION_MSG(session); 97b0: e51b3010 ldr r3, [fp, #-16] 97b4: e5933010 ldr r3, [r3, #16] 97b8: e51b2010 ldr r2, [fp, #-16] 97bc: e5922008 ldr r2, [r2, #8] 97c0: e0833002 add r3, r3, r2 97c4: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { 97c8: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 97cc: e5d33000 ldrb r3, [r3] 97d0: e2033004 and r3, r3, #4 97d4: e6ef3073 uxtb r3, r3 97d8: e3530000 cmp r3, #0 97dc: 0a000004 beq 97f4 return false; } return session_free_buf(session, msg->header.len); 97e0: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 97e4: e1d330b2 ldrh r3, [r3, #2] 97e8: e1a01003 mov r1, r3 97ec: e51b0010 ldr r0, [fp, #-16] 97f0: eb000cdc bl cb68 97f4: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 97f8: e1a00003 mov r0, r3 97fc: e24bd004 sub sp, fp, #4 9800: e8bd8800 pop {fp, pc} 00009804 : int ls(struct Session* session, char* path) { 9804: e92d4800 push {fp, lr} 9808: e28db004 add fp, sp, #4 980c: e24dd008 sub sp, sp, #8 9810: e50b0008 str r0, [fp, #-8] 9814: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_ls)(session, path); 9818: e51b100c ldr r1, [fp, #-12] 981c: e51b0008 ldr r0, [fp, #-8] 9820: ebffff7c bl 9618 9824: e1a03000 mov r3, r0 } 9828: e1a00003 mov r0, r3 982c: e24bd004 sub sp, fp, #4 9830: e8bd8800 pop {fp, pc} 00009834 : IPC_INTERFACE(Ipc_cd, 1, path, strlen(path) + 1); 9834: e92d4800 push {fp, lr} 9838: e28db004 add fp, sp, #4 983c: e24dd048 sub sp, sp, #72 ; 0x48 9840: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 9844: e50b104c str r1, [fp, #-76] ; 0xffffffb4 9848: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 984c: e3530000 cmp r3, #0 9850: 1a000001 bne 985c 9854: e3e03000 mvn r3, #0 9858: ea00006d b 9a14 985c: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9860: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 9864: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9868: e50b303c str r3, [fp, #-60] ; 0xffffffc4 986c: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 9870: eb001147 bl dd94 9874: e1a03000 mov r3, r0 9878: e2833001 add r3, r3, #1 987c: e50b3044 str r3, [fp, #-68] ; 0xffffffbc 9880: e24b3044 sub r3, fp, #68 ; 0x44 9884: e1a02003 mov r2, r3 9888: e3a01001 mov r1, #1 988c: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 9890: eb0009c5 bl bfac 9894: e1a03000 mov r3, r0 9898: e50b3008 str r3, [fp, #-8] 989c: e51b3008 ldr r3, [fp, #-8] 98a0: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 98a4: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 98a8: e50b3034 str r3, [fp, #-52] ; 0xffffffcc 98ac: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc 98b0: eb001137 bl dd94 98b4: e1a03000 mov r3, r0 98b8: e2833001 add r3, r3, #1 98bc: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc 98c0: e3a01000 mov r1, #0 98c4: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 98c8: eb000a24 bl c160 98cc: e3a03001 mov r3, #1 98d0: e50b300c str r3, [fp, #-12] 98d4: e51b3008 ldr r3, [fp, #-8] 98d8: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 98dc: e3a03002 mov r3, #2 98e0: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { 98e4: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 98e8: e3530000 cmp r3, #0 98ec: ba000002 blt 98fc 98f0: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 98f4: e35300ff cmp r3, #255 ; 0xff 98f8: da000001 ble 9904 return false; 98fc: e3a03000 mov r3, #0 9900: ea000004 b 9918 msg->header.opcode = opcode; 9904: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9908: e6ef2073 uxtb r2, r3 990c: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9910: e5c32001 strb r2, [r3, #1] return true; 9914: e3a03001 mov r3, #1 9918: e50b300c str r3, [fp, #-12] 991c: e51b0008 ldr r0, [fp, #-8] 9920: eb000a96 bl c380 9924: e51b3008 ldr r3, [fp, #-8] 9928: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 992c: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9930: e50b3024 str r3, [fp, #-36] ; 0xffffffdc 9934: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc 9938: eb001115 bl dd94 993c: e1a03000 mov r3, r0 9940: e2833001 add r3, r3, #1 9944: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc 9948: e3a01000 mov r1, #0 994c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 9950: eb000a4a bl c280 9954: e3a03001 mov r3, #1 9958: e50b300c str r3, [fp, #-12] 995c: e3a03000 mov r3, #0 9960: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 9964: e51b3008 ldr r3, [fp, #-8] 9968: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 996c: e24b3040 sub r3, fp, #64 ; 0x40 9970: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); 9974: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9978: e5d33000 ldrb r3, [r3] 997c: e2033002 and r3, r3, #2 9980: e6ef3073 uxtb r3, r3 9984: e3530000 cmp r3, #0 9988: 1a000007 bne 99ac 998c: e3023ab4 movw r3, #10932 ; 0x2ab4 9990: e3403001 movt r3, #1 9994: e3022b1c movw r2, #11036 ; 0x2b1c 9998: e3402001 movt r2, #1 999c: e3a01074 mov r1, #116 ; 0x74 99a0: e3020acc movw r0, #10956 ; 0x2acc 99a4: e3400001 movt r0, #1 99a8: eb000f40 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); 99ac: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 99b0: e2833008 add r3, r3, #8 99b4: e3a02004 mov r2, #4 99b8: e1a01003 mov r1, r3 99bc: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 99c0: eb000f8e bl d800 99c4: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 99c8: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); 99cc: e51b3010 ldr r3, [fp, #-16] 99d0: e5933010 ldr r3, [r3, #16] 99d4: e51b2010 ldr r2, [fp, #-16] 99d8: e5922008 ldr r2, [r2, #8] 99dc: e0833002 add r3, r3, r2 99e0: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { 99e4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 99e8: e5d33000 ldrb r3, [r3] 99ec: e2033004 and r3, r3, #4 99f0: e6ef3073 uxtb r3, r3 99f4: e3530000 cmp r3, #0 99f8: 0a000004 beq 9a10 return session_free_buf(session, msg->header.len); 99fc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9a00: e1d330b2 ldrh r3, [r3, #2] 9a04: e1a01003 mov r1, r3 9a08: e51b0010 ldr r0, [fp, #-16] 9a0c: eb000c55 bl cb68 9a10: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 9a14: e1a00003 mov r0, r3 9a18: e24bd004 sub sp, fp, #4 9a1c: e8bd8800 pop {fp, pc} 00009a20 : int cd(struct Session* session, char* path) { 9a20: e92d4800 push {fp, lr} 9a24: e28db004 add fp, sp, #4 9a28: e24dd008 sub sp, sp, #8 9a2c: e50b0008 str r0, [fp, #-8] 9a30: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_cd)(session, path); 9a34: e51b100c ldr r1, [fp, #-12] 9a38: e51b0008 ldr r0, [fp, #-8] 9a3c: ebffff7c bl 9834 9a40: e1a03000 mov r3, r0 } 9a44: e1a00003 mov r0, r3 9a48: e24bd004 sub sp, fp, #4 9a4c: e8bd8800 pop {fp, pc} 00009a50 : IPC_INTERFACE(Ipc_mkdir, 1, path, strlen(path) + 1); 9a50: e92d4800 push {fp, lr} 9a54: e28db004 add fp, sp, #4 9a58: e24dd048 sub sp, sp, #72 ; 0x48 9a5c: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 9a60: e50b104c str r1, [fp, #-76] ; 0xffffffb4 9a64: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9a68: e3530000 cmp r3, #0 9a6c: 1a000001 bne 9a78 9a70: e3e03000 mvn r3, #0 9a74: ea00006d b 9c30 9a78: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9a7c: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 9a80: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9a84: e50b303c str r3, [fp, #-60] ; 0xffffffc4 9a88: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 9a8c: eb0010c0 bl dd94 9a90: e1a03000 mov r3, r0 9a94: e2833001 add r3, r3, #1 9a98: e50b3044 str r3, [fp, #-68] ; 0xffffffbc 9a9c: e24b3044 sub r3, fp, #68 ; 0x44 9aa0: e1a02003 mov r2, r3 9aa4: e3a01001 mov r1, #1 9aa8: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 9aac: eb00093e bl bfac 9ab0: e1a03000 mov r3, r0 9ab4: e50b3008 str r3, [fp, #-8] 9ab8: e51b3008 ldr r3, [fp, #-8] 9abc: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 9ac0: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9ac4: e50b3034 str r3, [fp, #-52] ; 0xffffffcc 9ac8: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc 9acc: eb0010b0 bl dd94 9ad0: e1a03000 mov r3, r0 9ad4: e2833001 add r3, r3, #1 9ad8: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc 9adc: e3a01000 mov r1, #0 9ae0: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 9ae4: eb00099d bl c160 9ae8: e3a03001 mov r3, #1 9aec: e50b300c str r3, [fp, #-12] 9af0: e51b3008 ldr r3, [fp, #-8] 9af4: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 9af8: e3a03003 mov r3, #3 9afc: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { 9b00: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9b04: e3530000 cmp r3, #0 9b08: ba000002 blt 9b18 9b0c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9b10: e35300ff cmp r3, #255 ; 0xff 9b14: da000001 ble 9b20 return false; 9b18: e3a03000 mov r3, #0 9b1c: ea000004 b 9b34 msg->header.opcode = opcode; 9b20: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9b24: e6ef2073 uxtb r2, r3 9b28: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9b2c: e5c32001 strb r2, [r3, #1] return true; 9b30: e3a03001 mov r3, #1 9b34: e50b300c str r3, [fp, #-12] 9b38: e51b0008 ldr r0, [fp, #-8] 9b3c: eb000a0f bl c380 9b40: e51b3008 ldr r3, [fp, #-8] 9b44: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 9b48: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9b4c: e50b3024 str r3, [fp, #-36] ; 0xffffffdc 9b50: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc 9b54: eb00108e bl dd94 9b58: e1a03000 mov r3, r0 9b5c: e2833001 add r3, r3, #1 9b60: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc 9b64: e3a01000 mov r1, #0 9b68: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 9b6c: eb0009c3 bl c280 9b70: e3a03001 mov r3, #1 9b74: e50b300c str r3, [fp, #-12] 9b78: e3a03000 mov r3, #0 9b7c: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 9b80: e51b3008 ldr r3, [fp, #-8] 9b84: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 9b88: e24b3040 sub r3, fp, #64 ; 0x40 9b8c: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); 9b90: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9b94: e5d33000 ldrb r3, [r3] 9b98: e2033002 and r3, r3, #2 9b9c: e6ef3073 uxtb r3, r3 9ba0: e3530000 cmp r3, #0 9ba4: 1a000007 bne 9bc8 9ba8: e3023ab4 movw r3, #10932 ; 0x2ab4 9bac: e3403001 movt r3, #1 9bb0: e3022b1c movw r2, #11036 ; 0x2b1c 9bb4: e3402001 movt r2, #1 9bb8: e3a01074 mov r1, #116 ; 0x74 9bbc: e3020acc movw r0, #10956 ; 0x2acc 9bc0: e3400001 movt r0, #1 9bc4: eb000eb9 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); 9bc8: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9bcc: e2833008 add r3, r3, #8 9bd0: e3a02004 mov r2, #4 9bd4: e1a01003 mov r1, r3 9bd8: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 9bdc: eb000f07 bl d800 9be0: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9be4: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); 9be8: e51b3010 ldr r3, [fp, #-16] 9bec: e5933010 ldr r3, [r3, #16] 9bf0: e51b2010 ldr r2, [fp, #-16] 9bf4: e5922008 ldr r2, [r2, #8] 9bf8: e0833002 add r3, r3, r2 9bfc: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { 9c00: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9c04: e5d33000 ldrb r3, [r3] 9c08: e2033004 and r3, r3, #4 9c0c: e6ef3073 uxtb r3, r3 9c10: e3530000 cmp r3, #0 9c14: 0a000004 beq 9c2c return session_free_buf(session, msg->header.len); 9c18: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9c1c: e1d330b2 ldrh r3, [r3, #2] 9c20: e1a01003 mov r1, r3 9c24: e51b0010 ldr r0, [fp, #-16] 9c28: eb000bce bl cb68 9c2c: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 9c30: e1a00003 mov r0, r3 9c34: e24bd004 sub sp, fp, #4 9c38: e8bd8800 pop {fp, pc} 00009c3c : int mkdir(struct Session* session, char* path) { 9c3c: e92d4800 push {fp, lr} 9c40: e28db004 add fp, sp, #4 9c44: e24dd008 sub sp, sp, #8 9c48: e50b0008 str r0, [fp, #-8] 9c4c: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_mkdir)(session, path); 9c50: e51b100c ldr r1, [fp, #-12] 9c54: e51b0008 ldr r0, [fp, #-8] 9c58: ebffff7c bl 9a50 9c5c: e1a03000 mov r3, r0 } 9c60: e1a00003 mov r0, r3 9c64: e24bd004 sub sp, fp, #4 9c68: e8bd8800 pop {fp, pc} 00009c6c : IPC_INTERFACE(Ipc_delete, 1, path, strlen(path) + 1); 9c6c: e92d4800 push {fp, lr} 9c70: e28db004 add fp, sp, #4 9c74: e24dd048 sub sp, sp, #72 ; 0x48 9c78: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 9c7c: e50b104c str r1, [fp, #-76] ; 0xffffffb4 9c80: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9c84: e3530000 cmp r3, #0 9c88: 1a000001 bne 9c94 9c8c: e3e03000 mvn r3, #0 9c90: ea00006d b 9e4c 9c94: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9c98: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 9c9c: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9ca0: e50b303c str r3, [fp, #-60] ; 0xffffffc4 9ca4: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 9ca8: eb001039 bl dd94 9cac: e1a03000 mov r3, r0 9cb0: e2833001 add r3, r3, #1 9cb4: e50b3044 str r3, [fp, #-68] ; 0xffffffbc 9cb8: e24b3044 sub r3, fp, #68 ; 0x44 9cbc: e1a02003 mov r2, r3 9cc0: e3a01001 mov r1, #1 9cc4: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 9cc8: eb0008b7 bl bfac 9ccc: e1a03000 mov r3, r0 9cd0: e50b3008 str r3, [fp, #-8] 9cd4: e51b3008 ldr r3, [fp, #-8] 9cd8: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 9cdc: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9ce0: e50b3034 str r3, [fp, #-52] ; 0xffffffcc 9ce4: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc 9ce8: eb001029 bl dd94 9cec: e1a03000 mov r3, r0 9cf0: e2833001 add r3, r3, #1 9cf4: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc 9cf8: e3a01000 mov r1, #0 9cfc: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 9d00: eb000916 bl c160 9d04: e3a03001 mov r3, #1 9d08: e50b300c str r3, [fp, #-12] 9d0c: e51b3008 ldr r3, [fp, #-8] 9d10: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 9d14: e3a03004 mov r3, #4 9d18: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { 9d1c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9d20: e3530000 cmp r3, #0 9d24: ba000002 blt 9d34 9d28: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9d2c: e35300ff cmp r3, #255 ; 0xff 9d30: da000001 ble 9d3c return false; 9d34: e3a03000 mov r3, #0 9d38: ea000004 b 9d50 msg->header.opcode = opcode; 9d3c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9d40: e6ef2073 uxtb r2, r3 9d44: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9d48: e5c32001 strb r2, [r3, #1] return true; 9d4c: e3a03001 mov r3, #1 9d50: e50b300c str r3, [fp, #-12] 9d54: e51b0008 ldr r0, [fp, #-8] 9d58: eb000988 bl c380 9d5c: e51b3008 ldr r3, [fp, #-8] 9d60: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 9d64: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9d68: e50b3024 str r3, [fp, #-36] ; 0xffffffdc 9d6c: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc 9d70: eb001007 bl dd94 9d74: e1a03000 mov r3, r0 9d78: e2833001 add r3, r3, #1 9d7c: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc 9d80: e3a01000 mov r1, #0 9d84: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 9d88: eb00093c bl c280 9d8c: e3a03001 mov r3, #1 9d90: e50b300c str r3, [fp, #-12] 9d94: e3a03000 mov r3, #0 9d98: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 9d9c: e51b3008 ldr r3, [fp, #-8] 9da0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 9da4: e24b3040 sub r3, fp, #64 ; 0x40 9da8: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); 9dac: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9db0: e5d33000 ldrb r3, [r3] 9db4: e2033002 and r3, r3, #2 9db8: e6ef3073 uxtb r3, r3 9dbc: e3530000 cmp r3, #0 9dc0: 1a000007 bne 9de4 9dc4: e3023ab4 movw r3, #10932 ; 0x2ab4 9dc8: e3403001 movt r3, #1 9dcc: e3022b1c movw r2, #11036 ; 0x2b1c 9dd0: e3402001 movt r2, #1 9dd4: e3a01074 mov r1, #116 ; 0x74 9dd8: e3020acc movw r0, #10956 ; 0x2acc 9ddc: e3400001 movt r0, #1 9de0: eb000e32 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); 9de4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9de8: e2833008 add r3, r3, #8 9dec: e3a02004 mov r2, #4 9df0: e1a01003 mov r1, r3 9df4: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 9df8: eb000e80 bl d800 9dfc: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9e00: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); 9e04: e51b3010 ldr r3, [fp, #-16] 9e08: e5933010 ldr r3, [r3, #16] 9e0c: e51b2010 ldr r2, [fp, #-16] 9e10: e5922008 ldr r2, [r2, #8] 9e14: e0833002 add r3, r3, r2 9e18: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { 9e1c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9e20: e5d33000 ldrb r3, [r3] 9e24: e2033004 and r3, r3, #4 9e28: e6ef3073 uxtb r3, r3 9e2c: e3530000 cmp r3, #0 9e30: 0a000004 beq 9e48 return session_free_buf(session, msg->header.len); 9e34: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 9e38: e1d330b2 ldrh r3, [r3, #2] 9e3c: e1a01003 mov r1, r3 9e40: e51b0010 ldr r0, [fp, #-16] 9e44: eb000b47 bl cb68 9e48: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 9e4c: e1a00003 mov r0, r3 9e50: e24bd004 sub sp, fp, #4 9e54: e8bd8800 pop {fp, pc} 00009e58 : int rm(struct Session* session, char* path) { 9e58: e92d4800 push {fp, lr} 9e5c: e28db004 add fp, sp, #4 9e60: e24dd008 sub sp, sp, #8 9e64: e50b0008 str r0, [fp, #-8] 9e68: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_delete)(session, path); 9e6c: e51b100c ldr r1, [fp, #-12] 9e70: e51b0008 ldr r0, [fp, #-8] 9e74: ebffff7c bl 9c6c 9e78: e1a03000 mov r3, r0 } 9e7c: e1a00003 mov r0, r3 9e80: e24bd004 sub sp, fp, #4 9e84: e8bd8800 pop {fp, pc} 00009e88 : IPC_INTERFACE(Ipc_cat, 1, path, strlen(path) + 1); 9e88: e92d4800 push {fp, lr} 9e8c: e28db004 add fp, sp, #4 9e90: e24dd048 sub sp, sp, #72 ; 0x48 9e94: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 9e98: e50b104c str r1, [fp, #-76] ; 0xffffffb4 9e9c: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9ea0: e3530000 cmp r3, #0 9ea4: 1a000001 bne 9eb0 9ea8: e3e03000 mvn r3, #0 9eac: ea00006d b a068 9eb0: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 9eb4: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 9eb8: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9ebc: e50b303c str r3, [fp, #-60] ; 0xffffffc4 9ec0: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 9ec4: eb000fb2 bl dd94 9ec8: e1a03000 mov r3, r0 9ecc: e2833001 add r3, r3, #1 9ed0: e50b3044 str r3, [fp, #-68] ; 0xffffffbc 9ed4: e24b3044 sub r3, fp, #68 ; 0x44 9ed8: e1a02003 mov r2, r3 9edc: e3a01001 mov r1, #1 9ee0: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 9ee4: eb000830 bl bfac 9ee8: e1a03000 mov r3, r0 9eec: e50b3008 str r3, [fp, #-8] 9ef0: e51b3008 ldr r3, [fp, #-8] 9ef4: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 9ef8: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9efc: e50b3034 str r3, [fp, #-52] ; 0xffffffcc 9f00: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc 9f04: eb000fa2 bl dd94 9f08: e1a03000 mov r3, r0 9f0c: e2833001 add r3, r3, #1 9f10: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc 9f14: e3a01000 mov r1, #0 9f18: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 9f1c: eb00088f bl c160 9f20: e3a03001 mov r3, #1 9f24: e50b300c str r3, [fp, #-12] 9f28: e51b3008 ldr r3, [fp, #-8] 9f2c: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 9f30: e3a03005 mov r3, #5 9f34: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { 9f38: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9f3c: e3530000 cmp r3, #0 9f40: ba000002 blt 9f50 9f44: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9f48: e35300ff cmp r3, #255 ; 0xff 9f4c: da000001 ble 9f58 return false; 9f50: e3a03000 mov r3, #0 9f54: ea000004 b 9f6c msg->header.opcode = opcode; 9f58: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 9f5c: e6ef2073 uxtb r2, r3 9f60: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 9f64: e5c32001 strb r2, [r3, #1] return true; 9f68: e3a03001 mov r3, #1 9f6c: e50b300c str r3, [fp, #-12] 9f70: e51b0008 ldr r0, [fp, #-8] 9f74: eb000901 bl c380 9f78: e51b3008 ldr r3, [fp, #-8] 9f7c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 9f80: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 9f84: e50b3024 str r3, [fp, #-36] ; 0xffffffdc 9f88: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc 9f8c: eb000f80 bl dd94 9f90: e1a03000 mov r3, r0 9f94: e2833001 add r3, r3, #1 9f98: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc 9f9c: e3a01000 mov r1, #0 9fa0: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 9fa4: eb0008b5 bl c280 9fa8: e3a03001 mov r3, #1 9fac: e50b300c str r3, [fp, #-12] 9fb0: e3a03000 mov r3, #0 9fb4: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 9fb8: e51b3008 ldr r3, [fp, #-8] 9fbc: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 9fc0: e24b3040 sub r3, fp, #64 ; 0x40 9fc4: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); 9fc8: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 9fcc: e5d33000 ldrb r3, [r3] 9fd0: e2033002 and r3, r3, #2 9fd4: e6ef3073 uxtb r3, r3 9fd8: e3530000 cmp r3, #0 9fdc: 1a000007 bne a000 9fe0: e3023ab4 movw r3, #10932 ; 0x2ab4 9fe4: e3403001 movt r3, #1 9fe8: e3022b1c movw r2, #11036 ; 0x2b1c 9fec: e3402001 movt r2, #1 9ff0: e3a01074 mov r1, #116 ; 0x74 9ff4: e3020acc movw r0, #10956 ; 0x2acc 9ff8: e3400001 movt r0, #1 9ffc: eb000dab bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); a000: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a004: e2833008 add r3, r3, #8 a008: e3a02004 mov r2, #4 a00c: e1a01003 mov r1, r3 a010: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 a014: eb000df9 bl d800 a018: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a01c: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); a020: e51b3010 ldr r3, [fp, #-16] a024: e5933010 ldr r3, [r3, #16] a028: e51b2010 ldr r2, [fp, #-16] a02c: e5922008 ldr r2, [r2, #8] a030: e0833002 add r3, r3, r2 a034: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { a038: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a03c: e5d33000 ldrb r3, [r3] a040: e2033004 and r3, r3, #4 a044: e6ef3073 uxtb r3, r3 a048: e3530000 cmp r3, #0 a04c: 0a000004 beq a064 return session_free_buf(session, msg->header.len); a050: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a054: e1d330b2 ldrh r3, [r3, #2] a058: e1a01003 mov r1, r3 a05c: e51b0010 ldr r0, [fp, #-16] a060: eb000ac0 bl cb68 a064: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 a068: e1a00003 mov r0, r3 a06c: e24bd004 sub sp, fp, #4 a070: e8bd8800 pop {fp, pc} 0000a074 : int cat(struct Session* session, char* path) { a074: e92d4800 push {fp, lr} a078: e28db004 add fp, sp, #4 a07c: e24dd008 sub sp, sp, #8 a080: e50b0008 str r0, [fp, #-8] a084: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_cat)(session, path); a088: e51b100c ldr r1, [fp, #-12] a08c: e51b0008 ldr r0, [fp, #-8] a090: ebffff7c bl 9e88 a094: e1a03000 mov r3, r0 } a098: e1a00003 mov r0, r3 a09c: e24bd004 sub sp, fp, #4 a0a0: e8bd8800 pop {fp, pc} 0000a0a4 : IPC_INTERFACE(Ipc_open, 1, path, strlen(path) + 1); a0a4: e92d4800 push {fp, lr} a0a8: e28db004 add fp, sp, #4 a0ac: e24dd048 sub sp, sp, #72 ; 0x48 a0b0: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 a0b4: e50b104c str r1, [fp, #-76] ; 0xffffffb4 a0b8: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a0bc: e3530000 cmp r3, #0 a0c0: 1a000001 bne a0cc a0c4: e3e03000 mvn r3, #0 a0c8: ea00006d b a284 a0cc: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a0d0: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 a0d4: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a0d8: e50b303c str r3, [fp, #-60] ; 0xffffffc4 a0dc: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a0e0: eb000f2b bl dd94 a0e4: e1a03000 mov r3, r0 a0e8: e2833001 add r3, r3, #1 a0ec: e50b3044 str r3, [fp, #-68] ; 0xffffffbc a0f0: e24b3044 sub r3, fp, #68 ; 0x44 a0f4: e1a02003 mov r2, r3 a0f8: e3a01001 mov r1, #1 a0fc: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 a100: eb0007a9 bl bfac a104: e1a03000 mov r3, r0 a108: e50b3008 str r3, [fp, #-8] a10c: e51b3008 ldr r3, [fp, #-8] a110: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 a114: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a118: e50b3034 str r3, [fp, #-52] ; 0xffffffcc a11c: e51b0034 ldr r0, [fp, #-52] ; 0xffffffcc a120: eb000f1b bl dd94 a124: e1a03000 mov r3, r0 a128: e2833001 add r3, r3, #1 a12c: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc a130: e3a01000 mov r1, #0 a134: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 a138: eb000808 bl c160 a13c: e3a03001 mov r3, #1 a140: e50b300c str r3, [fp, #-12] a144: e51b3008 ldr r3, [fp, #-8] a148: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 a14c: e3a03006 mov r3, #6 a150: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { a154: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a158: e3530000 cmp r3, #0 a15c: ba000002 blt a16c a160: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a164: e35300ff cmp r3, #255 ; 0xff a168: da000001 ble a174 return false; a16c: e3a03000 mov r3, #0 a170: ea000004 b a188 msg->header.opcode = opcode; a174: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a178: e6ef2073 uxtb r2, r3 a17c: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 a180: e5c32001 strb r2, [r3, #1] return true; a184: e3a03001 mov r3, #1 a188: e50b300c str r3, [fp, #-12] a18c: e51b0008 ldr r0, [fp, #-8] a190: eb00087a bl c380 a194: e51b3008 ldr r3, [fp, #-8] a198: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 a19c: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a1a0: e50b3024 str r3, [fp, #-36] ; 0xffffffdc a1a4: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc a1a8: eb000ef9 bl dd94 a1ac: e1a03000 mov r3, r0 a1b0: e2833001 add r3, r3, #1 a1b4: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc a1b8: e3a01000 mov r1, #0 a1bc: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a1c0: eb00082e bl c280 a1c4: e3a03001 mov r3, #1 a1c8: e50b300c str r3, [fp, #-12] a1cc: e3a03000 mov r3, #0 a1d0: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 a1d4: e51b3008 ldr r3, [fp, #-8] a1d8: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 a1dc: e24b3040 sub r3, fp, #64 ; 0x40 a1e0: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); a1e4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a1e8: e5d33000 ldrb r3, [r3] a1ec: e2033002 and r3, r3, #2 a1f0: e6ef3073 uxtb r3, r3 a1f4: e3530000 cmp r3, #0 a1f8: 1a000007 bne a21c a1fc: e3023ab4 movw r3, #10932 ; 0x2ab4 a200: e3403001 movt r3, #1 a204: e3022b1c movw r2, #11036 ; 0x2b1c a208: e3402001 movt r2, #1 a20c: e3a01074 mov r1, #116 ; 0x74 a210: e3020acc movw r0, #10956 ; 0x2acc a214: e3400001 movt r0, #1 a218: eb000d24 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); a21c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a220: e2833008 add r3, r3, #8 a224: e3a02004 mov r2, #4 a228: e1a01003 mov r1, r3 a22c: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 a230: eb000d72 bl d800 a234: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a238: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); a23c: e51b3010 ldr r3, [fp, #-16] a240: e5933010 ldr r3, [r3, #16] a244: e51b2010 ldr r2, [fp, #-16] a248: e5922008 ldr r2, [r2, #8] a24c: e0833002 add r3, r3, r2 a250: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { a254: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a258: e5d33000 ldrb r3, [r3] a25c: e2033004 and r3, r3, #4 a260: e6ef3073 uxtb r3, r3 a264: e3530000 cmp r3, #0 a268: 0a000004 beq a280 return session_free_buf(session, msg->header.len); a26c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a270: e1d330b2 ldrh r3, [r3, #2] a274: e1a01003 mov r1, r3 a278: e51b0010 ldr r0, [fp, #-16] a27c: eb000a39 bl cb68 a280: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 a284: e1a00003 mov r0, r3 a288: e24bd004 sub sp, fp, #4 a28c: e8bd8800 pop {fp, pc} 0000a290 : int open(struct Session* session, char* path) { a290: e92d4800 push {fp, lr} a294: e28db004 add fp, sp, #4 a298: e24dd008 sub sp, sp, #8 a29c: e50b0008 str r0, [fp, #-8] a2a0: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_open)(session, path); a2a4: e51b100c ldr r1, [fp, #-12] a2a8: e51b0008 ldr r0, [fp, #-8] a2ac: ebffff7c bl a0a4 a2b0: e1a03000 mov r3, r0 } a2b4: e1a00003 mov r0, r3 a2b8: e24bd004 sub sp, fp, #4 a2bc: e8bd8800 pop {fp, pc} 0000a2c0 : IPC_INTERFACE(Ipc_close, 1, fd, sizeof(int)); a2c0: e92d4800 push {fp, lr} a2c4: e28db004 add fp, sp, #4 a2c8: e24dd048 sub sp, sp, #72 ; 0x48 a2cc: e50b0048 str r0, [fp, #-72] ; 0xffffffb8 a2d0: e50b104c str r1, [fp, #-76] ; 0xffffffb4 a2d4: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a2d8: e3530000 cmp r3, #0 a2dc: 1a000001 bne a2e8 a2e0: e3e03000 mvn r3, #0 a2e4: ea000064 b a47c a2e8: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a2ec: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 a2f0: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a2f4: e50b303c str r3, [fp, #-60] ; 0xffffffc4 a2f8: e3a03004 mov r3, #4 a2fc: e50b3044 str r3, [fp, #-68] ; 0xffffffbc a300: e24b3044 sub r3, fp, #68 ; 0x44 a304: e1a02003 mov r2, r3 a308: e3a01001 mov r1, #1 a30c: e51b0038 ldr r0, [fp, #-56] ; 0xffffffc8 a310: eb000725 bl bfac a314: e1a03000 mov r3, r0 a318: e50b3008 str r3, [fp, #-8] a31c: e51b3008 ldr r3, [fp, #-8] a320: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 a324: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a328: e50b3034 str r3, [fp, #-52] ; 0xffffffcc a32c: e3a03004 mov r3, #4 a330: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc a334: e3a01000 mov r1, #0 a338: e51b0030 ldr r0, [fp, #-48] ; 0xffffffd0 a33c: eb000787 bl c160 a340: e3a03001 mov r3, #1 a344: e50b300c str r3, [fp, #-12] a348: e51b3008 ldr r3, [fp, #-8] a34c: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 a350: e3a03007 mov r3, #7 a354: e50b302c str r3, [fp, #-44] ; 0xffffffd4 if (opcode < 0 || opcode > UINT8_MAX) { a358: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a35c: e3530000 cmp r3, #0 a360: ba000002 blt a370 a364: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a368: e35300ff cmp r3, #255 ; 0xff a36c: da000001 ble a378 return false; a370: e3a03000 mov r3, #0 a374: ea000004 b a38c msg->header.opcode = opcode; a378: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 a37c: e6ef2073 uxtb r2, r3 a380: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 a384: e5c32001 strb r2, [r3, #1] return true; a388: e3a03001 mov r3, #1 a38c: e50b300c str r3, [fp, #-12] a390: e51b0008 ldr r0, [fp, #-8] a394: eb0007f9 bl c380 a398: e51b3008 ldr r3, [fp, #-8] a39c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 a3a0: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a3a4: e50b3024 str r3, [fp, #-36] ; 0xffffffdc a3a8: e3a03004 mov r3, #4 a3ac: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc a3b0: e3a01000 mov r1, #0 a3b4: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a3b8: eb0007b0 bl c280 a3bc: e3a03001 mov r3, #1 a3c0: e50b300c str r3, [fp, #-12] a3c4: e3a03000 mov r3, #0 a3c8: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 a3cc: e51b3008 ldr r3, [fp, #-8] a3d0: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 a3d4: e24b3040 sub r3, fp, #64 ; 0x40 a3d8: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); a3dc: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a3e0: e5d33000 ldrb r3, [r3] a3e4: e2033002 and r3, r3, #2 a3e8: e6ef3073 uxtb r3, r3 a3ec: e3530000 cmp r3, #0 a3f0: 1a000007 bne a414 a3f4: e3023ab4 movw r3, #10932 ; 0x2ab4 a3f8: e3403001 movt r3, #1 a3fc: e3022b1c movw r2, #11036 ; 0x2b1c a400: e3402001 movt r2, #1 a404: e3a01074 mov r1, #116 ; 0x74 a408: e3020acc movw r0, #10956 ; 0x2acc a40c: e3400001 movt r0, #1 a410: eb000ca6 bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); a414: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a418: e2833008 add r3, r3, #8 a41c: e3a02004 mov r2, #4 a420: e1a01003 mov r1, r3 a424: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 a428: eb000cf4 bl d800 a42c: e51b3048 ldr r3, [fp, #-72] ; 0xffffffb8 a430: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); a434: e51b3010 ldr r3, [fp, #-16] a438: e5933010 ldr r3, [r3, #16] a43c: e51b2010 ldr r2, [fp, #-16] a440: e5922008 ldr r2, [r2, #8] a444: e0833002 add r3, r3, r2 a448: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { a44c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a450: e5d33000 ldrb r3, [r3] a454: e2033004 and r3, r3, #4 a458: e6ef3073 uxtb r3, r3 a45c: e3530000 cmp r3, #0 a460: 0a000004 beq a478 return session_free_buf(session, msg->header.len); a464: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a468: e1d330b2 ldrh r3, [r3, #2] a46c: e1a01003 mov r1, r3 a470: e51b0010 ldr r0, [fp, #-16] a474: eb0009bb bl cb68 a478: e51b3040 ldr r3, [fp, #-64] ; 0xffffffc0 a47c: e1a00003 mov r0, r3 a480: e24bd004 sub sp, fp, #4 a484: e8bd8800 pop {fp, pc} 0000a488 : int close(struct Session* session, int fd) { a488: e92d4800 push {fp, lr} a48c: e28db004 add fp, sp, #4 a490: e24dd008 sub sp, sp, #8 a494: e50b0008 str r0, [fp, #-8] a498: e50b100c str r1, [fp, #-12] return IPC_CALL(Ipc_close)(session, &fd); a49c: e24b300c sub r3, fp, #12 a4a0: e1a01003 mov r1, r3 a4a4: e51b0008 ldr r0, [fp, #-8] a4a8: ebffff84 bl a2c0 a4ac: e1a03000 mov r3, r0 } a4b0: e1a00003 mov r0, r3 a4b4: e24bd004 sub sp, fp, #4 a4b8: e8bd8800 pop {fp, pc} 0000a4bc : IPC_INTERFACE(Ipc_read, 4, fd, dst, offset, len, sizeof(int), *(int*)len, sizeof(int), sizeof(int)); a4bc: e92d4800 push {fp, lr} a4c0: e28db004 add fp, sp, #4 a4c4: e24dd080 sub sp, sp, #128 ; 0x80 a4c8: e50b0078 str r0, [fp, #-120] ; 0xffffff88 a4cc: e50b107c str r1, [fp, #-124] ; 0xffffff84 a4d0: e50b2080 str r2, [fp, #-128] ; 0xffffff80 a4d4: e50b3084 str r3, [fp, #-132] ; 0xffffff7c a4d8: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 a4dc: e3530000 cmp r3, #0 a4e0: 1a000001 bne a4ec a4e4: e3e03000 mvn r3, #0 a4e8: ea00009d b a764 a4ec: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 a4f0: e50b3050 str r3, [fp, #-80] ; 0xffffffb0 a4f4: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a4f8: e50b3054 str r3, [fp, #-84] ; 0xffffffac a4fc: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a500: e50b3058 str r3, [fp, #-88] ; 0xffffffa8 a504: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a508: e50b305c str r3, [fp, #-92] ; 0xffffffa4 a50c: e59b3004 ldr r3, [fp, #4] a510: e50b3060 str r3, [fp, #-96] ; 0xffffffa0 a514: e3a03004 mov r3, #4 a518: e50b3074 str r3, [fp, #-116] ; 0xffffff8c a51c: e51b3060 ldr r3, [fp, #-96] ; 0xffffffa0 a520: e5933000 ldr r3, [r3] a524: e50b3070 str r3, [fp, #-112] ; 0xffffff90 a528: e3a03004 mov r3, #4 a52c: e50b306c str r3, [fp, #-108] ; 0xffffff94 a530: e3a03004 mov r3, #4 a534: e50b3068 str r3, [fp, #-104] ; 0xffffff98 a538: e24b3074 sub r3, fp, #116 ; 0x74 a53c: e1a02003 mov r2, r3 a540: e3a01004 mov r1, #4 a544: e51b0050 ldr r0, [fp, #-80] ; 0xffffffb0 a548: eb000697 bl bfac a54c: e1a03000 mov r3, r0 a550: e50b3008 str r3, [fp, #-8] a554: e51b3008 ldr r3, [fp, #-8] a558: e50b303c str r3, [fp, #-60] ; 0xffffffc4 a55c: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a560: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 a564: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a568: e50b3044 str r3, [fp, #-68] ; 0xffffffbc a56c: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a570: e50b3048 str r3, [fp, #-72] ; 0xffffffb8 a574: e59b3004 ldr r3, [fp, #4] a578: e50b304c str r3, [fp, #-76] ; 0xffffffb4 a57c: e3a03004 mov r3, #4 a580: e51b2040 ldr r2, [fp, #-64] ; 0xffffffc0 a584: e3a01000 mov r1, #0 a588: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a58c: eb0006f3 bl c160 a590: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a594: e5933000 ldr r3, [r3] a598: e51b2044 ldr r2, [fp, #-68] ; 0xffffffbc a59c: e3a01001 mov r1, #1 a5a0: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a5a4: eb0006ed bl c160 a5a8: e3a03004 mov r3, #4 a5ac: e51b2048 ldr r2, [fp, #-72] ; 0xffffffb8 a5b0: e3a01002 mov r1, #2 a5b4: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a5b8: eb0006e8 bl c160 a5bc: e3a03004 mov r3, #4 a5c0: e51b204c ldr r2, [fp, #-76] ; 0xffffffb4 a5c4: e3a01003 mov r1, #3 a5c8: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a5cc: eb0006e3 bl c160 a5d0: e3a03001 mov r3, #1 a5d4: e50b300c str r3, [fp, #-12] a5d8: e51b3008 ldr r3, [fp, #-8] a5dc: e50b3034 str r3, [fp, #-52] ; 0xffffffcc a5e0: e3a03008 mov r3, #8 a5e4: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 if (opcode < 0 || opcode > UINT8_MAX) { a5e8: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a5ec: e3530000 cmp r3, #0 a5f0: ba000002 blt a600 a5f4: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a5f8: e35300ff cmp r3, #255 ; 0xff a5fc: da000001 ble a608 return false; a600: e3a03000 mov r3, #0 a604: ea000004 b a61c msg->header.opcode = opcode; a608: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a60c: e6ef2073 uxtb r2, r3 a610: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc a614: e5c32001 strb r2, [r3, #1] return true; a618: e3a03001 mov r3, #1 a61c: e50b300c str r3, [fp, #-12] a620: e51b0008 ldr r0, [fp, #-8] a624: eb000755 bl c380 a628: e51b3008 ldr r3, [fp, #-8] a62c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 a630: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a634: e50b3024 str r3, [fp, #-36] ; 0xffffffdc a638: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a63c: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 a640: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a644: e50b302c str r3, [fp, #-44] ; 0xffffffd4 a648: e59b3004 ldr r3, [fp, #4] a64c: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 a650: e3a03004 mov r3, #4 a654: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc a658: e3a01000 mov r1, #0 a65c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a660: eb000706 bl c280 a664: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 a668: e5933000 ldr r3, [r3] a66c: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 a670: e3a01001 mov r1, #1 a674: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a678: eb000700 bl c280 a67c: e3a03004 mov r3, #4 a680: e51b202c ldr r2, [fp, #-44] ; 0xffffffd4 a684: e3a01002 mov r1, #2 a688: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a68c: eb0006fb bl c280 a690: e3a03004 mov r3, #4 a694: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 a698: e3a01003 mov r1, #3 a69c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a6a0: eb0006f6 bl c280 a6a4: e3a03001 mov r3, #1 a6a8: e50b300c str r3, [fp, #-12] a6ac: e3a03000 mov r3, #0 a6b0: e50b3064 str r3, [fp, #-100] ; 0xffffff9c a6b4: e51b3008 ldr r3, [fp, #-8] a6b8: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 a6bc: e24b3064 sub r3, fp, #100 ; 0x64 a6c0: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); a6c4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a6c8: e5d33000 ldrb r3, [r3] a6cc: e2033002 and r3, r3, #2 a6d0: e6ef3073 uxtb r3, r3 a6d4: e3530000 cmp r3, #0 a6d8: 1a000007 bne a6fc a6dc: e3023ab4 movw r3, #10932 ; 0x2ab4 a6e0: e3403001 movt r3, #1 a6e4: e3022b1c movw r2, #11036 ; 0x2b1c a6e8: e3402001 movt r2, #1 a6ec: e3a01074 mov r1, #116 ; 0x74 a6f0: e3020acc movw r0, #10956 ; 0x2acc a6f4: e3400001 movt r0, #1 a6f8: eb000bec bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); a6fc: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a700: e2833008 add r3, r3, #8 a704: e3a02004 mov r2, #4 a708: e1a01003 mov r1, r3 a70c: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 a710: eb000c3a bl d800 a714: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 a718: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); a71c: e51b3010 ldr r3, [fp, #-16] a720: e5933010 ldr r3, [r3, #16] a724: e51b2010 ldr r2, [fp, #-16] a728: e5922008 ldr r2, [r2, #8] a72c: e0833002 add r3, r3, r2 a730: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { a734: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a738: e5d33000 ldrb r3, [r3] a73c: e2033004 and r3, r3, #4 a740: e6ef3073 uxtb r3, r3 a744: e3530000 cmp r3, #0 a748: 0a000004 beq a760 return session_free_buf(session, msg->header.len); a74c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec a750: e1d330b2 ldrh r3, [r3, #2] a754: e1a01003 mov r1, r3 a758: e51b0010 ldr r0, [fp, #-16] a75c: eb000901 bl cb68 a760: e51b3064 ldr r3, [fp, #-100] ; 0xffffff9c a764: e1a00003 mov r0, r3 a768: e24bd004 sub sp, fp, #4 a76c: e8bd8800 pop {fp, pc} 0000a770 : int read(struct Session* session, int fd, char* dst, int offset, int len) { a770: e92d4800 push {fp, lr} a774: e28db004 add fp, sp, #4 a778: e24dd018 sub sp, sp, #24 a77c: e50b0008 str r0, [fp, #-8] a780: e50b100c str r1, [fp, #-12] a784: e50b2010 str r2, [fp, #-16] a788: e50b3014 str r3, [fp, #-20] ; 0xffffffec return IPC_CALL(Ipc_read)(session, &fd, dst, &offset, &len); a78c: e24b2014 sub r2, fp, #20 a790: e24b100c sub r1, fp, #12 a794: e28b3004 add r3, fp, #4 a798: e58d3000 str r3, [sp] a79c: e1a03002 mov r3, r2 a7a0: e51b2010 ldr r2, [fp, #-16] a7a4: e51b0008 ldr r0, [fp, #-8] a7a8: ebffff43 bl a4bc a7ac: e1a03000 mov r3, r0 } a7b0: e1a00003 mov r0, r3 a7b4: e24bd004 sub sp, fp, #4 a7b8: e8bd8800 pop {fp, pc} 0000a7bc : IPC_INTERFACE(Ipc_write, 4, fd, src, offset, len, sizeof(int), *(int*)len, sizeof(int), sizeof(int)); a7bc: e92d4800 push {fp, lr} a7c0: e28db004 add fp, sp, #4 a7c4: e24dd080 sub sp, sp, #128 ; 0x80 a7c8: e50b0078 str r0, [fp, #-120] ; 0xffffff88 a7cc: e50b107c str r1, [fp, #-124] ; 0xffffff84 a7d0: e50b2080 str r2, [fp, #-128] ; 0xffffff80 a7d4: e50b3084 str r3, [fp, #-132] ; 0xffffff7c a7d8: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 a7dc: e3530000 cmp r3, #0 a7e0: 1a000001 bne a7ec a7e4: e3e03000 mvn r3, #0 a7e8: ea00009d b aa64 a7ec: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 a7f0: e50b3050 str r3, [fp, #-80] ; 0xffffffb0 a7f4: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a7f8: e50b3054 str r3, [fp, #-84] ; 0xffffffac a7fc: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a800: e50b3058 str r3, [fp, #-88] ; 0xffffffa8 a804: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a808: e50b305c str r3, [fp, #-92] ; 0xffffffa4 a80c: e59b3004 ldr r3, [fp, #4] a810: e50b3060 str r3, [fp, #-96] ; 0xffffffa0 a814: e3a03004 mov r3, #4 a818: e50b3074 str r3, [fp, #-116] ; 0xffffff8c a81c: e51b3060 ldr r3, [fp, #-96] ; 0xffffffa0 a820: e5933000 ldr r3, [r3] a824: e50b3070 str r3, [fp, #-112] ; 0xffffff90 a828: e3a03004 mov r3, #4 a82c: e50b306c str r3, [fp, #-108] ; 0xffffff94 a830: e3a03004 mov r3, #4 a834: e50b3068 str r3, [fp, #-104] ; 0xffffff98 a838: e24b3074 sub r3, fp, #116 ; 0x74 a83c: e1a02003 mov r2, r3 a840: e3a01004 mov r1, #4 a844: e51b0050 ldr r0, [fp, #-80] ; 0xffffffb0 a848: eb0005d7 bl bfac a84c: e1a03000 mov r3, r0 a850: e50b3008 str r3, [fp, #-8] a854: e51b3008 ldr r3, [fp, #-8] a858: e50b303c str r3, [fp, #-60] ; 0xffffffc4 a85c: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a860: e50b3040 str r3, [fp, #-64] ; 0xffffffc0 a864: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a868: e50b3044 str r3, [fp, #-68] ; 0xffffffbc a86c: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a870: e50b3048 str r3, [fp, #-72] ; 0xffffffb8 a874: e59b3004 ldr r3, [fp, #4] a878: e50b304c str r3, [fp, #-76] ; 0xffffffb4 a87c: e3a03004 mov r3, #4 a880: e51b2040 ldr r2, [fp, #-64] ; 0xffffffc0 a884: e3a01000 mov r1, #0 a888: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a88c: eb000633 bl c160 a890: e51b304c ldr r3, [fp, #-76] ; 0xffffffb4 a894: e5933000 ldr r3, [r3] a898: e51b2044 ldr r2, [fp, #-68] ; 0xffffffbc a89c: e3a01001 mov r1, #1 a8a0: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a8a4: eb00062d bl c160 a8a8: e3a03004 mov r3, #4 a8ac: e51b2048 ldr r2, [fp, #-72] ; 0xffffffb8 a8b0: e3a01002 mov r1, #2 a8b4: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a8b8: eb000628 bl c160 a8bc: e3a03004 mov r3, #4 a8c0: e51b204c ldr r2, [fp, #-76] ; 0xffffffb4 a8c4: e3a01003 mov r1, #3 a8c8: e51b003c ldr r0, [fp, #-60] ; 0xffffffc4 a8cc: eb000623 bl c160 a8d0: e3a03001 mov r3, #1 a8d4: e50b300c str r3, [fp, #-12] a8d8: e51b3008 ldr r3, [fp, #-8] a8dc: e50b3034 str r3, [fp, #-52] ; 0xffffffcc a8e0: e3a03009 mov r3, #9 a8e4: e50b3038 str r3, [fp, #-56] ; 0xffffffc8 if (opcode < 0 || opcode > UINT8_MAX) { a8e8: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a8ec: e3530000 cmp r3, #0 a8f0: ba000002 blt a900 a8f4: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a8f8: e35300ff cmp r3, #255 ; 0xff a8fc: da000001 ble a908 return false; a900: e3a03000 mov r3, #0 a904: ea000004 b a91c msg->header.opcode = opcode; a908: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 a90c: e6ef2073 uxtb r2, r3 a910: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc a914: e5c32001 strb r2, [r3, #1] return true; a918: e3a03001 mov r3, #1 a91c: e50b300c str r3, [fp, #-12] a920: e51b0008 ldr r0, [fp, #-8] a924: eb000695 bl c380 a928: e51b3008 ldr r3, [fp, #-8] a92c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 a930: e51b307c ldr r3, [fp, #-124] ; 0xffffff84 a934: e50b3024 str r3, [fp, #-36] ; 0xffffffdc a938: e51b3080 ldr r3, [fp, #-128] ; 0xffffff80 a93c: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 a940: e51b3084 ldr r3, [fp, #-132] ; 0xffffff7c a944: e50b302c str r3, [fp, #-44] ; 0xffffffd4 a948: e59b3004 ldr r3, [fp, #4] a94c: e50b3030 str r3, [fp, #-48] ; 0xffffffd0 a950: e3a03004 mov r3, #4 a954: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc a958: e3a01000 mov r1, #0 a95c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a960: eb000646 bl c280 a964: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 a968: e5933000 ldr r3, [r3] a96c: e51b2028 ldr r2, [fp, #-40] ; 0xffffffd8 a970: e3a01001 mov r1, #1 a974: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a978: eb000640 bl c280 a97c: e3a03004 mov r3, #4 a980: e51b202c ldr r2, [fp, #-44] ; 0xffffffd4 a984: e3a01002 mov r1, #2 a988: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a98c: eb00063b bl c280 a990: e3a03004 mov r3, #4 a994: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 a998: e3a01003 mov r1, #3 a99c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 a9a0: eb000636 bl c280 a9a4: e3a03001 mov r3, #1 a9a8: e50b300c str r3, [fp, #-12] a9ac: e3a03000 mov r3, #0 a9b0: e50b3064 str r3, [fp, #-100] ; 0xffffff9c a9b4: e51b3008 ldr r3, [fp, #-8] a9b8: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 a9bc: e24b3064 sub r3, fp, #100 ; 0x64 a9c0: e50b301c str r3, [fp, #-28] ; 0xffffffe4 assert(msg->header.done == 1); a9c4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 a9c8: e5d33000 ldrb r3, [r3] a9cc: e2033002 and r3, r3, #2 a9d0: e6ef3073 uxtb r3, r3 a9d4: e3530000 cmp r3, #0 a9d8: 1a000007 bne a9fc a9dc: e3023ab4 movw r3, #10932 ; 0x2ab4 a9e0: e3403001 movt r3, #1 a9e4: e3022b1c movw r2, #11036 ; 0x2b1c a9e8: e3402001 movt r2, #1 a9ec: e3a01074 mov r1, #116 ; 0x74 a9f0: e3020acc movw r0, #10956 ; 0x2acc a9f4: e3400001 movt r0, #1 a9f8: eb000b2c bl d6b0 <__assert_func> memcpy(ret_val, &msg->header.ret_val, sizeof(msg->header.ret_val)); a9fc: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 aa00: e2833008 add r3, r3, #8 aa04: e3a02004 mov r2, #4 aa08: e1a01003 mov r1, r3 aa0c: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 aa10: eb000b7a bl d800 aa14: e51b3078 ldr r3, [fp, #-120] ; 0xffffff88 aa18: e50b3010 str r3, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); aa1c: e51b3010 ldr r3, [fp, #-16] aa20: e5933010 ldr r3, [r3, #16] aa24: e51b2010 ldr r2, [fp, #-16] aa28: e5922008 ldr r2, [r2, #8] aa2c: e0833002 add r3, r3, r2 aa30: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (msg->header.init != 1) { aa34: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec aa38: e5d33000 ldrb r3, [r3] aa3c: e2033004 and r3, r3, #4 aa40: e6ef3073 uxtb r3, r3 aa44: e3530000 cmp r3, #0 aa48: 0a000004 beq aa60 return session_free_buf(session, msg->header.len); aa4c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec aa50: e1d330b2 ldrh r3, [r3, #2] aa54: e1a01003 mov r1, r3 aa58: e51b0010 ldr r0, [fp, #-16] aa5c: eb000841 bl cb68 aa60: e51b3064 ldr r3, [fp, #-100] ; 0xffffff9c aa64: e1a00003 mov r0, r3 aa68: e24bd004 sub sp, fp, #4 aa6c: e8bd8800 pop {fp, pc} 0000aa70 : int write(struct Session* session, int fd, char* src, int offset, int len) { aa70: e92d4800 push {fp, lr} aa74: e28db004 add fp, sp, #4 aa78: e24dd018 sub sp, sp, #24 aa7c: e50b0008 str r0, [fp, #-8] aa80: e50b100c str r1, [fp, #-12] aa84: e50b2010 str r2, [fp, #-16] aa88: e50b3014 str r3, [fp, #-20] ; 0xffffffec return IPC_CALL(Ipc_write)(session, &fd, src, &offset, &len); aa8c: e24b2014 sub r2, fp, #20 aa90: e24b100c sub r1, fp, #12 aa94: e28b3004 add r3, fp, #4 aa98: e58d3000 str r3, [sp] aa9c: e1a03002 mov r3, r2 aaa0: e51b2010 ldr r2, [fp, #-16] aaa4: e51b0008 ldr r0, [fp, #-8] aaa8: ebffff43 bl a7bc aaac: e1a03000 mov r3, r0 aab0: e1a00003 mov r0, r3 aab4: e24bd004 sub sp, fp, #4 aab8: e8bd8800 pop {fp, pc} 0000aabc : #include "block_io.h" #include "fs.h" #include "libserial.h" static void Error(char* s) { aabc: e92d4800 push {fp, lr} aac0: e28db004 add fp, sp, #4 aac4: e24dd008 sub sp, sp, #8 aac8: e50b0008 str r0, [fp, #-8] printf("Error: %s\n", s); aacc: e51b1008 ldr r1, [fp, #-8] aad0: e3020b30 movw r0, #11056 ; 0x2b30 aad4: e3400001 movt r0, #1 aad8: eb0004a8 bl bd80 for (;;) aadc: eafffffe b aadc 0000aae0 : struct MemFsRange MemFsRange; /// @brief Using syscall to get fs.img real location in the memory void MemFsInit(uintptr_t _binary_fs_img_start, uint32_t fs_img_len) { aae0: e52db004 push {fp} ; (str fp, [sp, #-4]!) aae4: e28db000 add fp, sp, #0 aae8: e24dd00c sub sp, sp, #12 aaec: e50b0008 str r0, [fp, #-8] aaf0: e50b100c str r1, [fp, #-12] MemFsRange.memfs_start = _binary_fs_img_start; aaf4: e30c3178 movw r3, #49528 ; 0xc178 aaf8: e3403003 movt r3, #3 aafc: e51b2008 ldr r2, [fp, #-8] ab00: e5832000 str r2, [r3] MemFsRange.memfs_nr_blocks = fs_img_len / BLOCK_SIZE; ab04: e51b300c ldr r3, [fp, #-12] ab08: e1a024a3 lsr r2, r3, #9 ab0c: e30c3178 movw r3, #49528 ; 0xc178 ab10: e3403003 movt r3, #3 ab14: e5832004 str r2, [r3, #4] } ab18: e320f000 nop {0} ab1c: e28bd000 add sp, fp, #0 ab20: e49db004 pop {fp} ; (ldr fp, [sp], #4) ab24: e12fff1e bx lr 0000ab28 : /// @brief Read the super block. void ReadSuperBlock(struct SuperBlock* sb) { ab28: e92d4800 push {fp, lr} ab2c: e28db004 add fp, sp, #4 ab30: e24dd010 sub sp, sp, #16 ab34: e50b0010 str r0, [fp, #-16] uint8_t* data = BlockRead(ROOT_INUM); ab38: e3a00001 mov r0, #1 ab3c: eb000862 bl cccc ab40: e50b0008 str r0, [fp, #-8] memmove(sb, data, sizeof(*sb)); ab44: e3a0200c mov r2, #12 ab48: e51b1008 ldr r1, [fp, #-8] ab4c: e51b0010 ldr r0, [fp, #-16] ab50: eb000b6f bl d914 } ab54: e320f000 nop {0} ab58: e24bd004 sub sp, fp, #4 ab5c: e8bd8800 pop {fp, pc} 0000ab60 : /// @brief Get a existed Inode by inum struct Inode* InodeGet(uint32_t inum) { ab60: e92d4800 push {fp, lr} ab64: e28db004 add fp, sp, #4 ab68: e24dd010 sub sp, sp, #16 ab6c: e50b0010 str r0, [fp, #-16] struct Inode* ip; uint8_t* data = BlockRead(BLOCK_INDEX(inum)); ab70: e51b3010 ldr r3, [fp, #-16] ab74: e1a031a3 lsr r3, r3, #3 ab78: e2833002 add r3, r3, #2 ab7c: e1a00003 mov r0, r3 ab80: eb000851 bl cccc ab84: e50b0008 str r0, [fp, #-8] ip = (struct Inode*)data + INODE_INDEX(inum); ab88: e51b3010 ldr r3, [fp, #-16] ab8c: e2033007 and r3, r3, #7 ab90: e1a03303 lsl r3, r3, #6 ab94: e51b2008 ldr r2, [fp, #-8] ab98: e0823003 add r3, r2, r3 ab9c: e50b300c str r3, [fp, #-12] return ip; aba0: e51b300c ldr r3, [fp, #-12] } aba4: e1a00003 mov r0, r3 aba8: e24bd004 sub sp, fp, #4 abac: e8bd8800 pop {fp, pc} 0000abb0 : /// @brief Alloc a new Inode using type static struct Inode* InodeAlloc(short type) { abb0: e92d4800 push {fp, lr} abb4: e28db004 add fp, sp, #4 abb8: e24dd020 sub sp, sp, #32 abbc: e1a03000 mov r3, r0 abc0: e14b31be strh r3, [fp, #-30] ; 0xffffffe2 int inum; struct Inode* ip; struct SuperBlock sb; ReadSuperBlock(&sb); abc4: e24b301c sub r3, fp, #28 abc8: e1a00003 mov r0, r3 abcc: ebffffd5 bl ab28 for (inum = 1; inum < sb.ninodes; inum++) { abd0: e3a03001 mov r3, #1 abd4: e50b3008 str r3, [fp, #-8] abd8: ea000024 b ac70 uint8_t* data = BlockRead(BLOCK_INDEX(inum)); abdc: e51b3008 ldr r3, [fp, #-8] abe0: e1a031a3 lsr r3, r3, #3 abe4: e2833002 add r3, r3, #2 abe8: e1a00003 mov r0, r3 abec: eb000836 bl cccc abf0: e50b000c str r0, [fp, #-12] ip = (struct Inode*)data + INODE_INDEX(inum); abf4: e51b3008 ldr r3, [fp, #-8] abf8: e2033007 and r3, r3, #7 abfc: e1a03303 lsl r3, r3, #6 ac00: e51b200c ldr r2, [fp, #-12] ac04: e0823003 add r3, r2, r3 ac08: e50b3010 str r3, [fp, #-16] if (ip->type == 0) { ac0c: e51b3010 ldr r3, [fp, #-16] ac10: e1d330f4 ldrsh r3, [r3, #4] ac14: e3530000 cmp r3, #0 ac18: 1a000011 bne ac64 memset(ip, 0, sizeof(*ip)); ac1c: e3a02040 mov r2, #64 ; 0x40 ac20: e3a01000 mov r1, #0 ac24: e51b0010 ldr r0, [fp, #-16] ac28: eb000b8b bl da5c ip->inum = inum; ac2c: e51b2008 ldr r2, [fp, #-8] ac30: e51b3010 ldr r3, [fp, #-16] ac34: e5832000 str r2, [r3] ip->type = type; ac38: e51b3010 ldr r3, [fp, #-16] ac3c: e15b21be ldrh r2, [fp, #-30] ; 0xffffffe2 ac40: e1c320b4 strh r2, [r3, #4] ip->nlink = 1; ac44: e51b3010 ldr r3, [fp, #-16] ac48: e3a02001 mov r2, #1 ac4c: e1c320b6 strh r2, [r3, #6] ip->size = 0; ac50: e51b3010 ldr r3, [fp, #-16] ac54: e3a02000 mov r2, #0 ac58: e5832008 str r2, [r3, #8] return ip; ac5c: e51b3010 ldr r3, [fp, #-16] ac60: ea00000a b ac90 for (inum = 1; inum < sb.ninodes; inum++) { ac64: e51b3008 ldr r3, [fp, #-8] ac68: e2833001 add r3, r3, #1 ac6c: e50b3008 str r3, [fp, #-8] ac70: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec ac74: e51b3008 ldr r3, [fp, #-8] ac78: e1520003 cmp r2, r3 ac7c: 8affffd6 bhi abdc } } Error("InodeAlloc: no inodes"); ac80: e3020b3c movw r0, #11068 ; 0x2b3c ac84: e3400001 movt r0, #1 ac88: ebffff8b bl aabc return NULL; ac8c: e3a03000 mov r3, #0 } ac90: e1a00003 mov r0, r3 ac94: e24bd004 sub sp, fp, #4 ac98: e8bd8800 pop {fp, pc} 0000ac9c : /// @brief Free the existed Inode static int InodeFree(struct Inode* ip) { ac9c: e92d4800 push {fp, lr} aca0: e28db004 add fp, sp, #4 aca4: e24dd010 sub sp, sp, #16 aca8: e50b0010 str r0, [fp, #-16] uint8_t* data = BlockRead(BLOCK_INDEX(ip->inum)); acac: e51b3010 ldr r3, [fp, #-16] acb0: e5933000 ldr r3, [r3] acb4: e1a031a3 lsr r3, r3, #3 acb8: e2833002 add r3, r3, #2 acbc: e1a00003 mov r0, r3 acc0: eb000801 bl cccc acc4: e50b0008 str r0, [fp, #-8] struct Inode* dip = (struct Inode*)data + INODE_INDEX(ip->inum); acc8: e51b3010 ldr r3, [fp, #-16] accc: e5933000 ldr r3, [r3] acd0: e2033007 and r3, r3, #7 acd4: e1a03303 lsl r3, r3, #6 acd8: e51b2008 ldr r2, [fp, #-8] acdc: e0823003 add r3, r2, r3 ace0: e50b300c str r3, [fp, #-12] dip->type = 0; ace4: e51b300c ldr r3, [fp, #-12] ace8: e3a02000 mov r2, #0 acec: e1c320b4 strh r2, [r3, #4] return 0; acf0: e3a03000 mov r3, #0 } acf4: e1a00003 mov r0, r3 acf8: e24bd004 sub sp, fp, #4 acfc: e8bd8800 pop {fp, pc} 0000ad00 : /// @brief Delete the dir and all files or dirs under the dir. static int InodeFreeRecursive(struct Inode* dp) { ad00: e92d4800 push {fp, lr} ad04: e28db004 add fp, sp, #4 ad08: e24dd020 sub sp, sp, #32 ad0c: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 uint32_t off; struct Inode* ip; struct DirectEntry de; for (off = 0; off < dp->size; off += sizeof(de)) { ad10: e3a03000 mov r3, #0 ad14: e50b3008 str r3, [fp, #-8] ad18: ea000047 b ae3c if (InodeRead(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { ad1c: e51b2008 ldr r2, [fp, #-8] ad20: e24b101c sub r1, fp, #28 ad24: e3a03010 mov r3, #16 ad28: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 ad2c: eb000214 bl b584 ad30: e1a03000 mov r3, r0 ad34: e3530010 cmp r3, #16 ad38: 0a000002 beq ad48 Error("inode_delete_dir failed: read directory entry failed"); ad3c: e3020b54 movw r0, #11092 ; 0x2b54 ad40: e3400001 movt r0, #1 ad44: ebffff5c bl aabc } // unlink dir if (de.inum == 0 || strcmp(de.name, "..") == 0 || strcmp(de.name, ".") == 0) { ad48: e15b31bc ldrh r3, [fp, #-28] ; 0xffffffe4 ad4c: e3530000 cmp r3, #0 ad50: 0a000035 beq ae2c ad54: e24b301c sub r3, fp, #28 ad58: e2833002 add r3, r3, #2 ad5c: e3021b8c movw r1, #11148 ; 0x2b8c ad60: e3401001 movt r1, #1 ad64: e1a00003 mov r0, r3 ad68: eb000b80 bl db70 ad6c: e1a03000 mov r3, r0 ad70: e3530000 cmp r3, #0 ad74: 0a00002c beq ae2c ad78: e24b301c sub r3, fp, #28 ad7c: e2833002 add r3, r3, #2 ad80: e3021b90 movw r1, #11152 ; 0x2b90 ad84: e3401001 movt r1, #1 ad88: e1a00003 mov r0, r3 ad8c: eb000b77 bl db70 ad90: e1a03000 mov r3, r0 ad94: e3530000 cmp r3, #0 ad98: 0a000023 beq ae2c continue; } ip = InodeGet(de.inum); ad9c: e15b31bc ldrh r3, [fp, #-28] ; 0xffffffe4 ada0: e1a00003 mov r0, r3 ada4: ebffff6d bl ab60 ada8: e50b000c str r0, [fp, #-12] if (ip->type == T_DIR) { adac: e51b300c ldr r3, [fp, #-12] adb0: e1d330f4 ldrsh r3, [r3, #4] adb4: e3530001 cmp r3, #1 adb8: 1a000006 bne add8 if (InodeFreeRecursive(ip) < 0) { adbc: e51b000c ldr r0, [fp, #-12] adc0: ebffffce bl ad00 adc4: e1a03000 mov r3, r0 adc8: e3530000 cmp r3, #0 adcc: aa000007 bge adf0 return -1; add0: e3e03000 mvn r3, #0 add4: ea00001e b ae54 } } else if (ip->type == T_FILE) { add8: e51b300c ldr r3, [fp, #-12] addc: e1d330f4 ldrsh r3, [r3, #4] ade0: e3530002 cmp r3, #2 ade4: 1a000001 bne adf0 InodeFree(ip); ade8: e51b000c ldr r0, [fp, #-12] adec: ebffffaa bl ac9c } // delete the dir entry de.inum = 0; adf0: e3a03000 mov r3, #0 adf4: e14b31bc strh r3, [fp, #-28] ; 0xffffffe4 if (InodeWrite(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { adf8: e24b101c sub r1, fp, #28 adfc: e3a03010 mov r3, #16 ae00: e51b2008 ldr r2, [fp, #-8] ae04: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 ae08: eb00023d bl b704 ae0c: e1a03000 mov r3, r0 ae10: e3530010 cmp r3, #16 ae14: 0a000005 beq ae30 printf("InodeDelete failed: clear directory entry failed"); ae18: e3020b94 movw r0, #11156 ; 0x2b94 ae1c: e3400001 movt r0, #1 ae20: eb0003d6 bl bd80 return -1; ae24: e3e03000 mvn r3, #0 ae28: ea000009 b ae54 continue; ae2c: e320f000 nop {0} for (off = 0; off < dp->size; off += sizeof(de)) { ae30: e51b3008 ldr r3, [fp, #-8] ae34: e2833010 add r3, r3, #16 ae38: e50b3008 str r3, [fp, #-8] ae3c: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 ae40: e5932008 ldr r2, [r3, #8] ae44: e51b3008 ldr r3, [fp, #-8] ae48: e1520003 cmp r2, r3 ae4c: 8affffb2 bhi ad1c } } return 0; ae50: e3a03000 mov r3, #0 } ae54: e1a00003 mov r0, r3 ae58: e24bd004 sub sp, fp, #4 ae5c: e8bd8800 pop {fp, pc} 0000ae60 : /// @brief Delete a file Inode or a dir Inode int InodeDelete(struct Inode* dp, char* name) { ae60: e92d4800 push {fp, lr} ae64: e28db004 add fp, sp, #4 ae68: e24dd020 sub sp, sp, #32 ae6c: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 ae70: e50b1024 str r1, [fp, #-36] ; 0xffffffdc uint32_t off; struct Inode* ip; struct DirectEntry de; if ((ip = DirInodeLookup(dp, name, &off)) == 0) { ae74: e24b300c sub r3, fp, #12 ae78: e1a02003 mov r2, r3 ae7c: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc ae80: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 ae84: eb0000de bl b204 ae88: e50b0008 str r0, [fp, #-8] ae8c: e51b3008 ldr r3, [fp, #-8] ae90: e3530000 cmp r3, #0 ae94: 1a000004 bne aeac Error("Inode delete failed, file not exsit"); ae98: e3020bc8 movw r0, #11208 ; 0x2bc8 ae9c: e3400001 movt r0, #1 aea0: ebffff05 bl aabc return -1; aea4: e3e03000 mvn r3, #0 aea8: ea00001c b af20 } InodeFree(ip); aeac: e51b0008 ldr r0, [fp, #-8] aeb0: ebffff79 bl ac9c if (ip->type == T_DIR) { aeb4: e51b3008 ldr r3, [fp, #-8] aeb8: e1d330f4 ldrsh r3, [r3, #4] aebc: e3530001 cmp r3, #1 aec0: 1a000006 bne aee0 // recursive free alloced Inode if (InodeFreeRecursive(ip) < 0) { aec4: e51b0008 ldr r0, [fp, #-8] aec8: ebffff8c bl ad00 aecc: e1a03000 mov r3, r0 aed0: e3530000 cmp r3, #0 aed4: aa000001 bge aee0 return -1; aed8: e3e03000 mvn r3, #0 aedc: ea00000f b af20 } } // delete the dir entry de.inum = 0; aee0: e3a03000 mov r3, #0 aee4: e14b31bc strh r3, [fp, #-28] ; 0xffffffe4 if (InodeWrite(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { aee8: e51b200c ldr r2, [fp, #-12] aeec: e24b101c sub r1, fp, #28 aef0: e3a03010 mov r3, #16 aef4: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 aef8: eb000201 bl b704 aefc: e1a03000 mov r3, r0 af00: e3530010 cmp r3, #16 af04: 0a000004 beq af1c printf("InodeDelete failed: clear directory entry failed"); af08: e3020b94 movw r0, #11156 ; 0x2b94 af0c: e3400001 movt r0, #1 af10: eb00039a bl bd80 return -1; af14: e3e03000 mvn r3, #0 af18: ea000000 b af20 } return 0; af1c: e3a03000 mov r3, #0 } af20: e1a00003 mov r0, r3 af24: e24bd004 sub sp, fp, #4 af28: e8bd8800 pop {fp, pc} 0000af2c : /// @brief Create a new Inode under the parent Inode struct Inode* InodeCreate(struct Inode* dp, char* name, short type, short major, short minor) { af2c: e92d4800 push {fp, lr} af30: e28db004 add fp, sp, #4 af34: e24dd018 sub sp, sp, #24 af38: e50b0010 str r0, [fp, #-16] af3c: e50b1014 str r1, [fp, #-20] ; 0xffffffec af40: e14b21b6 strh r2, [fp, #-22] ; 0xffffffea af44: e14b31b8 strh r3, [fp, #-24] ; 0xffffffe8 uint32_t off; struct Inode* ip; if ((ip = DirInodeLookup(dp, name, &off)) != 0) { af48: e24b300c sub r3, fp, #12 af4c: e1a02003 mov r2, r3 af50: e51b1014 ldr r1, [fp, #-20] ; 0xffffffec af54: e51b0010 ldr r0, [fp, #-16] af58: eb0000a9 bl b204 af5c: e50b0008 str r0, [fp, #-8] af60: e51b3008 ldr r3, [fp, #-8] af64: e3530000 cmp r3, #0 af68: 0a00000a beq af98 if (type == T_FILE && ip->type == T_FILE) { af6c: e15b31f6 ldrsh r3, [fp, #-22] ; 0xffffffea af70: e3530002 cmp r3, #2 af74: 1a000005 bne af90 af78: e51b3008 ldr r3, [fp, #-8] af7c: e1d330f4 ldrsh r3, [r3, #4] af80: e3530002 cmp r3, #2 af84: 1a000001 bne af90 return ip; af88: e51b3008 ldr r3, [fp, #-8] af8c: ea00003a b b07c } return 0; af90: e3a03000 mov r3, #0 af94: ea000038 b b07c } if ((ip = InodeAlloc(type)) == 0) { af98: e15b31f6 ldrsh r3, [fp, #-22] ; 0xffffffea af9c: e1a00003 mov r0, r3 afa0: ebffff02 bl abb0 afa4: e50b0008 str r0, [fp, #-8] afa8: e51b3008 ldr r3, [fp, #-8] afac: e3530000 cmp r3, #0 afb0: 1a000002 bne afc0 Error("InodeCreate: create Inode failed\n"); afb4: e3020bec movw r0, #11244 ; 0x2bec afb8: e3400001 movt r0, #1 afbc: ebfffebe bl aabc } if (type == T_DIR) { afc0: e15b31f6 ldrsh r3, [fp, #-22] ; 0xffffffea afc4: e3530001 cmp r3, #1 afc8: 1a00001e bne b048 dp->nlink++; afcc: e51b3010 ldr r3, [fp, #-16] afd0: e1d330f6 ldrsh r3, [r3, #6] afd4: e6ff3073 uxth r3, r3 afd8: e2833001 add r3, r3, #1 afdc: e6ff3073 uxth r3, r3 afe0: e6bf2073 sxth r2, r3 afe4: e51b3010 ldr r3, [fp, #-16] afe8: e1c320b6 strh r2, [r3, #6] if (DirInodeAddEntry(ip, ".", ip->inum) < 0 || DirInodeAddEntry(ip, "..", dp->inum) < 0) { afec: e51b3008 ldr r3, [fp, #-8] aff0: e5933000 ldr r3, [r3] aff4: e1a02003 mov r2, r3 aff8: e3021b90 movw r1, #11152 ; 0x2b90 affc: e3401001 movt r1, #1 b000: e51b0008 ldr r0, [fp, #-8] b004: eb0000be bl b304 b008: e1a03000 mov r3, r0 b00c: e3530000 cmp r3, #0 b010: ba000009 blt b03c b014: e51b3010 ldr r3, [fp, #-16] b018: e5933000 ldr r3, [r3] b01c: e1a02003 mov r2, r3 b020: e3021b8c movw r1, #11148 ; 0x2b8c b024: e3401001 movt r1, #1 b028: e51b0008 ldr r0, [fp, #-8] b02c: eb0000b4 bl b304 b030: e1a03000 mov r3, r0 b034: e3530000 cmp r3, #0 b038: aa000002 bge b048 Error("InodeCreate: create dots"); b03c: e3020c10 movw r0, #11280 ; 0x2c10 b040: e3400001 movt r0, #1 b044: ebfffe9c bl aabc } } if (DirInodeAddEntry(dp, name, ip->inum) < 0) { b048: e51b3008 ldr r3, [fp, #-8] b04c: e5933000 ldr r3, [r3] b050: e1a02003 mov r2, r3 b054: e51b1014 ldr r1, [fp, #-20] ; 0xffffffec b058: e51b0010 ldr r0, [fp, #-16] b05c: eb0000a8 bl b304 b060: e1a03000 mov r3, r0 b064: e3530000 cmp r3, #0 b068: aa000002 bge b078 Error("InodeCreate: DirInodeAddEntry failed"); b06c: e3020c2c movw r0, #11308 ; 0x2c2c b070: e3400001 movt r0, #1 b074: ebfffe90 bl aabc } return ip; b078: e51b3008 ldr r3, [fp, #-8] } b07c: e1a00003 mov r0, r3 b080: e24bd004 sub sp, fp, #4 b084: e8bd8800 pop {fp, pc} 0000b088 : /// @brief Mapping the direct block addrs or indirect block addrs of the Inode using the block_num static uint32_t InodeBlockMapping(struct Inode* ip, uint32_t block_num) { b088: e92d4810 push {r4, fp, lr} b08c: e28db008 add fp, sp, #8 b090: e24dd01c sub sp, sp, #28 b094: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 b098: e50b1024 str r1, [fp, #-36] ; 0xffffffdc uint32_t addr; // block is in range of direct mapping if (block_num < NR_DIRECT_BLOCKS) { b09c: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b0a0: e3530004 cmp r3, #4 b0a4: 8a000014 bhi b0fc if ((addr = ip->addrs[block_num]) == 0) { b0a8: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b0ac: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b0b0: e2833002 add r3, r3, #2 b0b4: e1a03103 lsl r3, r3, #2 b0b8: e0823003 add r3, r2, r3 b0bc: e5933004 ldr r3, [r3, #4] b0c0: e50b3010 str r3, [fp, #-16] b0c4: e51b3010 ldr r3, [fp, #-16] b0c8: e3530000 cmp r3, #0 b0cc: 1a000008 bne b0f4 ip->addrs[block_num] = addr = BlockAlloc(); b0d0: eb00071c bl cd48 b0d4: e50b0010 str r0, [fp, #-16] b0d8: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b0dc: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b0e0: e2833002 add r3, r3, #2 b0e4: e1a03103 lsl r3, r3, #2 b0e8: e0823003 add r3, r2, r3 b0ec: e51b2010 ldr r2, [fp, #-16] b0f0: e5832004 str r2, [r3, #4] } return addr; b0f4: e51b3010 ldr r3, [fp, #-16] b0f8: ea00003e b b1f8 } // alloc a new indirect indexing block block_num -= NR_DIRECT_BLOCKS; b0fc: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b100: e2433005 sub r3, r3, #5 b104: e50b3024 str r3, [fp, #-36] ; 0xffffffdc int indirect_block_id = block_num / MAX_INDIRECT_BLOCKS; b108: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b10c: e1a033a3 lsr r3, r3, #7 b110: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (indirect_block_id < NR_INDIRECT_BLOCKS) { b114: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b118: e3530007 cmp r3, #7 b11c: ca000027 bgt b1c0 if ((addr = ip->addrs[NR_DIRECT_BLOCKS + indirect_block_id]) == 0) { b120: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b124: e2833005 add r3, r3, #5 b128: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b12c: e2833002 add r3, r3, #2 b130: e1a03103 lsl r3, r3, #2 b134: e0823003 add r3, r2, r3 b138: e5933004 ldr r3, [r3, #4] b13c: e50b3010 str r3, [fp, #-16] b140: e51b3010 ldr r3, [fp, #-16] b144: e3530000 cmp r3, #0 b148: 1a000009 bne b174 ip->addrs[NR_DIRECT_BLOCKS + indirect_block_id] = addr = BlockAlloc(); b14c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b150: e2834005 add r4, r3, #5 b154: eb0006fb bl cd48 b158: e50b0010 str r0, [fp, #-16] b15c: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b160: e2843002 add r3, r4, #2 b164: e1a03103 lsl r3, r3, #2 b168: e0823003 add r3, r2, r3 b16c: e51b2010 ldr r2, [fp, #-16] b170: e5832004 str r2, [r3, #4] } block_num -= indirect_block_id * MAX_INDIRECT_BLOCKS; b174: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b178: e1a03383 lsl r3, r3, #7 b17c: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc b180: e0423003 sub r3, r2, r3 b184: e50b3024 str r3, [fp, #-36] ; 0xffffffdc Error("InodeBlockMapping: out of range"); return 0; } // alloc a new indirect block uint32_t* indirect_block = (uint32_t*)BlockRead(addr); b188: e51b3010 ldr r3, [fp, #-16] b18c: e1a00003 mov r0, r3 b190: eb0006cd bl cccc b194: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 if ((addr = indirect_block[block_num]) == 0) { b198: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b19c: e1a03103 lsl r3, r3, #2 b1a0: e51b2018 ldr r2, [fp, #-24] ; 0xffffffe8 b1a4: e0823003 add r3, r2, r3 b1a8: e5933000 ldr r3, [r3] b1ac: e50b3010 str r3, [fp, #-16] b1b0: e51b3010 ldr r3, [fp, #-16] b1b4: e3530000 cmp r3, #0 b1b8: 1a00000d bne b1f4 b1bc: ea000004 b b1d4 Error("InodeBlockMapping: out of range"); b1c0: e3020c54 movw r0, #11348 ; 0x2c54 b1c4: e3400001 movt r0, #1 b1c8: ebfffe3b bl aabc return 0; b1cc: e3a03000 mov r3, #0 b1d0: ea000008 b b1f8 indirect_block[block_num] = addr = BlockAlloc(); b1d4: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b1d8: e1a03103 lsl r3, r3, #2 b1dc: e51b2018 ldr r2, [fp, #-24] ; 0xffffffe8 b1e0: e0824003 add r4, r2, r3 b1e4: eb0006d7 bl cd48 b1e8: e50b0010 str r0, [fp, #-16] b1ec: e51b3010 ldr r3, [fp, #-16] b1f0: e5843000 str r3, [r4] } return addr; b1f4: e51b3010 ldr r3, [fp, #-16] } b1f8: e1a00003 mov r0, r3 b1fc: e24bd008 sub sp, fp, #8 b200: e8bd8810 pop {r4, fp, pc} 0000b204 : /// @brief Look up the directory Inode for searching the target Inode static struct Inode* DirInodeLookup(struct Inode* dp, char* name, uint32_t* poff) { b204: e92d4800 push {fp, lr} b208: e28db004 add fp, sp, #4 b20c: e24dd028 sub sp, sp, #40 ; 0x28 b210: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 b214: e50b1024 str r1, [fp, #-36] ; 0xffffffdc b218: e50b2028 str r2, [fp, #-40] ; 0xffffffd8 uint32_t off, inum; struct DirectEntry de; if (dp->type != T_DIR) { b21c: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b220: e1d330f4 ldrsh r3, [r3, #4] b224: e3530001 cmp r3, #1 b228: 0a000002 beq b238 Error("DirInodeLookup not DIR"); b22c: e3020c74 movw r0, #11380 ; 0x2c74 b230: e3400001 movt r0, #1 b234: ebfffe20 bl aabc } for (off = 0; off < dp->size; off += sizeof(de)) { b238: e3a03000 mov r3, #0 b23c: e50b3008 str r3, [fp, #-8] b240: ea000026 b b2e0 if (InodeRead(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { b244: e51b2008 ldr r2, [fp, #-8] b248: e24b101c sub r1, fp, #28 b24c: e3a03010 mov r3, #16 b250: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 b254: eb0000ca bl b584 b258: e1a03000 mov r3, r0 b25c: e3530010 cmp r3, #16 b260: 0a000002 beq b270 Error("DirInodeAddEntry read"); b264: e3020c8c movw r0, #11404 ; 0x2c8c b268: e3400001 movt r0, #1 b26c: ebfffe12 bl aabc } if (de.inum == 0) { b270: e15b31bc ldrh r3, [fp, #-28] ; 0xffffffe4 b274: e3530000 cmp r3, #0 b278: 0a000014 beq b2d0 continue; } if (strncmp((const char*)name, (const char*)de.name, DIR_NAME_SIZE) == 0) { b27c: e24b301c sub r3, fp, #28 b280: e2833002 add r3, r3, #2 b284: e3a0200e mov r2, #14 b288: e1a01003 mov r1, r3 b28c: e51b0024 ldr r0, [fp, #-36] ; 0xffffffdc b290: eb000ad7 bl ddf4 b294: e1a03000 mov r3, r0 b298: e3530000 cmp r3, #0 b29c: 1a00000c bne b2d4 if (poff) { b2a0: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 b2a4: e3530000 cmp r3, #0 b2a8: 0a000002 beq b2b8 *poff = off; b2ac: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 b2b0: e51b2008 ldr r2, [fp, #-8] b2b4: e5832000 str r2, [r3] } inum = de.inum; b2b8: e15b31bc ldrh r3, [fp, #-28] ; 0xffffffe4 b2bc: e50b300c str r3, [fp, #-12] return InodeGet(inum); b2c0: e51b000c ldr r0, [fp, #-12] b2c4: ebfffe25 bl ab60 b2c8: e1a03000 mov r3, r0 b2cc: ea000009 b b2f8 continue; b2d0: e320f000 nop {0} for (off = 0; off < dp->size; off += sizeof(de)) { b2d4: e51b3008 ldr r3, [fp, #-8] b2d8: e2833010 add r3, r3, #16 b2dc: e50b3008 str r3, [fp, #-8] b2e0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b2e4: e5932008 ldr r2, [r3, #8] b2e8: e51b3008 ldr r3, [fp, #-8] b2ec: e1520003 cmp r2, r3 b2f0: 8affffd3 bhi b244 } } return 0; b2f4: e3a03000 mov r3, #0 } b2f8: e1a00003 mov r0, r3 b2fc: e24bd004 sub sp, fp, #4 b300: e8bd8800 pop {fp, pc} 0000b304 : /// @brief Add a new directory entry for dir Inode static int DirInodeAddEntry(struct Inode* dp, char* name, uint32_t inum) { b304: e92d4800 push {fp, lr} b308: e28db004 add fp, sp, #4 b30c: e24dd028 sub sp, sp, #40 ; 0x28 b310: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 b314: e50b1024 str r1, [fp, #-36] ; 0xffffffdc b318: e50b2028 str r2, [fp, #-40] ; 0xffffffd8 int off; struct DirectEntry de; struct Inode* ip; // Check that direct entry is existed. if ((ip = DirInodeLookup(dp, name, 0)) != 0) { b31c: e3a02000 mov r2, #0 b320: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc b324: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 b328: ebffffb5 bl b204 b32c: e50b000c str r0, [fp, #-12] b330: e51b300c ldr r3, [fp, #-12] b334: e3530000 cmp r3, #0 b338: 0a000001 beq b344 return -1; b33c: e3e03000 mvn r3, #0 b340: ea00002f b b404 } // Look for an empty dir entry. for (off = 0; off < dp->size; off += sizeof(de)) { b344: e3a03000 mov r3, #0 b348: e50b3008 str r3, [fp, #-8] b34c: ea000010 b b394 if (InodeRead(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { b350: e24b101c sub r1, fp, #28 b354: e3a03010 mov r3, #16 b358: e51b2008 ldr r2, [fp, #-8] b35c: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 b360: eb000087 bl b584 b364: e1a03000 mov r3, r0 b368: e3530010 cmp r3, #16 b36c: 0a000002 beq b37c Error("DirInodeAddEntry: read failed"); b370: e3020ca4 movw r0, #11428 ; 0x2ca4 b374: e3400001 movt r0, #1 b378: ebfffdcf bl aabc } if (de.inum == 0) { b37c: e15b31bc ldrh r3, [fp, #-28] ; 0xffffffe4 b380: e3530000 cmp r3, #0 b384: 0a000008 beq b3ac for (off = 0; off < dp->size; off += sizeof(de)) { b388: e51b3008 ldr r3, [fp, #-8] b38c: e2833010 add r3, r3, #16 b390: e50b3008 str r3, [fp, #-8] b394: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b398: e5932008 ldr r2, [r3, #8] b39c: e51b3008 ldr r3, [fp, #-8] b3a0: e1520003 cmp r2, r3 b3a4: 8affffe9 bhi b350 b3a8: ea000000 b b3b0 break; b3ac: e320f000 nop {0} } } // build a new direct entry. strncpy(de.name, name, DIR_NAME_SIZE); b3b0: e24b301c sub r3, fp, #28 b3b4: e2833002 add r3, r3, #2 b3b8: e3a0200e mov r2, #14 b3bc: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc b3c0: e1a00003 mov r0, r3 b3c4: eb000ace bl df04 de.inum = inum; b3c8: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 b3cc: e6ff3073 uxth r3, r3 b3d0: e14b31bc strh r3, [fp, #-28] ; 0xffffffe4 if (InodeWrite(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) { b3d4: e51b2008 ldr r2, [fp, #-8] b3d8: e24b101c sub r1, fp, #28 b3dc: e3a03010 mov r3, #16 b3e0: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 b3e4: eb0000c6 bl b704 b3e8: e1a03000 mov r3, r0 b3ec: e3530010 cmp r3, #16 b3f0: 0a000002 beq b400 Error("DirInodeAddEntry: write failed"); b3f4: e3020cc4 movw r0, #11460 ; 0x2cc4 b3f8: e3400001 movt r0, #1 b3fc: ebfffdae bl aabc } return 0; b400: e3a03000 mov r3, #0 } b404: e1a00003 mov r0, r3 b408: e24bd004 sub sp, fp, #4 b40c: e8bd8800 pop {fp, pc} 0000b410 : static struct Inode* Seek(struct Inode* ip, char* path, int nameiparent, char* name) { b410: e92d4800 push {fp, lr} b414: e28db004 add fp, sp, #4 b418: e24dd018 sub sp, sp, #24 b41c: e50b0010 str r0, [fp, #-16] b420: e50b1014 str r1, [fp, #-20] ; 0xffffffec b424: e50b2018 str r2, [fp, #-24] ; 0xffffffe8 b428: e50b301c str r3, [fp, #-28] ; 0xffffffe4 if (ip->size == 0) { b42c: e51b3010 ldr r3, [fp, #-16] b430: e5933008 ldr r3, [r3, #8] b434: e3530000 cmp r3, #0 b438: 1a00001e bne b4b8 Error("Inode is not sync\n"); b43c: e3020ce4 movw r0, #11492 ; 0x2ce4 b440: e3400001 movt r0, #1 b444: ebfffd9c bl aabc } struct Inode* next; while ((path = PathElementExtract(path, name)) != 0) { b448: ea00001a b b4b8 if (ip->type != T_DIR) { b44c: e51b3010 ldr r3, [fp, #-16] b450: e1d330f4 ldrsh r3, [r3, #4] b454: e3530001 cmp r3, #1 b458: 0a000001 beq b464 return NULL; b45c: e3a03000 mov r3, #0 b460: ea000021 b b4ec } if (nameiparent && *path == '\0') { b464: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b468: e3530000 cmp r3, #0 b46c: 0a000005 beq b488 b470: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b474: e5d33000 ldrb r3, [r3] b478: e3530000 cmp r3, #0 b47c: 1a000001 bne b488 return ip; b480: e51b3010 ldr r3, [fp, #-16] b484: ea000018 b b4ec } if ((next = DirInodeLookup(ip, name, 0)) == 0) { b488: e3a02000 mov r2, #0 b48c: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 b490: e51b0010 ldr r0, [fp, #-16] b494: ebffff5a bl b204 b498: e50b0008 str r0, [fp, #-8] b49c: e51b3008 ldr r3, [fp, #-8] b4a0: e3530000 cmp r3, #0 b4a4: 1a000001 bne b4b0 return NULL; b4a8: e3a03000 mov r3, #0 b4ac: ea00000e b b4ec } ip = next; b4b0: e51b3008 ldr r3, [fp, #-8] b4b4: e50b3010 str r3, [fp, #-16] while ((path = PathElementExtract(path, name)) != 0) { b4b8: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 b4bc: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec b4c0: eb0000e9 bl b86c b4c4: e50b0014 str r0, [fp, #-20] ; 0xffffffec b4c8: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec b4cc: e3530000 cmp r3, #0 b4d0: 1affffdd bne b44c } if (nameiparent) { b4d4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b4d8: e3530000 cmp r3, #0 b4dc: 0a000001 beq b4e8 return NULL; b4e0: e3a03000 mov r3, #0 b4e4: ea000000 b b4ec } return ip; b4e8: e51b3010 ldr r3, [fp, #-16] } b4ec: e1a00003 mov r0, r3 b4f0: e24bd004 sub sp, fp, #4 b4f4: e8bd8800 pop {fp, pc} 0000b4f8 : /// @brief Find target Inode from source Inode struct Inode* InodeSeek(struct Inode* source, char* path) { b4f8: e92d4800 push {fp, lr} b4fc: e28db004 add fp, sp, #4 b500: e24dd018 sub sp, sp, #24 b504: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 b508: e50b101c str r1, [fp, #-28] ; 0xffffffe4 char name[DIR_NAME_SIZE] = { 0 }; b50c: e24b3014 sub r3, fp, #20 b510: e3a02000 mov r2, #0 b514: e5832000 str r2, [r3] b518: e5832004 str r2, [r3, #4] b51c: e5832008 str r2, [r3, #8] b520: e1c320bc strh r2, [r3, #12] return Seek(source, path, 0, name); b524: e24b3014 sub r3, fp, #20 b528: e3a02000 mov r2, #0 b52c: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 b530: e51b0018 ldr r0, [fp, #-24] ; 0xffffffe8 b534: ebffffb5 bl b410 b538: e1a03000 mov r3, r0 } b53c: e1a00003 mov r0, r3 b540: e24bd004 sub sp, fp, #4 b544: e8bd8800 pop {fp, pc} 0000b548 : /// @brief Find target parent Inode from source Inode struct Inode* InodeParentSeek(struct Inode* source, char* path, char* name) { b548: e92d4800 push {fp, lr} b54c: e28db004 add fp, sp, #4 b550: e24dd010 sub sp, sp, #16 b554: e50b0008 str r0, [fp, #-8] b558: e50b100c str r1, [fp, #-12] b55c: e50b2010 str r2, [fp, #-16] return Seek(source, path, 1, name); b560: e51b3010 ldr r3, [fp, #-16] b564: e3a02001 mov r2, #1 b568: e51b100c ldr r1, [fp, #-12] b56c: e51b0008 ldr r0, [fp, #-8] b570: ebffffa6 bl b410 b574: e1a03000 mov r3, r0 } b578: e1a00003 mov r0, r3 b57c: e24bd004 sub sp, fp, #4 b580: e8bd8800 pop {fp, pc} 0000b584 : /// @brief Read data from the Inode to the dst buffer. int InodeRead(struct Inode* ip, char* dst, int off, int n) { b584: e92d4800 push {fp, lr} b588: e28db004 add fp, sp, #4 b58c: e24dd020 sub sp, sp, #32 b590: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 b594: e50b101c str r1, [fp, #-28] ; 0xffffffe4 b598: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 b59c: e50b3024 str r3, [fp, #-36] ; 0xffffffdc uint32_t tot, m; if (off > ip->size || off + n < off) { b5a0: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b5a4: e5932008 ldr r2, [r3, #8] b5a8: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b5ac: e1520003 cmp r2, r3 b5b0: 3a000005 bcc b5cc b5b4: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b5b8: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b5bc: e0822003 add r2, r2, r3 b5c0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b5c4: e1520003 cmp r2, r3 b5c8: aa000001 bge b5d4 return -1; b5cc: e3e03000 mvn r3, #0 b5d0: ea000048 b b6f8 } if (off + n > ip->size) { b5d4: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b5d8: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b5dc: e0823003 add r3, r2, r3 b5e0: e1a02003 mov r2, r3 b5e4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b5e8: e5933008 ldr r3, [r3, #8] b5ec: e1520003 cmp r2, r3 b5f0: 9a000004 bls b608 n = ip->size - off; b5f4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b5f8: e5932008 ldr r2, [r3, #8] b5fc: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b600: e0423003 sub r3, r2, r3 b604: e50b3024 str r3, [fp, #-36] ; 0xffffffdc } for (tot = 0; tot < n; tot += m, off += m, dst += m) { b608: e3a03000 mov r3, #0 b60c: e50b3008 str r3, [fp, #-8] b610: ea000033 b b6e4 uint8_t* data = BlockRead(InodeBlockMapping(ip, off / BLOCK_SIZE)); b614: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b618: e2832f7f add r2, r3, #508 ; 0x1fc b61c: e2822003 add r2, r2, #3 b620: e3530000 cmp r3, #0 b624: b1a03002 movlt r3, r2 b628: a1a03003 movge r3, r3 b62c: e1a034c3 asr r3, r3, #9 b630: e1a01003 mov r1, r3 b634: e51b0018 ldr r0, [fp, #-24] ; 0xffffffe8 b638: ebfffe92 bl b088 b63c: e1a03000 mov r3, r0 b640: e1a00003 mov r0, r3 b644: eb0005a0 bl cccc b648: e50b000c str r0, [fp, #-12] m = min(n - tot, BLOCK_SIZE - off % BLOCK_SIZE); b64c: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b650: e2732000 rsbs r2, r3, #0 b654: e7e83053 ubfx r3, r3, #0, #9 b658: e7e82052 ubfx r2, r2, #0, #9 b65c: 52623000 rsbpl r3, r2, #0 b660: e2633c02 rsb r3, r3, #512 ; 0x200 b664: e1a02003 mov r2, r3 b668: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc b66c: e51b3008 ldr r3, [fp, #-8] b670: e0413003 sub r3, r1, r3 b674: e1520003 cmp r2, r3 b678: 31a03002 movcc r3, r2 b67c: 21a03003 movcs r3, r3 b680: e50b3010 str r3, [fp, #-16] memmove(dst, data + off % BLOCK_SIZE, m); b684: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b688: e2732000 rsbs r2, r3, #0 b68c: e7e83053 ubfx r3, r3, #0, #9 b690: e7e82052 ubfx r2, r2, #0, #9 b694: 52623000 rsbpl r3, r2, #0 b698: e1a02003 mov r2, r3 b69c: e51b300c ldr r3, [fp, #-12] b6a0: e0833002 add r3, r3, r2 b6a4: e51b2010 ldr r2, [fp, #-16] b6a8: e1a01003 mov r1, r3 b6ac: e51b001c ldr r0, [fp, #-28] ; 0xffffffe4 b6b0: eb000897 bl d914 for (tot = 0; tot < n; tot += m, off += m, dst += m) { b6b4: e51b2008 ldr r2, [fp, #-8] b6b8: e51b3010 ldr r3, [fp, #-16] b6bc: e0823003 add r3, r2, r3 b6c0: e50b3008 str r3, [fp, #-8] b6c4: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b6c8: e51b3010 ldr r3, [fp, #-16] b6cc: e0823003 add r3, r2, r3 b6d0: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 b6d4: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 b6d8: e51b3010 ldr r3, [fp, #-16] b6dc: e0823003 add r3, r2, r3 b6e0: e50b301c str r3, [fp, #-28] ; 0xffffffe4 b6e4: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b6e8: e51b2008 ldr r2, [fp, #-8] b6ec: e1520003 cmp r2, r3 b6f0: 3affffc7 bcc b614 } return n; b6f4: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc } b6f8: e1a00003 mov r0, r3 b6fc: e24bd004 sub sp, fp, #4 b700: e8bd8800 pop {fp, pc} 0000b704 : /// @brief Write data from src buffer to the Inode, then increase the Inode size if neccessary. int InodeWrite(struct Inode* ip, char* src, uint32_t off, uint32_t n) { b704: e92d4800 push {fp, lr} b708: e28db004 add fp, sp, #4 b70c: e24dd020 sub sp, sp, #32 b710: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 b714: e50b101c str r1, [fp, #-28] ; 0xffffffe4 b718: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 b71c: e50b3024 str r3, [fp, #-36] ; 0xffffffdc uint32_t tot, m; if (off > ip->size || off + n < off) { b720: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b724: e5932008 ldr r2, [r3, #8] b728: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b72c: e1520003 cmp r2, r3 b730: 3a000005 bcc b74c b734: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b738: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b73c: e0822003 add r2, r2, r3 b740: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b744: e1520003 cmp r2, r3 b748: 2a000001 bcs b754 return -1; b74c: e3e03000 mvn r3, #0 b750: ea000042 b b860 } if (off + n > MAX_FILE_SIZE * BLOCK_SIZE) { b754: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b758: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b75c: e0822003 add r2, r2, r3 b760: e3a03c0a mov r3, #2560 ; 0xa00 b764: e3403008 movt r3, #8 b768: e1520003 cmp r2, r3 b76c: 9a000001 bls b778 return -1; b770: e3e03000 mvn r3, #0 b774: ea000039 b b860 } for (tot = 0; tot < n; tot += m, off += m, src += m) { b778: e3a03000 mov r3, #0 b77c: e50b3008 str r3, [fp, #-8] b780: ea000026 b b820 uint8_t* data = BlockRead(InodeBlockMapping(ip, off / BLOCK_SIZE)); b784: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b788: e1a034a3 lsr r3, r3, #9 b78c: e1a01003 mov r1, r3 b790: e51b0018 ldr r0, [fp, #-24] ; 0xffffffe8 b794: ebfffe3b bl b088 b798: e1a03000 mov r3, r0 b79c: e1a00003 mov r0, r3 b7a0: eb000549 bl cccc b7a4: e50b000c str r0, [fp, #-12] m = min(n - tot, BLOCK_SIZE - off % BLOCK_SIZE); b7a8: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b7ac: e7e83053 ubfx r3, r3, #0, #9 b7b0: e2632c02 rsb r2, r3, #512 ; 0x200 b7b4: e51b1024 ldr r1, [fp, #-36] ; 0xffffffdc b7b8: e51b3008 ldr r3, [fp, #-8] b7bc: e0413003 sub r3, r1, r3 b7c0: e1520003 cmp r2, r3 b7c4: 31a03002 movcc r3, r2 b7c8: 21a03003 movcs r3, r3 b7cc: e50b3010 str r3, [fp, #-16] memmove(data + off % BLOCK_SIZE, src, m); b7d0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b7d4: e7e83053 ubfx r3, r3, #0, #9 b7d8: e51b200c ldr r2, [fp, #-12] b7dc: e0823003 add r3, r2, r3 b7e0: e51b2010 ldr r2, [fp, #-16] b7e4: e51b101c ldr r1, [fp, #-28] ; 0xffffffe4 b7e8: e1a00003 mov r0, r3 b7ec: eb000848 bl d914 for (tot = 0; tot < n; tot += m, off += m, src += m) { b7f0: e51b2008 ldr r2, [fp, #-8] b7f4: e51b3010 ldr r3, [fp, #-16] b7f8: e0823003 add r3, r2, r3 b7fc: e50b3008 str r3, [fp, #-8] b800: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b804: e51b3010 ldr r3, [fp, #-16] b808: e0823003 add r3, r2, r3 b80c: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 b810: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 b814: e51b3010 ldr r3, [fp, #-16] b818: e0823003 add r3, r2, r3 b81c: e50b301c str r3, [fp, #-28] ; 0xffffffe4 b820: e51b2008 ldr r2, [fp, #-8] b824: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b828: e1520003 cmp r2, r3 b82c: 3affffd4 bcc b784 } if (n > 0 && off > ip->size) { b830: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc b834: e3530000 cmp r3, #0 b838: 0a000007 beq b85c b83c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b840: e5932008 ldr r2, [r3, #8] b844: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 b848: e1520003 cmp r2, r3 b84c: 2a000002 bcs b85c ip->size = off; b850: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 b854: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 b858: e5832008 str r2, [r3, #8] } return n; b85c: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc } b860: e1a00003 mov r0, r3 b864: e24bd004 sub sp, fp, #4 b868: e8bd8800 pop {fp, pc} 0000b86c : // Paths process static char* PathElementExtract(char* path, char* name) { b86c: e92d4800 push {fp, lr} b870: e28db004 add fp, sp, #4 b874: e24dd010 sub sp, sp, #16 b878: e50b0010 str r0, [fp, #-16] b87c: e50b1014 str r1, [fp, #-20] ; 0xffffffec // Skip leading slashes while (*path == '/') b880: ea000002 b b890 path++; b884: e51b3010 ldr r3, [fp, #-16] b888: e2833001 add r3, r3, #1 b88c: e50b3010 str r3, [fp, #-16] while (*path == '/') b890: e51b3010 ldr r3, [fp, #-16] b894: e5d33000 ldrb r3, [r3] b898: e353002f cmp r3, #47 ; 0x2f b89c: 0afffff8 beq b884 // Check for end of path if (*path == 0) b8a0: e51b3010 ldr r3, [fp, #-16] b8a4: e5d33000 ldrb r3, [r3] b8a8: e3530000 cmp r3, #0 b8ac: 1a000001 bne b8b8 return NULL; b8b0: e3a03000 mov r3, #0 b8b4: ea000029 b b960 // Extract element char* start = path; b8b8: e51b3010 ldr r3, [fp, #-16] b8bc: e50b300c str r3, [fp, #-12] while (*path != '/' && *path != 0) b8c0: ea000002 b b8d0 path++; b8c4: e51b3010 ldr r3, [fp, #-16] b8c8: e2833001 add r3, r3, #1 b8cc: e50b3010 str r3, [fp, #-16] while (*path != '/' && *path != 0) b8d0: e51b3010 ldr r3, [fp, #-16] b8d4: e5d33000 ldrb r3, [r3] b8d8: e353002f cmp r3, #47 ; 0x2f b8dc: 0a000003 beq b8f0 b8e0: e51b3010 ldr r3, [fp, #-16] b8e4: e5d33000 ldrb r3, [r3] b8e8: e3530000 cmp r3, #0 b8ec: 1afffff4 bne b8c4 // Calculate length and copy to 'name' int len = path - start; b8f0: e51b2010 ldr r2, [fp, #-16] b8f4: e51b300c ldr r3, [fp, #-12] b8f8: e0423003 sub r3, r2, r3 b8fc: e50b3008 str r3, [fp, #-8] if (len >= DIR_NAME_SIZE) b900: e51b3008 ldr r3, [fp, #-8] b904: e353000d cmp r3, #13 b908: da000001 ble b914 len = DIR_NAME_SIZE - 1; b90c: e3a0300d mov r3, #13 b910: e50b3008 str r3, [fp, #-8] strncpy(name, start, len); b914: e51b3008 ldr r3, [fp, #-8] b918: e1a02003 mov r2, r3 b91c: e51b100c ldr r1, [fp, #-12] b920: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec b924: eb000976 bl df04 name[len] = 0; b928: e51b3008 ldr r3, [fp, #-8] b92c: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec b930: e0823003 add r3, r2, r3 b934: e3a02000 mov r2, #0 b938: e5c32000 strb r2, [r3] // Skip trailing slashes while (*path == '/') b93c: ea000002 b b94c path++; b940: e51b3010 ldr r3, [fp, #-16] b944: e2833001 add r3, r3, #1 b948: e50b3010 str r3, [fp, #-16] while (*path == '/') b94c: e51b3010 ldr r3, [fp, #-16] b950: e5d33000 ldrb r3, [r3] b954: e353002f cmp r3, #47 ; 0x2f b958: 0afffff8 beq b940 return path; b95c: e51b3010 ldr r3, [fp, #-16] } b960: e1a00003 mov r0, r3 b964: e24bd004 sub sp, fp, #4 b968: e8bd8800 pop {fp, pc} 0000b96c : struct FileDescriptor* GetFileDescriptor(int fd) { b96c: e92d4800 push {fp, lr} b970: e28db004 add fp, sp, #4 b974: e24dd008 sub sp, sp, #8 b978: e50b0008 str r0, [fp, #-8] if (fd < 0 || fd > MAX_SUPPORT_FD) { b97c: e51b3008 ldr r3, [fp, #-8] b980: e3530000 cmp r3, #0 b984: ba000002 blt b994 b988: e51b3008 ldr r3, [fp, #-8] b98c: e3530b01 cmp r3, #1024 ; 0x400 b990: da000004 ble b9a8 printf("fd invlid.\n"); b994: e3020cf8 movw r0, #11512 ; 0x2cf8 b998: e3400001 movt r0, #1 b99c: eb0000f7 bl bd80 return NULL; b9a0: e3a03000 mov r3, #0 b9a4: ea000005 b b9c0 } return &fd_table[fd]; b9a8: e51b3008 ldr r3, [fp, #-8] b9ac: e3a02098 mov r2, #152 ; 0x98 b9b0: e0020392 mul r2, r2, r3 b9b4: e3063134 movw r3, #24884 ; 0x6134 b9b8: e3403001 movt r3, #1 b9bc: e0823003 add r3, r2, r3 } b9c0: e1a00003 mov r0, r3 b9c4: e24bd004 sub sp, fp, #4 b9c8: e8bd8800 pop {fp, pc} 0000b9cc : void FreeFileDescriptor(int fd) { b9cc: e92d4800 push {fp, lr} b9d0: e28db004 add fp, sp, #4 b9d4: e24dd008 sub sp, sp, #8 b9d8: e50b0008 str r0, [fp, #-8] if (fd < 0 || fd > MAX_SUPPORT_FD) { b9dc: e51b3008 ldr r3, [fp, #-8] b9e0: e3530000 cmp r3, #0 b9e4: ba000002 blt b9f4 b9e8: e51b3008 ldr r3, [fp, #-8] b9ec: e3530b01 cmp r3, #1024 ; 0x400 b9f0: da000003 ble ba04 printf("fd invlid.\n"); b9f4: e3020cf8 movw r0, #11512 ; 0x2cf8 b9f8: e3400001 movt r0, #1 b9fc: eb0000df bl bd80 return; ba00: ea000009 b ba2c } fd_table[fd].data = 0; ba04: e3063134 movw r3, #24884 ; 0x6134 ba08: e3403001 movt r3, #1 ba0c: e51b2008 ldr r2, [fp, #-8] ba10: e3a01098 mov r1, #152 ; 0x98 ba14: e0020291 mul r2, r1, r2 ba18: e0833002 add r3, r3, r2 ba1c: e2833080 add r3, r3, #128 ; 0x80 ba20: e3a02000 mov r2, #0 ba24: e5832000 str r2, [r3] return; ba28: e320f000 nop {0} } ba2c: e24bd004 sub sp, fp, #4 ba30: e8bd8800 pop {fp, pc} 0000ba34 : int AllocFileDescriptor(void) { ba34: e52db004 push {fp} ; (str fp, [sp, #-4]!) ba38: e28db000 add fp, sp, #0 ba3c: e24dd00c sub sp, sp, #12 int free_idx = -1; ba40: e3e03000 mvn r3, #0 ba44: e50b3008 str r3, [fp, #-8] for (int i = 0; i < MAX_SUPPORT_FD; i++) { ba48: e3a03000 mov r3, #0 ba4c: e50b300c str r3, [fp, #-12] ba50: ea000011 b ba9c // found free fd if (free_idx == -1 && fd_table[i].data == 0) { ba54: e51b3008 ldr r3, [fp, #-8] ba58: e3730001 cmn r3, #1 ba5c: 1a00000b bne ba90 ba60: e3063134 movw r3, #24884 ; 0x6134 ba64: e3403001 movt r3, #1 ba68: e51b200c ldr r2, [fp, #-12] ba6c: e3a01098 mov r1, #152 ; 0x98 ba70: e0020291 mul r2, r1, r2 ba74: e0833002 add r3, r3, r2 ba78: e2833080 add r3, r3, #128 ; 0x80 ba7c: e5933000 ldr r3, [r3] ba80: e3530000 cmp r3, #0 ba84: 1a000001 bne ba90 free_idx = i; ba88: e51b300c ldr r3, [fp, #-12] ba8c: e50b3008 str r3, [fp, #-8] for (int i = 0; i < MAX_SUPPORT_FD; i++) { ba90: e51b300c ldr r3, [fp, #-12] ba94: e2833001 add r3, r3, #1 ba98: e50b300c str r3, [fp, #-12] ba9c: e51b300c ldr r3, [fp, #-12] baa0: e3530b01 cmp r3, #1024 ; 0x400 baa4: baffffea blt ba54 } } if (free_idx == -1) { baa8: e51b3008 ldr r3, [fp, #-8] baac: e3730001 cmn r3, #1 bab0: 1a000001 bne babc return -1; bab4: e3e03000 mvn r3, #0 bab8: ea000000 b bac0 } return free_idx; babc: e51b3008 ldr r3, [fp, #-8] } bac0: e1a00003 mov r0, r3 bac4: e28bd000 add sp, fp, #0 bac8: e49db004 pop {fp} ; (ldr fp, [sp], #4) bacc: e12fff1e bx lr 0000bad0 : #define USER_UART_BASE 0x6FFFF000 // #define USER_UART_BASE 0x621e8000 static bool init_uart_mmio() { bad0: e92d4800 push {fp, lr} bad4: e28db004 add fp, sp, #4 static int mapped = 0; if (mapped == 0) { bad8: e30c3134 movw r3, #49460 ; 0xc134 badc: e3403003 movt r3, #3 bae0: e5933000 ldr r3, [r3] bae4: e3530000 cmp r3, #0 bae8: 1a00000f bne bb2c if (-1 == mmap(USER_UART_BASE, 0x021e8000, 4096, true)) { baec: e3a03001 mov r3, #1 baf0: e3a02a01 mov r2, #4096 ; 0x1000 baf4: e3a01902 mov r1, #32768 ; 0x8000 baf8: e340121e movt r1, #542 ; 0x21e bafc: e3a00a0f mov r0, #61440 ; 0xf000 bb00: e3460fff movt r0, #28671 ; 0x6fff bb04: eb00062f bl d3c8 bb08: e1a03000 mov r3, r0 bb0c: e3730001 cmn r3, #1 bb10: 1a000001 bne bb1c return false; bb14: e3a03000 mov r3, #0 bb18: ea000004 b bb30 } mapped = 1; bb1c: e30c3134 movw r3, #49460 ; 0xc134 bb20: e3403003 movt r3, #3 bb24: e3a02001 mov r2, #1 bb28: e5832000 str r2, [r3] } return true; bb2c: e3a03001 mov r3, #1 } bb30: e1a00003 mov r0, r3 bb34: e8bd8800 pop {fp, pc} 0000bb38 : static void putc(char c) { bb38: e52db004 push {fp} ; (str fp, [sp, #-4]!) bb3c: e28db000 add fp, sp, #0 bb40: e24dd00c sub sp, sp, #12 bb44: e1a03000 mov r3, r0 bb48: e54b3005 strb r3, [fp, #-5] while ((*(volatile hw_uart_uts_t*)(USER_UART_BASE + 0xb4)).B.TXFULL) bb4c: e320f000 nop {0} bb50: e30f30b4 movw r3, #61620 ; 0xf0b4 bb54: e3463fff movt r3, #28671 ; 0x6fff bb58: e5933000 ldr r3, [r3] bb5c: e7e03253 ubfx r3, r3, #4, #1 bb60: e6ef3073 uxtb r3, r3 bb64: e3530000 cmp r3, #0 bb68: 1afffff8 bne bb50 ; if (c == '\n') { bb6c: e55b3005 ldrb r3, [fp, #-5] bb70: e353000a cmp r3, #10 bb74: 1a00000b bne bba8 ((*(volatile hw_uart_utxd_t*)(USER_UART_BASE + 0x40)).U = ('\r')); bb78: e30f3040 movw r3, #61504 ; 0xf040 bb7c: e3463fff movt r3, #28671 ; 0x6fff bb80: e3a0200d mov r2, #13 bb84: e5832000 str r2, [r3] while ((*(volatile hw_uart_uts_t*)(USER_UART_BASE + 0xb4)).B.TXFULL) bb88: e320f000 nop {0} bb8c: e30f30b4 movw r3, #61620 ; 0xf0b4 bb90: e3463fff movt r3, #28671 ; 0x6fff bb94: e5933000 ldr r3, [r3] bb98: e7e03253 ubfx r3, r3, #4, #1 bb9c: e6ef3073 uxtb r3, r3 bba0: e3530000 cmp r3, #0 bba4: 1afffff8 bne bb8c ; } ((*(volatile hw_uart_utxd_t*)(USER_UART_BASE + 0x40)).U = (c)); bba8: e30f3040 movw r3, #61504 ; 0xf040 bbac: e3463fff movt r3, #28671 ; 0x6fff bbb0: e55b2005 ldrb r2, [fp, #-5] bbb4: e5832000 str r2, [r3] } bbb8: e320f000 nop {0} bbbc: e28bd000 add sp, fp, #0 bbc0: e49db004 pop {fp} ; (ldr fp, [sp], #4) bbc4: e12fff1e bx lr 0000bbc8 : char getc(void) { bbc8: e92d4800 push {fp, lr} bbcc: e28db004 add fp, sp, #4 bbd0: e24dd008 sub sp, sp, #8 if (!init_uart_mmio()) { bbd4: ebffffbd bl bad0 bbd8: e1a03000 mov r3, r0 bbdc: e2233001 eor r3, r3, #1 bbe0: e6ef3073 uxtb r3, r3 bbe4: e3530000 cmp r3, #0 bbe8: 0a000001 beq bbf4 return 0xFF; bbec: e3a030ff mov r3, #255 ; 0xff bbf0: ea000014 b bc48 } uint32_t read_data; /* If Rx FIFO has no data ready */ if (!(*(volatile hw_uart_usr2_t*)(USER_UART_BASE + 0x98)).B.RDR) { bbf4: e30f3098 movw r3, #61592 ; 0xf098 bbf8: e3463fff movt r3, #28671 ; 0x6fff bbfc: e5933000 ldr r3, [r3] bc00: e7e03053 ubfx r3, r3, #0, #1 bc04: e6ef3073 uxtb r3, r3 bc08: e3530000 cmp r3, #0 bc0c: 1a000001 bne bc18 return 0xFF; bc10: e3a030ff mov r3, #255 ; 0xff bc14: ea00000b b bc48 } read_data = ((*(volatile hw_uart_urxd_t*)(USER_UART_BASE + 0x0)).U); bc18: e3a03a0f mov r3, #61440 ; 0xf000 bc1c: e3463fff movt r3, #28671 ; 0x6fff bc20: e5933000 ldr r3, [r3] bc24: e50b3008 str r3, [fp, #-8] /* If error are detected */ if (read_data & 0x7C00) bc28: e51b3008 ldr r3, [fp, #-8] bc2c: e2033b1f and r3, r3, #31744 ; 0x7c00 bc30: e3530000 cmp r3, #0 bc34: 0a000001 beq bc40 return 0xFF; bc38: e3a030ff mov r3, #255 ; 0xff bc3c: ea000001 b bc48 return (char)read_data; bc40: e51b3008 ldr r3, [fp, #-8] bc44: e6ef3073 uxtb r3, r3 } bc48: e1a00003 mov r0, r3 bc4c: e24bd004 sub sp, fp, #4 bc50: e8bd8800 pop {fp, pc} 0000bc54 : static void printint(int xx, int base, int sgn) { bc54: e92d4810 push {r4, fp, lr} bc58: e28db008 add fp, sp, #8 bc5c: e24dd034 sub sp, sp, #52 ; 0x34 bc60: e50b0030 str r0, [fp, #-48] ; 0xffffffd0 bc64: e50b1034 str r1, [fp, #-52] ; 0xffffffcc bc68: e50b2038 str r2, [fp, #-56] ; 0xffffffc8 static char digits[] = "0123456789ABCDEF"; char buf[16]; int i, neg; uint32_t x; neg = 0; bc6c: e3a03000 mov r3, #0 bc70: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (sgn && xx < 0) { bc74: e51b3038 ldr r3, [fp, #-56] ; 0xffffffc8 bc78: e3530000 cmp r3, #0 bc7c: 0a000008 beq bca4 bc80: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 bc84: e3530000 cmp r3, #0 bc88: aa000005 bge bca4 neg = 1; bc8c: e3a03001 mov r3, #1 bc90: e50b3014 str r3, [fp, #-20] ; 0xffffffec x = -xx; bc94: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 bc98: e2633000 rsb r3, r3, #0 bc9c: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 bca0: ea000001 b bcac } else { x = xx; bca4: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 bca8: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 } i = 0; bcac: e3a03000 mov r3, #0 bcb0: e50b3010 str r3, [fp, #-16] do { buf[i++] = digits[x % base]; bcb4: e51b4010 ldr r4, [fp, #-16] bcb8: e2843001 add r3, r4, #1 bcbc: e50b3010 str r3, [fp, #-16] bcc0: e51b2034 ldr r2, [fp, #-52] ; 0xffffffcc bcc4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bcc8: e1a01002 mov r1, r2 bccc: e1a00003 mov r0, r3 bcd0: eb00061b bl d544 <__aeabi_uidivmod> bcd4: e1a03001 mov r3, r1 bcd8: e1a02003 mov r2, r3 bcdc: e3033554 movw r3, #13652 ; 0x3554 bce0: e3403001 movt r3, #1 bce4: e7d32002 ldrb r2, [r3, r2] bce8: e24b300c sub r3, fp, #12 bcec: e0833004 add r3, r3, r4 bcf0: e543201c strb r2, [r3, #-28] ; 0xffffffe4 } while ((x /= base) != 0); bcf4: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc bcf8: e1a01003 mov r1, r3 bcfc: e51b0018 ldr r0, [fp, #-24] ; 0xffffffe8 bd00: eb0005d2 bl d450 <__udivsi3> bd04: e1a03000 mov r3, r0 bd08: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 bd0c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bd10: e3530000 cmp r3, #0 bd14: 1affffe6 bne bcb4 if (neg) bd18: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec bd1c: e3530000 cmp r3, #0 bd20: 0a00000d beq bd5c buf[i++] = '-'; bd24: e51b3010 ldr r3, [fp, #-16] bd28: e2832001 add r2, r3, #1 bd2c: e50b2010 str r2, [fp, #-16] bd30: e24b200c sub r2, fp, #12 bd34: e0823003 add r3, r2, r3 bd38: e3a0202d mov r2, #45 ; 0x2d bd3c: e543201c strb r2, [r3, #-28] ; 0xffffffe4 while (--i >= 0) bd40: ea000005 b bd5c putc(buf[i]); bd44: e24b2028 sub r2, fp, #40 ; 0x28 bd48: e51b3010 ldr r3, [fp, #-16] bd4c: e0823003 add r3, r2, r3 bd50: e5d33000 ldrb r3, [r3] bd54: e1a00003 mov r0, r3 bd58: ebffff76 bl bb38 while (--i >= 0) bd5c: e51b3010 ldr r3, [fp, #-16] bd60: e2433001 sub r3, r3, #1 bd64: e50b3010 str r3, [fp, #-16] bd68: e51b3010 ldr r3, [fp, #-16] bd6c: e3530000 cmp r3, #0 bd70: aafffff3 bge bd44 } bd74: e320f000 nop {0} bd78: e24bd008 sub sp, fp, #8 bd7c: e8bd8810 pop {r4, fp, pc} 0000bd80 : // Print to usart. Only understands %d, %x, %p, %s. void printf(char* fmt, ...) { bd80: e92d000f push {r0, r1, r2, r3} bd84: e92d4800 push {fp, lr} bd88: e28db004 add fp, sp, #4 bd8c: e24dd018 sub sp, sp, #24 if (!init_uart_mmio()) { bd90: ebffff4e bl bad0 bd94: e1a03000 mov r3, r0 bd98: e2233001 eor r3, r3, #1 bd9c: e6ef3073 uxtb r3, r3 bda0: e3530000 cmp r3, #0 bda4: 1a00007b bne bf98 } char* s; int c, i, state; uint32_t* ap; state = 0; bda8: e3a03000 mov r3, #0 bdac: e50b3010 str r3, [fp, #-16] ap = (uint32_t*)(void*)&fmt + 1; bdb0: e28b3008 add r3, fp, #8 bdb4: e50b3014 str r3, [fp, #-20] ; 0xffffffec for (i = 0; fmt[i]; i++) { bdb8: e3a03000 mov r3, #0 bdbc: e50b300c str r3, [fp, #-12] bdc0: ea00006d b bf7c c = fmt[i] & 0xff; bdc4: e59b2004 ldr r2, [fp, #4] bdc8: e51b300c ldr r3, [fp, #-12] bdcc: e0823003 add r3, r2, r3 bdd0: e5d33000 ldrb r3, [r3] bdd4: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 if (state == 0) { bdd8: e51b3010 ldr r3, [fp, #-16] bddc: e3530000 cmp r3, #0 bde0: 1a00000a bne be10 if (c == '%') { bde4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bde8: e3530025 cmp r3, #37 ; 0x25 bdec: 1a000002 bne bdfc state = '%'; bdf0: e3a03025 mov r3, #37 ; 0x25 bdf4: e50b3010 str r3, [fp, #-16] bdf8: ea00005c b bf70 } else { putc(c); bdfc: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 be00: e6ef3073 uxtb r3, r3 be04: e1a00003 mov r0, r3 be08: ebffff4a bl bb38 be0c: ea000057 b bf70 } } else if (state == '%') { be10: e51b3010 ldr r3, [fp, #-16] be14: e3530025 cmp r3, #37 ; 0x25 be18: 1a000054 bne bf70 if (c == 'd') { be1c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 be20: e3530064 cmp r3, #100 ; 0x64 be24: 1a000009 bne be50 printint(*ap, 10, 1); be28: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec be2c: e5933000 ldr r3, [r3] be30: e3a02001 mov r2, #1 be34: e3a0100a mov r1, #10 be38: e1a00003 mov r0, r3 be3c: ebffff84 bl bc54 ap++; be40: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec be44: e2833004 add r3, r3, #4 be48: e50b3014 str r3, [fp, #-20] ; 0xffffffec be4c: ea000045 b bf68 } else if (c == 'x' || c == 'p') { be50: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 be54: e3530078 cmp r3, #120 ; 0x78 be58: 0a000002 beq be68 be5c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 be60: e3530070 cmp r3, #112 ; 0x70 be64: 1a000009 bne be90 printint(*ap, 16, 0); be68: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec be6c: e5933000 ldr r3, [r3] be70: e3a02000 mov r2, #0 be74: e3a01010 mov r1, #16 be78: e1a00003 mov r0, r3 be7c: ebffff74 bl bc54 ap++; be80: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec be84: e2833004 add r3, r3, #4 be88: e50b3014 str r3, [fp, #-20] ; 0xffffffec be8c: ea000035 b bf68 } else if (c == 's') { be90: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 be94: e3530073 cmp r3, #115 ; 0x73 be98: 1a000018 bne bf00 s = (char*)*ap; be9c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec bea0: e5933000 ldr r3, [r3] bea4: e50b3008 str r3, [fp, #-8] ap++; bea8: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec beac: e2833004 add r3, r3, #4 beb0: e50b3014 str r3, [fp, #-20] ; 0xffffffec if (s == 0) beb4: e51b3008 ldr r3, [fp, #-8] beb8: e3530000 cmp r3, #0 bebc: 1a00000a bne beec s = "(null)"; bec0: e3023d04 movw r3, #11524 ; 0x2d04 bec4: e3403001 movt r3, #1 bec8: e50b3008 str r3, [fp, #-8] while (*s != 0) { becc: ea000006 b beec putc(*s); bed0: e51b3008 ldr r3, [fp, #-8] bed4: e5d33000 ldrb r3, [r3] bed8: e1a00003 mov r0, r3 bedc: ebffff15 bl bb38 s++; bee0: e51b3008 ldr r3, [fp, #-8] bee4: e2833001 add r3, r3, #1 bee8: e50b3008 str r3, [fp, #-8] while (*s != 0) { beec: e51b3008 ldr r3, [fp, #-8] bef0: e5d33000 ldrb r3, [r3] bef4: e3530000 cmp r3, #0 bef8: 1afffff4 bne bed0 befc: ea000019 b bf68 } } else if (c == 'c') { bf00: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bf04: e3530063 cmp r3, #99 ; 0x63 bf08: 1a000008 bne bf30 putc(*ap); bf0c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec bf10: e5933000 ldr r3, [r3] bf14: e6ef3073 uxtb r3, r3 bf18: e1a00003 mov r0, r3 bf1c: ebffff05 bl bb38 ap++; bf20: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec bf24: e2833004 add r3, r3, #4 bf28: e50b3014 str r3, [fp, #-20] ; 0xffffffec bf2c: ea00000d b bf68 } else if (c == '%') { bf30: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bf34: e3530025 cmp r3, #37 ; 0x25 bf38: 1a000004 bne bf50 putc(c); bf3c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bf40: e6ef3073 uxtb r3, r3 bf44: e1a00003 mov r0, r3 bf48: ebfffefa bl bb38 bf4c: ea000005 b bf68 } else { // Unknown % sequence. Print it to draw attention. putc('%'); bf50: e3a00025 mov r0, #37 ; 0x25 bf54: ebfffef7 bl bb38 putc(c); bf58: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 bf5c: e6ef3073 uxtb r3, r3 bf60: e1a00003 mov r0, r3 bf64: ebfffef3 bl bb38 } state = 0; bf68: e3a03000 mov r3, #0 bf6c: e50b3010 str r3, [fp, #-16] for (i = 0; fmt[i]; i++) { bf70: e51b300c ldr r3, [fp, #-12] bf74: e2833001 add r3, r3, #1 bf78: e50b300c str r3, [fp, #-12] bf7c: e59b2004 ldr r2, [fp, #4] bf80: e51b300c ldr r3, [fp, #-12] bf84: e0823003 add r3, r2, r3 bf88: e5d33000 ldrb r3, [r3] bf8c: e3530000 cmp r3, #0 bf90: 1affff8b bne bdc4 bf94: ea000000 b bf9c return; bf98: e320f000 nop {0} } } bf9c: e24bd004 sub sp, fp, #4 bfa0: e8bd4800 pop {fp, lr} bfa4: e28dd010 add sp, sp, #16 bfa8: e12fff1e bx lr 0000bfac : /// @warning this file doesnt support multi threads /// ipc part struct IpcMsg* new_ipc_msg(struct Session* session, const int argc, const int* arg_size) { bfac: e92d4800 push {fp, lr} bfb0: e28db004 add fp, sp, #4 bfb4: e24dd030 sub sp, sp, #48 ; 0x30 bfb8: e50b0028 str r0, [fp, #-40] ; 0xffffffd8 bfbc: e50b102c str r1, [fp, #-44] ; 0xffffffd4 bfc0: e50b2030 str r2, [fp, #-48] ; 0xffffffd0 int len = IPC_ARG_INFO_BASE_OFFSET; bfc4: e3a0300c mov r3, #12 bfc8: e50b3008 str r3, [fp, #-8] int arg_info_offset = len; // start of arg info bfcc: e51b3008 ldr r3, [fp, #-8] bfd0: e50b300c str r3, [fp, #-12] len += argc * sizeof(struct IpcArgInfo); bfd4: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 bfd8: e1a02103 lsl r2, r3, #2 bfdc: e51b3008 ldr r3, [fp, #-8] bfe0: e0823003 add r3, r2, r3 bfe4: e50b3008 str r3, [fp, #-8] int arg_buf_offset = len; // start of arg buffer bfe8: e51b3008 ldr r3, [fp, #-8] bfec: e50b3010 str r3, [fp, #-16] for (int i = 0; i < argc; i++) { bff0: e3a03000 mov r3, #0 bff4: e50b3014 str r3, [fp, #-20] ; 0xffffffec bff8: ea00000a b c028 len += arg_size[i]; bffc: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c000: e1a03103 lsl r3, r3, #2 c004: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 c008: e0823003 add r3, r2, r3 c00c: e5933000 ldr r3, [r3] c010: e51b2008 ldr r2, [fp, #-8] c014: e0823003 add r3, r2, r3 c018: e50b3008 str r3, [fp, #-8] for (int i = 0; i < argc; i++) { c01c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c020: e2833001 add r3, r3, #1 c024: e50b3014 str r3, [fp, #-20] ; 0xffffffec c028: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec c02c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c030: e1520003 cmp r2, r3 c034: bafffff0 blt bffc } struct IpcMsg* buf = session_alloc_buf(session, len); c038: e51b1008 ldr r1, [fp, #-8] c03c: e51b0028 ldr r0, [fp, #-40] ; 0xffffffd8 c040: eb00026d bl c9fc c044: e50b001c str r0, [fp, #-28] ; 0xffffffe4 if (buf == NULL) { c048: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c04c: e3530000 cmp r3, #0 c050: 1a000001 bne c05c return NULL; c054: e3a03000 mov r3, #0 c058: ea00003d b c154 } buf->header.len = len; c05c: e51b3008 ldr r3, [fp, #-8] c060: e6ff2073 uxth r2, r3 c064: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c068: e1c320b2 strh r2, [r3, #2] buf->header.done = 0; c06c: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c070: e5d23000 ldrb r3, [r2] c074: e7c1309f bfc r3, #1, #1 c078: e5c23000 strb r3, [r2] buf->header.valid = 0; c07c: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c080: e5d23000 ldrb r3, [r2] c084: e7c0301f bfc r3, #0, #1 c088: e5c23000 strb r3, [r2] for (int i = 0; i < argc; i++) { c08c: e3a03000 mov r3, #0 c090: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 c094: ea00001d b c110 struct IpcArgInfo* arg_info = (struct IpcArgInfo*)((char*)buf + arg_info_offset); c098: e51b300c ldr r3, [fp, #-12] c09c: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c0a0: e0823003 add r3, r2, r3 c0a4: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 arg_info->len = arg_size[i]; c0a8: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c0ac: e1a03103 lsl r3, r3, #2 c0b0: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 c0b4: e0823003 add r3, r2, r3 c0b8: e5933000 ldr r3, [r3] c0bc: e6ff2073 uxth r2, r3 c0c0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 c0c4: e1c320b2 strh r2, [r3, #2] arg_info->offset = arg_buf_offset; c0c8: e51b3010 ldr r3, [fp, #-16] c0cc: e6ff2073 uxth r2, r3 c0d0: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 c0d4: e1c320b0 strh r2, [r3] // update arg_info_offset and arg_buf_offset arg_info_offset += sizeof(struct IpcArgInfo); c0d8: e51b300c ldr r3, [fp, #-12] c0dc: e2833004 add r3, r3, #4 c0e0: e50b300c str r3, [fp, #-12] arg_buf_offset += arg_size[i]; c0e4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c0e8: e1a03103 lsl r3, r3, #2 c0ec: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 c0f0: e0823003 add r3, r2, r3 c0f4: e5933000 ldr r3, [r3] c0f8: e51b2010 ldr r2, [fp, #-16] c0fc: e0823003 add r3, r2, r3 c100: e50b3010 str r3, [fp, #-16] for (int i = 0; i < argc; i++) { c104: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c108: e2833001 add r3, r3, #1 c10c: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 c110: e51b2018 ldr r2, [fp, #-24] ; 0xffffffe8 c114: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c118: e1520003 cmp r2, r3 c11c: baffffdd blt c098 } buf->header.nr_args = argc; c120: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c124: e6ef3073 uxtb r3, r3 c128: e203300f and r3, r3, #15 c12c: e6ef1073 uxtb r1, r3 c130: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c134: e5d23000 ldrb r3, [r2] c138: e7c73211 bfi r3, r1, #4, #4 c13c: e5c23000 strb r3, [r2] buf->header.init = 1; c140: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c144: e5d23000 ldrb r3, [r2] c148: e3833004 orr r3, r3, #4 c14c: e5c23000 strb r3, [r2] return buf; c150: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 } c154: e1a00003 mov r0, r3 c158: e24bd004 sub sp, fp, #4 c15c: e8bd8800 pop {fp, pc} 0000c160 : /// @param arg_num start with 0 for first arg /// @param data /// @param len data buffer len /// @return bool ipc_msg_set_nth_arg(struct IpcMsg* msg, const int arg_num, const void* const data, const int len) { c160: e92d4800 push {fp, lr} c164: e28db004 add fp, sp, #4 c168: e24dd020 sub sp, sp, #32 c16c: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 c170: e50b101c str r1, [fp, #-28] ; 0xffffffe4 c174: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 c178: e50b3024 str r3, [fp, #-36] ; 0xffffffdc if (arg_num >= msg->header.nr_args) { c17c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c180: e5d33000 ldrb r3, [r3] c184: e7e33253 ubfx r3, r3, #4, #4 c188: e6ef3073 uxtb r3, r3 c18c: e1a02003 mov r2, r3 c190: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c194: e1520003 cmp r2, r3 c198: ca00000b bgt c1cc printf("[%s] IPC: arg_num out of msg range, arg_num: %d, nr_args: %d\n", __func__, arg_num, msg->header.nr_args); c19c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c1a0: e5d33000 ldrb r3, [r3] c1a4: e7e33253 ubfx r3, r3, #4, #4 c1a8: e6ef3073 uxtb r3, r3 c1ac: e51b201c ldr r2, [fp, #-28] ; 0xffffffe4 c1b0: e3021e74 movw r1, #11892 ; 0x2e74 c1b4: e3401001 movt r1, #1 c1b8: e3020d0c movw r0, #11532 ; 0x2d0c c1bc: e3400001 movt r0, #1 c1c0: ebfffeee bl bd80 return false; c1c4: e3a03000 mov r3, #0 c1c8: ea000029 b c274 } struct IpcArgInfo* nth_arg_info = IPCMSG_ARG_INFO(msg, arg_num); c1cc: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c1d0: e2833003 add r3, r3, #3 c1d4: e1a03103 lsl r3, r3, #2 c1d8: e51b2018 ldr r2, [fp, #-24] ; 0xffffffe8 c1dc: e0823003 add r3, r2, r3 c1e0: e50b3008 str r3, [fp, #-8] if (len > nth_arg_info->len) { c1e4: e51b3008 ldr r3, [fp, #-8] c1e8: e1d330b2 ldrh r3, [r3, #2] c1ec: e1a02003 mov r2, r3 c1f0: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c1f4: e1520003 cmp r2, r3 c1f8: aa000009 bge c224 printf("[%s] IPC: size of arg out of buffer range, given len: %d, len %d\n", __func__, len, nth_arg_info->len); c1fc: e51b3008 ldr r3, [fp, #-8] c200: e1d330b2 ldrh r3, [r3, #2] c204: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc c208: e3021e74 movw r1, #11892 ; 0x2e74 c20c: e3401001 movt r1, #1 c210: e3020d4c movw r0, #11596 ; 0x2d4c c214: e3400001 movt r0, #1 c218: ebfffed8 bl bd80 return false; c21c: e3a03000 mov r3, #0 c220: ea000013 b c274 c224: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c228: e50b3010 str r3, [fp, #-16] c22c: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c230: e50b3014 str r3, [fp, #-20] ; 0xffffffec return (void*)((char*)msg + IPCMSG_ARG_INFO(msg, arg_num)->offset); c234: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c238: e2833003 add r3, r3, #3 c23c: e1a03103 lsl r3, r3, #2 c240: e51b2010 ldr r2, [fp, #-16] c244: e0823003 add r3, r2, r3 c248: e1d330b0 ldrh r3, [r3] c24c: e1a02003 mov r2, r3 c250: e51b3010 ldr r3, [fp, #-16] c254: e0833002 add r3, r3, r2 } void* buf = ipc_msg_get_nth_arg_buf(msg, arg_num); c258: e50b300c str r3, [fp, #-12] memmove(buf, data, len); c25c: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c260: e1a02003 mov r2, r3 c264: e51b1020 ldr r1, [fp, #-32] ; 0xffffffe0 c268: e51b000c ldr r0, [fp, #-12] c26c: eb0005a8 bl d914 return true; c270: e3a03001 mov r3, #1 } c274: e1a00003 mov r0, r3 c278: e24bd004 sub sp, fp, #4 c27c: e8bd8800 pop {fp, pc} 0000c280 : /// @param arg_num start with 0 for first arg /// @param data /// @param len data buffer len /// @return bool ipc_msg_get_nth_arg(struct IpcMsg* msg, const int arg_num, void* data, const int len) { c280: e92d4800 push {fp, lr} c284: e28db004 add fp, sp, #4 c288: e24dd020 sub sp, sp, #32 c28c: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 c290: e50b101c str r1, [fp, #-28] ; 0xffffffe4 c294: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 c298: e50b3024 str r3, [fp, #-36] ; 0xffffffdc if (arg_num >= msg->header.nr_args) { c29c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c2a0: e5d33000 ldrb r3, [r3] c2a4: e7e33253 ubfx r3, r3, #4, #4 c2a8: e6ef3073 uxtb r3, r3 c2ac: e1a02003 mov r2, r3 c2b0: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c2b4: e1520003 cmp r2, r3 c2b8: ca000006 bgt c2d8 printf("[%s] IPC: arg_num out of msg range", __func__); c2bc: e3021e88 movw r1, #11912 ; 0x2e88 c2c0: e3401001 movt r1, #1 c2c4: e3020d90 movw r0, #11664 ; 0x2d90 c2c8: e3400001 movt r0, #1 c2cc: ebfffeab bl bd80 return false; c2d0: e3a03000 mov r3, #0 c2d4: ea000026 b c374 } struct IpcArgInfo* nth_arg_info = IPCMSG_ARG_INFO(msg, arg_num); c2d8: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c2dc: e2833003 add r3, r3, #3 c2e0: e1a03103 lsl r3, r3, #2 c2e4: e51b2018 ldr r2, [fp, #-24] ; 0xffffffe8 c2e8: e0823003 add r3, r2, r3 c2ec: e50b3008 str r3, [fp, #-8] if (len > nth_arg_info->len) { c2f0: e51b3008 ldr r3, [fp, #-8] c2f4: e1d330b2 ldrh r3, [r3, #2] c2f8: e1a02003 mov r2, r3 c2fc: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c300: e1520003 cmp r2, r3 c304: aa000006 bge c324 printf("[%s] IPC: size of arg out of buffer range", __func__); c308: e3021e88 movw r1, #11912 ; 0x2e88 c30c: e3401001 movt r1, #1 c310: e3020db4 movw r0, #11700 ; 0x2db4 c314: e3400001 movt r0, #1 c318: ebfffe98 bl bd80 return false; c31c: e3a03000 mov r3, #0 c320: ea000013 b c374 c324: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c328: e50b3010 str r3, [fp, #-16] c32c: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c330: e50b3014 str r3, [fp, #-20] ; 0xffffffec c334: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c338: e2833003 add r3, r3, #3 c33c: e1a03103 lsl r3, r3, #2 c340: e51b2010 ldr r2, [fp, #-16] c344: e0823003 add r3, r2, r3 c348: e1d330b0 ldrh r3, [r3] c34c: e1a02003 mov r2, r3 c350: e51b3010 ldr r3, [fp, #-16] c354: e0833002 add r3, r3, r2 } void* buf = ipc_msg_get_nth_arg_buf(msg, arg_num); c358: e50b300c str r3, [fp, #-12] memmove(data, buf, len); c35c: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c360: e1a02003 mov r2, r3 c364: e51b100c ldr r1, [fp, #-12] c368: e51b0020 ldr r0, [fp, #-32] ; 0xffffffe0 c36c: eb000568 bl d914 return true; c370: e3a03001 mov r3, #1 } c374: e1a00003 mov r0, r3 c378: e24bd004 sub sp, fp, #4 c37c: e8bd8800 pop {fp, pc} 0000c380 : void ipc_msg_send_wait(struct IpcMsg* msg) { c380: e92d4800 push {fp, lr} c384: e28db004 add fp, sp, #4 c388: e24dd008 sub sp, sp, #8 c38c: e50b0008 str r0, [fp, #-8] msg->header.magic = IPC_MSG_MAGIC; c390: e51b2008 ldr r2, [fp, #-8] c394: e30d3cba movw r3, #56506 ; 0xdcba c398: e34a3bcd movt r3, #43981 ; 0xabcd c39c: e5823004 str r3, [r2, #4] msg->header.valid = 1; c3a0: e51b2008 ldr r2, [fp, #-8] c3a4: e5d23000 ldrb r3, [r2] c3a8: e3833001 orr r3, r3, #1 c3ac: e5c23000 strb r3, [r2] msg->header.done = 0; c3b0: e51b2008 ldr r2, [fp, #-8] c3b4: e5d23000 ldrb r3, [r2] c3b8: e7c1309f bfc r3, #1, #1 c3bc: e5c23000 strb r3, [r2] while (msg->header.done == 0) { c3c0: ea000000 b c3c8 /// @todo syscall yield with prio decrease yield(); c3c4: eb00035b bl d138 while (msg->header.done == 0) { c3c8: e51b3008 ldr r3, [fp, #-8] c3cc: e5d33000 ldrb r3, [r3] c3d0: e2033002 and r3, r3, #2 c3d4: e6ef3073 uxtb r3, r3 c3d8: e3530000 cmp r3, #0 c3dc: 0afffff8 beq c3c4 } assert(msg->header.done == 1); c3e0: e51b3008 ldr r3, [fp, #-8] c3e4: e5d33000 ldrb r3, [r3] c3e8: e2033002 and r3, r3, #2 c3ec: e6ef3073 uxtb r3, r3 c3f0: e3530000 cmp r3, #0 c3f4: 1a000007 bne c418 c3f8: e3023de0 movw r3, #11744 ; 0x2de0 c3fc: e3403001 movt r3, #1 c400: e3022e9c movw r2, #11932 ; 0x2e9c c404: e3402001 movt r2, #1 c408: e3a0107e mov r1, #126 ; 0x7e c40c: e3020df8 movw r0, #11768 ; 0x2df8 c410: e3400001 movt r0, #1 c414: eb0004a5 bl d6b0 <__assert_func> } c418: e320f000 nop {0} c41c: e24bd004 sub sp, fp, #4 c420: e8bd8800 pop {fp, pc} 0000c424 : void ipc_msg_send_nowait(struct IpcMsg* msg) { c424: e52db004 push {fp} ; (str fp, [sp, #-4]!) c428: e28db000 add fp, sp, #0 c42c: e24dd00c sub sp, sp, #12 c430: e50b0008 str r0, [fp, #-8] msg->header.magic = IPC_MSG_MAGIC; c434: e51b2008 ldr r2, [fp, #-8] c438: e30d3cba movw r3, #56506 ; 0xdcba c43c: e34a3bcd movt r3, #43981 ; 0xabcd c440: e5823004 str r3, [r2, #4] msg->header.valid = 1; c444: e51b2008 ldr r2, [fp, #-8] c448: e5d23000 ldrb r3, [r2] c44c: e3833001 orr r3, r3, #1 c450: e5c23000 strb r3, [r2] msg->header.done = 0; c454: e51b2008 ldr r2, [fp, #-8] c458: e5d23000 ldrb r3, [r2] c45c: e7c1309f bfc r3, #1, #1 c460: e5c23000 strb r3, [r2] } c464: e320f000 nop {0} c468: e28bd000 add sp, fp, #0 c46c: e49db004 pop {fp} ; (ldr fp, [sp], #4) c470: e12fff1e bx lr 0000c474 : int ipc_session_wait(struct Session* session) { c474: e92d4800 push {fp, lr} c478: e28db004 add fp, sp, #4 c47c: e24dd010 sub sp, sp, #16 c480: e50b0010 str r0, [fp, #-16] struct IpcMsg* msg = IPCSESSION_MSG(session); c484: e51b3010 ldr r3, [fp, #-16] c488: e5933010 ldr r3, [r3, #16] c48c: e51b2010 ldr r2, [fp, #-16] c490: e5922008 ldr r2, [r2, #8] c494: e0833002 add r3, r3, r2 c498: e50b3008 str r3, [fp, #-8] while (msg->header.done == 0) { c49c: ea000000 b c4a4 /// @todo syscall yield with prio decrease yield(); c4a0: eb000324 bl d138 while (msg->header.done == 0) { c4a4: e51b3008 ldr r3, [fp, #-8] c4a8: e5d33000 ldrb r3, [r3] c4ac: e2033002 and r3, r3, #2 c4b0: e6ef3073 uxtb r3, r3 c4b4: e3530000 cmp r3, #0 c4b8: 0afffff8 beq c4a0 } assert(msg->header.done == 1); c4bc: e51b3008 ldr r3, [fp, #-8] c4c0: e5d33000 ldrb r3, [r3] c4c4: e2033002 and r3, r3, #2 c4c8: e6ef3073 uxtb r3, r3 c4cc: e3530000 cmp r3, #0 c4d0: 1a000007 bne c4f4 c4d4: e3023de0 movw r3, #11744 ; 0x2de0 c4d8: e3403001 movt r3, #1 c4dc: e3022eb0 movw r2, #11952 ; 0x2eb0 c4e0: e3402001 movt r2, #1 c4e4: e3a0108f mov r1, #143 ; 0x8f c4e8: e3020df8 movw r0, #11768 ; 0x2df8 c4ec: e3400001 movt r0, #1 c4f0: eb00046e bl d6b0 <__assert_func> return msg->header.ret_val; c4f4: e51b3008 ldr r3, [fp, #-8] c4f8: e5933008 ldr r3, [r3, #8] } c4fc: e1a00003 mov r0, r3 c500: e24bd004 sub sp, fp, #4 c504: e8bd8800 pop {fp, pc} 0000c508 : static int cur_sess_id = -1; int cur_session_id(void) { c508: e52db004 push {fp} ; (str fp, [sp, #-4]!) c50c: e28db000 add fp, sp, #0 return cur_sess_id; c510: e3033568 movw r3, #13672 ; 0x3568 c514: e3403001 movt r3, #1 c518: e5933000 ldr r3, [r3] } c51c: e1a00003 mov r0, r3 c520: e28bd000 add sp, fp, #0 c524: e49db004 pop {fp} ; (ldr fp, [sp], #4) c528: e12fff1e bx lr 0000c52c : static bool session_delayed = false; void delay_session(void) { c52c: e52db004 push {fp} ; (str fp, [sp, #-4]!) c530: e28db000 add fp, sp, #0 session_delayed = true; c534: e30c3138 movw r3, #49464 ; 0xc138 c538: e3403003 movt r3, #3 c53c: e3a02001 mov r2, #1 c540: e5c32000 strb r2, [r3] } c544: e320f000 nop {0} c548: e28bd000 add sp, fp, #0 c54c: e49db004 pop {fp} ; (ldr fp, [sp], #4) c550: e12fff1e bx lr 0000c554 : void ipc_server_loop(struct IpcNode* ipc_node) { c554: e92d4810 push {r4, fp, lr} c558: e28db008 add fp, sp, #8 c55c: e24ddf5d sub sp, sp, #372 ; 0x174 c560: e50b0178 str r0, [fp, #-376] ; 0xfffffe88 /* if connect sessions are greater than NR_MAX_SESSION, a full round will require multiple polls. Eg.(3 polls to with 6 sessions and NR_MAX_SESSION = 4): [0, 1, 2, 3], [4, 5, 0, 1], [2, 3, 4, 5] */ poll_session(session_list, NR_MAX_SESSION); c564: e24b3e17 sub r3, fp, #368 ; 0x170 c568: e3a01010 mov r1, #16 c56c: e1a00003 mov r0, r3 c570: eb00031f bl d1f4 /* handle each session */ for (int i = 0; i < NR_MAX_SESSION; i++) { c574: e3a03000 mov r3, #0 c578: e50b3010 str r3, [fp, #-16] c57c: ea000102 b c98c if (session_list[i].buf == NULL) { c580: e51b2010 ldr r2, [fp, #-16] c584: e1a03002 mov r3, r2 c588: e1a03103 lsl r3, r3, #2 c58c: e0833002 add r3, r3, r2 c590: e1a03103 lsl r3, r3, #2 c594: e24b200c sub r2, fp, #12 c598: e0823003 add r3, r2, r3 c59c: e2433f55 sub r3, r3, #340 ; 0x154 c5a0: e5933000 ldr r3, [r3] c5a4: e3530000 cmp r3, #0 c5a8: 1a000001 bne c5b4 yield(); c5ac: eb0002e1 bl d138 break; c5b0: ea0000f8 b c998 } cur_sess_id = session_list[i].id; c5b4: e51b2010 ldr r2, [fp, #-16] c5b8: e1a03002 mov r3, r2 c5bc: e1a03103 lsl r3, r3, #2 c5c0: e0833002 add r3, r3, r2 c5c4: e1a03103 lsl r3, r3, #2 c5c8: e24b200c sub r2, fp, #12 c5cc: e0823003 add r3, r2, r3 c5d0: e2433f59 sub r3, r3, #356 ; 0x164 c5d4: e5932000 ldr r2, [r3] c5d8: e3033568 movw r3, #13672 ; 0x3568 c5dc: e3403001 movt r3, #1 c5e0: e5832000 str r2, [r3] struct IpcMsg* msg = IPCSESSION_MSG(&session_list[i]); c5e4: e51b2010 ldr r2, [fp, #-16] c5e8: e1a03002 mov r3, r2 c5ec: e1a03103 lsl r3, r3, #2 c5f0: e0833002 add r3, r3, r2 c5f4: e1a03103 lsl r3, r3, #2 c5f8: e24b200c sub r2, fp, #12 c5fc: e0823003 add r3, r2, r3 c600: e2433f55 sub r3, r3, #340 ; 0x154 c604: e5931000 ldr r1, [r3] c608: e51b2010 ldr r2, [fp, #-16] c60c: e1a03002 mov r3, r2 c610: e1a03103 lsl r3, r3, #2 c614: e0833002 add r3, r3, r2 c618: e1a03103 lsl r3, r3, #2 c61c: e24b200c sub r2, fp, #12 c620: e0823003 add r3, r2, r3 c624: e2433f57 sub r3, r3, #348 ; 0x15c c628: e5933000 ldr r3, [r3] c62c: e0813003 add r3, r1, r3 c630: e50b3014 str r3, [fp, #-20] ; 0xffffffec /* handle every message in current session a session could be delay in case one of its message(current message) needs to wait for an interrupt message's arrival interfaces[opcode] should explicitly call delay_session() and return to delay this session */ while (msg->header.magic == IPC_MSG_MAGIC && msg->header.valid == 1 && msg->header.done != 1) { c634: ea0000b9 b c920 // printf("session %d [%d, %d]\n", session_list[i].id, session_list[i].head, session_list[i].tail); if (session_used_size(&session_list[i]) == 0 && session_forward_tail(&session_list[i], msg->header.len) < 0) { c638: e24b1e17 sub r1, fp, #368 ; 0x170 c63c: e51b2010 ldr r2, [fp, #-16] c640: e1a03002 mov r3, r2 c644: e1a03103 lsl r3, r3, #2 c648: e0833002 add r3, r3, r2 c64c: e1a03103 lsl r3, r3, #2 c650: e0813003 add r3, r1, r3 c654: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 void* buf; }; __attribute__((__always_inline__)) static inline int session_used_size(struct Session* session) { return ((session->tail + session->capacity) - session->head) % session->capacity; c658: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c65c: e593200c ldr r2, [r3, #12] c660: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c664: e5933004 ldr r3, [r3, #4] c668: e0822003 add r2, r2, r3 c66c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c670: e5933008 ldr r3, [r3, #8] c674: e0422003 sub r2, r2, r3 c678: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 c67c: e5933004 ldr r3, [r3, #4] c680: e1a01003 mov r1, r3 c684: e1a00002 mov r0, r2 c688: eb0003ff bl d68c <__aeabi_idivmod> c68c: e1a03001 mov r3, r1 c690: e3530000 cmp r3, #0 c694: 1a000038 bne c77c c698: e24b1e17 sub r1, fp, #368 ; 0x170 c69c: e51b2010 ldr r2, [fp, #-16] c6a0: e1a03002 mov r3, r2 c6a4: e1a03103 lsl r3, r3, #2 c6a8: e0833002 add r3, r3, r2 c6ac: e1a03103 lsl r3, r3, #2 c6b0: e0813003 add r3, r1, r3 c6b4: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec c6b8: e1d220b2 ldrh r2, [r2, #2] c6bc: e50b301c str r3, [fp, #-28] ; 0xffffffe4 c6c0: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 c6c4: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c6c8: e50b3024 str r3, [fp, #-36] ; 0xffffffdc } __attribute__((__always_inline__)) static inline int session_remain_capacity(struct Session* session) { return session->capacity - session_used_size(session); c6cc: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c6d0: e5934004 ldr r4, [r3, #4] c6d4: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc c6d8: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 return ((session->tail + session->capacity) - session->head) % session->capacity; c6dc: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 c6e0: e593200c ldr r2, [r3, #12] c6e4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 c6e8: e5933004 ldr r3, [r3, #4] c6ec: e0822003 add r2, r2, r3 c6f0: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 c6f4: e5933008 ldr r3, [r3, #8] c6f8: e0422003 sub r2, r2, r3 c6fc: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 c700: e5933004 ldr r3, [r3, #4] c704: e1a01003 mov r1, r3 c708: e1a00002 mov r0, r2 c70c: eb0003de bl d68c <__aeabi_idivmod> c710: e1a03001 mov r3, r1 return session->capacity - session_used_size(session); c714: e0443003 sub r3, r4, r3 return session->head; } __attribute__((__always_inline__)) static inline int session_forward_tail(struct Session* session, int len) { if (len > session_remain_capacity(session)) { c718: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 c71c: e1520003 cmp r2, r3 c720: da000004 ble c738 printf("forward tail with too much size\n"); c724: e3020e04 movw r0, #11780 ; 0x2e04 c728: e3400001 movt r0, #1 c72c: ebfffd93 bl bd80 return -1; c730: e3e03000 mvn r3, #0 c734: ea00000e b c774 } session->tail = (session->tail + len) % session->capacity; c738: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c73c: e593200c ldr r2, [r3, #12] c740: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 c744: e0822003 add r2, r2, r3 c748: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c74c: e5933004 ldr r3, [r3, #4] c750: e1a01003 mov r1, r3 c754: e1a00002 mov r0, r2 c758: eb0003cb bl d68c <__aeabi_idivmod> c75c: e1a03001 mov r3, r1 c760: e1a02003 mov r2, r3 c764: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c768: e583200c str r2, [r3, #12] return session->tail; c76c: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 c770: e593300c ldr r3, [r3, #12] c774: e3530000 cmp r3, #0 c778: ba00007b blt c96c break; } if (ipc_node->interfaces[msg->header.opcode]) { c77c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c780: e5d33001 ldrb r3, [r3, #1] c784: e51b2178 ldr r2, [fp, #-376] ; 0xfffffe88 c788: e1a03103 lsl r3, r3, #2 c78c: e0823003 add r3, r2, r3 c790: e5933004 ldr r3, [r3, #4] c794: e3530000 cmp r3, #0 c798: 0a000011 beq c7e4 ipc_node->interfaces[msg->header.opcode](msg); c79c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c7a0: e5d33001 ldrb r3, [r3, #1] c7a4: e51b2178 ldr r2, [fp, #-376] ; 0xfffffe88 c7a8: e1a03103 lsl r3, r3, #2 c7ac: e0823003 add r3, r2, r3 c7b0: e5933004 ldr r3, [r3, #4] c7b4: e51b0014 ldr r0, [fp, #-20] ; 0xffffffec c7b8: e12fff33 blx r3 // check if this session is delayed by op handler, all messages after the delayed message in current session is blocked. if (session_delayed) { c7bc: e30c3138 movw r3, #49464 ; 0xc138 c7c0: e3403003 movt r3, #3 c7c4: e5d33000 ldrb r3, [r3] c7c8: e3530000 cmp r3, #0 c7cc: 0a00000f beq c810 session_delayed = false; c7d0: e30c3138 movw r3, #49464 ; 0xc138 c7d4: e3403003 movt r3, #3 c7d8: e3a02000 mov r2, #0 c7dc: e5c32000 strb r2, [r3] break; c7e0: ea000062 b c970 } } else { printf("Unsupport opcode(%d) for server: %s\n", msg->header.opcode, ipc_node->name); c7e4: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c7e8: e5d33001 ldrb r3, [r3, #1] c7ec: e1a01003 mov r1, r3 c7f0: e51b3178 ldr r3, [fp, #-376] ; 0xfffffe88 c7f4: e5933000 ldr r3, [r3] c7f8: e1a02003 mov r2, r3 c7fc: e3020e28 movw r0, #11816 ; 0x2e28 c800: e3400001 movt r0, #1 c804: ebfffd5d bl bd80 } // finish this message in server's perspective while (session_forward_head(&session_list[i], msg->header.len) < 0) { c808: ea000000 b c810 yield(); c80c: eb000249 bl d138 while (session_forward_head(&session_list[i], msg->header.len) < 0) { c810: e24b1e17 sub r1, fp, #368 ; 0x170 c814: e51b2010 ldr r2, [fp, #-16] c818: e1a03002 mov r3, r2 c81c: e1a03103 lsl r3, r3, #2 c820: e0833002 add r3, r3, r2 c824: e1a03103 lsl r3, r3, #2 c828: e0813003 add r3, r1, r3 c82c: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec c830: e1d220b2 ldrh r2, [r2, #2] c834: e50b302c str r3, [fp, #-44] ; 0xffffffd4 c838: e50b2030 str r2, [fp, #-48] ; 0xffffffd0 if (((session->head + len) % session->capacity) > session->tail) { c83c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c840: e5932008 ldr r2, [r3, #8] c844: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 c848: e0822003 add r2, r2, r3 c84c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c850: e5933004 ldr r3, [r3, #4] c854: e1a01003 mov r1, r3 c858: e1a00002 mov r0, r2 c85c: eb00038a bl d68c <__aeabi_idivmod> c860: e1a03001 mov r3, r1 c864: e1a02003 mov r2, r3 c868: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c86c: e593300c ldr r3, [r3, #12] c870: e1520003 cmp r2, r3 c874: da000004 ble c88c printf("forward head with too much size\n"); c878: e3020e50 movw r0, #11856 ; 0x2e50 c87c: e3400001 movt r0, #1 c880: ebfffd3e bl bd80 return -1; c884: e3e03000 mvn r3, #0 c888: ea00000e b c8c8 session->head = (session->head + len) % session->capacity; c88c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c890: e5932008 ldr r2, [r3, #8] c894: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 c898: e0822003 add r2, r2, r3 c89c: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c8a0: e5933004 ldr r3, [r3, #4] c8a4: e1a01003 mov r1, r3 c8a8: e1a00002 mov r0, r2 c8ac: eb000376 bl d68c <__aeabi_idivmod> c8b0: e1a03001 mov r3, r1 c8b4: e1a02003 mov r2, r3 c8b8: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c8bc: e5832008 str r2, [r3, #8] return session->head; c8c0: e51b302c ldr r3, [fp, #-44] ; 0xffffffd4 c8c4: e5933008 ldr r3, [r3, #8] c8c8: e3530000 cmp r3, #0 c8cc: baffffce blt c80c } msg = IPCSESSION_MSG(&session_list[i]); c8d0: e51b2010 ldr r2, [fp, #-16] c8d4: e1a03002 mov r3, r2 c8d8: e1a03103 lsl r3, r3, #2 c8dc: e0833002 add r3, r3, r2 c8e0: e1a03103 lsl r3, r3, #2 c8e4: e24b200c sub r2, fp, #12 c8e8: e0823003 add r3, r2, r3 c8ec: e2433f55 sub r3, r3, #340 ; 0x154 c8f0: e5931000 ldr r1, [r3] c8f4: e51b2010 ldr r2, [fp, #-16] c8f8: e1a03002 mov r3, r2 c8fc: e1a03103 lsl r3, r3, #2 c900: e0833002 add r3, r3, r2 c904: e1a03103 lsl r3, r3, #2 c908: e24b200c sub r2, fp, #12 c90c: e0823003 add r3, r2, r3 c910: e2433f57 sub r3, r3, #348 ; 0x15c c914: e5933000 ldr r3, [r3] c918: e0813003 add r3, r1, r3 c91c: e50b3014 str r3, [fp, #-20] ; 0xffffffec while (msg->header.magic == IPC_MSG_MAGIC && msg->header.valid == 1 && msg->header.done != 1) { c920: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c924: e5932004 ldr r2, [r3, #4] c928: e30d3cba movw r3, #56506 ; 0xdcba c92c: e34a3bcd movt r3, #43981 ; 0xabcd c930: e1520003 cmp r2, r3 c934: 1a00000d bne c970 c938: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c93c: e5d33000 ldrb r3, [r3] c940: e2033001 and r3, r3, #1 c944: e6ef3073 uxtb r3, r3 c948: e3530000 cmp r3, #0 c94c: 0a000007 beq c970 c950: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec c954: e5d33000 ldrb r3, [r3] c958: e2033002 and r3, r3, #2 c95c: e6ef3073 uxtb r3, r3 c960: e3530000 cmp r3, #0 c964: 0affff33 beq c638 c968: ea000000 b c970 break; c96c: e320f000 nop {0} } // stop handle this session cur_sess_id = -1; c970: e3033568 movw r3, #13672 ; 0x3568 c974: e3403001 movt r3, #1 c978: e3e02000 mvn r2, #0 c97c: e5832000 str r2, [r3] for (int i = 0; i < NR_MAX_SESSION; i++) { c980: e51b3010 ldr r3, [fp, #-16] c984: e2833001 add r3, r3, #1 c988: e50b3010 str r3, [fp, #-16] c98c: e51b3010 ldr r3, [fp, #-16] c990: e353000f cmp r3, #15 c994: dafffef9 ble c580 poll_session(session_list, NR_MAX_SESSION); c998: eafffef1 b c564 0000c99c : #include "session.h" #include "usyscall.h" int connect_session(struct Session* _session, char* _path, int _capacity) { c99c: e92d4800 push {fp, lr} c9a0: e28db004 add fp, sp, #4 c9a4: e24dd010 sub sp, sp, #16 c9a8: e50b0008 str r0, [fp, #-8] c9ac: e50b100c str r1, [fp, #-12] c9b0: e50b2010 str r2, [fp, #-16] return session(_path, _capacity, _session); c9b4: e51b2008 ldr r2, [fp, #-8] c9b8: e51b1010 ldr r1, [fp, #-16] c9bc: e51b000c ldr r0, [fp, #-12] c9c0: eb0001f9 bl d1ac c9c4: e1a03000 mov r3, r0 } c9c8: e1a00003 mov r0, r3 c9cc: e24bd004 sub sp, fp, #4 c9d0: e8bd8800 pop {fp, pc} 0000c9d4 : int free_session(struct Session* session) { c9d4: e92d4800 push {fp, lr} c9d8: e28db004 add fp, sp, #4 c9dc: e24dd008 sub sp, sp, #8 c9e0: e50b0008 str r0, [fp, #-8] return close_session(session); c9e4: e51b0008 ldr r0, [fp, #-8] c9e8: eb000211 bl d234 c9ec: e1a03000 mov r3, r0 } c9f0: e1a00003 mov r0, r3 c9f4: e24bd004 sub sp, fp, #4 c9f8: e8bd8800 pop {fp, pc} 0000c9fc : // ipc_msg alloc_buffer(ipc_session) void* session_alloc_buf(struct Session* session, int len) { c9fc: e92d4810 push {r4, fp, lr} ca00: e28db008 add fp, sp, #8 ca04: e24dd02c sub sp, sp, #44 ; 0x2c ca08: e50b0030 str r0, [fp, #-48] ; 0xffffffd0 ca0c: e50b1034 str r1, [fp, #-52] ; 0xffffffcc ca10: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 ca14: e50b3014 str r3, [fp, #-20] ; 0xffffffec return session->capacity - session_used_size(session); ca18: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec ca1c: e5934004 ldr r4, [r3, #4] ca20: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec ca24: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 return ((session->tail + session->capacity) - session->head) % session->capacity; ca28: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 ca2c: e593200c ldr r2, [r3, #12] ca30: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 ca34: e5933004 ldr r3, [r3, #4] ca38: e0822003 add r2, r2, r3 ca3c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 ca40: e5933008 ldr r3, [r3, #8] ca44: e0422003 sub r2, r2, r3 ca48: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 ca4c: e5933004 ldr r3, [r3, #4] ca50: e1a01003 mov r1, r3 ca54: e1a00002 mov r0, r2 ca58: eb00030b bl d68c <__aeabi_idivmod> ca5c: e1a03001 mov r3, r1 return session->capacity - session_used_size(session); ca60: e0442003 sub r2, r4, r3 if (len > session_remain_capacity(session)) { ca64: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc ca68: e1520003 cmp r2, r3 ca6c: aa000001 bge ca78 return NULL; ca70: e3a03000 mov r3, #0 ca74: ea000038 b cb5c } void* buf = session->buf + session->tail; ca78: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 ca7c: e5933010 ldr r3, [r3, #16] ca80: e51b2030 ldr r2, [fp, #-48] ; 0xffffffd0 ca84: e592200c ldr r2, [r2, #12] ca88: e0833002 add r3, r3, r2 ca8c: e50b3010 str r3, [fp, #-16] // we mapped double size of page, so it's ok to write buffer directly memset(buf, 0, len); ca90: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc ca94: e1a02003 mov r2, r3 ca98: e3a01000 mov r1, #0 ca9c: e51b0010 ldr r0, [fp, #-16] caa0: eb0003ed bl da5c caa4: e51b3030 ldr r3, [fp, #-48] ; 0xffffffd0 caa8: e50b301c str r3, [fp, #-28] ; 0xffffffe4 caac: e51b3034 ldr r3, [fp, #-52] ; 0xffffffcc cab0: e50b3020 str r3, [fp, #-32] ; 0xffffffe0 cab4: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cab8: e50b3024 str r3, [fp, #-36] ; 0xffffffdc cabc: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc cac0: e5934004 ldr r4, [r3, #4] cac4: e51b3024 ldr r3, [fp, #-36] ; 0xffffffdc cac8: e50b3028 str r3, [fp, #-40] ; 0xffffffd8 return ((session->tail + session->capacity) - session->head) % session->capacity; cacc: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 cad0: e593200c ldr r2, [r3, #12] cad4: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 cad8: e5933004 ldr r3, [r3, #4] cadc: e0822003 add r2, r2, r3 cae0: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 cae4: e5933008 ldr r3, [r3, #8] cae8: e0422003 sub r2, r2, r3 caec: e51b3028 ldr r3, [fp, #-40] ; 0xffffffd8 caf0: e5933004 ldr r3, [r3, #4] caf4: e1a01003 mov r1, r3 caf8: e1a00002 mov r0, r2 cafc: eb0002e2 bl d68c <__aeabi_idivmod> cb00: e1a03001 mov r3, r1 return session->capacity - session_used_size(session); cb04: e0443003 sub r3, r4, r3 if (len > session_remain_capacity(session)) { cb08: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 cb0c: e1520003 cmp r2, r3 cb10: da000003 ble cb24 printf("forward tail with too much size\n"); cb14: e3020ec4 movw r0, #11972 ; 0x2ec4 cb18: e3400001 movt r0, #1 cb1c: ebfffc97 bl bd80 cb20: ea00000c b cb58 session->tail = (session->tail + len) % session->capacity; cb24: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cb28: e593200c ldr r2, [r3, #12] cb2c: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 cb30: e0822003 add r2, r2, r3 cb34: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cb38: e5933004 ldr r3, [r3, #4] cb3c: e1a01003 mov r1, r3 cb40: e1a00002 mov r0, r2 cb44: eb0002d0 bl d68c <__aeabi_idivmod> cb48: e1a03001 mov r3, r1 cb4c: e1a02003 mov r2, r3 cb50: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cb54: e583200c str r2, [r3, #12] session_forward_tail(session, len); return buf; cb58: e51b3010 ldr r3, [fp, #-16] } cb5c: e1a00003 mov r0, r3 cb60: e24bd008 sub sp, fp, #8 cb64: e8bd8810 pop {r4, fp, pc} 0000cb68 : bool session_free_buf(struct Session* session, int len) { cb68: e92d4800 push {fp, lr} cb6c: e28db004 add fp, sp, #4 cb70: e24dd018 sub sp, sp, #24 cb74: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 cb78: e50b101c str r1, [fp, #-28] ; 0xffffffe4 cb7c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 cb80: e50b3008 str r3, [fp, #-8] return ((session->tail + session->capacity) - session->head) % session->capacity; cb84: e51b3008 ldr r3, [fp, #-8] cb88: e593200c ldr r2, [r3, #12] cb8c: e51b3008 ldr r3, [fp, #-8] cb90: e5933004 ldr r3, [r3, #4] cb94: e0822003 add r2, r2, r3 cb98: e51b3008 ldr r3, [fp, #-8] cb9c: e5933008 ldr r3, [r3, #8] cba0: e0422003 sub r2, r2, r3 cba4: e51b3008 ldr r3, [fp, #-8] cba8: e5933004 ldr r3, [r3, #4] cbac: e1a01003 mov r1, r3 cbb0: e1a00002 mov r0, r2 cbb4: eb0002b4 bl d68c <__aeabi_idivmod> cbb8: e1a03001 mov r3, r1 cbbc: e1a02003 mov r2, r3 if (len > session_used_size(session)) { cbc0: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cbc4: e1520003 cmp r2, r3 cbc8: aa000001 bge cbd4 return false; cbcc: e3a03000 mov r3, #0 cbd0: ea000031 b cc9c cbd4: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 cbd8: e50b300c str r3, [fp, #-12] cbdc: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 cbe0: e50b3010 str r3, [fp, #-16] if (((session->head + len) % session->capacity) > session->tail) { cbe4: e51b300c ldr r3, [fp, #-12] cbe8: e5932008 ldr r2, [r3, #8] cbec: e51b3010 ldr r3, [fp, #-16] cbf0: e0822003 add r2, r2, r3 cbf4: e51b300c ldr r3, [fp, #-12] cbf8: e5933004 ldr r3, [r3, #4] cbfc: e1a01003 mov r1, r3 cc00: e1a00002 mov r0, r2 cc04: eb0002a0 bl d68c <__aeabi_idivmod> cc08: e1a03001 mov r3, r1 cc0c: e1a02003 mov r2, r3 cc10: e51b300c ldr r3, [fp, #-12] cc14: e593300c ldr r3, [r3, #12] cc18: e1520003 cmp r2, r3 cc1c: da000004 ble cc34 printf("forward head with too much size\n"); cc20: e3020ee8 movw r0, #12008 ; 0x2ee8 cc24: e3400001 movt r0, #1 cc28: ebfffc54 bl bd80 return -1; cc2c: e3e03000 mvn r3, #0 cc30: ea00000e b cc70 session->head = (session->head + len) % session->capacity; cc34: e51b300c ldr r3, [fp, #-12] cc38: e5932008 ldr r2, [r3, #8] cc3c: e51b3010 ldr r3, [fp, #-16] cc40: e0822003 add r2, r2, r3 cc44: e51b300c ldr r3, [fp, #-12] cc48: e5933004 ldr r3, [r3, #4] cc4c: e1a01003 mov r1, r3 cc50: e1a00002 mov r0, r2 cc54: eb00028c bl d68c <__aeabi_idivmod> cc58: e1a03001 mov r3, r1 cc5c: e1a02003 mov r2, r3 cc60: e51b300c ldr r3, [fp, #-12] cc64: e5832008 str r2, [r3, #8] return session->head; cc68: e51b300c ldr r3, [fp, #-12] cc6c: e5933008 ldr r3, [r3, #8] } assert(session_forward_head(session, len) != 1); cc70: e3530001 cmp r3, #1 cc74: 1a000007 bne cc98 cc78: e3023f0c movw r3, #12044 ; 0x2f0c cc7c: e3403001 movt r3, #1 cc80: e3022f40 movw r2, #12096 ; 0x2f40 cc84: e3402001 movt r2, #1 cc88: e3a01040 mov r1, #64 ; 0x40 cc8c: e3020f34 movw r0, #12084 ; 0x2f34 cc90: e3400001 movt r0, #1 cc94: eb000285 bl d6b0 <__assert_func> return true; cc98: e3a03001 mov r3, #1 } cc9c: e1a00003 mov r0, r3 cca0: e24bd004 sub sp, fp, #4 cca4: e8bd8800 pop {fp, pc} 0000cca8 : #include "libserial.h" #include "fs.h" #include "list.h" static void Error(char* s) { cca8: e92d4800 push {fp, lr} ccac: e28db004 add fp, sp, #4 ccb0: e24dd008 sub sp, sp, #8 ccb4: e50b0008 str r0, [fp, #-8] printf("Error: %s\n", s); ccb8: e51b1008 ldr r1, [fp, #-8] ccbc: e3020f54 movw r0, #12116 ; 0x2f54 ccc0: e3400001 movt r0, #1 ccc4: ebfffc2d bl bd80 for (;;) ccc8: eafffffe b ccc8 0000cccc : ; } // Locate the data block using block_num uint8_t* BlockRead(int block_num) { cccc: e52db004 push {fp} ; (str fp, [sp, #-4]!) ccd0: e28db000 add fp, sp, #0 ccd4: e24dd014 sub sp, sp, #20 ccd8: e50b0010 str r0, [fp, #-16] uint8_t* data = (uint8_t*)MemFsRange.memfs_start + block_num * BLOCK_SIZE; ccdc: e51b3010 ldr r3, [fp, #-16] cce0: e1a03483 lsl r3, r3, #9 cce4: e1a02003 mov r2, r3 cce8: e30c3178 movw r3, #49528 ; 0xc178 ccec: e3403003 movt r3, #3 ccf0: e5933000 ldr r3, [r3] ccf4: e0823003 add r3, r2, r3 ccf8: e50b3008 str r3, [fp, #-8] return data; ccfc: e51b3008 ldr r3, [fp, #-8] } cd00: e1a00003 mov r0, r3 cd04: e28bd000 add sp, fp, #0 cd08: e49db004 pop {fp} ; (ldr fp, [sp], #4) cd0c: e12fff1e bx lr 0000cd10 : // Zero a block. static void BlockClear(int block_num) { cd10: e92d4800 push {fp, lr} cd14: e28db004 add fp, sp, #4 cd18: e24dd010 sub sp, sp, #16 cd1c: e50b0010 str r0, [fp, #-16] uint8_t* data = BlockRead(block_num); cd20: e51b0010 ldr r0, [fp, #-16] cd24: ebffffe8 bl cccc cd28: e50b0008 str r0, [fp, #-8] memset(data, 0, BLOCK_SIZE); cd2c: e3a02c02 mov r2, #512 ; 0x200 cd30: e3a01000 mov r1, #0 cd34: e51b0008 ldr r0, [fp, #-8] cd38: eb000347 bl da5c } cd3c: e320f000 nop {0} cd40: e24bd004 sub sp, fp, #4 cd44: e8bd8800 pop {fp, pc} 0000cd48 : // Allocate a zeroed disk block. uint32_t BlockAlloc() { cd48: e92d4800 push {fp, lr} cd4c: e28db004 add fp, sp, #4 cd50: e24dd020 sub sp, sp, #32 int bit_index, block_index, bit_mark; struct SuperBlock sb; ReadSuperBlock(&sb); cd54: e24b3020 sub r3, fp, #32 cd58: e1a00003 mov r0, r3 cd5c: ebfff771 bl ab28 for (bit_index = 0; bit_index < sb.size; bit_index += BITMAP_SIZE) { cd60: e3a03000 mov r3, #0 cd64: e50b3008 str r3, [fp, #-8] cd68: ea000055 b cec4 uint8_t* data = BlockRead(BLOCK_BIT_INDEX(bit_index, sb.ninodes)); cd6c: e51b3008 ldr r3, [fp, #-8] cd70: e2832eff add r2, r3, #4080 ; 0xff0 cd74: e282200f add r2, r2, #15 cd78: e3530000 cmp r3, #0 cd7c: b1a03002 movlt r3, r2 cd80: a1a03003 movge r3, r3 cd84: e1a03643 asr r3, r3, #12 cd88: e1a02003 mov r2, r3 cd8c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 cd90: e1a031a3 lsr r3, r3, #3 cd94: e0823003 add r3, r2, r3 cd98: e2833003 add r3, r3, #3 cd9c: e1a00003 mov r0, r3 cda0: ebffffc9 bl cccc cda4: e50b0010 str r0, [fp, #-16] for (block_index = 0; block_index < BITMAP_SIZE && bit_index + block_index < sb.size; block_index++) { cda8: e3a03000 mov r3, #0 cdac: e50b300c str r3, [fp, #-12] cdb0: ea000036 b ce90 bit_mark = 1 << (block_index % 8); cdb4: e51b300c ldr r3, [fp, #-12] cdb8: e2732000 rsbs r2, r3, #0 cdbc: e2033007 and r3, r3, #7 cdc0: e2022007 and r2, r2, #7 cdc4: 52623000 rsbpl r3, r2, #0 cdc8: e3a02001 mov r2, #1 cdcc: e1a03312 lsl r3, r2, r3 cdd0: e50b3014 str r3, [fp, #-20] ; 0xffffffec if ((data[block_index / 8] & bit_mark) == 0) { cdd4: e51b300c ldr r3, [fp, #-12] cdd8: e2832007 add r2, r3, #7 cddc: e3530000 cmp r3, #0 cde0: b1a03002 movlt r3, r2 cde4: a1a03003 movge r3, r3 cde8: e1a031c3 asr r3, r3, #3 cdec: e1a02003 mov r2, r3 cdf0: e51b3010 ldr r3, [fp, #-16] cdf4: e0833002 add r3, r3, r2 cdf8: e5d33000 ldrb r3, [r3] cdfc: e1a02003 mov r2, r3 ce00: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec ce04: e0033002 and r3, r3, r2 ce08: e3530000 cmp r3, #0 ce0c: 1a00001c bne ce84 data[block_index / 8] |= bit_mark; ce10: e51b300c ldr r3, [fp, #-12] ce14: e2832007 add r2, r3, #7 ce18: e3530000 cmp r3, #0 ce1c: b1a03002 movlt r3, r2 ce20: a1a03003 movge r3, r3 ce24: e1a031c3 asr r3, r3, #3 ce28: e1a01003 mov r1, r3 ce2c: e1a02001 mov r2, r1 ce30: e51b3010 ldr r3, [fp, #-16] ce34: e0833002 add r3, r3, r2 ce38: e51b2010 ldr r2, [fp, #-16] ce3c: e0822001 add r2, r2, r1 ce40: e5d22000 ldrb r2, [r2] ce44: e6af1072 sxtb r1, r2 ce48: e51b2014 ldr r2, [fp, #-20] ; 0xffffffec ce4c: e6af2072 sxtb r2, r2 ce50: e1812002 orr r2, r1, r2 ce54: e6af2072 sxtb r2, r2 ce58: e6ef2072 uxtb r2, r2 ce5c: e5c32000 strb r2, [r3] BlockClear(bit_index + block_index); ce60: e51b2008 ldr r2, [fp, #-8] ce64: e51b300c ldr r3, [fp, #-12] ce68: e0823003 add r3, r2, r3 ce6c: e1a00003 mov r0, r3 ce70: ebffffa6 bl cd10 return bit_index + block_index; ce74: e51b2008 ldr r2, [fp, #-8] ce78: e51b300c ldr r3, [fp, #-12] ce7c: e0823003 add r3, r2, r3 ce80: ea000017 b cee4 for (block_index = 0; block_index < BITMAP_SIZE && bit_index + block_index < sb.size; block_index++) { ce84: e51b300c ldr r3, [fp, #-12] ce88: e2833001 add r3, r3, #1 ce8c: e50b300c str r3, [fp, #-12] ce90: e51b300c ldr r3, [fp, #-12] ce94: e3530a01 cmp r3, #4096 ; 0x1000 ce98: aa000006 bge ceb8 ce9c: e51b2008 ldr r2, [fp, #-8] cea0: e51b300c ldr r3, [fp, #-12] cea4: e0823003 add r3, r2, r3 cea8: e1a02003 mov r2, r3 ceac: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 ceb0: e1520003 cmp r2, r3 ceb4: 3affffbe bcc cdb4 for (bit_index = 0; bit_index < sb.size; bit_index += BITMAP_SIZE) { ceb8: e51b3008 ldr r3, [fp, #-8] cebc: e2833a01 add r3, r3, #4096 ; 0x1000 cec0: e50b3008 str r3, [fp, #-8] cec4: e51b2020 ldr r2, [fp, #-32] ; 0xffffffe0 cec8: e51b3008 ldr r3, [fp, #-8] cecc: e1520003 cmp r2, r3 ced0: 8affffa5 bhi cd6c } } } Error("BlockAlloc: out of blocks"); ced4: e3020f60 movw r0, #12128 ; 0x2f60 ced8: e3400001 movt r0, #1 cedc: ebffff71 bl cca8 return 0; cee0: e3a03000 mov r3, #0 } cee4: e1a00003 mov r0, r3 cee8: e24bd004 sub sp, fp, #4 ceec: e8bd8800 pop {fp, pc} 0000cef0 : // Free a disk block. void BlockFree(int block_num) { cef0: e92d4800 push {fp, lr} cef4: e28db004 add fp, sp, #4 cef8: e24dd020 sub sp, sp, #32 cefc: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 struct SuperBlock sb; int block_index, bit_mark; ReadSuperBlock(&sb); cf00: e24b301c sub r3, fp, #28 cf04: e1a00003 mov r0, r3 cf08: ebfff706 bl ab28 uint8_t* data = BlockRead(BLOCK_BIT_INDEX(block_num, sb.ninodes)); cf0c: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 cf10: e2832eff add r2, r3, #4080 ; 0xff0 cf14: e282200f add r2, r2, #15 cf18: e3530000 cmp r3, #0 cf1c: b1a03002 movlt r3, r2 cf20: a1a03003 movge r3, r3 cf24: e1a03643 asr r3, r3, #12 cf28: e1a02003 mov r2, r3 cf2c: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec cf30: e1a031a3 lsr r3, r3, #3 cf34: e0823003 add r3, r2, r3 cf38: e2833003 add r3, r3, #3 cf3c: e1a00003 mov r0, r3 cf40: ebffff61 bl cccc cf44: e50b0008 str r0, [fp, #-8] block_index = block_num % BITMAP_SIZE; cf48: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 cf4c: e2732000 rsbs r2, r3, #0 cf50: e7eb3053 ubfx r3, r3, #0, #12 cf54: e7eb2052 ubfx r2, r2, #0, #12 cf58: 52623000 rsbpl r3, r2, #0 cf5c: e50b300c str r3, [fp, #-12] bit_mark = 1 << (block_index % 8); cf60: e51b300c ldr r3, [fp, #-12] cf64: e2732000 rsbs r2, r3, #0 cf68: e2033007 and r3, r3, #7 cf6c: e2022007 and r2, r2, #7 cf70: 52623000 rsbpl r3, r2, #0 cf74: e3a02001 mov r2, #1 cf78: e1a03312 lsl r3, r2, r3 cf7c: e50b3010 str r3, [fp, #-16] if ((data[block_index / 8] & bit_mark) == 0) { cf80: e51b300c ldr r3, [fp, #-12] cf84: e2832007 add r2, r3, #7 cf88: e3530000 cmp r3, #0 cf8c: b1a03002 movlt r3, r2 cf90: a1a03003 movge r3, r3 cf94: e1a031c3 asr r3, r3, #3 cf98: e1a02003 mov r2, r3 cf9c: e51b3008 ldr r3, [fp, #-8] cfa0: e0833002 add r3, r3, r2 cfa4: e5d33000 ldrb r3, [r3] cfa8: e1a02003 mov r2, r3 cfac: e51b3010 ldr r3, [fp, #-16] cfb0: e0033002 and r3, r3, r2 cfb4: e3530000 cmp r3, #0 cfb8: 1a000002 bne cfc8 Error("freeing free block"); cfbc: e3020f7c movw r0, #12156 ; 0x2f7c cfc0: e3400001 movt r0, #1 cfc4: ebffff37 bl cca8 } data[block_index / 8] &= ~bit_mark; cfc8: e51b300c ldr r3, [fp, #-12] cfcc: e2832007 add r2, r3, #7 cfd0: e3530000 cmp r3, #0 cfd4: b1a03002 movlt r3, r2 cfd8: a1a03003 movge r3, r3 cfdc: e1a031c3 asr r3, r3, #3 cfe0: e1a01003 mov r1, r3 cfe4: e1a02001 mov r2, r1 cfe8: e51b3008 ldr r3, [fp, #-8] cfec: e0833002 add r3, r3, r2 cff0: e51b2008 ldr r2, [fp, #-8] cff4: e0822001 add r2, r2, r1 cff8: e5d22000 ldrb r2, [r2] cffc: e6af1072 sxtb r1, r2 d000: e51b2010 ldr r2, [fp, #-16] d004: e6af2072 sxtb r2, r2 d008: e1e02002 mvn r2, r2 d00c: e6af2072 sxtb r2, r2 d010: e0022001 and r2, r2, r1 d014: e6af2072 sxtb r2, r2 d018: e6ef2072 uxtb r2, r2 d01c: e5c32000 strb r2, [r3] } d020: e320f000 nop {0} d024: e24bd004 sub sp, fp, #4 d028: e8bd8800 pop {fp, pc} 0000d02c : */ #include "usyscall.h" static int syscall(int sys_num, intptr_t a1, intptr_t a2, intptr_t a3, intptr_t a4) { d02c: e92d48f0 push {r4, r5, r6, r7, fp, lr} d030: e28db014 add fp, sp, #20 d034: e24dd018 sub sp, sp, #24 d038: e50b0020 str r0, [fp, #-32] ; 0xffffffe0 d03c: e50b1024 str r1, [fp, #-36] ; 0xffffffdc d040: e50b2028 str r2, [fp, #-40] ; 0xffffffd8 d044: e50b302c str r3, [fp, #-44] ; 0xffffffd4 int ret = -1; d048: e3e03000 mvn r3, #0 d04c: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 __asm__ volatile( d050: e51bc020 ldr ip, [fp, #-32] ; 0xffffffe0 d054: e51be024 ldr lr, [fp, #-36] ; 0xffffffdc d058: e51b5028 ldr r5, [fp, #-40] ; 0xffffffd8 d05c: e51b602c ldr r6, [fp, #-44] ; 0xffffffd4 d060: e59b7004 ldr r7, [fp, #4] d064: e1a0000c mov r0, ip d068: e1a0100e mov r1, lr d06c: e1a02005 mov r2, r5 d070: e1a03006 mov r3, r6 d074: e1a04007 mov r4, r7 d078: ef000000 svc 0x00000000 d07c: f57ff04f dsb sy d080: f57ff06f isb sy d084: e1a0c000 mov ip, r0 d088: e50bc018 str ip, [fp, #-24] ; 0xffffffe8 mov %0, r0" : "=r"(ret) : "r"(sys_num), "r"(a1), "r"(a2), "r"(a3), "r"(a4) : "memory", "r0", "r1", "r2", "r3", "r4"); return ret; d08c: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 } d090: e1a00003 mov r0, r3 d094: e24bd014 sub sp, fp, #20 d098: e8bd88f0 pop {r4, r5, r6, r7, fp, pc} 0000d09c : int spawn(struct Session* session, int fd, ipc_read_fn ipc_read, char* name, char** argv) { d09c: e92d4800 push {fp, lr} d0a0: e28db004 add fp, sp, #4 d0a4: e24dd028 sub sp, sp, #40 ; 0x28 d0a8: e50b0018 str r0, [fp, #-24] ; 0xffffffe8 d0ac: e50b101c str r1, [fp, #-28] ; 0xffffffe4 d0b0: e50b2020 str r2, [fp, #-32] ; 0xffffffe0 d0b4: e50b3024 str r3, [fp, #-36] ; 0xffffffdc struct KernReadTool read_tool = { d0b8: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 d0bc: e50b3010 str r3, [fp, #-16] d0c0: e51b301c ldr r3, [fp, #-28] ; 0xffffffe4 d0c4: e50b300c str r3, [fp, #-12] d0c8: e51b3020 ldr r3, [fp, #-32] ; 0xffffffe0 d0cc: e50b3008 str r3, [fp, #-8] .session = session, .fd = fd, .ipc_read = ipc_read, }; return syscall(SYSCALL_SPAWN, (intptr_t)&read_tool, (intptr_t)name, (intptr_t)argv, 0); d0d0: e24b1010 sub r1, fp, #16 d0d4: e51b2024 ldr r2, [fp, #-36] ; 0xffffffdc d0d8: e59b0004 ldr r0, [fp, #4] d0dc: e3a03000 mov r3, #0 d0e0: e58d3000 str r3, [sp] d0e4: e1a03000 mov r3, r0 d0e8: e3a00001 mov r0, #1 d0ec: ebffffce bl d02c d0f0: e1a03000 mov r3, r0 } d0f4: e1a00003 mov r0, r3 d0f8: e24bd004 sub sp, fp, #4 d0fc: e8bd8800 pop {fp, pc} 0000d100 : int exit() { d100: e92d4800 push {fp, lr} d104: e28db004 add fp, sp, #4 d108: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_EXIT, 0, 0, 0, 0); d10c: e3a03000 mov r3, #0 d110: e58d3000 str r3, [sp] d114: e3a03000 mov r3, #0 d118: e3a02000 mov r2, #0 d11c: e3a01000 mov r1, #0 d120: e3a00002 mov r0, #2 d124: ebffffc0 bl d02c d128: e1a03000 mov r3, r0 } d12c: e1a00003 mov r0, r3 d130: e24bd004 sub sp, fp, #4 d134: e8bd8800 pop {fp, pc} 0000d138 : int yield() { d138: e92d4800 push {fp, lr} d13c: e28db004 add fp, sp, #4 d140: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_YIELD, 0, 0, 0, 0); d144: e3a03000 mov r3, #0 d148: e58d3000 str r3, [sp] d14c: e3a03000 mov r3, #0 d150: e3a02000 mov r2, #0 d154: e3a01000 mov r1, #0 d158: e3a00003 mov r0, #3 d15c: ebffffb2 bl d02c d160: e1a03000 mov r3, r0 } d164: e1a00003 mov r0, r3 d168: e24bd004 sub sp, fp, #4 d16c: e8bd8800 pop {fp, pc} 0000d170 : int register_server(char* name) { d170: e92d4800 push {fp, lr} d174: e28db004 add fp, sp, #4 d178: e24dd010 sub sp, sp, #16 d17c: e50b0008 str r0, [fp, #-8] return syscall(SYSCALL_SERVER, (intptr_t)name, 0, 0, 0); d180: e51b1008 ldr r1, [fp, #-8] d184: e3a03000 mov r3, #0 d188: e58d3000 str r3, [sp] d18c: e3a03000 mov r3, #0 d190: e3a02000 mov r2, #0 d194: e3a00005 mov r0, #5 d198: ebffffa3 bl d02c d19c: e1a03000 mov r3, r0 } d1a0: e1a00003 mov r0, r3 d1a4: e24bd004 sub sp, fp, #4 d1a8: e8bd8800 pop {fp, pc} 0000d1ac : int session(char* path, int capacity, struct Session* user_session) { d1ac: e92d4800 push {fp, lr} d1b0: e28db004 add fp, sp, #4 d1b4: e24dd018 sub sp, sp, #24 d1b8: e50b0008 str r0, [fp, #-8] d1bc: e50b100c str r1, [fp, #-12] d1c0: e50b2010 str r2, [fp, #-16] return syscall(SYSCALL_SESSION, (intptr_t)path, (intptr_t)capacity, (intptr_t)user_session, 0); d1c4: e51b1008 ldr r1, [fp, #-8] d1c8: e51b2010 ldr r2, [fp, #-16] d1cc: e3a03000 mov r3, #0 d1d0: e58d3000 str r3, [sp] d1d4: e1a03002 mov r3, r2 d1d8: e51b200c ldr r2, [fp, #-12] d1dc: e3a00006 mov r0, #6 d1e0: ebffff91 bl d02c d1e4: e1a03000 mov r3, r0 } d1e8: e1a00003 mov r0, r3 d1ec: e24bd004 sub sp, fp, #4 d1f0: e8bd8800 pop {fp, pc} 0000d1f4 : int poll_session(struct Session* userland_session_arr, int arr_capacity) { d1f4: e92d4800 push {fp, lr} d1f8: e28db004 add fp, sp, #4 d1fc: e24dd010 sub sp, sp, #16 d200: e50b0008 str r0, [fp, #-8] d204: e50b100c str r1, [fp, #-12] return syscall(SYSCALL_POLL_SESSION, (intptr_t)userland_session_arr, (intptr_t)arr_capacity, 0, 0); d208: e51b1008 ldr r1, [fp, #-8] d20c: e3a03000 mov r3, #0 d210: e58d3000 str r3, [sp] d214: e3a03000 mov r3, #0 d218: e51b200c ldr r2, [fp, #-12] d21c: e3a00007 mov r0, #7 d220: ebffff81 bl d02c d224: e1a03000 mov r3, r0 } d228: e1a00003 mov r0, r3 d22c: e24bd004 sub sp, fp, #4 d230: e8bd8800 pop {fp, pc} 0000d234 : int close_session(struct Session* session) { d234: e92d4800 push {fp, lr} d238: e28db004 add fp, sp, #4 d23c: e24dd010 sub sp, sp, #16 d240: e50b0008 str r0, [fp, #-8] return syscall(SYSCALL_CLOSE_SESSION, (intptr_t)session, 0, 0, 0); d244: e51b1008 ldr r1, [fp, #-8] d248: e3a03000 mov r3, #0 d24c: e58d3000 str r3, [sp] d250: e3a03000 mov r3, #0 d254: e3a02000 mov r2, #0 d258: e3a00008 mov r0, #8 d25c: ebffff72 bl d02c d260: e1a03000 mov r3, r0 } d264: e1a00003 mov r0, r3 d268: e24bd004 sub sp, fp, #4 d26c: e8bd8800 pop {fp, pc} 0000d270 : int get_memblock_info(sys_state_info* info) { d270: e92d4800 push {fp, lr} d274: e28db004 add fp, sp, #4 d278: e24dd010 sub sp, sp, #16 d27c: e50b0008 str r0, [fp, #-8] return syscall(SYSCALL_SYS_STATE, SYS_STATE_MEMBLOCK_INFO, (intptr_t)info, 0, 0); d280: e51b2008 ldr r2, [fp, #-8] d284: e3a03000 mov r3, #0 d288: e58d3000 str r3, [sp] d28c: e3a03000 mov r3, #0 d290: e3a01003 mov r1, #3 d294: e3a0000a mov r0, #10 d298: ebffff63 bl d02c d29c: e1a03000 mov r3, r0 } d2a0: e1a00003 mov r0, r3 d2a4: e24bd004 sub sp, fp, #4 d2a8: e8bd8800 pop {fp, pc} 0000d2ac : int set_priority(sys_state_info* info) { d2ac: e92d4800 push {fp, lr} d2b0: e28db004 add fp, sp, #4 d2b4: e24dd010 sub sp, sp, #16 d2b8: e50b0008 str r0, [fp, #-8] return syscall(SYSCALL_SYS_STATE, SYS_STATE_SET_TASK_PRIORITY, (intptr_t)info, 0, 0); d2bc: e51b2008 ldr r2, [fp, #-8] d2c0: e3a03000 mov r3, #0 d2c4: e58d3000 str r3, [sp] d2c8: e3a03000 mov r3, #0 d2cc: e3a01001 mov r1, #1 d2d0: e3a0000a mov r0, #10 d2d4: ebffff54 bl d02c d2d8: e1a03000 mov r3, r0 } d2dc: e1a00003 mov r0, r3 d2e0: e24bd004 sub sp, fp, #4 d2e4: e8bd8800 pop {fp, pc} 0000d2e8 : int task_heap_base() { d2e8: e92d4800 push {fp, lr} d2ec: e28db004 add fp, sp, #4 d2f0: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_SYS_STATE, SYS_STATE_GET_HEAP_BASE, 0, 0, 0); d2f4: e3a03000 mov r3, #0 d2f8: e58d3000 str r3, [sp] d2fc: e3a03000 mov r3, #0 d300: e3a02000 mov r2, #0 d304: e3a01002 mov r1, #2 d308: e3a0000a mov r0, #10 d30c: ebffff46 bl d02c d310: e1a03000 mov r3, r0 } d314: e1a00003 mov r0, r3 d318: e24bd004 sub sp, fp, #4 d31c: e8bd8800 pop {fp, pc} 0000d320 : int show_task() { d320: e92d4800 push {fp, lr} d324: e28db004 add fp, sp, #4 d328: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_SYS_STATE, SYS_STATE_SHOW_TASKS, 0, 0, 0); d32c: e3a03000 mov r3, #0 d330: e58d3000 str r3, [sp] d334: e3a03000 mov r3, #0 d338: e3a02000 mov r2, #0 d33c: e3a01004 mov r1, #4 d340: e3a0000a mov r0, #10 d344: ebffff38 bl d02c d348: e1a03000 mov r3, r0 } d34c: e1a00003 mov r0, r3 d350: e24bd004 sub sp, fp, #4 d354: e8bd8800 pop {fp, pc} 0000d358 : int show_mem() { d358: e92d4800 push {fp, lr} d35c: e28db004 add fp, sp, #4 d360: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_SYS_STATE, SYS_STATE_SHOW_MEM_INFO, 0, 0, 0); d364: e3a03000 mov r3, #0 d368: e58d3000 str r3, [sp] d36c: e3a03000 mov r3, #0 d370: e3a02000 mov r2, #0 d374: e3a01005 mov r1, #5 d378: e3a0000a mov r0, #10 d37c: ebffff2a bl d02c d380: e1a03000 mov r3, r0 } d384: e1a00003 mov r0, r3 d388: e24bd004 sub sp, fp, #4 d38c: e8bd8800 pop {fp, pc} 0000d390 : int show_cpu() { d390: e92d4800 push {fp, lr} d394: e28db004 add fp, sp, #4 d398: e24dd008 sub sp, sp, #8 return syscall(SYSCALL_SYS_STATE, SYS_STATE_SHOW_CPU_INFO, 0, 0, 0); d39c: e3a03000 mov r3, #0 d3a0: e58d3000 str r3, [sp] d3a4: e3a03000 mov r3, #0 d3a8: e3a02000 mov r2, #0 d3ac: e3a01006 mov r1, #6 d3b0: e3a0000a mov r0, #10 d3b4: ebffff1c bl d02c d3b8: e1a03000 mov r3, r0 } d3bc: e1a00003 mov r0, r3 d3c0: e24bd004 sub sp, fp, #4 d3c4: e8bd8800 pop {fp, pc} 0000d3c8 : int mmap(uintptr_t vaddr, uintptr_t paddr, int len, bool is_dev) { d3c8: e92d4800 push {fp, lr} d3cc: e28db004 add fp, sp, #4 d3d0: e24dd018 sub sp, sp, #24 d3d4: e50b0008 str r0, [fp, #-8] d3d8: e50b100c str r1, [fp, #-12] d3dc: e50b2010 str r2, [fp, #-16] d3e0: e54b3011 strb r3, [fp, #-17] ; 0xffffffef return syscall(SYSCALL_MMAP, vaddr, paddr, (intptr_t)len, (intptr_t)is_dev); d3e4: e51b1008 ldr r1, [fp, #-8] d3e8: e51b200c ldr r2, [fp, #-12] d3ec: e55b3011 ldrb r3, [fp, #-17] ; 0xffffffef d3f0: e58d3000 str r3, [sp] d3f4: e51b3010 ldr r3, [fp, #-16] d3f8: e3a00004 mov r0, #4 d3fc: ebffff0a bl d02c d400: e1a03000 mov r3, r0 } d404: e1a00003 mov r0, r3 d408: e24bd004 sub sp, fp, #4 d40c: e8bd8800 pop {fp, pc} 0000d410 : int register_irq(int irq, int opcode) { d410: e92d4800 push {fp, lr} d414: e28db004 add fp, sp, #4 d418: e24dd010 sub sp, sp, #16 d41c: e50b0008 str r0, [fp, #-8] d420: e50b100c str r1, [fp, #-12] return syscall(SYSCALL_REGISTER_IRQ, (intptr_t)irq, (intptr_t)opcode, 0, 0); d424: e3a03000 mov r3, #0 d428: e58d3000 str r3, [sp] d42c: e3a03000 mov r3, #0 d430: e51b200c ldr r2, [fp, #-12] d434: e51b1008 ldr r1, [fp, #-8] d438: e3a0000b mov r0, #11 d43c: ebfffefa bl d02c d440: e1a03000 mov r3, r0 d444: e1a00003 mov r0, r3 d448: e24bd004 sub sp, fp, #4 d44c: e8bd8800 pop {fp, pc} 0000d450 <__udivsi3>: d450: e2512001 subs r2, r1, #1 d454: 012fff1e bxeq lr d458: 3a000036 bcc d538 <__udivsi3+0xe8> d45c: e1500001 cmp r0, r1 d460: 9a000022 bls d4f0 <__udivsi3+0xa0> d464: e1110002 tst r1, r2 d468: 0a000023 beq d4fc <__udivsi3+0xac> d46c: e311020e tst r1, #-536870912 ; 0xe0000000 d470: 01a01181 lsleq r1, r1, #3 d474: 03a03008 moveq r3, #8 d478: 13a03001 movne r3, #1 d47c: e3510201 cmp r1, #268435456 ; 0x10000000 d480: 31510000 cmpcc r1, r0 d484: 31a01201 lslcc r1, r1, #4 d488: 31a03203 lslcc r3, r3, #4 d48c: 3afffffa bcc d47c <__udivsi3+0x2c> d490: e3510102 cmp r1, #-2147483648 ; 0x80000000 d494: 31510000 cmpcc r1, r0 d498: 31a01081 lslcc r1, r1, #1 d49c: 31a03083 lslcc r3, r3, #1 d4a0: 3afffffa bcc d490 <__udivsi3+0x40> d4a4: e3a02000 mov r2, #0 d4a8: e1500001 cmp r0, r1 d4ac: 20400001 subcs r0, r0, r1 d4b0: 21822003 orrcs r2, r2, r3 d4b4: e15000a1 cmp r0, r1, lsr #1 d4b8: 204000a1 subcs r0, r0, r1, lsr #1 d4bc: 218220a3 orrcs r2, r2, r3, lsr #1 d4c0: e1500121 cmp r0, r1, lsr #2 d4c4: 20400121 subcs r0, r0, r1, lsr #2 d4c8: 21822123 orrcs r2, r2, r3, lsr #2 d4cc: e15001a1 cmp r0, r1, lsr #3 d4d0: 204001a1 subcs r0, r0, r1, lsr #3 d4d4: 218221a3 orrcs r2, r2, r3, lsr #3 d4d8: e3500000 cmp r0, #0 d4dc: 11b03223 lsrsne r3, r3, #4 d4e0: 11a01221 lsrne r1, r1, #4 d4e4: 1affffef bne d4a8 <__udivsi3+0x58> d4e8: e1a00002 mov r0, r2 d4ec: e12fff1e bx lr d4f0: 03a00001 moveq r0, #1 d4f4: 13a00000 movne r0, #0 d4f8: e12fff1e bx lr d4fc: e3510801 cmp r1, #65536 ; 0x10000 d500: 21a01821 lsrcs r1, r1, #16 d504: 23a02010 movcs r2, #16 d508: 33a02000 movcc r2, #0 d50c: e3510c01 cmp r1, #256 ; 0x100 d510: 21a01421 lsrcs r1, r1, #8 d514: 22822008 addcs r2, r2, #8 d518: e3510010 cmp r1, #16 d51c: 21a01221 lsrcs r1, r1, #4 d520: 22822004 addcs r2, r2, #4 d524: e3510004 cmp r1, #4 d528: 82822003 addhi r2, r2, #3 d52c: 908220a1 addls r2, r2, r1, lsr #1 d530: e1a00230 lsr r0, r0, r2 d534: e12fff1e bx lr d538: e3500000 cmp r0, #0 d53c: 13e00000 mvnne r0, #0 d540: ea000059 b d6ac <__aeabi_idiv0> 0000d544 <__aeabi_uidivmod>: d544: e3510000 cmp r1, #0 d548: 0afffffa beq d538 <__udivsi3+0xe8> d54c: e92d4003 push {r0, r1, lr} d550: ebffffbe bl d450 <__udivsi3> d554: e8bd4006 pop {r1, r2, lr} d558: e0030092 mul r3, r2, r0 d55c: e0411003 sub r1, r1, r3 d560: e12fff1e bx lr 0000d564 <__divsi3>: d564: e3510000 cmp r1, #0 d568: 0a000043 beq d67c <.divsi3_skip_div0_test+0x110> 0000d56c <.divsi3_skip_div0_test>: d56c: e020c001 eor ip, r0, r1 d570: 42611000 rsbmi r1, r1, #0 d574: e2512001 subs r2, r1, #1 d578: 0a000027 beq d61c <.divsi3_skip_div0_test+0xb0> d57c: e1b03000 movs r3, r0 d580: 42603000 rsbmi r3, r0, #0 d584: e1530001 cmp r3, r1 d588: 9a000026 bls d628 <.divsi3_skip_div0_test+0xbc> d58c: e1110002 tst r1, r2 d590: 0a000028 beq d638 <.divsi3_skip_div0_test+0xcc> d594: e311020e tst r1, #-536870912 ; 0xe0000000 d598: 01a01181 lsleq r1, r1, #3 d59c: 03a02008 moveq r2, #8 d5a0: 13a02001 movne r2, #1 d5a4: e3510201 cmp r1, #268435456 ; 0x10000000 d5a8: 31510003 cmpcc r1, r3 d5ac: 31a01201 lslcc r1, r1, #4 d5b0: 31a02202 lslcc r2, r2, #4 d5b4: 3afffffa bcc d5a4 <.divsi3_skip_div0_test+0x38> d5b8: e3510102 cmp r1, #-2147483648 ; 0x80000000 d5bc: 31510003 cmpcc r1, r3 d5c0: 31a01081 lslcc r1, r1, #1 d5c4: 31a02082 lslcc r2, r2, #1 d5c8: 3afffffa bcc d5b8 <.divsi3_skip_div0_test+0x4c> d5cc: e3a00000 mov r0, #0 d5d0: e1530001 cmp r3, r1 d5d4: 20433001 subcs r3, r3, r1 d5d8: 21800002 orrcs r0, r0, r2 d5dc: e15300a1 cmp r3, r1, lsr #1 d5e0: 204330a1 subcs r3, r3, r1, lsr #1 d5e4: 218000a2 orrcs r0, r0, r2, lsr #1 d5e8: e1530121 cmp r3, r1, lsr #2 d5ec: 20433121 subcs r3, r3, r1, lsr #2 d5f0: 21800122 orrcs r0, r0, r2, lsr #2 d5f4: e15301a1 cmp r3, r1, lsr #3 d5f8: 204331a1 subcs r3, r3, r1, lsr #3 d5fc: 218001a2 orrcs r0, r0, r2, lsr #3 d600: e3530000 cmp r3, #0 d604: 11b02222 lsrsne r2, r2, #4 d608: 11a01221 lsrne r1, r1, #4 d60c: 1affffef bne d5d0 <.divsi3_skip_div0_test+0x64> d610: e35c0000 cmp ip, #0 d614: 42600000 rsbmi r0, r0, #0 d618: e12fff1e bx lr d61c: e13c0000 teq ip, r0 d620: 42600000 rsbmi r0, r0, #0 d624: e12fff1e bx lr d628: 33a00000 movcc r0, #0 d62c: 01a00fcc asreq r0, ip, #31 d630: 03800001 orreq r0, r0, #1 d634: e12fff1e bx lr d638: e3510801 cmp r1, #65536 ; 0x10000 d63c: 21a01821 lsrcs r1, r1, #16 d640: 23a02010 movcs r2, #16 d644: 33a02000 movcc r2, #0 d648: e3510c01 cmp r1, #256 ; 0x100 d64c: 21a01421 lsrcs r1, r1, #8 d650: 22822008 addcs r2, r2, #8 d654: e3510010 cmp r1, #16 d658: 21a01221 lsrcs r1, r1, #4 d65c: 22822004 addcs r2, r2, #4 d660: e3510004 cmp r1, #4 d664: 82822003 addhi r2, r2, #3 d668: 908220a1 addls r2, r2, r1, lsr #1 d66c: e35c0000 cmp ip, #0 d670: e1a00233 lsr r0, r3, r2 d674: 42600000 rsbmi r0, r0, #0 d678: e12fff1e bx lr d67c: e3500000 cmp r0, #0 d680: c3e00102 mvngt r0, #-2147483648 ; 0x80000000 d684: b3a00102 movlt r0, #-2147483648 ; 0x80000000 d688: ea000007 b d6ac <__aeabi_idiv0> 0000d68c <__aeabi_idivmod>: d68c: e3510000 cmp r1, #0 d690: 0afffff9 beq d67c <.divsi3_skip_div0_test+0x110> d694: e92d4003 push {r0, r1, lr} d698: ebffffb3 bl d56c <.divsi3_skip_div0_test> d69c: e8bd4006 pop {r1, r2, lr} d6a0: e0030092 mul r3, r2, r0 d6a4: e0411003 sub r1, r1, r3 d6a8: e12fff1e bx lr 0000d6ac <__aeabi_idiv0>: d6ac: e12fff1e bx lr 0000d6b0 <__assert_func>: d6b0: e59fc038 ldr ip, [pc, #56] ; d6f0 <__assert_func+0x40> d6b4: e59c4000 ldr r4, [ip] d6b8: e252c000 subs ip, r2, #0 d6bc: e1a02003 mov r2, r3 d6c0: 059f302c ldreq r3, [pc, #44] ; d6f4 <__assert_func+0x44> d6c4: e52de004 push {lr} ; (str lr, [sp, #-4]!) d6c8: 01a0c003 moveq ip, r3 d6cc: e1a0e000 mov lr, r0 d6d0: 159f3020 ldrne r3, [pc, #32] ; d6f8 <__assert_func+0x48> d6d4: e24dd014 sub sp, sp, #20 d6d8: e594000c ldr r0, [r4, #12] d6dc: e88d100a stm sp, {r1, r3, ip} d6e0: e1a0300e mov r3, lr d6e4: e59f1010 ldr r1, [pc, #16] ; d6fc <__assert_func+0x4c> d6e8: eb000014 bl d740 d6ec: eb0007c2 bl f5fc d6f0: 0001356c .word 0x0001356c d6f4: 00012f9c .word 0x00012f9c d6f8: 00012f90 .word 0x00012f90 d6fc: 00012fa0 .word 0x00012fa0 0000d700 <__assert>: d700: e1a03002 mov r3, r2 d704: e92d4010 push {r4, lr} d708: e3a02000 mov r2, #0 d70c: ebffffe7 bl d6b0 <__assert_func> 0000d710 <_fiprintf_r>: d710: e92d000c push {r2, r3} d714: e52de004 push {lr} ; (str lr, [sp, #-4]!) d718: e24dd00c sub sp, sp, #12 d71c: e28dc014 add ip, sp, #20 d720: e1a0300c mov r3, ip d724: e59d2010 ldr r2, [sp, #16] d728: e58dc004 str ip, [sp, #4] d72c: eb00025d bl e0a8 <_vfiprintf_r> d730: e28dd00c add sp, sp, #12 d734: e49de004 pop {lr} ; (ldr lr, [sp], #4) d738: e28dd008 add sp, sp, #8 d73c: e12fff1e bx lr 0000d740 : d740: e92d000e push {r1, r2, r3} d744: e52de004 push {lr} ; (str lr, [sp, #-4]!) d748: e59f202c ldr r2, [pc, #44] ; d77c d74c: e24dd008 sub sp, sp, #8 d750: e28dc010 add ip, sp, #16 d754: e1a01000 mov r1, r0 d758: e1a0300c mov r3, ip d75c: e5920000 ldr r0, [r2] d760: e59d200c ldr r2, [sp, #12] d764: e58dc004 str ip, [sp, #4] d768: eb00024e bl e0a8 <_vfiprintf_r> d76c: e28dd008 add sp, sp, #8 d770: e49de004 pop {lr} ; (ldr lr, [sp], #4) d774: e28dd00c add sp, sp, #12 d778: e12fff1e bx lr d77c: 0001356c .word 0x0001356c 0000d780 <__libc_init_array>: d780: e92d4070 push {r4, r5, r6, lr} d784: e59f6064 ldr r6, [pc, #100] ; d7f0 <__libc_init_array+0x70> d788: e59f5064 ldr r5, [pc, #100] ; d7f4 <__libc_init_array+0x74> d78c: e0466005 sub r6, r6, r5 d790: e1b06146 asrs r6, r6, #2 d794: 13a04000 movne r4, #0 d798: 0a000005 beq d7b4 <__libc_init_array+0x34> d79c: e2844001 add r4, r4, #1 d7a0: e4953004 ldr r3, [r5], #4 d7a4: e1a0e00f mov lr, pc d7a8: e12fff13 bx r3 d7ac: e1560004 cmp r6, r4 d7b0: 1afffff9 bne d79c <__libc_init_array+0x1c> d7b4: e59f603c ldr r6, [pc, #60] ; d7f8 <__libc_init_array+0x78> d7b8: e59f503c ldr r5, [pc, #60] ; d7fc <__libc_init_array+0x7c> d7bc: e0466005 sub r6, r6, r5 d7c0: ebffea0e bl 8000 <_init> d7c4: e1b06146 asrs r6, r6, #2 d7c8: 13a04000 movne r4, #0 d7cc: 0a000005 beq d7e8 <__libc_init_array+0x68> d7d0: e2844001 add r4, r4, #1 d7d4: e4953004 ldr r3, [r5], #4 d7d8: e1a0e00f mov lr, pc d7dc: e12fff13 bx r3 d7e0: e1560004 cmp r6, r4 d7e4: 1afffff9 bne d7d0 <__libc_init_array+0x50> d7e8: e8bd4070 pop {r4, r5, r6, lr} d7ec: e12fff1e bx lr d7f0: 00013144 .word 0x00013144 d7f4: 00013144 .word 0x00013144 d7f8: 00013148 .word 0x00013148 d7fc: 00013144 .word 0x00013144 0000d800 : d800: e352000f cmp r2, #15 d804: 8a000009 bhi d830 d808: e3520000 cmp r2, #0 d80c: e1a03000 mov r3, r0 d810: 0a00003c beq d908 d814: e2433001 sub r3, r3, #1 d818: e0812002 add r2, r1, r2 d81c: e4d1c001 ldrb ip, [r1], #1 d820: e1510002 cmp r1, r2 d824: e5e3c001 strb ip, [r3, #1]! d828: 1afffffb bne d81c d82c: e12fff1e bx lr d830: e1813000 orr r3, r1, r0 d834: e3130003 tst r3, #3 d838: 1a000030 bne d900 d83c: e92d40f0 push {r4, r5, r6, r7, lr} d840: e1a0e002 mov lr, r2 d844: e280c010 add ip, r0, #16 d848: e2813010 add r3, r1, #16 d84c: e5137010 ldr r7, [r3, #-16] d850: e513600c ldr r6, [r3, #-12] d854: e5135008 ldr r5, [r3, #-8] d858: e5134004 ldr r4, [r3, #-4] d85c: e24ee010 sub lr, lr, #16 d860: e35e000f cmp lr, #15 d864: e50c7010 str r7, [ip, #-16] d868: e50c600c str r6, [ip, #-12] d86c: e50c5008 str r5, [ip, #-8] d870: e50c4004 str r4, [ip, #-4] d874: e2833010 add r3, r3, #16 d878: e28cc010 add ip, ip, #16 d87c: 8afffff2 bhi d84c d880: e2423010 sub r3, r2, #16 d884: e3c3300f bic r3, r3, #15 d888: e202600f and r6, r2, #15 d88c: e2833010 add r3, r3, #16 d890: e3560003 cmp r6, #3 d894: e0811003 add r1, r1, r3 d898: e0803003 add r3, r0, r3 d89c: 9a00001a bls d90c d8a0: e1a04001 mov r4, r1 d8a4: e1a0c006 mov ip, r6 d8a8: e243e004 sub lr, r3, #4 d8ac: e24cc004 sub ip, ip, #4 d8b0: e4945004 ldr r5, [r4], #4 d8b4: e35c0003 cmp ip, #3 d8b8: e5ae5004 str r5, [lr, #4]! d8bc: 8afffffa bhi d8ac d8c0: e246c004 sub ip, r6, #4 d8c4: e3ccc003 bic ip, ip, #3 d8c8: e28cc004 add ip, ip, #4 d8cc: e081100c add r1, r1, ip d8d0: e083300c add r3, r3, ip d8d4: e2022003 and r2, r2, #3 d8d8: e3520000 cmp r2, #0 d8dc: 12433001 subne r3, r3, #1 d8e0: 10812002 addne r2, r1, r2 d8e4: 0a000003 beq d8f8 d8e8: e4d1c001 ldrb ip, [r1], #1 d8ec: e1510002 cmp r1, r2 d8f0: e5e3c001 strb ip, [r3, #1]! d8f4: 1afffffb bne d8e8 d8f8: e8bd40f0 pop {r4, r5, r6, r7, lr} d8fc: e12fff1e bx lr d900: e1a03000 mov r3, r0 d904: eaffffc2 b d814 d908: e12fff1e bx lr d90c: e1a02006 mov r2, r6 d910: eafffff0 b d8d8 0000d914 : d914: e1500001 cmp r0, r1 d918: 9a00000a bls d948 d91c: e0813002 add r3, r1, r2 d920: e1500003 cmp r0, r3 d924: 2a000007 bcs d948 d928: e3520000 cmp r2, #0 d92c: e0802002 add r2, r0, r2 d930: 012fff1e bxeq lr d934: e573c001 ldrb ip, [r3, #-1]! d938: e1510003 cmp r1, r3 d93c: e562c001 strb ip, [r2, #-1]! d940: 1afffffb bne d934 d944: e12fff1e bx lr d948: e352000f cmp r2, #15 d94c: 8a000009 bhi d978 d950: e3520000 cmp r2, #0 d954: e1a03000 mov r3, r0 d958: 0a00003c beq da50 d95c: e2433001 sub r3, r3, #1 d960: e0812002 add r2, r1, r2 d964: e4d1c001 ldrb ip, [r1], #1 d968: e1520001 cmp r2, r1 d96c: e5e3c001 strb ip, [r3, #1]! d970: 1afffffb bne d964 d974: e12fff1e bx lr d978: e1813000 orr r3, r1, r0 d97c: e3130003 tst r3, #3 d980: 1a000030 bne da48 d984: e92d4070 push {r4, r5, r6, lr} d988: e1a0e002 mov lr, r2 d98c: e280c010 add ip, r0, #16 d990: e2813010 add r3, r1, #16 d994: e5134010 ldr r4, [r3, #-16] d998: e50c4010 str r4, [ip, #-16] d99c: e513400c ldr r4, [r3, #-12] d9a0: e50c400c str r4, [ip, #-12] d9a4: e5134008 ldr r4, [r3, #-8] d9a8: e50c4008 str r4, [ip, #-8] d9ac: e24ee010 sub lr, lr, #16 d9b0: e5134004 ldr r4, [r3, #-4] d9b4: e35e000f cmp lr, #15 d9b8: e50c4004 str r4, [ip, #-4] d9bc: e2833010 add r3, r3, #16 d9c0: e28cc010 add ip, ip, #16 d9c4: 8afffff2 bhi d994 d9c8: e2423010 sub r3, r2, #16 d9cc: e3c3300f bic r3, r3, #15 d9d0: e202600f and r6, r2, #15 d9d4: e2833010 add r3, r3, #16 d9d8: e3560003 cmp r6, #3 d9dc: e0811003 add r1, r1, r3 d9e0: e0803003 add r3, r0, r3 d9e4: 9a00001a bls da54 d9e8: e1a04001 mov r4, r1 d9ec: e1a0c006 mov ip, r6 d9f0: e243e004 sub lr, r3, #4 d9f4: e24cc004 sub ip, ip, #4 d9f8: e4945004 ldr r5, [r4], #4 d9fc: e35c0003 cmp ip, #3 da00: e5ae5004 str r5, [lr, #4]! da04: 8afffffa bhi d9f4 da08: e246c004 sub ip, r6, #4 da0c: e3ccc003 bic ip, ip, #3 da10: e28cc004 add ip, ip, #4 da14: e081100c add r1, r1, ip da18: e083300c add r3, r3, ip da1c: e2022003 and r2, r2, #3 da20: e3520000 cmp r2, #0 da24: 12433001 subne r3, r3, #1 da28: 10812002 addne r2, r1, r2 da2c: 0a000003 beq da40 da30: e4d1c001 ldrb ip, [r1], #1 da34: e1520001 cmp r2, r1 da38: e5e3c001 strb ip, [r3, #1]! da3c: 1afffffb bne da30 da40: e8bd4070 pop {r4, r5, r6, lr} da44: e12fff1e bx lr da48: e1a03000 mov r3, r0 da4c: eaffffc2 b d95c da50: e12fff1e bx lr da54: e1a02006 mov r2, r6 da58: eafffff0 b da20 0000da5c : da5c: e3100003 tst r0, #3 da60: 0a000040 beq db68 da64: e3520000 cmp r2, #0 da68: e2422001 sub r2, r2, #1 da6c: 012fff1e bxeq lr da70: e201c0ff and ip, r1, #255 ; 0xff da74: e1a03000 mov r3, r0 da78: ea000002 b da88 da7c: e2422001 sub r2, r2, #1 da80: e3720001 cmn r2, #1 da84: 012fff1e bxeq lr da88: e4c3c001 strb ip, [r3], #1 da8c: e3130003 tst r3, #3 da90: 1afffff9 bne da7c da94: e3520003 cmp r2, #3 da98: 9a00002a bls db48 da9c: e92d4010 push {r4, lr} daa0: e201e0ff and lr, r1, #255 ; 0xff daa4: e18ee40e orr lr, lr, lr, lsl #8 daa8: e352000f cmp r2, #15 daac: e18ee80e orr lr, lr, lr, lsl #16 dab0: 9a000010 bls daf8 dab4: e1a04002 mov r4, r2 dab8: e283c010 add ip, r3, #16 dabc: e2444010 sub r4, r4, #16 dac0: e354000f cmp r4, #15 dac4: e50ce010 str lr, [ip, #-16] dac8: e50ce00c str lr, [ip, #-12] dacc: e50ce008 str lr, [ip, #-8] dad0: e50ce004 str lr, [ip, #-4] dad4: e28cc010 add ip, ip, #16 dad8: 8afffff7 bhi dabc dadc: e242c010 sub ip, r2, #16 dae0: e3ccc00f bic ip, ip, #15 dae4: e202200f and r2, r2, #15 dae8: e28cc010 add ip, ip, #16 daec: e3520003 cmp r2, #3 daf0: e083300c add r3, r3, ip daf4: 9a00000a bls db24 daf8: e1a04003 mov r4, r3 dafc: e1a0c002 mov ip, r2 db00: e24cc004 sub ip, ip, #4 db04: e35c0003 cmp ip, #3 db08: e484e004 str lr, [r4], #4 db0c: 8afffffb bhi db00 db10: e242c004 sub ip, r2, #4 db14: e3ccc003 bic ip, ip, #3 db18: e28cc004 add ip, ip, #4 db1c: e083300c add r3, r3, ip db20: e2022003 and r2, r2, #3 db24: e3520000 cmp r2, #0 db28: 0a000004 beq db40 db2c: e20110ff and r1, r1, #255 ; 0xff db30: e0832002 add r2, r3, r2 db34: e4c31001 strb r1, [r3], #1 db38: e1520003 cmp r2, r3 db3c: 1afffffc bne db34 db40: e8bd4010 pop {r4, lr} db44: e12fff1e bx lr db48: e3520000 cmp r2, #0 db4c: 012fff1e bxeq lr db50: e20110ff and r1, r1, #255 ; 0xff db54: e0832002 add r2, r3, r2 db58: e4c31001 strb r1, [r3], #1 db5c: e1520003 cmp r2, r3 db60: 1afffffc bne db58 db64: e12fff1e bx lr db68: e1a03000 mov r3, r0 db6c: eaffffc8 b da94 0000db70 : db70: e020c001 eor ip, r0, r1 db74: e31c0003 tst ip, #3 db78: 1a000021 bne dc04 db7c: e210c003 ands ip, r0, #3 db80: e3c00003 bic r0, r0, #3 db84: e3c11003 bic r1, r1, #3 db88: e4902004 ldr r2, [r0], #4 db8c: 04913004 ldreq r3, [r1], #4 db90: 0a000006 beq dbb0 db94: e22cc003 eor ip, ip, #3 db98: e3e034ff mvn r3, #-16777216 ; 0xff000000 db9c: e1a0c18c lsl ip, ip, #3 dba0: e1a0cc33 lsr ip, r3, ip dba4: e4913004 ldr r3, [r1], #4 dba8: e182200c orr r2, r2, ip dbac: e183300c orr r3, r3, ip dbb0: e52d4004 push {r4} ; (str r4, [sp, #-4]!) dbb4: e3a04001 mov r4, #1 dbb8: e1844404 orr r4, r4, r4, lsl #8 dbbc: e1844804 orr r4, r4, r4, lsl #16 dbc0: e042c004 sub ip, r2, r4 dbc4: e1520003 cmp r2, r3 dbc8: 01ccc002 biceq ip, ip, r2 dbcc: 011c0384 tsteq ip, r4, lsl #7 dbd0: 04902004 ldreq r2, [r0], #4 dbd4: 04913004 ldreq r3, [r1], #4 dbd8: 0afffff8 beq dbc0 dbdc: e1a00c02 lsl r0, r2, #24 dbe0: e1a02422 lsr r2, r2, #8 dbe4: e3500001 cmp r0, #1 dbe8: 21500c03 cmpcs r0, r3, lsl #24 dbec: 01a03423 lsreq r3, r3, #8 dbf0: 0afffff9 beq dbdc dbf4: e20330ff and r3, r3, #255 ; 0xff dbf8: e0630c20 rsb r0, r3, r0, lsr #24 dbfc: e49d4004 pop {r4} ; (ldr r4, [sp], #4) dc00: e12fff1e bx lr dc04: e3100003 tst r0, #3 dc08: 0a000006 beq dc28 dc0c: e4d02001 ldrb r2, [r0], #1 dc10: e4d13001 ldrb r3, [r1], #1 dc14: e3520001 cmp r2, #1 dc18: 21520003 cmpcs r2, r3 dc1c: 0afffff8 beq dc04 dc20: e0420003 sub r0, r2, r3 dc24: e12fff1e bx lr dc28: e92d0030 push {r4, r5} dc2c: e3a04001 mov r4, #1 dc30: e1844404 orr r4, r4, r4, lsl #8 dc34: e1844804 orr r4, r4, r4, lsl #16 dc38: e4902004 ldr r2, [r0], #4 dc3c: e2015003 and r5, r1, #3 dc40: e3c11003 bic r1, r1, #3 dc44: e4913004 ldr r3, [r1], #4 dc48: e3550002 cmp r5, #2 dc4c: 0a000017 beq dcb0 dc50: 8a00002d bhi dd0c dc54: e3c254ff bic r5, r2, #-16777216 ; 0xff000000 dc58: e1550423 cmp r5, r3, lsr #8 dc5c: e042c004 sub ip, r2, r4 dc60: e1ccc002 bic ip, ip, r2 dc64: 1a000007 bne dc88 dc68: e01cc384 ands ip, ip, r4, lsl #7 dc6c: 04913004 ldreq r3, [r1], #4 dc70: 1a000006 bne dc90 dc74: e0255002 eor r5, r5, r2 dc78: e1550c03 cmp r5, r3, lsl #24 dc7c: 1a000008 bne dca4 dc80: e4902004 ldr r2, [r0], #4 dc84: eafffff2 b dc54 dc88: e1a03423 lsr r3, r3, #8 dc8c: ea000036 b dd6c dc90: e3dcc4ff bics ip, ip, #-16777216 ; 0xff000000 dc94: 1a000031 bne dd60 dc98: e5d13000 ldrb r3, [r1] dc9c: e1a05c22 lsr r5, r2, #24 dca0: ea000031 b dd6c dca4: e1a05c22 lsr r5, r2, #24 dca8: e20330ff and r3, r3, #255 ; 0xff dcac: ea00002e b dd6c dcb0: e1a05802 lsl r5, r2, #16 dcb4: e042c004 sub ip, r2, r4 dcb8: e1a05825 lsr r5, r5, #16 dcbc: e1ccc002 bic ip, ip, r2 dcc0: e1550823 cmp r5, r3, lsr #16 dcc4: 1a00000e bne dd04 dcc8: e01cc384 ands ip, ip, r4, lsl #7 dccc: 04913004 ldreq r3, [r1], #4 dcd0: 1a000004 bne dce8 dcd4: e0255002 eor r5, r5, r2 dcd8: e1550803 cmp r5, r3, lsl #16 dcdc: 1a000006 bne dcfc dce0: e4902004 ldr r2, [r0], #4 dce4: eafffff1 b dcb0 dce8: e1b0c80c lsls ip, ip, #16 dcec: 1a00001b bne dd60 dcf0: e1d130b0 ldrh r3, [r1] dcf4: e1a05822 lsr r5, r2, #16 dcf8: ea00001b b dd6c dcfc: e1a03803 lsl r3, r3, #16 dd00: e1a05822 lsr r5, r2, #16 dd04: e1a03823 lsr r3, r3, #16 dd08: ea000017 b dd6c dd0c: e20250ff and r5, r2, #255 ; 0xff dd10: e1550c23 cmp r5, r3, lsr #24 dd14: e042c004 sub ip, r2, r4 dd18: e1ccc002 bic ip, ip, r2 dd1c: 1a000007 bne dd40 dd20: e01cc384 ands ip, ip, r4, lsl #7 dd24: 04913004 ldreq r3, [r1], #4 dd28: 1a000006 bne dd48 dd2c: e0255002 eor r5, r5, r2 dd30: e1550403 cmp r5, r3, lsl #8 dd34: 1a000006 bne dd54 dd38: e4902004 ldr r2, [r0], #4 dd3c: eafffff2 b dd0c dd40: e1a03c23 lsr r3, r3, #24 dd44: ea000008 b dd6c dd48: e31200ff tst r2, #255 ; 0xff dd4c: 0a000003 beq dd60 dd50: e4913004 ldr r3, [r1], #4 dd54: e1a05422 lsr r5, r2, #8 dd58: e3c334ff bic r3, r3, #-16777216 ; 0xff000000 dd5c: ea000002 b dd6c dd60: e3a00000 mov r0, #0 dd64: e8bd0030 pop {r4, r5} dd68: e12fff1e bx lr dd6c: e20520ff and r2, r5, #255 ; 0xff dd70: e20300ff and r0, r3, #255 ; 0xff dd74: e3500001 cmp r0, #1 dd78: 21500002 cmpcs r0, r2 dd7c: 01a05425 lsreq r5, r5, #8 dd80: 01a03423 lsreq r3, r3, #8 dd84: 0afffff8 beq dd6c dd88: e0420000 sub r0, r2, r0 dd8c: e8bd0030 pop {r4, r5} dd90: e12fff1e bx lr 0000dd94 : dd94: e3c01003 bic r1, r0, #3 dd98: e2100003 ands r0, r0, #3 dd9c: e2600000 rsb r0, r0, #0 dda0: e4913004 ldr r3, [r1], #4 dda4: e280c004 add ip, r0, #4 dda8: e1a0c18c lsl ip, ip, #3 ddac: e3e02000 mvn r2, #0 ddb0: 11833c32 orrne r3, r3, r2, lsr ip ddb4: e3a0c001 mov ip, #1 ddb8: e18cc40c orr ip, ip, ip, lsl #8 ddbc: e18cc80c orr ip, ip, ip, lsl #16 ddc0: e043200c sub r2, r3, ip ddc4: e1c22003 bic r2, r2, r3 ddc8: e012238c ands r2, r2, ip, lsl #7 ddcc: 04913004 ldreq r3, [r1], #4 ddd0: 02800004 addeq r0, r0, #4 ddd4: 0afffff9 beq ddc0 ddd8: e31300ff tst r3, #255 ; 0xff dddc: 12800001 addne r0, r0, #1 dde0: 13130cff tstne r3, #65280 ; 0xff00 dde4: 12800001 addne r0, r0, #1 dde8: 131308ff tstne r3, #16711680 ; 0xff0000 ddec: 12800001 addne r0, r0, #1 ddf0: e12fff1e bx lr 0000ddf4 : ddf4: e3520000 cmp r2, #0 ddf8: 0a000037 beq dedc ddfc: e1803001 orr r3, r0, r1 de00: e2133003 ands r3, r3, #3 de04: e92d40f0 push {r4, r5, r6, r7, lr} de08: 1a00001f bne de8c de0c: e3520003 cmp r2, #3 de10: 9a00001d bls de8c de14: e590c000 ldr ip, [r0] de18: e591e000 ldr lr, [r1] de1c: e15c000e cmp ip, lr de20: 1a000019 bne de8c de24: e2522004 subs r2, r2, #4 de28: 0a00002d beq dee4 de2c: e59f50c8 ldr r5, [pc, #200] ; defc de30: e59f60c8 ldr r6, [pc, #200] ; df00 de34: e08ce005 add lr, ip, r5 de38: e1cec00c bic ip, lr, ip de3c: e11c0006 tst ip, r6 de40: 02800004 addeq r0, r0, #4 de44: 02811004 addeq r1, r1, #4 de48: 0a00000b beq de7c de4c: ea000024 b dee4 de50: e4903004 ldr r3, [r0], #4 de54: e5914000 ldr r4, [r1] de58: e083c005 add ip, r3, r5 de5c: e1530004 cmp r3, r4 de60: e1ccc003 bic ip, ip, r3 de64: e2811004 add r1, r1, #4 de68: 1a000020 bne def0 de6c: e2522004 subs r2, r2, #4 de70: 0a00001b beq dee4 de74: e11c0006 tst ip, r6 de78: 1a000019 bne dee4 de7c: e3520003 cmp r2, #3 de80: e1a07000 mov r7, r0 de84: e1a0e001 mov lr, r1 de88: 8afffff0 bhi de50 de8c: e5d03000 ldrb r3, [r0] de90: e5d1c000 ldrb ip, [r1] de94: e15c0003 cmp ip, r3 de98: e2422001 sub r2, r2, #1 de9c: 1a00000b bne ded0 dea0: e3520000 cmp r2, #0 dea4: 135c0000 cmpne ip, #0 dea8: 1a000003 bne debc deac: ea00000c b dee4 deb0: e3520000 cmp r2, #0 deb4: 13530000 cmpne r3, #0 deb8: 0a000009 beq dee4 debc: e5f03001 ldrb r3, [r0, #1]! dec0: e5f1c001 ldrb ip, [r1, #1]! dec4: e153000c cmp r3, ip dec8: e2422001 sub r2, r2, #1 decc: 0afffff7 beq deb0 ded0: e043000c sub r0, r3, ip ded4: e8bd40f0 pop {r4, r5, r6, r7, lr} ded8: e12fff1e bx lr dedc: e1a00002 mov r0, r2 dee0: e12fff1e bx lr dee4: e3a00000 mov r0, #0 dee8: e8bd40f0 pop {r4, r5, r6, r7, lr} deec: e12fff1e bx lr def0: e1a0100e mov r1, lr def4: e1a00007 mov r0, r7 def8: eaffffe3 b de8c defc: fefefeff .word 0xfefefeff df00: 80808080 .word 0x80808080 0000df04 : df04: e1803001 orr r3, r0, r1 df08: e3130003 tst r3, #3 df0c: 03a03001 moveq r3, #1 df10: 13a03000 movne r3, #0 df14: e3520003 cmp r2, #3 df18: 93a03000 movls r3, #0 df1c: 82033001 andhi r3, r3, #1 df20: e3530000 cmp r3, #0 df24: e92d4070 push {r4, r5, r6, lr} df28: e1a03000 mov r3, r0 df2c: 0a00000b beq df60 df30: e59f50a0 ldr r5, [pc, #160] ; dfd8 df34: e59f40a0 ldr r4, [pc, #160] ; dfdc df38: e1a06001 mov r6, r1 df3c: e491e004 ldr lr, [r1], #4 df40: e08ec005 add ip, lr, r5 df44: e1ccc00e bic ip, ip, lr df48: e11c0004 tst ip, r4 df4c: 1a00001f bne dfd0 df50: e2422004 sub r2, r2, #4 df54: e3520003 cmp r2, #3 df58: e483e004 str lr, [r3], #4 df5c: 8afffff5 bhi df38 df60: e3520000 cmp r2, #0 df64: 0a00000e beq dfa4 df68: e5d1c000 ldrb ip, [r1] df6c: e35c0000 cmp ip, #0 df70: e5c3c000 strb ip, [r3] df74: e2422001 sub r2, r2, #1 df78: e2833001 add r3, r3, #1 df7c: e2811001 add r1, r1, #1 df80: 1a000005 bne df9c df84: ea000008 b dfac df88: e4d1c001 ldrb ip, [r1], #1 df8c: e35c0000 cmp ip, #0 df90: e2422001 sub r2, r2, #1 df94: e4c3c001 strb ip, [r3], #1 df98: 0a000003 beq dfac df9c: e3520000 cmp r2, #0 dfa0: 1afffff8 bne df88 dfa4: e8bd4070 pop {r4, r5, r6, lr} dfa8: e12fff1e bx lr dfac: e3520000 cmp r2, #0 dfb0: 13a01000 movne r1, #0 dfb4: 10832002 addne r2, r3, r2 dfb8: 0afffff9 beq dfa4 dfbc: e4c31001 strb r1, [r3], #1 dfc0: e1520003 cmp r2, r3 dfc4: 1afffffc bne dfbc dfc8: e8bd4070 pop {r4, r5, r6, lr} dfcc: e12fff1e bx lr dfd0: e1a01006 mov r1, r6 dfd4: eaffffe3 b df68 dfd8: fefefeff .word 0xfefefeff dfdc: 80808080 .word 0x80808080 0000dfe0 <__sprint_r.part.0>: dfe0: e92d4ff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} dfe4: e5913064 ldr r3, [r1, #100] ; 0x64 dfe8: e3130a02 tst r3, #8192 ; 0x2000 dfec: e1a0b002 mov fp, r2 dff0: 0a000024 beq e088 <__sprint_r.part.0+0xa8> dff4: e5923008 ldr r3, [r2, #8] dff8: e5929000 ldr r9, [r2] dffc: e3530000 cmp r3, #0 e000: 11a06001 movne r6, r1 e004: 11a07000 movne r7, r0 e008: 12899008 addne r9, r9, #8 e00c: 0a00001b beq e080 <__sprint_r.part.0+0xa0> e010: e519a004 ldr sl, [r9, #-4] e014: e5195008 ldr r5, [r9, #-8] e018: e1b0812a lsrs r8, sl, #2 e01c: 13a04000 movne r4, #0 e020: 12455004 subne r5, r5, #4 e024: 1a000002 bne e034 <__sprint_r.part.0+0x54> e028: ea00000e b e068 <__sprint_r.part.0+0x88> e02c: e1580004 cmp r8, r4 e030: 0a00000b beq e064 <__sprint_r.part.0+0x84> e034: e1a02006 mov r2, r6 e038: e5b51004 ldr r1, [r5, #4]! e03c: e1a00007 mov r0, r7 e040: eb000777 bl fe24 <_fputwc_r> e044: e3700001 cmn r0, #1 e048: e2844001 add r4, r4, #1 e04c: 1afffff6 bne e02c <__sprint_r.part.0+0x4c> e050: e3a03000 mov r3, #0 e054: e58b3008 str r3, [fp, #8] e058: e58b3004 str r3, [fp, #4] e05c: e8bd4ff8 pop {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} e060: e12fff1e bx lr e064: e59b3008 ldr r3, [fp, #8] e068: e3caa003 bic sl, sl, #3 e06c: e043300a sub r3, r3, sl e070: e3530000 cmp r3, #0 e074: e58b3008 str r3, [fp, #8] e078: e2899008 add r9, r9, #8 e07c: 1affffe3 bne e010 <__sprint_r.part.0+0x30> e080: e3a00000 mov r0, #0 e084: eafffff1 b e050 <__sprint_r.part.0+0x70> e088: eb00089d bl 10304 <__sfvwrite_r> e08c: eaffffef b e050 <__sprint_r.part.0+0x70> 0000e090 <__sprint_r>: e090: e5923008 ldr r3, [r2, #8] e094: e3530000 cmp r3, #0 e098: 1affffd0 bne dfe0 <__sprint_r.part.0> e09c: e5823004 str r3, [r2, #4] e0a0: e1a00003 mov r0, r3 e0a4: e12fff1e bx lr 0000e0a8 <_vfiprintf_r>: e0a8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} e0ac: e1a05003 mov r5, r3 e0b0: e24dd0b4 sub sp, sp, #180 ; 0xb4 e0b4: e2503000 subs r3, r0, #0 e0b8: e58d3014 str r3, [sp, #20] e0bc: e1a0a001 mov sl, r1 e0c0: e1a09002 mov r9, r2 e0c4: e58d5018 str r5, [sp, #24] e0c8: 0a000002 beq e0d8 <_vfiprintf_r+0x30> e0cc: e5933038 ldr r3, [r3, #56] ; 0x38 e0d0: e3530000 cmp r3, #0 e0d4: 0a0000cf beq e418 <_vfiprintf_r+0x370> e0d8: e59a3064 ldr r3, [sl, #100] ; 0x64 e0dc: e3130001 tst r3, #1 e0e0: e1da30fc ldrsh r3, [sl, #12] e0e4: e1a01803 lsl r1, r3, #16 e0e8: 1a0000a7 bne e38c <_vfiprintf_r+0x2e4> e0ec: e3110402 tst r1, #33554432 ; 0x2000000 e0f0: e1a01821 lsr r1, r1, #16 e0f4: 0a0000a0 beq e37c <_vfiprintf_r+0x2d4> e0f8: e3110a02 tst r1, #8192 ; 0x2000 e0fc: 1a000006 bne e11c <_vfiprintf_r+0x74> e100: e59a2064 ldr r2, [sl, #100] ; 0x64 e104: e3833a02 orr r3, r3, #8192 ; 0x2000 e108: e3c22a02 bic r2, r2, #8192 ; 0x2000 e10c: e1ca30bc strh r3, [sl, #12] e110: e58a2064 str r2, [sl, #100] ; 0x64 e114: e1a03803 lsl r3, r3, #16 e118: e1a01823 lsr r1, r3, #16 e11c: e3110008 tst r1, #8 e120: 0a0000a0 beq e3a8 <_vfiprintf_r+0x300> e124: e59a3010 ldr r3, [sl, #16] e128: e3530000 cmp r3, #0 e12c: 0a00009d beq e3a8 <_vfiprintf_r+0x300> e130: e201301a and r3, r1, #26 e134: e353000a cmp r3, #10 e138: 0a0000a3 beq e3cc <_vfiprintf_r+0x324> e13c: e3a03000 mov r3, #0 e140: e28d8070 add r8, sp, #112 ; 0x70 e144: e1a0b008 mov fp, r8 e148: e58d302c str r3, [sp, #44] ; 0x2c e14c: e58d3008 str r3, [sp, #8] e150: e58d3044 str r3, [sp, #68] ; 0x44 e154: e58d3040 str r3, [sp, #64] ; 0x40 e158: e58d803c str r8, [sp, #60] ; 0x3c e15c: e58da00c str sl, [sp, #12] e160: e5d93000 ldrb r3, [r9] e164: e3530000 cmp r3, #0 e168: 13530025 cmpne r3, #37 ; 0x25 e16c: e1a04009 mov r4, r9 e170: 0a000013 beq e1c4 <_vfiprintf_r+0x11c> e174: e5f43001 ldrb r3, [r4, #1]! e178: e3530000 cmp r3, #0 e17c: 13530025 cmpne r3, #37 ; 0x25 e180: 1afffffb bne e174 <_vfiprintf_r+0xcc> e184: e0545009 subs r5, r4, r9 e188: 0a00000d beq e1c4 <_vfiprintf_r+0x11c> e18c: e59d3040 ldr r3, [sp, #64] ; 0x40 e190: e59d2044 ldr r2, [sp, #68] ; 0x44 e194: e2833001 add r3, r3, #1 e198: e3530007 cmp r3, #7 e19c: e0852002 add r2, r5, r2 e1a0: e58b9000 str r9, [fp] e1a4: e58b5004 str r5, [fp, #4] e1a8: e58d3040 str r3, [sp, #64] ; 0x40 e1ac: e58d2044 str r2, [sp, #68] ; 0x44 e1b0: d28bb008 addle fp, fp, #8 e1b4: ca000076 bgt e394 <_vfiprintf_r+0x2ec> e1b8: e59d3008 ldr r3, [sp, #8] e1bc: e0833005 add r3, r3, r5 e1c0: e58d3008 str r3, [sp, #8] e1c4: e5d43000 ldrb r3, [r4] e1c8: e3530000 cmp r3, #0 e1cc: 0a00042f beq f290 <_vfiprintf_r+0x11e8> e1d0: e3a01000 mov r1, #0 e1d4: e3a03000 mov r3, #0 e1d8: e3e0a000 mvn sl, #0 e1dc: e5cd3037 strb r3, [sp, #55] ; 0x37 e1e0: e2849001 add r9, r4, #1 e1e4: e5d43001 ldrb r3, [r4, #1] e1e8: e1a0c001 mov ip, r1 e1ec: e1a00001 mov r0, r1 e1f0: e1a05001 mov r5, r1 e1f4: e1a0700a mov r7, sl e1f8: e3a0e001 mov lr, #1 e1fc: e3a0402b mov r4, #43 ; 0x2b e200: e3a06020 mov r6, #32 e204: e2899001 add r9, r9, #1 e208: e2432020 sub r2, r3, #32 e20c: e3520058 cmp r2, #88 ; 0x58 e210: 979ff102 ldrls pc, [pc, r2, lsl #2] e214: ea000220 b ea9c <_vfiprintf_r+0x9f4> e218: 0000ea88 .word 0x0000ea88 e21c: 0000ea9c .word 0x0000ea9c e220: 0000ea9c .word 0x0000ea9c e224: 0000ea64 .word 0x0000ea64 e228: 0000ea9c .word 0x0000ea9c e22c: 0000ea9c .word 0x0000ea9c e230: 0000ea9c .word 0x0000ea9c e234: 0000ea9c .word 0x0000ea9c e238: 0000ea9c .word 0x0000ea9c e23c: 0000ea9c .word 0x0000ea9c e240: 0000e420 .word 0x0000e420 e244: 0000e870 .word 0x0000e870 e248: 0000ea9c .word 0x0000ea9c e24c: 0000e43c .word 0x0000e43c e250: 0000e808 .word 0x0000e808 e254: 0000ea9c .word 0x0000ea9c e258: 0000e880 .word 0x0000e880 e25c: 0000e88c .word 0x0000e88c e260: 0000e88c .word 0x0000e88c e264: 0000e88c .word 0x0000e88c e268: 0000e88c .word 0x0000e88c e26c: 0000e88c .word 0x0000e88c e270: 0000e88c .word 0x0000e88c e274: 0000e88c .word 0x0000e88c e278: 0000e88c .word 0x0000e88c e27c: 0000e88c .word 0x0000e88c e280: 0000ea9c .word 0x0000ea9c e284: 0000ea9c .word 0x0000ea9c e288: 0000ea9c .word 0x0000ea9c e28c: 0000ea9c .word 0x0000ea9c e290: 0000ea9c .word 0x0000ea9c e294: 0000ea9c .word 0x0000ea9c e298: 0000ea9c .word 0x0000ea9c e29c: 0000ea9c .word 0x0000ea9c e2a0: 0000ea9c .word 0x0000ea9c e2a4: 0000ea9c .word 0x0000ea9c e2a8: 0000e8b0 .word 0x0000e8b0 e2ac: 0000ea9c .word 0x0000ea9c e2b0: 0000ea9c .word 0x0000ea9c e2b4: 0000ea9c .word 0x0000ea9c e2b8: 0000ea9c .word 0x0000ea9c e2bc: 0000ea9c .word 0x0000ea9c e2c0: 0000ea9c .word 0x0000ea9c e2c4: 0000ea9c .word 0x0000ea9c e2c8: 0000ea9c .word 0x0000ea9c e2cc: 0000ea9c .word 0x0000ea9c e2d0: 0000ea9c .word 0x0000ea9c e2d4: 0000e744 .word 0x0000e744 e2d8: 0000ea9c .word 0x0000ea9c e2dc: 0000ea9c .word 0x0000ea9c e2e0: 0000ea9c .word 0x0000ea9c e2e4: 0000ea9c .word 0x0000ea9c e2e8: 0000ea9c .word 0x0000ea9c e2ec: 0000e750 .word 0x0000e750 e2f0: 0000ea9c .word 0x0000ea9c e2f4: 0000ea9c .word 0x0000ea9c e2f8: 0000e9b4 .word 0x0000e9b4 e2fc: 0000ea9c .word 0x0000ea9c e300: 0000ea9c .word 0x0000ea9c e304: 0000ea9c .word 0x0000ea9c e308: 0000ea9c .word 0x0000ea9c e30c: 0000ea9c .word 0x0000ea9c e310: 0000ea9c .word 0x0000ea9c e314: 0000ea9c .word 0x0000ea9c e318: 0000ea9c .word 0x0000ea9c e31c: 0000ea9c .word 0x0000ea9c e320: 0000ea9c .word 0x0000ea9c e324: 0000ea28 .word 0x0000ea28 e328: 0000e9a4 .word 0x0000e9a4 e32c: 0000ea9c .word 0x0000ea9c e330: 0000ea9c .word 0x0000ea9c e334: 0000ea9c .word 0x0000ea9c e338: 0000e848 .word 0x0000e848 e33c: 0000e9a4 .word 0x0000e9a4 e340: 0000ea9c .word 0x0000ea9c e344: 0000ea9c .word 0x0000ea9c e348: 0000e854 .word 0x0000e854 e34c: 0000ea9c .word 0x0000ea9c e350: 0000e968 .word 0x0000e968 e354: 0000e708 .word 0x0000e708 e358: 0000e75c .word 0x0000e75c e35c: 0000e798 .word 0x0000e798 e360: 0000ea9c .word 0x0000ea9c e364: 0000e7a4 .word 0x0000e7a4 e368: 0000ea9c .word 0x0000ea9c e36c: 0000e448 .word 0x0000e448 e370: 0000ea9c .word 0x0000ea9c e374: 0000ea9c .word 0x0000ea9c e378: 0000ea70 .word 0x0000ea70 e37c: e59a0058 ldr r0, [sl, #88] ; 0x58 e380: eb000995 bl 109dc <__retarget_lock_acquire_recursive> e384: e1da30fc ldrsh r3, [sl, #12] e388: e1a01803 lsl r1, r3, #16 e38c: e1a01821 lsr r1, r1, #16 e390: eaffff58 b e0f8 <_vfiprintf_r+0x50> e394: e3520000 cmp r2, #0 e398: 1a000314 bne eff0 <_vfiprintf_r+0xf48> e39c: e58d2040 str r2, [sp, #64] ; 0x40 e3a0: e1a0b008 mov fp, r8 e3a4: eaffff83 b e1b8 <_vfiprintf_r+0x110> e3a8: e1a0100a mov r1, sl e3ac: e59d0014 ldr r0, [sp, #20] e3b0: eb000438 bl f498 <__swsetup_r> e3b4: e3500000 cmp r0, #0 e3b8: 1a0002f6 bne ef98 <_vfiprintf_r+0xef0> e3bc: e1da10bc ldrh r1, [sl, #12] e3c0: e201301a and r3, r1, #26 e3c4: e353000a cmp r3, #10 e3c8: 1affff5b bne e13c <_vfiprintf_r+0x94> e3cc: e1da30fe ldrsh r3, [sl, #14] e3d0: e3530000 cmp r3, #0 e3d4: baffff58 blt e13c <_vfiprintf_r+0x94> e3d8: e59a3064 ldr r3, [sl, #100] ; 0x64 e3dc: e3130001 tst r3, #1 e3e0: 1a000002 bne e3f0 <_vfiprintf_r+0x348> e3e4: e3110c02 tst r1, #512 ; 0x200 e3e8: 059a0058 ldreq r0, [sl, #88] ; 0x58 e3ec: 0b000980 bleq 109f4 <__retarget_lock_release_recursive> e3f0: e1a03005 mov r3, r5 e3f4: e1a02009 mov r2, r9 e3f8: e1a0100a mov r1, sl e3fc: e59d0014 ldr r0, [sp, #20] e400: eb0003f0 bl f3c8 <__sbprintf> e404: e58d0008 str r0, [sp, #8] e408: e59d0008 ldr r0, [sp, #8] e40c: e28dd0b4 add sp, sp, #180 ; 0xb4 e410: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} e414: e12fff1e bx lr e418: eb0005a0 bl faa0 <__sinit> e41c: eaffff2d b e0d8 <_vfiprintf_r+0x30> e420: e59d3018 ldr r3, [sp, #24] e424: e5930000 ldr r0, [r3] e428: e2833004 add r3, r3, #4 e42c: e3500000 cmp r0, #0 e430: e58d3018 str r3, [sp, #24] e434: aa000001 bge e440 <_vfiprintf_r+0x398> e438: e2600000 rsb r0, r0, #0 e43c: e3855004 orr r5, r5, #4 e440: e5d93000 ldrb r3, [r9] e444: eaffff6e b e204 <_vfiprintf_r+0x15c> e448: e58d001c str r0, [sp, #28] e44c: e3150020 tst r5, #32 e450: 1a00032b bne f104 <_vfiprintf_r+0x105c> e454: e59d2018 ldr r2, [sp, #24] e458: e3150010 tst r5, #16 e45c: e1a03002 mov r3, r2 e460: 1a0002f0 bne f028 <_vfiprintf_r+0xf80> e464: e3150040 tst r5, #64 ; 0x40 e468: 0a0002ee beq f028 <_vfiprintf_r+0xf80> e46c: e3a03001 mov r3, #1 e470: e3a07000 mov r7, #0 e474: e1d260b0 ldrh r6, [r2] e478: e2822004 add r2, r2, #4 e47c: e58d2018 str r2, [sp, #24] e480: e3a02000 mov r2, #0 e484: e3a04000 mov r4, #0 e488: e5cd2037 strb r2, [sp, #55] ; 0x37 e48c: e37a0001 cmn sl, #1 e490: 0a00011e beq e910 <_vfiprintf_r+0x868> e494: e1862007 orr r2, r6, r7 e498: e3520000 cmp r2, #0 e49c: 035a0000 cmpeq sl, #0 e4a0: e3c52080 bic r2, r5, #128 ; 0x80 e4a4: e58d2004 str r2, [sp, #4] e4a8: 1a000298 bne ef10 <_vfiprintf_r+0xe68> e4ac: e3530000 cmp r3, #0 e4b0: 1a000292 bne ef00 <_vfiprintf_r+0xe58> e4b4: e2153001 ands r3, r5, #1 e4b8: e58d3010 str r3, [sp, #16] e4bc: 058d8024 streq r8, [sp, #36] ; 0x24 e4c0: 13a03030 movne r3, #48 ; 0x30 e4c4: 128d20b0 addne r2, sp, #176 ; 0xb0 e4c8: 15623041 strbne r3, [r2, #-65]! ; 0xffffffbf e4cc: 158d2024 strne r2, [sp, #36] ; 0x24 e4d0: e59d3010 ldr r3, [sp, #16] e4d4: e15a0003 cmp sl, r3 e4d8: a1a0700a movge r7, sl e4dc: b1a07003 movlt r7, r3 e4e0: e3540000 cmp r4, #0 e4e4: 12877001 addne r7, r7, #1 e4e8: e59d3004 ldr r3, [sp, #4] e4ec: e2133002 ands r3, r3, #2 e4f0: e58d3020 str r3, [sp, #32] e4f4: e59d3004 ldr r3, [sp, #4] e4f8: 12877002 addne r7, r7, #2 e4fc: e2136084 ands r6, r3, #132 ; 0x84 e500: 1a00018d bne eb3c <_vfiprintf_r+0xa94> e504: e59d301c ldr r3, [sp, #28] e508: e0434007 sub r4, r3, r7 e50c: e3540000 cmp r4, #0 e510: da000189 ble eb3c <_vfiprintf_r+0xa94> e514: e3540010 cmp r4, #16 e518: da000378 ble f300 <_vfiprintf_r+0x1258> e51c: e1a0e00b mov lr, fp e520: e3a05010 mov r5, #16 e524: e1a0b007 mov fp, r7 e528: e3a03001 mov r3, #1 e52c: e59d2044 ldr r2, [sp, #68] ; 0x44 e530: e59dc040 ldr ip, [sp, #64] ; 0x40 e534: e59d7014 ldr r7, [sp, #20] e538: ea000005 b e554 <_vfiprintf_r+0x4ac> e53c: e28c1002 add r1, ip, #2 e540: e1a0c000 mov ip, r0 e544: e28ee008 add lr, lr, #8 e548: e2444010 sub r4, r4, #16 e54c: e3540010 cmp r4, #16 e550: da00000f ble e594 <_vfiprintf_r+0x4ec> e554: e28c0001 add r0, ip, #1 e558: e59f1e38 ldr r1, [pc, #3640] ; f398 <_vfiprintf_r+0x12f0> e55c: e2822010 add r2, r2, #16 e560: e3500007 cmp r0, #7 e564: e58d2044 str r2, [sp, #68] ; 0x44 e568: e88e0022 stm lr, {r1, r5} e56c: e58d0040 str r0, [sp, #64] ; 0x40 e570: dafffff1 ble e53c <_vfiprintf_r+0x494> e574: e3520000 cmp r2, #0 e578: 1a00015b bne eaec <_vfiprintf_r+0xa44> e57c: e2444010 sub r4, r4, #16 e580: e3540010 cmp r4, #16 e584: e1a0c006 mov ip, r6 e588: e1a01003 mov r1, r3 e58c: e1a0e008 mov lr, r8 e590: caffffef bgt e554 <_vfiprintf_r+0x4ac> e594: e1a0700b mov r7, fp e598: e1a0b00e mov fp, lr e59c: e59f3df4 ldr r3, [pc, #3572] ; f398 <_vfiprintf_r+0x12f0> e5a0: e3510007 cmp r1, #7 e5a4: e0842002 add r2, r4, r2 e5a8: e88b0018 stm fp, {r3, r4} e5ac: e58d2044 str r2, [sp, #68] ; 0x44 e5b0: e58d1040 str r1, [sp, #64] ; 0x40 e5b4: d28bb008 addle fp, fp, #8 e5b8: d2810001 addle r0, r1, #1 e5bc: da000161 ble eb48 <_vfiprintf_r+0xaa0> e5c0: e3520000 cmp r2, #0 e5c4: 1a000155 bne eb20 <_vfiprintf_r+0xa78> e5c8: e5dd1037 ldrb r1, [sp, #55] ; 0x37 e5cc: e3510000 cmp r1, #0 e5d0: 0a0002fb beq f1c4 <_vfiprintf_r+0x111c> e5d4: e3a02001 mov r2, #1 e5d8: e1a0b008 mov fp, r8 e5dc: e1a00002 mov r0, r2 e5e0: e28d1037 add r1, sp, #55 ; 0x37 e5e4: e58d2074 str r2, [sp, #116] ; 0x74 e5e8: e58d1070 str r1, [sp, #112] ; 0x70 e5ec: e1a01000 mov r1, r0 e5f0: e28bb008 add fp, fp, #8 e5f4: e2800001 add r0, r0, #1 e5f8: e59d3020 ldr r3, [sp, #32] e5fc: e3530000 cmp r3, #0 e600: 0a00016a beq ebb0 <_vfiprintf_r+0xb08> e604: e3a01002 mov r1, #2 e608: e28d3038 add r3, sp, #56 ; 0x38 e60c: e0822001 add r2, r2, r1 e610: e3500007 cmp r0, #7 e614: e58d2044 str r2, [sp, #68] ; 0x44 e618: e58d0040 str r0, [sp, #64] ; 0x40 e61c: e58b1004 str r1, [fp, #4] e620: e58b3000 str r3, [fp] e624: da00015e ble eba4 <_vfiprintf_r+0xafc> e628: e3520000 cmp r2, #0 e62c: 1a000292 bne f07c <_vfiprintf_r+0xfd4> e630: e3560080 cmp r6, #128 ; 0x80 e634: e3a00001 mov r0, #1 e638: e3a01000 mov r1, #0 e63c: e1a0b008 mov fp, r8 e640: 1a00015c bne ebb8 <_vfiprintf_r+0xb10> e644: e59d301c ldr r3, [sp, #28] e648: e0434007 sub r4, r3, r7 e64c: e3540000 cmp r4, #0 e650: da000158 ble ebb8 <_vfiprintf_r+0xb10> e654: e3540010 cmp r4, #16 e658: da00033b ble f34c <_vfiprintf_r+0x12a4> e65c: e1a0e00b mov lr, fp e660: e3a05010 mov r5, #16 e664: e1a0b007 mov fp, r7 e668: e3a06001 mov r6, #1 e66c: e1a07004 mov r7, r4 e670: e59d4014 ldr r4, [sp, #20] e674: ea000005 b e690 <_vfiprintf_r+0x5e8> e678: e281c002 add ip, r1, #2 e67c: e1a01000 mov r1, r0 e680: e28ee008 add lr, lr, #8 e684: e2477010 sub r7, r7, #16 e688: e3570010 cmp r7, #16 e68c: da00000f ble e6d0 <_vfiprintf_r+0x628> e690: e2810001 add r0, r1, #1 e694: e59f3d00 ldr r3, [pc, #3328] ; f39c <_vfiprintf_r+0x12f4> e698: e2822010 add r2, r2, #16 e69c: e3500007 cmp r0, #7 e6a0: e58d2044 str r2, [sp, #68] ; 0x44 e6a4: e88e0028 stm lr, {r3, r5} e6a8: e58d0040 str r0, [sp, #64] ; 0x40 e6ac: dafffff1 ble e678 <_vfiprintf_r+0x5d0> e6b0: e3520000 cmp r2, #0 e6b4: 1a000206 bne eed4 <_vfiprintf_r+0xe2c> e6b8: e2477010 sub r7, r7, #16 e6bc: e3570010 cmp r7, #16 e6c0: e1a0c006 mov ip, r6 e6c4: e3a01000 mov r1, #0 e6c8: e1a0e008 mov lr, r8 e6cc: caffffef bgt e690 <_vfiprintf_r+0x5e8> e6d0: e1a04007 mov r4, r7 e6d4: e1a0700b mov r7, fp e6d8: e1a0b00e mov fp, lr e6dc: e59f3cb8 ldr r3, [pc, #3256] ; f39c <_vfiprintf_r+0x12f4> e6e0: e0822004 add r2, r2, r4 e6e4: e35c0007 cmp ip, #7 e6e8: e58d2044 str r2, [sp, #68] ; 0x44 e6ec: e88b0018 stm fp, {r3, r4} e6f0: e58dc040 str ip, [sp, #64] ; 0x40 e6f4: ca00026b bgt f0a8 <_vfiprintf_r+0x1000> e6f8: e28bb008 add fp, fp, #8 e6fc: e28c0001 add r0, ip, #1 e700: e1a0100c mov r1, ip e704: ea00012b b ebb8 <_vfiprintf_r+0xb10> e708: e58d001c str r0, [sp, #28] e70c: e3150020 tst r5, #32 e710: 1a000283 bne f124 <_vfiprintf_r+0x107c> e714: e59d2018 ldr r2, [sp, #24] e718: e3150010 tst r5, #16 e71c: e1a03002 mov r3, r2 e720: 1a00023a bne f010 <_vfiprintf_r+0xf68> e724: e3150040 tst r5, #64 ; 0x40 e728: 0a000238 beq f010 <_vfiprintf_r+0xf68> e72c: e1d260b0 ldrh r6, [r2] e730: e2822004 add r2, r2, #4 e734: e3a03000 mov r3, #0 e738: e58d2018 str r2, [sp, #24] e73c: e3a07000 mov r7, #0 e740: eaffff4e b e480 <_vfiprintf_r+0x3d8> e744: e58d001c str r0, [sp, #28] e748: e3855010 orr r5, r5, #16 e74c: eaffffee b e70c <_vfiprintf_r+0x664> e750: e58d001c str r0, [sp, #28] e754: e3855010 orr r5, r5, #16 e758: eaffff3b b e44c <_vfiprintf_r+0x3a4> e75c: e3a03078 mov r3, #120 ; 0x78 e760: e3a02030 mov r2, #48 ; 0x30 e764: e59d1018 ldr r1, [sp, #24] e768: e5cd3039 strb r3, [sp, #57] ; 0x39 e76c: e2813004 add r3, r1, #4 e770: e58d3018 str r3, [sp, #24] e774: e59f3c24 ldr r3, [pc, #3108] ; f3a0 <_vfiprintf_r+0x12f8> e778: e58d001c str r0, [sp, #28] e77c: e58d302c str r3, [sp, #44] ; 0x2c e780: e5916000 ldr r6, [r1] e784: e3855002 orr r5, r5, #2 e788: e5cd2038 strb r2, [sp, #56] ; 0x38 e78c: e3a07000 mov r7, #0 e790: e3a03002 mov r3, #2 e794: eaffff39 b e480 <_vfiprintf_r+0x3d8> e798: e3855020 orr r5, r5, #32 e79c: e5d93000 ldrb r3, [r9] e7a0: eafffe97 b e204 <_vfiprintf_r+0x15c> e7a4: e59d3018 ldr r3, [sp, #24] e7a8: e5932000 ldr r2, [r3] e7ac: e58d2024 str r2, [sp, #36] ; 0x24 e7b0: e3520000 cmp r2, #0 e7b4: e3a02000 mov r2, #0 e7b8: e58d001c str r0, [sp, #28] e7bc: e5cd2037 strb r2, [sp, #55] ; 0x37 e7c0: e2834004 add r4, r3, #4 e7c4: 0a0002d1 beq f310 <_vfiprintf_r+0x1268> e7c8: e37a0001 cmn sl, #1 e7cc: 0a0002b8 beq f2b4 <_vfiprintf_r+0x120c> e7d0: e59d6024 ldr r6, [sp, #36] ; 0x24 e7d4: e1a0200a mov r2, sl e7d8: e3a01000 mov r1, #0 e7dc: e1a00006 mov r0, r6 e7e0: eb000aef bl 113a4 e7e4: e3500000 cmp r0, #0 e7e8: 0a0002d1 beq f334 <_vfiprintf_r+0x128c> e7ec: e0403006 sub r3, r0, r6 e7f0: e58d4018 str r4, [sp, #24] e7f4: e58d3010 str r3, [sp, #16] e7f8: e58d5004 str r5, [sp, #4] e7fc: e5dd4037 ldrb r4, [sp, #55] ; 0x37 e800: e3a0a000 mov sl, #0 e804: eaffff31 b e4d0 <_vfiprintf_r+0x428> e808: e5d93000 ldrb r3, [r9] e80c: e353002a cmp r3, #42 ; 0x2a e810: e289a001 add sl, r9, #1 e814: 0a0002d5 beq f370 <_vfiprintf_r+0x12c8> e818: e2432030 sub r2, r3, #48 ; 0x30 e81c: e3520009 cmp r2, #9 e820: e1a0900a mov r9, sl e824: e3a0a000 mov sl, #0 e828: 8afffe76 bhi e208 <_vfiprintf_r+0x160> e82c: e4d93001 ldrb r3, [r9], #1 e830: e08aa10a add sl, sl, sl, lsl #2 e834: e082a08a add sl, r2, sl, lsl #1 e838: e2432030 sub r2, r3, #48 ; 0x30 e83c: e3520009 cmp r2, #9 e840: 9afffff9 bls e82c <_vfiprintf_r+0x784> e844: eafffe6f b e208 <_vfiprintf_r+0x160> e848: e3855040 orr r5, r5, #64 ; 0x40 e84c: e5d93000 ldrb r3, [r9] e850: eafffe6b b e204 <_vfiprintf_r+0x15c> e854: e5d93000 ldrb r3, [r9] e858: e353006c cmp r3, #108 ; 0x6c e85c: 05d93001 ldrbeq r3, [r9, #1] e860: 03855020 orreq r5, r5, #32 e864: 02899001 addeq r9, r9, #1 e868: 13855010 orrne r5, r5, #16 e86c: eafffe64 b e204 <_vfiprintf_r+0x15c> e870: e5d93000 ldrb r3, [r9] e874: e1a0100e mov r1, lr e878: e1a0c004 mov ip, r4 e87c: eafffe60 b e204 <_vfiprintf_r+0x15c> e880: e3855080 orr r5, r5, #128 ; 0x80 e884: e5d93000 ldrb r3, [r9] e888: eafffe5d b e204 <_vfiprintf_r+0x15c> e88c: e3a00000 mov r0, #0 e890: e2432030 sub r2, r3, #48 ; 0x30 e894: e4d93001 ldrb r3, [r9], #1 e898: e0800100 add r0, r0, r0, lsl #2 e89c: e0820080 add r0, r2, r0, lsl #1 e8a0: e2432030 sub r2, r3, #48 ; 0x30 e8a4: e3520009 cmp r2, #9 e8a8: 9afffff9 bls e894 <_vfiprintf_r+0x7ec> e8ac: eafffe55 b e208 <_vfiprintf_r+0x160> e8b0: e3510000 cmp r1, #0 e8b4: e58d001c str r0, [sp, #28] e8b8: 15cdc037 strbne ip, [sp, #55] ; 0x37 e8bc: e3855010 orr r5, r5, #16 e8c0: e3150020 tst r5, #32 e8c4: 1a0001ff bne f0c8 <_vfiprintf_r+0x1020> e8c8: e3150010 tst r5, #16 e8cc: 1a00025a bne f23c <_vfiprintf_r+0x1194> e8d0: e3150040 tst r5, #64 ; 0x40 e8d4: 0a000241 beq f1e0 <_vfiprintf_r+0x1138> e8d8: e59d3018 ldr r3, [sp, #24] e8dc: e1d360f0 ldrsh r6, [r3] e8e0: e2833004 add r3, r3, #4 e8e4: e1a07fc6 asr r7, r6, #31 e8e8: e58d3018 str r3, [sp, #24] e8ec: e1a02006 mov r2, r6 e8f0: e1a03007 mov r3, r7 e8f4: e3520000 cmp r2, #0 e8f8: e2d33000 sbcs r3, r3, #0 e8fc: ba000229 blt f1a8 <_vfiprintf_r+0x1100> e900: e37a0001 cmn sl, #1 e904: e5dd4037 ldrb r4, [sp, #55] ; 0x37 e908: e3a03001 mov r3, #1 e90c: 1afffee0 bne e494 <_vfiprintf_r+0x3ec> e910: e3530001 cmp r3, #1 e914: 0a000180 beq ef1c <_vfiprintf_r+0xe74> e918: e3530002 cmp r3, #2 e91c: 11a01008 movne r1, r8 e920: 1a000153 bne ee74 <_vfiprintf_r+0xdcc> e924: e1a02008 mov r2, r8 e928: e59dc02c ldr ip, [sp, #44] ; 0x2c e92c: e1a03226 lsr r3, r6, #4 e930: e1833e07 orr r3, r3, r7, lsl #28 e934: e1a00227 lsr r0, r7, #4 e938: e206100f and r1, r6, #15 e93c: e1a07000 mov r7, r0 e940: e1a06003 mov r6, r3 e944: e7dc3001 ldrb r3, [ip, r1] e948: e1961007 orrs r1, r6, r7 e94c: e5623001 strb r3, [r2, #-1]! e950: 1afffff5 bne e92c <_vfiprintf_r+0x884> e954: e0483002 sub r3, r8, r2 e958: e58d2024 str r2, [sp, #36] ; 0x24 e95c: e58d5004 str r5, [sp, #4] e960: e58d3010 str r3, [sp, #16] e964: eafffed9 b e4d0 <_vfiprintf_r+0x428> e968: e3510000 cmp r1, #0 e96c: 15cdc037 strbne ip, [sp, #55] ; 0x37 e970: e3150020 tst r5, #32 e974: 1a00023d bne f270 <_vfiprintf_r+0x11c8> e978: e3150010 tst r5, #16 e97c: 1a000053 bne ead0 <_vfiprintf_r+0xa28> e980: e3150040 tst r5, #64 ; 0x40 e984: 0a000051 beq ead0 <_vfiprintf_r+0xa28> e988: e59d2018 ldr r2, [sp, #24] e98c: e5923000 ldr r3, [r2] e990: e2822004 add r2, r2, #4 e994: e58d2018 str r2, [sp, #24] e998: e1dd20b8 ldrh r2, [sp, #8] e99c: e1c320b0 strh r2, [r3] e9a0: eafffdee b e160 <_vfiprintf_r+0xb8> e9a4: e3510000 cmp r1, #0 e9a8: e58d001c str r0, [sp, #28] e9ac: 15cdc037 strbne ip, [sp, #55] ; 0x37 e9b0: eaffffc2 b e8c0 <_vfiprintf_r+0x818> e9b4: e59f29e8 ldr r2, [pc, #2536] ; f3a4 <_vfiprintf_r+0x12fc> e9b8: e3510000 cmp r1, #0 e9bc: e58d001c str r0, [sp, #28] e9c0: 15cdc037 strbne ip, [sp, #55] ; 0x37 e9c4: e58d202c str r2, [sp, #44] ; 0x2c e9c8: e3150020 tst r5, #32 e9cc: e59d2018 ldr r2, [sp, #24] e9d0: 1a0001c5 bne f0ec <_vfiprintf_r+0x1044> e9d4: e3150010 tst r5, #16 e9d8: 1a00021a bne f248 <_vfiprintf_r+0x11a0> e9dc: e3150040 tst r5, #64 ; 0x40 e9e0: 13a07000 movne r7, #0 e9e4: 03a07000 moveq r7, #0 e9e8: 11d260b0 ldrhne r6, [r2] e9ec: 05926000 ldreq r6, [r2] e9f0: 12822004 addne r2, r2, #4 e9f4: 02822004 addeq r2, r2, #4 e9f8: 158d2018 strne r2, [sp, #24] e9fc: 058d2018 streq r2, [sp, #24] ea00: e3150001 tst r5, #1 ea04: 0a00016e beq efc4 <_vfiprintf_r+0xf1c> ea08: e1962007 orrs r2, r6, r7 ea0c: 0a00016c beq efc4 <_vfiprintf_r+0xf1c> ea10: e3a02030 mov r2, #48 ; 0x30 ea14: e5cd3039 strb r3, [sp, #57] ; 0x39 ea18: e3855002 orr r5, r5, #2 ea1c: e5cd2038 strb r2, [sp, #56] ; 0x38 ea20: e3a03002 mov r3, #2 ea24: eafffe95 b e480 <_vfiprintf_r+0x3d8> ea28: e3a07001 mov r7, #1 ea2c: e3a01000 mov r1, #0 ea30: e59d2018 ldr r2, [sp, #24] ea34: e5923000 ldr r3, [r2] ea38: e5cd3048 strb r3, [sp, #72] ; 0x48 ea3c: e2823004 add r3, r2, #4 ea40: e58d3018 str r3, [sp, #24] ea44: e28d3048 add r3, sp, #72 ; 0x48 ea48: e58d001c str r0, [sp, #28] ea4c: e5cd1037 strb r1, [sp, #55] ; 0x37 ea50: e58d7010 str r7, [sp, #16] ea54: e58d3024 str r3, [sp, #36] ; 0x24 ea58: e58d5004 str r5, [sp, #4] ea5c: e3a0a000 mov sl, #0 ea60: eafffea0 b e4e8 <_vfiprintf_r+0x440> ea64: e3855001 orr r5, r5, #1 ea68: e5d93000 ldrb r3, [r9] ea6c: eafffde4 b e204 <_vfiprintf_r+0x15c> ea70: e59f2928 ldr r2, [pc, #2344] ; f3a0 <_vfiprintf_r+0x12f8> ea74: e3510000 cmp r1, #0 ea78: e58d001c str r0, [sp, #28] ea7c: 15cdc037 strbne ip, [sp, #55] ; 0x37 ea80: e58d202c str r2, [sp, #44] ; 0x2c ea84: eaffffcf b e9c8 <_vfiprintf_r+0x920> ea88: e35c0000 cmp ip, #0 ea8c: e5d93000 ldrb r3, [r9] ea90: 01a0100e moveq r1, lr ea94: 01a0c006 moveq ip, r6 ea98: eafffdd9 b e204 <_vfiprintf_r+0x15c> ea9c: e3510000 cmp r1, #0 eaa0: 15cdc037 strbne ip, [sp, #55] ; 0x37 eaa4: e3530000 cmp r3, #0 eaa8: e58d001c str r0, [sp, #28] eaac: 0a0001f7 beq f290 <_vfiprintf_r+0x11e8> eab0: e5cd3048 strb r3, [sp, #72] ; 0x48 eab4: e3a03000 mov r3, #0 eab8: e3a07001 mov r7, #1 eabc: e5cd3037 strb r3, [sp, #55] ; 0x37 eac0: e28d3048 add r3, sp, #72 ; 0x48 eac4: e58d7010 str r7, [sp, #16] eac8: e58d3024 str r3, [sp, #36] ; 0x24 eacc: eaffffe1 b ea58 <_vfiprintf_r+0x9b0> ead0: e59d2018 ldr r2, [sp, #24] ead4: e5923000 ldr r3, [r2] ead8: e2822004 add r2, r2, #4 eadc: e58d2018 str r2, [sp, #24] eae0: e59d2008 ldr r2, [sp, #8] eae4: e5832000 str r2, [r3] eae8: eafffd9c b e160 <_vfiprintf_r+0xb8> eaec: e28d203c add r2, sp, #60 ; 0x3c eaf0: e59d100c ldr r1, [sp, #12] eaf4: e1a00007 mov r0, r7 eaf8: e58d3028 str r3, [sp, #40] ; 0x28 eafc: ebfffd37 bl dfe0 <__sprint_r.part.0> eb00: e3500000 cmp r0, #0 eb04: 1a000114 bne ef5c <_vfiprintf_r+0xeb4> eb08: e59dc040 ldr ip, [sp, #64] ; 0x40 eb0c: e1a0e008 mov lr, r8 eb10: e59d2044 ldr r2, [sp, #68] ; 0x44 eb14: e28c1001 add r1, ip, #1 eb18: e59d3028 ldr r3, [sp, #40] ; 0x28 eb1c: eafffe89 b e548 <_vfiprintf_r+0x4a0> eb20: e28d203c add r2, sp, #60 ; 0x3c eb24: e59d100c ldr r1, [sp, #12] eb28: e59d0014 ldr r0, [sp, #20] eb2c: ebfffd2b bl dfe0 <__sprint_r.part.0> eb30: e3500000 cmp r0, #0 eb34: 1a000108 bne ef5c <_vfiprintf_r+0xeb4> eb38: e1a0b008 mov fp, r8 eb3c: e28d1040 add r1, sp, #64 ; 0x40 eb40: e8910006 ldm r1, {r1, r2} eb44: e2810001 add r0, r1, #1 eb48: e5ddc037 ldrb ip, [sp, #55] ; 0x37 eb4c: e35c0000 cmp ip, #0 eb50: 0afffea8 beq e5f8 <_vfiprintf_r+0x550> eb54: e3a01001 mov r1, #1 eb58: e28dc037 add ip, sp, #55 ; 0x37 eb5c: e0822001 add r2, r2, r1 eb60: e3500007 cmp r0, #7 eb64: e58d2044 str r2, [sp, #68] ; 0x44 eb68: e58d0040 str r0, [sp, #64] ; 0x40 eb6c: e58b1004 str r1, [fp, #4] eb70: e58bc000 str ip, [fp] eb74: dafffe9c ble e5ec <_vfiprintf_r+0x544> eb78: e3520000 cmp r2, #0 eb7c: 1a000133 bne f050 <_vfiprintf_r+0xfa8> eb80: e59d3020 ldr r3, [sp, #32] eb84: e3530000 cmp r3, #0 eb88: 0afffea8 beq e630 <_vfiprintf_r+0x588> eb8c: e3a02002 mov r2, #2 eb90: e1a00001 mov r0, r1 eb94: e1a0b008 mov fp, r8 eb98: e28d3038 add r3, sp, #56 ; 0x38 eb9c: e58d2074 str r2, [sp, #116] ; 0x74 eba0: e58d3070 str r3, [sp, #112] ; 0x70 eba4: e1a01000 mov r1, r0 eba8: e28bb008 add fp, fp, #8 ebac: e2800001 add r0, r0, #1 ebb0: e3560080 cmp r6, #128 ; 0x80 ebb4: 0afffea2 beq e644 <_vfiprintf_r+0x59c> ebb8: e59d3010 ldr r3, [sp, #16] ebbc: e04aa003 sub sl, sl, r3 ebc0: e35a0000 cmp sl, #0 ebc4: da000057 ble ed28 <_vfiprintf_r+0xc80> ebc8: e35a0010 cmp sl, #16 ebcc: da000019 ble ec38 <_vfiprintf_r+0xb90> ebd0: e3a04010 mov r4, #16 ebd4: e59d5014 ldr r5, [sp, #20] ebd8: e59d600c ldr r6, [sp, #12] ebdc: ea000005 b ebf8 <_vfiprintf_r+0xb50> ebe0: e2810002 add r0, r1, #2 ebe4: e1a01003 mov r1, r3 ebe8: e28bb008 add fp, fp, #8 ebec: e24aa010 sub sl, sl, #16 ebf0: e35a0010 cmp sl, #16 ebf4: da00000f ble ec38 <_vfiprintf_r+0xb90> ebf8: e2813001 add r3, r1, #1 ebfc: e59f0798 ldr r0, [pc, #1944] ; f39c <_vfiprintf_r+0x12f4> ec00: e2822010 add r2, r2, #16 ec04: e3530007 cmp r3, #7 ec08: e58d2044 str r2, [sp, #68] ; 0x44 ec0c: e88b0011 stm fp, {r0, r4} ec10: e58d3040 str r3, [sp, #64] ; 0x40 ec14: dafffff1 ble ebe0 <_vfiprintf_r+0xb38> ec18: e3520000 cmp r2, #0 ec1c: 1a00002c bne ecd4 <_vfiprintf_r+0xc2c> ec20: e24aa010 sub sl, sl, #16 ec24: e35a0010 cmp sl, #16 ec28: e3a00001 mov r0, #1 ec2c: e3a01000 mov r1, #0 ec30: e1a0b008 mov fp, r8 ec34: caffffef bgt ebf8 <_vfiprintf_r+0xb50> ec38: e59f375c ldr r3, [pc, #1884] ; f39c <_vfiprintf_r+0x12f4> ec3c: e3500007 cmp r0, #7 ec40: e082200a add r2, r2, sl ec44: e88b0408 stm fp, {r3, sl} ec48: e58d0040 str r0, [sp, #64] ; 0x40 ec4c: e58d2044 str r2, [sp, #68] ; 0x44 ec50: d28bb008 addle fp, fp, #8 ec54: d2800001 addle r0, r0, #1 ec58: da000032 ble ed28 <_vfiprintf_r+0xc80> ec5c: e3520000 cmp r2, #0 ec60: 1a000026 bne ed00 <_vfiprintf_r+0xc58> ec64: e3a03001 mov r3, #1 ec68: e1a0b008 mov fp, r8 ec6c: e59d2010 ldr r2, [sp, #16] ec70: e59d1024 ldr r1, [sp, #36] ; 0x24 ec74: e58d2074 str r2, [sp, #116] ; 0x74 ec78: e58d2044 str r2, [sp, #68] ; 0x44 ec7c: e58d1070 str r1, [sp, #112] ; 0x70 ec80: e58d3040 str r3, [sp, #64] ; 0x40 ec84: e28bb008 add fp, fp, #8 ec88: e59d3004 ldr r3, [sp, #4] ec8c: e3130004 tst r3, #4 ec90: 0a000003 beq eca4 <_vfiprintf_r+0xbfc> ec94: e59d301c ldr r3, [sp, #28] ec98: e0434007 sub r4, r3, r7 ec9c: e3540000 cmp r4, #0 eca0: ca000033 bgt ed74 <_vfiprintf_r+0xccc> eca4: e59d3008 ldr r3, [sp, #8] eca8: e59d101c ldr r1, [sp, #28] ecac: e1510007 cmp r1, r7 ecb0: a0833001 addge r3, r3, r1 ecb4: b0833007 addlt r3, r3, r7 ecb8: e3520000 cmp r2, #0 ecbc: e58d3008 str r3, [sp, #8] ecc0: 1a00009f bne ef44 <_vfiprintf_r+0xe9c> ecc4: e3a03000 mov r3, #0 ecc8: e1a0b008 mov fp, r8 eccc: e58d3040 str r3, [sp, #64] ; 0x40 ecd0: eafffd22 b e160 <_vfiprintf_r+0xb8> ecd4: e28d203c add r2, sp, #60 ; 0x3c ecd8: e1a01006 mov r1, r6 ecdc: e1a00005 mov r0, r5 ece0: ebfffcbe bl dfe0 <__sprint_r.part.0> ece4: e3500000 cmp r0, #0 ece8: 1a0000f4 bne f0c0 <_vfiprintf_r+0x1018> ecec: e28d1040 add r1, sp, #64 ; 0x40 ecf0: e8910006 ldm r1, {r1, r2} ecf4: e1a0b008 mov fp, r8 ecf8: e2810001 add r0, r1, #1 ecfc: eaffffba b ebec <_vfiprintf_r+0xb44> ed00: e28d203c add r2, sp, #60 ; 0x3c ed04: e59d100c ldr r1, [sp, #12] ed08: e59d0014 ldr r0, [sp, #20] ed0c: ebfffcb3 bl dfe0 <__sprint_r.part.0> ed10: e3500000 cmp r0, #0 ed14: 1a000090 bne ef5c <_vfiprintf_r+0xeb4> ed18: e1a0b008 mov fp, r8 ed1c: e28d0040 add r0, sp, #64 ; 0x40 ed20: e8900005 ldm r0, {r0, r2} ed24: e2800001 add r0, r0, #1 ed28: e59d3010 ldr r3, [sp, #16] ed2c: e59d1024 ldr r1, [sp, #36] ; 0x24 ed30: e0832002 add r2, r3, r2 ed34: e3500007 cmp r0, #7 ed38: e58d2044 str r2, [sp, #68] ; 0x44 ed3c: e88b000a stm fp, {r1, r3} ed40: e58d0040 str r0, [sp, #64] ; 0x40 ed44: daffffce ble ec84 <_vfiprintf_r+0xbdc> ed48: e3520000 cmp r2, #0 ed4c: 1a00009e bne efcc <_vfiprintf_r+0xf24> ed50: e59d3004 ldr r3, [sp, #4] ed54: e3130004 tst r3, #4 ed58: e58d2040 str r2, [sp, #64] ; 0x40 ed5c: 0a000031 beq ee28 <_vfiprintf_r+0xd80> ed60: e59d301c ldr r3, [sp, #28] ed64: e0434007 sub r4, r3, r7 ed68: e3540000 cmp r4, #0 ed6c: c1a0b008 movgt fp, r8 ed70: da00002c ble ee28 <_vfiprintf_r+0xd80> ed74: e3540010 cmp r4, #16 ed78: d59d0040 ldrle r0, [sp, #64] ; 0x40 ed7c: d2800001 addle r0, r0, #1 ed80: da00001f ble ee04 <_vfiprintf_r+0xd5c> ed84: e1a0c00b mov ip, fp ed88: e3a05010 mov r5, #16 ed8c: e1a0b004 mov fp, r4 ed90: e3a06001 mov r6, #1 ed94: e59d1040 ldr r1, [sp, #64] ; 0x40 ed98: e59da014 ldr sl, [sp, #20] ed9c: e59d400c ldr r4, [sp, #12] eda0: ea000005 b edbc <_vfiprintf_r+0xd14> eda4: e2810002 add r0, r1, #2 eda8: e1a01003 mov r1, r3 edac: e28cc008 add ip, ip, #8 edb0: e24bb010 sub fp, fp, #16 edb4: e35b0010 cmp fp, #16 edb8: da00000f ble edfc <_vfiprintf_r+0xd54> edbc: e2813001 add r3, r1, #1 edc0: e59f05d0 ldr r0, [pc, #1488] ; f398 <_vfiprintf_r+0x12f0> edc4: e2822010 add r2, r2, #16 edc8: e3530007 cmp r3, #7 edcc: e58d2044 str r2, [sp, #68] ; 0x44 edd0: e88c0021 stm ip, {r0, r5} edd4: e58d3040 str r3, [sp, #64] ; 0x40 edd8: dafffff1 ble eda4 <_vfiprintf_r+0xcfc> eddc: e3520000 cmp r2, #0 ede0: 1a000017 bne ee44 <_vfiprintf_r+0xd9c> ede4: e24bb010 sub fp, fp, #16 ede8: e35b0010 cmp fp, #16 edec: e1a00006 mov r0, r6 edf0: e3a01000 mov r1, #0 edf4: e1a0c008 mov ip, r8 edf8: caffffef bgt edbc <_vfiprintf_r+0xd14> edfc: e1a0400b mov r4, fp ee00: e1a0b00c mov fp, ip ee04: e59f358c ldr r3, [pc, #1420] ; f398 <_vfiprintf_r+0x12f0> ee08: e0822004 add r2, r2, r4 ee0c: e3500007 cmp r0, #7 ee10: e58d2044 str r2, [sp, #68] ; 0x44 ee14: e88b0018 stm fp, {r3, r4} ee18: e58d0040 str r0, [sp, #64] ; 0x40 ee1c: daffffa0 ble eca4 <_vfiprintf_r+0xbfc> ee20: e3520000 cmp r2, #0 ee24: 1a0000f5 bne f200 <_vfiprintf_r+0x1158> ee28: e59d3008 ldr r3, [sp, #8] ee2c: e59d201c ldr r2, [sp, #28] ee30: e1520007 cmp r2, r7 ee34: a0833002 addge r3, r3, r2 ee38: b0833007 addlt r3, r3, r7 ee3c: e58d3008 str r3, [sp, #8] ee40: eaffff9f b ecc4 <_vfiprintf_r+0xc1c> ee44: e28d203c add r2, sp, #60 ; 0x3c ee48: e1a01004 mov r1, r4 ee4c: e1a0000a mov r0, sl ee50: ebfffc62 bl dfe0 <__sprint_r.part.0> ee54: e3500000 cmp r0, #0 ee58: 1a000113 bne f2ac <_vfiprintf_r+0x1204> ee5c: e28d1040 add r1, sp, #64 ; 0x40 ee60: e8910006 ldm r1, {r1, r2} ee64: e1a0c008 mov ip, r8 ee68: e2810001 add r0, r1, #1 ee6c: eaffffcf b edb0 <_vfiprintf_r+0xd08> ee70: e1a01002 mov r1, r2 ee74: e1a021a6 lsr r2, r6, #3 ee78: e1822e87 orr r2, r2, r7, lsl #29 ee7c: e1a001a7 lsr r0, r7, #3 ee80: e2063007 and r3, r6, #7 ee84: e1a07000 mov r7, r0 ee88: e1a06002 mov r6, r2 ee8c: e2833030 add r3, r3, #48 ; 0x30 ee90: e1962007 orrs r2, r6, r7 ee94: e5413001 strb r3, [r1, #-1] ee98: e2412001 sub r2, r1, #1 ee9c: 1afffff3 bne ee70 <_vfiprintf_r+0xdc8> eea0: e3530030 cmp r3, #48 ; 0x30 eea4: 03a03000 moveq r3, #0 eea8: 12053001 andne r3, r5, #1 eeac: e3530000 cmp r3, #0 eeb0: 0a0000e9 beq f25c <_vfiprintf_r+0x11b4> eeb4: e3a03030 mov r3, #48 ; 0x30 eeb8: e2411002 sub r1, r1, #2 eebc: e58d1024 str r1, [sp, #36] ; 0x24 eec0: e0481001 sub r1, r8, r1 eec4: e58d5004 str r5, [sp, #4] eec8: e58d1010 str r1, [sp, #16] eecc: e5423001 strb r3, [r2, #-1] eed0: eafffd7e b e4d0 <_vfiprintf_r+0x428> eed4: e28d203c add r2, sp, #60 ; 0x3c eed8: e59d100c ldr r1, [sp, #12] eedc: e1a00004 mov r0, r4 eee0: ebfffc3e bl dfe0 <__sprint_r.part.0> eee4: e3500000 cmp r0, #0 eee8: 1a00001b bne ef5c <_vfiprintf_r+0xeb4> eeec: e28d1040 add r1, sp, #64 ; 0x40 eef0: e8910006 ldm r1, {r1, r2} eef4: e1a0e008 mov lr, r8 eef8: e281c001 add ip, r1, #1 eefc: eafffde0 b e684 <_vfiprintf_r+0x5dc> ef00: e3a03000 mov r3, #0 ef04: e58d8024 str r8, [sp, #36] ; 0x24 ef08: e58d3010 str r3, [sp, #16] ef0c: eafffd6f b e4d0 <_vfiprintf_r+0x428> ef10: e3530001 cmp r3, #1 ef14: e1a05002 mov r5, r2 ef18: 1afffe7e bne e918 <_vfiprintf_r+0x870> ef1c: e3570000 cmp r7, #0 ef20: 03560009 cmpeq r6, #9 ef24: 8a000086 bhi f144 <_vfiprintf_r+0x109c> ef28: e28d20b0 add r2, sp, #176 ; 0xb0 ef2c: e2866030 add r6, r6, #48 ; 0x30 ef30: e5626041 strb r6, [r2, #-65]! ; 0xffffffbf ef34: e58d5004 str r5, [sp, #4] ef38: e58d3010 str r3, [sp, #16] ef3c: e58d2024 str r2, [sp, #36] ; 0x24 ef40: eafffd62 b e4d0 <_vfiprintf_r+0x428> ef44: e28d203c add r2, sp, #60 ; 0x3c ef48: e59d100c ldr r1, [sp, #12] ef4c: e59d0014 ldr r0, [sp, #20] ef50: ebfffc22 bl dfe0 <__sprint_r.part.0> ef54: e3500000 cmp r0, #0 ef58: 0affff59 beq ecc4 <_vfiprintf_r+0xc1c> ef5c: e59da00c ldr sl, [sp, #12] ef60: e59a3064 ldr r3, [sl, #100] ; 0x64 ef64: e3130001 tst r3, #1 ef68: e1da30bc ldrh r3, [sl, #12] ef6c: 1a000001 bne ef78 <_vfiprintf_r+0xed0> ef70: e3130c02 tst r3, #512 ; 0x200 ef74: 0a000031 beq f040 <_vfiprintf_r+0xf98> ef78: e3130040 tst r3, #64 ; 0x40 ef7c: 0afffd21 beq e408 <_vfiprintf_r+0x360> ef80: e3e03000 mvn r3, #0 ef84: e58d3008 str r3, [sp, #8] ef88: e59d0008 ldr r0, [sp, #8] ef8c: e28dd0b4 add sp, sp, #180 ; 0xb4 ef90: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} ef94: e12fff1e bx lr ef98: e59a3064 ldr r3, [sl, #100] ; 0x64 ef9c: e3130001 tst r3, #1 efa0: 1afffff6 bne ef80 <_vfiprintf_r+0xed8> efa4: e1da30bc ldrh r3, [sl, #12] efa8: e3130c02 tst r3, #512 ; 0x200 efac: 1afffff3 bne ef80 <_vfiprintf_r+0xed8> efb0: e59a0058 ldr r0, [sl, #88] ; 0x58 efb4: eb00068e bl 109f4 <__retarget_lock_release_recursive> efb8: e3e03000 mvn r3, #0 efbc: e58d3008 str r3, [sp, #8] efc0: eafffd10 b e408 <_vfiprintf_r+0x360> efc4: e3a03002 mov r3, #2 efc8: eafffd2c b e480 <_vfiprintf_r+0x3d8> efcc: e28d203c add r2, sp, #60 ; 0x3c efd0: e59d100c ldr r1, [sp, #12] efd4: e59d0014 ldr r0, [sp, #20] efd8: ebfffc00 bl dfe0 <__sprint_r.part.0> efdc: e3500000 cmp r0, #0 efe0: 1affffdd bne ef5c <_vfiprintf_r+0xeb4> efe4: e1a0b008 mov fp, r8 efe8: e59d2044 ldr r2, [sp, #68] ; 0x44 efec: eaffff25 b ec88 <_vfiprintf_r+0xbe0> eff0: e28d203c add r2, sp, #60 ; 0x3c eff4: e59d100c ldr r1, [sp, #12] eff8: e59d0014 ldr r0, [sp, #20] effc: ebfffbf7 bl dfe0 <__sprint_r.part.0> f000: e3500000 cmp r0, #0 f004: 1affffd4 bne ef5c <_vfiprintf_r+0xeb4> f008: e1a0b008 mov fp, r8 f00c: eafffc69 b e1b8 <_vfiprintf_r+0x110> f010: e2822004 add r2, r2, #4 f014: e5936000 ldr r6, [r3] f018: e3a07000 mov r7, #0 f01c: e3a03000 mov r3, #0 f020: e58d2018 str r2, [sp, #24] f024: eafffd15 b e480 <_vfiprintf_r+0x3d8> f028: e2822004 add r2, r2, #4 f02c: e5936000 ldr r6, [r3] f030: e3a07000 mov r7, #0 f034: e3a03001 mov r3, #1 f038: e58d2018 str r2, [sp, #24] f03c: eafffd0f b e480 <_vfiprintf_r+0x3d8> f040: e59a0058 ldr r0, [sl, #88] ; 0x58 f044: eb00066a bl 109f4 <__retarget_lock_release_recursive> f048: e1da30bc ldrh r3, [sl, #12] f04c: eaffffc9 b ef78 <_vfiprintf_r+0xed0> f050: e28d203c add r2, sp, #60 ; 0x3c f054: e59d100c ldr r1, [sp, #12] f058: e59d0014 ldr r0, [sp, #20] f05c: ebfffbdf bl dfe0 <__sprint_r.part.0> f060: e3500000 cmp r0, #0 f064: 1affffbc bne ef5c <_vfiprintf_r+0xeb4> f068: e28d1040 add r1, sp, #64 ; 0x40 f06c: e8910006 ldm r1, {r1, r2} f070: e1a0b008 mov fp, r8 f074: e2810001 add r0, r1, #1 f078: eafffd5e b e5f8 <_vfiprintf_r+0x550> f07c: e28d203c add r2, sp, #60 ; 0x3c f080: e59d100c ldr r1, [sp, #12] f084: e59d0014 ldr r0, [sp, #20] f088: ebfffbd4 bl dfe0 <__sprint_r.part.0> f08c: e3500000 cmp r0, #0 f090: 1affffb1 bne ef5c <_vfiprintf_r+0xeb4> f094: e28d1040 add r1, sp, #64 ; 0x40 f098: e8910006 ldm r1, {r1, r2} f09c: e1a0b008 mov fp, r8 f0a0: e2810001 add r0, r1, #1 f0a4: eafffec1 b ebb0 <_vfiprintf_r+0xb08> f0a8: e3520000 cmp r2, #0 f0ac: 1a000088 bne f2d4 <_vfiprintf_r+0x122c> f0b0: e3a00001 mov r0, #1 f0b4: e3a01000 mov r1, #0 f0b8: e1a0b008 mov fp, r8 f0bc: eafffebd b ebb8 <_vfiprintf_r+0xb10> f0c0: e1a0a006 mov sl, r6 f0c4: eaffffa5 b ef60 <_vfiprintf_r+0xeb8> f0c8: e59d3018 ldr r3, [sp, #24] f0cc: e2833007 add r3, r3, #7 f0d0: e3c31007 bic r1, r3, #7 f0d4: e891000c ldm r1, {r2, r3} f0d8: e2811008 add r1, r1, #8 f0dc: e58d1018 str r1, [sp, #24] f0e0: e1a06002 mov r6, r2 f0e4: e1a07003 mov r7, r3 f0e8: eafffe01 b e8f4 <_vfiprintf_r+0x84c> f0ec: e2822007 add r2, r2, #7 f0f0: e3c22007 bic r2, r2, #7 f0f4: e2821008 add r1, r2, #8 f0f8: e58d1018 str r1, [sp, #24] f0fc: e89200c0 ldm r2, {r6, r7} f100: eafffe3e b ea00 <_vfiprintf_r+0x958> f104: e59d3018 ldr r3, [sp, #24] f108: e2833007 add r3, r3, #7 f10c: e3c33007 bic r3, r3, #7 f110: e2832008 add r2, r3, #8 f114: e89300c0 ldm r3, {r6, r7} f118: e58d2018 str r2, [sp, #24] f11c: e3a03001 mov r3, #1 f120: eafffcd6 b e480 <_vfiprintf_r+0x3d8> f124: e59d3018 ldr r3, [sp, #24] f128: e2833007 add r3, r3, #7 f12c: e3c33007 bic r3, r3, #7 f130: e2832008 add r2, r3, #8 f134: e89300c0 ldm r3, {r6, r7} f138: e58d2018 str r2, [sp, #24] f13c: e3a03000 mov r3, #0 f140: eafffcce b e480 <_vfiprintf_r+0x3d8> f144: e58d4004 str r4, [sp, #4] f148: e1a04008 mov r4, r8 f14c: e1a00006 mov r0, r6 f150: e1a01007 mov r1, r7 f154: e3a0200a mov r2, #10 f158: e3a03000 mov r3, #0 f15c: eb000ccc bl 12494 <__aeabi_uldivmod> f160: e2822030 add r2, r2, #48 ; 0x30 f164: e5642001 strb r2, [r4, #-1]! f168: e1a00006 mov r0, r6 f16c: e1a01007 mov r1, r7 f170: e3a03000 mov r3, #0 f174: e3a0200a mov r2, #10 f178: eb000cc5 bl 12494 <__aeabi_uldivmod> f17c: e1a06000 mov r6, r0 f180: e1a07001 mov r7, r1 f184: e1963007 orrs r3, r6, r7 f188: 1affffef bne f14c <_vfiprintf_r+0x10a4> f18c: e1a03004 mov r3, r4 f190: e0483003 sub r3, r8, r3 f194: e58d4024 str r4, [sp, #36] ; 0x24 f198: e58d3010 str r3, [sp, #16] f19c: e59d4004 ldr r4, [sp, #4] f1a0: e58d5004 str r5, [sp, #4] f1a4: eafffcc9 b e4d0 <_vfiprintf_r+0x428> f1a8: e3a0302d mov r3, #45 ; 0x2d f1ac: e2766000 rsbs r6, r6, #0 f1b0: e5cd3037 strb r3, [sp, #55] ; 0x37 f1b4: e1a04003 mov r4, r3 f1b8: e2e77000 rsc r7, r7, #0 f1bc: e3a03001 mov r3, #1 f1c0: eafffcb1 b e48c <_vfiprintf_r+0x3e4> f1c4: e59d3020 ldr r3, [sp, #32] f1c8: e3530000 cmp r3, #0 f1cc: 1a000013 bne f220 <_vfiprintf_r+0x1178> f1d0: e3a01000 mov r1, #0 f1d4: e3a00001 mov r0, #1 f1d8: e1a0b008 mov fp, r8 f1dc: eafffe75 b ebb8 <_vfiprintf_r+0xb10> f1e0: e59d1018 ldr r1, [sp, #24] f1e4: e5916000 ldr r6, [r1] f1e8: e2811004 add r1, r1, #4 f1ec: e1a07fc6 asr r7, r6, #31 f1f0: e1a02006 mov r2, r6 f1f4: e1a03007 mov r3, r7 f1f8: e58d1018 str r1, [sp, #24] f1fc: eafffdbc b e8f4 <_vfiprintf_r+0x84c> f200: e28d203c add r2, sp, #60 ; 0x3c f204: e59d100c ldr r1, [sp, #12] f208: e59d0014 ldr r0, [sp, #20] f20c: ebfffb73 bl dfe0 <__sprint_r.part.0> f210: e3500000 cmp r0, #0 f214: 1affff50 bne ef5c <_vfiprintf_r+0xeb4> f218: e59d2044 ldr r2, [sp, #68] ; 0x44 f21c: eafffea0 b eca4 <_vfiprintf_r+0xbfc> f220: e3a02002 mov r2, #2 f224: e28d3038 add r3, sp, #56 ; 0x38 f228: e58d2074 str r2, [sp, #116] ; 0x74 f22c: e58d3070 str r3, [sp, #112] ; 0x70 f230: e3a00001 mov r0, #1 f234: e1a0b008 mov fp, r8 f238: eafffe59 b eba4 <_vfiprintf_r+0xafc> f23c: e59d3018 ldr r3, [sp, #24] f240: e5936000 ldr r6, [r3] f244: eafffda5 b e8e0 <_vfiprintf_r+0x838> f248: e5926000 ldr r6, [r2] f24c: e2822004 add r2, r2, #4 f250: e58d2018 str r2, [sp, #24] f254: e3a07000 mov r7, #0 f258: eafffde8 b ea00 <_vfiprintf_r+0x958> f25c: e0483002 sub r3, r8, r2 f260: e58d5004 str r5, [sp, #4] f264: e58d3010 str r3, [sp, #16] f268: e58d2024 str r2, [sp, #36] ; 0x24 f26c: eafffc97 b e4d0 <_vfiprintf_r+0x428> f270: e59d3018 ldr r3, [sp, #24] f274: e59d2008 ldr r2, [sp, #8] f278: e5931000 ldr r1, [r3] f27c: e2833004 add r3, r3, #4 f280: e58d3018 str r3, [sp, #24] f284: e1a03fc2 asr r3, r2, #31 f288: e881000c stm r1, {r2, r3} f28c: eafffbb3 b e160 <_vfiprintf_r+0xb8> f290: e59d3044 ldr r3, [sp, #68] ; 0x44 f294: e3530000 cmp r3, #0 f298: e59da00c ldr sl, [sp, #12] f29c: 1a00002c bne f354 <_vfiprintf_r+0x12ac> f2a0: e3a03000 mov r3, #0 f2a4: e58d3040 str r3, [sp, #64] ; 0x40 f2a8: eaffff2c b ef60 <_vfiprintf_r+0xeb8> f2ac: e1a0a004 mov sl, r4 f2b0: eaffff2a b ef60 <_vfiprintf_r+0xeb8> f2b4: e59d0024 ldr r0, [sp, #36] ; 0x24 f2b8: e58d4018 str r4, [sp, #24] f2bc: e58d5004 str r5, [sp, #4] f2c0: ebfffab3 bl dd94 f2c4: e3a0a000 mov sl, #0 f2c8: e58d0010 str r0, [sp, #16] f2cc: e5dd4037 ldrb r4, [sp, #55] ; 0x37 f2d0: eafffc7e b e4d0 <_vfiprintf_r+0x428> f2d4: e28d203c add r2, sp, #60 ; 0x3c f2d8: e59d100c ldr r1, [sp, #12] f2dc: e59d0014 ldr r0, [sp, #20] f2e0: ebfffb3e bl dfe0 <__sprint_r.part.0> f2e4: e3500000 cmp r0, #0 f2e8: 1affff1b bne ef5c <_vfiprintf_r+0xeb4> f2ec: e28d1040 add r1, sp, #64 ; 0x40 f2f0: e8910006 ldm r1, {r1, r2} f2f4: e1a0b008 mov fp, r8 f2f8: e2810001 add r0, r1, #1 f2fc: eafffe2d b ebb8 <_vfiprintf_r+0xb10> f300: e28d1040 add r1, sp, #64 ; 0x40 f304: e8910006 ldm r1, {r1, r2} f308: e2811001 add r1, r1, #1 f30c: eafffca2 b e59c <_vfiprintf_r+0x4f4> f310: e35a0006 cmp sl, #6 f314: 31a0300a movcc r3, sl f318: 23a03006 movcs r3, #6 f31c: e58d3010 str r3, [sp, #16] f320: e1a07003 mov r7, r3 f324: e59f307c ldr r3, [pc, #124] ; f3a8 <_vfiprintf_r+0x1300> f328: e58d4018 str r4, [sp, #24] f32c: e58d3024 str r3, [sp, #36] ; 0x24 f330: eafffdc8 b ea58 <_vfiprintf_r+0x9b0> f334: e58da010 str sl, [sp, #16] f338: e58d4018 str r4, [sp, #24] f33c: e58d5004 str r5, [sp, #4] f340: e3a0a000 mov sl, #0 f344: e5dd4037 ldrb r4, [sp, #55] ; 0x37 f348: eafffc60 b e4d0 <_vfiprintf_r+0x428> f34c: e1a0c000 mov ip, r0 f350: eafffce1 b e6dc <_vfiprintf_r+0x634> f354: e59d0014 ldr r0, [sp, #20] f358: e28d203c add r2, sp, #60 ; 0x3c f35c: e1a0100a mov r1, sl f360: ebfffb1e bl dfe0 <__sprint_r.part.0> f364: e3500000 cmp r0, #0 f368: 0affffcc beq f2a0 <_vfiprintf_r+0x11f8> f36c: eafffefb b ef60 <_vfiprintf_r+0xeb8> f370: e59d2018 ldr r2, [sp, #24] f374: e58da004 str sl, [sp, #4] f378: e592a000 ldr sl, [r2] f37c: e2822004 add r2, r2, #4 f380: e15a0007 cmp sl, r7 f384: e5d93001 ldrb r3, [r9, #1] f388: b1a0a007 movlt sl, r7 f38c: e59d9004 ldr r9, [sp, #4] f390: e58d2018 str r2, [sp, #24] f394: eafffb9a b e204 <_vfiprintf_r+0x15c> f398: 00013004 .word 0x00013004 f39c: 00013014 .word 0x00013014 f3a0: 00012fe8 .word 0x00012fe8 f3a4: 00012fd4 .word 0x00012fd4 f3a8: 00012ffc .word 0x00012ffc 0000f3ac : f3ac: e59fc010 ldr ip, [pc, #16] ; f3c4 f3b0: e1a03002 mov r3, r2 f3b4: e1a02001 mov r2, r1 f3b8: e1a01000 mov r1, r0 f3bc: e59c0000 ldr r0, [ip] f3c0: eafffb38 b e0a8 <_vfiprintf_r> f3c4: 0001356c .word 0x0001356c 0000f3c8 <__sbprintf>: f3c8: e92d41f0 push {r4, r5, r6, r7, r8, lr} f3cc: e1a04001 mov r4, r1 f3d0: e3a0cb01 mov ip, #1024 ; 0x400 f3d4: e3a0e000 mov lr, #0 f3d8: e1a06002 mov r6, r2 f3dc: e1a07000 mov r7, r0 f3e0: e1a08003 mov r8, r3 f3e4: e24dde46 sub sp, sp, #1120 ; 0x460 f3e8: e1d430be ldrh r3, [r4, #14] f3ec: e24dd008 sub sp, sp, #8 f3f0: e1d110bc ldrh r1, [r1, #12] f3f4: e1cd30be strh r3, [sp, #14] f3f8: e5943064 ldr r3, [r4, #100] ; 0x64 f3fc: e594201c ldr r2, [r4, #28] f400: e3c11002 bic r1, r1, #2 f404: e58d3064 str r3, [sp, #100] ; 0x64 f408: e5943024 ldr r3, [r4, #36] ; 0x24 f40c: e1cd10bc strh r1, [sp, #12] f410: e28d0058 add r0, sp, #88 ; 0x58 f414: e28d1068 add r1, sp, #104 ; 0x68 f418: e58dc008 str ip, [sp, #8] f41c: e58dc014 str ip, [sp, #20] f420: e58d201c str r2, [sp, #28] f424: e58d3024 str r3, [sp, #36] ; 0x24 f428: e58de018 str lr, [sp, #24] f42c: e58d1000 str r1, [sp] f430: e58d1010 str r1, [sp, #16] f434: eb000564 bl 109cc <__retarget_lock_init_recursive> f438: e1a02006 mov r2, r6 f43c: e1a03008 mov r3, r8 f440: e1a0100d mov r1, sp f444: e1a00007 mov r0, r7 f448: ebfffb16 bl e0a8 <_vfiprintf_r> f44c: e2506000 subs r6, r0, #0 f450: ba000004 blt f468 <__sbprintf+0xa0> f454: e1a0100d mov r1, sp f458: e1a00007 mov r0, r7 f45c: eb0000fa bl f84c <_fflush_r> f460: e3500000 cmp r0, #0 f464: 13e06000 mvnne r6, #0 f468: e1dd30bc ldrh r3, [sp, #12] f46c: e3130040 tst r3, #64 ; 0x40 f470: 11d430bc ldrhne r3, [r4, #12] f474: 13833040 orrne r3, r3, #64 ; 0x40 f478: e59d0058 ldr r0, [sp, #88] ; 0x58 f47c: 11c430bc strhne r3, [r4, #12] f480: eb000553 bl 109d4 <__retarget_lock_close_recursive> f484: e1a00006 mov r0, r6 f488: e28dde46 add sp, sp, #1120 ; 0x460 f48c: e28dd008 add sp, sp, #8 f490: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} f494: e12fff1e bx lr 0000f498 <__swsetup_r>: f498: e59f3158 ldr r3, [pc, #344] ; f5f8 <__swsetup_r+0x160> f49c: e5933000 ldr r3, [r3] f4a0: e3530000 cmp r3, #0 f4a4: e92d4070 push {r4, r5, r6, lr} f4a8: e1a05000 mov r5, r0 f4ac: e1a04001 mov r4, r1 f4b0: 0a000002 beq f4c0 <__swsetup_r+0x28> f4b4: e5932038 ldr r2, [r3, #56] ; 0x38 f4b8: e3520000 cmp r2, #0 f4bc: 0a000034 beq f594 <__swsetup_r+0xfc> f4c0: e1d420fc ldrsh r2, [r4, #12] f4c4: e1a03802 lsl r3, r2, #16 f4c8: e3130702 tst r3, #524288 ; 0x80000 f4cc: e1a03823 lsr r3, r3, #16 f4d0: 0a00000c beq f508 <__swsetup_r+0x70> f4d4: e5940010 ldr r0, [r4, #16] f4d8: e3500000 cmp r0, #0 f4dc: 0a000014 beq f534 <__swsetup_r+0x9c> f4e0: e2132001 ands r2, r3, #1 f4e4: 1a00001b bne f558 <__swsetup_r+0xc0> f4e8: e3130002 tst r3, #2 f4ec: 05942014 ldreq r2, [r4, #20] f4f0: e3500000 cmp r0, #0 f4f4: e5842008 str r2, [r4, #8] f4f8: 13a00000 movne r0, #0 f4fc: 0a00001d beq f578 <__swsetup_r+0xe0> f500: e8bd4070 pop {r4, r5, r6, lr} f504: e12fff1e bx lr f508: e3130010 tst r3, #16 f50c: 0a000033 beq f5e0 <__swsetup_r+0x148> f510: e3130004 tst r3, #4 f514: 1a000021 bne f5a0 <__swsetup_r+0x108> f518: e5940010 ldr r0, [r4, #16] f51c: e3822008 orr r2, r2, #8 f520: e1c420bc strh r2, [r4, #12] f524: e3500000 cmp r0, #0 f528: e1a02802 lsl r2, r2, #16 f52c: e1a03822 lsr r3, r2, #16 f530: 1affffea bne f4e0 <__swsetup_r+0x48> f534: e2032d0a and r2, r3, #640 ; 0x280 f538: e3520c02 cmp r2, #512 ; 0x200 f53c: 0affffe7 beq f4e0 <__swsetup_r+0x48> f540: e1a00005 mov r0, r5 f544: e1a01004 mov r1, r4 f548: eb000552 bl 10a98 <__smakebuf_r> f54c: e1d430bc ldrh r3, [r4, #12] f550: e5940010 ldr r0, [r4, #16] f554: eaffffe1 b f4e0 <__swsetup_r+0x48> f558: e3a02000 mov r2, #0 f55c: e5943014 ldr r3, [r4, #20] f560: e3500000 cmp r0, #0 f564: e2633000 rsb r3, r3, #0 f568: e5843018 str r3, [r4, #24] f56c: e5842008 str r2, [r4, #8] f570: 13a00000 movne r0, #0 f574: 1affffe1 bne f500 <__swsetup_r+0x68> f578: e1d430fc ldrsh r3, [r4, #12] f57c: e3130080 tst r3, #128 ; 0x80 f580: 13833040 orrne r3, r3, #64 ; 0x40 f584: 11c430bc strhne r3, [r4, #12] f588: 13e00000 mvnne r0, #0 f58c: e8bd4070 pop {r4, r5, r6, lr} f590: e12fff1e bx lr f594: e1a00003 mov r0, r3 f598: eb000140 bl faa0 <__sinit> f59c: eaffffc7 b f4c0 <__swsetup_r+0x28> f5a0: e5941030 ldr r1, [r4, #48] ; 0x30 f5a4: e3510000 cmp r1, #0 f5a8: 0a000007 beq f5cc <__swsetup_r+0x134> f5ac: e2843040 add r3, r4, #64 ; 0x40 f5b0: e1510003 cmp r1, r3 f5b4: 0a000002 beq f5c4 <__swsetup_r+0x12c> f5b8: e1a00005 mov r0, r5 f5bc: eb000298 bl 10024 <_free_r> f5c0: e1d420fc ldrsh r2, [r4, #12] f5c4: e3a03000 mov r3, #0 f5c8: e5843030 str r3, [r4, #48] ; 0x30 f5cc: e3a03000 mov r3, #0 f5d0: e5940010 ldr r0, [r4, #16] f5d4: e3c22024 bic r2, r2, #36 ; 0x24 f5d8: e8840009 stm r4, {r0, r3} f5dc: eaffffce b f51c <__swsetup_r+0x84> f5e0: e3a03009 mov r3, #9 f5e4: e3822040 orr r2, r2, #64 ; 0x40 f5e8: e5853000 str r3, [r5] f5ec: e3e00000 mvn r0, #0 f5f0: e1c420bc strh r2, [r4, #12] f5f4: eaffffc1 b f500 <__swsetup_r+0x68> f5f8: 0001356c .word 0x0001356c 0000f5fc : f5fc: e92d4010 push {r4, lr} f600: e3a00006 mov r0, #6 f604: eb00097f bl 11c08 f608: e3a00001 mov r0, #1 f60c: eb000c51 bl 12758 <_exit> 0000f610 <__sflush_r>: f610: e1d130fc ldrsh r3, [r1, #12] f614: e1a02803 lsl r2, r3, #16 f618: e3120702 tst r2, #524288 ; 0x80000 f61c: e92d41f0 push {r4, r5, r6, r7, r8, lr} f620: e1a05001 mov r5, r1 f624: e1a08000 mov r8, r0 f628: 1a000034 bne f700 <__sflush_r+0xf0> f62c: e5912004 ldr r2, [r1, #4] f630: e3833b02 orr r3, r3, #2048 ; 0x800 f634: e3520000 cmp r2, #0 f638: e1c130bc strh r3, [r1, #12] f63c: da000050 ble f784 <__sflush_r+0x174> f640: e5954028 ldr r4, [r5, #40] ; 0x28 f644: e3540000 cmp r4, #0 f648: 0a000050 beq f790 <__sflush_r+0x180> f64c: e3a02000 mov r2, #0 f650: e1a03803 lsl r3, r3, #16 f654: e2030201 and r0, r3, #268435456 ; 0x10000000 f658: e1b07820 lsrs r7, r0, #16 f65c: e5986000 ldr r6, [r8] f660: e1a03823 lsr r3, r3, #16 f664: e5882000 str r2, [r8] f668: 0a00005e beq f7e8 <__sflush_r+0x1d8> f66c: e5952050 ldr r2, [r5, #80] ; 0x50 f670: e3130004 tst r3, #4 f674: 0a000005 beq f690 <__sflush_r+0x80> f678: e5951030 ldr r1, [r5, #48] ; 0x30 f67c: e5953004 ldr r3, [r5, #4] f680: e3510000 cmp r1, #0 f684: e0422003 sub r2, r2, r3 f688: 1595303c ldrne r3, [r5, #60] ; 0x3c f68c: 10422003 subne r2, r2, r3 f690: e3a03000 mov r3, #0 f694: e595101c ldr r1, [r5, #28] f698: e1a00008 mov r0, r8 f69c: e1a0e00f mov lr, pc f6a0: e12fff14 bx r4 f6a4: e3700001 cmn r0, #1 f6a8: 0a00003b beq f79c <__sflush_r+0x18c> f6ac: e3a01000 mov r1, #0 f6b0: e1d530fc ldrsh r3, [r5, #12] f6b4: e5952010 ldr r2, [r5, #16] f6b8: e3c33b02 bic r3, r3, #2048 ; 0x800 f6bc: e3130a01 tst r3, #4096 ; 0x1000 f6c0: e1c530bc strh r3, [r5, #12] f6c4: e5851004 str r1, [r5, #4] f6c8: e5852000 str r2, [r5] f6cc: 1a000043 bne f7e0 <__sflush_r+0x1d0> f6d0: e5951030 ldr r1, [r5, #48] ; 0x30 f6d4: e3510000 cmp r1, #0 f6d8: e5886000 str r6, [r8] f6dc: 0a00002b beq f790 <__sflush_r+0x180> f6e0: e2853040 add r3, r5, #64 ; 0x40 f6e4: e1510003 cmp r1, r3 f6e8: 11a00008 movne r0, r8 f6ec: 1b00024c blne 10024 <_free_r> f6f0: e3a00000 mov r0, #0 f6f4: e5850030 str r0, [r5, #48] ; 0x30 f6f8: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} f6fc: e12fff1e bx lr f700: e5916010 ldr r6, [r1, #16] f704: e3560000 cmp r6, #0 f708: 0a000020 beq f790 <__sflush_r+0x180> f70c: e1a02822 lsr r2, r2, #16 f710: e3120003 tst r2, #3 f714: 13a03000 movne r3, #0 f718: e5914000 ldr r4, [r1] f71c: 05913014 ldreq r3, [r1, #20] f720: e0444006 sub r4, r4, r6 f724: e3540000 cmp r4, #0 f728: e5816000 str r6, [r1] f72c: e5813008 str r3, [r1, #8] f730: ca000003 bgt f744 <__sflush_r+0x134> f734: ea000015 b f790 <__sflush_r+0x180> f738: e3540000 cmp r4, #0 f73c: e0866000 add r6, r6, r0 f740: da000012 ble f790 <__sflush_r+0x180> f744: e1a03004 mov r3, r4 f748: e5957024 ldr r7, [r5, #36] ; 0x24 f74c: e1a02006 mov r2, r6 f750: e595101c ldr r1, [r5, #28] f754: e1a00008 mov r0, r8 f758: e1a0e00f mov lr, pc f75c: e12fff17 bx r7 f760: e3500000 cmp r0, #0 f764: e0444000 sub r4, r4, r0 f768: cafffff2 bgt f738 <__sflush_r+0x128> f76c: e3e00000 mvn r0, #0 f770: e1d530bc ldrh r3, [r5, #12] f774: e3833040 orr r3, r3, #64 ; 0x40 f778: e1c530bc strh r3, [r5, #12] f77c: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} f780: e12fff1e bx lr f784: e591203c ldr r2, [r1, #60] ; 0x3c f788: e3520000 cmp r2, #0 f78c: caffffab bgt f640 <__sflush_r+0x30> f790: e3a00000 mov r0, #0 f794: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} f798: e12fff1e bx lr f79c: e5981000 ldr r1, [r8] f7a0: e351001d cmp r1, #29 f7a4: 8afffff0 bhi f76c <__sflush_r+0x15c> f7a8: e59f3098 ldr r3, [pc, #152] ; f848 <__sflush_r+0x238> f7ac: e1e03133 mvn r3, r3, lsr r1 f7b0: e2133001 ands r3, r3, #1 f7b4: 1affffec bne f76c <__sflush_r+0x15c> f7b8: e1d520fc ldrsh r2, [r5, #12] f7bc: e595c010 ldr ip, [r5, #16] f7c0: e3c22b02 bic r2, r2, #2048 ; 0x800 f7c4: e3120a01 tst r2, #4096 ; 0x1000 f7c8: e5853004 str r3, [r5, #4] f7cc: e1c520bc strh r2, [r5, #12] f7d0: e585c000 str ip, [r5] f7d4: 0affffbd beq f6d0 <__sflush_r+0xc0> f7d8: e3510000 cmp r1, #0 f7dc: 1affffbb bne f6d0 <__sflush_r+0xc0> f7e0: e5850050 str r0, [r5, #80] ; 0x50 f7e4: eaffffb9 b f6d0 <__sflush_r+0xc0> f7e8: e1a02007 mov r2, r7 f7ec: e3a03001 mov r3, #1 f7f0: e595101c ldr r1, [r5, #28] f7f4: e1a00008 mov r0, r8 f7f8: e1a0e00f mov lr, pc f7fc: e12fff14 bx r4 f800: e3700001 cmn r0, #1 f804: e1a02000 mov r2, r0 f808: 0a000002 beq f818 <__sflush_r+0x208> f80c: e1d530bc ldrh r3, [r5, #12] f810: e5954028 ldr r4, [r5, #40] ; 0x28 f814: eaffff95 b f670 <__sflush_r+0x60> f818: e5983000 ldr r3, [r8] f81c: e3530000 cmp r3, #0 f820: 0afffff9 beq f80c <__sflush_r+0x1fc> f824: e3530016 cmp r3, #22 f828: 1353001d cmpne r3, #29 f82c: 11d530bc ldrhne r3, [r5, #12] f830: 13833040 orrne r3, r3, #64 ; 0x40 f834: 05886000 streq r6, [r8] f838: 01a00007 moveq r0, r7 f83c: 11a00002 movne r0, r2 f840: 11c530bc strhne r3, [r5, #12] f844: eaffffcc b f77c <__sflush_r+0x16c> f848: 20400001 .word 0x20400001 0000f84c <_fflush_r>: f84c: e92d4070 push {r4, r5, r6, lr} f850: e2504000 subs r4, r0, #0 f854: e1a05001 mov r5, r1 f858: 0a000002 beq f868 <_fflush_r+0x1c> f85c: e5943038 ldr r3, [r4, #56] ; 0x38 f860: e3530000 cmp r3, #0 f864: 0a000015 beq f8c0 <_fflush_r+0x74> f868: e1d500fc ldrsh r0, [r5, #12] f86c: e3500000 cmp r0, #0 f870: 01a04000 moveq r4, r0 f874: 0a00000e beq f8b4 <_fflush_r+0x68> f878: e5953064 ldr r3, [r5, #100] ; 0x64 f87c: e3130001 tst r3, #1 f880: 1a000001 bne f88c <_fflush_r+0x40> f884: e3100c02 tst r0, #512 ; 0x200 f888: 0a000013 beq f8dc <_fflush_r+0x90> f88c: e1a00004 mov r0, r4 f890: e1a01005 mov r1, r5 f894: ebffff5d bl f610 <__sflush_r> f898: e5953064 ldr r3, [r5, #100] ; 0x64 f89c: e3130001 tst r3, #1 f8a0: e1a04000 mov r4, r0 f8a4: 1a000002 bne f8b4 <_fflush_r+0x68> f8a8: e1d530bc ldrh r3, [r5, #12] f8ac: e3130c02 tst r3, #512 ; 0x200 f8b0: 0a000004 beq f8c8 <_fflush_r+0x7c> f8b4: e1a00004 mov r0, r4 f8b8: e8bd4070 pop {r4, r5, r6, lr} f8bc: e12fff1e bx lr f8c0: eb000076 bl faa0 <__sinit> f8c4: eaffffe7 b f868 <_fflush_r+0x1c> f8c8: e5950058 ldr r0, [r5, #88] ; 0x58 f8cc: eb000448 bl 109f4 <__retarget_lock_release_recursive> f8d0: e1a00004 mov r0, r4 f8d4: e8bd4070 pop {r4, r5, r6, lr} f8d8: e12fff1e bx lr f8dc: e5950058 ldr r0, [r5, #88] ; 0x58 f8e0: eb00043d bl 109dc <__retarget_lock_acquire_recursive> f8e4: eaffffe8 b f88c <_fflush_r+0x40> 0000f8e8 : f8e8: e2501000 subs r1, r0, #0 f8ec: 159f3020 ldrne r3, [pc, #32] ; f914 f8f0: 15930000 ldrne r0, [r3] f8f4: 1affffd4 bne f84c <_fflush_r> f8f8: e92d4010 push {r4, lr} f8fc: e59f3014 ldr r3, [pc, #20] ; f918 f900: e59f1014 ldr r1, [pc, #20] ; f91c f904: e5930000 ldr r0, [r3] f908: eb0003d5 bl 10864 <_fwalk_reent> f90c: e8bd4010 pop {r4, lr} f910: e12fff1e bx lr f914: 0001356c .word 0x0001356c f918: 00012fd0 .word 0x00012fd0 f91c: 0000f84c .word 0x0000f84c 0000f920 <_cleanup_r>: f920: e92d4010 push {r4, lr} f924: e59f1008 ldr r1, [pc, #8] ; f934 <_cleanup_r+0x14> f928: eb0003cd bl 10864 <_fwalk_reent> f92c: e8bd4010 pop {r4, lr} f930: e12fff1e bx lr f934: 000120f0 .word 0x000120f0 0000f938 : f938: e3a03000 mov r3, #0 f93c: e92d4010 push {r4, lr} f940: e1a04000 mov r4, r0 f944: e1c010bc strh r1, [r0, #12] f948: e1c020be strh r2, [r0, #14] f94c: e5803000 str r3, [r0] f950: e5803004 str r3, [r0, #4] f954: e5803008 str r3, [r0, #8] f958: e5803064 str r3, [r0, #100] ; 0x64 f95c: e5803010 str r3, [r0, #16] f960: e5803014 str r3, [r0, #20] f964: e5803018 str r3, [r0, #24] f968: e1a01003 mov r1, r3 f96c: e3a02008 mov r2, #8 f970: e280005c add r0, r0, #92 ; 0x5c f974: ebfff838 bl da5c f978: e59f002c ldr r0, [pc, #44] ; f9ac f97c: e59f102c ldr r1, [pc, #44] ; f9b0 f980: e59f202c ldr r2, [pc, #44] ; f9b4 f984: e59f302c ldr r3, [pc, #44] ; f9b8 f988: e5840020 str r0, [r4, #32] f98c: e584401c str r4, [r4, #28] f990: e5841024 str r1, [r4, #36] ; 0x24 f994: e5842028 str r2, [r4, #40] ; 0x28 f998: e584302c str r3, [r4, #44] ; 0x2c f99c: e2840058 add r0, r4, #88 ; 0x58 f9a0: eb000409 bl 109cc <__retarget_lock_init_recursive> f9a4: e8bd4010 pop {r4, lr} f9a8: e12fff1e bx lr f9ac: 00011cc0 .word 0x00011cc0 f9b0: 00011cfc .word 0x00011cfc f9b4: 00011d54 .word 0x00011d54 f9b8: 00011d84 .word 0x00011d84 0000f9bc <__fp_lock>: f9bc: e5903064 ldr r3, [r0, #100] ; 0x64 f9c0: e3130001 tst r3, #1 f9c4: 1a000002 bne f9d4 <__fp_lock+0x18> f9c8: e1d030bc ldrh r3, [r0, #12] f9cc: e3130c02 tst r3, #512 ; 0x200 f9d0: 0a000001 beq f9dc <__fp_lock+0x20> f9d4: e3a00000 mov r0, #0 f9d8: e12fff1e bx lr f9dc: e92d4010 push {r4, lr} f9e0: e5900058 ldr r0, [r0, #88] ; 0x58 f9e4: eb0003fc bl 109dc <__retarget_lock_acquire_recursive> f9e8: e3a00000 mov r0, #0 f9ec: e8bd4010 pop {r4, lr} f9f0: e12fff1e bx lr 0000f9f4 <__fp_unlock>: f9f4: e5903064 ldr r3, [r0, #100] ; 0x64 f9f8: e3130001 tst r3, #1 f9fc: 1a000002 bne fa0c <__fp_unlock+0x18> fa00: e1d030bc ldrh r3, [r0, #12] fa04: e3130c02 tst r3, #512 ; 0x200 fa08: 0a000001 beq fa14 <__fp_unlock+0x20> fa0c: e3a00000 mov r0, #0 fa10: e12fff1e bx lr fa14: e92d4010 push {r4, lr} fa18: e5900058 ldr r0, [r0, #88] ; 0x58 fa1c: eb0003f4 bl 109f4 <__retarget_lock_release_recursive> fa20: e3a00000 mov r0, #0 fa24: e8bd4010 pop {r4, lr} fa28: e12fff1e bx lr 0000fa2c <__sfmoreglue>: fa2c: e2412001 sub r2, r1, #1 fa30: e92d4070 push {r4, r5, r6, lr} fa34: e0824082 add r4, r2, r2, lsl #1 fa38: e0822104 add r2, r2, r4, lsl #2 fa3c: e1a04182 lsl r4, r2, #3 fa40: e1a06001 mov r6, r1 fa44: e2841074 add r1, r4, #116 ; 0x74 fa48: eb000452 bl 10b98 <_malloc_r> fa4c: e2505000 subs r5, r0, #0 fa50: 0a000006 beq fa70 <__sfmoreglue+0x44> fa54: e3a01000 mov r1, #0 fa58: e285000c add r0, r5, #12 fa5c: e5856004 str r6, [r5, #4] fa60: e2842068 add r2, r4, #104 ; 0x68 fa64: e5851000 str r1, [r5] fa68: e5850008 str r0, [r5, #8] fa6c: ebfff7fa bl da5c fa70: e1a00005 mov r0, r5 fa74: e8bd4070 pop {r4, r5, r6, lr} fa78: e12fff1e bx lr 0000fa7c <_cleanup>: fa7c: e92d4010 push {r4, lr} fa80: e59f3010 ldr r3, [pc, #16] ; fa98 <_cleanup+0x1c> fa84: e59f1010 ldr r1, [pc, #16] ; fa9c <_cleanup+0x20> fa88: e5930000 ldr r0, [r3] fa8c: eb000374 bl 10864 <_fwalk_reent> fa90: e8bd4010 pop {r4, lr} fa94: e12fff1e bx lr fa98: 00012fd0 .word 0x00012fd0 fa9c: 000120f0 .word 0x000120f0 0000faa0 <__sinit>: faa0: e92d4010 push {r4, lr} faa4: e1a04000 mov r4, r0 faa8: e59f007c ldr r0, [pc, #124] ; fb2c <__sinit+0x8c> faac: eb0003ca bl 109dc <__retarget_lock_acquire_recursive> fab0: e5942038 ldr r2, [r4, #56] ; 0x38 fab4: e3520000 cmp r2, #0 fab8: 1a000017 bne fb1c <__sinit+0x7c> fabc: e3a00003 mov r0, #3 fac0: e59f1068 ldr r1, [pc, #104] ; fb30 <__sinit+0x90> fac4: e2843fbb add r3, r4, #748 ; 0x2ec fac8: e58432e8 str r3, [r4, #744] ; 0x2e8 facc: e58422e0 str r2, [r4, #736] ; 0x2e0 fad0: e58402e4 str r0, [r4, #740] ; 0x2e4 fad4: e584103c str r1, [r4, #60] ; 0x3c fad8: e5940004 ldr r0, [r4, #4] fadc: e3a01004 mov r1, #4 fae0: ebffff94 bl f938 fae4: e5940008 ldr r0, [r4, #8] fae8: e3a02001 mov r2, #1 faec: e3a01009 mov r1, #9 faf0: ebffff90 bl f938 faf4: e594000c ldr r0, [r4, #12] faf8: e3a02002 mov r2, #2 fafc: e3a01012 mov r1, #18 fb00: ebffff8c bl f938 fb04: e3a03001 mov r3, #1 fb08: e59f001c ldr r0, [pc, #28] ; fb2c <__sinit+0x8c> fb0c: e5843038 str r3, [r4, #56] ; 0x38 fb10: eb0003b7 bl 109f4 <__retarget_lock_release_recursive> fb14: e8bd4010 pop {r4, lr} fb18: e12fff1e bx lr fb1c: e59f0008 ldr r0, [pc, #8] ; fb2c <__sinit+0x8c> fb20: eb0003b3 bl 109f4 <__retarget_lock_release_recursive> fb24: e8bd4010 pop {r4, lr} fb28: e12fff1e bx lr fb2c: 0003c18c .word 0x0003c18c fb30: 0000f920 .word 0x0000f920 0000fb34 <__sfp>: fb34: e92d41f0 push {r4, r5, r6, r7, r8, lr} fb38: e1a06000 mov r6, r0 fb3c: e59f0108 ldr r0, [pc, #264] ; fc4c <__sfp+0x118> fb40: eb0003a5 bl 109dc <__retarget_lock_acquire_recursive> fb44: e59f3104 ldr r3, [pc, #260] ; fc50 <__sfp+0x11c> fb48: e5935000 ldr r5, [r3] fb4c: e5953038 ldr r3, [r5, #56] ; 0x38 fb50: e3530000 cmp r3, #0 fb54: 0a00002d beq fc10 <__sfp+0xdc> fb58: e3a07004 mov r7, #4 fb5c: e2855e2e add r5, r5, #736 ; 0x2e0 fb60: e5953004 ldr r3, [r5, #4] fb64: e2533001 subs r3, r3, #1 fb68: e5954008 ldr r4, [r5, #8] fb6c: 5a000004 bpl fb84 <__sfp+0x50> fb70: ea000021 b fbfc <__sfp+0xc8> fb74: e2433001 sub r3, r3, #1 fb78: e3730001 cmn r3, #1 fb7c: e2844068 add r4, r4, #104 ; 0x68 fb80: 0a00001d beq fbfc <__sfp+0xc8> fb84: e1d420fc ldrsh r2, [r4, #12] fb88: e3520000 cmp r2, #0 fb8c: 1afffff8 bne fb74 <__sfp+0x40> fb90: e3a05000 mov r5, #0 fb94: e3e02000 mvn r2, #0 fb98: e3a03001 mov r3, #1 fb9c: e1c420be strh r2, [r4, #14] fba0: e1c430bc strh r3, [r4, #12] fba4: e2840058 add r0, r4, #88 ; 0x58 fba8: e5845064 str r5, [r4, #100] ; 0x64 fbac: eb000386 bl 109cc <__retarget_lock_init_recursive> fbb0: e59f0094 ldr r0, [pc, #148] ; fc4c <__sfp+0x118> fbb4: eb00038e bl 109f4 <__retarget_lock_release_recursive> fbb8: e5845000 str r5, [r4] fbbc: e5845008 str r5, [r4, #8] fbc0: e5845004 str r5, [r4, #4] fbc4: e5845010 str r5, [r4, #16] fbc8: e5845014 str r5, [r4, #20] fbcc: e5845018 str r5, [r4, #24] fbd0: e1a01005 mov r1, r5 fbd4: e3a02008 mov r2, #8 fbd8: e284005c add r0, r4, #92 ; 0x5c fbdc: ebfff79e bl da5c fbe0: e5845030 str r5, [r4, #48] ; 0x30 fbe4: e5845034 str r5, [r4, #52] ; 0x34 fbe8: e5845044 str r5, [r4, #68] ; 0x44 fbec: e5845048 str r5, [r4, #72] ; 0x48 fbf0: e1a00004 mov r0, r4 fbf4: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} fbf8: e12fff1e bx lr fbfc: e5954000 ldr r4, [r5] fc00: e3540000 cmp r4, #0 fc04: 0a000004 beq fc1c <__sfp+0xe8> fc08: e1a05004 mov r5, r4 fc0c: eaffffd3 b fb60 <__sfp+0x2c> fc10: e1a00005 mov r0, r5 fc14: ebffffa1 bl faa0 <__sinit> fc18: eaffffce b fb58 <__sfp+0x24> fc1c: e1a01007 mov r1, r7 fc20: e1a00006 mov r0, r6 fc24: ebffff80 bl fa2c <__sfmoreglue> fc28: e3500000 cmp r0, #0 fc2c: e1a04000 mov r4, r0 fc30: e5850000 str r0, [r5] fc34: 1afffff3 bne fc08 <__sfp+0xd4> fc38: e59f000c ldr r0, [pc, #12] ; fc4c <__sfp+0x118> fc3c: eb00036c bl 109f4 <__retarget_lock_release_recursive> fc40: e3a0300c mov r3, #12 fc44: e5863000 str r3, [r6] fc48: eaffffe8 b fbf0 <__sfp+0xbc> fc4c: 0003c1a0 .word 0x0003c1a0 fc50: 00012fd0 .word 0x00012fd0 0000fc54 <__sfp_lock_acquire>: fc54: e92d4010 push {r4, lr} fc58: e59f0008 ldr r0, [pc, #8] ; fc68 <__sfp_lock_acquire+0x14> fc5c: eb00035e bl 109dc <__retarget_lock_acquire_recursive> fc60: e8bd4010 pop {r4, lr} fc64: e12fff1e bx lr fc68: 0003c1a0 .word 0x0003c1a0 0000fc6c <__sfp_lock_release>: fc6c: e92d4010 push {r4, lr} fc70: e59f0008 ldr r0, [pc, #8] ; fc80 <__sfp_lock_release+0x14> fc74: eb00035e bl 109f4 <__retarget_lock_release_recursive> fc78: e8bd4010 pop {r4, lr} fc7c: e12fff1e bx lr fc80: 0003c1a0 .word 0x0003c1a0 0000fc84 <__sinit_lock_acquire>: fc84: e92d4010 push {r4, lr} fc88: e59f0008 ldr r0, [pc, #8] ; fc98 <__sinit_lock_acquire+0x14> fc8c: eb000352 bl 109dc <__retarget_lock_acquire_recursive> fc90: e8bd4010 pop {r4, lr} fc94: e12fff1e bx lr fc98: 0003c18c .word 0x0003c18c 0000fc9c <__sinit_lock_release>: fc9c: e92d4010 push {r4, lr} fca0: e59f0008 ldr r0, [pc, #8] ; fcb0 <__sinit_lock_release+0x14> fca4: eb000352 bl 109f4 <__retarget_lock_release_recursive> fca8: e8bd4010 pop {r4, lr} fcac: e12fff1e bx lr fcb0: 0003c18c .word 0x0003c18c 0000fcb4 <__fp_lock_all>: fcb4: e92d4010 push {r4, lr} fcb8: e59f0018 ldr r0, [pc, #24] ; fcd8 <__fp_lock_all+0x24> fcbc: eb000346 bl 109dc <__retarget_lock_acquire_recursive> fcc0: e59f3014 ldr r3, [pc, #20] ; fcdc <__fp_lock_all+0x28> fcc4: e59f1014 ldr r1, [pc, #20] ; fce0 <__fp_lock_all+0x2c> fcc8: e5930000 ldr r0, [r3] fccc: eb0002c3 bl 107e0 <_fwalk> fcd0: e8bd4010 pop {r4, lr} fcd4: e12fff1e bx lr fcd8: 0003c1a0 .word 0x0003c1a0 fcdc: 0001356c .word 0x0001356c fce0: 0000f9bc .word 0x0000f9bc 0000fce4 <__fp_unlock_all>: fce4: e92d4010 push {r4, lr} fce8: e59f3018 ldr r3, [pc, #24] ; fd08 <__fp_unlock_all+0x24> fcec: e59f1018 ldr r1, [pc, #24] ; fd0c <__fp_unlock_all+0x28> fcf0: e5930000 ldr r0, [r3] fcf4: eb0002b9 bl 107e0 <_fwalk> fcf8: e59f0010 ldr r0, [pc, #16] ; fd10 <__fp_unlock_all+0x2c> fcfc: eb00033c bl 109f4 <__retarget_lock_release_recursive> fd00: e8bd4010 pop {r4, lr} fd04: e12fff1e bx lr fd08: 0001356c .word 0x0001356c fd0c: 0000f9f4 .word 0x0000f9f4 fd10: 0003c1a0 .word 0x0003c1a0 0000fd14 <__fputwc>: fd14: e92d43f0 push {r4, r5, r6, r7, r8, r9, lr} fd18: e24dd00c sub sp, sp, #12 fd1c: e1a08000 mov r8, r0 fd20: e1a07001 mov r7, r1 fd24: e1a04002 mov r4, r2 fd28: eb00030a bl 10958 <__locale_mb_cur_max> fd2c: e3500001 cmp r0, #1 fd30: 0a000030 beq fdf8 <__fputwc+0xe4> fd34: e284305c add r3, r4, #92 ; 0x5c fd38: e1a02007 mov r2, r7 fd3c: e28d1004 add r1, sp, #4 fd40: e1a00008 mov r0, r8 fd44: eb000866 bl 11ee4 <_wcrtomb_r> fd48: e3700001 cmn r0, #1 fd4c: e1a06000 mov r6, r0 fd50: 0a000022 beq fde0 <__fputwc+0xcc> fd54: e3500000 cmp r0, #0 fd58: 15dd1004 ldrbne r1, [sp, #4] fd5c: 0a00002c beq fe14 <__fputwc+0x100> fd60: e3a05000 mov r5, #0 fd64: e28d9004 add r9, sp, #4 fd68: ea000007 b fd8c <__fputwc+0x78> fd6c: e5943000 ldr r3, [r4] fd70: e2832001 add r2, r3, #1 fd74: e5842000 str r2, [r4] fd78: e5c31000 strb r1, [r3] fd7c: e2855001 add r5, r5, #1 fd80: e1560005 cmp r6, r5 fd84: 9a000022 bls fe14 <__fputwc+0x100> fd88: e7d51009 ldrb r1, [r5, r9] fd8c: e5943008 ldr r3, [r4, #8] fd90: e2433001 sub r3, r3, #1 fd94: e3530000 cmp r3, #0 fd98: e5843008 str r3, [r4, #8] fd9c: aafffff2 bge fd6c <__fputwc+0x58> fda0: e5942018 ldr r2, [r4, #24] fda4: e1530002 cmp r3, r2 fda8: b3a03000 movlt r3, #0 fdac: a3a03001 movge r3, #1 fdb0: e351000a cmp r1, #10 fdb4: 03a03000 moveq r3, #0 fdb8: e3530000 cmp r3, #0 fdbc: 1affffea bne fd6c <__fputwc+0x58> fdc0: e1a02004 mov r2, r4 fdc4: e1a00008 mov r0, r8 fdc8: eb0007f2 bl 11d98 <__swbuf_r> fdcc: e3700001 cmn r0, #1 fdd0: 1affffe9 bne fd7c <__fputwc+0x68> fdd4: e28dd00c add sp, sp, #12 fdd8: e8bd43f0 pop {r4, r5, r6, r7, r8, r9, lr} fddc: e12fff1e bx lr fde0: e1d430bc ldrh r3, [r4, #12] fde4: e3833040 orr r3, r3, #64 ; 0x40 fde8: e1c430bc strh r3, [r4, #12] fdec: e28dd00c add sp, sp, #12 fdf0: e8bd43f0 pop {r4, r5, r6, r7, r8, r9, lr} fdf4: e12fff1e bx lr fdf8: e2473001 sub r3, r7, #1 fdfc: e35300fe cmp r3, #254 ; 0xfe fe00: 8affffcb bhi fd34 <__fputwc+0x20> fe04: e20710ff and r1, r7, #255 ; 0xff fe08: e1a06000 mov r6, r0 fe0c: e5cd1004 strb r1, [sp, #4] fe10: eaffffd2 b fd60 <__fputwc+0x4c> fe14: e1a00007 mov r0, r7 fe18: e28dd00c add sp, sp, #12 fe1c: e8bd43f0 pop {r4, r5, r6, r7, r8, r9, lr} fe20: e12fff1e bx lr 0000fe24 <_fputwc_r>: fe24: e92d4030 push {r4, r5, lr} fe28: e5923064 ldr r3, [r2, #100] ; 0x64 fe2c: e1a04002 mov r4, r2 fe30: e1d220fc ldrsh r2, [r2, #12] fe34: e3130001 tst r3, #1 fe38: e1a03802 lsl r3, r2, #16 fe3c: e24dd00c sub sp, sp, #12 fe40: e1a05000 mov r5, r0 fe44: 11a03823 lsrne r3, r3, #16 fe48: 1a000002 bne fe58 <_fputwc_r+0x34> fe4c: e3130402 tst r3, #33554432 ; 0x2000000 fe50: e1a03823 lsr r3, r3, #16 fe54: 0a000019 beq fec0 <_fputwc_r+0x9c> fe58: e3130a02 tst r3, #8192 ; 0x2000 fe5c: 05943064 ldreq r3, [r4, #100] ; 0x64 fe60: 03822a02 orreq r2, r2, #8192 ; 0x2000 fe64: 03833a02 orreq r3, r3, #8192 ; 0x2000 fe68: 01c420bc strheq r2, [r4, #12] fe6c: 05843064 streq r3, [r4, #100] ; 0x64 fe70: e1a00005 mov r0, r5 fe74: e1a02004 mov r2, r4 fe78: ebffffa5 bl fd14 <__fputwc> fe7c: e5943064 ldr r3, [r4, #100] ; 0x64 fe80: e3130001 tst r3, #1 fe84: e1a05000 mov r5, r0 fe88: 1a000002 bne fe98 <_fputwc_r+0x74> fe8c: e1d430bc ldrh r3, [r4, #12] fe90: e3130c02 tst r3, #512 ; 0x200 fe94: 0a000003 beq fea8 <_fputwc_r+0x84> fe98: e1a00005 mov r0, r5 fe9c: e28dd00c add sp, sp, #12 fea0: e8bd4030 pop {r4, r5, lr} fea4: e12fff1e bx lr fea8: e5940058 ldr r0, [r4, #88] ; 0x58 feac: eb0002d0 bl 109f4 <__retarget_lock_release_recursive> feb0: e1a00005 mov r0, r5 feb4: e28dd00c add sp, sp, #12 feb8: e8bd4030 pop {r4, r5, lr} febc: e12fff1e bx lr fec0: e5940058 ldr r0, [r4, #88] ; 0x58 fec4: e58d1004 str r1, [sp, #4] fec8: eb0002c3 bl 109dc <__retarget_lock_acquire_recursive> fecc: e1d420fc ldrsh r2, [r4, #12] fed0: e1a03802 lsl r3, r2, #16 fed4: e1a03823 lsr r3, r3, #16 fed8: e59d1004 ldr r1, [sp, #4] fedc: eaffffdd b fe58 <_fputwc_r+0x34> 0000fee0 : fee0: e59f3038 ldr r3, [pc, #56] ; ff20 fee4: e92d4070 push {r4, r5, r6, lr} fee8: e5934000 ldr r4, [r3] feec: e3540000 cmp r4, #0 fef0: e1a05000 mov r5, r0 fef4: e1a06001 mov r6, r1 fef8: 0a000003 beq ff0c fefc: e5943038 ldr r3, [r4, #56] ; 0x38 ff00: e3530000 cmp r3, #0 ff04: 01a00004 moveq r0, r4 ff08: 0bfffee4 bleq faa0 <__sinit> ff0c: e1a02006 mov r2, r6 ff10: e1a01005 mov r1, r5 ff14: e1a00004 mov r0, r4 ff18: e8bd4070 pop {r4, r5, r6, lr} ff1c: eaffffc0 b fe24 <_fputwc_r> ff20: 0001356c .word 0x0001356c 0000ff24 <_malloc_trim_r>: ff24: e92d41f0 push {r4, r5, r6, r7, r8, lr} ff28: e1a04001 mov r4, r1 ff2c: e59f70e4 ldr r7, [pc, #228] ; 10018 <_malloc_trim_r+0xf4> ff30: e1a06000 mov r6, r0 ff34: eb00055e bl 114b4 <__malloc_lock> ff38: e5973008 ldr r3, [r7, #8] ff3c: e5935004 ldr r5, [r3, #4] ff40: e2641efe rsb r1, r4, #4064 ; 0xfe0 ff44: e281100f add r1, r1, #15 ff48: e3c55003 bic r5, r5, #3 ff4c: e0814005 add r4, r1, r5 ff50: e1a04624 lsr r4, r4, #12 ff54: e2444001 sub r4, r4, #1 ff58: e1a04604 lsl r4, r4, #12 ff5c: e3540a01 cmp r4, #4096 ; 0x1000 ff60: ba000006 blt ff80 <_malloc_trim_r+0x5c> ff64: e3a01000 mov r1, #0 ff68: e1a00006 mov r0, r6 ff6c: eb000691 bl 119b8 <_sbrk_r> ff70: e5973008 ldr r3, [r7, #8] ff74: e0833005 add r3, r3, r5 ff78: e1500003 cmp r0, r3 ff7c: 0a000004 beq ff94 <_malloc_trim_r+0x70> ff80: e1a00006 mov r0, r6 ff84: eb000550 bl 114cc <__malloc_unlock> ff88: e3a00000 mov r0, #0 ff8c: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} ff90: e12fff1e bx lr ff94: e2641000 rsb r1, r4, #0 ff98: e1a00006 mov r0, r6 ff9c: eb000685 bl 119b8 <_sbrk_r> ffa0: e3700001 cmn r0, #1 ffa4: 0a00000c beq ffdc <_malloc_trim_r+0xb8> ffa8: e59f206c ldr r2, [pc, #108] ; 1001c <_malloc_trim_r+0xf8> ffac: e5971008 ldr r1, [r7, #8] ffb0: e5923000 ldr r3, [r2] ffb4: e0455004 sub r5, r5, r4 ffb8: e3855001 orr r5, r5, #1 ffbc: e1a00006 mov r0, r6 ffc0: e0434004 sub r4, r3, r4 ffc4: e5815004 str r5, [r1, #4] ffc8: e5824000 str r4, [r2] ffcc: eb00053e bl 114cc <__malloc_unlock> ffd0: e3a00001 mov r0, #1 ffd4: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} ffd8: e12fff1e bx lr ffdc: e3a01000 mov r1, #0 ffe0: e1a00006 mov r0, r6 ffe4: eb000673 bl 119b8 <_sbrk_r> ffe8: e5972008 ldr r2, [r7, #8] ffec: e0403002 sub r3, r0, r2 fff0: e353000f cmp r3, #15 fff4: daffffe1 ble ff80 <_malloc_trim_r+0x5c> fff8: e59f1020 ldr r1, [pc, #32] ; 10020 <_malloc_trim_r+0xfc> fffc: e591c000 ldr ip, [r1] 10000: e59f1014 ldr r1, [pc, #20] ; 1001c <_malloc_trim_r+0xf8> 10004: e3833001 orr r3, r3, #1 10008: e040000c sub r0, r0, ip 1000c: e5823004 str r3, [r2, #4] 10010: e5810000 str r0, [r1] 10014: eaffffd9 b ff80 <_malloc_trim_r+0x5c> 10018: 00013b04 .word 0x00013b04 1001c: 0003c140 .word 0x0003c140 10020: 00013f0c .word 0x00013f0c 00010024 <_free_r>: 10024: e92d4070 push {r4, r5, r6, lr} 10028: e2514000 subs r4, r1, #0 1002c: 0a000031 beq 100f8 <_free_r+0xd4> 10030: e1a05000 mov r5, r0 10034: eb00051e bl 114b4 <__malloc_lock> 10038: e5141004 ldr r1, [r4, #-4] 1003c: e59fe2ac ldr lr, [pc, #684] ; 102f0 <_free_r+0x2cc> 10040: e3c13001 bic r3, r1, #1 10044: e244c008 sub ip, r4, #8 10048: e08c0003 add r0, ip, r3 1004c: e59e6008 ldr r6, [lr, #8] 10050: e5902004 ldr r2, [r0, #4] 10054: e1500006 cmp r0, r6 10058: e3c22003 bic r2, r2, #3 1005c: 0a00004e beq 1019c <_free_r+0x178> 10060: e3110001 tst r1, #1 10064: e5802004 str r2, [r0, #4] 10068: 1a000009 bne 10094 <_free_r+0x70> 1006c: e5144008 ldr r4, [r4, #-8] 10070: e04cc004 sub ip, ip, r4 10074: e59c1008 ldr r1, [ip, #8] 10078: e28e6008 add r6, lr, #8 1007c: e1510006 cmp r1, r6 10080: e0833004 add r3, r3, r4 10084: 0a00005c beq 101fc <_free_r+0x1d8> 10088: e59c400c ldr r4, [ip, #12] 1008c: e581400c str r4, [r1, #12] 10090: e5841008 str r1, [r4, #8] 10094: e0801002 add r1, r0, r2 10098: e5911004 ldr r1, [r1, #4] 1009c: e3110001 tst r1, #1 100a0: 13832001 orrne r2, r3, #1 100a4: 158c2004 strne r2, [ip, #4] 100a8: 178c3003 strne r3, [ip, r3] 100ac: 0a00002c beq 10164 <_free_r+0x140> 100b0: e3530c02 cmp r3, #512 ; 0x200 100b4: 2a000011 bcs 10100 <_free_r+0xdc> 100b8: e3a04001 mov r4, #1 100bc: e59e0004 ldr r0, [lr, #4] 100c0: e1a031a3 lsr r3, r3, #3 100c4: e0832004 add r2, r3, r4 100c8: e1a03143 asr r3, r3, #2 100cc: e1803314 orr r3, r0, r4, lsl r3 100d0: e08e1182 add r1, lr, r2, lsl #3 100d4: e79e0182 ldr r0, [lr, r2, lsl #3] 100d8: e2411008 sub r1, r1, #8 100dc: e58e3004 str r3, [lr, #4] 100e0: e58c100c str r1, [ip, #12] 100e4: e58c0008 str r0, [ip, #8] 100e8: e78ec182 str ip, [lr, r2, lsl #3] 100ec: e580c00c str ip, [r0, #12] 100f0: e1a00005 mov r0, r5 100f4: eb0004f4 bl 114cc <__malloc_unlock> 100f8: e8bd4070 pop {r4, r5, r6, lr} 100fc: e12fff1e bx lr 10100: e1a024a3 lsr r2, r3, #9 10104: e3520004 cmp r2, #4 10108: 8a000048 bhi 10230 <_free_r+0x20c> 1010c: e1a02323 lsr r2, r3, #6 10110: e2824039 add r4, r2, #57 ; 0x39 10114: e1a04184 lsl r4, r4, #3 10118: e2821038 add r1, r2, #56 ; 0x38 1011c: e08e0004 add r0, lr, r4 10120: e79e2004 ldr r2, [lr, r4] 10124: e2400008 sub r0, r0, #8 10128: e1500002 cmp r0, r2 1012c: 0a000045 beq 10248 <_free_r+0x224> 10130: e5921004 ldr r1, [r2, #4] 10134: e3c11003 bic r1, r1, #3 10138: e1530001 cmp r3, r1 1013c: 2a00002c bcs 101f4 <_free_r+0x1d0> 10140: e5922008 ldr r2, [r2, #8] 10144: e1500002 cmp r0, r2 10148: 1afffff8 bne 10130 <_free_r+0x10c> 1014c: e590300c ldr r3, [r0, #12] 10150: e58c300c str r3, [ip, #12] 10154: e58c0008 str r0, [ip, #8] 10158: e583c008 str ip, [r3, #8] 1015c: e580c00c str ip, [r0, #12] 10160: eaffffe2 b 100f0 <_free_r+0xcc> 10164: e5901008 ldr r1, [r0, #8] 10168: e59f4184 ldr r4, [pc, #388] ; 102f4 <_free_r+0x2d0> 1016c: e1510004 cmp r1, r4 10170: e0833002 add r3, r3, r2 10174: 0a00003a beq 10264 <_free_r+0x240> 10178: e590000c ldr r0, [r0, #12] 1017c: e3832001 orr r2, r3, #1 10180: e3530c02 cmp r3, #512 ; 0x200 10184: e581000c str r0, [r1, #12] 10188: e5801008 str r1, [r0, #8] 1018c: e58c2004 str r2, [ip, #4] 10190: e78c3003 str r3, [ip, r3] 10194: 2affffd9 bcs 10100 <_free_r+0xdc> 10198: eaffffc6 b 100b8 <_free_r+0x94> 1019c: e3110001 tst r1, #1 101a0: e0833002 add r3, r3, r2 101a4: 1a000006 bne 101c4 <_free_r+0x1a0> 101a8: e5142008 ldr r2, [r4, #-8] 101ac: e04cc002 sub ip, ip, r2 101b0: e28c0008 add r0, ip, #8 101b4: e8900003 ldm r0, {r0, r1} 101b8: e580100c str r1, [r0, #12] 101bc: e5810008 str r0, [r1, #8] 101c0: e0833002 add r3, r3, r2 101c4: e59f212c ldr r2, [pc, #300] ; 102f8 <_free_r+0x2d4> 101c8: e5921000 ldr r1, [r2] 101cc: e3832001 orr r2, r3, #1 101d0: e1530001 cmp r3, r1 101d4: e58c2004 str r2, [ip, #4] 101d8: e58ec008 str ip, [lr, #8] 101dc: 3affffc3 bcc 100f0 <_free_r+0xcc> 101e0: e59f3114 ldr r3, [pc, #276] ; 102fc <_free_r+0x2d8> 101e4: e1a00005 mov r0, r5 101e8: e5931000 ldr r1, [r3] 101ec: ebffff4c bl ff24 <_malloc_trim_r> 101f0: eaffffbe b 100f0 <_free_r+0xcc> 101f4: e1a00002 mov r0, r2 101f8: eaffffd3 b 1014c <_free_r+0x128> 101fc: e0801002 add r1, r0, r2 10200: e5911004 ldr r1, [r1, #4] 10204: e3110001 tst r1, #1 10208: 1a000034 bne 102e0 <_free_r+0x2bc> 1020c: e2801008 add r1, r0, #8 10210: e0823003 add r3, r2, r3 10214: e8910006 ldm r1, {r1, r2} 10218: e3830001 orr r0, r3, #1 1021c: e581200c str r2, [r1, #12] 10220: e5821008 str r1, [r2, #8] 10224: e58c0004 str r0, [ip, #4] 10228: e78c3003 str r3, [ip, r3] 1022c: eaffffaf b 100f0 <_free_r+0xcc> 10230: e3520014 cmp r2, #20 10234: 8a000012 bhi 10284 <_free_r+0x260> 10238: e282405c add r4, r2, #92 ; 0x5c 1023c: e1a04184 lsl r4, r4, #3 10240: e282105b add r1, r2, #91 ; 0x5b 10244: eaffffb4 b 1011c <_free_r+0xf8> 10248: e3a04001 mov r4, #1 1024c: e59e3004 ldr r3, [lr, #4] 10250: e1a02141 asr r2, r1, #2 10254: e1832214 orr r2, r3, r4, lsl r2 10258: e58e2004 str r2, [lr, #4] 1025c: e1a03000 mov r3, r0 10260: eaffffba b 10150 <_free_r+0x12c> 10264: e3832001 orr r2, r3, #1 10268: e58ec014 str ip, [lr, #20] 1026c: e58ec010 str ip, [lr, #16] 10270: e58c100c str r1, [ip, #12] 10274: e58c1008 str r1, [ip, #8] 10278: e58c2004 str r2, [ip, #4] 1027c: e78c3003 str r3, [ip, r3] 10280: eaffff9a b 100f0 <_free_r+0xcc> 10284: e3520054 cmp r2, #84 ; 0x54 10288: 8a000004 bhi 102a0 <_free_r+0x27c> 1028c: e1a02623 lsr r2, r3, #12 10290: e282406f add r4, r2, #111 ; 0x6f 10294: e1a04184 lsl r4, r4, #3 10298: e282106e add r1, r2, #110 ; 0x6e 1029c: eaffff9e b 1011c <_free_r+0xf8> 102a0: e3520f55 cmp r2, #340 ; 0x154 102a4: 8a000004 bhi 102bc <_free_r+0x298> 102a8: e1a027a3 lsr r2, r3, #15 102ac: e2824078 add r4, r2, #120 ; 0x78 102b0: e1a04184 lsl r4, r4, #3 102b4: e2821077 add r1, r2, #119 ; 0x77 102b8: eaffff97 b 1011c <_free_r+0xf8> 102bc: e59f103c ldr r1, [pc, #60] ; 10300 <_free_r+0x2dc> 102c0: e1520001 cmp r2, r1 102c4: 91a02923 lsrls r2, r3, #18 102c8: 9282407d addls r4, r2, #125 ; 0x7d 102cc: 91a04184 lslls r4, r4, #3 102d0: 9282107c addls r1, r2, #124 ; 0x7c 102d4: 83a04ffe movhi r4, #1016 ; 0x3f8 102d8: 83a0107e movhi r1, #126 ; 0x7e 102dc: eaffff8e b 1011c <_free_r+0xf8> 102e0: e3832001 orr r2, r3, #1 102e4: e58c2004 str r2, [ip, #4] 102e8: e5803000 str r3, [r0] 102ec: eaffff7f b 100f0 <_free_r+0xcc> 102f0: 00013b04 .word 0x00013b04 102f4: 00013b0c .word 0x00013b0c 102f8: 00013f10 .word 0x00013f10 102fc: 0003c170 .word 0x0003c170 10300: 00000554 .word 0x00000554 00010304 <__sfvwrite_r>: 10304: e5923008 ldr r3, [r2, #8] 10308: e3530000 cmp r3, #0 1030c: 0a0000cb beq 10640 <__sfvwrite_r+0x33c> 10310: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10314: e1d130fc ldrsh r3, [r1, #12] 10318: e1a03803 lsl r3, r3, #16 1031c: e3130702 tst r3, #524288 ; 0x80000 10320: e24dd00c sub sp, sp, #12 10324: e1a04001 mov r4, r1 10328: e1a0b000 mov fp, r0 1032c: e1a06002 mov r6, r2 10330: e1a0a823 lsr sl, r3, #16 10334: 0a000020 beq 103bc <__sfvwrite_r+0xb8> 10338: e5912010 ldr r2, [r1, #16] 1033c: e3520000 cmp r2, #0 10340: 0a00001d beq 103bc <__sfvwrite_r+0xb8> 10344: e21a9002 ands r9, sl, #2 10348: e5965000 ldr r5, [r6] 1034c: 0a000025 beq 103e8 <__sfvwrite_r+0xe4> 10350: e3a08000 mov r8, #0 10354: e1a07008 mov r7, r8 10358: e59f947c ldr r9, [pc, #1148] ; 107dc <__sfvwrite_r+0x4d8> 1035c: e3570000 cmp r7, #0 10360: 0a00004a beq 10490 <__sfvwrite_r+0x18c> 10364: e1570009 cmp r7, r9 10368: 31a03007 movcc r3, r7 1036c: 21a03009 movcs r3, r9 10370: e594a024 ldr sl, [r4, #36] ; 0x24 10374: e1a02008 mov r2, r8 10378: e594101c ldr r1, [r4, #28] 1037c: e1a0000b mov r0, fp 10380: e1a0e00f mov lr, pc 10384: e12fff1a bx sl 10388: e3500000 cmp r0, #0 1038c: da000089 ble 105b8 <__sfvwrite_r+0x2b4> 10390: e5963008 ldr r3, [r6, #8] 10394: e0433000 sub r3, r3, r0 10398: e3530000 cmp r3, #0 1039c: e0888000 add r8, r8, r0 103a0: e0477000 sub r7, r7, r0 103a4: e5863008 str r3, [r6, #8] 103a8: 1affffeb bne 1035c <__sfvwrite_r+0x58> 103ac: e3a00000 mov r0, #0 103b0: e28dd00c add sp, sp, #12 103b4: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 103b8: e12fff1e bx lr 103bc: e1a01004 mov r1, r4 103c0: e1a0000b mov r0, fp 103c4: ebfffc33 bl f498 <__swsetup_r> 103c8: e3500000 cmp r0, #0 103cc: 1a0000fc bne 107c4 <__sfvwrite_r+0x4c0> 103d0: e1d430fc ldrsh r3, [r4, #12] 103d4: e1a03803 lsl r3, r3, #16 103d8: e1a0a823 lsr sl, r3, #16 103dc: e21a9002 ands r9, sl, #2 103e0: e5965000 ldr r5, [r6] 103e4: 1affffd9 bne 10350 <__sfvwrite_r+0x4c> 103e8: e21aa001 ands sl, sl, #1 103ec: 01a0900a moveq r9, sl 103f0: 1a000094 bne 10648 <__sfvwrite_r+0x344> 103f4: e3590000 cmp r9, #0 103f8: 0a000020 beq 10480 <__sfvwrite_r+0x17c> 103fc: e3130402 tst r3, #33554432 ; 0x2000000 10400: e5947008 ldr r7, [r4, #8] 10404: e1a03823 lsr r3, r3, #16 10408: 0a000024 beq 104a0 <__sfvwrite_r+0x19c> 1040c: e1590007 cmp r9, r7 10410: e1a08007 mov r8, r7 10414: 3a000037 bcc 104f8 <__sfvwrite_r+0x1f4> 10418: e3130d12 tst r3, #1152 ; 0x480 1041c: 1a00003a bne 1050c <__sfvwrite_r+0x208> 10420: e1a03009 mov r3, r9 10424: e5940000 ldr r0, [r4] 10428: e1a02008 mov r2, r8 1042c: e1a0100a mov r1, sl 10430: e58d3004 str r3, [sp, #4] 10434: ebfff536 bl d914 10438: e5941008 ldr r1, [r4, #8] 1043c: e5942000 ldr r2, [r4] 10440: e0417007 sub r7, r1, r7 10444: e0828008 add r8, r2, r8 10448: e5847008 str r7, [r4, #8] 1044c: e5848000 str r8, [r4] 10450: e59d3004 ldr r3, [sp, #4] 10454: e5962008 ldr r2, [r6, #8] 10458: e0422003 sub r2, r2, r3 1045c: e3520000 cmp r2, #0 10460: e08aa003 add sl, sl, r3 10464: e0499003 sub r9, r9, r3 10468: e5862008 str r2, [r6, #8] 1046c: 0affffce beq 103ac <__sfvwrite_r+0xa8> 10470: e1d430fc ldrsh r3, [r4, #12] 10474: e3590000 cmp r9, #0 10478: e1a03803 lsl r3, r3, #16 1047c: 1affffde bne 103fc <__sfvwrite_r+0xf8> 10480: e595a000 ldr sl, [r5] 10484: e5959004 ldr r9, [r5, #4] 10488: e2855008 add r5, r5, #8 1048c: eaffffd8 b 103f4 <__sfvwrite_r+0xf0> 10490: e5958000 ldr r8, [r5] 10494: e5957004 ldr r7, [r5, #4] 10498: e2855008 add r5, r5, #8 1049c: eaffffae b 1035c <__sfvwrite_r+0x58> 104a0: e5940000 ldr r0, [r4] 104a4: e5943010 ldr r3, [r4, #16] 104a8: e1500003 cmp r0, r3 104ac: 8a000002 bhi 104bc <__sfvwrite_r+0x1b8> 104b0: e5948014 ldr r8, [r4, #20] 104b4: e1590008 cmp r9, r8 104b8: 2a000045 bcs 105d4 <__sfvwrite_r+0x2d0> 104bc: e1570009 cmp r7, r9 104c0: 21a07009 movcs r7, r9 104c4: e1a0100a mov r1, sl 104c8: e1a02007 mov r2, r7 104cc: ebfff510 bl d914 104d0: e5942008 ldr r2, [r4, #8] 104d4: e5943000 ldr r3, [r4] 104d8: e0422007 sub r2, r2, r7 104dc: e0833007 add r3, r3, r7 104e0: e3520000 cmp r2, #0 104e4: e5842008 str r2, [r4, #8] 104e8: e5843000 str r3, [r4] 104ec: 0a00002c beq 105a4 <__sfvwrite_r+0x2a0> 104f0: e1a03007 mov r3, r7 104f4: eaffffd6 b 10454 <__sfvwrite_r+0x150> 104f8: e1a07009 mov r7, r9 104fc: e1a03009 mov r3, r9 10500: e1a08009 mov r8, r9 10504: e5940000 ldr r0, [r4] 10508: eaffffc6 b 10428 <__sfvwrite_r+0x124> 1050c: e5941010 ldr r1, [r4, #16] 10510: e5948000 ldr r8, [r4] 10514: e5942014 ldr r2, [r4, #20] 10518: e0488001 sub r8, r8, r1 1051c: e0822082 add r2, r2, r2, lsl #1 10520: e2887001 add r7, r8, #1 10524: e0822fa2 add r2, r2, r2, lsr #31 10528: e0877009 add r7, r7, r9 1052c: e1a020c2 asr r2, r2, #1 10530: e1570002 cmp r7, r2 10534: 91a07002 movls r7, r2 10538: 81a02007 movhi r2, r7 1053c: e3130b01 tst r3, #1024 ; 0x400 10540: 0a000032 beq 10610 <__sfvwrite_r+0x30c> 10544: e1a01002 mov r1, r2 10548: e1a0000b mov r0, fp 1054c: eb000191 bl 10b98 <_malloc_r> 10550: e2503000 subs r3, r0, #0 10554: 0a00009c beq 107cc <__sfvwrite_r+0x4c8> 10558: e1a02008 mov r2, r8 1055c: e5941010 ldr r1, [r4, #16] 10560: e58d3004 str r3, [sp, #4] 10564: ebfff4a5 bl d800 10568: e1d420bc ldrh r2, [r4, #12] 1056c: e3c22d12 bic r2, r2, #1152 ; 0x480 10570: e3822080 orr r2, r2, #128 ; 0x80 10574: e1c420bc strh r2, [r4, #12] 10578: e59d3004 ldr r3, [sp, #4] 1057c: e0830008 add r0, r3, r8 10580: e0478008 sub r8, r7, r8 10584: e5843010 str r3, [r4, #16] 10588: e5848008 str r8, [r4, #8] 1058c: e5847014 str r7, [r4, #20] 10590: e5840000 str r0, [r4] 10594: e1a07009 mov r7, r9 10598: e1a03009 mov r3, r9 1059c: e1a08009 mov r8, r9 105a0: eaffffa0 b 10428 <__sfvwrite_r+0x124> 105a4: e1a01004 mov r1, r4 105a8: e1a0000b mov r0, fp 105ac: ebfffca6 bl f84c <_fflush_r> 105b0: e3500000 cmp r0, #0 105b4: 0affffcd beq 104f0 <__sfvwrite_r+0x1ec> 105b8: e1d430fc ldrsh r3, [r4, #12] 105bc: e3e00000 mvn r0, #0 105c0: e3833040 orr r3, r3, #64 ; 0x40 105c4: e1c430bc strh r3, [r4, #12] 105c8: e28dd00c add sp, sp, #12 105cc: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 105d0: e12fff1e bx lr 105d4: e3790106 cmn r9, #-2147483647 ; 0x80000001 105d8: 31a00009 movcc r0, r9 105dc: 23e00102 mvncs r0, #-2147483648 ; 0x80000000 105e0: e1a01008 mov r1, r8 105e4: ebfff3de bl d564 <__divsi3> 105e8: e5947024 ldr r7, [r4, #36] ; 0x24 105ec: e0030098 mul r3, r8, r0 105f0: e1a0200a mov r2, sl 105f4: e594101c ldr r1, [r4, #28] 105f8: e1a0000b mov r0, fp 105fc: e1a0e00f mov lr, pc 10600: e12fff17 bx r7 10604: e2503000 subs r3, r0, #0 10608: caffff91 bgt 10454 <__sfvwrite_r+0x150> 1060c: eaffffe9 b 105b8 <__sfvwrite_r+0x2b4> 10610: e1a0000b mov r0, fp 10614: eb0003b2 bl 114e4 <_realloc_r> 10618: e2503000 subs r3, r0, #0 1061c: 1affffd6 bne 1057c <__sfvwrite_r+0x278> 10620: e5941010 ldr r1, [r4, #16] 10624: e1a0000b mov r0, fp 10628: ebfffe7d bl 10024 <_free_r> 1062c: e3a0200c mov r2, #12 10630: e1d430fc ldrsh r3, [r4, #12] 10634: e58b2000 str r2, [fp] 10638: e3c33080 bic r3, r3, #128 ; 0x80 1063c: eaffffde b 105bc <__sfvwrite_r+0x2b8> 10640: e3a00000 mov r0, #0 10644: e12fff1e bx lr 10648: e1a00009 mov r0, r9 1064c: e1a0a009 mov sl, r9 10650: e1a08009 mov r8, r9 10654: ea000026 b 106f4 <__sfvwrite_r+0x3f0> 10658: e3500000 cmp r0, #0 1065c: 0a00002d beq 10718 <__sfvwrite_r+0x414> 10660: e1590008 cmp r9, r8 10664: 31a01009 movcc r1, r9 10668: 21a01008 movcs r1, r8 1066c: e5942010 ldr r2, [r4, #16] 10670: e594c014 ldr ip, [r4, #20] 10674: e5943008 ldr r3, [r4, #8] 10678: e5940000 ldr r0, [r4] 1067c: e08c3003 add r3, ip, r3 10680: e1500002 cmp r0, r2 10684: 93a02000 movls r2, #0 10688: 83a02001 movhi r2, #1 1068c: e1510003 cmp r1, r3 10690: d3a02000 movle r2, #0 10694: e3520000 cmp r2, #0 10698: e1a07001 mov r7, r1 1069c: 1a000038 bne 10784 <__sfvwrite_r+0x480> 106a0: e151000c cmp r1, ip 106a4: ba000024 blt 1073c <__sfvwrite_r+0x438> 106a8: e5947024 ldr r7, [r4, #36] ; 0x24 106ac: e1a0300c mov r3, ip 106b0: e1a0200a mov r2, sl 106b4: e594101c ldr r1, [r4, #28] 106b8: e1a0000b mov r0, fp 106bc: e1a0e00f mov lr, pc 106c0: e12fff17 bx r7 106c4: e2507000 subs r7, r0, #0 106c8: daffffba ble 105b8 <__sfvwrite_r+0x2b4> 106cc: e0599007 subs r9, r9, r7 106d0: 13a00001 movne r0, #1 106d4: 0a000024 beq 1076c <__sfvwrite_r+0x468> 106d8: e5963008 ldr r3, [r6, #8] 106dc: e0433007 sub r3, r3, r7 106e0: e3530000 cmp r3, #0 106e4: e08aa007 add sl, sl, r7 106e8: e0488007 sub r8, r8, r7 106ec: e5863008 str r3, [r6, #8] 106f0: 0affff2d beq 103ac <__sfvwrite_r+0xa8> 106f4: e3580000 cmp r8, #0 106f8: 1affffd6 bne 10658 <__sfvwrite_r+0x354> 106fc: e2853008 add r3, r5, #8 10700: e5138004 ldr r8, [r3, #-4] 10704: e3580000 cmp r8, #0 10708: e1a05003 mov r5, r3 1070c: e513a008 ldr sl, [r3, #-8] 10710: e2833008 add r3, r3, #8 10714: 0afffff9 beq 10700 <__sfvwrite_r+0x3fc> 10718: e1a02008 mov r2, r8 1071c: e3a0100a mov r1, #10 10720: e1a0000a mov r0, sl 10724: eb00031e bl 113a4 10728: e3500000 cmp r0, #0 1072c: 12800001 addne r0, r0, #1 10730: 1040900a subne r9, r0, sl 10734: 02889001 addeq r9, r8, #1 10738: eaffffc8 b 10660 <__sfvwrite_r+0x35c> 1073c: e1a02001 mov r2, r1 10740: e1a0100a mov r1, sl 10744: ebfff472 bl d914 10748: e5942008 ldr r2, [r4, #8] 1074c: e5943000 ldr r3, [r4] 10750: e0422007 sub r2, r2, r7 10754: e0833007 add r3, r3, r7 10758: e0599007 subs r9, r9, r7 1075c: e5842008 str r2, [r4, #8] 10760: e5843000 str r3, [r4] 10764: 13a00001 movne r0, #1 10768: 1affffda bne 106d8 <__sfvwrite_r+0x3d4> 1076c: e1a01004 mov r1, r4 10770: e1a0000b mov r0, fp 10774: ebfffc34 bl f84c <_fflush_r> 10778: e3500000 cmp r0, #0 1077c: 0affffd5 beq 106d8 <__sfvwrite_r+0x3d4> 10780: eaffff8c b 105b8 <__sfvwrite_r+0x2b4> 10784: e1a02003 mov r2, r3 10788: e1a0100a mov r1, sl 1078c: e58d3004 str r3, [sp, #4] 10790: ebfff45f bl d914 10794: e5942000 ldr r2, [r4] 10798: e59d3004 ldr r3, [sp, #4] 1079c: e0822003 add r2, r2, r3 107a0: e5842000 str r2, [r4] 107a4: e1a01004 mov r1, r4 107a8: e1a0000b mov r0, fp 107ac: ebfffc26 bl f84c <_fflush_r> 107b0: e3500000 cmp r0, #0 107b4: e59d3004 ldr r3, [sp, #4] 107b8: 1affff7e bne 105b8 <__sfvwrite_r+0x2b4> 107bc: e1a07003 mov r7, r3 107c0: eaffffc1 b 106cc <__sfvwrite_r+0x3c8> 107c4: e3e00000 mvn r0, #0 107c8: eafffef8 b 103b0 <__sfvwrite_r+0xac> 107cc: e3a0200c mov r2, #12 107d0: e1d430fc ldrsh r3, [r4, #12] 107d4: e58b2000 str r2, [fp] 107d8: eaffff77 b 105bc <__sfvwrite_r+0x2b8> 107dc: 7ffffc00 .word 0x7ffffc00 000107e0 <_fwalk>: 107e0: e92d41f0 push {r4, r5, r6, r7, r8, lr} 107e4: e2907e2e adds r7, r0, #736 ; 0x2e0 107e8: 0a000019 beq 10854 <_fwalk+0x74> 107ec: e1a08001 mov r8, r1 107f0: e3a06000 mov r6, #0 107f4: e5975004 ldr r5, [r7, #4] 107f8: e2555001 subs r5, r5, #1 107fc: e5974008 ldr r4, [r7, #8] 10800: 4a00000d bmi 1083c <_fwalk+0x5c> 10804: e1d430bc ldrh r3, [r4, #12] 10808: e3530001 cmp r3, #1 1080c: e2455001 sub r5, r5, #1 10810: 9a000006 bls 10830 <_fwalk+0x50> 10814: e1d430fe ldrsh r3, [r4, #14] 10818: e3730001 cmn r3, #1 1081c: 0a000003 beq 10830 <_fwalk+0x50> 10820: e1a00004 mov r0, r4 10824: e1a0e00f mov lr, pc 10828: e12fff18 bx r8 1082c: e1866000 orr r6, r6, r0 10830: e3750001 cmn r5, #1 10834: e2844068 add r4, r4, #104 ; 0x68 10838: 1afffff1 bne 10804 <_fwalk+0x24> 1083c: e5977000 ldr r7, [r7] 10840: e3570000 cmp r7, #0 10844: 1affffea bne 107f4 <_fwalk+0x14> 10848: e1a00006 mov r0, r6 1084c: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} 10850: e12fff1e bx lr 10854: e1a06007 mov r6, r7 10858: e1a00006 mov r0, r6 1085c: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} 10860: e12fff1e bx lr 00010864 <_fwalk_reent>: 10864: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} 10868: e2906e2e adds r6, r0, #736 ; 0x2e0 1086c: 0a00001b beq 108e0 <_fwalk_reent+0x7c> 10870: e1a08001 mov r8, r1 10874: e1a07000 mov r7, r0 10878: e3a09000 mov r9, #0 1087c: e5965004 ldr r5, [r6, #4] 10880: e2555001 subs r5, r5, #1 10884: e5964008 ldr r4, [r6, #8] 10888: 4a00000e bmi 108c8 <_fwalk_reent+0x64> 1088c: e1d430bc ldrh r3, [r4, #12] 10890: e3530001 cmp r3, #1 10894: e2455001 sub r5, r5, #1 10898: 9a000007 bls 108bc <_fwalk_reent+0x58> 1089c: e1d430fe ldrsh r3, [r4, #14] 108a0: e3730001 cmn r3, #1 108a4: 0a000004 beq 108bc <_fwalk_reent+0x58> 108a8: e1a01004 mov r1, r4 108ac: e1a00007 mov r0, r7 108b0: e1a0e00f mov lr, pc 108b4: e12fff18 bx r8 108b8: e1899000 orr r9, r9, r0 108bc: e3750001 cmn r5, #1 108c0: e2844068 add r4, r4, #104 ; 0x68 108c4: 1afffff0 bne 1088c <_fwalk_reent+0x28> 108c8: e5966000 ldr r6, [r6] 108cc: e3560000 cmp r6, #0 108d0: 1affffe9 bne 1087c <_fwalk_reent+0x18> 108d4: e1a00009 mov r0, r9 108d8: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr} 108dc: e12fff1e bx lr 108e0: e1a09006 mov r9, r6 108e4: e1a00009 mov r0, r9 108e8: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr} 108ec: e12fff1e bx lr 000108f0 <_setlocale_r>: 108f0: e92d4010 push {r4, lr} 108f4: e2524000 subs r4, r2, #0 108f8: 0a000004 beq 10910 <_setlocale_r+0x20> 108fc: e59f1048 ldr r1, [pc, #72] ; 1094c <_setlocale_r+0x5c> 10900: e1a00004 mov r0, r4 10904: ebfff499 bl db70 10908: e3500000 cmp r0, #0 1090c: 1a000002 bne 1091c <_setlocale_r+0x2c> 10910: e59f0038 ldr r0, [pc, #56] ; 10950 <_setlocale_r+0x60> 10914: e8bd4010 pop {r4, lr} 10918: e12fff1e bx lr 1091c: e59f102c ldr r1, [pc, #44] ; 10950 <_setlocale_r+0x60> 10920: e1a00004 mov r0, r4 10924: ebfff491 bl db70 10928: e3500000 cmp r0, #0 1092c: 0afffff7 beq 10910 <_setlocale_r+0x20> 10930: e1a00004 mov r0, r4 10934: e59f1018 ldr r1, [pc, #24] ; 10954 <_setlocale_r+0x64> 10938: ebfff48c bl db70 1093c: e3500000 cmp r0, #0 10940: 0afffff2 beq 10910 <_setlocale_r+0x20> 10944: e3a00000 mov r0, #0 10948: eafffff1 b 10914 <_setlocale_r+0x24> 1094c: 00013028 .word 0x00013028 10950: 00013024 .word 0x00013024 10954: 00012f9c .word 0x00012f9c 00010958 <__locale_mb_cur_max>: 10958: e59f3018 ldr r3, [pc, #24] ; 10978 <__locale_mb_cur_max+0x20> 1095c: e5933000 ldr r3, [r3] 10960: e5933034 ldr r3, [r3, #52] ; 0x34 10964: e59f2010 ldr r2, [pc, #16] ; 1097c <__locale_mb_cur_max+0x24> 10968: e3530000 cmp r3, #0 1096c: 01a03002 moveq r3, r2 10970: e5d30128 ldrb r0, [r3, #296] ; 0x128 10974: e12fff1e bx lr 10978: 0001356c .word 0x0001356c 1097c: 00013998 .word 0x00013998 00010980 <__locale_ctype_ptr_l>: 10980: e59000ec ldr r0, [r0, #236] ; 0xec 10984: e12fff1e bx lr 00010988 <__locale_ctype_ptr>: 10988: e59f3018 ldr r3, [pc, #24] ; 109a8 <__locale_ctype_ptr+0x20> 1098c: e5933000 ldr r3, [r3] 10990: e5933034 ldr r3, [r3, #52] ; 0x34 10994: e59f2010 ldr r2, [pc, #16] ; 109ac <__locale_ctype_ptr+0x24> 10998: e3530000 cmp r3, #0 1099c: 01a03002 moveq r3, r2 109a0: e59300ec ldr r0, [r3, #236] ; 0xec 109a4: e12fff1e bx lr 109a8: 0001356c .word 0x0001356c 109ac: 00013998 .word 0x00013998 000109b0 : 109b0: e59f300c ldr r3, [pc, #12] ; 109c4 109b4: e1a02001 mov r2, r1 109b8: e1a01000 mov r1, r0 109bc: e5930000 ldr r0, [r3] 109c0: eaffffca b 108f0 <_setlocale_r> 109c4: 0001356c .word 0x0001356c 000109c8 <__retarget_lock_init>: 109c8: e12fff1e bx lr 000109cc <__retarget_lock_init_recursive>: 109cc: e12fff1e bx lr 000109d0 <__retarget_lock_close>: 109d0: e12fff1e bx lr 000109d4 <__retarget_lock_close_recursive>: 109d4: e12fff1e bx lr 000109d8 <__retarget_lock_acquire>: 109d8: e12fff1e bx lr 000109dc <__retarget_lock_acquire_recursive>: 109dc: e12fff1e bx lr 000109e0 <__retarget_lock_try_acquire>: 109e0: e3a00001 mov r0, #1 109e4: e12fff1e bx lr 000109e8 <__retarget_lock_try_acquire_recursive>: 109e8: e3a00001 mov r0, #1 109ec: e12fff1e bx lr 000109f0 <__retarget_lock_release>: 109f0: e12fff1e bx lr 000109f4 <__retarget_lock_release_recursive>: 109f4: e12fff1e bx lr 000109f8 <__swhatbuf_r>: 109f8: e92d4070 push {r4, r5, r6, lr} 109fc: e1a04001 mov r4, r1 10a00: e1d110fe ldrsh r1, [r1, #14] 10a04: e3510000 cmp r1, #0 10a08: e24dd040 sub sp, sp, #64 ; 0x40 10a0c: e1a05002 mov r5, r2 10a10: e1a06003 mov r6, r3 10a14: ba00000f blt 10a58 <__swhatbuf_r+0x60> 10a18: e28d2004 add r2, sp, #4 10a1c: eb000610 bl 12264 <_fstat_r> 10a20: e3500000 cmp r0, #0 10a24: ba00000b blt 10a58 <__swhatbuf_r+0x60> 10a28: e59d2008 ldr r2, [sp, #8] 10a2c: e2022a0f and r2, r2, #61440 ; 0xf000 10a30: e2423a02 sub r3, r2, #8192 ; 0x2000 10a34: e2732000 rsbs r2, r3, #0 10a38: e0a22003 adc r2, r2, r3 10a3c: e3a00b02 mov r0, #2048 ; 0x800 10a40: e3a03b01 mov r3, #1024 ; 0x400 10a44: e5862000 str r2, [r6] 10a48: e5853000 str r3, [r5] 10a4c: e28dd040 add sp, sp, #64 ; 0x40 10a50: e8bd4070 pop {r4, r5, r6, lr} 10a54: e12fff1e bx lr 10a58: e3a03000 mov r3, #0 10a5c: e1d420bc ldrh r2, [r4, #12] 10a60: e2120080 ands r0, r2, #128 ; 0x80 10a64: e5863000 str r3, [r6] 10a68: 0a000005 beq 10a84 <__swhatbuf_r+0x8c> 10a6c: e3a02040 mov r2, #64 ; 0x40 10a70: e1a00003 mov r0, r3 10a74: e5852000 str r2, [r5] 10a78: e28dd040 add sp, sp, #64 ; 0x40 10a7c: e8bd4070 pop {r4, r5, r6, lr} 10a80: e12fff1e bx lr 10a84: e3a03b01 mov r3, #1024 ; 0x400 10a88: e5853000 str r3, [r5] 10a8c: e28dd040 add sp, sp, #64 ; 0x40 10a90: e8bd4070 pop {r4, r5, r6, lr} 10a94: e12fff1e bx lr 00010a98 <__smakebuf_r>: 10a98: e92d4070 push {r4, r5, r6, lr} 10a9c: e1d120bc ldrh r2, [r1, #12] 10aa0: e3120002 tst r2, #2 10aa4: e24dd008 sub sp, sp, #8 10aa8: e1a04001 mov r4, r1 10aac: 0a000007 beq 10ad0 <__smakebuf_r+0x38> 10ab0: e3a01001 mov r1, #1 10ab4: e2842043 add r2, r4, #67 ; 0x43 10ab8: e5841014 str r1, [r4, #20] 10abc: e5842000 str r2, [r4] 10ac0: e5842010 str r2, [r4, #16] 10ac4: e28dd008 add sp, sp, #8 10ac8: e8bd4070 pop {r4, r5, r6, lr} 10acc: e12fff1e bx lr 10ad0: e28d3004 add r3, sp, #4 10ad4: e1a0200d mov r2, sp 10ad8: e1a06000 mov r6, r0 10adc: ebffffc5 bl 109f8 <__swhatbuf_r> 10ae0: e59d1000 ldr r1, [sp] 10ae4: e1a05000 mov r5, r0 10ae8: e1a00006 mov r0, r6 10aec: eb000029 bl 10b98 <_malloc_r> 10af0: e3500000 cmp r0, #0 10af4: e1d430fc ldrsh r3, [r4, #12] 10af8: 0a00001a beq 10b68 <__smakebuf_r+0xd0> 10afc: e59dc004 ldr ip, [sp, #4] 10b00: e59f108c ldr r1, [pc, #140] ; 10b94 <__smakebuf_r+0xfc> 10b04: e59d2000 ldr r2, [sp] 10b08: e3833080 orr r3, r3, #128 ; 0x80 10b0c: e35c0000 cmp ip, #0 10b10: e586103c str r1, [r6, #60] ; 0x3c 10b14: e1c430bc strh r3, [r4, #12] 10b18: e5840000 str r0, [r4] 10b1c: e5840010 str r0, [r4, #16] 10b20: e5842014 str r2, [r4, #20] 10b24: 1a000004 bne 10b3c <__smakebuf_r+0xa4> 10b28: e1833005 orr r3, r3, r5 10b2c: e1c430bc strh r3, [r4, #12] 10b30: e28dd008 add sp, sp, #8 10b34: e8bd4070 pop {r4, r5, r6, lr} 10b38: e12fff1e bx lr 10b3c: e1a00006 mov r0, r6 10b40: e1d410fe ldrsh r1, [r4, #14] 10b44: eb0005d7 bl 122a8 <_isatty_r> 10b48: e3500000 cmp r0, #0 10b4c: 11d430bc ldrhne r3, [r4, #12] 10b50: 13c33003 bicne r3, r3, #3 10b54: 13833001 orrne r3, r3, #1 10b58: 11a03803 lslne r3, r3, #16 10b5c: 01d430fc ldrsheq r3, [r4, #12] 10b60: 11a03843 asrne r3, r3, #16 10b64: eaffffef b 10b28 <__smakebuf_r+0x90> 10b68: e3130c02 tst r3, #512 ; 0x200 10b6c: 1affffd4 bne 10ac4 <__smakebuf_r+0x2c> 10b70: e3a01001 mov r1, #1 10b74: e3c33003 bic r3, r3, #3 10b78: e2842043 add r2, r4, #67 ; 0x43 10b7c: e3833002 orr r3, r3, #2 10b80: e1c430bc strh r3, [r4, #12] 10b84: e5841014 str r1, [r4, #20] 10b88: e5842000 str r2, [r4] 10b8c: e5842010 str r2, [r4, #16] 10b90: eaffffcb b 10ac4 <__smakebuf_r+0x2c> 10b94: 0000f920 .word 0x0000f920 00010b98 <_malloc_r>: 10b98: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10b9c: e281600b add r6, r1, #11 10ba0: e3560016 cmp r6, #22 10ba4: e24dd00c sub sp, sp, #12 10ba8: e1a05000 mov r5, r0 10bac: 9a000072 bls 10d7c <_malloc_r+0x1e4> 10bb0: e3c66007 bic r6, r6, #7 10bb4: e1510006 cmp r1, r6 10bb8: 93a01000 movls r1, #0 10bbc: 83a01001 movhi r1, #1 10bc0: e1913fa6 orrs r3, r1, r6, lsr #31 10bc4: 1a000089 bne 10df0 <_malloc_r+0x258> 10bc8: eb000239 bl 114b4 <__malloc_lock> 10bcc: e3560f7e cmp r6, #504 ; 0x1f8 10bd0: 3a0001c8 bcc 112f8 <_malloc_r+0x760> 10bd4: e1b034a6 lsrs r3, r6, #9 10bd8: 0a00008b beq 10e0c <_malloc_r+0x274> 10bdc: e3530004 cmp r3, #4 10be0: 8a0000d6 bhi 10f40 <_malloc_r+0x3a8> 10be4: e1a03326 lsr r3, r6, #6 10be8: e2830039 add r0, r3, #57 ; 0x39 10bec: e283c038 add ip, r3, #56 ; 0x38 10bf0: e1a01180 lsl r1, r0, #3 10bf4: e59f7708 ldr r7, [pc, #1800] ; 11304 <_malloc_r+0x76c> 10bf8: e0871001 add r1, r7, r1 10bfc: e5914004 ldr r4, [r1, #4] 10c00: e2411008 sub r1, r1, #8 10c04: e1510004 cmp r1, r4 10c08: 1a000005 bne 10c24 <_malloc_r+0x8c> 10c0c: ea00000a b 10c3c <_malloc_r+0xa4> 10c10: e3520000 cmp r2, #0 10c14: aa000066 bge 10db4 <_malloc_r+0x21c> 10c18: e594400c ldr r4, [r4, #12] 10c1c: e1510004 cmp r1, r4 10c20: 0a000005 beq 10c3c <_malloc_r+0xa4> 10c24: e5943004 ldr r3, [r4, #4] 10c28: e3c33003 bic r3, r3, #3 10c2c: e0432006 sub r2, r3, r6 10c30: e352000f cmp r2, #15 10c34: dafffff5 ble 10c10 <_malloc_r+0x78> 10c38: e1a0000c mov r0, ip 10c3c: e5974010 ldr r4, [r7, #16] 10c40: e59fc6c0 ldr ip, [pc, #1728] ; 11308 <_malloc_r+0x770> 10c44: e154000c cmp r4, ip 10c48: 05973004 ldreq r3, [r7, #4] 10c4c: 0a000018 beq 10cb4 <_malloc_r+0x11c> 10c50: e5943004 ldr r3, [r4, #4] 10c54: e3c33003 bic r3, r3, #3 10c58: e0432006 sub r2, r3, r6 10c5c: e352000f cmp r2, #15 10c60: ca0000da bgt 10fd0 <_malloc_r+0x438> 10c64: e3520000 cmp r2, #0 10c68: e587c014 str ip, [r7, #20] 10c6c: e587c010 str ip, [r7, #16] 10c70: aa000069 bge 10e1c <_malloc_r+0x284> 10c74: e3530c02 cmp r3, #512 ; 0x200 10c78: 2a0000b9 bcs 10f64 <_malloc_r+0x3cc> 10c7c: e3a08001 mov r8, #1 10c80: e5972004 ldr r2, [r7, #4] 10c84: e1a031a3 lsr r3, r3, #3 10c88: e0831008 add r1, r3, r8 10c8c: e1a03143 asr r3, r3, #2 10c90: e1823318 orr r3, r2, r8, lsl r3 10c94: e087e181 add lr, r7, r1, lsl #3 10c98: e7978181 ldr r8, [r7, r1, lsl #3] 10c9c: e24e2008 sub r2, lr, #8 10ca0: e584200c str r2, [r4, #12] 10ca4: e5848008 str r8, [r4, #8] 10ca8: e5873004 str r3, [r7, #4] 10cac: e7874181 str r4, [r7, r1, lsl #3] 10cb0: e588400c str r4, [r8, #12] 10cb4: e3a01001 mov r1, #1 10cb8: e1a02140 asr r2, r0, #2 10cbc: e1a0e211 lsl lr, r1, r2 10cc0: e15e0003 cmp lr, r3 10cc4: 8a00005f bhi 10e48 <_malloc_r+0x2b0> 10cc8: e11e0003 tst lr, r3 10ccc: 1a000008 bne 10cf4 <_malloc_r+0x15c> 10cd0: e1a0e11e lsl lr, lr, r1 10cd4: e3c00003 bic r0, r0, #3 10cd8: e11e0003 tst lr, r3 10cdc: e2800004 add r0, r0, #4 10ce0: 1a000003 bne 10cf4 <_malloc_r+0x15c> 10ce4: e1a0e08e lsl lr, lr, #1 10ce8: e11e0003 tst lr, r3 10cec: e2800004 add r0, r0, #4 10cf0: 0afffffb beq 10ce4 <_malloc_r+0x14c> 10cf4: e0879180 add r9, r7, r0, lsl #3 10cf8: e1a01009 mov r1, r9 10cfc: e1a04000 mov r4, r0 10d00: e591800c ldr r8, [r1, #12] 10d04: e1510008 cmp r1, r8 10d08: 1a000005 bne 10d24 <_malloc_r+0x18c> 10d0c: ea0000bc b 11004 <_malloc_r+0x46c> 10d10: e3520000 cmp r2, #0 10d14: aa0000c4 bge 1102c <_malloc_r+0x494> 10d18: e598800c ldr r8, [r8, #12] 10d1c: e1510008 cmp r1, r8 10d20: 0a0000b7 beq 11004 <_malloc_r+0x46c> 10d24: e5983004 ldr r3, [r8, #4] 10d28: e3c33003 bic r3, r3, #3 10d2c: e0432006 sub r2, r3, r6 10d30: e352000f cmp r2, #15 10d34: dafffff5 ble 10d10 <_malloc_r+0x178> 10d38: e598100c ldr r1, [r8, #12] 10d3c: e598e008 ldr lr, [r8, #8] 10d40: e3864001 orr r4, r6, #1 10d44: e5884004 str r4, [r8, #4] 10d48: e0886006 add r6, r8, r6 10d4c: e3824001 orr r4, r2, #1 10d50: e58e100c str r1, [lr, #12] 10d54: e1a00005 mov r0, r5 10d58: e581e008 str lr, [r1, #8] 10d5c: e5876014 str r6, [r7, #20] 10d60: e5876010 str r6, [r7, #16] 10d64: e9861010 stmib r6, {r4, ip} 10d68: e586c00c str ip, [r6, #12] 10d6c: e7882003 str r2, [r8, r3] 10d70: eb0001d5 bl 114cc <__malloc_unlock> 10d74: e2884008 add r4, r8, #8 10d78: ea000018 b 10de0 <_malloc_r+0x248> 10d7c: e3510010 cmp r1, #16 10d80: 8a00001a bhi 10df0 <_malloc_r+0x258> 10d84: eb0001ca bl 114b4 <__malloc_lock> 10d88: e3a06010 mov r6, #16 10d8c: e3a03018 mov r3, #24 10d90: e3a00002 mov r0, #2 10d94: e59f7568 ldr r7, [pc, #1384] ; 11304 <_malloc_r+0x76c> 10d98: e0873003 add r3, r7, r3 10d9c: e5934004 ldr r4, [r3, #4] 10da0: e2432008 sub r2, r3, #8 10da4: e1540002 cmp r4, r2 10da8: 0a00009a beq 11018 <_malloc_r+0x480> 10dac: e5943004 ldr r3, [r4, #4] 10db0: e3c33003 bic r3, r3, #3 10db4: e0843003 add r3, r4, r3 10db8: e5932004 ldr r2, [r3, #4] 10dbc: e594100c ldr r1, [r4, #12] 10dc0: e594c008 ldr ip, [r4, #8] 10dc4: e3822001 orr r2, r2, #1 10dc8: e58c100c str r1, [ip, #12] 10dcc: e1a00005 mov r0, r5 10dd0: e581c008 str ip, [r1, #8] 10dd4: e5832004 str r2, [r3, #4] 10dd8: eb0001bb bl 114cc <__malloc_unlock> 10ddc: e2844008 add r4, r4, #8 10de0: e1a00004 mov r0, r4 10de4: e28dd00c add sp, sp, #12 10de8: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10dec: e12fff1e bx lr 10df0: e3a04000 mov r4, #0 10df4: e3a0300c mov r3, #12 10df8: e1a00004 mov r0, r4 10dfc: e5853000 str r3, [r5] 10e00: e28dd00c add sp, sp, #12 10e04: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10e08: e12fff1e bx lr 10e0c: e3a01c02 mov r1, #512 ; 0x200 10e10: e3a00040 mov r0, #64 ; 0x40 10e14: e3a0c03f mov ip, #63 ; 0x3f 10e18: eaffff75 b 10bf4 <_malloc_r+0x5c> 10e1c: e0843003 add r3, r4, r3 10e20: e5932004 ldr r2, [r3, #4] 10e24: e3822001 orr r2, r2, #1 10e28: e1a00005 mov r0, r5 10e2c: e5832004 str r2, [r3, #4] 10e30: e2844008 add r4, r4, #8 10e34: eb0001a4 bl 114cc <__malloc_unlock> 10e38: e1a00004 mov r0, r4 10e3c: e28dd00c add sp, sp, #12 10e40: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10e44: e12fff1e bx lr 10e48: e5974008 ldr r4, [r7, #8] 10e4c: e5943004 ldr r3, [r4, #4] 10e50: e3c39003 bic r9, r3, #3 10e54: e0493006 sub r3, r9, r6 10e58: e353000f cmp r3, #15 10e5c: c3a02000 movgt r2, #0 10e60: d3a02001 movle r2, #1 10e64: e1590006 cmp r9, r6 10e68: 33822001 orrcc r2, r2, #1 10e6c: e3520000 cmp r2, #0 10e70: 0a000025 beq 10f0c <_malloc_r+0x374> 10e74: e59fa490 ldr sl, [pc, #1168] ; 1130c <_malloc_r+0x774> 10e78: e59f2490 ldr r2, [pc, #1168] ; 11310 <_malloc_r+0x778> 10e7c: e59a3000 ldr r3, [sl] 10e80: e5922000 ldr r2, [r2] 10e84: e3730001 cmn r3, #1 10e88: e0862002 add r2, r6, r2 10e8c: 12823a01 addne r3, r2, #4096 ; 0x1000 10e90: 1283300f addne r3, r3, #15 10e94: 13c32eff bicne r2, r3, #4080 ; 0xff0 10e98: 02822010 addeq r2, r2, #16 10e9c: 13c2200f bicne r2, r2, #15 10ea0: e1a01002 mov r1, r2 10ea4: e1a00005 mov r0, r5 10ea8: e58d2004 str r2, [sp, #4] 10eac: eb0002c1 bl 119b8 <_sbrk_r> 10eb0: e3700001 cmn r0, #1 10eb4: e1a0b000 mov fp, r0 10eb8: e59d2004 ldr r2, [sp, #4] 10ebc: 0a000003 beq 10ed0 <_malloc_r+0x338> 10ec0: e0843009 add r3, r4, r9 10ec4: e1540007 cmp r4, r7 10ec8: 11530000 cmpne r3, r0 10ecc: 9a000084 bls 110e4 <_malloc_r+0x54c> 10ed0: e5974008 ldr r4, [r7, #8] 10ed4: e5943004 ldr r3, [r4, #4] 10ed8: e3c33003 bic r3, r3, #3 10edc: e1560003 cmp r6, r3 10ee0: 93a02000 movls r2, #0 10ee4: 83a02001 movhi r2, #1 10ee8: e0433006 sub r3, r3, r6 10eec: e353000f cmp r3, #15 10ef0: d3822001 orrle r2, r2, #1 10ef4: e3520000 cmp r2, #0 10ef8: 0a000003 beq 10f0c <_malloc_r+0x374> 10efc: e1a00005 mov r0, r5 10f00: eb000171 bl 114cc <__malloc_unlock> 10f04: e3a04000 mov r4, #0 10f08: eaffffb4 b 10de0 <_malloc_r+0x248> 10f0c: e3862001 orr r2, r6, #1 10f10: e3833001 orr r3, r3, #1 10f14: e0846006 add r6, r4, r6 10f18: e5842004 str r2, [r4, #4] 10f1c: e1a00005 mov r0, r5 10f20: e5876008 str r6, [r7, #8] 10f24: e2844008 add r4, r4, #8 10f28: e5863004 str r3, [r6, #4] 10f2c: eb000166 bl 114cc <__malloc_unlock> 10f30: e1a00004 mov r0, r4 10f34: e28dd00c add sp, sp, #12 10f38: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 10f3c: e12fff1e bx lr 10f40: e3530014 cmp r3, #20 10f44: 9a000044 bls 1105c <_malloc_r+0x4c4> 10f48: e3530054 cmp r3, #84 ; 0x54 10f4c: 8a0000a8 bhi 111f4 <_malloc_r+0x65c> 10f50: e1a03626 lsr r3, r6, #12 10f54: e283006f add r0, r3, #111 ; 0x6f 10f58: e283c06e add ip, r3, #110 ; 0x6e 10f5c: e1a01180 lsl r1, r0, #3 10f60: eaffff23 b 10bf4 <_malloc_r+0x5c> 10f64: e1a024a3 lsr r2, r3, #9 10f68: e3520004 cmp r2, #4 10f6c: 9a00003e bls 1106c <_malloc_r+0x4d4> 10f70: e3520014 cmp r2, #20 10f74: 8a0000b4 bhi 1124c <_malloc_r+0x6b4> 10f78: e282805c add r8, r2, #92 ; 0x5c 10f7c: e1a08188 lsl r8, r8, #3 10f80: e282105b add r1, r2, #91 ; 0x5b 10f84: e087e008 add lr, r7, r8 10f88: e7972008 ldr r2, [r7, r8] 10f8c: e24ee008 sub lr, lr, #8 10f90: e15e0002 cmp lr, r2 10f94: 0a00009d beq 11210 <_malloc_r+0x678> 10f98: e5921004 ldr r1, [r2, #4] 10f9c: e3c11003 bic r1, r1, #3 10fa0: e1530001 cmp r3, r1 10fa4: 2a000090 bcs 111ec <_malloc_r+0x654> 10fa8: e5922008 ldr r2, [r2, #8] 10fac: e15e0002 cmp lr, r2 10fb0: 1afffff8 bne 10f98 <_malloc_r+0x400> 10fb4: e59e200c ldr r2, [lr, #12] 10fb8: e5973004 ldr r3, [r7, #4] 10fbc: e584200c str r2, [r4, #12] 10fc0: e584e008 str lr, [r4, #8] 10fc4: e5824008 str r4, [r2, #8] 10fc8: e58e400c str r4, [lr, #12] 10fcc: eaffff38 b 10cb4 <_malloc_r+0x11c> 10fd0: e386e001 orr lr, r6, #1 10fd4: e3821001 orr r1, r2, #1 10fd8: e0846006 add r6, r4, r6 10fdc: e584e004 str lr, [r4, #4] 10fe0: e1a00005 mov r0, r5 10fe4: e5876014 str r6, [r7, #20] 10fe8: e5876010 str r6, [r7, #16] 10fec: e586c00c str ip, [r6, #12] 10ff0: e9861002 stmib r6, {r1, ip} 10ff4: e7842003 str r2, [r4, r3] 10ff8: eb000133 bl 114cc <__malloc_unlock> 10ffc: e2844008 add r4, r4, #8 11000: eaffff76 b 10de0 <_malloc_r+0x248> 11004: e2844001 add r4, r4, #1 11008: e3140003 tst r4, #3 1100c: e2811008 add r1, r1, #8 11010: 1affff3a bne 10d00 <_malloc_r+0x168> 11014: ea00001d b 11090 <_malloc_r+0x4f8> 11018: e593400c ldr r4, [r3, #12] 1101c: e1530004 cmp r3, r4 11020: 02800002 addeq r0, r0, #2 11024: 0affff04 beq 10c3c <_malloc_r+0xa4> 11028: eaffff5f b 10dac <_malloc_r+0x214> 1102c: e1a04008 mov r4, r8 11030: e0883003 add r3, r8, r3 11034: e5932004 ldr r2, [r3, #4] 11038: e598100c ldr r1, [r8, #12] 1103c: e5b4c008 ldr ip, [r4, #8]! 11040: e3822001 orr r2, r2, #1 11044: e5832004 str r2, [r3, #4] 11048: e1a00005 mov r0, r5 1104c: e58c100c str r1, [ip, #12] 11050: e581c008 str ip, [r1, #8] 11054: eb00011c bl 114cc <__malloc_unlock> 11058: eaffff60 b 10de0 <_malloc_r+0x248> 1105c: e283005c add r0, r3, #92 ; 0x5c 11060: e283c05b add ip, r3, #91 ; 0x5b 11064: e1a01180 lsl r1, r0, #3 11068: eafffee1 b 10bf4 <_malloc_r+0x5c> 1106c: e1a02323 lsr r2, r3, #6 11070: e2828039 add r8, r2, #57 ; 0x39 11074: e1a08188 lsl r8, r8, #3 11078: e2821038 add r1, r2, #56 ; 0x38 1107c: eaffffc0 b 10f84 <_malloc_r+0x3ec> 11080: e4193008 ldr r3, [r9], #-8 11084: e1590003 cmp r9, r3 11088: e2400001 sub r0, r0, #1 1108c: 1a000097 bne 112f0 <_malloc_r+0x758> 11090: e3100003 tst r0, #3 11094: 1afffff9 bne 11080 <_malloc_r+0x4e8> 11098: e5973004 ldr r3, [r7, #4] 1109c: e1c3300e bic r3, r3, lr 110a0: e5873004 str r3, [r7, #4] 110a4: e1b0e08e lsls lr, lr, #1 110a8: 13a02001 movne r2, #1 110ac: 03a02000 moveq r2, #0 110b0: e15e0003 cmp lr, r3 110b4: 83a02000 movhi r2, #0 110b8: 92022001 andls r2, r2, #1 110bc: e3520000 cmp r2, #0 110c0: 0affff60 beq 10e48 <_malloc_r+0x2b0> 110c4: e11e0003 tst lr, r3 110c8: e1a00004 mov r0, r4 110cc: 1affff08 bne 10cf4 <_malloc_r+0x15c> 110d0: e1a0e08e lsl lr, lr, #1 110d4: e11e0003 tst lr, r3 110d8: e2800004 add r0, r0, #4 110dc: 0afffffb beq 110d0 <_malloc_r+0x538> 110e0: eaffff03 b 10cf4 <_malloc_r+0x15c> 110e4: e59f8228 ldr r8, [pc, #552] ; 11314 <_malloc_r+0x77c> 110e8: e5981000 ldr r1, [r8] 110ec: e1530000 cmp r3, r0 110f0: e0821001 add r1, r2, r1 110f4: e5881000 str r1, [r8] 110f8: 0a00005e beq 11278 <_malloc_r+0x6e0> 110fc: e59a0000 ldr r0, [sl] 11100: e3700001 cmn r0, #1 11104: 104b3003 subne r3, fp, r3 11108: 10831001 addne r1, r3, r1 1110c: 058ab000 streq fp, [sl] 11110: 15881000 strne r1, [r8] 11114: e21b1007 ands r1, fp, #7 11118: 03a01a01 moveq r1, #4096 ; 0x1000 1111c: 12613008 rsbne r3, r1, #8 11120: 108bb003 addne fp, fp, r3 11124: e08b2002 add r2, fp, r2 11128: 12611a01 rsbne r1, r1, #4096 ; 0x1000 1112c: e1a02a02 lsl r2, r2, #20 11130: 12811008 addne r1, r1, #8 11134: e1a02a22 lsr r2, r2, #20 11138: e041a002 sub sl, r1, r2 1113c: e1a0100a mov r1, sl 11140: e1a00005 mov r0, r5 11144: eb00021b bl 119b8 <_sbrk_r> 11148: e3700001 cmn r0, #1 1114c: 03a0a000 moveq sl, #0 11150: 03a03001 moveq r3, #1 11154: 1040300b subne r3, r0, fp 11158: e5981000 ldr r1, [r8] 1115c: 1083300a addne r3, r3, sl 11160: 13833001 orrne r3, r3, #1 11164: e08a1001 add r1, sl, r1 11168: e1540007 cmp r4, r7 1116c: e587b008 str fp, [r7, #8] 11170: e5881000 str r1, [r8] 11174: e58b3004 str r3, [fp, #4] 11178: 0a00000f beq 111bc <_malloc_r+0x624> 1117c: e359000f cmp r9, #15 11180: 93a03001 movls r3, #1 11184: 958b3004 strls r3, [fp, #4] 11188: 9affff5b bls 10efc <_malloc_r+0x364> 1118c: e3a00005 mov r0, #5 11190: e5942004 ldr r2, [r4, #4] 11194: e249300c sub r3, r9, #12 11198: e3c33007 bic r3, r3, #7 1119c: e2022001 and r2, r2, #1 111a0: e1822003 orr r2, r2, r3 111a4: e353000f cmp r3, #15 111a8: e0843003 add r3, r4, r3 111ac: e5842004 str r2, [r4, #4] 111b0: e5830004 str r0, [r3, #4] 111b4: e5830008 str r0, [r3, #8] 111b8: 8a000037 bhi 1129c <_malloc_r+0x704> 111bc: e59f3154 ldr r3, [pc, #340] ; 11318 <_malloc_r+0x780> 111c0: e5932000 ldr r2, [r3] 111c4: e1510002 cmp r1, r2 111c8: e59f214c ldr r2, [pc, #332] ; 1131c <_malloc_r+0x784> 111cc: 85831000 strhi r1, [r3] 111d0: e5974008 ldr r4, [r7, #8] 111d4: e5923000 ldr r3, [r2] 111d8: e1510003 cmp r1, r3 111dc: e5943004 ldr r3, [r4, #4] 111e0: 85821000 strhi r1, [r2] 111e4: e3c33003 bic r3, r3, #3 111e8: eaffff3b b 10edc <_malloc_r+0x344> 111ec: e1a0e002 mov lr, r2 111f0: eaffff6f b 10fb4 <_malloc_r+0x41c> 111f4: e3530f55 cmp r3, #340 ; 0x154 111f8: 8a00000b bhi 1122c <_malloc_r+0x694> 111fc: e1a037a6 lsr r3, r6, #15 11200: e2830078 add r0, r3, #120 ; 0x78 11204: e283c077 add ip, r3, #119 ; 0x77 11208: e1a01180 lsl r1, r0, #3 1120c: eafffe78 b 10bf4 <_malloc_r+0x5c> 11210: e3a08001 mov r8, #1 11214: e5973004 ldr r3, [r7, #4] 11218: e1a02141 asr r2, r1, #2 1121c: e1833218 orr r3, r3, r8, lsl r2 11220: e5873004 str r3, [r7, #4] 11224: e1a0200e mov r2, lr 11228: eaffff63 b 10fbc <_malloc_r+0x424> 1122c: e59f20ec ldr r2, [pc, #236] ; 11320 <_malloc_r+0x788> 11230: e1530002 cmp r3, r2 11234: 8a00000b bhi 11268 <_malloc_r+0x6d0> 11238: e1a03926 lsr r3, r6, #18 1123c: e283007d add r0, r3, #125 ; 0x7d 11240: e283c07c add ip, r3, #124 ; 0x7c 11244: e1a01180 lsl r1, r0, #3 11248: eafffe69 b 10bf4 <_malloc_r+0x5c> 1124c: e3520054 cmp r2, #84 ; 0x54 11250: 8a000016 bhi 112b0 <_malloc_r+0x718> 11254: e1a02623 lsr r2, r3, #12 11258: e282806f add r8, r2, #111 ; 0x6f 1125c: e1a08188 lsl r8, r8, #3 11260: e282106e add r1, r2, #110 ; 0x6e 11264: eaffff46 b 10f84 <_malloc_r+0x3ec> 11268: e3a01ffe mov r1, #1016 ; 0x3f8 1126c: e3a0007f mov r0, #127 ; 0x7f 11270: e3a0c07e mov ip, #126 ; 0x7e 11274: eafffe5e b 10bf4 <_malloc_r+0x5c> 11278: e1a00a03 lsl r0, r3, #20 1127c: e1a00a20 lsr r0, r0, #20 11280: e3500000 cmp r0, #0 11284: 1affff9c bne 110fc <_malloc_r+0x564> 11288: e0893002 add r3, r9, r2 1128c: e5972008 ldr r2, [r7, #8] 11290: e3833001 orr r3, r3, #1 11294: e5823004 str r3, [r2, #4] 11298: eaffffc7 b 111bc <_malloc_r+0x624> 1129c: e2841008 add r1, r4, #8 112a0: e1a00005 mov r0, r5 112a4: ebfffb5e bl 10024 <_free_r> 112a8: e5981000 ldr r1, [r8] 112ac: eaffffc2 b 111bc <_malloc_r+0x624> 112b0: e3520f55 cmp r2, #340 ; 0x154 112b4: 8a000004 bhi 112cc <_malloc_r+0x734> 112b8: e1a027a3 lsr r2, r3, #15 112bc: e2828078 add r8, r2, #120 ; 0x78 112c0: e1a08188 lsl r8, r8, #3 112c4: e2821077 add r1, r2, #119 ; 0x77 112c8: eaffff2d b 10f84 <_malloc_r+0x3ec> 112cc: e59f104c ldr r1, [pc, #76] ; 11320 <_malloc_r+0x788> 112d0: e1520001 cmp r2, r1 112d4: 91a02923 lsrls r2, r3, #18 112d8: 9282807d addls r8, r2, #125 ; 0x7d 112dc: 91a08188 lslls r8, r8, #3 112e0: 9282107c addls r1, r2, #124 ; 0x7c 112e4: 83a08ffe movhi r8, #1016 ; 0x3f8 112e8: 83a0107e movhi r1, #126 ; 0x7e 112ec: eaffff24 b 10f84 <_malloc_r+0x3ec> 112f0: e5973004 ldr r3, [r7, #4] 112f4: eaffff6a b 110a4 <_malloc_r+0x50c> 112f8: e1a001a6 lsr r0, r6, #3 112fc: e2863008 add r3, r6, #8 11300: eafffea3 b 10d94 <_malloc_r+0x1fc> 11304: 00013b04 .word 0x00013b04 11308: 00013b0c .word 0x00013b0c 1130c: 00013f0c .word 0x00013f0c 11310: 0003c170 .word 0x0003c170 11314: 0003c140 .word 0x0003c140 11318: 0003c168 .word 0x0003c168 1131c: 0003c16c .word 0x0003c16c 11320: 00000554 .word 0x00000554 00011324 <_mbtowc_r>: 11324: e59fc024 ldr ip, [pc, #36] ; 11350 <_mbtowc_r+0x2c> 11328: e59cc000 ldr ip, [ip] 1132c: e59cc034 ldr ip, [ip, #52] ; 0x34 11330: e52de004 push {lr} ; (str lr, [sp, #-4]!) 11334: e59fe018 ldr lr, [pc, #24] ; 11354 <_mbtowc_r+0x30> 11338: e35c0000 cmp ip, #0 1133c: 01a0c00e moveq ip, lr 11340: e59ce0e4 ldr lr, [ip, #228] ; 0xe4 11344: e1a0c00e mov ip, lr 11348: e49de004 pop {lr} ; (ldr lr, [sp], #4) 1134c: e12fff1c bx ip 11350: 0001356c .word 0x0001356c 11354: 00013998 .word 0x00013998 00011358 <__ascii_mbtowc>: 11358: e3510000 cmp r1, #0 1135c: e24dd008 sub sp, sp, #8 11360: 028d1004 addeq r1, sp, #4 11364: e3520000 cmp r2, #0 11368: 0a000008 beq 11390 <__ascii_mbtowc+0x38> 1136c: e3530000 cmp r3, #0 11370: 0a000009 beq 1139c <__ascii_mbtowc+0x44> 11374: e5d23000 ldrb r3, [r2] 11378: e5813000 str r3, [r1] 1137c: e5d22000 ldrb r2, [r2] 11380: e2920000 adds r0, r2, #0 11384: 13a00001 movne r0, #1 11388: e28dd008 add sp, sp, #8 1138c: e12fff1e bx lr 11390: e1a00002 mov r0, r2 11394: e28dd008 add sp, sp, #8 11398: e12fff1e bx lr 1139c: e3e00001 mvn r0, #1 113a0: eafffff8 b 11388 <__ascii_mbtowc+0x30> 000113a4 : 113a4: e3100003 tst r0, #3 113a8: e92d4070 push {r4, r5, r6, lr} 113ac: e201e0ff and lr, r1, #255 ; 0xff 113b0: 0a000038 beq 11498 113b4: e3520000 cmp r2, #0 113b8: e242c001 sub ip, r2, #1 113bc: 0a00001e beq 1143c 113c0: e5d03000 ldrb r3, [r0] 113c4: e153000e cmp r3, lr 113c8: 0a00001c beq 11440 113cc: e2803001 add r3, r0, #1 113d0: ea000005 b 113ec 113d4: e25cc001 subs ip, ip, #1 113d8: 3a000017 bcc 1143c 113dc: e5d02000 ldrb r2, [r0] 113e0: e152000e cmp r2, lr 113e4: e2833001 add r3, r3, #1 113e8: 0a000014 beq 11440 113ec: e3130003 tst r3, #3 113f0: e1a00003 mov r0, r3 113f4: 1afffff6 bne 113d4 113f8: e35c0003 cmp ip, #3 113fc: 8a000011 bhi 11448 11400: e35c0000 cmp ip, #0 11404: 0a000025 beq 114a0 11408: e5d03000 ldrb r3, [r0] 1140c: e153000e cmp r3, lr 11410: 0a00000a beq 11440 11414: e080c00c add ip, r0, ip 11418: e2803001 add r3, r0, #1 1141c: ea000003 b 11430 11420: e5d02000 ldrb r2, [r0] 11424: e152000e cmp r2, lr 11428: e2833001 add r3, r3, #1 1142c: 0a000003 beq 11440 11430: e15c0003 cmp ip, r3 11434: e1a00003 mov r0, r3 11438: 1afffff8 bne 11420 1143c: e3a00000 mov r0, #0 11440: e8bd4070 pop {r4, r5, r6, lr} 11444: e12fff1e bx lr 11448: e59f4058 ldr r4, [pc, #88] ; 114a8 1144c: e0044401 and r4, r4, r1, lsl #8 11450: e184400e orr r4, r4, lr 11454: e59f6050 ldr r6, [pc, #80] ; 114ac 11458: e59f5050 ldr r5, [pc, #80] ; 114b0 1145c: e1844804 orr r4, r4, r4, lsl #16 11460: e5903000 ldr r3, [r0] 11464: e0233004 eor r3, r3, r4 11468: e0832006 add r2, r3, r6 1146c: e1c23003 bic r3, r2, r3 11470: e1130005 tst r3, r5 11474: e1a01000 mov r1, r0 11478: e2800004 add r0, r0, #4 1147c: 1a000003 bne 11490 11480: e24cc004 sub ip, ip, #4 11484: e35c0003 cmp ip, #3 11488: 8afffff4 bhi 11460 1148c: eaffffdb b 11400 11490: e1a00001 mov r0, r1 11494: eaffffdb b 11408 11498: e1a0c002 mov ip, r2 1149c: eaffffd5 b 113f8 114a0: e1a0000c mov r0, ip 114a4: eaffffe5 b 11440 114a8: 0000ffff .word 0x0000ffff 114ac: fefefeff .word 0xfefefeff 114b0: 80808080 .word 0x80808080 000114b4 <__malloc_lock>: 114b4: e92d4010 push {r4, lr} 114b8: e59f0008 ldr r0, [pc, #8] ; 114c8 <__malloc_lock+0x14> 114bc: ebfffd46 bl 109dc <__retarget_lock_acquire_recursive> 114c0: e8bd4010 pop {r4, lr} 114c4: e12fff1e bx lr 114c8: 0003c190 .word 0x0003c190 000114cc <__malloc_unlock>: 114cc: e92d4010 push {r4, lr} 114d0: e59f0008 ldr r0, [pc, #8] ; 114e0 <__malloc_unlock+0x14> 114d4: ebfffd46 bl 109f4 <__retarget_lock_release_recursive> 114d8: e8bd4010 pop {r4, lr} 114dc: e12fff1e bx lr 114e0: 0003c190 .word 0x0003c190 000114e4 <_realloc_r>: 114e4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} 114e8: e2517000 subs r7, r1, #0 114ec: e24dd00c sub sp, sp, #12 114f0: e1a09002 mov r9, r2 114f4: 0a00007f beq 116f8 <_realloc_r+0x214> 114f8: e289400b add r4, r9, #11 114fc: e1a08000 mov r8, r0 11500: ebffffeb bl 114b4 <__malloc_lock> 11504: e3540016 cmp r4, #22 11508: 93a02010 movls r2, #16 1150c: 93a03000 movls r3, #0 11510: 91a04002 movls r4, r2 11514: 83c44007 bichi r4, r4, #7 11518: 81a03fa4 lsrhi r3, r4, #31 1151c: 81a02004 movhi r2, r4 11520: e1540009 cmp r4, r9 11524: 33833001 orrcc r3, r3, #1 11528: e3530000 cmp r3, #0 1152c: 13a0300c movne r3, #12 11530: e5171004 ldr r1, [r7, #-4] 11534: e2475008 sub r5, r7, #8 11538: e3c16003 bic r6, r1, #3 1153c: 13a09000 movne r9, #0 11540: 15883000 strne r3, [r8] 11544: 1a00000f bne 11588 <_realloc_r+0xa4> 11548: e1560002 cmp r6, r2 1154c: ba000011 blt 11598 <_realloc_r+0xb4> 11550: e1a09007 mov r9, r7 11554: e0463004 sub r3, r6, r4 11558: e353000f cmp r3, #15 1155c: 8a000056 bhi 116bc <_realloc_r+0x1d8> 11560: e5953004 ldr r3, [r5, #4] 11564: e2033001 and r3, r3, #1 11568: e1833006 orr r3, r3, r6 1156c: e5853004 str r3, [r5, #4] 11570: e0855006 add r5, r5, r6 11574: e5953004 ldr r3, [r5, #4] 11578: e3833001 orr r3, r3, #1 1157c: e5853004 str r3, [r5, #4] 11580: e1a00008 mov r0, r8 11584: ebffffd0 bl 114cc <__malloc_unlock> 11588: e1a00009 mov r0, r9 1158c: e28dd00c add sp, sp, #12 11590: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 11594: e12fff1e bx lr 11598: e59fb414 ldr fp, [pc, #1044] ; 119b4 <_realloc_r+0x4d0> 1159c: e59b3008 ldr r3, [fp, #8] 115a0: e085c006 add ip, r5, r6 115a4: e15c0003 cmp ip, r3 115a8: 0a0000a5 beq 11844 <_realloc_r+0x360> 115ac: e59c0004 ldr r0, [ip, #4] 115b0: e3c03001 bic r3, r0, #1 115b4: e08c3003 add r3, ip, r3 115b8: e5933004 ldr r3, [r3, #4] 115bc: e3130001 tst r3, #1 115c0: 0a000032 beq 11690 <_realloc_r+0x1ac> 115c4: e3110001 tst r1, #1 115c8: 0a000088 beq 117f0 <_realloc_r+0x30c> 115cc: e1a01009 mov r1, r9 115d0: e1a00008 mov r0, r8 115d4: ebfffd6f bl 10b98 <_malloc_r> 115d8: e2509000 subs r9, r0, #0 115dc: 0affffe7 beq 11580 <_realloc_r+0x9c> 115e0: e5173004 ldr r3, [r7, #-4] 115e4: e3c33001 bic r3, r3, #1 115e8: e0853003 add r3, r5, r3 115ec: e2492008 sub r2, r9, #8 115f0: e1520003 cmp r2, r3 115f4: 0a0000e3 beq 11988 <_realloc_r+0x4a4> 115f8: e2462004 sub r2, r6, #4 115fc: e3520024 cmp r2, #36 ; 0x24 11600: 8a0000dd bhi 1197c <_realloc_r+0x498> 11604: e3520013 cmp r2, #19 11608: 91a03009 movls r3, r9 1160c: 91a02007 movls r2, r7 11610: 9a000014 bls 11668 <_realloc_r+0x184> 11614: e5973000 ldr r3, [r7] 11618: e5893000 str r3, [r9] 1161c: e5973004 ldr r3, [r7, #4] 11620: e352001b cmp r2, #27 11624: e5893004 str r3, [r9, #4] 11628: 92872008 addls r2, r7, #8 1162c: 92893008 addls r3, r9, #8 11630: 9a00000c bls 11668 <_realloc_r+0x184> 11634: e5973008 ldr r3, [r7, #8] 11638: e5893008 str r3, [r9, #8] 1163c: e597300c ldr r3, [r7, #12] 11640: e589300c str r3, [r9, #12] 11644: e3520024 cmp r2, #36 ; 0x24 11648: 05973010 ldreq r3, [r7, #16] 1164c: 05893010 streq r3, [r9, #16] 11650: 05972014 ldreq r2, [r7, #20] 11654: 12893010 addne r3, r9, #16 11658: 05892014 streq r2, [r9, #20] 1165c: 12872010 addne r2, r7, #16 11660: 02893018 addeq r3, r9, #24 11664: 02872018 addeq r2, r7, #24 11668: e5921000 ldr r1, [r2] 1166c: e5831000 str r1, [r3] 11670: e5921004 ldr r1, [r2, #4] 11674: e5831004 str r1, [r3, #4] 11678: e5922008 ldr r2, [r2, #8] 1167c: e5832008 str r2, [r3, #8] 11680: e1a01007 mov r1, r7 11684: e1a00008 mov r0, r8 11688: ebfffa65 bl 10024 <_free_r> 1168c: eaffffbb b 11580 <_realloc_r+0x9c> 11690: e3c00003 bic r0, r0, #3 11694: e0863000 add r3, r6, r0 11698: e1530002 cmp r3, r2 1169c: ba00001c blt 11714 <_realloc_r+0x230> 116a0: e28c1008 add r1, ip, #8 116a4: e8910006 ldm r1, {r1, r2} 116a8: e1a09007 mov r9, r7 116ac: e581200c str r2, [r1, #12] 116b0: e1a06003 mov r6, r3 116b4: e5821008 str r1, [r2, #8] 116b8: eaffffa5 b 11554 <_realloc_r+0x70> 116bc: e5952004 ldr r2, [r5, #4] 116c0: e2022001 and r2, r2, #1 116c4: e0851004 add r1, r5, r4 116c8: e3833001 orr r3, r3, #1 116cc: e1822004 orr r2, r2, r4 116d0: e5852004 str r2, [r5, #4] 116d4: e5813004 str r3, [r1, #4] 116d8: e0855006 add r5, r5, r6 116dc: e5953004 ldr r3, [r5, #4] 116e0: e3833001 orr r3, r3, #1 116e4: e2811008 add r1, r1, #8 116e8: e5853004 str r3, [r5, #4] 116ec: e1a00008 mov r0, r8 116f0: ebfffa4b bl 10024 <_free_r> 116f4: eaffffa1 b 11580 <_realloc_r+0x9c> 116f8: e1a01002 mov r1, r2 116fc: ebfffd25 bl 10b98 <_malloc_r> 11700: e1a09000 mov r9, r0 11704: e1a00009 mov r0, r9 11708: e28dd00c add sp, sp, #12 1170c: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} 11710: e12fff1e bx lr 11714: e3110001 tst r1, #1 11718: 1affffab bne 115cc <_realloc_r+0xe8> 1171c: e517a008 ldr sl, [r7, #-8] 11720: e045a00a sub sl, r5, sl 11724: e59a1004 ldr r1, [sl, #4] 11728: e3c11003 bic r1, r1, #3 1172c: e0810000 add r0, r1, r0 11730: e0803006 add r3, r0, r6 11734: e1530002 cmp r3, r2 11738: ba000030 blt 11800 <_realloc_r+0x31c> 1173c: e1a0900a mov r9, sl 11740: e28c1008 add r1, ip, #8 11744: e8910006 ldm r1, {r1, r2} 11748: e581200c str r2, [r1, #12] 1174c: e5821008 str r1, [r2, #8] 11750: e59a100c ldr r1, [sl, #12] 11754: e5b90008 ldr r0, [r9, #8]! 11758: e2462004 sub r2, r6, #4 1175c: e3520024 cmp r2, #36 ; 0x24 11760: e580100c str r1, [r0, #12] 11764: e5810008 str r0, [r1, #8] 11768: 8a00002f bhi 1182c <_realloc_r+0x348> 1176c: e3520013 cmp r2, #19 11770: 91a02009 movls r2, r9 11774: 9a000014 bls 117cc <_realloc_r+0x2e8> 11778: e5971000 ldr r1, [r7] 1177c: e58a1008 str r1, [sl, #8] 11780: e5971004 ldr r1, [r7, #4] 11784: e352001b cmp r2, #27 11788: e58a100c str r1, [sl, #12] 1178c: 92877008 addls r7, r7, #8 11790: 928a2010 addls r2, sl, #16 11794: 9a00000c bls 117cc <_realloc_r+0x2e8> 11798: e5971008 ldr r1, [r7, #8] 1179c: e58a1010 str r1, [sl, #16] 117a0: e597100c ldr r1, [r7, #12] 117a4: e58a1014 str r1, [sl, #20] 117a8: e3520024 cmp r2, #36 ; 0x24 117ac: 05972010 ldreq r2, [r7, #16] 117b0: 058a2018 streq r2, [sl, #24] 117b4: 05972014 ldreq r2, [r7, #20] 117b8: 12877010 addne r7, r7, #16 117bc: 058a201c streq r2, [sl, #28] 117c0: 128a2018 addne r2, sl, #24 117c4: 02877018 addeq r7, r7, #24 117c8: 028a2020 addeq r2, sl, #32 117cc: e5971000 ldr r1, [r7] 117d0: e5821000 str r1, [r2] 117d4: e5971004 ldr r1, [r7, #4] 117d8: e5821004 str r1, [r2, #4] 117dc: e5971008 ldr r1, [r7, #8] 117e0: e1a06003 mov r6, r3 117e4: e1a0500a mov r5, sl 117e8: e5821008 str r1, [r2, #8] 117ec: eaffff58 b 11554 <_realloc_r+0x70> 117f0: e517a008 ldr sl, [r7, #-8] 117f4: e045a00a sub sl, r5, sl 117f8: e59a1004 ldr r1, [sl, #4] 117fc: e3c11003 bic r1, r1, #3 11800: e0863001 add r3, r6, r1 11804: e1530002 cmp r3, r2 11808: baffff6f blt 115cc <_realloc_r+0xe8> 1180c: e1a0900a mov r9, sl 11810: e59a100c ldr r1, [sl, #12] 11814: e5b90008 ldr r0, [r9, #8]! 11818: e2462004 sub r2, r6, #4 1181c: e3520024 cmp r2, #36 ; 0x24 11820: e580100c str r1, [r0, #12] 11824: e5810008 str r0, [r1, #8] 11828: 9affffcf bls 1176c <_realloc_r+0x288> 1182c: e1a01007 mov r1, r7 11830: e1a00009 mov r0, r9 11834: e1a06003 mov r6, r3 11838: e1a0500a mov r5, sl 1183c: ebfff034 bl d914 11840: eaffff43 b 11554 <_realloc_r+0x70> 11844: e59c3004 ldr r3, [ip, #4] 11848: e3c33003 bic r3, r3, #3 1184c: e0833006 add r3, r3, r6 11850: e2840010 add r0, r4, #16 11854: e1530000 cmp r3, r0 11858: aa00003a bge 11948 <_realloc_r+0x464> 1185c: e3110001 tst r1, #1 11860: 1affff59 bne 115cc <_realloc_r+0xe8> 11864: e517a008 ldr sl, [r7, #-8] 11868: e045a00a sub sl, r5, sl 1186c: e59a1004 ldr r1, [sl, #4] 11870: e3c11003 bic r1, r1, #3 11874: e0813003 add r3, r1, r3 11878: e1500003 cmp r0, r3 1187c: caffffdf bgt 11800 <_realloc_r+0x31c> 11880: e1a0900a mov r9, sl 11884: e59a100c ldr r1, [sl, #12] 11888: e5b90008 ldr r0, [r9, #8]! 1188c: e2462004 sub r2, r6, #4 11890: e3520024 cmp r2, #36 ; 0x24 11894: e580100c str r1, [r0, #12] 11898: e5810008 str r0, [r1, #8] 1189c: 8a00003e bhi 1199c <_realloc_r+0x4b8> 118a0: e3520013 cmp r2, #19 118a4: 91a02009 movls r2, r9 118a8: 9a000014 bls 11900 <_realloc_r+0x41c> 118ac: e5971000 ldr r1, [r7] 118b0: e58a1008 str r1, [sl, #8] 118b4: e5971004 ldr r1, [r7, #4] 118b8: e352001b cmp r2, #27 118bc: e58a100c str r1, [sl, #12] 118c0: 92877008 addls r7, r7, #8 118c4: 928a2010 addls r2, sl, #16 118c8: 9a00000c bls 11900 <_realloc_r+0x41c> 118cc: e5971008 ldr r1, [r7, #8] 118d0: e58a1010 str r1, [sl, #16] 118d4: e597100c ldr r1, [r7, #12] 118d8: e58a1014 str r1, [sl, #20] 118dc: e3520024 cmp r2, #36 ; 0x24 118e0: 05972010 ldreq r2, [r7, #16] 118e4: 058a2018 streq r2, [sl, #24] 118e8: 05972014 ldreq r2, [r7, #20] 118ec: 12877010 addne r7, r7, #16 118f0: 058a201c streq r2, [sl, #28] 118f4: 128a2018 addne r2, sl, #24 118f8: 02877018 addeq r7, r7, #24 118fc: 028a2020 addeq r2, sl, #32 11900: e5971000 ldr r1, [r7] 11904: e5821000 str r1, [r2] 11908: e5971004 ldr r1, [r7, #4] 1190c: e5821004 str r1, [r2, #4] 11910: e5971008 ldr r1, [r7, #8] 11914: e5821008 str r1, [r2, #8] 11918: e0433004 sub r3, r3, r4 1191c: e08a2004 add r2, sl, r4 11920: e3833001 orr r3, r3, #1 11924: e58b2008 str r2, [fp, #8] 11928: e5823004 str r3, [r2, #4] 1192c: e59a3004 ldr r3, [sl, #4] 11930: e2033001 and r3, r3, #1 11934: e1834004 orr r4, r3, r4 11938: e1a00008 mov r0, r8 1193c: e58a4004 str r4, [sl, #4] 11940: ebfffee1 bl 114cc <__malloc_unlock> 11944: eaffff0f b 11588 <_realloc_r+0xa4> 11948: e0433004 sub r3, r3, r4 1194c: e0855004 add r5, r5, r4 11950: e3833001 orr r3, r3, #1 11954: e58b5008 str r5, [fp, #8] 11958: e5853004 str r3, [r5, #4] 1195c: e5173004 ldr r3, [r7, #-4] 11960: e2033001 and r3, r3, #1 11964: e1834004 orr r4, r3, r4 11968: e1a00008 mov r0, r8 1196c: e5074004 str r4, [r7, #-4] 11970: ebfffed5 bl 114cc <__malloc_unlock> 11974: e1a09007 mov r9, r7 11978: eaffff02 b 11588 <_realloc_r+0xa4> 1197c: e1a01007 mov r1, r7 11980: ebffefe3 bl d914 11984: eaffff3d b 11680 <_realloc_r+0x19c> 11988: e5193004 ldr r3, [r9, #-4] 1198c: e3c33003 bic r3, r3, #3 11990: e0866003 add r6, r6, r3 11994: e1a09007 mov r9, r7 11998: eafffeed b 11554 <_realloc_r+0x70> 1199c: e1a01007 mov r1, r7 119a0: e1a00009 mov r0, r9 119a4: e58d3004 str r3, [sp, #4] 119a8: ebffefd9 bl d914 119ac: e59d3004 ldr r3, [sp, #4] 119b0: eaffffd8 b 11918 <_realloc_r+0x434> 119b4: 00013b04 .word 0x00013b04 000119b8 <_sbrk_r>: 119b8: e3a03000 mov r3, #0 119bc: e92d4070 push {r4, r5, r6, lr} 119c0: e59f4030 ldr r4, [pc, #48] ; 119f8 <_sbrk_r+0x40> 119c4: e1a05000 mov r5, r0 119c8: e1a00001 mov r0, r1 119cc: e5843000 str r3, [r4] 119d0: eb00034f bl 12714 <_sbrk> 119d4: e3700001 cmn r0, #1 119d8: 0a000001 beq 119e4 <_sbrk_r+0x2c> 119dc: e8bd4070 pop {r4, r5, r6, lr} 119e0: e12fff1e bx lr 119e4: e5943000 ldr r3, [r4] 119e8: e3530000 cmp r3, #0 119ec: 15853000 strne r3, [r5] 119f0: e8bd4070 pop {r4, r5, r6, lr} 119f4: e12fff1e bx lr 119f8: 0003c1a4 .word 0x0003c1a4 000119fc <_init_signal_r.part.0>: 119fc: e92d4010 push {r4, lr} 11a00: e3a01080 mov r1, #128 ; 0x80 11a04: e1a04000 mov r4, r0 11a08: ebfffc62 bl 10b98 <_malloc_r> 11a0c: e3500000 cmp r0, #0 11a10: e58402dc str r0, [r4, #732] ; 0x2dc 11a14: 0a000008 beq 11a3c <_init_signal_r.part.0+0x40> 11a18: e3a02000 mov r2, #0 11a1c: e2403004 sub r3, r0, #4 11a20: e280007c add r0, r0, #124 ; 0x7c 11a24: e5a32004 str r2, [r3, #4]! 11a28: e1530000 cmp r3, r0 11a2c: 1afffffc bne 11a24 <_init_signal_r.part.0+0x28> 11a30: e3a00000 mov r0, #0 11a34: e8bd4010 pop {r4, lr} 11a38: e12fff1e bx lr 11a3c: e3e00000 mvn r0, #0 11a40: eafffffb b 11a34 <_init_signal_r.part.0+0x38> 00011a44 <_init_signal_r>: 11a44: e59032dc ldr r3, [r0, #732] ; 0x2dc 11a48: e3530000 cmp r3, #0 11a4c: 0a000001 beq 11a58 <_init_signal_r+0x14> 11a50: e3a00000 mov r0, #0 11a54: e12fff1e bx lr 11a58: eaffffe7 b 119fc <_init_signal_r.part.0> 00011a5c <_signal_r>: 11a5c: e351001f cmp r1, #31 11a60: e1a03000 mov r3, r0 11a64: 8a000005 bhi 11a80 <_signal_r+0x24> 11a68: e590c2dc ldr ip, [r0, #732] ; 0x2dc 11a6c: e35c0000 cmp ip, #0 11a70: 0a000006 beq 11a90 <_signal_r+0x34> 11a74: e79c0101 ldr r0, [ip, r1, lsl #2] 11a78: e78c2101 str r2, [ip, r1, lsl #2] 11a7c: e12fff1e bx lr 11a80: e3a02016 mov r2, #22 11a84: e3e00000 mvn r0, #0 11a88: e5832000 str r2, [r3] 11a8c: e12fff1e bx lr 11a90: e52de004 push {lr} ; (str lr, [sp, #-4]!) 11a94: e24dd014 sub sp, sp, #20 11a98: e98d000e stmib sp, {r1, r2, r3} 11a9c: ebffffd6 bl 119fc <_init_signal_r.part.0> 11aa0: e3500000 cmp r0, #0 11aa4: 13e00000 mvnne r0, #0 11aa8: 059d300c ldreq r3, [sp, #12] 11aac: 099d0006 ldmibeq sp, {r1, r2} 11ab0: 0593c2dc ldreq ip, [r3, #732] ; 0x2dc 11ab4: 079c0101 ldreq r0, [ip, r1, lsl #2] 11ab8: 078c2101 streq r2, [ip, r1, lsl #2] 11abc: e28dd014 add sp, sp, #20 11ac0: e49de004 pop {lr} ; (ldr lr, [sp], #4) 11ac4: e12fff1e bx lr 00011ac8 <_raise_r>: 11ac8: e351001f cmp r1, #31 11acc: e92d4020 push {r5, lr} 11ad0: 83a03016 movhi r3, #22 11ad4: e1a05000 mov r5, r0 11ad8: e24dd008 sub sp, sp, #8 11adc: 83e00000 mvnhi r0, #0 11ae0: 85853000 strhi r3, [r5] 11ae4: 8a000012 bhi 11b34 <_raise_r+0x6c> 11ae8: e59522dc ldr r2, [r5, #732] ; 0x2dc 11aec: e3520000 cmp r2, #0 11af0: 0a000014 beq 11b48 <_raise_r+0x80> 11af4: e7923101 ldr r3, [r2, r1, lsl #2] 11af8: e3530000 cmp r3, #0 11afc: 0a000011 beq 11b48 <_raise_r+0x80> 11b00: e3530001 cmp r3, #1 11b04: 0a00000d beq 11b40 <_raise_r+0x78> 11b08: e3730001 cmn r3, #1 11b0c: 03a03016 moveq r3, #22 11b10: 03a00001 moveq r0, #1 11b14: 05853000 streq r3, [r5] 11b18: 0a000005 beq 11b34 <_raise_r+0x6c> 11b1c: e3a05000 mov r5, #0 11b20: e1a00001 mov r0, r1 11b24: e7825101 str r5, [r2, r1, lsl #2] 11b28: e1a0e00f mov lr, pc 11b2c: e12fff13 bx r3 11b30: e1a00005 mov r0, r5 11b34: e28dd008 add sp, sp, #8 11b38: e8bd4020 pop {r5, lr} 11b3c: e12fff1e bx lr 11b40: e3a00000 mov r0, #0 11b44: eafffffa b 11b34 <_raise_r+0x6c> 11b48: e1a00005 mov r0, r5 11b4c: e58d1004 str r1, [sp, #4] 11b50: eb000056 bl 11cb0 <_getpid_r> 11b54: e59d1004 ldr r1, [sp, #4] 11b58: e1a02001 mov r2, r1 11b5c: e1a01000 mov r1, r0 11b60: e1a00005 mov r0, r5 11b64: eb000040 bl 11c6c <_kill_r> 11b68: eafffff1 b 11b34 <_raise_r+0x6c> 00011b6c <__sigtramp_r>: 11b6c: e351001f cmp r1, #31 11b70: 8a000022 bhi 11c00 <__sigtramp_r+0x94> 11b74: e92d4020 push {r5, lr} 11b78: e59032dc ldr r3, [r0, #732] ; 0x2dc 11b7c: e3530000 cmp r3, #0 11b80: e24dd008 sub sp, sp, #8 11b84: e1a05000 mov r5, r0 11b88: 0a000014 beq 11be0 <__sigtramp_r+0x74> 11b8c: e7932101 ldr r2, [r3, r1, lsl #2] 11b90: e3520000 cmp r2, #0 11b94: e0833101 add r3, r3, r1, lsl #2 11b98: 0a00000e beq 11bd8 <__sigtramp_r+0x6c> 11b9c: e3720001 cmn r2, #1 11ba0: 03a00002 moveq r0, #2 11ba4: 0a000008 beq 11bcc <__sigtramp_r+0x60> 11ba8: e3520001 cmp r2, #1 11bac: 03a00003 moveq r0, #3 11bb0: 0a000005 beq 11bcc <__sigtramp_r+0x60> 11bb4: e3a05000 mov r5, #0 11bb8: e1a00001 mov r0, r1 11bbc: e5835000 str r5, [r3] 11bc0: e1a0e00f mov lr, pc 11bc4: e12fff12 bx r2 11bc8: e1a00005 mov r0, r5 11bcc: e28dd008 add sp, sp, #8 11bd0: e8bd4020 pop {r5, lr} 11bd4: e12fff1e bx lr 11bd8: e3a00001 mov r0, #1 11bdc: eafffffa b 11bcc <__sigtramp_r+0x60> 11be0: e58d1004 str r1, [sp, #4] 11be4: ebffff84 bl 119fc <_init_signal_r.part.0> 11be8: e3500000 cmp r0, #0 11bec: 059532dc ldreq r3, [r5, #732] ; 0x2dc 11bf0: 059d1004 ldreq r1, [sp, #4] 11bf4: 0affffe4 beq 11b8c <__sigtramp_r+0x20> 11bf8: e3e00000 mvn r0, #0 11bfc: eafffff2 b 11bcc <__sigtramp_r+0x60> 11c00: e3e00000 mvn r0, #0 11c04: e12fff1e bx lr 00011c08 : 11c08: e59f3008 ldr r3, [pc, #8] ; 11c18 11c0c: e1a01000 mov r1, r0 11c10: e5930000 ldr r0, [r3] 11c14: eaffffab b 11ac8 <_raise_r> 11c18: 0001356c .word 0x0001356c 00011c1c : 11c1c: e59f300c ldr r3, [pc, #12] ; 11c30 11c20: e1a02001 mov r2, r1 11c24: e1a01000 mov r1, r0 11c28: e5930000 ldr r0, [r3] 11c2c: eaffff8a b 11a5c <_signal_r> 11c30: 0001356c .word 0x0001356c 00011c34 <_init_signal>: 11c34: e59f3018 ldr r3, [pc, #24] ; 11c54 <_init_signal+0x20> 11c38: e5930000 ldr r0, [r3] 11c3c: e59032dc ldr r3, [r0, #732] ; 0x2dc 11c40: e3530000 cmp r3, #0 11c44: 0a000001 beq 11c50 <_init_signal+0x1c> 11c48: e3a00000 mov r0, #0 11c4c: e12fff1e bx lr 11c50: eaffff69 b 119fc <_init_signal_r.part.0> 11c54: 0001356c .word 0x0001356c 00011c58 <__sigtramp>: 11c58: e59f3008 ldr r3, [pc, #8] ; 11c68 <__sigtramp+0x10> 11c5c: e1a01000 mov r1, r0 11c60: e5930000 ldr r0, [r3] 11c64: eaffffc0 b 11b6c <__sigtramp_r> 11c68: 0001356c .word 0x0001356c 00011c6c <_kill_r>: 11c6c: e1a0c001 mov ip, r1 11c70: e3a03000 mov r3, #0 11c74: e92d4070 push {r4, r5, r6, lr} 11c78: e59f402c ldr r4, [pc, #44] ; 11cac <_kill_r+0x40> 11c7c: e1a05000 mov r5, r0 11c80: e1a01002 mov r1, r2 11c84: e1a0000c mov r0, ip 11c88: e5843000 str r3, [r4] 11c8c: eb00028e bl 126cc <_kill> 11c90: e3700001 cmn r0, #1 11c94: 1a000002 bne 11ca4 <_kill_r+0x38> 11c98: e5943000 ldr r3, [r4] 11c9c: e3530000 cmp r3, #0 11ca0: 15853000 strne r3, [r5] 11ca4: e8bd4070 pop {r4, r5, r6, lr} 11ca8: e12fff1e bx lr 11cac: 0003c1a4 .word 0x0003c1a4 00011cb0 <_getpid_r>: 11cb0: e92d4010 push {r4, lr} 11cb4: eb000278 bl 1269c <_getpid> 11cb8: e8bd4010 pop {r4, lr} 11cbc: e12fff1e bx lr 00011cc0 <__sread>: 11cc0: e92d4010 push {r4, lr} 11cc4: e1a04001 mov r4, r1 11cc8: e1d110fe ldrsh r1, [r1, #14] 11ccc: eb000196 bl 1232c <_read_r> 11cd0: e3500000 cmp r0, #0 11cd4: a5943050 ldrge r3, [r4, #80] ; 0x50 11cd8: b1d430bc ldrhlt r3, [r4, #12] 11cdc: a0833000 addge r3, r3, r0 11ce0: b3c33a01 biclt r3, r3, #4096 ; 0x1000 11ce4: a5843050 strge r3, [r4, #80] ; 0x50 11ce8: b1c430bc strhlt r3, [r4, #12] 11cec: e8bd4010 pop {r4, lr} 11cf0: e12fff1e bx lr 00011cf4 <__seofread>: 11cf4: e3a00000 mov r0, #0 11cf8: e12fff1e bx lr 00011cfc <__swrite>: 11cfc: e92d41f0 push {r4, r5, r6, r7, r8, lr} 11d00: e1a04001 mov r4, r1 11d04: e1d110fc ldrsh r1, [r1, #12] 11d08: e3110c01 tst r1, #256 ; 0x100 11d0c: e1a06002 mov r6, r2 11d10: e1a07003 mov r7, r3 11d14: e1a05000 mov r5, r0 11d18: 0a000004 beq 11d30 <__swrite+0x34> 11d1c: e1d410fe ldrsh r1, [r4, #14] 11d20: e3a03002 mov r3, #2 11d24: e3a02000 mov r2, #0 11d28: eb00016d bl 122e4 <_lseek_r> 11d2c: e1d410fc ldrsh r1, [r4, #12] 11d30: e3c11a01 bic r1, r1, #4096 ; 0x1000 11d34: e1c410bc strh r1, [r4, #12] 11d38: e1a03007 mov r3, r7 11d3c: e1a02006 mov r2, r6 11d40: e1d410fe ldrsh r1, [r4, #14] 11d44: e1a00005 mov r0, r5 11d48: eb0000c7 bl 1206c <_write_r> 11d4c: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} 11d50: e12fff1e bx lr 00011d54 <__sseek>: 11d54: e92d4010 push {r4, lr} 11d58: e1a04001 mov r4, r1 11d5c: e1d110fe ldrsh r1, [r1, #14] 11d60: eb00015f bl 122e4 <_lseek_r> 11d64: e1d430bc ldrh r3, [r4, #12] 11d68: e3700001 cmn r0, #1 11d6c: 03c33a01 biceq r3, r3, #4096 ; 0x1000 11d70: 13833a01 orrne r3, r3, #4096 ; 0x1000 11d74: 15840050 strne r0, [r4, #80] ; 0x50 11d78: e1c430bc strh r3, [r4, #12] 11d7c: e8bd4010 pop {r4, lr} 11d80: e12fff1e bx lr 00011d84 <__sclose>: 11d84: e92d4010 push {r4, lr} 11d88: e1d110fe ldrsh r1, [r1, #14] 11d8c: eb0000c8 bl 120b4 <_close_r> 11d90: e8bd4010 pop {r4, lr} 11d94: e12fff1e bx lr 00011d98 <__swbuf_r>: 11d98: e92d41f0 push {r4, r5, r6, r7, r8, lr} 11d9c: e2506000 subs r6, r0, #0 11da0: e1a05001 mov r5, r1 11da4: e1a04002 mov r4, r2 11da8: 0a000002 beq 11db8 <__swbuf_r+0x20> 11dac: e5963038 ldr r3, [r6, #56] ; 0x38 11db0: e3530000 cmp r3, #0 11db4: 0a000042 beq 11ec4 <__swbuf_r+0x12c> 11db8: e1d410fc ldrsh r1, [r4, #12] 11dbc: e5940018 ldr r0, [r4, #24] 11dc0: e1a03801 lsl r3, r1, #16 11dc4: e3130702 tst r3, #524288 ; 0x80000 11dc8: e1a02823 lsr r2, r3, #16 11dcc: e5840008 str r0, [r4, #8] 11dd0: 0a000022 beq 11e60 <__swbuf_r+0xc8> 11dd4: e5943010 ldr r3, [r4, #16] 11dd8: e3530000 cmp r3, #0 11ddc: 0a00001f beq 11e60 <__swbuf_r+0xc8> 11de0: e3120a02 tst r2, #8192 ; 0x2000 11de4: 05942064 ldreq r2, [r4, #100] ; 0x64 11de8: 03c22a02 biceq r2, r2, #8192 ; 0x2000 11dec: 03811a02 orreq r1, r1, #8192 ; 0x2000 11df0: 05842064 streq r2, [r4, #100] ; 0x64 11df4: e5942000 ldr r2, [r4] 11df8: 01c410bc strheq r1, [r4, #12] 11dfc: e5941014 ldr r1, [r4, #20] 11e00: e0423003 sub r3, r2, r3 11e04: e20550ff and r5, r5, #255 ; 0xff 11e08: e1530001 cmp r3, r1 11e0c: e1a07005 mov r7, r5 11e10: b2833001 addlt r3, r3, #1 11e14: aa000022 bge 11ea4 <__swbuf_r+0x10c> 11e18: e5941008 ldr r1, [r4, #8] 11e1c: e2820001 add r0, r2, #1 11e20: e2411001 sub r1, r1, #1 11e24: e5841008 str r1, [r4, #8] 11e28: e5840000 str r0, [r4] 11e2c: e5c25000 strb r5, [r2] 11e30: e5942014 ldr r2, [r4, #20] 11e34: e1520003 cmp r2, r3 11e38: 0a000012 beq 11e88 <__swbuf_r+0xf0> 11e3c: e1d430bc ldrh r3, [r4, #12] 11e40: e355000a cmp r5, #10 11e44: 13a05000 movne r5, #0 11e48: 02035001 andeq r5, r3, #1 11e4c: e3550000 cmp r5, #0 11e50: 1a00000c bne 11e88 <__swbuf_r+0xf0> 11e54: e1a00007 mov r0, r7 11e58: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} 11e5c: e12fff1e bx lr 11e60: e1a01004 mov r1, r4 11e64: e1a00006 mov r0, r6 11e68: ebfff58a bl f498 <__swsetup_r> 11e6c: e3500000 cmp r0, #0 11e70: 1a000009 bne 11e9c <__swbuf_r+0x104> 11e74: e1d410fc ldrsh r1, [r4, #12] 11e78: e1a02801 lsl r2, r1, #16 11e7c: e5943010 ldr r3, [r4, #16] 11e80: e1a02822 lsr r2, r2, #16 11e84: eaffffd5 b 11de0 <__swbuf_r+0x48> 11e88: e1a01004 mov r1, r4 11e8c: e1a00006 mov r0, r6 11e90: ebfff66d bl f84c <_fflush_r> 11e94: e3500000 cmp r0, #0 11e98: 0affffed beq 11e54 <__swbuf_r+0xbc> 11e9c: e3e07000 mvn r7, #0 11ea0: eaffffeb b 11e54 <__swbuf_r+0xbc> 11ea4: e1a01004 mov r1, r4 11ea8: e1a00006 mov r0, r6 11eac: ebfff666 bl f84c <_fflush_r> 11eb0: e3500000 cmp r0, #0 11eb4: 1afffff8 bne 11e9c <__swbuf_r+0x104> 11eb8: e3a03001 mov r3, #1 11ebc: e5942000 ldr r2, [r4] 11ec0: eaffffd4 b 11e18 <__swbuf_r+0x80> 11ec4: ebfff6f5 bl faa0 <__sinit> 11ec8: eaffffba b 11db8 <__swbuf_r+0x20> 00011ecc <__swbuf>: 11ecc: e59f300c ldr r3, [pc, #12] ; 11ee0 <__swbuf+0x14> 11ed0: e1a02001 mov r2, r1 11ed4: e1a01000 mov r1, r0 11ed8: e5930000 ldr r0, [r3] 11edc: eaffffad b 11d98 <__swbuf_r> 11ee0: 0001356c .word 0x0001356c 00011ee4 <_wcrtomb_r>: 11ee4: e92d4070 push {r4, r5, r6, lr} 11ee8: e251c000 subs ip, r1, #0 11eec: e24dd010 sub sp, sp, #16 11ef0: e1a05000 mov r5, r0 11ef4: e1a06003 mov r6, r3 11ef8: 0a000010 beq 11f40 <_wcrtomb_r+0x5c> 11efc: e59fc06c ldr ip, [pc, #108] ; 11f70 <_wcrtomb_r+0x8c> 11f00: e59cc000 ldr ip, [ip] 11f04: e59cc034 ldr ip, [ip, #52] ; 0x34 11f08: e59fe064 ldr lr, [pc, #100] ; 11f74 <_wcrtomb_r+0x90> 11f0c: e35c0000 cmp ip, #0 11f10: 01a0c00e moveq ip, lr 11f14: e59c40e0 ldr r4, [ip, #224] ; 0xe0 11f18: e1a0e00f mov lr, pc 11f1c: e12fff14 bx r4 11f20: e3700001 cmn r0, #1 11f24: 03a02000 moveq r2, #0 11f28: 03a0308a moveq r3, #138 ; 0x8a 11f2c: 05862000 streq r2, [r6] 11f30: 05853000 streq r3, [r5] 11f34: e28dd010 add sp, sp, #16 11f38: e8bd4070 pop {r4, r5, r6, lr} 11f3c: e12fff1e bx lr 11f40: e59f2028 ldr r2, [pc, #40] ; 11f70 <_wcrtomb_r+0x8c> 11f44: e5921000 ldr r1, [r2] 11f48: e5911034 ldr r1, [r1, #52] ; 0x34 11f4c: e59f2020 ldr r2, [pc, #32] ; 11f74 <_wcrtomb_r+0x90> 11f50: e3510000 cmp r1, #0 11f54: 01a01002 moveq r1, r2 11f58: e1a0200c mov r2, ip 11f5c: e59140e0 ldr r4, [r1, #224] ; 0xe0 11f60: e28d1004 add r1, sp, #4 11f64: e1a0e00f mov lr, pc 11f68: e12fff14 bx r4 11f6c: eaffffeb b 11f20 <_wcrtomb_r+0x3c> 11f70: 0001356c .word 0x0001356c 11f74: 00013998 .word 0x00013998 00011f78 : 11f78: e92d4070 push {r4, r5, r6, lr} 11f7c: e59f3084 ldr r3, [pc, #132] ; 12008 11f80: e5934000 ldr r4, [r3] 11f84: e3500000 cmp r0, #0 11f88: e1a05002 mov r5, r2 11f8c: e24dd010 sub sp, sp, #16 11f90: e5943034 ldr r3, [r4, #52] ; 0x34 11f94: e59f2070 ldr r2, [pc, #112] ; 1200c 11f98: 0a000010 beq 11fe0 11f9c: e3530000 cmp r3, #0 11fa0: 01a03002 moveq r3, r2 11fa4: e1a02001 mov r2, r1 11fa8: e59360e0 ldr r6, [r3, #224] ; 0xe0 11fac: e1a01000 mov r1, r0 11fb0: e1a03005 mov r3, r5 11fb4: e1a00004 mov r0, r4 11fb8: e1a0e00f mov lr, pc 11fbc: e12fff16 bx r6 11fc0: e3700001 cmn r0, #1 11fc4: 03a02000 moveq r2, #0 11fc8: 03a0308a moveq r3, #138 ; 0x8a 11fcc: 05852000 streq r2, [r5] 11fd0: 05843000 streq r3, [r4] 11fd4: e28dd010 add sp, sp, #16 11fd8: e8bd4070 pop {r4, r5, r6, lr} 11fdc: e12fff1e bx lr 11fe0: e3530000 cmp r3, #0 11fe4: 01a03002 moveq r3, r2 11fe8: e28d1004 add r1, sp, #4 11fec: e1a02000 mov r2, r0 11ff0: e59360e0 ldr r6, [r3, #224] ; 0xe0 11ff4: e1a00004 mov r0, r4 11ff8: e1a03005 mov r3, r5 11ffc: e1a0e00f mov lr, pc 12000: e12fff16 bx r6 12004: eaffffed b 11fc0 12008: 0001356c .word 0x0001356c 1200c: 00013998 .word 0x00013998 00012010 <_wctomb_r>: 12010: e59fc024 ldr ip, [pc, #36] ; 1203c <_wctomb_r+0x2c> 12014: e59cc000 ldr ip, [ip] 12018: e59cc034 ldr ip, [ip, #52] ; 0x34 1201c: e52de004 push {lr} ; (str lr, [sp, #-4]!) 12020: e59fe018 ldr lr, [pc, #24] ; 12040 <_wctomb_r+0x30> 12024: e35c0000 cmp ip, #0 12028: 01a0c00e moveq ip, lr 1202c: e59ce0e0 ldr lr, [ip, #224] ; 0xe0 12030: e1a0c00e mov ip, lr 12034: e49de004 pop {lr} ; (ldr lr, [sp], #4) 12038: e12fff1c bx ip 1203c: 0001356c .word 0x0001356c 12040: 00013998 .word 0x00013998 00012044 <__ascii_wctomb>: 12044: e3510000 cmp r1, #0 12048: 0a000005 beq 12064 <__ascii_wctomb+0x20> 1204c: e35200ff cmp r2, #255 ; 0xff 12050: 83a0308a movhi r3, #138 ; 0x8a 12054: 95c12000 strbls r2, [r1] 12058: 83e01000 mvnhi r1, #0 1205c: 93a01001 movls r1, #1 12060: 85803000 strhi r3, [r0] 12064: e1a00001 mov r0, r1 12068: e12fff1e bx lr 0001206c <_write_r>: 1206c: e92d4070 push {r4, r5, r6, lr} 12070: e1a0e001 mov lr, r1 12074: e3a0c000 mov ip, #0 12078: e59f4030 ldr r4, [pc, #48] ; 120b0 <_write_r+0x44> 1207c: e1a01002 mov r1, r2 12080: e1a05000 mov r5, r0 12084: e1a02003 mov r2, r3 12088: e1a0000e mov r0, lr 1208c: e584c000 str ip, [r4] 12090: eb0001aa bl 12740 <_write> 12094: e3700001 cmn r0, #1 12098: 1a000002 bne 120a8 <_write_r+0x3c> 1209c: e5943000 ldr r3, [r4] 120a0: e3530000 cmp r3, #0 120a4: 15853000 strne r3, [r5] 120a8: e8bd4070 pop {r4, r5, r6, lr} 120ac: e12fff1e bx lr 120b0: 0003c1a4 .word 0x0003c1a4 000120b4 <_close_r>: 120b4: e3a03000 mov r3, #0 120b8: e92d4070 push {r4, r5, r6, lr} 120bc: e59f4028 ldr r4, [pc, #40] ; 120ec <_close_r+0x38> 120c0: e1a05000 mov r5, r0 120c4: e1a00001 mov r0, r1 120c8: e5843000 str r3, [r4] 120cc: eb000166 bl 1266c <_close> 120d0: e3700001 cmn r0, #1 120d4: 1a000002 bne 120e4 <_close_r+0x30> 120d8: e5943000 ldr r3, [r4] 120dc: e3530000 cmp r3, #0 120e0: 15853000 strne r3, [r5] 120e4: e8bd4070 pop {r4, r5, r6, lr} 120e8: e12fff1e bx lr 120ec: 0003c1a4 .word 0x0003c1a4 000120f0 <_fclose_r>: 120f0: e92d4070 push {r4, r5, r6, lr} 120f4: e2514000 subs r4, r1, #0 120f8: 0a00000b beq 1212c <_fclose_r+0x3c> 120fc: e3500000 cmp r0, #0 12100: e1a06000 mov r6, r0 12104: 0a000002 beq 12114 <_fclose_r+0x24> 12108: e5903038 ldr r3, [r0, #56] ; 0x38 1210c: e3530000 cmp r3, #0 12110: 0a000038 beq 121f8 <_fclose_r+0x108> 12114: e5943064 ldr r3, [r4, #100] ; 0x64 12118: e3130001 tst r3, #1 1211c: 0a000006 beq 1213c <_fclose_r+0x4c> 12120: e1d430fc ldrsh r3, [r4, #12] 12124: e3530000 cmp r3, #0 12128: 1a000006 bne 12148 <_fclose_r+0x58> 1212c: e3a05000 mov r5, #0 12130: e1a00005 mov r0, r5 12134: e8bd4070 pop {r4, r5, r6, lr} 12138: e12fff1e bx lr 1213c: e1d430bc ldrh r3, [r4, #12] 12140: e3130c02 tst r3, #512 ; 0x200 12144: 0a000034 beq 1221c <_fclose_r+0x12c> 12148: e1a01004 mov r1, r4 1214c: e1a00006 mov r0, r6 12150: ebfff52e bl f610 <__sflush_r> 12154: e594302c ldr r3, [r4, #44] ; 0x2c 12158: e3530000 cmp r3, #0 1215c: e1a05000 mov r5, r0 12160: 0a000005 beq 1217c <_fclose_r+0x8c> 12164: e594101c ldr r1, [r4, #28] 12168: e1a00006 mov r0, r6 1216c: e1a0e00f mov lr, pc 12170: e12fff13 bx r3 12174: e3500000 cmp r0, #0 12178: b3e05000 mvnlt r5, #0 1217c: e1d430bc ldrh r3, [r4, #12] 12180: e3130080 tst r3, #128 ; 0x80 12184: 1a00001d bne 12200 <_fclose_r+0x110> 12188: e5941030 ldr r1, [r4, #48] ; 0x30 1218c: e3510000 cmp r1, #0 12190: 0a000005 beq 121ac <_fclose_r+0xbc> 12194: e2843040 add r3, r4, #64 ; 0x40 12198: e1510003 cmp r1, r3 1219c: 11a00006 movne r0, r6 121a0: 1bfff79f blne 10024 <_free_r> 121a4: e3a03000 mov r3, #0 121a8: e5843030 str r3, [r4, #48] ; 0x30 121ac: e5941044 ldr r1, [r4, #68] ; 0x44 121b0: e3510000 cmp r1, #0 121b4: 0a000003 beq 121c8 <_fclose_r+0xd8> 121b8: e1a00006 mov r0, r6 121bc: ebfff798 bl 10024 <_free_r> 121c0: e3a03000 mov r3, #0 121c4: e5843044 str r3, [r4, #68] ; 0x44 121c8: ebfff6a1 bl fc54 <__sfp_lock_acquire> 121cc: e3a03000 mov r3, #0 121d0: e5942064 ldr r2, [r4, #100] ; 0x64 121d4: e3120001 tst r2, #1 121d8: e1c430bc strh r3, [r4, #12] 121dc: 0a00000b beq 12210 <_fclose_r+0x120> 121e0: e5940058 ldr r0, [r4, #88] ; 0x58 121e4: ebfff9fa bl 109d4 <__retarget_lock_close_recursive> 121e8: ebfff69f bl fc6c <__sfp_lock_release> 121ec: e1a00005 mov r0, r5 121f0: e8bd4070 pop {r4, r5, r6, lr} 121f4: e12fff1e bx lr 121f8: ebfff628 bl faa0 <__sinit> 121fc: eaffffc4 b 12114 <_fclose_r+0x24> 12200: e5941010 ldr r1, [r4, #16] 12204: e1a00006 mov r0, r6 12208: ebfff785 bl 10024 <_free_r> 1220c: eaffffdd b 12188 <_fclose_r+0x98> 12210: e5940058 ldr r0, [r4, #88] ; 0x58 12214: ebfff9f6 bl 109f4 <__retarget_lock_release_recursive> 12218: eafffff0 b 121e0 <_fclose_r+0xf0> 1221c: e5940058 ldr r0, [r4, #88] ; 0x58 12220: ebfff9ed bl 109dc <__retarget_lock_acquire_recursive> 12224: e1d430fc ldrsh r3, [r4, #12] 12228: e3530000 cmp r3, #0 1222c: 1affffc5 bne 12148 <_fclose_r+0x58> 12230: e5945064 ldr r5, [r4, #100] ; 0x64 12234: e2155001 ands r5, r5, #1 12238: 1affffbb bne 1212c <_fclose_r+0x3c> 1223c: e5940058 ldr r0, [r4, #88] ; 0x58 12240: ebfff9eb bl 109f4 <__retarget_lock_release_recursive> 12244: e1a00005 mov r0, r5 12248: e8bd4070 pop {r4, r5, r6, lr} 1224c: e12fff1e bx lr 00012250 : 12250: e59f3008 ldr r3, [pc, #8] ; 12260 12254: e1a01000 mov r1, r0 12258: e5930000 ldr r0, [r3] 1225c: eaffffa3 b 120f0 <_fclose_r> 12260: 0001356c .word 0x0001356c 00012264 <_fstat_r>: 12264: e1a0c001 mov ip, r1 12268: e3a03000 mov r3, #0 1226c: e92d4070 push {r4, r5, r6, lr} 12270: e59f402c ldr r4, [pc, #44] ; 122a4 <_fstat_r+0x40> 12274: e1a05000 mov r5, r0 12278: e1a01002 mov r1, r2 1227c: e1a0000c mov r0, ip 12280: e5843000 str r3, [r4] 12284: eb0000fe bl 12684 <_fstat> 12288: e3700001 cmn r0, #1 1228c: 1a000002 bne 1229c <_fstat_r+0x38> 12290: e5943000 ldr r3, [r4] 12294: e3530000 cmp r3, #0 12298: 15853000 strne r3, [r5] 1229c: e8bd4070 pop {r4, r5, r6, lr} 122a0: e12fff1e bx lr 122a4: 0003c1a4 .word 0x0003c1a4 000122a8 <_isatty_r>: 122a8: e3a03000 mov r3, #0 122ac: e92d4070 push {r4, r5, r6, lr} 122b0: e59f4028 ldr r4, [pc, #40] ; 122e0 <_isatty_r+0x38> 122b4: e1a05000 mov r5, r0 122b8: e1a00001 mov r0, r1 122bc: e5843000 str r3, [r4] 122c0: eb0000fb bl 126b4 <_isatty> 122c4: e3700001 cmn r0, #1 122c8: 1a000002 bne 122d8 <_isatty_r+0x30> 122cc: e5943000 ldr r3, [r4] 122d0: e3530000 cmp r3, #0 122d4: 15853000 strne r3, [r5] 122d8: e8bd4070 pop {r4, r5, r6, lr} 122dc: e12fff1e bx lr 122e0: 0003c1a4 .word 0x0003c1a4 000122e4 <_lseek_r>: 122e4: e92d4070 push {r4, r5, r6, lr} 122e8: e1a0e001 mov lr, r1 122ec: e3a0c000 mov ip, #0 122f0: e59f4030 ldr r4, [pc, #48] ; 12328 <_lseek_r+0x44> 122f4: e1a01002 mov r1, r2 122f8: e1a05000 mov r5, r0 122fc: e1a02003 mov r2, r3 12300: e1a0000e mov r0, lr 12304: e584c000 str ip, [r4] 12308: eb0000f5 bl 126e4 <_lseek> 1230c: e3700001 cmn r0, #1 12310: 1a000002 bne 12320 <_lseek_r+0x3c> 12314: e5943000 ldr r3, [r4] 12318: e3530000 cmp r3, #0 1231c: 15853000 strne r3, [r5] 12320: e8bd4070 pop {r4, r5, r6, lr} 12324: e12fff1e bx lr 12328: 0003c1a4 .word 0x0003c1a4 0001232c <_read_r>: 1232c: e92d4070 push {r4, r5, r6, lr} 12330: e1a0e001 mov lr, r1 12334: e3a0c000 mov ip, #0 12338: e59f4030 ldr r4, [pc, #48] ; 12370 <_read_r+0x44> 1233c: e1a01002 mov r1, r2 12340: e1a05000 mov r5, r0 12344: e1a02003 mov r2, r3 12348: e1a0000e mov r0, lr 1234c: e584c000 str ip, [r4] 12350: eb0000e9 bl 126fc <_read> 12354: e3700001 cmn r0, #1 12358: 1a000002 bne 12368 <_read_r+0x3c> 1235c: e5943000 ldr r3, [r4] 12360: e3530000 cmp r3, #0 12364: 15853000 strne r3, [r5] 12368: e8bd4070 pop {r4, r5, r6, lr} 1236c: e12fff1e bx lr 12370: 0003c1a4 .word 0x0003c1a4 00012374 : 12374: e92d4070 push {r4, r5, r6, lr} 12378: e1a04001 mov r4, r1 1237c: e5911000 ldr r1, [r1] 12380: e3510000 cmp r1, #0 12384: e1a05000 mov r5, r0 12388: 1bfffff9 blne 12374 1238c: e1a01004 mov r1, r4 12390: e1a00005 mov r0, r5 12394: ebfff722 bl 10024 <_free_r> 12398: e8bd4070 pop {r4, r5, r6, lr} 1239c: e12fff1e bx lr 000123a0 <_reclaim_reent>: 123a0: e59f30e8 ldr r3, [pc, #232] ; 12490 <_reclaim_reent+0xf0> 123a4: e5933000 ldr r3, [r3] 123a8: e1530000 cmp r3, r0 123ac: 012fff1e bxeq lr 123b0: e590304c ldr r3, [r0, #76] ; 0x4c 123b4: e3530000 cmp r3, #0 123b8: e92d4070 push {r4, r5, r6, lr} 123bc: e1a05000 mov r5, r0 123c0: 0a00000f beq 12404 <_reclaim_reent+0x64> 123c4: e3a06000 mov r6, #0 123c8: e7931006 ldr r1, [r3, r6] 123cc: e3510000 cmp r1, #0 123d0: 0a000005 beq 123ec <_reclaim_reent+0x4c> 123d4: e5914000 ldr r4, [r1] 123d8: e1a00005 mov r0, r5 123dc: ebfff710 bl 10024 <_free_r> 123e0: e2541000 subs r1, r4, #0 123e4: 1afffffa bne 123d4 <_reclaim_reent+0x34> 123e8: e595304c ldr r3, [r5, #76] ; 0x4c 123ec: e2866004 add r6, r6, #4 123f0: e3560080 cmp r6, #128 ; 0x80 123f4: 1afffff3 bne 123c8 <_reclaim_reent+0x28> 123f8: e1a01003 mov r1, r3 123fc: e1a00005 mov r0, r5 12400: ebfff707 bl 10024 <_free_r> 12404: e5951040 ldr r1, [r5, #64] ; 0x40 12408: e3510000 cmp r1, #0 1240c: 11a00005 movne r0, r5 12410: 1bfff703 blne 10024 <_free_r> 12414: e5951148 ldr r1, [r5, #328] ; 0x148 12418: e3510000 cmp r1, #0 1241c: 0a000008 beq 12444 <_reclaim_reent+0xa4> 12420: e2856f53 add r6, r5, #332 ; 0x14c 12424: e1510006 cmp r1, r6 12428: 0a000005 beq 12444 <_reclaim_reent+0xa4> 1242c: e5914000 ldr r4, [r1] 12430: e1a00005 mov r0, r5 12434: ebfff6fa bl 10024 <_free_r> 12438: e1560004 cmp r6, r4 1243c: e1a01004 mov r1, r4 12440: 1afffff9 bne 1242c <_reclaim_reent+0x8c> 12444: e5951054 ldr r1, [r5, #84] ; 0x54 12448: e3510000 cmp r1, #0 1244c: 11a00005 movne r0, r5 12450: 1bfff6f3 blne 10024 <_free_r> 12454: e5953038 ldr r3, [r5, #56] ; 0x38 12458: e3530000 cmp r3, #0 1245c: 1a000001 bne 12468 <_reclaim_reent+0xc8> 12460: e8bd4070 pop {r4, r5, r6, lr} 12464: e12fff1e bx lr 12468: e595303c ldr r3, [r5, #60] ; 0x3c 1246c: e1a00005 mov r0, r5 12470: e1a0e00f mov lr, pc 12474: e12fff13 bx r3 12478: e59512e0 ldr r1, [r5, #736] ; 0x2e0 1247c: e3510000 cmp r1, #0 12480: 0afffff6 beq 12460 <_reclaim_reent+0xc0> 12484: e1a00005 mov r0, r5 12488: e8bd4070 pop {r4, r5, r6, lr} 1248c: eaffffb8 b 12374 12490: 0001356c .word 0x0001356c 00012494 <__aeabi_uldivmod>: 12494: e3530000 cmp r3, #0 12498: 03520000 cmpeq r2, #0 1249c: 1a000004 bne 124b4 <__aeabi_uldivmod+0x20> 124a0: e3510000 cmp r1, #0 124a4: 03500000 cmpeq r0, #0 124a8: 13e01000 mvnne r1, #0 124ac: 13e00000 mvnne r0, #0 124b0: eaffec7d b d6ac <__aeabi_idiv0> 124b4: e24dd008 sub sp, sp, #8 124b8: e92d6000 push {sp, lr} 124bc: eb000003 bl 124d0 <__udivmoddi4> 124c0: e59de004 ldr lr, [sp, #4] 124c4: e28dd008 add sp, sp, #8 124c8: e8bd000c pop {r2, r3} 124cc: e12fff1e bx lr 000124d0 <__udivmoddi4>: 124d0: e1510003 cmp r1, r3 124d4: e92d4ff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} 124d8: 01500002 cmpeq r0, r2 124dc: e1a04000 mov r4, r0 124e0: e1a05001 mov r5, r1 124e4: e59da028 ldr sl, [sp, #40] ; 0x28 124e8: 33a00000 movcc r0, #0 124ec: 33a01000 movcc r1, #0 124f0: 3a00003d bcc 125ec <__udivmoddi4+0x11c> 124f4: e1a00002 mov r0, r2 124f8: e1a01003 mov r1, r3 124fc: e1a08002 mov r8, r2 12500: e1a09003 mov r9, r3 12504: eb00003c bl 125fc <__clzdi2> 12508: e1a01005 mov r1, r5 1250c: e1a0b000 mov fp, r0 12510: e1a00004 mov r0, r4 12514: eb000038 bl 125fc <__clzdi2> 12518: e04bb000 sub fp, fp, r0 1251c: e24b2020 sub r2, fp, #32 12520: e1a07b19 lsl r7, r9, fp 12524: e1877218 orr r7, r7, r8, lsl r2 12528: e26bc020 rsb ip, fp, #32 1252c: e1877c38 orr r7, r7, r8, lsr ip 12530: e1550007 cmp r5, r7 12534: e1a06b18 lsl r6, r8, fp 12538: 01540006 cmpeq r4, r6 1253c: 33a00000 movcc r0, #0 12540: 33a01000 movcc r1, #0 12544: 3a000005 bcc 12560 <__udivmoddi4+0x90> 12548: e3a0e001 mov lr, #1 1254c: e0544006 subs r4, r4, r6 12550: e1a0121e lsl r1, lr, r2 12554: e1811c3e orr r1, r1, lr, lsr ip 12558: e0c55007 sbc r5, r5, r7 1255c: e1a00b1e lsl r0, lr, fp 12560: e35b0000 cmp fp, #0 12564: 0a000020 beq 125ec <__udivmoddi4+0x11c> 12568: e1b070a7 lsrs r7, r7, #1 1256c: e1a06066 rrx r6, r6 12570: e1a0e00b mov lr, fp 12574: ea000007 b 12598 <__udivmoddi4+0xc8> 12578: e0544006 subs r4, r4, r6 1257c: e0c55007 sbc r5, r5, r7 12580: e0944004 adds r4, r4, r4 12584: e0a55005 adc r5, r5, r5 12588: e2944001 adds r4, r4, #1 1258c: e2a55000 adc r5, r5, #0 12590: e25ee001 subs lr, lr, #1 12594: 0a000006 beq 125b4 <__udivmoddi4+0xe4> 12598: e1550007 cmp r5, r7 1259c: 01540006 cmpeq r4, r6 125a0: 2afffff4 bcs 12578 <__udivmoddi4+0xa8> 125a4: e0944004 adds r4, r4, r4 125a8: e0a55005 adc r5, r5, r5 125ac: e25ee001 subs lr, lr, #1 125b0: 1afffff8 bne 12598 <__udivmoddi4+0xc8> 125b4: e1a0eb34 lsr lr, r4, fp 125b8: e18eec15 orr lr, lr, r5, lsl ip 125bc: e18ee235 orr lr, lr, r5, lsr r2 125c0: e0906004 adds r6, r0, r4 125c4: e1a0400e mov r4, lr 125c8: e0a17005 adc r7, r1, r5 125cc: e1a01b35 lsr r1, r5, fp 125d0: e1a05001 mov r5, r1 125d4: e1a01b11 lsl r1, r1, fp 125d8: e181121e orr r1, r1, lr, lsl r2 125dc: e1a00b1e lsl r0, lr, fp 125e0: e1811c3e orr r1, r1, lr, lsr ip 125e4: e0560000 subs r0, r6, r0 125e8: e0c71001 sbc r1, r7, r1 125ec: e35a0000 cmp sl, #0 125f0: 188a0030 stmne sl, {r4, r5} 125f4: e8bd4ff8 pop {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} 125f8: e12fff1e bx lr 000125fc <__clzdi2>: 125fc: e92d4010 push {r4, lr} 12600: e3510000 cmp r1, #0 12604: 1a000002 bne 12614 <__clzdi2+0x18> 12608: eb000005 bl 12624 <__clzsi2> 1260c: e2800020 add r0, r0, #32 12610: ea000001 b 1261c <__clzdi2+0x20> 12614: e1a00001 mov r0, r1 12618: eb000001 bl 12624 <__clzsi2> 1261c: e8bd4010 pop {r4, lr} 12620: e12fff1e bx lr 00012624 <__clzsi2>: 12624: e3a0101c mov r1, #28 12628: e3500801 cmp r0, #65536 ; 0x10000 1262c: 21a00820 lsrcs r0, r0, #16 12630: 22411010 subcs r1, r1, #16 12634: e3500c01 cmp r0, #256 ; 0x100 12638: 21a00420 lsrcs r0, r0, #8 1263c: 22411008 subcs r1, r1, #8 12640: e3500010 cmp r0, #16 12644: 21a00220 lsrcs r0, r0, #4 12648: 22411004 subcs r1, r1, #4 1264c: e28f2008 add r2, pc, #8 12650: e7d20000 ldrb r0, [r2, r0] 12654: e0800001 add r0, r0, r1 12658: e12fff1e bx lr 1265c: 02020304 .word 0x02020304 12660: 01010101 .word 0x01010101 ... 0001266c <_close>: 1266c: e3a02058 mov r2, #88 ; 0x58 12670: e59f3008 ldr r3, [pc, #8] ; 12680 <_close+0x14> 12674: e3e00000 mvn r0, #0 12678: e5832000 str r2, [r3] 1267c: e12fff1e bx lr 12680: 0003c1a4 .word 0x0003c1a4 00012684 <_fstat>: 12684: e3a02058 mov r2, #88 ; 0x58 12688: e59f3008 ldr r3, [pc, #8] ; 12698 <_fstat+0x14> 1268c: e3e00000 mvn r0, #0 12690: e5832000 str r2, [r3] 12694: e12fff1e bx lr 12698: 0003c1a4 .word 0x0003c1a4 0001269c <_getpid>: 1269c: e3a02058 mov r2, #88 ; 0x58 126a0: e59f3008 ldr r3, [pc, #8] ; 126b0 <_getpid+0x14> 126a4: e3e00000 mvn r0, #0 126a8: e5832000 str r2, [r3] 126ac: e12fff1e bx lr 126b0: 0003c1a4 .word 0x0003c1a4 000126b4 <_isatty>: 126b4: e3a02058 mov r2, #88 ; 0x58 126b8: e59f3008 ldr r3, [pc, #8] ; 126c8 <_isatty+0x14> 126bc: e3a00000 mov r0, #0 126c0: e5832000 str r2, [r3] 126c4: e12fff1e bx lr 126c8: 0003c1a4 .word 0x0003c1a4 000126cc <_kill>: 126cc: e3a02058 mov r2, #88 ; 0x58 126d0: e59f3008 ldr r3, [pc, #8] ; 126e0 <_kill+0x14> 126d4: e3e00000 mvn r0, #0 126d8: e5832000 str r2, [r3] 126dc: e12fff1e bx lr 126e0: 0003c1a4 .word 0x0003c1a4 000126e4 <_lseek>: 126e4: e3a02058 mov r2, #88 ; 0x58 126e8: e59f3008 ldr r3, [pc, #8] ; 126f8 <_lseek+0x14> 126ec: e3e00000 mvn r0, #0 126f0: e5832000 str r2, [r3] 126f4: e12fff1e bx lr 126f8: 0003c1a4 .word 0x0003c1a4 000126fc <_read>: 126fc: e3a02058 mov r2, #88 ; 0x58 12700: e59f3008 ldr r3, [pc, #8] ; 12710 <_read+0x14> 12704: e3e00000 mvn r0, #0 12708: e5832000 str r2, [r3] 1270c: e12fff1e bx lr 12710: 0003c1a4 .word 0x0003c1a4 00012714 <_sbrk>: 12714: e59f201c ldr r2, [pc, #28] ; 12738 <_sbrk+0x24> 12718: e5923000 ldr r3, [r2] 1271c: e59f1018 ldr r1, [pc, #24] ; 1273c <_sbrk+0x28> 12720: e3530000 cmp r3, #0 12724: 01a03001 moveq r3, r1 12728: e0830000 add r0, r3, r0 1272c: e5820000 str r0, [r2] 12730: e1a00003 mov r0, r3 12734: e12fff1e bx lr 12738: 0003c174 .word 0x0003c174 1273c: 0003c1a8 .word 0x0003c1a8 00012740 <_write>: 12740: e3a02058 mov r2, #88 ; 0x58 12744: e59f3008 ldr r3, [pc, #8] ; 12754 <_write+0x14> 12748: e3e00000 mvn r0, #0 1274c: e5832000 str r2, [r3] 12750: e12fff1e bx lr 12754: 0003c1a4 .word 0x0003c1a4 00012758 <_exit>: 12758: eafffffe b 12758 <_exit> Disassembly of section .fini: 0001275c <_fini>: 1275c: e1a0c00d mov ip, sp 12760: e92ddff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} 12764: e24cb004 sub fp, ip, #4 12768: e24bd028 sub sp, fp, #40 ; 0x28 1276c: e89d6ff0 ldm sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} 12770: e12fff1e bx lr