RTEMS-6
Annotated Report
libdosfs
Mon Mar 1 00:17:26 2021
000000004002d6a0 <_fat_block_read>:
uint32_t start,
uint32_t offset,
uint32_t count,
void *buff
)
{
4002d6a0: a9ba7bfd stp x29, x30, [sp, #-96]!
4002d6a4: 910003fd mov x29, sp
4002d6a8: a9025bf5 stp x21, x22, [sp, #32]
uint32_t sec_num = start;
uint32_t ofs = offset;
uint8_t *sec_buf;
uint32_t c = 0;
while (count > 0)
4002d6ac: 34000783 cbz w3, 4002d79c <_fat_block_read+0xfc> <== NEVER TAKEN
4002d6b0: aa0403f6 mov x22, x4
4002d6b4: a90153f3 stp x19, x20, [sp, #16]
4002d6b8: aa0003f3 mov x19, x0
4002d6bc: 2a0203f4 mov w20, w2
4002d6c0: a90363f7 stp x23, x24, [sp, #48]
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d6c4: 9102e017 add x23, x0, #0xb8
4002d6c8: a90573fb stp x27, x28, [sp, #80]
4002d6cc: 2a0103fc mov w28, w1
4002d6d0: 2a0303fb mov w27, w3
ssize_t cmpltd = 0;
4002d6d4: d2800015 mov x21, #0x0 // #0
fs_info->c.modified = 0;
4002d6d8: 52802018 mov w24, #0x100 // #256
4002d6dc: a9046bf9 stp x25, x26, [sp, #64]
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d6e0: 39400a79 ldrb w25, [x19, #2]
4002d6e4: 39405265 ldrb w5, [x19, #20]
4002d6e8: aa1303e0 mov x0, x19
if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num)
4002d6ec: 3942d661 ldrb w1, [x19, #181]
4002d6f0: 4b1900a5 sub w5, w5, w25
4002d6f4: 1ac5279a lsr w26, w28, w5
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d6f8: 1ac52345 lsl w5, w26, w5
((sector -
4002d6fc: 4b050385 sub w5, w28, w5
<< fs_info->vol.sec_log2);
4002d700: 1ad920b9 lsl w25, w5, w25
4002d704: 340000a1 cbz w1, 4002d718 <_fat_block_read+0x78>
4002d708: b940b261 ldr w1, [x19, #176]
4002d70c: 6b1c003f cmp w1, w28
4002d710: 54000120 b.eq 4002d734 <_fat_block_read+0x94> // b.none
4002d714: 97ffff3b bl 4002d400 <fat_buf_release.part.0>
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d718: f9403a60 ldr x0, [x19, #112]
4002d71c: 2a1a03e1 mov w1, w26
4002d720: aa1703e2 mov x2, x23
4002d724: 940022c7 bl 40036240 <rtems_bdbuf_read>
if (sc != RTEMS_SUCCESSFUL)
4002d728: 350003e0 cbnz w0, 4002d7a4 <_fat_block_read+0x104> <== NEVER TAKEN
fs_info->c.blk_num = sec_num;
4002d72c: b900b27c str w28, [x19, #176]
fs_info->c.modified = 0;
4002d730: 79016a78 strh w24, [x19, #180]
*sec_buf = &fs_info->c.buf->buffer[blk_ofs];
4002d734: f9405e61 ldr x1, [x19, #184]
4002d738: 2a1903e5 mov w5, w25
{
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));
4002d73c: 79400264 ldrh w4, [x19]
memcpy((buff + cmpltd), (sec_buf + ofs), c);
4002d740: 8b3440a5 add x5, x5, w20, uxtw
4002d744: 8b1502c0 add x0, x22, x21
count -= c;
cmpltd += c;
sec_num++;
4002d748: 1100079c add w28, w28, #0x1
c = MIN(count, (fs_info->vol.bps - ofs));
4002d74c: 4b140084 sub w4, w4, w20
ofs = 0;
4002d750: 52800014 mov w20, #0x0 // #0
c = MIN(count, (fs_info->vol.bps - ofs));
4002d754: 6b1b009f cmp w4, w27
memcpy((buff + cmpltd), (sec_buf + ofs), c);
4002d758: f9401c21 ldr x1, [x1, #56]
4002d75c: 1a9b9099 csel w25, w4, w27, ls // ls = plast
c = MIN(count, (fs_info->vol.bps - ofs));
4002d760: 1a9b909a csel w26, w4, w27, ls // ls = plast
memcpy((buff + cmpltd), (sec_buf + ofs), c);
4002d764: aa1903e2 mov x2, x25
4002d768: 8b050021 add x1, x1, x5
4002d76c: 94003723 bl 4003b3f8 <memcpy>
cmpltd += c;
4002d770: 8b1902b5 add x21, x21, x25
while (count > 0)
4002d774: 6b1a037b subs w27, w27, w26
4002d778: 54fffb41 b.ne 4002d6e0 <_fat_block_read+0x40> // b.any
4002d77c: a94153f3 ldp x19, x20, [sp, #16]
4002d780: a94363f7 ldp x23, x24, [sp, #48]
4002d784: a9446bf9 ldp x25, x26, [sp, #64]
4002d788: a94573fb ldp x27, x28, [sp, #80]
}
return cmpltd;
}
4002d78c: aa1503e0 mov x0, x21
4002d790: a9425bf5 ldp x21, x22, [sp, #32]
4002d794: a8c67bfd ldp x29, x30, [sp], #96
4002d798: d65f03c0 ret
ssize_t cmpltd = 0;
4002d79c: d2800015 mov x21, #0x0 // #0 <== NOT EXECUTED
4002d7a0: 17fffffb b 4002d78c <_fat_block_read+0xec> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4002d7a4: 94003472 bl 4003a96c <__errno> <== NOT EXECUTED
return -1;
4002d7a8: 92800015 mov x21, #0xffffffffffffffff // #-1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4002d7ac: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002d7b0: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002d7b4: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002d7b8: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002d7bc: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002d7c0: b9000001 str w1, [x0] <== NOT EXECUTED
if (rc != RC_OK)
4002d7c4: 17fffff2 b 4002d78c <_fat_block_read+0xec> <== NOT EXECUTED
...
000000004002d5b0 <fat_buf_access>:
{
4002d5b0: a9bc7bfd stp x29, x30, [sp, #-64]!
4002d5b4: 910003fd mov x29, sp
4002d5b8: a90153f3 stp x19, x20, [sp, #16]
4002d5bc: aa0003f3 mov x19, x0
4002d5c0: a9025bf5 stp x21, x22, [sp, #32]
4002d5c4: 2a0103f5 mov w21, w1
4002d5c8: aa0303f6 mov x22, x3
4002d5cc: a90363f7 stp x23, x24, [sp, #48]
4002d5d0: 2a0203f7 mov w23, w2
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d5d4: 39400814 ldrb w20, [x0, #2]
4002d5d8: 39405004 ldrb w4, [x0, #20]
if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num)
4002d5dc: 3942d401 ldrb w1, [x0, #181]
4002d5e0: 4b140084 sub w4, w4, w20
4002d5e4: 1ac426b8 lsr w24, w21, w4
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d5e8: 1ac42304 lsl w4, w24, w4
((sector -
4002d5ec: 4b0402a4 sub w4, w21, w4
<< fs_info->vol.sec_log2);
4002d5f0: 1ad42094 lsl w20, w4, w20
4002d5f4: 340000a1 cbz w1, 4002d608 <fat_buf_access+0x58>
4002d5f8: b940b001 ldr w1, [x0, #176]
4002d5fc: 6b15003f cmp w1, w21
4002d600: 54000180 b.eq 4002d630 <fat_buf_access+0x80> // b.none
if (fs_info->c.state == FAT_CACHE_EMPTY)
4002d604: 97ffff7f bl 4002d400 <fat_buf_release.part.0>
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d608: 2a1803e1 mov w1, w24
if (op_type == FAT_OP_TYPE_READ)
4002d60c: 710006ff cmp w23, #0x1
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d610: 9102e262 add x2, x19, #0xb8
4002d614: f9403a60 ldr x0, [x19, #112]
if (op_type == FAT_OP_TYPE_READ)
4002d618: 54000200 b.eq 4002d658 <fat_buf_access+0xa8> // b.none
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d61c: 940022c1 bl 40036120 <rtems_bdbuf_get>
if (sc != RTEMS_SUCCESSFUL)
4002d620: 35000200 cbnz w0, 4002d660 <fat_buf_access+0xb0> <== NEVER TAKEN
fs_info->c.modified = 0;
4002d624: 52802000 mov w0, #0x100 // #256
fs_info->c.blk_num = sec_num;
4002d628: b900b275 str w21, [x19, #176]
fs_info->c.modified = 0;
4002d62c: 79016a60 strh w0, [x19, #180]
*sec_buf = &fs_info->c.buf->buffer[blk_ofs];
4002d630: f9405e61 ldr x1, [x19, #184]
return RC_OK;
4002d634: 52800000 mov w0, #0x0 // #0
*sec_buf = &fs_info->c.buf->buffer[blk_ofs];
4002d638: f9401c24 ldr x4, [x1, #56]
4002d63c: 8b344084 add x4, x4, w20, uxtw
4002d640: f90002c4 str x4, [x22]
}
4002d644: a94153f3 ldp x19, x20, [sp, #16]
4002d648: a9425bf5 ldp x21, x22, [sp, #32]
4002d64c: a94363f7 ldp x23, x24, [sp, #48]
4002d650: a8c47bfd ldp x29, x30, [sp], #64
4002d654: d65f03c0 ret
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4002d658: 940022fa bl 40036240 <rtems_bdbuf_read>
4002d65c: 17fffff1 b 4002d620 <fat_buf_access+0x70>
rtems_set_errno_and_return_minus_one(EIO);
4002d660: 940034c3 bl 4003a96c <__errno> <== NOT EXECUTED
4002d664: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002d668: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
4002d66c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002d670: b9000022 str w2, [x1] <== NOT EXECUTED
4002d674: 17fffff4 b 4002d644 <fat_buf_access+0x94> <== NOT EXECUTED
...
000000004002d400 <fat_buf_release.part.0>:
*sec_buf = &fs_info->c.buf->buffer[blk_ofs];
return RC_OK;
}
int
fat_buf_release(fat_fs_info_t *fs_info)
4002d400: a9bc7bfd stp x29, x30, [sp, #-64]! <== NOT EXECUTED
4002d404: 910003fd mov x29, sp <== NOT EXECUTED
4002d408: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED
4002d40c: aa0003f3 mov x19, x0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (fs_info->c.state == FAT_CACHE_EMPTY)
return RC_OK;
if (fs_info->c.modified)
4002d410: 3942d000 ldrb w0, [x0, #180] <== 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,
4002d414: f9405e61 ldr x1, [x19, #184] <== NOT EXECUTED
if (fs_info->c.modified)
4002d418: 34000860 cbz w0, 4002d524 <fat_buf_release.part.0+0x124> <== NOT EXECUTED
bool sec_of_fat = ((sec_num >= fs_info->vol.fat_loc) &&
4002d41c: 79404260 ldrh w0, [x19, #32] <== NOT EXECUTED
uint32_t sec_num = fs_info->c.blk_num;
4002d420: b940b263 ldr w3, [x19, #176] <== NOT EXECUTED
bool sec_of_fat = ((sec_num >= fs_info->vol.fat_loc) &&
4002d424: 6b00007f cmp w3, w0 <== NOT EXECUTED
4002d428: 54000142 b.cs 4002d450 <fat_buf_release.part.0+0x50> // b.hs, b.nlast<== NOT EXECUTED
fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
4002d42c: aa0103e0 mov x0, x1 <== NOT EXECUTED
4002d430: 94002444 bl 40036540 <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
4002d434: 350007e0 cbnz w0, 4002d530 <fat_buf_release.part.0+0x130> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.modified = 0;
4002d438: 3902d27f strb wzr, [x19, #180] <== 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;
return RC_OK;
4002d43c: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED
fs_info->c.state = FAT_CACHE_EMPTY;
4002d440: 3902d67f strb wzr, [x19, #181] <== NOT EXECUTED
}
4002d444: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002d448: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED
4002d44c: d65f03c0 ret <== NOT EXECUTED
bool sec_of_fat = ((sec_num >= fs_info->vol.fat_loc) &&
4002d450: b9402a60 ldr w0, [x19, #40] <== NOT EXECUTED
4002d454: 6b00007f cmp w3, w0 <== NOT EXECUTED
4002d458: 54fffea2 b.cs 4002d42c <fat_buf_release.part.0+0x2c> // b.hs, b.nlast<== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
4002d45c: 39417260 ldrb w0, [x19, #92] <== NOT EXECUTED
4002d460: 34000780 cbz w0, 4002d550 <fat_buf_release.part.0+0x150> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
4002d464: aa0103e0 mov x0, x1 <== NOT EXECUTED
4002d468: 94002436 bl 40036540 <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
4002d46c: 35000620 cbnz w0, 4002d530 <fat_buf_release.part.0+0x130> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
4002d470: 39417260 ldrb w0, [x19, #92] <== NOT EXECUTED
fs_info->c.modified = 0;
4002d474: 3902d27f strb wzr, [x19, #180] <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
4002d478: 35fffe20 cbnz w0, 4002d43c <fat_buf_release.part.0+0x3c> <== NOT EXECUTED
for (i = 1; i < fs_info->vol.fats; i++)
4002d47c: f90013f5 str x21, [sp, #32] <== NOT EXECUTED
4002d480: 52800035 mov w21, #0x1 // #1 <== NOT EXECUTED
4002d484: 39405660 ldrb w0, [x19, #21] <== NOT EXECUTED
4002d488: 6b15001f cmp w0, w21 <== NOT EXECUTED
4002d48c: 54000489 b.ls 4002d51c <fat_buf_release.part.0+0x11c> // b.plast <== NOT EXECUTED
sec_num = fs_info->c.blk_num + fs_info->vol.fat_length * i,
4002d490: b940b260 ldr w0, [x19, #176] <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd);
4002d494: 9100e3e2 add x2, sp, #0x38 <== NOT EXECUTED
sec_num = fs_info->c.blk_num + fs_info->vol.fat_length * i,
4002d498: b9402663 ldr w3, [x19, #36] <== 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);
4002d49c: 39400a65 ldrb w5, [x19, #2] <== NOT EXECUTED
4002d4a0: 39405274 ldrb w20, [x19, #20] <== NOT EXECUTED
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &bd);
4002d4a4: f9403a66 ldr x6, [x19, #112] <== NOT EXECUTED
sec_num = fs_info->c.blk_num + fs_info->vol.fat_length * i,
4002d4a8: 1b0302a3 madd w3, w21, w3, w0 <== NOT EXECUTED
4002d4ac: 4b050294 sub w20, w20, w5 <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd);
4002d4b0: aa0603e0 mov x0, x6 <== NOT EXECUTED
4002d4b4: 1ad42464 lsr w4, w3, w20 <== NOT EXECUTED
4002d4b8: 2a0403e1 mov w1, w4 <== NOT EXECUTED
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d4bc: 1ad42094 lsl w20, w4, w20 <== 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 -
4002d4c0: 4b140063 sub w3, w3, w20 <== NOT EXECUTED
fat_block_num_to_sector_num (fs_info,
fat_sector_num_to_block_num (fs_info, sector)))
<< fs_info->vol.sec_log2);
4002d4c4: 1ac52074 lsl w20, w3, w5 <== NOT EXECUTED
if (blk_ofs == 0
4002d4c8: 350000b4 cbnz w20, 4002d4dc <fat_buf_release.part.0+0xdc> <== NOT EXECUTED
&& fs_info->vol.bps == fs_info->vol.bytes_per_block)
4002d4cc: 79400265 ldrh w5, [x19] <== NOT EXECUTED
4002d4d0: b9401263 ldr w3, [x19, #16] <== NOT EXECUTED
4002d4d4: 6b0300bf cmp w5, w3 <== NOT EXECUTED
4002d4d8: 54000380 b.eq 4002d548 <fat_buf_release.part.0+0x148> // b.none <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &bd);
4002d4dc: 94002359 bl 40036240 <rtems_bdbuf_read> <== NOT EXECUTED
if ( sc != RTEMS_SUCCESSFUL)
4002d4e0: 35000540 cbnz w0, 4002d588 <fat_buf_release.part.0+0x188> <== NOT EXECUTED
memcpy(bd->buffer + blk_ofs, fs_info->sec_buf, fs_info->vol.bps);
4002d4e4: f9401fe0 ldr x0, [sp, #56] <== NOT EXECUTED
4002d4e8: 79400262 ldrh w2, [x19] <== NOT EXECUTED
4002d4ec: f9406261 ldr x1, [x19, #192] <== NOT EXECUTED
4002d4f0: f9401c00 ldr x0, [x0, #56] <== NOT EXECUTED
4002d4f4: 8b344000 add x0, x0, w20, uxtw <== NOT EXECUTED
4002d4f8: 940037c0 bl 4003b3f8 <memcpy> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified(bd);
4002d4fc: f9401fe0 ldr x0, [sp, #56] <== NOT EXECUTED
4002d500: 94002410 bl 40036540 <rtems_bdbuf_release_modified> <== NOT EXECUTED
for (i = 1; i < fs_info->vol.fats; i++)
4002d504: 110006a1 add w1, w21, #0x1 <== NOT EXECUTED
if ( sc != RTEMS_SUCCESSFUL)
4002d508: 35000400 cbnz w0, 4002d588 <fat_buf_release.part.0+0x188> <== NOT EXECUTED
for (i = 1; i < fs_info->vol.fats; i++)
4002d50c: 39405660 ldrb w0, [x19, #21] <== NOT EXECUTED
4002d510: 12001c35 and w21, w1, #0xff <== NOT EXECUTED
4002d514: 6b21001f cmp w0, w1, uxtb <== NOT EXECUTED
4002d518: 54fffbc8 b.hi 4002d490 <fat_buf_release.part.0+0x90> // b.pmore <== NOT EXECUTED
4002d51c: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED
4002d520: 17ffffc7 b 4002d43c <fat_buf_release.part.0+0x3c> <== NOT EXECUTED
sc = rtems_bdbuf_release(fs_info->c.buf);
4002d524: aa0103e0 mov x0, x1 <== NOT EXECUTED
4002d528: 940023c6 bl 40036440 <rtems_bdbuf_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
4002d52c: 34fff880 cbz w0, 4002d43c <fat_buf_release.part.0+0x3c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4002d530: 9400350f bl 4003a96c <__errno> <== NOT EXECUTED
4002d534: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002d538: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
4002d53c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002d540: b9000022 str w2, [x1] <== NOT EXECUTED
4002d544: 17ffffc0 b 4002d444 <fat_buf_release.part.0+0x44> <== NOT EXECUTED
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &bd);
4002d548: 940022f6 bl 40036120 <rtems_bdbuf_get> <== NOT EXECUTED
4002d54c: 17ffffe5 b 4002d4e0 <fat_buf_release.part.0+0xe0> <== NOT EXECUTED
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d550: 39400a66 ldrb w6, [x19, #2] <== NOT EXECUTED
4002d554: 39405264 ldrb w4, [x19, #20] <== NOT EXECUTED
memcpy(fs_info->sec_buf,
4002d558: 79400262 ldrh w2, [x19] <== NOT EXECUTED
4002d55c: 4b060084 sub w4, w4, w6 <== NOT EXECUTED
4002d560: f9406260 ldr x0, [x19, #192] <== NOT EXECUTED
4002d564: 1ac42465 lsr w5, w3, w4 <== NOT EXECUTED
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d568: 1ac420a4 lsl w4, w5, w4 <== NOT EXECUTED
((sector -
4002d56c: 4b040063 sub w3, w3, w4 <== NOT EXECUTED
fs_info->c.buf->buffer + blk_ofs,
4002d570: f9401c21 ldr x1, [x1, #56] <== NOT EXECUTED
memcpy(fs_info->sec_buf,
4002d574: 1ac62063 lsl w3, w3, w6 <== NOT EXECUTED
4002d578: 8b030021 add x1, x1, x3 <== NOT EXECUTED
4002d57c: 9400379f bl 4003b3f8 <memcpy> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
4002d580: f9405e61 ldr x1, [x19, #184] <== NOT EXECUTED
4002d584: 17ffffb8 b 4002d464 <fat_buf_release.part.0+0x64> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
4002d588: 940034f9 bl 4003a96c <__errno> <== NOT EXECUTED
4002d58c: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED
4002d590: b9000001 str w1, [x0] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
4002d594: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
}
4002d598: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002d59c: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED
4002d5a0: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED
4002d5a4: d65f03c0 ret <== NOT EXECUTED
...
000000004002d8b0 <fat_cluster_set>:
fat_fs_info_t *fs_info,
const uint32_t start_cln,
const uint32_t offset,
const uint32_t count,
const uint8_t pattern)
{
4002d8b0: a9b97bfd stp x29, x30, [sp, #-112]!
4002d8b4: 910003fd mov x29, sp
4002d8b8: a90153f3 stp x19, x20, [sp, #16]
ssize_t rc = RC_OK;
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002d8bc: b9400814 ldr w20, [x0, #8]
{
4002d8c0: a9025bf5 stp x21, x22, [sp, #32]
4002d8c4: 12001c95 and w21, w4, #0xff
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002d8c8: 4b020294 sub w20, w20, w2
{
4002d8cc: a90363f7 stp x23, x24, [sp, #48]
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002d8d0: 6b03029f cmp w20, w3
4002d8d4: 1a839294 csel w20, w20, w3, ls // ls = plast
{
4002d8d8: a9046bf9 stp x25, x26, [sp, #64]
4002d8dc: aa0003f7 mov x23, x0
4002d8e0: f9002bfb str x27, [sp, #80]
4002d8e4: 39405004 ldrb w4, [x0, #20]
4002d8e8: 39400805 ldrb w5, [x0, #2]
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d8ec: 4b050083 sub w3, w4, w5
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002d8f0: 35000081 cbnz w1, 4002d900 <fat_cluster_set+0x50> <== ALWAYS TAKEN
4002d8f4: 39405800 ldrb w0, [x0, #22] <== NOT EXECUTED
4002d8f8: f240041f tst x0, #0x3 <== NOT EXECUTED
4002d8fc: 54000961 b.ne 4002da28 <fat_cluster_set+0x178> // b.any <== NOT EXECUTED
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4002d900: 394032e0 ldrb w0, [x23, #12]
cln -= FAT_RSRVD_CLN;
4002d904: 51000821 sub w1, w1, #0x2
4002d908: b9403ef9 ldr w25, [x23, #60]
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4002d90c: 4b040000 sub w0, w0, w4
4002d910: 1ac32739 lsr w25, w25, w3
4002d914: 1ac02021 lsl w1, w1, w0
blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec);
4002d918: 0b010339 add w25, w25, w1
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;
4002d91c: 1ac4245a lsr w26, w2, w4
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
ssize_t bytes_written = 0;
4002d920: d280001b mov x27, #0x0 // #0
ssize_t ret;
cur_blk += blocks_in_offset;
4002d924: 0b190359 add w25, w26, w25
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
4002d928: 1ac4235a lsl w26, w26, w4
4002d92c: 4b1a005a sub w26, w2, w26
while ( (RC_OK == rc)
4002d930: 340002f4 cbz w20, 4002d98c <fat_cluster_set+0xdc> <== NEVER TAKEN
&& (0 < bytes_to_write))
{
uint32_t c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4002d934: b94012e0 ldr w0, [x23, #16]
fs_info->c.modified = true;
4002d938: 52800036 mov w22, #0x1 // #1
4002d93c: 4b1a0002 sub w2, w0, w26
4002d940: 6b14005f cmp w2, w20
4002d944: 1a949058 csel w24, w2, w20, ls // ls = plast
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
4002d948: 6b18005f cmp w2, w24
4002d94c: 1a989053 csel w19, w2, w24, ls // ls = plast
if (0 < bytes_to_write)
4002d950: 340004b3 cbz w19, 4002d9e4 <fat_cluster_set+0x134> <== NEVER TAKEN
4002d954: d503201f nop
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002d958: 4b050084 sub w4, w4, w5
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
4002d95c: 9101a3e3 add x3, sp, #0x68
if (bytes_to_write == fs_info->vol.bytes_per_block)
4002d960: 6b13001f cmp w0, w19
4002d964: 1ac42321 lsl w1, w25, w4
4002d968: 54000440 b.eq 4002d9f0 <fat_cluster_set+0x140> // b.none
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf);
4002d96c: 52800022 mov w2, #0x1 // #1
4002d970: aa1703e0 mov x0, x23
4002d974: 97ffff0f bl 4002d5b0 <fat_buf_access>
return rc;
4002d978: 93407c02 sxtw x2, w0
if (RC_OK == rc)
4002d97c: 34000440 cbz w0, 4002da04 <fat_cluster_set+0x154> <== ALWAYS TAKEN
fs_info,
cur_blk,
ofs_blk,
c,
pattern);
if (c != ret)
4002d980: eb38405f cmp x2, w24, uxtw
4002d984: 54000140 b.eq 4002d9ac <fat_cluster_set+0xfc> // b.none <== ALWAYS TAKEN
4002d988: 9280001b mov x27, #0xffffffffffffffff // #-1 <== NOT EXECUTED
}
if (RC_OK != rc)
return rc;
else
return bytes_written;
}
4002d98c: aa1b03e0 mov x0, x27
4002d990: a94153f3 ldp x19, x20, [sp, #16]
4002d994: a9425bf5 ldp x21, x22, [sp, #32]
4002d998: a94363f7 ldp x23, x24, [sp, #48]
4002d99c: a9446bf9 ldp x25, x26, [sp, #64]
4002d9a0: f9402bfb ldr x27, [sp, #80]
4002d9a4: a8c77bfd ldp x29, x30, [sp], #112
4002d9a8: d65f03c0 ret
bytes_written += ret;
4002d9ac: 8b02037b add x27, x27, x2
++cur_blk;
4002d9b0: 11000739 add w25, w25, #0x1
while ( (RC_OK == rc)
4002d9b4: 6b020294 subs w20, w20, w2
4002d9b8: 54fffea0 b.eq 4002d98c <fat_cluster_set+0xdc> // b.none
uint32_t c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4002d9bc: b94012e0 ldr w0, [x23, #16]
4002d9c0: 5280001a mov w26, #0x0 // #0
4002d9c4: 394052e4 ldrb w4, [x23, #20]
4002d9c8: 4b1a0002 sub w2, w0, w26
4002d9cc: 39400ae5 ldrb w5, [x23, #2]
4002d9d0: 6b14005f cmp w2, w20
4002d9d4: 1a949058 csel w24, w2, w20, ls // ls = plast
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
4002d9d8: 6b18005f cmp w2, w24
4002d9dc: 1a989053 csel w19, w2, w24, ls // ls = plast
if (0 < bytes_to_write)
4002d9e0: 35fffbd3 cbnz w19, 4002d958 <fat_cluster_set+0xa8> <== ALWAYS TAKEN
4002d9e4: d2800013 mov x19, #0x0 // #0 <== NOT EXECUTED
return bytes_to_write;
4002d9e8: aa1303e2 mov x2, x19 <== NOT EXECUTED
4002d9ec: 17ffffe5 b 4002d980 <fat_cluster_set+0xd0> <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
4002d9f0: 52800042 mov w2, #0x2 // #2
4002d9f4: aa1703e0 mov x0, x23
4002d9f8: 97fffeee bl 4002d5b0 <fat_buf_access>
return rc;
4002d9fc: 93407c02 sxtw x2, w0
if (RC_OK == rc)
4002da00: 35fffc00 cbnz w0, 4002d980 <fat_cluster_set+0xd0> <== NEVER TAKEN
memset(blk_buf + offset, pattern, bytes_to_write);
4002da04: f94037e0 ldr x0, [sp, #104]
4002da08: 2a1303f3 mov w19, w19
4002da0c: aa1303e2 mov x2, x19
4002da10: 2a1503e1 mov w1, w21
4002da14: 8b3a4000 add x0, x0, w26, uxtw
4002da18: 94003693 bl 4003b464 <memset>
return bytes_to_write;
4002da1c: aa1303e2 mov x2, x19
fs_info->c.modified = true;
4002da20: 3902d2f6 strb w22, [x23, #180]
4002da24: 17ffffd7 b 4002d980 <fat_cluster_set+0xd0>
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002da28: b9402ae1 ldr w1, [x23, #40] <== NOT EXECUTED
4002da2c: 1ac32439 lsr w25, w1, w3 <== NOT EXECUTED
return blk;
4002da30: 17ffffbb b 4002d91c <fat_cluster_set+0x6c> <== NOT EXECUTED
...
000000004002da40 <fat_cluster_write>:
fat_fs_info_t *fs_info,
const uint32_t start_cln,
const uint32_t offset,
const uint32_t count,
const void *buff)
{
4002da40: a9b97bfd stp x29, x30, [sp, #-112]!
4002da44: 910003fd mov x29, sp
4002da48: a90153f3 stp x19, x20, [sp, #16]
ssize_t rc = RC_OK;
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002da4c: b9400814 ldr w20, [x0, #8]
{
4002da50: a9025bf5 stp x21, x22, [sp, #32]
4002da54: aa0003f5 mov x21, x0
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002da58: 4b020294 sub w20, w20, w2
{
4002da5c: a9046bf9 stp x25, x26, [sp, #64]
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002da60: 6b03029f cmp w20, w3
{
4002da64: aa0403f6 mov x22, x4
4002da68: f9002bfb str x27, [sp, #80]
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
4002da6c: 1a839294 csel w20, w20, w3, ls // ls = plast
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002da70: 39405005 ldrb w5, [x0, #20]
4002da74: 39400800 ldrb w0, [x0, #2]
4002da78: 4b0000a4 sub w4, w5, w0
4002da7c: 35000081 cbnz w1, 4002da8c <fat_cluster_write+0x4c>
4002da80: 39405aa3 ldrb w3, [x21, #22]
4002da84: f240047f tst x3, #0x3
4002da88: 54000981 b.ne 4002dbb8 <fat_cluster_write+0x178> // b.any <== ALWAYS TAKEN
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4002da8c: 394032a3 ldrb w3, [x21, #12]
cln -= FAT_RSRVD_CLN;
4002da90: 51000821 sub w1, w1, #0x2
4002da94: b9403eb9 ldr w25, [x21, #60]
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);
4002da98: 1ac5245a lsr w26, w2, w5
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4002da9c: 4b050063 sub w3, w3, w5
4002daa0: 1ac42739 lsr w25, w25, w4
4002daa4: 1ac32021 lsl w1, w1, w3
blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec);
4002daa8: 0b010339 add w25, w25, w1
ssize_t bytes_written = 0;
uint8_t *buffer = (uint8_t*)buff;
ssize_t ret;
uint32_t c;
cur_blk += blocks_in_offset;
4002daac: 0b190359 add w25, w26, w25
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
4002dab0: 1ac5235a lsl w26, w26, w5
4002dab4: 4b1a005a sub w26, w2, w26
while ( (RC_OK == rc)
4002dab8: 340008f4 cbz w20, 4002dbd4 <fat_cluster_write+0x194> <== NEVER TAKEN
&& (0 < bytes_to_write))
{
c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4002dabc: b94012a3 ldr w3, [x21, #16]
ssize_t bytes_written = 0;
4002dac0: d280001b mov x27, #0x0 // #0
c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4002dac4: a90363f7 stp x23, x24, [sp, #48]
fs_info->c.modified = true;
4002dac8: 52800037 mov w23, #0x1 // #1
4002dacc: 4b1a0062 sub w2, w3, w26
4002dad0: 6b14005f cmp w2, w20
4002dad4: 1a949058 csel w24, w2, w20, ls // ls = plast
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
4002dad8: 6b18005f cmp w2, w24
4002dadc: 1a989053 csel w19, w2, w24, ls // ls = plast
if (0 < bytes_to_write)
4002dae0: 340004b3 cbz w19, 4002db74 <fat_cluster_write+0x134> <== NEVER TAKEN
4002dae4: d503201f nop
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002dae8: 4b0000a0 sub w0, w5, w0
if (bytes_to_write == fs_info->vol.bytes_per_block)
4002daec: 6b13007f cmp w3, w19
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
4002daf0: 9101a3e3 add x3, sp, #0x68
4002daf4: 1ac02321 lsl w1, w25, w0
if (bytes_to_write == fs_info->vol.bytes_per_block)
4002daf8: 54000440 b.eq 4002db80 <fat_cluster_write+0x140> // b.none
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf);
4002dafc: 52800022 mov w2, #0x1 // #1
4002db00: aa1503e0 mov x0, x21
4002db04: 97fffeab bl 4002d5b0 <fat_buf_access>
return rc;
4002db08: 93407c02 sxtw x2, w0
if (RC_OK == rc)
4002db0c: 34000440 cbz w0, 4002db94 <fat_cluster_write+0x154> <== ALWAYS TAKEN
fs_info,
cur_blk,
ofs_blk,
c,
&buffer[bytes_written]);
if (c != ret)
4002db10: eb38405f cmp x2, w24, uxtw
4002db14: 54000140 b.eq 4002db3c <fat_cluster_write+0xfc> // b.none <== ALWAYS TAKEN
4002db18: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002db1c: 9280001b mov x27, #0xffffffffffffffff // #-1 <== NOT EXECUTED
}
if (RC_OK != rc)
return rc;
else
return bytes_written;
}
4002db20: aa1b03e0 mov x0, x27
4002db24: a94153f3 ldp x19, x20, [sp, #16]
4002db28: a9425bf5 ldp x21, x22, [sp, #32]
4002db2c: a9446bf9 ldp x25, x26, [sp, #64]
4002db30: f9402bfb ldr x27, [sp, #80]
4002db34: a8c77bfd ldp x29, x30, [sp], #112
4002db38: d65f03c0 ret
bytes_written += ret;
4002db3c: 8b02037b add x27, x27, x2
++cur_blk;
4002db40: 11000739 add w25, w25, #0x1
while ( (RC_OK == rc)
4002db44: 6b020294 subs w20, w20, w2
4002db48: 54000560 b.eq 4002dbf4 <fat_cluster_write+0x1b4> // b.none <== ALWAYS TAKEN
c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4002db4c: b94012a3 ldr w3, [x21, #16] <== NOT EXECUTED
4002db50: 5280001a mov w26, #0x0 // #0 <== NOT EXECUTED
4002db54: 394052a5 ldrb w5, [x21, #20] <== NOT EXECUTED
4002db58: 4b1a0062 sub w2, w3, w26 <== NOT EXECUTED
4002db5c: 39400aa0 ldrb w0, [x21, #2] <== NOT EXECUTED
4002db60: 6b14005f cmp w2, w20 <== NOT EXECUTED
4002db64: 1a949058 csel w24, w2, w20, ls // ls = plast <== NOT EXECUTED
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
4002db68: 6b18005f cmp w2, w24 <== NOT EXECUTED
4002db6c: 1a989053 csel w19, w2, w24, ls // ls = plast <== NOT EXECUTED
if (0 < bytes_to_write)
4002db70: 35fffbd3 cbnz w19, 4002dae8 <fat_cluster_write+0xa8> <== NOT EXECUTED
4002db74: d2800013 mov x19, #0x0 // #0 <== NOT EXECUTED
return bytes_to_write;
4002db78: aa1303e2 mov x2, x19 <== NOT EXECUTED
4002db7c: 17ffffe5 b 4002db10 <fat_cluster_write+0xd0> <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
4002db80: 52800042 mov w2, #0x2 // #2
4002db84: aa1503e0 mov x0, x21
4002db88: 97fffe8a bl 4002d5b0 <fat_buf_access>
return rc;
4002db8c: 93407c02 sxtw x2, w0
if (RC_OK == rc)
4002db90: 35fffc00 cbnz w0, 4002db10 <fat_cluster_write+0xd0> <== NEVER TAKEN
memcpy(blk_buf + offset, buf, bytes_to_write);
4002db94: f94037e0 ldr x0, [sp, #104]
4002db98: 2a1303f3 mov w19, w19
4002db9c: aa1303e2 mov x2, x19
4002dba0: 8b1b02c1 add x1, x22, x27
4002dba4: 8b3a4000 add x0, x0, w26, uxtw
4002dba8: 94003614 bl 4003b3f8 <memcpy>
return bytes_to_write;
4002dbac: aa1303e2 mov x2, x19
fs_info->c.modified = true;
4002dbb0: 3902d2b7 strb w23, [x21, #180]
4002dbb4: 17ffffd7 b 4002db10 <fat_cluster_write+0xd0>
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4002dbb8: b9402aa1 ldr w1, [x21, #40]
uint32_t blocks_in_offset = (offset >> fs_info->vol.bytes_per_block_log2);
4002dbbc: 1ac5245a lsr w26, w2, w5
4002dbc0: 1ac42439 lsr w25, w1, w4
cur_blk += blocks_in_offset;
4002dbc4: 0b190359 add w25, w26, w25
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
4002dbc8: 1ac5235a lsl w26, w26, w5
4002dbcc: 4b1a005a sub w26, w2, w26
while ( (RC_OK == rc)
4002dbd0: 35fff774 cbnz w20, 4002dabc <fat_cluster_write+0x7c> <== ALWAYS TAKEN
ssize_t bytes_written = 0;
4002dbd4: d280001b mov x27, #0x0 // #0 <== NOT EXECUTED
}
4002dbd8: aa1b03e0 mov x0, x27 <== NOT EXECUTED
4002dbdc: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002dbe0: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002dbe4: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002dbe8: f9402bfb ldr x27, [sp, #80] <== NOT EXECUTED
4002dbec: a8c77bfd ldp x29, x30, [sp], #112 <== NOT EXECUTED
4002dbf0: d65f03c0 ret <== NOT EXECUTED
4002dbf4: a94363f7 ldp x23, x24, [sp, #48]
4002dbf8: 17ffffca b 4002db20 <fat_cluster_write+0xe0>
4002dbfc: 00000000 udf #0
000000004002f690 <fat_file_close>:
{
4002f690: a9be7bfd stp x29, x30, [sp, #-32]!
4002f694: 910003fd mov x29, sp
if (fat_fd->links_num > 1)
4002f698: b9401022 ldr w2, [x1, #16]
{
4002f69c: a90153f3 stp x19, x20, [sp, #16]
4002f6a0: aa0103f3 mov x19, x1
4002f6a4: aa0003f4 mov x20, x0
if (fat_fd->links_num > 1)
4002f6a8: 7100045f cmp w2, #0x1
4002f6ac: 540000e9 b.ls 4002f6c8 <fat_file_close+0x38> // b.plast
fat_fd->links_num--;
4002f6b0: 51000442 sub w2, w2, #0x1
4002f6b4: b9001022 str w2, [x1, #16]
rc = fat_buf_release(fs_info);
4002f6b8: aa1403e0 mov x0, x20
}
4002f6bc: a94153f3 ldp x19, x20, [sp, #16]
4002f6c0: a8c27bfd ldp x29, x30, [sp], #32
rc = fat_buf_release(fs_info);
4002f6c4: 17fff7ef b 4002d680 <fat_buf_release>
fat_file_update(fs_info, fat_fd);
4002f6c8: 97fffefa bl 4002f2b0 <fat_file_update>
if (fat_fd->flags & FAT_FILE_REMOVED)
4002f6cc: 3940e260 ldrb w0, [x19, #56]
4002f6d0: 37000100 tbnz w0, #0, 4002f6f0 <fat_file_close+0x60>
if (fat_ino_is_unique(fs_info, fat_fd->ino))
4002f6d4: b9401661 ldr w1, [x19, #20]
4002f6d8: aa1403e0 mov x0, x20
4002f6dc: 97fffbe9 bl 4002e680 <fat_ino_is_unique>
4002f6e0: 72001c1f tst w0, #0xff
4002f6e4: 54000260 b.eq 4002f730 <fat_file_close+0xa0> // b.none
fat_fd->links_num = 0;
4002f6e8: b900127f str wzr, [x19, #16]
4002f6ec: 17fffff3 b 4002f6b8 <fat_file_close+0x28>
rc = fat_file_truncate(fs_info, fat_fd, 0);
4002f6f0: aa1303e1 mov x1, x19
4002f6f4: aa1403e0 mov x0, x20
4002f6f8: 52800002 mov w2, #0x0 // #0
4002f6fc: 97ffffa1 bl 4002f580 <fat_file_truncate>
if (rc == RC_OK)
4002f700: 35fffdc0 cbnz w0, 4002f6b8 <fat_file_close+0x28> <== NEVER TAKEN
previous = the_node->previous;
4002f704: a9400a63 ldp x3, x2, [x19]
if (fat_ino_is_unique(fs_info, fat_fd->ino))
4002f708: aa1403e0 mov x0, x20
_hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd);
4002f70c: b9401661 ldr w1, [x19, #20]
next->previous = previous;
4002f710: f9000462 str x2, [x3, #8]
previous->next = next;
4002f714: f9000043 str x3, [x2]
if (fat_ino_is_unique(fs_info, fat_fd->ino))
4002f718: 97fffbda bl 4002e680 <fat_ino_is_unique>
4002f71c: 72001c1f tst w0, #0xff
4002f720: 54000141 b.ne 4002f748 <fat_file_close+0xb8> // b.any <== NEVER TAKEN
free(fat_fd);
4002f724: aa1303e0 mov x0, x19
4002f728: 97ffc996 bl 40021d80 <free>
4002f72c: 17ffffe3 b 4002f6b8 <fat_file_close+0x28>
previous = the_node->previous;
4002f730: a9400662 ldp x2, x1, [x19]
next->previous = previous;
4002f734: f9000441 str x1, [x2, #8]
free(fat_fd);
4002f738: aa1303e0 mov x0, x19
previous->next = next;
4002f73c: f9000022 str x2, [x1]
4002f740: 97ffc990 bl 40021d80 <free>
4002f744: 17ffffdd b 4002f6b8 <fat_file_close+0x28>
fat_free_unique_ino(fs_info, fat_fd->ino);
4002f748: b9401661 ldr w1, [x19, #20] <== NOT EXECUTED
4002f74c: aa1403e0 mov x0, x20 <== NOT EXECUTED
4002f750: 97fffbc0 bl 4002e650 <fat_free_unique_ino> <== NOT EXECUTED
4002f754: 17fffff4 b 4002f724 <fat_file_close+0x94> <== NOT EXECUTED
...
000000004002f850 <fat_file_extend>:
{
4002f850: a9b97bfd stp x29, x30, [sp, #-112]!
4002f854: 910003fd mov x29, sp
4002f858: a90363f7 stp x23, x24, [sp, #48]
4002f85c: a9046bf9 stp x25, x26, [sp, #64]
4002f860: 12001c5a and w26, w2, #0xff
4002f864: aa0403f9 mov x25, x4
*a_length = new_length;
4002f868: b9000083 str w3, [x4]
uint32_t chain = 0;
4002f86c: b90063ff str wzr, [sp, #96]
if (new_length <= fat_fd->fat_file_size)
4002f870: b9402022 ldr w2, [x1, #32]
uint32_t last_cl = 0;
4002f874: b9006bff str wzr, [sp, #104]
if (new_length <= fat_fd->fat_file_size)
4002f878: 6b03005f cmp w2, w3
4002f87c: 540002c2 b.cs 4002f8d4 <fat_file_extend+0x84> // b.hs, b.nlast
4002f880: a9025bf5 stp x21, x22, [sp, #32]
4002f884: aa0003f5 mov x21, x0
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002f888: aa0103f8 mov x24, x1
4002f88c: f9401420 ldr x0, [x1, #40]
4002f890: a90153f3 stp x19, x20, [sp, #16]
4002f894: 2a0303f3 mov w19, w3
4002f898: f100041f cmp x0, #0x1
4002f89c: 54000a00 b.eq 4002f9dc <fat_file_extend+0x18c> // b.none
bytes_remain = (fs_info->vol.bpc -
4002f8a0: b9400ab4 ldr w20, [x21, #8]
bytes2add = new_length - fat_fd->fat_file_size;
4002f8a4: 4b020276 sub w22, w19, w2
4002f8a8: a90573fb stp x27, x28, [sp, #80]
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
4002f8ac: 51000680 sub w0, w20, #0x1
4002f8b0: 0a00005b and w27, w2, w0
bytes_remain = (fs_info->vol.bpc -
4002f8b4: 4b1b0294 sub w20, w20, w27
4002f8b8: 0a000294 and w20, w20, w0
if (bytes2add > bytes_remain)
4002f8bc: 6b16029f cmp w20, w22
4002f8c0: 54000163 b.cc 4002f8ec <fat_file_extend+0x9c> // b.lo, b.ul, b.last
if (zero_fill && bytes_remain > 0) {
4002f8c4: 35000a1a cbnz w26, 4002fa04 <fat_file_extend+0x1b4>
4002f8c8: a94153f3 ldp x19, x20, [sp, #16]
4002f8cc: a9425bf5 ldp x21, x22, [sp, #32]
4002f8d0: a94573fb ldp x27, x28, [sp, #80]
return RC_OK;
4002f8d4: 52800017 mov w23, #0x0 // #0
}
4002f8d8: 2a1703e0 mov w0, w23
4002f8dc: a94363f7 ldp x23, x24, [sp, #48]
4002f8e0: a9446bf9 ldp x25, x26, [sp, #64]
4002f8e4: a8c77bfd ldp x29, x30, [sp], #112
4002f8e8: d65f03c0 ret
if (zero_fill && bytes_remain > 0) {
4002f8ec: 7100029f cmp w20, #0x0
bytes2add -= bytes_remain;
4002f8f0: 4b1402dc sub w28, w22, w20
if (zero_fill && bytes_remain > 0) {
4002f8f4: 7a401b44 ccmp w26, #0x0, #0x4, ne // ne = any
4002f8f8: 54000881 b.ne 4002fa08 <fat_file_extend+0x1b8> // b.any <== NEVER TAKEN
if (bytes2add == 0)
4002f8fc: 34fffe7c cbz w28, 4002f8c8 <fat_file_extend+0x78>
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
4002f900: 394032a2 ldrb w2, [x21, #12]
4002f904: 51000796 sub w22, w28, #0x1
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
4002f908: 2a1a03e5 mov w5, w26
4002f90c: 9101a3e4 add x4, sp, #0x68
4002f910: 9101b3e3 add x3, sp, #0x6c
4002f914: 910183e1 add x1, sp, #0x60
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
4002f918: 1ac226d6 lsr w22, w22, w2
4002f91c: 110006d6 add w22, w22, #0x1
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
4002f920: 2a1603e2 mov w2, w22
4002f924: aa1503e0 mov x0, x21
4002f928: 97fffcde bl 4002eca0 <fat_scan_fat_for_free_clusters>
4002f92c: 2a0003f7 mov w23, w0
if (rc != RC_OK)
4002f930: 350007c0 cbnz w0, 4002fa28 <fat_file_extend+0x1d8> <== NEVER TAKEN
if ((cls_added == 0) && (bytes_remain == 0))
4002f934: b9406fe0 ldr w0, [sp, #108]
4002f938: 2a140014 orr w20, w0, w20
4002f93c: 34000d74 cbz w20, 4002fae8 <fat_file_extend+0x298>
if (cls2add != cls_added)
4002f940: 6b16001f cmp w0, w22
4002f944: 540000e0 b.eq 4002f960 <fat_file_extend+0x110> // b.none
uint32_t missing = (cls2add - cls_added) << fs_info->vol.bpc_log2;
4002f948: 394032a1 ldrb w1, [x21, #12]
4002f94c: 4b0002d6 sub w22, w22, w0
4002f950: 1ac122d6 lsl w22, w22, w1
new_length -= bytes2add < missing ? bytes2add : missing;
4002f954: 6b1c02df cmp w22, w28
4002f958: 1a9c92d6 csel w22, w22, w28, ls // ls = plast
4002f95c: 4b160273 sub w19, w19, w22
if (cls_added > 0)
4002f960: 34000880 cbz w0, 4002fa70 <fat_file_extend+0x220>
if ( fat_fd->fat_file_size == 0 )
4002f964: b9402303 ldr w3, [x24, #32]
4002f968: 340009e3 cbz w3, 4002faa4 <fat_file_extend+0x254>
if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE)
4002f96c: b9404701 ldr w1, [x24, #68]
4002f970: 3100043f cmn w1, #0x1
4002f974: 54000a60 b.eq 4002fac0 <fat_file_extend+0x270> // b.none <== NEVER TAKEN
old_last_cl = fat_fd->map.last_cln;
4002f978: b90067e1 str w1, [sp, #100]
rc = fat_set_fat_cluster(fs_info, old_last_cl, chain);
4002f97c: b94063e2 ldr w2, [sp, #96]
4002f980: aa1503e0 mov x0, x21
4002f984: 97fffbcf bl 4002e8c0 <fat_set_fat_cluster>
4002f988: 2a0003e2 mov w2, w0
if ( rc != RC_OK )
4002f98c: 35000180 cbnz w0, 4002f9bc <fat_file_extend+0x16c> <== NEVER TAKEN
fat_buf_release(fs_info);
4002f990: aa1503e0 mov x0, x21
4002f994: 97fff73b bl 4002d680 <fat_buf_release>
if (fat_fd->fat_file_type == FAT_DIRECTORY)
4002f998: b9401b00 ldr w0, [x24, #24]
fat_fd->map.last_cln = last_cl;
4002f99c: b9406be1 ldr w1, [sp, #104]
4002f9a0: b9004701 str w1, [x24, #68]
if (fat_fd->fat_file_type == FAT_DIRECTORY)
4002f9a4: 35000660 cbnz w0, 4002fa70 <fat_file_extend+0x220>
rc = fat_init_clusters_chain(fs_info, chain);
4002f9a8: b94063e1 ldr w1, [sp, #96]
4002f9ac: aa1503e0 mov x0, x21
4002f9b0: 97fffad0 bl 4002e4f0 <fat_init_clusters_chain>
4002f9b4: 2a0003e2 mov w2, w0
if ( rc != RC_OK )
4002f9b8: 340005c0 cbz w0, 4002fa70 <fat_file_extend+0x220> <== ALWAYS TAKEN
fat_free_fat_clusters_chain(fs_info, chain);
4002f9bc: b94063e1 ldr w1, [sp, #96] <== NOT EXECUTED
4002f9c0: aa1503e0 mov x0, x21 <== NOT EXECUTED
return rc;
4002f9c4: 2a0203f7 mov w23, w2 <== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, chain);
4002f9c8: 97fffc72 bl 4002eb90 <fat_free_fat_clusters_chain> <== NOT EXECUTED
return rc;
4002f9cc: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002f9d0: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002f9d4: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002f9d8: 17ffffc0 b 4002f8d8 <fat_file_extend+0x88> <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002f9dc: 39405aa0 ldrb w0, [x21, #22]
4002f9e0: f240041f tst x0, #0x3
4002f9e4: 54fff5e0 b.eq 4002f8a0 <fat_file_extend+0x50> // b.none <== NEVER TAKEN
rtems_set_errno_and_return_minus_one( ENOSPC );
4002f9e8: 94002be1 bl 4003a96c <__errno>
4002f9ec: 12800017 mov w23, #0xffffffff // #-1
4002f9f0: 52800381 mov w1, #0x1c // #28
4002f9f4: a94153f3 ldp x19, x20, [sp, #16]
4002f9f8: a9425bf5 ldp x21, x22, [sp, #32]
4002f9fc: b9000001 str w1, [x0]
4002fa00: 17ffffb6 b 4002f8d8 <fat_file_extend+0x88>
bytes2add = 0;
4002fa04: 5280001c mov w28, #0x0 // #0
uint32_t cl_start = start >> fs_info->vol.bpc_log2;
4002fa08: 394032a4 ldrb w4, [x21, #12]
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002fa0c: 9101b3e3 add x3, sp, #0x6c
4002fa10: aa1803e1 mov x1, x24
4002fa14: aa1503e0 mov x0, x21
4002fa18: 1ac42442 lsr w2, w2, w4
4002fa1c: 97fffd35 bl 4002eef0 <fat_file_lseek>
4002fa20: 2a0003f7 mov w23, w0
if (rc != RC_OK)
4002fa24: 34000120 cbz w0, 4002fa48 <fat_file_extend+0x1f8> <== ALWAYS TAKEN
}
4002fa28: 2a1703e0 mov w0, w23 <== NOT EXECUTED
4002fa2c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002fa30: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002fa34: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002fa38: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002fa3c: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002fa40: a8c77bfd ldp x29, x30, [sp], #112 <== NOT EXECUTED
4002fa44: d65f03c0 ret <== NOT EXECUTED
bytes_written = fat_cluster_set (fs_info, cur_cln, ofs, bytes_remain, 0);
4002fa48: b9406fe1 ldr w1, [sp, #108]
4002fa4c: 2a1b03e2 mov w2, w27
4002fa50: 2a1403e3 mov w3, w20
4002fa54: aa1503e0 mov x0, x21
4002fa58: 52800004 mov w4, #0x0 // #0
return -1;
4002fa5c: 12800017 mov w23, #0xffffffff // #-1
bytes_written = fat_cluster_set (fs_info, cur_cln, ofs, bytes_remain, 0);
4002fa60: 97fff794 bl 4002d8b0 <fat_cluster_set>
if (bytes_remain != bytes_written)
4002fa64: eb34401f cmp x0, w20, uxtw
4002fa68: 54fffe01 b.ne 4002fa28 <fat_file_extend+0x1d8> // b.any <== NEVER TAKEN
4002fa6c: 17ffffa4 b 4002f8fc <fat_file_extend+0xac>
*a_length = new_length;
4002fa70: b9000333 str w19, [x25]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4002fa74: 3940e300 ldrb w0, [x24, #56]
4002fa78: 321f0000 orr w0, w0, #0x2
4002fa7c: 3900e300 strb w0, [x24, #56]
}
4002fa80: 2a1703e0 mov w0, w23
return RC_OK;
4002fa84: a9425bf5 ldp x21, x22, [sp, #32]
4002fa88: a94573fb ldp x27, x28, [sp, #80]
fat_fd->fat_file_size = s;
4002fa8c: b9002313 str w19, [x24, #32]
4002fa90: a94153f3 ldp x19, x20, [sp, #16]
}
4002fa94: a94363f7 ldp x23, x24, [sp, #48]
4002fa98: a9446bf9 ldp x25, x26, [sp, #64]
4002fa9c: a8c77bfd ldp x29, x30, [sp], #112
4002faa0: d65f03c0 ret
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4002faa4: 3940e300 ldrb w0, [x24, #56]
fat_fd->map.disk_cln = chain;
4002faa8: b94063e1 ldr w1, [sp, #96]
4002faac: 321f0000 orr w0, w0, #0x2
fat_fd->cln = cln;
4002fab0: b9002701 str w1, [x24, #36]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4002fab4: 3900e300 strb w0, [x24, #56]
4002fab8: 2907871f stp wzr, w1, [x24, #60]
}
4002fabc: 17ffffb7 b 4002f998 <fat_file_extend+0x148>
rc = fat_file_ioctl(fs_info, fat_fd, F_CLU_NUM,
4002fac0: aa1803e1 mov x1, x24 <== NOT EXECUTED
4002fac4: 52800022 mov w2, #0x1 // #1 <== NOT EXECUTED
4002fac8: 51000463 sub w3, w3, #0x1 <== NOT EXECUTED
4002facc: 910193e4 add x4, sp, #0x64 <== NOT EXECUTED
4002fad0: aa1503e0 mov x0, x21 <== NOT EXECUTED
4002fad4: 97ffff23 bl 4002f760 <fat_file_ioctl> <== NOT EXECUTED
rc = fat_set_fat_cluster(fs_info, old_last_cl, chain);
4002fad8: b94067e1 ldr w1, [sp, #100] <== NOT EXECUTED
rc = fat_file_ioctl(fs_info, fat_fd, F_CLU_NUM,
4002fadc: 2a0003e2 mov w2, w0 <== NOT EXECUTED
if ( rc != RC_OK )
4002fae0: 34fff4e0 cbz w0, 4002f97c <fat_file_extend+0x12c> <== NOT EXECUTED
4002fae4: 17ffffb6 b 4002f9bc <fat_file_extend+0x16c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOSPC);
4002fae8: 94002ba1 bl 4003a96c <__errno>
4002faec: 12800017 mov w23, #0xffffffff // #-1
4002faf0: 52800381 mov w1, #0x1c // #28
4002faf4: a94153f3 ldp x19, x20, [sp, #16]
4002faf8: a9425bf5 ldp x21, x22, [sp, #32]
4002fafc: a94573fb ldp x27, x28, [sp, #80]
4002fb00: b9000001 str w1, [x0]
4002fb04: 17ffff75 b 4002f8d8 <fat_file_extend+0x88>
...
000000004002f760 <fat_file_ioctl>:
{
4002f760: a9ba7bfd stp x29, x30, [sp, #-96]!
va_start(ap, cmd);
4002f764: 128001e5 mov w5, #0xfffffff0 // #-16
switch (cmd)
4002f768: 7100045f cmp w2, #0x1
{
4002f76c: 910003fd mov x29, sp
va_start(ap, cmd);
4002f770: 910143e6 add x6, sp, #0x50
4002f774: 910183e7 add x7, sp, #0x60
uint32_t cur_cln = 0;
4002f778: b9002fff str wzr, [sp, #44]
va_start(ap, cmd);
4002f77c: a9031fe7 stp x7, x7, [sp, #48]
4002f780: f90023e6 str x6, [sp, #64]
4002f784: 29097fe5 stp w5, wzr, [sp, #72]
{
4002f788: a90513e3 stp x3, x4, [sp, #80]
switch (cmd)
4002f78c: 54000361 b.ne 4002f7f8 <fat_file_ioctl+0x98> // b.any <== NEVER TAKEN
if ( pos >= fat_fd->fat_file_size ) {
4002f790: b9402023 ldr w3, [x1, #32]
pos = va_arg(ap, uint32_t);
4002f794: b94053e2 ldr w2, [sp, #80]
4002f798: f9000bf3 str x19, [sp, #16]
ret = va_arg(ap, uint32_t *);
4002f79c: aa0403f3 mov x19, x4
4002f7a0: b9004bff str wzr, [sp, #72]
if ( pos >= fat_fd->fat_file_size ) {
4002f7a4: 6b02007f cmp w3, w2
4002f7a8: 54000409 b.ls 4002f828 <fat_file_ioctl+0xc8> // b.plast <== NEVER TAKEN
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002f7ac: f9401423 ldr x3, [x1, #40]
4002f7b0: f100047f cmp x3, #0x1
4002f7b4: 54000121 b.ne 4002f7d8 <fat_file_ioctl+0x78> // b.any
4002f7b8: 39405803 ldrb w3, [x0, #22]
4002f7bc: f240047f tst x3, #0x3
4002f7c0: 540000c0 b.eq 4002f7d8 <fat_file_ioctl+0x78> // b.none
*ret = 0;
4002f7c4: b900009f str wzr, [x4]
rc = RC_OK;
4002f7c8: 52800000 mov w0, #0x0 // #0
break;
4002f7cc: f9400bf3 ldr x19, [sp, #16]
}
4002f7d0: a8c67bfd ldp x29, x30, [sp], #96
4002f7d4: d65f03c0 ret
cl_start = pos >> fs_info->vol.bpc_log2;
4002f7d8: 39403004 ldrb w4, [x0, #12]
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002f7dc: 9100b3e3 add x3, sp, #0x2c
4002f7e0: 1ac42442 lsr w2, w2, w4
4002f7e4: 97fffdc3 bl 4002eef0 <fat_file_lseek>
if ( rc != RC_OK )
4002f7e8: 34000160 cbz w0, 4002f814 <fat_file_ioctl+0xb4> <== ALWAYS TAKEN
4002f7ec: f9400bf3 ldr x19, [sp, #16] <== NOT EXECUTED
}
4002f7f0: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002f7f4: d65f03c0 ret <== NOT EXECUTED
errno = EINVAL;
4002f7f8: 94002c5d bl 4003a96c <__errno> <== NOT EXECUTED
4002f7fc: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002f800: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED
rc = -1;
4002f804: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
errno = EINVAL;
4002f808: b9000022 str w2, [x1] <== NOT EXECUTED
}
4002f80c: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002f810: d65f03c0 ret <== NOT EXECUTED
*ret = cur_cln;
4002f814: b9402fe1 ldr w1, [sp, #44]
4002f818: b9000261 str w1, [x19]
break;
4002f81c: f9400bf3 ldr x19, [sp, #16]
}
4002f820: a8c67bfd ldp x29, x30, [sp], #96
4002f824: d65f03c0 ret
rtems_set_errno_and_return_minus_one( EIO );
4002f828: 94002c51 bl 4003a96c <__errno> <== NOT EXECUTED
4002f82c: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002f830: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
4002f834: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002f838: f9400bf3 ldr x19, [sp, #16] <== NOT EXECUTED
4002f83c: b9000022 str w2, [x1] <== NOT EXECUTED
4002f840: 17fffff3 b 4002f80c <fat_file_ioctl+0xac> <== NOT EXECUTED
...
000000004002efc0 <fat_file_open>:
{
4002efc0: a9bb7bfd stp x29, x30, [sp, #-80]!
4002efc4: 910003fd mov x29, sp
4002efc8: a90153f3 stp x19, x20, [sp, #16]
4002efcc: aa0003f3 mov x19, x0
4002efd0: a9025bf5 stp x21, x22, [sp, #32]
4002efd4: aa0103f6 mov x22, x1
4002efd8: 29400420 ldp w0, w1, [x1]
4002efdc: a90363f7 stp x23, x24, [sp, #48]
4002efe0: aa0203f8 mov x24, x2
if (cln == 1)
4002efe4: 7100041f cmp w0, #0x1
4002efe8: 54000120 b.eq 4002f00c <fat_file_open+0x4c> // b.none
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002efec: 34000f80 cbz w0, 4002f1dc <fat_file_open+0x21c>
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002eff0: 39401663 ldrb w3, [x19, #5]
4002eff4: 51000800 sub w0, w0, #0x2
4002eff8: b9403e62 ldr w2, [x19, #60]
4002effc: 1ac32000 lsl w0, w0, w3
4002f000: 0b020000 add w0, w0, w2
fs_info->vol.sec_mul);
4002f004: 39400e74 ldrb w20, [x19, #3]
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
4002f008: 1ad42000 lsl w0, w0, w20
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
4002f00c: d3452022 ubfx x2, x1, #5, #4
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
4002f010: 52800303 mov w3, #0x18 // #24
uint32_t mod = (key1) % FAT_HASH_MODULE;
4002f014: 12000057 and w23, w2, #0x1
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
4002f018: 0b412414 add w20, w0, w1, lsr #9
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
4002f01c: f9404660 ldr x0, [x19, #136]
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
4002f020: 0b141054 add w20, w2, w20, lsl #4
4002f024: 9ba37ef7 umull x23, w23, w3
4002f028: 8b170015 add x21, x0, x23
return &the_chain->Tail.Node;
4002f02c: 910022b5 add x21, x21, #0x8
return _Chain_Immutable_head( the_chain )->next;
4002f030: f8776803 ldr x3, [x0, x23]
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
4002f034: eb15007f cmp x3, x21
4002f038: 540002e0 b.eq 4002f094 <fat_file_open+0xd4> // b.none
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f03c: 29451060 ldp w0, w4, [x3, #40]
4002f040: 51000801 sub w1, w0, #0x2
if (cln == 1)
4002f044: 7100041f cmp w0, #0x1
4002f048: 54000160 b.eq 4002f074 <fat_file_open+0xb4> // b.none
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002f04c: 35000080 cbnz w0, 4002f05c <fat_file_open+0x9c>
4002f050: 39405a60 ldrb w0, [x19, #22]
4002f054: f240041f tst x0, #0x3
4002f058: 54000cc1 b.ne 4002f1f0 <fat_file_open+0x230> // b.any <== ALWAYS TAKEN
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f05c: 39401662 ldrb w2, [x19, #5]
4002f060: b9403e60 ldr w0, [x19, #60]
4002f064: 1ac22021 lsl w1, w1, w2
4002f068: 0b000020 add w0, w1, w0
fs_info->vol.sec_mul);
4002f06c: 39400e61 ldrb w1, [x19, #3]
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
4002f070: 1ac12000 lsl w0, w0, w1
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
4002f074: 0b442400 add w0, w0, w4, lsr #9
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
4002f078: d3452084 ubfx x4, x4, #5, #4
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
4002f07c: 0b001080 add w0, w4, w0, lsl #4
if ( (key1) == ck)
4002f080: 6b00029f cmp w20, w0
4002f084: 54000980 b.eq 4002f1b4 <fat_file_open+0x1f4> // b.none
the_node = the_node->next;
4002f088: f9400063 ldr x3, [x3]
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
4002f08c: eb15007f cmp x3, x21
4002f090: 54fffd61 b.ne 4002f03c <fat_file_open+0x7c> // b.any
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
4002f094: f9404a60 ldr x0, [x19, #144]
4002f098: 8b170002 add x2, x0, x23
4002f09c: f8776804 ldr x4, [x0, x23]
return &the_chain->Tail.Node;
4002f0a0: f90023f9 str x25, [sp, #64]
4002f0a4: 91002042 add x2, x2, #0x8
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
4002f0a8: eb02009f cmp x4, x2
4002f0ac: 540000a1 b.ne 4002f0c0 <fat_file_open+0x100> // b.any <== NEVER TAKEN
4002f0b0: 14000054 b 4002f200 <fat_file_open+0x240>
the_node = the_node->next;
4002f0b4: f9400084 ldr x4, [x4] <== NOT EXECUTED
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
4002f0b8: eb02009f cmp x4, x2 <== NOT EXECUTED
4002f0bc: 54000a20 b.eq 4002f200 <fat_file_open+0x240> // b.none <== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f0c0: 29451483 ldp w3, w5, [x4, #40] <== NOT EXECUTED
4002f0c4: 51000860 sub w0, w3, #0x2 <== NOT EXECUTED
if (cln == 1)
4002f0c8: 7100047f cmp w3, #0x1 <== NOT EXECUTED
4002f0cc: 54000160 b.eq 4002f0f8 <fat_file_open+0x138> // b.none <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002f0d0: 35000083 cbnz w3, 4002f0e0 <fat_file_open+0x120> <== NOT EXECUTED
4002f0d4: 39405a61 ldrb w1, [x19, #22] <== NOT EXECUTED
4002f0d8: f240043f tst x1, #0x3 <== NOT EXECUTED
4002f0dc: 540008e1 b.ne 4002f1f8 <fat_file_open+0x238> // b.any <== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f0e0: 39401661 ldrb w1, [x19, #5] <== NOT EXECUTED
4002f0e4: b9403e63 ldr w3, [x19, #60] <== NOT EXECUTED
4002f0e8: 1ac12000 lsl w0, w0, w1 <== NOT EXECUTED
4002f0ec: 0b030003 add w3, w0, w3 <== NOT EXECUTED
fs_info->vol.sec_mul);
4002f0f0: 39400e60 ldrb w0, [x19, #3] <== NOT EXECUTED
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
4002f0f4: 1ac02063 lsl w3, w3, w0 <== NOT EXECUTED
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
4002f0f8: 0b452463 add w3, w3, w5, lsr #9 <== NOT EXECUTED
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
4002f0fc: d34520a5 ubfx x5, x5, #5, #4 <== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
4002f100: 0b0310a3 add w3, w5, w3, lsl #4 <== NOT EXECUTED
if ( (key1) == ck)
4002f104: 6b03029f cmp w20, w3 <== NOT EXECUTED
4002f108: 54fffd61 b.ne 4002f0b4 <fat_file_open+0xf4> // b.any <== NOT EXECUTED
if ( ((key2) == 0) || ((key2) == ffd->ino) )
4002f10c: 34000094 cbz w20, 4002f11c <fat_file_open+0x15c> <== NOT EXECUTED
4002f110: b9401480 ldr w0, [x4, #20] <== NOT EXECUTED
4002f114: 6b00029f cmp w20, w0 <== NOT EXECUTED
4002f118: 54fffce1 b.ne 4002f0b4 <fat_file_open+0xf4> // b.any <== NOT EXECUTED
lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t));
4002f11c: d2800b01 mov x1, #0x58 // #88 <== NOT EXECUTED
4002f120: d2800020 mov x0, #0x1 // #1 <== NOT EXECUTED
4002f124: 97fff52f bl 4002c5e0 <calloc> <== NOT EXECUTED
4002f128: f9000300 str x0, [x24] <== NOT EXECUTED
4002f12c: aa0003f9 mov x25, x0 <== NOT EXECUTED
if ( lfat_fd == NULL )
4002f130: b4000900 cbz x0, 4002f250 <fat_file_open+0x290> <== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f134: 3940e322 ldrb w2, [x25, #56] <== NOT EXECUTED
lfat_fd->links_num = 1;
4002f138: 52800020 mov w0, #0x1 // #1 <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
4002f13c: 294012c3 ldp w3, w4, [x22] <== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f140: 121f7842 and w2, w2, #0xfffffffe <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
4002f144: 29051323 stp w3, w4, [x25, #40] <== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4002f148: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
4002f14c: b9400ac3 ldr w3, [x22, #8] <== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f150: 3900e322 strb w2, [x25, #56] <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
4002f154: b9400ec2 ldr w2, [x22, #12] <== NOT EXECUTED
lfat_fd->links_num = 1;
4002f158: b9001320 str w0, [x25, #16] <== NOT EXECUTED
lfat_fd->ino = fat_get_unique_ino(fs_info);
4002f15c: aa1303e0 mov x0, x19 <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
4002f160: b9003323 str w3, [x25, #48] <== NOT EXECUTED
4002f164: b9003722 str w2, [x25, #52] <== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4002f168: b9004734 str w20, [x25, #68] <== NOT EXECUTED
lfat_fd->ino = fat_get_unique_ino(fs_info);
4002f16c: 97fffd05 bl 4002e580 <fat_get_unique_ino> <== NOT EXECUTED
4002f170: b9001720 str w0, [x25, #20] <== NOT EXECUTED
if ( lfat_fd->ino == 0 )
4002f174: 340007c0 cbz w0, 4002f26c <fat_file_open+0x2ac> <== NOT EXECUTED
rtems_chain_append_unprotected((hash) + ((key1) % FAT_HASH_MODULE), &(el)->link);
4002f178: f9404675 ldr x21, [x19, #136] <== NOT EXECUTED
4002f17c: 8b1702b5 add x21, x21, x23 <== NOT EXECUTED
return &the_chain->Tail.Node;
4002f180: 910022b5 add x21, x21, #0x8 <== NOT EXECUTED
old_last = tail->previous;
4002f184: f94006a1 ldr x1, [x21, #8]
the_node->next = tail;
4002f188: f9000335 str x21, [x25]
tail->previous = the_node;
4002f18c: f90006b9 str x25, [x21, #8]
return RC_OK;
4002f190: 52800000 mov w0, #0x0 // #0
}
4002f194: a94153f3 ldp x19, x20, [sp, #16]
old_last->next = the_node;
4002f198: f9000039 str x25, [x1]
the_node->previous = old_last;
4002f19c: f9000721 str x1, [x25, #8]
4002f1a0: a9425bf5 ldp x21, x22, [sp, #32]
4002f1a4: a94363f7 ldp x23, x24, [sp, #48]
return RC_OK;
4002f1a8: f94023f9 ldr x25, [sp, #64]
}
4002f1ac: a8c57bfd ldp x29, x30, [sp], #80
4002f1b0: d65f03c0 ret
lfat_fd->links_num++;
4002f1b4: b9401061 ldr w1, [x3, #16]
return rc;
4002f1b8: 52800000 mov w0, #0x0 // #0
(*fat_fd) = lfat_fd;
4002f1bc: f9000303 str x3, [x24]
lfat_fd->links_num++;
4002f1c0: 11000421 add w1, w1, #0x1
4002f1c4: b9001061 str w1, [x3, #16]
}
4002f1c8: a94153f3 ldp x19, x20, [sp, #16]
4002f1cc: a9425bf5 ldp x21, x22, [sp, #32]
4002f1d0: a94363f7 ldp x23, x24, [sp, #48]
4002f1d4: a8c57bfd ldp x29, x30, [sp], #80
4002f1d8: d65f03c0 ret
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002f1dc: 39405a62 ldrb w2, [x19, #22]
4002f1e0: f240045f tst x2, #0x3
4002f1e4: 54fff060 b.eq 4002eff0 <fat_file_open+0x30> // b.none <== NEVER TAKEN
return fs_info->vol.rdir_loc;
4002f1e8: b9402a60 ldr w0, [x19, #40]
4002f1ec: 17ffff86 b 4002f004 <fat_file_open+0x44>
4002f1f0: b9402a60 ldr w0, [x19, #40]
4002f1f4: 17ffff9e b 4002f06c <fat_file_open+0xac>
4002f1f8: b9402a63 ldr w3, [x19, #40] <== NOT EXECUTED
4002f1fc: 17ffffbd b 4002f0f0 <fat_file_open+0x130> <== NOT EXECUTED
lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t));
4002f200: d2800b01 mov x1, #0x58 // #88
4002f204: d2800020 mov x0, #0x1 // #1
4002f208: 97fff4f6 bl 4002c5e0 <calloc>
4002f20c: f9000300 str x0, [x24]
4002f210: aa0003f9 mov x25, x0
if ( lfat_fd == NULL )
4002f214: b40001e0 cbz x0, 4002f250 <fat_file_open+0x290> <== NEVER TAKEN
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f218: 3940e321 ldrb w1, [x25, #56]
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4002f21c: 12800002 mov w2, #0xffffffff // #-1
lfat_fd->dir_pos = *dir_pos;
4002f220: b94002c3 ldr w3, [x22]
lfat_fd->links_num = 1;
4002f224: 52800024 mov w4, #0x1 // #1
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f228: 121f7821 and w1, w1, #0xfffffffe
lfat_fd->dir_pos = *dir_pos;
4002f22c: b9002b23 str w3, [x25, #40]
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4002f230: 3900e321 strb w1, [x25, #56]
lfat_fd->dir_pos = *dir_pos;
4002f234: b9400ec1 ldr w1, [x22, #12]
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4002f238: b9004722 str w2, [x25, #68]
lfat_fd->dir_pos = *dir_pos;
4002f23c: 29408ac3 ldp w3, w2, [x22, #4]
lfat_fd->ino = key;
4002f240: 29025324 stp w4, w20, [x25, #16]
lfat_fd->dir_pos = *dir_pos;
4002f244: 29058b23 stp w3, w2, [x25, #44]
4002f248: b9003721 str w1, [x25, #52]
4002f24c: 17ffffce b 4002f184 <fat_file_open+0x1c4>
rtems_set_errno_and_return_minus_one( ENOMEM );
4002f250: 94002dc7 bl 4003a96c <__errno> <== NOT EXECUTED
4002f254: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002f258: 52800182 mov w2, #0xc // #12 <== NOT EXECUTED
4002f25c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002f260: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002f264: b9000022 str w2, [x1] <== NOT EXECUTED
4002f268: 17ffffd8 b 4002f1c8 <fat_file_open+0x208> <== NOT EXECUTED
free((*fat_fd));
4002f26c: f9400300 ldr x0, [x24] <== NOT EXECUTED
4002f270: 97ffcac4 bl 40021d80 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002f274: 94002dbe bl 4003a96c <__errno> <== NOT EXECUTED
4002f278: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002f27c: 52800182 mov w2, #0xc // #12 <== NOT EXECUTED
4002f280: 2a1403e0 mov w0, w20 <== NOT EXECUTED
4002f284: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002f288: b9000022 str w2, [x1] <== NOT EXECUTED
4002f28c: 17ffffcf b 4002f1c8 <fat_file_open+0x208> <== NOT EXECUTED
000000004002f340 <fat_file_read>:
{
4002f340: a9b97bfd stp x29, x30, [sp, #-112]!
4002f344: 910003fd mov x29, sp
uint32_t cur_cln = 0;
4002f348: b9006fff str wzr, [sp, #108]
if (count == 0)
4002f34c: 34000aa3 cbz w3, 4002f4a0 <fat_file_read+0x160> <== NEVER TAKEN
4002f350: a90153f3 stp x19, x20, [sp, #16]
4002f354: aa0003f3 mov x19, x0
return cmpltd;
4002f358: d2800000 mov x0, #0x0 // #0
4002f35c: a90363f7 stp x23, x24, [sp, #48]
4002f360: aa0103f8 mov x24, x1
if ( start >= fat_fd->fat_file_size )
4002f364: b9402021 ldr w1, [x1, #32]
4002f368: a9046bf9 stp x25, x26, [sp, #64]
4002f36c: 2a0203f9 mov w25, w2
4002f370: 6b02003f cmp w1, w2
4002f374: 54000889 b.ls 4002f484 <fat_file_read+0x144> // b.plast
4002f378: a9025bf5 stp x21, x22, [sp, #32]
4002f37c: aa0403f7 mov x23, x4
if ((count > fat_fd->fat_file_size) ||
4002f380: 2a0303f5 mov w21, w3
4002f384: 6b03003f cmp w1, w3
4002f388: 54000883 b.cc 4002f498 <fat_file_read+0x158> // b.lo, b.ul, b.last
(start > fat_fd->fat_file_size - count))
4002f38c: 4b030020 sub w0, w1, w3
if ((count > fat_fd->fat_file_size) ||
4002f390: 6b02001f cmp w0, w2
4002f394: 54000823 b.cc 4002f498 <fat_file_read+0x158> // b.lo, b.ul, b.last
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002f398: f9401700 ldr x0, [x24, #40]
4002f39c: f100041f cmp x0, #0x1
4002f3a0: 54000081 b.ne 4002f3b0 <fat_file_read+0x70> // b.any
4002f3a4: 39405a60 ldrb w0, [x19, #22]
4002f3a8: f240041f tst x0, #0x3
4002f3ac: 54000801 b.ne 4002f4ac <fat_file_read+0x16c> // b.any
cl_start = start >> fs_info->vol.bpc_log2;
4002f3b0: 3940327a ldrb w26, [x19, #12]
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002f3b4: 9101b3e3 add x3, sp, #0x6c
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
4002f3b8: b9400a74 ldr w20, [x19, #8]
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002f3bc: aa1803e1 mov x1, x24
4002f3c0: aa1303e0 mov x0, x19
cl_start = start >> fs_info->vol.bpc_log2;
4002f3c4: 1ada273a lsr w26, w25, w26
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002f3c8: 2a1a03e2 mov w2, w26
4002f3cc: 97fffec9 bl 4002eef0 <fat_file_lseek>
if (rc != RC_OK)
4002f3d0: 35000980 cbnz w0, 4002f500 <fat_file_read+0x1c0> <== NEVER TAKEN
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
4002f3d4: 51000694 sub w20, w20, #0x1
uint32_t cmpltd = 0;
4002f3d8: 52800016 mov w22, #0x0 // #0
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
4002f3dc: 0a190299 and w25, w20, w25
4002f3e0: f9002bfb str x27, [sp, #80]
4002f3e4: 2a1903e5 mov w5, w25
4002f3e8: 1400001b b 4002f454 <fat_file_read+0x114>
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f3ec: 39401661 ldrb w1, [x19, #5]
4002f3f0: b9403e62 ldr w2, [x19, #60]
4002f3f4: 1ac12001 lsl w1, w0, w1
4002f3f8: 0b020021 add w1, w1, w2
byte = ofs & (fs_info->vol.bps - 1);
4002f3fc: 79400262 ldrh w2, [x19]
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
4002f400: 8b3642e4 add x4, x23, w22, uxtw
sec += (ofs >> fs_info->vol.sec_log2);
4002f404: 39400a66 ldrb w6, [x19, #2]
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
4002f408: 2a1403e3 mov w3, w20
byte = ofs & (fs_info->vol.bps - 1);
4002f40c: 51000442 sub w2, w2, #0x1
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
4002f410: aa1303e0 mov x0, x19
4002f414: 0a050042 and w2, w2, w5
count -= c;
4002f418: 4b1402b5 sub w21, w21, w20
sec += (ofs >> fs_info->vol.sec_log2);
4002f41c: 1ac624a5 lsr w5, w5, w6
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
4002f420: 0b0100a1 add w1, w5, w1
4002f424: 97fff89f bl 4002d6a0 <_fat_block_read>
4002f428: aa0003e1 mov x1, x0
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002f42c: 9101b3e2 add x2, sp, #0x6c
4002f430: aa1303e0 mov x0, x19
if ( ret < 0 )
4002f434: b7f80901 tbnz x1, #63, 4002f554 <fat_file_read+0x214> <== NEVER TAKEN
save_cln = cur_cln;
4002f438: b9406ffb ldr w27, [sp, #108]
cmpltd += c;
4002f43c: 0b1402d6 add w22, w22, w20
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002f440: 2a1b03e1 mov w1, w27
4002f444: 97fffc93 bl 4002e690 <fat_get_fat_cluster>
ofs = 0;
4002f448: 52800005 mov w5, #0x0 // #0
if ( rc != RC_OK )
4002f44c: 35000880 cbnz w0, 4002f55c <fat_file_read+0x21c> <== NEVER TAKEN
while (count > 0)
4002f450: 34000675 cbz w21, 4002f51c <fat_file_read+0x1dc>
c = MIN(count, (fs_info->vol.bpc - ofs));
4002f454: b9400a74 ldr w20, [x19, #8]
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
4002f458: b9406fe1 ldr w1, [sp, #108]
c = MIN(count, (fs_info->vol.bpc - ofs));
4002f45c: 4b050294 sub w20, w20, w5
4002f460: 6b15029f cmp w20, w21
4002f464: 51000820 sub w0, w1, #0x2
4002f468: 1a959294 csel w20, w20, w21, ls // ls = plast
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002f46c: 35fffc01 cbnz w1, 4002f3ec <fat_file_read+0xac> <== ALWAYS TAKEN
4002f470: 39405a61 ldrb w1, [x19, #22] <== NOT EXECUTED
4002f474: f240043f tst x1, #0x3 <== NOT EXECUTED
4002f478: 54fffba0 b.eq 4002f3ec <fat_file_read+0xac> // b.none <== NOT EXECUTED
return fs_info->vol.rdir_loc;
4002f47c: b9402a61 ldr w1, [x19, #40] <== NOT EXECUTED
4002f480: 17ffffdf b 4002f3fc <fat_file_read+0xbc> <== NOT EXECUTED
4002f484: a94153f3 ldp x19, x20, [sp, #16]
4002f488: a94363f7 ldp x23, x24, [sp, #48]
4002f48c: a9446bf9 ldp x25, x26, [sp, #64]
}
4002f490: a8c77bfd ldp x29, x30, [sp], #112
4002f494: d65f03c0 ret
count = fat_fd->fat_file_size - start;
4002f498: 4b190035 sub w21, w1, w25
4002f49c: 17ffffbf b 4002f398 <fat_file_read+0x58>
return cmpltd;
4002f4a0: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED
}
4002f4a4: a8c77bfd ldp x29, x30, [sp], #112 <== NOT EXECUTED
4002f4a8: d65f03c0 ret <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
4002f4ac: b9402700 ldr w0, [x24, #36]
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4002f4b0: 350005a0 cbnz w0, 4002f564 <fat_file_read+0x224> <== NEVER TAKEN
return fs_info->vol.rdir_loc;
4002f4b4: b9402a61 ldr w1, [x19, #40]
sec += (start >> fs_info->vol.sec_log2);
4002f4b8: 39400a65 ldrb w5, [x19, #2]
ret = _fat_block_read(fs_info, sec, byte, count, buf);
4002f4bc: aa1703e4 mov x4, x23
byte = start & (fs_info->vol.bps - 1);
4002f4c0: 79400262 ldrh w2, [x19]
ret = _fat_block_read(fs_info, sec, byte, count, buf);
4002f4c4: 2a1503e3 mov w3, w21
4002f4c8: aa1303e0 mov x0, x19
byte = start & (fs_info->vol.bps - 1);
4002f4cc: 51000442 sub w2, w2, #0x1
ret = _fat_block_read(fs_info, sec, byte, count, buf);
4002f4d0: 0a190042 and w2, w2, w25
sec += (start >> fs_info->vol.sec_log2);
4002f4d4: 1ac52739 lsr w25, w25, w5
ret = _fat_block_read(fs_info, sec, byte, count, buf);
4002f4d8: 0b010321 add w1, w25, w1
4002f4dc: 97fff871 bl 4002d6a0 <_fat_block_read>
if ( ret < 0 )
4002f4e0: f100001f cmp x0, #0x0
4002f4e4: da9fa000 csinv x0, x0, xzr, ge // ge = tcont
4002f4e8: a94153f3 ldp x19, x20, [sp, #16]
4002f4ec: a9425bf5 ldp x21, x22, [sp, #32]
4002f4f0: a94363f7 ldp x23, x24, [sp, #48]
4002f4f4: a9446bf9 ldp x25, x26, [sp, #64]
}
4002f4f8: a8c77bfd ldp x29, x30, [sp], #112
4002f4fc: d65f03c0 ret
return rc;
4002f500: 93407c00 sxtw x0, w0 <== NOT EXECUTED
4002f504: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002f508: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002f50c: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002f510: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
}
4002f514: a8c77bfd ldp x29, x30, [sp], #112 <== NOT EXECUTED
4002f518: d65f03c0 ret <== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002f51c: 39403261 ldrb w1, [x19, #12]
4002f520: 51000739 sub w25, w25, #0x1
4002f524: 0b160339 add w25, w25, w22
return cmpltd;
4002f528: 2a1603e0 mov w0, w22
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002f52c: 1ac12739 lsr w25, w25, w1
fat_fd->map.file_cln = cl_start +
4002f530: 0b1a033a add w26, w25, w26
fat_fd->map.disk_cln = save_cln;
4002f534: 2907ef1a stp w26, w27, [x24, #60]
return cmpltd;
4002f538: a94153f3 ldp x19, x20, [sp, #16]
4002f53c: a9425bf5 ldp x21, x22, [sp, #32]
4002f540: a94363f7 ldp x23, x24, [sp, #48]
4002f544: a9446bf9 ldp x25, x26, [sp, #64]
4002f548: f9402bfb ldr x27, [sp, #80]
}
4002f54c: a8c77bfd ldp x29, x30, [sp], #112
4002f550: d65f03c0 ret
return -1;
4002f554: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4002f558: 17fffff8 b 4002f538 <fat_file_read+0x1f8> <== NOT EXECUTED
return rc;
4002f55c: 93407c00 sxtw x0, w0 <== NOT EXECUTED
4002f560: 17fffff6 b 4002f538 <fat_file_read+0x1f8> <== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4002f564: 39401662 ldrb w2, [x19, #5] <== NOT EXECUTED
4002f568: 51000801 sub w1, w0, #0x2 <== NOT EXECUTED
4002f56c: b9403e60 ldr w0, [x19, #60] <== NOT EXECUTED
4002f570: 1ac22021 lsl w1, w1, w2 <== NOT EXECUTED
4002f574: 0b000021 add w1, w1, w0 <== NOT EXECUTED
4002f578: 17ffffd0 b 4002f4b8 <fat_file_read+0x178> <== NOT EXECUTED
4002f57c: 00000000 udf #0
000000004002fdc0 <fat_file_size>:
{
4002fdc0: a9bc7bfd stp x29, x30, [sp, #-64]!
4002fdc4: 910003fd mov x29, sp
4002fdc8: a90153f3 stp x19, x20, [sp, #16]
4002fdcc: aa0003f3 mov x19, x0
4002fdd0: aa0103f4 mov x20, x1
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002fdd4: f9401420 ldr x0, [x1, #40]
{
4002fdd8: f90013f5 str x21, [sp, #32]
uint32_t cur_cln = fat_fd->cln;
4002fddc: b9402435 ldr w21, [x1, #36]
4002fde0: b9003ff5 str w21, [sp, #60]
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002fde4: f100041f cmp x0, #0x1
4002fde8: 54000440 b.eq 4002fe70 <fat_file_size+0xb0> // b.none
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002fdec: 29430660 ldp w0, w1, [x19, #24]
fat_fd->fat_file_size = 0;
4002fdf0: b900229f str wzr, [x20, #32]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002fdf4: 0a0002a0 and w0, w21, w0
4002fdf8: 6b01001f cmp w0, w1
4002fdfc: 540001a3 b.cc 4002fe30 <fat_file_size+0x70> // b.lo, b.ul, b.last <== ALWAYS TAKEN
4002fe00: 14000015 b 4002fe54 <fat_file_size+0x94> <== NOT EXECUTED
fat_fd->fat_file_size += fs_info->vol.bpc;
4002fe04: b9400a61 ldr w1, [x19, #8]
4002fe08: b9402282 ldr w2, [x20, #32]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002fe0c: b9401a60 ldr w0, [x19, #24]
4002fe10: b9403fe3 ldr w3, [sp, #60]
fat_fd->fat_file_size += fs_info->vol.bpc;
4002fe14: 0b010042 add w2, w2, w1
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002fe18: b9401e61 ldr w1, [x19, #28]
fat_fd->fat_file_size += fs_info->vol.bpc;
4002fe1c: b9002282 str w2, [x20, #32]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002fe20: 0a000060 and w0, w3, w0
4002fe24: 6b01001f cmp w0, w1
4002fe28: 54000182 b.cs 4002fe58 <fat_file_size+0x98> // b.hs, b.nlast
4002fe2c: 2a0303f5 mov w21, w3
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002fe30: 9100f3e2 add x2, sp, #0x3c
4002fe34: 2a1503e1 mov w1, w21
4002fe38: aa1303e0 mov x0, x19
4002fe3c: 97fffa15 bl 4002e690 <fat_get_fat_cluster>
if ( rc != RC_OK )
4002fe40: 34fffe20 cbz w0, 4002fe04 <fat_file_size+0x44> <== ALWAYS TAKEN
}
4002fe44: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002fe48: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED
4002fe4c: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED
4002fe50: d65f03c0 ret <== NOT EXECUTED
uint32_t save_cln = 0;
4002fe54: 52800015 mov w21, #0x0 // #0 <== NOT EXECUTED
fat_fd->map.last_cln = save_cln;
4002fe58: b9004695 str w21, [x20, #68]
return rc;
4002fe5c: 52800000 mov w0, #0x0 // #0
}
4002fe60: a94153f3 ldp x19, x20, [sp, #16]
4002fe64: f94013f5 ldr x21, [sp, #32]
4002fe68: a8c47bfd ldp x29, x30, [sp], #64
4002fe6c: d65f03c0 ret
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
4002fe70: 39405a60 ldrb w0, [x19, #22]
4002fe74: f240041f tst x0, #0x3
4002fe78: 54fffba0 b.eq 4002fdec <fat_file_size+0x2c> // b.none
fat_fd->fat_file_size = fs_info->vol.rdir_size;
4002fe7c: b9403661 ldr w1, [x19, #52]
return rc;
4002fe80: 52800000 mov w0, #0x0 // #0
fat_fd->fat_file_size = fs_info->vol.rdir_size;
4002fe84: b9002281 str w1, [x20, #32]
}
4002fe88: a94153f3 ldp x19, x20, [sp, #16]
4002fe8c: f94013f5 ldr x21, [sp, #32]
4002fe90: a8c47bfd ldp x29, x30, [sp], #64
4002fe94: d65f03c0 ret
...
000000004002f580 <fat_file_truncate>:
{
4002f580: a9bc7bfd stp x29, x30, [sp, #-64]!
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
4002f584: 12800003 mov w3, #0xffffffff // #-1
{
4002f588: 910003fd mov x29, sp
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
4002f58c: 29070fff stp wzr, w3, [sp, #56]
if ( new_length >= fat_fd->fat_file_size )
4002f590: b9402023 ldr w3, [x1, #32]
4002f594: 6b02007f cmp w3, w2
4002f598: 540003c9 b.ls 4002f610 <fat_file_truncate+0x90> // b.plast
assert(fat_fd->fat_file_size);
4002f59c: a90153f3 stp x19, x20, [sp, #16]
4002f5a0: 34000663 cbz w3, 4002f66c <fat_file_truncate+0xec> <== NEVER TAKEN
cl_start = (new_length + fs_info->vol.bpc - 1) >> fs_info->vol.bpc_log2;
4002f5a4: b9400813 ldr w19, [x0, #8]
4002f5a8: aa0003f4 mov x20, x0
4002f5ac: 39403004 ldrb w4, [x0, #12]
4002f5b0: 0b130053 add w19, w2, w19
4002f5b4: 51000673 sub w19, w19, #0x1
4002f5b8: 1ac42673 lsr w19, w19, w4
if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size)
4002f5bc: 1ac42264 lsl w4, w19, w4
4002f5c0: 6b04007f cmp w3, w4
4002f5c4: 54000249 b.ls 4002f60c <fat_file_truncate+0x8c> // b.plast
if (cl_start != 0)
4002f5c8: f90013f5 str x21, [sp, #32]
4002f5cc: aa0103f5 mov x21, x1
4002f5d0: 340000b3 cbz w19, 4002f5e4 <fat_file_truncate+0x64>
rc = fat_file_lseek(fs_info, fat_fd, cl_start - 1, &new_last_cln);
4002f5d4: 9100f3e3 add x3, sp, #0x3c
4002f5d8: 51000662 sub w2, w19, #0x1
4002f5dc: 97fffe45 bl 4002eef0 <fat_file_lseek>
if (rc != RC_OK)
4002f5e0: 350000e0 cbnz w0, 4002f5fc <fat_file_truncate+0x7c> <== NEVER TAKEN
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
4002f5e4: 9100e3e3 add x3, sp, #0x38
4002f5e8: 2a1303e2 mov w2, w19
4002f5ec: aa1503e1 mov x1, x21
4002f5f0: aa1403e0 mov x0, x20
4002f5f4: 97fffe3f bl 4002eef0 <fat_file_lseek>
if (rc != RC_OK)
4002f5f8: 34000120 cbz w0, 4002f61c <fat_file_truncate+0x9c> <== ALWAYS TAKEN
4002f5fc: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002f600: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED
}
4002f604: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED
4002f608: d65f03c0 ret <== NOT EXECUTED
4002f60c: a94153f3 ldp x19, x20, [sp, #16]
return rc;
4002f610: 52800000 mov w0, #0x0 // #0
}
4002f614: a8c47bfd ldp x29, x30, [sp], #64
4002f618: d65f03c0 ret
rc = fat_free_fat_clusters_chain(fs_info, cur_cln);
4002f61c: b9403be1 ldr w1, [sp, #56]
4002f620: aa1403e0 mov x0, x20
4002f624: 97fffd5b bl 4002eb90 <fat_free_fat_clusters_chain>
if (rc != RC_OK)
4002f628: 35fffea0 cbnz w0, 4002f5fc <fat_file_truncate+0x7c> <== NEVER TAKEN
if (cl_start != 0)
4002f62c: 35000093 cbnz w19, 4002f63c <fat_file_truncate+0xbc>
4002f630: a94153f3 ldp x19, x20, [sp, #16]
4002f634: f94013f5 ldr x21, [sp, #32]
4002f638: 17fffff6 b 4002f610 <fat_file_truncate+0x90>
rc = fat_set_fat_cluster(fs_info, new_last_cln, FAT_GENFAT_EOC);
4002f63c: b9403fe1 ldr w1, [sp, #60]
4002f640: aa1403e0 mov x0, x20
4002f644: 12800002 mov w2, #0xffffffff // #-1
4002f648: 97fffc9e bl 4002e8c0 <fat_set_fat_cluster>
if ( rc != RC_OK )
4002f64c: 35fffd80 cbnz w0, 4002f5fc <fat_file_truncate+0x7c> <== NEVER TAKEN
fat_fd->map.disk_cln = new_last_cln;
4002f650: b9403fe1 ldr w1, [sp, #60]
fat_fd->map.file_cln = cl_start - 1;
4002f654: 51000673 sub w19, w19, #0x1
fat_fd->map.disk_cln = new_last_cln;
4002f658: 290786b3 stp w19, w1, [x21, #60]
fat_fd->map.last_cln = new_last_cln;
4002f65c: b90046a1 str w1, [x21, #68]
4002f660: a94153f3 ldp x19, x20, [sp, #16]
4002f664: f94013f5 ldr x21, [sp, #32]
4002f668: 17ffffeb b 4002f614 <fat_file_truncate+0x94>
assert(fat_fd->fat_file_size);
4002f66c: d00000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
4002f670: d00000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
4002f674: d00000c0 adrp x0, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
4002f678: 91076063 add x3, x3, #0x1d8 <== NOT EXECUTED
4002f67c: 91088042 add x2, x2, #0x220 <== NOT EXECUTED
4002f680: 9107c000 add x0, x0, #0x1f0 <== NOT EXECUTED
4002f684: 52805c81 mov w1, #0x2e4 // #740 <== NOT EXECUTED
4002f688: f90013f5 str x21, [sp, #32] <== NOT EXECUTED
4002f68c: 94001c85 bl 400368a0 <__assert_func> <== NOT EXECUTED
000000004002fb10 <fat_file_write>:
{
4002fb10: a9b87bfd stp x29, x30, [sp, #-128]!
4002fb14: 910003fd mov x29, sp
uint32_t c = 0;
4002fb18: b9007bff str wzr, [sp, #120]
if ( count == 0 )
4002fb1c: 34000a03 cbz w3, 4002fc5c <fat_file_write+0x14c> <== NEVER TAKEN
4002fb20: a90153f3 stp x19, x20, [sp, #16]
4002fb24: 2a0203f4 mov w20, w2
if (start >= fat_fd->size_limit)
4002fb28: b9401c33 ldr w19, [x1, #28]
4002fb2c: a90363f7 stp x23, x24, [sp, #48]
4002fb30: aa0103f8 mov x24, x1
4002fb34: 6b02027f cmp w19, w2
4002fb38: 54000fe9 b.ls 4002fd34 <fat_file_write+0x224> // b.plast <== NEVER TAKEN
if (count > fat_fd->size_limit - start)
4002fb3c: 4b020273 sub w19, w19, w2
4002fb40: a9046bf9 stp x25, x26, [sp, #64]
4002fb44: 6b03027f cmp w19, w3
4002fb48: 1a839273 csel w19, w19, w3, ls // ls = plast
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
4002fb4c: aa0403f7 mov x23, x4
4002fb50: 0b130059 add w25, w2, w19
bool zero_fill = start > fat_fd->fat_file_size;
4002fb54: b9402022 ldr w2, [x1, #32]
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
4002fb58: 9101e3e4 add x4, sp, #0x78
4002fb5c: 2a1903e3 mov w3, w25
bool zero_fill = start > fat_fd->fat_file_size;
4002fb60: 6b14005f cmp w2, w20
4002fb64: a9025bf5 stp x21, x22, [sp, #32]
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
4002fb68: 1a9f27e2 cset w2, cc // cc = lo, ul, last
4002fb6c: aa0003f6 mov x22, x0
4002fb70: 97ffff38 bl 4002f850 <fat_file_extend>
if (RC_OK == rc)
4002fb74: 35000660 cbnz w0, 4002fc40 <fat_file_write+0x130>
if (c != (start + count))
4002fb78: b9407be0 ldr w0, [sp, #120]
cln += (start >> fs_info->vol.bpc_log2);
4002fb7c: 394032d5 ldrb w21, [x22, #12]
return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16));
4002fb80: f9401701 ldr x1, [x24, #40]
count = c - start;
4002fb84: 6b00033f cmp w25, w0
4002fb88: 4b140000 sub w0, w0, w20
cln += (start >> fs_info->vol.bpc_log2);
4002fb8c: 1ad5269a lsr w26, w20, w21
count = c - start;
4002fb90: 1a931013 csel w19, w0, w19, ne // ne = any
return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16));
4002fb94: f100043f cmp x1, #0x1
4002fb98: 54000940 b.eq 4002fcc0 <fat_file_write+0x1b0> // b.none
rc = fat_file_lseek(fs_info, fat_fd, start_cln, &cur_cln);
4002fb9c: aa1803e1 mov x1, x24
4002fba0: 2a1a03e2 mov w2, w26
4002fba4: 9101f3e3 add x3, sp, #0x7c
4002fba8: aa1603e0 mov x0, x22
uint32_t cur_cln = 0;
4002fbac: b9007fff str wzr, [sp, #124]
rc = fat_file_lseek(fs_info, fat_fd, start_cln, &cur_cln);
4002fbb0: 97fffcd0 bl 4002eef0 <fat_file_lseek>
4002fbb4: 2a0003e1 mov w1, w0
if (RC_OK == rc)
4002fbb8: 35000740 cbnz w0, 4002fca0 <fat_file_write+0x190> <== NEVER TAKEN
4002fbbc: f9002bfb str x27, [sp, #80]
uint32_t ofs_cln = start - (start_cln << fs_info->vol.bpc_log2);
4002fbc0: 1ad52342 lsl w2, w26, w21
4002fbc4: 4b020282 sub w2, w20, w2
uint32_t save_cln = 0; /* FIXME: This might be incorrect, cf. below */
4002fbc8: 52800019 mov w25, #0x0 // #0
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fbcc: 5100045b sub w27, w2, #0x1
uint32_t cmpltd = 0;
4002fbd0: 52800015 mov w21, #0x0 // #0
while ( (RC_OK == rc)
4002fbd4: 34000a93 cbz w19, 4002fd24 <fat_file_write+0x214> <== NEVER TAKEN
c = MIN(bytes_to_write, (fs_info->vol.bpc - ofs_cln));
4002fbd8: b9400ac3 ldr w3, [x22, #8]
ret = fat_cluster_write(fs_info,
4002fbdc: 8b3542e4 add x4, x23, w21, uxtw
4002fbe0: b9407fe1 ldr w1, [sp, #124]
4002fbe4: aa1603e0 mov x0, x22
c = MIN(bytes_to_write, (fs_info->vol.bpc - ofs_cln));
4002fbe8: 4b020063 sub w3, w3, w2
4002fbec: 6b13007f cmp w3, w19
ret = fat_cluster_write(fs_info,
4002fbf0: 1a939063 csel w3, w3, w19, ls // ls = plast
4002fbf4: 97fff793 bl 4002da40 <fat_cluster_write>
if (0 > ret)
4002fbf8: b7f80ae0 tbnz x0, #63, 4002fd54 <fat_file_write+0x244> <== NEVER TAKEN
save_cln = cur_cln;
4002fbfc: b9407ff9 ldr w25, [sp, #124]
cmpltd += ret;
4002fc00: 0b0002b5 add w21, w21, w0
if (0 < bytes_to_write)
4002fc04: 6b000273 subs w19, w19, w0
4002fc08: 54000301 b.ne 4002fc68 <fat_file_write+0x158> // b.any
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fc0c: 0b1b02bb add w27, w21, w27
return cmpltd;
4002fc10: 2a1503e0 mov w0, w21
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fc14: 394032c1 ldrb w1, [x22, #12]
fat_fd->map.disk_cln = save_cln;
4002fc18: b9004319 str w25, [x24, #64]
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fc1c: 1ac1277b lsr w27, w27, w1
fat_fd->map.file_cln = start_cln +
4002fc20: 0b1a037a add w26, w27, w26
4002fc24: a94153f3 ldp x19, x20, [sp, #16]
4002fc28: a9425bf5 ldp x21, x22, [sp, #32]
4002fc2c: f9402bfb ldr x27, [sp, #80]
4002fc30: b9003f1a str w26, [x24, #60]
4002fc34: a94363f7 ldp x23, x24, [sp, #48]
4002fc38: a9446bf9 ldp x25, x26, [sp, #64]
4002fc3c: 14000006 b 4002fc54 <fat_file_write+0x144>
return rc;
4002fc40: a94153f3 ldp x19, x20, [sp, #16]
4002fc44: 93407c00 sxtw x0, w0
4002fc48: a9425bf5 ldp x21, x22, [sp, #32]
4002fc4c: a94363f7 ldp x23, x24, [sp, #48]
4002fc50: a9446bf9 ldp x25, x26, [sp, #64]
}
4002fc54: a8c87bfd ldp x29, x30, [sp], #128
4002fc58: d65f03c0 ret
return cmpltd;
4002fc5c: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED
}
4002fc60: a8c87bfd ldp x29, x30, [sp], #128 <== NOT EXECUTED
4002fc64: d65f03c0 ret <== NOT EXECUTED
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002fc68: 9101f3e2 add x2, sp, #0x7c
4002fc6c: 2a1903e1 mov w1, w25
4002fc70: aa1603e0 mov x0, x22
4002fc74: 97fffa87 bl 4002e690 <fat_get_fat_cluster>
4002fc78: b9006fe0 str w0, [sp, #108]
4002fc7c: 2a0003e1 mov w1, w0
ofs_cln = 0;
4002fc80: 52800002 mov w2, #0x0 // #0
while ( (RC_OK == rc)
4002fc84: 34fffaa1 cbz w1, 4002fbd8 <fat_file_write+0xc8> <== ALWAYS TAKEN
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fc88: 394032c2 ldrb w2, [x22, #12] <== NOT EXECUTED
4002fc8c: 0b1b02a0 add w0, w21, w27 <== NOT EXECUTED
4002fc90: f9402bfb ldr x27, [sp, #80] <== NOT EXECUTED
4002fc94: 1ac22400 lsr w0, w0, w2 <== NOT EXECUTED
fat_fd->map.file_cln = start_cln +
4002fc98: 0b1a001a add w26, w0, w26 <== NOT EXECUTED
fat_fd->map.disk_cln = save_cln;
4002fc9c: 2907e71a stp w26, w25, [x24, #60] <== NOT EXECUTED
return rc;
4002fca0: 93407c20 sxtw x0, w1 <== NOT EXECUTED
if (0 > ret)
4002fca4: 36f80361 tbz w1, #31, 4002fd10 <fat_file_write+0x200> <== NOT EXECUTED
fat_fd->map.disk_cln = save_cln;
4002fca8: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4002fcac: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002fcb0: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002fcb4: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002fcb8: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002fcbc: 17ffffe6 b 4002fc54 <fat_file_write+0x144> <== NOT EXECUTED
return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16));
4002fcc0: 39405ac0 ldrb w0, [x22, #22]
4002fcc4: f240041f tst x0, #0x3
4002fcc8: 54fff6a0 b.eq 4002fb9c <fat_file_write+0x8c> // b.none
byte = start & (fs_info->vol.bpc -1);
4002fccc: b9400ac2 ldr w2, [x22, #8]
ret = fat_cluster_write(fs_info,
4002fcd0: aa1703e4 mov x4, x23
cln = fat_fd->cln;
4002fcd4: b9402701 ldr w1, [x24, #36]
ret = fat_cluster_write(fs_info,
4002fcd8: 2a1303e3 mov w3, w19
byte = start & (fs_info->vol.bpc -1);
4002fcdc: 51000442 sub w2, w2, #0x1
ret = fat_cluster_write(fs_info,
4002fce0: aa1603e0 mov x0, x22
4002fce4: 0a140042 and w2, w2, w20
4002fce8: 0b1a0021 add w1, w1, w26
4002fcec: 97fff755 bl 4002da40 <fat_cluster_write>
if (0 > ret)
4002fcf0: b7fffdc0 tbnz x0, #63, 4002fca8 <fat_file_write+0x198> <== NEVER TAKEN
cmpltd = ret;
4002fcf4: 92407c00 and x0, x0, #0xffffffff
4002fcf8: a94153f3 ldp x19, x20, [sp, #16]
4002fcfc: a9425bf5 ldp x21, x22, [sp, #32]
4002fd00: a94363f7 ldp x23, x24, [sp, #48]
4002fd04: a9446bf9 ldp x25, x26, [sp, #64]
}
4002fd08: a8c87bfd ldp x29, x30, [sp], #128
4002fd0c: d65f03c0 ret
4002fd10: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002fd14: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002fd18: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002fd1c: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002fd20: 17ffffcd b 4002fc54 <fat_file_write+0x144> <== NOT EXECUTED
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fd24: 394032c1 ldrb w1, [x22, #12] <== NOT EXECUTED
fat_fd->map.disk_cln = save_cln;
4002fd28: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED
4002fd2c: b900431f str wzr, [x24, #64] <== NOT EXECUTED
4002fd30: 17ffffbb b 4002fc1c <fat_file_write+0x10c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EFBIG);
4002fd34: 94002b0e bl 4003a96c <__errno> <== NOT EXECUTED
4002fd38: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002fd3c: 52800362 mov w2, #0x1b // #27 <== NOT EXECUTED
4002fd40: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4002fd44: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002fd48: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002fd4c: b9000022 str w2, [x1] <== NOT EXECUTED
4002fd50: 17ffffc1 b 4002fc54 <fat_file_write+0x144> <== NOT EXECUTED
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4002fd54: 394032c1 ldrb w1, [x22, #12] <== NOT EXECUTED
4002fd58: 0b150360 add w0, w27, w21 <== NOT EXECUTED
4002fd5c: f9402bfb ldr x27, [sp, #80] <== NOT EXECUTED
4002fd60: 1ac12400 lsr w0, w0, w1 <== NOT EXECUTED
fat_fd->map.file_cln = start_cln +
4002fd64: 0b1a001a add w26, w0, w26 <== NOT EXECUTED
fat_fd->map.disk_cln = save_cln;
4002fd68: 2907e71a stp w26, w25, [x24, #60] <== NOT EXECUTED
4002fd6c: 17ffffcf b 4002fca8 <fat_file_write+0x198> <== NOT EXECUTED
0000000040030cb0 <fat_file_write_file_size>:
{
40030cb0: a9be7bfd stp x29, x30, [sp, #-32]!
40030cb4: aa0103e5 mov x5, x1
40030cb8: 910003fd mov x29, sp
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
40030cbc: b9402822 ldr w2, [x1, #40]
uint32_t le_new_length = 0;
40030cc0: b9001fff str wzr, [sp, #28]
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40030cc4: 35000082 cbnz w2, 40030cd4 <fat_file_write_file_size+0x24>
40030cc8: 39405801 ldrb w1, [x0, #22]
40030ccc: f240043f tst x1, #0x3
40030cd0: 54000301 b.ne 40030d30 <fat_file_write_file_size+0x80> // b.any <== ALWAYS TAKEN
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40030cd4: 39401404 ldrb w4, [x0, #5]
40030cd8: 51000843 sub w3, w2, #0x2
40030cdc: b9403c01 ldr w1, [x0, #60]
40030ce0: 1ac42063 lsl w3, w3, w4
40030ce4: 0b010063 add w3, w3, w1
if (fat_fd->fat_file_type == FAT_DIRECTORY) {
40030ce8: b94018a6 ldr w6, [x5, #24]
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030cec: 39400801 ldrb w1, [x0, #2]
40030cf0: b9402ca4 ldr w4, [x5, #44]
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1));
40030cf4: 79400002 ldrh w2, [x0]
40030cf8: 51000442 sub w2, w2, #0x1
40030cfc: 0a040042 and w2, w2, w4
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030d00: 1ac12484 lsr w4, w4, w1
40030d04: 0b030081 add w1, w4, w3
if (fat_fd->fat_file_type == FAT_DIRECTORY) {
40030d08: 34000066 cbz w6, 40030d14 <fat_file_write_file_size+0x64>
le_new_length = CT_LE_L(fat_fd->fat_file_size);
40030d0c: b94020a3 ldr w3, [x5, #32]
40030d10: b9001fe3 str w3, [sp, #28]
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_SIZE_OFFSET, 4,
40030d14: 910073e4 add x4, sp, #0x1c
40030d18: 11007042 add w2, w2, #0x1c
40030d1c: 52800083 mov w3, #0x4 // #4
40030d20: 97fff2ac bl 4002d7d0 <fat_sector_write>
}
40030d24: 937ffc00 asr x0, x0, #63
40030d28: a8c27bfd ldp x29, x30, [sp], #32
40030d2c: d65f03c0 ret
return fs_info->vol.rdir_loc;
40030d30: b9402803 ldr w3, [x0, #40]
40030d34: 17ffffed b 40030ce8 <fat_file_write_file_size+0x38>
...
0000000040030bf0 <fat_file_write_first_cluster_num>:
{
40030bf0: a9bc7bfd stp x29, x30, [sp, #-64]!
40030bf4: 910003fd mov x29, sp
40030bf8: a90153f3 stp x19, x20, [sp, #16]
40030bfc: aa0003f3 mov x19, x0
40030c00: a9025bf5 stp x21, x22, [sp, #32]
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
40030c04: 29448036 ldp w22, w0, [x1, #36]
uint16_t le_cl_hi = 0;
40030c08: 79007fff strh wzr, [sp, #62]
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40030c0c: 35000080 cbnz w0, 40030c1c <fat_file_write_first_cluster_num+0x2c>
40030c10: 39405a62 ldrb w2, [x19, #22]
40030c14: f240045f tst x2, #0x3
40030c18: 54000481 b.ne 40030ca8 <fat_file_write_first_cluster_num+0xb8> // b.any<== ALWAYS TAKEN
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40030c1c: 39401662 ldrb w2, [x19, #5]
40030c20: 51000805 sub w5, w0, #0x2
40030c24: b9403e60 ldr w0, [x19, #60]
40030c28: 1ac220a5 lsl w5, w5, w2
40030c2c: 0b0000a5 add w5, w5, w0
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030c30: 39400a62 ldrb w2, [x19, #2]
ret1 = fat_sector_write(fs_info, sec,
40030c34: 9100f3e4 add x4, sp, #0x3c
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030c38: b9402c34 ldr w20, [x1, #44]
ret1 = fat_sector_write(fs_info, sec,
40030c3c: aa1303e0 mov x0, x19
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40030c40: 79400275 ldrh w21, [x19]
ret1 = fat_sector_write(fs_info, sec,
40030c44: 52800043 mov w3, #0x2 // #2
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
40030c48: 79007bf6 strh w22, [sp, #60]
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
40030c4c: 53107ed6 lsr w22, w22, #16
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40030c50: 510006b5 sub w21, w21, #0x1
40030c54: 0a1402b5 and w21, w21, w20
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030c58: 1ac22694 lsr w20, w20, w2
40030c5c: 0b050294 add w20, w20, w5
ret1 = fat_sector_write(fs_info, sec,
40030c60: 11006aa2 add w2, w21, #0x1a
40030c64: 2a1403e1 mov w1, w20
40030c68: 97fff2da bl 4002d7d0 <fat_sector_write>
ret2 = fat_sector_write(fs_info, sec,
40030c6c: 110052a2 add w2, w21, #0x14
40030c70: 2a1403e1 mov w1, w20
40030c74: 9100fbe4 add x4, sp, #0x3e
ret1 = fat_sector_write(fs_info, sec,
40030c78: aa0003f4 mov x20, x0
ret2 = fat_sector_write(fs_info, sec,
40030c7c: 52800043 mov w3, #0x2 // #2
40030c80: aa1303e0 mov x0, x19
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
40030c84: 79007ff6 strh w22, [sp, #62]
ret2 = fat_sector_write(fs_info, sec,
40030c88: 97fff2d2 bl 4002d7d0 <fat_sector_write>
if ( (ret1 < 0) || (ret2 < 0) )
40030c8c: f100029f cmp x20, #0x0
40030c90: fa40a801 ccmp x0, #0x0, #0x1, ge // ge = tcont
}
40030c94: 5a9fa3e0 csetm w0, lt // lt = tstop
40030c98: a94153f3 ldp x19, x20, [sp, #16]
40030c9c: a9425bf5 ldp x21, x22, [sp, #32]
40030ca0: a8c47bfd ldp x29, x30, [sp], #64
40030ca4: d65f03c0 ret
return fs_info->vol.rdir_loc;
40030ca8: b9402a65 ldr w5, [x19, #40]
40030cac: 17ffffe1 b 40030c30 <fat_file_write_first_cluster_num+0x40>
0000000040030ab0 <fat_file_write_time_and_date>:
{
40030ab0: a9bb7bfd stp x29, x30, [sp, #-80]!
40030ab4: 910003fd mov x29, sp
40030ab8: a90153f3 stp x19, x20, [sp, #16]
40030abc: aa0003f3 mov x19, x0
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
40030ac0: b9402820 ldr w0, [x1, #40]
{
40030ac4: a9025bf5 stp x21, x22, [sp, #32]
40030ac8: a90363f7 stp x23, x24, [sp, #48]
40030acc: aa0103f8 mov x24, x1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40030ad0: 35000080 cbnz w0, 40030ae0 <fat_file_write_time_and_date+0x30>
40030ad4: 39405a61 ldrb w1, [x19, #22]
40030ad8: f240043f tst x1, #0x3
40030adc: 54000861 b.ne 40030be8 <fat_file_write_time_and_date+0x138> // b.any<== ALWAYS TAKEN
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40030ae0: 39401675 ldrb w21, [x19, #5]
40030ae4: 51000800 sub w0, w0, #0x2
40030ae8: b9403e63 ldr w3, [x19, #60]
40030aec: 1ad52015 lsl w21, w0, w21
40030af0: 0b0302a3 add w3, w21, w3
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030af4: 39400a64 ldrb w4, [x19, #2]
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
40030af8: 910133e2 add x2, sp, #0x4c
40030afc: b9405300 ldr w0, [x24, #80]
40030b00: 91013be1 add x1, sp, #0x4e
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030b04: b9402f15 ldr w21, [x24, #44]
if ( ret < 0 )
40030b08: 12800017 mov w23, #0xffffffff // #-1
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40030b0c: 79400276 ldrh w22, [x19]
40030b10: 510006d6 sub w22, w22, #0x1
40030b14: 0a1502d6 and w22, w22, w21
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40030b18: 1ac426b5 lsr w21, w21, w4
40030b1c: 0b0302b5 add w21, w21, w3
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
40030b20: 94001868 bl 40036cc0 <msdos_date_unix2dos>
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET,
40030b24: 910133e4 add x4, sp, #0x4c
40030b28: 11005ac2 add w2, w22, #0x16
40030b2c: 2a1503e1 mov w1, w21
40030b30: aa1303e0 mov x0, x19
40030b34: 52800043 mov w3, #0x2 // #2
40030b38: 97fff326 bl 4002d7d0 <fat_sector_write>
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WDATE_OFFSET,
40030b3c: 110062c2 add w2, w22, #0x18
40030b40: 2a1503e1 mov w1, w21
40030b44: 91013be4 add x4, sp, #0x4e
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET,
40030b48: aa0003f4 mov x20, x0
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WDATE_OFFSET,
40030b4c: 52800043 mov w3, #0x2 // #2
40030b50: aa1303e0 mov x0, x19
40030b54: 97fff31f bl 4002d7d0 <fat_sector_write>
if ( ret < 0 )
40030b58: f100001f cmp x0, #0x0
40030b5c: 937ffe94 asr x20, x20, #63
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_ADATE_OFFSET,
40030b60: 91013be4 add x4, sp, #0x4e
if ( ret < 0 )
40030b64: 1a97a294 csel w20, w20, w23, ge // ge = tcont
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_ADATE_OFFSET,
40030b68: 11004ac2 add w2, w22, #0x12
40030b6c: 2a1503e1 mov w1, w21
40030b70: 52800043 mov w3, #0x2 // #2
40030b74: aa1303e0 mov x0, x19
40030b78: 97fff316 bl 4002d7d0 <fat_sector_write>
rc = -1;
40030b7c: f100001f cmp x0, #0x0
msdos_date_unix2dos(fat_fd->ctime, &date, &time_val);
40030b80: b9404b00 ldr w0, [x24, #72]
rc = -1;
40030b84: 1a97a294 csel w20, w20, w23, ge // ge = tcont
msdos_date_unix2dos(fat_fd->ctime, &date, &time_val);
40030b88: 910133e2 add x2, sp, #0x4c
40030b8c: 91013be1 add x1, sp, #0x4e
40030b90: 9400184c bl 40036cc0 <msdos_date_unix2dos>
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CTIME_OFFSET,
40030b94: 910133e4 add x4, sp, #0x4c
40030b98: 11003ac2 add w2, w22, #0xe
40030b9c: 2a1503e1 mov w1, w21
40030ba0: aa1303e0 mov x0, x19
40030ba4: 52800043 mov w3, #0x2 // #2
40030ba8: 97fff30a bl 4002d7d0 <fat_sector_write>
rc = -1;
40030bac: f100001f cmp x0, #0x0
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CDATE_OFFSET,
40030bb0: 110042c2 add w2, w22, #0x10
rc = -1;
40030bb4: 1a97a294 csel w20, w20, w23, ge // ge = tcont
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CDATE_OFFSET,
40030bb8: 2a1503e1 mov w1, w21
40030bbc: 91013be4 add x4, sp, #0x4e
40030bc0: aa1303e0 mov x0, x19
40030bc4: 52800043 mov w3, #0x2 // #2
40030bc8: 97fff302 bl 4002d7d0 <fat_sector_write>
rc = -1;
40030bcc: f100001f cmp x0, #0x0
}
40030bd0: 1a97a280 csel w0, w20, w23, ge // ge = tcont
40030bd4: a94153f3 ldp x19, x20, [sp, #16]
40030bd8: a9425bf5 ldp x21, x22, [sp, #32]
40030bdc: a94363f7 ldp x23, x24, [sp, #48]
40030be0: a8c57bfd ldp x29, x30, [sp], #80
40030be4: d65f03c0 ret
return fs_info->vol.rdir_loc;
40030be8: b9402a63 ldr w3, [x19, #40]
40030bec: 17ffffc2 b 40030af4 <fat_file_write_time_and_date+0x44>
000000004002eb90 <fat_free_fat_clusters_chain>:
{
4002eb90: a9bb7bfd stp x29, x30, [sp, #-80]!
4002eb94: 910003fd mov x29, sp
4002eb98: a90153f3 stp x19, x20, [sp, #16]
4002eb9c: aa0003f3 mov x19, x0
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002eba0: b9401800 ldr w0, [x0, #24]
{
4002eba4: a9025bf5 stp x21, x22, [sp, #32]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002eba8: 0a000020 and w0, w1, w0
{
4002ebac: f9001bf7 str x23, [sp, #48]
4002ebb0: 2a0103f7 mov w23, w1
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002ebb4: b9401e61 ldr w1, [x19, #28]
uint32_t next_cln = 0;
4002ebb8: b9004fff str wzr, [sp, #76]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002ebbc: 6b00003f cmp w1, w0
4002ebc0: 540004a9 b.ls 4002ec54 <fat_free_fat_clusters_chain+0xc4> // b.plast<== NEVER TAKEN
uint32_t cur_cln = chain;
4002ebc4: 2a1703f4 mov w20, w23
uint32_t freed_cls_cnt = 0;
4002ebc8: 52800016 mov w22, #0x0 // #0
int rc = RC_OK, rc1 = RC_OK;
4002ebcc: 52800015 mov w21, #0x0 // #0
4002ebd0: 1400000a b 4002ebf8 <fat_free_fat_clusters_chain+0x68>
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
4002ebd4: 97ffff3b bl 4002e8c0 <fat_set_fat_cluster>
cur_cln = next_cln;
4002ebd8: b9404ff4 ldr w20, [sp, #76]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002ebdc: 29430a61 ldp w1, w2, [x19, #24]
if ( rc != RC_OK )
4002ebe0: 7100001f cmp w0, #0x0
4002ebe4: 1a8002b5 csel w21, w21, w0, eq // eq = none
freed_cls_cnt++;
4002ebe8: 110006d6 add w22, w22, #0x1
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002ebec: 0a010280 and w0, w20, w1
4002ebf0: 6b02001f cmp w0, w2
4002ebf4: 54000362 b.cs 4002ec60 <fat_free_fat_clusters_chain+0xd0> // b.hs, b.nlast
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
4002ebf8: 910133e2 add x2, sp, #0x4c
4002ebfc: 2a1403e1 mov w1, w20
4002ec00: aa1303e0 mov x0, x19
4002ec04: 97fffea3 bl 4002e690 <fat_get_fat_cluster>
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
4002ec08: 2a1403e1 mov w1, w20
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
4002ec0c: 2a0003e3 mov w3, w0
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
4002ec10: 52800002 mov w2, #0x0 // #0
4002ec14: aa1303e0 mov x0, x19
if ( rc != RC_OK )
4002ec18: 34fffde3 cbz w3, 4002ebd4 <fat_free_fat_clusters_chain+0x44> <== ALWAYS TAKEN
if(fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
4002ec1c: b9404e60 ldr w0, [x19, #76] <== NOT EXECUTED
4002ec20: 3100041f cmn w0, #0x1 <== NOT EXECUTED
4002ec24: 54000060 b.eq 4002ec30 <fat_free_fat_clusters_chain+0xa0> // b.none<== NOT EXECUTED
fs_info->vol.free_cls += freed_cls_cnt;
4002ec28: 0b160000 add w0, w0, w22 <== NOT EXECUTED
4002ec2c: b9004e60 str w0, [x19, #76] <== NOT EXECUTED
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
4002ec30: 2a0303f5 mov w21, w3 <== NOT EXECUTED
fat_buf_release(fs_info);
4002ec34: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002ec38: 97fffa92 bl 4002d680 <fat_buf_release> <== NOT EXECUTED
}
4002ec3c: 2a1503e0 mov w0, w21 <== NOT EXECUTED
4002ec40: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002ec44: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002ec48: f9401bf7 ldr x23, [sp, #48] <== NOT EXECUTED
4002ec4c: a8c57bfd ldp x29, x30, [sp], #80 <== NOT EXECUTED
4002ec50: d65f03c0 ret <== NOT EXECUTED
uint32_t freed_cls_cnt = 0;
4002ec54: 52800016 mov w22, #0x0 // #0 <== NOT EXECUTED
int rc = RC_OK, rc1 = RC_OK;
4002ec58: 52800015 mov w21, #0x0 // #0 <== NOT EXECUTED
4002ec5c: d503201f nop <== NOT EXECUTED
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
4002ec60: b9404e60 ldr w0, [x19, #76]
fs_info->vol.next_cl = chain;
4002ec64: b9005677 str w23, [x19, #84]
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
4002ec68: 3100041f cmn w0, #0x1
4002ec6c: 54000060 b.eq 4002ec78 <fat_free_fat_clusters_chain+0xe8> // b.none<== ALWAYS TAKEN
fs_info->vol.free_cls += freed_cls_cnt;
4002ec70: 0b160000 add w0, w0, w22 <== NOT EXECUTED
4002ec74: b9004e60 str w0, [x19, #76] <== NOT EXECUTED
fat_buf_release(fs_info);
4002ec78: aa1303e0 mov x0, x19
4002ec7c: 97fffa81 bl 4002d680 <fat_buf_release>
}
4002ec80: 2a1503e0 mov w0, w21
4002ec84: a94153f3 ldp x19, x20, [sp, #16]
4002ec88: a9425bf5 ldp x21, x22, [sp, #32]
4002ec8c: f9401bf7 ldr x23, [sp, #48]
4002ec90: a8c57bfd ldp x29, x30, [sp], #80
4002ec94: d65f03c0 ret
...
000000004002e650 <fat_free_unique_ino>:
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);
4002e650: b940a803 ldr w3, [x0, #168] <== NOT EXECUTED
4002e654: 52800022 mov w2, #0x1 // #1 <== NOT EXECUTED
4002e658: f9404c00 ldr x0, [x0, #152] <== NOT EXECUTED
4002e65c: 4b030021 sub w1, w1, w3 <== NOT EXECUTED
4002e660: 12000823 and w3, w1, #0x7 <== NOT EXECUTED
4002e664: 53037c21 lsr w1, w1, #3 <== NOT EXECUTED
4002e668: 1ac32042 lsl w2, w2, w3 <== NOT EXECUTED
4002e66c: 38614803 ldrb w3, [x0, w1, uxtw] <== NOT EXECUTED
4002e670: 0a220062 bic w2, w3, w2 <== NOT EXECUTED
4002e674: 38214802 strb w2, [x0, w1, uxtw] <== NOT EXECUTED
}
4002e678: d65f03c0 ret <== NOT EXECUTED
4002e67c: 00000000 udf #0
000000004002e690 <fat_get_fat_cluster>:
fat_get_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t *ret_val
)
{
4002e690: a9ba7bfd stp x29, x30, [sp, #-96]!
uint8_t *sec_buf;
uint32_t sec = 0;
uint32_t ofs = 0;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
4002e694: 7100043f cmp w1, #0x1
{
4002e698: 910003fd mov x29, sp
4002e69c: a90153f3 stp x19, x20, [sp, #16]
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
4002e6a0: 54000f69 b.ls 4002e88c <fat_get_fat_cluster+0x1fc> // b.plast <== NEVER TAKEN
4002e6a4: aa0003f3 mov x19, x0
4002e6a8: b9404000 ldr w0, [x0, #64]
4002e6ac: f90023f9 str x25, [sp, #64]
4002e6b0: 2a0103f9 mov w25, w1
4002e6b4: 11000400 add w0, w0, #0x1
4002e6b8: 6b01001f cmp w0, w1
4002e6bc: 54000e63 b.cc 4002e888 <fat_get_fat_cluster+0x1f8> // b.lo, b.ul, b.last<== NEVER TAKEN
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e6c0: a9025bf5 stp x21, x22, [sp, #32]
fs_info->vol.afat_loc;
4002e6c4: b9406276 ldr w22, [x19, #96]
4002e6c8: a90363f7 stp x23, x24, [sp, #48]
4002e6cc: aa0203f7 mov x23, x2
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e6d0: 39405a62 ldrb w2, [x19, #22]
4002e6d4: 39400a60 ldrb w0, [x19, #2]
4002e6d8: 37000422 tbnz w2, #0, 4002e75c <fat_get_fat_cluster+0xcc>
4002e6dc: 36080642 tbz w2, #1, 4002e7a4 <fat_get_fat_cluster+0x114>
4002e6e0: 0b010038 add w24, w1, w1
4002e6e4: 1ac02700 lsr w0, w24, w0
4002e6e8: 0b160016 add w22, w0, w22
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e6ec: 79400275 ldrh w21, [x19]
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e6f0: 910163e3 add x3, sp, #0x58
4002e6f4: 2a1603e1 mov w1, w22
4002e6f8: aa1303e0 mov x0, x19
4002e6fc: 52800022 mov w2, #0x1 // #1
4002e700: 97fffbac bl 4002d5b0 <fat_buf_access>
4002e704: 2a0003f4 mov w20, w0
if (rc != RC_OK)
4002e708: 35000400 cbnz w0, 4002e788 <fat_get_fat_cluster+0xf8> <== NEVER TAKEN
return rc;
switch ( fs_info->vol.type )
4002e70c: 39405a62 ldrb w2, [x19, #22]
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e710: 510006b5 sub w21, w21, #0x1
4002e714: 0a1802b5 and w21, w21, w24
switch ( fs_info->vol.type )
4002e718: 7100085f cmp w2, #0x2
4002e71c: 540004c0 b.eq 4002e7b4 <fat_get_fat_cluster+0x124> // b.none
4002e720: 7100105f cmp w2, #0x4
4002e724: 540005c0 b.eq 4002e7dc <fat_get_fat_cluster+0x14c> // b.none
4002e728: 7100045f cmp w2, #0x1
4002e72c: 540006c0 b.eq 4002e804 <fat_get_fat_cluster+0x174> // b.none <== ALWAYS TAKEN
*ret_val = *((uint32_t *)(sec_buf + ofs));
*ret_val = CF_LE_L(*ret_val);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
4002e730: 9400308f bl 4003a96c <__errno> <== NOT EXECUTED
4002e734: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED
4002e738: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002e73c: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e740: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e744: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002e748: b9000001 str w1, [x0] <== NOT EXECUTED
break;
}
return RC_OK;
}
4002e74c: 2a1403e0 mov w0, w20 <== NOT EXECUTED
4002e750: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e754: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002e758: d65f03c0 ret <== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e75c: 0b410438 add w24, w1, w1, lsr #1
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e760: 79400275 ldrh w21, [x19]
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e764: 910163e3 add x3, sp, #0x58
4002e768: 52800022 mov w2, #0x1 // #1
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e76c: 1ac02700 lsr w0, w24, w0
4002e770: 0b160016 add w22, w0, w22
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e774: 2a1603e1 mov w1, w22
4002e778: aa1303e0 mov x0, x19
4002e77c: 97fffb8d bl 4002d5b0 <fat_buf_access>
4002e780: 2a0003f4 mov w20, w0
if (rc != RC_OK)
4002e784: 34fffc40 cbz w0, 4002e70c <fat_get_fat_cluster+0x7c> <== ALWAYS TAKEN
}
4002e788: 2a1403e0 mov w0, w20 <== NOT EXECUTED
4002e78c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e790: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e794: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e798: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002e79c: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002e7a0: d65f03c0 ret <== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e7a4: 531e7438 lsl w24, w1, #2
4002e7a8: 1ac02700 lsr w0, w24, w0
4002e7ac: 0b160016 add w22, w0, w22
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e7b0: 17ffffcf b 4002e6ec <fat_get_fat_cluster+0x5c>
*ret_val = *((uint16_t *)(sec_buf + ofs));
4002e7b4: f9402fe0 ldr x0, [sp, #88]
break;
4002e7b8: f94023f9 ldr x25, [sp, #64]
*ret_val = *((uint16_t *)(sec_buf + ofs));
4002e7bc: 78754800 ldrh w0, [x0, w21, uxtw]
break;
4002e7c0: a9425bf5 ldp x21, x22, [sp, #32]
*ret_val = *((uint16_t *)(sec_buf + ofs));
4002e7c4: b90002e0 str w0, [x23]
}
4002e7c8: 2a1403e0 mov w0, w20
4002e7cc: a94153f3 ldp x19, x20, [sp, #16]
break;
4002e7d0: a94363f7 ldp x23, x24, [sp, #48]
}
4002e7d4: a8c67bfd ldp x29, x30, [sp], #96
4002e7d8: d65f03c0 ret
*ret_val = *((uint32_t *)(sec_buf + ofs));
4002e7dc: f9402fe0 ldr x0, [sp, #88]
break;
4002e7e0: f94023f9 ldr x25, [sp, #64]
*ret_val = *((uint32_t *)(sec_buf + ofs));
4002e7e4: b8754800 ldr w0, [x0, w21, uxtw]
break;
4002e7e8: a9425bf5 ldp x21, x22, [sp, #32]
*ret_val = *((uint32_t *)(sec_buf + ofs));
4002e7ec: b90002e0 str w0, [x23]
}
4002e7f0: 2a1403e0 mov w0, w20
4002e7f4: a94153f3 ldp x19, x20, [sp, #16]
break;
4002e7f8: a94363f7 ldp x23, x24, [sp, #48]
}
4002e7fc: a8c67bfd ldp x29, x30, [sp], #96
4002e800: d65f03c0 ret
*ret_val = (*(sec_buf + ofs));
4002e804: f9402fe1 ldr x1, [sp, #88]
4002e808: 2a1503e0 mov w0, w21
if ( ofs == (fs_info->vol.bps - 1) )
4002e80c: 79400263 ldrh w3, [x19]
*ret_val = (*(sec_buf + ofs));
4002e810: 38754824 ldrb w4, [x1, w21, uxtw]
if ( ofs == (fs_info->vol.bps - 1) )
4002e814: 51000463 sub w3, w3, #0x1
*ret_val = (*(sec_buf + ofs));
4002e818: b90002e4 str w4, [x23]
if ( ofs == (fs_info->vol.bps - 1) )
4002e81c: 6b15007f cmp w3, w21
4002e820: 54000200 b.eq 4002e860 <fat_get_fat_cluster+0x1d0> // b.none
*ret_val |= *(sec_buf + ofs + 1) << 8;
4002e824: 8b000021 add x1, x1, x0
4002e828: 39400420 ldrb w0, [x1, #1]
4002e82c: 2a002080 orr w0, w4, w0, lsl #8
*ret_val = (*ret_val) >> FAT12_SHIFT;
4002e830: f240033f tst x25, #0x1
4002e834: 12002c01 and w1, w0, #0xfff
4002e838: 53047c00 lsr w0, w0, #4
4002e83c: 1a811000 csel w0, w0, w1, ne // ne = any
4002e840: a9425bf5 ldp x21, x22, [sp, #32]
4002e844: f94023f9 ldr x25, [sp, #64]
4002e848: b90002e0 str w0, [x23]
}
4002e84c: 2a1403e0 mov w0, w20
4002e850: a94153f3 ldp x19, x20, [sp, #16]
4002e854: a94363f7 ldp x23, x24, [sp, #48]
4002e858: a8c67bfd ldp x29, x30, [sp], #96
4002e85c: d65f03c0 ret
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
4002e860: 910163e3 add x3, sp, #0x58
4002e864: 110006c1 add w1, w22, #0x1
4002e868: aa1303e0 mov x0, x19
4002e86c: 97fffb51 bl 4002d5b0 <fat_buf_access>
if (rc != RC_OK)
4002e870: 35000180 cbnz w0, 4002e8a0 <fat_get_fat_cluster+0x210> <== NEVER TAKEN
*ret_val |= *sec_buf << 8;
4002e874: f9402fe0 ldr x0, [sp, #88]
4002e878: b94002e1 ldr w1, [x23]
4002e87c: 39400000 ldrb w0, [x0]
4002e880: 2a002020 orr w0, w1, w0, lsl #8
4002e884: 17ffffeb b 4002e830 <fat_get_fat_cluster+0x1a0>
4002e888: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4002e88c: 94003038 bl 4003a96c <__errno> <== NOT EXECUTED
4002e890: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002e894: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED
4002e898: b9000001 str w1, [x0] <== NOT EXECUTED
4002e89c: 17ffffac b 4002e74c <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
4002e8a0: 2a0003f4 mov w20, w0 <== NOT EXECUTED
4002e8a4: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e8a8: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e8ac: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002e8b0: 17ffffa7 b 4002e74c <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
...
000000004002e580 <fat_get_unique_ino>:
* 0 means FAILED !!!
*
*/
uint32_t
fat_get_unique_ino(fat_fs_info_t *fs_info)
{
4002e580: a9be7bfd stp x29, x30, [sp, #-32]! <== NOT EXECUTED
4002e584: 910003fd mov x29, sp <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
4002e588: b940a401 ldr w1, [x0, #164] <== NOT EXECUTED
{
4002e58c: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED
4002e590: aa0003f3 mov x19, x0 <== 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))
4002e594: 12be0014 mov w20, #0xfffffff // #268435455 <== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
4002e598: 340003c1 cbz w1, 4002e610 <fat_get_unique_ino+0x90> <== NOT EXECUTED
4002e59c: 52800005 mov w5, #0x0 // #0 <== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
4002e5a0: f9404e60 ldr x0, [x19, #152] <== NOT EXECUTED
4002e5a4: 14000006 b 4002e5bc <fat_get_unique_ino+0x3c> <== NOT EXECUTED
fs_info->index++;
4002e5a8: 6b01007f cmp w3, w1 <== NOT EXECUTED
4002e5ac: 1a9f3063 csel w3, w3, wzr, cc // cc = lo, ul, last <== NOT EXECUTED
4002e5b0: b900a263 str w3, [x19, #160] <== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
4002e5b4: 6b0100bf cmp w5, w1 <== NOT EXECUTED
4002e5b8: 540002a0 b.eq 4002e60c <fat_get_unique_ino+0x8c> // b.none <== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
4002e5bc: b940a262 ldr w2, [x19, #160] <== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
4002e5c0: 110004a5 add w5, w5, #0x1 <== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
4002e5c4: 12000846 and w6, w2, #0x7 <== NOT EXECUTED
fs_info->index++;
4002e5c8: 11000443 add w3, w2, #0x1 <== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
4002e5cc: 53037c44 lsr w4, w2, #3 <== NOT EXECUTED
4002e5d0: aa0403e2 mov x2, x4 <== NOT EXECUTED
4002e5d4: 8b040004 add x4, x0, x4 <== NOT EXECUTED
4002e5d8: 38624802 ldrb w2, [x0, w2, uxtw] <== NOT EXECUTED
4002e5dc: 1ac62847 asr w7, w2, w6 <== NOT EXECUTED
4002e5e0: 3707fe47 tbnz w7, #0, 4002e5a8 <fat_get_unique_ino+0x28> <== NOT EXECUTED
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
4002e5e4: 52800020 mov w0, #0x1 // #1 <== NOT EXECUTED
4002e5e8: 1ac62006 lsl w6, w0, w6 <== NOT EXECUTED
4002e5ec: 2a0200c2 orr w2, w6, w2 <== NOT EXECUTED
4002e5f0: 39000082 strb w2, [x4] <== NOT EXECUTED
return (fs_info->uino_base + fs_info->index);
4002e5f4: b940a261 ldr w1, [x19, #160] <== NOT EXECUTED
4002e5f8: b940aa60 ldr w0, [x19, #168] <== NOT EXECUTED
4002e5fc: 0b010000 add w0, w0, w1 <== NOT EXECUTED
}
else
resrc_unsuff = true;
}
return 0;
}
4002e600: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e604: a8c27bfd ldp x29, x30, [sp], #32 <== NOT EXECUTED
4002e608: d65f03c0 ret <== NOT EXECUTED
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
4002e60c: 0b010021 add w1, w1, w1 <== NOT EXECUTED
4002e610: b940aa60 ldr w0, [x19, #168] <== NOT EXECUTED
4002e614: 4b000280 sub w0, w20, w0 <== NOT EXECUTED
4002e618: 6b01001f cmp w0, w1 <== NOT EXECUTED
4002e61c: 54000149 b.ls 4002e644 <fat_get_unique_ino+0xc4> // b.plast <== NOT EXECUTED
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
4002e620: f9404e60 ldr x0, [x19, #152] <== NOT EXECUTED
fs_info->uino_pool_size <<= 1;
4002e624: b900a661 str w1, [x19, #164] <== NOT EXECUTED
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
4002e628: 2a0103e1 mov w1, w1 <== NOT EXECUTED
4002e62c: 940020e5 bl 400369c0 <realloc> <== NOT EXECUTED
4002e630: f9004e60 str x0, [x19, #152] <== NOT EXECUTED
if (fs_info->uino != NULL)
4002e634: b4000080 cbz x0, 4002e644 <fat_get_unique_ino+0xc4> <== NOT EXECUTED
fs_info->index = fs_info->uino_pool_size;
4002e638: b940a661 ldr w1, [x19, #164] <== NOT EXECUTED
4002e63c: b900a261 str w1, [x19, #160] <== NOT EXECUTED
4002e640: 17ffffd6 b 4002e598 <fat_get_unique_ino+0x18> <== NOT EXECUTED
return 0;
4002e644: 52800000 mov w0, #0x0 // #0 <== NOT EXECUTED
4002e648: 17ffffee b 4002e600 <fat_get_unique_ino+0x80> <== NOT EXECUTED
4002e64c: 00000000 udf #0
000000004002e4f0 <fat_init_clusters_chain>:
int
fat_init_clusters_chain(
fat_fs_info_t *fs_info,
uint32_t start_cln
)
{
4002e4f0: a9bd7bfd stp x29, x30, [sp, #-48]!
4002e4f4: 910003fd mov x29, sp
4002e4f8: f9000bf3 str x19, [sp, #16]
4002e4fc: aa0003f3 mov x19, x0
int rc = RC_OK;
ssize_t ret = 0;
uint32_t cur_cln = start_cln;
4002e500: b9002fe1 str w1, [sp, #44]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002e504: 1400000d b 4002e538 <fat_init_clusters_chain+0x48>
{
ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0);
4002e508: b9400a63 ldr w3, [x19, #8]
4002e50c: 97fffce9 bl 4002d8b0 <fat_cluster_set>
4002e510: aa0003e1 mov x1, x0
if ( ret != fs_info->vol.bpc )
4002e514: b9400a63 ldr w3, [x19, #8]
{
return -1;
}
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002e518: 9100b3e2 add x2, sp, #0x2c
4002e51c: aa1303e0 mov x0, x19
if ( ret != fs_info->vol.bpc )
4002e520: eb01007f cmp x3, x1
4002e524: 54000201 b.ne 4002e564 <fat_init_clusters_chain+0x74> // b.any <== NEVER TAKEN
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4002e528: b9402fe1 ldr w1, [sp, #44]
4002e52c: 94000059 bl 4002e690 <fat_get_fat_cluster>
if ( rc != RC_OK )
4002e530: 35000140 cbnz w0, 4002e558 <fat_init_clusters_chain+0x68> <== NEVER TAKEN
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002e534: b9402fe1 ldr w1, [sp, #44]
4002e538: 29431663 ldp w3, w5, [x19, #24]
ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0);
4002e53c: aa1303e0 mov x0, x19
4002e540: 52800004 mov w4, #0x0 // #0
4002e544: 52800002 mov w2, #0x0 // #0
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
4002e548: 0a030023 and w3, w1, w3
4002e54c: 6b05007f cmp w3, w5
4002e550: 54fffdc3 b.cc 4002e508 <fat_init_clusters_chain+0x18> // b.lo, b.ul, b.last
return rc;
}
}
return rc;
4002e554: 52800000 mov w0, #0x0 // #0
}
4002e558: f9400bf3 ldr x19, [sp, #16]
4002e55c: a8c37bfd ldp x29, x30, [sp], #48
4002e560: d65f03c0 ret
return -1;
4002e564: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
}
4002e568: f9400bf3 ldr x19, [sp, #16] <== NOT EXECUTED
4002e56c: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED
4002e570: d65f03c0 ret <== NOT EXECUTED
...
000000004002dc00 <fat_init_volume_info>:
* 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)
{
4002dc00: a9b07bfd stp x29, x30, [sp, #-256]!
4002dc04: 910003fd mov x29, sp
4002dc08: a90153f3 stp x19, x20, [sp, #16]
4002dc0c: aa0003f3 mov x19, x0
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
vol->fd = open(device, O_RDWR);
4002dc10: aa0103e0 mov x0, x1
4002dc14: 52800041 mov w1, #0x2 // #2
{
4002dc18: a9025bf5 stp x21, x22, [sp, #32]
rtems_bdbuf_buffer *block = NULL;
4002dc1c: f90043ff str xzr, [sp, #128]
vol->fd = open(device, O_RDWR);
4002dc20: 97ffd360 bl 400229a0 <open>
4002dc24: b9006a60 str w0, [x19, #104]
if (vol->fd < 0)
4002dc28: 37f829a0 tbnz w0, #31, 4002e15c <fat_init_volume_info+0x55c> <== NEVER TAKEN
{
rtems_set_errno_and_return_minus_one(ENXIO);
}
rc = fstat(vol->fd, &stat_buf);
4002dc2c: 910263e1 add x1, sp, #0x98
4002dc30: 97ffd094 bl 40021e80 <fstat>
if (rc != 0)
4002dc34: 350029e0 cbnz w0, 4002e170 <fat_init_volume_info+0x570> <== 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))
4002dc38: b940abe1 ldr w1, [sp, #168]
close(vol->fd);
4002dc3c: b9406a60 ldr w0, [x19, #104]
if (!S_ISBLK(stat_buf.st_mode))
4002dc40: 12140c21 and w1, w1, #0xf000
4002dc44: 7140183f cmp w1, #0x6, lsl #12
4002dc48: 54002881 b.ne 4002e158 <fat_init_volume_info+0x558> // b.any <== NEVER TAKEN
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
4002dc4c: 9101c262 add x2, x19, #0x70
4002dc50: d2884121 mov x1, #0x4209 // #16905
4002dc54: f2a80101 movk x1, #0x4008, lsl #16
4002dc58: 97fffafa bl 4002c840 <ioctl>
4002dc5c: 2a0003f5 mov w21, w0
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) {
4002dc60: 35002880 cbnz w0, 4002e170 <fat_init_volume_info+0x570> <== NEVER TAKEN
vol->dev = stat_buf.st_rdev;
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dd, 0, &block);
4002dc64: f9403a60 ldr x0, [x19, #112]
4002dc68: 910203e2 add x2, sp, #0x80
vol->dev = stat_buf.st_rdev;
4002dc6c: f9405fe1 ldr x1, [sp, #184]
4002dc70: f9003e61 str x1, [x19, #120]
sc = rtems_bdbuf_read( vol->dd, 0, &block);
4002dc74: 52800001 mov w1, #0x0 // #0
4002dc78: 94002172 bl 40036240 <rtems_bdbuf_read>
if (sc != RTEMS_SUCCESSFUL)
4002dc7c: 35002880 cbnz w0, 4002e18c <fat_init_volume_info+0x58c> <== NEVER TAKEN
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EIO);
}
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
4002dc80: f94043e0 ldr x0, [sp, #128]
4002dc84: a90363f7 stp x23, x24, [sp, #48]
4002dc88: a9046bf9 stp x25, x26, [sp, #64]
4002dc8c: f9401c02 ldr x2, [x0, #56]
4002dc90: a90573fb stp x27, x28, [sp, #80]
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0)
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
else
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
4002dc94: 39408444 ldrb w4, [x2, #33]
4002dc98: 39408046 ldrb w6, [x2, #32]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dc9c: 39409445 ldrb w5, [x2, #37]
}
}
if (vol->type == FAT_FAT32)
{
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dca0: 3940b047 ldrb w7, [x2, #44]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dca4: 39409041 ldrb w1, [x2, #36]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
4002dca8: aa0420c6 orr x6, x6, x4, lsl #8
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dcac: 3940b45b ldrb w27, [x2, #45]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
4002dcb0: 39408844 ldrb w4, [x2, #34]
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dcb4: 3940b843 ldrb w3, [x2, #46]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dcb8: aa052021 orr x1, x1, x5, lsl #8
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dcbc: aa1b20fb orr x27, x7, x27, lsl #8
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dcc0: 39409845 ldrb w5, [x2, #38]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
4002dcc4: 39408c47 ldrb w7, [x2, #35]
4002dcc8: aa0440c4 orr x4, x6, x4, lsl #16
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dccc: 3940bc46 ldrb w6, [x2, #47]
4002dcd0: aa034363 orr x3, x27, x3, lsl #16
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dcd4: aa054025 orr x5, x1, x5, lsl #16
4002dcd8: 39402c41 ldrb w1, [x2, #11]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
4002dcdc: 2a07609c orr w28, w4, w7, lsl #24
4002dce0: 39403047 ldrb w7, [x2, #12]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dce4: 39409c48 ldrb w8, [x2, #39]
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dce8: aa066063 orr x3, x3, x6, lsl #24
4002dcec: 39404856 ldrb w22, [x2, #18]
4002dcf0: 39404446 ldrb w6, [x2, #17]
4002dcf4: 2a072021 orr w1, w1, w7, lsl #8
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4002dcf8: 2a0860a5 orr w5, w5, w8, lsl #24
4002dcfc: 39403c57 ldrb w23, [x2, #15]
4002dd00: 39403848 ldrb w8, [x2, #14]
4002dd04: 39404c47 ldrb w7, [x2, #19]
4002dd08: 2a1620d6 orr w22, w6, w22, lsl #8
4002dd0c: 39405058 ldrb w24, [x2, #20]
4002dd10: 290d97e1 stp w1, w5, [sp, #108]
4002dd14: 2a172117 orr w23, w8, w23, lsl #8
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002dd18: f9003fe3 str x3, [sp, #120]
4002dd1c: 39405843 ldrb w3, [x2, #22]
4002dd20: 2a1820f8 orr w24, w7, w24, lsl #8
4002dd24: 39405c59 ldrb w25, [x2, #23]
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
4002dd28: 3940a041 ldrb w1, [x2, #40]
4002dd2c: 3940c046 ldrb w6, [x2, #48]
4002dd30: 3940c45a ldrb w26, [x2, #49]
4002dd34: 2a192079 orr w25, w3, w25, lsl #8
4002dd38: 3940345b ldrb w27, [x2, #13]
4002dd3c: 39404054 ldrb w20, [x2, #16]
4002dd40: 2a1a20da orr w26, w6, w26, lsl #8
4002dd44: b90077e1 str w1, [sp, #116]
sc = rtems_bdbuf_release( block);
4002dd48: 940021be bl 40036440 <rtems_bdbuf_release>
if (sc != RTEMS_SUCCESSFUL)
4002dd4c: 294d97e1 ldp w1, w5, [sp, #108]
4002dd50: 350022c0 cbnz w0, 4002e1a8 <fat_init_volume_info+0x5a8> <== NEVER TAKEN
if ( (vol->bps != 512) &&
4002dd54: 51080020 sub w0, w1, #0x200
(vol->bps != 1024) &&
4002dd58: 51200022 sub w2, w1, #0x800
if ( (vol->bps != 512) &&
4002dd5c: 12167800 and w0, w0, #0xfffffdff
vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec);
4002dd60: 79000261 strh w1, [x19]
(vol->bps != 2048) &&
4002dd64: 12003c00 and w0, w0, #0xffff
4002dd68: 529effe6 mov w6, #0xf7ff // #63487
4002dd6c: 6a06005f tst w2, w6
4002dd70: 7a401804 ccmp w0, #0x0, #0x4, ne // ne = any
4002dd74: 54001de1 b.ne 4002e130 <fat_init_volume_info+0x530> // b.any <== NEVER TAKEN
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
4002dd78: 39000e7f strb wzr, [x19, #3]
4002dd7c: 53097c20 lsr w0, w1, #9
4002dd80: 37480101 tbnz w1, #9, 4002dda0 <fat_init_volume_info+0x1a0> <== ALWAYS TAKEN
4002dd84: 52800022 mov w2, #0x1 // #1 <== NOT EXECUTED
4002dd88: 11000446 add w6, w2, #0x1 <== NOT EXECUTED
4002dd8c: 2a0203e7 mov w7, w2 <== NOT EXECUTED
i >>= 1, vol->sec_mul++);
4002dd90: 13017c00 asr w0, w0, #1 <== NOT EXECUTED
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
4002dd94: 12001cc2 and w2, w6, #0xff <== NOT EXECUTED
4002dd98: 3607ff80 tbz w0, #0, 4002dd88 <fat_init_volume_info+0x188> <== NOT EXECUTED
4002dd9c: 39000e67 strb w7, [x19, #3] <== NOT EXECUTED
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
4002dda0: 39000a7f strb wzr, [x19, #2]
4002dda4: 2a0103e0 mov w0, w1
4002dda8: 37000101 tbnz w1, #0, 4002ddc8 <fat_init_volume_info+0x1c8> <== NEVER TAKEN
4002ddac: 52800022 mov w2, #0x1 // #1
4002ddb0: 11000446 add w6, w2, #0x1
4002ddb4: 2a0203e7 mov w7, w2
i >>= 1, vol->sec_log2++);
4002ddb8: 13017c00 asr w0, w0, #1
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
4002ddbc: 12001cc2 and w2, w6, #0xff
4002ddc0: 3607ff80 tbz w0, #0, 4002ddb0 <fat_init_volume_info+0x1b0>
4002ddc4: 39000a67 strb w7, [x19, #2]
sc = rtems_bdbuf_set_block_size (vol->dd, vol->bps, true);
4002ddc8: f9403a60 ldr x0, [x19, #112]
4002ddcc: 52800022 mov w2, #0x1 // #1
4002ddd0: b9006fe5 str w5, [sp, #108]
4002ddd4: 9400223b bl 400366c0 <rtems_bdbuf_set_block_size>
if (sc != RTEMS_SUCCESSFUL)
4002ddd8: b9406fe5 ldr w5, [sp, #108]
4002dddc: 35001aa0 cbnz w0, 4002e130 <fat_init_volume_info+0x530> <== NEVER TAKEN
vol->bytes_per_block = vol->bps;
4002dde0: 79400268 ldrh w8, [x19]
vol->sectors_per_block = 1;
4002dde4: 52800020 mov w0, #0x1 // #1
vol->bytes_per_block_log2 = vol->sec_log2;
4002dde8: 39400a67 ldrb w7, [x19, #2]
vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec);
4002ddec: 3900127b strb w27, [x19, #4]
vol->sectors_per_block = 1;
4002ddf0: 39003660 strb w0, [x19, #13]
vol->bytes_per_block = vol->bps;
4002ddf4: b9001268 str w8, [x19, #16]
vol->bytes_per_block_log2 = vol->sec_log2;
4002ddf8: 39005267 strb w7, [x19, #20]
if (vol->spc == 0)
4002ddfc: 340019bb cbz w27, 4002e130 <fat_init_volume_info+0x530> <== NEVER TAKEN
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
4002de00: 3900167f strb wzr, [x19, #5]
4002de04: 2a1b03e0 mov w0, w27
4002de08: 3700187b tbnz w27, #0, 4002e114 <fat_init_volume_info+0x514>
4002de0c: 52800021 mov w1, #0x1 // #1
4002de10: 11000422 add w2, w1, #0x1
4002de14: 2a0103e6 mov w6, w1
i >>= 1, vol->spc_log2++);
4002de18: 13017c00 asr w0, w0, #1
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
4002de1c: 12001c41 and w1, w2, #0xff
4002de20: 3607ff80 tbz w0, #0, 4002de10 <fat_init_volume_info+0x210>
if (vol->spc != UINT32_C(1) << vol->spc_log2)
4002de24: 52800021 mov w1, #0x1 // #1
4002de28: 2a0603e0 mov w0, w6
4002de2c: 1ac62021 lsl w1, w1, w6
4002de30: 39001666 strb w6, [x19, #5]
4002de34: 6b01037f cmp w27, w1
4002de38: 540017c1 b.ne 4002e130 <fat_init_volume_info+0x530> // b.any <== NEVER TAKEN
vol->bpc = ((uint32_t) vol->bps) << vol->spc_log2;
4002de3c: 1ac02100 lsl w0, w8, w0
4002de40: b9000a60 str w0, [x19, #8]
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
4002de44: 3900327f strb wzr, [x19, #12]
4002de48: 37000100 tbnz w0, #0, 4002de68 <fat_init_volume_info+0x268> <== NEVER TAKEN
4002de4c: 52800021 mov w1, #0x1 // #1
4002de50: 11000422 add w2, w1, #0x1
4002de54: 2a0103e6 mov w6, w1
i >>= 1, vol->bpc_log2++);
4002de58: 13017c00 asr w0, w0, #1
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
4002de5c: 12001c41 and w1, w2, #0xff
4002de60: 3607ff80 tbz w0, #0, 4002de50 <fat_init_volume_info+0x250>
4002de64: 39003266 strb w6, [x19, #12]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
4002de68: 51000500 sub w0, w8, #0x1
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
4002de6c: 7100033f cmp w25, #0x0
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
4002de70: 0b161400 add w0, w0, w22, lsl #5
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
4002de74: 1a9900a5 csel w5, w5, w25, eq // eq = none
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
4002de78: 39005674 strb w20, [x19, #21]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
4002de7c: 7100031f cmp w24, #0x0
4002de80: 1a98039c csel w28, w28, w24, eq // eq = none
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
4002de84: 79004277 strh w23, [x19, #32]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
4002de88: 1ac80c00 sdiv w0, w0, w8
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
4002de8c: 1b055e94 madd w20, w20, w5, w23
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
4002de90: 2904d265 stp w5, w20, [x19, #36]
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
4002de94: 79005a76 strh w22, [x19, #44]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
4002de98: b9003a7c str w28, [x19, #56]
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
4002de9c: 0b140014 add w20, w0, w20
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
4002dea0: 1ac72007 lsl w7, w0, w7
data_secs = vol->tot_secs - vol->data_fsec;
4002dea4: 4b140381 sub w1, w28, w20
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
4002dea8: 29061e60 stp w0, w7, [x19, #48]
vol->data_cls = data_secs / vol->spc;
4002deac: 1adb0823 udiv w3, w1, w27
4002deb0: 29078e74 stp w20, w3, [x19, #60]
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
4002deb4: 713fd07f cmp w3, #0xff4
4002deb8: 54000a89 b.ls 4002e008 <fat_init_volume_info+0x408> // b.plast
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
4002debc: 529ffe80 mov w0, #0xfff4 // #65524
4002dec0: 6b00007f cmp w3, w0
4002dec4: 54000d48 b.hi 4002e06c <fat_init_volume_info+0x46c> // b.pmore
vol->mask = FAT_FAT16_MASK;
4002dec8: d29fffe0 mov x0, #0xffff // #65535
vol->type = FAT_FAT16;
4002decc: 52800041 mov w1, #0x2 // #2
vol->mask = FAT_FAT16_MASK;
4002ded0: f2dfff00 movk x0, #0xfff8, lsl #32
vol->type = FAT_FAT16;
4002ded4: 39005a61 strb w1, [x19, #22]
vol->mask = FAT_FAT16_MASK;
4002ded8: f9000e60 str x0, [x19, #24]
else
{
vol->rdir_cl = 0;
vol->mirror = 0;
vol->afat = 0;
vol->free_cls = FAT_UNDEFINED_VALUE;
4002dedc: 12800000 mov w0, #0xffffffff // #-1
vol->rdir_cl = 0;
4002dee0: b900467f str wzr, [x19, #68]
vol->free_cls = FAT_UNDEFINED_VALUE;
4002dee4: b9004e60 str w0, [x19, #76]
vol->next_cl = FAT_UNDEFINED_VALUE;
4002dee8: b9005660 str w0, [x19, #84]
vol->mirror = 0;
4002deec: 3901727f strb wzr, [x19, #92]
vol->afat = 0;
4002def0: 3901927f strb wzr, [x19, #100]
if (fs_info->c.state == FAT_CACHE_EMPTY)
4002def4: 3942d660 ldrb w0, [x19, #181]
4002def8: 34000060 cbz w0, 4002df04 <fat_init_volume_info+0x304>
4002defc: aa1303e0 mov x0, x19
4002df00: 97fffd40 bl 4002d400 <fat_buf_release.part.0>
}
_fat_block_release(fs_info);
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
4002df04: 39419262 ldrb w2, [x19, #100]
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
4002df08: d2800301 mov x1, #0x18 // #24
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
4002df0c: 79404263 ldrh w3, [x19, #32]
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
4002df10: d2800040 mov x0, #0x2 // #2
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
4002df14: b9402664 ldr w4, [x19, #36]
4002df18: 1b040c42 madd w2, w2, w4, w3
4002df1c: b9006262 str w2, [x19, #96]
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
4002df20: 97fff9b0 bl 4002c5e0 <calloc>
4002df24: f9004660 str x0, [x19, #136]
4002df28: aa0003e2 mov x2, x0
if ( fs_info->vhash == NULL )
4002df2c: b4001680 cbz x0, 4002e1fc <fat_init_volume_info+0x5fc> <== NEVER TAKEN
head->next = tail;
4002df30: 91006044 add x4, x2, #0x18
return &the_chain->Tail.Node;
4002df34: 91008043 add x3, x2, #0x20
4002df38: 91002000 add x0, x0, #0x8
head->previous = NULL;
4002df3c: a9007c40 stp x0, xzr, [x2]
}
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));
4002df40: d2800301 mov x1, #0x18 // #24
head->next = tail;
4002df44: a9010c42 stp x2, x3, [x2, #16]
4002df48: d2800040 mov x0, #0x2 // #2
tail->previous = head;
4002df4c: a902105f stp xzr, x4, [x2, #32]
4002df50: 97fff9a4 bl 4002c5e0 <calloc>
4002df54: f9004a60 str x0, [x19, #144]
if ( fs_info->rhash == NULL )
4002df58: b4001660 cbz x0, 4002e224 <fat_init_volume_info+0x624> <== 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;
4002df5c: 39400e66 ldrb w6, [x19, #3]
head->next = tail;
4002df60: 91006004 add x4, x0, #0x18
4002df64: b9403a62 ldr w2, [x19, #56]
return &the_chain->Tail.Node;
4002df68: 91008003 add x3, x0, #0x20
4002df6c: 91002001 add x1, x0, #0x8
head->previous = NULL;
4002df70: a9007c01 stp x1, xzr, [x0]
fs_info->index = 0;
4002df74: d2c02005 mov x5, #0x10000000000 // #1099511627776
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
4002df78: 1ac62042 lsl w2, w2, w6
head->next = tail;
4002df7c: a9010c00 stp x0, x3, [x0, #16]
4002df80: 531c6c42 lsl w2, w2, #4
head->previous = NULL;
4002df84: f900049f str xzr, [x4, #8]
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
4002df88: d2800021 mov x1, #0x1 // #1
tail->previous = head;
4002df8c: f9000464 str x4, [x3, #8]
4002df90: d2802000 mov x0, #0x100 // #256
fs_info->index = 0;
4002df94: f9005265 str x5, [x19, #160]
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
4002df98: b900aa62 str w2, [x19, #168]
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
4002df9c: 97fff991 bl 4002c5e0 <calloc>
4002dfa0: f9004e60 str x0, [x19, #152]
if ( fs_info->uino == NULL )
4002dfa4: b40014c0 cbz x0, 4002e23c <fat_init_volume_info+0x63c> <== 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));
4002dfa8: 79400260 ldrh w0, [x19]
4002dfac: d2800021 mov x1, #0x1 // #1
4002dfb0: 97fff98c bl 4002c5e0 <calloc>
4002dfb4: f9006260 str x0, [x19, #192]
if (fs_info->sec_buf == NULL)
4002dfb8: b4001520 cbz x0, 4002e25c <fat_init_volume_info+0x65c> <== NEVER TAKEN
return (sec_num & (vol->spc - 1)) == 0;
4002dfbc: 39401260 ldrb w0, [x19, #4]
4002dfc0: b9403e61 ldr w1, [x19, #60]
4002dfc4: 51000400 sub w0, w0, #0x1
/*
* 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)
4002dfc8: 6a01001f tst w0, w1
4002dfcc: 540000e1 b.ne 4002dfe8 <fat_init_volume_info+0x3e8> // b.any <== NEVER TAKEN
&& (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc)))
4002dfd0: 39405a61 ldrb w1, [x19, #22]
4002dfd4: 7100103f cmp w1, #0x4
4002dfd8: 54000240 b.eq 4002e020 <fat_init_volume_info+0x420> // b.none
return (sec_num & (vol->spc - 1)) == 0;
4002dfdc: b9402a61 ldr w1, [x19, #40]
&& (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc)))
4002dfe0: 6a01001f tst w0, w1
4002dfe4: 540001e0 b.eq 4002e020 <fat_init_volume_info+0x420> // b.none <== ALWAYS TAKEN
4002dfe8: a94363f7 ldp x23, x24, [sp, #48]
4002dfec: a9446bf9 ldp x25, x26, [sp, #64]
4002dff0: a94573fb ldp x27, x28, [sp, #80]
vol->sectors_per_block = vol->spc;
}
}
return RC_OK;
}
4002dff4: 2a1503e0 mov w0, w21
4002dff8: a94153f3 ldp x19, x20, [sp, #16]
4002dffc: a9425bf5 ldp x21, x22, [sp, #32]
4002e000: a8d07bfd ldp x29, x30, [sp], #256
4002e004: d65f03c0 ret
vol->mask = FAT_FAT12_MASK;
4002e008: d281ffe0 mov x0, #0xfff // #4095
vol->type = FAT_FAT12;
4002e00c: 52800021 mov w1, #0x1 // #1
vol->mask = FAT_FAT12_MASK;
4002e010: f2c1ff00 movk x0, #0xff8, lsl #32
vol->type = FAT_FAT12;
4002e014: 39005a61 strb w1, [x19, #22]
vol->mask = FAT_FAT12_MASK;
4002e018: f9000e60 str x0, [x19, #24]
4002e01c: 17ffffb0 b 4002dedc <fat_init_volume_info+0x2dc>
sc = rtems_bdbuf_set_block_size (vol->dd, vol->bpc, true);
4002e020: b9400a61 ldr w1, [x19, #8]
4002e024: 52800022 mov w2, #0x1 // #1
4002e028: f9403a60 ldr x0, [x19, #112]
4002e02c: 940021a5 bl 400366c0 <rtems_bdbuf_set_block_size>
if (sc == RTEMS_SUCCESSFUL)
4002e030: 35fffdc0 cbnz w0, 4002dfe8 <fat_init_volume_info+0x3e8>
vol->bytes_per_block_log2 = vol->bpc_log2;
4002e034: 39403260 ldrb w0, [x19, #12]
vol->sectors_per_block = vol->spc;
4002e038: 39401262 ldrb w2, [x19, #4]
4002e03c: 39003662 strb w2, [x19, #13]
vol->bytes_per_block_log2 = vol->bpc_log2;
4002e040: 39005260 strb w0, [x19, #20]
}
4002e044: 2a1503e0 mov w0, w21
vol->bytes_per_block = vol->bpc;
4002e048: b9400a61 ldr w1, [x19, #8]
4002e04c: a94363f7 ldp x23, x24, [sp, #48]
4002e050: a9446bf9 ldp x25, x26, [sp, #64]
4002e054: a94573fb ldp x27, x28, [sp, #80]
4002e058: b9001261 str w1, [x19, #16]
}
4002e05c: a94153f3 ldp x19, x20, [sp, #16]
4002e060: a9425bf5 ldp x21, x22, [sp, #32]
4002e064: a8d07bfd ldp x29, x30, [sp], #256
4002e068: d65f03c0 ret
else if ( vol->data_cls < FAT_FAT32_MASK - 1 )
4002e06c: 321f6be0 mov w0, #0xffffffe // #268435454
4002e070: 6b00007f cmp w3, w0
4002e074: 540005e2 b.cs 4002e130 <fat_init_volume_info+0x530> // b.hs, b.nlast<== NEVER TAKEN
vol->afat = 0;
4002e078: b94077e1 ldr w1, [sp, #116]
vol->type = FAT_FAT32;
4002e07c: 52800082 mov w2, #0x4 // #4
4002e080: 39005a62 strb w2, [x19, #22]
vol->afat = 0;
4002e084: 12000c20 and w0, w1, #0xf
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
4002e088: 1219603c and w28, w1, #0xffffff80
vol->afat = 0;
4002e08c: f279003f tst x1, #0x80
vol->mask = FAT_FAT32_MASK;
4002e090: b21d63e1 mov x1, #0xffffff80ffffff8 // #1152921470515544056
4002e094: f29fffe1 movk x1, #0xffff
4002e098: f9000e61 str x1, [x19, #24]
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002e09c: b9407be1 ldr w1, [sp, #120]
vol->afat = 0;
4002e0a0: 1a9f1000 csel w0, w0, wzr, ne // ne = any
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4002e0a4: b9004661 str w1, [x19, #68]
vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec);
4002e0a8: 7900927a strh w26, [x19, #72]
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
4002e0ac: 3901727c strb w28, [x19, #92]
4002e0b0: 39019260 strb w0, [x19, #100]
if( vol->info_sec == 0 )
4002e0b4: 340003fa cbz w26, 4002e130 <fat_init_volume_info+0x530> <== NEVER TAKEN
ret = _fat_block_read(fs_info, vol->info_sec , 0,
4002e0b8: 2a1a03e1 mov w1, w26
4002e0bc: 910223e4 add x4, sp, #0x88
4002e0c0: aa1303e0 mov x0, x19
4002e0c4: 52800083 mov w3, #0x4 // #4
4002e0c8: 52800002 mov w2, #0x0 // #0
4002e0cc: 97fffd75 bl 4002d6a0 <_fat_block_read>
if ( ret < 0 )
4002e0d0: b7f80880 tbnz x0, #63, 4002e1e0 <fat_init_volume_info+0x5e0> <== NEVER TAKEN
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
4002e0d4: b9408be1 ldr w1, [sp, #136]
4002e0d8: 528a4a40 mov w0, #0x5252 // #21074
4002e0dc: 72a82c20 movk w0, #0x4161, lsl #16
4002e0e0: 6b00003f cmp w1, w0
4002e0e4: 540001e1 b.ne 4002e120 <fat_init_volume_info+0x520> // b.any <== NEVER TAKEN
ret = _fat_block_read(fs_info, vol->info_sec , FAT_FSI_INFO,
4002e0e8: 79409261 ldrh w1, [x19, #72]
4002e0ec: 910223e4 add x4, sp, #0x88
4002e0f0: aa1303e0 mov x0, x19
4002e0f4: 52800183 mov w3, #0xc // #12
4002e0f8: 52803c82 mov w2, #0x1e4 // #484
4002e0fc: 97fffd69 bl 4002d6a0 <_fat_block_read>
if ( ret < 0 )
4002e100: b7f80680 tbnz x0, #63, 4002e1d0 <fat_init_volume_info+0x5d0> <== NEVER TAKEN
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
4002e104: 295183e1 ldp w1, w0, [sp, #140]
vol->free_cls_in_fs_info =
4002e108: 29098661 stp w1, w1, [x19, #76]
vol->next_cl_in_fs_info =
4002e10c: 290a8260 stp w0, w0, [x19, #84]
vol->next_cl = vol->next_cl_in_fs_info;
4002e110: 17ffff79 b 4002def4 <fat_init_volume_info+0x2f4>
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
4002e114: 52800000 mov w0, #0x0 // #0
4002e118: 52800021 mov w1, #0x1 // #1
4002e11c: 17ffff46 b 4002de34 <fat_init_volume_info+0x234>
if (fs_info->c.state == FAT_CACHE_EMPTY)
4002e120: 3942d660 ldrb w0, [x19, #181] <== NOT EXECUTED
4002e124: 34000060 cbz w0, 4002e130 <fat_init_volume_info+0x530> <== NOT EXECUTED
4002e128: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002e12c: 97fffcb5 bl 4002d400 <fat_buf_release.part.0> <== NOT EXECUTED
close(vol->fd);
4002e130: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
4002e134: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e138: 97ffce9a bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
4002e13c: 9400320c bl 4003a96c <__errno> <== NOT EXECUTED
4002e140: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
4002e144: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e148: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002e14c: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002e150: b9000001 str w1, [x0] <== NOT EXECUTED
4002e154: 17ffffa8 b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e158: 97ffce92 bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENXIO);
4002e15c: 94003204 bl 4003a96c <__errno> <== NOT EXECUTED
4002e160: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
4002e164: 528000c1 mov w1, #0x6 // #6 <== NOT EXECUTED
4002e168: b9000001 str w1, [x0] <== NOT EXECUTED
4002e16c: 17ffffa2 b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e170: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENXIO);
4002e174: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e178: 97ffce8a bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENXIO);
4002e17c: 940031fc bl 4003a96c <__errno> <== NOT EXECUTED
4002e180: 528000c1 mov w1, #0x6 // #6 <== NOT EXECUTED
4002e184: b9000001 str w1, [x0] <== NOT EXECUTED
4002e188: 17ffff9b b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e18c: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO);
4002e190: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e194: 97ffce83 bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO);
4002e198: 940031f5 bl 4003a96c <__errno> <== NOT EXECUTED
4002e19c: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002e1a0: b9000001 str w1, [x0] <== NOT EXECUTED
4002e1a4: 17ffff94 b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e1a8: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
4002e1ac: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e1b0: 97ffce7c bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
4002e1b4: 940031ee bl 4003a96c <__errno> <== NOT EXECUTED
4002e1b8: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002e1bc: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e1c0: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002e1c4: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002e1c8: b9000001 str w1, [x0] <== NOT EXECUTED
4002e1cc: 17ffff8a b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
if (fs_info->c.state == FAT_CACHE_EMPTY)
4002e1d0: 3942d660 ldrb w0, [x19, #181] <== NOT EXECUTED
4002e1d4: 34000060 cbz w0, 4002e1e0 <fat_init_volume_info+0x5e0> <== NOT EXECUTED
4002e1d8: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002e1dc: 97fffc89 bl 4002d400 <fat_buf_release.part.0> <== NOT EXECUTED
close(vol->fd);
4002e1e0: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
return -1;
4002e1e4: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e1e8: 97ffce6e bl 40021ba0 <close> <== NOT EXECUTED
return -1;
4002e1ec: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e1f0: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002e1f4: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002e1f8: 17ffff7f b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e1fc: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002e200: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e204: 97ffce67 bl 40021ba0 <close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002e208: 940031d9 bl 4003a96c <__errno> <== NOT EXECUTED
4002e20c: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED
4002e210: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e214: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002e218: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002e21c: b9000001 str w1, [x0] <== NOT EXECUTED
4002e220: 17ffff75 b 4002dff4 <fat_init_volume_info+0x3f4> <== NOT EXECUTED
close(vol->fd);
4002e224: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002e228: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e22c: 97ffce5d bl 40021ba0 <close> <== NOT EXECUTED
free(fs_info->vhash);
4002e230: f9404660 ldr x0, [x19, #136] <== NOT EXECUTED
free(fs_info->uino);
4002e234: 97ffced3 bl 40021d80 <free> <== NOT EXECUTED
4002e238: 17fffff4 b 4002e208 <fat_init_volume_info+0x608> <== NOT EXECUTED
close(vol->fd);
4002e23c: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002e240: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e244: 97ffce57 bl 40021ba0 <close> <== NOT EXECUTED
free(fs_info->vhash);
4002e248: f9404660 ldr x0, [x19, #136] <== NOT EXECUTED
4002e24c: 97ffcecd bl 40021d80 <free> <== NOT EXECUTED
free(fs_info->rhash);
4002e250: f9404a60 ldr x0, [x19, #144] <== NOT EXECUTED
free(fs_info->uino);
4002e254: 97ffcecb bl 40021d80 <free> <== NOT EXECUTED
4002e258: 17ffffec b 4002e208 <fat_init_volume_info+0x608> <== NOT EXECUTED
close(vol->fd);
4002e25c: b9406a60 ldr w0, [x19, #104] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
4002e260: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
close(vol->fd);
4002e264: 97ffce4f bl 40021ba0 <close> <== NOT EXECUTED
free(fs_info->vhash);
4002e268: f9404660 ldr x0, [x19, #136] <== NOT EXECUTED
4002e26c: 97ffcec5 bl 40021d80 <free> <== NOT EXECUTED
free(fs_info->rhash);
4002e270: f9404a60 ldr x0, [x19, #144] <== NOT EXECUTED
4002e274: 97ffcec3 bl 40021d80 <free> <== NOT EXECUTED
free(fs_info->uino);
4002e278: f9404e60 ldr x0, [x19, #152] <== NOT EXECUTED
4002e27c: 97ffcec1 bl 40021d80 <free> <== NOT EXECUTED
4002e280: 17ffffe2 b 4002e208 <fat_init_volume_info+0x608> <== NOT EXECUTED
...
000000004002eca0 <fat_scan_fat_for_free_clusters>:
{
4002eca0: a9b87bfd stp x29, x30, [sp, #-128]!
4002eca4: 910003fd mov x29, sp
4002eca8: a90153f3 stp x19, x20, [sp, #16]
uint32_t cl4find = 2;
4002ecac: 52800054 mov w20, #0x2 // #2
if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls)
4002ecb0: b9405413 ldr w19, [x0, #84]
{
4002ecb4: a9025bf5 stp x21, x22, [sp, #32]
4002ecb8: aa0303f6 mov x22, x3
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
4002ecbc: b9404015 ldr w21, [x0, #64]
{
4002ecc0: a9046bf9 stp x25, x26, [sp, #64]
4002ecc4: a90573fb stp x27, x28, [sp, #80]
4002ecc8: aa0003fc mov x28, x0
if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls)
4002eccc: 51000a60 sub w0, w19, #0x2
uint32_t cl4find = 2;
4002ecd0: 6b0002bf cmp w21, w0
*cls_added = 0;
4002ecd4: b900007f str wzr, [x3]
{
4002ecd8: f90037e4 str x4, [sp, #104]
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
4002ecdc: 0b1402b5 add w21, w21, w20
uint32_t cl4find = 2;
4002ece0: 1a948273 csel w19, w19, w20, hi // hi = pmore
while (*cls_added != count && i < data_cls_val)
4002ece4: 7100005f cmp w2, #0x0
4002ece8: 7a5412a0 ccmp w21, w20, #0x0, ne // ne = any
4002ecec: 54000f89 b.ls 4002eedc <fat_scan_fat_for_free_clusters+0x23c> // b.plast<== NEVER TAKEN
4002ecf0: aa0103fb mov x27, x1
4002ecf4: 12001cba and w26, w5, #0xff
4002ecf8: a90363f7 stp x23, x24, [sp, #48]
4002ecfc: 2a0203f7 mov w23, w2
cl4find = 2;
4002ed00: 2a1403f8 mov w24, w20
uint32_t save_cln = FAT_UNDEFINED_VALUE;
4002ed04: 12800019 mov w25, #0xffffffff // #-1
rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln);
4002ed08: 9101f3e2 add x2, sp, #0x7c
4002ed0c: 2a1303e1 mov w1, w19
4002ed10: aa1c03e0 mov x0, x28
uint32_t next_cln = 0;
4002ed14: b9007fff str wzr, [sp, #124]
rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln);
4002ed18: 97fffe5e bl 4002e690 <fat_get_fat_cluster>
4002ed1c: 2a0003e3 mov w3, w0
if ( rc != RC_OK )
4002ed20: 35000b00 cbnz w0, 4002ee80 <fat_scan_fat_for_free_clusters+0x1e0> <== NEVER TAKEN
if (next_cln == FAT_GENFAT_FREE)
4002ed24: b9407fe0 ldr w0, [sp, #124]
if (*cls_added != 0)
4002ed28: b94002c1 ldr w1, [x22]
if (next_cln == FAT_GENFAT_FREE)
4002ed2c: 350001c0 cbnz w0, 4002ed64 <fat_scan_fat_for_free_clusters+0xc4>
if (*cls_added == 0)
4002ed30: 35000541 cbnz w1, 4002edd8 <fat_scan_fat_for_free_clusters+0x138>
*chain = cl4find;
4002ed34: b9000373 str w19, [x27]
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
4002ed38: 2a1303e1 mov w1, w19
4002ed3c: aa1c03e0 mov x0, x28
4002ed40: 12800002 mov w2, #0xffffffff // #-1
4002ed44: 97fffedf bl 4002e8c0 <fat_set_fat_cluster>
4002ed48: 2a0003e3 mov w3, w0
if ( rc != RC_OK )
4002ed4c: 350009e0 cbnz w0, 4002ee88 <fat_scan_fat_for_free_clusters+0x1e8> <== NEVER TAKEN
if (zero_fill)
4002ed50: 3500083a cbnz w26, 4002ee54 <fat_scan_fat_for_free_clusters+0x1b4>
(*cls_added)++;
4002ed54: b94002c1 ldr w1, [x22]
4002ed58: 2a1303f9 mov w25, w19
4002ed5c: 11000421 add w1, w1, #0x1
4002ed60: b90002c1 str w1, [x22]
cl4find++;
4002ed64: 11000673 add w19, w19, #0x1
i++;
4002ed68: 11000694 add w20, w20, #0x1
cl4find = 2;
4002ed6c: 6b1302bf cmp w21, w19
4002ed70: 1a988273 csel w19, w19, w24, hi // hi = pmore
while (*cls_added != count && i < data_cls_val)
4002ed74: 6b1402bf cmp w21, w20
4002ed78: 7a4182e4 ccmp w23, w1, #0x4, hi // hi = pmore
4002ed7c: 54fffc61 b.ne 4002ed08 <fat_scan_fat_for_free_clusters+0x68> // b.any
4002ed80: a94363f7 ldp x23, x24, [sp, #48]
*last_cl = save_cln;
4002ed84: f94037e0 ldr x0, [sp, #104]
4002ed88: b9000019 str w25, [x0]
fs_info->vol.next_cl = save_cln;
4002ed8c: b9005799 str w25, [x28, #84]
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
4002ed90: b9404f80 ldr w0, [x28, #76]
4002ed94: 3100041f cmn w0, #0x1
4002ed98: 54000080 b.eq 4002eda8 <fat_scan_fat_for_free_clusters+0x108> // b.none<== ALWAYS TAKEN
fs_info->vol.free_cls -= (*cls_added);
4002ed9c: b94002c1 ldr w1, [x22] <== NOT EXECUTED
4002eda0: 4b010000 sub w0, w0, w1 <== NOT EXECUTED
4002eda4: b9004f80 str w0, [x28, #76] <== NOT EXECUTED
return RC_OK;
4002eda8: 52800003 mov w3, #0x0 // #0
fat_buf_release(fs_info);
4002edac: aa1c03e0 mov x0, x28
return RC_OK;
4002edb0: b9006be3 str w3, [sp, #104]
fat_buf_release(fs_info);
4002edb4: 97fffa33 bl 4002d680 <fat_buf_release>
4002edb8: b9406be3 ldr w3, [sp, #104]
}
4002edbc: a94153f3 ldp x19, x20, [sp, #16]
4002edc0: 2a0303e0 mov w0, w3
4002edc4: a9425bf5 ldp x21, x22, [sp, #32]
4002edc8: a9446bf9 ldp x25, x26, [sp, #64]
4002edcc: a94573fb ldp x27, x28, [sp, #80]
4002edd0: a8c87bfd ldp x29, x30, [sp], #128
4002edd4: d65f03c0 ret
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
4002edd8: 2a1303e1 mov w1, w19
4002eddc: aa1c03e0 mov x0, x28
4002ede0: 12800002 mov w2, #0xffffffff // #-1
4002ede4: 97fffeb7 bl 4002e8c0 <fat_set_fat_cluster>
4002ede8: 2a0003e3 mov w3, w0
if ( rc != RC_OK )
4002edec: 350005e0 cbnz w0, 4002eea8 <fat_scan_fat_for_free_clusters+0x208> <== NEVER TAKEN
rc = fat_set_fat_cluster(fs_info, save_cln, cl4find);
4002edf0: 2a1903e1 mov w1, w25
4002edf4: 2a1303e2 mov w2, w19
4002edf8: aa1c03e0 mov x0, x28
4002edfc: 97fffeb1 bl 4002e8c0 <fat_set_fat_cluster>
4002ee00: 2a0003e3 mov w3, w0
if ( rc != RC_OK )
4002ee04: 34fffa60 cbz w0, 4002ed50 <fat_scan_fat_for_free_clusters+0xb0> <== ALWAYS TAKEN
fat_free_fat_clusters_chain(fs_info, (*chain));
4002ee08: b9400361 ldr w1, [x27] <== NOT EXECUTED
4002ee0c: aa1c03e0 mov x0, x28 <== NOT EXECUTED
4002ee10: b9006be3 str w3, [sp, #104] <== NOT EXECUTED
4002ee14: 97ffff5f bl 4002eb90 <fat_free_fat_clusters_chain> <== NOT EXECUTED
(void) fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_FREE);
4002ee18: 2a1303e1 mov w1, w19 <== NOT EXECUTED
4002ee1c: 52800002 mov w2, #0x0 // #0 <== NOT EXECUTED
4002ee20: aa1c03e0 mov x0, x28 <== NOT EXECUTED
4002ee24: 97fffea7 bl 4002e8c0 <fat_set_fat_cluster> <== NOT EXECUTED
fat_buf_release(fs_info);
4002ee28: aa1c03e0 mov x0, x28 <== NOT EXECUTED
4002ee2c: 97fffa15 bl 4002d680 <fat_buf_release> <== NOT EXECUTED
return rc;
4002ee30: b9406be3 ldr w3, [sp, #104] <== NOT EXECUTED
}
4002ee34: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002ee38: 2a0303e0 mov w0, w3 <== NOT EXECUTED
4002ee3c: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
return rc;
4002ee40: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
}
4002ee44: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002ee48: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002ee4c: a8c87bfd ldp x29, x30, [sp], #128 <== NOT EXECUTED
4002ee50: d65f03c0 ret <== NOT EXECUTED
fat_cluster_set(fs_info, cl4find, 0, fs_info->vol.bpc, 0);
4002ee54: b9400b83 ldr w3, [x28, #8]
4002ee58: 2a1303e1 mov w1, w19
4002ee5c: aa1c03e0 mov x0, x28
4002ee60: 52800004 mov w4, #0x0 // #0
4002ee64: 52800002 mov w2, #0x0 // #0
4002ee68: 97fffa92 bl 4002d8b0 <fat_cluster_set>
if (fs_info->vol.bpc != bytes_written)
4002ee6c: b9400b81 ldr w1, [x28, #8]
4002ee70: eb00003f cmp x1, x0
4002ee74: 54fff700 b.eq 4002ed54 <fat_scan_fat_for_free_clusters+0xb4> // b.none<== ALWAYS TAKEN
rc = -1;
4002ee78: 12800003 mov w3, #0xffffffff // #-1 <== NOT EXECUTED
4002ee7c: 17ffffe3 b 4002ee08 <fat_scan_fat_for_free_clusters+0x168> <== NOT EXECUTED
if (*cls_added != 0)
4002ee80: b94002c0 ldr w0, [x22] <== NOT EXECUTED
4002ee84: 35000120 cbnz w0, 4002eea8 <fat_scan_fat_for_free_clusters+0x208> <== NOT EXECUTED
}
4002ee88: 2a0303e0 mov w0, w3 <== NOT EXECUTED
4002ee8c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002ee90: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002ee94: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002ee98: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002ee9c: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002eea0: a8c87bfd ldp x29, x30, [sp], #128 <== NOT EXECUTED
4002eea4: d65f03c0 ret <== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, (*chain));
4002eea8: b9400361 ldr w1, [x27] <== NOT EXECUTED
4002eeac: aa1c03e0 mov x0, x28 <== NOT EXECUTED
4002eeb0: b9006be3 str w3, [sp, #104] <== NOT EXECUTED
4002eeb4: 97ffff37 bl 4002eb90 <fat_free_fat_clusters_chain> <== NOT EXECUTED
return rc;
4002eeb8: b9406be3 ldr w3, [sp, #104] <== NOT EXECUTED
}
4002eebc: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002eec0: 2a0303e0 mov w0, w3 <== NOT EXECUTED
4002eec4: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
return rc;
4002eec8: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
}
4002eecc: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4002eed0: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
4002eed4: a8c87bfd ldp x29, x30, [sp], #128 <== NOT EXECUTED
4002eed8: d65f03c0 ret <== NOT EXECUTED
uint32_t save_cln = FAT_UNDEFINED_VALUE;
4002eedc: 12800019 mov w25, #0xffffffff // #-1 <== NOT EXECUTED
4002eee0: 17ffffa9 b 4002ed84 <fat_scan_fat_for_free_clusters+0xe4> <== NOT EXECUTED
...
000000004002d7d0 <fat_sector_write>:
fat_fs_info_t *fs_info,
uint32_t start,
uint32_t offset,
uint32_t count,
const void *buff)
{
4002d7d0: a9ba7bfd stp x29, x30, [sp, #-96]!
4002d7d4: 910003fd mov x29, sp
4002d7d8: a9025bf5 stp x21, x22, [sp, #32]
uint32_t sec_num = start;
uint32_t ofs = offset;
uint8_t *sec_buf;
uint32_t c = 0;
while(count > 0)
4002d7dc: 34000663 cbz w3, 4002d8a8 <fat_sector_write+0xd8> <== NEVER TAKEN
4002d7e0: aa0003f5 mov x21, x0
ssize_t cmpltd = 0;
4002d7e4: d2800016 mov x22, #0x0 // #0
4002d7e8: a90153f3 stp x19, x20, [sp, #16]
4002d7ec: 2a0303f4 mov w20, w3
4002d7f0: a90363f7 stp x23, x24, [sp, #48]
4002d7f4: aa0403f7 mov x23, x4
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
4002d7f8: 52800038 mov w24, #0x1 // #1
4002d7fc: a9046bf9 stp x25, x26, [sp, #64]
4002d800: 2a0103f9 mov w25, w1
4002d804: 2a0203fa mov w26, w2
4002d808: 1400000f b 4002d844 <fat_sector_write+0x74>
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);
4002d80c: 97ffff69 bl 4002d5b0 <fat_buf_access>
if (rc != RC_OK)
return -1;
memcpy((sec_buf + ofs), (buff + cmpltd), c);
4002d810: 2a1303e3 mov w3, w19
4002d814: 8b1602e1 add x1, x23, x22
4002d818: aa0303e2 mov x2, x3
if (rc != RC_OK)
4002d81c: 35000360 cbnz w0, 4002d888 <fat_sector_write+0xb8> <== NEVER TAKEN
memcpy((sec_buf + ofs), (buff + cmpltd), c);
4002d820: f9402fe0 ldr x0, [sp, #88]
fat_buf_mark_modified(fs_info);
count -= c;
cmpltd +=c;
4002d824: 8b0302d6 add x22, x22, x3
sec_num++;
4002d828: 11000739 add w25, w25, #0x1
memcpy((sec_buf + ofs), (buff + cmpltd), c);
4002d82c: 8b3a4000 add x0, x0, w26, uxtw
4002d830: 940036f2 bl 4003b3f8 <memcpy>
4002d834: 3902d2b8 strb w24, [x21, #180]
while(count > 0)
4002d838: 6b130294 subs w20, w20, w19
ofs = 0;
4002d83c: 5280001a mov w26, #0x0 // #0
while(count > 0)
4002d840: 54000260 b.eq 4002d88c <fat_sector_write+0xbc> // b.none <== ALWAYS TAKEN
c = MIN(count, (fs_info->vol.bps - ofs));
4002d844: 794002b3 ldrh w19, [x21]
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf);
4002d848: 2a1903e1 mov w1, w25
if (c == fs_info->vol.bytes_per_block)
4002d84c: b94012a4 ldr w4, [x21, #16]
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf);
4002d850: 910163e3 add x3, sp, #0x58
c = MIN(count, (fs_info->vol.bps - ofs));
4002d854: 4b1a0273 sub w19, w19, w26
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf);
4002d858: aa1503e0 mov x0, x21
c = MIN(count, (fs_info->vol.bps - ofs));
4002d85c: 6b14027f cmp w19, w20
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf);
4002d860: 52800022 mov w2, #0x1 // #1
c = MIN(count, (fs_info->vol.bps - ofs));
4002d864: 1a949273 csel w19, w19, w20, ls // ls = plast
if (c == fs_info->vol.bytes_per_block)
4002d868: 6b13009f cmp w4, w19
4002d86c: 54fffd01 b.ne 4002d80c <fat_sector_write+0x3c> // b.any <== ALWAYS TAKEN
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &sec_buf);
4002d870: 52800042 mov w2, #0x2 // #2 <== NOT EXECUTED
4002d874: 97ffff4f bl 4002d5b0 <fat_buf_access> <== NOT EXECUTED
memcpy((sec_buf + ofs), (buff + cmpltd), c);
4002d878: 2a1303e3 mov w3, w19 <== NOT EXECUTED
4002d87c: 8b1602e1 add x1, x23, x22 <== NOT EXECUTED
4002d880: aa0303e2 mov x2, x3 <== NOT EXECUTED
if (rc != RC_OK)
4002d884: 34fffce0 cbz w0, 4002d820 <fat_sector_write+0x50> <== NOT EXECUTED
return -1;
4002d888: 92800016 mov x22, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4002d88c: a94153f3 ldp x19, x20, [sp, #16]
4002d890: a94363f7 ldp x23, x24, [sp, #48]
4002d894: a9446bf9 ldp x25, x26, [sp, #64]
}
return cmpltd;
}
4002d898: aa1603e0 mov x0, x22
4002d89c: a9425bf5 ldp x21, x22, [sp, #32]
4002d8a0: a8c67bfd ldp x29, x30, [sp], #96
4002d8a4: d65f03c0 ret
ssize_t cmpltd = 0;
4002d8a8: d2800016 mov x22, #0x0 // #0 <== NOT EXECUTED
4002d8ac: 17fffffb b 4002d898 <fat_sector_write+0xc8> <== NOT EXECUTED
000000004002e8c0 <fat_set_fat_cluster>:
fat_set_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t in_val
)
{
4002e8c0: a9ba7bfd stp x29, x30, [sp, #-96]!
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
uint8_t *sec_buf = NULL;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
4002e8c4: 7100043f cmp w1, #0x1
{
4002e8c8: 910003fd mov x29, sp
uint8_t *sec_buf = NULL;
4002e8cc: f9002fff str xzr, [sp, #88]
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
4002e8d0: 54001549 b.ls 4002eb78 <fat_set_fat_cluster+0x2b8> // b.plast <== NEVER TAKEN
4002e8d4: a90153f3 stp x19, x20, [sp, #16]
4002e8d8: aa0003f3 mov x19, x0
4002e8dc: b9404000 ldr w0, [x0, #64]
4002e8e0: 2a0103f4 mov w20, w1
4002e8e4: 11000400 add w0, w0, #0x1
4002e8e8: 6b01001f cmp w0, w1
4002e8ec: 54001443 b.cc 4002eb74 <fat_set_fat_cluster+0x2b4> // b.lo, b.ul, b.last<== NEVER TAKEN
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e8f0: a9025bf5 stp x21, x22, [sp, #32]
4002e8f4: 2a0203f6 mov w22, w2
4002e8f8: a90363f7 stp x23, x24, [sp, #48]
fs_info->vol.afat_loc;
4002e8fc: b9406277 ldr w23, [x19, #96]
4002e900: f90023f9 str x25, [sp, #64]
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e904: 39405a60 ldrb w0, [x19, #22]
4002e908: 39400a61 ldrb w1, [x19, #2]
4002e90c: 37000400 tbnz w0, #0, 4002e98c <fat_set_fat_cluster+0xcc>
4002e910: 360805e0 tbz w0, #1, 4002e9cc <fat_set_fat_cluster+0x10c>
4002e914: 0b140299 add w25, w20, w20
4002e918: 1ac12721 lsr w1, w25, w1
4002e91c: 0b170037 add w23, w1, w23
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e920: 79400275 ldrh w21, [x19]
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e924: 910163e3 add x3, sp, #0x58
4002e928: 2a1703e1 mov w1, w23
4002e92c: aa1303e0 mov x0, x19
4002e930: 52800022 mov w2, #0x1 // #1
4002e934: 97fffb1f bl 4002d5b0 <fat_buf_access>
if (rc != RC_OK)
4002e938: 350003e0 cbnz w0, 4002e9b4 <fat_set_fat_cluster+0xf4> <== NEVER TAKEN
return rc;
switch ( fs_info->vol.type )
4002e93c: 39405a78 ldrb w24, [x19, #22]
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e940: 510006a3 sub w3, w21, #0x1
4002e944: 0a190063 and w3, w3, w25
switch ( fs_info->vol.type )
4002e948: 71000b1f cmp w24, #0x2
4002e94c: 54000480 b.eq 4002e9dc <fat_set_fat_cluster+0x11c> // b.none
4002e950: 7100131f cmp w24, #0x4
4002e954: 54000580 b.eq 4002ea04 <fat_set_fat_cluster+0x144> // b.none
4002e958: 7100071f cmp w24, #0x1
4002e95c: 540006c0 b.eq 4002ea34 <fat_set_fat_cluster+0x174> // b.none <== ALWAYS TAKEN
fat_buf_mark_modified(fs_info);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
4002e960: 94003003 bl 4003a96c <__errno> <== NOT EXECUTED
4002e964: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002e968: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
4002e96c: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002e970: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e974: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e978: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e97c: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
4002e980: b9000022 str w2, [x1] <== NOT EXECUTED
break;
}
return RC_OK;
}
4002e984: a8c67bfd ldp x29, x30, [sp], #96
4002e988: d65f03c0 ret
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e98c: 0b540699 add w25, w20, w20, lsr #1
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e990: 79400275 ldrh w21, [x19]
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e994: 910163e3 add x3, sp, #0x58
4002e998: aa1303e0 mov x0, x19
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e99c: 1ac12721 lsr w1, w25, w1
4002e9a0: 0b170037 add w23, w1, w23
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
4002e9a4: 2a1703e1 mov w1, w23
4002e9a8: 52800022 mov w2, #0x1 // #1
4002e9ac: 97fffb01 bl 4002d5b0 <fat_buf_access>
if (rc != RC_OK)
4002e9b0: 34fffc60 cbz w0, 4002e93c <fat_set_fat_cluster+0x7c> <== ALWAYS TAKEN
4002e9b4: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e9b8: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e9bc: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002e9c0: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
}
4002e9c4: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002e9c8: d65f03c0 ret <== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4002e9cc: 531e7699 lsl w25, w20, #2
4002e9d0: 1ac12721 lsr w1, w25, w1
4002e9d4: 0b170037 add w23, w1, w23
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
4002e9d8: 17ffffd2 b 4002e920 <fat_set_fat_cluster+0x60>
*((uint16_t *)(sec_buf + ofs)) =
4002e9dc: f9402fe2 ldr x2, [sp, #88]
fs_info->c.modified = true;
4002e9e0: 52800021 mov w1, #0x1 // #1
}
4002e9e4: a94363f7 ldp x23, x24, [sp, #48]
4002e9e8: f94023f9 ldr x25, [sp, #64]
(uint16_t )(CT_LE_W(in_val));
4002e9ec: 78234856 strh w22, [x2, w3, uxtw]
fs_info->c.modified = true;
4002e9f0: 3902d261 strb w1, [x19, #180]
}
4002e9f4: a94153f3 ldp x19, x20, [sp, #16]
4002e9f8: a9425bf5 ldp x21, x22, [sp, #32]
}
4002e9fc: a8c67bfd ldp x29, x30, [sp], #96
4002ea00: d65f03c0 ret
*((uint32_t *)(sec_buf + ofs)) &= CT_LE_L(0xF0000000);
4002ea04: f9402fe2 ldr x2, [sp, #88]
fs_info->c.modified = true;
4002ea08: 52800024 mov w4, #0x1 // #1
}
4002ea0c: a94363f7 ldp x23, x24, [sp, #48]
4002ea10: b8634841 ldr w1, [x2, w3, uxtw]
4002ea14: f94023f9 ldr x25, [sp, #64]
*((uint32_t *)(sec_buf + ofs)) |= fat32_clv;
4002ea18: 33006ec1 bfxil w1, w22, #0, #28
4002ea1c: b8234841 str w1, [x2, w3, uxtw]
fs_info->c.modified = true;
4002ea20: 3902d264 strb w4, [x19, #180]
}
4002ea24: a94153f3 ldp x19, x20, [sp, #16]
4002ea28: a9425bf5 ldp x21, x22, [sp, #32]
}
4002ea2c: a8c67bfd ldp x29, x30, [sp], #96
4002ea30: d65f03c0 ret
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
4002ea34: 12003ed6 and w22, w22, #0xffff
*(sec_buf + ofs) &= 0x0F;
4002ea38: 2a0303e1 mov w1, w3
4002ea3c: f9402fe2 ldr x2, [sp, #88]
if ( FAT_CLUSTER_IS_ODD(cln) )
4002ea40: 36000374 tbz w20, #0, 4002eaac <fat_set_fat_cluster+0x1ec>
*(sec_buf + ofs) &= 0x0F;
4002ea44: 38634844 ldrb w4, [x2, w3, uxtw]
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
4002ea48: 531c2ed6 ubfiz w22, w22, #4, #12
*(sec_buf + ofs) &= 0x0F;
4002ea4c: 12000c84 and w4, w4, #0xf
4002ea50: 38234844 strb w4, [x2, w3, uxtw]
*(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00F0);
4002ea54: f9402fe4 ldr x4, [sp, #88]
4002ea58: 38634882 ldrb w2, [x4, w3, uxtw]
4002ea5c: 2a0202c2 orr w2, w22, w2
4002ea60: 38234882 strb w2, [x4, w3, uxtw]
fs_info->c.modified = true;
4002ea64: 3902d278 strb w24, [x19, #180]
if ( ofs == (fs_info->vol.bps - 1) )
4002ea68: 79400262 ldrh w2, [x19]
4002ea6c: 51000442 sub w2, w2, #0x1
4002ea70: 6b03005f cmp w2, w3
4002ea74: 540003e0 b.eq 4002eaf0 <fat_set_fat_cluster+0x230> // b.none
*(sec_buf + ofs + 1) &= 0x00;
4002ea78: f9402fe2 ldr x2, [sp, #88]
4002ea7c: 91000421 add x1, x1, #0x1
4002ea80: 3821685f strb wzr, [x2, x1]
*(sec_buf + ofs+1) |= (uint8_t)((fat16_clv & 0xFF00)>>8);
4002ea84: f9402fe2 ldr x2, [sp, #88]
4002ea88: 38616843 ldrb w3, [x2, x1]
4002ea8c: 2a562076 orr w22, w3, w22, lsr #8
4002ea90: 38216856 strb w22, [x2, x1]
4002ea94: a94153f3 ldp x19, x20, [sp, #16]
4002ea98: a9425bf5 ldp x21, x22, [sp, #32]
4002ea9c: a94363f7 ldp x23, x24, [sp, #48]
4002eaa0: f94023f9 ldr x25, [sp, #64]
}
4002eaa4: a8c67bfd ldp x29, x30, [sp], #96
4002eaa8: d65f03c0 ret
*(sec_buf + ofs) &= 0x00;
4002eaac: 3823485f strb wzr, [x2, w3, uxtw]
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
4002eab0: 12002ed6 and w22, w22, #0xfff
*(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00FF);
4002eab4: f9402fe4 ldr x4, [sp, #88]
4002eab8: 38634882 ldrb w2, [x4, w3, uxtw]
4002eabc: 2a0202c2 orr w2, w22, w2
4002eac0: 38234882 strb w2, [x4, w3, uxtw]
4002eac4: 3902d278 strb w24, [x19, #180]
if ( ofs == (fs_info->vol.bps - 1) )
4002eac8: 79400262 ldrh w2, [x19]
4002eacc: 51000442 sub w2, w2, #0x1
4002ead0: 6b03005f cmp w2, w3
4002ead4: 54000320 b.eq 4002eb38 <fat_set_fat_cluster+0x278> // b.none <== NEVER TAKEN
*(sec_buf + ofs + 1) &= 0xF0;
4002ead8: f9402fe3 ldr x3, [sp, #88]
4002eadc: 91000421 add x1, x1, #0x1
4002eae0: 38616862 ldrb w2, [x3, x1]
4002eae4: 121c6c42 and w2, w2, #0xfffffff0
4002eae8: 38216862 strb w2, [x3, x1]
4002eaec: 17ffffe6 b 4002ea84 <fat_set_fat_cluster+0x1c4>
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
4002eaf0: 910163e3 add x3, sp, #0x58
4002eaf4: 110006e1 add w1, w23, #0x1
4002eaf8: 2a1803e2 mov w2, w24
4002eafc: aa1303e0 mov x0, x19
4002eb00: 97fffaac bl 4002d5b0 <fat_buf_access>
if (rc != RC_OK)
4002eb04: 35fff580 cbnz w0, 4002e9b4 <fat_set_fat_cluster+0xf4> <== NEVER TAKEN
*sec_buf &= 0x00;
4002eb08: f9402fe1 ldr x1, [sp, #88]
4002eb0c: 3900003f strb wzr, [x1]
*sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8);
4002eb10: f9402fe1 ldr x1, [sp, #88]
4002eb14: 39400022 ldrb w2, [x1]
4002eb18: 2a562056 orr w22, w2, w22, lsr #8
4002eb1c: 39000036 strb w22, [x1]
4002eb20: 3902d278 strb w24, [x19, #180]
}
4002eb24: a94153f3 ldp x19, x20, [sp, #16]
4002eb28: a9425bf5 ldp x21, x22, [sp, #32]
4002eb2c: a94363f7 ldp x23, x24, [sp, #48]
4002eb30: f94023f9 ldr x25, [sp, #64]
4002eb34: 17ffff94 b 4002e984 <fat_set_fat_cluster+0xc4>
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
4002eb38: 910163e3 add x3, sp, #0x58 <== NOT EXECUTED
4002eb3c: 110006e1 add w1, w23, #0x1 <== NOT EXECUTED
4002eb40: 2a1803e2 mov w2, w24 <== NOT EXECUTED
4002eb44: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002eb48: 97fffa9a bl 4002d5b0 <fat_buf_access> <== NOT EXECUTED
if (rc != RC_OK)
4002eb4c: 35fff340 cbnz w0, 4002e9b4 <fat_set_fat_cluster+0xf4> <== NOT EXECUTED
*sec_buf &= 0xF0;
4002eb50: f9402fe2 ldr x2, [sp, #88] <== NOT EXECUTED
4002eb54: 39400041 ldrb w1, [x2] <== NOT EXECUTED
4002eb58: 121c6c21 and w1, w1, #0xfffffff0 <== NOT EXECUTED
4002eb5c: 39000041 strb w1, [x2] <== NOT EXECUTED
*sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8);
4002eb60: f9402fe2 ldr x2, [sp, #88] <== NOT EXECUTED
4002eb64: 39400041 ldrb w1, [x2] <== NOT EXECUTED
4002eb68: 2a562036 orr w22, w1, w22, lsr #8 <== NOT EXECUTED
4002eb6c: 39000056 strb w22, [x2] <== NOT EXECUTED
4002eb70: 17ffffec b 4002eb20 <fat_set_fat_cluster+0x260> <== NOT EXECUTED
4002eb74: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4002eb78: 94002f7d bl 4003a96c <__errno> <== NOT EXECUTED
4002eb7c: aa0003e1 mov x1, x0 <== NOT EXECUTED
4002eb80: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
4002eb84: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4002eb88: b9000022 str w2, [x1] <== NOT EXECUTED
4002eb8c: 17ffff7e b 4002e984 <fat_set_fat_cluster+0xc4> <== NOT EXECUTED
000000004002e380 <fat_shutdown_drive>:
* RC_OK on success, or -1 if error occured
* and errno set appropriately
*/
int
fat_shutdown_drive(fat_fs_info_t *fs_info)
{
4002e380: a9bc7bfd stp x29, x30, [sp, #-64]!
4002e384: 910003fd mov x29, sp
4002e388: a90153f3 stp x19, x20, [sp, #16]
4002e38c: aa0003f4 mov x20, x0
4002e390: a9025bf5 stp x21, x22, [sp, #32]
4002e394: f9001bf7 str x23, [sp, #48]
int rc = RC_OK;
int i = 0;
rc = fat_sync(fs_info);
4002e398: 97ffffbe bl 4002e290 <fat_sync>
rc = -1;
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
4002e39c: f9404693 ldr x19, [x20, #136]
if ( rc != RC_OK )
4002e3a0: 7100001f cmp w0, #0x0
rc = fat_sync(fs_info);
4002e3a4: 2a0003f5 mov w21, w0
if ( rc != RC_OK )
4002e3a8: 5a9f03f6 csetm w22, ne // ne = any
return _Chain_Immutable_head( the_chain )->next;
4002e3ac: aa1303f7 mov x23, x19
4002e3b0: f84086e0 ldr x0, [x23], #8
if ( !_Chain_Is_empty(the_chain))
4002e3b4: eb0002ff cmp x23, x0
4002e3b8: 54000140 b.eq 4002e3e0 <fat_shutdown_drive+0x60> // b.none
4002e3bc: d503201f nop
new_first = old_first->next;
4002e3c0: f9400001 ldr x1, [x0]
head->next = new_first;
4002e3c4: f9000261 str x1, [x19]
new_first->previous = head;
4002e3c8: f9000433 str x19, [x1, #8]
while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL )
free(node);
4002e3cc: 97ffce6d bl 40021d80 <free>
return _Chain_Immutable_head( the_chain )->next;
4002e3d0: f9400260 ldr x0, [x19]
if ( !_Chain_Is_empty(the_chain))
4002e3d4: eb0002ff cmp x23, x0
4002e3d8: 54ffff41 b.ne 4002e3c0 <fat_shutdown_drive+0x40> // b.any
rtems_chain_control *the_chain = fs_info->vhash + i;
4002e3dc: f9404693 ldr x19, [x20, #136]
return &the_chain->Tail.Node;
4002e3e0: 91008277 add x23, x19, #0x20
return _Chain_Immutable_head( the_chain )->next;
4002e3e4: f9400e60 ldr x0, [x19, #24]
4002e3e8: 91006273 add x19, x19, #0x18
if ( !_Chain_Is_empty(the_chain))
4002e3ec: eb17001f cmp x0, x23
4002e3f0: 54000120 b.eq 4002e414 <fat_shutdown_drive+0x94> // b.none <== ALWAYS TAKEN
4002e3f4: d503201f nop
new_first = old_first->next;
4002e3f8: f9400001 ldr x1, [x0] <== NOT EXECUTED
head->next = new_first;
4002e3fc: f9000261 str x1, [x19] <== NOT EXECUTED
new_first->previous = head;
4002e400: f9000433 str x19, [x1, #8] <== NOT EXECUTED
free(node);
4002e404: 97ffce5f bl 40021d80 <free> <== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002e408: f9400260 ldr x0, [x19] <== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4002e40c: eb0002ff cmp x23, x0 <== NOT EXECUTED
4002e410: 54ffff41 b.ne 4002e3f8 <fat_shutdown_drive+0x78> // b.any <== NOT EXECUTED
}
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
4002e414: f9404a93 ldr x19, [x20, #144]
return _Chain_Immutable_head( the_chain )->next;
4002e418: aa1303f7 mov x23, x19
4002e41c: f84086e0 ldr x0, [x23], #8
if ( !_Chain_Is_empty(the_chain))
4002e420: eb0002ff cmp x23, x0
4002e424: 54000120 b.eq 4002e448 <fat_shutdown_drive+0xc8> // b.none <== ALWAYS TAKEN
new_first = old_first->next;
4002e428: f9400001 ldr x1, [x0] <== NOT EXECUTED
head->next = new_first;
4002e42c: f9000261 str x1, [x19] <== NOT EXECUTED
new_first->previous = head;
4002e430: f9000433 str x19, [x1, #8] <== NOT EXECUTED
while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL )
free(node);
4002e434: 97ffce53 bl 40021d80 <free> <== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002e438: f9400260 ldr x0, [x19] <== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4002e43c: eb17001f cmp x0, x23 <== NOT EXECUTED
4002e440: 54ffff41 b.ne 4002e428 <fat_shutdown_drive+0xa8> // b.any <== NOT EXECUTED
rtems_chain_control *the_chain = fs_info->rhash + i;
4002e444: f9404a93 ldr x19, [x20, #144] <== NOT EXECUTED
return &the_chain->Tail.Node;
4002e448: 91008277 add x23, x19, #0x20
return _Chain_Immutable_head( the_chain )->next;
4002e44c: f9400e60 ldr x0, [x19, #24]
4002e450: 91006273 add x19, x19, #0x18
if ( !_Chain_Is_empty(the_chain))
4002e454: eb0002ff cmp x23, x0
4002e458: 54000120 b.eq 4002e47c <fat_shutdown_drive+0xfc> // b.none <== ALWAYS TAKEN
4002e45c: d503201f nop
new_first = old_first->next;
4002e460: f9400001 ldr x1, [x0] <== NOT EXECUTED
head->next = new_first;
4002e464: f9000261 str x1, [x19] <== NOT EXECUTED
new_first->previous = head;
4002e468: f9000433 str x19, [x1, #8] <== NOT EXECUTED
free(node);
4002e46c: 97ffce45 bl 40021d80 <free> <== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4002e470: f9400260 ldr x0, [x19] <== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4002e474: eb0002ff cmp x23, x0 <== NOT EXECUTED
4002e478: 54ffff41 b.ne 4002e460 <fat_shutdown_drive+0xe0> // b.any <== NOT EXECUTED
}
free(fs_info->vhash);
4002e47c: f9404680 ldr x0, [x20, #136]
4002e480: 97ffce40 bl 40021d80 <free>
free(fs_info->rhash);
4002e484: f9404a80 ldr x0, [x20, #144]
4002e488: 97ffce3e bl 40021d80 <free>
free(fs_info->uino);
4002e48c: f9404e80 ldr x0, [x20, #152]
4002e490: 97ffce3c bl 40021d80 <free>
free(fs_info->sec_buf);
4002e494: f9406280 ldr x0, [x20, #192]
4002e498: 97ffce3a bl 40021d80 <free>
close(fs_info->vol.fd);
4002e49c: b9406a80 ldr w0, [x20, #104]
4002e4a0: 97ffcdc0 bl 40021ba0 <close>
if (rc)
4002e4a4: 350000f5 cbnz w21, 4002e4c0 <fat_shutdown_drive+0x140> <== NEVER TAKEN
errno = EIO;
return rc;
}
4002e4a8: 2a1603e0 mov w0, w22
4002e4ac: a94153f3 ldp x19, x20, [sp, #16]
4002e4b0: a9425bf5 ldp x21, x22, [sp, #32]
4002e4b4: f9401bf7 ldr x23, [sp, #48]
4002e4b8: a8c47bfd ldp x29, x30, [sp], #64
4002e4bc: d65f03c0 ret
errno = EIO;
4002e4c0: 9400312b bl 4003a96c <__errno> <== NOT EXECUTED
4002e4c4: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
4002e4c8: b9000001 str w1, [x0] <== NOT EXECUTED
}
4002e4cc: 2a1603e0 mov w0, w22 <== NOT EXECUTED
4002e4d0: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
4002e4d4: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4002e4d8: f9401bf7 ldr x23, [sp, #48] <== NOT EXECUTED
4002e4dc: a8c47bfd ldp x29, x30, [sp], #64 <== NOT EXECUTED
4002e4e0: d65f03c0 ret <== NOT EXECUTED
...
000000004002e290 <fat_sync>:
return RC_OK;
}
int
fat_sync(fat_fs_info_t *fs_info)
{
4002e290: a9bc7bfd stp x29, x30, [sp, #-64]!
4002e294: 910003fd mov x29, sp
4002e298: a90153f3 stp x19, x20, [sp, #16]
4002e29c: aa0003f3 mov x19, x0
return RC_OK;
4002e2a0: 52800014 mov w20, #0x0 // #0
if (fs_info->vol.type == FAT_FAT32)
4002e2a4: 39405803 ldrb w3, [x0, #22]
4002e2a8: 7100107f cmp w3, #0x4
4002e2ac: 540001a0 b.eq 4002e2e0 <fat_sync+0x50> // b.none
if (fs_info->c.state == FAT_CACHE_EMPTY)
4002e2b0: 3942d660 ldrb w0, [x19, #181]
4002e2b4: 34000060 cbz w0, 4002e2c0 <fat_sync+0x30>
4002e2b8: aa1303e0 mov x0, x19
4002e2bc: 97fffc51 bl 4002d400 <fat_buf_release.part.0>
if ( rc != RC_OK )
rc = -1;
fat_buf_release(fs_info);
if (rtems_bdbuf_syncdev(fs_info->vol.dd) != RTEMS_SUCCESSFUL)
4002e2c0: f9403a60 ldr x0, [x19, #112]
4002e2c4: 940020c3 bl 400365d0 <rtems_bdbuf_syncdev>
rc = -1;
4002e2c8: 7100001f cmp w0, #0x0
4002e2cc: 5a9f0294 csinv w20, w20, wzr, eq // eq = none
return rc;
}
4002e2d0: 2a1403e0 mov w0, w20
4002e2d4: a94153f3 ldp x19, x20, [sp, #16]
4002e2d8: a8c47bfd ldp x29, x30, [sp], #64
4002e2dc: d65f03c0 ret
if (free_count != fs_info->vol.free_cls_in_fs_info)
4002e2e0: 29498405 ldp w5, w1, [x0, #76]
4002e2e4: a9025bf5 stp x21, x22, [sp, #32]
uint32_t next_free = fs_info->vol.next_cl;
4002e2e8: b9405415 ldr w21, [x0, #84]
if (free_count != fs_info->vol.free_cls_in_fs_info)
4002e2ec: 6b0100bf cmp w5, w1
4002e2f0: 54000261 b.ne 4002e33c <fat_sync+0xac> // b.any <== NEVER TAKEN
if (next_free != fs_info->vol.next_cl_in_fs_info)
4002e2f4: b9405800 ldr w0, [x0, #88]
4002e2f8: 6b0002bf cmp w21, w0
4002e2fc: 540003a0 b.eq 4002e370 <fat_sync+0xe0> // b.none
4002e300: 9100f3f6 add x22, sp, #0x3c
4002e304: 52800014 mov w20, #0x0 // #0
ret2 = fat_sector_write(fs_info,
4002e308: 79409261 ldrh w1, [x19, #72]
4002e30c: aa1603e4 mov x4, x22
fs_info->vol.next_cl_in_fs_info = next_free;
4002e310: b9005a75 str w21, [x19, #88]
ret2 = fat_sector_write(fs_info,
4002e314: aa1303e0 mov x0, x19
4002e318: 52800083 mov w3, #0x4 // #4
4002e31c: 52803d82 mov w2, #0x1ec // #492
uint32_t le_next_free = CT_LE_L(next_free);
4002e320: b9003ff5 str w21, [sp, #60]
ret2 = fat_sector_write(fs_info,
4002e324: 97fffd2b bl 4002d7d0 <fat_sector_write>
if ( (ret1 < 0) || (ret2 < 0) )
4002e328: d37ffc00 lsr x0, x0, #63
4002e32c: 2a000294 orr w20, w20, w0
4002e330: 4b1403f4 neg w20, w20
4002e334: a9425bf5 ldp x21, x22, [sp, #32]
4002e338: 17ffffde b 4002e2b0 <fat_sync+0x20>
ret1 = fat_sector_write(fs_info,
4002e33c: 79409001 ldrh w1, [x0, #72] <== NOT EXECUTED
4002e340: 9100f3f6 add x22, sp, #0x3c <== NOT EXECUTED
fs_info->vol.free_cls_in_fs_info = free_count;
4002e344: b9005005 str w5, [x0, #80] <== NOT EXECUTED
ret1 = fat_sector_write(fs_info,
4002e348: aa1603e4 mov x4, x22 <== NOT EXECUTED
4002e34c: 52803d02 mov w2, #0x1e8 // #488 <== NOT EXECUTED
uint32_t le_free_count = CT_LE_L(free_count);
4002e350: b9003fe5 str w5, [sp, #60] <== NOT EXECUTED
ret1 = fat_sector_write(fs_info,
4002e354: 97fffd1f bl 4002d7d0 <fat_sector_write> <== NOT EXECUTED
if ( (ret1 < 0) || (ret2 < 0) )
4002e358: d37ffc14 lsr x20, x0, #63 <== NOT EXECUTED
if (next_free != fs_info->vol.next_cl_in_fs_info)
4002e35c: b9405a61 ldr w1, [x19, #88] <== NOT EXECUTED
if ( (ret1 < 0) || (ret2 < 0) )
4002e360: 12001e94 and w20, w20, #0xff <== NOT EXECUTED
if (next_free != fs_info->vol.next_cl_in_fs_info)
4002e364: 6b0102bf cmp w21, w1 <== NOT EXECUTED
4002e368: 54fffe40 b.eq 4002e330 <fat_sync+0xa0> // b.none <== NOT EXECUTED
4002e36c: 17ffffe7 b 4002e308 <fat_sync+0x78> <== NOT EXECUTED
4002e370: a9425bf5 ldp x21, x22, [sp, #32]
4002e374: 17ffffcf b 4002e2b0 <fat_sync+0x20>
...
0000000040030050 <msdos_creat_node>:
fat_file_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
40030050: a9b07bfd stp x29, x30, [sp, #-256]!
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);
if (name_len > MSDOS_NAME_MAX_LFN_WITH_DOT) {
40030054: 7104107f cmp w3, #0x104
{
40030058: 910003fd mov x29, sp
4003005c: a90153f3 stp x19, x20, [sp, #16]
40030060: aa0003f4 mov x20, x0
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40030064: 12800013 mov w19, #0xffffffff // #-1
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
40030068: f9401400 ldr x0, [x0, #40]
{
4003006c: a9025bf5 stp x21, x22, [sp, #32]
40030070: a90363f7 stp x23, x24, [sp, #48]
uint16_t time_val = 0;
40030074: 7900cbff strh wzr, [sp, #100]
uint16_t date = 0;
40030078: 7900cfff strh wzr, [sp, #102]
fat_file_fd_t *fat_fd = NULL;
4003007c: f90037ff str xzr, [sp, #104]
dir_pos->sname.ofs = 0;
40030080: 290e7fff stp wzr, wzr, [sp, #112]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40030084: 290f4ff3 stp w19, w19, [sp, #120]
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
40030088: f9400817 ldr x23, [x0, #16]
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
4003008c: a9087fff stp xzr, xzr, [sp, #128]
40030090: a9097fff stp xzr, xzr, [sp, #144]
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
40030094: a90c7fff stp xzr, xzr, [sp, #192]
40030098: a90d7fff stp xzr, xzr, [sp, #208]
4003009c: a90e7fff stp xzr, xzr, [sp, #224]
400300a0: a90f7fff stp xzr, xzr, [sp, #240]
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
400300a4: f9400a96 ldr x22, [x20, #16]
if (name_len > MSDOS_NAME_MAX_LFN_WITH_DOT) {
400300a8: 540019cc b.gt 400303e0 <msdos_creat_node+0x390> <== NEVER TAKEN
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
}
name_type = msdos_long_to_short (fs_info->converter,
400300ac: f94086e0 ldr x0, [x23, #264]
400300b0: a9046bf9 stp x25, x26, [sp, #64]
400300b4: 2a0303fa mov w26, w3
400300b8: a90573fb stp x27, x28, [sp, #80]
400300bc: aa0203fb mov x27, x2
400300c0: 2a0103f8 mov w24, w1
400300c4: aa0503f9 mov x25, x5
400300c8: 910203e3 add x3, sp, #0x80
400300cc: 2a1a03e2 mov w2, w26
400300d0: aa1b03e1 mov x1, x27
400300d4: 52800164 mov w4, #0xb // #11
400300d8: 940001ca bl 40030800 <msdos_long_to_short>
400300dc: 2a0003fc mov w28, w0
name, name_len,
MSDOS_DIR_NAME(short_node),
MSDOS_NAME_MAX);
if (name_type == MSDOS_NAME_INVALID) {
400300e0: 34001880 cbz w0, 400303f0 <msdos_creat_node+0x3a0> <== 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);
400300e4: d2800000 mov x0, #0x0 // #0
*MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE;
400300e8: 390233ff strb wzr, [sp, #140]
now = time(NULL);
400300ec: 94003e5f bl 4003fa68 <time>
}
static inline void fat_file_set_ctime_mtime(fat_file_fd_t *fat_fd, time_t t)
{
fat_fd->ctime = t;
fat_fd->mtime = t;
400300f0: a90482c0 stp x0, x0, [x22, #72]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
400300f4: 3940e2c6 ldrb w6, [x22, #56]
400300f8: aa0003f5 mov x21, x0
fat_file_set_ctime_mtime(parent_fat_fd, now);
msdos_date_unix2dos(now, &date, &time_val);
400300fc: 910193e2 add x2, sp, #0x64
40030100: 321f00c6 orr w6, w6, #0x2
40030104: 3900e2c6 strb w6, [x22, #56]
40030108: 91019be1 add x1, sp, #0x66
4003010c: 94001aed bl 40036cc0 <msdos_date_unix2dos>
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
40030110: b9009fff str wzr, [sp, #156]
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40030114: 7940cfe6 ldrh w6, [sp, #102]
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
40030118: 7940cbe5 ldrh w5, [sp, #100]
4003011c: 79011fe5 strh w5, [sp, #142]
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40030120: 790123e6 strh w6, [sp, #144]
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
40030124: 790127e6 strh w6, [sp, #146]
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
40030128: 79012fe5 strh w5, [sp, #150]
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
4003012c: 790133e6 strh w6, [sp, #152]
if (type == FAT_DIRECTORY) {
40030130: 340002f8 cbz w24, 4003018c <msdos_creat_node+0x13c>
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
}
else if (type == FAT_HARD_LINK) {
40030134: 71000b1f cmp w24, #0x2
40030138: 54000f00 b.eq 40030318 <msdos_creat_node+0x2c8> // b.none <== NEVER TAKEN
* set "archive bit" due to changes
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
}
else { /* regular file... */
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
4003013c: 39422fe0 ldrb w0, [sp, #139]
40030140: 321b0000 orr w0, w0, #0x20
40030144: 39022fe0 strb w0, [sp, #139]
/*
* find free space in the parent directory and write new initialized
* FAT 32 Bytes Directory Entry Structure to the disk
*/
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40030148: 2a1c03e4 mov w4, w28
4003014c: 2a1a03e3 mov w3, w26
40030150: aa1b03e2 mov x2, x27
40030154: 910203e6 add x6, sp, #0x80
40030158: aa1403e0 mov x0, x20
4003015c: 9101c3e5 add x5, sp, #0x70
40030160: 52800021 mov w1, #0x1 // #1
40030164: 9400078f bl 40031fa0 <msdos_get_name_node>
40030168: a9446bf9 ldp x25, x26, [sp, #64]
4003016c: 2a0003f3 mov w19, w0
40030170: a94573fb ldp x27, x28, [sp, #80]
err:
/* mark the used 32bytes structure on the disk as free */
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
return rc;
}
40030174: 2a1303e0 mov w0, w19
40030178: a94153f3 ldp x19, x20, [sp, #16]
4003017c: a9425bf5 ldp x21, x22, [sp, #32]
40030180: a94363f7 ldp x23, x24, [sp, #48]
40030184: a8d07bfd ldp x29, x30, [sp], #256
40030188: d65f03c0 ret
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
4003018c: 39422fe7 ldrb w7, [sp, #139]
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40030190: 910203e6 add x6, sp, #0x80
40030194: 2a1c03e4 mov w4, w28
40030198: 2a1a03e3 mov w3, w26
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
4003019c: 321c00e7 orr w7, w7, #0x10
rc = msdos_get_name_node(parent_loc, true, name, name_len,
400301a0: aa1b03e2 mov x2, x27
400301a4: 9101c3e5 add x5, sp, #0x70
400301a8: aa1403e0 mov x0, x20
400301ac: 52800021 mov w1, #0x1 // #1
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
400301b0: 39022fe7 strb w7, [sp, #139]
rc = msdos_get_name_node(parent_loc, true, name, name_len,
400301b4: 9400077b bl 40031fa0 <msdos_get_name_node>
400301b8: 2a0003f3 mov w19, w0
if ( rc != RC_OK )
400301bc: 34000120 cbz w0, 400301e0 <msdos_creat_node+0x190> <== ALWAYS TAKEN
}
400301c0: 2a1303e0 mov w0, w19 <== NOT EXECUTED
400301c4: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
400301c8: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
400301cc: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
400301d0: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
400301d4: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
400301d8: a8d07bfd ldp x29, x30, [sp], #256 <== NOT EXECUTED
400301dc: d65f03c0 ret <== NOT EXECUTED
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
400301e0: 9101a3e2 add x2, sp, #0x68
400301e4: 9101c3e1 add x1, sp, #0x70
400301e8: aa1703e0 mov x0, x23
400301ec: 97fffb75 bl 4002efc0 <fat_file_open>
400301f0: 2a0003f3 mov w19, w0
if (rc != RC_OK)
400301f4: 340001a0 cbz w0, 40030228 <msdos_creat_node+0x1d8> <== ALWAYS TAKEN
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
400301f8: f9401680 ldr x0, [x20, #40] <== NOT EXECUTED
400301fc: 9101c3e1 add x1, sp, #0x70 <== NOT EXECUTED
40030200: 12800342 mov w2, #0xffffffe5 // #-27 <== NOT EXECUTED
40030204: 940002cf bl 40030d40 <msdos_set_first_char4file_name> <== NOT EXECUTED
}
40030208: 2a1303e0 mov w0, w19 <== NOT EXECUTED
4003020c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40030210: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40030214: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
return rc;
40030218: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
4003021c: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
}
40030220: a8d07bfd ldp x29, x30, [sp], #256 <== NOT EXECUTED
40030224: d65f03c0 ret <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
40030228: f94037e1 ldr x1, [sp, #104]
4003022c: d2e00405 mov x5, #0x20000000000000 // #9007199254740992
rc = fat_file_extend(&fs_info->fat,
40030230: 910283e4 add x4, sp, #0xa0
40030234: aa1703e0 mov x0, x23
40030238: 52800022 mov w2, #0x1 // #1
4003023c: 3940e023 ldrb w3, [x1, #56]
fat_fd->fat_file_type = FAT_DIRECTORY;
40030240: f9000c25 str x5, [x1, #24]
40030244: 321f0063 orr w3, w3, #0x2
40030248: 3900e023 strb w3, [x1, #56]
fat_fd->ctime = t;
4003024c: f9002435 str x21, [x1, #72]
rc = fat_file_extend(&fs_info->fat,
40030250: b9400ae3 ldr w3, [x23, #8]
fat_fd->mtime = t;
40030254: f9002835 str x21, [x1, #80]
40030258: 97fffd7e bl 4002f850 <fat_file_extend>
4003025c: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40030260: 35fffcc0 cbnz w0, 400301f8 <msdos_creat_node+0x1a8> <== NEVER TAKEN
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
40030264: b00000c1 adrp x1, 40049000 <IMFS_node_control_sym_link+0xe0>
40030268: d2800162 mov x2, #0xb // #11
memcpy(DOT_NODE_P(dot_dotdot), short_node,
4003026c: a9481fe6 ldp x6, x7, [sp, #128]
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
40030270: 910303e0 add x0, sp, #0xc0
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40030274: a94917e4 ldp x4, x5, [sp, #144]
40030278: a90c1fe6 stp x6, x7, [sp, #192]
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
4003027c: f9423421 ldr x1, [x1, #1128]
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40030280: a90d17e4 stp x4, x5, [sp, #208]
memcpy(DOTDOT_NODE_P(dot_dotdot), short_node,
40030284: a90e1fe6 stp x6, x7, [sp, #224]
40030288: a90f17e4 stp x4, x5, [sp, #240]
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
4003028c: 94002c5b bl 4003b3f8 <memcpy>
memcpy(MSDOS_DIR_NAME(DOTDOT_NODE_P(dot_dotdot)), MSDOS_DOTDOT_NAME,
40030290: b00000c1 adrp x1, 40049000 <IMFS_node_control_sym_link+0xe0>
40030294: 910383e0 add x0, sp, #0xe0
40030298: d2800162 mov x2, #0xb // #11
4003029c: f9423021 ldr x1, [x1, #1120]
400302a0: 94002c56 bl 4003b3f8 <memcpy>
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
400302a4: f94016c0 ldr x0, [x22, #40]
400302a8: f100041f cmp x0, #0x1
400302ac: 54000820 b.eq 400303b0 <msdos_creat_node+0x360> // b.none
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
400302b0: b94026c0 ldr w0, [x22, #36]
400302b4: 7901f7e0 strh w0, [sp, #250]
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
400302b8: 53107c00 lsr w0, w0, #16
400302bc: 7901ebe0 strh w0, [sp, #244]
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
400302c0: f94037e1 ldr x1, [sp, #104]
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
400302c4: 910303e4 add x4, sp, #0xc0
400302c8: aa1703e0 mov x0, x23
400302cc: 52800803 mov w3, #0x40 // #64
400302d0: 52800002 mov w2, #0x0 // #0
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
400302d4: b9402425 ldr w5, [x1, #36]
400302d8: 7901b7e5 strh w5, [sp, #218]
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
400302dc: 53107ca5 lsr w5, w5, #16
400302e0: 7901abe5 strh w5, [sp, #212]
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
400302e4: 97fffe0b bl 4002fb10 <fat_file_write>
if (ret < 0)
400302e8: b7f806e0 tbnz x0, #63, 400303c4 <msdos_creat_node+0x374> <== NEVER TAKEN
rc = fat_file_write_first_cluster_num(&fs_info->fat, fat_fd);
400302ec: f94037e1 ldr x1, [sp, #104]
400302f0: aa1703e0 mov x0, x23
400302f4: 9400023f bl 40030bf0 <fat_file_write_first_cluster_num>
400302f8: 2a0003f3 mov w19, w0
if (rc != RC_OK)
400302fc: 35000660 cbnz w0, 400303c8 <msdos_creat_node+0x378> <== NEVER TAKEN
fat_file_close(&fs_info->fat, fat_fd);
40030300: f94037e1 ldr x1, [sp, #104]
40030304: aa1703e0 mov x0, x23
40030308: 97fffce2 bl 4002f690 <fat_file_close>
4003030c: a9446bf9 ldp x25, x26, [sp, #64]
40030310: a94573fb ldp x27, x28, [sp, #80]
40030314: 17ffff98 b 40030174 <msdos_creat_node+0x124>
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
40030318: b9402b20 ldr w0, [x25, #40] <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4003031c: 35000080 cbnz w0, 4003032c <msdos_creat_node+0x2dc> <== NOT EXECUTED
40030320: 39405ae1 ldrb w1, [x23, #22] <== NOT EXECUTED
40030324: f240043f tst x1, #0x3 <== NOT EXECUTED
40030328: 54000581 b.ne 400303d8 <msdos_creat_node+0x388> // b.any <== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
4003032c: 394016e2 ldrb w2, [x23, #5] <== NOT EXECUTED
40030330: 51000801 sub w1, w0, #0x2 <== NOT EXECUTED
40030334: b9403ee0 ldr w0, [x23, #60] <== NOT EXECUTED
40030338: 1ac22021 lsl w1, w1, w2 <== NOT EXECUTED
4003033c: 0b000021 add w1, w1, w0 <== NOT EXECUTED
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
40030340: b9402f25 ldr w5, [x25, #44] <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
40030344: aa1703e0 mov x0, x23 <== NOT EXECUTED
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
40030348: 39400ae6 ldrb w6, [x23, #2] <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
4003034c: 910283e4 add x4, sp, #0xa0 <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
40030350: 794002e2 ldrh w2, [x23] <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
40030354: 52800403 mov w3, #0x20 // #32 <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
40030358: 51000442 sub w2, w2, #0x1 <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
4003035c: 0a050042 and w2, w2, w5 <== NOT EXECUTED
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
40030360: 1ac624a5 lsr w5, w5, w6 <== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
40030364: 0b0100a1 add w1, w5, w1 <== NOT EXECUTED
40030368: 97fff4ce bl 4002d6a0 <_fat_block_read> <== NOT EXECUTED
if (ret < 0) {
4003036c: b7f804e0 tbnz x0, #63, 40030408 <msdos_creat_node+0x3b8> <== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
40030370: 3942afe0 ldrb w0, [sp, #171] <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
40030374: 3942b7e6 ldrb w6, [sp, #173] <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
40030378: 79415fe5 ldrh w5, [sp, #174] <== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
4003037c: 321b0000 orr w0, w0, #0x20 <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
40030380: 794163e4 ldrh w4, [sp, #176] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
40030384: 79416be3 ldrh w3, [sp, #180] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
40030388: 794177e2 ldrh w2, [sp, #186] <== NOT EXECUTED
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
4003038c: b940bfe1 ldr w1, [sp, #188] <== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
40030390: 39022fe0 strb w0, [sp, #139] <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
40030394: 390237e6 strb w6, [sp, #141] <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
40030398: 79011fe5 strh w5, [sp, #142] <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
4003039c: 790123e4 strh w4, [sp, #144] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
400303a0: 79012be3 strh w3, [sp, #148] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
400303a4: 790137e2 strh w2, [sp, #154] <== NOT EXECUTED
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
400303a8: b9009fe1 str w1, [sp, #156] <== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
400303ac: 17ffff67 b 40030148 <msdos_creat_node+0xf8> <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
400303b0: 39405ae0 ldrb w0, [x23, #22]
400303b4: 3617f7e0 tbz w0, #2, 400302b0 <msdos_creat_node+0x260> <== ALWAYS TAKEN
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
400303b8: 7901ebff strh wzr, [sp, #244] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
400303bc: 7901f7ff strh wzr, [sp, #250] <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
400303c0: 17ffffc0 b 400302c0 <msdos_creat_node+0x270> <== NOT EXECUTED
rc = -1;
400303c4: 12800013 mov w19, #0xffffffff // #-1 <== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
400303c8: f94037e1 ldr x1, [sp, #104] <== NOT EXECUTED
400303cc: aa1703e0 mov x0, x23 <== NOT EXECUTED
400303d0: 97fffcb0 bl 4002f690 <fat_file_close> <== NOT EXECUTED
400303d4: 17ffff89 b 400301f8 <msdos_creat_node+0x1a8> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
400303d8: b9402ae1 ldr w1, [x23, #40] <== NOT EXECUTED
400303dc: 17ffffd9 b 40030340 <msdos_creat_node+0x2f0> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
400303e0: 94002963 bl 4003a96c <__errno> <== NOT EXECUTED
400303e4: 52800b61 mov w1, #0x5b // #91 <== NOT EXECUTED
400303e8: b9000001 str w1, [x0] <== NOT EXECUTED
400303ec: 17ffff62 b 40030174 <msdos_creat_node+0x124> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EINVAL);
400303f0: 9400295f bl 4003a96c <__errno> <== NOT EXECUTED
400303f4: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
400303f8: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
400303fc: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
40030400: b9000001 str w1, [x0] <== NOT EXECUTED
40030404: 17ffff5c b 40030174 <msdos_creat_node+0x124> <== NOT EXECUTED
return -1;
40030408: 12800013 mov w19, #0xffffffff // #-1 <== NOT EXECUTED
4003040c: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40030410: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
40030414: 17ffff58 b 40030174 <msdos_creat_node+0x124> <== NOT EXECUTED
...
0000000040036e50 <msdos_date_dos2unix>:
uint32_t y, year;
uint32_t days;
uint16_t *months;
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40036e50: d3452824 ubfx x4, x1, #5, #6
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40036e54: d34b3c22 ubfx x2, x1, #11, #5
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40036e58: 528003c8 mov w8, #0x1e // #30
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40036e5c: 5280e105 mov w5, #0x708 // #1800
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
40036e60: 12001023 and w3, w1, #0x1f
/*
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
40036e64: b0000666 adrp x6, 40103000 <_Thread_Heads+0x28>
40036e68: 79587cc7 ldrh w7, [x6, #3134]
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40036e6c: 1b087c81 mul w1, w4, w8
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40036e70: 1b050441 madd w1, w2, w5, w1
if (lastdosdate != dd) {
40036e74: 6b0000ff cmp w7, w0
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40036e78: 0b030021 add w1, w1, w3
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
40036e7c: 0b010025 add w5, w1, w1
if (lastdosdate != dd) {
40036e80: 540005c0 b.eq 40036f38 <msdos_date_dos2unix+0xe8> // b.none
lastdosdate = dd;
40036e84: 79187cc0 strh w0, [x6, #3134]
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
40036e88: 53097c06 lsr w6, w0, #9
for (y = 0; y < year; y++)
40036e8c: 720018c4 ands w4, w6, #0x7f
days = 0;
40036e90: 52800001 mov w1, #0x0 // #0
for (y = 0; y < year; y++)
40036e94: 52800002 mov w2, #0x0 // #0
days += y & 0x03 ? 365 : 366;
40036e98: 52802dc3 mov w3, #0x16e // #366
for (y = 0; y < year; y++)
40036e9c: 540000a1 b.ne 40036eb0 <msdos_date_dos2unix+0x60> // b.any <== ALWAYS TAKEN
40036ea0: 14000008 b 40036ec0 <msdos_date_dos2unix+0x70> <== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
40036ea4: f240045f tst x2, #0x3
40036ea8: 1a9f17e3 cset w3, eq // eq = none
40036eac: 1105b463 add w3, w3, #0x16d
for (y = 0; y < year; y++)
40036eb0: 11000442 add w2, w2, #0x1
days += y & 0x03 ? 365 : 366;
40036eb4: 0b030021 add w1, w1, w3
for (y = 0; y < year; y++)
40036eb8: 6b02009f cmp w4, w2
40036ebc: 54ffff41 b.ne 40036ea4 <msdos_date_dos2unix+0x54> // b.any
months = year & 0x03 ? regyear : leapyear;
40036ec0: d0000642 adrp x2, 40100000 <_RTEMS_tasks_Information>
40036ec4: 91110043 add x3, x2, #0x440
40036ec8: f24004df tst x6, #0x3
/*
* Prevent going from 0 to 0xffffffff in the following
* loop.
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
40036ecc: 53057c04 lsr w4, w0, #5
months = year & 0x03 ? regyear : leapyear;
40036ed0: d0000642 adrp x2, 40100000 <_RTEMS_tasks_Information>
40036ed4: 91116042 add x2, x2, #0x458
40036ed8: 9a831042 csel x2, x2, x3, ne // ne = any
if (month == 0) {
40036edc: 72000c83 ands w3, w4, #0xf
40036ee0: 1a9f1463 csinc w3, w3, wzr, ne // ne = any
month = 1;
}
for (m = 0; m < month - 1; m++)
40036ee4: 721f089f tst w4, #0xe
40036ee8: 54000100 b.eq 40036f08 <msdos_date_dos2unix+0xb8> // b.none
40036eec: 51000463 sub w3, w3, #0x1
40036ef0: 8b234444 add x4, x2, w3, uxtw #1
40036ef4: d503201f nop
days += months[m];
40036ef8: 78402443 ldrh w3, [x2], #2
40036efc: 0b030021 add w1, w1, w3
for (m = 0; m < month - 1; m++)
40036f00: eb02009f cmp x4, x2
40036f04: 54ffffa1 b.ne 40036ef8 <msdos_date_dos2unix+0xa8> // b.any <== NEVER TAKEN
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
40036f08: 12001002 and w2, w0, #0x1f
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
40036f0c: 528a3004 mov w4, #0x5180 // #20864
40036f10: 72a00024 movk w4, #0x1, lsl #16
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
40036f14: 51000442 sub w2, w2, #0x1
40036f18: 0b010041 add w1, w2, w1
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
40036f1c: 5294c003 mov w3, #0xa600 // #42496
40036f20: 72a259c3 movk w3, #0x12ce, lsl #16
40036f24: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
40036f28: 1b040c21 madd w1, w1, w4, w3
40036f2c: b90c4401 str w1, [x0, #3140]
}
return seconds + lastseconds;
}
40036f30: 0b0100a0 add w0, w5, w1
40036f34: d65f03c0 ret
return seconds + lastseconds;
40036f38: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
40036f3c: b94c4401 ldr w1, [x0, #3140]
}
40036f40: 0b0100a0 add w0, w5, w1
40036f44: d65f03c0 ret
...
0000000040036cc0 <msdos_date_unix2dos>:
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
40036cc0: b0000668 adrp x8, 40103000 <_Thread_Heads+0x28>
40036cc4: b94c4903 ldr w3, [x8, #3144]
40036cc8: 6b00007f cmp w3, w0
40036ccc: 54000980 b.eq 40036dfc <msdos_date_unix2dos+0x13c> // b.none
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036cd0: 529678a7 mov w7, #0xb3c5 // #46021
40036cd4: 72b23447 movk w7, #0x91a2, lsl #16
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036cd8: 52911124 mov w4, #0x8889 // #34953
40036cdc: 72b11104 movk w4, #0x8888, lsl #16
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036ce0: 9ba77c07 umull x7, w0, w7
lasttime = t;
40036ce4: b90c4900 str w0, [x8, #3144]
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036ce8: 9ba47c05 umull x5, w0, w4
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036cec: 52955566 mov w6, #0xaaab // #43691
40036cf0: 72b55546 movk w6, #0xaaaa, lsl #16
40036cf4: 5280030c mov w12, #0x18 // #24
40036cf8: d36bfce7 lsr x7, x7, #43
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036cfc: 52800789 mov w9, #0x3c // #60
40036d00: d365fca8 lsr x8, x5, #37
/*
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
40036d04: 5288a0e3 mov w3, #0x4507 // #17671
40036d08: 72b845c3 movk w3, #0xc22e, lsl #16
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40036d0c: b000066b adrp x11, 40103000 <_Thread_Heads+0x28>
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036d10: 9ba67ce6 umull x6, w7, w6
if (days != lastday) {
40036d14: b000066a adrp x10, 40103000 <_Thread_Heads+0x28>
40036d18: b94c394d ldr w13, [x10, #3128]
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036d1c: 9ba47d05 umull x5, w8, w4
days = t / (SECONDSPERDAY);
40036d20: 9ba37c03 umull x3, w0, w3
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036d24: d364fcc4 lsr x4, x6, #36
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40036d28: 1b098100 msub w0, w8, w9, w0
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036d2c: d365fca5 lsr x5, x5, #37
days = t / (SECONDSPERDAY);
40036d30: d370fc63 lsr x3, x3, #48
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036d34: 1b0c9c84 msub w4, w4, w12, w7
if (days != lastday) {
40036d38: 6b0301bf cmp w13, w3
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40036d3c: 1b09a0a5 msub w5, w5, w9, w8
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40036d40: 53155084 lsl w4, w4, #11
40036d44: 0b051485 add w5, w4, w5, lsl #5
40036d48: 0b4004a5 add w5, w5, w0, lsr #1
40036d4c: 12003ca5 and w5, w5, #0xffff
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40036d50: 79188165 strh w5, [x11, #3136]
if (days != lastday) {
40036d54: 540004a0 b.eq 40036de8 <msdos_date_unix2dos+0x128> // b.none
lastday = days;
40036d58: b90c3943 str w3, [x10, #3128]
for (year = 1970;; year++) {
40036d5c: 5280f644 mov w4, #0x7b2 // #1970
40036d60: 14000003 b 40036d6c <msdos_date_unix2dos+0xac>
inc = year & 0x03 ? 365 : 366;
if (days < inc)
break;
days -= inc;
40036d64: 4b000063 sub w3, w3, w0
for (year = 1970;; year++) {
40036d68: 11000484 add w4, w4, #0x1
inc = year & 0x03 ? 365 : 366;
40036d6c: 72000486 ands w6, w4, #0x3
40036d70: 1a9f17e0 cset w0, eq // eq = none
40036d74: 1105b400 add w0, w0, #0x16d
if (days < inc)
40036d78: 6b00007f cmp w3, w0
40036d7c: 54ffff42 b.cs 40036d64 <msdos_date_unix2dos+0xa4> // b.hs, b.nlast
}
months = year & 0x03 ? regyear : leapyear;
40036d80: 710000df cmp w6, #0x0
40036d84: d0000647 adrp x7, 40100000 <_RTEMS_tasks_Information>
40036d88: 911100e6 add x6, x7, #0x440
40036d8c: d0000647 adrp x7, 40100000 <_RTEMS_tasks_Information>
40036d90: 911160e7 add x7, x7, #0x458
40036d94: d2800000 mov x0, #0x0 // #0
40036d98: 9a8610e7 csel x7, x7, x6, ne // ne = any
for (month = 0; month < 12; month++) {
40036d9c: d503201f nop
if (days < months[month])
40036da0: 786078e6 ldrh w6, [x7, x0, lsl #1]
40036da4: 6b0300df cmp w6, w3
40036da8: 54000488 b.hi 40036e38 <msdos_date_unix2dos+0x178> // b.pmore <== ALWAYS TAKEN
for (month = 0; month < 12; month++) {
40036dac: 91000400 add x0, x0, #0x1 <== NOT EXECUTED
break;
days -= months[month];
40036db0: 4b060063 sub w3, w3, w6 <== NOT EXECUTED
for (month = 0; month < 12; month++) {
40036db4: f100301f cmp x0, #0xc <== NOT EXECUTED
40036db8: 54ffff41 b.ne 40036da0 <msdos_date_unix2dos+0xe0> // b.any <== NOT EXECUTED
40036dbc: 52803400 mov w0, #0x1a0 // #416 <== NOT EXECUTED
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40036dc0: 11000400 add w0, w0, #0x1
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
40036dc4: 711ef09f cmp w4, #0x7bc
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40036dc8: 0b030003 add w3, w0, w3
40036dcc: 12003c63 and w3, w3, #0xffff
if (year > 1980)
40036dd0: 54000248 b.hi 40036e18 <msdos_date_unix2dos+0x158> // b.pmore <== ALWAYS TAKEN
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
40036dd4: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28> <== NOT EXECUTED
lastddate += (year - 1980) <<
MSDOS_DD_YEAR_SHIFT;
}
}
*dtp = lastdtime;
40036dd8: 79000045 strh w5, [x2] <== NOT EXECUTED
*ddp = lastddate;
40036ddc: 79000023 strh w3, [x1] <== NOT EXECUTED
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
40036de0: 79187803 strh w3, [x0, #3132] <== NOT EXECUTED
}
40036de4: d65f03c0 ret <== NOT EXECUTED
*ddp = lastddate;
40036de8: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
40036dec: 79587803 ldrh w3, [x0, #3132]
*dtp = lastdtime;
40036df0: 79000045 strh w5, [x2]
*ddp = lastddate;
40036df4: 79000023 strh w3, [x1]
}
40036df8: d65f03c0 ret
*dtp = lastdtime;
40036dfc: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
40036e00: 79588005 ldrh w5, [x0, #3136]
*ddp = lastddate;
40036e04: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
40036e08: 79587803 ldrh w3, [x0, #3132]
*dtp = lastdtime;
40036e0c: 79000045 strh w5, [x2]
*ddp = lastddate;
40036e10: 79000023 strh w3, [x1]
}
40036e14: d65f03c0 ret
lastddate += (year - 1980) <<
40036e18: 511ef084 sub w4, w4, #0x7bc
40036e1c: b0000660 adrp x0, 40103000 <_Thread_Heads+0x28>
*dtp = lastdtime;
40036e20: 79000045 strh w5, [x2]
lastddate += (year - 1980) <<
40036e24: 0b042463 add w3, w3, w4, lsl #9
40036e28: 12003c63 and w3, w3, #0xffff
40036e2c: 79187803 strh w3, [x0, #3132]
*ddp = lastddate;
40036e30: 79000023 strh w3, [x1]
}
40036e34: d65f03c0 ret
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40036e38: 11000400 add w0, w0, #0x1
40036e3c: 531b2800 ubfiz w0, w0, #5, #11
40036e40: 17ffffe0 b 40036dc0 <msdos_date_unix2dos+0x100>
...
0000000040030e90 <msdos_dir_is_empty>:
{
40030e90: a9b97bfd stp x29, x30, [sp, #-112]!
40030e94: 910003fd mov x29, sp
40030e98: a9025bf5 stp x21, x22, [sp, #32]
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
40030e9c: b00000d6 adrp x22, 40049000 <IMFS_node_control_sym_link+0xe0>
40030ea0: 910fa2d6 add x22, x22, #0x3e8
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40030ea4: f9400815 ldr x21, [x0, #16]
{
40030ea8: a90153f3 stp x19, x20, [sp, #16]
40030eac: a90573fb stp x27, x28, [sp, #80]
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
40030eb0: 794002bc ldrh w28, [x21]
40030eb4: f94082b4 ldr x20, [x21, #256]
{
40030eb8: a90363f7 stp x23, x24, [sp, #48]
(strncmp(MSDOS_DIR_NAME((entry)),
40030ebc: b00000d7 adrp x23, 40049000 <IMFS_node_control_sym_link+0xe0>
40030ec0: 910fe2f7 add x23, x23, #0x3f8
{
40030ec4: a9046bf9 stp x25, x26, [sp, #64]
40030ec8: aa0103f9 mov x25, x1
uint32_t j = 0, i = 0;
40030ecc: 5280001a mov w26, #0x0 // #0
*ret_val = false;
40030ed0: 3900005f strb wzr, [x2]
{
40030ed4: f90037e2 str x2, [sp, #104]
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
40030ed8: 1b1a7f82 mul w2, w28, w26
40030edc: aa1403e4 mov x4, x20
40030ee0: 2a1c03e3 mov w3, w28
40030ee4: aa1903e1 mov x1, x25
40030ee8: aa1503e0 mov x0, x21
40030eec: 97fff915 bl 4002f340 <fat_file_read>
40030ef0: b4000520 cbz x0, 40030f94 <msdos_dir_is_empty+0x104> <== NEVER TAKEN
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40030ef4: f1007c1f cmp x0, #0x1f
40030ef8: 5400064d b.le 40030fc0 <msdos_dir_is_empty+0x130> <== NEVER TAKEN
assert(ret == fs_info->fat.vol.bps);
40030efc: 794002bc ldrh w28, [x21]
40030f00: eb3c201f cmp x0, w28, uxth
40030f04: 54000621 b.ne 40030fc8 <msdos_dir_is_empty+0x138> // b.any <== NEVER TAKEN
for (i = 0;
40030f08: 52800013 mov w19, #0x0 // #0
char* entry = (char*) fs_info->cl_buf + i;
40030f0c: f94082b4 ldr x20, [x21, #256]
for (i = 0;
40030f10: 340003fc cbz w28, 40030f8c <msdos_dir_is_empty+0xfc> <== NEVER TAKEN
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40030f14: 38734a98 ldrb w24, [x20, w19, uxtw]
char* entry = (char*) fs_info->cl_buf + i;
40030f18: 8b33429b add x27, x20, w19, uxtw
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40030f1c: 7103971f cmp w24, #0xe5
40030f20: 54000300 b.eq 40030f80 <msdos_dir_is_empty+0xf0> // b.none
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
40030f24: 39402f60 ldrb w0, [x27, #11]
40030f28: 12001400 and w0, w0, #0x3f
40030f2c: 71003c1f cmp w0, #0xf
40030f30: 54000280 b.eq 40030f80 <msdos_dir_is_empty+0xf0> // b.none
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
40030f34: aa1603e1 mov x1, x22
40030f38: aa1b03e0 mov x0, x27
40030f3c: d2800162 mov x2, #0xb // #11
40030f40: 94002dcc bl 4003c670 <strncmp>
MSDOS_ATTR_LFN) ||
40030f44: 340001e0 cbz w0, 40030f80 <msdos_dir_is_empty+0xf0>
(strncmp(MSDOS_DIR_NAME((entry)),
40030f48: aa1b03e0 mov x0, x27
40030f4c: aa1703e1 mov x1, x23
40030f50: d2800162 mov x2, #0xb // #11
40030f54: 94002dc7 bl 4003c670 <strncmp>
MSDOS_SHORT_NAME_LEN) == 0) ||
40030f58: 34000140 cbz w0, 40030f80 <msdos_dir_is_empty+0xf0>
return RC_OK;
40030f5c: 52800000 mov w0, #0x0 // #0
if ((*MSDOS_DIR_NAME(entry)) ==
40030f60: 340001b8 cbz w24, 40030f94 <msdos_dir_is_empty+0x104>
}
40030f64: a94153f3 ldp x19, x20, [sp, #16]
40030f68: a9425bf5 ldp x21, x22, [sp, #32]
40030f6c: a94363f7 ldp x23, x24, [sp, #48]
40030f70: a9446bf9 ldp x25, x26, [sp, #64]
40030f74: a94573fb ldp x27, x28, [sp, #80]
40030f78: a8c77bfd ldp x29, x30, [sp], #112
40030f7c: d65f03c0 ret
i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40030f80: 11008273 add w19, w19, #0x20
for (i = 0;
40030f84: 6b1c027f cmp w19, w28
40030f88: 54fffc63 b.cc 40030f14 <msdos_dir_is_empty+0x84> // b.lo, b.ul, b.last
j++;
40030f8c: 1100075a add w26, w26, #0x1
40030f90: 17ffffd2 b 40030ed8 <msdos_dir_is_empty+0x48>
*ret_val = true;
40030f94: f94037e2 ldr x2, [sp, #104]
40030f98: 52800021 mov w1, #0x1 // #1
return RC_OK;
40030f9c: 52800000 mov w0, #0x0 // #0
}
40030fa0: a94153f3 ldp x19, x20, [sp, #16]
*ret_val = true;
40030fa4: 39000041 strb w1, [x2]
}
40030fa8: a9425bf5 ldp x21, x22, [sp, #32]
40030fac: a94363f7 ldp x23, x24, [sp, #48]
40030fb0: a9446bf9 ldp x25, x26, [sp, #64]
40030fb4: a94573fb ldp x27, x28, [sp, #80]
40030fb8: a8c77bfd ldp x29, x30, [sp], #112
40030fbc: d65f03c0 ret
return -1;
40030fc0: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
40030fc4: 17ffffe8 b 40030f64 <msdos_dir_is_empty+0xd4> <== NOT EXECUTED
assert(ret == fs_info->fat.vol.bps);
40030fc8: b00000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40030fcc: b00000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40030fd0: b00000c0 adrp x0, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40030fd4: 910e6063 add x3, x3, #0x398 <== NOT EXECUTED
40030fd8: 91138042 add x2, x2, #0x4e0 <== NOT EXECUTED
40030fdc: 910ee000 add x0, x0, #0x3b8 <== NOT EXECUTED
40030fe0: 528078c1 mov w1, #0x3c6 // #966 <== NOT EXECUTED
40030fe4: 9400162f bl 400368a0 <__assert_func> <== NOT EXECUTED
...
0000000040037640 <msdos_dir_read>:
* the number of bytes read on success, or -1 if error occured (errno
* set apropriately).
*/
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
{
40037640: d10843ff sub sp, sp, #0x210
40037644: a9007bfd stp x29, x30, [sp]
40037648: 910003fd mov x29, sp
4003764c: a90363f7 stp x23, x24, [sp, #48]
40037650: aa0003f8 mov x24, x0
int rc = RC_OK;
int eno = 0;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037654: f9401c00 ldr x0, [x0, #56]
{
40037658: a90153f3 stp x19, x20, [sp, #16]
4003765c: aa0203f4 mov x20, x2
40037660: f90047e1 str x1, [sp, #136]
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037664: f9400813 ldr x19, [x0, #16]
{
40037668: a9046bf9 stp x25, x26, [sp, #64]
4003766c: 91036260 add x0, x19, #0xd8
40037670: a90573fb stp x27, x28, [sp, #80]
rtems_dosfs_convert_control *converter = fs_info->converter;
40037674: f9408661 ldr x1, [x19, #264]
40037678: f9005fe0 str x0, [sp, #184]
const rtems_dosfs_convert_handler *convert_handler = converter->handler;
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
4003767c: f940131b ldr x27, [x24, #32]
fat_file_fd_t *tmp_fat_fd = NULL;
struct dirent tmp_dirent;
size_t lfn_len = 0;
uint16_t *lfn_buf = converter->buffer.data;
40037680: a9406822 ldp x2, x26, [x1]
const rtems_dosfs_convert_handler *convert_handler = converter->handler;
40037684: a9078be1 stp x1, x2, [sp, #120]
char *sfn_buf = converter->buffer.data;
const size_t buf_size = converter->buffer.size;
40037688: f9400821 ldr x1, [x1, #16]
4003768c: f90067e1 str x1, [sp, #200]
uint32_t start = 0;
ssize_t ret = 0;
ssize_t cmpltd = 0;
uint32_t j = 0, i = 0;
uint32_t bts2rd = 0;
uint32_t cur_cln = 0;
40037690: b900d7ff str wzr, [sp, #212]
fat_file_fd_t *tmp_fat_fd = NULL;
40037694: f9006fff str xzr, [sp, #216]
_Mutex_recursive_Acquire( mutex );
40037698: 97ffc6f2 bl 40029260 <_Mutex_recursive_Acquire>
/*
* cast start and count - protect against using sizes that are not exact
* multiples of the -dirent- size. These could result in unexpected
* results
*/
start = iop->offset / sizeof(struct dirent);
4003769c: d29d41e0 mov x0, #0xea0f // #59919
400376a0: f2a1d400 movk x0, #0xea0, lsl #16
400376a4: f2d41d40 movk x0, #0xa0ea, lsl #32
400376a8: f2fd41c0 movk x0, #0xea0e, lsl #48
400376ac: f9400717 ldr x23, [x24, #8]
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
400376b0: 9bc07e94 umulh x20, x20, x0
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
400376b4: f9401762 ldr x2, [x27, #40]
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
400376b8: d2802301 mov x1, #0x118 // #280
start = iop->offset / sizeof(struct dirent);
400376bc: 9bc07ef7 umulh x23, x23, x0
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
400376c0: d348fe94 lsr x20, x20, #8
fat_fd->fat_file_size :
400376c4: f100045f cmp x2, #0x1
start = iop->offset / sizeof(struct dirent);
400376c8: d3489ee0 ubfx x0, x23, #8, #32
400376cc: aa0003e2 mov x2, x0
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
400376d0: 9b017e80 mul x0, x20, x1
400376d4: f90037e0 str x0, [sp, #104]
fat_fd->fat_file_size :
400376d8: 54001ec0 b.eq 40037ab0 <msdos_dir_read+0x470> // b.none
400376dc: b9400a60 ldr w0, [x19, #8]
400376e0: b900abe0 str w0, [sp, #168]
fs_info->fat.vol.bpc;
while (count > 0 && cmpltd >= 0)
400376e4: f94037e0 ldr x0, [sp, #104]
400376e8: b40020e0 cbz x0, 40037b04 <msdos_dir_read+0x4c4> <== NEVER TAKEN
* trailing nul character. We need to range check the length to
* fit in the directory entry name field.
*/
lfn_entries--;
offset_lfn = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
400376ec: 2a0203f7 mov w23, w2
ret = fat_file_read(&fs_info->fat, fat_fd, (j * bts2rd),
400376f0: 52800019 mov w25, #0x0 // #0
ssize_t cmpltd = 0;
400376f4: d2800014 mov x20, #0x0 // #0
400376f8: a9025bf5 stp x21, x22, [sp, #32]
uint32_t lfn_start = FAT_FILE_SHORT_NAME;
400376fc: 12800016 mov w22, #0xffffffff // #-1
int lfn_entries = 0;
40037700: b90077ff str wzr, [sp, #116]
offset_lfn = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
40037704: f9004bf8 str x24, [sp, #144]
uint8_t lfn_checksum = 0;
40037708: b9009fff str wzr, [sp, #156]
size_t lfn_len = 0;
4003770c: f90053ff str xzr, [sp, #160]
ret = fat_file_read(&fs_info->fat, fat_fd, (j * bts2rd),
40037710: b940abe3 ldr w3, [sp, #168]
40037714: 2a1903e2 mov w2, w25
40037718: f9408264 ldr x4, [x19, #256]
4003771c: aa1b03e1 mov x1, x27
40037720: aa1303e0 mov x0, x19
40037724: 97ffdf07 bl 4002f340 <fat_file_read>
40037728: aa0003f5 mov x21, x0
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4003772c: f1007c1f cmp x0, #0x1f
40037730: 54001ccd b.le 40037ac8 <msdos_dir_read+0x488> <== NEVER TAKEN
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40037734: b7f805d4 tbnz x20, #63, 400377ec <msdos_dir_read+0x1ac> <== NEVER TAKEN
40037738: 5280041c mov w28, #0x20 // #32
4003773c: 2a1c03f8 mov w24, w28
40037740: aa1b03fc mov x28, x27
lfn_start =
40037744: 51008320 sub w0, w25, #0x20
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40037748: b9009bf9 str w25, [sp, #152]
lfn_start =
4003774c: b900afe0 str w0, [sp, #172]
char* entry = (char*) fs_info->cl_buf + i;
40037750: f9408269 ldr x9, [x19, #256]
40037754: 5100831b sub w27, w24, #0x20
40037758: 51008301 sub w1, w24, #0x20
4003775c: 8b010139 add x25, x9, x1
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40037760: 387b4920 ldrb w0, [x9, w27, uxtw]
40037764: 34001900 cbz w0, 40037a84 <msdos_dir_read+0x444>
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
40037768: 7103941f cmp w0, #0xe5
4003776c: 54000fa0 b.eq 40037960 <msdos_dir_read+0x320> // b.none
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
40037770: 39402f22 ldrb w2, [x25, #11]
40037774: 12001441 and w1, w2, #0x3f
40037778: 36180642 tbz w2, #3, 40037840 <msdos_dir_read+0x200>
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4003777c: aa3403e2 mvn x2, x20
40037780: eb3842bf cmp x21, w24, uxtw
40037784: 1a9fd7e8 cset w8, gt
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
40037788: 71003c3f cmp w1, #0xf
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4003778c: d37ffc42 lsr x2, x2, #63
40037790: 0a020108 and w8, w8, w2
40037794: 12001c44 and w4, w2, #0xff
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
40037798: 540001c1 b.ne 400377d0 <msdos_dir_read+0x190> // b.any
if (lfn_start == FAT_FILE_SHORT_NAME)
4003779c: 310006df cmn w22, #0x1
is_first_entry = false;
400377a0: 52800003 mov w3, #0x0 // #0
if (lfn_start == FAT_FILE_SHORT_NAME)
400377a4: 54000fe0 b.eq 400379a0 <msdos_dir_read+0x360> // b.none
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
400377a8: b94077e1 ldr w1, [sp, #116]
400377ac: 12001400 and w0, w0, #0x3f
400377b0: 6b01001f cmp w0, w1
400377b4: 540000a1 b.ne 400377c8 <msdos_dir_read+0x188> // b.any
MSDOS_LAST_LONG_ENTRY_MASK)) ||
400377b8: 39403720 ldrb w0, [x25, #13]
400377bc: b9409fe1 ldr w1, [sp, #156]
400377c0: 6b01001f cmp w0, w1
400377c4: 54000180 b.eq 400377f4 <msdos_dir_read+0x1b4> // b.none <== ALWAYS TAKEN
lfn_start = FAT_FILE_SHORT_NAME;
400377c8: 12800016 mov w22, #0xffffffff // #-1
400377cc: d503201f nop
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
400377d0: 11008318 add w24, w24, #0x20
400377d4: 35fffbe8 cbnz w8, 40037750 <msdos_dir_read+0x110>
while (count > 0 && cmpltd >= 0)
400377d8: b9409bf9 ldr w25, [sp, #152]
400377dc: aa1c03fb mov x27, x28
400377e0: b940abe0 ldr w0, [sp, #168]
400377e4: 0b000339 add w25, w25, w0
400377e8: 35fff944 cbnz w4, 40037710 <msdos_dir_read+0xd0> <== ALWAYS TAKEN
400377ec: a9425bf5 ldp x21, x22, [sp, #32]
400377f0: 14000085 b 40037a04 <msdos_dir_read+0x3c4>
lfn_entries--;
400377f4: b94077e0 ldr w0, [sp, #116]
offset_lfn = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
400377f8: 528001a2 mov w2, #0xd // #13
400377fc: b900b3e8 str w8, [sp, #176]
lfn_entries--;
40037800: 51000400 sub w0, w0, #0x1
40037804: b900c3e4 str w4, [sp, #192]
40037808: 2a0003e1 mov w1, w0
4003780c: b90077e1 str w1, [sp, #116]
lfn_len += msdos_get_utf16_string_from_long_entry (
40037810: aa1903e0 mov x0, x25
offset_lfn = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
40037814: 1b027c21 mul w1, w1, w2
lfn_len += msdos_get_utf16_string_from_long_entry (
40037818: f94067e2 ldr x2, [sp, #200]
4003781c: cb21c042 sub x2, x2, w1, sxtw
40037820: 8b21c741 add x1, x26, w1, sxtw #1
40037824: 97ffe5f3 bl 40030ff0 <msdos_get_utf16_string_from_long_entry>
40037828: f94053e1 ldr x1, [sp, #160]
4003782c: b940b3e8 ldr w8, [sp, #176]
40037830: 8b000020 add x0, x1, x0
40037834: b940c3e4 ldr w4, [sp, #192]
40037838: f90053e0 str x0, [sp, #160]
return rc;
}
}
}
if (count <= 0)
4003783c: 17ffffe5 b 400377d0 <msdos_dir_read+0x190>
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
40037840: 71003c3f cmp w1, #0xf
40037844: 54001520 b.eq 40037ae8 <msdos_dir_read+0x4a8> // b.none <== NEVER TAKEN
if (start)
40037848: 350009b7 cbnz w23, 4003797c <msdos_dir_read+0x33c>
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
4003784c: b9409be3 ldr w3, [sp, #152]
tmp_dirent.d_type = DT_REG;
40037850: f27c005f tst x2, #0x10
40037854: 52800101 mov w1, #0x8 // #8
40037858: 52800080 mov w0, #0x4 // #4
4003785c: 1a811000 csel w0, w0, w1, ne // ne = any
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
40037860: 910353e4 add x4, sp, #0xd4
40037864: aa1c03e1 mov x1, x28
40037868: 52800022 mov w2, #0x1 // #1
4003786c: 39042be0 strb w0, [sp, #266]
40037870: aa1303e0 mov x0, x19
40037874: 97ffdfbb bl 4002f760 <fat_file_ioctl>
if (rc != RC_OK)
40037878: 35001040 cbnz w0, 40037a80 <msdos_dir_read+0x440> <== NEVER TAKEN
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
4003787c: 12800003 mov w3, #0xffffffff // #-1
dir_pos.sname.cln = cur_cln;
40037880: b940d7e0 ldr w0, [sp, #212]
rc = fat_file_open(&fs_info->fat, &dir_pos, &tmp_fat_fd);
40037884: 910363e2 add x2, sp, #0xd8
40037888: 9103a3e1 add x1, sp, #0xe8
dir_pos.sname.ofs = i;
4003788c: 291d6fe0 stp w0, w27, [sp, #232]
rc = fat_file_open(&fs_info->fat, &dir_pos, &tmp_fat_fd);
40037890: aa1303e0 mov x0, x19
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40037894: 291e0fe3 stp w3, w3, [sp, #240]
40037898: 97ffddca bl 4002efc0 <fat_file_open>
if (rc != RC_OK)
4003789c: 35000f20 cbnz w0, 40037a80 <msdos_dir_read+0x440> <== NEVER TAKEN
tmp_dirent.d_ino = tmp_fat_fd->ino;
400378a0: f9406fe0 ldr x0, [sp, #216]
tmp_dirent.d_reclen = sizeof(struct dirent);
400378a4: 52802301 mov w1, #0x118 // #280
if (lfn_entries == 0 &&
400378a8: b94077e2 ldr w2, [sp, #116]
tmp_dirent.d_reclen = sizeof(struct dirent);
400378ac: 790213e1 strh w1, [sp, #264]
tmp_dirent.d_ino = tmp_fat_fd->ino;
400378b0: b9401400 ldr w0, [x0, #20]
if (lfn_entries == 0 &&
400378b4: 7100005f cmp w2, #0x0
tmp_dirent.d_off = start + cmpltd;
400378b8: a90fd3e0 stp x0, x20, [sp, #248]
if (lfn_entries == 0 &&
400378bc: 3a410ac4 ccmn w22, #0x1, #0x4, eq // eq = none
400378c0: 54000b61 b.ne 40037a2c <msdos_dir_read+0x3ec> // b.any
size_t len = sizeof(tmp_dirent.d_name) - 1;
400378c4: d2801fe2 mov x2, #0xff // #255
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
400378c8: aa1903e1 mov x1, x25
400378cc: aa1a03e0 mov x0, x26
size_t len = sizeof(tmp_dirent.d_name) - 1;
400378d0: f90073e2 str x2, [sp, #224]
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
400378d4: 97ffe5cf bl 40031010 <msdos_format_dirent_with_dot>
eno = (*convert_handler->codepage_to_utf8) (
400378d8: 92403c02 and x2, x0, #0xffff
400378dc: f94043e1 ldr x1, [sp, #128]
400378e0: 910383e4 add x4, sp, #0xe0
400378e4: 91043be3 add x3, sp, #0x10e
400378e8: f9400426 ldr x6, [x1, #8]
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
400378ec: 79021be0 strh w0, [sp, #268]
eno = (*convert_handler->codepage_to_utf8) (
400378f0: f9403fe0 ldr x0, [sp, #120]
400378f4: aa1a03e1 mov x1, x26
400378f8: d63f00c0 blr x6
if ( 0 == eno ) {
400378fc: 350007a0 cbnz w0, 400379f0 <msdos_dir_read+0x3b0> <== NEVER TAKEN
tmp_dirent.d_namlen = len;
40037900: f94073e0 ldr x0, [sp, #224]
tmp_dirent.d_name[len] = '\0';
40037904: 91043be1 add x1, sp, #0x10e
tmp_dirent.d_namlen = len;
40037908: 79021be0 strh w0, [sp, #268]
tmp_dirent.d_name[len] = '\0';
4003790c: 12800016 mov w22, #0xffffffff // #-1
40037910: 3820683f strb wzr, [x1, x0]
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
40037914: f94047e0 ldr x0, [sp, #136]
40037918: 9103e3e1 add x1, sp, #0xf8
4003791c: d2802302 mov x2, #0x118 // #280
40037920: 8b140000 add x0, x0, x20
40037924: 94000eb5 bl 4003b3f8 <memcpy>
iop->offset = iop->offset + sizeof(struct dirent);
40037928: f9404be3 ldr x3, [sp, #144]
rc = fat_file_close(&fs_info->fat, tmp_fat_fd);
4003792c: aa1303e0 mov x0, x19
40037930: f9406fe1 ldr x1, [sp, #216]
cmpltd += (sizeof(struct dirent));
40037934: 91046294 add x20, x20, #0x118
iop->offset = iop->offset + sizeof(struct dirent);
40037938: f9400462 ldr x2, [x3, #8]
4003793c: 91046042 add x2, x2, #0x118
40037940: f9000462 str x2, [x3, #8]
count -= (sizeof(struct dirent));
40037944: f94037e2 ldr x2, [sp, #104]
40037948: d1046042 sub x2, x2, #0x118
4003794c: f90037e2 str x2, [sp, #104]
rc = fat_file_close(&fs_info->fat, tmp_fat_fd);
40037950: 97ffdf50 bl 4002f690 <fat_file_close>
if (rc != RC_OK)
40037954: 35000960 cbnz w0, 40037a80 <msdos_dir_read+0x440> <== NEVER TAKEN
if (count <= 0)
40037958: f94037e0 ldr x0, [sp, #104]
4003795c: b4fff480 cbz x0, 400377ec <msdos_dir_read+0x1ac> <== ALWAYS TAKEN
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40037960: aa3403e2 mvn x2, x20
40037964: eb3842bf cmp x21, w24, uxtw
40037968: 1a9fd7e8 cset w8, gt
4003796c: d37ffc42 lsr x2, x2, #63
40037970: 0a020108 and w8, w8, w2
40037974: 12001c44 and w4, w2, #0xff
40037978: 17ffff96 b 400377d0 <msdos_dir_read+0x190>
4003797c: aa3403e2 mvn x2, x20
40037980: eb3842bf cmp x21, w24, uxtw
40037984: 1a9fd7e8 cset w8, gt
start--;
40037988: 510006f7 sub w23, w23, #0x1
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4003798c: d37ffc42 lsr x2, x2, #63
lfn_start = FAT_FILE_SHORT_NAME;
40037990: 12800016 mov w22, #0xffffffff // #-1
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40037994: 0a020108 and w8, w8, w2
40037998: 12001c44 and w4, w2, #0xff
4003799c: 17ffff8d b 400377d0 <msdos_dir_read+0x190>
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
400379a0: f9005be9 str x9, [sp, #176]
400379a4: 3637f160 tbz w0, #6, 400377d0 <msdos_dir_read+0x190>
lfn_start =
400379a8: b940afe1 ldr w1, [sp, #172]
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
400379ac: 12001400 and w0, w0, #0x3f
400379b0: b90077e0 str w0, [sp, #116]
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
400379b4: d2802002 mov x2, #0x100 // #256
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
400379b8: 39403720 ldrb w0, [x25, #13]
lfn_start =
400379bc: 0b180036 add w22, w1, w24
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
400379c0: 52800001 mov w1, #0x0 // #0
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
400379c4: b9009fe0 str w0, [sp, #156]
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
400379c8: 91043be0 add x0, sp, #0x10e
400379cc: 291813e8 stp w8, w4, [sp, #192]
400379d0: 94000ea5 bl 4003b464 <memset>
lfn_start =
400379d4: 53057ed6 lsr w22, w22, #5
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
400379d8: f9405be9 ldr x9, [sp, #176]
is_first_entry = true;
400379dc: 52800023 mov w3, #0x1 // #1
lfn_len = 0;
400379e0: 295813e8 ldp w8, w4, [sp, #192]
400379e4: f90053ff str xzr, [sp, #160]
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
400379e8: 387b4920 ldrb w0, [x9, w27, uxtw]
400379ec: 17ffff6f b 400377a8 <msdos_dir_read+0x168>
errno = eno;
400379f0: 2a0003f6 mov w22, w0 <== NOT EXECUTED
400379f4: 94000bde bl 4003a96c <__errno> <== NOT EXECUTED
400379f8: b9000016 str w22, [x0] <== NOT EXECUTED
cmpltd = -1;
400379fc: 92800014 mov x20, #0xffffffffffffffff // #-1 <== NOT EXECUTED
40037a00: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
_Mutex_recursive_Release( mutex );
40037a04: f9405fe0 ldr x0, [sp, #184]
40037a08: 97ffc63a bl 400292f0 <_Mutex_recursive_Release>
j++;
}
msdos_fs_unlock(fs_info);
return cmpltd;
}
40037a0c: aa1403e0 mov x0, x20
40037a10: a9407bfd ldp x29, x30, [sp]
40037a14: a94153f3 ldp x19, x20, [sp, #16]
40037a18: a94363f7 ldp x23, x24, [sp, #48]
40037a1c: a9446bf9 ldp x25, x26, [sp, #64]
40037a20: a94573fb ldp x27, x28, [sp, #80]
40037a24: 910843ff add sp, sp, #0x210
40037a28: d65f03c0 ret
lfn_checksum == msdos_lfn_checksum(entry)) {
40037a2c: aa1903e0 mov x0, x25
40037a30: 97ffe368 bl 400307d0 <msdos_lfn_checksum>
if (lfn_entries == 0 &&
40037a34: b9409fe1 ldr w1, [sp, #156]
40037a38: 6b20003f cmp w1, w0, uxtb
40037a3c: 54fff441 b.ne 400378c4 <msdos_dir_read+0x284> // b.any <== NEVER TAKEN
eno = (*convert_handler->utf16_to_utf8) (
40037a40: f94043e0 ldr x0, [sp, #128]
40037a44: 910383e4 add x4, sp, #0xe0
40037a48: f94053e2 ldr x2, [sp, #160]
40037a4c: 91043be3 add x3, sp, #0x10e
40037a50: f9400c07 ldr x7, [x0, #24]
size_t len = sizeof(tmp_dirent.d_name) - 1;
40037a54: d2801fe0 mov x0, #0xff // #255
40037a58: f90073e0 str x0, [sp, #224]
eno = (*convert_handler->utf16_to_utf8) (
40037a5c: aa1a03e1 mov x1, x26
40037a60: f9403fe0 ldr x0, [sp, #120]
40037a64: d63f00e0 blr x7
if (eno == 0) {
40037a68: 35fff2e0 cbnz w0, 400378c4 <msdos_dir_read+0x284>
tmp_dirent.d_namlen = len;
40037a6c: f94073e0 ldr x0, [sp, #224]
tmp_dirent.d_name[len] = '\0';
40037a70: 91043be1 add x1, sp, #0x10e
tmp_dirent.d_namlen = len;
40037a74: 79021be0 strh w0, [sp, #268]
tmp_dirent.d_name[len] = '\0';
40037a78: 3820683f strb wzr, [x1, x0]
if (lfn_start == FAT_FILE_SHORT_NAME) {
40037a7c: 17ffffa6 b 40037914 <msdos_dir_read+0x2d4>
40037a80: 93407c14 sxtw x20, w0 <== NOT EXECUTED
40037a84: f9405fe0 ldr x0, [sp, #184]
40037a88: 97ffc61a bl 400292f0 <_Mutex_recursive_Release>
}
40037a8c: aa1403e0 mov x0, x20
40037a90: a9407bfd ldp x29, x30, [sp]
40037a94: a94153f3 ldp x19, x20, [sp, #16]
return rc;
40037a98: a9425bf5 ldp x21, x22, [sp, #32]
}
40037a9c: a94363f7 ldp x23, x24, [sp, #48]
40037aa0: a9446bf9 ldp x25, x26, [sp, #64]
40037aa4: a94573fb ldp x27, x28, [sp, #80]
40037aa8: 910843ff add sp, sp, #0x210
40037aac: d65f03c0 ret
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40037ab0: 39405a60 ldrb w0, [x19, #22]
40037ab4: f240041f tst x0, #0x3
40037ab8: 54ffe120 b.eq 400376dc <msdos_dir_read+0x9c> // b.none <== NEVER TAKEN
fat_fd->fat_file_size :
40037abc: b9402360 ldr w0, [x27, #32]
40037ac0: b900abe0 str w0, [sp, #168]
40037ac4: 17ffff08 b 400376e4 <msdos_dir_read+0xa4>
40037ac8: f9405fe0 ldr x0, [sp, #184] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
40037acc: 92800014 mov x20, #0xffffffffffffffff // #-1 <== NOT EXECUTED
40037ad0: 97ffc608 bl 400292f0 <_Mutex_recursive_Release> <== NOT EXECUTED
40037ad4: 94000ba6 bl 4003a96c <__errno> <== NOT EXECUTED
40037ad8: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
40037adc: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40037ae0: b9000001 str w1, [x0] <== NOT EXECUTED
40037ae4: 17ffffca b 40037a0c <msdos_dir_read+0x3cc> <== NOT EXECUTED
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40037ae8: aa3403e2 mvn x2, x20 <== NOT EXECUTED
40037aec: eb3842bf cmp x21, w24, uxtw <== NOT EXECUTED
40037af0: 1a9fd7e8 cset w8, gt <== NOT EXECUTED
40037af4: d37ffc42 lsr x2, x2, #63 <== NOT EXECUTED
40037af8: 0a020108 and w8, w8, w2 <== NOT EXECUTED
40037afc: 12001c44 and w4, w2, #0xff <== NOT EXECUTED
40037b00: 17ffff27 b 4003779c <msdos_dir_read+0x15c> <== NOT EXECUTED
ssize_t cmpltd = 0;
40037b04: d2800014 mov x20, #0x0 // #0 <== NOT EXECUTED
40037b08: 17ffffbf b 40037a04 <msdos_dir_read+0x3c4> <== NOT EXECUTED
40037b0c: 00000000 udf #0
0000000040037dc0 <msdos_file_ftruncate>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately).
*/
int
msdos_file_ftruncate(rtems_libio_t *iop, off_t length)
{
40037dc0: a9bb7bfd stp x29, x30, [sp, #-80]!
40037dc4: 910003fd mov x29, sp
40037dc8: a90153f3 stp x19, x20, [sp, #16]
40037dcc: aa0103f3 mov x19, x1
int rc = RC_OK;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037dd0: f9401c01 ldr x1, [x0, #56]
{
40037dd4: a9025bf5 stp x21, x22, [sp, #32]
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
40037dd8: f9401014 ldr x20, [x0, #32]
{
40037ddc: a90363f7 stp x23, x24, [sp, #48]
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037de0: f9400836 ldr x22, [x1, #16]
40037de4: 910362d8 add x24, x22, #0xd8
_Mutex_recursive_Acquire( mutex );
40037de8: aa1803e0 mov x0, x24
40037dec: 97ffc51d bl 40029260 <_Mutex_recursive_Acquire>
uint32_t old_length;
msdos_fs_lock(fs_info);
old_length = fat_fd->fat_file_size;
40037df0: b9402297 ldr w23, [x20, #32]
if (length < old_length) {
40037df4: eb37427f cmp x19, w23, uxtw
40037df8: 540001ea b.ge 40037e34 <msdos_file_ftruncate+0x74> // b.tcont
rc = fat_file_truncate(&fs_info->fat, fat_fd, length);
40037dfc: aa1603e0 mov x0, x22
40037e00: 2a1303e2 mov w2, w19
40037e04: aa1403e1 mov x1, x20
40037e08: 97ffddde bl 4002f580 <fat_file_truncate>
40037e0c: 2a0003f5 mov w21, w0
errno = ENOSPC;
rc = -1;
}
}
if (rc == RC_OK)
40037e10: 34000280 cbz w0, 40037e60 <msdos_file_ftruncate+0xa0> <== ALWAYS TAKEN
_Mutex_recursive_Release( mutex );
40037e14: aa1803e0 mov x0, x24 <== NOT EXECUTED
40037e18: 97ffc536 bl 400292f0 <_Mutex_recursive_Release> <== NOT EXECUTED
}
msdos_fs_unlock(fs_info);
return rc;
}
40037e1c: 2a1503e0 mov w0, w21 <== NOT EXECUTED
40037e20: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40037e24: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40037e28: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40037e2c: a8c57bfd ldp x29, x30, [sp], #80 <== NOT EXECUTED
40037e30: d65f03c0 ret <== NOT EXECUTED
rc = fat_file_extend(&fs_info->fat,
40037e34: 910133e4 add x4, sp, #0x4c
40037e38: 2a1303e3 mov w3, w19
40037e3c: aa1403e1 mov x1, x20
40037e40: aa1603e0 mov x0, x22
40037e44: 52800022 mov w2, #0x1 // #1
40037e48: 97ffde82 bl 4002f850 <fat_file_extend>
40037e4c: 2a0003f5 mov w21, w0
if (rc == RC_OK && length != new_length) {
40037e50: 35fffe20 cbnz w0, 40037e14 <msdos_file_ftruncate+0x54> <== NEVER TAKEN
40037e54: b9404fe0 ldr w0, [sp, #76]
40037e58: eb13001f cmp x0, x19
40037e5c: 54000261 b.ne 40037ea8 <msdos_file_ftruncate+0xe8> // b.any <== NEVER TAKEN
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037e60: 3940e281 ldrb w1, [x20, #56]
fat_file_set_ctime_mtime(fat_fd, time(NULL));
40037e64: d2800000 mov x0, #0x0 // #0
fat_fd->fat_file_size = s;
40037e68: b9002293 str w19, [x20, #32]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037e6c: 321f0021 orr w1, w1, #0x2
40037e70: 3900e281 strb w1, [x20, #56]
40037e74: 94001efd bl 4003fa68 <time>
fat_fd->mtime = t;
40037e78: a9048280 stp x0, x0, [x20, #72]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037e7c: 3940e281 ldrb w1, [x20, #56]
40037e80: aa1803e0 mov x0, x24
40037e84: 321f0021 orr w1, w1, #0x2
40037e88: 3900e281 strb w1, [x20, #56]
40037e8c: 97ffc519 bl 400292f0 <_Mutex_recursive_Release>
}
40037e90: 2a1503e0 mov w0, w21
40037e94: a94153f3 ldp x19, x20, [sp, #16]
40037e98: a9425bf5 ldp x21, x22, [sp, #32]
40037e9c: a94363f7 ldp x23, x24, [sp, #48]
40037ea0: a8c57bfd ldp x29, x30, [sp], #80
40037ea4: d65f03c0 ret
fat_file_truncate(&fs_info->fat, fat_fd, old_length);
40037ea8: aa1403e1 mov x1, x20 <== NOT EXECUTED
40037eac: 2a1703e2 mov w2, w23 <== NOT EXECUTED
40037eb0: aa1603e0 mov x0, x22 <== NOT EXECUTED
40037eb4: 97ffddb3 bl 4002f580 <fat_file_truncate> <== NOT EXECUTED
rc = -1;
40037eb8: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
errno = ENOSPC;
40037ebc: 94000aac bl 4003a96c <__errno> <== NOT EXECUTED
40037ec0: 52800381 mov w1, #0x1c // #28 <== NOT EXECUTED
40037ec4: b9000001 str w1, [x0] <== NOT EXECUTED
if (rc == RC_OK)
40037ec8: 17ffffd3 b 40037e14 <msdos_file_ftruncate+0x54> <== NOT EXECUTED
40037ecc: 00000000 udf #0
0000000040037ed0 <msdos_file_sync>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_sync(rtems_libio_t *iop)
{
40037ed0: a9bd7bfd stp x29, x30, [sp, #-48]!
40037ed4: 910003fd mov x29, sp
int rc = RC_OK;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037ed8: f9401c01 ldr x1, [x0, #56]
{
40037edc: a90153f3 stp x19, x20, [sp, #16]
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
40037ee0: f9401013 ldr x19, [x0, #32]
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037ee4: f9400834 ldr x20, [x1, #16]
{
40037ee8: f90013f5 str x21, [sp, #32]
40037eec: 91036295 add x21, x20, #0xd8
_Mutex_recursive_Acquire( mutex );
40037ef0: aa1503e0 mov x0, x21
40037ef4: 97ffc4db bl 40029260 <_Mutex_recursive_Acquire>
msdos_fs_lock(fs_info);
rc = fat_file_update(&fs_info->fat, fat_fd);
40037ef8: aa1303e1 mov x1, x19
40037efc: aa1403e0 mov x0, x20
40037f00: 97ffdcec bl 4002f2b0 <fat_file_update>
40037f04: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40037f08: 35000060 cbnz w0, 40037f14 <msdos_file_sync+0x44> <== NEVER TAKEN
{
msdos_fs_unlock(fs_info);
return rc;
}
rc = fat_sync(&fs_info->fat);
40037f0c: aa1403e0 mov x0, x20
40037f10: 97ffd8e0 bl 4002e290 <fat_sync>
_Mutex_recursive_Release( mutex );
40037f14: aa1503e0 mov x0, x21
40037f18: 97ffc4f6 bl 400292f0 <_Mutex_recursive_Release>
msdos_fs_unlock(fs_info);
return RC_OK;
}
40037f1c: 2a1303e0 mov w0, w19
40037f20: a94153f3 ldp x19, x20, [sp, #16]
40037f24: f94013f5 ldr x21, [sp, #32]
40037f28: a8c37bfd ldp x29, x30, [sp], #48
40037f2c: d65f03c0 ret
0000000040037c30 <msdos_file_write>:
* the number of bytes written on success, or -1 if error occured
* and errno set appropriately
*/
ssize_t
msdos_file_write(rtems_libio_t *iop,const void *buffer, size_t count)
{
40037c30: a9bc7bfd stp x29, x30, [sp, #-64]!
40037c34: 910003fd mov x29, sp
40037c38: a90153f3 stp x19, x20, [sp, #16]
40037c3c: aa0003f3 mov x19, x0
40037c40: aa0203f4 mov x20, x2
ssize_t ret = 0;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037c44: f9401c00 ldr x0, [x0, #56]
{
40037c48: a90363f7 stp x23, x24, [sp, #48]
40037c4c: a9025bf5 stp x21, x22, [sp, #32]
40037c50: aa0103f6 mov x22, x1
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
40037c54: f9400817 ldr x23, [x0, #16]
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
40037c58: f9401275 ldr x21, [x19, #32]
40037c5c: 910362f8 add x24, x23, #0xd8
_Mutex_recursive_Acquire( mutex );
40037c60: aa1803e0 mov x0, x24
40037c64: 97ffc57f bl 40029260 <_Mutex_recursive_Acquire>
40037c68: b9400260 ldr w0, [x19]
msdos_fs_lock(fs_info);
if (rtems_libio_iop_is_append(iop))
40037c6c: 37480300 tbnz w0, #9, 40037ccc <msdos_file_write+0x9c>
iop->offset = fat_fd->fat_file_size;
ret = fat_file_write(&fs_info->fat, fat_fd, iop->offset, count,
40037c70: b9400a62 ldr w2, [x19, #8]
40037c74: 2a1403e3 mov w3, w20
40037c78: aa1603e4 mov x4, x22
40037c7c: aa1703e0 mov x0, x23
40037c80: aa1503e1 mov x1, x21
40037c84: 97ffdfa3 bl 4002fb10 <fat_file_write>
40037c88: aa0003f4 mov x20, x0
buffer);
if (ret < 0)
40037c8c: b7f80400 tbnz x0, #63, 40037d0c <msdos_file_write+0xdc>
/*
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
iop->offset += ret;
40037c90: f9400660 ldr x0, [x19, #8]
if (iop->offset > fat_fd->fat_file_size)
40037c94: b94022a1 ldr w1, [x21, #32]
iop->offset += ret;
40037c98: 8b000280 add x0, x20, x0
40037c9c: f9000660 str x0, [x19, #8]
if (iop->offset > fat_fd->fat_file_size)
40037ca0: eb01001f cmp x0, x1
40037ca4: 540001cc b.gt 40037cdc <msdos_file_write+0xac>
fat_file_set_file_size(fat_fd, (uint32_t) iop->offset);
if (ret > 0)
40037ca8: b5000254 cbnz x20, 40037cf0 <msdos_file_write+0xc0> <== ALWAYS TAKEN
_Mutex_recursive_Release( mutex );
40037cac: aa1803e0 mov x0, x24
40037cb0: 97ffc590 bl 400292f0 <_Mutex_recursive_Release>
fat_file_set_ctime_mtime(fat_fd, time(NULL));
msdos_fs_unlock(fs_info);
return ret;
}
40037cb4: aa1403e0 mov x0, x20
40037cb8: a94153f3 ldp x19, x20, [sp, #16]
40037cbc: a9425bf5 ldp x21, x22, [sp, #32]
40037cc0: a94363f7 ldp x23, x24, [sp, #48]
40037cc4: a8c47bfd ldp x29, x30, [sp], #64
40037cc8: d65f03c0 ret
iop->offset = fat_fd->fat_file_size;
40037ccc: b94022a2 ldr w2, [x21, #32]
40037cd0: 2a0203e0 mov w0, w2
40037cd4: f9000660 str x0, [x19, #8]
40037cd8: 17ffffe7 b 40037c74 <msdos_file_write+0x44>
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037cdc: 3940e2a1 ldrb w1, [x21, #56]
fat_file_set_file_size(fat_fd, (uint32_t) iop->offset);
40037ce0: b90022a0 str w0, [x21, #32]
40037ce4: 321f0020 orr w0, w1, #0x2
40037ce8: 3900e2a0 strb w0, [x21, #56]
if (ret > 0)
40037cec: b4fffe14 cbz x20, 40037cac <msdos_file_write+0x7c> <== NEVER TAKEN
fat_file_set_ctime_mtime(fat_fd, time(NULL));
40037cf0: d2800000 mov x0, #0x0 // #0
40037cf4: 94001f5d bl 4003fa68 <time>
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037cf8: 3940e2a1 ldrb w1, [x21, #56]
fat_fd->mtime = t;
40037cfc: a90482a0 stp x0, x0, [x21, #72]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40037d00: 321f0021 orr w1, w1, #0x2
40037d04: 3900e2a1 strb w1, [x21, #56]
}
40037d08: 17ffffe9 b 40037cac <msdos_file_write+0x7c>
40037d0c: aa1803e0 mov x0, x24
return -1;
40037d10: 92800014 mov x20, #0xffffffffffffffff // #-1
40037d14: 97ffc577 bl 400292f0 <_Mutex_recursive_Release>
40037d18: 17ffffe7 b 40037cb4 <msdos_file_write+0x84>
40037d1c: 00000000 udf #0
0000000040036f50 <msdos_filename_utf8_to_long_name_for_compare>:
rtems_dosfs_convert_control *converter,
const uint8_t *utf8_name,
const size_t utf8_name_size,
uint8_t *long_name,
const size_t long_name_size)
{
40036f50: a9bd7bfd stp x29, x30, [sp, #-48]!
40036f54: 910003fd mov x29, sp
if ( src_name[0] == UTF8_FULL_STOP
40036f58: 39400025 ldrb w5, [x1]
ssize_t returned_size = 0;
int eno = 0;
size_t name_size;
size_t dest_size = long_name_size;
40036f5c: f90017e4 str x4, [sp, #40]
if ( src_name[0] == UTF8_FULL_STOP
40036f60: 7100b8bf cmp w5, #0x2e
40036f64: 540003a0 b.eq 40036fd8 <msdos_filename_utf8_to_long_name_for_compare+0x88> // b.none<== NEVER TAKEN
size_returned >= UTF8_FULL_STOP_SIZE
40036f68: f9000bf3 str x19, [sp, #16]
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
40036f6c: f100005f cmp x2, #0x0
ssize_t size_returned = filename_size;
40036f70: aa0203e4 mov x4, x2
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
40036f74: 540000ec b.gt 40036f90 <msdos_filename_utf8_to_long_name_for_compare+0x40><== ALWAYS TAKEN
if (returned_size == 0) {
name_size = msdos_filename_delete_trailing_dots (
&utf8_name[0],
utf8_name_size);
if (name_size > 0) {
40036f78: 54000161 b.ne 40036fa4 <msdos_filename_utf8_to_long_name_for_compare+0x54> // b.any<== NOT EXECUTED
40036f7c: d503201f nop <== NOT EXECUTED
&dest_size);
if (eno == 0) {
returned_size = (ssize_t)dest_size;
}
} else {
eno = EINVAL;
40036f80: 528002d3 mov w19, #0x16 // #22 <== NOT EXECUTED
40036f84: 1400000e b 40036fbc <msdos_filename_utf8_to_long_name_for_compare+0x6c><== NOT EXECUTED
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
40036f88: f1000484 subs x4, x4, #0x1
40036f8c: 54ffffa0 b.eq 40036f80 <msdos_filename_utf8_to_long_name_for_compare+0x30> // b.none<== NEVER TAKEN
&& filename_utf8[i] == UTF8_FULL_STOP;) {
40036f90: 51000482 sub w2, w4, #0x1
40036f94: 38624822 ldrb w2, [x1, w2, uxtw]
40036f98: 7100b85f cmp w2, #0x2e
40036f9c: 54ffff60 b.eq 40036f88 <msdos_filename_utf8_to_long_name_for_compare+0x38> // b.none
name_size = msdos_filename_delete_trailing_dots (
40036fa0: aa0403e2 mov x2, x4
eno = (*converter->handler->utf8_normalize_and_fold) (
40036fa4: f9400005 ldr x5, [x0]
40036fa8: 9100a3e4 add x4, sp, #0x28
40036fac: f94010a5 ldr x5, [x5, #32]
40036fb0: d63f00a0 blr x5
40036fb4: 2a0003f3 mov w19, w0
if (eno == 0) {
40036fb8: 34000280 cbz w0, 40037008 <msdos_filename_utf8_to_long_name_for_compare+0xb8><== ALWAYS TAKEN
}
}
if ( eno != 0 ) {
errno = eno;
40036fbc: 94000e6c bl 4003a96c <__errno> <== NOT EXECUTED
40036fc0: aa0003e1 mov x1, x0 <== NOT EXECUTED
returned_size = -1;
40036fc4: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
errno = eno;
40036fc8: b9000033 str w19, [x1] <== NOT EXECUTED
40036fcc: f9400bf3 ldr x19, [sp, #16] <== NOT EXECUTED
}
return returned_size;
}
40036fd0: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED
40036fd4: d65f03c0 ret <== NOT EXECUTED
&& src_size == UTF8_FULL_STOP_SIZE) {
40036fd8: f100045f cmp x2, #0x1 <== NOT EXECUTED
40036fdc: 540001e0 b.eq 40037018 <msdos_filename_utf8_to_long_name_for_compare+0xc8> // b.none<== NOT EXECUTED
&& src_size == ( 2 * UTF8_FULL_STOP_SIZE ) ) {
40036fe0: 39400426 ldrb w6, [x1, #1] <== NOT EXECUTED
40036fe4: 7100b8df cmp w6, #0x2e <== NOT EXECUTED
40036fe8: fa420840 ccmp x2, #0x2, #0x0, eq // eq = none <== NOT EXECUTED
40036fec: 54fffbe1 b.ne 40036f68 <msdos_filename_utf8_to_long_name_for_compare+0x18> // b.any<== NOT EXECUTED
if (dest_size >= 2 * UTF8_FULL_STOP_SIZE) {
40036ff0: f100049f cmp x4, #0x1 <== NOT EXECUTED
40036ff4: 540001c9 b.ls 4003702c <msdos_filename_utf8_to_long_name_for_compare+0xdc> // b.plast<== NOT EXECUTED
returned_size = 2 * UTF8_FULL_STOP_SIZE;
40036ff8: d2800040 mov x0, #0x2 // #2 <== NOT EXECUTED
dest_name[0] = UTF8_FULL_STOP;
40036ffc: 39000065 strb w5, [x3] <== NOT EXECUTED
dest_name[1] = UTF8_FULL_STOP;
40037000: 39000465 strb w5, [x3, #1] <== NOT EXECUTED
if (returned_size == 0) {
40037004: 17fffff3 b 40036fd0 <msdos_filename_utf8_to_long_name_for_compare+0x80><== NOT EXECUTED
returned_size = (ssize_t)dest_size;
40037008: f9400bf3 ldr x19, [sp, #16]
4003700c: f94017e0 ldr x0, [sp, #40]
}
40037010: a8c37bfd ldp x29, x30, [sp], #48
40037014: d65f03c0 ret
if (dest_size >= UTF8_FULL_STOP_SIZE) {
40037018: b40000a4 cbz x4, 4003702c <msdos_filename_utf8_to_long_name_for_compare+0xdc><== NOT EXECUTED
dest_name[0] = UTF8_FULL_STOP;
4003701c: 39000065 strb w5, [x3] <== NOT EXECUTED
returned_size = UTF8_FULL_STOP_SIZE;
40037020: aa0203e0 mov x0, x2 <== NOT EXECUTED
}
40037024: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED
40037028: d65f03c0 ret <== NOT EXECUTED
errno = eno;
4003702c: 94000e50 bl 4003a96c <__errno> <== NOT EXECUTED
40037030: aa0003e1 mov x1, x0 <== NOT EXECUTED
40037034: 52800b62 mov w2, #0x5b // #91 <== NOT EXECUTED
40037038: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4003703c: b9000022 str w2, [x1] <== NOT EXECUTED
if (returned_size == 0) {
40037040: 17ffffe4 b 40036fd0 <msdos_filename_utf8_to_long_name_for_compare+0x80><== NOT EXECUTED
...
0000000040037050 <msdos_filename_utf8_to_long_name_for_save>:
rtems_dosfs_convert_control *converter,
const uint8_t *utf8_name,
const size_t utf8_name_size,
uint16_t *long_name,
const size_t long_name_size)
{
40037050: a9bc7bfd stp x29, x30, [sp, #-64]!
40037054: aa0203e5 mov x5, x2
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
40037058: f100005f cmp x2, #0x0
{
4003705c: 910003fd mov x29, sp
40037060: a90153f3 stp x19, x20, [sp, #16]
40037064: aa0303f3 mov x19, x3
40037068: f90013f5 str x21, [sp, #32]
4003706c: aa0403f5 mov x21, x4
size_t name_size_tmp;
int i;
uint16_t c;
unsigned int chars_written;
name_size_tmp = long_name_size;
40037070: f9001fe4 str x4, [sp, #56]
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
40037074: 5400008c b.gt 40037084 <msdos_filename_utf8_to_long_name_for_save+0x34><== ALWAYS TAKEN
40037078: 14000047 b 40037194 <msdos_filename_utf8_to_long_name_for_save+0x144><== NOT EXECUTED
4003707c: f10004a5 subs x5, x5, #0x1
40037080: 54000d00 b.eq 40037220 <msdos_filename_utf8_to_long_name_for_save+0x1d0> // b.none<== NEVER TAKEN
&& filename_utf8[i] == UTF8_FULL_STOP;) {
40037084: 510004a2 sub w2, w5, #0x1
40037088: 38624822 ldrb w2, [x1, w2, uxtw]
4003708c: 7100b85f cmp w2, #0x2e
40037090: 54ffff60 b.eq 4003707c <msdos_filename_utf8_to_long_name_for_save+0x2c> // b.none
name_size = msdos_filename_delete_trailing_dots (
40037094: aa0503e2 mov x2, x5
utf8_name_size);
if (name_size > 0) {
/*
* Finally convert from UTF-8 to UTF-16
*/
eno = (*converter->handler->utf8_to_utf16) (
40037098: 9100e3e4 add x4, sp, #0x38
4003709c: f9400005 ldr x5, [x0]
400370a0: aa1303e3 mov x3, x19
400370a4: f94008a5 ldr x5, [x5, #16]
400370a8: d63f00a0 blr x5
400370ac: 2a0003f4 mov w20, w0
converter,
utf8_name,
name_size,
&long_name[0],
&name_size_tmp);
if (eno == 0) {
400370b0: 350008a0 cbnz w0, 400371c4 <msdos_filename_utf8_to_long_name_for_save+0x174><== NEVER TAKEN
if (name_size_tmp <= (MSDOS_NAME_MAX_LNF_LEN * MSDOS_NAME_LFN_BYTES_PER_CHAR))
400370b4: f9401fe3 ldr x3, [sp, #56]
400370b8: f107f87f cmp x3, #0x1fe
400370bc: 54000828 b.hi 400371c0 <msdos_filename_utf8_to_long_name_for_save+0x170> // b.pmore
ssize_t returned_size = 0;
400370c0: d2800000 mov x0, #0x0 // #0
if ( eno == 0 )
{
/*
* Validate the characters and assign them to the UTF-16 file name
*/
for ( i = 0;
400370c4: b4000a83 cbz x3, 40037214 <msdos_filename_utf8_to_long_name_for_save+0x1c4><== NEVER TAKEN
400370c8: d2800027 mov x7, #0x1 // #1
400370cc: f2a80007 movk x7, #0x4000, lsl #16
400370d0: d2cb0006 mov x6, #0x580000000000 // #96757023244288
retval = codepage_valid_char_map[char_num];
400370d4: d0000088 adrp x8, 40049000 <IMFS_node_control_sym_link+0xe0>
400370d8: 91178108 add x8, x8, #0x5e0
400370dc: f2dffe27 movk x7, #0xfff1, lsl #32
400370e0: f2e7ffe7 movk x7, #0x3fff, lsl #48
400370e4: d2800024 mov x4, #0x1 // #1
400370e8: f2e10006 movk x6, #0x800, lsl #48
400370ec: 1400000f b 40037128 <msdos_filename_utf8_to_long_name_for_save+0xd8>
switch ( char_num )
400370f0: 5100f422 sub w2, w1, #0x3d
400370f4: 12003c42 and w2, w2, #0xffff
400370f8: 7100f45f cmp w2, #0x3d
400370fc: 54000088 b.hi 4003710c <msdos_filename_utf8_to_long_name_for_save+0xbc> // b.pmore
40037100: 9ac22082 lsl x2, x4, x2
40037104: ea07005f tst x2, x7
40037108: 54000081 b.ne 40037118 <msdos_filename_utf8_to_long_name_for_save+0xc8> // b.any
retval = codepage_valid_char_map[char_num];
4003710c: 3861c901 ldrb w1, [x8, w1, sxtw]
name_size
&& (c = msdos_get_valid_utf16_filename_character ( long_name[i]) );
40037110: 72003c21 ands w1, w1, #0xffff
40037114: 54000260 b.eq 40037160 <msdos_filename_utf8_to_long_name_for_save+0x110> // b.none
++i ) {
long_name[i] = c;
40037118: 78206a61 strh w1, [x19, x0]
for ( i = 0;
4003711c: f1000863 subs x3, x3, #0x2
returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR;
40037120: 91000800 add x0, x0, #0x2
for ( i = 0;
40037124: 54000260 b.eq 40037170 <msdos_filename_utf8_to_long_name_for_save+0x120> // b.none
&& (c = msdos_get_valid_utf16_filename_character ( long_name[i]) );
40037128: 78606a61 ldrh w1, [x19, x0]
if ( char_num <= 0x00ff ) {
4003712c: 8b000265 add x5, x19, x0
40037130: 7103fc3f cmp w1, #0xff
40037134: 54ffff28 b.hi 40037118 <msdos_filename_utf8_to_long_name_for_save+0xc8> // b.pmore
switch ( char_num )
40037138: 7100ec3f cmp w1, #0x3b
4003713c: 54fffda8 b.hi 400370f0 <msdos_filename_utf8_to_long_name_for_save+0xa0> // b.pmore
40037140: 7100a83f cmp w1, #0x2a
40037144: 54fffe49 b.ls 4003710c <msdos_filename_utf8_to_long_name_for_save+0xbc> // b.plast
40037148: 9ac12082 lsl x2, x4, x1
4003714c: ea06005f tst x2, x6
40037150: 54fffe41 b.ne 40037118 <msdos_filename_utf8_to_long_name_for_save+0xc8> // b.any
retval = codepage_valid_char_map[char_num];
40037154: 3861c901 ldrb w1, [x8, w1, sxtw]
&& (c = msdos_get_valid_utf16_filename_character ( long_name[i]) );
40037158: 72003c21 ands w1, w1, #0xffff
4003715c: 54fffde1 b.ne 40037118 <msdos_filename_utf8_to_long_name_for_save+0xc8> // b.any
name_size -= MSDOS_NAME_LFN_BYTES_PER_CHAR;
}
if ( name_size == UTF16_NULL_SIZE && c == UTF16_NULL ) {
40037160: f100087f cmp x3, #0x2
40037164: 540003a1 b.ne 400371d8 <msdos_filename_utf8_to_long_name_for_save+0x188> // b.any<== ALWAYS TAKEN
long_name[i] = c;
returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR;
40037168: 91000800 add x0, x0, #0x2 <== NOT EXECUTED
long_name[i] = c;
4003716c: 790000bf strh wzr, [x5] <== NOT EXECUTED
}
else if ( name_size != 0 )
eno = EINVAL;
chars_written = returned_size / MSDOS_NAME_LFN_BYTES_PER_CHAR;
40037170: 9341fc02 asr x2, x0, #1
if ( long_name [chars_written - 1] != UTF16_NULL
40037174: 51000441 sub w1, w2, #0x1
40037178: 8b010021 add x1, x1, x1
4003717c: 78616a61 ldrh w1, [x19, x1]
40037180: 35000401 cbnz w1, 40037200 <msdos_filename_utf8_to_long_name_for_save+0x1b0><== ALWAYS TAKEN
errno = eno;
returned_size = -1;
}
return returned_size;
}
40037184: a94153f3 ldp x19, x20, [sp, #16]
40037188: f94013f5 ldr x21, [sp, #32]
4003718c: a8c47bfd ldp x29, x30, [sp], #64
40037190: d65f03c0 ret
if (name_size > 0) {
40037194: 54000460 b.eq 40037220 <msdos_filename_utf8_to_long_name_for_save+0x1d0> // b.none<== NOT EXECUTED
eno = (*converter->handler->utf8_to_utf16) (
40037198: f9400005 ldr x5, [x0] <== NOT EXECUTED
4003719c: 9100e3e4 add x4, sp, #0x38 <== NOT EXECUTED
400371a0: aa1303e3 mov x3, x19 <== NOT EXECUTED
400371a4: f94008a5 ldr x5, [x5, #16] <== NOT EXECUTED
400371a8: d63f00a0 blr x5 <== NOT EXECUTED
400371ac: 2a0003f4 mov w20, w0 <== NOT EXECUTED
if (eno == 0) {
400371b0: 350000a0 cbnz w0, 400371c4 <msdos_filename_utf8_to_long_name_for_save+0x174><== NOT EXECUTED
if (name_size_tmp <= (MSDOS_NAME_MAX_LNF_LEN * MSDOS_NAME_LFN_BYTES_PER_CHAR))
400371b4: f9401fe3 ldr x3, [sp, #56] <== NOT EXECUTED
400371b8: f107f87f cmp x3, #0x1fe <== NOT EXECUTED
400371bc: 54fff829 b.ls 400370c0 <msdos_filename_utf8_to_long_name_for_save+0x70> // b.plast<== NOT EXECUTED
eno = ENAMETOOLONG;
400371c0: 52800b74 mov w20, #0x5b // #91
errno = eno;
400371c4: 94000dea bl 4003a96c <__errno>
400371c8: aa0003e1 mov x1, x0
returned_size = -1;
400371cc: 92800000 mov x0, #0xffffffffffffffff // #-1
errno = eno;
400371d0: b9000034 str w20, [x1]
return returned_size;
400371d4: 17ffffec b 40037184 <msdos_filename_utf8_to_long_name_for_save+0x134>
chars_written = returned_size / MSDOS_NAME_LFN_BYTES_PER_CHAR;
400371d8: 9341fc01 asr x1, x0, #1
if ( long_name [chars_written - 1] != UTF16_NULL
400371dc: 51000422 sub w2, w1, #0x1
400371e0: 78627a62 ldrh w2, [x19, x2, lsl #1]
400371e4: 340001e2 cbz w2, 40037220 <msdos_filename_utf8_to_long_name_for_save+0x1d0><== NEVER TAKEN
&& (returned_size + UTF16_NULL_SIZE ) <= long_name_size ) {
400371e8: 91000800 add x0, x0, #0x2
400371ec: eb15001f cmp x0, x21
400371f0: 54000188 b.hi 40037220 <msdos_filename_utf8_to_long_name_for_save+0x1d0> // b.pmore<== NEVER TAKEN
eno = EINVAL;
400371f4: 528002d4 mov w20, #0x16 // #22
long_name[chars_written] = UTF16_NULL;
400371f8: 78217a7f strh wzr, [x19, x1, lsl #1]
if ( eno != 0 ) {
400371fc: 17fffff2 b 400371c4 <msdos_filename_utf8_to_long_name_for_save+0x174>
&& (returned_size + UTF16_NULL_SIZE ) <= long_name_size ) {
40037200: 91000801 add x1, x0, #0x2
40037204: eb15003f cmp x1, x21
40037208: 54fffbe8 b.hi 40037184 <msdos_filename_utf8_to_long_name_for_save+0x134> // b.pmore<== NEVER TAKEN
long_name[chars_written] = UTF16_NULL;
4003720c: 78227a7f strh wzr, [x19, x2, lsl #1]
if ( eno != 0 ) {
40037210: 17ffffdd b 40037184 <msdos_filename_utf8_to_long_name_for_save+0x134>
for ( i = 0;
40037214: b27f7fe1 mov x1, #0x1fffffffe // #8589934590 <== NOT EXECUTED
40037218: d2800002 mov x2, #0x0 // #0 <== NOT EXECUTED
4003721c: 17ffffd8 b 4003717c <msdos_filename_utf8_to_long_name_for_save+0x12c><== NOT EXECUTED
eno = EINVAL;
40037220: 528002d4 mov w20, #0x16 // #22 <== NOT EXECUTED
40037224: 17ffffe8 b 400371c4 <msdos_filename_utf8_to_long_name_for_save+0x174><== NOT EXECUTED
...
0000000040037230 <msdos_filename_utf8_to_short_name_for_compare>:
rtems_dosfs_convert_control *converter,
const uint8_t *utf8_name,
const size_t utf8_name_size,
void *short_name,
const size_t short_name_size)
{
40037230: a9b97bfd stp x29, x30, [sp, #-112]!
int eno = 0;
const uint8_t *name_ptr = utf8_name;
char *dest_ptr = (char*)short_name;
size_t name_size = utf8_name_size;
uint8_t name_normalized_buf[(MSDOS_SHORT_NAME_LEN +1) * MSDOS_NAME_MAX_UTF8_BYTES_PER_CHAR];
size_t name_size_tmp = sizeof(name_normalized_buf);
40037234: d2800605 mov x5, #0x30 // #48
{
40037238: 910003fd mov x29, sp
4003723c: a90153f3 stp x19, x20, [sp, #16]
40037240: aa0303f4 mov x20, x3
40037244: f90013f5 str x21, [sp, #32]
size_t name_size_tmp = sizeof(name_normalized_buf);
40037248: f9001fe5 str x5, [sp, #56]
if ( src_name[0] == UTF8_FULL_STOP
4003724c: 39400025 ldrb w5, [x1]
40037250: 7100b8bf cmp w5, #0x2e
40037254: 540003c0 b.eq 400372cc <msdos_filename_utf8_to_short_name_for_compare+0x9c> // b.none
while ( *name_size >= UTF8_FULL_STOP_SIZE
40037258: b5000142 cbnz x2, 40037280 <msdos_filename_utf8_to_short_name_for_compare+0x50><== ALWAYS TAKEN
if ( eno == 0 ) {
memcpy (&dest_ptr[0], &name_ptr[0], name_size);
returned_size = name_size;
}
} else
eno = EINVAL;
4003725c: 528002d5 mov w21, #0x16 // #22 <== NOT EXECUTED
}
if ( eno != 0 ) {
errno = eno;
40037260: 94000dc3 bl 4003a96c <__errno> <== NOT EXECUTED
40037264: aa0003e1 mov x1, x0 <== NOT EXECUTED
returned_size = -1;
40037268: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
errno = eno;
4003726c: b9000035 str w21, [x1] <== NOT EXECUTED
}
return returned_size;
}
40037270: a94153f3 ldp x19, x20, [sp, #16]
40037274: f94013f5 ldr x21, [sp, #32]
40037278: a8c77bfd ldp x29, x30, [sp], #112
4003727c: d65f03c0 ret
eno = (*converter->handler->utf8_normalize_and_fold) (
40037280: f9400004 ldr x4, [x0]
40037284: 910103e3 add x3, sp, #0x40
40037288: f9401085 ldr x5, [x4, #32]
4003728c: 9100e3e4 add x4, sp, #0x38
40037290: d63f00a0 blr x5
40037294: 2a0003f5 mov w21, w0
if ( eno == ENOMEM ) {
40037298: 7100301f cmp w0, #0xc
name_size = name_size_tmp;
4003729c: f9401ff3 ldr x19, [sp, #56]
if ( eno == ENOMEM ) {
400372a0: 54000040 b.eq 400372a8 <msdos_filename_utf8_to_short_name_for_compare+0x78> // b.none<== NEVER TAKEN
if ( eno == 0 ) {
400372a4: 35fffdf5 cbnz w21, 40037260 <msdos_filename_utf8_to_short_name_for_compare+0x30><== NEVER TAKEN
memcpy (&dest_ptr[0], &name_ptr[0], name_size);
400372a8: 910103e1 add x1, sp, #0x40
400372ac: aa1303e2 mov x2, x19
400372b0: aa1403e0 mov x0, x20
400372b4: 94001051 bl 4003b3f8 <memcpy>
returned_size = name_size;
400372b8: aa1303e0 mov x0, x19
}
400372bc: a94153f3 ldp x19, x20, [sp, #16]
400372c0: f94013f5 ldr x21, [sp, #32]
400372c4: a8c77bfd ldp x29, x30, [sp], #112
400372c8: d65f03c0 ret
&& src_size == UTF8_FULL_STOP_SIZE) {
400372cc: f100045f cmp x2, #0x1
400372d0: 540001c0 b.eq 40037308 <msdos_filename_utf8_to_short_name_for_compare+0xd8> // b.none
&& src_size == ( 2 * UTF8_FULL_STOP_SIZE ) ) {
400372d4: 39400423 ldrb w3, [x1, #1]
400372d8: 7100b87f cmp w3, #0x2e
400372dc: fa420840 ccmp x2, #0x2, #0x0, eq // eq = none
400372e0: 54000220 b.eq 40037324 <msdos_filename_utf8_to_short_name_for_compare+0xf4> // b.none<== ALWAYS TAKEN
while ( *name_size >= UTF8_FULL_STOP_SIZE
400372e4: b50000a2 cbnz x2, 400372f8 <msdos_filename_utf8_to_short_name_for_compare+0xc8><== NOT EXECUTED
400372e8: 17ffffdd b 4003725c <msdos_filename_utf8_to_short_name_for_compare+0x2c><== NOT EXECUTED
&& **name_utf8 == UTF8_FULL_STOP) {
400372ec: 39400024 ldrb w4, [x1] <== NOT EXECUTED
400372f0: 7100b89f cmp w4, #0x2e <== NOT EXECUTED
400372f4: 54fffc61 b.ne 40037280 <msdos_filename_utf8_to_short_name_for_compare+0x50> // b.any<== NOT EXECUTED
*name_utf8 += UTF8_FULL_STOP_SIZE;
400372f8: 91000421 add x1, x1, #0x1 <== NOT EXECUTED
while ( *name_size >= UTF8_FULL_STOP_SIZE
400372fc: f1000442 subs x2, x2, #0x1 <== NOT EXECUTED
40037300: 54ffff61 b.ne 400372ec <msdos_filename_utf8_to_short_name_for_compare+0xbc> // b.any<== NOT EXECUTED
40037304: 17ffffd6 b 4003725c <msdos_filename_utf8_to_short_name_for_compare+0x2c><== NOT EXECUTED
if (dest_size >= UTF8_FULL_STOP_SIZE) {
40037308: b40001a4 cbz x4, 4003733c <msdos_filename_utf8_to_short_name_for_compare+0x10c><== NEVER TAKEN
dest_name[0] = UTF8_FULL_STOP;
4003730c: 39000065 strb w5, [x3]
returned_size = UTF8_FULL_STOP_SIZE;
40037310: aa0203e0 mov x0, x2
}
40037314: a94153f3 ldp x19, x20, [sp, #16]
40037318: f94013f5 ldr x21, [sp, #32]
4003731c: a8c77bfd ldp x29, x30, [sp], #112
40037320: d65f03c0 ret
if (dest_size >= 2 * UTF8_FULL_STOP_SIZE) {
40037324: f100049f cmp x4, #0x1
40037328: 540000a9 b.ls 4003733c <msdos_filename_utf8_to_short_name_for_compare+0x10c> // b.plast<== NEVER TAKEN
returned_size = 2 * UTF8_FULL_STOP_SIZE;
4003732c: d2800040 mov x0, #0x2 // #2
dest_name[0] = UTF8_FULL_STOP;
40037330: 39000285 strb w5, [x20]
dest_name[1] = UTF8_FULL_STOP;
40037334: 39000685 strb w5, [x20, #1]
if (returned_size == 0) {
40037338: 17ffffce b 40037270 <msdos_filename_utf8_to_short_name_for_compare+0x40>
errno = eno;
4003733c: 94000d8c bl 4003a96c <__errno> <== NOT EXECUTED
40037340: aa0003e1 mov x1, x0 <== NOT EXECUTED
40037344: 52800b62 mov w2, #0x5b // #91 <== NOT EXECUTED
40037348: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
4003734c: b9000022 str w2, [x1] <== NOT EXECUTED
if (returned_size == 0) {
40037350: 17ffffc8 b 40037270 <msdos_filename_utf8_to_short_name_for_compare+0x40><== NOT EXECUTED
...
0000000040037360 <msdos_filename_utf8_to_short_name_for_save>:
rtems_dosfs_convert_control *converter,
const uint8_t *utf8_name,
const size_t utf8_name_size,
void *short_name,
const size_t short_name_size)
{
40037360: a9ba7bfd stp x29, x30, [sp, #-96]!
40037364: 910003fd mov x29, sp
40037368: a9025bf5 stp x21, x22, [sp, #32]
4003736c: aa0303f5 mov x21, x3
40037370: aa0403f6 mov x22, x4
if ( src_name[0] == UTF8_FULL_STOP
40037374: 39400025 ldrb w5, [x1]
40037378: 7100b8bf cmp w5, #0x2e
4003737c: 54000ec0 b.eq 40037554 <msdos_filename_utf8_to_short_name_for_save+0x1f4> // b.none<== NEVER TAKEN
while ( *name_size >= UTF8_FULL_STOP_SIZE
40037380: b5000122 cbnz x2, 400373a4 <msdos_filename_utf8_to_short_name_for_save+0x44><== ALWAYS TAKEN
else
eno = EINVAL;
}
if ( eno != 0 ) {
errno = eno;
40037384: 94000d7a bl 4003a96c <__errno> <== NOT EXECUTED
40037388: aa0003e1 mov x1, x0 <== NOT EXECUTED
4003738c: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED
return -1;
40037390: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
errno = eno;
40037394: b9000022 str w2, [x1] <== NOT EXECUTED
}
return returned_size;
}
40037398: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
4003739c: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
400373a0: d65f03c0 ret <== NOT EXECUTED
eno = (*converter->handler->utf8_to_codepage) (
400373a4: f9400003 ldr x3, [x0]
name_size_tmp = sizeof ( name_to_format_buf );
400373a8: d2800184 mov x4, #0xc // #12
eno = (*converter->handler->utf8_to_codepage) (
400373ac: f9400065 ldr x5, [x3]
name_size_tmp = sizeof ( name_to_format_buf );
400373b0: f90027e4 str x4, [sp, #72]
eno = (*converter->handler->utf8_to_codepage) (
400373b4: 910143e3 add x3, sp, #0x50
400373b8: 910123e4 add x4, sp, #0x48
400373bc: d63f00a0 blr x5
name_size = name_size_tmp;
400373c0: f94027e1 ldr x1, [sp, #72]
returned_size = msdos_filename_process_dot_names (
400373c4: d2800000 mov x0, #0x0 // #0
for (i = 0; i < name_size; ++i)
400373c8: b4fffe81 cbz x1, 40037398 <msdos_filename_utf8_to_short_name_for_save+0x38><== NEVER TAKEN
400373cc: 910143e2 add x2, sp, #0x50
400373d0: f0000084 adrp x4, 4004a000 <fatal_source_text+0x558>
400373d4: 91322484 add x4, x4, #0xc89
400373d8: 8b010047 add x7, x2, x1
400373dc: a90153f3 stp x19, x20, [sp, #16]
400373e0: a90363f7 stp x23, x24, [sp, #48]
400373e4: d503201f nop
name_to_format_buf[i] = toupper ( (unsigned char)(name_to_format_buf[i]) );
400373e8: 39400040 ldrb w0, [x2]
400373ec: 92401c03 and x3, x0, #0xff
400373f0: 51008005 sub w5, w0, #0x20
400373f4: 12001ca5 and w5, w5, #0xff
400373f8: 38636886 ldrb w6, [x4, x3]
400373fc: 120004c6 and w6, w6, #0x3
40037400: 710008df cmp w6, #0x2
40037404: 1a8000a0 csel w0, w5, w0, eq // eq = none
40037408: 38001440 strb w0, [x2], #1
for (i = 0; i < name_size; ++i)
4003740c: eb07005f cmp x2, x7
40037410: 54fffec1 b.ne 400373e8 <msdos_filename_utf8_to_short_name_for_save+0x88> // b.any
if ( 0x20 == *name_ptr )
40037414: 394143e0 ldrb w0, [sp, #80]
40037418: 7100801f cmp w0, #0x20
4003741c: 54000c40 b.eq 400375a4 <msdos_filename_utf8_to_short_name_for_save+0x244> // b.none
else if ( 0xE5 == *name_ptr )
40037420: 7103941f cmp w0, #0xe5
40037424: 54000e80 b.eq 400375f4 <msdos_filename_utf8_to_short_name_for_save+0x294> // b.none<== NEVER TAKEN
char c = codepage_valid_char_map[character];
40037428: d0000082 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0>
4003742c: 91178042 add x2, x2, #0x5e0
c = '_';
40037430: 52800be3 mov w3, #0x5f // #95
char c = codepage_valid_char_map[character];
40037434: 3860c840 ldrb w0, [x2, w0, sxtw]
c = '_';
40037438: 7100001f cmp w0, #0x0
4003743c: 1a831000 csel w0, w0, w3, ne // ne = any
dest_ptr[0] = msdos_get_valid_codepage_filename_character(*name_ptr);
40037440: 390002a0 strb w0, [x21]
char c = codepage_valid_char_map[character];
40037444: d0000083 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0>
40037448: 91178063 add x3, x3, #0x5e0
++returned_size;
4003744c: d2800034 mov x20, #0x1 // #1
--name_size;
40037450: d1000433 sub x19, x1, #0x1
++name_ptr;
40037454: 910147f7 add x23, sp, #0x51
40037458: 2a1403f8 mov w24, w20
c = '_';
4003745c: 52800be4 mov w4, #0x5f // #95
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
40037460: b4000233 cbz x19, 400374a4 <msdos_filename_utf8_to_short_name_for_save+0x144>
40037464: 394002e0 ldrb w0, [x23]
++name_ptr;
40037468: 910006e2 add x2, x23, #0x1
--name_size;
4003746c: d1000661 sub x1, x19, #0x1
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
40037470: 7100b81f cmp w0, #0x2e
40037474: 54000de0 b.eq 40037630 <msdos_filename_utf8_to_short_name_for_save+0x2d0> // b.none
char c = codepage_valid_char_map[character];
40037478: 3860c860 ldrb w0, [x3, w0, sxtw]
c = '_';
4003747c: 7100001f cmp w0, #0x0
40037480: 1a841000 csel w0, w0, w4, ne // ne = any
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
40037484: 38346aa0 strb w0, [x21, x20]
++returned_size;
40037488: 91000694 add x20, x20, #0x1
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4003748c: f100229f cmp x20, #0x8
40037490: 54000900 b.eq 400375b0 <msdos_filename_utf8_to_short_name_for_save+0x250> // b.none
--name_size;
40037494: aa0103f3 mov x19, x1
++name_ptr;
40037498: aa0203f7 mov x23, x2
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
4003749c: 2a1403f8 mov w24, w20
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
400374a0: b5fffe33 cbnz x19, 40037464 <msdos_filename_utf8_to_short_name_for_save+0x104>
dest_ptr[i] = ' ';
400374a4: 8b1402a0 add x0, x21, x20
400374a8: 52800102 mov w2, #0x8 // #8
400374ac: 52800401 mov w1, #0x20 // #32
400374b0: 4b180042 sub w2, w2, w24
400374b4: 94000fec bl 4003b464 <memset>
400374b8: 91000694 add x20, x20, #0x1
400374bc: 528000e0 mov w0, #0x7 // #7
++returned_size;
400374c0: 4b180018 sub w24, w0, w24
400374c4: 8b140314 add x20, x24, x20
char c = codepage_valid_char_map[character];
400374c8: d0000084 adrp x4, 40049000 <IMFS_node_control_sym_link+0xe0>
400374cc: 91178084 add x4, x4, #0x5e0
400374d0: 91002261 add x1, x19, #0x8
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
400374d4: cb1402f7 sub x23, x23, x20
++returned_size;
400374d8: d2800100 mov x0, #0x8 // #8
c = '_';
400374dc: 52800be5 mov w5, #0x5f // #95
for (; i <= 10 && name_size ; i++) {
400374e0: eb00003f cmp x1, x0
400374e4: 2a0003e3 mov w3, w0
400374e8: 54000180 b.eq 40037518 <msdos_filename_utf8_to_short_name_for_save+0x1b8> // b.none
char c = codepage_valid_char_map[character];
400374ec: 38746ae2 ldrb w2, [x23, x20]
for (; i <= 10 && name_size ; i++) {
400374f0: 11000463 add w3, w3, #0x1
++returned_size;
400374f4: 91000694 add x20, x20, #0x1
char c = codepage_valid_char_map[character];
400374f8: 3862c882 ldrb w2, [x4, w2, sxtw]
c = '_';
400374fc: 7100005f cmp w2, #0x0
40037500: 1a851042 csel w2, w2, w5, ne // ne = any
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
40037504: 38206aa2 strb w2, [x21, x0]
for (; i <= 10 && name_size ; i++) {
40037508: 91000400 add x0, x0, #0x1
4003750c: 7100281f cmp w0, #0xa
40037510: 54fffe89 b.ls 400374e0 <msdos_filename_utf8_to_short_name_for_save+0x180> // b.plast
for ( ; i < short_name_size; ++i ) {
40037514: 2a0303e1 mov w1, w3
40037518: eb16003f cmp x1, x22
4003751c: aa1403e0 mov x0, x20
dest_ptr[i] = ' ';
40037520: 52800402 mov w2, #0x20 // #32
for ( ; i < short_name_size; ++i ) {
40037524: 540000e2 b.cs 40037540 <msdos_filename_utf8_to_short_name_for_save+0x1e0> // b.hs, b.nlast
++returned_size;
40037528: 91000400 add x0, x0, #0x1
dest_ptr[i] = ' ';
4003752c: 38216aa2 strb w2, [x21, x1]
for ( ; i < short_name_size; ++i ) {
40037530: 0b000061 add w1, w3, w0
40037534: 4b140021 sub w1, w1, w20
40037538: eb16003f cmp x1, x22
4003753c: 54ffff63 b.cc 40037528 <msdos_filename_utf8_to_short_name_for_save+0x1c8> // b.lo, b.ul, b.last
40037540: a94153f3 ldp x19, x20, [sp, #16]
}
40037544: a9425bf5 ldp x21, x22, [sp, #32]
40037548: a94363f7 ldp x23, x24, [sp, #48]
4003754c: a8c67bfd ldp x29, x30, [sp], #96
40037550: d65f03c0 ret
&& src_size == UTF8_FULL_STOP_SIZE) {
40037554: f100045f cmp x2, #0x1 <== NOT EXECUTED
40037558: 54000340 b.eq 400375c0 <msdos_filename_utf8_to_short_name_for_save+0x260> // b.none<== NOT EXECUTED
&& src_size == ( 2 * UTF8_FULL_STOP_SIZE ) ) {
4003755c: 39400423 ldrb w3, [x1, #1] <== NOT EXECUTED
40037560: 7100b87f cmp w3, #0x2e <== NOT EXECUTED
40037564: fa420840 ccmp x2, #0x2, #0x0, eq // eq = none <== NOT EXECUTED
40037568: 540004c0 b.eq 40037600 <msdos_filename_utf8_to_short_name_for_save+0x2a0> // b.none<== NOT EXECUTED
while ( *name_size >= UTF8_FULL_STOP_SIZE
4003756c: b50000a2 cbnz x2, 40037580 <msdos_filename_utf8_to_short_name_for_save+0x220><== NOT EXECUTED
40037570: 17ffff85 b 40037384 <msdos_filename_utf8_to_short_name_for_save+0x24><== NOT EXECUTED
&& **name_utf8 == UTF8_FULL_STOP) {
40037574: 39400023 ldrb w3, [x1] <== NOT EXECUTED
40037578: 7100b87f cmp w3, #0x2e <== NOT EXECUTED
4003757c: 54fff141 b.ne 400373a4 <msdos_filename_utf8_to_short_name_for_save+0x44> // b.any<== NOT EXECUTED
*name_utf8 += UTF8_FULL_STOP_SIZE;
40037580: 91000421 add x1, x1, #0x1 <== NOT EXECUTED
while ( *name_size >= UTF8_FULL_STOP_SIZE
40037584: f1000442 subs x2, x2, #0x1 <== NOT EXECUTED
40037588: 54ffff61 b.ne 40037574 <msdos_filename_utf8_to_short_name_for_save+0x214> // b.any<== NOT EXECUTED
errno = eno;
4003758c: 94000cf8 bl 4003a96c <__errno> <== NOT EXECUTED
40037590: aa0003e1 mov x1, x0 <== NOT EXECUTED
40037594: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED
return -1;
40037598: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
errno = eno;
4003759c: b9000022 str w2, [x1] <== NOT EXECUTED
return -1;
400375a0: 17ffff7e b 40037398 <msdos_filename_utf8_to_short_name_for_save+0x38><== NOT EXECUTED
dest_ptr[0] = '_';
400375a4: 52800be0 mov w0, #0x5f // #95
400375a8: 390002a0 strb w0, [x21]
400375ac: 17ffffa6 b 40037444 <msdos_filename_utf8_to_short_name_for_save+0xe4>
if ( name_size > 0 && *name_ptr == '.' ) {
400375b0: b5000141 cbnz x1, 400375d8 <msdos_filename_utf8_to_short_name_for_save+0x278>
400375b4: aa1403e1 mov x1, x20
400375b8: 2a1403e3 mov w3, w20
400375bc: 17ffffd7 b 40037518 <msdos_filename_utf8_to_short_name_for_save+0x1b8>
if (dest_size >= UTF8_FULL_STOP_SIZE) {
400375c0: b40002c4 cbz x4, 40037618 <msdos_filename_utf8_to_short_name_for_save+0x2b8><== NOT EXECUTED
dest_name[0] = UTF8_FULL_STOP;
400375c4: 39000065 strb w5, [x3] <== NOT EXECUTED
returned_size = UTF8_FULL_STOP_SIZE;
400375c8: aa0203e0 mov x0, x2 <== NOT EXECUTED
}
400375cc: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
400375d0: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
400375d4: d65f03c0 ret <== NOT EXECUTED
if ( name_size > 0 && *name_ptr == '.' ) {
400375d8: 39400040 ldrb w0, [x2]
++name_ptr;
400375dc: 91000af7 add x23, x23, #0x2
--name_size;
400375e0: d1000a73 sub x19, x19, #0x2
if ( name_size > 0 && *name_ptr == '.' ) {
400375e4: 7100b81f cmp w0, #0x2e
400375e8: 9a810273 csel x19, x19, x1, eq // eq = none
400375ec: 9a8202f7 csel x23, x23, x2, eq // eq = none
400375f0: 17ffffb6 b 400374c8 <msdos_filename_utf8_to_short_name_for_save+0x168>
dest_ptr[0] = 0x05;
400375f4: 528000a0 mov w0, #0x5 // #5 <== NOT EXECUTED
400375f8: 390002a0 strb w0, [x21] <== NOT EXECUTED
400375fc: 17ffff92 b 40037444 <msdos_filename_utf8_to_short_name_for_save+0xe4><== NOT EXECUTED
if (dest_size >= 2 * UTF8_FULL_STOP_SIZE) {
40037600: f100049f cmp x4, #0x1 <== NOT EXECUTED
40037604: 540000a9 b.ls 40037618 <msdos_filename_utf8_to_short_name_for_save+0x2b8> // b.plast<== NOT EXECUTED
returned_size = 2 * UTF8_FULL_STOP_SIZE;
40037608: d2800040 mov x0, #0x2 // #2 <== NOT EXECUTED
dest_name[0] = UTF8_FULL_STOP;
4003760c: 390002a5 strb w5, [x21] <== NOT EXECUTED
dest_name[1] = UTF8_FULL_STOP;
40037610: 390006a5 strb w5, [x21, #1] <== NOT EXECUTED
if (returned_size == 0) {
40037614: 17ffff61 b 40037398 <msdos_filename_utf8_to_short_name_for_save+0x38><== NOT EXECUTED
errno = eno;
40037618: 94000cd5 bl 4003a96c <__errno> <== NOT EXECUTED
4003761c: aa0003e1 mov x1, x0 <== NOT EXECUTED
40037620: 52800b62 mov w2, #0x5b // #91 <== NOT EXECUTED
40037624: 92800000 mov x0, #0xffffffffffffffff // #-1 <== NOT EXECUTED
40037628: b9000022 str w2, [x1] <== NOT EXECUTED
if (returned_size == 0) {
4003762c: 17ffff5b b 40037398 <msdos_filename_utf8_to_short_name_for_save+0x38><== NOT EXECUTED
++name_ptr;
40037630: 910006f7 add x23, x23, #0x1
--name_size;
40037634: d1000673 sub x19, x19, #0x1
40037638: 17ffff9b b 400374a4 <msdos_filename_utf8_to_short_name_for_save+0x144>
4003763c: 00000000 udf #0
0000000040032080 <msdos_find_name>:
{
40032080: a9b97bfd stp x29, x30, [sp, #-112]!
name_type = msdos_long_to_short (
40032084: 52800164 mov w4, #0xb // #11
{
40032088: 910003fd mov x29, sp
4003208c: a90153f3 stp x19, x20, [sp, #16]
40032090: aa0003f4 mov x20, x0
40032094: aa0103f3 mov x19, x1
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
40032098: f9401400 ldr x0, [x0, #40]
{
4003209c: a9025bf5 stp x21, x22, [sp, #32]
name_type = msdos_long_to_short (
400320a0: 910143e3 add x3, sp, #0x50
{
400320a4: 2a0203f5 mov w21, w2
fat_file_fd_t *fat_fd = NULL;
400320a8: f9001fff str xzr, [sp, #56]
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
400320ac: f9400816 ldr x22, [x0, #16]
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
400320b0: a9057fff stp xzr, xzr, [sp, #80]
400320b4: a9067fff stp xzr, xzr, [sp, #96]
name_type = msdos_long_to_short (
400320b8: f94086c0 ldr x0, [x22, #264]
400320bc: 97fff9d1 bl 40030800 <msdos_long_to_short>
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
400320c0: 2a0003e4 mov w4, w0
400320c4: aa1303e2 mov x2, x19
400320c8: 2a1503e3 mov w3, w21
400320cc: 910143e6 add x6, sp, #0x50
400320d0: aa1403e0 mov x0, x20
400320d4: 910103e5 add x5, sp, #0x40
400320d8: 52800001 mov w1, #0x0 // #0
400320dc: 97ffffb1 bl 40031fa0 <msdos_get_name_node>
400320e0: 2a0003f3 mov w19, w0
if (rc != RC_OK)
400320e4: 35000340 cbnz w0, 4003214c <msdos_find_name+0xcc>
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
400320e8: 39416fe0 ldrb w0, [sp, #91]
return MSDOS_NAME_NOT_FOUND_ERR;
400320ec: 528fa033 mov w19, #0x7d01 // #32001
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
400320f0: 371802e0 tbnz w0, #3, 4003214c <msdos_find_name+0xcc> <== NEVER TAKEN
400320f4: 12001400 and w0, w0, #0x3f
400320f8: 71003c1f cmp w0, #0xf
400320fc: 54000280 b.eq 4003214c <msdos_find_name+0xcc> // b.none <== NEVER TAKEN
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
40032100: 910103e1 add x1, sp, #0x40
40032104: 9100e3e2 add x2, sp, #0x38
40032108: aa1603e0 mov x0, x22
4003210c: 97fff3ad bl 4002efc0 <fat_file_open>
40032110: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40032114: 350001c0 cbnz w0, 4003214c <msdos_find_name+0xcc> <== NEVER TAKEN
fat_fd->dir_pos = dir_pos;
40032118: a94387e2 ldp x2, x1, [sp, #56]
4003211c: f94027e0 ldr x0, [sp, #72]
40032120: a9028041 stp x1, x0, [x2, #40]
if (fat_fd->links_num == 1)
40032124: b9401040 ldr w0, [x2, #16]
40032128: 7100041f cmp w0, #0x1
4003212c: 540001a0 b.eq 40032160 <msdos_find_name+0xe0> // b.none
rc = fat_file_close(&fs_info->fat, parent_loc->node_access);
40032130: f9400a81 ldr x1, [x20, #16]
40032134: aa1603e0 mov x0, x22
40032138: 97fff556 bl 4002f690 <fat_file_close>
4003213c: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40032140: 35000540 cbnz w0, 400321e8 <msdos_find_name+0x168> <== NEVER TAKEN
parent_loc->node_access = fat_fd;
40032144: f9401fe0 ldr x0, [sp, #56]
40032148: f9000a80 str x0, [x20, #16]
}
4003214c: 2a1303e0 mov w0, w19
40032150: a94153f3 ldp x19, x20, [sp, #16]
40032154: a9425bf5 ldp x21, x22, [sp, #32]
40032158: a8c77bfd ldp x29, x30, [sp], #112
4003215c: d65f03c0 ret
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(node_entry);
40032160: 7940d7e4 ldrh w4, [sp, #106]
40032164: 7940cbe3 ldrh w3, [sp, #100]
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40032168: 7940cfe1 ldrh w1, [sp, #102]
4003216c: 7940d3e0 ldrh w0, [sp, #104]
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(node_entry);
40032170: 2a034083 orr w3, w4, w3, lsl #16
40032174: b9002443 str w3, [x2, #36]
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40032178: 94001336 bl 40036e50 <msdos_date_dos2unix>
4003217c: 2a0003e2 mov w2, w0
40032180: f9401fe3 ldr x3, [sp, #56]
fat_fd->ctime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40032184: 7940bfe1 ldrh w1, [sp, #94]
40032188: 7940c3e0 ldrh w0, [sp, #96]
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
4003218c: f9002862 str x2, [x3, #80]
fat_fd->ctime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40032190: 94001330 bl 40036e50 <msdos_date_dos2unix>
40032194: 2a0003e0 mov w0, w0
40032198: f9401fe1 ldr x1, [sp, #56]
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
4003219c: 39416fe2 ldrb w2, [sp, #91]
fat_fd->ctime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
400321a0: f9002420 str x0, [x1, #72]
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
400321a4: 372002a2 tbnz w2, #4, 400321f8 <msdos_find_name+0x178>
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
400321a8: b9406fe0 ldr w0, [sp, #108]
fat_fd->fat_file_type = FAT_FILE;
400321ac: 929fff62 mov x2, #0xffffffffffff0004 // #-65532
400321b0: f2a00002 movk x2, #0x0, lsl #16
400321b4: f9000c22 str x2, [x1, #24]
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
400321b8: b9002020 str w0, [x1, #32]
fat_fd->map.disk_cln = fat_fd->cln;
400321bc: b9402422 ldr w2, [x1, #36]
400321c0: 2907883f stp wzr, w2, [x1, #60]
if ((fat_fd->fat_file_size != 0) &&
400321c4: 340000c0 cbz w0, 400321dc <msdos_find_name+0x15c>
400321c8: b9400ac3 ldr w3, [x22, #8]
400321cc: 6b00007f cmp w3, w0
400321d0: 54000063 b.cc 400321dc <msdos_find_name+0x15c> // b.lo, b.ul, b.last
fat_fd->map.last_cln = fat_fd->cln;
400321d4: b9004422 str w2, [x1, #68]
400321d8: 17ffffd6 b 40032130 <msdos_find_name+0xb0>
fat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
400321dc: 12800000 mov w0, #0xffffffff // #-1
400321e0: b9004420 str w0, [x1, #68]
400321e4: 17ffffd3 b 40032130 <msdos_find_name+0xb0>
fat_file_close(&fs_info->fat, fat_fd);
400321e8: f9401fe1 ldr x1, [sp, #56] <== NOT EXECUTED
400321ec: aa1603e0 mov x0, x22 <== NOT EXECUTED
400321f0: 97fff528 bl 4002f690 <fat_file_close> <== NOT EXECUTED
return rc;
400321f4: 17ffffd6 b 4003214c <msdos_find_name+0xcc> <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
400321f8: d2e00400 mov x0, #0x20000000000000 // #9007199254740992
400321fc: f9000c20 str x0, [x1, #24]
rc = fat_file_size(&fs_info->fat, fat_fd);
40032200: aa1603e0 mov x0, x22
40032204: 97fff6ef bl 4002fdc0 <fat_file_size>
40032208: 2a0003f3 mov w19, w0
fat_file_close(&fs_info->fat, fat_fd);
4003220c: f9401fe1 ldr x1, [sp, #56]
if (rc != RC_OK)
40032210: 35fffee0 cbnz w0, 400321ec <msdos_find_name+0x16c> <== NEVER TAKEN
if ((fat_fd->fat_file_size != 0) &&
40032214: b9402020 ldr w0, [x1, #32]
40032218: 17ffffe9 b 400321bc <msdos_find_name+0x13c>
4003221c: 00000000 udf #0
0000000040031170 <msdos_find_name_in_fat_file>:
const uint8_t *name_utf8,
int name_utf8_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry)
{
40031170: d106c3ff sub sp, sp, #0x1b0
unsigned int lfn_entries;
rtems_dosfs_convert_control *converter = fs_info->converter;
void *buffer = converter->buffer.data;
size_t buffer_size = converter->buffer.size;
assert(name_utf8_len > 0);
40031174: 7100009f cmp w4, #0x0
{
40031178: a9017bfd stp x29, x30, [sp, #16]
4003117c: 910043fd add x29, sp, #0x10
40031180: a90253f3 stp x19, x20, [sp, #32]
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40031184: f9400814 ldr x20, [x0, #16]
{
40031188: f90047e1 str x1, [sp, #136]
4003118c: a90d1fe3 stp x3, x7, [sp, #208]
rtems_dosfs_convert_control *converter = fs_info->converter;
40031190: f9408680 ldr x0, [x20, #264]
40031194: a90c03e6 stp x6, x0, [sp, #192]
{
40031198: b900f3e5 str w5, [sp, #240]
size_t buffer_size = converter->buffer.size;
4003119c: a9408001 ldp x1, x0, [x0, #8]
void *buffer = converter->buffer.data;
400311a0: f9005fe1 str x1, [sp, #184]
size_t buffer_size = converter->buffer.size;
400311a4: f90073e0 str x0, [sp, #224]
assert(name_utf8_len > 0);
400311a8: 54004f2d b.le 40031b8c <msdos_find_name_in_fat_file+0xa1c> <== NEVER TAKEN
400311ac: a90463f7 stp x23, x24, [sp, #64]
400311b0: 12001c58 and w24, w2, #0xff
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400311b4: 12800000 mov w0, #0xffffffff // #-1
dir_pos->sname.cln = 0;
400311b8: f94063e2 ldr x2, [sp, #192]
400311bc: a90673fb stp x27, x28, [sp, #96]
fat_dir_pos_init(dir_pos);
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
400311c0: f94047e1 ldr x1, [sp, #136]
dir_pos->sname.ofs = 0;
400311c4: 29007c5f stp wzr, wzr, [x2]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400311c8: b9000840 str w0, [x2, #8]
400311cc: f9401421 ldr x1, [x1, #40]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
400311d0: b9000c40 str w0, [x2, #12]
400311d4: f100043f cmp x1, #0x1
400311d8: 54000560 b.eq 40031284 <msdos_find_name_in_fat_file+0x114> // b.none
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
switch ( name_type ) {
400311dc: b940f3e0 ldr w0, [sp, #240]
bts2rd = fs_info->fat.vol.bpc;
400311e0: b9400a9b ldr w27, [x20, #8]
switch ( name_type ) {
400311e4: 7100041f cmp w0, #0x1
400311e8: 540005e0 b.eq 400312a4 <msdos_find_name_in_fat_file+0x134> // b.none
400311ec: 7100081f cmp w0, #0x2
400311f0: 54000180 b.eq 40031220 <msdos_find_name_in_fat_file+0xb0> // b.none
}
else
retval = -1;
break;
default:
errno = EINVAL;
400311f4: 940025de bl 4003a96c <__errno>
400311f8: aa0003e1 mov x1, x0
400311fc: 528002c2 mov w2, #0x16 // #22
40031200: 12800000 mov w0, #0xffffffff // #-1
40031204: b9000022 str w2, [x1]
empty_entry_count
);
}
return retval;
}
40031208: a9417bfd ldp x29, x30, [sp, #16]
4003120c: a94253f3 ldp x19, x20, [sp, #32]
40031210: a94463f7 ldp x23, x24, [sp, #64]
40031214: a94673fb ldp x27, x28, [sp, #96]
40031218: 9106c3ff add sp, sp, #0x1b0
4003121c: d65f03c0 ret
40031220: a9035bf5 stp x21, x22, [sp, #48]
name_len_for_save = msdos_filename_utf8_to_long_name_for_save (
40031224: 93407c93 sxtw x19, w4
40031228: aa1303e2 mov x2, x19
4003122c: a94cdff6 ldp x22, x23, [sp, #200]
40031230: a9056bf9 stp x25, x26, [sp, #80]
40031234: f9405ff9 ldr x25, [sp, #184]
40031238: f9007ff3 str x19, [sp, #248]
4003123c: f94073fa ldr x26, [sp, #224]
40031240: aa1903e3 mov x3, x25
40031244: aa1703e1 mov x1, x23
40031248: aa1603e0 mov x0, x22
4003124c: aa1a03e4 mov x4, x26
40031250: 94001780 bl 40037050 <msdos_filename_utf8_to_long_name_for_save>
40031254: aa0003f5 mov x21, x0
if (name_len_for_save > 0) {
40031258: f100001f cmp x0, #0x0
4003125c: 54000d6c b.gt 40031408 <msdos_find_name_in_fat_file+0x298>
40031260: a9435bf5 ldp x21, x22, [sp, #48]
40031264: a9456bf9 ldp x25, x26, [sp, #80]
entry = fs_info->cl_buf;
40031268: 12800000 mov w0, #0xffffffff // #-1
}
4003126c: a9417bfd ldp x29, x30, [sp, #16]
40031270: a94253f3 ldp x19, x20, [sp, #32]
40031274: a94463f7 ldp x23, x24, [sp, #64]
40031278: a94673fb ldp x27, x28, [sp, #96]
4003127c: 9106c3ff add sp, sp, #0x1b0
40031280: d65f03c0 ret
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40031284: 39405a80 ldrb w0, [x20, #22]
40031288: f240041f tst x0, #0x3
4003128c: 54fffa80 b.eq 400311dc <msdos_find_name_in_fat_file+0x6c> // b.none
bts2rd = fat_fd->fat_file_size;
40031290: f94047e0 ldr x0, [sp, #136]
40031294: b940201b ldr w27, [x0, #32]
switch ( name_type ) {
40031298: b940f3e0 ldr w0, [sp, #240]
4003129c: 7100041f cmp w0, #0x1
400312a0: 54fffa61 b.ne 400311ec <msdos_find_name_in_fat_file+0x7c> // b.any
name_len_for_compare = msdos_filename_utf8_to_short_name_for_compare (
400312a4: 93407c80 sxtw x0, w4
400312a8: f9007fe0 str x0, [sp, #248]
400312ac: aa0003e2 mov x2, x0
400312b0: d2800164 mov x4, #0xb // #11
400312b4: f9405fe3 ldr x3, [sp, #184]
400312b8: f94067e0 ldr x0, [sp, #200]
400312bc: f9406be1 ldr x1, [sp, #208]
400312c0: 940017dc bl 40037230 <msdos_filename_utf8_to_short_name_for_compare>
lfn_entries = 0;
400312c4: b90093ff str wzr, [sp, #144]
name_len_for_compare = msdos_filename_utf8_to_short_name_for_compare (
400312c8: aa0003f3 mov x19, x0
if (name_len_for_compare > 0) {
400312cc: f100001f cmp x0, #0x0
400312d0: 54fffccd b.le 40031268 <msdos_find_name_in_fat_file+0xf8> <== NEVER TAKEN
400312d4: a9035bf5 stp x21, x22, [sp, #48]
400312d8: a9056bf9 stp x25, x26, [sp, #80]
uint32_t entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400312dc: 53057f61 lsr w1, w27, #5
lfn_start->cln = FAT_FILE_SHORT_NAME;
400312e0: 12800000 mov w0, #0xffffffff // #-1
400312e4: f9003ff4 str x20, [sp, #120]
uint32_t entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400312e8: b900f7e1 str w1, [sp, #244]
assert(bytes_read == bts2rd);
400312ec: 2a1b03e1 mov w1, w27
lfn_start->cln = FAT_FILE_SHORT_NAME;
400312f0: b90113e0 str w0, [sp, #272]
int lfn_entry = 0;
400312f4: 52800002 mov w2, #0x0 // #0
rtems_dosfs_convert_control *converter = fs_info->converter;
400312f8: f9408680 ldr x0, [x20, #264]
assert(bytes_read == bts2rd);
400312fc: a90a87e0 stp x0, x1, [sp, #168]
bool empty_space_found = false;
40031300: 52800015 mov w21, #0x0 // #0
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40031304: f9403fe0 ldr x0, [sp, #120]
40031308: aa1303f9 mov x25, x19
4003130c: f94047e1 ldr x1, [sp, #136]
40031310: 2a1503f6 mov w22, w21
40031314: f9408284 ldr x4, [x20, #256]
40031318: 2a1b03e3 mov w3, w27
4003131c: 2a1803f4 mov w20, w24
uint32_t empty_entry_count = 0;
40031320: 5280001c mov w28, #0x0 // #0
40031324: aa1303f8 mov x24, x19
uint32_t empty_file_offset = 0;
40031328: 5280001a mov w26, #0x0 // #0
4003132c: 2a0203f3 mov w19, w2
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40031330: 2a1503e2 mov w2, w21
uint32_t dir_offset = 0;
40031334: b90083ff str wzr, [sp, #128]
uint8_t lfn_checksum = 0;
40031338: b9009fff str wzr, [sp, #156]
*entry_matched = false;
4003133c: 39043fff strb wzr, [sp, #271]
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40031340: 97fff800 bl 4002f340 <fat_file_read>
&& rc == RC_OK)
40031344: b4001240 cbz x0, 4003158c <msdos_find_name_in_fat_file+0x41c> <== NEVER TAKEN
if (bytes_read < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40031348: f1007c1f cmp x0, #0x1f
4003134c: 5400288d b.le 4003185c <msdos_find_name_in_fat_file+0x6ec> <== NEVER TAKEN
assert(bytes_read == bts2rd);
40031350: f9405be1 ldr x1, [sp, #176]
40031354: eb01001f cmp x0, x1
40031358: 540040a1 b.ne 40031b6c <msdos_find_name_in_fat_file+0x9fc> // b.any<== NEVER TAKEN
dir_entry < bts2rd && rc == RC_OK && (! filename_matched);
4003135c: f9403fe0 ldr x0, [sp, #120]
40031360: f9408004 ldr x4, [x0, #256]
for (dir_entry = 0;
40031364: 3400101b cbz w27, 40031564 <msdos_find_name_in_fat_file+0x3f4> <== NEVER TAKEN
lfn_start->cln = FAT_FILE_SHORT_NAME;
40031368: aa1903e5 mov x5, x25
for (dir_entry = 0;
4003136c: 52800017 mov w23, #0x0 // #0
lfn_start->cln = FAT_FILE_SHORT_NAME;
40031370: aa1803f9 mov x25, x24
40031374: 1280000b mov w11, #0xffffffff // #-1
40031378: 2a1503f8 mov w24, w21
4003137c: 14000014 b 400313cc <msdos_find_name_in_fat_file+0x25c>
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
40031380: 39402ea3 ldrb w3, [x21, #11]
if (create_node && !empty_space_found)
40031384: 520002c1 eor w1, w22, #0x1
40031388: 6a010281 ands w1, w20, w1
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
4003138c: 12001460 and w0, w3, #0x3f
*empty_entry_count = 0;
40031390: 1a9f035a csel w26, w26, wzr, eq // eq = none
40031394: 1a9f039c csel w28, w28, wzr, eq // eq = none
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
40031398: 71003c1f cmp w0, #0xf
4003139c: 540005a0 b.eq 40031450 <msdos_find_name_in_fat_file+0x2e0> // b.none
if (entry_matched)
400313a0: 39443fe0 ldrb w0, [sp, #271]
400313a4: 340006c0 cbz w0, 4003147c <msdos_find_name_in_fat_file+0x30c>
if (lfn_entry ||
400313a8: f10000bf cmp x5, #0x0
400313ac: 7a40da60 ccmp w19, #0x0, #0x0, le
400313b0: 54001bc0 b.eq 40031728 <msdos_find_name_in_fat_file+0x5b8> // b.none
}
400313b4: aa1903e5 mov x5, x25
*entry_matched = false;
400313b8: 39043fff strb wzr, [sp, #271]
lfn_start->cln = FAT_FILE_SHORT_NAME;
400313bc: b90113eb str w11, [sp, #272]
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
400313c0: 110082f7 add w23, w23, #0x20
for (dir_entry = 0;
400313c4: 6b17037f cmp w27, w23
400313c8: 54000c89 b.ls 40031558 <msdos_find_name_in_fat_file+0x3e8> // b.plast
bool entry_empty = (*MSDOS_DIR_ENTRY_TYPE(entry) ==
400313cc: 38774882 ldrb w2, [x4, w23, uxtw]
400313d0: 7100035f cmp w26, #0x0
400313d4: 0b170301 add w1, w24, w23
char* entry = (char*) fs_info->cl_buf + dir_entry;
400313d8: 8b374095 add x21, x4, w23, uxtw
if (*empty_entry_count == 0)
400313dc: 1a9c003c csel w28, w1, w28, eq // eq = none
if (remainder_empty)
400313e0: 340016e2 cbz w2, 400316bc <msdos_find_name_in_fat_file+0x54c>
else if (entry_empty)
400313e4: 7103945f cmp w2, #0xe5
400313e8: 54fffcc1 b.ne 40031380 <msdos_find_name_in_fat_file+0x210> // b.any
if (create_node)
400313ec: 34fffe54 cbz w20, 400313b4 <msdos_find_name_in_fat_file+0x244>
if (*empty_entry_count == (lfn_entries + 1))
400313f0: b94093e0 ldr w0, [sp, #144]
400313f4: 6b00035f cmp w26, w0
(*empty_entry_count)++;
400313f8: 1100075a add w26, w26, #0x1
if (*empty_entry_count == (lfn_entries + 1))
400313fc: 54fffdc1 b.ne 400313b4 <msdos_find_name_in_fat_file+0x244> // b.any
empty_space_found = true;
40031400: 2a1403f6 mov w22, w20
lfn_start->cln = FAT_FILE_SHORT_NAME;
40031404: 17ffffec b 400313b4 <msdos_find_name_in_fat_file+0x244>
name_len_for_compare = msdos_filename_utf8_to_long_name_for_compare (
40031408: aa1303e2 mov x2, x19
4003140c: aa1a03e4 mov x4, x26
40031410: aa1903e3 mov x3, x25
40031414: aa1703e1 mov x1, x23
40031418: aa1603e0 mov x0, x22
4003141c: 940016cd bl 40036f50 <msdos_filename_utf8_to_long_name_for_compare>
40031420: aa0003f3 mov x19, x0
if (0 >= name_len_for_compare) {
40031424: f100001f cmp x0, #0x0
40031428: 54fff1cd b.le 40031260 <msdos_find_name_in_fat_file+0xf0> <== NEVER TAKEN
lfn_entries = (name_len_for_save + MSDOS_LFN_ENTRY_SIZE - 1)
4003142c: 910066a1 add x1, x21, #0x19
/ MSDOS_LFN_ENTRY_SIZE;
40031430: d289d8a0 mov x0, #0x4ec5 // #20165
40031434: f2b89d80 movk x0, #0xc4ec, lsl #16
40031438: f2dd89c0 movk x0, #0xec4e, lsl #32
4003143c: f2e9d880 movk x0, #0x4ec4, lsl #48
40031440: 9bc07c20 umulh x0, x1, x0
lfn_entries = (name_len_for_save + MSDOS_LFN_ENTRY_SIZE - 1)
40031444: d3438800 ubfx x0, x0, #3, #32
40031448: f9004be0 str x0, [sp, #144]
4003144c: 17ffffa4 b 400312dc <msdos_find_name_in_fat_file+0x16c>
(lfn_start.cln == FAT_FILE_SHORT_NAME);
40031450: b94113e0 ldr w0, [sp, #272]
if (is_first_lfn_entry)
40031454: 3100041f cmn w0, #0x1
40031458: 54000b80 b.eq 400315c8 <msdos_find_name_in_fat_file+0x458> // b.none
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
4003145c: 12001442 and w2, w2, #0x3f
40031460: 6b13005f cmp w2, w19
40031464: 54fffa81 b.ne 400313b4 <msdos_find_name_in_fat_file+0x244> // b.any<== NEVER TAKEN
MSDOS_LAST_LONG_ENTRY_MASK)) ||
40031468: 394036a1 ldrb w1, [x21, #13]
4003146c: b9409fe2 ldr w2, [sp, #156]
40031470: 6b02003f cmp w1, w2
40031474: 54fffa01 b.ne 400313b4 <msdos_find_name_in_fat_file+0x244> // b.any<== NEVER TAKEN
40031478: 1400005e b 400315f0 <msdos_find_name_in_fat_file+0x480>
} else if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_VOLUME_ID)
4003147c: 371ffa23 tbnz w3, #3, 400313c0 <msdos_find_name_in_fat_file+0x250>
size_t bytes_converted = buf_size;
40031480: d2800182 mov x2, #0xc // #12
ssize_t bytes_written = msdos_format_dirent_with_dot(char_buf, entry);
40031484: aa1503e1 mov x1, x21
40031488: 910483e0 add x0, sp, #0x120
size_t bytes_converted = buf_size;
4003148c: f9008fe2 str x2, [sp, #280]
ssize_t bytes_written = msdos_format_dirent_with_dot(char_buf, entry);
40031490: 97fffee0 bl 40031010 <msdos_format_dirent_with_dot>
40031494: aa0003e2 mov x2, x0
if (bytes_written > 0) {
40031498: f100001f cmp x0, #0x0
4003149c: 5400344d b.le 40031b24 <msdos_find_name_in_fat_file+0x9b4> <== NEVER TAKEN
if (char_buf[0] == 0x05)
400314a0: 394483e0 ldrb w0, [sp, #288]
400314a4: 7100141f cmp w0, #0x5
400314a8: 54000061 b.ne 400314b4 <msdos_find_name_in_fat_file+0x344> // b.any<== ALWAYS TAKEN
char_buf[0] = 0xE5;
400314ac: 12800340 mov w0, #0xffffffe5 // #-27 <== NOT EXECUTED
400314b0: 390483e0 strb w0, [sp, #288] <== NOT EXECUTED
eno = (*converter->handler->codepage_to_utf8) (
400314b4: f94057e6 ldr x6, [sp, #168]
400314b8: 910503e3 add x3, sp, #0x140
400314bc: 910483e1 add x1, sp, #0x120
400314c0: 910463e4 add x4, sp, #0x118
400314c4: f90053e3 str x3, [sp, #160]
400314c8: f94000c0 ldr x0, [x6]
400314cc: f9400405 ldr x5, [x0, #8]
400314d0: aa0603e0 mov x0, x6
400314d4: d63f00a0 blr x5
400314d8: 2a0003e1 mov w1, w0
if (eno == 0)
400314dc: 1280000b mov w11, #0xffffffff // #-1
400314e0: f94053e3 ldr x3, [sp, #160]
400314e4: 34000e60 cbz w0, 400316b0 <msdos_find_name_in_fat_file+0x540> <== ALWAYS TAKEN
errno = eno;
400314e8: b900a3e1 str w1, [sp, #160] <== NOT EXECUTED
400314ec: f90077e3 str x3, [sp, #232] <== NOT EXECUTED
400314f0: 9400251f bl 4003a96c <__errno> <== NOT EXECUTED
400314f4: f94077e3 ldr x3, [sp, #232] <== NOT EXECUTED
bytes_in_entry = msdos_short_entry_to_utf8_name (
400314f8: 92800002 mov x2, #0xffffffffffffffff // #-1 <== NOT EXECUTED
errno = eno;
400314fc: b940a3e1 ldr w1, [sp, #160] <== NOT EXECUTED
40031500: b9000001 str w1, [x0] <== NOT EXECUTED
40031504: d503201f nop <== NOT EXECUTED
name_len_remaining = msdos_compare_entry_against_filename (
40031508: aa0303e1 mov x1, x3
4003150c: 91043fe5 add x5, sp, #0x10f
40031510: f94057e0 ldr x0, [sp, #168]
40031514: aa1903e4 mov x4, x25
40031518: f9405fe3 ldr x3, [sp, #184]
4003151c: 97fffc19 bl 40030580 <msdos_compare_entry_against_filename>
if (entry_matched && name_len_remaining == 0) {
40031520: f100001f cmp x0, #0x0
40031524: 39443fe0 ldrb w0, [sp, #271]
40031528: 1a9f17e1 cset w1, eq // eq = none
4003152c: 1280000b mov w11, #0xffffffff // #-1
40031530: 6a00003f tst w1, w0
40031534: 54001161 b.ne 40031760 <msdos_find_name_in_fat_file+0x5f0> // b.any
}
40031538: aa1903e5 mov x5, x25
*entry_matched = false;
4003153c: 39043fff strb wzr, [sp, #271]
lfn_start->cln = FAT_FILE_SHORT_NAME;
40031540: b90113eb str w11, [sp, #272]
*name_len_remaining = name_len_for_compare;
40031544: f9403fe0 ldr x0, [sp, #120]
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40031548: 110082f7 add w23, w23, #0x20
for (dir_entry = 0;
4003154c: 6b17037f cmp w27, w23
40031550: f9408004 ldr x4, [x0, #256]
40031554: 54fff3c8 b.hi 400313cc <msdos_find_name_in_fat_file+0x25c> // b.pmore
40031558: 2a1803f5 mov w21, w24
4003155c: aa1903f8 mov x24, x25
40031560: aa0503f9 mov x25, x5
dir_offset++;
40031564: b94083e0 ldr w0, [sp, #128]
40031568: 0b1b02b5 add w21, w21, w27
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
4003156c: f94047e1 ldr x1, [sp, #136]
dir_offset++;
40031570: 11000400 add w0, w0, #0x1
40031574: b90083e0 str w0, [sp, #128]
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40031578: 2a1b03e3 mov w3, w27
4003157c: f9403fe0 ldr x0, [sp, #120]
40031580: 2a1503e2 mov w2, w21
40031584: 97fff76f bl 4002f340 <fat_file_read>
&& rc == RC_OK)
40031588: b5ffee00 cbnz x0, 40031348 <msdos_find_name_in_fat_file+0x1d8>
rc = MSDOS_NAME_NOT_FOUND_ERR;
4003158c: 2a1c03e0 mov w0, w28
40031590: 2a1403f8 mov w24, w20
40031594: 2a1a03fc mov w28, w26
40031598: 2a0003fa mov w26, w0
4003159c: 528fa020 mov w0, #0x7d01 // #32001
400315a0: f9403ff4 ldr x20, [sp, #120]
if (!create_node)
400315a4: 35000a38 cbnz w24, 400316e8 <msdos_find_name_in_fat_file+0x578>
}
400315a8: a9417bfd ldp x29, x30, [sp, #16]
400315ac: a94253f3 ldp x19, x20, [sp, #32]
400315b0: a9435bf5 ldp x21, x22, [sp, #48]
400315b4: a94463f7 ldp x23, x24, [sp, #64]
400315b8: a9456bf9 ldp x25, x26, [sp, #80]
400315bc: a94673fb ldp x27, x28, [sp, #96]
400315c0: 9106c3ff add sp, sp, #0x1b0
400315c4: d65f03c0 ret
entry_matched = false;
400315c8: 39043fff strb wzr, [sp, #271]
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
400315cc: 394002a1 ldrb w1, [x21]
400315d0: 3637ef81 tbz w1, #6, 400313c0 <msdos_find_name_in_fat_file+0x250>
lfn_start.cln = dir_offset;
400315d4: b94083e1 ldr w1, [sp, #128]
400315d8: b90113e1 str w1, [sp, #272]
lfn_start.ofs = dir_entry;
400315dc: b90117f7 str w23, [sp, #276]
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
400315e0: 394036a1 ldrb w1, [x21, #13]
lfn_entry = (*MSDOS_DIR_ENTRY_TYPE(entry)
400315e4: 394002a6 ldrb w6, [x21]
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
400315e8: b9009fe1 str w1, [sp, #156]
lfn_entry = (*MSDOS_DIR_ENTRY_TYPE(entry)
400315ec: 120014d3 and w19, w6, #0x3f
bool is_first_lfn_entry =
400315f0: 3100041f cmn w0, #0x1
size_t bytes_in_utf8 = buf_size;
400315f4: d2800e01 mov x1, #0x70 // #112
400315f8: 1a9f17e2 cset w2, eq // eq = none
400315fc: aa1503e0 mov x0, x21
40031600: f90053e5 str x5, [sp, #160]
lfn_entry--;
40031604: 51000673 sub w19, w19, #0x1
size_t bytes_in_utf8 = buf_size;
40031608: f9008fe1 str x1, [sp, #280]
4003160c: 910483e1 add x1, sp, #0x120
40031610: 97fffc44 bl 40030720 <msdos_get_utf16_string_from_long_entry.part.0>
if (buf_size >= MSDOS_LFN_ENTRY_SIZE) {
40031614: aa0003e2 mov x2, x0
if (retval >= 0) {
40031618: 910503e3 add x3, sp, #0x140
4003161c: f94053e5 ldr x5, [sp, #160]
40031620: b7f80300 tbnz x0, #63, 40031680 <msdos_find_name_in_fat_file+0x510> <== NEVER TAKEN
eno = (*converter->handler->utf16_to_utf8) (
40031624: f90077e5 str x5, [sp, #232]
40031628: 910503e3 add x3, sp, #0x140
4003162c: f94057e5 ldr x5, [sp, #168]
40031630: 910463e4 add x4, sp, #0x118
40031634: 910483e1 add x1, sp, #0x120
40031638: f90053e3 str x3, [sp, #160]
4003163c: f94000a0 ldr x0, [x5]
40031640: f9400c07 ldr x7, [x0, #24]
40031644: aa0503e0 mov x0, x5
40031648: d63f00e0 blr x7
4003164c: 2a0003f5 mov w21, w0
if ( eno == 0 ) {
40031650: 1280000b mov w11, #0xffffffff // #-1
40031654: f94053e3 ldr x3, [sp, #160]
40031658: f94077e5 ldr x5, [sp, #232]
4003165c: 34000600 cbz w0, 4003171c <msdos_find_name_in_fat_file+0x5ac>
errno = eno;
40031660: f90053e3 str x3, [sp, #160]
40031664: f90077e5 str x5, [sp, #232]
40031668: 940024c1 bl 4003a96c <__errno>
4003166c: f94053e3 ldr x3, [sp, #160]
bytes_in_entry = msdos_long_entry_to_utf8_name (
40031670: 92800002 mov x2, #0xffffffffffffffff // #-1
40031674: f94077e5 ldr x5, [sp, #232]
errno = eno;
40031678: b9000015 str w21, [x0]
if (bytes_in_entry > 0) {
4003167c: d503201f nop
name_len_remaining = msdos_compare_entry_against_filename (
40031680: aa0303e1 mov x1, x3
40031684: aa0503e4 mov x4, x5
40031688: f94057e0 ldr x0, [sp, #168]
4003168c: 91043fe5 add x5, sp, #0x10f
40031690: f9405fe3 ldr x3, [sp, #184]
40031694: 97fffbbb bl 40030580 <msdos_compare_entry_against_filename>
40031698: aa0003e5 mov x5, x0
if (name_len_remaining < 0 || !entry_matched) {
4003169c: 1280000b mov w11, #0xffffffff // #-1
400316a0: b7fff4c0 tbnz x0, #63, 40031538 <msdos_find_name_in_fat_file+0x3c8> <== NEVER TAKEN
400316a4: 39443fe0 ldrb w0, [sp, #271]
400316a8: 34fff480 cbz w0, 40031538 <msdos_find_name_in_fat_file+0x3c8>
400316ac: 17ffffa6 b 40031544 <msdos_find_name_in_fat_file+0x3d4>
bytes_written = bytes_converted;
400316b0: f9408fe2 ldr x2, [sp, #280]
if (bytes_in_entry > 0) {
400316b4: b4fff422 cbz x2, 40031538 <msdos_find_name_in_fat_file+0x3c8> <== NEVER TAKEN
400316b8: 17ffff94 b 40031508 <msdos_find_name_in_fat_file+0x398>
rc = MSDOS_NAME_NOT_FOUND_ERR;
400316bc: 2a1c03e0 mov w0, w28
400316c0: 2a1403f8 mov w24, w20
400316c4: 2a1a03fc mov w28, w26
400316c8: 2a0003fa mov w26, w0
400316cc: 528fa020 mov w0, #0x7d01 // #32001
400316d0: f9403ff4 ldr x20, [sp, #120]
if (!create_node)
400316d4: 34fff6b8 cbz w24, 400315a8 <msdos_find_name_in_fat_file+0x438>
if ( !empty_space_found
400316d8: 35000096 cbnz w22, 400316e8 <msdos_find_name_in_fat_file+0x578>
*empty_entry_count +=
400316dc: b940f7e0 ldr w0, [sp, #244]
400316e0: 0b1c0009 add w9, w0, w28
400316e4: 4b57153c sub w28, w9, w23, lsr #5
switch (name_type) {
400316e8: b940f3e0 ldr w0, [sp, #240]
400316ec: 7100041f cmp w0, #0x1
400316f0: 54000680 b.eq 400317c0 <msdos_find_name_in_fat_file+0x650> // b.none
400316f4: 7100081f cmp w0, #0x2
400316f8: 54000c20 b.eq 4003187c <msdos_find_name_in_fat_file+0x70c> // b.none<== ALWAYS TAKEN
errno = EINVAL;
400316fc: 9400249c bl 4003a96c <__errno> <== NOT EXECUTED
40031700: aa0003e1 mov x1, x0 <== NOT EXECUTED
40031704: 528002c2 mov w2, #0x16 // #22 <== NOT EXECUTED
retval = -1;
40031708: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4003170c: a9435bf5 ldp x21, x22, [sp, #48] <== NOT EXECUTED
40031710: a9456bf9 ldp x25, x26, [sp, #80] <== NOT EXECUTED
errno = EINVAL;
40031714: b9000022 str w2, [x1] <== NOT EXECUTED
if (retval == RC_OK)
40031718: 17fffebc b 40031208 <msdos_find_name_in_fat_file+0x98> <== NOT EXECUTED
retval = bytes_in_utf8;
4003171c: f9408fe2 ldr x2, [sp, #280]
if (bytes_in_entry > 0) {
40031720: b4fff0c2 cbz x2, 40031538 <msdos_find_name_in_fat_file+0x3c8> <== NEVER TAKEN
40031724: 17ffffd7 b 40031680 <msdos_find_name_in_fat_file+0x510>
40031728: 910006a3 add x3, x21, #0x1
4003172c: 91002ea5 add x5, x21, #0xb
cs = 0;
40031730: 52800000 mov w0, #0x0 // #0
40031734: 14000002 b 4003173c <msdos_find_name_in_fat_file+0x5cc>
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40031738: 38401462 ldrb w2, [x3], #1
4003173c: 53017c01 lsr w1, w0, #1
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40031740: eb0300bf cmp x5, x3
40031744: 0b001c20 add w0, w1, w0, lsl #7
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40031748: 0b200040 add w0, w2, w0, uxtb
4003174c: 12001c00 and w0, w0, #0xff
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40031750: 54ffff41 b.ne 40031738 <msdos_find_name_in_fat_file+0x5c8> // b.any
name_len_remaining > 0 ||
40031754: b9409fe1 ldr w1, [sp, #156]
40031758: 6b01001f cmp w0, w1
4003175c: 54ffe2c1 b.ne 400313b4 <msdos_find_name_in_fat_file+0x244> // b.any<== NEVER TAKEN
rc = msdos_on_entry_found (
40031760: b94083e6 ldr w6, [sp, #128]
40031764: 2a1c03e0 mov w0, w28
40031768: f94047e1 ldr x1, [sp, #136]
4003176c: 2a1403f8 mov w24, w20
40031770: f94063e5 ldr x5, [sp, #192]
40031774: 2a1a03fc mov w28, w26
40031778: f9406fe3 ldr x3, [sp, #216]
4003177c: 2a0003fa mov w26, w0
40031780: f9403ff4 ldr x20, [sp, #120]
40031784: 910443e0 add x0, sp, #0x110
40031788: f90003e0 str x0, [sp]
4003178c: 2a1703e7 mov w7, w23
40031790: aa1503e4 mov x4, x21
40031794: 2a1b03e2 mov w2, w27
40031798: aa1403e0 mov x0, x20
4003179c: 97fffba9 bl 40030640 <msdos_on_entry_found>
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
400317a0: 110082e7 add w7, w23, #0x20
dir_entry < bts2rd && rc == RC_OK && (! filename_matched);
400317a4: 7100001f cmp w0, #0x0
for (dir_entry = 0;
400317a8: 7a470360 ccmp w27, w7, #0x0, eq // eq = none
400317ac: 54001d69 b.ls 40031b58 <msdos_find_name_in_fat_file+0x9e8> // b.plast
if ( retval == RC_OK
400317b0: 34ffefd8 cbz w24, 400315a8 <msdos_find_name_in_fat_file+0x438> <== ALWAYS TAKEN
switch (name_type) {
400317b4: b940f3e0 ldr w0, [sp, #240] <== NOT EXECUTED
400317b8: 7100041f cmp w0, #0x1 <== NOT EXECUTED
400317bc: 54fff9c1 b.ne 400316f4 <msdos_find_name_in_fat_file+0x584> // b.any<== NOT EXECUTED
name_len_for_save = msdos_filename_utf8_to_short_name_for_save (
400317c0: a94c87e0 ldp x0, x1, [sp, #200]
400317c4: d2800164 mov x4, #0xb // #11
400317c8: f9405fe3 ldr x3, [sp, #184]
400317cc: f9407fe2 ldr x2, [sp, #248]
400317d0: 940016e4 bl 40037360 <msdos_filename_utf8_to_short_name_for_save>
if (name_len_for_save > 0 ) {
400317d4: f100001f cmp x0, #0x0
400317d8: 54ffd44d b.le 40031260 <msdos_find_name_in_fat_file+0xf0> <== NEVER TAKEN
if (empty_entry_count < lfn_entries + 1)
400317dc: 34001abc cbz w28, 40031b30 <msdos_find_name_in_fat_file+0x9c0>
pos->ofs = file_offset & (bts2rd - 1);
400317e0: f94063e2 ldr x2, [sp, #192]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400317e4: 12800001 mov w1, #0xffffffff // #-1
pos->ofs = file_offset & (bts2rd - 1);
400317e8: 51000760 sub w0, w27, #0x1
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400317ec: 2a1a03e3 mov w3, w26
pos->ofs = file_offset & (bts2rd - 1);
400317f0: 0a1a0000 and w0, w0, w26
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400317f4: aa0203e4 mov x4, x2
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400317f8: 29008440 stp w0, w1, [x2, #4]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400317fc: aa1403e0 mov x0, x20
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40031800: b9000c41 str w1, [x2, #12]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
40031804: 52800022 mov w2, #0x1 // #1
40031808: f94047e1 ldr x1, [sp, #136]
entry = fs_info->cl_buf;
4003180c: d2800415 mov x21, #0x20 // #32
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
40031810: 97fff7d4 bl 4002f760 <fat_file_ioctl>
entry = fs_info->cl_buf;
40031814: b9007bf5 str w21, [sp, #120]
40031818: f940829b ldr x27, [x20, #256]
memcpy(entry, name_dir_entry, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
4003181c: d2800402 mov x2, #0x20 // #32
40031820: f9406fe1 ldr x1, [sp, #216]
40031824: aa1b03e0 mov x0, x27
40031828: 940026f4 bl 4003b3f8 <memcpy>
bytes_written = fat_file_write(&fs_info->fat, fat_fd,
4003182c: b9407be3 ldr w3, [sp, #120]
40031830: 2a1a03e2 mov w2, w26
40031834: f94047e1 ldr x1, [sp, #136]
40031838: aa1403e0 mov x0, x20
4003183c: f9408284 ldr x4, [x20, #256]
40031840: 97fff8b4 bl 4002fb10 <fat_file_write>
40031844: aa0003e1 mov x1, x0
if (bytes_written == (ssize_t) length)
40031848: eb15003f cmp x1, x21
return 0;
4003184c: 52800000 mov w0, #0x0 // #0
if (bytes_written == (ssize_t) length)
40031850: 54ffeac0 b.eq 400315a8 <msdos_find_name_in_fat_file+0x438> // b.none<== ALWAYS TAKEN
else if (bytes_written == -1)
40031854: b100043f cmn x1, #0x1 <== NOT EXECUTED
40031858: 54ffd040 b.eq 40031260 <msdos_find_name_in_fat_file+0xf0> // b.none<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4003185c: 94002444 bl 4003a96c <__errno> <== NOT EXECUTED
40031860: aa0003e1 mov x1, x0 <== NOT EXECUTED
40031864: 528000a2 mov w2, #0x5 // #5 <== NOT EXECUTED
40031868: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
4003186c: a9435bf5 ldp x21, x22, [sp, #48] <== NOT EXECUTED
40031870: a9456bf9 ldp x25, x26, [sp, #80] <== NOT EXECUTED
40031874: b9000022 str w2, [x1] <== NOT EXECUTED
40031878: 17fffe64 b 40031208 <msdos_find_name_in_fat_file+0x98> <== NOT EXECUTED
name_len_for_save = msdos_filename_utf8_to_long_name_for_save (
4003187c: a94c87e0 ldp x0, x1, [sp, #200]
40031880: f9405fe3 ldr x3, [sp, #184]
40031884: f94073e4 ldr x4, [sp, #224]
40031888: f9407fe2 ldr x2, [sp, #248]
4003188c: 940015f1 bl 40037050 <msdos_filename_utf8_to_long_name_for_save>
if (name_len_for_save > 0) {
40031890: f100001f cmp x0, #0x0
40031894: 54ffce6d b.le 40031260 <msdos_find_name_in_fat_file+0xf0> <== NEVER TAKEN
lfn_entries = (name_len_for_save + MSDOS_LFN_ENTRY_SIZE - 1)
40031898: 91006416 add x22, x0, #0x19
/ MSDOS_LFN_ENTRY_SIZE;
4003189c: d289d8a0 mov x0, #0x4ec5 // #20165
400318a0: f2b89d80 movk x0, #0xc4ec, lsl #16
400318a4: f2dd89c0 movk x0, #0xec4e, lsl #32
400318a8: f2e9d880 movk x0, #0x4ec4, lsl #48
400318ac: 9bc07ed6 umulh x22, x22, x0
400318b0: d343fed6 lsr x22, x22, #3
if (empty_entry_count < lfn_entries + 1)
400318b4: 110006d9 add w25, w22, #0x1
400318b8: 6b1c033f cmp w25, w28
400318bc: 54000169 b.ls 400318e8 <msdos_find_name_in_fat_file+0x778> // b.plast
empty_file_offset = fat_fd->fat_file_size -
400318c0: f94047e1 ldr x1, [sp, #136]
ret = fat_file_extend(&fs_info->fat,
400318c4: 910503e4 add x4, sp, #0x140
400318c8: b9400a83 ldr w3, [x20, #8]
400318cc: aa1403e0 mov x0, x20
400318d0: 52800022 mov w2, #0x1 // #1
empty_file_offset = fat_fd->fat_file_size -
400318d4: b9402033 ldr w19, [x1, #32]
ret = fat_file_extend(&fs_info->fat,
400318d8: 0b030263 add w3, w19, w3
400318dc: 97fff7dd bl 4002f850 <fat_file_extend>
if (ret != RC_OK)
400318e0: 35ffe640 cbnz w0, 400315a8 <msdos_find_name_in_fat_file+0x438> <== NEVER TAKEN
empty_file_offset = fat_fd->fat_file_size -
400318e4: 4b1c167a sub w26, w19, w28, lsl #5
if ((*c == ' ') || (*c == '.'))
400318e8: f9406fe2 ldr x2, [sp, #216]
400318ec: 528005c1 mov w1, #0x2e // #46
slot = (empty_file_offset /
400318f0: 0b5a1724 add w4, w25, w26, lsr #5
if ((*c == ' ') || (*c == '.'))
400318f4: 39400040 ldrb w0, [x2]
400318f8: 7100801f cmp w0, #0x20
400318fc: 7a411004 ccmp w0, w1, #0x4, ne // ne = any
40031900: 54000061 b.ne 4003190c <msdos_find_name_in_fat_file+0x79c> // b.any<== ALWAYS TAKEN
*c = '_';
40031904: 52800be0 mov w0, #0x5f // #95 <== NOT EXECUTED
40031908: 39000040 strb w0, [x2] <== NOT EXECUTED
if ((*c == ' ') || (*c == '.'))
4003190c: f9406fe2 ldr x2, [sp, #216]
40031910: 528005c1 mov w1, #0x2e // #46
40031914: 39400440 ldrb w0, [x2, #1]
40031918: 7100801f cmp w0, #0x20
4003191c: 7a411004 ccmp w0, w1, #0x4, ne // ne = any
40031920: 54000fc0 b.eq 40031b18 <msdos_find_name_in_fat_file+0x9a8> // b.none
for (i = 0; i < 2; i++, c++)
40031924: f9406fe0 ldr x0, [sp, #216]
40031928: 900000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0>
4003192c: 9110e063 add x3, x3, #0x438
40031930: 91000802 add x2, x0, #0x2
40031934: 52800180 mov w0, #0xc // #12
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
40031938: 1ac02481 lsr w1, w4, w0
4003193c: 12000c21 and w1, w1, #0xf
for (i = 0; i < 4; i++, c++)
40031940: 51001000 sub w0, w0, #0x4
40031944: 3100101f cmn w0, #0x4
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
40031948: 38614861 ldrb w1, [x3, w1, uxtw]
4003194c: 38001441 strb w1, [x2], #1
for (i = 0; i < 4; i++, c++)
40031950: 54ffff41 b.ne 40031938 <msdos_find_name_in_fat_file+0x7c8> // b.any
*c++ = '~';
40031954: f9406fe4 ldr x4, [sp, #216]
40031958: 52800fc2 mov w2, #0x7e // #126
*c = '1';
4003195c: 52800620 mov w0, #0x31 // #49
cs = 0;
40031960: 52800013 mov w19, #0x0 // #0
40031964: aa0403e1 mov x1, x4
40031968: 91002c83 add x3, x4, #0xb
*c++ = '~';
4003196c: 39001882 strb w2, [x4, #6]
*c = '1';
40031970: 39001c80 strb w0, [x4, #7]
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40031974: d503201f nop
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40031978: 38401422 ldrb w2, [x1], #1
4003197c: 53190260 ubfiz w0, w19, #7, #1
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40031980: eb01007f cmp x3, x1
40031984: 0b530453 add w19, w2, w19, lsr #1
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40031988: 0b330013 add w19, w0, w19, uxtb
4003198c: 12001e73 and w19, w19, #0xff
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40031990: 54ffff41 b.ne 40031978 <msdos_find_name_in_fat_file+0x808> // b.any
pos->ofs = file_offset & (bts2rd - 1);
40031994: f94063f5 ldr x21, [sp, #192]
40031998: 5100077b sub w27, w27, #0x1
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
4003199c: f94047f7 ldr x23, [sp, #136]
pos->ofs = file_offset & (bts2rd - 1);
400319a0: 910022a4 add x4, x21, #0x8
400319a4: 0a1a0360 and w0, w27, w26
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400319a8: 2a1a03e3 mov w3, w26
400319ac: aa1703e1 mov x1, x23
400319b0: 52800022 mov w2, #0x1 // #1
pos->ofs = file_offset & (bts2rd - 1);
400319b4: b9000480 str w0, [x4, #4]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400319b8: aa1403e0 mov x0, x20
400319bc: 97fff769 bl 4002f760 <fat_file_ioctl>
if (ret != RC_OK)
400319c0: 35ffdf40 cbnz w0, 400315a8 <msdos_find_name_in_fat_file+0x438> <== NEVER TAKEN
length = (lfn_entries + 1) * MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400319c4: 531b6b25 lsl w5, w25, #5
short_file_offset = empty_file_offset + lfn_entries
400319c8: 0b161743 add w3, w26, w22, lsl #5
pos->ofs = file_offset & (bts2rd - 1);
400319cc: 0a1b0060 and w0, w3, w27
400319d0: b90006a0 str w0, [x21, #4]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400319d4: aa1503e4 mov x4, x21
400319d8: aa1703e1 mov x1, x23
400319dc: aa1403e0 mov x0, x20
if (bytes_written == (ssize_t) length)
400319e0: 2a0503f5 mov w21, w5
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400319e4: 52800022 mov w2, #0x1 // #1
length = (lfn_entries + 1) * MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400319e8: b9007be5 str w5, [sp, #120]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400319ec: 97fff75d bl 4002f760 <fat_file_ioctl>
entry = fs_info->cl_buf;
400319f0: f940829b ldr x27, [x20, #256]
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
400319f4: 34fff156 cbz w22, 4003181c <msdos_find_name_in_fat_file+0x6ac> <== NEVER TAKEN
400319f8: 52800349 mov w9, #0x1a // #26
*MSDOS_DIR_ENTRY_TYPE(entry) = lfn_entries - lfn_entry;
400319fc: 12001ed8 and w24, w22, #0xff
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
40031a00: 52800019 mov w25, #0x0 // #0
40031a04: 2a1303f7 mov w23, w19
40031a08: 1b167d29 mul w9, w9, w22
entry = fs_info->cl_buf;
40031a0c: aa1b03e6 mov x6, x27
40031a10: f9405ff3 ldr x19, [sp, #184]
40031a14: 5100693c sub w28, w9, #0x1a
40031a18: f90043f4 str x20, [sp, #128]
40031a1c: 2a1c03f4 mov w20, w28
40031a20: 2a1903fc mov w28, w25
40031a24: 2a1803f9 mov w25, w24
40031a28: 2a1603f8 mov w24, w22
40031a2c: d503201f nop
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40031a30: aa0603e0 mov x0, x6
40031a34: d2800402 mov x2, #0x20 // #32
40031a38: 52800001 mov w1, #0x0 // #0
40031a3c: 9400268a bl 4003b464 <memset>
40031a40: aa0003e6 mov x6, x0
n = (const uint8_t *) name_converted +
40031a44: 8b344262 add x2, x19, w20, uxtw
40031a48: 91000400 add x0, x0, #0x1
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031a4c: 52800001 mov w1, #0x0 // #0
uint8_t fill = 0;
40031a50: 52800005 mov w5, #0x0 // #0
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
40031a54: 390034d7 strb w23, [x6, #13]
if (*n != 0 || *(n + 1) != 0)
40031a58: 39400043 ldrb w3, [x2]
40031a5c: 35000223 cbnz w3, 40031aa0 <msdos_find_name_in_fat_file+0x930> <== ALWAYS TAKEN
40031a60: 39400444 ldrb w4, [x2, #1]
40031a64: 350001e4 cbnz w4, 40031aa0 <msdos_find_name_in_fat_file+0x930>
p [0] = fill;
40031a68: 39000005 strb w5, [x0]
switch (i)
40031a6c: 7100103f cmp w1, #0x4
p [1] = fill;
40031a70: 39000405 strb w5, [x0, #1]
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031a74: 11000423 add w3, w1, #0x1
fill = 0xff;
40031a78: 52801fe5 mov w5, #0xff // #255
switch (i)
40031a7c: 54000200 b.eq 40031abc <msdos_find_name_in_fat_file+0x94c> // b.none
40031a80: 7100283f cmp w1, #0xa
40031a84: 54000440 b.eq 40031b0c <msdos_find_name_in_fat_file+0x99c> // b.none
p += 2;
40031a88: 91000800 add x0, x0, #0x2
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031a8c: 7100347f cmp w3, #0xd
40031a90: 540001c0 b.eq 40031ac8 <msdos_find_name_in_fat_file+0x958> // b.none
40031a94: 2a0303e1 mov w1, w3
if (*n != 0 || *(n + 1) != 0)
40031a98: 39400043 ldrb w3, [x2]
40031a9c: 34fffe23 cbz w3, 40031a60 <msdos_find_name_in_fat_file+0x8f0>
*p = *n;
40031aa0: 39000003 strb w3, [x0]
n += MSDOS_NAME_LFN_BYTES_PER_CHAR;
40031aa4: 91000842 add x2, x2, #0x2
switch (i)
40031aa8: 7100103f cmp w1, #0x4
*(p + 1) = *(n + 1);
40031aac: 385ff043 ldurb w3, [x2, #-1]
40031ab0: 39000403 strb w3, [x0, #1]
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031ab4: 11000423 add w3, w1, #0x1
switch (i)
40031ab8: 54fffe41 b.ne 40031a80 <msdos_find_name_in_fat_file+0x910> // b.any
p += 5;
40031abc: 91001400 add x0, x0, #0x5
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031ac0: 2a0303e1 mov w1, w3
40031ac4: 17fffff5 b 40031a98 <msdos_find_name_in_fat_file+0x928>
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
40031ac8: 39402cc0 ldrb w0, [x6, #11]
*MSDOS_DIR_ENTRY_TYPE(entry) = lfn_entries - lfn_entry;
40031acc: 4b1c0322 sub w2, w25, w28
40031ad0: 7100039f cmp w28, #0x0
40031ad4: 321a0041 orr w1, w2, #0x40
40031ad8: 1a820021 csel w1, w1, w2, eq // eq = none
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
40031adc: 32000c00 orr w0, w0, #0xf
*MSDOS_DIR_ENTRY_TYPE(entry) = lfn_entries - lfn_entry;
40031ae0: 390000c1 strb w1, [x6]
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
40031ae4: 1100079c add w28, w28, #0x1
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
40031ae8: 39002cc0 strb w0, [x6, #11]
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
40031aec: 51006a94 sub w20, w20, #0x1a
40031af0: 6b18039f cmp w28, w24
entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
40031af4: 910080c6 add x6, x6, #0x20
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
40031af8: 54fff9c1 b.ne 40031a30 <msdos_find_name_in_fat_file+0x8c0> // b.any
entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
40031afc: d37b7ed6 ubfiz x22, x22, #5, #32
40031b00: 8b16037b add x27, x27, x22
40031b04: f94043f4 ldr x20, [sp, #128]
40031b08: 17ffff45 b 4003181c <msdos_find_name_in_fat_file+0x6ac>
p += 4;
40031b0c: 91001000 add x0, x0, #0x4
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40031b10: 2a0303e1 mov w1, w3
40031b14: 17ffffe1 b 40031a98 <msdos_find_name_in_fat_file+0x928>
*c = '_';
40031b18: 52800be0 mov w0, #0x5f // #95
40031b1c: 39000440 strb w0, [x2, #1]
40031b20: 17ffff81 b 40031924 <msdos_find_name_in_fat_file+0x7b4>
40031b24: 910503e3 add x3, sp, #0x140 <== NOT EXECUTED
eno = EINVAL;
40031b28: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
40031b2c: 17fffe6f b 400314e8 <msdos_find_name_in_fat_file+0x378> <== NOT EXECUTED
empty_file_offset = fat_fd->fat_file_size -
40031b30: f94047e1 ldr x1, [sp, #136]
ret = fat_file_extend(&fs_info->fat,
40031b34: 910503e4 add x4, sp, #0x140
40031b38: 3943c3e2 ldrb w2, [sp, #240]
40031b3c: aa1403e0 mov x0, x20
40031b40: b9400a83 ldr w3, [x20, #8]
empty_file_offset = fat_fd->fat_file_size -
40031b44: b940203a ldr w26, [x1, #32]
ret = fat_file_extend(&fs_info->fat,
40031b48: 0b030343 add w3, w26, w3
40031b4c: 97fff741 bl 4002f850 <fat_file_extend>
if (ret != RC_OK)
40031b50: 34ffe480 cbz w0, 400317e0 <msdos_find_name_in_fat_file+0x670> <== NEVER TAKEN
40031b54: 17fffe95 b 400315a8 <msdos_find_name_in_fat_file+0x438>
if ( retval == RC_OK
40031b58: 7100001f cmp w0, #0x0
40031b5c: 1a9f17e1 cset w1, eq // eq = none
&& create_node) {
40031b60: 0a010318 and w24, w24, w1
if ( retval == RC_OK
40031b64: 35ffe298 cbnz w24, 400317b4 <msdos_find_name_in_fat_file+0x644> <== NEVER TAKEN
40031b68: 17fffe90 b 400315a8 <msdos_find_name_in_fat_file+0x438>
assert(bytes_read == bts2rd);
40031b6c: 900000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b70: 900000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b74: 900000c0 adrp x0, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b78: 91108063 add x3, x3, #0x420 <== NOT EXECUTED
40031b7c: 91128042 add x2, x2, #0x4a0 <== NOT EXECUTED
40031b80: 910ee000 add x0, x0, #0x3b8 <== NOT EXECUTED
40031b84: 5280a9a1 mov w1, #0x54d // #1357 <== NOT EXECUTED
40031b88: 94001346 bl 400368a0 <__assert_func> <== NOT EXECUTED
assert(name_utf8_len > 0);
40031b8c: 900000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b90: 900000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b94: 900000c0 adrp x0, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031b98: 91102063 add x3, x3, #0x408 <== NOT EXECUTED
40031b9c: 91130042 add x2, x2, #0x4c0 <== NOT EXECUTED
40031ba0: 910ee000 add x0, x0, #0x3b8 <== NOT EXECUTED
40031ba4: 5280e8c1 mov w1, #0x746 // #1862 <== NOT EXECUTED
40031ba8: a9035bf5 stp x21, x22, [sp, #48] <== NOT EXECUTED
40031bac: a90463f7 stp x23, x24, [sp, #64] <== NOT EXECUTED
40031bb0: a9056bf9 stp x25, x26, [sp, #80] <== NOT EXECUTED
40031bb4: a90673fb stp x27, x28, [sp, #96] <== NOT EXECUTED
40031bb8: 9400133a bl 400368a0 <__assert_func> <== NOT EXECUTED
40031bbc: 00000000 udf #0
0000000040031bc0 <msdos_find_node_by_cluster_num_in_fat_file>:
fat_file_fd_t *fat_fd,
uint32_t cl4find,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
40031bc0: a9ba7bfd stp x29, x30, [sp, #-96]!
40031bc4: 910003fd mov x29, sp
40031bc8: a90573fb stp x27, x28, [sp, #80]
40031bcc: aa0103fb mov x27, x1
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t bts2rd = 0;
uint32_t i = 0, j = 0;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40031bd0: f9401421 ldr x1, [x1, #40]
{
40031bd4: a90153f3 stp x19, x20, [sp, #16]
40031bd8: a9025bf5 stp x21, x22, [sp, #32]
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40031bdc: f100043f cmp x1, #0x1
{
40031be0: aa0303f5 mov x21, x3
40031be4: a90363f7 stp x23, x24, [sp, #48]
40031be8: aa0403f6 mov x22, x4
40031bec: a9046bf9 stp x25, x26, [sp, #64]
40031bf0: 2a0203f9 mov w25, w2
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40031bf4: f940081a ldr x26, [x0, #16]
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40031bf8: 54000560 b.eq 40031ca4 <msdos_find_node_by_cluster_num_in_fat_file+0xe4> // b.none
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
40031bfc: b9400b58 ldr w24, [x26, #8]
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * bts2rd, bts2rd,
40031c00: f9408344 ldr x4, [x26, #256]
fs_info->cl_buf)) != FAT_EOF)
{
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
rtems_set_errno_and_return_minus_one( EIO );
assert(ret == bts2rd);
40031c04: 2a1803f7 mov w23, w24
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * bts2rd, bts2rd,
40031c08: 5280001c mov w28, #0x0 // #0
40031c0c: 2a1803e3 mov w3, w24
40031c10: 2a1c03e2 mov w2, w28
40031c14: aa1b03e1 mov x1, x27
40031c18: aa1a03e0 mov x0, x26
40031c1c: 97fff5c9 bl 4002f340 <fat_file_read>
40031c20: b40002c0 cbz x0, 40031c78 <msdos_find_node_by_cluster_num_in_fat_file+0xb8><== NEVER TAKEN
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
40031c24: f1007c1f cmp x0, #0x1f
40031c28: 5400076d b.le 40031d14 <msdos_find_node_by_cluster_num_in_fat_file+0x154><== NEVER TAKEN
assert(ret == bts2rd);
40031c2c: eb0002ff cmp x23, x0
40031c30: 540007c1 b.ne 40031d28 <msdos_find_node_by_cluster_num_in_fat_file+0x168> // b.any<== NEVER TAKEN
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40031c34: 52800013 mov w19, #0x0 // #0
{
char* entry = (char*) fs_info->cl_buf + i;
40031c38: f9408344 ldr x4, [x26, #256]
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40031c3c: 35000198 cbnz w24, 40031c6c <msdos_find_node_by_cluster_num_in_fat_file+0xac><== ALWAYS TAKEN
40031c40: 14000017 b 40031c9c <msdos_find_node_by_cluster_num_in_fat_file+0xdc><== NOT EXECUTED
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
return MSDOS_NAME_NOT_FOUND_ERR;
/* if this entry is empty - skip it */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40031c44: 7103941f cmp w0, #0xe5
40031c48: 540000c0 b.eq 40031c60 <msdos_find_node_by_cluster_num_in_fat_file+0xa0> // b.none<== NEVER TAKEN
MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* if get a non-empty entry - compare clusters num */
if (MSDOS_EXTRACT_CLUSTER_NUM(entry) == cl4find)
40031c4c: 79402a80 ldrh w0, [x20, #20]
40031c50: 79403685 ldrh w5, [x20, #26]
40031c54: 2a0040a0 orr w0, w5, w0, lsl #16
40031c58: 6b19001f cmp w0, w25
40031c5c: 540002e0 b.eq 40031cb8 <msdos_find_node_by_cluster_num_in_fat_file+0xf8> // b.none
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40031c60: 11008273 add w19, w19, #0x20
40031c64: 6b18027f cmp w19, w24
40031c68: 540001a2 b.cs 40031c9c <msdos_find_node_by_cluster_num_in_fat_file+0xdc> // b.hs, b.nlast<== NEVER TAKEN
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40031c6c: 38734880 ldrb w0, [x4, w19, uxtw]
char* entry = (char*) fs_info->cl_buf + i;
40031c70: 8b334094 add x20, x4, w19, uxtw
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40031c74: 35fffe80 cbnz w0, 40031c44 <msdos_find_node_by_cluster_num_in_fat_file+0x84><== ALWAYS TAKEN
return MSDOS_NAME_NOT_FOUND_ERR;
40031c78: 528fa037 mov w23, #0x7d01 // #32001 <== NOT EXECUTED
}
}
j++;
}
return MSDOS_NAME_NOT_FOUND_ERR;
}
40031c7c: 2a1703e0 mov w0, w23 <== NOT EXECUTED
40031c80: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40031c84: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40031c88: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40031c8c: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40031c90: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
40031c94: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
40031c98: d65f03c0 ret <== NOT EXECUTED
j++;
40031c9c: 0b18039c add w28, w28, w24 <== NOT EXECUTED
40031ca0: 17ffffdb b 40031c0c <msdos_find_node_by_cluster_num_in_fat_file+0x4c><== NOT EXECUTED
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40031ca4: 39405b40 ldrb w0, [x26, #22]
40031ca8: f240041f tst x0, #0x3
40031cac: 54fffa80 b.eq 40031bfc <msdos_find_node_by_cluster_num_in_fat_file+0x3c> // b.none<== NEVER TAKEN
bts2rd = fat_fd->fat_file_size;
40031cb0: b9402378 ldr w24, [x27, #32]
40031cb4: 17ffffd3 b 40031c00 <msdos_find_node_by_cluster_num_in_fat_file+0x40>
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM, j * bts2rd,
40031cb8: 2a1c03e3 mov w3, w28
40031cbc: aa1b03e1 mov x1, x27
40031cc0: aa1a03e0 mov x0, x26
40031cc4: aa1503e4 mov x4, x21
40031cc8: 52800022 mov w2, #0x1 // #1
40031ccc: 97fff6a5 bl 4002f760 <fat_file_ioctl>
40031cd0: 2a0003f7 mov w23, w0
if (rc != RC_OK)
40031cd4: 35fffd40 cbnz w0, 40031c7c <msdos_find_node_by_cluster_num_in_fat_file+0xbc><== NEVER TAKEN
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40031cd8: 12800000 mov w0, #0xffffffff // #-1
40031cdc: 290082b3 stp w19, w0, [x21, #4]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40031ce0: b9000ea0 str w0, [x21, #12]
memcpy(dir_entry, entry,
40031ce4: aa1403e1 mov x1, x20
40031ce8: aa1603e0 mov x0, x22
40031cec: d2800402 mov x2, #0x20 // #32
40031cf0: 940025c2 bl 4003b3f8 <memcpy>
}
40031cf4: 2a1703e0 mov w0, w23
40031cf8: a94153f3 ldp x19, x20, [sp, #16]
40031cfc: a9425bf5 ldp x21, x22, [sp, #32]
40031d00: a94363f7 ldp x23, x24, [sp, #48]
40031d04: a9446bf9 ldp x25, x26, [sp, #64]
40031d08: a94573fb ldp x27, x28, [sp, #80]
40031d0c: a8c67bfd ldp x29, x30, [sp], #96
40031d10: d65f03c0 ret
rtems_set_errno_and_return_minus_one( EIO );
40031d14: 94002316 bl 4003a96c <__errno> <== NOT EXECUTED
40031d18: 12800017 mov w23, #0xffffffff // #-1 <== NOT EXECUTED
40031d1c: 528000a1 mov w1, #0x5 // #5 <== NOT EXECUTED
40031d20: b9000001 str w1, [x0] <== NOT EXECUTED
40031d24: 17ffffd6 b 40031c7c <msdos_find_node_by_cluster_num_in_fat_file+0xbc><== NOT EXECUTED
assert(ret == bts2rd);
40031d28: 900000c3 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031d2c: 900000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031d30: 900000c0 adrp x0, 40049000 <IMFS_node_control_sym_link+0xe0> <== NOT EXECUTED
40031d34: 91114063 add x3, x3, #0x450 <== NOT EXECUTED
40031d38: 9111c042 add x2, x2, #0x470 <== NOT EXECUTED
40031d3c: 910ee000 add x0, x0, #0x3b8 <== NOT EXECUTED
40031d40: 5280fe21 mov w1, #0x7f1 // #2033 <== NOT EXECUTED
40031d44: 940012d7 bl 400368a0 <__assert_func> <== NOT EXECUTED
...
0000000040024600 <msdos_format>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
40024600: a9ac7bfd stp x29, x30, [sp, #-320]!
memset(&fmt_params, 0, sizeof(fmt_params));
/*
* open device for writing
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "open device\n");
40024604: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024608: 91288042 add x2, x2, #0xa20
{
4002460c: 910003fd mov x29, sp
40024610: a90153f3 stp x19, x20, [sp, #16]
40024614: aa0103f4 mov x20, x1
40024618: a9025bf5 stp x21, x22, [sp, #32]
4002461c: aa0003f6 mov x22, x0
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "open device\n");
40024620: aa0103e0 mov x0, x1
40024624: 52800041 mov w1, #0x2 // #2
memset(&fmt_params, 0, sizeof(fmt_params));
40024628: a907ffff stp xzr, xzr, [sp, #120]
4002462c: a908ffff stp xzr, xzr, [sp, #136]
40024630: a909ffff stp xzr, xzr, [sp, #152]
40024634: a90affff stp xzr, xzr, [sp, #168]
40024638: a90bffff stp xzr, xzr, [sp, #184]
4002463c: a90cffff stp xzr, xzr, [sp, #200]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "open device\n");
40024640: 97ffff3c bl 40024330 <msdos_format_printf>
fd = open(devname, O_RDWR);
40024644: 52800041 mov w1, #0x2 // #2
40024648: aa1603e0 mov x0, x22
4002464c: 97fff8d5 bl 400229a0 <open>
}
/*
* sanity check on device
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024650: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
fd = open(devname, O_RDWR);
40024654: 2a0003f3 mov w19, w0
if (fd == -1) {
40024658: 3100041f cmn w0, #0x1
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4002465c: aa1603e3 mov x3, x22
40024660: 9128c042 add x2, x2, #0xa30
40024664: aa1403e0 mov x0, x20
40024668: 52800041 mov w1, #0x2 // #2
if (fd == -1) {
4002466c: 540024e0 b.eq 40024b08 <msdos_format+0x508> // b.none <== NEVER TAKEN
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024670: 97ffff30 bl 40024330 <msdos_format_printf>
"stat check: %s\n", devname);
if (ret_val == 0) {
ret_val = fstat(fd, &stat_buf);
40024674: 910363e1 add x1, sp, #0xd8
40024678: 2a1303e0 mov w0, w19
4002467c: 97fff601 bl 40021e80 <fstat>
40024680: 2a0003f5 mov w21, w0
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
40024684: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024688: aa1603e3 mov x3, x22
4002468c: 91290042 add x2, x2, #0xa40
40024690: aa1403e0 mov x0, x20
40024694: 52800021 mov w1, #0x1 // #1
40024698: 97ffff26 bl 40024330 <msdos_format_printf>
"formating: %s\n", devname);
/* rtems feature: no block devices, all are character devices */
if ((ret_val == 0) && (!S_ISBLK(stat_buf.st_mode))) {
4002469c: 35002255 cbnz w21, 40024ae4 <msdos_format+0x4e4> <== NEVER TAKEN
400246a0: b940ebe0 ldr w0, [sp, #232]
400246a4: 12140c00 and w0, w0, #0xf000
400246a8: 7140181f cmp w0, #0x6, lsl #12
400246ac: 54002141 b.ne 40024ad4 <msdos_format+0x4d4> // b.any <== NEVER TAKEN
static inline int rtems_disk_fd_get_media_block_size(
int fd,
uint32_t *media_block_size
)
{
return ioctl(fd, RTEMS_BLKIO_GETMEDIABLKSIZE, media_block_size);
400246b0: 9101e3e2 add x2, sp, #0x78
400246b4: 2a1303e0 mov w0, w19
400246b8: d2884041 mov x1, #0x4202 // #16898
400246bc: f2a80081 movk x1, #0x4004, lsl #16
memset(fmt_params,0,sizeof(*fmt_params));
400246c0: a907ffff stp xzr, xzr, [sp, #120]
400246c4: a908ffff stp xzr, xzr, [sp, #136]
400246c8: a909ffff stp xzr, xzr, [sp, #152]
400246cc: a90affff stp xzr, xzr, [sp, #168]
400246d0: a90bffff stp xzr, xzr, [sp, #184]
400246d4: a90cffff stp xzr, xzr, [sp, #200]
400246d8: 9400205a bl 4002c840 <ioctl>
400246dc: b9407fe2 ldr w2, [sp, #124]
400246e0: 2a0003f5 mov w21, w0
if (ret_val == 0) {
400246e4: 34002380 cbz w0, 40024b54 <msdos_format+0x554> <== ALWAYS TAKEN
fmt_params->rsvd_sector_cnt
400246e8: b94083f6 ldr w22, [sp, #128]
if ( fmt_params->totl_sector_cnt == 0 )
400246ec: 350000c2 cbnz w2, 40024704 <msdos_format+0x104> <== ALWAYS TAKEN
errno = EINVAL;
400246f0: 9400589f bl 4003a96c <__errno> <== NOT EXECUTED
ret_val = -1;
400246f4: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
errno = EINVAL;
400246f8: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
400246fc: b9000001 str w1, [x0] <== NOT EXECUTED
fmt_params->rsvd_sector_cnt
40024700: b94083f6 ldr w22, [sp, #128] <== NOT EXECUTED
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
40024704: 3942a3e0 ldrb w0, [sp, #168]
40024708: b9408be2 ldr w2, [sp, #136]
if (fmt_params->root_dir_sectors > 0) {
4002470c: b94097e1 ldr w1, [sp, #148]
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
40024710: 1b025800 madd w0, w0, w2, w22
if (fmt_params->root_dir_sectors > 0) {
40024714: 34002181 cbz w1, 40024b44 <msdos_format+0x544>
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
40024718: 291307e0 stp w0, w1, [sp, #152]
if (ret_val == 0) {
4002471c: 35001e55 cbnz w21, 40024ae4 <msdos_format+0x4e4>
if ((rqdata != NULL) && (rqdata->OEMName != NULL)) {
40024720: a90363f7 stp x23, x24, [sp, #48]
40024724: a9046bf9 stp x25, x26, [sp, #64]
40024728: a90573fb stp x27, x28, [sp, #80]
4002472c: b4005134 cbz x20, 40025150 <msdos_format+0xb50>
40024730: f9400283 ldr x3, [x20]
40024734: b40050e3 cbz x3, 40025150 <msdos_format+0xb50>
if (isprint((unsigned char)*from)) {
40024738: 39400062 ldrb w2, [x3]
4002473c: d0000124 adrp x4, 4004a000 <fatal_source_text+0x558>
40024740: 91322484 add x4, x4, #0xc89
from = "RTEMS"; /* default: make "from" point to OS Name */
40024744: 9102afe1 add x1, sp, #0xab
40024748: 9102cfe6 add x6, sp, #0xb3
if (isprint((unsigned char)*from)) {
4002474c: 12800d05 mov w5, #0xffffff97 // #-105
40024750: 14000007 b 4002476c <msdos_format+0x16c>
40024754: 381ff022 sturb w2, [x1, #-1]
*to++ = *from++;
40024758: 91000463 add x3, x3, #0x1
*to = '\0';
4002475c: 3900003f strb wzr, [x1]
for (cnt = 0; cnt < (sizeof(fmt_params->OEMName)-1); cnt++) {
40024760: eb06003f cmp x1, x6
40024764: 540001a0 b.eq 40024798 <msdos_format+0x198> // b.none <== NEVER TAKEN
if (isprint((unsigned char)*from)) {
40024768: 39400062 ldrb w2, [x3]
4002476c: 92401c40 and x0, x2, #0xff
*to++ = *from++;
40024770: 91000421 add x1, x1, #0x1
if (isprint((unsigned char)*from)) {
40024774: 38606880 ldrb w0, [x4, x0]
40024778: 0a050000 and w0, w0, w5
4002477c: 12001c00 and w0, w0, #0xff
40024780: 35fffea0 cbnz w0, 40024754 <msdos_format+0x154>
*to++=' ';
40024784: 52800402 mov w2, #0x20 // #32
40024788: 381ff022 sturb w2, [x1, #-1]
*to = '\0';
4002478c: 3900003f strb wzr, [x1]
for (cnt = 0; cnt < (sizeof(fmt_params->OEMName)-1); cnt++) {
40024790: eb06003f cmp x1, x6
40024794: 54fffea1 b.ne 40024768 <msdos_format+0x168> // b.any
if ((rqdata != NULL) &&
40024798: b4004d54 cbz x20, 40025140 <msdos_format+0xb40>
(rqdata->VolLabel != NULL)) {
4002479c: f9400683 ldr x3, [x20, #8]
if ((rqdata != NULL) &&
400247a0: b4004d03 cbz x3, 40025140 <msdos_format+0xb40>
fmt_params->VolLabel_present = true;
400247a4: 52800020 mov w0, #0x1 // #1
400247a8: 390303e0 strb w0, [sp, #192]
if (isprint((unsigned char)*from)) {
400247ac: 39400062 ldrb w2, [x3]
400247b0: 9102ffe6 add x6, sp, #0xbf
from = ""; /* default: make "from" point to empty string */
400247b4: 9102d3e1 add x1, sp, #0xb4
if (isprint((unsigned char)*from)) {
400247b8: 12800d05 mov w5, #0xffffff97 // #-105
400247bc: 14000007 b 400247d8 <msdos_format+0x1d8>
400247c0: 381ff022 sturb w2, [x1, #-1]
*to++ = *from++;
400247c4: 91000463 add x3, x3, #0x1
*to = '\0';
400247c8: 3900003f strb wzr, [x1]
for (cnt = 0; cnt < (sizeof(fmt_params->VolLabel)-1); cnt++) {
400247cc: eb06003f cmp x1, x6
400247d0: 540001a0 b.eq 40024804 <msdos_format+0x204> // b.none <== NEVER TAKEN
if (isprint((unsigned char)*from)) {
400247d4: 39400062 ldrb w2, [x3]
400247d8: 92401c40 and x0, x2, #0xff
*to++ = *from++;
400247dc: 91000421 add x1, x1, #0x1
if (isprint((unsigned char)*from)) {
400247e0: 38606880 ldrb w0, [x4, x0]
400247e4: 0a050000 and w0, w0, w5
400247e8: 12001c00 and w0, w0, #0xff
400247ec: 35fffea0 cbnz w0, 400247c0 <msdos_format+0x1c0>
*to++=' ';
400247f0: 52800402 mov w2, #0x20 // #32
400247f4: 381ff022 sturb w2, [x1, #-1]
*to = '\0';
400247f8: 3900003f strb wzr, [x1]
for (cnt = 0; cnt < (sizeof(fmt_params->VolLabel)-1); cnt++) {
400247fc: eb06003f cmp x1, x6
40024800: 54fffea1 b.ne 400247d4 <msdos_format+0x1d4> // b.any
rc = rtems_clock_get_tod_timeval(&time_value);
40024804: 9101a3e0 add x0, sp, #0x68
40024808: 94000afa bl 400273f0 <rtems_clock_get_tod_timeval>
if (rc == RTEMS_SUCCESSFUL) {
4002480c: 35006ae0 cbnz w0, 40025568 <msdos_format+0xf68> <== ALWAYS TAKEN
*volid_ptr = time_value.tv_sec + time_value.tv_sec;
40024810: f94037e0 ldr x0, [sp, #104] <== NOT EXECUTED
40024814: 0b000000 add w0, w0, w0 <== NOT EXECUTED
40024818: b900c7e0 str w0, [sp, #196] <== NOT EXECUTED
if (ret_val == 0) {
ret_val = msdos_format_determine_fmt_params(fd,rqdata,&fmt_params);
}
if (ret_val == 0) {
fmt_params.sec = malloc(fmt_params.bytes_per_sector);
4002481c: b9407be0 ldr w0, [sp, #120]
40024820: 97fff658 bl 40022180 <malloc>
40024824: f9006be0 str x0, [sp, #208]
if (fmt_params.sec == NULL) {
40024828: b4003380 cbz x0, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
/*
* if requested, write whole disk/partition with 0xe5
*/
if ((ret_val == 0) &&
(rqdata != NULL) &&
4002482c: 52800019 mov w25, #0x0 // #0
if ((ret_val == 0) &&
40024830: b5002c14 cbnz x20, 40024db0 <msdos_format+0x7b0>
*/
if (ret_val == 0) {
/*
* Read the current MBR to obtain the partition table.
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024834: aa1403e0 mov x0, x20
40024838: 52800041 mov w1, #0x2 // #2
4002483c: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024840: 912b0042 add x2, x2, #0xac0
40024844: 97fffebb bl 40024330 <msdos_format_printf>
"read MRB sector\n");
ret_val = msdos_format_read_sec(fd,
40024848: b9407bf6 ldr w22, [sp, #120]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
4002484c: 2a1303e0 mov w0, w19
40024850: 52800002 mov w2, #0x0 // #0
40024854: d2800001 mov x1, #0x0 // #0
ret_val = msdos_format_read_sec(fd,
40024858: f9406bf5 ldr x21, [sp, #208]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
4002485c: 94002045 bl 4002c970 <lseek>
40024860: b7f831c0 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > read(fd,buffer,sector_size)) {
40024864: 2a1603e2 mov w2, w22
40024868: aa1503e1 mov x1, x21
4002486c: 2a1303e0 mov w0, w19
40024870: 940020e4 bl 4002cc00 <read>
40024874: b7f83120 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
0,
fmt_params.bytes_per_sector,
fmt_params.sec);
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024878: aa1403e0 mov x0, x20
4002487c: 52800041 mov w1, #0x2 // #2
40024880: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024884: 912b6042 add x2, x2, #0xad8
40024888: 97fffeaa bl 40024330 <msdos_format_printf>
if (fmt_params->totl_sector_cnt < 0x10000) {
4002488c: b9407fe0 ldr w0, [sp, #124]
40024890: 529fffe1 mov w1, #0xffff // #65535
40024894: 6b01001f cmp w0, w1
40024898: 54003de9 b.ls 40025054 <msdos_format+0xa54> // b.plast
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
4002489c: 12001c1b and w27, w0, #0xff
400248a0: d3483c1a ubfx x26, x0, #8, #8
400248a4: d3505c18 ubfx x24, x0, #16, #8
400248a8: 53187c17 lsr w23, w0, #24
400248ac: 52800016 mov w22, #0x0 // #0
400248b0: 5280001c mov w28, #0x0 // #0
"generate MRB sector\n");
ret_val = msdos_format_gen_mbr(fmt_params.sec,&fmt_params);
400248b4: f9406bf5 ldr x21, [sp, #208]
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
400248b8: d28037c2 mov x2, #0x1be // #446
400248bc: 52800001 mov w1, #0x0 // #0
400248c0: aa1503e0 mov x0, x21
400248c4: 94005ae8 bl 4003b464 <memset>
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
400248c8: 3907fabf strb wzr, [x21, #510]
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
400248cc: 9102afe1 add x1, sp, #0xab
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
400248d0: 3907febf strb wzr, [x21, #511]
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
400248d4: d2800102 mov x2, #0x8 // #8
400248d8: 91000ea0 add x0, x21, #0x3
400248dc: 94005ac7 bl 4003b3f8 <memcpy>
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
400248e0: b9407be0 ldr w0, [sp, #120]
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
400248e4: 52800041 mov w1, #0x2 // #2
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
400248e8: 39002ea0 strb w0, [x21, #11]
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
400248ec: 12800004 mov w4, #0xffffffff // #-1
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
400248f0: 390042a1 strb w1, [x21, #16]
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
400248f4: 528000c3 mov w3, #0x6 // #6
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
400248f8: 53087c00 lsr w0, w0, #8
400248fc: 390032a0 strb w0, [x21, #12]
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
40024900: 52800022 mov w2, #0x1 // #1
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
40024904: 295017e0 ldp w0, w5, [sp, #128]
40024908: 390036a5 strb w5, [x21, #13]
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
4002490c: 39003aa0 strb w0, [x21, #14]
40024910: 53087c05 lsr w5, w0, #8
40024914: 39003ea5 strb w5, [x21, #15]
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
40024918: b94093e0 ldr w0, [sp, #144]
4002491c: 390046a0 strb w0, [x21, #17]
40024920: b94093e0 ldr w0, [sp, #144]
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
40024924: 39004ebc strb w28, [x21, #19]
40024928: 390052b6 strb w22, [x21, #20]
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
4002492c: 53087c00 lsr w0, w0, #8
40024930: 39004aa0 strb w0, [x21, #18]
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
40024934: 3942a7e0 ldrb w0, [sp, #169]
40024938: 390056a0 strb w0, [x21, #21]
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
4002493c: 390062a4 strb w4, [x21, #24]
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
40024940: 39006aa3 strb w3, [x21, #26]
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
40024944: 390072a2 strb w2, [x21, #28]
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
40024948: 390082bb strb w27, [x21, #32]
4002494c: 390086ba strb w26, [x21, #33]
40024950: 39008ab8 strb w24, [x21, #34]
40024954: 39008eb7 strb w23, [x21, #35]
if (fmt_params->fattype != FAT_FAT32) {
40024958: 3942abe0 ldrb w0, [sp, #170]
4002495c: 7100101f cmp w0, #0x4
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
40024960: b9408be0 ldr w0, [sp, #136]
if (fmt_params->fattype != FAT_FAT32) {
40024964: 540058a0 b.eq 40025478 <msdos_format+0xe78> // b.none
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
40024968: 52800521 mov w1, #0x29 // #41
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
4002496c: 39005aa0 strb w0, [x21, #22]
40024970: 53087c00 lsr w0, w0, #8
40024974: 39005ea0 strb w0, [x21, #23]
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
40024978: 39009aa1 strb w1, [x21, #38]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
4002497c: d2800162 mov x2, #0xb // #11
40024980: 9102d3e1 add x1, sp, #0xb4
40024984: 9100aea0 add x0, x21, #0x2b
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
40024988: b940c7e3 ldr w3, [sp, #196]
4002498c: 39009ea3 strb w3, [x21, #39]
40024990: 53087c65 lsr w5, w3, #8
40024994: 53107c64 lsr w4, w3, #16
40024998: 53187c63 lsr w3, w3, #24
4002499c: 3900a2a5 strb w5, [x21, #40]
400249a0: 3900a6a4 strb w4, [x21, #41]
400249a4: 3900aaa3 strb w3, [x21, #42]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
400249a8: 94005a94 bl 4003b3f8 <memcpy>
memcpy(FAT_GET_ADDR_BR_FILSYSTYPE(mbr),
400249ac: 3942abe1 ldrb w1, [sp, #170]
400249b0: 90000120 adrp x0, 40048000 <bsp_section_rodata_begin+0x78>
400249b4: 91284000 add x0, x0, #0xa10
400249b8: d2800102 mov x2, #0x8 // #8
400249bc: 7100043f cmp w1, #0x1
400249c0: 90000121 adrp x1, 40048000 <bsp_section_rodata_begin+0x78>
400249c4: 91280021 add x1, x1, #0xa00
400249c8: 9a800021 csel x1, x1, x0, eq // eq = none
400249cc: 9100daa0 add x0, x21, #0x36
400249d0: 94005a8a bl 4003b3f8 <memcpy>
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
400249d4: 52800aa1 mov w1, #0x55 // #85
400249d8: 12800aa0 mov w0, #0xffffffaa // #-86
FAT_SET_VAL8(mbr,0,0xeb);
400249dc: 12800284 mov w4, #0xffffffeb // #-21
FAT_SET_VAL8(mbr,1,0x3c);
400249e0: 52800782 mov w2, #0x3c // #60
FAT_SET_VAL8(mbr,2,0x90);
400249e4: 12800de3 mov w3, #0xffffff90 // #-112
FAT_SET_VAL8(mbr,0,0xeb);
400249e8: 390002a4 strb w4, [x21]
FAT_SET_VAL8(mbr,1,0x3c);
400249ec: 390006a2 strb w2, [x21, #1]
/*
* write master boot record to disk
* also write copy of MBR to disk
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
400249f0: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
400249f4: 912c0042 add x2, x2, #0xb00
FAT_SET_VAL8(mbr,2,0x90);
400249f8: 39000aa3 strb w3, [x21, #2]
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
400249fc: 3907faa1 strb w1, [x21, #510]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024a00: 52800041 mov w1, #0x2 // #2
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
40024a04: 3907fea0 strb w0, [x21, #511]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024a08: aa1403e0 mov x0, x20
40024a0c: 97fffe49 bl 40024330 <msdos_format_printf>
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
40024a10: b9407bf6 ldr w22, [sp, #120]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024a14: 2a1303e0 mov w0, w19
40024a18: 52800002 mov w2, #0x0 // #0
40024a1c: d2800001 mov x1, #0x0 // #0
0,
fmt_params.bytes_per_sector,
fmt_params.sec);
40024a20: f9406bf5 ldr x21, [sp, #208]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024a24: 94001fd3 bl 4002c970 <lseek>
40024a28: b7f82380 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > write(fd,buffer,sector_size)) {
40024a2c: 2a1603e2 mov w2, w22
40024a30: aa1503e1 mov x1, x21
40024a34: 2a1303e0 mov w0, w19
40024a38: 97fffd12 bl 40023e80 <write>
40024a3c: b7f822e0 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
}
if ((ret_val == 0) &&
40024a40: b940a3e0 ldr w0, [sp, #160]
40024a44: 34000260 cbz w0, 40024a90 <msdos_format+0x490>
(fmt_params.mbr_copy_sec != 0)) {
/*
* write copy of MBR
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024a48: aa1403e0 mov x0, x20
40024a4c: 52800041 mov w1, #0x2 // #2
40024a50: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024a54: 912c6042 add x2, x2, #0xb18
40024a58: 97fffe36 bl 40024330 <msdos_format_printf>
"write back up MRB sector\n");
ret_val = msdos_format_write_sec(fd,
40024a5c: b9407bf5 ldr w21, [sp, #120]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024a60: b940a3e1 ldr w1, [sp, #160]
40024a64: 2a1303e0 mov w0, w19
40024a68: 52800002 mov w2, #0x0 // #0
fmt_params.mbr_copy_sec ,
fmt_params.bytes_per_sector,
fmt_params.sec);
40024a6c: f9406bf6 ldr x22, [sp, #208]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024a70: 9ba17ea1 umull x1, w21, w1
40024a74: 94001fbf bl 4002c970 <lseek>
40024a78: b7f82100 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > write(fd,buffer,sector_size)) {
40024a7c: 2a1503e2 mov w2, w21
40024a80: aa1603e1 mov x1, x22
40024a84: 2a1303e0 mov w0, w19
40024a88: 97fffcfe bl 40023e80 <write>
40024a8c: b7f82060 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
}
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
40024a90: b940a7e0 ldr w0, [sp, #164]
40024a94: 35001a80 cbnz w0, 40024de4 <msdos_format+0x7e4>
ret_val = msdos_format_fill_sectors
(&fmt_params,
rqdata,
fd,
fmt_params.rsvd_sector_cnt, /* start sector */
fmt_params.fat_num*fmt_params.sectors_per_fat,/* sector count */
40024a98: 3942a3e6 ldrb w6, [sp, #168]
ret_val = msdos_format_fill_sectors
40024a9c: 2a1303e2 mov w2, w19
40024aa0: b9408be4 ldr w4, [sp, #136]
40024aa4: aa1403e1 mov x1, x20
40024aa8: b94083e3 ldr w3, [sp, #128]
40024aac: 9101e3e0 add x0, sp, #0x78
40024ab0: 52800005 mov w5, #0x0 // #0
40024ab4: 1b047cc4 mul w4, w6, w4
40024ab8: 97fffe6a bl 40024460 <msdos_format_fill_sectors>
40024abc: 2a0003f5 mov w21, w0
}
/*
* clear/init root directory
* -> write all directory sectors as 0x00
*/
if (ret_val == 0) {
40024ac0: 34001f60 cbz w0, 40024eac <msdos_format+0x8ac> <== ALWAYS TAKEN
40024ac4: a94363f7 ldp x23, x24, [sp, #48]
40024ac8: a9446bf9 ldp x25, x26, [sp, #64]
40024acc: a94573fb ldp x27, x28, [sp, #80]
40024ad0: 14000005 b 40024ae4 <msdos_format+0x4e4>
errno = ENOTTY;
40024ad4: 940057a6 bl 4003a96c <__errno> <== NOT EXECUTED
ret_val = -1;
40024ad8: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
errno = ENOTTY;
40024adc: 52800321 mov w1, #0x19 // #25 <== NOT EXECUTED
40024ae0: b9000001 str w1, [x0] <== NOT EXECUTED
* cleanup:
* sync and unlock disk
* free any data structures (not needed now)
*/
if (fd != -1) {
close(fd);
40024ae4: 2a1303e0 mov w0, w19
40024ae8: 97fff42e bl 40021ba0 <close>
}
free(fmt_params.sec);
40024aec: f9406be0 ldr x0, [sp, #208]
40024af0: 97fff4a4 bl 40021d80 <free>
return ret_val;
}
40024af4: 2a1503e0 mov w0, w21
40024af8: a94153f3 ldp x19, x20, [sp, #16]
40024afc: a9425bf5 ldp x21, x22, [sp, #32]
40024b00: a8d47bfd ldp x29, x30, [sp], #320
40024b04: d65f03c0 ret
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024b08: 97fffe0a bl 40024330 <msdos_format_printf> <== NOT EXECUTED
ret_val= -1;
40024b0c: 2a1303f5 mov w21, w19 <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
40024b10: aa1603e3 mov x3, x22 <== NOT EXECUTED
40024b14: aa1403e0 mov x0, x20 <== NOT EXECUTED
40024b18: 52800021 mov w1, #0x1 // #1 <== NOT EXECUTED
40024b1c: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78> <== NOT EXECUTED
40024b20: 91290042 add x2, x2, #0xa40 <== NOT EXECUTED
40024b24: 97fffe03 bl 40024330 <msdos_format_printf> <== NOT EXECUTED
free(fmt_params.sec);
40024b28: f9406be0 ldr x0, [sp, #208] <== NOT EXECUTED
40024b2c: 97fff495 bl 40021d80 <free> <== NOT EXECUTED
}
40024b30: 2a1503e0 mov w0, w21 <== NOT EXECUTED
40024b34: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40024b38: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40024b3c: a8d47bfd ldp x29, x30, [sp], #320 <== NOT EXECUTED
40024b40: d65f03c0 ret <== NOT EXECUTED
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
40024b44: b94087e1 ldr w1, [sp, #132]
40024b48: 291307e0 stp w0, w1, [sp, #152]
if (ret_val == 0) {
40024b4c: 35fffcd5 cbnz w21, 40024ae4 <msdos_format+0x4e4>
40024b50: 17fffef4 b 40024720 <msdos_format+0x120>
static inline int rtems_disk_fd_get_block_count(
int fd,
rtems_blkdev_bnum *block_count
)
{
return ioctl(fd, RTEMS_BLKIO_GETSIZE, block_count);
40024b54: 9101f3e2 add x2, sp, #0x7c
40024b58: 2a1303e0 mov w0, w19
40024b5c: d28840a1 mov x1, #0x4205 // #16901
40024b60: f2a80081 movk x1, #0x4004, lsl #16
40024b64: 94001f37 bl 4002c840 <ioctl>
40024b68: 2a0003f5 mov w21, w0
if (ret_val == 0) {
40024b6c: 35002e60 cbnz w0, 40025138 <msdos_format+0xb38> <== NEVER TAKEN
total_size = (uint64_t)fmt_params->bytes_per_sector * fmt_params->totl_sector_cnt;
40024b70: 294f13e3 ldp w3, w4, [sp, #120]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024b74: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024b78: 91294042 add x2, x2, #0xa50
40024b7c: aa1403e0 mov x0, x20
40024b80: 52800041 mov w1, #0x2 // #2
total_size = (uint64_t)fmt_params->bytes_per_sector * fmt_params->totl_sector_cnt;
40024b84: 9ba47c76 umull x22, w3, w4
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024b88: aa1603e5 mov x5, x22
40024b8c: 97fffde9 bl 40024330 <msdos_format_printf>
if ((rqdata == NULL) || (rqdata->fat_num == 0)) {
40024b90: b4003e14 cbz x20, 40025350 <msdos_format+0xd50>
40024b94: b9401683 ldr w3, [x20, #20]
40024b98: 34002e43 cbz w3, 40025160 <msdos_format+0xb60>
else if (rqdata->fat_num <= 6) {
40024b9c: 7100187f cmp w3, #0x6
40024ba0: 54002c48 b.hi 40025128 <msdos_format+0xb28> // b.pmore
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024ba4: 90000122 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40024ba8: aa1403e0 mov x0, x20
40024bac: 912a2042 add x2, x2, #0xa88
40024bb0: 52800041 mov w1, #0x2 // #2
fmt_params->fat_num = rqdata->fat_num;
40024bb4: 3902a3e3 strb w3, [sp, #168]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024bb8: 97fffdde bl 40024330 <msdos_format_printf>
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
40024bbc: b9401280 ldr w0, [x20, #16]
40024bc0: 34003d80 cbz w0, 40025370 <msdos_format+0xd70>
if (fmt_params->totl_sector_cnt < FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
40024bc4: 5281fea1 mov w1, #0xff5 // #4085
40024bc8: 1b017c01 mul w1, w0, w1
40024bcc: b9407fe2 ldr w2, [sp, #124]
40024bd0: 6b01005f cmp w2, w1
40024bd4: 54003d42 b.cs 4002537c <msdos_format+0xd7c> // b.hs, b.nlast
fmt_params->fattype = FAT_FAT12;
40024bd8: 52800020 mov w0, #0x1 // #1
fmt_params->sectors_per_cluster = 2;
40024bdc: 52800041 mov w1, #0x2 // #2
40024be0: b90087e1 str w1, [sp, #132]
fmt_params->fattype = FAT_FAT12;
40024be4: 3902abe0 strb w0, [sp, #170]
ret_val = msdos_set_sectors_per_cluster_from_request( rqdata, fmt_params );
40024be8: 9101e3e1 add x1, sp, #0x78
40024bec: aa1403e0 mov x0, x20
40024bf0: 97fffdfc bl 400243e0 <msdos_set_sectors_per_cluster_from_request>
40024bf4: 2a0003f5 mov w21, w0
if (ret_val == 0) {
40024bf8: 35002a00 cbnz w0, 40025138 <msdos_format+0xb38> <== NEVER TAKEN
40024bfc: 3942abe1 ldrb w1, [sp, #170]
&& fmt_params->totl_sector_cnt > 0 ) {
40024c00: b9407fea ldr w10, [sp, #124]
40024c04: a90363f7 stp x23, x24, [sp, #48]
uint32_t gigs = ( total_size + ONE_GB ) / ONE_GB;
40024c08: d2a80017 mov x23, #0x40000000 // #1073741824
40024c0c: 8b1702d6 add x22, x22, x23
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024c10: 90000138 adrp x24, 40048000 <bsp_section_rodata_begin+0x78>
40024c14: 912a8318 add x24, x24, #0xaa0
40024c18: a9046bf9 stp x25, x26, [sp, #64]
fmt_params->mbr_copy_sec = 6;
40024c1c: d28000d9 mov x25, #0x6 // #6
uint32_t gigs = ( total_size + ONE_GB ) / ONE_GB;
40024c20: d35ef6d7 ubfx x23, x22, #30, #32
&& fmt_params->totl_sector_cnt > 0 ) {
40024c24: 52801ffa mov w26, #0xff // #255
40024c28: 52800016 mov w22, #0x0 // #0
fmt_params->mbr_copy_sec = 6;
40024c2c: f2c00039 movk x25, #0x1, lsl #32
&& fmt_params->fattype != fat_type
40024c30: 6b1a003f cmp w1, w26
40024c34: 54003bc0 b.eq 400253ac <msdos_format+0xdac> // b.none
&& fmt_params->totl_sector_cnt > 0 ) {
40024c38: 340041aa cbz w10, 4002546c <msdos_format+0xe6c> <== NEVER TAKEN
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024c3c: b94087e3 ldr w3, [sp, #132]
if (ret_val == 0 && rqdata != NULL)
40024c40: b4003334 cbz x20, 400252a4 <msdos_format+0xca4>
fmt_params->skip_alignment = rqdata->skip_alignment;
40024c44: 39407a84 ldrb w4, [x20, #30]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024c48: aa1803e2 mov x2, x24
40024c4c: aa1403e0 mov x0, x20
40024c50: 52800041 mov w1, #0x2 // #2
fmt_params->skip_alignment = rqdata->skip_alignment;
40024c54: 390323e4 strb w4, [sp, #200]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40024c58: 97fffdb6 bl 40024330 <msdos_format_printf>
if (fmt_params->fattype == FAT_FAT32) {
40024c5c: 3942abfa ldrb w26, [sp, #170]
40024c60: 7100135f cmp w26, #0x4
40024c64: 540032e0 b.eq 400252c0 <msdos_format+0xcc0> // b.none
(rqdata->files_per_root_dir > 0)) {
40024c68: b9401a80 ldr w0, [x20, #24]
fmt_params->rsvd_sector_cnt = 1;
40024c6c: 52800029 mov w9, #0x1 // #1
40024c70: b90083e9 str w9, [sp, #128]
if ((rqdata != NULL) &&
40024c74: 340033e0 cbz w0, 400252f0 <msdos_format+0xcf0>
fmt_params->files_per_root_dir = rqdata->files_per_root_dir;
40024c78: 51000400 sub w0, w0, #0x1
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
40024c7c: 2a1a03e3 mov w3, w26
(2*fmt_params->bytes_per_sector/
40024c80: b9407be4 ldr w4, [sp, #120]
40024c84: d3447881 ubfx x1, x4, #4, #27
fmt_params->files_per_root_dir = (fmt_params->files_per_root_dir +
40024c88: 0b010000 add w0, w0, w1
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
40024c8c: 1ac10806 udiv w6, w0, w1
40024c90: 1b0180c6 msub w6, w6, w1, w0
40024c94: 4b060006 sub w6, w0, w6
40024c98: b90093e6 str w6, [sp, #144]
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
40024c9c: 531b68c6 lsl w6, w6, #5
fmt_params->root_dir_sectors =
40024ca0: 51000488 sub w8, w4, #0x1
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
40024ca4: 52a00020 mov w0, #0x10000 // #65536
+ fmt_params->bytes_per_sector - 1)
40024ca8: 0b0800c6 add w6, w6, w8
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
40024cac: b94087e1 ldr w1, [sp, #132]
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
40024cb0: 1ac40800 udiv w0, w0, w4
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
40024cb4: 3942a3e7 ldrb w7, [sp, #168]
40024cb8: 394323e5 ldrb w5, [sp, #200]
/ fmt_params->bytes_per_sector);
40024cbc: 1ac408c6 udiv w6, w6, w4
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
40024cc0: b9407fea ldr w10, [sp, #124]
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
40024cc4: 6b00003f cmp w1, w0
fmt_params->root_dir_sectors =
40024cc8: b90097e6 str w6, [sp, #148]
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
40024ccc: 54000089 b.ls 40024cdc <msdos_format+0x6dc> // b.plast <== ALWAYS TAKEN
sectors_per_cluster /= 2;
40024cd0: 53017c21 lsr w1, w1, #1 <== NOT EXECUTED
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
40024cd4: 6b00003f cmp w1, w0 <== NOT EXECUTED
40024cd8: 54ffffc8 b.hi 40024cd0 <msdos_format+0x6d0> // b.pmore <== NOT EXECUTED
fatdata_sect_cnt = total_sector_cnt
40024cdc: 4b09014c sub w12, w10, w9
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024ce0: 510004cd sub w13, w6, #0x1
40024ce4: 51000529 sub w9, w9, #0x1
((fattype == FAT_FAT16) && (*data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
40024ce8: 529ffeab mov w11, #0xfff5 // #65525
40024cec: d503201f nop
if (! skip_alignment)
40024cf0: 350024a5 cbnz w5, 40025184 <msdos_format+0xb84>
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024cf4: 4b0103e2 neg w2, w1
40024cf8: 0b010120 add w0, w9, w1
40024cfc: 0a020000 and w0, w0, w2
if (fattype == FAT_FAT12) {
40024d00: 7100047f cmp w3, #0x1
fatdata_sect_cnt = total_sector_cnt
40024d04: 4b000140 sub w0, w10, w0
if (fattype == FAT_FAT12) {
40024d08: 54002c20 b.eq 4002528c <msdos_format+0xc8c> // b.none
else if (fattype == FAT_FAT16) {
40024d0c: 7100087f cmp w3, #0x2
40024d10: 54002c40 b.eq 40025298 <msdos_format+0xc98> // b.none
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
40024d14: 1ac10800 udiv w0, w0, w1
fat_capacity = fatdata_cluster_cnt * 4;
40024d18: 531e7402 lsl w2, w0, #2
+ (bytes_per_sector - 1))
40024d1c: 0b080042 add w2, w2, w8
40024d20: 5100042f sub w15, w1, #0x1
sectors_per_fat = ((fat_capacity
40024d24: 1ac40842 udiv w2, w2, w4
fat_sectors_cnt = loc_align_object (sectors_per_fat * fat_num,
40024d28: 1b077c42 mul w2, w2, w7
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024d2c: 0b0201ee add w14, w15, w2
if (! skip_alignment)
40024d30: 35000085 cbnz w5, 40024d40 <msdos_format+0x740>
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024d34: 4b0103e2 neg w2, w1
40024d38: 0a0e0042 and w2, w2, w14
+ (sectors_per_cluster - 1))
40024d3c: 0b0201ee add w14, w15, w2
/ sectors_per_cluster));
40024d40: 1ac109ce udiv w14, w14, w1
if (((fattype == FAT_FAT12) && (*data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
40024d44: 7100047f cmp w3, #0x1
*data_cluster_cnt = (fatdata_cluster_cnt -
40024d48: 4b0e0000 sub w0, w0, w14
if (((fattype == FAT_FAT12) && (*data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
40024d4c: 54002300 b.eq 400251ac <msdos_format+0xbac> // b.none
40024d50: 7100087f cmp w3, #0x2
40024d54: 54002301 b.ne 400251b4 <msdos_format+0xbb4> // b.any
((fattype == FAT_FAT16) && (*data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
40024d58: 6b0b001f cmp w0, w11
40024d5c: 540024c9 b.ls 400251f4 <msdos_format+0xbf4> // b.plast
sectors_per_cluster *= 2;
40024d60: 0b010021 add w1, w1, w1
} else if ((sectors_per_cluster * bytes_per_sector)
40024d64: 1b017c8e mul w14, w4, w1
40024d68: 714041df cmp w14, #0x10, lsl #12
40024d6c: 54fffc29 b.ls 40024cf0 <msdos_format+0x6f0> // b.plast <== ALWAYS TAKEN
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
40024d70: 1ac70842 udiv w2, w2, w7 <== NOT EXECUTED
uint32_t ms_sectors_per_cluster_limit_FAT16 =
40024d74: 52900023 mov w3, #0x8001 // #32769 <== NOT EXECUTED
40024d78: 1ac40864 udiv w4, w3, w4 <== NOT EXECUTED
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
40024d7c: 29108be1 stp w1, w2, [sp, #132] <== NOT EXECUTED
&& sectors_per_cluster <= ms_sectors_per_cluster_limit_FAT16 ) {
40024d80: 529ffe82 mov w2, #0xfff4 // #65524
40024d84: 6b02001f cmp w0, w2
else if ( number_of_clusters < FAT_FAT16_MAX_CLN
40024d88: 7a419080 ccmp w4, w1, #0x0, ls // ls = plast
40024d8c: 54002c63 b.cc 40025318 <msdos_format+0xd18> // b.lo, b.ul, b.last
fattype = FAT_FAT16;
40024d90: 52800040 mov w0, #0x2 // #2
fmt_params->fattype = msdos_get_fat_type(
40024d94: 3902abe0 strb w0, [sp, #170]
if (fat_type != fmt_params->fattype) {
40024d98: 6b1a001f cmp w0, w26
40024d9c: 54002421 b.ne 40025220 <msdos_format+0xc20> // b.any
++iteration_cnt;
40024da0: 110006d6 add w22, w22, #0x1
40024da4: 3942abe1 ldrb w1, [sp, #170]
40024da8: 12001ed6 and w22, w22, #0xff
while( ret_val == 0
40024dac: 17ffffa1 b 40024c30 <msdos_format+0x630>
(rqdata != NULL) &&
40024db0: 39407680 ldrb w0, [x20, #29]
40024db4: 35000140 cbnz w0, 40024ddc <msdos_format+0x7dc> <== ALWAYS TAKEN
ret_val = msdos_format_fill_sectors
40024db8: b9407fe4 ldr w4, [sp, #124] <== NOT EXECUTED
40024dbc: 2a1303e2 mov w2, w19 <== NOT EXECUTED
40024dc0: aa1403e1 mov x1, x20 <== NOT EXECUTED
40024dc4: 9101e3e0 add x0, sp, #0x78 <== NOT EXECUTED
40024dc8: 12800345 mov w5, #0xffffffe5 // #-27 <== NOT EXECUTED
40024dcc: 52800003 mov w3, #0x0 // #0 <== NOT EXECUTED
40024dd0: 97fffda4 bl 40024460 <msdos_format_fill_sectors> <== NOT EXECUTED
40024dd4: 2a0003f5 mov w21, w0 <== NOT EXECUTED
if (ret_val == 0) {
40024dd8: 35ffe760 cbnz w0, 40024ac4 <msdos_format+0x4c4> <== NOT EXECUTED
*to++=' ';
40024ddc: 52800039 mov w25, #0x1 // #1
40024de0: 17fffe95 b 40024834 <msdos_format+0x234>
ret_val = msdos_format_gen_fsinfo(fmt_params.sec);
40024de4: f9406be3 ldr x3, [sp, #208]
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
40024de8: d2804002 mov x2, #0x200 // #512
40024dec: 52800001 mov w1, #0x0 // #0
40024df0: aa0303e0 mov x0, x3
40024df4: 9400599c bl 4003b464 <memset>
40024df8: aa0003e3 mov x3, x0
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
40024dfc: 52800c22 mov w2, #0x61 // #97
40024e00: 52800a40 mov w0, #0x52 // #82
40024e04: 52800824 mov w4, #0x41 // #65
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
40024e08: 52800e45 mov w5, #0x72 // #114
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
40024e0c: 39000060 strb w0, [x3]
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
40024e10: 52800aa7 mov w7, #0x55 // #85
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
40024e14: 39000460 strb w0, [x3, #1]
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
40024e18: 12800aa6 mov w6, #0xffffffaa // #-86
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
40024e1c: 39000862 strb w2, [x3, #2]
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO, 0xffffffff);
40024e20: 12800000 mov w0, #0xffffffff // #-1
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
40024e24: 39000c64 strb w4, [x3, #3]
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
40024e28: 39079065 strb w5, [x3, #484]
(fmt_params.fsinfo_sec != 0)) {
40024e2c: b940a7e1 ldr w1, [sp, #164]
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
40024e30: 39079465 strb w5, [x3, #485]
40024e34: 39079864 strb w4, [x3, #486]
40024e38: 39079c62 strb w2, [x3, #487]
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO, 0xffffffff);
40024e3c: 3907a060 strb w0, [x3, #488]
40024e40: 3907a460 strb w0, [x3, #489]
40024e44: 3907a860 strb w0, [x3, #490]
40024e48: 3907ac60 strb w0, [x3, #491]
FAT_SET_FSINFO_NEXT_FREE_CLUSTER (fsinfo+FAT_FSI_INFO, 0xffffffff);
40024e4c: 3907b060 strb w0, [x3, #492]
40024e50: 3907b460 strb w0, [x3, #493]
40024e54: 3907b860 strb w0, [x3, #494]
40024e58: 3907bc60 strb w0, [x3, #495]
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
40024e5c: 3907f867 strb w7, [x3, #510]
40024e60: 3907fc66 strb w6, [x3, #511]
if ((ret_val == 0) &&
40024e64: 34ffe1a1 cbz w1, 40024a98 <msdos_format+0x498> <== NEVER TAKEN
ret_val = msdos_format_write_sec(fd,
40024e68: b9407bf5 ldr w21, [sp, #120]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024e6c: 2a1303e0 mov w0, w19
40024e70: 52800002 mov w2, #0x0 // #0
fmt_params.sec);
40024e74: f9406bf6 ldr x22, [sp, #208]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024e78: 9bb57c21 umull x1, w1, w21
40024e7c: 94001ebd bl 4002c970 <lseek>
40024e80: b7f800c0 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > write(fd,buffer,sector_size)) {
40024e84: 2a1503e2 mov w2, w21
40024e88: aa1603e1 mov x1, x22
40024e8c: 2a1303e0 mov w0, w19
40024e90: 97fffbfc bl 40023e80 <write>
40024e94: b6ffe020 tbz x0, #63, 40024a98 <msdos_format+0x498> <== ALWAYS TAKEN
ret_val = -1;
40024e98: 12800015 mov w21, #0xffffffff // #-1 <== NOT EXECUTED
40024e9c: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40024ea0: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40024ea4: a94573fb ldp x27, x28, [sp, #80] <== NOT EXECUTED
40024ea8: 17ffff0f b 40024ae4 <msdos_format+0x4e4> <== NOT EXECUTED
ret_val = msdos_format_fill_sectors
40024eac: 295313e3 ldp w3, w4, [sp, #152]
40024eb0: 9101e3e0 add x0, sp, #0x78
40024eb4: 2a1303e2 mov w2, w19
40024eb8: aa1403e1 mov x1, x20
40024ebc: 52800005 mov w5, #0x0 // #0
40024ec0: 97fffd68 bl 40024460 <msdos_format_fill_sectors>
40024ec4: 2a0003f5 mov w21, w0
if ((ret_val == 0) && fmt_params.VolLabel_present) {
40024ec8: 35ffdfe0 cbnz w0, 40024ac4 <msdos_format+0x4c4> <== NEVER TAKEN
40024ecc: 394303e1 ldrb w1, [sp, #192]
memset(fmt_params.sec,0,fmt_params.bytes_per_sector);
40024ed0: b9407be2 ldr w2, [sp, #120]
40024ed4: f9406be0 ldr x0, [sp, #208]
if ((ret_val == 0) && fmt_params.VolLabel_present) {
40024ed8: 350008c1 cbnz w1, 40024ff0 <msdos_format+0x9f0>
memset(fmt_params.sec,0,fmt_params.bytes_per_sector);
40024edc: 52800001 mov w1, #0x0 // #0
40024ee0: 94005961 bl 4003b464 <memset>
switch(fmt_params.fattype) {
40024ee4: 3942abe0 ldrb w0, [sp, #170]
40024ee8: 7100081f cmp w0, #0x2
40024eec: 54001040 b.eq 400250f4 <msdos_format+0xaf4> // b.none
40024ef0: 7100101f cmp w0, #0x4
40024ef4: 54000d40 b.eq 4002509c <msdos_format+0xa9c> // b.none
40024ef8: 7100041f cmp w0, #0x1
40024efc: 54000ba0 b.eq 40025070 <msdos_format+0xa70> // b.none <== ALWAYS TAKEN
errno = EINVAL;
40024f00: 9400569b bl 4003a96c <__errno> <== NOT EXECUTED
ret_val = -1;
40024f04: 1280001a mov w26, #0xffffffff // #-1 <== NOT EXECUTED
errno = EINVAL;
40024f08: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
40024f0c: b9000001 str w1, [x0] <== NOT EXECUTED
if (fmt_params.fattype == FAT_FAT32) {
40024f10: 3942abe0 ldrb w0, [sp, #170]
40024f14: 7100101f cmp w0, #0x4
40024f18: 54000181 b.ne 40024f48 <msdos_format+0x948> // b.any
FAT_SET_VAL32(fmt_params.sec,8,FAT_FAT32_EOC);
40024f1c: f9406be2 ldr x2, [sp, #208]
40024f20: 128000e3 mov w3, #0xfffffff8 // #-8
40024f24: 12800000 mov w0, #0xffffffff // #-1
40024f28: 528001e1 mov w1, #0xf // #15
40024f2c: 39002043 strb w3, [x2, #8]
40024f30: f9406be2 ldr x2, [sp, #208]
40024f34: 39002440 strb w0, [x2, #9]
40024f38: f9406be2 ldr x2, [sp, #208]
40024f3c: 39002840 strb w0, [x2, #10]
40024f40: f9406be0 ldr x0, [sp, #208]
40024f44: 39002c01 strb w1, [x0, #11]
start_sector = loc_align_object (fmt_params.rsvd_sector_cnt,
40024f48: 295007f8 ldp w24, w1, [sp, #128]
for (i = 0;
40024f4c: 3942a3e2 ldrb w2, [sp, #168]
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024f50: 0b010300 add w0, w24, w1
if (! skip_alignment)
40024f54: 394323e3 ldrb w3, [sp, #200]
return (sectors + clustersize - 1) & ~(clustersize - 1);
40024f58: 51000400 sub w0, w0, #0x1
40024f5c: 4b0103e1 neg w1, w1
40024f60: 7100007f cmp w3, #0x0
40024f64: 0a010000 and w0, w0, w1
40024f68: 1a980018 csel w24, w0, w24, eq // eq = none
for (i = 0;
40024f6c: 34003042 cbz w2, 40025574 <msdos_format+0xf74> <== NEVER TAKEN
40024f70: 52800016 mov w22, #0x0 // #0
(i < fmt_params.fat_num) && (ret_val == 0);
40024f74: 35fff93a cbnz w26, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
+ (i * fmt_params.sectors_per_fat),
40024f78: b9408be1 ldr w1, [sp, #136]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024f7c: 2a1303e0 mov w0, w19
ret_val = msdos_format_write_sec
40024f80: b9407bf7 ldr w23, [sp, #120]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024f84: 52800002 mov w2, #0x0 // #0
fmt_params.sec);
40024f88: f9406bfb ldr x27, [sp, #208]
ret_val = msdos_format_write_sec
40024f8c: 1b0162c1 madd w1, w22, w1, w24
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40024f90: 110006d6 add w22, w22, #0x1
40024f94: 9bb77c21 umull x1, w1, w23
40024f98: 94001e76 bl 4002c970 <lseek>
40024f9c: b7fff7e0 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > write(fd,buffer,sector_size)) {
40024fa0: 2a1703e2 mov w2, w23
40024fa4: aa1b03e1 mov x1, x27
40024fa8: 2a1303e0 mov w0, w19
40024fac: 97fffbb5 bl 40023e80 <write>
40024fb0: b7fff740 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
(i < fmt_params.fat_num) && (ret_val == 0);
40024fb4: 3942a3e0 ldrb w0, [sp, #168]
for (i = 0;
40024fb8: 6b0002df cmp w22, w0
40024fbc: 54fffdeb b.lt 40024f78 <msdos_format+0x978> // b.tstop
if (ret_val == 0 && rqdata != NULL && rqdata->sync_device) {
40024fc0: 34002f79 cbz w25, 400255ac <msdos_format+0xfac>
40024fc4: 39407e80 ldrb w0, [x20, #31]
40024fc8: 34ffd7e0 cbz w0, 40024ac4 <msdos_format+0x4c4>
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
}
static inline int rtems_disk_fd_sync(int fd)
{
return ioctl(fd, RTEMS_BLKIO_SYNCDEV);
40024fcc: 2a1303e0 mov w0, w19
40024fd0: d28840c1 mov x1, #0x4206 // #16902
40024fd4: f2a40001 movk x1, #0x2000, lsl #16
40024fd8: 94001e1a bl 4002c840 <ioctl>
40024fdc: 2a0003f5 mov w21, w0
40024fe0: a94363f7 ldp x23, x24, [sp, #48]
40024fe4: a9446bf9 ldp x25, x26, [sp, #64]
40024fe8: a94573fb ldp x27, x28, [sp, #80]
40024fec: 17fffebe b 40024ae4 <msdos_format+0x4e4>
memset(fmt_params.sec,0,fmt_params.bytes_per_sector);
40024ff0: 52800001 mov w1, #0x0 // #0
40024ff4: 9400591c bl 4003b464 <memset>
memcpy(MSDOS_DIR_NAME(fmt_params.sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
40024ff8: f9406be0 ldr x0, [sp, #208]
40024ffc: 9102d3e1 add x1, sp, #0xb4
40025000: d2800162 mov x2, #0xb // #11
40025004: 940058fd bl 4003b3f8 <memcpy>
ret_val = msdos_format_write_sec
40025008: b9407bf6 ldr w22, [sp, #120]
*MSDOS_DIR_ATTR(fmt_params.sec) = MSDOS_ATTR_VOLUME_ID;
4002500c: f9406be1 ldr x1, [sp, #208]
40025010: 52800103 mov w3, #0x8 // #8
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40025014: 2a1303e0 mov w0, w19
40025018: 52800002 mov w2, #0x0 // #0
*MSDOS_DIR_ATTR(fmt_params.sec) = MSDOS_ATTR_VOLUME_ID;
4002501c: 39002c23 strb w3, [x1, #11]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40025020: b9409be1 ldr w1, [sp, #152]
fmt_params.sec);
40025024: f9406bf7 ldr x23, [sp, #208]
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
40025028: 9ba17ec1 umull x1, w22, w1
4002502c: 94001e51 bl 4002c970 <lseek>
40025030: b7fff340 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
if (0 > write(fd,buffer,sector_size)) {
40025034: 2a1603e2 mov w2, w22
40025038: aa1703e1 mov x1, x23
4002503c: 2a1303e0 mov w0, w19
40025040: 97fffb90 bl 40023e80 <write>
40025044: b7fff2a0 tbnz x0, #63, 40024e98 <msdos_format+0x898> <== NEVER TAKEN
memset(fmt_params.sec,0,fmt_params.bytes_per_sector);
40025048: b9407be2 ldr w2, [sp, #120]
4002504c: f9406be0 ldr x0, [sp, #208]
40025050: 17ffffa3 b 40024edc <msdos_format+0x8dc>
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
40025054: 12001c1c and w28, w0, #0xff
40025058: d3483c16 ubfx x22, x0, #8, #8
4002505c: 52800017 mov w23, #0x0 // #0
40025060: 52800018 mov w24, #0x0 // #0
40025064: 5280001a mov w26, #0x0 // #0
40025068: 5280001b mov w27, #0x0 // #0
4002506c: 17fffe12 b 400248b4 <msdos_format+0x2b4>
FAT_SET_VAL8(fmt_params.sec,0,(fmt_params.media_code));
40025070: f9406be0 ldr x0, [sp, #208]
FAT_SET_VAL8(fmt_params.sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
40025074: 12800e02 mov w2, #0xffffff8f // #-113
FAT_SET_VAL8(fmt_params.sec,0,(fmt_params.media_code));
40025078: 3942a7e3 ldrb w3, [sp, #169]
FAT_SET_VAL8(fmt_params.sec,2,(FAT_FAT12_EOC >> 4));
4002507c: 12800001 mov w1, #0xffffffff // #-1
break;
40025080: 5280001a mov w26, #0x0 // #0
FAT_SET_VAL8(fmt_params.sec,0,(fmt_params.media_code));
40025084: 39000003 strb w3, [x0]
FAT_SET_VAL8(fmt_params.sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
40025088: f9406be0 ldr x0, [sp, #208]
4002508c: 39000402 strb w2, [x0, #1]
FAT_SET_VAL8(fmt_params.sec,2,(FAT_FAT12_EOC >> 4));
40025090: f9406be0 ldr x0, [sp, #208]
40025094: 39000801 strb w1, [x0, #2]
break;
40025098: 17ffff9e b 40024f10 <msdos_format+0x910>
FAT_SET_VAL32(fmt_params.sec,0,0xffffff00|fmt_params.media_code);
4002509c: f9406be2 ldr x2, [sp, #208]
400250a0: 12800000 mov w0, #0xffffffff // #-1
400250a4: 3942a7e4 ldrb w4, [sp, #169]
FAT_SET_VAL32(fmt_params.sec,4,0xc0000000|FAT_FAT32_EOC);
400250a8: 128000e3 mov w3, #0xfffffff8 // #-8
400250ac: 12800601 mov w1, #0xffffffcf // #-49
break;
400250b0: 5280001a mov w26, #0x0 // #0
FAT_SET_VAL32(fmt_params.sec,0,0xffffff00|fmt_params.media_code);
400250b4: 39000044 strb w4, [x2]
400250b8: f9406be2 ldr x2, [sp, #208]
400250bc: 39000440 strb w0, [x2, #1]
400250c0: f9406be2 ldr x2, [sp, #208]
400250c4: 39000840 strb w0, [x2, #2]
400250c8: f9406be2 ldr x2, [sp, #208]
400250cc: 39000c40 strb w0, [x2, #3]
FAT_SET_VAL32(fmt_params.sec,4,0xc0000000|FAT_FAT32_EOC);
400250d0: f9406be2 ldr x2, [sp, #208]
400250d4: 39001043 strb w3, [x2, #4]
400250d8: f9406be2 ldr x2, [sp, #208]
400250dc: 39001440 strb w0, [x2, #5]
400250e0: f9406be2 ldr x2, [sp, #208]
400250e4: 39001840 strb w0, [x2, #6]
400250e8: f9406be0 ldr x0, [sp, #208]
400250ec: 39001c01 strb w1, [x0, #7]
break;
400250f0: 17ffff88 b 40024f10 <msdos_format+0x910>
FAT_SET_VAL8(fmt_params.sec,0,fmt_params.media_code);
400250f4: f9406be1 ldr x1, [sp, #208]
FAT_SET_VAL8(fmt_params.sec,1,0xff);
400250f8: 12800000 mov w0, #0xffffffff // #-1
FAT_SET_VAL8(fmt_params.sec,0,fmt_params.media_code);
400250fc: 3942a7e3 ldrb w3, [sp, #169]
FAT_SET_VAL16(fmt_params.sec,2,FAT_FAT16_EOC);
40025100: 128000e2 mov w2, #0xfffffff8 // #-8
break;
40025104: 5280001a mov w26, #0x0 // #0
FAT_SET_VAL8(fmt_params.sec,0,fmt_params.media_code);
40025108: 39000023 strb w3, [x1]
FAT_SET_VAL8(fmt_params.sec,1,0xff);
4002510c: f9406be1 ldr x1, [sp, #208]
40025110: 39000420 strb w0, [x1, #1]
FAT_SET_VAL16(fmt_params.sec,2,FAT_FAT16_EOC);
40025114: f9406be1 ldr x1, [sp, #208]
40025118: 39000822 strb w2, [x1, #2]
4002511c: f9406be1 ldr x1, [sp, #208]
40025120: 39000c20 strb w0, [x1, #3]
break;
40025124: 17ffff7b b 40024f10 <msdos_format+0x910>
errno = EINVAL;
40025128: 94005611 bl 4003a96c <__errno>
ret_val = -1;
4002512c: 12800015 mov w21, #0xffffffff // #-1
errno = EINVAL;
40025130: 528002c1 mov w1, #0x16 // #22
40025134: b9000001 str w1, [x0]
if (ret_val == 0) {
40025138: b9407fe2 ldr w2, [sp, #124]
4002513c: 17fffd6b b 400246e8 <msdos_format+0xe8>
from = ""; /* default: make "from" point to empty string */
40025140: f0000103 adrp x3, 40048000 <bsp_section_rodata_begin+0x78>
40025144: 912ae063 add x3, x3, #0xab8
40025148: 52800002 mov w2, #0x0 // #0
4002514c: 17fffd99 b 400247b0 <msdos_format+0x1b0>
from = "RTEMS"; /* default: make "from" point to OS Name */
40025150: f0000103 adrp x3, 40048000 <bsp_section_rodata_begin+0x78>
40025154: 9127e063 add x3, x3, #0x9f8
40025158: 52800a42 mov w2, #0x52 // #82
4002515c: 17fffd78 b 4002473c <msdos_format+0x13c>
fmt_params->fat_num = 2;
40025160: 52800044 mov w4, #0x2 // #2
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40025164: 52800043 mov w3, #0x2 // #2
40025168: aa1403e0 mov x0, x20
4002516c: 2a0303e1 mov w1, w3
40025170: f0000102 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40025174: 912a2042 add x2, x2, #0xa88
fmt_params->fat_num = 2;
40025178: 3902a3e4 strb w4, [sp, #168]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4002517c: 97fffc6d bl 40024330 <msdos_format_printf>
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
40025180: 17fffe8f b 40024bbc <msdos_format+0x5bc>
if (fattype == FAT_FAT12) {
40025184: 7100047f cmp w3, #0x1
fatdata_sect_cnt = total_sector_cnt
40025188: 2a0c03e0 mov w0, w12
if (fattype == FAT_FAT12) {
4002518c: 54000740 b.eq 40025274 <msdos_format+0xc74> // b.none
else if (fattype == FAT_FAT16) {
40025190: 7100087f cmp w3, #0x2
40025194: 54ffdc01 b.ne 40024d14 <msdos_format+0x714> // b.any <== NEVER TAKEN
return sectors;
40025198: 2a0603e2 mov w2, w6
fatdata_sect_cnt = fatdata_sect_cnt
4002519c: 4b020000 sub w0, w0, w2
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
400251a0: 1ac10800 udiv w0, w0, w1
fat_capacity = fatdata_cluster_cnt * 2;
400251a4: 0b000002 add w2, w0, w0
400251a8: 17fffedd b 40024d1c <msdos_format+0x71c>
if (((fattype == FAT_FAT12) && (*data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
400251ac: 713fd41f cmp w0, #0xff5
400251b0: 54000188 b.hi 400251e0 <msdos_format+0xbe0> // b.pmore
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
400251b4: 1ac70842 udiv w2, w2, w7
uint32_t ms_sectors_per_cluster_limit_FAT12 =
400251b8: 52820023 mov w3, #0x1001 // #4097
uint32_t ms_sectors_per_cluster_limit_FAT16 =
400251bc: 52900025 mov w5, #0x8001 // #32769
&& sectors_per_cluster <= ms_sectors_per_cluster_limit_FAT12 ) {
400251c0: 713fd01f cmp w0, #0xff4
uint32_t ms_sectors_per_cluster_limit_FAT12 =
400251c4: 1ac40863 udiv w3, w3, w4
uint32_t ms_sectors_per_cluster_limit_FAT16 =
400251c8: 1ac408a4 udiv w4, w5, w4
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
400251cc: 29108be1 stp w1, w2, [sp, #132]
if ( number_of_clusters < FAT_FAT12_MAX_CLN
400251d0: 7a439022 ccmp w1, w3, #0x2, ls // ls = plast
400251d4: 54ffdd68 b.hi 40024d80 <msdos_format+0x780> // b.pmore
fattype = FAT_FAT12;
400251d8: 52800020 mov w0, #0x1 // #1
400251dc: 17fffeee b 40024d94 <msdos_format+0x794>
sectors_per_cluster *= 2;
400251e0: 0b010021 add w1, w1, w1
if (MS_BYTES_PER_CLUSTER_LIMIT_FAT12 < (sectors_per_cluster * bytes_per_sector)) {
400251e4: 1b047c2e mul w14, w1, w4
400251e8: 714005df cmp w14, #0x1, lsl #12
400251ec: 54ffd829 b.ls 40024cf0 <msdos_format+0x6f0> // b.plast <== ALWAYS TAKEN
400251f0: 17fffee0 b 40024d70 <msdos_format+0x770> <== NOT EXECUTED
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
400251f4: 1ac70842 udiv w2, w2, w7
uint32_t ms_sectors_per_cluster_limit_FAT12 =
400251f8: 52820023 mov w3, #0x1001 // #4097
uint32_t ms_sectors_per_cluster_limit_FAT16 =
400251fc: 52900025 mov w5, #0x8001 // #32769
&& sectors_per_cluster <= ms_sectors_per_cluster_limit_FAT12 ) {
40025200: 713fd01f cmp w0, #0xff4
uint32_t ms_sectors_per_cluster_limit_FAT12 =
40025204: 1ac40863 udiv w3, w3, w4
uint32_t ms_sectors_per_cluster_limit_FAT16 =
40025208: 1ac408a4 udiv w4, w5, w4
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4002520c: 29108be1 stp w1, w2, [sp, #132]
if ( number_of_clusters < FAT_FAT12_MAX_CLN
40025210: 7a419060 ccmp w3, w1, #0x0, ls // ls = plast
40025214: 54ffdb63 b.cc 40024d80 <msdos_format+0x780> // b.lo, b.ul, b.last <== ALWAYS TAKEN
fmt_params->fattype = msdos_get_fat_type(
40025218: 52800020 mov w0, #0x1 // #1 <== NOT EXECUTED
4002521c: 3902abe0 strb w0, [sp, #170] <== NOT EXECUTED
fmt_params->sectors_per_cluster = 2;
40025220: 52800040 mov w0, #0x2 // #2
40025224: b90087e0 str w0, [sp, #132]
ret_val = msdos_set_sectors_per_cluster_from_request( rqdata,
40025228: 9101e3e1 add x1, sp, #0x78
4002522c: aa1403e0 mov x0, x20
40025230: 97fffc6c bl 400243e0 <msdos_set_sectors_per_cluster_from_request>
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
40025234: 3942abe1 ldrb w1, [sp, #170]
--fmt_params->totl_sector_cnt;
40025238: b9407fe2 ldr w2, [sp, #124]
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
4002523c: 6b1a003f cmp w1, w26
40025240: 7a411ac0 ccmp w22, #0x1, #0x0, ne // ne = any
if ( fmt_params->totl_sector_cnt == 0 )
40025244: 2a0203ea mov w10, w2
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
40025248: 54000089 b.ls 40025258 <msdos_format+0xc58> // b.plast
--fmt_params->totl_sector_cnt;
4002524c: 5100044a sub w10, w2, #0x1
40025250: b9007fea str w10, [sp, #124]
40025254: 2a0a03e2 mov w2, w10
++iteration_cnt;
40025258: 110006d6 add w22, w22, #0x1
4002525c: 12001ed6 and w22, w22, #0xff
while( ret_val == 0
40025260: 34ffce80 cbz w0, 40024c30 <msdos_format+0x630> <== ALWAYS TAKEN
40025264: 2a0003f5 mov w21, w0 <== NOT EXECUTED
40025268: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
4002526c: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40025270: 17fffd1e b 400246e8 <msdos_format+0xe8> <== NOT EXECUTED
return sectors;
40025274: 2a0603e2 mov w2, w6
fatdata_sect_cnt = fatdata_sect_cnt
40025278: 4b020000 sub w0, w0, w2
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
4002527c: 1ac10800 udiv w0, w0, w1
fat_capacity = fatdata_cluster_cnt * 3 / 2;
40025280: 0b000402 add w2, w0, w0, lsl #1
40025284: 53017c42 lsr w2, w2, #1
40025288: 17fffea5 b 40024d1c <msdos_format+0x71c>
return (sectors + clustersize - 1) & ~(clustersize - 1);
4002528c: 0b0101ae add w14, w13, w1
40025290: 0a0201c2 and w2, w14, w2
40025294: 17fffff9 b 40025278 <msdos_format+0xc78>
40025298: 0b0101ae add w14, w13, w1
4002529c: 0a0201c2 and w2, w14, w2
400252a0: 17ffffbf b 4002519c <msdos_format+0xb9c>
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
400252a4: aa1803e2 mov x2, x24
400252a8: 52800041 mov w1, #0x2 // #2
400252ac: d2800000 mov x0, #0x0 // #0
400252b0: 97fffc20 bl 40024330 <msdos_format_printf>
if (fmt_params->fattype == FAT_FAT32) {
400252b4: 3942abfa ldrb w26, [sp, #170]
400252b8: 7100135f cmp w26, #0x4
400252bc: 54000161 b.ne 400252e8 <msdos_format+0xce8> // b.any
fmt_params->rsvd_sector_cnt = 32;
400252c0: 52800400 mov w0, #0x20 // #32
400252c4: 52800083 mov w3, #0x4 // #4
+ fmt_params->bytes_per_sector - 1)
400252c8: b9407be4 ldr w4, [sp, #120]
400252cc: 2a0003e9 mov w9, w0
400252d0: 2a0303fa mov w26, w3
400252d4: 52800006 mov w6, #0x0 // #0
fmt_params->rsvd_sector_cnt = 32;
400252d8: b90083e0 str w0, [sp, #128]
fmt_params->files_per_root_dir = 0;
400252dc: b90093ff str wzr, [sp, #144]
fmt_params->mbr_copy_sec = 6;
400252e0: f90053f9 str x25, [sp, #160]
400252e4: 17fffe6f b 40024ca0 <msdos_format+0x6a0>
fmt_params->rsvd_sector_cnt = 1;
400252e8: 52800020 mov w0, #0x1 // #1
400252ec: b90083e0 str w0, [sp, #128]
if (fmt_params->fattype == FAT_FAT16) {
400252f0: 71000b5f cmp w26, #0x2
400252f4: 540000a0 b.eq 40025308 <msdos_format+0xd08> // b.none
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
400252f8: b94083e9 ldr w9, [sp, #128]
400252fc: 2a1a03e3 mov w3, w26
40025300: 528007e0 mov w0, #0x3f // #63
40025304: 17fffe5f b 40024c80 <msdos_format+0x680>
40025308: b94083e9 ldr w9, [sp, #128]
4002530c: 2a1a03e3 mov w3, w26
40025310: 52803fe0 mov w0, #0x1ff // #511
40025314: 17fffe5b b 40024c80 <msdos_format+0x680>
fmt_params->fattype = msdos_get_fat_type(
40025318: 52800080 mov w0, #0x4 // #4
4002531c: 3902abe0 strb w0, [sp, #170]
if (fat_type != fmt_params->fattype) {
40025320: 7100135f cmp w26, #0x4
for ( b = 31; b > 0; b-- ) {
40025324: 528003e0 mov w0, #0x1f // #31
if ( (gigs & ( 1 << b) ) != 0 )
40025328: 52800022 mov w2, #0x1 // #1
if (fat_type != fmt_params->fattype) {
4002532c: 54000081 b.ne 4002533c <msdos_format+0xd3c> // b.any
40025330: 17fffe9c b 40024da0 <msdos_format+0x7a0>
for ( b = 31; b > 0; b-- ) {
40025334: 71000400 subs w0, w0, #0x1
40025338: 54000340 b.eq 400253a0 <msdos_format+0xda0> // b.none <== NEVER TAKEN
if ( (gigs & ( 1 << b) ) != 0 )
4002533c: 1ac02041 lsl w1, w2, w0
40025340: 6a0102ff tst w23, w1
40025344: 54ffff80 b.eq 40025334 <msdos_format+0xd34> // b.none
fmt_params->sectors_per_cluster = 1 << b;
40025348: b90087e1 str w1, [sp, #132]
4002534c: 17ffffb7 b 40025228 <msdos_format+0xc28>
fmt_params->fat_num = 2;
40025350: 52800044 mov w4, #0x2 // #2
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
40025354: f0000102 adrp x2, 40048000 <bsp_section_rodata_begin+0x78>
40025358: 52800043 mov w3, #0x2 // #2
4002535c: 912a2042 add x2, x2, #0xa88
40025360: 2a0303e1 mov w1, w3
40025364: d2800000 mov x0, #0x0 // #0
fmt_params->fat_num = 2;
40025368: 3902a3e4 strb w4, [sp, #168]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4002536c: 97fffbf1 bl 40024330 <msdos_format_printf>
{
40025370: 528ff501 mov w1, #0x7fa8 // #32680
uint32_t fat16_sect_per_clust = 32;
40025374: 52800400 mov w0, #0x20 // #32
40025378: 17fffe15 b 40024bcc <msdos_format+0x5cc>
else if (fmt_params->totl_sector_cnt < FAT_FAT16_MAX_CLN * fat16_sect_per_clust) {
4002537c: 529ffea1 mov w1, #0xfff5 // #65525
40025380: 1b017c00 mul w0, w0, w1
40025384: 6b00005f cmp w2, w0
40025388: 54000d22 b.cs 4002552c <msdos_format+0xf2c> // b.hs, b.nlast
fmt_params->fattype = FAT_FAT16;
4002538c: 52800040 mov w0, #0x2 // #2
fmt_params->sectors_per_cluster = 2;
40025390: 52800041 mov w1, #0x2 // #2
40025394: b90087e1 str w1, [sp, #132]
fmt_params->fattype = FAT_FAT16;
40025398: 3902abe0 strb w0, [sp, #170]
fmt_params->sectors_per_cluster = 2;
4002539c: 17fffe13 b 40024be8 <msdos_format+0x5e8>
400253a0: 52800021 mov w1, #0x1 // #1 <== NOT EXECUTED
fmt_params->sectors_per_cluster = 1 << b;
400253a4: b90087e1 str w1, [sp, #132] <== NOT EXECUTED
400253a8: 17ffffa0 b 40025228 <msdos_format+0xc28> <== NOT EXECUTED
if ( fmt_params->totl_sector_cnt == 0 )
400253ac: 3400060a cbz w10, 4002546c <msdos_format+0xe6c> <== NEVER TAKEN
fmt_params->files_per_root_dir = loc_align_object (fmt_params->root_dir_sectors,
400253b0: 394323e4 ldrb w4, [sp, #200]
if (FAT_FAT32 != fmt_params->fattype)
400253b4: 7100103f cmp w1, #0x4
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
400253b8: b94087e0 ldr w0, [sp, #132]
if (FAT_FAT32 != fmt_params->fattype)
400253bc: 54000180 b.eq 400253ec <msdos_format+0xdec> // b.none
fmt_params->files_per_root_dir = loc_align_object (fmt_params->root_dir_sectors,
400253c0: b94097e3 ldr w3, [sp, #148]
return (sectors + clustersize - 1) & ~(clustersize - 1);
400253c4: 4b0003e5 neg w5, w0
* (fmt_params->bytes_per_sector / FAT_DIRENTRY_SIZE);
400253c8: b9407be1 ldr w1, [sp, #120]
return (sectors + clustersize - 1) & ~(clustersize - 1);
400253cc: 7100009f cmp w4, #0x0
400253d0: 0b030002 add w2, w0, w3
400253d4: 51000442 sub w2, w2, #0x1
400253d8: 0a050042 and w2, w2, w5
* (fmt_params->bytes_per_sector / FAT_DIRENTRY_SIZE);
400253dc: 53057c21 lsr w1, w1, #5
return (sectors + clustersize - 1) & ~(clustersize - 1);
400253e0: 1a830043 csel w3, w2, w3, eq // eq = none
* (fmt_params->bytes_per_sector / FAT_DIRENTRY_SIZE);
400253e4: 1b037c21 mul w1, w1, w3
fmt_params->files_per_root_dir = loc_align_object (fmt_params->root_dir_sectors,
400253e8: b90093e1 str w1, [sp, #144]
fmt_params->rsvd_sector_cnt = loc_align_object (fmt_params->rsvd_sector_cnt,
400253ec: b94083f6 ldr w22, [sp, #128]
return (sectors + clustersize - 1) & ~(clustersize - 1);
400253f0: 4b0003e1 neg w1, w0
400253f4: 7100009f cmp w4, #0x0
400253f8: 0b160000 add w0, w0, w22
400253fc: 51000400 sub w0, w0, #0x1
40025400: 0a010000 and w0, w0, w1
40025404: 1a960016 csel w22, w0, w22, eq // eq = none
fmt_params->rsvd_sector_cnt = loc_align_object (fmt_params->rsvd_sector_cnt,
40025408: b90083f6 str w22, [sp, #128]
if ((rqdata != NULL) && (rqdata->media != 0)) {
4002540c: b4000274 cbz x20, 40025458 <msdos_format+0xe58>
40025410: 39407297 ldrb w23, [x20, #28]
40025414: 34000237 cbz w23, 40025458 <msdos_format+0xe58>
const char valid_media_codes[] =
40025418: d29f1e04 mov x4, #0xf8f0 // #63728
4002541c: f2bf5f24 movk x4, #0xfaf9, lsl #16
40025420: f2df9f64 movk x4, #0xfcfb, lsl #32
40025424: f2ffdfa4 movk x4, #0xfefd, lsl #48
40025428: 12800003 mov w3, #0xffffffff // #-1
if (NULL==memchr(valid_media_codes,
4002542c: 2a1703e1 mov w1, w23
40025430: 9101a3e0 add x0, sp, #0x68
40025434: d2800122 mov x2, #0x9 // #9
const char valid_media_codes[] =
40025438: f90037e4 str x4, [sp, #104]
4002543c: 3901c3e3 strb w3, [sp, #112]
if (NULL==memchr(valid_media_codes,
40025440: 940057af bl 4003b2fc <memchr>
40025444: b4000a40 cbz x0, 4002558c <msdos_format+0xf8c> <== ALWAYS TAKEN
fmt_params->media_code = rqdata->media;
40025448: 3902a7f7 strb w23, [sp, #169] <== NOT EXECUTED
if ((rqdata != NULL) && (rqdata->media != 0)) {
4002544c: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40025450: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40025454: 17fffcac b 40024704 <msdos_format+0x104> <== NOT EXECUTED
fmt_params->media_code = FAT_BR_MEDIA_FIXED;
40025458: 128000e0 mov w0, #0xfffffff8 // #-8
4002545c: 3902a7e0 strb w0, [sp, #169]
40025460: a94363f7 ldp x23, x24, [sp, #48]
40025464: a9446bf9 ldp x25, x26, [sp, #64]
40025468: 17fffca7 b 40024704 <msdos_format+0x104>
4002546c: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40025470: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40025474: 17fffc9f b 400246f0 <msdos_format+0xf0> <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
40025478: 53087c05 lsr w5, w0, #8
4002547c: 390092a0 strb w0, [x21, #36]
40025480: 390096a5 strb w5, [x21, #37]
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
40025484: 91011ea4 add x4, x21, #0x47
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
40025488: 3900b2a1 strb w1, [x21, #44]
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
4002548c: 53107c01 lsr w1, w0, #16
40025490: 53187c00 lsr w0, w0, #24
40025494: 39009aa1 strb w1, [x21, #38]
40025498: 39009ea0 strb w0, [x21, #39]
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
4002549c: 52800526 mov w6, #0x29 // #41
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
400254a0: 3900c2a2 strb w2, [x21, #48]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
400254a4: 91014aa0 add x0, x21, #0x52
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
400254a8: b940a3e5 ldr w5, [sp, #160]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
400254ac: f0000101 adrp x1, 40048000 <bsp_section_rodata_begin+0x78>
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
400254b0: 3900caa5 strb w5, [x21, #50]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
400254b4: 912bc021 add x1, x1, #0xaf0
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
400254b8: 3900d2bf strb wzr, [x21, #52]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
400254bc: d2800102 mov x2, #0x8 // #8
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
400254c0: 53087ca5 lsr w5, w5, #8
400254c4: 3900cea5 strb w5, [x21, #51]
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
400254c8: 3900d6bf strb wzr, [x21, #53]
400254cc: 3900dabf strb wzr, [x21, #54]
400254d0: 3900debf strb wzr, [x21, #55]
400254d4: 3900e2bf strb wzr, [x21, #56]
400254d8: 3900e6bf strb wzr, [x21, #57]
400254dc: 3900eabf strb wzr, [x21, #58]
400254e0: 3900eebf strb wzr, [x21, #59]
400254e4: 3900f2bf strb wzr, [x21, #60]
400254e8: 3900f6bf strb wzr, [x21, #61]
400254ec: 3900fabf strb wzr, [x21, #62]
400254f0: 3900febf strb wzr, [x21, #63]
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
400254f4: 39010aa6 strb w6, [x21, #66]
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
400254f8: 39011ebf strb wzr, [x21, #71]
400254fc: 3900049f strb wzr, [x4, #1]
40025500: 3900089f strb wzr, [x4, #2]
40025504: 39000c9f strb wzr, [x4, #3]
40025508: 3900109f strb wzr, [x4, #4]
4002550c: 3900149f strb wzr, [x4, #5]
40025510: 3900189f strb wzr, [x4, #6]
40025514: 39001c9f strb wzr, [x4, #7]
40025518: 3900209f strb wzr, [x4, #8]
4002551c: 3900249f strb wzr, [x4, #9]
40025520: 3900289f strb wzr, [x4, #10]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
40025524: 940057b5 bl 4003b3f8 <memcpy>
40025528: 17fffd2b b 400249d4 <msdos_format+0x3d4>
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4002552c: d2a80002 mov x2, #0x40000000 // #1073741824
40025530: 8b0202c2 add x2, x22, x2
fmt_params->fattype = FAT_FAT32;
40025534: 52800081 mov w1, #0x4 // #4
for (b = 31; b > 0; b--)
40025538: 528003e0 mov w0, #0x1f // #31
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4002553c: d35ef442 ubfx x2, x2, #30, #32
if ((gigs & (1 << b)) != 0)
40025540: 52800023 mov w3, #0x1 // #1
fmt_params->fattype = FAT_FAT32;
40025544: 3902abe1 strb w1, [sp, #170]
for (b = 31; b > 0; b--)
40025548: 14000003 b 40025554 <msdos_format+0xf54>
4002554c: 71000400 subs w0, w0, #0x1
40025550: 54000180 b.eq 40025580 <msdos_format+0xf80> // b.none
if ((gigs & (1 << b)) != 0)
40025554: 1ac02061 lsl w1, w3, w0
40025558: 6a01005f tst w2, w1
4002555c: 54ffff80 b.eq 4002554c <msdos_format+0xf4c> // b.none
fmt_params->sectors_per_cluster = 1 << b;
40025560: b90087e1 str w1, [sp, #132]
40025564: 17fffda1 b 40024be8 <msdos_format+0x5e8>
*volid_ptr = rand();
40025568: 94005a78 bl 4003bf48 <rand>
4002556c: b900c7e0 str w0, [sp, #196]
40025570: 17fffcab b 4002481c <msdos_format+0x21c>
if (ret_val == 0 && rqdata != NULL && rqdata->sync_device) {
40025574: 11000740 add w0, w26, #0x1 <== NOT EXECUTED
40025578: 0a000339 and w25, w25, w0 <== NOT EXECUTED
4002557c: 17fffe91 b 40024fc0 <msdos_format+0x9c0> <== NOT EXECUTED
40025580: 52800021 mov w1, #0x1 // #1
fmt_params->sectors_per_cluster = 1 << b;
40025584: b90087e1 str w1, [sp, #132]
40025588: 17fffd98 b 40024be8 <msdos_format+0x5e8>
errno = EINVAL;
4002558c: 940054f8 bl 4003a96c <__errno>
ret_val = -1;
40025590: 12800015 mov w21, #0xffffffff // #-1
errno = EINVAL;
40025594: 528002c1 mov w1, #0x16 // #22
40025598: a94363f7 ldp x23, x24, [sp, #48]
4002559c: a9446bf9 ldp x25, x26, [sp, #64]
400255a0: b9000001 str w1, [x0]
fmt_params->rsvd_sector_cnt
400255a4: b94083f6 ldr w22, [sp, #128]
400255a8: 17fffc57 b 40024704 <msdos_format+0x104>
400255ac: 2a1a03f5 mov w21, w26
400255b0: a94363f7 ldp x23, x24, [sp, #48]
400255b4: a9446bf9 ldp x25, x26, [sp, #64]
400255b8: a94573fb ldp x27, x28, [sp, #80]
400255bc: 17fffd4a b 40024ae4 <msdos_format+0x4e4>
0000000040031010 <msdos_format_dirent_with_dot>:
{
40031010: aa0003e7 mov x7, x0
for (i = MSDOS_SHORT_BASE_LEN, src_tmp = src + MSDOS_SHORT_BASE_LEN - 1;
40031014: 91001c23 add x3, x1, #0x7
40031018: 52800102 mov w2, #0x8 // #8
4003101c: d503201f nop
i > 0 && *src_tmp == ' ';
40031020: 39400060 ldrb w0, [x3]
40031024: 2a0203e6 mov w6, w2
--i,--src_tmp)
40031028: d1000463 sub x3, x3, #0x1
4003102c: 51000442 sub w2, w2, #0x1
i > 0 && *src_tmp == ' ';
40031030: 7100801f cmp w0, #0x20
40031034: 540001c1 b.ne 4003106c <msdos_format_dirent_with_dot+0x5c> // b.any
for (i = MSDOS_SHORT_BASE_LEN, src_tmp = src + MSDOS_SHORT_BASE_LEN - 1;
40031038: 35ffff42 cbnz w2, 40031020 <msdos_format_dirent_with_dot+0x10> <== ALWAYS TAKEN
len = i;
4003103c: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED
i > 0 && *src_tmp == ' ';
40031040: 39402823 ldrb w3, [x1, #10]
40031044: 7100807f cmp w3, #0x20
40031048: 540003c1 b.ne 400310c0 <msdos_format_dirent_with_dot+0xb0> // b.any
4003104c: 39402423 ldrb w3, [x1, #9]
40031050: 7100807f cmp w3, #0x20
40031054: 54000721 b.ne 40031138 <msdos_format_dirent_with_dot+0x128> // b.any
40031058: 39402023 ldrb w3, [x1, #8]
4003105c: 7100807f cmp w3, #0x20
40031060: 540007a1 b.ne 40031154 <msdos_format_dirent_with_dot+0x144> // b.any
*dst = '\0'; /* terminate string */
40031064: 390000ff strb wzr, [x7]
}
40031068: d65f03c0 ret
len = i;
4003106c: 93407cc9 sxtw x9, w6
40031070: b00000c8 adrp x8, 4004a000 <fatal_source_text+0x558>
40031074: 91322508 add x8, x8, #0xc89
40031078: aa0903e0 mov x0, x9
4003107c: d2800003 mov x3, #0x0 // #0
*dst++ = tolower((unsigned char)(*src_tmp++));
40031080: 38636822 ldrb w2, [x1, x3]
40031084: 92401c45 and x5, x2, #0xff
40031088: 11008044 add w4, w2, #0x20
4003108c: 12001c84 and w4, w4, #0xff
40031090: 38656905 ldrb w5, [x8, x5]
40031094: 120004a5 and w5, w5, #0x3
40031098: 710004bf cmp w5, #0x1
4003109c: 1a820082 csel w2, w4, w2, eq // eq = none
400310a0: 382368e2 strb w2, [x7, x3]
while (i-- > 0) {
400310a4: 91000463 add x3, x3, #0x1
400310a8: 4b0300c2 sub w2, w6, w3
400310ac: 7100005f cmp w2, #0x0
400310b0: 54fffe8c b.gt 40031080 <msdos_format_dirent_with_dot+0x70>
*dst++ = tolower((unsigned char)(*src_tmp++));
400310b4: 8b0900e7 add x7, x7, x9
400310b8: 2a0603e2 mov w2, w6
400310bc: 17ffffe1 b 40031040 <msdos_format_dirent_with_dot+0x30>
++len; /* dot */
400310c0: 11000442 add w2, w2, #0x1
src_tmp = src + MSDOS_SHORT_BASE_LEN;
400310c4: 91002020 add x0, x1, #0x8
*dst++ = '.'; /* append dot */
400310c8: 528005c3 mov w3, #0x2e // #46
--i, --src_tmp)
400310cc: 52800046 mov w6, #0x2 // #2
++len; /* dot */
400310d0: 93407c41 sxtw x1, w2
*dst++ = '.'; /* append dot */
400310d4: 380014e3 strb w3, [x7], #1
while (i-- > 0) {
400310d8: b00000c8 adrp x8, 4004a000 <fatal_source_text+0x558>
400310dc: 91322508 add x8, x8, #0xc89
400310e0: 110004c9 add w9, w6, #0x1
--i, --src_tmp)
400310e4: d2800003 mov x3, #0x0 // #0
*dst++ = tolower((unsigned char)(*src_tmp++));
400310e8: 38636802 ldrb w2, [x0, x3]
400310ec: 92401c45 and x5, x2, #0xff
400310f0: 11008044 add w4, w2, #0x20
400310f4: 12001c84 and w4, w4, #0xff
400310f8: 38656905 ldrb w5, [x8, x5]
400310fc: 120004a5 and w5, w5, #0x3
40031100: 710004bf cmp w5, #0x1
40031104: 1a820082 csel w2, w4, w2, eq // eq = none
40031108: 382368e2 strb w2, [x7, x3]
while (i-- > 0) {
4003110c: 91000463 add x3, x3, #0x1
40031110: 4b030122 sub w2, w9, w3
40031114: 7100005f cmp w2, #0x0
40031118: 54fffe8c b.gt 400310e8 <msdos_format_dirent_with_dot+0xd8>
*dst++ = tolower((unsigned char)(*src_tmp++));
4003111c: 93407d29 sxtw x9, w9
40031120: 91000421 add x1, x1, #0x1
40031124: 8b0900e7 add x7, x7, x9
++len;
40031128: 93407cc0 sxtw x0, w6
4003112c: 8b010000 add x0, x0, x1
*dst = '\0'; /* terminate string */
40031130: 390000ff strb wzr, [x7]
}
40031134: d65f03c0 ret
++len; /* dot */
40031138: 11000442 add w2, w2, #0x1
src_tmp = src + MSDOS_SHORT_BASE_LEN;
4003113c: 91002020 add x0, x1, #0x8
*dst++ = '.'; /* append dot */
40031140: 528005c3 mov w3, #0x2e // #46
--i, --src_tmp)
40031144: 52800026 mov w6, #0x1 // #1
++len; /* dot */
40031148: 93407c41 sxtw x1, w2
*dst++ = '.'; /* append dot */
4003114c: 380014e3 strb w3, [x7], #1
while (i-- > 0) {
40031150: 17ffffe2 b 400310d8 <msdos_format_dirent_with_dot+0xc8>
++len; /* dot */
40031154: 11000442 add w2, w2, #0x1
src_tmp = src + MSDOS_SHORT_BASE_LEN;
40031158: 91002020 add x0, x1, #0x8
*dst++ = '.'; /* append dot */
4003115c: 528005c3 mov w3, #0x2e // #46
--i, --src_tmp)
40031160: 52800006 mov w6, #0x0 // #0
++len; /* dot */
40031164: 93407c41 sxtw x1, w2
*dst++ = '.'; /* append dot */
40031168: 380014e3 strb w3, [x7], #1
while (i-- > 0) {
4003116c: 17ffffdb b 400310d8 <msdos_format_dirent_with_dot+0xc8>
0000000040031d50 <msdos_get_dotdot_dir_info_cluster_num_and_offset>:
{
40031d50: a9b67bfd stp x29, x30, [sp, #-160]!
40031d54: 910003fd mov x29, sp
40031d58: a90363f7 stp x23, x24, [sp, #48]
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40031d5c: f9400817 ldr x23, [x0, #16]
{
40031d60: a90153f3 stp x19, x20, [sp, #16]
40031d64: aa0203f4 mov x20, x2
40031d68: a9025bf5 stp x21, x22, [sp, #32]
40031d6c: aa0003f5 mov x21, x0
40031d70: aa0303f6 mov x22, x3
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
40031d74: aa1703e0 mov x0, x23
fat_file_fd_t *fat_fd = NULL;
40031d78: f9002fff str xzr, [sp, #88]
rtems_dosfs_convert_control *converter = fs_info->converter;
40031d7c: f94086f8 ldr x24, [x23, #264]
{
40031d80: f90023f9 str x25, [sp, #64]
40031d84: 2a0103f9 mov w25, w1
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
40031d88: aa0203e1 mov x1, x2
40031d8c: 910163e2 add x2, sp, #0x58
40031d90: 97fff48c bl 4002efc0 <fat_file_open>
40031d94: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40031d98: 34000100 cbz w0, 40031db8 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x68><== ALWAYS TAKEN
}
40031d9c: 2a1303e0 mov w0, w19
40031da0: a94153f3 ldp x19, x20, [sp, #16]
40031da4: a9425bf5 ldp x21, x22, [sp, #32]
40031da8: a94363f7 ldp x23, x24, [sp, #48]
40031dac: f94023f9 ldr x25, [sp, #64]
40031db0: a8ca7bfd ldp x29, x30, [sp], #160
40031db4: d65f03c0 ret
fat_fd->cln = cln;
40031db8: f9402fe1 ldr x1, [sp, #88]
fat_fd->fat_file_type = FAT_DIRECTORY;
40031dbc: d2e00402 mov x2, #0x20000000000000 // #9007199254740992
rc = fat_file_size(&fs_info->fat, fat_fd);
40031dc0: aa1703e0 mov x0, x23
fat_fd->fat_file_type = FAT_DIRECTORY;
40031dc4: f9000c22 str x2, [x1, #24]
fat_fd->cln = cln;
40031dc8: b9002439 str w25, [x1, #36]
fat_fd->map.disk_cln = fat_fd->cln;
40031dcc: 2907e43f stp wzr, w25, [x1, #60]
rc = fat_file_size(&fs_info->fat, fat_fd);
40031dd0: 97fff7fc bl 4002fdc0 <fat_file_size>
40031dd4: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40031dd8: 35000ac0 cbnz w0, 40031f30 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1e0><== NEVER TAKEN
msdos_long_to_short(
40031ddc: f00000b3 adrp x19, 40048000 <bsp_section_rodata_begin+0x78>
40031de0: 9122a273 add x19, x19, #0x8a8
40031de4: aa1303e1 mov x1, x19
40031de8: 910183e3 add x3, sp, #0x60
40031dec: 52800164 mov w4, #0xb // #11
40031df0: 52800022 mov w2, #0x1 // #1
40031df4: aa1803e0 mov x0, x24
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40031df8: a9067fff stp xzr, xzr, [sp, #96]
40031dfc: a9077fff stp xzr, xzr, [sp, #112]
msdos_long_to_short(
40031e00: 97fffa80 bl 40030800 <msdos_long_to_short>
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, (const uint8_t*)".", 1,
40031e04: aa1303e3 mov x3, x19
40031e08: f9402fe1 ldr x1, [sp, #88]
40031e0c: 52800025 mov w5, #0x1 // #1
40031e10: 910183e7 add x7, sp, #0x60
40031e14: aa1403e6 mov x6, x20
40031e18: 2a0503e4 mov w4, w5
40031e1c: aa1503e0 mov x0, x21
40031e20: 52800002 mov w2, #0x0 // #0
40031e24: 97fffcd3 bl 40031170 <msdos_find_name_in_fat_file>
40031e28: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40031e2c: 35000820 cbnz w0, 40031f30 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1e0><== NEVER TAKEN
msdos_long_to_short(
40031e30: 900000d3 adrp x19, 40049000 <IMFS_node_control_sym_link+0xe0>
40031e34: 91074273 add x19, x19, #0x1d0
40031e38: aa1303e1 mov x1, x19
40031e3c: 910203e3 add x3, sp, #0x80
40031e40: 52800164 mov w4, #0xb // #11
40031e44: 52800042 mov w2, #0x2 // #2
40031e48: aa1803e0 mov x0, x24
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40031e4c: a9087fff stp xzr, xzr, [sp, #128]
40031e50: a9097fff stp xzr, xzr, [sp, #144]
msdos_long_to_short(
40031e54: 97fffa6b bl 40030800 <msdos_long_to_short>
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, (const uint8_t*)"..", 2,
40031e58: aa1303e3 mov x3, x19
40031e5c: f9402fe1 ldr x1, [sp, #88]
40031e60: 910203e7 add x7, sp, #0x80
40031e64: aa1403e6 mov x6, x20
40031e68: aa1503e0 mov x0, x21
40031e6c: 52800025 mov w5, #0x1 // #1
40031e70: 52800044 mov w4, #0x2 // #2
40031e74: 52800002 mov w2, #0x0 // #0
40031e78: 97fffcbe bl 40031170 <msdos_find_name_in_fat_file>
40031e7c: 2a0003f3 mov w19, w0
fat_file_close(&fs_info->fat, fat_fd);
40031e80: aa1703e0 mov x0, x23
40031e84: f9402fe1 ldr x1, [sp, #88]
if (rc != RC_OK)
40031e88: 350006b3 cbnz w19, 40031f5c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x20c><== NEVER TAKEN
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
40031e8c: 7940f7f8 ldrh w24, [sp, #122]
40031e90: 7940ebf9 ldrh w25, [sp, #116]
rc = fat_file_close(&fs_info->fat, fat_fd);
40031e94: 97fff5ff bl 4002f690 <fat_file_close>
40031e98: 2a0003f3 mov w19, w0
if ( rc != RC_OK )
40031e9c: 35fff800 cbnz w0, 40031d9c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x4c><== NEVER TAKEN
if ( (MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
40031ea0: 79412be0 ldrh w0, [sp, #148]
40031ea4: 794137e1 ldrh w1, [sp, #154]
40031ea8: 2a004020 orr w0, w1, w0, lsl #16
40031eac: 34000680 cbz w0, 40031f7c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x22c>
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
40031eb0: 910163e2 add x2, sp, #0x58
40031eb4: aa1403e1 mov x1, x20
40031eb8: aa1703e0 mov x0, x23
40031ebc: 97fff441 bl 4002efc0 <fat_file_open>
40031ec0: 2a0003f3 mov w19, w0
if (rc != RC_OK)
40031ec4: 35fff6c0 cbnz w0, 40031d9c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x4c><== NEVER TAKEN
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
40031ec8: 79412be0 ldrh w0, [sp, #148]
40031ecc: 794137e2 ldrh w2, [sp, #154]
fat_fd->cln = fs_info->fat.vol.rdir_cl;
40031ed0: f9402fe1 ldr x1, [sp, #88]
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
40031ed4: 2a004040 orr w0, w2, w0, lsl #16
40031ed8: 340005c0 cbz w0, 40031f90 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x240>
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
40031edc: b9002420 str w0, [x1, #36]
fat_fd->fat_file_type = FAT_DIRECTORY;
40031ee0: d2e00402 mov x2, #0x20000000000000 // #9007199254740992
40031ee4: f9000c22 str x2, [x1, #24]
fat_fd->map.disk_cln = fat_fd->cln;
40031ee8: 2907803f stp wzr, w0, [x1, #60]
rc = fat_file_size(&fs_info->fat, fat_fd);
40031eec: aa1703e0 mov x0, x23
40031ef0: 97fff7b4 bl 4002fdc0 <fat_file_size>
40031ef4: 2a0003f3 mov w19, w0
fat_file_close(&fs_info->fat, fat_fd);
40031ef8: f9402fe1 ldr x1, [sp, #88]
if (rc != RC_OK)
40031efc: 350002e0 cbnz w0, 40031f58 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x208><== NEVER TAKEN
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
40031f00: aa1603e4 mov x4, x22
40031f04: aa1403e3 mov x3, x20
40031f08: 2a194302 orr w2, w24, w25, lsl #16
40031f0c: aa1503e0 mov x0, x21
40031f10: 97ffff2c bl 40031bc0 <msdos_find_node_by_cluster_num_in_fat_file>
40031f14: 2a0003f3 mov w19, w0
fat_file_close(&fs_info->fat, fat_fd);
40031f18: aa1703e0 mov x0, x23
40031f1c: f9402fe1 ldr x1, [sp, #88]
if (rc != RC_OK)
40031f20: 350001f3 cbnz w19, 40031f5c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x20c><== NEVER TAKEN
rc = fat_file_close(&fs_info->fat, fat_fd);
40031f24: 97fff5db bl 4002f690 <fat_file_close>
40031f28: 2a0003f3 mov w19, w0
return rc;
40031f2c: 17ffff9c b 40031d9c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x4c>
fat_file_close(&fs_info->fat, fat_fd);
40031f30: f9402fe1 ldr x1, [sp, #88] <== NOT EXECUTED
40031f34: aa1703e0 mov x0, x23 <== NOT EXECUTED
40031f38: 97fff5d6 bl 4002f690 <fat_file_close> <== NOT EXECUTED
}
40031f3c: 2a1303e0 mov w0, w19 <== NOT EXECUTED
40031f40: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40031f44: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40031f48: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40031f4c: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
40031f50: a8ca7bfd ldp x29, x30, [sp], #160 <== NOT EXECUTED
40031f54: d65f03c0 ret <== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
40031f58: aa1703e0 mov x0, x23 <== NOT EXECUTED
40031f5c: 97fff5cd bl 4002f690 <fat_file_close> <== NOT EXECUTED
}
40031f60: 2a1303e0 mov w0, w19 <== NOT EXECUTED
40031f64: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40031f68: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40031f6c: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40031f70: f94023f9 ldr x25, [sp, #64] <== NOT EXECUTED
40031f74: a8ca7bfd ldp x29, x30, [sp], #160 <== NOT EXECUTED
40031f78: d65f03c0 ret <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40031f7c: 12800000 mov w0, #0xffffffff // #-1
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
40031f80: 52800021 mov w1, #0x1 // #1
dir_pos->sname.ofs = 0;
40031f84: 29007e81 stp w1, wzr, [x20]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40031f88: 29010280 stp w0, w0, [x20, #8]
40031f8c: 17ffffc9 b 40031eb0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x160>
fat_fd->cln = fs_info->fat.vol.rdir_cl;
40031f90: b94046e0 ldr w0, [x23, #68]
40031f94: b9002420 str w0, [x1, #36]
40031f98: 17ffffd2 b 40031ee0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x190>
40031f9c: 00000000 udf #0
0000000040031fa0 <msdos_get_name_node>:
{
40031fa0: a9bc7bfd stp x29, x30, [sp, #-64]!
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
40031fa4: aa0603e7 mov x7, x6
{
40031fa8: 910003fd mov x29, sp
40031fac: a90153f3 stp x19, x20, [sp, #16]
40031fb0: aa0003f3 mov x19, x0
40031fb4: aa0203f4 mov x20, x2
40031fb8: f9001bf7 str x23, [sp, #48]
40031fbc: 12001c37 and w23, w1, #0xff
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
40031fc0: f9400801 ldr x1, [x0, #16]
{
40031fc4: a9025bf5 stp x21, x22, [sp, #32]
40031fc8: aa0503f5 mov x21, x5
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
40031fcc: f9401400 ldr x0, [x0, #40]
40031fd0: 2a0403e5 mov w5, w4
{
40031fd4: aa0603f6 mov x22, x6
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
40031fd8: 2a0303e4 mov w4, w3
40031fdc: aa1503e6 mov x6, x21
40031fe0: aa0203e3 mov x3, x2
40031fe4: 2a1703e2 mov w2, w23
40031fe8: 97fffc62 bl 40031170 <msdos_find_name_in_fat_file>
if (!create_node)
40031fec: 7100001f cmp w0, #0x0
40031ff0: 528fa021 mov w1, #0x7d01 // #32001
40031ff4: 7a411004 ccmp w0, w1, #0x4, ne // ne = any
40031ff8: 7a400ae0 ccmp w23, #0x0, #0x0, eq // eq = none
40031ffc: 540000c0 b.eq 40032014 <msdos_get_name_node+0x74> // b.none
}
40032000: a94153f3 ldp x19, x20, [sp, #16]
40032004: a9425bf5 ldp x21, x22, [sp, #32]
40032008: f9401bf7 ldr x23, [sp, #48]
4003200c: a8c47bfd ldp x29, x30, [sp], #64
40032010: d65f03c0 ret
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
40032014: 6b01001f cmp w0, w1
40032018: 54ffff40 b.eq 40032000 <msdos_get_name_node+0x60> // b.none
if (rc == RC_OK)
4003201c: 35ffff20 cbnz w0, 40032000 <msdos_get_name_node+0x60> <== NEVER TAKEN
if (strncmp(name, "..", 2) == 0)
40032020: 39400281 ldrb w1, [x20]
40032024: 7100b83f cmp w1, #0x2e
40032028: 54fffec1 b.ne 40032000 <msdos_get_name_node+0x60> // b.any
4003202c: 39400681 ldrb w1, [x20, #1]
40032030: 7100b83f cmp w1, #0x2e
40032034: 54fffe61 b.ne 40032000 <msdos_get_name_node+0x60> // b.any <== NEVER TAKEN
dotdot_cln = MSDOS_EXTRACT_CLUSTER_NUM((name_dir_entry));
40032038: 79402ac1 ldrh w1, [x22, #20]
4003203c: 794036c2 ldrh w2, [x22, #26]
40032040: 2a014041 orr w1, w2, w1, lsl #16
if (dotdot_cln == 0)
40032044: 350000c1 cbnz w1, 4003205c <msdos_get_name_node+0xbc>
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40032048: 12800001 mov w1, #0xffffffff // #-1
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
4003204c: 52800022 mov w2, #0x1 // #1
dir_pos->sname.ofs = 0;
40032050: 29007ea2 stp w2, wzr, [x21]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40032054: 290106a1 stp w1, w1, [x21, #8]
40032058: 17ffffea b 40032000 <msdos_get_name_node+0x60>
msdos_get_dotdot_dir_info_cluster_num_and_offset(parent_loc->mt_entry,
4003205c: aa1603e3 mov x3, x22
40032060: aa1503e2 mov x2, x21
}
40032064: a9425bf5 ldp x21, x22, [sp, #32]
msdos_get_dotdot_dir_info_cluster_num_and_offset(parent_loc->mt_entry,
40032068: f9401660 ldr x0, [x19, #40]
}
4003206c: a94153f3 ldp x19, x20, [sp, #16]
40032070: f9401bf7 ldr x23, [sp, #48]
40032074: a8c47bfd ldp x29, x30, [sp], #64
msdos_get_dotdot_dir_info_cluster_num_and_offset(parent_loc->mt_entry,
40032078: 17ffff36 b 40031d50 <msdos_get_dotdot_dir_info_cluster_num_and_offset>
4003207c: 00000000 udf #0
0000000040030720 <msdos_get_utf16_string_from_long_entry.part.0>:
msdos_get_utf16_string_from_long_entry (
40030720: a9bd7bfd stp x29, x30, [sp, #-48]! <== NOT EXECUTED
40030724: 910003fd mov x29, sp <== NOT EXECUTED
40030728: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED
4003072c: aa0103f3 mov x19, x1 <== NOT EXECUTED
40030730: aa0003f4 mov x20, x0 <== NOT EXECUTED
memcpy (&entry_string_buf[0], &entry[1], 10 );
40030734: 91000401 add x1, x0, #0x1 <== NOT EXECUTED
40030738: aa1303e0 mov x0, x19 <== NOT EXECUTED
msdos_get_utf16_string_from_long_entry (
4003073c: f90013f5 str x21, [sp, #32] <== NOT EXECUTED
40030740: 12001c55 and w21, w2, #0xff <== NOT EXECUTED
memcpy (&entry_string_buf[0], &entry[1], 10 );
40030744: d2800142 mov x2, #0xa // #10 <== NOT EXECUTED
40030748: 94002b2c bl 4003b3f8 <memcpy> <== NOT EXECUTED
memcpy (&entry_string_buf[5], &entry[14], 12 );
4003074c: 91003a81 add x1, x20, #0xe <== NOT EXECUTED
40030750: d2800182 mov x2, #0xc // #12 <== NOT EXECUTED
40030754: 91002a60 add x0, x19, #0xa <== NOT EXECUTED
40030758: 94002b28 bl 4003b3f8 <memcpy> <== NOT EXECUTED
memcpy (&entry_string_buf[11], &entry[28], 4 );
4003075c: 39407282 ldrb w2, [x20, #28] <== NOT EXECUTED
40030760: 39005a62 strb w2, [x19, #22] <== NOT EXECUTED
40030764: 39407682 ldrb w2, [x20, #29] <== NOT EXECUTED
40030768: 39005e62 strb w2, [x19, #23] <== NOT EXECUTED
4003076c: 39407a82 ldrb w2, [x20, #30] <== NOT EXECUTED
40030770: 39006262 strb w2, [x19, #24] <== NOT EXECUTED
40030774: 39407e81 ldrb w1, [x20, #31] <== NOT EXECUTED
40030778: 39006661 strb w1, [x19, #25] <== NOT EXECUTED
if (is_first_entry) {
4003077c: 34000115 cbz w21, 4003079c <msdos_get_utf16_string_from_long_entry.part.0+0x7c><== NOT EXECUTED
for (chars_in_entry = 0;
40030780: d2800000 mov x0, #0x0 // #0 <== NOT EXECUTED
40030784: d503201f nop
&& entry_string_buf[chars_in_entry] != 0x0000);
40030788: 78607a61 ldrh w1, [x19, x0, lsl #1]
4003078c: 34000121 cbz w1, 400307b0 <msdos_get_utf16_string_from_long_entry.part.0+0x90>
++chars_in_entry) {
40030790: 91000400 add x0, x0, #0x1
for (chars_in_entry = 0;
40030794: f100341f cmp x0, #0xd
40030798: 54ffff81 b.ne 40030788 <msdos_get_utf16_string_from_long_entry.part.0+0x68> // b.any
4003079c: d2800340 mov x0, #0x1a // #26
}
400307a0: a94153f3 ldp x19, x20, [sp, #16]
400307a4: f94013f5 ldr x21, [sp, #32]
400307a8: a8c37bfd ldp x29, x30, [sp], #48
400307ac: d65f03c0 ret
return chars_in_entry * MSDOS_NAME_LFN_BYTES_PER_CHAR;
400307b0: 8b000000 add x0, x0, x0
}
400307b4: a94153f3 ldp x19, x20, [sp, #16]
400307b8: f94013f5 ldr x21, [sp, #32]
400307bc: a8c37bfd ldp x29, x30, [sp], #48
400307c0: d65f03c0 ret
...
00000000400256f0 <msdos_initialize_support>:
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *file_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers,
rtems_dosfs_convert_control *converter
)
{
400256f0: a9ba7bfd stp x29, x30, [sp, #-96]!
400256f4: 910003fd mov x29, sp
400256f8: a90153f3 stp x19, x20, [sp, #16]
400256fc: aa0403f4 mov x20, x4
40025700: a9025bf5 stp x21, x22, [sp, #32]
40025704: aa0003f5 mov x21, x0
40025708: aa0303f6 mov x22, x3
msdos_fs_info_t *fs_info = NULL;
fat_file_fd_t *fat_fd = NULL;
fat_dir_pos_t root_pos;
uint32_t cl_buf_size;
fs_info = (msdos_fs_info_t *)calloc(1, sizeof(msdos_fs_info_t));
4002570c: d2800020 mov x0, #0x1 // #1
{
40025710: a90363f7 stp x23, x24, [sp, #48]
40025714: aa0103f7 mov x23, x1
40025718: aa0203f8 mov x24, x2
fs_info = (msdos_fs_info_t *)calloc(1, sizeof(msdos_fs_info_t));
4002571c: d2802201 mov x1, #0x110 // #272
fat_file_fd_t *fat_fd = NULL;
40025720: f90027ff str xzr, [sp, #72]
fs_info = (msdos_fs_info_t *)calloc(1, sizeof(msdos_fs_info_t));
40025724: 94001baf bl 4002c5e0 <calloc>
if (!fs_info)
40025728: b4000920 cbz x0, 4002584c <msdos_initialize_support+0x15c> <== NEVER TAKEN
temp_mt_entry->fs_info = fs_info;
fs_info->converter = converter;
rc = fat_init_volume_info(&fs_info->fat, temp_mt_entry->dev);
4002572c: f9403aa1 ldr x1, [x21, #112]
temp_mt_entry->fs_info = fs_info;
40025730: f9000aa0 str x0, [x21, #16]
fs_info->converter = converter;
40025734: f9008414 str x20, [x0, #264]
40025738: aa0003f3 mov x19, x0
rc = fat_init_volume_info(&fs_info->fat, temp_mt_entry->dev);
4002573c: 94002131 bl 4002dc00 <fat_init_volume_info>
40025740: 2a0003f4 mov w20, w0
if (rc != RC_OK)
40025744: 35000660 cbnz w0, 40025810 <msdos_initialize_support+0x120> <== NEVER TAKEN
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40025748: 12800003 mov w3, #0xffffffff // #-1
/*
* open fat-file which correspondes to root directory
* (so inode number 0x00000010 is always used for root directory)
*/
fat_dir_pos_init(&root_pos);
root_pos.sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
4002574c: 52800024 mov w4, #0x1 // #1
fs_info->file_handlers = file_handlers;
40025750: a90ce276 stp x22, x24, [x19, #200]
rc = fat_file_open(&fs_info->fat, &root_pos, &fat_fd);
40025754: 910123e2 add x2, sp, #0x48
40025758: 910143e1 add x1, sp, #0x50
4002575c: aa1303e0 mov x0, x19
dir_pos->sname.ofs = 0;
40025760: 290a7fe4 stp w4, wzr, [sp, #80]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40025764: 290b0fe3 stp w3, w3, [sp, #88]
40025768: 94002616 bl 4002efc0 <fat_file_open>
4002576c: 2a0003f4 mov w20, w0
if (rc != RC_OK)
40025770: 350004c0 cbnz w0, 40025808 <msdos_initialize_support+0x118> <== NEVER TAKEN
free(fs_info);
return rc;
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
40025774: f94027f8 ldr x24, [sp, #72]
40025778: d2e00400 mov x0, #0x20000000000000 // #9007199254740992
4002577c: f9000f00 str x0, [x24, #24]
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
fat_fd->cln = fs_info->fat.vol.rdir_cl;
40025780: b9404660 ldr w0, [x19, #68]
40025784: b9002700 str w0, [x24, #36]
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
40025788: 2907831f stp wzr, w0, [x24, #60]
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
4002578c: 35000520 cbnz w0, 40025830 <msdos_initialize_support+0x140>
{
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
40025790: b9400a60 ldr w0, [x19, #8]
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
40025794: b9403661 ldr w1, [x19, #52]
40025798: b9002301 str w1, [x24, #32]
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
4002579c: 6b01001f cmp w0, w1
400257a0: 1a812000 csel w0, w0, w1, cs // cs = hs, nlast
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
400257a4: 2a0003e0 mov w0, w0
400257a8: d2800021 mov x1, #0x1 // #1
400257ac: 94001b8d bl 4002c5e0 <calloc>
400257b0: f9008260 str x0, [x19, #256]
if (fs_info->cl_buf == NULL)
400257b4: b4000560 cbz x0, 40025860 <msdos_initialize_support+0x170> <== NEVER TAKEN
}
rtems_recursive_mutex_init(&fs_info->vol_mutex,
RTEMS_FILESYSTEM_TYPE_DOSFS);
temp_mt_entry->mt_fs_root->location.node_access = fat_fd;
400257b8: f94026a1 ldr x1, [x21, #72]
const char *_name)
{
struct _Mutex_recursive_Control _init =
_MUTEX_RECURSIVE_NAMED_INITIALIZER(_name);
*_mutex = _init;
400257bc: f80d8e7f str xzr, [x19, #216]!
400257c0: d0000100 adrp x0, 40047000 <__sfvwrite_r+0x58>
400257c4: 913ee000 add x0, x0, #0xfb8
400257c8: a900fe7f stp xzr, xzr, [x19, #8]
400257cc: f9000e60 str x0, [x19, #24]
temp_mt_entry->mt_fs_root->location.handlers = directory_handlers;
temp_mt_entry->ops = op_table;
return rc;
}
400257d0: 2a1403e0 mov w0, w20
400257d4: b900227f str wzr, [x19, #32]
temp_mt_entry->mt_fs_root->location.node_access = fat_fd;
400257d8: f9000838 str x24, [x1, #16]
temp_mt_entry->mt_fs_root->location.handlers = directory_handlers;
400257dc: f9001036 str x22, [x1, #32]
temp_mt_entry->ops = op_table;
400257e0: f9000eb7 str x23, [x21, #24]
}
400257e4: a94153f3 ldp x19, x20, [sp, #16]
400257e8: a9425bf5 ldp x21, x22, [sp, #32]
400257ec: a94363f7 ldp x23, x24, [sp, #48]
400257f0: a8c67bfd ldp x29, x30, [sp], #96
400257f4: d65f03c0 ret
fat_file_close(&fs_info->fat, fat_fd);
400257f8: f94027e1 ldr x1, [sp, #72] <== NOT EXECUTED
return rc;
400257fc: 2a0003f4 mov w20, w0 <== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
40025800: aa1303e0 mov x0, x19 <== NOT EXECUTED
40025804: 940027a3 bl 4002f690 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
40025808: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002580c: 940022dd bl 4002e380 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
40025810: aa1303e0 mov x0, x19 <== NOT EXECUTED
40025814: 97fff15b bl 40021d80 <free> <== NOT EXECUTED
}
40025818: 2a1403e0 mov w0, w20 <== NOT EXECUTED
4002581c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40025820: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40025824: a94363f7 ldp x23, x24, [sp, #48] <== NOT EXECUTED
40025828: a8c67bfd ldp x29, x30, [sp], #96 <== NOT EXECUTED
4002582c: d65f03c0 ret <== NOT EXECUTED
rc = fat_file_size(&fs_info->fat, fat_fd);
40025830: aa1803e1 mov x1, x24
40025834: aa1303e0 mov x0, x19
40025838: 94002962 bl 4002fdc0 <fat_file_size>
if ( rc != RC_OK )
4002583c: 35fffde0 cbnz w0, 400257f8 <msdos_initialize_support+0x108> <== NEVER TAKEN
cl_buf_size = fs_info->fat.vol.bpc;
40025840: b9400a60 ldr w0, [x19, #8]
fat_file_close(&fs_info->fat, fat_fd);
40025844: f94027f8 ldr x24, [sp, #72]
40025848: 17ffffd7 b 400257a4 <msdos_initialize_support+0xb4>
rtems_set_errno_and_return_minus_one(ENOMEM);
4002584c: 94005448 bl 4003a96c <__errno> <== NOT EXECUTED
40025850: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED
40025854: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED
40025858: b9000001 str w1, [x0] <== NOT EXECUTED
4002585c: 17ffffef b 40025818 <msdos_initialize_support+0x128> <== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
40025860: aa1803e1 mov x1, x24 <== NOT EXECUTED
40025864: aa1303e0 mov x0, x19 <== NOT EXECUTED
40025868: 9400278a bl 4002f690 <fat_file_close> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
4002586c: 12800014 mov w20, #0xffffffff // #-1 <== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
40025870: aa1303e0 mov x0, x19 <== NOT EXECUTED
40025874: 940022c3 bl 4002e380 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
40025878: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002587c: 97fff141 bl 40021d80 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
40025880: 9400543b bl 4003a96c <__errno> <== NOT EXECUTED
40025884: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED
40025888: b9000001 str w1, [x0] <== NOT EXECUTED
4002588c: 17ffffe3 b 40025818 <msdos_initialize_support+0x128> <== NOT EXECUTED
00000000400307d0 <msdos_lfn_checksum>:
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
400307d0: 91002c04 add x4, x0, #0xb <== NOT EXECUTED
cs = 0;
400307d4: 52800001 mov w1, #0x0 // #0 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
400307d8: 38401403 ldrb w3, [x0], #1 <== NOT EXECUTED
400307dc: 53190022 ubfiz w2, w1, #7, #1 <== NOT EXECUTED
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
400307e0: eb00009f cmp x4, x0 <== NOT EXECUTED
400307e4: 0b410461 add w1, w3, w1, lsr #1 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
400307e8: 0b210041 add w1, w2, w1, uxtb <== NOT EXECUTED
400307ec: 12001c21 and w1, w1, #0xff <== NOT EXECUTED
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
400307f0: 54ffff41 b.ne 400307d8 <msdos_lfn_checksum+0x8> // b.any <== NOT EXECUTED
}
400307f4: 2a0103e0 mov w0, w1 <== NOT EXECUTED
400307f8: d65f03c0 ret <== NOT EXECUTED
400307fc: 00000000 udf #0
0000000040030800 <msdos_long_to_short>:
{
40030800: a9b67bfd stp x29, x30, [sp, #-160]!
40030804: 910003fd mov x29, sp
40030808: a90363f7 stp x23, x24, [sp, #48]
4003080c: aa0003f8 mov x24, x0
40030810: aa0303e0 mov x0, x3
40030814: a90153f3 stp x19, x20, [sp, #16]
40030818: aa0103f4 mov x20, x1
memset (sfn, ' ', sfn_len);
4003081c: 93407c81 sxtw x1, w4
40030820: a90787e3 stp x3, x1, [sp, #120]
size_t codepage_name_len = converter->buffer.size;
40030824: f9400b03 ldr x3, [x24, #16]
{
40030828: a9025bf5 stp x21, x22, [sp, #32]
4003082c: 2a0203f5 mov w21, w2
memset (sfn, ' ', sfn_len);
40030830: aa0103e2 mov x2, x1
40030834: 52800401 mov w1, #0x20 // #32
size_t codepage_name_len = converter->buffer.size;
40030838: f9004fe3 str x3, [sp, #152]
void *buffer = converter->buffer.data;
4003083c: f9400713 ldr x19, [x24, #8]
memset (sfn, ' ', sfn_len);
40030840: 94002b09 bl 4003b464 <memset>
if ((lfn[0] == '.') && (lfn_len == 1))
40030844: 39400281 ldrb w1, [x20]
40030848: 7100b83f cmp w1, #0x2e
4003084c: 54001040 b.eq 40030a54 <msdos_long_to_short+0x254> // b.none
for (i = 0; i < lfn_len; i++)
40030850: 710002bf cmp w21, #0x0
40030854: 52800003 mov w3, #0x0 // #0
40030858: d2800020 mov x0, #0x1 // #1
if ((lfn[i] != ' ') && (lfn[i] != '.'))
4003085c: 528005c2 mov w2, #0x2e // #46
for (i = 0; i < lfn_len; i++)
40030860: 540000cc b.gt 40030878 <msdos_long_to_short+0x78> <== ALWAYS TAKEN
40030864: 14000079 b 40030a48 <msdos_long_to_short+0x248> <== NOT EXECUTED
40030868: 6b0002bf cmp w21, w0
4003086c: 54000eed b.le 40030a48 <msdos_long_to_short+0x248>
if ((lfn[i] != ' ') && (lfn[i] != '.'))
40030870: 38606a81 ldrb w1, [x20, x0]
40030874: 91000400 add x0, x0, #0x1
40030878: 7100803f cmp w1, #0x20
for (i = 0; i < lfn_len; i++)
4003087c: 2a0003e3 mov w3, w0
if ((lfn[i] != ' ') && (lfn[i] != '.'))
40030880: 7a421024 ccmp w1, w2, #0x4, ne // ne = any
40030884: 54ffff20 b.eq 40030868 <msdos_long_to_short+0x68> // b.none
eno = (*converter->handler->utf8_to_codepage) (
40030888: f9400300 ldr x0, [x24]
4003088c: 93407ea1 sxtw x1, w21
40030890: aa0103e2 mov x2, x1
40030894: 910263e4 add x4, sp, #0x98
40030898: aa1303e3 mov x3, x19
4003089c: f90047e1 str x1, [sp, #136]
400308a0: f9400005 ldr x5, [x0]
400308a4: aa1403e1 mov x1, x20
400308a8: aa1803e0 mov x0, x24
400308ac: d63f00a0 blr x5
if (eno == EINVAL)
400308b0: 7100581f cmp w0, #0x16
400308b4: 54000e60 b.eq 40030a80 <msdos_long_to_short+0x280> // b.none
type = msdos_name_type (
400308b8: a9046bf9 stp x25, x26, [sp, #64]
while (*name && (count < name_len))
400308bc: 3940027a ldrb w26, [x19]
type = msdos_name_type (
400308c0: f9404ff5 ldr x21, [sp, #152]
while (*name && (count < name_len))
400308c4: 7100035f cmp w26, #0x0
400308c8: 1a9f07f9 cset w25, ne // ne = any
400308cc: 710002bf cmp w21, #0x0
400308d0: 1a9fd7e0 cset w0, gt
400308d4: 6a000339 ands w25, w25, w0
400308d8: 54000de0 b.eq 40030a94 <msdos_long_to_short+0x294> // b.none <== NEVER TAKEN
400308dc: b00000d7 adrp x23, 40049000 <IMFS_node_control_sym_link+0xe0>
400308e0: 910de2f7 add x23, x23, #0x378
if ((ch == '.') || isalnum((unsigned char)ch) ||
400308e4: d00000c0 adrp x0, 4004a000 <fatal_source_text+0x558>
400308e8: 91322400 add x0, x0, #0xc89
int dot_at = -1;
400308ec: 12800016 mov w22, #0xffffffff // #-1
400308f0: a90573fb stp x27, x28, [sp, #80]
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
400308f4: b00000dc adrp x28, 40049000 <IMFS_node_control_sym_link+0xe0>
400308f8: 910e039c add x28, x28, #0x380
int count = 0;
400308fc: 5280001b mov w27, #0x0 // #0
if ((ch == '.') || isalnum((unsigned char)ch) ||
40030900: f90037e0 str x0, [sp, #104]
bool uppercase = false;
40030904: 290e7fff stp wzr, wzr, [sp, #112]
40030908: 14000020 b 40030988 <msdos_long_to_short+0x188>
if ((ch == '.') || isalnum((unsigned char)ch) ||
4003090c: 7100bb5f cmp w26, #0x2e
40030910: 54000940 b.eq 40030a38 <msdos_long_to_short+0x238> // b.none
40030914: f94037e1 ldr x1, [sp, #104]
40030918: 92401f40 and x0, x26, #0xff
4003091c: 38616800 ldrb w0, [x0, x1]
40030920: f240081f tst x0, #0x7
40030924: 540000a1 b.ne 40030938 <msdos_long_to_short+0x138> // b.any
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
40030928: 2a1a03e1 mov w1, w26
4003092c: aa1c03e0 mov x0, x28
40030930: 94002ec4 bl 4003c440 <strchr>
if ((ch == '.') || isalnum((unsigned char)ch) ||
40030934: b4000500 cbz x0, 400309d4 <msdos_long_to_short+0x1d4>
if (dot_at >= 0)
40030938: 310006df cmn w22, #0x1
4003093c: 54000b20 b.eq 40030aa0 <msdos_long_to_short+0x2a0> // b.none
if (is_dot || ((count - dot_at) > 3))
40030940: 4b160360 sub w0, w27, w22
40030944: 71000c1f cmp w0, #0x3
40030948: 5400028c b.gt 40030998 <msdos_long_to_short+0x198>
else if ((*name >= 'A') && (*name <= 'Z'))
4003094c: 51010740 sub w0, w26, #0x41
40030950: 12001c00 and w0, w0, #0xff
40030954: 7100641f cmp w0, #0x19
40030958: 54000529 b.ls 400309fc <msdos_long_to_short+0x1fc> // b.plast
else if ((*name >= 'a') && (*name <= 'z'))
4003095c: 51018741 sub w1, w26, #0x61
lowercase = true;
40030960: b94073e0 ldr w0, [sp, #112]
else if ((*name >= 'a') && (*name <= 'z'))
40030964: 12001c21 and w1, w1, #0xff
lowercase = true;
40030968: 7100643f cmp w1, #0x19
4003096c: 1a998000 csel w0, w0, w25, hi // hi = pmore
40030970: b90073e0 str w0, [sp, #112]
while (*name && (count < name_len))
40030974: 38401e7a ldrb w26, [x19, #1]!
count++;
40030978: 1100077b add w27, w27, #0x1
while (*name && (count < name_len))
4003097c: 7100035f cmp w26, #0x0
40030980: 7a5b12a4 ccmp w21, w27, #0x4, ne // ne = any
40030984: 5400048d b.le 40030a14 <msdos_long_to_short+0x214>
if (strchr(" +,;=[]", ch) != NULL)
40030988: 2a1a03e1 mov w1, w26
4003098c: aa1703e0 mov x0, x23
40030990: 94002eac bl 4003c440 <strchr>
40030994: b4fffbc0 cbz x0, 4003090c <msdos_long_to_short+0x10c>
type = MSDOS_NAME_LONG;
40030998: a9446bf9 ldp x25, x26, [sp, #64]
4003099c: 52800055 mov w21, #0x2 // #2
400309a0: a94573fb ldp x27, x28, [sp, #80]
short_filename_length = msdos_filename_utf8_to_short_name_for_save (
400309a4: aa1403e1 mov x1, x20
400309a8: a94793e3 ldp x3, x4, [sp, #120]
400309ac: aa1803e0 mov x0, x24
400309b0: f94047e2 ldr x2, [sp, #136]
400309b4: 94001a6b bl 40037360 <msdos_filename_utf8_to_short_name_for_save>
if (short_filename_length < 0 ) {
400309b8: b7f80140 tbnz x0, #63, 400309e0 <msdos_long_to_short+0x1e0> <== NEVER TAKEN
}
400309bc: 2a1503e0 mov w0, w21
400309c0: a94153f3 ldp x19, x20, [sp, #16]
400309c4: a9425bf5 ldp x21, x22, [sp, #32]
400309c8: a94363f7 ldp x23, x24, [sp, #48]
400309cc: a8ca7bfd ldp x29, x30, [sp], #160
400309d0: d65f03c0 ret
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
400309d4: 373ffb3a tbnz w26, #7, 40030938 <msdos_long_to_short+0x138>
400309d8: a9446bf9 ldp x25, x26, [sp, #64]
400309dc: a94573fb ldp x27, x28, [sp, #80]
return MSDOS_NAME_INVALID;
400309e0: 52800015 mov w21, #0x0 // #0
}
400309e4: 2a1503e0 mov w0, w21
400309e8: a94153f3 ldp x19, x20, [sp, #16]
400309ec: a9425bf5 ldp x21, x22, [sp, #32]
400309f0: a94363f7 ldp x23, x24, [sp, #48]
400309f4: a8ca7bfd ldp x29, x30, [sp], #160
400309f8: d65f03c0 ret
while (*name && (count < name_len))
400309fc: 38401e7a ldrb w26, [x19, #1]!
count++;
40030a00: 1100077b add w27, w27, #0x1
uppercase = true;
40030a04: b90077f9 str w25, [sp, #116]
while (*name && (count < name_len))
40030a08: 7100035f cmp w26, #0x0
40030a0c: 7a5b12a4 ccmp w21, w27, #0x4, ne // ne = any
40030a10: 54fffbcc b.gt 40030988 <msdos_long_to_short+0x188>
if (lowercase && uppercase)
40030a14: b94073e0 ldr w0, [sp, #112]
40030a18: a9446bf9 ldp x25, x26, [sp, #64]
40030a1c: 7100001f cmp w0, #0x0
type = MSDOS_NAME_LONG;
40030a20: b94077e0 ldr w0, [sp, #116]
40030a24: a94573fb ldp x27, x28, [sp, #80]
40030a28: 7a401804 ccmp w0, #0x0, #0x4, ne // ne = any
40030a2c: 1a9f07f5 cset w21, ne // ne = any
40030a30: 110006b5 add w21, w21, #0x1
40030a34: 17ffffdc b 400309a4 <msdos_long_to_short+0x1a4>
if (dot_at >= 0)
40030a38: 310006df cmn w22, #0x1
40030a3c: 54fffae1 b.ne 40030998 <msdos_long_to_short+0x198> // b.any
40030a40: 2a1b03f6 mov w22, w27
40030a44: 17ffffcc b 40030974 <msdos_long_to_short+0x174>
if (i == lfn_len)
40030a48: 6b0302bf cmp w21, w3
40030a4c: 54fff1e1 b.ne 40030888 <msdos_long_to_short+0x88> // b.any <== NEVER TAKEN
40030a50: 17ffffe4 b 400309e0 <msdos_long_to_short+0x1e0>
if ((lfn[0] == '.') && (lfn_len == 1))
40030a54: 710006bf cmp w21, #0x1
40030a58: 54000180 b.eq 40030a88 <msdos_long_to_short+0x288> // b.none
if ((lfn[0] == '.') && (lfn[1] == '.') && (lfn_len == 2))
40030a5c: 39400680 ldrb w0, [x20, #1]
40030a60: 7100b81f cmp w0, #0x2e
40030a64: 7a420aa0 ccmp w21, #0x2, #0x0, eq // eq = none
40030a68: 54ffef41 b.ne 40030850 <msdos_long_to_short+0x50> // b.any
sfn[0] = sfn[1] = '.';
40030a6c: f9403fe0 ldr x0, [sp, #120]
return MSDOS_NAME_SHORT;
40030a70: 52800035 mov w21, #0x1 // #1
sfn[0] = sfn[1] = '.';
40030a74: 39000001 strb w1, [x0]
40030a78: 39000401 strb w1, [x0, #1]
return MSDOS_NAME_SHORT;
40030a7c: 17ffffd0 b 400309bc <msdos_long_to_short+0x1bc>
type = MSDOS_NAME_LONG;
40030a80: 52800055 mov w21, #0x2 // #2
40030a84: 17ffffc8 b 400309a4 <msdos_long_to_short+0x1a4>
sfn[0] = '.';
40030a88: f9403fe0 ldr x0, [sp, #120]
40030a8c: 39000001 strb w1, [x0]
return MSDOS_NAME_SHORT;
40030a90: 17ffffcb b 400309bc <msdos_long_to_short+0x1bc>
return MSDOS_NAME_SHORT;
40030a94: 52800035 mov w21, #0x1 // #1 <== NOT EXECUTED
40030a98: a9446bf9 ldp x25, x26, [sp, #64] <== NOT EXECUTED
40030a9c: 17ffffc2 b 400309a4 <msdos_long_to_short+0x1a4> <== NOT EXECUTED
if (count == 8 && !is_dot)
40030aa0: 7100bb5f cmp w26, #0x2e
40030aa4: 7a481b60 ccmp w27, #0x8, #0x0, ne // ne = any
40030aa8: 54fff521 b.ne 4003094c <msdos_long_to_short+0x14c> // b.any
40030aac: 17ffffbb b 40030998 <msdos_long_to_short+0x198>
0000000040025890 <msdos_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
40025890: 2a0303e4 mov w4, w3
fat_file_type_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
40025894: 12140c63 and w3, w3, #0xf000
{
40025898: aa0103e5 mov x5, x1
if (S_ISDIR(mode))
4002589c: 7140107f cmp w3, #0x4, lsl #12
400258a0: 54000100 b.eq 400258c0 <msdos_mknod+0x30> // b.none
{
type = FAT_DIRECTORY;
}
else if (S_ISREG(mode))
400258a4: 7140207f cmp w3, #0x8, lsl #12
{
type = FAT_FILE;
400258a8: 52800081 mov w1, #0x4 // #4
else if (S_ISREG(mode))
400258ac: 54000141 b.ne 400258d4 <msdos_mknod+0x44> // b.any <== NEVER TAKEN
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
/* Create an MSDOS node */
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
400258b0: 2a0203e3 mov w3, w2
400258b4: aa0503e2 mov x2, x5
400258b8: d2800005 mov x5, #0x0 // #0
400258bc: 140029e5 b 40030050 <msdos_creat_node>
400258c0: 2a0203e3 mov w3, w2
type = FAT_DIRECTORY;
400258c4: 52800001 mov w1, #0x0 // #0
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
400258c8: aa0503e2 mov x2, x5
400258cc: d2800005 mov x5, #0x0 // #0
400258d0: 140029e0 b 40030050 <msdos_creat_node>
{
400258d4: a9bf7bfd stp x29, x30, [sp, #-16]! <== NOT EXECUTED
400258d8: 910003fd mov x29, sp <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EINVAL);
400258dc: 94005424 bl 4003a96c <__errno> <== NOT EXECUTED
400258e0: 528002c1 mov w1, #0x16 // #22 <== NOT EXECUTED
400258e4: b9000001 str w1, [x0] <== NOT EXECUTED
return rc;
}
400258e8: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
400258ec: a8c17bfd ldp x29, x30, [sp], #16 <== NOT EXECUTED
400258f0: d65f03c0 ret <== NOT EXECUTED
...
0000000040025900 <msdos_rename>:
const rtems_filesystem_location_info_t *old_loc,
const rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name,
size_t new_namelen
)
{
40025900: a9be7bfd stp x29, x30, [sp, #-32]! <== NOT EXECUTED
40025904: aa0203e0 mov x0, x2 <== NOT EXECUTED
/*
* create new directory entry as "hard link", copying relevant info from
* existing file
*/
rc = msdos_creat_node(new_parent_loc,
40025908: aa0303e2 mov x2, x3 <== NOT EXECUTED
{
4002590c: 910003fd mov x29, sp <== NOT EXECUTED
40025910: a90153f3 stp x19, x20, [sp, #16] <== NOT EXECUTED
rc = msdos_creat_node(new_parent_loc,
40025914: 2a0403e3 mov w3, w4 <== NOT EXECUTED
{
40025918: aa0103f3 mov x19, x1 <== NOT EXECUTED
fat_file_fd_t *old_fat_fd = old_loc->node_access;
4002591c: f9400834 ldr x20, [x1, #16] <== NOT EXECUTED
rc = msdos_creat_node(new_parent_loc,
40025920: 52900004 mov w4, #0x8000 // #32768 <== NOT EXECUTED
40025924: 52800041 mov w1, #0x2 // #2 <== NOT EXECUTED
40025928: aa1403e5 mov x5, x20 <== NOT EXECUTED
4002592c: 940029c9 bl 40030050 <msdos_creat_node> <== NOT EXECUTED
FAT_HARD_LINK,new_name,new_namelen,S_IFREG,
old_fat_fd);
if (rc != RC_OK)
40025930: 34000080 cbz w0, 40025940 <msdos_rename+0x40> <== NOT EXECUTED
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
&old_fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
return rc;
}
40025934: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40025938: a8c27bfd ldp x29, x30, [sp], #32 <== NOT EXECUTED
4002593c: d65f03c0 ret <== NOT EXECUTED
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
40025940: 9100a281 add x1, x20, #0x28 <== NOT EXECUTED
40025944: 12800342 mov w2, #0xffffffe5 // #-27 <== NOT EXECUTED
40025948: f9401660 ldr x0, [x19, #40] <== NOT EXECUTED
}
4002594c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40025950: a8c27bfd ldp x29, x30, [sp], #32 <== NOT EXECUTED
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
40025954: 14002cfb b 40030d40 <msdos_set_first_char4file_name> <== NOT EXECUTED
...
0000000040025960 <msdos_rmnod>:
#include "msdos.h"
int
msdos_rmnod(const rtems_filesystem_location_info_t *parent_pathloc,
const rtems_filesystem_location_info_t *pathloc)
{
40025960: a9bc7bfd stp x29, x30, [sp, #-64]!
40025964: 910003fd mov x29, sp
40025968: a9025bf5 stp x21, x22, [sp, #32]
int rc = RC_OK;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
4002596c: f9400835 ldr x21, [x1, #16]
{
40025970: a90153f3 stp x19, x20, [sp, #16]
40025974: aa0103f4 mov x20, x1
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
40025978: f9401420 ldr x0, [x1, #40]
if (fat_fd->fat_file_type == FAT_DIRECTORY)
4002597c: b9401aa1 ldr w1, [x21, #24]
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
40025980: f9400816 ldr x22, [x0, #16]
if (fat_fd->fat_file_type == FAT_DIRECTORY)
40025984: 350001a1 cbnz w1, 400259b8 <msdos_rmnod+0x58>
bool is_empty = false;
/*
* You cannot remove a node that still has children
*/
rc = msdos_dir_is_empty(pathloc->mt_entry, fat_fd, &is_empty);
40025988: 9100ffe2 add x2, sp, #0x3f
4002598c: aa1503e1 mov x1, x21
bool is_empty = false;
40025990: 3900ffff strb wzr, [sp, #63]
rc = msdos_dir_is_empty(pathloc->mt_entry, fat_fd, &is_empty);
40025994: 94002d3f bl 40030e90 <msdos_dir_is_empty>
40025998: 2a0003f3 mov w19, w0
if (rc != RC_OK)
4002599c: 35000180 cbnz w0, 400259cc <msdos_rmnod+0x6c> <== NEVER TAKEN
{
return rc;
}
if (!is_empty)
400259a0: 3940ffe0 ldrb w0, [sp, #63]
400259a4: 34000380 cbz w0, 40025a14 <msdos_rmnod+0xb4>
/*
* We deny attempts to delete open directory (if directory is current
* directory we assume it is open one)
*/
if (fat_fd->links_num > 1)
400259a8: b94012a0 ldr w0, [x21, #16]
400259ac: 7100041f cmp w0, #0x1
400259b0: 54000288 b.hi 40025a00 <msdos_rmnod+0xa0> // b.pmore <== NEVER TAKEN
* not used - mount() not implemenetd yet.
*/
}
/* mark file removed */
rc = msdos_set_first_char4file_name(pathloc->mt_entry, &fat_fd->dir_pos,
400259b4: f9401680 ldr x0, [x20, #40]
400259b8: 9100a2a1 add x1, x21, #0x28
400259bc: 12800342 mov w2, #0xffffffe5 // #-27
400259c0: 94002ce0 bl 40030d40 <msdos_set_first_char4file_name>
400259c4: 2a0003f3 mov w19, w0
MSDOS_THIS_DIR_ENTRY_EMPTY);
if (rc != RC_OK)
400259c8: 340000c0 cbz w0, 400259e0 <msdos_rmnod+0x80> <== ALWAYS TAKEN
}
fat_file_mark_removed(&fs_info->fat, fat_fd);
return rc;
}
400259cc: 2a1303e0 mov w0, w19
400259d0: a94153f3 ldp x19, x20, [sp, #16]
400259d4: a9425bf5 ldp x21, x22, [sp, #32]
400259d8: a8c47bfd ldp x29, x30, [sp], #64
400259dc: d65f03c0 ret
fat_file_mark_removed(&fs_info->fat, fat_fd);
400259e0: aa1503e1 mov x1, x21
400259e4: aa1603e0 mov x0, x22
400259e8: 940028e2 bl 4002fd70 <fat_file_mark_removed>
}
400259ec: 2a1303e0 mov w0, w19
400259f0: a94153f3 ldp x19, x20, [sp, #16]
400259f4: a9425bf5 ldp x21, x22, [sp, #32]
400259f8: a8c47bfd ldp x29, x30, [sp], #64
400259fc: d65f03c0 ret
rtems_set_errno_and_return_minus_one(EBUSY);
40025a00: 940053db bl 4003a96c <__errno> <== NOT EXECUTED
40025a04: 12800013 mov w19, #0xffffffff // #-1 <== NOT EXECUTED
40025a08: 52800201 mov w1, #0x10 // #16 <== NOT EXECUTED
40025a0c: b9000001 str w1, [x0] <== NOT EXECUTED
40025a10: 17ffffef b 400259cc <msdos_rmnod+0x6c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOTEMPTY);
40025a14: 940053d6 bl 4003a96c <__errno>
40025a18: 12800013 mov w19, #0xffffffff // #-1
40025a1c: 52800b41 mov w1, #0x5a // #90
40025a20: b9000001 str w1, [x0]
40025a24: 17ffffea b 400259cc <msdos_rmnod+0x6c>
...
0000000040030d40 <msdos_set_first_char4file_name>:
{
40030d40: a9bb7bfd stp x29, x30, [sp, #-80]!
40030d44: 910003fd mov x29, sp
40030d48: a90153f3 stp x19, x20, [sp, #16]
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40030d4c: f9400813 ldr x19, [x0, #16]
{
40030d50: a9025bf5 stp x21, x22, [sp, #32]
fat_pos_t start = dir_pos->lname;
40030d54: b9400c20 ldr w0, [x1, #12]
fat_pos_t end = dir_pos->sname;
40030d58: 29405834 ldp w20, w22, [x1]
{
40030d5c: 3900ffe2 strb w2, [sp, #63]
fat_pos_t start = dir_pos->lname;
40030d60: b9400822 ldr w2, [x1, #8]
40030d64: 290903e2 stp w2, w0, [sp, #72]
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
40030d68: b9404660 ldr w0, [x19, #68]
40030d6c: 6b14001f cmp w0, w20
40030d70: 54000840 b.eq 40030e78 <msdos_set_first_char4file_name+0x138> // b.none
dir_block_size = fs_info->fat.vol.bpc;
40030d74: b9400a75 ldr w21, [x19, #8]
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
40030d78: b9400820 ldr w0, [x1, #8]
40030d7c: 3100041f cmn w0, #0x1
40030d80: 54000740 b.eq 40030e68 <msdos_set_first_char4file_name+0x128> // b.none
(start.ofs >> fs_info->fat.vol.sec_log2));
40030d84: b9404fe5 ldr w5, [sp, #76]
uint32_t sec = (fat_cluster_num_to_sector_num(&fs_info->fat, start.cln) +
40030d88: b9404be1 ldr w1, [sp, #72]
40030d8c: 14000005 b 40030da0 <msdos_set_first_char4file_name+0x60>
start.ofs += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
40030d90: 110080a5 add w5, w5, #0x20
40030d94: b9004fe5 str w5, [sp, #76]
if (start.ofs >= dir_block_size)
40030d98: 6b1500bf cmp w5, w21
40030d9c: 540004c2 b.cs 40030e34 <msdos_set_first_char4file_name+0xf4> // b.hs, b.nlast
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40030da0: 51000820 sub w0, w1, #0x2
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40030da4: 35000081 cbnz w1, 40030db4 <msdos_set_first_char4file_name+0x74>
40030da8: 39405a61 ldrb w1, [x19, #22]
40030dac: f240043f tst x1, #0x3
40030db0: 54000341 b.ne 40030e18 <msdos_set_first_char4file_name+0xd8> // b.any<== ALWAYS TAKEN
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40030db4: 39401661 ldrb w1, [x19, #5]
40030db8: b9403e62 ldr w2, [x19, #60]
40030dbc: 1ac12001 lsl w1, w0, w1
40030dc0: 0b020021 add w1, w1, w2
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
40030dc4: 79400262 ldrh w2, [x19]
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
40030dc8: 9100ffe4 add x4, sp, #0x3f
(start.ofs >> fs_info->fat.vol.sec_log2));
40030dcc: 39400a66 ldrb w6, [x19, #2]
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
40030dd0: aa1303e0 mov x0, x19
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
40030dd4: 51000442 sub w2, w2, #0x1
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
40030dd8: 52800023 mov w3, #0x1 // #1
40030ddc: 0a050042 and w2, w2, w5
(start.ofs >> fs_info->fat.vol.sec_log2));
40030de0: 1ac624a5 lsr w5, w5, w6
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
40030de4: 0b0100a1 add w1, w5, w1
40030de8: 97fff27a bl 4002d7d0 <fat_sector_write>
if (ret < 0)
40030dec: b7f801a0 tbnz x0, #63, 40030e20 <msdos_set_first_char4file_name+0xe0><== NEVER TAKEN
if ((start.cln == end.cln) && (start.ofs == end.ofs))
40030df0: 294917e1 ldp w1, w5, [sp, #72]
40030df4: 6b01029f cmp w20, w1
40030df8: 54fffcc1 b.ne 40030d90 <msdos_set_first_char4file_name+0x50> // b.any
40030dfc: 6b0502df cmp w22, w5
40030e00: 54fffc81 b.ne 40030d90 <msdos_set_first_char4file_name+0x50> // b.any
return RC_OK;
40030e04: 52800000 mov w0, #0x0 // #0
}
40030e08: a94153f3 ldp x19, x20, [sp, #16]
40030e0c: a9425bf5 ldp x21, x22, [sp, #32]
40030e10: a8c57bfd ldp x29, x30, [sp], #80
40030e14: d65f03c0 ret
return fs_info->vol.rdir_loc;
40030e18: b9402a61 ldr w1, [x19, #40]
40030e1c: 17ffffea b 40030dc4 <msdos_set_first_char4file_name+0x84>
return -1;
40030e20: 12800000 mov w0, #0xffffffff // #-1 <== NOT EXECUTED
}
40030e24: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40030e28: a9425bf5 ldp x21, x22, [sp, #32] <== NOT EXECUTED
40030e2c: a8c57bfd ldp x29, x30, [sp], #80 <== NOT EXECUTED
40030e30: d65f03c0 ret <== NOT EXECUTED
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
40030e34: b9404660 ldr w0, [x19, #68]
40030e38: 6b00029f cmp w20, w0
40030e3c: 54000081 b.ne 40030e4c <msdos_set_first_char4file_name+0x10c> // b.any<== ALWAYS TAKEN
40030e40: 39405a60 ldrb w0, [x19, #22] <== NOT EXECUTED
40030e44: f240041f tst x0, #0x3 <== NOT EXECUTED
40030e48: 54fffde1 b.ne 40030e04 <msdos_set_first_char4file_name+0xc4> // b.any<== NOT EXECUTED
rc = fat_get_fat_cluster(&fs_info->fat, start.cln, &start.cln);
40030e4c: 910123e2 add x2, sp, #0x48
40030e50: aa1303e0 mov x0, x19
40030e54: 97fff60f bl 4002e690 <fat_get_fat_cluster>
if ( rc != RC_OK )
40030e58: 35fffe60 cbnz w0, 40030e24 <msdos_set_first_char4file_name+0xe4> <== NEVER TAKEN
start.ofs = 0;
40030e5c: 52800005 mov w5, #0x0 // #0
40030e60: b9004fff str wzr, [sp, #76]
40030e64: 17ffffc9 b 40030d88 <msdos_set_first_char4file_name+0x48>
start = dir_pos->sname;
40030e68: 29400022 ldp w2, w0, [x1]
40030e6c: 290903e2 stp w2, w0, [sp, #72]
(start.ofs >> fs_info->fat.vol.sec_log2));
40030e70: b9404fe5 ldr w5, [sp, #76]
40030e74: 17ffffc5 b 40030d88 <msdos_set_first_char4file_name+0x48>
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
40030e78: 39405a60 ldrb w0, [x19, #22]
40030e7c: f240041f tst x0, #0x3
40030e80: 54fff7a0 b.eq 40030d74 <msdos_set_first_char4file_name+0x34> // b.none<== NEVER TAKEN
dir_block_size = fs_info->fat.vol.rdir_size;
40030e84: b9403675 ldr w21, [x19, #52]
40030e88: 17ffffbc b 40030d78 <msdos_set_first_char4file_name+0x38>
40030e8c: 00000000 udf #0
0000000040025a30 <msdos_statvfs>:
#include "msdos.h"
int msdos_statvfs(
const rtems_filesystem_location_info_t *__restrict root_loc,
struct statvfs *__restrict sb)
{
40025a30: a9bb7bfd stp x29, x30, [sp, #-80]!
40025a34: 910003fd mov x29, sp
msdos_fs_info_t *fs_info = root_loc->mt_entry->fs_info;
40025a38: f9401400 ldr x0, [x0, #40]
{
40025a3c: a9025bf5 stp x21, x22, [sp, #32]
40025a40: a90153f3 stp x19, x20, [sp, #16]
40025a44: aa0103f3 mov x19, x1
msdos_fs_info_t *fs_info = root_loc->mt_entry->fs_info;
40025a48: f9400816 ldr x22, [x0, #16]
{
40025a4c: a90363f7 stp x23, x24, [sp, #48]
rtems_recursive_mutex_lock(&fs_info->vol_mutex);
40025a50: 910362d8 add x24, x22, #0xd8
_Mutex_recursive_Acquire( mutex );
40025a54: aa1803e0 mov x0, x24
40025a58: 94000e02 bl 40029260 <_Mutex_recursive_Acquire>
msdos_fs_lock(fs_info);
sb->f_bsize = FAT_SECTOR512_SIZE;
sb->f_frsize = vol->bpc;
sb->f_blocks = vol->data_cls;
40025a5c: b94042d7 ldr w23, [x22, #64]
sb->f_bavail = 0;
sb->f_files = 0; // FAT doesn't store inodes
sb->f_ffree = 0;
sb->f_favail = 0;
sb->f_flag = 0;
sb->f_namemax = MSDOS_NAME_MAX_LNF_LEN;
40025a60: d2801fe0 mov x0, #0xff // #255
sb->f_frsize = vol->bpc;
40025a64: b9400ac2 ldr w2, [x22, #8]
sb->f_bsize = FAT_SECTOR512_SIZE;
40025a68: d2804003 mov x3, #0x200 // #512
sb->f_blocks = vol->data_cls;
40025a6c: 2a1703e1 mov w1, w23
sb->f_frsize = vol->bpc;
40025a70: a9000a63 stp x3, x2, [x19]
sb->f_bfree = 0;
40025a74: a9017e61 stp x1, xzr, [x19, #16]
sb->f_files = 0; // FAT doesn't store inodes
40025a78: a9027e7f stp xzr, xzr, [x19, #32]
sb->f_favail = 0;
40025a7c: b900327f str wzr, [x19, #48]
sb->f_namemax = MSDOS_NAME_MAX_LNF_LEN;
40025a80: a904027f stp xzr, x0, [x19, #64]
if (vol->free_cls == FAT_UNDEFINED_VALUE)
40025a84: b9404ec0 ldr w0, [x22, #76]
40025a88: 3100041f cmn w0, #0x1
40025a8c: 54000180 b.eq 40025abc <msdos_statvfs+0x8c> // b.none <== ALWAYS TAKEN
}
}
}
else
{
sb->f_bfree = vol->free_cls;
40025a90: 2a0003e0 mov w0, w0 <== NOT EXECUTED
sb->f_bavail = vol->free_cls;
40025a94: a9018260 stp x0, x0, [x19, #24] <== NOT EXECUTED
}
msdos_fs_unlock(fs_info);
return RC_OK;
40025a98: 52800014 mov w20, #0x0 // #0
_Mutex_recursive_Release( mutex );
40025a9c: aa1803e0 mov x0, x24
40025aa0: 94000e14 bl 400292f0 <_Mutex_recursive_Release>
}
40025aa4: 2a1403e0 mov w0, w20
40025aa8: a94153f3 ldp x19, x20, [sp, #16]
40025aac: a9425bf5 ldp x21, x22, [sp, #32]
40025ab0: a94363f7 ldp x23, x24, [sp, #48]
40025ab4: a8c57bfd ldp x29, x30, [sp], #80
40025ab8: d65f03c0 ret
uint32_t value = 0;
40025abc: b9004fff str wzr, [sp, #76]
uint32_t data_cls_val = vol->data_cls + 2;
40025ac0: 11000af7 add w23, w23, #0x2
for (; cur_cl < data_cls_val; ++cur_cl)
40025ac4: 71000aff cmp w23, #0x2
uint32_t cur_cl = 2;
40025ac8: 52800055 mov w21, #0x2 // #2
for (; cur_cl < data_cls_val; ++cur_cl)
40025acc: 54fffe69 b.ls 40025a98 <msdos_statvfs+0x68> // b.plast <== NEVER TAKEN
rc = fat_get_fat_cluster(&fs_info->fat, cur_cl, &value);
40025ad0: 2a1503e1 mov w1, w21
40025ad4: 910133e2 add x2, sp, #0x4c
40025ad8: aa1603e0 mov x0, x22
for (; cur_cl < data_cls_val; ++cur_cl)
40025adc: 110006b5 add w21, w21, #0x1
rc = fat_get_fat_cluster(&fs_info->fat, cur_cl, &value);
40025ae0: 940022ec bl 4002e690 <fat_get_fat_cluster>
40025ae4: 2a0003f4 mov w20, w0
if (rc != RC_OK)
40025ae8: 35fffda0 cbnz w0, 40025a9c <msdos_statvfs+0x6c> <== NEVER TAKEN
if (value == FAT_GENFAT_FREE)
40025aec: b9404fe0 ldr w0, [sp, #76]
for (; cur_cl < data_cls_val; ++cur_cl)
40025af0: 6b1502ff cmp w23, w21
if (value == FAT_GENFAT_FREE)
40025af4: 350000a0 cbnz w0, 40025b08 <msdos_statvfs+0xd8>
sb->f_bavail++;
40025af8: a9418261 ldp x1, x0, [x19, #24]
sb->f_bfree++;
40025afc: 91000421 add x1, x1, #0x1
sb->f_bavail++;
40025b00: 91000400 add x0, x0, #0x1
40025b04: a9018261 stp x1, x0, [x19, #24]
for (; cur_cl < data_cls_val; ++cur_cl)
40025b08: 54fffe41 b.ne 40025ad0 <msdos_statvfs+0xa0> // b.any
40025b0c: 17ffffe3 b 40025a98 <msdos_statvfs+0x68>
0000000040030010 <rtems_dosfs_create_default_converter>:
rtems_dosfs_convert_control super;
uint8_t buffer[MSDOS_NAME_MAX_LFN_BYTES];
} msdos_default_convert_control;
rtems_dosfs_convert_control *rtems_dosfs_create_default_converter(void)
{
40030010: a9bf7bfd stp x29, x30, [sp, #-16]!
msdos_default_convert_control *self = malloc( sizeof( *self ) );
40030014: d2804400 mov x0, #0x220 // #544
{
40030018: 910003fd mov x29, sp
msdos_default_convert_control *self = malloc( sizeof( *self ) );
4003001c: 97ffc859 bl 40022180 <malloc>
if ( self != NULL ) {
40030020: b40000e0 cbz x0, 4003003c <rtems_dosfs_create_default_converter+0x2c> <== NEVER TAKEN
rtems_dosfs_convert_control *super = &self->super;
super->handler = &msdos_default_convert_handler;
40030024: aa0003e1 mov x1, x0
40030028: b00000c2 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0>
4003002c: 9108e042 add x2, x2, #0x238
super->buffer.data = &self->buffer;
super->buffer.size = sizeof( self->buffer );
40030030: d2804103 mov x3, #0x208 // #520
super->handler = &msdos_default_convert_handler;
40030034: f8018422 str x2, [x1], #24
super->buffer.size = sizeof( self->buffer );
40030038: a9008c01 stp x1, x3, [x0, #8]
}
return &self->super;
}
4003003c: a8c17bfd ldp x29, x30, [sp], #16
40030040: d65f03c0 ret
...
00000000400263c0 <rtems_dosfs_create_utf8_converter>:
};
rtems_dosfs_convert_control *rtems_dosfs_create_utf8_converter(
const char *codepage
)
{
400263c0: a9bd7bfd stp x29, x30, [sp, #-48]!
400263c4: 910003fd mov x29, sp
400263c8: a90153f3 stp x19, x20, [sp, #16]
400263cc: f90013f5 str x21, [sp, #32]
400263d0: aa0003f5 mov x21, x0
msdos_utf8_convert_control *self = malloc( sizeof( *self ) );
400263d4: d2808900 mov x0, #0x448 // #1096
400263d8: 97fff476 bl 400235b0 <malloc>
400263dc: aa0003f3 mov x19, x0
if ( self != NULL ) {
400263e0: b4000440 cbz x0, 40026468 <rtems_dosfs_create_utf8_converter+0xa8> <== NEVER TAKEN
self->desc_codepage_to_utf8 = iconv_open( "UTF-8", codepage );
400263e4: d0000194 adrp x20, 40058000 <_Console_simple_Handlers+0x78>
400263e8: 910c0294 add x20, x20, #0x300
400263ec: aa1503e1 mov x1, x21
400263f0: aa1403e0 mov x0, x20
400263f4: 940064bd bl 4003f6e8 <iconv_open>
400263f8: f9000e60 str x0, [x19, #24]
self->desc_utf8_to_codepage = iconv_open( codepage, "UTF-8" );
400263fc: aa1403e1 mov x1, x20
40026400: aa1503e0 mov x0, x21
40026404: 940064b9 bl 4003f6e8 <iconv_open>
40026408: f9001260 str x0, [x19, #32]
self->desc_utf16_to_utf8 = iconv_open( "UTF-8", "UTF-16LE" );
4002640c: d0000195 adrp x21, 40058000 <_Console_simple_Handlers+0x78>
40026410: 910c22b5 add x21, x21, #0x308
40026414: aa1503e1 mov x1, x21
40026418: aa1403e0 mov x0, x20
4002641c: 940064b3 bl 4003f6e8 <iconv_open>
40026420: f9001660 str x0, [x19, #40]
self->desc_utf8_to_utf16 = iconv_open( "UTF-16LE", "UTF-8" );
40026424: aa1403e1 mov x1, x20
40026428: aa1503e0 mov x0, x21
4002642c: 940064af bl 4003f6e8 <iconv_open>
40026430: f9001a60 str x0, [x19, #48]
if (
40026434: f9401661 ldr x1, [x19, #40]
40026438: b100043f cmn x1, #0x1
4002643c: 54000100 b.eq 4002645c <rtems_dosfs_create_utf8_converter+0x9c> // b.none<== NEVER TAKEN
self->desc_utf16_to_utf8 != INVALID_ICONV_DESC
&& self->desc_utf8_to_codepage != INVALID_ICONV_DESC
40026440: f9401261 ldr x1, [x19, #32]
40026444: b100043f cmn x1, #0x1
40026448: 540000a0 b.eq 4002645c <rtems_dosfs_create_utf8_converter+0x9c> // b.none<== NEVER TAKEN
&& self->desc_codepage_to_utf8 != INVALID_ICONV_DESC
&& self->desc_utf8_to_utf16 != INVALID_ICONV_DESC
4002644c: f9400e61 ldr x1, [x19, #24]
40026450: b100043f cmn x1, #0x1
40026454: ba411804 ccmn x0, #0x1, #0x4, ne // ne = any
40026458: 54000121 b.ne 4002647c <rtems_dosfs_create_utf8_converter+0xbc> // b.any<== ALWAYS TAKEN
super->handler = &msdos_utf8_convert_handler;
super->buffer.data = &self->buffer;
super->buffer.size = sizeof( self->buffer );
} else {
msdos_utf8_destroy( &self->super );
4002645c: aa1303e0 mov x0, x19 <== NOT EXECUTED
self = NULL;
40026460: d2800013 mov x19, #0x0 // #0 <== NOT EXECUTED
msdos_utf8_destroy( &self->super );
40026464: 97ffff2f bl 40026120 <msdos_utf8_destroy> <== NOT EXECUTED
}
}
return &self->super;
}
40026468: aa1303e0 mov x0, x19 <== NOT EXECUTED
4002646c: a94153f3 ldp x19, x20, [sp, #16] <== NOT EXECUTED
40026470: f94013f5 ldr x21, [sp, #32] <== NOT EXECUTED
40026474: a8c37bfd ldp x29, x30, [sp], #48 <== NOT EXECUTED
40026478: d65f03c0 ret <== NOT EXECUTED
super->handler = &msdos_utf8_convert_handler;
4002647c: aa1303e0 mov x0, x19
40026480: d0000181 adrp x1, 40058000 <_Console_simple_Handlers+0x78>
40026484: 910d2021 add x1, x1, #0x348
super->buffer.size = sizeof( self->buffer );
40026488: d2808202 mov x2, #0x410 // #1040
}
4002648c: f94013f5 ldr x21, [sp, #32]
super->handler = &msdos_utf8_convert_handler;
40026490: f8038401 str x1, [x0], #56
super->buffer.size = sizeof( self->buffer );
40026494: a9008a60 stp x0, x2, [x19, #8]
}
40026498: aa1303e0 mov x0, x19
4002649c: a94153f3 ldp x19, x20, [sp, #16]
400264a0: a8c37bfd ldp x29, x30, [sp], #48
400264a4: d65f03c0 ret
...
0000000040025640 <rtems_dosfs_initialize>:
*/
int rtems_dosfs_initialize(
rtems_filesystem_mount_table_entry_t *mt_entry,
const void *data
)
{
40025640: a9be7bfd stp x29, x30, [sp, #-32]!
40025644: 910003fd mov x29, sp
40025648: a90153f3 stp x19, x20, [sp, #16]
4002564c: aa0003f3 mov x19, x0
const rtems_dosfs_mount_options *mount_options = data;
rtems_dosfs_convert_control *converter;
bool converter_created = false;
if (mount_options == NULL || mount_options->converter == NULL) {
40025650: b4000181 cbz x1, 40025680 <rtems_dosfs_initialize+0x40>
40025654: f9400024 ldr x4, [x1]
40025658: b4000144 cbz x4, 40025680 <rtems_dosfs_initialize+0x40> <== NEVER TAKEN
errno = ENOMEM;
rc = -1;
}
return rc;
}
4002565c: a94153f3 ldp x19, x20, [sp, #16]
rc = msdos_initialize_support(mt_entry,
40025660: 90000123 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0>
}
40025664: a8c27bfd ldp x29, x30, [sp], #32
rc = msdos_initialize_support(mt_entry,
40025668: 9109e063 add x3, x3, #0x278
4002566c: 90000122 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0>
40025670: f0000101 adrp x1, 40048000 <bsp_section_rodata_begin+0x78>
40025674: 912ce021 add x1, x1, #0xb38
40025678: 910be042 add x2, x2, #0x2f8
4002567c: 1400001d b 400256f0 <msdos_initialize_support>
converter = rtems_dosfs_create_default_converter();
40025680: 94002a64 bl 40030010 <rtems_dosfs_create_default_converter>
40025684: aa0003f4 mov x20, x0
if (converter != NULL) {
40025688: b4000280 cbz x0, 400256d8 <rtems_dosfs_initialize+0x98> <== NEVER TAKEN
rc = msdos_initialize_support(mt_entry,
4002568c: aa1303e0 mov x0, x19
40025690: aa1403e4 mov x4, x20
40025694: 90000123 adrp x3, 40049000 <IMFS_node_control_sym_link+0xe0>
40025698: 90000122 adrp x2, 40049000 <IMFS_node_control_sym_link+0xe0>
4002569c: 9109e063 add x3, x3, #0x278
400256a0: 910be042 add x2, x2, #0x2f8
400256a4: f0000101 adrp x1, 40048000 <bsp_section_rodata_begin+0x78>
400256a8: 912ce021 add x1, x1, #0xb38
400256ac: 94000011 bl 400256f0 <msdos_initialize_support>
400256b0: 2a0003f3 mov w19, w0
if (rc != 0 && converter_created) {
400256b4: 340000a0 cbz w0, 400256c8 <rtems_dosfs_initialize+0x88> <== ALWAYS TAKEN
(*converter->handler->destroy)(converter);
400256b8: f9400281 ldr x1, [x20] <== NOT EXECUTED
400256bc: aa1403e0 mov x0, x20 <== NOT EXECUTED
400256c0: f9401421 ldr x1, [x1, #40] <== NOT EXECUTED
400256c4: d63f0020 blr x1 <== NOT EXECUTED
}
400256c8: 2a1303e0 mov w0, w19
400256cc: a94153f3 ldp x19, x20, [sp, #16]
400256d0: a8c27bfd ldp x29, x30, [sp], #32
400256d4: d65f03c0 ret
errno = ENOMEM;
400256d8: 940054a5 bl 4003a96c <__errno> <== NOT EXECUTED
rc = -1;
400256dc: 12800013 mov w19, #0xffffffff // #-1 <== NOT EXECUTED
errno = ENOMEM;
400256e0: 52800181 mov w1, #0xc // #12 <== NOT EXECUTED
400256e4: b9000001 str w1, [x0] <== NOT EXECUTED
return rc;
400256e8: 17fffff8 b 400256c8 <rtems_dosfs_initialize+0x88> <== NOT EXECUTED
400256ec: 00000000 udf #0