=============================================================================== 4000cf64 <_fat_block_read>: uint32_t start, uint32_t offset, uint32_t count, void *buff ) { 4000cf64: fd010113 addi sp,sp,-48 4000cf68: 02112623 sw ra,44(sp) 4000cf6c: 02812423 sw s0,40(sp) 4000cf70: 02912223 sw s1,36(sp) 4000cf74: 03212023 sw s2,32(sp) 4000cf78: 01312e23 sw s3,28(sp) 4000cf7c: 01412c23 sw s4,24(sp) 4000cf80: 01512a23 sw s5,20(sp) 4000cf84: 01612823 sw s6,16(sp) 4000cf88: 01712623 sw s7,12(sp) 4000cf8c: 01812423 sw s8,8(sp) 4000cf90: 01912223 sw s9,4(sp) uint32_t sec_num = start; uint32_t ofs = offset; uint8_t *sec_buf; uint32_t c = 0; while (count > 0) 4000cf94: 0e068463 beqz a3,4000d07c <_fat_block_read+0x118> <== NEVER TAKEN 4000cf98: 00068b93 mv s7,a3 4000cf9c: 00050413 mv s0,a0 4000cfa0: 00058913 mv s2,a1 4000cfa4: 00060c13 mv s8,a2 4000cfa8: 00070a13 mv s4,a4 ssize_t cmpltd = 0; 4000cfac: 00000993 li s3,0 sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf); 4000cfb0: 0a050a93 addi s5,a0,160 fs_info->c.modified = 0; 4000cfb4: 10000b13 li s6,256 return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000cfb8: 00244483 lbu s1,2(s0) 4000cfbc: 01444783 lbu a5,20(s0) if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num) 4000cfc0: 09d44703 lbu a4,157(s0) 4000cfc4: 00040513 mv a0,s0 4000cfc8: 409787b3 sub a5,a5,s1 4000cfcc: 00f95cb3 srl s9,s2,a5 return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000cfd0: 00fc97b3 sll a5,s9,a5 ((sector - 4000cfd4: 40f907b3 sub a5,s2,a5 << fs_info->vol.sec_log2); 4000cfd8: 009794b3 sll s1,a5,s1 4000cfdc: 00070863 beqz a4,4000cfec <_fat_block_read+0x88> 4000cfe0: 09842783 lw a5,152(s0) 4000cfe4: 03278263 beq a5,s2,4000d008 <_fat_block_read+0xa4> 4000cfe8: cf1ff0ef jal ra,4000ccd8 sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf); 4000cfec: 06c42503 lw a0,108(s0) 4000cff0: 000a8613 mv a2,s5 4000cff4: 000c8593 mv a1,s9 4000cff8: 315080ef jal ra,40015b0c if (sc != RTEMS_SUCCESSFUL) 4000cffc: 08051463 bnez a0,4000d084 <_fat_block_read+0x120> <== NEVER TAKEN fs_info->c.blk_num = sec_num; 4000d000: 09242c23 sw s2,152(s0) fs_info->c.modified = 0; 4000d004: 09641e23 sh s6,156(s0) { rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf); if (rc != RC_OK) return -1; c = MIN(count, (fs_info->vol.bps - ofs)); 4000d008: 00045603 lhu a2,0(s0) memcpy((buff + cmpltd), (sec_buf + ofs), c); 4000d00c: 018484b3 add s1,s1,s8 4000d010: 013a0533 add a0,s4,s3 c = MIN(count, (fs_info->vol.bps - ofs)); 4000d014: 41860633 sub a2,a2,s8 4000d018: 00cbf463 bgeu s7,a2,4000d020 <_fat_block_read+0xbc> 4000d01c: 000b8613 mv a2,s7 *sec_buf = &fs_info->c.buf->buffer[blk_ofs]; 4000d020: 0a042703 lw a4,160(s0) count -= c; 4000d024: 40cb8bb3 sub s7,s7,a2 cmpltd += c; 4000d028: 00c989b3 add s3,s3,a2 memcpy((buff + cmpltd), (sec_buf + ofs), c); 4000d02c: 01c72583 lw a1,28(a4) sec_num++; 4000d030: 00190913 addi s2,s2,1 ofs = 0; 4000d034: 00000c13 li s8,0 memcpy((buff + cmpltd), (sec_buf + ofs), c); 4000d038: 009585b3 add a1,a1,s1 4000d03c: 00d0e0ef jal ra,4001b848 while (count > 0) 4000d040: f60b9ce3 bnez s7,4000cfb8 <_fat_block_read+0x54> } return cmpltd; } 4000d044: 02c12083 lw ra,44(sp) 4000d048: 02812403 lw s0,40(sp) 4000d04c: 02412483 lw s1,36(sp) 4000d050: 02012903 lw s2,32(sp) 4000d054: 01812a03 lw s4,24(sp) 4000d058: 01412a83 lw s5,20(sp) 4000d05c: 01012b03 lw s6,16(sp) 4000d060: 00c12b83 lw s7,12(sp) 4000d064: 00812c03 lw s8,8(sp) 4000d068: 00412c83 lw s9,4(sp) 4000d06c: 00098513 mv a0,s3 4000d070: 01c12983 lw s3,28(sp) 4000d074: 03010113 addi sp,sp,48 4000d078: 00008067 ret ssize_t cmpltd = 0; 4000d07c: 00000993 li s3,0 <== NOT EXECUTED 4000d080: fc5ff06f j 4000d044 <_fat_block_read+0xe0> <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EIO); 4000d084: 6d50d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000d088: 00500793 li a5,5 <== NOT EXECUTED 4000d08c: 00f52023 sw a5,0(a0) <== NOT EXECUTED return -1; 4000d090: fff00993 li s3,-1 <== NOT EXECUTED 4000d094: fb1ff06f j 4000d044 <_fat_block_read+0xe0> <== NOT EXECUTED =============================================================================== 4000ce74 : { 4000ce74: fe010113 addi sp,sp,-32 4000ce78: 00812c23 sw s0,24(sp) 4000ce7c: 01212823 sw s2,16(sp) 4000ce80: 01312623 sw s3,12(sp) 4000ce84: 01412423 sw s4,8(sp) 4000ce88: 01512223 sw s5,4(sp) 4000ce8c: 00112e23 sw ra,28(sp) 4000ce90: 00912a23 sw s1,20(sp) return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000ce94: 00254483 lbu s1,2(a0) 4000ce98: 01454783 lbu a5,20(a0) if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num) 4000ce9c: 09d54703 lbu a4,157(a0) { 4000cea0: 00050413 mv s0,a0 4000cea4: 409787b3 sub a5,a5,s1 4000cea8: 00f5dab3 srl s5,a1,a5 return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000ceac: 00fa97b3 sll a5,s5,a5 ((sector - 4000ceb0: 40f587b3 sub a5,a1,a5 4000ceb4: 00058913 mv s2,a1 4000ceb8: 00060a13 mv s4,a2 4000cebc: 00068993 mv s3,a3 << fs_info->vol.sec_log2); 4000cec0: 009794b3 sll s1,a5,s1 if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num) 4000cec4: 00070863 beqz a4,4000ced4 4000cec8: 09852783 lw a5,152(a0) 4000cecc: 02b78863 beq a5,a1,4000cefc if (fs_info->c.state == FAT_CACHE_EMPTY) 4000ced0: e09ff0ef jal ra,4000ccd8 if (op_type == FAT_OP_TYPE_READ) 4000ced4: 00100793 li a5,1 sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf); 4000ced8: 06c42503 lw a0,108(s0) 4000cedc: 0a040613 addi a2,s0,160 4000cee0: 000a8593 mv a1,s5 if (op_type == FAT_OP_TYPE_READ) 4000cee4: 04fa0863 beq s4,a5,4000cf34 sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &fs_info->c.buf); 4000cee8: 321080ef jal ra,40015a08 if (sc != RTEMS_SUCCESSFUL) 4000ceec: 04051863 bnez a0,4000cf3c <== NEVER TAKEN fs_info->c.modified = 0; 4000cef0: 10000793 li a5,256 fs_info->c.blk_num = sec_num; 4000cef4: 09242c23 sw s2,152(s0) fs_info->c.modified = 0; 4000cef8: 08f41e23 sh a5,156(s0) *sec_buf = &fs_info->c.buf->buffer[blk_ofs]; 4000cefc: 0a042783 lw a5,160(s0) return RC_OK; 4000cf00: 00000513 li a0,0 *sec_buf = &fs_info->c.buf->buffer[blk_ofs]; 4000cf04: 01c7a783 lw a5,28(a5) 4000cf08: 009787b3 add a5,a5,s1 4000cf0c: 00f9a023 sw a5,0(s3) } 4000cf10: 01c12083 lw ra,28(sp) 4000cf14: 01812403 lw s0,24(sp) 4000cf18: 01412483 lw s1,20(sp) 4000cf1c: 01012903 lw s2,16(sp) 4000cf20: 00c12983 lw s3,12(sp) 4000cf24: 00812a03 lw s4,8(sp) 4000cf28: 00412a83 lw s5,4(sp) 4000cf2c: 02010113 addi sp,sp,32 4000cf30: 00008067 ret sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf); 4000cf34: 3d9080ef jal ra,40015b0c 4000cf38: fb5ff06f j 4000ceec rtems_set_errno_and_return_minus_one(EIO); 4000cf3c: 01c0e0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000cf40: 00500793 li a5,5 <== NOT EXECUTED 4000cf44: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000cf48: fff00513 li a0,-1 <== NOT EXECUTED 4000cf4c: fc5ff06f j 4000cf10 <== NOT EXECUTED =============================================================================== 4000ccd8 : rtems_status_code sc = RTEMS_SUCCESSFUL; if (fs_info->c.state == FAT_CACHE_EMPTY) return RC_OK; if (fs_info->c.modified) 4000ccd8: 09c54783 lbu a5,156(a0) <== NOT EXECUTED fat_buf_release(fat_fs_info_t *fs_info) 4000ccdc: fe010113 addi sp,sp,-32 <== NOT EXECUTED 4000cce0: 00812c23 sw s0,24(sp) <== NOT EXECUTED 4000cce4: 00112e23 sw ra,28(sp) <== NOT EXECUTED 4000cce8: 00912a23 sw s1,20(sp) <== NOT EXECUTED 4000ccec: 01212823 sw s2,16(sp) <== NOT EXECUTED 4000ccf0: 00050413 mv s0,a0 <== NOT EXECUTED sec_num, 0); if (sec_of_fat && !fs_info->vol.mirror) memcpy(fs_info->sec_buf, fs_info->c.buf->buffer + blk_ofs, 4000ccf4: 0a052503 lw a0,160(a0) <== NOT EXECUTED if (fs_info->c.modified) 4000ccf8: 0e078c63 beqz a5,4000cdf0 <== NOT EXECUTED uint32_t sec_num = fs_info->c.blk_num; 4000ccfc: 09842783 lw a5,152(s0) <== NOT EXECUTED bool sec_of_fat = ((sec_num >= fs_info->vol.fat_loc) && 4000cd00: 02045703 lhu a4,32(s0) <== NOT EXECUTED 4000cd04: 02e7f863 bgeu a5,a4,4000cd34 <== NOT EXECUTED fs_info->vol.bps); sc = rtems_bdbuf_release_modified(fs_info->c.buf); 4000cd08: 100090ef jal ra,40015e08 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 4000cd0c: 0e051663 bnez a0,4000cdf8 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EIO); fs_info->c.modified = 0; 4000cd10: 08040e23 sb zero,156(s0) <== NOT EXECUTED { sc = rtems_bdbuf_release(fs_info->c.buf); if (sc != RTEMS_SUCCESSFUL) rtems_set_errno_and_return_minus_one(EIO); } fs_info->c.state = FAT_CACHE_EMPTY; 4000cd14: 08040ea3 sb zero,157(s0) <== NOT EXECUTED return RC_OK; } 4000cd18: 01c12083 lw ra,28(sp) <== NOT EXECUTED 4000cd1c: 01812403 lw s0,24(sp) <== NOT EXECUTED 4000cd20: 01412483 lw s1,20(sp) <== NOT EXECUTED 4000cd24: 01012903 lw s2,16(sp) <== NOT EXECUTED return RC_OK; 4000cd28: 00000513 li a0,0 <== NOT EXECUTED } 4000cd2c: 02010113 addi sp,sp,32 <== NOT EXECUTED 4000cd30: 00008067 ret <== NOT EXECUTED bool sec_of_fat = ((sec_num >= fs_info->vol.fat_loc) && 4000cd34: 02842703 lw a4,40(s0) <== NOT EXECUTED 4000cd38: fce7f8e3 bgeu a5,a4,4000cd08 <== NOT EXECUTED if (sec_of_fat && !fs_info->vol.mirror) 4000cd3c: 05c44703 lbu a4,92(s0) <== NOT EXECUTED 4000cd40: 0e070463 beqz a4,4000ce28 <== NOT EXECUTED sc = rtems_bdbuf_release_modified(fs_info->c.buf); 4000cd44: 0c4090ef jal ra,40015e08 <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 4000cd48: 0a051863 bnez a0,4000cdf8 <== NOT EXECUTED if (sec_of_fat && !fs_info->vol.mirror) 4000cd4c: 05c44783 lbu a5,92(s0) <== NOT EXECUTED fs_info->c.modified = 0; 4000cd50: 08040e23 sb zero,156(s0) <== NOT EXECUTED if (sec_of_fat && !fs_info->vol.mirror) 4000cd54: fc0790e3 bnez a5,4000cd14 <== NOT EXECUTED for (i = 1; i < fs_info->vol.fats; i++) 4000cd58: 01544783 lbu a5,21(s0) <== NOT EXECUTED 4000cd5c: 00100913 li s2,1 <== NOT EXECUTED 4000cd60: faf97ae3 bgeu s2,a5,4000cd14 <== NOT EXECUTED sec_num = fs_info->c.blk_num + fs_info->vol.fat_length * i, 4000cd64: 02442783 lw a5,36(s0) <== NOT EXECUTED static inline uint32_t fat_sector_num_to_block_num (const fat_fs_info_t *fs_info, const uint32_t sector_number) { return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000cd68: 00244683 lbu a3,2(s0) <== NOT EXECUTED 4000cd6c: 09842703 lw a4,152(s0) <== NOT EXECUTED 4000cd70: 02f907b3 mul a5,s2,a5 <== NOT EXECUTED 4000cd74: 01444483 lbu s1,20(s0) <== NOT EXECUTED sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &bd); 4000cd78: 06c42803 lw a6,108(s0) <== NOT EXECUTED sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd); 4000cd7c: 00c10613 addi a2,sp,12 <== NOT EXECUTED 4000cd80: 40d484b3 sub s1,s1,a3 <== NOT EXECUTED 4000cd84: 00080513 mv a0,a6 <== NOT EXECUTED sec_num = fs_info->c.blk_num + fs_info->vol.fat_length * i, 4000cd88: 00e787b3 add a5,a5,a4 <== NOT EXECUTED 4000cd8c: 0097d733 srl a4,a5,s1 <== NOT EXECUTED return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000cd90: 009714b3 sll s1,a4,s1 <== NOT EXECUTED fat_sector_offset_to_block_offset (const fat_fs_info_t *fs_info, const uint32_t sector, const uint32_t sector_offset) { return sector_offset + ((sector - 4000cd94: 409787b3 sub a5,a5,s1 <== NOT EXECUTED fat_block_num_to_sector_num (fs_info, fat_sector_num_to_block_num (fs_info, sector))) << fs_info->vol.sec_log2); 4000cd98: 00d794b3 sll s1,a5,a3 <== NOT EXECUTED sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd); 4000cd9c: 00070593 mv a1,a4 <== NOT EXECUTED if (blk_ofs == 0 4000cda0: 00049863 bnez s1,4000cdb0 <== NOT EXECUTED && fs_info->vol.bps == fs_info->vol.bytes_per_block) 4000cda4: 00045683 lhu a3,0(s0) <== NOT EXECUTED 4000cda8: 01042783 lw a5,16(s0) <== NOT EXECUTED 4000cdac: 06f68a63 beq a3,a5,4000ce20 <== NOT EXECUTED sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd); 4000cdb0: 55d080ef jal ra,40015b0c <== NOT EXECUTED if ( sc != RTEMS_SUCCESSFUL) 4000cdb4: 0a051663 bnez a0,4000ce60 <== NOT EXECUTED memcpy(bd->buffer + blk_ofs, fs_info->sec_buf, fs_info->vol.bps); 4000cdb8: 00c12783 lw a5,12(sp) <== NOT EXECUTED 4000cdbc: 00045603 lhu a2,0(s0) <== NOT EXECUTED 4000cdc0: 0a442583 lw a1,164(s0) <== NOT EXECUTED 4000cdc4: 01c7a503 lw a0,28(a5) <== NOT EXECUTED for (i = 1; i < fs_info->vol.fats; i++) 4000cdc8: 00190913 addi s2,s2,1 <== NOT EXECUTED 4000cdcc: 0ff97913 andi s2,s2,255 <== NOT EXECUTED memcpy(bd->buffer + blk_ofs, fs_info->sec_buf, fs_info->vol.bps); 4000cdd0: 00950533 add a0,a0,s1 <== NOT EXECUTED 4000cdd4: 2750e0ef jal ra,4001b848 <== NOT EXECUTED sc = rtems_bdbuf_release_modified(bd); 4000cdd8: 00c12503 lw a0,12(sp) <== NOT EXECUTED 4000cddc: 02c090ef jal ra,40015e08 <== NOT EXECUTED if ( sc != RTEMS_SUCCESSFUL) 4000cde0: 08051063 bnez a0,4000ce60 <== NOT EXECUTED for (i = 1; i < fs_info->vol.fats; i++) 4000cde4: 01544783 lbu a5,21(s0) <== NOT EXECUTED 4000cde8: f6f96ee3 bltu s2,a5,4000cd64 <== NOT EXECUTED 4000cdec: f29ff06f j 4000cd14 <== NOT EXECUTED sc = rtems_bdbuf_release(fs_info->c.buf); 4000cdf0: 71d080ef jal ra,40015d0c <== NOT EXECUTED if (sc != RTEMS_SUCCESSFUL) 4000cdf4: f20500e3 beqz a0,4000cd14 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EIO); 4000cdf8: 1600e0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000cdfc: 00500793 li a5,5 <== NOT EXECUTED 4000ce00: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000ce04: fff00513 li a0,-1 <== NOT EXECUTED } 4000ce08: 01c12083 lw ra,28(sp) <== NOT EXECUTED 4000ce0c: 01812403 lw s0,24(sp) <== NOT EXECUTED 4000ce10: 01412483 lw s1,20(sp) <== NOT EXECUTED 4000ce14: 01012903 lw s2,16(sp) <== NOT EXECUTED 4000ce18: 02010113 addi sp,sp,32 <== NOT EXECUTED 4000ce1c: 00008067 ret <== NOT EXECUTED sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &bd); 4000ce20: 3e9080ef jal ra,40015a08 <== NOT EXECUTED 4000ce24: f91ff06f j 4000cdb4 <== NOT EXECUTED return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000ce28: 00244803 lbu a6,2(s0) <== NOT EXECUTED 4000ce2c: 01444703 lbu a4,20(s0) <== NOT EXECUTED fs_info->c.buf->buffer + blk_ofs, 4000ce30: 01c52583 lw a1,28(a0) <== NOT EXECUTED memcpy(fs_info->sec_buf, 4000ce34: 00045603 lhu a2,0(s0) <== NOT EXECUTED 4000ce38: 41070733 sub a4,a4,a6 <== NOT EXECUTED 4000ce3c: 00e7d6b3 srl a3,a5,a4 <== NOT EXECUTED return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000ce40: 00e69733 sll a4,a3,a4 <== NOT EXECUTED ((sector - 4000ce44: 40e787b3 sub a5,a5,a4 <== NOT EXECUTED 4000ce48: 0a442503 lw a0,164(s0) <== NOT EXECUTED << fs_info->vol.sec_log2); 4000ce4c: 010797b3 sll a5,a5,a6 <== NOT EXECUTED 4000ce50: 00f585b3 add a1,a1,a5 <== NOT EXECUTED 4000ce54: 1f50e0ef jal ra,4001b848 <== NOT EXECUTED sc = rtems_bdbuf_release_modified(fs_info->c.buf); 4000ce58: 0a042503 lw a0,160(s0) <== NOT EXECUTED 4000ce5c: ee9ff06f j 4000cd44 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENOMEM); 4000ce60: 0f80e0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000ce64: 00c00793 li a5,12 <== NOT EXECUTED 4000ce68: 00f52023 sw a5,0(a0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EIO); 4000ce6c: fff00513 li a0,-1 <== NOT EXECUTED 4000ce70: f99ff06f j 4000ce08 <== NOT EXECUTED =============================================================================== 4000d198 : fat_fs_info_t *fs_info, const uint32_t start_cln, const uint32_t offset, const uint32_t count, const uint8_t pattern) { 4000d198: fc010113 addi sp,sp,-64 4000d19c: 02912a23 sw s1,52(sp) ssize_t rc = RC_OK; uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d1a0: 00852483 lw s1,8(a0) { 4000d1a4: 03512223 sw s5,36(sp) 4000d1a8: 01812c23 sw s8,24(sp) 4000d1ac: 02112e23 sw ra,60(sp) 4000d1b0: 02812c23 sw s0,56(sp) 4000d1b4: 03212823 sw s2,48(sp) 4000d1b8: 03312623 sw s3,44(sp) 4000d1bc: 03412423 sw s4,40(sp) 4000d1c0: 03612023 sw s6,32(sp) 4000d1c4: 01712e23 sw s7,28(sp) uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d1c8: 40c484b3 sub s1,s1,a2 { 4000d1cc: 00050c13 mv s8,a0 4000d1d0: 00070a93 mv s5,a4 4000d1d4: 00058513 mv a0,a1 uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d1d8: 0096f463 bgeu a3,s1,4000d1e0 4000d1dc: 00068493 mv s1,a3 <== NOT EXECUTED if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000d1e0: 014c4783 lbu a5,20(s8) 4000d1e4: 002c4583 lbu a1,2(s8) return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000d1e8: 40b786b3 sub a3,a5,a1 4000d1ec: 00051863 bnez a0,4000d1fc <== ALWAYS TAKEN 4000d1f0: 016c4703 lbu a4,22(s8) <== NOT EXECUTED 4000d1f4: 00377713 andi a4,a4,3 <== NOT EXECUTED 4000d1f8: 10071663 bnez a4,4000d304 <== NOT EXECUTED blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2); 4000d1fc: 00cc4703 lbu a4,12(s8) 4000d200: 03cc2983 lw s3,60(s8) cln -= FAT_RSRVD_CLN; 4000d204: ffe50513 addi a0,a0,-2 blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2); 4000d208: 40f70733 sub a4,a4,a5 4000d20c: 00e51533 sll a0,a0,a4 4000d210: 00d9d9b3 srl s3,s3,a3 blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec); 4000d214: 00a98533 add a0,s3,a0 uint32_t cur_blk = fat_cluster_num_to_block_num(fs_info, start_cln); uint32_t blocks_in_offset = offset >> fs_info->vol.bytes_per_block_log2; 4000d218: 00f659b3 srl s3,a2,a5 uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2); 4000d21c: 00f99bb3 sll s7,s3,a5 4000d220: 41760bb3 sub s7,a2,s7 ssize_t bytes_written = 0; ssize_t ret; cur_blk += blocks_in_offset; 4000d224: 00a989b3 add s3,s3,a0 ssize_t bytes_written = 0; 4000d228: 00000a13 li s4,0 while ( (RC_OK == rc) && (0 < bytes_to_write)) 4000d22c: 04048a63 beqz s1,4000d280 <== NEVER TAKEN fs_info->c.modified = true; 4000d230: 00100b13 li s6,1 { uint32_t c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk)); 4000d234: 010c2703 lw a4,16(s8) 4000d238: 41770433 sub s0,a4,s7 4000d23c: 00040913 mv s2,s0 4000d240: 0084f463 bgeu s1,s0,4000d248 4000d244: 00048913 mv s2,s1 <== NOT EXECUTED uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset)); 4000d248: 00897463 bgeu s2,s0,4000d250 4000d24c: 00090413 mv s0,s2 <== NOT EXECUTED if (0 < bytes_to_write) 4000d250: 08040e63 beqz s0,4000d2ec <== NEVER TAKEN return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000d254: 40b785b3 sub a1,a5,a1 4000d258: 00b995b3 sll a1,s3,a1 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf); 4000d25c: 00c10693 addi a3,sp,12 if (bytes_to_write == fs_info->vol.bytes_per_block) 4000d260: 08870a63 beq a4,s0,4000d2f4 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf); 4000d264: 00100613 li a2,1 4000d268: 000c0513 mv a0,s8 4000d26c: c09ff0ef jal ra,4000ce74 if (RC_OK == rc) 4000d270: 06050263 beqz a0,4000d2d4 <== ALWAYS TAKEN fs_info, cur_blk, ofs_blk, c, pattern); if (c != ret) 4000d274: 00050413 mv s0,a0 <== NOT EXECUTED 4000d278: 03240e63 beq s0,s2,4000d2b4 4000d27c: fff00a13 li s4,-1 <== NOT EXECUTED } if (RC_OK != rc) return rc; else return bytes_written; } 4000d280: 03c12083 lw ra,60(sp) 4000d284: 03812403 lw s0,56(sp) 4000d288: 03412483 lw s1,52(sp) 4000d28c: 03012903 lw s2,48(sp) 4000d290: 02c12983 lw s3,44(sp) 4000d294: 02412a83 lw s5,36(sp) 4000d298: 02012b03 lw s6,32(sp) 4000d29c: 01c12b83 lw s7,28(sp) 4000d2a0: 01812c03 lw s8,24(sp) 4000d2a4: 000a0513 mv a0,s4 4000d2a8: 02812a03 lw s4,40(sp) 4000d2ac: 04010113 addi sp,sp,64 4000d2b0: 00008067 ret bytes_to_write -= ret; 4000d2b4: 408484b3 sub s1,s1,s0 bytes_written += ret; 4000d2b8: 00aa0a33 add s4,s4,a0 ++cur_blk; 4000d2bc: 00198993 addi s3,s3,1 && (0 < bytes_to_write)) 4000d2c0: fc0480e3 beqz s1,4000d280 4000d2c4: 014c4783 lbu a5,20(s8) 4000d2c8: 002c4583 lbu a1,2(s8) 4000d2cc: 00000b93 li s7,0 4000d2d0: f65ff06f j 4000d234 memset(blk_buf + offset, pattern, bytes_to_write); 4000d2d4: 00c12503 lw a0,12(sp) 4000d2d8: 00040613 mv a2,s0 4000d2dc: 000a8593 mv a1,s5 4000d2e0: 01750533 add a0,a0,s7 4000d2e4: 68c0e0ef jal ra,4001b970 fs_info->c.modified = true; 4000d2e8: 096c0e23 sb s6,156(s8) return bytes_to_write; 4000d2ec: 00040513 mv a0,s0 4000d2f0: f89ff06f j 4000d278 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf); 4000d2f4: 00200613 li a2,2 4000d2f8: 000c0513 mv a0,s8 4000d2fc: b79ff0ef jal ra,4000ce74 4000d300: f71ff06f j 4000d270 return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000d304: 028c2503 lw a0,40(s8) <== NOT EXECUTED 4000d308: 00d55533 srl a0,a0,a3 <== NOT EXECUTED return blk; 4000d30c: f0dff06f j 4000d218 <== NOT EXECUTED =============================================================================== 4000d310 : fat_fs_info_t *fs_info, const uint32_t start_cln, const uint32_t offset, const uint32_t count, const void *buff) { 4000d310: fc010113 addi sp,sp,-64 4000d314: 02912a23 sw s1,52(sp) ssize_t rc = RC_OK; uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d318: 00852483 lw s1,8(a0) { 4000d31c: 03512223 sw s5,36(sp) 4000d320: 01812c23 sw s8,24(sp) 4000d324: 02112e23 sw ra,60(sp) 4000d328: 02812c23 sw s0,56(sp) 4000d32c: 03212823 sw s2,48(sp) 4000d330: 03312623 sw s3,44(sp) 4000d334: 03412423 sw s4,40(sp) 4000d338: 03612023 sw s6,32(sp) 4000d33c: 01712e23 sw s7,28(sp) uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d340: 40c484b3 sub s1,s1,a2 { 4000d344: 00050c13 mv s8,a0 4000d348: 00070a93 mv s5,a4 4000d34c: 00058513 mv a0,a1 uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset)); 4000d350: 0096f463 bgeu a3,s1,4000d358 4000d354: 00068493 mv s1,a3 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000d358: 014c4783 lbu a5,20(s8) 4000d35c: 002c4583 lbu a1,2(s8) 4000d360: 40b786b3 sub a3,a5,a1 4000d364: 00051863 bnez a0,4000d374 4000d368: 016c4703 lbu a4,22(s8) 4000d36c: 00377713 andi a4,a4,3 4000d370: 10071663 bnez a4,4000d47c <== ALWAYS TAKEN blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2); 4000d374: 00cc4703 lbu a4,12(s8) 4000d378: 03cc2983 lw s3,60(s8) cln -= FAT_RSRVD_CLN; 4000d37c: ffe50513 addi a0,a0,-2 blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2); 4000d380: 40f70733 sub a4,a4,a5 4000d384: 00e51533 sll a0,a0,a4 4000d388: 00d9d9b3 srl s3,s3,a3 blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec); 4000d38c: 00a98533 add a0,s3,a0 uint32_t cur_blk = fat_cluster_num_to_block_num(fs_info, start_cln); uint32_t blocks_in_offset = (offset >> fs_info->vol.bytes_per_block_log2); 4000d390: 00f659b3 srl s3,a2,a5 uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2); 4000d394: 00f99bb3 sll s7,s3,a5 4000d398: 41760bb3 sub s7,a2,s7 ssize_t bytes_written = 0; uint8_t *buffer = (uint8_t*)buff; ssize_t ret; uint32_t c; cur_blk += blocks_in_offset; 4000d39c: 00a989b3 add s3,s3,a0 ssize_t bytes_written = 0; 4000d3a0: 00000a13 li s4,0 while ( (RC_OK == rc) && (0 < bytes_to_write)) 4000d3a4: 04048a63 beqz s1,4000d3f8 <== NEVER TAKEN fs_info->c.modified = true; 4000d3a8: 00100b13 li s6,1 { c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk)); 4000d3ac: 010c2703 lw a4,16(s8) 4000d3b0: 41770433 sub s0,a4,s7 4000d3b4: 00040913 mv s2,s0 4000d3b8: 0084f463 bgeu s1,s0,4000d3c0 4000d3bc: 00048913 mv s2,s1 uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset)); 4000d3c0: 00897463 bgeu s2,s0,4000d3c8 4000d3c4: 00090413 mv s0,s2 if (0 < bytes_to_write) 4000d3c8: 08040e63 beqz s0,4000d464 <== NEVER TAKEN return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000d3cc: 40b785b3 sub a1,a5,a1 4000d3d0: 00b995b3 sll a1,s3,a1 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf); 4000d3d4: 00c10693 addi a3,sp,12 if (bytes_to_write == fs_info->vol.bytes_per_block) 4000d3d8: 08870a63 beq a4,s0,4000d46c rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf); 4000d3dc: 00100613 li a2,1 4000d3e0: 000c0513 mv a0,s8 4000d3e4: a91ff0ef jal ra,4000ce74 if (RC_OK == rc) 4000d3e8: 06050263 beqz a0,4000d44c <== ALWAYS TAKEN fs_info, cur_blk, ofs_blk, c, &buffer[bytes_written]); if (c != ret) 4000d3ec: 00050413 mv s0,a0 <== NOT EXECUTED 4000d3f0: 03240e63 beq s0,s2,4000d42c 4000d3f4: fff00a13 li s4,-1 <== NOT EXECUTED } if (RC_OK != rc) return rc; else return bytes_written; } 4000d3f8: 03c12083 lw ra,60(sp) 4000d3fc: 03812403 lw s0,56(sp) 4000d400: 03412483 lw s1,52(sp) 4000d404: 03012903 lw s2,48(sp) 4000d408: 02c12983 lw s3,44(sp) 4000d40c: 02412a83 lw s5,36(sp) 4000d410: 02012b03 lw s6,32(sp) 4000d414: 01c12b83 lw s7,28(sp) 4000d418: 01812c03 lw s8,24(sp) 4000d41c: 000a0513 mv a0,s4 4000d420: 02812a03 lw s4,40(sp) 4000d424: 04010113 addi sp,sp,64 4000d428: 00008067 ret bytes_to_write -= ret; 4000d42c: 408484b3 sub s1,s1,s0 bytes_written += ret; 4000d430: 00aa0a33 add s4,s4,a0 ++cur_blk; 4000d434: 00198993 addi s3,s3,1 && (0 < bytes_to_write)) 4000d438: fc0480e3 beqz s1,4000d3f8 <== ALWAYS TAKEN 4000d43c: 014c4783 lbu a5,20(s8) <== NOT EXECUTED 4000d440: 002c4583 lbu a1,2(s8) <== NOT EXECUTED 4000d444: 00000b93 li s7,0 <== NOT EXECUTED 4000d448: f65ff06f j 4000d3ac <== NOT EXECUTED memcpy(blk_buf + offset, buf, bytes_to_write); 4000d44c: 00c12503 lw a0,12(sp) 4000d450: 00040613 mv a2,s0 4000d454: 014a85b3 add a1,s5,s4 4000d458: 01750533 add a0,a0,s7 4000d45c: 3ec0e0ef jal ra,4001b848 fs_info->c.modified = true; 4000d460: 096c0e23 sb s6,156(s8) return bytes_to_write; 4000d464: 00040513 mv a0,s0 4000d468: f89ff06f j 4000d3f0 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf); 4000d46c: 00200613 li a2,2 4000d470: 000c0513 mv a0,s8 4000d474: a01ff0ef jal ra,4000ce74 4000d478: f71ff06f j 4000d3e8 return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); 4000d47c: 028c2503 lw a0,40(s8) 4000d480: 00d55533 srl a0,a0,a3 return blk; 4000d484: f0dff06f j 4000d390 =============================================================================== 4000ee5c : if (fat_fd->links_num > 1) 4000ee5c: 0085a783 lw a5,8(a1) { 4000ee60: ff010113 addi sp,sp,-16 4000ee64: 00812423 sw s0,8(sp) 4000ee68: 00912223 sw s1,4(sp) 4000ee6c: 00112623 sw ra,12(sp) if (fat_fd->links_num > 1) 4000ee70: 00100713 li a4,1 { 4000ee74: 00058413 mv s0,a1 4000ee78: 00050493 mv s1,a0 if (fat_fd->links_num > 1) 4000ee7c: 02f77263 bgeu a4,a5,4000eea0 fat_fd->links_num--; 4000ee80: fff78793 addi a5,a5,-1 4000ee84: 00f5a423 sw a5,8(a1) } 4000ee88: 00812403 lw s0,8(sp) 4000ee8c: 00c12083 lw ra,12(sp) rc = fat_buf_release(fs_info); 4000ee90: 00048513 mv a0,s1 } 4000ee94: 00412483 lw s1,4(sp) 4000ee98: 01010113 addi sp,sp,16 rc = fat_buf_release(fs_info); 4000ee9c: 8b4fe06f j 4000cf50 fat_file_update(fs_info, fat_fd); 4000eea0: c1dff0ef jal ra,4000eabc if (fat_fd->flags & FAT_FILE_REMOVED) 4000eea4: 03044783 lbu a5,48(s0) 4000eea8: 0017f793 andi a5,a5,1 4000eeac: 00079e63 bnez a5,4000eec8 if (fat_ino_is_unique(fs_info, fat_fd->ino)) 4000eeb0: 00c42583 lw a1,12(s0) 4000eeb4: 00048513 mv a0,s1 4000eeb8: 8d0ff0ef jal ra,4000df88 4000eebc: 04050663 beqz a0,4000ef08 fat_fd->links_num = 0; 4000eec0: 00042423 sw zero,8(s0) 4000eec4: fc5ff06f j 4000ee88 rc = fat_file_truncate(fs_info, fat_fd, 0); 4000eec8: 00000613 li a2,0 4000eecc: 00040593 mv a1,s0 4000eed0: 00048513 mv a0,s1 4000eed4: e91ff0ef jal ra,4000ed64 if (rc == RC_OK) 4000eed8: fa0518e3 bnez a0,4000ee88 <== NEVER TAKEN next = the_node->next; 4000eedc: 00042703 lw a4,0(s0) previous = the_node->previous; 4000eee0: 00442783 lw a5,4(s0) _hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd); 4000eee4: 00c42583 lw a1,12(s0) if (fat_ino_is_unique(fs_info, fat_fd->ino)) 4000eee8: 00048513 mv a0,s1 next->previous = previous; 4000eeec: 00f72223 sw a5,4(a4) previous->next = next; 4000eef0: 00e7a023 sw a4,0(a5) 4000eef4: 894ff0ef jal ra,4000df88 4000eef8: 02051663 bnez a0,4000ef24 <== NEVER TAKEN free(fat_fd); 4000eefc: 00040513 mv a0,s0 4000ef00: dc0f20ef jal ra,400014c0 4000ef04: f85ff06f j 4000ee88 next = the_node->next; 4000ef08: 00042703 lw a4,0(s0) previous = the_node->previous; 4000ef0c: 00442783 lw a5,4(s0) free(fat_fd); 4000ef10: 00040513 mv a0,s0 next->previous = previous; 4000ef14: 00f72223 sw a5,4(a4) previous->next = next; 4000ef18: 00e7a023 sw a4,0(a5) 4000ef1c: da4f20ef jal ra,400014c0 4000ef20: f69ff06f j 4000ee88 fat_free_unique_ino(fs_info, fat_fd->ino); 4000ef24: 00c42583 lw a1,12(s0) <== NOT EXECUTED 4000ef28: 00048513 mv a0,s1 <== NOT EXECUTED 4000ef2c: 828ff0ef jal ra,4000df54 <== NOT EXECUTED 4000ef30: fcdff06f j 4000eefc <== NOT EXECUTED =============================================================================== 4000f008 : { 4000f008: fc010113 addi sp,sp,-64 4000f00c: 03612023 sw s6,32(sp) 4000f010: 02112e23 sw ra,60(sp) 4000f014: 02812c23 sw s0,56(sp) 4000f018: 02912a23 sw s1,52(sp) 4000f01c: 03212823 sw s2,48(sp) 4000f020: 03312623 sw s3,44(sp) 4000f024: 03412423 sw s4,40(sp) 4000f028: 03512223 sw s5,36(sp) 4000f02c: 01712e23 sw s7,28(sp) 4000f030: 01812c23 sw s8,24(sp) *a_length = new_length; 4000f034: 00d72023 sw a3,0(a4) if (new_length <= fat_fd->fat_file_size) 4000f038: 0185a803 lw a6,24(a1) uint32_t chain = 0; 4000f03c: 00012023 sw zero,0(sp) uint32_t last_cl = 0; 4000f040: 00012423 sw zero,8(sp) { 4000f044: 00070b13 mv s6,a4 if (new_length <= fat_fd->fat_file_size) 4000f048: 10d87c63 bgeu a6,a3,4000f160 4000f04c: 00068413 mv s0,a3 if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f050: 0205a683 lw a3,32(a1) 4000f054: 00100713 li a4,1 4000f058: 00058493 mv s1,a1 4000f05c: 00050993 mv s3,a0 4000f060: 00060c13 mv s8,a2 4000f064: 12e68a63 beq a3,a4,4000f198 bytes_remain = (fs_info->vol.bpc - 4000f068: 0089a903 lw s2,8(s3) bytes2add = new_length - fat_fd->fat_file_size; 4000f06c: 410406b3 sub a3,s0,a6 (fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) & 4000f070: fff90713 addi a4,s2,-1 4000f074: 00e87ab3 and s5,a6,a4 bytes_remain = (fs_info->vol.bpc - 4000f078: 41590933 sub s2,s2,s5 4000f07c: 00e97933 and s2,s2,a4 if (bytes2add > bytes_remain) 4000f080: 0cd97e63 bgeu s2,a3,4000f15c bytes2add -= bytes_remain; 4000f084: 41268bb3 sub s7,a3,s2 if (zero_fill && bytes_remain > 0) { 4000f088: 120c1c63 bnez s8,4000f1c0 if (bytes2add == 0) 4000f08c: 0c0b8a63 beqz s7,4000f160 cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1; 4000f090: 00c9c603 lbu a2,12(s3) 4000f094: fffb8a93 addi s5,s7,-1 rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add, 4000f098: 000c0793 mv a5,s8 cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1; 4000f09c: 00cadab3 srl s5,s5,a2 4000f0a0: 001a8a93 addi s5,s5,1 rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add, 4000f0a4: 00810713 addi a4,sp,8 4000f0a8: 00c10693 addi a3,sp,12 4000f0ac: 000a8613 mv a2,s5 4000f0b0: 00010593 mv a1,sp 4000f0b4: 00098513 mv a0,s3 4000f0b8: c34ff0ef jal ra,4000e4ec 4000f0bc: 00050a13 mv s4,a0 if (rc != RC_OK) 4000f0c0: 0a051263 bnez a0,4000f164 <== NEVER TAKEN if ((cls_added == 0) && (bytes_remain == 0)) 4000f0c4: 00c12783 lw a5,12(sp) 4000f0c8: 0127e933 or s2,a5,s2 4000f0cc: 0e090063 beqz s2,4000f1ac if (cls2add != cls_added) 4000f0d0: 01578e63 beq a5,s5,4000f0ec uint32_t missing = (cls2add - cls_added) << fs_info->vol.bpc_log2; 4000f0d4: 00c9c603 lbu a2,12(s3) 4000f0d8: 40fa8ab3 sub s5,s5,a5 4000f0dc: 00ca9ab3 sll s5,s5,a2 new_length -= bytes2add < missing ? bytes2add : missing; 4000f0e0: 015bf463 bgeu s7,s5,4000f0e8 4000f0e4: 000b8a93 mv s5,s7 4000f0e8: 41540433 sub s0,s0,s5 if (cls_added > 0) 4000f0ec: 12078263 beqz a5,4000f210 if ( fat_fd->fat_file_size == 0 ) 4000f0f0: 0184a683 lw a3,24(s1) 4000f0f4: 12068a63 beqz a3,4000f228 if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE) 4000f0f8: 03c4a583 lw a1,60(s1) 4000f0fc: fff00793 li a5,-1 4000f100: 14f58463 beq a1,a5,4000f248 old_last_cl = fat_fd->map.last_cln; 4000f104: 00b12223 sw a1,4(sp) rc = fat_set_fat_cluster(fs_info, old_last_cl, chain); 4000f108: 00012603 lw a2,0(sp) 4000f10c: 00098513 mv a0,s3 4000f110: 844ff0ef jal ra,4000e154 4000f114: 00050793 mv a5,a0 if ( rc != RC_OK ) 4000f118: 02051863 bnez a0,4000f148 <== NEVER TAKEN fat_buf_release(fs_info); 4000f11c: 00098513 mv a0,s3 4000f120: e31fd0ef jal ra,4000cf50 fat_fd->map.last_cln = last_cl; 4000f124: 00812703 lw a4,8(sp) if (fat_fd->fat_file_type == FAT_DIRECTORY) 4000f128: 0104a783 lw a5,16(s1) fat_fd->map.last_cln = last_cl; 4000f12c: 02e4ae23 sw a4,60(s1) if (fat_fd->fat_file_type == FAT_DIRECTORY) 4000f130: 0e079063 bnez a5,4000f210 rc = fat_init_clusters_chain(fs_info, chain); 4000f134: 00012583 lw a1,0(sp) 4000f138: 00098513 mv a0,s3 4000f13c: cb9fe0ef jal ra,4000ddf4 4000f140: 00050793 mv a5,a0 if ( rc != RC_OK ) 4000f144: 0c050663 beqz a0,4000f210 <== ALWAYS TAKEN fat_free_fat_clusters_chain(fs_info, chain); 4000f148: 00012583 lw a1,0(sp) <== NOT EXECUTED 4000f14c: 00098513 mv a0,s3 <== NOT EXECUTED return rc; 4000f150: 00078a13 mv s4,a5 <== NOT EXECUTED fat_free_fat_clusters_chain(fs_info, chain); 4000f154: a90ff0ef jal ra,4000e3e4 <== NOT EXECUTED return rc; 4000f158: 00c0006f j 4000f164 <== NOT EXECUTED if (zero_fill && bytes_remain > 0) { 4000f15c: 060c1663 bnez s8,4000f1c8 return RC_OK; 4000f160: 00000a13 li s4,0 } 4000f164: 03c12083 lw ra,60(sp) 4000f168: 03812403 lw s0,56(sp) 4000f16c: 03412483 lw s1,52(sp) 4000f170: 03012903 lw s2,48(sp) 4000f174: 02c12983 lw s3,44(sp) 4000f178: 02412a83 lw s5,36(sp) 4000f17c: 02012b03 lw s6,32(sp) 4000f180: 01c12b83 lw s7,28(sp) 4000f184: 01812c03 lw s8,24(sp) 4000f188: 000a0513 mv a0,s4 4000f18c: 02812a03 lw s4,40(sp) 4000f190: 04010113 addi sp,sp,64 4000f194: 00008067 ret if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f198: 0245a703 lw a4,36(a1) 4000f19c: ec0716e3 bnez a4,4000f068 <== NEVER TAKEN 4000f1a0: 01654703 lbu a4,22(a0) 4000f1a4: 00377713 andi a4,a4,3 4000f1a8: ec0700e3 beqz a4,4000f068 <== NEVER TAKEN rtems_set_errno_and_return_minus_one(ENOSPC); 4000f1ac: 5ad0b0ef jal ra,4001af58 <__errno> 4000f1b0: 01c00793 li a5,28 4000f1b4: 00f52023 sw a5,0(a0) 4000f1b8: fff00a13 li s4,-1 4000f1bc: fa9ff06f j 4000f164 if (zero_fill && bytes_remain > 0) { 4000f1c0: ec0906e3 beqz s2,4000f08c <== ALWAYS TAKEN 4000f1c4: 0080006f j 4000f1cc <== NOT EXECUTED bytes2add = 0; 4000f1c8: 00000b93 li s7,0 uint32_t cl_start = start >> fs_info->vol.bpc_log2; 4000f1cc: 00c9c603 lbu a2,12(s3) rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000f1d0: 00c10693 addi a3,sp,12 4000f1d4: 00048593 mv a1,s1 4000f1d8: 00c85633 srl a2,a6,a2 4000f1dc: 00098513 mv a0,s3 4000f1e0: d04ff0ef jal ra,4000e6e4 4000f1e4: 00050a13 mv s4,a0 if (rc != RC_OK) 4000f1e8: f6051ee3 bnez a0,4000f164 <== NEVER TAKEN bytes_written = fat_cluster_set (fs_info, cur_cln, ofs, bytes_remain, 0); 4000f1ec: 00c12583 lw a1,12(sp) 4000f1f0: 00000713 li a4,0 4000f1f4: 00090693 mv a3,s2 4000f1f8: 000a8613 mv a2,s5 4000f1fc: 00098513 mv a0,s3 4000f200: f99fd0ef jal ra,4000d198 return -1; 4000f204: fff00a13 li s4,-1 if (bytes_remain != bytes_written) 4000f208: f5251ee3 bne a0,s2,4000f164 4000f20c: e81ff06f j 4000f08c *a_length = new_length; 4000f210: 008b2023 sw s0,0(s6) fat_fd->flags |= FAT_FILE_META_DATA_CHANGED; 4000f214: 0304c783 lbu a5,48(s1) fat_fd->fat_file_size = s; 4000f218: 0084ac23 sw s0,24(s1) fat_fd->flags |= FAT_FILE_META_DATA_CHANGED; 4000f21c: 0027e793 ori a5,a5,2 4000f220: 02f48823 sb a5,48(s1) return RC_OK; 4000f224: f41ff06f j 4000f164 fat_fd->flags |= FAT_FILE_META_DATA_CHANGED; 4000f228: 0304c783 lbu a5,48(s1) fat_fd->map.disk_cln = chain; 4000f22c: 00012703 lw a4,0(sp) fat_fd->map.file_cln = 0; 4000f230: 0204aa23 sw zero,52(s1) 4000f234: 0027e793 ori a5,a5,2 fat_fd->map.disk_cln = chain; 4000f238: 02e4ac23 sw a4,56(s1) fat_fd->cln = cln; 4000f23c: 00e4ae23 sw a4,28(s1) fat_fd->flags |= FAT_FILE_META_DATA_CHANGED; 4000f240: 02f48823 sb a5,48(s1) } 4000f244: ee1ff06f j 4000f124 rc = fat_file_ioctl(fs_info, fat_fd, F_CLU_NUM, 4000f248: 00410713 addi a4,sp,4 <== NOT EXECUTED 4000f24c: fff68693 addi a3,a3,-1 <== NOT EXECUTED 4000f250: 00100613 li a2,1 <== NOT EXECUTED 4000f254: 00048593 mv a1,s1 <== NOT EXECUTED 4000f258: 00098513 mv a0,s3 <== NOT EXECUTED 4000f25c: cd9ff0ef jal ra,4000ef34 <== NOT EXECUTED 4000f260: 00050793 mv a5,a0 <== NOT EXECUTED if ( rc != RC_OK ) 4000f264: ee0512e3 bnez a0,4000f148 <== NOT EXECUTED rc = fat_set_fat_cluster(fs_info, old_last_cl, chain); 4000f268: 00412583 lw a1,4(sp) <== NOT EXECUTED 4000f26c: e9dff06f j 4000f108 <== NOT EXECUTED =============================================================================== 4000ef34 : { 4000ef34: fc010113 addi sp,sp,-64 va_start(ap, cmd); 4000ef38: 02c10313 addi t1,sp,44 { 4000ef3c: 02f12a23 sw a5,52(sp) 4000ef40: 00112e23 sw ra,28(sp) 4000ef44: 00812c23 sw s0,24(sp) 4000ef48: 02d12623 sw a3,44(sp) 4000ef4c: 02e12823 sw a4,48(sp) 4000ef50: 03012c23 sw a6,56(sp) 4000ef54: 03112e23 sw a7,60(sp) uint32_t cur_cln = 0; 4000ef58: 00012423 sw zero,8(sp) va_start(ap, cmd); 4000ef5c: 00612623 sw t1,12(sp) switch (cmd) 4000ef60: 00100793 li a5,1 4000ef64: 04f61c63 bne a2,a5,4000efbc if ( pos >= fat_fd->fat_file_size ) { 4000ef68: 0185a703 lw a4,24(a1) pos = va_arg(ap, uint32_t); 4000ef6c: 00068793 mv a5,a3 ret = va_arg(ap, uint32_t *); 4000ef70: 03410693 addi a3,sp,52 4000ef74: 00d12623 sw a3,12(sp) 4000ef78: 03012403 lw s0,48(sp) if ( pos >= fat_fd->fat_file_size ) { 4000ef7c: 06e7fc63 bgeu a5,a4,4000eff4 if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000ef80: 0205a703 lw a4,32(a1) 4000ef84: 00c71663 bne a4,a2,4000ef90 4000ef88: 0245a703 lw a4,36(a1) 4000ef8c: 04070863 beqz a4,4000efdc <== ALWAYS TAKEN cl_start = pos >> fs_info->vol.bpc_log2; 4000ef90: 00c54603 lbu a2,12(a0) rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000ef94: 00810693 addi a3,sp,8 4000ef98: 00c7d633 srl a2,a5,a2 4000ef9c: f48ff0ef jal ra,4000e6e4 if ( rc != RC_OK ) 4000efa0: 00051663 bnez a0,4000efac <== NEVER TAKEN *ret = cur_cln; 4000efa4: 00812783 lw a5,8(sp) 4000efa8: 00f42023 sw a5,0(s0) } 4000efac: 01c12083 lw ra,28(sp) 4000efb0: 01812403 lw s0,24(sp) 4000efb4: 04010113 addi sp,sp,64 4000efb8: 00008067 ret errno = EINVAL; 4000efbc: 79d0b0ef jal ra,4001af58 <__errno> <== NOT EXECUTED } 4000efc0: 01c12083 lw ra,28(sp) <== NOT EXECUTED 4000efc4: 01812403 lw s0,24(sp) <== NOT EXECUTED errno = EINVAL; 4000efc8: 01600793 li a5,22 <== NOT EXECUTED 4000efcc: 00f52023 sw a5,0(a0) <== NOT EXECUTED rc = -1; 4000efd0: fff00513 li a0,-1 <== NOT EXECUTED } 4000efd4: 04010113 addi sp,sp,64 <== NOT EXECUTED 4000efd8: 00008067 ret <== NOT EXECUTED if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000efdc: 01654703 lbu a4,22(a0) 4000efe0: 00377713 andi a4,a4,3 4000efe4: fa0706e3 beqz a4,4000ef90 *ret = 0; 4000efe8: 00042023 sw zero,0(s0) rc = RC_OK; 4000efec: 00000513 li a0,0 break; 4000eff0: fbdff06f j 4000efac rtems_set_errno_and_return_minus_one( EIO ); 4000eff4: 7650b0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000eff8: 00500793 li a5,5 <== NOT EXECUTED 4000effc: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000f000: fff00513 li a0,-1 <== NOT EXECUTED 4000f004: fa9ff06f j 4000efac <== NOT EXECUTED =============================================================================== 4000e7b8 : key = fat_construct_key(fs_info, &dir_pos->sname); 4000e7b8: 0005a783 lw a5,0(a1) { 4000e7bc: fd010113 addi sp,sp,-48 4000e7c0: 02812423 sw s0,40(sp) 4000e7c4: 03212023 sw s2,32(sp) 4000e7c8: 01612823 sw s6,16(sp) 4000e7cc: 02112623 sw ra,44(sp) 4000e7d0: 02912223 sw s1,36(sp) 4000e7d4: 01312e23 sw s3,28(sp) 4000e7d8: 01412c23 sw s4,24(sp) 4000e7dc: 01512a23 sw s5,20(sp) 4000e7e0: 01712623 sw s7,12(sp) if (cln == 1) 4000e7e4: 00100693 li a3,1 4000e7e8: 0045a703 lw a4,4(a1) 4000e7ec: 00058913 mv s2,a1 4000e7f0: 00050413 mv s0,a0 4000e7f4: 00060b13 mv s6,a2 4000e7f8: 02d78263 beq a5,a3,4000e81c if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e7fc: 1e078a63 beqz a5,4000e9f0 return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e800: 00544603 lbu a2,5(s0) 4000e804: 03c42683 lw a3,60(s0) 4000e808: ffe78793 addi a5,a5,-2 4000e80c: 00c797b3 sll a5,a5,a2 4000e810: 00d787b3 add a5,a5,a3 fs_info->vol.sec_mul); 4000e814: 00344483 lbu s1,3(s0) return (fat_cluster_num_to_sector_num(fs_info, cln) << 4000e818: 009797b3 sll a5,a5,s1 ((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) ); 4000e81c: 00575493 srli s1,a4,0x5 4000e820: 00f4f693 andi a3,s1,15 uint32_t mod = (key1) % FAT_HASH_MODULE; 4000e824: 0016f613 andi a2,a3,1 rtems_chain_node *the_node = rtems_chain_first(hash + mod); 4000e828: 00161993 slli s3,a2,0x1 4000e82c: 08042a03 lw s4,128(s0) 4000e830: 00c989b3 add s3,s3,a2 4000e834: 00299993 slli s3,s3,0x2 4000e838: 013a0a33 add s4,s4,s3 (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e83c: 00975493 srli s1,a4,0x9 return _Chain_Immutable_head( the_chain )->next; 4000e840: 000a2603 lw a2,0(s4) return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) + 4000e844: 00f484b3 add s1,s1,a5 (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e848: 00449493 slli s1,s1,0x4 return &the_chain->Tail.Node; 4000e84c: 004a0a93 addi s5,s4,4 4000e850: 00d484b3 add s1,s1,a3 for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; ) 4000e854: 07560263 beq a2,s5,4000e8b8 if (cln == 1) 4000e858: 00100593 li a1,1 return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e85c: 02062783 lw a5,32(a2) if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e860: 02462683 lw a3,36(a2) return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e864: ffe78713 addi a4,a5,-2 if (cln == 1) 4000e868: 02b78663 beq a5,a1,4000e894 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e86c: 00079863 bnez a5,4000e87c 4000e870: 01644783 lbu a5,22(s0) 4000e874: 0037f793 andi a5,a5,3 4000e878: 18079a63 bnez a5,4000ea0c <== ALWAYS TAKEN return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e87c: 00544503 lbu a0,5(s0) 4000e880: 03c42783 lw a5,60(s0) 4000e884: 00a71733 sll a4,a4,a0 4000e888: 00f707b3 add a5,a4,a5 fs_info->vol.sec_mul); 4000e88c: 00344703 lbu a4,3(s0) return (fat_cluster_num_to_sector_num(fs_info, cln) << 4000e890: 00e797b3 sll a5,a5,a4 4000e894: 0096d713 srli a4,a3,0x9 return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) + 4000e898: 00f707b3 add a5,a4,a5 ((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) ); 4000e89c: 0056d693 srli a3,a3,0x5 (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e8a0: 00479793 slli a5,a5,0x4 ((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) ); 4000e8a4: 00f6f693 andi a3,a3,15 (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e8a8: 00d787b3 add a5,a5,a3 if ( (key1) == ck) 4000e8ac: 10f48263 beq s1,a5,4000e9b0 the_node = the_node->next; 4000e8b0: 00062603 lw a2,0(a2) for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; ) 4000e8b4: fb5614e3 bne a2,s5,4000e85c rtems_chain_node *the_node = rtems_chain_first(hash + mod); 4000e8b8: 08442603 lw a2,132(s0) if (cln == 1) 4000e8bc: 00100513 li a0,1 4000e8c0: 01360633 add a2,a2,s3 return _Chain_Immutable_head( the_chain )->next; 4000e8c4: 00062803 lw a6,0(a2) return &the_chain->Tail.Node; 4000e8c8: 00460613 addi a2,a2,4 for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; ) 4000e8cc: 00c81863 bne a6,a2,4000e8dc 4000e8d0: 1440006f j 4000ea14 the_node = the_node->next; 4000e8d4: 00082803 lw a6,0(a6) <== NOT EXECUTED for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; ) 4000e8d8: 12c80e63 beq a6,a2,4000ea14 <== NOT EXECUTED return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e8dc: 02082783 lw a5,32(a6) <== NOT EXECUTED if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e8e0: 02482683 lw a3,36(a6) <== NOT EXECUTED return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e8e4: ffe78713 addi a4,a5,-2 <== NOT EXECUTED if (cln == 1) 4000e8e8: 02a78663 beq a5,a0,4000e914 <== NOT EXECUTED if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e8ec: 00079863 bnez a5,4000e8fc <== NOT EXECUTED 4000e8f0: 01644783 lbu a5,22(s0) <== NOT EXECUTED 4000e8f4: 0037f793 andi a5,a5,3 <== NOT EXECUTED 4000e8f8: 10079663 bnez a5,4000ea04 <== NOT EXECUTED return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000e8fc: 00544583 lbu a1,5(s0) <== NOT EXECUTED 4000e900: 03c42783 lw a5,60(s0) <== NOT EXECUTED 4000e904: 00b71733 sll a4,a4,a1 <== NOT EXECUTED 4000e908: 00f707b3 add a5,a4,a5 <== NOT EXECUTED fs_info->vol.sec_mul); 4000e90c: 00344703 lbu a4,3(s0) <== NOT EXECUTED return (fat_cluster_num_to_sector_num(fs_info, cln) << 4000e910: 00e797b3 sll a5,a5,a4 <== NOT EXECUTED 4000e914: 0096d713 srli a4,a3,0x9 <== NOT EXECUTED return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) + 4000e918: 00f707b3 add a5,a4,a5 <== NOT EXECUTED ((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) ); 4000e91c: 0056d693 srli a3,a3,0x5 <== NOT EXECUTED (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e920: 00479793 slli a5,a5,0x4 <== NOT EXECUTED ((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) ); 4000e924: 00f6f693 andi a3,a3,15 <== NOT EXECUTED (pos->ofs >> FAT_SECTOR512_BITS)) << 4) + 4000e928: 00d787b3 add a5,a5,a3 <== NOT EXECUTED if ( (key1) == ck) 4000e92c: faf494e3 bne s1,a5,4000e8d4 <== NOT EXECUTED if ( ((key2) == 0) || ((key2) == ffd->ino) ) 4000e930: 00048663 beqz s1,4000e93c <== NOT EXECUTED 4000e934: 00c82783 lw a5,12(a6) <== NOT EXECUTED 4000e938: f8f49ee3 bne s1,a5,4000e8d4 <== NOT EXECUTED lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t)); 4000e93c: 05000593 li a1,80 <== NOT EXECUTED 4000e940: 00100513 li a0,1 <== NOT EXECUTED 4000e944: d60fd0ef jal ra,4000bea4 <== NOT EXECUTED 4000e948: 00ab2023 sw a0,0(s6) <== NOT EXECUTED 4000e94c: 00050b93 mv s7,a0 <== NOT EXECUTED if ( lfat_fd == NULL ) 4000e950: 14050063 beqz a0,4000ea90 <== NOT EXECUTED lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000e954: 030bc783 lbu a5,48(s7) <== NOT EXECUTED lfat_fd->dir_pos = *dir_pos; 4000e958: 00092583 lw a1,0(s2) <== NOT EXECUTED 4000e95c: 00492603 lw a2,4(s2) <== NOT EXECUTED 4000e960: 00892683 lw a3,8(s2) <== NOT EXECUTED 4000e964: 00c92703 lw a4,12(s2) <== NOT EXECUTED lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000e968: ffe7f793 andi a5,a5,-2 <== NOT EXECUTED lfat_fd->links_num = 1; 4000e96c: 00100513 li a0,1 <== NOT EXECUTED lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000e970: 02fb8823 sb a5,48(s7) <== NOT EXECUTED lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE; 4000e974: fff00793 li a5,-1 <== NOT EXECUTED lfat_fd->links_num = 1; 4000e978: 00aba423 sw a0,8(s7) <== NOT EXECUTED lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE; 4000e97c: 02fbae23 sw a5,60(s7) <== NOT EXECUTED lfat_fd->dir_pos = *dir_pos; 4000e980: 02bba023 sw a1,32(s7) <== NOT EXECUTED 4000e984: 02cba223 sw a2,36(s7) <== NOT EXECUTED 4000e988: 02dba423 sw a3,40(s7) <== NOT EXECUTED 4000e98c: 02eba623 sw a4,44(s7) <== NOT EXECUTED lfat_fd->ino = fat_get_unique_ino(fs_info); 4000e990: 00040513 mv a0,s0 <== NOT EXECUTED 4000e994: ce8ff0ef jal ra,4000de7c <== NOT EXECUTED 4000e998: 00aba623 sw a0,12(s7) <== NOT EXECUTED if ( lfat_fd->ino == 0 ) 4000e99c: 0e050663 beqz a0,4000ea88 <== NOT EXECUTED rtems_chain_append_unprotected((hash) + ((key1) % FAT_HASH_MODULE), &(el)->link); 4000e9a0: 08042a03 lw s4,128(s0) <== NOT EXECUTED 4000e9a4: 013a0a33 add s4,s4,s3 <== NOT EXECUTED return &the_chain->Tail.Node; 4000e9a8: 004a0a93 addi s5,s4,4 <== NOT EXECUTED 4000e9ac: 0c00006f j 4000ea6c <== NOT EXECUTED lfat_fd->links_num++; 4000e9b0: 00862783 lw a5,8(a2) (*fat_fd) = lfat_fd; 4000e9b4: 00cb2023 sw a2,0(s6) return rc; 4000e9b8: 00000513 li a0,0 lfat_fd->links_num++; 4000e9bc: 00178793 addi a5,a5,1 4000e9c0: 00f62423 sw a5,8(a2) } 4000e9c4: 02c12083 lw ra,44(sp) 4000e9c8: 02812403 lw s0,40(sp) 4000e9cc: 02412483 lw s1,36(sp) 4000e9d0: 02012903 lw s2,32(sp) 4000e9d4: 01c12983 lw s3,28(sp) 4000e9d8: 01812a03 lw s4,24(sp) 4000e9dc: 01412a83 lw s5,20(sp) 4000e9e0: 01012b03 lw s6,16(sp) 4000e9e4: 00c12b83 lw s7,12(sp) 4000e9e8: 03010113 addi sp,sp,48 4000e9ec: 00008067 ret if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000e9f0: 01654683 lbu a3,22(a0) 4000e9f4: 0036f693 andi a3,a3,3 4000e9f8: e00684e3 beqz a3,4000e800 <== NEVER TAKEN return fs_info->vol.rdir_loc; 4000e9fc: 02852783 lw a5,40(a0) 4000ea00: e15ff06f j 4000e814 4000ea04: 02842783 lw a5,40(s0) <== NOT EXECUTED 4000ea08: f05ff06f j 4000e90c <== NOT EXECUTED 4000ea0c: 02842783 lw a5,40(s0) 4000ea10: e7dff06f j 4000e88c lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t)); 4000ea14: 05000593 li a1,80 4000ea18: 00100513 li a0,1 4000ea1c: c88fd0ef jal ra,4000bea4 4000ea20: 00ab2023 sw a0,0(s6) 4000ea24: 00050b93 mv s7,a0 if ( lfat_fd == NULL ) 4000ea28: 06050463 beqz a0,4000ea90 <== NEVER TAKEN lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000ea2c: 030bc783 lbu a5,48(s7) lfat_fd->dir_pos = *dir_pos; 4000ea30: 00092583 lw a1,0(s2) 4000ea34: 00492603 lw a2,4(s2) 4000ea38: 00892683 lw a3,8(s2) 4000ea3c: 00c92703 lw a4,12(s2) lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000ea40: ffe7f793 andi a5,a5,-2 lfat_fd->links_num = 1; 4000ea44: 00100513 li a0,1 lfat_fd->flags &= ~FAT_FILE_REMOVED; 4000ea48: 02fb8823 sb a5,48(s7) lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE; 4000ea4c: fff00793 li a5,-1 lfat_fd->links_num = 1; 4000ea50: 00aba423 sw a0,8(s7) lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE; 4000ea54: 02fbae23 sw a5,60(s7) lfat_fd->dir_pos = *dir_pos; 4000ea58: 02bba023 sw a1,32(s7) 4000ea5c: 02cba223 sw a2,36(s7) 4000ea60: 02dba423 sw a3,40(s7) 4000ea64: 02eba623 sw a4,44(s7) lfat_fd->ino = key; 4000ea68: 009ba623 sw s1,12(s7) old_last = tail->previous; 4000ea6c: 008a2783 lw a5,8(s4) the_node->next = tail; 4000ea70: 015ba023 sw s5,0(s7) tail->previous = the_node; 4000ea74: 017a2423 sw s7,8(s4) old_last->next = the_node; 4000ea78: 0177a023 sw s7,0(a5) the_node->previous = old_last; 4000ea7c: 00fba223 sw a5,4(s7) return RC_OK; 4000ea80: 00000513 li a0,0 4000ea84: f41ff06f j 4000e9c4 free((*fat_fd)); 4000ea88: 000b2503 lw a0,0(s6) <== NOT EXECUTED 4000ea8c: a35f20ef jal ra,400014c0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000ea90: 4c80c0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000ea94: 00c00793 li a5,12 <== NOT EXECUTED 4000ea98: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000ea9c: fff00513 li a0,-1 <== NOT EXECUTED 4000eaa0: f25ff06f j 4000e9c4 <== NOT EXECUTED =============================================================================== 4000eb5c : { 4000eb5c: fc010113 addi sp,sp,-64 4000eb60: 02112e23 sw ra,60(sp) 4000eb64: 02812c23 sw s0,56(sp) 4000eb68: 02912a23 sw s1,52(sp) 4000eb6c: 03212823 sw s2,48(sp) 4000eb70: 03312623 sw s3,44(sp) 4000eb74: 03412423 sw s4,40(sp) 4000eb78: 03512223 sw s5,36(sp) 4000eb7c: 03612023 sw s6,32(sp) 4000eb80: 01712e23 sw s7,28(sp) 4000eb84: 01812c23 sw s8,24(sp) uint32_t cur_cln = 0; 4000eb88: 00012623 sw zero,12(sp) if (count == 0) 4000eb8c: 10068a63 beqz a3,4000eca0 <== NEVER TAKEN if ( start >= fat_fd->fat_file_size ) 4000eb90: 0185a783 lw a5,24(a1) 4000eb94: 00050413 mv s0,a0 4000eb98: 00058a93 mv s5,a1 4000eb9c: 00060b93 mv s7,a2 return cmpltd; 4000eba0: 00000513 li a0,0 if ( start >= fat_fd->fat_file_size ) 4000eba4: 10f67063 bgeu a2,a5,4000eca4 4000eba8: 00068913 mv s2,a3 4000ebac: 00070a13 mv s4,a4 if ((count > fat_fd->fat_file_size) || 4000ebb0: 12d7e263 bltu a5,a3,4000ecd4 (start > fat_fd->fat_file_size - count)) 4000ebb4: 40d78733 sub a4,a5,a3 if ((count > fat_fd->fat_file_size) || 4000ebb8: 10c76e63 bltu a4,a2,4000ecd4 if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000ebbc: 020aa703 lw a4,32(s5) 4000ebc0: 00100793 li a5,1 4000ebc4: 00f71663 bne a4,a5,4000ebd0 4000ebc8: 024aa783 lw a5,36(s5) 4000ebcc: 10078863 beqz a5,4000ecdc <== ALWAYS TAKEN cl_start = start >> fs_info->vol.bpc_log2; 4000ebd0: 00c44b03 lbu s6,12(s0) rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000ebd4: 00c10693 addi a3,sp,12 4000ebd8: 000a8593 mv a1,s5 cl_start = start >> fs_info->vol.bpc_log2; 4000ebdc: 016bdb33 srl s6,s7,s6 rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000ebe0: 000b0613 mv a2,s6 4000ebe4: 00040513 mv a0,s0 save_ofs = ofs = start & (fs_info->vol.bpc - 1); 4000ebe8: 00842483 lw s1,8(s0) rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000ebec: af9ff0ef jal ra,4000e6e4 if (rc != RC_OK) 4000ebf0: 0a051a63 bnez a0,4000eca4 <== NEVER TAKEN save_ofs = ofs = start & (fs_info->vol.bpc - 1); 4000ebf4: fff48493 addi s1,s1,-1 4000ebf8: 0174fbb3 and s7,s1,s7 4000ebfc: 000b8693 mv a3,s7 uint32_t cmpltd = 0; 4000ec00: 00000993 li s3,0 4000ec04: 06c0006f j 4000ec70 return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000ec08: 00544703 lbu a4,5(s0) 4000ec0c: 03c42783 lw a5,60(s0) 4000ec10: 00e595b3 sll a1,a1,a4 4000ec14: 00f587b3 add a5,a1,a5 byte = ofs & (fs_info->vol.bps - 1); 4000ec18: 00045603 lhu a2,0(s0) sec += (ofs >> fs_info->vol.sec_log2); 4000ec1c: 00244583 lbu a1,2(s0) ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd); 4000ec20: 013a0733 add a4,s4,s3 byte = ofs & (fs_info->vol.bps - 1); 4000ec24: fff60613 addi a2,a2,-1 sec += (ofs >> fs_info->vol.sec_log2); 4000ec28: 00b6d5b3 srl a1,a3,a1 ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd); 4000ec2c: 00d67633 and a2,a2,a3 4000ec30: 00f585b3 add a1,a1,a5 4000ec34: 00048693 mv a3,s1 4000ec38: 00040513 mv a0,s0 4000ec3c: b28fe0ef jal ra,4000cf64 <_fat_block_read> 4000ec40: 00050793 mv a5,a0 rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000ec44: 00c10613 addi a2,sp,12 4000ec48: 00040513 mv a0,s0 if ( ret < 0 ) 4000ec4c: 0e07c263 bltz a5,4000ed30 <== NEVER TAKEN save_cln = cur_cln; 4000ec50: 00c12c03 lw s8,12(sp) count -= c; 4000ec54: 40990933 sub s2,s2,s1 cmpltd += c; 4000ec58: 009989b3 add s3,s3,s1 rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000ec5c: 000c0593 mv a1,s8 4000ec60: b38ff0ef jal ra,4000df98 if ( rc != RC_OK ) 4000ec64: 04051063 bnez a0,4000eca4 <== NEVER TAKEN ofs = 0; 4000ec68: 00000693 li a3,0 while (count > 0) 4000ec6c: 0c090663 beqz s2,4000ed38 c = MIN(count, (fs_info->vol.bpc - ofs)); 4000ec70: 00842483 lw s1,8(s0) 4000ec74: 40d484b3 sub s1,s1,a3 4000ec78: 00997463 bgeu s2,s1,4000ec80 4000ec7c: 00090493 mv s1,s2 sec = fat_cluster_num_to_sector_num(fs_info, cur_cln); 4000ec80: 00c12783 lw a5,12(sp) 4000ec84: ffe78593 addi a1,a5,-2 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000ec88: f80790e3 bnez a5,4000ec08 <== ALWAYS TAKEN 4000ec8c: 01644783 lbu a5,22(s0) <== NOT EXECUTED 4000ec90: 0037f793 andi a5,a5,3 <== NOT EXECUTED 4000ec94: f6078ae3 beqz a5,4000ec08 <== NOT EXECUTED return fs_info->vol.rdir_loc; 4000ec98: 02842783 lw a5,40(s0) <== NOT EXECUTED 4000ec9c: f7dff06f j 4000ec18 <== NOT EXECUTED return cmpltd; 4000eca0: 00000513 li a0,0 <== NOT EXECUTED } 4000eca4: 03c12083 lw ra,60(sp) 4000eca8: 03812403 lw s0,56(sp) 4000ecac: 03412483 lw s1,52(sp) 4000ecb0: 03012903 lw s2,48(sp) 4000ecb4: 02c12983 lw s3,44(sp) 4000ecb8: 02812a03 lw s4,40(sp) 4000ecbc: 02412a83 lw s5,36(sp) 4000ecc0: 02012b03 lw s6,32(sp) 4000ecc4: 01c12b83 lw s7,28(sp) 4000ecc8: 01812c03 lw s8,24(sp) 4000eccc: 04010113 addi sp,sp,64 4000ecd0: 00008067 ret count = fat_fd->fat_file_size - start; 4000ecd4: 41778933 sub s2,a5,s7 4000ecd8: ee5ff06f j 4000ebbc if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000ecdc: 01644783 lbu a5,22(s0) 4000ece0: 0037f793 andi a5,a5,3 4000ece4: ee0786e3 beqz a5,4000ebd0 sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln); 4000ece8: 01caa783 lw a5,28(s5) if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 4000ecec: 06078863 beqz a5,4000ed5c <== ALWAYS TAKEN return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 4000ecf0: 00544683 lbu a3,5(s0) <== NOT EXECUTED 4000ecf4: 03c42703 lw a4,60(s0) <== NOT EXECUTED 4000ecf8: ffe78793 addi a5,a5,-2 <== NOT EXECUTED 4000ecfc: 00d797b3 sll a5,a5,a3 <== NOT EXECUTED 4000ed00: 00e787b3 add a5,a5,a4 <== NOT EXECUTED byte = start & (fs_info->vol.bps - 1); 4000ed04: 00045603 lhu a2,0(s0) sec += (start >> fs_info->vol.sec_log2); 4000ed08: 00244583 lbu a1,2(s0) ret = _fat_block_read(fs_info, sec, byte, count, buf); 4000ed0c: 000a0713 mv a4,s4 byte = start & (fs_info->vol.bps - 1); 4000ed10: fff60613 addi a2,a2,-1 sec += (start >> fs_info->vol.sec_log2); 4000ed14: 00bbd5b3 srl a1,s7,a1 ret = _fat_block_read(fs_info, sec, byte, count, buf); 4000ed18: 00090693 mv a3,s2 4000ed1c: 01767633 and a2,a2,s7 4000ed20: 00f585b3 add a1,a1,a5 4000ed24: 00040513 mv a0,s0 4000ed28: a3cfe0ef jal ra,4000cf64 <_fat_block_read> if ( ret < 0 ) 4000ed2c: f6055ce3 bgez a0,4000eca4 <== ALWAYS TAKEN return -1; 4000ed30: fff00513 li a0,-1 <== NOT EXECUTED 4000ed34: f71ff06f j 4000eca4 <== NOT EXECUTED ((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2); 4000ed38: 00c44703 lbu a4,12(s0) 4000ed3c: fffb8793 addi a5,s7,-1 4000ed40: 013787b3 add a5,a5,s3 4000ed44: 00e7d7b3 srl a5,a5,a4 fat_fd->map.file_cln = cl_start + 4000ed48: 01678b33 add s6,a5,s6 4000ed4c: 036aaa23 sw s6,52(s5) fat_fd->map.disk_cln = save_cln; 4000ed50: 038aac23 sw s8,56(s5) return cmpltd; 4000ed54: 00098513 mv a0,s3 4000ed58: f4dff06f j 4000eca4 return fs_info->vol.rdir_loc; 4000ed5c: 02842783 lw a5,40(s0) 4000ed60: fa5ff06f j 4000ed04 =============================================================================== 4000f4c4 : { 4000f4c4: fe010113 addi sp,sp,-32 4000f4c8: 01212823 sw s2,16(sp) uint32_t cur_cln = fat_fd->cln; 4000f4cc: 01c5a903 lw s2,28(a1) if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f4d0: 0205a703 lw a4,32(a1) { 4000f4d4: 00812c23 sw s0,24(sp) 4000f4d8: 00912a23 sw s1,20(sp) 4000f4dc: 00112e23 sw ra,28(sp) uint32_t cur_cln = fat_fd->cln; 4000f4e0: 01212623 sw s2,12(sp) if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f4e4: 00100793 li a5,1 { 4000f4e8: 00058493 mv s1,a1 4000f4ec: 00050413 mv s0,a0 if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f4f0: 08f70a63 beq a4,a5,4000f584 while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000f4f4: 01842783 lw a5,24(s0) 4000f4f8: 01c42703 lw a4,28(s0) fat_fd->fat_file_size = 0; 4000f4fc: 0004ac23 sw zero,24(s1) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000f500: 00f977b3 and a5,s2,a5 4000f504: 02e7e863 bltu a5,a4,4000f534 4000f508: 0580006f j 4000f560 <== NOT EXECUTED fat_fd->fat_file_size += fs_info->vol.bpc; 4000f50c: 0184a703 lw a4,24(s1) 4000f510: 00842583 lw a1,8(s0) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000f514: 01842783 lw a5,24(s0) 4000f518: 00c12683 lw a3,12(sp) 4000f51c: 01c42603 lw a2,28(s0) fat_fd->fat_file_size += fs_info->vol.bpc; 4000f520: 00b70733 add a4,a4,a1 4000f524: 00e4ac23 sw a4,24(s1) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000f528: 00f6f7b3 and a5,a3,a5 4000f52c: 02c7fc63 bgeu a5,a2,4000f564 4000f530: 00068913 mv s2,a3 rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000f534: 00090593 mv a1,s2 4000f538: 00c10613 addi a2,sp,12 4000f53c: 00040513 mv a0,s0 4000f540: a59fe0ef jal ra,4000df98 if ( rc != RC_OK ) 4000f544: fc0504e3 beqz a0,4000f50c <== ALWAYS TAKEN } 4000f548: 01c12083 lw ra,28(sp) 4000f54c: 01812403 lw s0,24(sp) 4000f550: 01412483 lw s1,20(sp) 4000f554: 01012903 lw s2,16(sp) 4000f558: 02010113 addi sp,sp,32 4000f55c: 00008067 ret uint32_t save_cln = 0; 4000f560: 00000913 li s2,0 <== NOT EXECUTED } 4000f564: 01c12083 lw ra,28(sp) 4000f568: 01812403 lw s0,24(sp) fat_fd->map.last_cln = save_cln; 4000f56c: 0324ae23 sw s2,60(s1) return rc; 4000f570: 00000513 li a0,0 } 4000f574: 01412483 lw s1,20(sp) 4000f578: 01012903 lw s2,16(sp) 4000f57c: 02010113 addi sp,sp,32 4000f580: 00008067 ret if ((FAT_FD_OF_ROOT_DIR(fat_fd)) && 4000f584: 0245a783 lw a5,36(a1) 4000f588: f60796e3 bnez a5,4000f4f4 <== NEVER TAKEN 4000f58c: 01654783 lbu a5,22(a0) 4000f590: 0037f793 andi a5,a5,3 4000f594: f60780e3 beqz a5,4000f4f4 fat_fd->fat_file_size = fs_info->vol.rdir_size; 4000f598: 03452783 lw a5,52(a0) return rc; 4000f59c: 00000513 li a0,0 fat_fd->fat_file_size = fs_info->vol.rdir_size; 4000f5a0: 00f5ac23 sw a5,24(a1) return rc; 4000f5a4: fa5ff06f j 4000f548 =============================================================================== 4000ed64 : if ( new_length >= fat_fd->fat_file_size ) 4000ed64: 0185a783 lw a5,24(a1) { 4000ed68: fe010113 addi sp,sp,-32 uint32_t new_last_cln = FAT_UNDEFINED_VALUE; 4000ed6c: fff00713 li a4,-1 { 4000ed70: 00112e23 sw ra,28(sp) 4000ed74: 00812c23 sw s0,24(sp) 4000ed78: 00912a23 sw s1,20(sp) 4000ed7c: 01212823 sw s2,16(sp) uint32_t cur_cln = 0; 4000ed80: 00012423 sw zero,8(sp) uint32_t new_last_cln = FAT_UNDEFINED_VALUE; 4000ed84: 00e12623 sw a4,12(sp) if ( new_length >= fat_fd->fat_file_size ) 4000ed88: 06f67663 bgeu a2,a5,4000edf4 assert(fat_fd->fat_file_size); 4000ed8c: 0a078863 beqz a5,4000ee3c <== NEVER TAKEN cl_start = (new_length + fs_info->vol.bpc - 1) >> fs_info->vol.bpc_log2; 4000ed90: 00852403 lw s0,8(a0) 4000ed94: 00c54703 lbu a4,12(a0) 4000ed98: 00050493 mv s1,a0 4000ed9c: 00860433 add s0,a2,s0 4000eda0: fff40413 addi s0,s0,-1 4000eda4: 00e45433 srl s0,s0,a4 if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size) 4000eda8: 00e41733 sll a4,s0,a4 4000edac: 04f77463 bgeu a4,a5,4000edf4 4000edb0: 00058913 mv s2,a1 if (cl_start != 0) 4000edb4: 00040a63 beqz s0,4000edc8 rc = fat_file_lseek(fs_info, fat_fd, cl_start - 1, &new_last_cln); 4000edb8: 00c10693 addi a3,sp,12 4000edbc: fff40613 addi a2,s0,-1 4000edc0: 925ff0ef jal ra,4000e6e4 if (rc != RC_OK) 4000edc4: 02051a63 bnez a0,4000edf8 <== NEVER TAKEN rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln); 4000edc8: 00810693 addi a3,sp,8 4000edcc: 00040613 mv a2,s0 4000edd0: 00090593 mv a1,s2 4000edd4: 00048513 mv a0,s1 4000edd8: 90dff0ef jal ra,4000e6e4 if (rc != RC_OK) 4000eddc: 00051e63 bnez a0,4000edf8 <== NEVER TAKEN rc = fat_free_fat_clusters_chain(fs_info, cur_cln); 4000ede0: 00812583 lw a1,8(sp) 4000ede4: 00048513 mv a0,s1 4000ede8: dfcff0ef jal ra,4000e3e4 if (rc != RC_OK) 4000edec: 00051663 bnez a0,4000edf8 <== NEVER TAKEN if (cl_start != 0) 4000edf0: 02041063 bnez s0,4000ee10 return rc; 4000edf4: 00000513 li a0,0 } 4000edf8: 01c12083 lw ra,28(sp) 4000edfc: 01812403 lw s0,24(sp) 4000ee00: 01412483 lw s1,20(sp) 4000ee04: 01012903 lw s2,16(sp) 4000ee08: 02010113 addi sp,sp,32 4000ee0c: 00008067 ret rc = fat_set_fat_cluster(fs_info, new_last_cln, FAT_GENFAT_EOC); 4000ee10: 00c12583 lw a1,12(sp) 4000ee14: fff00613 li a2,-1 4000ee18: 00048513 mv a0,s1 4000ee1c: b38ff0ef jal ra,4000e154 if ( rc != RC_OK ) 4000ee20: fc051ce3 bnez a0,4000edf8 <== NEVER TAKEN fat_fd->map.disk_cln = new_last_cln; 4000ee24: 00c12783 lw a5,12(sp) fat_fd->map.file_cln = cl_start - 1; 4000ee28: fff40413 addi s0,s0,-1 4000ee2c: 02892a23 sw s0,52(s2) fat_fd->map.disk_cln = new_last_cln; 4000ee30: 02f92c23 sw a5,56(s2) fat_fd->map.last_cln = new_last_cln; 4000ee34: 02f92e23 sw a5,60(s2) 4000ee38: fc1ff06f j 4000edf8 assert(fat_fd->fat_file_size); 4000ee3c: 400266b7 lui a3,0x40026 <== NOT EXECUTED 4000ee40: 40026637 lui a2,0x40026 <== NOT EXECUTED 4000ee44: 40026537 lui a0,0x40026 <== NOT EXECUTED 4000ee48: d5068693 addi a3,a3,-688 # 40025d50 <== NOT EXECUTED 4000ee4c: d9460613 addi a2,a2,-620 # 40025d94 <__func__.0> <== NOT EXECUTED 4000ee50: 2e400593 li a1,740 <== NOT EXECUTED 4000ee54: d6850513 addi a0,a0,-664 # 40025d68 <== NOT EXECUTED 4000ee58: 334070ef jal ra,4001618c <__assert_func> <== NOT EXECUTED =============================================================================== 4000eabc : { 4000eabc: ff010113 addi sp,sp,-16 <== NOT EXECUTED 4000eac0: 01212023 sw s2,0(sp) <== NOT EXECUTED 4000eac4: 00112623 sw ra,12(sp) <== NOT EXECUTED 4000eac8: 00812423 sw s0,8(sp) <== NOT EXECUTED 4000eacc: 00912223 sw s1,4(sp) <== NOT EXECUTED return (fat_fd->flags & FAT_FILE_REMOVED) != 0; 4000ead0: 0305c783 lbu a5,48(a1) <== NOT EXECUTED int ret_rc = RC_OK; 4000ead4: 00000913 li s2,0 <== NOT EXECUTED if (!FAT_FILE_IS_REMOVED(fat_fd) && 4000ead8: 0017f713 andi a4,a5,1 <== NOT EXECUTED 4000eadc: 06071263 bnez a4,4000eb40 <== NOT EXECUTED 4000eae0: 0027f793 andi a5,a5,2 <== NOT EXECUTED int ret_rc = RC_OK; 4000eae4: 00000913 li s2,0 <== NOT EXECUTED if (!FAT_FILE_IS_REMOVED(fat_fd) && 4000eae8: 04078c63 beqz a5,4000eb40 <== NOT EXECUTED FAT_FILE_HAS_META_DATA_CHANGED(fat_fd) && 4000eaec: 0205a703 lw a4,32(a1) <== NOT EXECUTED 4000eaf0: 00100793 li a5,1 <== NOT EXECUTED 4000eaf4: 00058413 mv s0,a1 <== NOT EXECUTED 4000eaf8: 00050493 mv s1,a0 <== NOT EXECUTED 4000eafc: 00f71663 bne a4,a5,4000eb08 <== NOT EXECUTED !FAT_FD_OF_ROOT_DIR(fat_fd)) 4000eb00: 0245a783 lw a5,36(a1) <== NOT EXECUTED 4000eb04: 02078e63 beqz a5,4000eb40 <== NOT EXECUTED rc = fat_file_write_first_cluster_num(fs_info, fat_fd); 4000eb08: 00040593 mv a1,s0 <== NOT EXECUTED 4000eb0c: 00048513 mv a0,s1 <== NOT EXECUTED 4000eb10: 175010ef jal ra,40010484 <== NOT EXECUTED 4000eb14: 00050913 mv s2,a0 <== NOT EXECUTED rc = fat_file_write_file_size(fs_info, fat_fd); 4000eb18: 00040593 mv a1,s0 <== NOT EXECUTED 4000eb1c: 00048513 mv a0,s1 <== NOT EXECUTED 4000eb20: 245010ef jal ra,40010564 <== NOT EXECUTED if (rc != RC_OK) 4000eb24: 00050463 beqz a0,4000eb2c <== NOT EXECUTED 4000eb28: 00050913 mv s2,a0 <== NOT EXECUTED rc = fat_file_write_time_and_date(fs_info, fat_fd); 4000eb2c: 00040593 mv a1,s0 <== NOT EXECUTED 4000eb30: 00048513 mv a0,s1 <== NOT EXECUTED 4000eb34: 7f0010ef jal ra,40010324 <== NOT EXECUTED if (rc != RC_OK) 4000eb38: 00050463 beqz a0,4000eb40 <== NOT EXECUTED 4000eb3c: 00050913 mv s2,a0 <== NOT EXECUTED } 4000eb40: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4000eb44: 00812403 lw s0,8(sp) <== NOT EXECUTED 4000eb48: 00412483 lw s1,4(sp) <== NOT EXECUTED 4000eb4c: 00090513 mv a0,s2 <== NOT EXECUTED 4000eb50: 00012903 lw s2,0(sp) <== NOT EXECUTED 4000eb54: 01010113 addi sp,sp,16 <== NOT EXECUTED 4000eb58: 00008067 ret <== NOT EXECUTED =============================================================================== 4000f270 : { 4000f270: fc010113 addi sp,sp,-64 4000f274: 02112e23 sw ra,60(sp) 4000f278: 02812c23 sw s0,56(sp) 4000f27c: 02912a23 sw s1,52(sp) 4000f280: 03212823 sw s2,48(sp) 4000f284: 03312623 sw s3,44(sp) 4000f288: 03412423 sw s4,40(sp) 4000f28c: 03512223 sw s5,36(sp) 4000f290: 03612023 sw s6,32(sp) 4000f294: 01712e23 sw s7,28(sp) uint32_t c = 0; 4000f298: 00012423 sw zero,8(sp) if ( count == 0 ) 4000f29c: 10068e63 beqz a3,4000f3b8 <== NEVER TAKEN if (start >= fat_fd->size_limit) 4000f2a0: 0145a403 lw s0,20(a1) 4000f2a4: 00058b93 mv s7,a1 4000f2a8: 00060913 mv s2,a2 4000f2ac: 1a867663 bgeu a2,s0,4000f458 if (count > fat_fd->size_limit - start) 4000f2b0: 40c40433 sub s0,s0,a2 4000f2b4: 00050493 mv s1,a0 4000f2b8: 00070993 mv s3,a4 4000f2bc: 0e86ea63 bltu a3,s0,4000f3b0 bool zero_fill = start > fat_fd->fat_file_size; 4000f2c0: 018ba603 lw a2,24(s7) rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c); 4000f2c4: 00890a33 add s4,s2,s0 4000f2c8: 00810713 addi a4,sp,8 4000f2cc: 000a0693 mv a3,s4 4000f2d0: 01263633 sltu a2,a2,s2 4000f2d4: 000b8593 mv a1,s7 4000f2d8: 00048513 mv a0,s1 4000f2dc: d2dff0ef jal ra,4000f008 if (RC_OK == rc) 4000f2e0: 0a051263 bnez a0,4000f384 if (c != (start + count)) 4000f2e4: 00812783 lw a5,8(sp) 4000f2e8: 00fa0463 beq s4,a5,4000f2f0 count = c - start; 4000f2ec: 41278433 sub s0,a5,s2 cln += (start >> fs_info->vol.bpc_log2); 4000f2f0: 00c4ca83 lbu s5,12(s1) return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16)); 4000f2f4: 020ba703 lw a4,32(s7) 4000f2f8: 00100793 li a5,1 cln += (start >> fs_info->vol.bpc_log2); 4000f2fc: 01595a33 srl s4,s2,s5 return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16)); 4000f300: 0cf70063 beq a4,a5,4000f3c0 rc = fat_file_lseek(fs_info, fat_fd, start_cln, &cur_cln); 4000f304: 00c10693 addi a3,sp,12 4000f308: 000a0613 mv a2,s4 4000f30c: 000b8593 mv a1,s7 4000f310: 00048513 mv a0,s1 uint32_t cur_cln = 0; 4000f314: 00012623 sw zero,12(sp) rc = fat_file_lseek(fs_info, fat_fd, start_cln, &cur_cln); 4000f318: bccff0ef jal ra,4000e6e4 if (RC_OK == rc) 4000f31c: 06051263 bnez a0,4000f380 <== NEVER TAKEN uint32_t ofs_cln = start - (start_cln << fs_info->vol.bpc_log2); 4000f320: 015a1ab3 sll s5,s4,s5 4000f324: 41590933 sub s2,s2,s5 4000f328: 00090793 mv a5,s2 uint32_t save_cln = 0; /* FIXME: This might be incorrect, cf. below */ 4000f32c: 00000b13 li s6,0 uint32_t cmpltd = 0; 4000f330: 00000a93 li s5,0 ret = fat_cluster_write(fs_info, 4000f334: 00078613 mv a2,a5 4000f338: 00048513 mv a0,s1 && (bytes_to_write > 0)) 4000f33c: 0c040463 beqz s0,4000f404 <== NEVER TAKEN c = MIN(bytes_to_write, (fs_info->vol.bpc - ofs_cln)); 4000f340: 0084a683 lw a3,8(s1) &buf[cmpltd]); 4000f344: 01598733 add a4,s3,s5 c = MIN(bytes_to_write, (fs_info->vol.bpc - ofs_cln)); 4000f348: 40f686b3 sub a3,a3,a5 4000f34c: 00d47463 bgeu s0,a3,4000f354 4000f350: 00040693 mv a3,s0 ret = fat_cluster_write(fs_info, 4000f354: 00c12583 lw a1,12(sp) 4000f358: fb9fd0ef jal ra,4000d310 if (0 > ret) 4000f35c: 0c055863 bgez a0,4000f42c <== ALWAYS TAKEN rc = -1; 4000f360: fff00513 li a0,-1 <== NOT EXECUTED ((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2); 4000f364: 00c4c703 lbu a4,12(s1) <== NOT EXECUTED 4000f368: fff90793 addi a5,s2,-1 <== NOT EXECUTED 4000f36c: 015787b3 add a5,a5,s5 <== NOT EXECUTED 4000f370: 00e7d7b3 srl a5,a5,a4 <== NOT EXECUTED fat_fd->map.file_cln = start_cln + 4000f374: 01478a33 add s4,a5,s4 <== NOT EXECUTED 4000f378: 034baa23 sw s4,52(s7) <== NOT EXECUTED fat_fd->map.disk_cln = save_cln; 4000f37c: 036bac23 sw s6,56(s7) <== NOT EXECUTED if (0 > ret) 4000f380: 06054e63 bltz a0,4000f3fc <== NOT EXECUTED } 4000f384: 03c12083 lw ra,60(sp) 4000f388: 03812403 lw s0,56(sp) 4000f38c: 03412483 lw s1,52(sp) 4000f390: 03012903 lw s2,48(sp) 4000f394: 02c12983 lw s3,44(sp) 4000f398: 02812a03 lw s4,40(sp) 4000f39c: 02412a83 lw s5,36(sp) 4000f3a0: 02012b03 lw s6,32(sp) 4000f3a4: 01c12b83 lw s7,28(sp) 4000f3a8: 04010113 addi sp,sp,64 4000f3ac: 00008067 ret 4000f3b0: 00068413 mv s0,a3 4000f3b4: f0dff06f j 4000f2c0 return cmpltd; 4000f3b8: 00000513 li a0,0 <== NOT EXECUTED 4000f3bc: fc9ff06f j 4000f384 <== NOT EXECUTED return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16)); 4000f3c0: 024ba783 lw a5,36(s7) 4000f3c4: f40790e3 bnez a5,4000f304 <== NEVER TAKEN 4000f3c8: 0164c783 lbu a5,22(s1) 4000f3cc: 0037f793 andi a5,a5,3 4000f3d0: f2078ae3 beqz a5,4000f304 byte = start & (fs_info->vol.bpc -1); 4000f3d4: 0084a603 lw a2,8(s1) cln = fat_fd->cln; 4000f3d8: 01cba583 lw a1,28(s7) ret = fat_cluster_write(fs_info, 4000f3dc: 00098713 mv a4,s3 byte = start & (fs_info->vol.bpc -1); 4000f3e0: fff60613 addi a2,a2,-1 ret = fat_cluster_write(fs_info, 4000f3e4: 00040693 mv a3,s0 4000f3e8: 01267633 and a2,a2,s2 4000f3ec: 014585b3 add a1,a1,s4 4000f3f0: 00048513 mv a0,s1 4000f3f4: f1dfd0ef jal ra,4000d310 if (0 > ret) 4000f3f8: f80556e3 bgez a0,4000f384 <== ALWAYS TAKEN rc = -1; 4000f3fc: fff00513 li a0,-1 <== NOT EXECUTED 4000f400: f85ff06f j 4000f384 <== NOT EXECUTED ((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2); 4000f404: 00c4c783 lbu a5,12(s1) 4000f408: fff90913 addi s2,s2,-1 4000f40c: 01590933 add s2,s2,s5 4000f410: 00f95933 srl s2,s2,a5 fat_fd->map.file_cln = start_cln + 4000f414: 01490a33 add s4,s2,s4 4000f418: 034baa23 sw s4,52(s7) fat_fd->map.disk_cln = save_cln; 4000f41c: 036bac23 sw s6,56(s7) return cmpltd; 4000f420: 000a8513 mv a0,s5 if (0 > ret) 4000f424: f60550e3 bgez a0,4000f384 <== ALWAYS TAKEN 4000f428: fd5ff06f j 4000f3fc <== NOT EXECUTED bytes_to_write -= ret; 4000f42c: 40a40433 sub s0,s0,a0 save_cln = cur_cln; 4000f430: 00c12b03 lw s6,12(sp) cmpltd += ret; 4000f434: 00aa8ab3 add s5,s5,a0 if (0 < bytes_to_write) 4000f438: fc0406e3 beqz s0,4000f404 rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000f43c: 00c10613 addi a2,sp,12 4000f440: 000b0593 mv a1,s6 4000f444: 00048513 mv a0,s1 4000f448: b51fe0ef jal ra,4000df98 while ( (RC_OK == rc) 4000f44c: 00000793 li a5,0 4000f450: ee0502e3 beqz a0,4000f334 <== ALWAYS TAKEN 4000f454: f11ff06f j 4000f364 <== NOT EXECUTED rtems_set_errno_and_return_minus_one(EFBIG); 4000f458: 3010b0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000f45c: 01b00793 li a5,27 <== NOT EXECUTED 4000f460: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000f464: fff00513 li a0,-1 <== NOT EXECUTED 4000f468: f1dff06f j 4000f384 <== NOT EXECUTED =============================================================================== 40010564 : sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln); 40010564: 0205a783 lw a5,32(a1) { 40010568: fe010113 addi sp,sp,-32 4001056c: 00112e23 sw ra,28(sp) uint32_t le_new_length = 0; 40010570: 00012623 sw zero,12(sp) { 40010574: 00058713 mv a4,a1 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 40010578: 00079863 bnez a5,40010588 4001057c: 01654683 lbu a3,22(a0) 40010580: 0036f693 andi a3,a3,3 40010584: 06069263 bnez a3,400105e8 <== ALWAYS TAKEN return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 40010588: 00554683 lbu a3,5(a0) 4001058c: 03c52583 lw a1,60(a0) 40010590: ffe78793 addi a5,a5,-2 40010594: 00d797b3 sll a5,a5,a3 40010598: 00b787b3 add a5,a5,a1 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 4001059c: 02472683 lw a3,36(a4) 400105a0: 00254583 lbu a1,2(a0) byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1)); 400105a4: 00055603 lhu a2,0(a0) if (fat_fd->fat_file_type == FAT_DIRECTORY) { 400105a8: 01072803 lw a6,16(a4) sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 400105ac: 00b6d5b3 srl a1,a3,a1 byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1)); 400105b0: fff60613 addi a2,a2,-1 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 400105b4: 00f585b3 add a1,a1,a5 byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1)); 400105b8: 00d67633 and a2,a2,a3 if (fat_fd->fat_file_type == FAT_DIRECTORY) { 400105bc: 00080663 beqz a6,400105c8 le_new_length = CT_LE_L(fat_fd->fat_file_size); 400105c0: 01872783 lw a5,24(a4) 400105c4: 00f12623 sw a5,12(sp) ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_SIZE_OFFSET, 4, 400105c8: 00c10713 addi a4,sp,12 400105cc: 00400693 li a3,4 400105d0: 01c60613 addi a2,a2,28 400105d4: ac5fc0ef jal ra,4000d098 } 400105d8: 01c12083 lw ra,28(sp) 400105dc: 41f55513 srai a0,a0,0x1f 400105e0: 02010113 addi sp,sp,32 400105e4: 00008067 ret return fs_info->vol.rdir_loc; 400105e8: 02852783 lw a5,40(a0) 400105ec: fb1ff06f j 4001059c =============================================================================== 40010484 : sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln); 40010484: 0205a783 lw a5,32(a1) { 40010488: fd010113 addi sp,sp,-48 4001048c: 02812423 sw s0,40(sp) 40010490: 01312e23 sw s3,28(sp) 40010494: 02112623 sw ra,44(sp) 40010498: 02912223 sw s1,36(sp) 4001049c: 03212023 sw s2,32(sp) uint16_t le_cl_hi = 0; 400104a0: 00011723 sh zero,14(sp) uint32_t new_cln = fat_fd->cln; 400104a4: 01c5a983 lw s3,28(a1) { 400104a8: 00050413 mv s0,a0 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 400104ac: 00079863 bnez a5,400104bc 400104b0: 01654703 lbu a4,22(a0) 400104b4: 00377713 andi a4,a4,3 400104b8: 08071e63 bnez a4,40010554 <== ALWAYS TAKEN return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 400104bc: 00544683 lbu a3,5(s0) 400104c0: 03c42703 lw a4,60(s0) 400104c4: ffe78793 addi a5,a5,-2 400104c8: 00d797b3 sll a5,a5,a3 400104cc: 00e787b3 add a5,a5,a4 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 400104d0: 0245a683 lw a3,36(a1) 400104d4: 00244483 lbu s1,2(s0) byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 400104d8: 00045903 lhu s2,0(s0) ret1 = fat_sector_write(fs_info, sec, 400104dc: 00c10713 addi a4,sp,12 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 400104e0: 0096d4b3 srl s1,a3,s1 byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 400104e4: fff90913 addi s2,s2,-1 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 400104e8: 00f484b3 add s1,s1,a5 byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 400104ec: 00d97933 and s2,s2,a3 ret1 = fat_sector_write(fs_info, sec, 400104f0: 01a90613 addi a2,s2,26 400104f4: 00200693 li a3,2 400104f8: 00048593 mv a1,s1 400104fc: 00040513 mv a0,s0 le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF)); 40010500: 01311623 sh s3,12(sp) ret1 = fat_sector_write(fs_info, sec, 40010504: b95fc0ef jal ra,4000d098 40010508: 00050793 mv a5,a0 le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16)); 4001050c: 0109d993 srli s3,s3,0x10 ret2 = fat_sector_write(fs_info, sec, 40010510: 00040513 mv a0,s0 40010514: 00e10713 addi a4,sp,14 ret1 = fat_sector_write(fs_info, sec, 40010518: 00078413 mv s0,a5 ret2 = fat_sector_write(fs_info, sec, 4001051c: 00200693 li a3,2 40010520: 01490613 addi a2,s2,20 40010524: 00048593 mv a1,s1 le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16)); 40010528: 01311723 sh s3,14(sp) ret2 = fat_sector_write(fs_info, sec, 4001052c: b6dfc0ef jal ra,4000d098 if ( (ret1 < 0) || (ret2 < 0) ) 40010530: 02044663 bltz s0,4001055c <== NEVER TAKEN 40010534: 41f55513 srai a0,a0,0x1f } 40010538: 02c12083 lw ra,44(sp) 4001053c: 02812403 lw s0,40(sp) 40010540: 02412483 lw s1,36(sp) 40010544: 02012903 lw s2,32(sp) 40010548: 01c12983 lw s3,28(sp) 4001054c: 03010113 addi sp,sp,48 40010550: 00008067 ret return fs_info->vol.rdir_loc; 40010554: 02852783 lw a5,40(a0) 40010558: f79ff06f j 400104d0 return -1; 4001055c: fff00513 li a0,-1 <== NOT EXECUTED 40010560: fd9ff06f j 40010538 <== NOT EXECUTED =============================================================================== 40010324 : sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln); 40010324: 0205a783 lw a5,32(a1) { 40010328: fd010113 addi sp,sp,-48 4001032c: 02812423 sw s0,40(sp) 40010330: 01512a23 sw s5,20(sp) 40010334: 02112623 sw ra,44(sp) 40010338: 02912223 sw s1,36(sp) 4001033c: 03212023 sw s2,32(sp) 40010340: 01312e23 sw s3,28(sp) 40010344: 01412c23 sw s4,24(sp) 40010348: 00058a93 mv s5,a1 4001034c: 00050413 mv s0,a0 if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) ) 40010350: 00079863 bnez a5,40010360 40010354: 01654703 lbu a4,22(a0) 40010358: 00377713 andi a4,a4,3 4001035c: 10071c63 bnez a4,40010474 <== ALWAYS TAKEN return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) + 40010360: 00544703 lbu a4,5(s0) 40010364: 03c42483 lw s1,60(s0) 40010368: ffe78793 addi a5,a5,-2 4001036c: 00e797b3 sll a5,a5,a4 40010370: 009787b3 add a5,a5,s1 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 40010374: 024aa703 lw a4,36(s5) 40010378: 00244483 lbu s1,2(s0) byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 4001037c: 00045903 lhu s2,0(s0) msdos_date_unix2dos(fat_fd->mtime, &date, &time_val); 40010380: 048aa503 lw a0,72(s5) sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 40010384: 009754b3 srl s1,a4,s1 msdos_date_unix2dos(fat_fd->mtime, &date, &time_val); 40010388: 00c10613 addi a2,sp,12 4001038c: 00e10593 addi a1,sp,14 byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 40010390: fff90913 addi s2,s2,-1 sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2); 40010394: 00f484b3 add s1,s1,a5 byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1); 40010398: 00e97933 and s2,s2,a4 msdos_date_unix2dos(fat_fd->mtime, &date, &time_val); 4001039c: 204060ef jal ra,400165a0 ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET, 400103a0: 00c10713 addi a4,sp,12 400103a4: 00200693 li a3,2 400103a8: 01690613 addi a2,s2,22 400103ac: 00048593 mv a1,s1 400103b0: 00040513 mv a0,s0 400103b4: ce5fc0ef jal ra,4000d098 400103b8: 00050993 mv s3,a0 ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WDATE_OFFSET, 400103bc: 00e10713 addi a4,sp,14 400103c0: 00200693 li a3,2 400103c4: 01890613 addi a2,s2,24 400103c8: 00048593 mv a1,s1 400103cc: 00040513 mv a0,s0 400103d0: cc9fc0ef jal ra,4000d098 rc = -1; 400103d4: fff00a13 li s4,-1 if ( ret < 0 ) 400103d8: 00054463 bltz a0,400103e0 <== NEVER TAKEN if ( ret < 0 ) 400103dc: 41f9da13 srai s4,s3,0x1f ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_ADATE_OFFSET, 400103e0: 00e10713 addi a4,sp,14 400103e4: 00200693 li a3,2 400103e8: 01290613 addi a2,s2,18 400103ec: 00048593 mv a1,s1 400103f0: 00040513 mv a0,s0 400103f4: ca5fc0ef jal ra,4000d098 if ( ret < 0 ) 400103f8: 00055463 bgez a0,40010400 <== ALWAYS TAKEN rc = -1; 400103fc: fff00a13 li s4,-1 <== NOT EXECUTED msdos_date_unix2dos(fat_fd->ctime, &date, &time_val); 40010400: 040aa503 lw a0,64(s5) 40010404: 00c10613 addi a2,sp,12 40010408: 00e10593 addi a1,sp,14 4001040c: 194060ef jal ra,400165a0 ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CTIME_OFFSET, 40010410: 00c10713 addi a4,sp,12 40010414: 00200693 li a3,2 40010418: 00e90613 addi a2,s2,14 4001041c: 00048593 mv a1,s1 40010420: 00040513 mv a0,s0 40010424: c75fc0ef jal ra,4000d098 if ( ret < 0 ) 40010428: 00055463 bgez a0,40010430 <== ALWAYS TAKEN rc = -1; 4001042c: fff00a13 li s4,-1 <== NOT EXECUTED ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CDATE_OFFSET, 40010430: 00e10713 addi a4,sp,14 40010434: 00200693 li a3,2 40010438: 01090613 addi a2,s2,16 4001043c: 00048593 mv a1,s1 40010440: 00040513 mv a0,s0 40010444: c55fc0ef jal ra,4000d098 if ( ret < 0 ) 40010448: 02054a63 bltz a0,4001047c <== NEVER TAKEN } 4001044c: 02c12083 lw ra,44(sp) 40010450: 02812403 lw s0,40(sp) 40010454: 02412483 lw s1,36(sp) 40010458: 02012903 lw s2,32(sp) 4001045c: 01c12983 lw s3,28(sp) 40010460: 01412a83 lw s5,20(sp) 40010464: 000a0513 mv a0,s4 40010468: 01812a03 lw s4,24(sp) 4001046c: 03010113 addi sp,sp,48 40010470: 00008067 ret return fs_info->vol.rdir_loc; 40010474: 02852783 lw a5,40(a0) 40010478: efdff06f j 40010374 rc = -1; 4001047c: fff00a13 li s4,-1 <== NOT EXECUTED return rc; 40010480: fcdff06f j 4001044c <== NOT EXECUTED =============================================================================== 4000e3e4 : while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000e3e4: 01852783 lw a5,24(a0) 4000e3e8: 01c52703 lw a4,28(a0) { 4000e3ec: fd010113 addi sp,sp,-48 4000e3f0: 02812423 sw s0,40(sp) 4000e3f4: 01512a23 sw s5,20(sp) 4000e3f8: 02112623 sw ra,44(sp) 4000e3fc: 02912223 sw s1,36(sp) 4000e400: 03212023 sw s2,32(sp) 4000e404: 01312e23 sw s3,28(sp) 4000e408: 01412c23 sw s4,24(sp) uint32_t next_cln = 0; 4000e40c: 00012623 sw zero,12(sp) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000e410: 00f5f7b3 and a5,a1,a5 { 4000e414: 00050413 mv s0,a0 4000e418: 00058a93 mv s5,a1 while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000e41c: 08e7f063 bgeu a5,a4,4000e49c uint32_t cur_cln = chain; 4000e420: 00058913 mv s2,a1 uint32_t freed_cls_cnt = 0; 4000e424: 00000993 li s3,0 int rc = RC_OK, rc1 = RC_OK; 4000e428: 00000a13 li s4,0 4000e42c: 0280006f j 4000e454 rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE); 4000e430: d25ff0ef jal ra,4000e154 if ( rc != RC_OK ) 4000e434: 00050463 beqz a0,4000e43c <== ALWAYS TAKEN 4000e438: 00050a13 mv s4,a0 <== NOT EXECUTED cur_cln = next_cln; 4000e43c: 00c12903 lw s2,12(sp) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000e440: 01842783 lw a5,24(s0) 4000e444: 01c42703 lw a4,28(s0) freed_cls_cnt++; 4000e448: 00198993 addi s3,s3,1 while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000e44c: 00f977b3 and a5,s2,a5 4000e450: 04e7fa63 bgeu a5,a4,4000e4a4 rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln); 4000e454: 00090593 mv a1,s2 4000e458: 00c10613 addi a2,sp,12 4000e45c: 00040513 mv a0,s0 4000e460: b39ff0ef jal ra,4000df98 4000e464: 00050493 mv s1,a0 rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE); 4000e468: 00090593 mv a1,s2 4000e46c: 00000613 li a2,0 4000e470: 00040513 mv a0,s0 if ( rc != RC_OK ) 4000e474: fa048ee3 beqz s1,4000e430 <== ALWAYS TAKEN if(fs_info->vol.free_cls != FAT_UNDEFINED_VALUE) 4000e478: 04c42783 lw a5,76(s0) <== NOT EXECUTED 4000e47c: fff00713 li a4,-1 <== NOT EXECUTED 4000e480: 00e78663 beq a5,a4,4000e48c <== NOT EXECUTED fs_info->vol.free_cls += freed_cls_cnt; 4000e484: 013787b3 add a5,a5,s3 <== NOT EXECUTED 4000e488: 04f42623 sw a5,76(s0) <== NOT EXECUTED fat_buf_release(fs_info); 4000e48c: 00040513 mv a0,s0 <== NOT EXECUTED 4000e490: ac1fe0ef jal ra,4000cf50 <== NOT EXECUTED rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln); 4000e494: 00048a13 mv s4,s1 <== NOT EXECUTED return rc; 4000e498: 02c0006f j 4000e4c4 <== NOT EXECUTED uint32_t freed_cls_cnt = 0; 4000e49c: 00000993 li s3,0 <== NOT EXECUTED int rc = RC_OK, rc1 = RC_OK; 4000e4a0: 00000a13 li s4,0 <== NOT EXECUTED if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE) 4000e4a4: 04c42783 lw a5,76(s0) fs_info->vol.next_cl = chain; 4000e4a8: 05542a23 sw s5,84(s0) if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE) 4000e4ac: fff00713 li a4,-1 4000e4b0: 00e78663 beq a5,a4,4000e4bc fs_info->vol.free_cls += freed_cls_cnt; 4000e4b4: 013787b3 add a5,a5,s3 <== NOT EXECUTED 4000e4b8: 04f42623 sw a5,76(s0) <== NOT EXECUTED fat_buf_release(fs_info); 4000e4bc: 00040513 mv a0,s0 4000e4c0: a91fe0ef jal ra,4000cf50 } 4000e4c4: 02c12083 lw ra,44(sp) 4000e4c8: 02812403 lw s0,40(sp) 4000e4cc: 02412483 lw s1,36(sp) 4000e4d0: 02012903 lw s2,32(sp) 4000e4d4: 01c12983 lw s3,28(sp) 4000e4d8: 01412a83 lw s5,20(sp) 4000e4dc: 000a0513 mv a0,s4 4000e4e0: 01812a03 lw s4,24(sp) 4000e4e4: 03010113 addi sp,sp,48 4000e4e8: 00008067 ret =============================================================================== 4000df54 : fat_free_unique_ino( fat_fs_info_t *fs_info, uint32_t ino ) { FAT_SET_UNIQ_INO_FREE((ino - fs_info->uino_base), fs_info->uino); 4000df54: 09452783 lw a5,148(a0) <== NOT EXECUTED 4000df58: 08852703 lw a4,136(a0) <== NOT EXECUTED 4000df5c: 40f585b3 sub a1,a1,a5 <== NOT EXECUTED 4000df60: 0035d793 srli a5,a1,0x3 <== NOT EXECUTED 4000df64: 00f70733 add a4,a4,a5 <== NOT EXECUTED 4000df68: 00074683 lbu a3,0(a4) <== NOT EXECUTED 4000df6c: 0075f593 andi a1,a1,7 <== NOT EXECUTED 4000df70: 00100793 li a5,1 <== NOT EXECUTED 4000df74: 00b797b3 sll a5,a5,a1 <== NOT EXECUTED 4000df78: fff7c793 not a5,a5 <== NOT EXECUTED 4000df7c: 00d7f7b3 and a5,a5,a3 <== NOT EXECUTED 4000df80: 00f70023 sb a5,0(a4) <== NOT EXECUTED } 4000df84: 00008067 ret <== NOT EXECUTED =============================================================================== 4000df98 : fat_get_fat_cluster( fat_fs_info_t *fs_info, uint32_t cln, uint32_t *ret_val ) { 4000df98: fd010113 addi sp,sp,-48 4000df9c: 02112623 sw ra,44(sp) 4000dfa0: 02812423 sw s0,40(sp) 4000dfa4: 02912223 sw s1,36(sp) 4000dfa8: 03212023 sw s2,32(sp) 4000dfac: 01312e23 sw s3,28(sp) 4000dfb0: 01412c23 sw s4,24(sp) 4000dfb4: 01512a23 sw s5,20(sp) 4000dfb8: 01612823 sw s6,16(sp) uint8_t *sec_buf; uint32_t sec = 0; uint32_t ofs = 0; /* sanity check */ if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) ) 4000dfbc: 00100793 li a5,1 4000dfc0: 08b7f463 bgeu a5,a1,4000e048 4000dfc4: 04052783 lw a5,64(a0) 4000dfc8: 00058b13 mv s6,a1 4000dfcc: 00050413 mv s0,a0 4000dfd0: 00178793 addi a5,a5,1 4000dfd4: 06b7ea63 bltu a5,a1,4000e048 rtems_set_errno_and_return_minus_one(EIO); sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000dfd8: 01654703 lbu a4,22(a0) fs_info->vol.afat_loc; 4000dfdc: 06052983 lw s3,96(a0) sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000dfe0: 00254783 lbu a5,2(a0) 4000dfe4: 00177693 andi a3,a4,1 4000dfe8: 00060a13 mv s4,a2 4000dfec: 08069c63 bnez a3,4000e084 4000dff0: 00277713 andi a4,a4,2 4000dff4: 0a070263 beqz a4,4000e098 4000dff8: 00159a93 slli s5,a1,0x1 4000dffc: 00fad7b3 srl a5,s5,a5 4000e000: 013789b3 add s3,a5,s3 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf); 4000e004: 00c10693 addi a3,sp,12 4000e008: 00100613 li a2,1 4000e00c: 00098593 mv a1,s3 4000e010: 00040513 mv a0,s0 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e014: 00045903 lhu s2,0(s0) rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf); 4000e018: e5dfe0ef jal ra,4000ce74 4000e01c: 00050493 mv s1,a0 if (rc != RC_OK) 4000e020: 02051c63 bnez a0,4000e058 <== NEVER TAKEN return rc; switch ( fs_info->vol.type ) 4000e024: 01644783 lbu a5,22(s0) ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e028: fff90913 addi s2,s2,-1 switch ( fs_info->vol.type ) 4000e02c: 00200713 li a4,2 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e030: 01597933 and s2,s2,s5 switch ( fs_info->vol.type ) 4000e034: 06e78a63 beq a5,a4,4000e0a8 4000e038: 00400713 li a4,4 4000e03c: 0ae78e63 beq a5,a4,4000e0f8 4000e040: 00100713 li a4,1 4000e044: 06e78c63 beq a5,a4,4000e0bc *ret_val = *((uint32_t *)(sec_buf + ofs)); *ret_val = CF_LE_L(*ret_val); break; default: rtems_set_errno_and_return_minus_one(EIO); 4000e048: 7110c0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000e04c: 00500793 li a5,5 <== NOT EXECUTED 4000e050: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000e054: fff00493 li s1,-1 <== NOT EXECUTED break; } return RC_OK; } 4000e058: 02c12083 lw ra,44(sp) 4000e05c: 02812403 lw s0,40(sp) 4000e060: 02012903 lw s2,32(sp) 4000e064: 01c12983 lw s3,28(sp) 4000e068: 01812a03 lw s4,24(sp) 4000e06c: 01412a83 lw s5,20(sp) 4000e070: 01012b03 lw s6,16(sp) 4000e074: 00048513 mv a0,s1 4000e078: 02412483 lw s1,36(sp) 4000e07c: 03010113 addi sp,sp,48 4000e080: 00008067 ret sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e084: 0015d913 srli s2,a1,0x1 4000e088: 00b90ab3 add s5,s2,a1 4000e08c: 00fad7b3 srl a5,s5,a5 4000e090: 013789b3 add s3,a5,s3 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e094: f71ff06f j 4000e004 sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e098: 00259a93 slli s5,a1,0x2 4000e09c: 00fad7b3 srl a5,s5,a5 4000e0a0: 013789b3 add s3,a5,s3 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e0a4: f61ff06f j 4000e004 *ret_val = *((uint16_t *)(sec_buf + ofs)); 4000e0a8: 00c12783 lw a5,12(sp) 4000e0ac: 01278933 add s2,a5,s2 4000e0b0: 00095783 lhu a5,0(s2) 4000e0b4: 00fa2023 sw a5,0(s4) break; 4000e0b8: fa1ff06f j 4000e058 *ret_val = (*(sec_buf + ofs)); 4000e0bc: 00c12703 lw a4,12(sp) if ( ofs == (fs_info->vol.bps - 1) ) 4000e0c0: 00045683 lhu a3,0(s0) *ret_val = (*(sec_buf + ofs)); 4000e0c4: 01270733 add a4,a4,s2 4000e0c8: 00074603 lbu a2,0(a4) if ( ofs == (fs_info->vol.bps - 1) ) 4000e0cc: fff68693 addi a3,a3,-1 *ret_val = (*(sec_buf + ofs)); 4000e0d0: 00ca2023 sw a2,0(s4) if ( ofs == (fs_info->vol.bps - 1) ) 4000e0d4: 05268463 beq a3,s2,4000e11c *ret_val |= *(sec_buf + ofs + 1) << 8; 4000e0d8: 00174783 lbu a5,1(a4) 4000e0dc: 00879793 slli a5,a5,0x8 4000e0e0: 00c7e7b3 or a5,a5,a2 if ( FAT_CLUSTER_IS_ODD(cln) ) 4000e0e4: 001b7593 andi a1,s6,1 4000e0e8: 02058263 beqz a1,4000e10c *ret_val = (*ret_val) >> FAT12_SHIFT; 4000e0ec: 0047d793 srli a5,a5,0x4 4000e0f0: 00fa2023 sw a5,0(s4) 4000e0f4: f65ff06f j 4000e058 *ret_val = *((uint32_t *)(sec_buf + ofs)); 4000e0f8: 00c12783 lw a5,12(sp) 4000e0fc: 01278933 add s2,a5,s2 4000e100: 00092783 lw a5,0(s2) 4000e104: 00fa2023 sw a5,0(s4) break; 4000e108: f51ff06f j 4000e058 *ret_val = (*ret_val) & FAT_FAT12_MASK; 4000e10c: 01479793 slli a5,a5,0x14 4000e110: 0147d793 srli a5,a5,0x14 4000e114: 00fa2023 sw a5,0(s4) 4000e118: f41ff06f j 4000e058 rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ, 4000e11c: 00c10693 addi a3,sp,12 4000e120: 00100613 li a2,1 4000e124: 00198593 addi a1,s3,1 4000e128: 00040513 mv a0,s0 4000e12c: d49fe0ef jal ra,4000ce74 if (rc != RC_OK) 4000e130: 00051e63 bnez a0,4000e14c <== NEVER TAKEN *ret_val |= *sec_buf << 8; 4000e134: 00c12783 lw a5,12(sp) 4000e138: 000a2703 lw a4,0(s4) 4000e13c: 0007c783 lbu a5,0(a5) 4000e140: 00879793 slli a5,a5,0x8 4000e144: 00e7e7b3 or a5,a5,a4 4000e148: f9dff06f j 4000e0e4 4000e14c: 00050493 mv s1,a0 <== NOT EXECUTED 4000e150: f09ff06f j 4000e058 <== NOT EXECUTED =============================================================================== 4000de7c : * 0 means FAILED !!! * */ uint32_t fat_get_unique_ino(fat_fs_info_t *fs_info) { 4000de7c: ff010113 addi sp,sp,-16 <== NOT EXECUTED uint32_t j = 0; bool resrc_unsuff = false; while (!resrc_unsuff) { for (j = 0; j < fs_info->uino_pool_size; j++) 4000de80: 09052583 lw a1,144(a0) <== NOT EXECUTED { 4000de84: 00912223 sw s1,4(sp) <== NOT EXECUTED fs_info->index++; if (fs_info->index >= fs_info->uino_pool_size) fs_info->index = 0; } if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base)) 4000de88: 100004b7 lui s1,0x10000 <== NOT EXECUTED { 4000de8c: 00812423 sw s0,8(sp) <== NOT EXECUTED 4000de90: 00112623 sw ra,12(sp) <== NOT EXECUTED 4000de94: 00050413 mv s0,a0 <== NOT EXECUTED if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base)) 4000de98: fff48493 addi s1,s1,-1 # fffffff <== NOT EXECUTED for (j = 0; j < fs_info->uino_pool_size; j++) 4000de9c: 04058a63 beqz a1,4000def0 <== NOT EXECUTED if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino)) 4000dea0: 08842883 lw a7,136(s0) <== NOT EXECUTED for (j = 0; j < fs_info->uino_pool_size; j++) 4000dea4: 00000613 li a2,0 <== NOT EXECUTED 4000dea8: 0100006f j 4000deb8 <== NOT EXECUTED fs_info->index++; 4000deac: 08f42623 sw a5,140(s0) <== NOT EXECUTED for (j = 0; j < fs_info->uino_pool_size; j++) 4000deb0: 00160613 addi a2,a2,1 <== NOT EXECUTED 4000deb4: 02b60c63 beq a2,a1,4000deec <== NOT EXECUTED if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino)) 4000deb8: 08c42783 lw a5,140(s0) <== NOT EXECUTED 4000debc: 0037d713 srli a4,a5,0x3 <== NOT EXECUTED 4000dec0: 00e88733 add a4,a7,a4 <== NOT EXECUTED 4000dec4: 00074503 lbu a0,0(a4) <== NOT EXECUTED 4000dec8: 0077f813 andi a6,a5,7 <== NOT EXECUTED fs_info->index++; 4000decc: 00178793 addi a5,a5,1 <== NOT EXECUTED if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino)) 4000ded0: 410556b3 sra a3,a0,a6 <== NOT EXECUTED 4000ded4: 0016f693 andi a3,a3,1 <== NOT EXECUTED 4000ded8: 04068263 beqz a3,4000df1c <== NOT EXECUTED if (fs_info->index >= fs_info->uino_pool_size) 4000dedc: fcb7e8e3 bltu a5,a1,4000deac <== NOT EXECUTED fs_info->index = 0; 4000dee0: 08042623 sw zero,140(s0) <== NOT EXECUTED for (j = 0; j < fs_info->uino_pool_size; j++) 4000dee4: 00160613 addi a2,a2,1 <== NOT EXECUTED 4000dee8: fcb618e3 bne a2,a1,4000deb8 <== NOT EXECUTED if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base)) 4000deec: 00159593 slli a1,a1,0x1 <== NOT EXECUTED 4000def0: 09442783 lw a5,148(s0) <== NOT EXECUTED 4000def4: 40f487b3 sub a5,s1,a5 <== NOT EXECUTED 4000def8: 04f5fa63 bgeu a1,a5,4000df4c <== NOT EXECUTED { fs_info->uino_pool_size <<= 1; fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size); 4000defc: 08842503 lw a0,136(s0) <== NOT EXECUTED fs_info->uino_pool_size <<= 1; 4000df00: 08b42823 sw a1,144(s0) <== NOT EXECUTED fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size); 4000df04: 36c080ef jal ra,40016270 <== NOT EXECUTED 4000df08: 08a42423 sw a0,136(s0) <== NOT EXECUTED if (fs_info->uino != NULL) 4000df0c: 04050063 beqz a0,4000df4c <== NOT EXECUTED fs_info->index = fs_info->uino_pool_size; 4000df10: 09042583 lw a1,144(s0) <== NOT EXECUTED 4000df14: 08b42623 sw a1,140(s0) <== NOT EXECUTED 4000df18: f85ff06f j 4000de9c <== NOT EXECUTED FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino); 4000df1c: 00100793 li a5,1 <== NOT EXECUTED 4000df20: 01079833 sll a6,a5,a6 <== NOT EXECUTED 4000df24: 00a86533 or a0,a6,a0 <== NOT EXECUTED 4000df28: 00a70023 sb a0,0(a4) <== NOT EXECUTED return (fs_info->uino_base + fs_info->index); 4000df2c: 09442503 lw a0,148(s0) <== NOT EXECUTED 4000df30: 08c42783 lw a5,140(s0) <== NOT EXECUTED 4000df34: 00f50533 add a0,a0,a5 <== NOT EXECUTED } else resrc_unsuff = true; } return 0; } 4000df38: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4000df3c: 00812403 lw s0,8(sp) <== NOT EXECUTED 4000df40: 00412483 lw s1,4(sp) <== NOT EXECUTED 4000df44: 01010113 addi sp,sp,16 <== NOT EXECUTED 4000df48: 00008067 ret <== NOT EXECUTED return 0; 4000df4c: 00000513 li a0,0 <== NOT EXECUTED 4000df50: fe9ff06f j 4000df38 <== NOT EXECUTED =============================================================================== 4000ddf4 : int fat_init_clusters_chain( fat_fs_info_t *fs_info, uint32_t start_cln ) { 4000ddf4: fe010113 addi sp,sp,-32 4000ddf8: 00812c23 sw s0,24(sp) 4000ddfc: 00112e23 sw ra,28(sp) 4000de00: 00050413 mv s0,a0 int rc = RC_OK; ssize_t ret = 0; uint32_t cur_cln = start_cln; 4000de04: 00b12623 sw a1,12(sp) while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000de08: 0300006f j 4000de38 { ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0); 4000de0c: 00842683 lw a3,8(s0) 4000de10: b88ff0ef jal ra,4000d198 if ( ret != fs_info->vol.bpc ) 4000de14: 00842703 lw a4,8(s0) ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0); 4000de18: 00050793 mv a5,a0 { return -1; } rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000de1c: 00c10613 addi a2,sp,12 4000de20: 00040513 mv a0,s0 if ( ret != fs_info->vol.bpc ) 4000de24: 04f71263 bne a4,a5,4000de68 rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln); 4000de28: 00c12583 lw a1,12(sp) 4000de2c: 16c000ef jal ra,4000df98 if ( rc != RC_OK ) 4000de30: 02051463 bnez a0,4000de58 <== NEVER TAKEN while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000de34: 00c12583 lw a1,12(sp) 4000de38: 01842783 lw a5,24(s0) 4000de3c: 01c42683 lw a3,28(s0) ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0); 4000de40: 00000713 li a4,0 while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000de44: 00f5f7b3 and a5,a1,a5 ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0); 4000de48: 00000613 li a2,0 4000de4c: 00040513 mv a0,s0 while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val) 4000de50: fad7eee3 bltu a5,a3,4000de0c return rc; } } return rc; 4000de54: 00000513 li a0,0 } 4000de58: 01c12083 lw ra,28(sp) 4000de5c: 01812403 lw s0,24(sp) 4000de60: 02010113 addi sp,sp,32 4000de64: 00008067 ret 4000de68: 01c12083 lw ra,28(sp) <== NOT EXECUTED 4000de6c: 01812403 lw s0,24(sp) <== NOT EXECUTED return -1; 4000de70: fff00513 li a0,-1 <== NOT EXECUTED } 4000de74: 02010113 addi sp,sp,32 <== NOT EXECUTED 4000de78: 00008067 ret <== NOT EXECUTED =============================================================================== 4000d488 : * RC_OK on success, or -1 if error occured * and errno set appropriately */ int fat_init_volume_info(fat_fs_info_t *fs_info, const char *device) { 4000d488: f3010113 addi sp,sp,-208 4000d48c: 00058793 mv a5,a1 4000d490: 0c812423 sw s0,200(sp) ssize_t ret = 0; struct stat stat_buf; int i = 0; rtems_bdbuf_buffer *block = NULL; vol->fd = open(device, O_RDWR); 4000d494: 00200593 li a1,2 { 4000d498: 00050413 mv s0,a0 vol->fd = open(device, O_RDWR); 4000d49c: 00078513 mv a0,a5 { 4000d4a0: 0c112623 sw ra,204(sp) 4000d4a4: 0c912223 sw s1,196(sp) 4000d4a8: 0d212023 sw s2,192(sp) 4000d4ac: 0b312e23 sw s3,188(sp) 4000d4b0: 0b412c23 sw s4,184(sp) 4000d4b4: 0b512a23 sw s5,180(sp) 4000d4b8: 0b612823 sw s6,176(sp) 4000d4bc: 0b712623 sw s7,172(sp) 4000d4c0: 0b812423 sw s8,168(sp) 4000d4c4: 0b912223 sw s9,164(sp) 4000d4c8: 0ba12023 sw s10,160(sp) 4000d4cc: 09b12e23 sw s11,156(sp) rtems_bdbuf_buffer *block = NULL; 4000d4d0: 00012c23 sw zero,24(sp) vol->fd = open(device, O_RDWR); 4000d4d4: bddf40ef jal ra,400020b0 4000d4d8: 06a42423 sw a0,104(s0) if (vol->fd < 0) 4000d4dc: 5c054663 bltz a0,4000daa8 <== NEVER TAKEN { rtems_set_errno_and_return_minus_one(ENXIO); } rc = fstat(vol->fd, &stat_buf); 4000d4e0: 02810593 addi a1,sp,40 4000d4e4: 8ccf40ef jal ra,400015b0 if (rc != 0) 4000d4e8: 5c051a63 bnez a0,4000dabc <== NEVER TAKEN close(vol->fd); rtems_set_errno_and_return_minus_one(ENXIO); } /* Must be a block device. */ if (!S_ISBLK(stat_buf.st_mode)) 4000d4ec: 03812683 lw a3,56(sp) 4000d4f0: 0000f7b7 lui a5,0xf 4000d4f4: 00006737 lui a4,0x6 4000d4f8: 00d7f7b3 and a5,a5,a3 close(vol->fd); 4000d4fc: 06842503 lw a0,104(s0) if (!S_ISBLK(stat_buf.st_mode)) 4000d500: 5ae79263 bne a5,a4,4000daa4 return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr); 4000d504: 400445b7 lui a1,0x40044 4000d508: 06c40613 addi a2,s0,108 4000d50c: 20958593 addi a1,a1,521 # 40044209 4000d510: bc5fe0ef jal ra,4000c0d4 4000d514: 00050c93 mv s9,a0 rtems_set_errno_and_return_minus_one(ENXIO); } /* check that device is registred as block device and lock it */ rc = rtems_disk_fd_get_disk_device(vol->fd, &vol->dd); if (rc != 0) { 4000d518: 5a051263 bnez a0,4000dabc <== NEVER TAKEN close(vol->fd); rtems_set_errno_and_return_minus_one(ENXIO); } vol->dev = stat_buf.st_rdev; 4000d51c: 04812703 lw a4,72(sp) 4000d520: 04c12783 lw a5,76(sp) /* Read boot record */ /* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */ sc = rtems_bdbuf_read( vol->dd, 0, &block); 4000d524: 06c42503 lw a0,108(s0) 4000d528: 01810613 addi a2,sp,24 vol->dev = stat_buf.st_rdev; 4000d52c: 06e42823 sw a4,112(s0) 4000d530: 06f42a23 sw a5,116(s0) sc = rtems_bdbuf_read( vol->dd, 0, &block); 4000d534: 00000593 li a1,0 4000d538: 5d4080ef jal ra,40015b0c if (sc != RTEMS_SUCCESSFUL) 4000d53c: 58051e63 bnez a0,4000dad8 <== NEVER TAKEN { close(vol->fd); rtems_set_errno_and_return_minus_one( EIO); } memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE); 4000d540: 01812503 lw a0,24(sp) 4000d544: 01c52783 lw a5,28(a0) vol->rdir_size = vol->rdir_secs << vol->sec_log2; if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec); else vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d548: 0257c883 lbu a7,37(a5) # f025 } } if (vol->type == FAT_FAT32) { vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d54c: 02d7c683 lbu a3,45(a5) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d550: 0247cd83 lbu s11,36(a5) vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d554: 02c7c483 lbu s1,44(a5) vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d558: 0217c303 lbu t1,33(a5) 4000d55c: 0207c083 lbu ra,32(a5) 4000d560: 0227c803 lbu a6,34(a5) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d564: 0267c603 lbu a2,38(a5) vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d568: 02e7c703 lbu a4,46(a5) 4000d56c: 00c7c583 lbu a1,12(a5) 4000d570: 00f7ca03 lbu s4,15(a5) 4000d574: 0127ca83 lbu s5,18(a5) 4000d578: 0147cb03 lbu s6,20(a5) 4000d57c: 0177cb83 lbu s7,23(a5) vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d580: 0237c983 lbu s3,35(a5) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d584: 0277c903 lbu s2,39(a5) vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d588: 02f7cd03 lbu s10,47(a5) 4000d58c: 0317cc03 lbu s8,49(a5) 4000d590: 00b7c383 lbu t2,11(a5) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d594: 00889893 slli a7,a7,0x8 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d598: 00869693 slli a3,a3,0x8 4000d59c: 00e7c283 lbu t0,14(a5) 4000d5a0: 0117cf83 lbu t6,17(a5) 4000d5a4: 0137cf03 lbu t5,19(a5) 4000d5a8: 0167ce83 lbu t4,22(a5) 4000d5ac: 0307ce03 lbu t3,48(a5) vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d5b0: 01b8e8b3 or a7,a7,s11 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d5b4: 0096e6b3 or a3,a3,s1 memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE); 4000d5b8: 00d7cd83 lbu s11,13(a5) 4000d5bc: 0107c483 lbu s1,16(a5) vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d5c0: 00831313 slli t1,t1,0x8 memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE); 4000d5c4: 0287c783 lbu a5,40(a5) vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d5c8: 00136333 or t1,t1,ra 4000d5cc: 01081813 slli a6,a6,0x10 vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d5d0: 01061613 slli a2,a2,0x10 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d5d4: 01071713 slli a4,a4,0x10 4000d5d8: 00859593 slli a1,a1,0x8 4000d5dc: 0075e5b3 or a1,a1,t2 vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d5e0: 00686833 or a6,a6,t1 vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d5e4: 01166633 or a2,a2,a7 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d5e8: 00d76733 or a4,a4,a3 4000d5ec: 008a1a13 slli s4,s4,0x8 4000d5f0: 008a9a93 slli s5,s5,0x8 4000d5f4: 008b1b13 slli s6,s6,0x8 4000d5f8: 008b9b93 slli s7,s7,0x8 vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d5fc: 01899993 slli s3,s3,0x18 vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d600: 01891913 slli s2,s2,0x18 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d604: 018d1d13 slli s10,s10,0x18 4000d608: 008c1c13 slli s8,s8,0x8 4000d60c: 00b12423 sw a1,8(sp) memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE); 4000d610: 00f12623 sw a5,12(sp) 4000d614: 005a6a33 or s4,s4,t0 4000d618: 01faeab3 or s5,s5,t6 4000d61c: 01eb6b33 or s6,s6,t5 4000d620: 01dbebb3 or s7,s7,t4 vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec); 4000d624: 0109e9b3 or s3,s3,a6 vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec); 4000d628: 00c96933 or s2,s2,a2 vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d62c: 00ed6d33 or s10,s10,a4 4000d630: 01cc6c33 or s8,s8,t3 sc = rtems_bdbuf_release( block); 4000d634: 6d8080ef jal ra,40015d0c if (sc != RTEMS_SUCCESSFUL) 4000d638: 00812583 lw a1,8(sp) 4000d63c: 48051e63 bnez a0,4000dad8 <== NEVER TAKEN vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec); 4000d640: 00b41023 sh a1,0(s0) if ( (vol->bps != 512) && 4000d644: 20000793 li a5,512 4000d648: 40f58c63 beq a1,a5,4000da60 4000d64c: c0058793 addi a5,a1,-1024 <== NOT EXECUTED 4000d650: bff7f793 andi a5,a5,-1025 <== NOT EXECUTED 4000d654: 01079793 slli a5,a5,0x10 <== NOT EXECUTED 4000d658: 0107d793 srli a5,a5,0x10 <== NOT EXECUTED 4000d65c: 00078663 beqz a5,4000d668 <== NOT EXECUTED (vol->bps != 2048) && 4000d660: 000017b7 lui a5,0x1 <== NOT EXECUTED 4000d664: 42f59263 bne a1,a5,4000da88 <== NOT EXECUTED for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0; 4000d668: 0095d713 srli a4,a1,0x9 <== NOT EXECUTED 4000d66c: 00100793 li a5,1 <== NOT EXECUTED i >>= 1, vol->sec_mul++); 4000d670: 40175713 srai a4,a4,0x1 <== NOT EXECUTED for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0; 4000d674: 00178513 addi a0,a5,1 # 1001 <_ISR_Stack_size+0x1> <== NOT EXECUTED 4000d678: 00177613 andi a2,a4,1 <== NOT EXECUTED 4000d67c: 00078813 mv a6,a5 <== NOT EXECUTED 4000d680: 0ff57793 andi a5,a0,255 <== NOT EXECUTED 4000d684: fe0606e3 beqz a2,4000d670 <== NOT EXECUTED 4000d688: 010401a3 sb a6,3(s0) <== NOT EXECUTED for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0; 4000d68c: 00040123 sb zero,2(s0) <== NOT EXECUTED 4000d690: 0015f713 andi a4,a1,1 <== NOT EXECUTED 4000d694: 00058793 mv a5,a1 <== NOT EXECUTED 4000d698: 02071263 bnez a4,4000d6bc <== NOT EXECUTED 4000d69c: 00100713 li a4,1 i >>= 1, vol->sec_log2++); 4000d6a0: 4017d793 srai a5,a5,0x1 for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0; 4000d6a4: 00170513 addi a0,a4,1 # 6001 4000d6a8: 0017f613 andi a2,a5,1 4000d6ac: 00070813 mv a6,a4 4000d6b0: 0ff57713 andi a4,a0,255 4000d6b4: fe0606e3 beqz a2,4000d6a0 4000d6b8: 01040123 sb a6,2(s0) sc = rtems_bdbuf_set_block_size (vol->dd, vol->bps, true); 4000d6bc: 06c42503 lw a0,108(s0) 4000d6c0: 00100613 li a2,1 4000d6c4: 0cd080ef jal ra,40015f90 if (sc != RTEMS_SUCCESSFUL) 4000d6c8: 3c051063 bnez a0,4000da88 <== NEVER TAKEN vol->bytes_per_block = vol->bps; 4000d6cc: 00045883 lhu a7,0(s0) vol->bytes_per_block_log2 = vol->sec_log2; 4000d6d0: 00244803 lbu a6,2(s0) vol->sectors_per_block = 1; 4000d6d4: 00100793 li a5,1 vol->bytes_per_block = vol->bps; 4000d6d8: 01142823 sw a7,16(s0) vol->bytes_per_block_log2 = vol->sec_log2; 4000d6dc: 01040a23 sb a6,20(s0) vol->sectors_per_block = 1; 4000d6e0: 00f406a3 sb a5,13(s0) vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec); 4000d6e4: 01b40223 sb s11,4(s0) if (vol->spc == 0) 4000d6e8: 3a0d8063 beqz s11,4000da88 <== NEVER TAKEN for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0; 4000d6ec: 000402a3 sb zero,5(s0) 4000d6f0: 001df713 andi a4,s11,1 4000d6f4: 000d8793 mv a5,s11 4000d6f8: 36071a63 bnez a4,4000da6c 4000d6fc: 00100713 li a4,1 i >>= 1, vol->spc_log2++); 4000d700: 4017d793 srai a5,a5,0x1 for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0; 4000d704: 00170593 addi a1,a4,1 4000d708: 0017f613 andi a2,a5,1 4000d70c: 00070513 mv a0,a4 4000d710: 0ff5f713 andi a4,a1,255 4000d714: fe0606e3 beqz a2,4000d700 if (vol->spc != UINT32_C(1) << vol->spc_log2) 4000d718: 00100793 li a5,1 4000d71c: 00050713 mv a4,a0 4000d720: 00a402a3 sb a0,5(s0) 4000d724: 00a797b3 sll a5,a5,a0 4000d728: 36fd9063 bne s11,a5,4000da88 vol->bpc = ((uint32_t) vol->bps) << vol->spc_log2; 4000d72c: 00e89733 sll a4,a7,a4 for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0; 4000d730: 00070793 mv a5,a4 vol->bpc = ((uint32_t) vol->bps) << vol->spc_log2; 4000d734: 00e42423 sw a4,8(s0) for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0; 4000d738: 00040623 sb zero,12(s0) 4000d73c: 00177713 andi a4,a4,1 4000d740: 02071263 bnez a4,4000d764 <== NEVER TAKEN 4000d744: 00100713 li a4,1 i >>= 1, vol->bpc_log2++); 4000d748: 4017d793 srai a5,a5,0x1 for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0; 4000d74c: 00170593 addi a1,a4,1 4000d750: 0017f613 andi a2,a5,1 4000d754: 00070513 mv a0,a4 4000d758: 0ff5f713 andi a4,a1,255 4000d75c: fe0606e3 beqz a2,4000d748 4000d760: 00a40623 sb a0,12(s0) vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) / 4000d764: 005a9793 slli a5,s5,0x5 4000d768: fff88713 addi a4,a7,-1 4000d76c: 00e787b3 add a5,a5,a4 4000d770: 0317c7b3 div a5,a5,a7 vol->fats = FAT_GET_BR_FAT_NUM(boot_rec); 4000d774: 00940aa3 sb s1,21(s0) vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec); 4000d778: 03441023 sh s4,32(s0) vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec); 4000d77c: 03541623 sh s5,44(s0) vol->rdir_size = vol->rdir_secs << vol->sec_log2; 4000d780: 01079833 sll a6,a5,a6 vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) / 4000d784: 02f42823 sw a5,48(s0) vol->rdir_size = vol->rdir_secs << vol->sec_log2; 4000d788: 03042a23 sw a6,52(s0) if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0) 4000d78c: 000b8463 beqz s7,4000d794 vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec); 4000d790: 000b8913 mv s2,s7 vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length + 4000d794: 032484b3 mul s1,s1,s2 4000d798: 03242223 sw s2,36(s0) 4000d79c: 01448a33 add s4,s1,s4 4000d7a0: 014787b3 add a5,a5,s4 4000d7a4: 02f42e23 sw a5,60(s0) vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length; 4000d7a8: 03442423 sw s4,40(s0) if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0) 4000d7ac: 000b0463 beqz s6,4000d7b4 vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec); 4000d7b0: 000b0993 mv s3,s6 data_secs = vol->tot_secs - vol->data_fsec; 4000d7b4: 40f987b3 sub a5,s3,a5 vol->data_cls = data_secs / vol->spc; 4000d7b8: 03b7d7b3 divu a5,a5,s11 if ( vol->data_cls < FAT_FAT12_MAX_CLN) 4000d7bc: 00001737 lui a4,0x1 4000d7c0: 03342c23 sw s3,56(s0) 4000d7c4: ff470693 addi a3,a4,-12 # ff4 vol->data_cls = data_secs / vol->spc; 4000d7c8: 04f42023 sw a5,64(s0) if ( vol->data_cls < FAT_FAT12_MAX_CLN) 4000d7cc: 1cf6f063 bgeu a3,a5,4000d98c if ( vol->data_cls < FAT_FAT16_MAX_CLN) 4000d7d0: 00010737 lui a4,0x10 4000d7d4: ff470693 addi a3,a4,-12 # fff4 4000d7d8: 1cf6e863 bltu a3,a5,4000d9a8 vol->mask = FAT_FAT16_MASK; 4000d7dc: fff70793 addi a5,a4,-1 vol->type = FAT_FAT16; 4000d7e0: 00200693 li a3,2 vol->eoc_val = FAT_FAT16_EOC; 4000d7e4: ff870713 addi a4,a4,-8 vol->type = FAT_FAT16; 4000d7e8: 00d40b23 sb a3,22(s0) vol->mask = FAT_FAT16_MASK; 4000d7ec: 00f42c23 sw a5,24(s0) vol->eoc_val = FAT_FAT16_EOC; 4000d7f0: 00e42e23 sw a4,28(s0) else { vol->rdir_cl = 0; vol->mirror = 0; vol->afat = 0; vol->free_cls = FAT_UNDEFINED_VALUE; 4000d7f4: fff00793 li a5,-1 vol->rdir_cl = 0; 4000d7f8: 04042223 sw zero,68(s0) vol->mirror = 0; 4000d7fc: 04040e23 sb zero,92(s0) vol->afat = 0; 4000d800: 06040223 sb zero,100(s0) vol->free_cls = FAT_UNDEFINED_VALUE; 4000d804: 04f42623 sw a5,76(s0) vol->next_cl = FAT_UNDEFINED_VALUE; 4000d808: 04f42a23 sw a5,84(s0) if (fs_info->c.state == FAT_CACHE_EMPTY) 4000d80c: 09d44783 lbu a5,157(s0) 4000d810: 00078663 beqz a5,4000d81c 4000d814: 00040513 mv a0,s0 4000d818: cc0ff0ef jal ra,4000ccd8 } _fat_block_release(fs_info); vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat; 4000d81c: 06444783 lbu a5,100(s0) 4000d820: 02442683 lw a3,36(s0) 4000d824: 02045703 lhu a4,32(s0) /* set up collection of fat-files fd */ fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control)); 4000d828: 00c00593 li a1,12 vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat; 4000d82c: 02d787b3 mul a5,a5,a3 fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control)); 4000d830: 00200513 li a0,2 vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat; 4000d834: 00e787b3 add a5,a5,a4 4000d838: 06f42023 sw a5,96(s0) fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control)); 4000d83c: e68fe0ef jal ra,4000bea4 4000d840: 08a42023 sw a0,128(s0) 4000d844: 00050793 mv a5,a0 if ( fs_info->vhash == NULL ) 4000d848: 34050863 beqz a0,4000db98 <== NEVER TAKEN return &the_chain->Tail.Node; 4000d84c: 00450613 addi a2,a0,4 4000d850: 00c50713 addi a4,a0,12 4000d854: 01050693 addi a3,a0,16 head->next = tail; 4000d858: 00c7a023 sw a2,0(a5) head->previous = NULL; 4000d85c: 0007a223 sw zero,4(a5) tail->previous = head; 4000d860: 00f7a423 sw a5,8(a5) head->next = tail; 4000d864: 00d7a623 sw a3,12(a5) head->previous = NULL; 4000d868: 0007a823 sw zero,16(a5) tail->previous = head; 4000d86c: 00e7aa23 sw a4,20(a5) } for (i = 0; i < FAT_HASH_SIZE; i++) rtems_chain_initialize_empty(fs_info->vhash + i); fs_info->rhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control)); 4000d870: 00c00593 li a1,12 4000d874: 00200513 li a0,2 4000d878: e2cfe0ef jal ra,4000bea4 4000d87c: 08a42223 sw a0,132(s0) 4000d880: 00050793 mv a5,a0 if ( fs_info->rhash == NULL ) 4000d884: 2a050e63 beqz a0,4000db40 <== NEVER TAKEN } for (i = 0; i < FAT_HASH_SIZE; i++) rtems_chain_initialize_empty(fs_info->rhash + i); fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE; fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4; 4000d888: 00344683 lbu a3,3(s0) 4000d88c: 03842703 lw a4,56(s0) return &the_chain->Tail.Node; 4000d890: 00450813 addi a6,a0,4 4000d894: 01050613 addi a2,a0,16 4000d898: 00d71733 sll a4,a4,a3 4000d89c: 00471713 slli a4,a4,0x4 4000d8a0: 00c50693 addi a3,a0,12 fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE; 4000d8a4: 10000593 li a1,256 4000d8a8: 08b42823 sw a1,144(s0) fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4; 4000d8ac: 08e42a23 sw a4,148(s0) fs_info->index = 0; 4000d8b0: 08042623 sw zero,140(s0) fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char)); 4000d8b4: 00100593 li a1,1 4000d8b8: 10000513 li a0,256 head->next = tail; 4000d8bc: 0107a023 sw a6,0(a5) head->previous = NULL; 4000d8c0: 0007a223 sw zero,4(a5) tail->previous = head; 4000d8c4: 00f7a423 sw a5,8(a5) head->next = tail; 4000d8c8: 00c7a623 sw a2,12(a5) head->previous = NULL; 4000d8cc: 0007a823 sw zero,16(a5) tail->previous = head; 4000d8d0: 00d7aa23 sw a3,20(a5) 4000d8d4: dd0fe0ef jal ra,4000bea4 4000d8d8: 08a42423 sw a0,136(s0) if ( fs_info->uino == NULL ) 4000d8dc: 22050c63 beqz a0,4000db14 <== NEVER TAKEN close(vol->fd); free(fs_info->vhash); free(fs_info->rhash); rtems_set_errno_and_return_minus_one( ENOMEM ); } fs_info->sec_buf = (uint8_t *)calloc(vol->bps, sizeof(uint8_t)); 4000d8e0: 00045503 lhu a0,0(s0) 4000d8e4: 00100593 li a1,1 4000d8e8: dbcfe0ef jal ra,4000bea4 4000d8ec: 0aa42223 sw a0,164(s0) if (fs_info->sec_buf == NULL) 4000d8f0: 26050a63 beqz a0,4000db64 <== NEVER TAKEN return (sec_num & (vol->spc - 1)) == 0; 4000d8f4: 00444783 lbu a5,4(s0) 4000d8f8: 03c42703 lw a4,60(s0) 4000d8fc: fff78793 addi a5,a5,-1 4000d900: 00e7f733 and a4,a5,a4 /* * If possible we will use the cluster size as bdbuf block size for faster * file access. This requires that certain sectors are aligned to cluster * borders. */ if (is_cluster_aligned(vol, vol->data_fsec) 4000d904: 04071463 bnez a4,4000d94c <== NEVER TAKEN && (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc))) 4000d908: 01644683 lbu a3,22(s0) 4000d90c: 00400713 li a4,4 4000d910: 00e68863 beq a3,a4,4000d920 return (sec_num & (vol->spc - 1)) == 0; 4000d914: 02842703 lw a4,40(s0) 4000d918: 00e7f7b3 and a5,a5,a4 && (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc))) 4000d91c: 02079863 bnez a5,4000d94c <== NEVER TAKEN { sc = rtems_bdbuf_set_block_size (vol->dd, vol->bpc, true); 4000d920: 00842583 lw a1,8(s0) 4000d924: 06c42503 lw a0,108(s0) 4000d928: 00100613 li a2,1 4000d92c: 664080ef jal ra,40015f90 if (sc == RTEMS_SUCCESSFUL) 4000d930: 00051e63 bnez a0,4000d94c { vol->bytes_per_block = vol->bpc; 4000d934: 00842683 lw a3,8(s0) vol->bytes_per_block_log2 = vol->bpc_log2; 4000d938: 00c44703 lbu a4,12(s0) vol->sectors_per_block = vol->spc; 4000d93c: 00444783 lbu a5,4(s0) vol->bytes_per_block = vol->bpc; 4000d940: 00d42823 sw a3,16(s0) vol->bytes_per_block_log2 = vol->bpc_log2; 4000d944: 00e40a23 sb a4,20(s0) vol->sectors_per_block = vol->spc; 4000d948: 00f406a3 sb a5,13(s0) } } return RC_OK; } 4000d94c: 0cc12083 lw ra,204(sp) 4000d950: 0c812403 lw s0,200(sp) 4000d954: 0c412483 lw s1,196(sp) 4000d958: 0c012903 lw s2,192(sp) 4000d95c: 0bc12983 lw s3,188(sp) 4000d960: 0b812a03 lw s4,184(sp) 4000d964: 0b412a83 lw s5,180(sp) 4000d968: 0b012b03 lw s6,176(sp) 4000d96c: 0ac12b83 lw s7,172(sp) 4000d970: 0a812c03 lw s8,168(sp) 4000d974: 0a012d03 lw s10,160(sp) 4000d978: 09c12d83 lw s11,156(sp) 4000d97c: 000c8513 mv a0,s9 4000d980: 0a412c83 lw s9,164(sp) 4000d984: 0d010113 addi sp,sp,208 4000d988: 00008067 ret vol->mask = FAT_FAT12_MASK; 4000d98c: fff70793 addi a5,a4,-1 vol->type = FAT_FAT12; 4000d990: 00100693 li a3,1 vol->eoc_val = FAT_FAT12_EOC; 4000d994: ff870713 addi a4,a4,-8 vol->type = FAT_FAT12; 4000d998: 00d40b23 sb a3,22(s0) vol->mask = FAT_FAT12_MASK; 4000d99c: 00f42c23 sw a5,24(s0) vol->eoc_val = FAT_FAT12_EOC; 4000d9a0: 00e42e23 sw a4,28(s0) 4000d9a4: e51ff06f j 4000d7f4 else if ( vol->data_cls < FAT_FAT32_MASK - 1 ) 4000d9a8: 10000737 lui a4,0x10000 4000d9ac: ffd70693 addi a3,a4,-3 # ffffffd 4000d9b0: 0cf6ec63 bltu a3,a5,4000da88 if (vol->mirror) 4000d9b4: 00c12603 lw a2,12(sp) vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec); 4000d9b8: 05a42223 sw s10,68(s0) vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec); 4000d9bc: 05841423 sh s8,72(s0) if (vol->mirror) 4000d9c0: 01861793 slli a5,a2,0x18 4000d9c4: 4187d793 srai a5,a5,0x18 vol->afat = 0; 4000d9c8: 41f7d693 srai a3,a5,0x1f 4000d9cc: 00f67793 andi a5,a2,15 4000d9d0: 00d7f7b3 and a5,a5,a3 vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR; 4000d9d4: f8067d93 andi s11,a2,-128 vol->mask = FAT_FAT32_MASK; 4000d9d8: fff70693 addi a3,a4,-1 vol->type = FAT_FAT32; 4000d9dc: 00400613 li a2,4 vol->eoc_val = FAT_FAT32_EOC; 4000d9e0: ff870713 addi a4,a4,-8 vol->type = FAT_FAT32; 4000d9e4: 00c40b23 sb a2,22(s0) vol->mask = FAT_FAT32_MASK; 4000d9e8: 00d42c23 sw a3,24(s0) vol->eoc_val = FAT_FAT32_EOC; 4000d9ec: 00e42e23 sw a4,28(s0) vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR; 4000d9f0: 05b40e23 sb s11,92(s0) if (vol->mirror) 4000d9f4: 06f40223 sb a5,100(s0) if( vol->info_sec == 0 ) 4000d9f8: 080c0863 beqz s8,4000da88 <== NEVER TAKEN ret = _fat_block_read(fs_info, vol->info_sec , 0, 4000d9fc: 01c10713 addi a4,sp,28 4000da00: 00400693 li a3,4 4000da04: 00000613 li a2,0 4000da08: 000c0593 mv a1,s8 4000da0c: 00040513 mv a0,s0 4000da10: d54ff0ef jal ra,4000cf64 <_fat_block_read> if ( ret < 0 ) 4000da14: 0e054863 bltz a0,4000db04 <== NEVER TAKEN if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) != 4000da18: 01c12703 lw a4,28(sp) 4000da1c: 416157b7 lui a5,0x41615 4000da20: 25278793 addi a5,a5,594 # 41615252 4000da24: 04f71a63 bne a4,a5,4000da78 ret = _fat_block_read(fs_info, vol->info_sec , FAT_FSI_INFO, 4000da28: 04845583 lhu a1,72(s0) 4000da2c: 01c10713 addi a4,sp,28 4000da30: 00c00693 li a3,12 4000da34: 1e400613 li a2,484 4000da38: 00040513 mv a0,s0 4000da3c: d28ff0ef jal ra,4000cf64 <_fat_block_read> if ( ret < 0 ) 4000da40: 0a054a63 bltz a0,4000daf4 <== NEVER TAKEN FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector); 4000da44: 02012703 lw a4,32(sp) FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector); 4000da48: 02412783 lw a5,36(sp) vol->free_cls_in_fs_info = 4000da4c: 04e42823 sw a4,80(s0) vol->free_cls = vol->free_cls_in_fs_info; 4000da50: 04e42623 sw a4,76(s0) vol->next_cl_in_fs_info = 4000da54: 04f42c23 sw a5,88(s0) vol->next_cl = vol->next_cl_in_fs_info; 4000da58: 04f42a23 sw a5,84(s0) 4000da5c: db1ff06f j 4000d80c for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0; 4000da60: 000401a3 sb zero,3(s0) for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0; 4000da64: 20000793 li a5,512 4000da68: c35ff06f j 4000d69c for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0; 4000da6c: 00000713 li a4,0 4000da70: 00100793 li a5,1 4000da74: cb5ff06f j 4000d728 if (fs_info->c.state == FAT_CACHE_EMPTY) 4000da78: 09d44783 lbu a5,157(s0) <== NOT EXECUTED 4000da7c: 00078663 beqz a5,4000da88 <== NOT EXECUTED 4000da80: 00040513 mv a0,s0 <== NOT EXECUTED 4000da84: a54ff0ef jal ra,4000ccd8 <== NOT EXECUTED close(vol->fd); 4000da88: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 4000da8c: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000da90: 84df30ef jal ra,400012dc <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EINVAL ); 4000da94: 4c40d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000da98: 01600793 li a5,22 <== NOT EXECUTED 4000da9c: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000daa0: eadff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000daa4: 839f30ef jal ra,400012dc <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENXIO); 4000daa8: 4b00d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000daac: 00600793 li a5,6 <== NOT EXECUTED 4000dab0: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000dab4: fff00c93 li s9,-1 <== NOT EXECUTED 4000dab8: e95ff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000dabc: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENXIO); 4000dac0: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000dac4: 819f30ef jal ra,400012dc <== NOT EXECUTED rtems_set_errno_and_return_minus_one(ENXIO); 4000dac8: 4900d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000dacc: 00600793 li a5,6 <== NOT EXECUTED 4000dad0: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000dad4: e79ff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000dad8: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4000dadc: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000dae0: ffcf30ef jal ra,400012dc <== NOT EXECUTED rtems_set_errno_and_return_minus_one( EIO ); 4000dae4: 4740d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000dae8: 00500793 li a5,5 <== NOT EXECUTED 4000daec: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000daf0: e5dff06f j 4000d94c <== NOT EXECUTED if (fs_info->c.state == FAT_CACHE_EMPTY) 4000daf4: 09d44783 lbu a5,157(s0) <== NOT EXECUTED 4000daf8: 00078663 beqz a5,4000db04 <== NOT EXECUTED 4000dafc: 00040513 mv a0,s0 <== NOT EXECUTED 4000db00: 9d8ff0ef jal ra,4000ccd8 <== NOT EXECUTED close(vol->fd); 4000db04: 06842503 lw a0,104(s0) <== NOT EXECUTED return -1; 4000db08: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000db0c: fd0f30ef jal ra,400012dc <== NOT EXECUTED return -1; 4000db10: e3dff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000db14: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db18: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000db1c: fc0f30ef jal ra,400012dc <== NOT EXECUTED free(fs_info->vhash); 4000db20: 08042503 lw a0,128(s0) <== NOT EXECUTED 4000db24: 99df30ef jal ra,400014c0 <== NOT EXECUTED free(fs_info->rhash); 4000db28: 08442503 lw a0,132(s0) <== NOT EXECUTED 4000db2c: 995f30ef jal ra,400014c0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db30: 4280d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000db34: 00c00793 li a5,12 <== NOT EXECUTED 4000db38: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000db3c: e11ff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000db40: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db44: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000db48: f94f30ef jal ra,400012dc <== NOT EXECUTED free(fs_info->vhash); 4000db4c: 08042503 lw a0,128(s0) <== NOT EXECUTED 4000db50: 971f30ef jal ra,400014c0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db54: 4040d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000db58: 00c00793 li a5,12 <== NOT EXECUTED 4000db5c: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000db60: dedff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000db64: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db68: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000db6c: f70f30ef jal ra,400012dc <== NOT EXECUTED free(fs_info->vhash); 4000db70: 08042503 lw a0,128(s0) <== NOT EXECUTED 4000db74: 94df30ef jal ra,400014c0 <== NOT EXECUTED free(fs_info->rhash); 4000db78: 08442503 lw a0,132(s0) <== NOT EXECUTED 4000db7c: 945f30ef jal ra,400014c0 <== NOT EXECUTED free(fs_info->uino); 4000db80: 08842503 lw a0,136(s0) <== NOT EXECUTED 4000db84: 93df30ef jal ra,400014c0 <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db88: 3d00d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000db8c: 00c00793 li a5,12 <== NOT EXECUTED 4000db90: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000db94: db9ff06f j 4000d94c <== NOT EXECUTED close(vol->fd); 4000db98: 06842503 lw a0,104(s0) <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000db9c: fff00c93 li s9,-1 <== NOT EXECUTED close(vol->fd); 4000dba0: f3cf30ef jal ra,400012dc <== NOT EXECUTED rtems_set_errno_and_return_minus_one( ENOMEM ); 4000dba4: 3b40d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000dba8: 00c00793 li a5,12 <== NOT EXECUTED 4000dbac: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000dbb0: d9dff06f j 4000d94c <== NOT EXECUTED =============================================================================== 4000e4ec : { 4000e4ec: fc010113 addi sp,sp,-64 4000e4f0: 01812c23 sw s8,24(sp) if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls) 4000e4f4: 05452c03 lw s8,84(a0) { 4000e4f8: 01a12823 sw s10,16(sp) 4000e4fc: 00050d13 mv s10,a0 uint32_t data_cls_val = fs_info->vol.data_cls + 2; 4000e500: 04052503 lw a0,64(a0) { 4000e504: 03212823 sw s2,48(sp) 4000e508: 03312623 sw s3,44(sp) 4000e50c: 03412423 sw s4,40(sp) 4000e510: 03512223 sw s5,36(sp) 4000e514: 03612023 sw s6,32(sp) 4000e518: 01712e23 sw s7,28(sp) 4000e51c: 02112e23 sw ra,60(sp) 4000e520: 02812c23 sw s0,56(sp) 4000e524: 02912a23 sw s1,52(sp) 4000e528: 01912a23 sw s9,20(sp) if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls) 4000e52c: ffec0813 addi a6,s8,-2 { 4000e530: 00058b13 mv s6,a1 4000e534: 00060a13 mv s4,a2 4000e538: 00068913 mv s2,a3 4000e53c: 00070b93 mv s7,a4 4000e540: 00078a93 mv s5,a5 uint32_t data_cls_val = fs_info->vol.data_cls + 2; 4000e544: 00250993 addi s3,a0,2 if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls) 4000e548: 00a86463 bltu a6,a0,4000e550 uint32_t cl4find = 2; 4000e54c: 00200c13 li s8,2 *cls_added = 0; 4000e550: 00092023 sw zero,0(s2) while (*cls_added != count && i < data_cls_val) 4000e554: 180a0463 beqz s4,4000e6dc <== NEVER TAKEN 4000e558: 00200793 li a5,2 uint32_t i = 2; 4000e55c: 00200493 li s1,2 uint32_t save_cln = FAT_UNDEFINED_VALUE; 4000e560: fff00c93 li s9,-1 while (*cls_added != count && i < data_cls_val) 4000e564: 1737fc63 bgeu a5,s3,4000e6dc rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln); 4000e568: 00c10613 addi a2,sp,12 4000e56c: 000c0593 mv a1,s8 4000e570: 000d0513 mv a0,s10 uint32_t next_cln = 0; 4000e574: 00012623 sw zero,12(sp) rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln); 4000e578: a21ff0ef jal ra,4000df98 4000e57c: 00050413 mv s0,a0 if ( rc != RC_OK ) 4000e580: 14051263 bnez a0,4000e6c4 <== NEVER TAKEN if (next_cln == FAT_GENFAT_FREE) 4000e584: 00c12703 lw a4,12(sp) if (*cls_added != 0) 4000e588: 00092783 lw a5,0(s2) if (next_cln == FAT_GENFAT_FREE) 4000e58c: 02071c63 bnez a4,4000e5c4 if (*cls_added == 0) 4000e590: 0a079a63 bnez a5,4000e644 *chain = cl4find; 4000e594: 018b2023 sw s8,0(s6) rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC); 4000e598: fff00613 li a2,-1 4000e59c: 000c0593 mv a1,s8 4000e5a0: 000d0513 mv a0,s10 4000e5a4: bb1ff0ef jal ra,4000e154 4000e5a8: 00050413 mv s0,a0 if ( rc != RC_OK ) 4000e5ac: 04051e63 bnez a0,4000e608 <== NEVER TAKEN if (zero_fill) 4000e5b0: 0e0a9663 bnez s5,4000e69c (*cls_added)++; 4000e5b4: 00092783 lw a5,0(s2) 4000e5b8: 000c0c93 mv s9,s8 4000e5bc: 00178793 addi a5,a5,1 4000e5c0: 00f92023 sw a5,0(s2) cl4find++; 4000e5c4: 001c0c13 addi s8,s8,1 i++; 4000e5c8: 00148493 addi s1,s1,1 if (cl4find >= data_cls_val) 4000e5cc: 013c6463 bltu s8,s3,4000e5d4 cl4find = 2; 4000e5d0: 00200c13 li s8,2 while (*cls_added != count && i < data_cls_val) 4000e5d4: 01478463 beq a5,s4,4000e5dc 4000e5d8: f89998e3 bne s3,s1,4000e568 *last_cl = save_cln; 4000e5dc: 019ba023 sw s9,0(s7) if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE) 4000e5e0: 04cd2783 lw a5,76(s10) fs_info->vol.next_cl = save_cln; 4000e5e4: 059d2a23 sw s9,84(s10) if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE) 4000e5e8: fff00713 li a4,-1 4000e5ec: 00e78863 beq a5,a4,4000e5fc fs_info->vol.free_cls -= (*cls_added); 4000e5f0: 00092703 lw a4,0(s2) <== NOT EXECUTED 4000e5f4: 40e787b3 sub a5,a5,a4 <== NOT EXECUTED 4000e5f8: 04fd2623 sw a5,76(s10) <== NOT EXECUTED fat_buf_release(fs_info); 4000e5fc: 000d0513 mv a0,s10 4000e600: 951fe0ef jal ra,4000cf50 return RC_OK; 4000e604: 00000413 li s0,0 } 4000e608: 03c12083 lw ra,60(sp) 4000e60c: 00040513 mv a0,s0 4000e610: 03812403 lw s0,56(sp) 4000e614: 03412483 lw s1,52(sp) 4000e618: 03012903 lw s2,48(sp) 4000e61c: 02c12983 lw s3,44(sp) 4000e620: 02812a03 lw s4,40(sp) 4000e624: 02412a83 lw s5,36(sp) 4000e628: 02012b03 lw s6,32(sp) 4000e62c: 01c12b83 lw s7,28(sp) 4000e630: 01812c03 lw s8,24(sp) 4000e634: 01412c83 lw s9,20(sp) 4000e638: 01012d03 lw s10,16(sp) 4000e63c: 04010113 addi sp,sp,64 4000e640: 00008067 ret rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC); 4000e644: fff00613 li a2,-1 4000e648: 000c0593 mv a1,s8 4000e64c: 000d0513 mv a0,s10 4000e650: b05ff0ef jal ra,4000e154 4000e654: 00050413 mv s0,a0 if ( rc != RC_OK ) 4000e658: 06051a63 bnez a0,4000e6cc <== NEVER TAKEN rc = fat_set_fat_cluster(fs_info, save_cln, cl4find); 4000e65c: 000c0613 mv a2,s8 4000e660: 000c8593 mv a1,s9 4000e664: 000d0513 mv a0,s10 4000e668: aedff0ef jal ra,4000e154 4000e66c: 00050413 mv s0,a0 if ( rc != RC_OK ) 4000e670: f40500e3 beqz a0,4000e5b0 <== ALWAYS TAKEN fat_free_fat_clusters_chain(fs_info, (*chain)); 4000e674: 000b2583 lw a1,0(s6) <== NOT EXECUTED 4000e678: 000d0513 mv a0,s10 <== NOT EXECUTED 4000e67c: d69ff0ef jal ra,4000e3e4 <== NOT EXECUTED (void) fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_FREE); 4000e680: 00000613 li a2,0 <== NOT EXECUTED 4000e684: 000c0593 mv a1,s8 <== NOT EXECUTED 4000e688: 000d0513 mv a0,s10 <== NOT EXECUTED 4000e68c: ac9ff0ef jal ra,4000e154 <== NOT EXECUTED fat_buf_release(fs_info); 4000e690: 000d0513 mv a0,s10 <== NOT EXECUTED 4000e694: 8bdfe0ef jal ra,4000cf50 <== NOT EXECUTED return rc; 4000e698: f71ff06f j 4000e608 <== NOT EXECUTED fat_cluster_set(fs_info, cl4find, 0, fs_info->vol.bpc, 0); 4000e69c: 008d2683 lw a3,8(s10) 4000e6a0: 00000713 li a4,0 4000e6a4: 00000613 li a2,0 4000e6a8: 000c0593 mv a1,s8 4000e6ac: 000d0513 mv a0,s10 4000e6b0: ae9fe0ef jal ra,4000d198 if (fs_info->vol.bpc != bytes_written) 4000e6b4: 008d2783 lw a5,8(s10) 4000e6b8: eea78ee3 beq a5,a0,4000e5b4 rc = -1; 4000e6bc: fff00413 li s0,-1 <== NOT EXECUTED 4000e6c0: fb5ff06f j 4000e674 <== NOT EXECUTED if (*cls_added != 0) 4000e6c4: 00092783 lw a5,0(s2) <== NOT EXECUTED 4000e6c8: f40780e3 beqz a5,4000e608 <== NOT EXECUTED fat_free_fat_clusters_chain(fs_info, (*chain)); 4000e6cc: 000b2583 lw a1,0(s6) <== NOT EXECUTED 4000e6d0: 000d0513 mv a0,s10 <== NOT EXECUTED 4000e6d4: d11ff0ef jal ra,4000e3e4 <== NOT EXECUTED return rc; 4000e6d8: f31ff06f j 4000e608 <== NOT EXECUTED uint32_t save_cln = FAT_UNDEFINED_VALUE; 4000e6dc: fff00c93 li s9,-1 <== NOT EXECUTED 4000e6e0: efdff06f j 4000e5dc <== NOT EXECUTED =============================================================================== 4000d098 : fat_fs_info_t *fs_info, uint32_t start, uint32_t offset, uint32_t count, const void *buff) { 4000d098: fd010113 addi sp,sp,-48 4000d09c: 02112623 sw ra,44(sp) 4000d0a0: 02812423 sw s0,40(sp) 4000d0a4: 02912223 sw s1,36(sp) 4000d0a8: 03212023 sw s2,32(sp) 4000d0ac: 01312e23 sw s3,28(sp) 4000d0b0: 01412c23 sw s4,24(sp) 4000d0b4: 01512a23 sw s5,20(sp) 4000d0b8: 01612823 sw s6,16(sp) uint32_t sec_num = start; uint32_t ofs = offset; uint8_t *sec_buf; uint32_t c = 0; while(count > 0) 4000d0bc: 0c068a63 beqz a3,4000d190 <== NEVER TAKEN 4000d0c0: 00068493 mv s1,a3 4000d0c4: 00050913 mv s2,a0 4000d0c8: 00058993 mv s3,a1 4000d0cc: 00060a13 mv s4,a2 4000d0d0: 00070b13 mv s6,a4 ssize_t cmpltd = 0; 4000d0d4: 00000a93 li s5,0 4000d0d8: 03c0006f j 4000d114 c = MIN(count, (fs_info->vol.bps - ofs)); if (c == fs_info->vol.bytes_per_block) rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &sec_buf); else rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf); 4000d0dc: d99ff0ef jal ra,4000ce74 if (rc != RC_OK) return -1; memcpy((sec_buf + ofs), (buff + cmpltd), c); 4000d0e0: 015b05b3 add a1,s6,s5 4000d0e4: 00040613 mv a2,s0 fat_buf_mark_modified(fs_info); count -= c; 4000d0e8: 408484b3 sub s1,s1,s0 if (rc != RC_OK) 4000d0ec: 06051a63 bnez a0,4000d160 <== NEVER TAKEN memcpy((sec_buf + ofs), (buff + cmpltd), c); 4000d0f0: 00c12503 lw a0,12(sp) cmpltd +=c; 4000d0f4: 008a8ab3 add s5,s5,s0 sec_num++; 4000d0f8: 00198993 addi s3,s3,1 memcpy((sec_buf + ofs), (buff + cmpltd), c); 4000d0fc: 01450533 add a0,a0,s4 4000d100: 7480e0ef jal ra,4001b848 } static inline void fat_buf_mark_modified(fat_fs_info_t *fs_info) { fs_info->c.modified = true; 4000d104: 00100793 li a5,1 4000d108: 08f90e23 sb a5,156(s2) ofs = 0; 4000d10c: 00000a13 li s4,0 while(count > 0) 4000d110: 04048a63 beqz s1,4000d164 <== ALWAYS TAKEN c = MIN(count, (fs_info->vol.bps - ofs)); 4000d114: 00095403 lhu s0,0(s2) rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf); 4000d118: 00098593 mv a1,s3 4000d11c: 00c10693 addi a3,sp,12 c = MIN(count, (fs_info->vol.bps - ofs)); 4000d120: 41440433 sub s0,s0,s4 rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf); 4000d124: 00100613 li a2,1 4000d128: 00090513 mv a0,s2 c = MIN(count, (fs_info->vol.bps - ofs)); 4000d12c: 0084f463 bgeu s1,s0,4000d134 4000d130: 00048413 mv s0,s1 if (c == fs_info->vol.bytes_per_block) 4000d134: 01092783 lw a5,16(s2) 4000d138: fa8792e3 bne a5,s0,4000d0dc rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &sec_buf); 4000d13c: 00200613 li a2,2 <== NOT EXECUTED 4000d140: 00098593 mv a1,s3 <== NOT EXECUTED 4000d144: 00c10693 addi a3,sp,12 <== NOT EXECUTED 4000d148: 00090513 mv a0,s2 <== NOT EXECUTED 4000d14c: d29ff0ef jal ra,4000ce74 <== NOT EXECUTED memcpy((sec_buf + ofs), (buff + cmpltd), c); 4000d150: 015b05b3 add a1,s6,s5 <== NOT EXECUTED 4000d154: 00040613 mv a2,s0 <== NOT EXECUTED count -= c; 4000d158: 408484b3 sub s1,s1,s0 <== NOT EXECUTED if (rc != RC_OK) 4000d15c: f8050ae3 beqz a0,4000d0f0 <== NOT EXECUTED return -1; 4000d160: fff00a93 li s5,-1 <== NOT EXECUTED } return cmpltd; } 4000d164: 02c12083 lw ra,44(sp) 4000d168: 02812403 lw s0,40(sp) 4000d16c: 02412483 lw s1,36(sp) 4000d170: 02012903 lw s2,32(sp) 4000d174: 01c12983 lw s3,28(sp) 4000d178: 01812a03 lw s4,24(sp) 4000d17c: 01012b03 lw s6,16(sp) 4000d180: 000a8513 mv a0,s5 4000d184: 01412a83 lw s5,20(sp) 4000d188: 03010113 addi sp,sp,48 4000d18c: 00008067 ret ssize_t cmpltd = 0; 4000d190: 00000a93 li s5,0 <== NOT EXECUTED 4000d194: fd1ff06f j 4000d164 <== NOT EXECUTED =============================================================================== 4000e154 : fat_set_fat_cluster( fat_fs_info_t *fs_info, uint32_t cln, uint32_t in_val ) { 4000e154: fd010113 addi sp,sp,-48 4000e158: 02112623 sw ra,44(sp) 4000e15c: 02812423 sw s0,40(sp) 4000e160: 02912223 sw s1,36(sp) 4000e164: 03212023 sw s2,32(sp) 4000e168: 01312e23 sw s3,28(sp) 4000e16c: 01412c23 sw s4,24(sp) 4000e170: 01512a23 sw s5,20(sp) 4000e174: 01612823 sw s6,16(sp) int rc = RC_OK; uint32_t sec = 0; uint32_t ofs = 0; uint16_t fat16_clv = 0; uint32_t fat32_clv = 0; uint8_t *sec_buf = NULL; 4000e178: 00012623 sw zero,12(sp) /* sanity check */ if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) ) 4000e17c: 00100793 li a5,1 4000e180: 08b7f263 bgeu a5,a1,4000e204 4000e184: 04052783 lw a5,64(a0) 4000e188: 00058493 mv s1,a1 4000e18c: 00050413 mv s0,a0 4000e190: 00178793 addi a5,a5,1 4000e194: 06b7e863 bltu a5,a1,4000e204 rtems_set_errno_and_return_minus_one(EIO); sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e198: 01654703 lbu a4,22(a0) fs_info->vol.afat_loc; 4000e19c: 06052a83 lw s5,96(a0) sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e1a0: 00254783 lbu a5,2(a0) 4000e1a4: 00177693 andi a3,a4,1 4000e1a8: 00060913 mv s2,a2 4000e1ac: 08069863 bnez a3,4000e23c 4000e1b0: 00277713 andi a4,a4,2 4000e1b4: 08070e63 beqz a4,4000e250 4000e1b8: 00159993 slli s3,a1,0x1 4000e1bc: 00f9d7b3 srl a5,s3,a5 4000e1c0: 01578ab3 add s5,a5,s5 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf); 4000e1c4: 00c10693 addi a3,sp,12 4000e1c8: 00100613 li a2,1 4000e1cc: 000a8593 mv a1,s5 4000e1d0: 00040513 mv a0,s0 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e1d4: 00045a03 lhu s4,0(s0) rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf); 4000e1d8: c9dfe0ef jal ra,4000ce74 if (rc != RC_OK) 4000e1dc: 02051c63 bnez a0,4000e214 <== NEVER TAKEN return rc; switch ( fs_info->vol.type ) 4000e1e0: 01644b03 lbu s6,22(s0) ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e1e4: fffa0a13 addi s4,s4,-1 switch ( fs_info->vol.type ) 4000e1e8: 00200793 li a5,2 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e1ec: 013a79b3 and s3,s4,s3 switch ( fs_info->vol.type ) 4000e1f0: 06fb0863 beq s6,a5,4000e260 4000e1f4: 00400793 li a5,4 4000e1f8: 10fb0063 beq s6,a5,4000e2f8 4000e1fc: 00100793 li a5,1 4000e200: 06fb0c63 beq s6,a5,4000e278 fat_buf_mark_modified(fs_info); break; default: rtems_set_errno_and_return_minus_one(EIO); 4000e204: 5550c0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000e208: 00500793 li a5,5 <== NOT EXECUTED 4000e20c: 00f52023 sw a5,0(a0) <== NOT EXECUTED 4000e210: fff00513 li a0,-1 <== NOT EXECUTED break; } return RC_OK; } 4000e214: 02c12083 lw ra,44(sp) 4000e218: 02812403 lw s0,40(sp) 4000e21c: 02412483 lw s1,36(sp) 4000e220: 02012903 lw s2,32(sp) 4000e224: 01c12983 lw s3,28(sp) 4000e228: 01812a03 lw s4,24(sp) 4000e22c: 01412a83 lw s5,20(sp) 4000e230: 01012b03 lw s6,16(sp) 4000e234: 03010113 addi sp,sp,48 4000e238: 00008067 ret sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e23c: 0015d993 srli s3,a1,0x1 4000e240: 00b989b3 add s3,s3,a1 4000e244: 00f9d7b3 srl a5,s3,a5 4000e248: 01578ab3 add s5,a5,s5 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e24c: f79ff06f j 4000e1c4 sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) + 4000e250: 00259993 slli s3,a1,0x2 4000e254: 00f9d7b3 srl a5,s3,a5 4000e258: 01578ab3 add s5,a5,s5 ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1); 4000e25c: f69ff06f j 4000e1c4 *((uint16_t *)(sec_buf + ofs)) = 4000e260: 00c12a03 lw s4,12(sp) fs_info->c.modified = true; 4000e264: 00100793 li a5,1 4000e268: 013a09b3 add s3,s4,s3 (uint16_t )(CT_LE_W(in_val)); 4000e26c: 01299023 sh s2,0(s3) 4000e270: 08f40e23 sb a5,156(s0) } 4000e274: fa1ff06f j 4000e214 *(sec_buf + ofs) &= 0x0F; 4000e278: 00c12783 lw a5,12(sp) fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT; 4000e27c: 01091913 slli s2,s2,0x10 if ( FAT_CLUSTER_IS_ODD(cln) ) 4000e280: 0014f493 andi s1,s1,1 fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT; 4000e284: 01095913 srli s2,s2,0x10 *(sec_buf + ofs) &= 0x0F; 4000e288: 013787b3 add a5,a5,s3 if ( FAT_CLUSTER_IS_ODD(cln) ) 4000e28c: 08048e63 beqz s1,4000e328 *(sec_buf + ofs) &= 0x0F; 4000e290: 0007c703 lbu a4,0(a5) fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT; 4000e294: 00491913 slli s2,s2,0x4 4000e298: 01091913 slli s2,s2,0x10 *(sec_buf + ofs) &= 0x0F; 4000e29c: 00f77713 andi a4,a4,15 4000e2a0: 00e78023 sb a4,0(a5) *(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00F0); 4000e2a4: 00c12783 lw a5,12(sp) fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT; 4000e2a8: 01095913 srli s2,s2,0x10 *(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00F0); 4000e2ac: 013787b3 add a5,a5,s3 4000e2b0: 0007c703 lbu a4,0(a5) 4000e2b4: 00e96733 or a4,s2,a4 4000e2b8: 00e78023 sb a4,0(a5) if ( ofs == (fs_info->vol.bps - 1) ) 4000e2bc: 00045783 lhu a5,0(s0) fs_info->c.modified = true; 4000e2c0: 09640e23 sb s6,156(s0) 4000e2c4: fff78793 addi a5,a5,-1 4000e2c8: 0b378863 beq a5,s3,4000e378 *(sec_buf + ofs + 1) &= 0x00; 4000e2cc: 00c12783 lw a5,12(sp) 4000e2d0: 00198993 addi s3,s3,1 *(sec_buf + ofs + 1) |= (uint8_t )((fat16_clv & 0xFF00)>>8); 4000e2d4: 00895913 srli s2,s2,0x8 *(sec_buf + ofs + 1) &= 0x00; 4000e2d8: 013787b3 add a5,a5,s3 4000e2dc: 00078023 sb zero,0(a5) *(sec_buf + ofs+1) |= (uint8_t)((fat16_clv & 0xFF00)>>8); 4000e2e0: 00c12783 lw a5,12(sp) 4000e2e4: 013789b3 add s3,a5,s3 4000e2e8: 0009c783 lbu a5,0(s3) 4000e2ec: 00f96933 or s2,s2,a5 4000e2f0: 01298023 sb s2,0(s3) 4000e2f4: f21ff06f j 4000e214 *((uint32_t *)(sec_buf + ofs)) &= CT_LE_L(0xF0000000); 4000e2f8: 00c12a03 lw s4,12(sp) fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK)); 4000e2fc: 00491913 slli s2,s2,0x4 *((uint32_t *)(sec_buf + ofs)) &= CT_LE_L(0xF0000000); 4000e300: f00007b7 lui a5,0xf0000 4000e304: 013a09b3 add s3,s4,s3 4000e308: 0009a703 lw a4,0(s3) fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK)); 4000e30c: 00495913 srli s2,s2,0x4 *((uint32_t *)(sec_buf + ofs)) &= CT_LE_L(0xF0000000); 4000e310: 00e7f7b3 and a5,a5,a4 *((uint32_t *)(sec_buf + ofs)) |= fat32_clv; 4000e314: 0127e933 or s2,a5,s2 4000e318: 0129a023 sw s2,0(s3) 4000e31c: 00100793 li a5,1 4000e320: 08f40e23 sb a5,156(s0) } 4000e324: ef1ff06f j 4000e214 *(sec_buf + ofs) &= 0x00; 4000e328: 00078023 sb zero,0(a5) # f0000000 *(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00FF); 4000e32c: 00c12783 lw a5,12(sp) fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK; 4000e330: 01491913 slli s2,s2,0x14 4000e334: 01495913 srli s2,s2,0x14 *(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00FF); 4000e338: 013787b3 add a5,a5,s3 4000e33c: 0007c703 lbu a4,0(a5) 4000e340: 00e96733 or a4,s2,a4 4000e344: 00e78023 sb a4,0(a5) if ( ofs == (fs_info->vol.bps - 1) ) 4000e348: 00045783 lhu a5,0(s0) fs_info->c.modified = true; 4000e34c: 09640e23 sb s6,156(s0) 4000e350: fff78793 addi a5,a5,-1 4000e354: 07378063 beq a5,s3,4000e3b4 *(sec_buf + ofs + 1) &= 0xF0; 4000e358: 00c12783 lw a5,12(sp) 4000e35c: 00198993 addi s3,s3,1 *(sec_buf + ofs+1) |= (uint8_t)((fat16_clv & 0xFF00)>>8); 4000e360: 00895913 srli s2,s2,0x8 *(sec_buf + ofs + 1) &= 0xF0; 4000e364: 013787b3 add a5,a5,s3 4000e368: 0007c703 lbu a4,0(a5) 4000e36c: ff077713 andi a4,a4,-16 4000e370: 00e78023 sb a4,0(a5) 4000e374: f6dff06f j 4000e2e0 rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ, 4000e378: 00c10693 addi a3,sp,12 4000e37c: 00100613 li a2,1 4000e380: 001a8593 addi a1,s5,1 4000e384: 00040513 mv a0,s0 4000e388: aedfe0ef jal ra,4000ce74 if (rc != RC_OK) 4000e38c: e80514e3 bnez a0,4000e214 <== NEVER TAKEN *sec_buf &= 0x00; 4000e390: 00c12703 lw a4,12(sp) *sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8); 4000e394: 00895793 srli a5,s2,0x8 *sec_buf &= 0x00; 4000e398: 00070023 sb zero,0(a4) *sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8); 4000e39c: 00c12703 lw a4,12(sp) 4000e3a0: 00074683 lbu a3,0(a4) 4000e3a4: 00d7e7b3 or a5,a5,a3 4000e3a8: 00f70023 sb a5,0(a4) 4000e3ac: 09640e23 sb s6,156(s0) } 4000e3b0: e65ff06f j 4000e214 rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ, 4000e3b4: 00c10693 addi a3,sp,12 <== NOT EXECUTED 4000e3b8: 00100613 li a2,1 <== NOT EXECUTED 4000e3bc: 001a8593 addi a1,s5,1 <== NOT EXECUTED 4000e3c0: 00040513 mv a0,s0 <== NOT EXECUTED 4000e3c4: ab1fe0ef jal ra,4000ce74 <== NOT EXECUTED if (rc != RC_OK) 4000e3c8: e40516e3 bnez a0,4000e214 <== NOT EXECUTED *sec_buf &= 0xF0; 4000e3cc: 00c12683 lw a3,12(sp) <== NOT EXECUTED *sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8); 4000e3d0: 00895793 srli a5,s2,0x8 <== NOT EXECUTED *sec_buf &= 0xF0; 4000e3d4: 0006c703 lbu a4,0(a3) <== NOT EXECUTED 4000e3d8: ff077713 andi a4,a4,-16 <== NOT EXECUTED 4000e3dc: 00e68023 sb a4,0(a3) <== NOT EXECUTED 4000e3e0: fbdff06f j 4000e39c <== NOT EXECUTED =============================================================================== 4000dcb4 : * RC_OK on success, or -1 if error occured * and errno set appropriately */ int fat_shutdown_drive(fat_fs_info_t *fs_info) { 4000dcb4: fe010113 addi sp,sp,-32 4000dcb8: 00912a23 sw s1,20(sp) 4000dcbc: 00050493 mv s1,a0 4000dcc0: 00812c23 sw s0,24(sp) 4000dcc4: 01212823 sw s2,16(sp) 4000dcc8: 01312623 sw s3,12(sp) 4000dccc: 01412423 sw s4,8(sp) 4000dcd0: 00112e23 sw ra,28(sp) 4000dcd4: 01512223 sw s5,4(sp) int rc = RC_OK; int i = 0; rc = fat_sync(fs_info); 4000dcd8: eddff0ef jal ra,4000dbb4 rc = -1; for (i = 0; i < FAT_HASH_SIZE; i++) { rtems_chain_node *node = NULL; rtems_chain_control *the_chain = fs_info->vhash + i; 4000dcdc: 0804a403 lw s0,128(s1) if ( rc != RC_OK ) 4000dce0: 00a039b3 snez s3,a0 rc = fat_sync(fs_info); 4000dce4: 00050913 mv s2,a0 return _Chain_Immutable_head( the_chain )->next; 4000dce8: 00042503 lw a0,0(s0) return &the_chain->Tail.Node; 4000dcec: 00440a13 addi s4,s0,4 if ( rc != RC_OK ) 4000dcf0: 413009b3 neg s3,s3 if ( !_Chain_Is_empty(the_chain)) 4000dcf4: 02aa0063 beq s4,a0,4000dd14 new_first = old_first->next; 4000dcf8: 00052783 lw a5,0(a0) head->next = new_first; 4000dcfc: 00f42023 sw a5,0(s0) new_first->previous = head; 4000dd00: 0087a223 sw s0,4(a5) while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL ) free(node); 4000dd04: fbcf30ef jal ra,400014c0 return _Chain_Immutable_head( the_chain )->next; 4000dd08: 00042503 lw a0,0(s0) if ( !_Chain_Is_empty(the_chain)) 4000dd0c: feaa16e3 bne s4,a0,4000dcf8 rtems_chain_control *the_chain = fs_info->vhash + i; 4000dd10: 0804a403 lw s0,128(s1) return _Chain_Immutable_head( the_chain )->next; 4000dd14: 00c42503 lw a0,12(s0) return &the_chain->Tail.Node; 4000dd18: 01040a13 addi s4,s0,16 4000dd1c: 00c40a93 addi s5,s0,12 if ( !_Chain_Is_empty(the_chain)) 4000dd20: 01450e63 beq a0,s4,4000dd3c new_first = old_first->next; 4000dd24: 00052783 lw a5,0(a0) <== NOT EXECUTED head->next = new_first; 4000dd28: 00f42623 sw a5,12(s0) <== NOT EXECUTED new_first->previous = head; 4000dd2c: 0157a223 sw s5,4(a5) <== NOT EXECUTED free(node); 4000dd30: f90f30ef jal ra,400014c0 <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 4000dd34: 00c42503 lw a0,12(s0) <== NOT EXECUTED if ( !_Chain_Is_empty(the_chain)) 4000dd38: feaa16e3 bne s4,a0,4000dd24 <== NOT EXECUTED } for (i = 0; i < FAT_HASH_SIZE; i++) { rtems_chain_node *node = NULL; rtems_chain_control *the_chain = fs_info->rhash + i; 4000dd3c: 0844a403 lw s0,132(s1) return _Chain_Immutable_head( the_chain )->next; 4000dd40: 00042503 lw a0,0(s0) return &the_chain->Tail.Node; 4000dd44: 00440a13 addi s4,s0,4 if ( !_Chain_Is_empty(the_chain)) 4000dd48: 02aa0063 beq s4,a0,4000dd68 new_first = old_first->next; 4000dd4c: 00052783 lw a5,0(a0) <== NOT EXECUTED head->next = new_first; 4000dd50: 00f42023 sw a5,0(s0) <== NOT EXECUTED new_first->previous = head; 4000dd54: 0087a223 sw s0,4(a5) <== NOT EXECUTED while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL ) free(node); 4000dd58: f68f30ef jal ra,400014c0 <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 4000dd5c: 00042503 lw a0,0(s0) <== NOT EXECUTED if ( !_Chain_Is_empty(the_chain)) 4000dd60: ff4516e3 bne a0,s4,4000dd4c <== NOT EXECUTED rtems_chain_control *the_chain = fs_info->rhash + i; 4000dd64: 0844a403 lw s0,132(s1) <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 4000dd68: 00c42503 lw a0,12(s0) return &the_chain->Tail.Node; 4000dd6c: 01040a13 addi s4,s0,16 4000dd70: 00c40a93 addi s5,s0,12 if ( !_Chain_Is_empty(the_chain)) 4000dd74: 00aa0e63 beq s4,a0,4000dd90 new_first = old_first->next; 4000dd78: 00052783 lw a5,0(a0) <== NOT EXECUTED head->next = new_first; 4000dd7c: 00f42623 sw a5,12(s0) <== NOT EXECUTED new_first->previous = head; 4000dd80: 0157a223 sw s5,4(a5) <== NOT EXECUTED free(node); 4000dd84: f3cf30ef jal ra,400014c0 <== NOT EXECUTED return _Chain_Immutable_head( the_chain )->next; 4000dd88: 00c42503 lw a0,12(s0) <== NOT EXECUTED if ( !_Chain_Is_empty(the_chain)) 4000dd8c: feaa16e3 bne s4,a0,4000dd78 <== NOT EXECUTED } free(fs_info->vhash); 4000dd90: 0804a503 lw a0,128(s1) 4000dd94: f2cf30ef jal ra,400014c0 free(fs_info->rhash); 4000dd98: 0844a503 lw a0,132(s1) 4000dd9c: f24f30ef jal ra,400014c0 free(fs_info->uino); 4000dda0: 0884a503 lw a0,136(s1) 4000dda4: f1cf30ef jal ra,400014c0 free(fs_info->sec_buf); 4000dda8: 0a44a503 lw a0,164(s1) 4000ddac: f14f30ef jal ra,400014c0 close(fs_info->vol.fd); 4000ddb0: 0684a503 lw a0,104(s1) 4000ddb4: d28f30ef jal ra,400012dc if (rc) 4000ddb8: 02091663 bnez s2,4000dde4 <== NEVER TAKEN errno = EIO; return rc; } 4000ddbc: 01c12083 lw ra,28(sp) 4000ddc0: 01812403 lw s0,24(sp) 4000ddc4: 01412483 lw s1,20(sp) 4000ddc8: 01012903 lw s2,16(sp) 4000ddcc: 00812a03 lw s4,8(sp) 4000ddd0: 00412a83 lw s5,4(sp) 4000ddd4: 00098513 mv a0,s3 4000ddd8: 00c12983 lw s3,12(sp) 4000dddc: 02010113 addi sp,sp,32 4000dde0: 00008067 ret errno = EIO; 4000dde4: 1740d0ef jal ra,4001af58 <__errno> <== NOT EXECUTED 4000dde8: 00500793 li a5,5 <== NOT EXECUTED 4000ddec: 00f52023 sw a5,0(a0) <== NOT EXECUTED return rc; 4000ddf0: fcdff06f j 4000ddbc <== NOT EXECUTED =============================================================================== 4000dbb4 : return RC_OK; } int fat_sync(fat_fs_info_t *fs_info) { 4000dbb4: fe010113 addi sp,sp,-32 4000dbb8: 00812c23 sw s0,24(sp) 4000dbbc: 00912a23 sw s1,20(sp) 4000dbc0: 00112e23 sw ra,28(sp) 4000dbc4: 01212823 sw s2,16(sp) if (fs_info->vol.type == FAT_FAT32) 4000dbc8: 01654703 lbu a4,22(a0) 4000dbcc: 00400793 li a5,4 { 4000dbd0: 00050413 mv s0,a0 return RC_OK; 4000dbd4: 00000493 li s1,0 if (fs_info->vol.type == FAT_FAT32) 4000dbd8: 02f70e63 beq a4,a5,4000dc14 if (fs_info->c.state == FAT_CACHE_EMPTY) 4000dbdc: 09d44783 lbu a5,157(s0) 4000dbe0: 00078663 beqz a5,4000dbec 4000dbe4: 00040513 mv a0,s0 4000dbe8: 8f0ff0ef jal ra,4000ccd8 if ( rc != RC_OK ) rc = -1; fat_buf_release(fs_info); if (rtems_bdbuf_syncdev(fs_info->vol.dd) != RTEMS_SUCCESSFUL) 4000dbec: 06c42503 lw a0,108(s0) 4000dbf0: 2a0080ef jal ra,40015e90 4000dbf4: 0a051c63 bnez a0,4000dcac <== NEVER TAKEN rc = -1; return rc; } 4000dbf8: 01c12083 lw ra,28(sp) 4000dbfc: 01812403 lw s0,24(sp) 4000dc00: 01012903 lw s2,16(sp) 4000dc04: 00048513 mv a0,s1 4000dc08: 01412483 lw s1,20(sp) 4000dc0c: 02010113 addi sp,sp,32 4000dc10: 00008067 ret uint32_t free_count = fs_info->vol.free_cls; 4000dc14: 04c52783 lw a5,76(a0) if (free_count != fs_info->vol.free_cls_in_fs_info) 4000dc18: 05052703 lw a4,80(a0) uint32_t next_free = fs_info->vol.next_cl; 4000dc1c: 05452903 lw s2,84(a0) if (free_count != fs_info->vol.free_cls_in_fs_info) 4000dc20: 02e79863 bne a5,a4,4000dc50 if (next_free != fs_info->vol.next_cl_in_fs_info) 4000dc24: 05852783 lw a5,88(a0) 4000dc28: faf90ae3 beq s2,a5,4000dbdc ret2 = fat_sector_write(fs_info, 4000dc2c: 04845583 lhu a1,72(s0) fs_info->vol.next_cl_in_fs_info = next_free; 4000dc30: 05242c23 sw s2,88(s0) ret2 = fat_sector_write(fs_info, 4000dc34: 00c10713 addi a4,sp,12 4000dc38: 00400693 li a3,4 4000dc3c: 1ec00613 li a2,492 uint32_t le_next_free = CT_LE_L(next_free); 4000dc40: 01212623 sw s2,12(sp) ret2 = fat_sector_write(fs_info, 4000dc44: c54ff0ef jal ra,4000d098 if ( (ret1 < 0) || (ret2 < 0) ) 4000dc48: 41f55493 srai s1,a0,0x1f 4000dc4c: f91ff06f j 4000dbdc ret1 = fat_sector_write(fs_info, 4000dc50: 04855583 lhu a1,72(a0) <== NOT EXECUTED fs_info->vol.free_cls_in_fs_info = free_count; 4000dc54: 04f52823 sw a5,80(a0) <== NOT EXECUTED ret1 = fat_sector_write(fs_info, 4000dc58: 00c10713 addi a4,sp,12 <== NOT EXECUTED 4000dc5c: 00400693 li a3,4 <== NOT EXECUTED 4000dc60: 1e800613 li a2,488 <== NOT EXECUTED uint32_t le_free_count = CT_LE_L(free_count); 4000dc64: 00f12623 sw a5,12(sp) <== NOT EXECUTED ret1 = fat_sector_write(fs_info, 4000dc68: c30ff0ef jal ra,4000d098 <== NOT EXECUTED if (next_free != fs_info->vol.next_cl_in_fs_info) 4000dc6c: 05842783 lw a5,88(s0) <== NOT EXECUTED ret1 = fat_sector_write(fs_info, 4000dc70: 00050493 mv s1,a0 <== NOT EXECUTED if (next_free != fs_info->vol.next_cl_in_fs_info) 4000dc74: 00f91663 bne s2,a5,4000dc80 <== NOT EXECUTED if ( (ret1 < 0) || (ret2 < 0) ) 4000dc78: 41f55493 srai s1,a0,0x1f <== NOT EXECUTED 4000dc7c: f61ff06f j 4000dbdc <== NOT EXECUTED ret2 = fat_sector_write(fs_info, 4000dc80: 04845583 lhu a1,72(s0) <== NOT EXECUTED fs_info->vol.next_cl_in_fs_info = next_free; 4000dc84: 05242c23 sw s2,88(s0) <== NOT EXECUTED ret2 = fat_sector_write(fs_info, 4000dc88: 00c10713 addi a4,sp,12 <== NOT EXECUTED 4000dc8c: 00400693 li a3,4 <== NOT EXECUTED 4000dc90: 1ec00613 li a2,492 <== NOT EXECUTED 4000dc94: 00040513 mv a0,s0 <== NOT EXECUTED uint32_t le_next_free = CT_LE_L(next_free); 4000dc98: 01212623 sw s2,12(sp) <== NOT EXECUTED ret2 = fat_sector_write(fs_info, 4000dc9c: bfcff0ef jal ra,4000d098 <== NOT EXECUTED if ( (ret1 < 0) || (ret2 < 0) ) 4000dca0: fa04d4e3 bgez s1,4000dc48 <== NOT EXECUTED rc = -1; 4000dca4: fff00493 li s1,-1 <== NOT EXECUTED 4000dca8: f35ff06f j 4000dbdc <== NOT EXECUTED rc = -1; 4000dcac: fff00493 li s1,-1 <== NOT EXECUTED return rc; 4000dcb0: f49ff06f j 4000dbf8 <== NOT EXECUTED =============================================================================== 4000f748 : mode_t mode, const fat_file_fd_t *link_fd) { int rc = RC_OK; ssize_t ret = 0; msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info; 4000f748: 01452803 lw a6,20(a0) { 4000f74c: f3010113 addi sp,sp,-208 dir_pos->lname.cln = FAT_FILE_SHORT_NAME; 4000f750: fff00713 li a4,-1 4000f754: 0c912223 sw s1,196(sp) 4000f758: 0b512a23 sw s5,180(sp) 4000f75c: 0b812423 sw s8,168(sp) 4000f760: 00050493 mv s1,a0 4000f764: 00058c13 mv s8,a1 4000f768: 00060a93 mv s5,a2 uint32_t byte = 0; fat_dir_pos_init(&dir_pos); memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE); memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2); 4000f76c: 00000593 li a1,0 4000f770: 04000613 li a2,64 4000f774: 06010513 addi a0,sp,96 { 4000f778: 0c812423 sw s0,200(sp) 4000f77c: 0d212023 sw s2,192(sp) 4000f780: 0b612823 sw s6,176(sp) 4000f784: 0b912223 sw s9,164(sp) msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info; 4000f788: 00882b03 lw s6,8(a6) { 4000f78c: 00078c93 mv s9,a5 fat_file_fd_t *parent_fat_fd = parent_loc->node_access; 4000f790: 0084a403 lw s0,8(s1) { 4000f794: 0c112623 sw ra,204(sp) 4000f798: 0b312e23 sw s3,188(sp) 4000f79c: 0b412c23 sw s4,184(sp) 4000f7a0: 0b712623 sw s7,172(sp) 4000f7a4: 00068913 mv s2,a3 fat_file_fd_t *fat_fd = NULL; 4000f7a8: 00012623 sw zero,12(sp) uint16_t time_val = 0; 4000f7ac: 00011423 sh zero,8(sp) uint16_t date = 0; 4000f7b0: 00011523 sh zero,10(sp) dir_pos->sname.cln = 0; 4000f7b4: 00012823 sw zero,16(sp) dir_pos->sname.ofs = 0; 4000f7b8: 00012a23 sw zero,20(sp) dir_pos->lname.cln = FAT_FILE_SHORT_NAME; 4000f7bc: 00e12c23 sw a4,24(sp) dir_pos->lname.ofs = FAT_FILE_SHORT_NAME; 4000f7c0: 00e12e23 sw a4,28(sp) memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE); 4000f7c4: 02012023 sw zero,32(sp) 4000f7c8: 02012223 sw zero,36(sp) 4000f7cc: 02012423 sw zero,40(sp) 4000f7d0: 02012623 sw zero,44(sp) 4000f7d4: 02012823 sw zero,48(sp) 4000f7d8: 02012a23 sw zero,52(sp) 4000f7dc: 02012c23 sw zero,56(sp) 4000f7e0: 02012e23 sw zero,60(sp) memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2); 4000f7e4: 18c0c0ef jal ra,4001b970 if (name_len > MSDOS_NAME_MAX_LFN_WITH_DOT) { 4000f7e8: 10400793 li a5,260 4000f7ec: 3f27ca63 blt a5,s2,4000fbe0 rtems_set_errno_and_return_minus_one(ENAMETOOLONG); } name_type = msdos_long_to_short (fs_info->converter, 4000f7f0: 0ccb2503 lw a0,204(s6) 4000f7f4: 00b00713 li a4,11 4000f7f8: 02010693 addi a3,sp,32 4000f7fc: 00090613 mv a2,s2 4000f800: 000a8593 mv a1,s5 4000f804: 091000ef jal ra,40010094 4000f808: 00050b93 mv s7,a0 name, name_len, MSDOS_DIR_NAME(short_node), MSDOS_NAME_MAX); if (name_type == MSDOS_NAME_INVALID) { 4000f80c: 3e050463 beqz a0,4000fbf4 <== NEVER TAKEN /* fill reserved field */ *MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE; /* set up last write date and time */ now = time(NULL); 4000f810: 00000513 li a0,0 *MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE; 4000f814: 02010623 sb zero,44(sp) now = time(NULL); 4000f818: 7680f0ef jal ra,4001ef80