RTEMS-5
Annotated Report
Fri Aug 10 13:43:31 2018
4002a5f4 <MSDOS_DOTDOT_NAME>:
4002a5f4: 40 02 a5 08 @...
4002a5f8 <MSDOS_DOT_NAME>:
4002a5f8: 40 02 a4 f8 @...
40014698 <_fat_block_read>:
uint32_t start,
uint32_t offset,
uint32_t count,
void *buff
)
{
40014698: 9d e3 bf 98 save %sp, -104, %sp
4001469c: a0 10 00 18 mov %i0, %l0
uint32_t sec_num = start;
uint32_t ofs = offset;
uint8_t *sec_buf;
uint32_t c = 0;
while (count > 0)
400146a0: 80 a6 e0 00 cmp %i3, 0
400146a4: 12 80 00 11 bne 400146e8 <_fat_block_read+0x50>
<== ALWAYS TAKEN
400146a8: b0 10 20 00 clr %i0
400146ac: 30 80 00 19 b,a 40014710 <_fat_block_read+0x78>
<== NOT EXECUTED
{
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));
400146b0: fa 14 00 00 lduh [ %l0 ], %i5
400146b4: ba 27 40 1a sub %i5, %i2, %i5
400146b8: 80 a7 40 1b cmp %i5, %i3
400146bc: 38 80 00 02 bgu,a 400146c4 <_fat_block_read+0x2c>
400146c0: ba 10 00 1b mov %i3, %i5
memcpy((buff + cmpltd), (sec_buf + ofs), c);
400146c4: d2 07 bf fc ld [ %fp + -4 ], %o1
400146c8: 92 02 40 1a add %o1, %i2, %o1
400146cc: 40 00 1d 8d call 4001bd00 <memcpy>
400146d0: 94 10 00 1d mov %i5, %o2
count -= c;
cmpltd += c;
400146d4: b0 06 00 1d add %i0, %i5, %i0
sec_num++;
400146d8: b2 06 60 01 inc %i1
while (count > 0)
400146dc: b6 a6 c0 1d subcc %i3, %i5, %i3
400146e0: 02 80 00 0c be 40014710 <_fat_block_read+0x78>
400146e4: b4 10 20 00 clr %i2
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &sec_buf);
400146e8: 92 10 00 19 mov %i1, %o1
400146ec: 96 07 bf fc add %fp, -4, %o3
400146f0: 94 10 20 01 mov 1, %o2
400146f4: 7f ff ff b0 call 400145b4 <fat_buf_access>
400146f8: 90 10 00 10 mov %l0, %o0
if (rc != RC_OK)
400146fc: 80 a2 20 00 cmp %o0, 0
40014700: 02 bf ff ec be 400146b0 <_fat_block_read+0x18>
<== ALWAYS TAKEN
40014704: 90 07 00 18 add %i4, %i0, %o0
ofs = 0;
}
return cmpltd;
}
40014708: 81 c7 e0 08 ret
<== NOT EXECUTED
4001470c: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
40014710: 81 c7 e0 08 ret
40014714: 81 e8 00 00 restore
400145b4 <fat_buf_access>:
{
400145b4: 9d e3 bf 98 save %sp, -104, %sp
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
400145b8: fa 0e 20 02 ldub [ %i0 + 2 ], %i5
400145bc: c2 0e 20 14 ldub [ %i0 + 0x14 ], %g1
if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num)
400145c0: c4 0e 20 91 ldub [ %i0 + 0x91 ], %g2
400145c4: 82 20 40 1d sub %g1, %i5, %g1
{
400145c8: b8 10 00 18 mov %i0, %i4
400145cc: 93 36 40 01 srl %i1, %g1, %o1
if (fs_info->c.state == FAT_CACHE_EMPTY || fs_info->c.blk_num != sec_num)
400145d0: 80 a0 a0 00 cmp %g2, 0
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
400145d4: 83 2a 40 01 sll %o1, %g1, %g1
((sector -
400145d8: 82 26 40 01 sub %i1, %g1, %g1
400145dc: 02 80 00 0a be 40014604 <fat_buf_access+0x50>
400145e0: bb 28 40 1d sll %g1, %i5, %i5
400145e4: d2 27 bf fc st %o1, [ %fp + -4 ]
400145e8: c2 06 20 8c ld [ %i0 + 0x8c ], %g1
400145ec: 80 a0 40 19 cmp %g1, %i1
400145f0: 22 80 00 12 be,a 40014638 <fat_buf_access+0x84>
400145f4: c2 07 20 94 ld [ %i4 + 0x94 ], %g1
400145f8: 7f ff ff 79 call 400143dc <fat_buf_release.part.5>
400145fc: 90 10 00 18 mov %i0, %o0
40014600: d2 07 bf fc ld [ %fp + -4 ], %o1
40014604: d0 07 20 6c ld [ %i4 + 0x6c ], %o0
if (op_type == FAT_OP_TYPE_READ)
40014608: 80 a6 a0 01 cmp %i2, 1
4001460c: 02 80 00 10 be 4001464c <fat_buf_access+0x98>
40014610: 94 07 20 94 add %i4, 0x94, %o2
sc = rtems_bdbuf_get(fs_info->vol.dd, blk, &fs_info->c.buf);
40014614: 7f ff f4 bc call 40011904 <rtems_bdbuf_get>
40014618: 01 00 00 00 nop
if (sc != RTEMS_SUCCESSFUL)
4001461c: 80 a2 20 00 cmp %o0, 0
40014620: 12 80 00 0f bne 4001465c <fat_buf_access+0xa8>
<== NEVER TAKEN
40014624: 82 10 20 01 mov 1, %g1
fs_info->c.blk_num = sec_num;
40014628: f2 27 20 8c st %i1, [ %i4 + 0x8c ]
fs_info->c.modified = 0;
4001462c: c0 2f 20 90 clrb [ %i4 + 0x90 ]
fs_info->c.state = FAT_CACHE_ACTUAL;
40014630: c2 2f 20 91 stb %g1, [ %i4 + 0x91 ]
*sec_buf = &fs_info->c.buf->buffer[blk_ofs];
40014634: c2 07 20 94 ld [ %i4 + 0x94 ], %g1
40014638: c2 00 60 1c ld [ %g1 + 0x1c ], %g1
4001463c: 82 00 40 1d add %g1, %i5, %g1
40014640: c2 26 c0 00 st %g1, [ %i3 ]
}
40014644: 81 c7 e0 08 ret
40014648: 91 e8 20 00 restore %g0, 0, %o0
sc = rtems_bdbuf_read(fs_info->vol.dd, blk, &fs_info->c.buf);
4001464c: 7f ff f4 ee call 40011a04 <rtems_bdbuf_read>
40014650: 01 00 00 00 nop
40014654: 10 bf ff f3 b 40014620 <fat_buf_access+0x6c>
40014658: 80 a2 20 00 cmp %o0, 0
rtems_set_errno_and_return_minus_one(EIO);
4001465c: 40 00 1a b8 call 4001b13c <__errno>
<== NOT EXECUTED
40014660: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40014664: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
40014668: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4001466c: 81 c7 e0 08 ret
<== NOT EXECUTED
40014670: 81 e8 00 00 restore
<== NOT EXECUTED
400147c4 <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)
{
400147c4: 9d e3 bf 98 save %sp, -104, %sp
ssize_t rc = RC_OK;
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
400147c8: e0 06 20 08 ld [ %i0 + 8 ], %l0
400147cc: a0 24 00 1a sub %l0, %i2, %l0
400147d0: 80 a4 00 1b cmp %l0, %i3
400147d4: 38 80 00 02 bgu,a 400147dc <fat_cluster_set+0x18>
<== NEVER TAKEN
400147d8: a0 10 00 1b mov %i3, %l0
<== NOT EXECUTED
400147dc: c2 0e 20 14 ldub [ %i0 + 0x14 ], %g1
400147e0: c4 0e 20 02 ldub [ %i0 + 2 ], %g2
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
400147e4: 80 a6 60 00 cmp %i1, 0
400147e8: 12 80 00 06 bne 40014800 <fat_cluster_set+0x3c>
<== ALWAYS TAKEN
400147ec: 86 20 40 02 sub %g1, %g2, %g3
400147f0: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
<== NOT EXECUTED
400147f4: 80 88 a0 03 btst 3, %g2
<== NOT EXECUTED
400147f8: 32 80 00 4c bne,a 40014928 <fat_cluster_set+0x164>
<== NOT EXECUTED
400147fc: e4 06 20 28 ld [ %i0 + 0x28 ], %l2
<== NOT EXECUTED
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
40014800: e4 0e 20 0c ldub [ %i0 + 0xc ], %l2
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
40014804: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
cln -= FAT_RSRVD_CLN;
40014808: b2 06 7f fe add %i1, -2, %i1
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4001480c: a4 24 80 01 sub %l2, %g1, %l2
40014810: 85 30 80 03 srl %g2, %g3, %g2
40014814: b3 2e 40 12 sll %i1, %l2, %i1
blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec);
40014818: 84 00 80 19 add %g2, %i1, %g2
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;
4001481c: a5 36 80 01 srl %i2, %g1, %l2
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
40014820: 83 2c 80 01 sll %l2, %g1, %g1
ssize_t bytes_written = 0;
40014824: b2 10 20 00 clr %i1
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
40014828: b4 26 80 01 sub %i2, %g1, %i2
ssize_t ret;
cur_blk += blocks_in_offset;
4001482c: a4 04 80 02 add %l2, %g2, %l2
ssize_t rc = RC_OK;
40014830: 82 10 20 00 clr %g1
while ( (RC_OK == rc)
40014834: 80 a0 60 00 cmp %g1, 0
40014838: 12 80 00 26 bne 400148d0 <fat_cluster_set+0x10c>
<== NEVER TAKEN
4001483c: a2 10 20 01 mov 1, %l1
40014840: 80 a4 20 00 cmp %l0, 0
40014844: 02 80 00 23 be 400148d0 <fat_cluster_set+0x10c>
40014848: 80 a0 60 00 cmp %g1, 0
&& (0 < bytes_to_write))
{
uint32_t c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
4001484c: c2 06 20 10 ld [ %i0 + 0x10 ], %g1
40014850: ba 20 40 1a sub %g1, %i2, %i5
40014854: 80 a7 40 10 cmp %i5, %l0
40014858: 08 80 00 03 bleu 40014864 <fat_cluster_set+0xa0>
<== ALWAYS TAKEN
4001485c: b6 10 00 1d mov %i5, %i3
40014860: b6 10 00 10 mov %l0, %i3
<== NOT EXECUTED
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
40014864: 80 a7 40 1b cmp %i5, %i3
40014868: 38 80 00 02 bgu,a 40014870 <fat_cluster_set+0xac>
<== NEVER TAKEN
4001486c: ba 10 00 1b mov %i3, %i5
<== NOT EXECUTED
if (0 < bytes_to_write)
40014870: 80 a7 60 00 cmp %i5, 0
40014874: 02 80 00 0f be 400148b0 <fat_cluster_set+0xec>
<== NEVER TAKEN
40014878: 90 10 00 1d mov %i5, %o0
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
4001487c: d2 0e 20 14 ldub [ %i0 + 0x14 ], %o1
40014880: c4 0e 20 02 ldub [ %i0 + 2 ], %g2
40014884: 92 22 40 02 sub %o1, %g2, %o1
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
40014888: 96 07 bf fc add %fp, -4, %o3
if (bytes_to_write == fs_info->vol.bytes_per_block)
4001488c: 80 a0 40 1d cmp %g1, %i5
40014890: 02 80 00 21 be 40014914 <fat_cluster_set+0x150>
40014894: 93 2c 80 09 sll %l2, %o1, %o1
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf);
40014898: 94 10 20 01 mov 1, %o2
4001489c: 7f ff ff 46 call 400145b4 <fat_buf_access>
400148a0: 90 10 00 18 mov %i0, %o0
if (RC_OK == rc)
400148a4: 80 a2 20 00 cmp %o0, 0
400148a8: 22 80 00 14 be,a 400148f8 <fat_cluster_set+0x134>
<== ALWAYS TAKEN
400148ac: d0 07 bf fc ld [ %fp + -4 ], %o0
fs_info,
cur_blk,
ofs_blk,
c,
pattern);
if (c != ret)
400148b0: 80 a2 00 1b cmp %o0, %i3
400148b4: 02 80 00 0b be 400148e0 <fat_cluster_set+0x11c>
<== ALWAYS TAKEN
400148b8: 82 10 3f ff mov -1, %g1
400148bc: b4 10 20 00 clr %i2
<== NOT EXECUTED
while ( (RC_OK == rc)
400148c0: 80 a0 60 00 cmp %g1, 0
400148c4: 02 bf ff e0 be 40014844 <fat_cluster_set+0x80>
<== ALWAYS TAKEN
400148c8: 80 a4 20 00 cmp %l0, 0
bytes_written += ret;
++cur_blk;
}
ofs_blk = 0;
}
if (RC_OK != rc)
400148cc: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
400148d0: 32 80 00 02 bne,a 400148d8 <fat_cluster_set+0x114>
<== NEVER TAKEN
400148d4: b2 10 3f ff mov -1, %i1
<== NOT EXECUTED
return rc;
else
return bytes_written;
}
400148d8: 81 c7 e0 08 ret
400148dc: 91 e8 00 19 restore %g0, %i1, %o0
bytes_to_write -= ret;
400148e0: a0 24 00 08 sub %l0, %o0, %l0
bytes_written += ret;
400148e4: b2 06 40 08 add %i1, %o0, %i1
++cur_blk;
400148e8: a4 04 a0 01 inc %l2
400148ec: 82 10 20 00 clr %g1
400148f0: 10 bf ff f4 b 400148c0 <fat_cluster_set+0xfc>
400148f4: b4 10 20 00 clr %i2
memset(blk_buf + offset, pattern, bytes_to_write);
400148f8: 94 10 00 1d mov %i5, %o2
400148fc: 92 10 00 1c mov %i4, %o1
40014900: 40 00 1d 3c call 4001bdf0 <memset>
40014904: 90 02 00 1a add %o0, %i2, %o0
fs_info->c.modified = true;
40014908: e2 2e 20 90 stb %l1, [ %i0 + 0x90 ]
return bytes_to_write;
4001490c: 10 bf ff e9 b 400148b0 <fat_cluster_set+0xec>
40014910: 90 10 00 1d mov %i5, %o0
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
40014914: 94 10 20 02 mov 2, %o2
40014918: 7f ff ff 27 call 400145b4 <fat_buf_access>
4001491c: 90 10 00 18 mov %i0, %o0
if (RC_OK == rc)
40014920: 10 bf ff e2 b 400148a8 <fat_cluster_set+0xe4>
40014924: 80 a2 20 00 cmp %o0, 0
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
40014928: 10 bf ff bd b 4001481c <fat_cluster_set+0x58>
<== NOT EXECUTED
4001492c: 85 34 80 03 srl %l2, %g3, %g2
<== NOT EXECUTED
40014930 <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)
{
40014930: 9d e3 bf 98 save %sp, -104, %sp
ssize_t rc = RC_OK;
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bpc - offset));
40014934: e0 06 20 08 ld [ %i0 + 8 ], %l0
40014938: a0 24 00 1a sub %l0, %i2, %l0
4001493c: 80 a4 00 1b cmp %l0, %i3
40014940: 38 80 00 02 bgu,a 40014948 <fat_cluster_write+0x18>
40014944: a0 10 00 1b mov %i3, %l0
40014948: c2 0e 20 14 ldub [ %i0 + 0x14 ], %g1
4001494c: c4 0e 20 02 ldub [ %i0 + 2 ], %g2
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40014950: 80 a6 60 00 cmp %i1, 0
40014954: 12 80 00 06 bne 4001496c <fat_cluster_write+0x3c>
40014958: 86 20 40 02 sub %g1, %g2, %g3
4001495c: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
40014960: 80 88 a0 03 btst 3, %g2
40014964: 32 80 00 4c bne,a 40014a94 <fat_cluster_write+0x164>
<== ALWAYS TAKEN
40014968: e4 06 20 28 ld [ %i0 + 0x28 ], %l2
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
4001496c: e4 0e 20 0c ldub [ %i0 + 0xc ], %l2
40014970: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
cln -= FAT_RSRVD_CLN;
40014974: b2 06 7f fe add %i1, -2, %i1
blk = cln << (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2);
40014978: a4 24 80 01 sub %l2, %g1, %l2
4001497c: 85 30 80 03 srl %g2, %g3, %g2
40014980: b3 2e 40 12 sll %i1, %l2, %i1
blk += fat_sector_num_to_block_num(fs_info, fs_info->vol.data_fsec);
40014984: 84 00 80 19 add %g2, %i1, %g2
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);
40014988: a5 36 80 01 srl %i2, %g1, %l2
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
4001498c: 83 2c 80 01 sll %l2, %g1, %g1
ssize_t bytes_written = 0;
40014990: b2 10 20 00 clr %i1
uint32_t ofs_blk = offset - (blocks_in_offset << fs_info->vol.bytes_per_block_log2);
40014994: b4 26 80 01 sub %i2, %g1, %i2
uint8_t *buffer = (uint8_t*)buff;
ssize_t ret;
uint32_t c;
cur_blk += blocks_in_offset;
40014998: a4 04 80 02 add %l2, %g2, %l2
ssize_t rc = RC_OK;
4001499c: 82 10 20 00 clr %g1
while ( (RC_OK == rc)
400149a0: 80 a0 60 00 cmp %g1, 0
400149a4: 12 80 00 26 bne 40014a3c <fat_cluster_write+0x10c>
<== NEVER TAKEN
400149a8: a2 10 20 01 mov 1, %l1
400149ac: 80 a4 20 00 cmp %l0, 0
400149b0: 02 80 00 23 be 40014a3c <fat_cluster_write+0x10c>
400149b4: 80 a0 60 00 cmp %g1, 0
&& (0 < bytes_to_write))
{
c = MIN(bytes_to_write, (fs_info->vol.bytes_per_block - ofs_blk));
400149b8: c2 06 20 10 ld [ %i0 + 0x10 ], %g1
400149bc: ba 20 40 1a sub %g1, %i2, %i5
400149c0: 80 a7 40 10 cmp %i5, %l0
400149c4: 08 80 00 03 bleu 400149d0 <fat_cluster_write+0xa0>
400149c8: b6 10 00 1d mov %i5, %i3
400149cc: b6 10 00 10 mov %l0, %i3
uint32_t bytes_to_write = MIN(count, (fs_info->vol.bytes_per_block - offset));
400149d0: 80 a7 40 1b cmp %i5, %i3
400149d4: 38 80 00 02 bgu,a 400149dc <fat_cluster_write+0xac>
400149d8: ba 10 00 1b mov %i3, %i5
if (0 < bytes_to_write)
400149dc: 80 a7 60 00 cmp %i5, 0
400149e0: 02 80 00 0f be 40014a1c <fat_cluster_write+0xec>
<== NEVER TAKEN
400149e4: 90 10 00 1d mov %i5, %o0
return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
400149e8: d2 0e 20 14 ldub [ %i0 + 0x14 ], %o1
400149ec: c4 0e 20 02 ldub [ %i0 + 2 ], %g2
400149f0: 92 22 40 02 sub %o1, %g2, %o1
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
400149f4: 96 07 bf fc add %fp, -4, %o3
if (bytes_to_write == fs_info->vol.bytes_per_block)
400149f8: 80 a0 40 1d cmp %g1, %i5
400149fc: 02 80 00 21 be 40014a80 <fat_cluster_write+0x150>
40014a00: 93 2c 80 09 sll %l2, %o1, %o1
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_READ, &blk_buf);
40014a04: 94 10 20 01 mov 1, %o2
40014a08: 7f ff fe eb call 400145b4 <fat_buf_access>
40014a0c: 90 10 00 18 mov %i0, %o0
if (RC_OK == rc)
40014a10: 80 a2 20 00 cmp %o0, 0
40014a14: 22 80 00 14 be,a 40014a64 <fat_cluster_write+0x134>
<== ALWAYS TAKEN
40014a18: d0 07 bf fc ld [ %fp + -4 ], %o0
fs_info,
cur_blk,
ofs_blk,
c,
&buffer[bytes_written]);
if (c != ret)
40014a1c: 80 a2 00 1b cmp %o0, %i3
40014a20: 02 80 00 0b be 40014a4c <fat_cluster_write+0x11c>
<== ALWAYS TAKEN
40014a24: 82 10 3f ff mov -1, %g1
40014a28: b4 10 20 00 clr %i2
<== NOT EXECUTED
while ( (RC_OK == rc)
40014a2c: 80 a0 60 00 cmp %g1, 0
40014a30: 02 bf ff e0 be 400149b0 <fat_cluster_write+0x80>
<== ALWAYS TAKEN
40014a34: 80 a4 20 00 cmp %l0, 0
bytes_written += ret;
++cur_blk;
}
ofs_blk = 0;
}
if (RC_OK != rc)
40014a38: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40014a3c: 32 80 00 02 bne,a 40014a44 <fat_cluster_write+0x114>
<== NEVER TAKEN
40014a40: b2 10 3f ff mov -1, %i1
<== NOT EXECUTED
return rc;
else
return bytes_written;
}
40014a44: 81 c7 e0 08 ret
40014a48: 91 e8 00 19 restore %g0, %i1, %o0
bytes_to_write -= ret;
40014a4c: a0 24 00 08 sub %l0, %o0, %l0
bytes_written += ret;
40014a50: b2 06 40 08 add %i1, %o0, %i1
++cur_blk;
40014a54: a4 04 a0 01 inc %l2
40014a58: 82 10 20 00 clr %g1
40014a5c: 10 bf ff f4 b 40014a2c <fat_cluster_write+0xfc>
40014a60: b4 10 20 00 clr %i2
memcpy(blk_buf + offset, buf, bytes_to_write);
40014a64: 94 10 00 1d mov %i5, %o2
40014a68: 92 07 00 19 add %i4, %i1, %o1
40014a6c: 40 00 1c a5 call 4001bd00 <memcpy>
40014a70: 90 02 00 1a add %o0, %i2, %o0
fs_info->c.modified = true;
40014a74: e2 2e 20 90 stb %l1, [ %i0 + 0x90 ]
return bytes_to_write;
40014a78: 10 bf ff e9 b 40014a1c <fat_cluster_write+0xec>
40014a7c: 90 10 00 1d mov %i5, %o0
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &blk_buf);
40014a80: 94 10 20 02 mov 2, %o2
40014a84: 7f ff fe cc call 400145b4 <fat_buf_access>
40014a88: 90 10 00 18 mov %i0, %o0
if (RC_OK == rc)
40014a8c: 10 bf ff e2 b 40014a14 <fat_cluster_write+0xe4>
40014a90: 80 a2 20 00 cmp %o0, 0
return sector_number >> (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2);
40014a94: 10 bf ff bd b 40014988 <fat_cluster_write+0x58>
40014a98: 85 34 80 03 srl %l2, %g3, %g2
40013c8c <fat_file_close>:
{
40013c8c: 9d e3 bf a0 save %sp, -96, %sp
if (fat_fd->links_num > 1)
40013c90: c2 06 60 08 ld [ %i1 + 8 ], %g1
40013c94: 80 a0 60 01 cmp %g1, 1
40013c98: 08 80 00 05 bleu 40013cac <fat_file_close+0x20>
40013c9c: 82 00 7f ff add %g1, -1, %g1
fat_fd->links_num--;
40013ca0: c2 26 60 08 st %g1, [ %i1 + 8 ]
rc = fat_buf_release(fs_info);
40013ca4: 40 00 02 74 call 40014674 <fat_buf_release>
40013ca8: 81 e8 00 00 restore
fat_file_update(fs_info, fat_fd);
40013cac: 92 10 00 19 mov %i1, %o1
40013cb0: 7f ff ff 17 call 4001390c <fat_file_update>
40013cb4: 90 10 00 18 mov %i0, %o0
if (fat_fd->flags & FAT_FILE_REMOVED)
40013cb8: c2 0e 60 30 ldub [ %i1 + 0x30 ], %g1
40013cbc: 80 88 60 01 btst 1, %g1
40013cc0: 12 80 00 0b bne 40013cec <fat_file_close+0x60>
40013cc4: 94 10 20 00 clr %o2
if (fat_ino_is_unique(fs_info, fat_fd->ino))
40013cc8: d2 06 60 0c ld [ %i1 + 0xc ], %o1
40013ccc: 40 00 06 7e call 400156c4 <fat_ino_is_unique>
40013cd0: 90 10 00 18 mov %i0, %o0
40013cd4: 80 a2 20 00 cmp %o0, 0
40013cd8: 22 80 00 1b be,a 40013d44 <fat_file_close+0xb8>
40013cdc: c4 06 40 00 ld [ %i1 ], %g2
fat_fd->links_num = 0;
40013ce0: c0 26 60 08 clr [ %i1 + 8 ]
<== NOT EXECUTED
rc = fat_buf_release(fs_info);
40013ce4: 40 00 02 64 call 40014674 <fat_buf_release>
<== NOT EXECUTED
40013ce8: 81 e8 00 00 restore
rc = fat_file_truncate(fs_info, fat_fd, 0);
40013cec: 92 10 00 19 mov %i1, %o1
40013cf0: 7f ff ff a4 call 40013b80 <fat_file_truncate>
40013cf4: 90 10 00 18 mov %i0, %o0
if (rc == RC_OK)
40013cf8: 80 a2 20 00 cmp %o0, 0
40013cfc: 12 bf ff ea bne 40013ca4 <fat_file_close+0x18>
<== NEVER TAKEN
40013d00: 90 10 00 18 mov %i0, %o0
next = the_node->next;
40013d04: c4 06 40 00 ld [ %i1 ], %g2
previous = the_node->previous;
40013d08: c2 06 60 04 ld [ %i1 + 4 ], %g1
_hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd);
40013d0c: d2 06 60 0c ld [ %i1 + 0xc ], %o1
next->previous = previous;
40013d10: c2 20 a0 04 st %g1, [ %g2 + 4 ]
if (fat_ino_is_unique(fs_info, fat_fd->ino))
40013d14: 40 00 06 6c call 400156c4 <fat_ino_is_unique>
40013d18: c4 20 40 00 st %g2, [ %g1 ]
40013d1c: 80 a2 20 00 cmp %o0, 0
40013d20: 02 80 00 05 be 40013d34 <fat_file_close+0xa8>
<== ALWAYS TAKEN
40013d24: 01 00 00 00 nop
fat_free_unique_ino(fs_info, fat_fd->ino);
40013d28: d2 06 60 0c ld [ %i1 + 0xc ], %o1
<== NOT EXECUTED
40013d2c: 40 00 06 5b call 40015698 <fat_free_unique_ino>
<== NOT EXECUTED
40013d30: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
free(fat_fd);
40013d34: 7f ff c5 a7 call 400053d0 <free>
40013d38: 90 10 00 19 mov %i1, %o0
rc = fat_buf_release(fs_info);
40013d3c: 40 00 02 4e call 40014674 <fat_buf_release>
40013d40: 81 e8 00 00 restore
previous = the_node->previous;
40013d44: c2 06 60 04 ld [ %i1 + 4 ], %g1
next->previous = previous;
40013d48: c2 20 a0 04 st %g1, [ %g2 + 4 ]
free(fat_fd);
40013d4c: 90 10 00 19 mov %i1, %o0
40013d50: 7f ff c5 a0 call 400053d0 <free>
40013d54: c4 20 40 00 st %g2, [ %g1 ]
rc = fat_buf_release(fs_info);
40013d58: 40 00 02 47 call 40014674 <fat_buf_release>
40013d5c: 81 e8 00 00 restore
40013e34 <fat_file_extend>:
{
40013e34: 9d e3 bf 90 save %sp, -112, %sp
*a_length = new_length;
40013e38: f6 27 00 00 st %i3, [ %i4 ]
uint32_t chain = 0;
40013e3c: c0 27 bf f0 clr [ %fp + -16 ]
uint32_t last_cl = 0;
40013e40: c0 27 bf f8 clr [ %fp + -8 ]
if (new_length <= fat_fd->fat_file_size)
40013e44: c2 06 60 18 ld [ %i1 + 0x18 ], %g1
40013e48: 80 a0 40 1b cmp %g1, %i3
40013e4c: 1a 80 00 54 bcc 40013f9c <fat_file_extend+0x168>
40013e50: a0 10 20 00 clr %l0
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
40013e54: c4 06 60 20 ld [ %i1 + 0x20 ], %g2
40013e58: 80 a0 a0 01 cmp %g2, 1
40013e5c: 22 80 00 53 be,a 40013fa8 <fat_file_extend+0x174>
40013e60: c4 06 60 24 ld [ %i1 + 0x24 ], %g2
bytes_remain = (fs_info->vol.bpc -
40013e64: fa 06 20 08 ld [ %i0 + 8 ], %i5
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
40013e68: 84 07 7f ff add %i5, -1, %g2
40013e6c: a4 08 40 02 and %g1, %g2, %l2
bytes_remain = (fs_info->vol.bpc -
40013e70: ba 27 40 12 sub %i5, %l2, %i5
40013e74: ba 0f 40 02 and %i5, %g2, %i5
40013e78: 80 a0 00 1d cmp %g0, %i5
bytes2add = new_length - fat_fd->fat_file_size;
40013e7c: 86 26 c0 01 sub %i3, %g1, %g3
40013e80: 84 40 20 00 addx %g0, 0, %g2
if (bytes2add > bytes_remain)
40013e84: 80 a7 40 03 cmp %i5, %g3
40013e88: 1a 80 00 41 bcc 40013f8c <fat_file_extend+0x158>
40013e8c: 84 0e 80 02 and %i2, %g2, %g2
if (zero_fill && bytes_remain > 0) {
40013e90: 80 a0 a0 00 cmp %g2, 0
40013e94: 12 80 00 51 bne 40013fd8 <fat_file_extend+0x1a4>
<== NEVER TAKEN
40013e98: a2 20 c0 1d sub %g3, %i5, %l1
if (bytes2add == 0)
40013e9c: 80 a4 60 00 cmp %l1, 0
40013ea0: 02 80 00 3e be 40013f98 <fat_file_extend+0x164>
40013ea4: 9a 10 00 1a mov %i2, %o5
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
40013ea8: c4 0e 20 0c ldub [ %i0 + 0xc ], %g2
40013eac: 82 04 7f ff add %l1, -1, %g1
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
40013eb0: 98 07 bf f8 add %fp, -8, %o4
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
40013eb4: b5 30 40 02 srl %g1, %g2, %i2
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
40013eb8: 96 07 bf fc add %fp, -4, %o3
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
40013ebc: b4 06 a0 01 inc %i2
rc = fat_scan_fat_for_free_clusters(fs_info, &chain, cls2add,
40013ec0: 92 07 bf f0 add %fp, -16, %o1
40013ec4: 94 10 00 1a mov %i2, %o2
40013ec8: 7f ff fd 2d call 4001337c <fat_scan_fat_for_free_clusters>
40013ecc: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013ed0: a0 92 20 00 orcc %o0, 0, %l0
40013ed4: 32 80 00 33 bne,a 40013fa0 <fat_file_extend+0x16c>
<== NEVER TAKEN
40013ed8: b0 10 00 10 mov %l0, %i0
<== NOT EXECUTED
if ((cls_added == 0) && (bytes_remain == 0))
40013edc: c2 07 bf fc ld [ %fp + -4 ], %g1
40013ee0: 80 90 40 1d orcc %g1, %i5, %g0
40013ee4: 02 80 00 38 be 40013fc4 <fat_file_extend+0x190>
40013ee8: 80 a0 40 1a cmp %g1, %i2
if (cls2add != cls_added)
40013eec: 02 80 00 08 be 40013f0c <fat_file_extend+0xd8>
40013ef0: b4 26 80 01 sub %i2, %g1, %i2
uint32_t missing = (cls2add - cls_added) << fs_info->vol.bpc_log2;
40013ef4: c4 0e 20 0c ldub [ %i0 + 0xc ], %g2
40013ef8: b5 2e 80 02 sll %i2, %g2, %i2
new_length -= bytes2add < missing ? bytes2add : missing;
40013efc: 80 a6 80 11 cmp %i2, %l1
40013f00: 38 80 00 02 bgu,a 40013f08 <fat_file_extend+0xd4>
<== ALWAYS TAKEN
40013f04: b4 10 00 11 mov %l1, %i2
40013f08: b6 26 c0 1a sub %i3, %i2, %i3
if (cls_added > 0)
40013f0c: 80 a0 60 00 cmp %g1, 0
40013f10: 22 80 00 47 be,a 4001402c <fat_file_extend+0x1f8>
40013f14: f6 27 00 00 st %i3, [ %i4 ]
if ( fat_fd->fat_file_size == 0 )
40013f18: d6 06 60 18 ld [ %i1 + 0x18 ], %o3
40013f1c: 80 a2 e0 00 cmp %o3, 0
40013f20: 32 80 00 48 bne,a 40014040 <fat_file_extend+0x20c>
40013f24: d2 06 60 3c ld [ %i1 + 0x3c ], %o1
fat_fd->map.disk_cln = chain;
40013f28: c4 07 bf f0 ld [ %fp + -16 ], %g2
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40013f2c: c2 0e 60 30 ldub [ %i1 + 0x30 ], %g1
40013f30: 82 10 60 02 or %g1, 2, %g1
40013f34: c4 26 60 38 st %g2, [ %i1 + 0x38 ]
fat_fd->map.file_cln = 0;
40013f38: c0 26 60 34 clr [ %i1 + 0x34 ]
fat_fd->cln = cln;
40013f3c: c4 26 60 1c st %g2, [ %i1 + 0x1c ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40013f40: c2 2e 60 30 stb %g1, [ %i1 + 0x30 ]
fat_fd->map.last_cln = last_cl;
40013f44: c2 07 bf f8 ld [ %fp + -8 ], %g1
40013f48: c2 26 60 3c st %g1, [ %i1 + 0x3c ]
if (fat_fd->fat_file_type == FAT_DIRECTORY)
40013f4c: c2 06 60 10 ld [ %i1 + 0x10 ], %g1
40013f50: 80 a0 60 00 cmp %g1, 0
40013f54: 32 80 00 36 bne,a 4001402c <fat_file_extend+0x1f8>
40013f58: f6 27 00 00 st %i3, [ %i4 ]
rc = fat_init_clusters_chain(fs_info, chain);
40013f5c: d2 07 bf f0 ld [ %fp + -16 ], %o1
40013f60: 40 00 05 71 call 40015524 <fat_init_clusters_chain>
40013f64: 90 10 00 18 mov %i0, %o0
if ( rc != RC_OK )
40013f68: 82 92 20 00 orcc %o0, 0, %g1
40013f6c: 22 80 00 30 be,a 4001402c <fat_file_extend+0x1f8>
<== ALWAYS TAKEN
40013f70: f6 27 00 00 st %i3, [ %i4 ]
fat_free_fat_clusters_chain(fs_info, chain);
40013f74: d2 07 bf f0 ld [ %fp + -16 ], %o1
<== NOT EXECUTED
40013f78: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
40013f7c: 7f ff fc c8 call 4001329c <fat_free_fat_clusters_chain>
<== NOT EXECUTED
40013f80: a0 10 00 01 mov %g1, %l0
<== NOT EXECUTED
return rc;
40013f84: 81 c7 e0 08 ret
<== NOT EXECUTED
40013f88: 91 e8 00 10 restore %g0, %l0, %o0
<== NOT EXECUTED
if (zero_fill && bytes_remain > 0) {
40013f8c: 80 a0 a0 00 cmp %g2, 0
40013f90: 12 80 00 12 bne 40013fd8 <fat_file_extend+0x1a4>
40013f94: a2 10 20 00 clr %l1
return RC_OK;
40013f98: a0 10 20 00 clr %l0
}
40013f9c: b0 10 00 10 mov %l0, %i0
40013fa0: 81 c7 e0 08 ret
40013fa4: 81 e8 00 00 restore
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
40013fa8: 80 a0 a0 00 cmp %g2, 0
40013fac: 32 bf ff af bne,a 40013e68 <fat_file_extend+0x34>
<== NEVER TAKEN
40013fb0: fa 06 20 08 ld [ %i0 + 8 ], %i5
<== NOT EXECUTED
40013fb4: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
40013fb8: 80 88 a0 03 btst 3, %g2
40013fbc: 22 bf ff ab be,a 40013e68 <fat_file_extend+0x34>
<== NEVER TAKEN
40013fc0: fa 06 20 08 ld [ %i0 + 8 ], %i5
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOSPC);
40013fc4: 40 00 1c 5e call 4001b13c <__errno>
40013fc8: a0 10 3f ff mov -1, %l0
40013fcc: 82 10 20 1c mov 0x1c, %g1
40013fd0: 10 bf ff f3 b 40013f9c <fat_file_extend+0x168>
40013fd4: c2 22 00 00 st %g1, [ %o0 ]
uint32_t cl_start = start >> fs_info->vol.bpc_log2;
40013fd8: d4 0e 20 0c ldub [ %i0 + 0xc ], %o2
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
40013fdc: 96 07 bf fc add %fp, -4, %o3
40013fe0: 95 30 40 0a srl %g1, %o2, %o2
40013fe4: 92 10 00 19 mov %i1, %o1
40013fe8: 7f ff fd 5a call 40013550 <fat_file_lseek>
40013fec: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013ff0: a0 92 60 00 orcc %o1, 0, %l0
40013ff4: 32 bf ff eb bne,a 40013fa0 <fat_file_extend+0x16c>
<== NEVER TAKEN
40013ff8: b0 10 00 10 mov %l0, %i0
<== NOT EXECUTED
bytes_written = fat_cluster_set (fs_info, cur_cln, ofs, bytes_remain, 0);
40013ffc: d2 07 bf fc ld [ %fp + -4 ], %o1
40014000: 98 10 20 00 clr %o4
40014004: 96 10 00 1d mov %i5, %o3
40014008: 94 10 00 12 mov %l2, %o2
4001400c: 90 10 00 18 mov %i0, %o0
40014010: 40 00 01 ed call 400147c4 <fat_cluster_set>
40014014: a0 10 3f ff mov -1, %l0
if (bytes_remain != bytes_written)
40014018: 80 a2 00 1d cmp %o0, %i5
4001401c: 32 bf ff e1 bne,a 40013fa0 <fat_file_extend+0x16c>
<== NEVER TAKEN
40014020: b0 10 00 10 mov %l0, %i0
<== NOT EXECUTED
40014024: 10 bf ff 9f b 40013ea0 <fat_file_extend+0x6c>
40014028: 80 a4 60 00 cmp %l1, 0
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001402c: c2 0e 60 30 ldub [ %i1 + 0x30 ], %g1
40014030: 82 10 60 02 or %g1, 2, %g1
fat_fd->fat_file_size = s;
40014034: f6 26 60 18 st %i3, [ %i1 + 0x18 ]
return RC_OK;
40014038: 10 bf ff d9 b 40013f9c <fat_file_extend+0x168>
4001403c: c2 2e 60 30 stb %g1, [ %i1 + 0x30 ]
if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE)
40014040: 80 a2 7f ff cmp %o1, -1
40014044: 22 80 00 0d be,a 40014078 <fat_file_extend+0x244>
<== NEVER TAKEN
40014048: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
old_last_cl = fat_fd->map.last_cln;
4001404c: d2 27 bf f4 st %o1, [ %fp + -12 ]
rc = fat_set_fat_cluster(fs_info, old_last_cl, chain);
40014050: 90 10 00 18 mov %i0, %o0
40014054: 7f ff fb f0 call 40013014 <fat_set_fat_cluster>
40014058: d4 07 bf f0 ld [ %fp + -16 ], %o2
if ( rc != RC_OK )
4001405c: 82 92 20 00 orcc %o0, 0, %g1
40014060: 12 bf ff c6 bne 40013f78 <fat_file_extend+0x144>
<== NEVER TAKEN
40014064: d2 07 bf f0 ld [ %fp + -16 ], %o1
fat_buf_release(fs_info);
40014068: 40 00 01 83 call 40014674 <fat_buf_release>
4001406c: 90 10 00 18 mov %i0, %o0
fat_fd->map.last_cln = last_cl;
40014070: 10 bf ff b6 b 40013f48 <fat_file_extend+0x114>
40014074: c2 07 bf f8 ld [ %fp + -8 ], %g1
rc = fat_file_ioctl(fs_info, fat_fd, F_CLU_NUM,
40014078: 98 07 bf f4 add %fp, -12, %o4
<== NOT EXECUTED
4001407c: 96 02 ff ff add %o3, -1, %o3
<== NOT EXECUTED
40014080: 94 10 20 01 mov 1, %o2
<== NOT EXECUTED
40014084: 7f ff ff 37 call 40013d60 <fat_file_ioctl>
<== NOT EXECUTED
40014088: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
4001408c: d2 07 bf f4 ld [ %fp + -12 ], %o1
<== NOT EXECUTED
if ( rc != RC_OK )
40014090: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40014094: 02 bf ff ef be 40014050 <fat_file_extend+0x21c>
<== NOT EXECUTED
40014098: 82 10 00 08 mov %o0, %g1
<== NOT EXECUTED
4001409c: 10 bf ff b7 b 40013f78 <fat_file_extend+0x144>
<== NOT EXECUTED
400140a0: d2 07 bf f0 ld [ %fp + -16 ], %o1
<== NOT EXECUTED
40013d60 <fat_file_ioctl>:
{
40013d60: 9d e3 bf 98 save %sp, -104, %sp
va_start(ap, cmd);
40013d64: 82 07 a0 50 add %fp, 0x50, %g1
40013d68: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
switch (cmd)
40013d6c: 80 a6 a0 01 cmp %i2, 1
va_start(ap, cmd);
40013d70: f8 27 a0 54 st %i4, [ %fp + 0x54 ]
40013d74: fa 27 a0 58 st %i5, [ %fp + 0x58 ]
uint32_t cur_cln = 0;
40013d78: c0 27 bf f8 clr [ %fp + -8 ]
switch (cmd)
40013d7c: 12 80 00 22 bne 40013e04 <fat_file_ioctl+0xa4>
<== NEVER TAKEN
40013d80: c2 27 bf fc st %g1, [ %fp + -4 ]
ret = va_arg(ap, uint32_t *);
40013d84: 84 07 a0 58 add %fp, 0x58, %g2
40013d88: c4 27 bf fc st %g2, [ %fp + -4 ]
if ( pos >= fat_fd->fat_file_size ) {
40013d8c: c4 06 60 18 ld [ %i1 + 0x18 ], %g2
40013d90: 80 a0 80 1b cmp %g2, %i3
40013d94: 08 80 00 22 bleu 40013e1c <fat_file_ioctl+0xbc>
<== NEVER TAKEN
40013d98: ba 10 00 1c mov %i4, %i5
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
40013d9c: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40013da0: 80 a0 60 01 cmp %g1, 1
40013da4: 32 80 00 0d bne,a 40013dd8 <fat_file_ioctl+0x78>
40013da8: d4 0e 20 0c ldub [ %i0 + 0xc ], %o2
40013dac: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
40013db0: 80 a0 60 00 cmp %g1, 0
40013db4: 32 80 00 09 bne,a 40013dd8 <fat_file_ioctl+0x78>
<== NEVER TAKEN
40013db8: d4 0e 20 0c ldub [ %i0 + 0xc ], %o2
<== NOT EXECUTED
40013dbc: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
40013dc0: 80 88 60 03 btst 3, %g1
40013dc4: 22 80 00 05 be,a 40013dd8 <fat_file_ioctl+0x78>
40013dc8: d4 0e 20 0c ldub [ %i0 + 0xc ], %o2
*ret = 0;
40013dcc: c0 27 00 00 clr [ %i4 ]
break;
40013dd0: 81 c7 e0 08 ret
40013dd4: 91 e8 20 00 restore %g0, 0, %o0
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
40013dd8: 90 10 00 18 mov %i0, %o0
40013ddc: 96 07 bf f8 add %fp, -8, %o3
40013de0: 95 36 c0 0a srl %i3, %o2, %o2
40013de4: 7f ff fd db call 40013550 <fat_file_lseek>
40013de8: 92 10 00 19 mov %i1, %o1
if ( rc != RC_OK )
40013dec: b0 92 60 00 orcc %o1, 0, %i0
40013df0: 12 80 00 03 bne 40013dfc <fat_file_ioctl+0x9c>
<== NEVER TAKEN
40013df4: c2 07 bf f8 ld [ %fp + -8 ], %g1
*ret = cur_cln;
40013df8: c2 27 40 00 st %g1, [ %i5 ]
break;
40013dfc: 81 c7 e0 08 ret
40013e00: 81 e8 00 00 restore
errno = EINVAL;
40013e04: 40 00 1c ce call 4001b13c <__errno>
<== NOT EXECUTED
40013e08: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40013e0c: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40013e10: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
}
40013e14: 81 c7 e0 08 ret
<== NOT EXECUTED
40013e18: 81 e8 00 00 restore
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
40013e1c: 40 00 1c c8 call 4001b13c <__errno>
<== NOT EXECUTED
40013e20: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40013e24: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
40013e28: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40013e2c: 81 c7 e0 08 ret
<== NOT EXECUTED
40013e30: 81 e8 00 00 restore
<== NOT EXECUTED
400135ec <fat_file_open>:
{
400135ec: 9d e3 bf a0 save %sp, -96, %sp
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
400135f0: c2 06 40 00 ld [ %i1 ], %g1
if (cln == 1)
400135f4: 80 a0 60 01 cmp %g1, 1
400135f8: 02 80 00 0b be 40013624 <fat_file_open+0x38>
400135fc: 80 a0 60 00 cmp %g1, 0
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40013600: 32 80 00 76 bne,a 400137d8 <fat_file_open+0x1ec>
40013604: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
40013608: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
4001360c: 80 88 a0 03 btst 3, %g2
40013610: 22 80 00 72 be,a 400137d8 <fat_file_open+0x1ec>
<== NEVER TAKEN
40013614: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
40013618: c2 06 20 28 ld [ %i0 + 0x28 ], %g1
fs_info->vol.sec_mul);
4001361c: fa 0e 20 03 ldub [ %i0 + 3 ], %i5
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
40013620: 83 28 40 1d sll %g1, %i5, %g1
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
40013624: c4 06 60 04 ld [ %i1 + 4 ], %g2
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
40013628: e0 06 20 74 ld [ %i0 + 0x74 ], %l0
4001362c: bb 30 a0 09 srl %g2, 9, %i5
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
40013630: 85 30 a0 05 srl %g2, 5, %g2
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
40013634: ba 07 40 01 add %i5, %g1, %i5
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
40013638: 84 08 a0 0f and %g2, 0xf, %g2
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
4001363c: bb 2f 60 04 sll %i5, 4, %i5
40013640: ba 07 40 02 add %i5, %g2, %i5
uint32_t mod = (key1) % FAT_HASH_MODULE;
40013644: 82 0f 60 01 and %i5, 1, %g1
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
40013648: b7 28 60 01 sll %g1, 1, %i3
4001364c: b6 06 c0 01 add %i3, %g1, %i3
40013650: b7 2e e0 02 sll %i3, 2, %i3
return _Chain_Immutable_head( the_chain )->next;
40013654: c8 04 00 1b ld [ %l0 + %i3 ], %g4
40013658: a0 04 00 1b add %l0, %i3, %l0
return &the_chain->Tail.Node;
4001365c: b8 04 20 04 add %l0, 4, %i4
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
40013660: 80 a1 00 1c cmp %g4, %i4
40013664: 22 80 00 1e be,a 400136dc <fat_file_open+0xf0>
40013668: de 06 20 78 ld [ %i0 + 0x78 ], %o7
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
4001366c: c2 01 20 20 ld [ %g4 + 0x20 ], %g1
if (cln == 1)
40013670: 80 a0 60 01 cmp %g1, 1
40013674: 02 80 00 0b be 400136a0 <fat_file_open+0xb4>
40013678: 80 a0 60 00 cmp %g1, 0
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4001367c: 32 80 00 5c bne,a 400137ec <fat_file_open+0x200>
40013680: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
40013684: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
40013688: 80 88 a0 03 btst 3, %g2
4001368c: 22 80 00 58 be,a 400137ec <fat_file_open+0x200>
<== NEVER TAKEN
40013690: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
40013694: c2 06 20 28 ld [ %i0 + 0x28 ], %g1
fs_info->vol.sec_mul);
40013698: c4 0e 20 03 ldub [ %i0 + 3 ], %g2
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
4001369c: 83 28 40 02 sll %g1, %g2, %g1
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
400136a0: c6 01 20 24 ld [ %g4 + 0x24 ], %g3
400136a4: 85 30 e0 09 srl %g3, 9, %g2
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
400136a8: 87 30 e0 05 srl %g3, 5, %g3
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
400136ac: 82 00 80 01 add %g2, %g1, %g1
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
400136b0: 86 08 e0 0f and %g3, 0xf, %g3
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
400136b4: 83 28 60 04 sll %g1, 4, %g1
400136b8: 82 00 40 03 add %g1, %g3, %g1
if ( (key1) == ck)
400136bc: 80 a7 40 01 cmp %i5, %g1
400136c0: 22 80 00 80 be,a 400138c0 <fat_file_open+0x2d4>
400136c4: c2 01 20 08 ld [ %g4 + 8 ], %g1
the_node = the_node->next;
400136c8: c8 01 00 00 ld [ %g4 ], %g4
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
400136cc: 80 a1 00 1c cmp %g4, %i4
400136d0: 32 bf ff e8 bne,a 40013670 <fat_file_open+0x84>
400136d4: c2 01 20 20 ld [ %g4 + 0x20 ], %g1
rtems_chain_node *the_node = rtems_chain_first(hash + mod);
400136d8: de 06 20 78 ld [ %i0 + 0x78 ], %o7
return _Chain_Immutable_head( the_chain )->next;
400136dc: c8 03 c0 1b ld [ %o7 + %i3 ], %g4
400136e0: 9e 03 c0 1b add %o7, %i3, %o7
return &the_chain->Tail.Node;
400136e4: 9e 03 e0 04 add %o7, 4, %o7
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
400136e8: 80 a1 00 0f cmp %g4, %o7
400136ec: 02 80 00 1e be 40013764 <fat_file_open+0x178>
<== ALWAYS TAKEN
400136f0: 92 10 20 50 mov 0x50, %o1
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
400136f4: c2 01 20 20 ld [ %g4 + 0x20 ], %g1
<== NOT EXECUTED
if (cln == 1)
400136f8: 80 a0 60 01 cmp %g1, 1
<== NOT EXECUTED
400136fc: 02 80 00 0b be 40013728 <fat_file_open+0x13c>
<== NOT EXECUTED
40013700: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40013704: 32 80 00 3f bne,a 40013800 <fat_file_open+0x214>
<== NOT EXECUTED
40013708: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
<== NOT EXECUTED
4001370c: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
<== NOT EXECUTED
40013710: 80 88 a0 03 btst 3, %g2
<== NOT EXECUTED
40013714: 22 80 00 3b be,a 40013800 <fat_file_open+0x214>
<== NOT EXECUTED
40013718: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
4001371c: c2 06 20 28 ld [ %i0 + 0x28 ], %g1
<== NOT EXECUTED
fs_info->vol.sec_mul);
40013720: c4 0e 20 03 ldub [ %i0 + 3 ], %g2
<== NOT EXECUTED
return (fat_cluster_num_to_sector_num(fs_info, cln) <<
40013724: 83 28 40 02 sll %g1, %g2, %g1
<== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
40013728: c6 01 20 24 ld [ %g4 + 0x24 ], %g3
<== NOT EXECUTED
4001372c: 85 30 e0 09 srl %g3, 9, %g2
<== NOT EXECUTED
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
40013730: 87 30 e0 05 srl %g3, 5, %g3
<== NOT EXECUTED
return ( ((fat_cluster_num_to_sector512_num(fs_info, pos->cln) +
40013734: 82 00 80 01 add %g2, %g1, %g1
<== NOT EXECUTED
((pos->ofs >> 5) & (FAT_DIRENTRIES_PER_SEC512 - 1)) );
40013738: 86 08 e0 0f and %g3, 0xf, %g3
<== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
4001373c: 83 28 60 04 sll %g1, 4, %g1
<== NOT EXECUTED
40013740: 82 00 40 03 add %g1, %g3, %g1
<== NOT EXECUTED
if ( (key1) == ck)
40013744: 80 a7 40 01 cmp %i5, %g1
<== NOT EXECUTED
40013748: 02 80 00 33 be 40013814 <fat_file_open+0x228>
<== NOT EXECUTED
4001374c: 80 a7 60 00 cmp %i5, 0
<== NOT EXECUTED
the_node = the_node->next;
40013750: c8 01 00 00 ld [ %g4 ], %g4
<== NOT EXECUTED
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
40013754: 80 a1 00 0f cmp %g4, %o7
<== NOT EXECUTED
40013758: 32 bf ff e8 bne,a 400136f8 <fat_file_open+0x10c>
<== NOT EXECUTED
4001375c: c2 01 20 20 ld [ %g4 + 0x20 ], %g1
<== NOT EXECUTED
lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t));
40013760: 92 10 20 50 mov 0x50, %o1
<== NOT EXECUTED
40013764: 7f ff c6 96 call 400051bc <calloc>
40013768: 90 10 20 01 mov 1, %o0
4001376c: d0 26 80 00 st %o0, [ %i2 ]
if ( lfat_fd == NULL )
40013770: 80 a2 20 00 cmp %o0, 0
40013774: 02 80 00 5a be 400138dc <fat_file_open+0x2f0>
<== NEVER TAKEN
40013778: a2 10 00 08 mov %o0, %l1
lfat_fd->flags &= ~FAT_FILE_REMOVED;
4001377c: c2 0c 60 30 ldub [ %l1 + 0x30 ], %g1
40013780: 82 08 7f fe and %g1, -2, %g1
40013784: c2 2c 60 30 stb %g1, [ %l1 + 0x30 ]
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
40013788: 82 10 3f ff mov -1, %g1
lfat_fd->dir_pos = *dir_pos;
4001378c: f6 06 40 00 ld [ %i1 ], %i3
40013790: c8 06 60 04 ld [ %i1 + 4 ], %g4
40013794: c6 06 60 08 ld [ %i1 + 8 ], %g3
40013798: c4 06 60 0c ld [ %i1 + 0xc ], %g2
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4001379c: c2 24 60 3c st %g1, [ %l1 + 0x3c ]
lfat_fd->links_num = 1;
400137a0: b4 10 20 01 mov 1, %i2
old_last = tail->previous;
400137a4: c2 04 20 08 ld [ %l0 + 8 ], %g1
400137a8: f4 24 60 08 st %i2, [ %l1 + 8 ]
lfat_fd->dir_pos = *dir_pos;
400137ac: f6 24 60 20 st %i3, [ %l1 + 0x20 ]
400137b0: c8 24 60 24 st %g4, [ %l1 + 0x24 ]
400137b4: c6 24 60 28 st %g3, [ %l1 + 0x28 ]
400137b8: c4 24 60 2c st %g2, [ %l1 + 0x2c ]
lfat_fd->ino = key;
400137bc: fa 24 60 0c st %i5, [ %l1 + 0xc ]
the_node->next = tail;
400137c0: f8 24 40 00 st %i4, [ %l1 ]
tail->previous = the_node;
400137c4: e2 24 20 08 st %l1, [ %l0 + 8 ]
old_last->next = the_node;
400137c8: e2 20 40 00 st %l1, [ %g1 ]
the_node->previous = old_last;
400137cc: c2 24 60 04 st %g1, [ %l1 + 4 ]
}
400137d0: 81 c7 e0 08 ret
400137d4: 91 e8 20 00 restore %g0, 0, %o0
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
400137d8: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
400137dc: 82 00 7f fe add %g1, -2, %g1
400137e0: 83 28 40 03 sll %g1, %g3, %g1
400137e4: 10 bf ff 8e b 4001361c <fat_file_open+0x30>
400137e8: 82 00 40 02 add %g1, %g2, %g1
400137ec: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
400137f0: 82 00 7f fe add %g1, -2, %g1
400137f4: 83 28 40 03 sll %g1, %g3, %g1
400137f8: 10 bf ff a8 b 40013698 <fat_file_open+0xac>
400137fc: 82 00 40 02 add %g1, %g2, %g1
40013800: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
<== NOT EXECUTED
40013804: 82 00 7f fe add %g1, -2, %g1
<== NOT EXECUTED
40013808: 83 28 40 03 sll %g1, %g3, %g1
<== NOT EXECUTED
4001380c: 10 bf ff c5 b 40013720 <fat_file_open+0x134>
<== NOT EXECUTED
40013810: 82 00 40 02 add %g1, %g2, %g1
<== NOT EXECUTED
if ( ((key2) == 0) || ((key2) == ffd->ino) )
40013814: 02 80 00 07 be 40013830 <fat_file_open+0x244>
<== NOT EXECUTED
40013818: 92 10 20 50 mov 0x50, %o1
<== NOT EXECUTED
4001381c: c2 01 20 0c ld [ %g4 + 0xc ], %g1
<== NOT EXECUTED
40013820: 80 a7 40 01 cmp %i5, %g1
<== NOT EXECUTED
40013824: 32 bf ff cc bne,a 40013754 <fat_file_open+0x168>
<== NOT EXECUTED
40013828: c8 01 00 00 ld [ %g4 ], %g4
<== NOT EXECUTED
lfat_fd = (*fat_fd) = (fat_file_fd_t*)calloc(1, sizeof(fat_file_fd_t));
4001382c: 92 10 20 50 mov 0x50, %o1
<== NOT EXECUTED
40013830: 7f ff c6 63 call 400051bc <calloc>
<== NOT EXECUTED
40013834: 90 10 20 01 mov 1, %o0
<== NOT EXECUTED
40013838: d0 26 80 00 st %o0, [ %i2 ]
<== NOT EXECUTED
if ( lfat_fd == NULL )
4001383c: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40013840: 02 80 00 27 be 400138dc <fat_file_open+0x2f0>
<== NOT EXECUTED
40013844: a2 10 00 08 mov %o0, %l1
<== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
40013848: c2 0c 60 30 ldub [ %l1 + 0x30 ], %g1
<== NOT EXECUTED
4001384c: 82 08 7f fe and %g1, -2, %g1
<== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
40013850: fa 06 40 00 ld [ %i1 ], %i5
<== NOT EXECUTED
40013854: c8 06 60 04 ld [ %i1 + 4 ], %g4
<== NOT EXECUTED
40013858: c6 06 60 08 ld [ %i1 + 8 ], %g3
<== NOT EXECUTED
4001385c: c4 06 60 0c ld [ %i1 + 0xc ], %g2
<== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
40013860: c2 2c 60 30 stb %g1, [ %l1 + 0x30 ]
<== NOT EXECUTED
lfat_fd->links_num = 1;
40013864: 82 10 20 01 mov 1, %g1
<== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
40013868: fa 24 60 20 st %i5, [ %l1 + 0x20 ]
<== NOT EXECUTED
lfat_fd->ino = fat_get_unique_ino(fs_info);
4001386c: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
lfat_fd->links_num = 1;
40013870: c2 24 60 08 st %g1, [ %l1 + 8 ]
<== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
40013874: 82 10 3f ff mov -1, %g1
<== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
40013878: c8 24 60 24 st %g4, [ %l1 + 0x24 ]
<== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
4001387c: c2 24 60 3c st %g1, [ %l1 + 0x3c ]
<== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
40013880: c6 24 60 28 st %g3, [ %l1 + 0x28 ]
<== NOT EXECUTED
lfat_fd->ino = fat_get_unique_ino(fs_info);
40013884: 40 00 07 46 call 4001559c <fat_get_unique_ino>
<== NOT EXECUTED
40013888: c4 24 60 2c st %g2, [ %l1 + 0x2c ]
<== NOT EXECUTED
if ( lfat_fd->ino == 0 )
4001388c: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40013890: 02 80 00 11 be 400138d4 <fat_file_open+0x2e8>
<== NOT EXECUTED
40013894: d0 24 60 0c st %o0, [ %l1 + 0xc ]
<== NOT EXECUTED
40013898: e0 06 20 74 ld [ %i0 + 0x74 ], %l0
<== NOT EXECUTED
4001389c: a0 04 00 1b add %l0, %i3, %l0
<== NOT EXECUTED
old_last = tail->previous;
400138a0: c2 04 20 08 ld [ %l0 + 8 ], %g1
<== NOT EXECUTED
400138a4: b8 04 20 04 add %l0, 4, %i4
<== NOT EXECUTED
the_node->next = tail;
400138a8: f8 24 40 00 st %i4, [ %l1 ]
<== NOT EXECUTED
tail->previous = the_node;
400138ac: e2 24 20 08 st %l1, [ %l0 + 8 ]
<== NOT EXECUTED
old_last->next = the_node;
400138b0: e2 20 40 00 st %l1, [ %g1 ]
<== NOT EXECUTED
the_node->previous = old_last;
400138b4: c2 24 60 04 st %g1, [ %l1 + 4 ]
<== NOT EXECUTED
}
400138b8: 81 c7 e0 08 ret
<== NOT EXECUTED
400138bc: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
(*fat_fd) = lfat_fd;
400138c0: c8 26 80 00 st %g4, [ %i2 ]
lfat_fd->links_num++;
400138c4: 82 00 60 01 inc %g1
400138c8: c2 21 20 08 st %g1, [ %g4 + 8 ]
return rc;
400138cc: 81 c7 e0 08 ret
400138d0: 91 e8 20 00 restore %g0, 0, %o0
free((*fat_fd));
400138d4: 7f ff c6 bf call 400053d0 <free>
<== NOT EXECUTED
400138d8: d0 06 80 00 ld [ %i2 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
400138dc: 40 00 1e 18 call 4001b13c <__errno>
<== NOT EXECUTED
400138e0: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400138e4: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
400138e8: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400138ec: 81 c7 e0 08 ret
<== NOT EXECUTED
400138f0: 81 e8 00 00 restore
<== NOT EXECUTED
40013990 <fat_file_read>:
{
40013990: 9d e3 bf 98 save %sp, -104, %sp
uint32_t cur_cln = 0;
40013994: c0 27 bf fc clr [ %fp + -4 ]
{
40013998: ba 10 00 18 mov %i0, %i5
if (count == 0)
4001399c: 80 a6 e0 00 cmp %i3, 0
400139a0: 02 80 00 27 be 40013a3c <fat_file_read+0xac>
<== NEVER TAKEN
400139a4: b0 10 20 00 clr %i0
if ( start >= fat_fd->fat_file_size )
400139a8: c2 06 60 18 ld [ %i1 + 0x18 ], %g1
400139ac: 80 a0 40 1a cmp %g1, %i2
400139b0: 08 80 00 23 bleu 40013a3c <fat_file_read+0xac>
400139b4: 80 a0 40 1b cmp %g1, %i3
if ((count > fat_fd->fat_file_size) ||
400139b8: 1a 80 00 5d bcc 40013b2c <fat_file_read+0x19c>
400139bc: 84 20 40 1b sub %g1, %i3, %g2
count = fat_fd->fat_file_size - start;
400139c0: b6 20 40 1a sub %g1, %i2, %i3
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
400139c4: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
400139c8: 80 a0 60 01 cmp %g1, 1
400139cc: 32 80 00 1e bne,a 40013a44 <fat_file_read+0xb4>
400139d0: e4 0f 60 0c ldub [ %i5 + 0xc ], %l2
400139d4: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
400139d8: 80 a0 60 00 cmp %g1, 0
400139dc: 32 80 00 1a bne,a 40013a44 <fat_file_read+0xb4>
<== NEVER TAKEN
400139e0: e4 0f 60 0c ldub [ %i5 + 0xc ], %l2
<== NOT EXECUTED
400139e4: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
400139e8: 80 88 60 03 btst 3, %g1
400139ec: 22 80 00 16 be,a 40013a44 <fat_file_read+0xb4>
400139f0: e4 0f 60 0c ldub [ %i5 + 0xc ], %l2
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->cln);
400139f4: c2 06 60 1c ld [ %i1 + 0x1c ], %g1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
400139f8: 80 a0 60 00 cmp %g1, 0
400139fc: 32 80 00 5c bne,a 40013b6c <fat_file_read+0x1dc>
<== NEVER TAKEN
40013a00: c4 0f 60 05 ldub [ %i5 + 5 ], %g2
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
40013a04: c2 07 60 28 ld [ %i5 + 0x28 ], %g1
byte = start & (fs_info->vol.bps - 1);
40013a08: d4 17 40 00 lduh [ %i5 ], %o2
sec += (start >> fs_info->vol.sec_log2);
40013a0c: d2 0f 60 02 ldub [ %i5 + 2 ], %o1
byte = start & (fs_info->vol.bps - 1);
40013a10: 94 02 bf ff add %o2, -1, %o2
sec += (start >> fs_info->vol.sec_log2);
40013a14: 93 36 80 09 srl %i2, %o1, %o1
ret = _fat_block_read(fs_info, sec, byte, count, buf);
40013a18: 98 10 00 1c mov %i4, %o4
40013a1c: 96 10 00 1b mov %i3, %o3
40013a20: 94 0a 80 1a and %o2, %i2, %o2
40013a24: 92 02 40 01 add %o1, %g1, %o1
40013a28: 40 00 03 1c call 40014698 <_fat_block_read>
40013a2c: 90 10 00 1d mov %i5, %o0
40013a30: b0 92 20 00 orcc %o0, 0, %i0
40013a34: 06 80 00 43 bl 40013b40 <fat_file_read+0x1b0>
<== NEVER TAKEN
40013a38: 01 00 00 00 nop
}
40013a3c: 81 c7 e0 08 ret
40013a40: 81 e8 00 00 restore
cl_start = start >> fs_info->vol.bpc_log2;
40013a44: a5 36 80 12 srl %i2, %l2, %l2
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
40013a48: e0 07 60 08 ld [ %i5 + 8 ], %l0
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
40013a4c: 94 10 00 12 mov %l2, %o2
40013a50: 96 07 bf fc add %fp, -4, %o3
40013a54: 92 10 00 19 mov %i1, %o1
40013a58: 7f ff fe be call 40013550 <fat_file_lseek>
40013a5c: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40013a60: b0 92 60 00 orcc %o1, 0, %i0
40013a64: 12 bf ff f6 bne 40013a3c <fat_file_read+0xac>
<== NEVER TAKEN
40013a68: a0 04 3f ff add %l0, -1, %l0
uint32_t cmpltd = 0;
40013a6c: a2 10 20 00 clr %l1
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
40013a70: b4 0c 00 1a and %l0, %i2, %i2
40013a74: 10 80 00 1f b 40013af0 <fat_file_read+0x160>
40013a78: 84 10 00 1a mov %i2, %g2
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40013a7c: 80 88 e0 03 btst 3, %g3
<== NOT EXECUTED
40013a80: 22 80 00 26 be,a 40013b18 <fat_file_read+0x188>
<== NOT EXECUTED
40013a84: c6 0f 60 05 ldub [ %i5 + 5 ], %g3
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
40013a88: c2 07 60 28 ld [ %i5 + 0x28 ], %g1
<== NOT EXECUTED
byte = ofs & (fs_info->vol.bps - 1);
40013a8c: d4 17 40 00 lduh [ %i5 ], %o2
sec += (ofs >> fs_info->vol.sec_log2);
40013a90: d2 0f 60 02 ldub [ %i5 + 2 ], %o1
40013a94: 93 30 80 09 srl %g2, %o1, %o1
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
40013a98: 98 07 00 11 add %i4, %l1, %o4
byte = ofs & (fs_info->vol.bps - 1);
40013a9c: 94 02 bf ff add %o2, -1, %o2
ret = _fat_block_read(fs_info, sec, byte, c, buf + cmpltd);
40013aa0: 96 10 00 10 mov %l0, %o3
40013aa4: 94 0a 80 02 and %o2, %g2, %o2
40013aa8: 92 02 40 01 add %o1, %g1, %o1
40013aac: 40 00 02 fb call 40014698 <_fat_block_read>
40013ab0: 90 10 00 1d mov %i5, %o0
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
40013ab4: 94 07 bf fc add %fp, -4, %o2
if ( ret < 0 )
40013ab8: 80 a2 20 00 cmp %o0, 0
40013abc: 06 80 00 21 bl 40013b40 <fat_file_read+0x1b0>
<== NEVER TAKEN
40013ac0: 90 10 00 1d mov %i5, %o0
save_cln = cur_cln;
40013ac4: e6 07 bf fc ld [ %fp + -4 ], %l3
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
40013ac8: 92 10 00 13 mov %l3, %o1
40013acc: 7f ff fc df call 40012e48 <fat_get_fat_cluster>
40013ad0: b6 26 c0 10 sub %i3, %l0, %i3
cmpltd += c;
40013ad4: a2 04 40 10 add %l1, %l0, %l1
if ( rc != RC_OK )
40013ad8: 80 a2 20 00 cmp %o0, 0
40013adc: 12 bf ff d8 bne 40013a3c <fat_file_read+0xac>
<== NEVER TAKEN
40013ae0: b0 10 00 08 mov %o0, %i0
while (count > 0)
40013ae4: 80 a6 e0 00 cmp %i3, 0
40013ae8: 02 80 00 18 be 40013b48 <fat_file_read+0x1b8>
40013aec: 84 10 20 00 clr %g2
c = MIN(count, (fs_info->vol.bpc - ofs));
40013af0: e0 07 60 08 ld [ %i5 + 8 ], %l0
40013af4: a0 24 00 02 sub %l0, %g2, %l0
40013af8: 80 a4 00 1b cmp %l0, %i3
40013afc: 38 80 00 02 bgu,a 40013b04 <fat_file_read+0x174>
40013b00: a0 10 00 1b mov %i3, %l0
sec = fat_cluster_num_to_sector_num(fs_info, cur_cln);
40013b04: c2 07 bf fc ld [ %fp + -4 ], %g1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40013b08: 80 a0 60 00 cmp %g1, 0
40013b0c: 22 bf ff dc be,a 40013a7c <fat_file_read+0xec>
<== NEVER TAKEN
40013b10: c6 0f 60 16 ldub [ %i5 + 0x16 ], %g3
<== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40013b14: c6 0f 60 05 ldub [ %i5 + 5 ], %g3
40013b18: d2 07 60 3c ld [ %i5 + 0x3c ], %o1
40013b1c: 82 00 7f fe add %g1, -2, %g1
40013b20: 83 28 40 03 sll %g1, %g3, %g1
40013b24: 10 bf ff da b 40013a8c <fat_file_read+0xfc>
40013b28: 82 00 40 09 add %g1, %o1, %g1
if ((count > fat_fd->fat_file_size) ||
40013b2c: 80 a0 80 1a cmp %g2, %i2
40013b30: 3a bf ff a6 bcc,a 400139c8 <fat_file_read+0x38>
40013b34: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40013b38: 10 bf ff a3 b 400139c4 <fat_file_read+0x34>
40013b3c: b6 20 40 1a sub %g1, %i2, %i3
}
40013b40: 81 c7 e0 08 ret
<== NOT EXECUTED
40013b44: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
40013b48: c4 0f 60 0c ldub [ %i5 + 0xc ], %g2
40013b4c: 82 06 bf ff add %i2, -1, %g1
fat_fd->map.disk_cln = save_cln;
40013b50: e6 26 60 38 st %l3, [ %i1 + 0x38 ]
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
40013b54: 82 00 40 11 add %g1, %l1, %g1
40013b58: 83 30 40 02 srl %g1, %g2, %g1
fat_fd->map.file_cln = cl_start +
40013b5c: a4 00 40 12 add %g1, %l2, %l2
40013b60: e4 26 60 34 st %l2, [ %i1 + 0x34 ]
return cmpltd;
40013b64: 81 c7 e0 08 ret
40013b68: 91 e8 00 11 restore %g0, %l1, %o0
40013b6c: d2 07 60 3c ld [ %i5 + 0x3c ], %o1
<== NOT EXECUTED
40013b70: 82 00 7f fe add %g1, -2, %g1
<== NOT EXECUTED
40013b74: 83 28 40 02 sll %g1, %g2, %g1
<== NOT EXECUTED
40013b78: 10 bf ff a4 b 40013a08 <fat_file_read+0x78>
<== NOT EXECUTED
40013b7c: 82 00 40 09 add %g1, %o1, %g1
<== NOT EXECUTED
40014314 <fat_file_size>:
{
40014314: 9d e3 bf 98 save %sp, -104, %sp
uint32_t cur_cln = fat_fd->cln;
40014318: f8 06 60 1c ld [ %i1 + 0x1c ], %i4
4001431c: f8 27 bf fc st %i4, [ %fp + -4 ]
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
40014320: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40014324: 80 a0 60 01 cmp %g1, 1
40014328: 22 80 00 22 be,a 400143b0 <fat_file_size+0x9c>
4001432c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
fat_fd->fat_file_size = 0;
40014330: c0 26 60 18 clr [ %i1 + 0x18 ]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40014334: c2 06 20 18 ld [ %i0 + 0x18 ], %g1
40014338: c4 06 20 1c ld [ %i0 + 0x1c ], %g2
4001433c: 82 0f 00 01 and %i4, %g1, %g1
40014340: 80 a0 80 01 cmp %g2, %g1
40014344: 18 80 00 0f bgu 40014380 <fat_file_size+0x6c>
<== ALWAYS TAKEN
40014348: 92 10 00 1c mov %i4, %o1
uint32_t save_cln = 0;
4001434c: 10 80 00 15 b 400143a0 <fat_file_size+0x8c>
<== NOT EXECUTED
40014350: b8 10 20 00 clr %i4
<== NOT EXECUTED
fat_fd->fat_file_size += fs_info->vol.bpc;
40014354: c2 06 60 18 ld [ %i1 + 0x18 ], %g1
40014358: 82 00 40 02 add %g1, %g2, %g1
4001435c: c2 26 60 18 st %g1, [ %i1 + 0x18 ]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40014360: c4 07 bf fc ld [ %fp + -4 ], %g2
40014364: c2 06 20 18 ld [ %i0 + 0x18 ], %g1
40014368: c6 06 20 1c ld [ %i0 + 0x1c ], %g3
4001436c: 82 08 80 01 and %g2, %g1, %g1
40014370: 80 a0 40 03 cmp %g1, %g3
40014374: 1a 80 00 0b bcc 400143a0 <fat_file_size+0x8c>
40014378: 92 10 00 02 mov %g2, %o1
4001437c: b8 10 00 02 mov %g2, %i4
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
40014380: 94 07 bf fc add %fp, -4, %o2
40014384: 7f ff fa b1 call 40012e48 <fat_get_fat_cluster>
40014388: 90 10 00 18 mov %i0, %o0
if ( rc != RC_OK )
4001438c: 80 a2 20 00 cmp %o0, 0
40014390: 22 bf ff f1 be,a 40014354 <fat_file_size+0x40>
<== ALWAYS TAKEN
40014394: c4 06 20 08 ld [ %i0 + 8 ], %g2
}
40014398: 81 c7 e0 08 ret
4001439c: 91 e8 00 08 restore %g0, %o0, %o0
return rc;
400143a0: 90 10 20 00 clr %o0
fat_fd->map.last_cln = save_cln;
400143a4: f8 26 60 3c st %i4, [ %i1 + 0x3c ]
}
400143a8: 81 c7 e0 08 ret
400143ac: 91 e8 00 08 restore %g0, %o0, %o0
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
400143b0: 80 a0 60 00 cmp %g1, 0
400143b4: 32 bf ff e0 bne,a 40014334 <fat_file_size+0x20>
<== NEVER TAKEN
400143b8: c0 26 60 18 clr [ %i1 + 0x18 ]
<== NOT EXECUTED
400143bc: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
400143c0: 80 88 60 03 btst 3, %g1
400143c4: 22 bf ff dc be,a 40014334 <fat_file_size+0x20>
400143c8: c0 26 60 18 clr [ %i1 + 0x18 ]
fat_fd->fat_file_size = fs_info->vol.rdir_size;
400143cc: c2 06 20 34 ld [ %i0 + 0x34 ], %g1
400143d0: c2 26 60 18 st %g1, [ %i1 + 0x18 ]
return rc;
400143d4: 10 bf ff f1 b 40014398 <fat_file_size+0x84>
400143d8: 90 10 20 00 clr %o0
40013b80 <fat_file_truncate>:
{
40013b80: 9d e3 bf 98 save %sp, -104, %sp
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
40013b84: 82 10 3f ff mov -1, %g1
uint32_t cur_cln = 0;
40013b88: c0 27 bf f8 clr [ %fp + -8 ]
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
40013b8c: c2 27 bf fc st %g1, [ %fp + -4 ]
if ( new_length >= fat_fd->fat_file_size )
40013b90: c2 06 60 18 ld [ %i1 + 0x18 ], %g1
40013b94: 80 a0 40 1a cmp %g1, %i2
40013b98: 08 80 00 32 bleu 40013c60 <fat_file_truncate+0xe0>
40013b9c: 80 a0 60 00 cmp %g1, 0
assert(fat_fd->fat_file_size);
40013ba0: 02 80 00 33 be 40013c6c <fat_file_truncate+0xec>
<== NEVER TAKEN
40013ba4: 17 10 00 a8 sethi %hi(0x4002a000), %o3
cl_start = (new_length + fs_info->vol.bpc - 1) >> fs_info->vol.bpc_log2;
40013ba8: c4 0e 20 0c ldub [ %i0 + 0xc ], %g2
40013bac: c6 06 20 08 ld [ %i0 + 8 ], %g3
40013bb0: b4 06 80 03 add %i2, %g3, %i2
40013bb4: b4 06 bf ff add %i2, -1, %i2
40013bb8: b5 36 80 02 srl %i2, %g2, %i2
if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size)
40013bbc: 85 2e 80 02 sll %i2, %g2, %g2
40013bc0: 80 a0 40 02 cmp %g1, %g2
40013bc4: 08 80 00 27 bleu 40013c60 <fat_file_truncate+0xe0>
40013bc8: 80 a6 a0 00 cmp %i2, 0
if (cl_start != 0)
40013bcc: 02 80 00 0a be 40013bf4 <fat_file_truncate+0x74>
40013bd0: 96 07 bf f8 add %fp, -8, %o3
rc = fat_file_lseek(fs_info, fat_fd, cl_start - 1, &new_last_cln);
40013bd4: 96 07 bf fc add %fp, -4, %o3
40013bd8: 94 06 bf ff add %i2, -1, %o2
40013bdc: 92 10 00 19 mov %i1, %o1
40013be0: 7f ff fe 5c call 40013550 <fat_file_lseek>
40013be4: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013be8: 80 a2 60 00 cmp %o1, 0
40013bec: 12 80 00 1e bne 40013c64 <fat_file_truncate+0xe4>
<== NEVER TAKEN
40013bf0: 96 07 bf f8 add %fp, -8, %o3
rc = fat_file_lseek(fs_info, fat_fd, cl_start, &cur_cln);
40013bf4: 94 10 00 1a mov %i2, %o2
40013bf8: 92 10 00 19 mov %i1, %o1
40013bfc: 7f ff fe 55 call 40013550 <fat_file_lseek>
40013c00: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013c04: 80 a2 60 00 cmp %o1, 0
40013c08: 12 80 00 17 bne 40013c64 <fat_file_truncate+0xe4>
<== NEVER TAKEN
40013c0c: 01 00 00 00 nop
rc = fat_free_fat_clusters_chain(fs_info, cur_cln);
40013c10: d2 07 bf f8 ld [ %fp + -8 ], %o1
40013c14: 7f ff fd a2 call 4001329c <fat_free_fat_clusters_chain>
40013c18: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013c1c: 92 92 20 00 orcc %o0, 0, %o1
40013c20: 12 80 00 11 bne 40013c64 <fat_file_truncate+0xe4>
<== NEVER TAKEN
40013c24: 80 a6 a0 00 cmp %i2, 0
if (cl_start != 0)
40013c28: 02 80 00 0f be 40013c64 <fat_file_truncate+0xe4>
40013c2c: 92 10 20 00 clr %o1
rc = fat_set_fat_cluster(fs_info, new_last_cln, FAT_GENFAT_EOC);
40013c30: d2 07 bf fc ld [ %fp + -4 ], %o1
40013c34: 94 10 3f ff mov -1, %o2
40013c38: 7f ff fc f7 call 40013014 <fat_set_fat_cluster>
40013c3c: 90 10 00 18 mov %i0, %o0
if ( rc != RC_OK )
40013c40: 92 92 20 00 orcc %o0, 0, %o1
40013c44: 12 80 00 08 bne 40013c64 <fat_file_truncate+0xe4>
<== NEVER TAKEN
40013c48: c2 07 bf fc ld [ %fp + -4 ], %g1
fat_fd->map.file_cln = cl_start - 1;
40013c4c: b4 06 bf ff add %i2, -1, %i2
fat_fd->map.disk_cln = new_last_cln;
40013c50: c2 26 60 38 st %g1, [ %i1 + 0x38 ]
fat_fd->map.file_cln = cl_start - 1;
40013c54: f4 26 60 34 st %i2, [ %i1 + 0x34 ]
fat_fd->map.last_cln = new_last_cln;
40013c58: 10 80 00 03 b 40013c64 <fat_file_truncate+0xe4>
40013c5c: c2 26 60 3c st %g1, [ %i1 + 0x3c ]
return rc;
40013c60: 92 10 20 00 clr %o1
}
40013c64: 81 c7 e0 08 ret
40013c68: 91 e8 00 09 restore %g0, %o1, %o0
assert(fat_fd->fat_file_size);
40013c6c: 15 10 00 a8 sethi %hi(0x4002a000), %o2
<== NOT EXECUTED
40013c70: 11 10 00 a8 sethi %hi(0x4002a000), %o0
<== NOT EXECUTED
40013c74: 96 12 e2 00 or %o3, 0x200, %o3
<== NOT EXECUTED
40013c78: 94 12 a2 78 or %o2, 0x278, %o2
<== NOT EXECUTED
40013c7c: 92 10 22 e3 mov 0x2e3, %o1
<== NOT EXECUTED
40013c80: 40 00 07 07 call 4001589c <__assert_func>
<== NOT EXECUTED
40013c84: 90 12 22 18 or %o0, 0x218, %o0
<== NOT EXECUTED
40013c88: 01 00 00 00 nop
<== NOT EXECUTED
4001390c <fat_file_update>:
{
4001390c: 9d e3 bf a0 save %sp, -96, %sp
40013910: c2 0e 60 30 ldub [ %i1 + 0x30 ], %g1
if (!FAT_FILE_IS_REMOVED(fat_fd) &&
40013914: 80 88 60 01 btst 1, %g1
40013918: 12 80 00 1c bne 40013988 <fat_file_update+0x7c>
4001391c: ba 10 20 00 clr %i5
40013920: 80 88 60 02 btst 2, %g1
40013924: 02 80 00 19 be 40013988 <fat_file_update+0x7c>
40013928: 01 00 00 00 nop
FAT_FILE_HAS_META_DATA_CHANGED(fat_fd) &&
4001392c: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40013930: 80 a0 60 01 cmp %g1, 1
40013934: 12 80 00 06 bne 4001394c <fat_file_update+0x40>
40013938: 92 10 00 19 mov %i1, %o1
!FAT_FD_OF_ROOT_DIR(fat_fd))
4001393c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
40013940: 80 a0 60 00 cmp %g1, 0
40013944: 02 80 00 11 be 40013988 <fat_file_update+0x7c>
<== ALWAYS TAKEN
40013948: 01 00 00 00 nop
rc = fat_file_write_first_cluster_num(fs_info, fat_fd);
4001394c: 40 00 13 30 call 4001860c <fat_file_write_first_cluster_num>
40013950: 90 10 00 18 mov %i0, %o0
rc = fat_file_write_file_size(fs_info, fat_fd);
40013954: 92 10 00 19 mov %i1, %o1
rc = fat_file_write_first_cluster_num(fs_info, fat_fd);
40013958: ba 10 00 08 mov %o0, %i5
rc = fat_file_write_file_size(fs_info, fat_fd);
4001395c: 40 00 13 5d call 400186d0 <fat_file_write_file_size>
40013960: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40013964: 80 a2 20 00 cmp %o0, 0
40013968: 32 80 00 02 bne,a 40013970 <fat_file_update+0x64>
<== NEVER TAKEN
4001396c: ba 10 00 08 mov %o0, %i5
<== NOT EXECUTED
rc = fat_file_write_time_and_date(fs_info, fat_fd);
40013970: 92 10 00 19 mov %i1, %o1
40013974: 40 00 12 c5 call 40018488 <fat_file_write_time_and_date>
40013978: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
4001397c: 80 a2 20 00 cmp %o0, 0
40013980: 32 80 00 02 bne,a 40013988 <fat_file_update+0x7c>
<== NEVER TAKEN
40013984: ba 10 00 08 mov %o0, %i5
<== NOT EXECUTED
}
40013988: 81 c7 e0 08 ret
4001398c: 91 e8 00 1d restore %g0, %i5, %o0
400140a4 <fat_file_write>:
{
400140a4: 9d e3 bf 98 save %sp, -104, %sp
uint32_t c = 0;
400140a8: c0 27 bf f8 clr [ %fp + -8 ]
if ( count == 0 )
400140ac: 80 a6 e0 00 cmp %i3, 0
400140b0: 02 80 00 4c be 400141e0 <fat_file_write+0x13c>
<== NEVER TAKEN
400140b4: 92 10 20 00 clr %o1
if (start >= fat_fd->size_limit)
400140b8: fa 06 60 14 ld [ %i1 + 0x14 ], %i5
400140bc: 80 a7 40 1a cmp %i5, %i2
400140c0: 08 80 00 43 bleu 400141cc <fat_file_write+0x128>
<== NEVER TAKEN
400140c4: ba 27 40 1a sub %i5, %i2, %i5
400140c8: 80 a7 40 1b cmp %i5, %i3
bool zero_fill = start > fat_fd->fat_file_size;
400140cc: 18 80 00 47 bgu 400141e8 <fat_file_write+0x144>
<== ALWAYS TAKEN
400140d0: c2 06 60 18 ld [ %i1 + 0x18 ], %g1
400140d4: 80 a0 40 1a cmp %g1, %i2
<== NOT EXECUTED
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
400140d8: 92 10 00 19 mov %i1, %o1
<== NOT EXECUTED
400140dc: 94 40 20 00 addx %g0, 0, %o2
<== NOT EXECUTED
400140e0: b6 06 80 1d add %i2, %i5, %i3
<== NOT EXECUTED
400140e4: 98 07 bf f8 add %fp, -8, %o4
<== NOT EXECUTED
400140e8: 96 10 00 1b mov %i3, %o3
<== NOT EXECUTED
400140ec: 7f ff ff 52 call 40013e34 <fat_file_extend>
<== NOT EXECUTED
400140f0: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
if (RC_OK == rc)
400140f4: 92 92 20 00 orcc %o0, 0, %o1
<== NOT EXECUTED
400140f8: 12 80 00 3a bne 400141e0 <fat_file_write+0x13c>
<== NOT EXECUTED
400140fc: c2 07 bf f8 ld [ %fp + -8 ], %g1
<== NOT EXECUTED
if (c != (start + count))
40014100: 80 a6 c0 01 cmp %i3, %g1
<== NOT EXECUTED
40014104: 32 80 00 02 bne,a 4001410c <fat_file_write+0x68>
40014108: ba 20 40 1a sub %g1, %i2, %i5
4001410c: f6 0e 20 0c ldub [ %i0 + 0xc ], %i3
return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16));
40014110: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40014114: 80 a0 60 01 cmp %g1, 1
40014118: 02 80 00 51 be 4001425c <fat_file_write+0x1b8>
4001411c: a1 36 80 1b srl %i2, %i3, %l0
uint32_t cur_cln = 0;
40014120: c0 27 bf fc clr [ %fp + -4 ]
rc = fat_file_lseek(fs_info, fat_fd, start_cln, &cur_cln);
40014124: 94 10 00 10 mov %l0, %o2
40014128: 96 07 bf fc add %fp, -4, %o3
4001412c: 92 10 00 19 mov %i1, %o1
40014130: 7f ff fd 08 call 40013550 <fat_file_lseek>
40014134: 90 10 00 18 mov %i0, %o0
if (RC_OK == rc)
40014138: 80 a2 60 00 cmp %o1, 0
4001413c: 12 80 00 44 bne 4001424c <fat_file_write+0x1a8>
<== NEVER TAKEN
40014140: b7 2c 00 1b sll %l0, %i3, %i3
uint32_t save_cln = 0; /* FIXME: This might be incorrect, cf. below */
40014144: a4 10 20 00 clr %l2
uint32_t ofs_cln = start - (start_cln << fs_info->vol.bpc_log2);
40014148: b4 26 80 1b sub %i2, %i3, %i2
uint32_t cmpltd = 0;
4001414c: a2 10 20 00 clr %l1
uint32_t ofs_cln = start - (start_cln << fs_info->vol.bpc_log2);
40014150: b6 10 00 1a mov %i2, %i3
ret = fat_cluster_write(fs_info,
40014154: 94 10 00 1b mov %i3, %o2
while ( (RC_OK == rc)
40014158: 80 a2 60 00 cmp %o1, 0
4001415c: 12 80 00 31 bne 40014220 <fat_file_write+0x17c>
<== NEVER TAKEN
40014160: 90 10 00 18 mov %i0, %o0
40014164: 80 a7 60 00 cmp %i5, 0
40014168: 22 80 00 2f be,a 40014224 <fat_file_write+0x180>
4001416c: c2 0e 20 0c ldub [ %i0 + 0xc ], %g1
c = MIN(bytes_to_write, (fs_info->vol.bpc - ofs_cln));
40014170: d6 06 20 08 ld [ %i0 + 8 ], %o3
40014174: 96 22 c0 1b sub %o3, %i3, %o3
40014178: 80 a2 c0 1d cmp %o3, %i5
4001417c: 08 80 00 03 bleu 40014188 <fat_file_write+0xe4>
40014180: 98 07 00 11 add %i4, %l1, %o4
40014184: 96 10 00 1d mov %i5, %o3
ret = fat_cluster_write(fs_info,
40014188: 40 00 01 ea call 40014930 <fat_cluster_write>
4001418c: d2 07 bf fc ld [ %fp + -4 ], %o1
if (0 > ret)
40014190: 80 a2 20 00 cmp %o0, 0
40014194: 06 bf ff f0 bl 40014154 <fat_file_write+0xb0>
<== NEVER TAKEN
40014198: 92 10 3f ff mov -1, %o1
save_cln = cur_cln;
4001419c: e4 07 bf fc ld [ %fp + -4 ], %l2
cmpltd += ret;
400141a0: a2 04 40 08 add %l1, %o0, %l1
if (0 < bytes_to_write)
400141a4: 92 10 20 00 clr %o1
400141a8: ba a7 40 08 subcc %i5, %o0, %i5
400141ac: 02 bf ff ea be 40014154 <fat_file_write+0xb0>
400141b0: b6 10 20 00 clr %i3
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
400141b4: 92 10 00 12 mov %l2, %o1
400141b8: 94 07 bf fc add %fp, -4, %o2
400141bc: 7f ff fb 23 call 40012e48 <fat_get_fat_cluster>
400141c0: 90 10 00 18 mov %i0, %o0
400141c4: 10 bf ff e4 b 40014154 <fat_file_write+0xb0>
400141c8: 92 10 00 08 mov %o0, %o1
rtems_set_errno_and_return_minus_one(EFBIG);
400141cc: 40 00 1b dc call 4001b13c <__errno>
<== NOT EXECUTED
400141d0: 01 00 00 00 nop
<== NOT EXECUTED
400141d4: 82 10 20 1b mov 0x1b, %g1 ! 1b <_TLS_Alignment+0x1a>
<== NOT EXECUTED
400141d8: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400141dc: 92 10 3f ff mov -1, %o1
<== NOT EXECUTED
}
400141e0: 81 c7 e0 08 ret
400141e4: 91 e8 00 09 restore %g0, %o1, %o0
bool zero_fill = start > fat_fd->fat_file_size;
400141e8: 80 a0 40 1a cmp %g1, %i2
rc = fat_file_extend(fs_info, fat_fd, zero_fill, start + count, &c);
400141ec: 92 10 00 19 mov %i1, %o1
400141f0: 94 40 20 00 addx %g0, 0, %o2
400141f4: ba 10 00 1b mov %i3, %i5
400141f8: 98 07 bf f8 add %fp, -8, %o4
400141fc: b6 06 80 1d add %i2, %i5, %i3
40014200: 90 10 00 18 mov %i0, %o0
40014204: 7f ff ff 0c call 40013e34 <fat_file_extend>
40014208: 96 10 00 1b mov %i3, %o3
if (RC_OK == rc)
4001420c: 92 92 20 00 orcc %o0, 0, %o1
40014210: 12 bf ff f4 bne 400141e0 <fat_file_write+0x13c>
40014214: c2 07 bf f8 ld [ %fp + -8 ], %g1
if (c != (start + count))
40014218: 10 bf ff bb b 40014104 <fat_file_write+0x60>
4001421c: 80 a6 c0 01 cmp %i3, %g1
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
40014220: c2 0e 20 0c ldub [ %i0 + 0xc ], %g1
<== NOT EXECUTED
40014224: b4 06 bf ff add %i2, -1, %i2
fat_fd->map.disk_cln = save_cln;
40014228: e4 26 60 38 st %l2, [ %i1 + 0x38 ]
((ofs_cln_save + cmpltd - 1) >> fs_info->vol.bpc_log2);
4001422c: b4 06 80 11 add %i2, %l1, %i2
40014230: b5 36 80 01 srl %i2, %g1, %i2
fat_fd->map.file_cln = start_cln +
40014234: a0 06 80 10 add %i2, %l0, %l0
if (RC_OK != rc)
40014238: 80 a2 60 00 cmp %o1, 0
4001423c: 12 80 00 04 bne 4001424c <fat_file_write+0x1a8>
<== NEVER TAKEN
40014240: e0 26 60 34 st %l0, [ %i1 + 0x34 ]
return cmpltd;
40014244: 92 10 00 11 mov %l1, %o1
if (0 > ret)
40014248: 80 a2 60 00 cmp %o1, 0
4001424c: 16 bf ff e5 bge 400141e0 <fat_file_write+0x13c>
<== ALWAYS TAKEN
40014250: 01 00 00 00 nop
rc = -1;
40014254: 10 bf ff e3 b 400141e0 <fat_file_write+0x13c>
<== NOT EXECUTED
40014258: 92 10 3f ff mov -1, %o1 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
return (FAT_FD_OF_ROOT_DIR(fat_fd)) && (volume_type & (FAT_FAT12 | FAT_FAT16));
4001425c: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
40014260: 80 a0 60 00 cmp %g1, 0
40014264: 32 bf ff b0 bne,a 40014124 <fat_file_write+0x80>
<== NEVER TAKEN
40014268: c0 27 bf fc clr [ %fp + -4 ]
<== NOT EXECUTED
4001426c: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
40014270: 80 88 60 03 btst 3, %g1
40014274: 22 bf ff ac be,a 40014124 <fat_file_write+0x80>
40014278: c0 27 bf fc clr [ %fp + -4 ]
cln = fat_fd->cln;
4001427c: d2 06 60 1c ld [ %i1 + 0x1c ], %o1
byte = start & (fs_info->vol.bpc -1);
40014280: d4 06 20 08 ld [ %i0 + 8 ], %o2
ret = fat_cluster_write(fs_info,
40014284: 92 02 40 10 add %o1, %l0, %o1
byte = start & (fs_info->vol.bpc -1);
40014288: 94 02 bf ff add %o2, -1, %o2
ret = fat_cluster_write(fs_info,
4001428c: 98 10 00 1c mov %i4, %o4
40014290: 96 10 00 1d mov %i5, %o3
40014294: 94 0a 80 1a and %o2, %i2, %o2
40014298: 40 00 01 a6 call 40014930 <fat_cluster_write>
4001429c: 90 10 00 18 mov %i0, %o0
if (0 > ret)
400142a0: 80 a2 20 00 cmp %o0, 0
400142a4: 06 bf ff ec bl 40014254 <fat_file_write+0x1b0>
<== NEVER TAKEN
400142a8: 92 10 00 08 mov %o0, %o1
}
400142ac: 81 c7 e0 08 ret
400142b0: 91 e8 00 09 restore %g0, %o1, %o0
400186d0 <fat_file_write_file_size>:
{
400186d0: 9d e3 bf 90 save %sp, -112, %sp
uint32_t le_new_length = 0;
400186d4: c0 27 bf fc clr [ %fp + -4 ]
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
400186d8: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
400186dc: 80 a0 60 00 cmp %g1, 0
400186e0: 32 80 00 07 bne,a 400186fc <fat_file_write_file_size+0x2c>
400186e4: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
400186e8: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
400186ec: 80 88 a0 03 btst 3, %g2
400186f0: 32 80 00 07 bne,a 4001870c <fat_file_write_file_size+0x3c>
<== ALWAYS TAKEN
400186f4: d2 06 20 28 ld [ %i0 + 0x28 ], %o1
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
400186f8: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
<== NOT EXECUTED
400186fc: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
40018700: 92 00 7f fe add %g1, -2, %o1
40018704: 93 2a 40 03 sll %o1, %g3, %o1
40018708: 92 02 40 02 add %o1, %g2, %o1
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
4001870c: d4 06 60 24 ld [ %i1 + 0x24 ], %o2
40018710: c2 0e 20 02 ldub [ %i0 + 2 ], %g1
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1));
40018714: fa 16 00 00 lduh [ %i0 ], %i5
if (fat_fd->fat_file_type == FAT_DIRECTORY) {
40018718: c4 06 60 10 ld [ %i1 + 0x10 ], %g2
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
4001871c: 83 32 80 01 srl %o2, %g1, %g1
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1));
40018720: ba 07 7f ff add %i5, -1, %i5
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40018724: 92 00 40 09 add %g1, %o1, %o1
if (fat_fd->fat_file_type == FAT_DIRECTORY) {
40018728: 80 a0 a0 00 cmp %g2, 0
4001872c: 02 80 00 07 be 40018748 <fat_file_write_file_size+0x78>
40018730: ba 0f 40 0a and %i5, %o2, %i5
le_new_length = CT_LE_L(fat_fd->fat_file_size);
40018734: d0 06 60 18 ld [ %i1 + 0x18 ], %o0
40018738: 40 00 40 75 call 4002890c <__bswapsi2>
4001873c: d2 27 bf f4 st %o1, [ %fp + -12 ]
40018740: d0 27 bf fc st %o0, [ %fp + -4 ]
40018744: d2 07 bf f4 ld [ %fp + -12 ], %o1
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_SIZE_OFFSET, 4,
40018748: 98 07 bf fc add %fp, -4, %o4
4001874c: 96 10 20 04 mov 4, %o3
40018750: 94 07 60 1c add %i5, 0x1c, %o2
40018754: 7f ff ef f1 call 40014718 <fat_sector_write>
40018758: 90 10 00 18 mov %i0, %o0
}
4001875c: b1 3a 20 1f sra %o0, 0x1f, %i0
40018760: 81 c7 e0 08 ret
40018764: 81 e8 00 00 restore
4001860c <fat_file_write_first_cluster_num>:
{
4001860c: 9d e3 bf 98 save %sp, -104, %sp
uint16_t le_cl_hi = 0;
40018610: c0 37 bf fe clrh [ %fp + -2 ]
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
40018614: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40018618: 80 a0 60 00 cmp %g1, 0
4001861c: 12 80 00 06 bne 40018634 <fat_file_write_first_cluster_num+0x28>
40018620: fa 06 60 1c ld [ %i1 + 0x1c ], %i5
40018624: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
40018628: 80 88 a0 03 btst 3, %g2
4001862c: 32 80 00 07 bne,a 40018648 <fat_file_write_first_cluster_num+0x3c>
<== ALWAYS TAKEN
40018630: c2 06 20 28 ld [ %i0 + 0x28 ], %g1
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40018634: c6 0e 20 05 ldub [ %i0 + 5 ], %g3
40018638: c4 06 20 3c ld [ %i0 + 0x3c ], %g2
4001863c: 82 00 7f fe add %g1, -2, %g1
40018640: 83 28 40 03 sll %g1, %g3, %g1
40018644: 82 00 40 02 add %g1, %g2, %g1
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40018648: c4 06 60 24 ld [ %i1 + 0x24 ], %g2
4001864c: f8 0e 20 02 ldub [ %i0 + 2 ], %i4
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40018650: f6 16 00 00 lduh [ %i0 ], %i3
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
40018654: b9 30 80 1c srl %g2, %i4, %i4
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40018658: b6 06 ff ff add %i3, -1, %i3
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
4001865c: b8 07 00 01 add %i4, %g1, %i4
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
40018660: b6 0e c0 02 and %i3, %g2, %i3
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
40018664: 83 2f 60 08 sll %i5, 8, %g1
40018668: 85 2f 60 10 sll %i5, 0x10, %g2
4001866c: 85 30 a0 18 srl %g2, 0x18, %g2
40018670: 82 10 40 02 or %g1, %g2, %g1
ret1 = fat_sector_write(fs_info, sec,
40018674: 98 07 bf fc add %fp, -4, %o4
40018678: 94 06 e0 1a add %i3, 0x1a, %o2
4001867c: 92 10 00 1c mov %i4, %o1
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
40018680: c2 37 bf fc sth %g1, [ %fp + -4 ]
ret1 = fat_sector_write(fs_info, sec,
40018684: 96 10 20 02 mov 2, %o3
40018688: 7f ff f0 24 call 40014718 <fat_sector_write>
4001868c: 90 10 00 18 mov %i0, %o0
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
40018690: bb 37 60 10 srl %i5, 0x10, %i5
40018694: 83 2f 60 08 sll %i5, 8, %g1
ret1 = fat_sector_write(fs_info, sec,
40018698: b4 10 00 08 mov %o0, %i2
ret2 = fat_sector_write(fs_info, sec,
4001869c: 98 07 bf fe add %fp, -2, %o4
400186a0: 96 10 20 02 mov 2, %o3
400186a4: 94 06 e0 14 add %i3, 0x14, %o2
400186a8: 92 10 00 1c mov %i4, %o1
400186ac: 90 10 00 18 mov %i0, %o0
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
400186b0: bb 37 60 08 srl %i5, 8, %i5
400186b4: ba 10 40 1d or %g1, %i5, %i5
ret2 = fat_sector_write(fs_info, sec,
400186b8: 7f ff f0 18 call 40014718 <fat_sector_write>
400186bc: fa 37 bf fe sth %i5, [ %fp + -2 ]
if ( (ret1 < 0) || (ret2 < 0) )
400186c0: b0 12 00 1a or %o0, %i2, %i0
}
400186c4: b1 3e 20 1f sra %i0, 0x1f, %i0
400186c8: 81 c7 e0 08 ret
400186cc: 81 e8 00 00 restore
40018488 <fat_file_write_time_and_date>:
{
40018488: 9d e3 bf 98 save %sp, -104, %sp
sec = fat_cluster_num_to_sector_num(fs_info, fat_fd->dir_pos.sname.cln);
4001848c: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40018490: 80 a0 60 00 cmp %g1, 0
40018494: 12 80 00 06 bne 400184ac <fat_file_write_time_and_date+0x24>
40018498: ba 10 00 18 mov %i0, %i5
4001849c: c4 0e 20 16 ldub [ %i0 + 0x16 ], %g2
400184a0: 80 88 a0 03 btst 3, %g2
400184a4: 32 80 00 07 bne,a 400184c0 <fat_file_write_time_and_date+0x38>
<== ALWAYS TAKEN
400184a8: c2 06 20 28 ld [ %i0 + 0x28 ], %g1
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
400184ac: c4 0f 60 05 ldub [ %i5 + 5 ], %g2
400184b0: f8 07 60 3c ld [ %i5 + 0x3c ], %i4
400184b4: 82 00 7f fe add %g1, -2, %g1
400184b8: 83 28 40 02 sll %g1, %g2, %g1
400184bc: 82 00 40 1c add %g1, %i4, %g1
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
400184c0: c4 06 60 24 ld [ %i1 + 0x24 ], %g2
400184c4: f8 0f 60 02 ldub [ %i5 + 2 ], %i4
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
400184c8: f6 17 40 00 lduh [ %i5 ], %i3
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
400184cc: d0 06 60 4c ld [ %i1 + 0x4c ], %o0
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
400184d0: b9 30 80 1c srl %g2, %i4, %i4
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
400184d4: 94 07 bf fc add %fp, -4, %o2
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->vol.sec_log2);
400184d8: b8 07 00 01 add %i4, %g1, %i4
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
400184dc: 92 07 bf fe add %fp, -2, %o1
byte = fat_fd->dir_pos.sname.ofs & (fs_info->vol.bps - 1);
400184e0: b6 06 ff ff add %i3, -1, %i3
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
400184e4: 40 00 06 46 call 40019dfc <msdos_date_unix2dos>
400184e8: b6 0e c0 02 and %i3, %g2, %i3
time_val = CT_LE_W(time_val);
400184ec: c2 17 bf fc lduh [ %fp + -4 ], %g1
400184f0: 85 28 60 08 sll %g1, 8, %g2
400184f4: 83 30 60 08 srl %g1, 8, %g1
400184f8: 82 10 80 01 or %g2, %g1, %g1
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET,
400184fc: 98 07 bf fc add %fp, -4, %o4
40018500: 96 10 20 02 mov 2, %o3
40018504: 94 06 e0 16 add %i3, 0x16, %o2
40018508: 92 10 00 1c mov %i4, %o1
time_val = CT_LE_W(time_val);
4001850c: c2 37 bf fc sth %g1, [ %fp + -4 ]
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET,
40018510: 7f ff f0 82 call 40014718 <fat_sector_write>
40018514: 90 10 00 1d mov %i5, %o0
date = CT_LE_W(date);
40018518: c2 17 bf fe lduh [ %fp + -2 ], %g1
4001851c: 85 28 60 08 sll %g1, 8, %g2
40018520: 83 30 60 08 srl %g1, 8, %g1
40018524: 82 10 80 01 or %g2, %g1, %g1
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WTIME_OFFSET,
40018528: b4 10 00 08 mov %o0, %i2
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WDATE_OFFSET,
4001852c: 98 07 bf fe add %fp, -2, %o4
40018530: 96 10 20 02 mov 2, %o3
date = CT_LE_W(date);
40018534: c2 37 bf fe sth %g1, [ %fp + -2 ]
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_WDATE_OFFSET,
40018538: 94 06 e0 18 add %i3, 0x18, %o2
4001853c: 92 10 00 1c mov %i4, %o1
40018540: 90 10 00 1d mov %i5, %o0
40018544: 7f ff f0 75 call 40014718 <fat_sector_write>
40018548: b0 10 3f ff mov -1, %i0
if ( ret < 0 )
4001854c: 80 a2 20 00 cmp %o0, 0
40018550: 36 80 00 02 bge,a 40018558 <fat_file_write_time_and_date+0xd0>
<== ALWAYS TAKEN
40018554: b1 3e a0 1f sra %i2, 0x1f, %i0
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_ADATE_OFFSET,
40018558: 98 07 bf fe add %fp, -2, %o4
4001855c: 96 10 20 02 mov 2, %o3
40018560: 94 06 e0 12 add %i3, 0x12, %o2
40018564: 92 10 00 1c mov %i4, %o1
40018568: 7f ff f0 6c call 40014718 <fat_sector_write>
4001856c: 90 10 00 1d mov %i5, %o0
if ( ret < 0 )
40018570: 80 a2 20 00 cmp %o0, 0
40018574: 26 80 00 02 bl,a 4001857c <fat_file_write_time_and_date+0xf4>
<== NEVER TAKEN
40018578: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
msdos_date_unix2dos(fat_fd->ctime, &date, &time_val);
4001857c: d0 06 60 44 ld [ %i1 + 0x44 ], %o0
40018580: 94 07 bf fc add %fp, -4, %o2
40018584: 40 00 06 1e call 40019dfc <msdos_date_unix2dos>
40018588: 92 07 bf fe add %fp, -2, %o1
time_val = CT_LE_W(time_val);
4001858c: c2 17 bf fc lduh [ %fp + -4 ], %g1
40018590: 85 28 60 08 sll %g1, 8, %g2
40018594: 83 30 60 08 srl %g1, 8, %g1
40018598: 82 10 80 01 or %g2, %g1, %g1
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CTIME_OFFSET,
4001859c: 98 07 bf fc add %fp, -4, %o4
400185a0: 96 10 20 02 mov 2, %o3
time_val = CT_LE_W(time_val);
400185a4: c2 37 bf fc sth %g1, [ %fp + -4 ]
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CTIME_OFFSET,
400185a8: 94 06 e0 0e add %i3, 0xe, %o2
400185ac: 92 10 00 1c mov %i4, %o1
400185b0: 7f ff f0 5a call 40014718 <fat_sector_write>
400185b4: 90 10 00 1d mov %i5, %o0
if ( ret < 0 )
400185b8: 80 a2 20 00 cmp %o0, 0
400185bc: 26 80 00 02 bl,a 400185c4 <fat_file_write_time_and_date+0x13c>
<== NEVER TAKEN
400185c0: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
date = CT_LE_W(date);
400185c4: c2 17 bf fe lduh [ %fp + -2 ], %g1
400185c8: 85 28 60 08 sll %g1, 8, %g2
400185cc: 83 30 60 08 srl %g1, 8, %g1
400185d0: 82 10 80 01 or %g2, %g1, %g1
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CDATE_OFFSET,
400185d4: 98 07 bf fe add %fp, -2, %o4
400185d8: 96 10 20 02 mov 2, %o3
date = CT_LE_W(date);
400185dc: c2 37 bf fe sth %g1, [ %fp + -2 ]
ret = fat_sector_write(fs_info, sec, byte + MSDOS_FILE_CDATE_OFFSET,
400185e0: 94 06 e0 10 add %i3, 0x10, %o2
400185e4: 92 10 00 1c mov %i4, %o1
400185e8: 7f ff f0 4c call 40014718 <fat_sector_write>
400185ec: 90 10 00 1d mov %i5, %o0
if ( ret < 0 )
400185f0: 80 a2 20 00 cmp %o0, 0
400185f4: 06 80 00 04 bl 40018604 <fat_file_write_time_and_date+0x17c>
<== NEVER TAKEN
400185f8: 01 00 00 00 nop
}
400185fc: 81 c7 e0 08 ret
40018600: 81 e8 00 00 restore
40018604: 81 c7 e0 08 ret
<== NOT EXECUTED
40018608: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
4001329c <fat_free_fat_clusters_chain>:
{
4001329c: 9d e3 bf 98 save %sp, -104, %sp
uint32_t next_cln = 0;
400132a0: c0 27 bf fc clr [ %fp + -4 ]
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
400132a4: c2 06 20 18 ld [ %i0 + 0x18 ], %g1
400132a8: c4 06 20 1c ld [ %i0 + 0x1c ], %g2
400132ac: 82 0e 40 01 and %i1, %g1, %g1
400132b0: 80 a0 80 01 cmp %g2, %g1
400132b4: 08 80 00 26 bleu 4001334c <fat_free_fat_clusters_chain+0xb0>
<== NEVER TAKEN
400132b8: ba 10 00 18 mov %i0, %i5
uint32_t cur_cln = chain;
400132bc: b8 10 00 19 mov %i1, %i4
uint32_t freed_cls_cnt = 0;
400132c0: b6 10 20 00 clr %i3
int rc = RC_OK, rc1 = RC_OK;
400132c4: 10 80 00 0e b 400132fc <fat_free_fat_clusters_chain+0x60>
400132c8: b0 10 20 00 clr %i0
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
400132cc: 7f ff ff 52 call 40013014 <fat_set_fat_cluster>
400132d0: 01 00 00 00 nop
if ( rc != RC_OK )
400132d4: 80 a2 20 00 cmp %o0, 0
400132d8: 32 80 00 02 bne,a 400132e0 <fat_free_fat_clusters_chain+0x44>
<== NEVER TAKEN
400132dc: b0 10 00 08 mov %o0, %i0
<== NOT EXECUTED
cur_cln = next_cln;
400132e0: f8 07 bf fc ld [ %fp + -4 ], %i4
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
400132e4: c2 07 60 18 ld [ %i5 + 0x18 ], %g1
400132e8: c4 07 60 1c ld [ %i5 + 0x1c ], %g2
400132ec: 82 0f 00 01 and %i4, %g1, %g1
400132f0: 80 a0 40 02 cmp %g1, %g2
400132f4: 1a 80 00 18 bcc 40013354 <fat_free_fat_clusters_chain+0xb8>
400132f8: b6 06 e0 01 inc %i3
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
400132fc: 92 10 00 1c mov %i4, %o1
40013300: 94 07 bf fc add %fp, -4, %o2
40013304: 7f ff fe d1 call 40012e48 <fat_get_fat_cluster>
40013308: 90 10 00 1d mov %i5, %o0
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
4001330c: 92 10 00 1c mov %i4, %o1
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
40013310: 82 10 00 08 mov %o0, %g1
rc = fat_set_fat_cluster(fs_info, cur_cln, FAT_GENFAT_FREE);
40013314: 94 10 20 00 clr %o2
if ( rc != RC_OK )
40013318: 80 a0 60 00 cmp %g1, 0
4001331c: 02 bf ff ec be 400132cc <fat_free_fat_clusters_chain+0x30>
<== ALWAYS TAKEN
40013320: 90 10 00 1d mov %i5, %o0
if(fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
40013324: c4 07 60 4c ld [ %i5 + 0x4c ], %g2
<== NOT EXECUTED
40013328: 80 a0 bf ff cmp %g2, -1
<== NOT EXECUTED
4001332c: 02 80 00 03 be 40013338 <fat_free_fat_clusters_chain+0x9c>
<== NOT EXECUTED
40013330: b6 00 80 1b add %g2, %i3, %i3
<== NOT EXECUTED
fs_info->vol.free_cls += freed_cls_cnt;
40013334: f6 27 60 4c st %i3, [ %i5 + 0x4c ]
<== NOT EXECUTED
rc = fat_get_fat_cluster(fs_info, cur_cln, &next_cln);
40013338: b0 10 00 01 mov %g1, %i0
<== NOT EXECUTED
fat_buf_release(fs_info);
4001333c: 40 00 04 ce call 40014674 <fat_buf_release>
<== NOT EXECUTED
40013340: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
return rc;
40013344: 81 c7 e0 08 ret
<== NOT EXECUTED
40013348: 81 e8 00 00 restore
<== NOT EXECUTED
uint32_t freed_cls_cnt = 0;
4001334c: b6 10 20 00 clr %i3
<== NOT EXECUTED
int rc = RC_OK, rc1 = RC_OK;
40013350: b0 10 20 00 clr %i0
<== NOT EXECUTED
fs_info->vol.next_cl = chain;
40013354: f2 27 60 54 st %i1, [ %i5 + 0x54 ]
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
40013358: c2 07 60 4c ld [ %i5 + 0x4c ], %g1
4001335c: 80 a0 7f ff cmp %g1, -1
40013360: 02 80 00 03 be 4001336c <fat_free_fat_clusters_chain+0xd0>
<== ALWAYS TAKEN
40013364: b6 00 40 1b add %g1, %i3, %i3
fs_info->vol.free_cls += freed_cls_cnt;
40013368: f6 27 60 4c st %i3, [ %i5 + 0x4c ]
<== NOT EXECUTED
fat_buf_release(fs_info);
4001336c: 40 00 04 c2 call 40014674 <fat_buf_release>
40013370: 90 10 00 1d mov %i5, %o0
}
40013374: 81 c7 e0 08 ret
40013378: 81 e8 00 00 restore
40015698 <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);
40015698: c2 02 20 88 ld [ %o0 + 0x88 ], %g1
<== NOT EXECUTED
4001569c: c6 02 20 7c ld [ %o0 + 0x7c ], %g3
<== NOT EXECUTED
400156a0: 92 22 40 01 sub %o1, %g1, %o1
<== NOT EXECUTED
400156a4: 85 32 60 03 srl %o1, 3, %g2
<== NOT EXECUTED
400156a8: c8 08 c0 02 ldub [ %g3 + %g2 ], %g4
<== NOT EXECUTED
400156ac: 92 0a 60 07 and %o1, 7, %o1
<== NOT EXECUTED
400156b0: 82 10 20 01 mov 1, %g1
<== NOT EXECUTED
400156b4: 93 28 40 09 sll %g1, %o1, %o1
<== NOT EXECUTED
400156b8: 92 29 00 09 andn %g4, %o1, %o1
<== NOT EXECUTED
}
400156bc: 81 c3 e0 08 retl
<== NOT EXECUTED
400156c0: d2 28 c0 02 stb %o1, [ %g3 + %g2 ]
<== NOT EXECUTED
40012e48 <fat_get_fat_cluster>:
fat_get_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t *ret_val
)
{
40012e48: 9d e3 bf 98 save %sp, -104, %sp
uint8_t *sec_buf;
uint32_t sec = 0;
uint32_t ofs = 0;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
40012e4c: 80 a6 60 01 cmp %i1, 1
40012e50: 08 80 00 26 bleu 40012ee8 <fat_get_fat_cluster+0xa0>
<== NEVER TAKEN
40012e54: ba 10 00 18 mov %i0, %i5
40012e58: c2 06 20 40 ld [ %i0 + 0x40 ], %g1
40012e5c: 82 00 60 01 inc %g1
40012e60: 80 a0 40 19 cmp %g1, %i1
40012e64: 0a 80 00 21 bcs 40012ee8 <fat_get_fat_cluster+0xa0>
<== NEVER TAKEN
40012e68: 01 00 00 00 nop
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
40012e6c: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
40012e70: 80 88 60 01 btst 1, %g1
40012e74: 12 80 00 23 bne 40012f00 <fat_get_fat_cluster+0xb8>
40012e78: b7 36 60 01 srl %i1, 1, %i3
40012e7c: 80 88 60 02 btst 2, %g1
40012e80: 02 80 00 03 be 40012e8c <fat_get_fat_cluster+0x44>
40012e84: a1 2e 60 02 sll %i1, 2, %l0
40012e88: a1 2e 60 01 sll %i1, 1, %l0
40012e8c: f8 0f 60 02 ldub [ %i5 + 2 ], %i4
40012e90: c2 07 60 60 ld [ %i5 + 0x60 ], %g1
40012e94: b9 34 00 1c srl %l0, %i4, %i4
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
40012e98: f6 17 40 00 lduh [ %i5 ], %i3
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
40012e9c: b8 07 00 01 add %i4, %g1, %i4
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
40012ea0: 94 10 20 01 mov 1, %o2
40012ea4: 96 07 bf fc add %fp, -4, %o3
40012ea8: 92 10 00 1c mov %i4, %o1
40012eac: 40 00 05 c2 call 400145b4 <fat_buf_access>
40012eb0: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40012eb4: b0 92 20 00 orcc %o0, 0, %i0
40012eb8: 12 80 00 45 bne 40012fcc <fat_get_fat_cluster+0x184>
<== NEVER TAKEN
40012ebc: 01 00 00 00 nop
return rc;
switch ( fs_info->vol.type )
40012ec0: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
40012ec4: b6 06 ff ff add %i3, -1, %i3
switch ( fs_info->vol.type )
40012ec8: 80 a0 60 02 cmp %g1, 2
40012ecc: 02 80 00 35 be 40012fa0 <fat_get_fat_cluster+0x158>
40012ed0: b6 0e c0 10 and %i3, %l0, %i3
40012ed4: 80 a0 60 04 cmp %g1, 4
40012ed8: 02 80 00 2c be 40012f88 <fat_get_fat_cluster+0x140>
40012edc: 80 a0 60 01 cmp %g1, 1
40012ee0: 02 80 00 18 be 40012f40 <fat_get_fat_cluster+0xf8>
<== ALWAYS TAKEN
40012ee4: c4 07 bf fc ld [ %fp + -4 ], %g2
*ret_val = *((uint32_t *)(sec_buf + ofs));
*ret_val = CF_LE_L(*ret_val);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
40012ee8: 40 00 20 95 call 4001b13c <__errno>
<== NOT EXECUTED
40012eec: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40012ef0: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
40012ef4: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40012ef8: 81 c7 e0 08 ret
<== NOT EXECUTED
40012efc: 81 e8 00 00 restore
<== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
40012f00: f8 0f 60 02 ldub [ %i5 + 2 ], %i4
40012f04: c2 07 60 60 ld [ %i5 + 0x60 ], %g1
40012f08: a0 06 c0 19 add %i3, %i1, %l0
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
40012f0c: 94 10 20 01 mov 1, %o2
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
40012f10: b9 34 00 1c srl %l0, %i4, %i4
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
40012f14: f6 17 40 00 lduh [ %i5 ], %i3
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
40012f18: b8 07 00 01 add %i4, %g1, %i4
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
40012f1c: 96 07 bf fc add %fp, -4, %o3
40012f20: 92 10 00 1c mov %i4, %o1
40012f24: 40 00 05 a4 call 400145b4 <fat_buf_access>
40012f28: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40012f2c: b0 92 20 00 orcc %o0, 0, %i0
40012f30: 22 bf ff e5 be,a 40012ec4 <fat_get_fat_cluster+0x7c>
<== ALWAYS TAKEN
40012f34: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
break;
}
return RC_OK;
}
40012f38: 81 c7 e0 08 ret
<== NOT EXECUTED
40012f3c: 81 e8 00 00 restore
<== NOT EXECUTED
*ret_val = (*(sec_buf + ofs));
40012f40: c8 08 80 1b ldub [ %g2 + %i3 ], %g4
40012f44: c8 26 80 00 st %g4, [ %i2 ]
if ( ofs == (fs_info->vol.bps - 1) )
40012f48: c6 17 40 00 lduh [ %i5 ], %g3
40012f4c: 86 00 ff ff add %g3, -1, %g3
40012f50: 80 a0 c0 1b cmp %g3, %i3
40012f54: 02 80 00 20 be 40012fd4 <fat_get_fat_cluster+0x18c>
40012f58: b6 00 80 1b add %g2, %i3, %i3
*ret_val |= *(sec_buf + ofs + 1) << 8;
40012f5c: c2 0e e0 01 ldub [ %i3 + 1 ], %g1
40012f60: 83 28 60 08 sll %g1, 8, %g1
40012f64: 82 10 40 04 or %g1, %g4, %g1
40012f68: c2 26 80 00 st %g1, [ %i2 ]
if ( FAT_CLUSTER_IS_ODD(cln) )
40012f6c: 80 8e 60 01 btst 1, %i1
40012f70: 22 80 00 16 be,a 40012fc8 <fat_get_fat_cluster+0x180>
40012f74: 82 08 6f ff and %g1, 0xfff, %g1
*ret_val = (*ret_val) >> FAT12_SHIFT;
40012f78: 83 30 60 04 srl %g1, 4, %g1
40012f7c: c2 26 80 00 st %g1, [ %i2 ]
40012f80: 81 c7 e0 08 ret
40012f84: 81 e8 00 00 restore
*ret_val = *((uint32_t *)(sec_buf + ofs));
40012f88: c2 07 bf fc ld [ %fp + -4 ], %g1
*ret_val = CF_LE_L(*ret_val);
40012f8c: 40 00 56 60 call 4002890c <__bswapsi2>
40012f90: d0 00 40 1b ld [ %g1 + %i3 ], %o0
40012f94: d0 26 80 00 st %o0, [ %i2 ]
break;
40012f98: 81 c7 e0 08 ret
40012f9c: 81 e8 00 00 restore
*ret_val = *((uint16_t *)(sec_buf + ofs));
40012fa0: c2 07 bf fc ld [ %fp + -4 ], %g1
*ret_val = CF_LE_W(*ret_val);
40012fa4: c4 10 40 1b lduh [ %g1 + %i3 ], %g2
40012fa8: 83 28 a0 08 sll %g2, 8, %g1
40012fac: 85 30 a0 08 srl %g2, 8, %g2
40012fb0: 82 10 40 02 or %g1, %g2, %g1
40012fb4: 83 28 60 10 sll %g1, 0x10, %g1
40012fb8: 83 30 60 10 srl %g1, 0x10, %g1
40012fbc: c2 26 80 00 st %g1, [ %i2 ]
break;
40012fc0: 81 c7 e0 08 ret
40012fc4: 81 e8 00 00 restore
*ret_val = (*ret_val) & FAT_FAT12_MASK;
40012fc8: c2 26 80 00 st %g1, [ %i2 ]
40012fcc: 81 c7 e0 08 ret
40012fd0: 81 e8 00 00 restore
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
40012fd4: 96 07 bf fc add %fp, -4, %o3
40012fd8: 94 10 20 01 mov 1, %o2
40012fdc: 92 07 20 01 add %i4, 1, %o1
40012fe0: 40 00 05 75 call 400145b4 <fat_buf_access>
40012fe4: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40012fe8: 80 a2 20 00 cmp %o0, 0
40012fec: 12 80 00 08 bne 4001300c <fat_get_fat_cluster+0x1c4>
<== NEVER TAKEN
40012ff0: c2 07 bf fc ld [ %fp + -4 ], %g1
*ret_val |= *sec_buf << 8;
40012ff4: c2 08 40 00 ldub [ %g1 ], %g1
40012ff8: c4 06 80 00 ld [ %i2 ], %g2
40012ffc: 83 28 60 08 sll %g1, 8, %g1
40013000: 82 10 40 02 or %g1, %g2, %g1
40013004: 10 bf ff da b 40012f6c <fat_get_fat_cluster+0x124>
40013008: c2 26 80 00 st %g1, [ %i2 ]
}
4001300c: 81 c7 e0 08 ret
<== NOT EXECUTED
40013010: 91 e8 00 08 restore %g0, %o0, %o0
<== NOT EXECUTED
4001559c <fat_get_unique_ino>:
* 0 means FAILED !!!
*
*/
uint32_t
fat_get_unique_ino(fat_fs_info_t *fs_info)
{
4001559c: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
400155a0: d2 06 20 84 ld [ %i0 + 0x84 ], %o1
<== 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))
400155a4: 03 03 ff ff sethi %hi(0xffffc00), %g1
<== NOT EXECUTED
400155a8: b4 10 63 ff or %g1, 0x3ff, %i2 ! fffffff <RAM_SIZE+0xfbfffff>
<== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
400155ac: 80 a2 60 00 cmp %o1, 0
<== NOT EXECUTED
400155b0: 22 80 00 23 be,a 4001563c <fat_get_unique_ino+0xa0>
<== NOT EXECUTED
400155b4: c2 06 20 88 ld [ %i0 + 0x88 ], %g1
<== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
400155b8: c8 06 20 7c ld [ %i0 + 0x7c ], %g4
<== NOT EXECUTED
400155bc: c2 06 20 80 ld [ %i0 + 0x80 ], %g1
<== NOT EXECUTED
400155c0: 87 30 60 03 srl %g1, 3, %g3
<== NOT EXECUTED
400155c4: c4 49 00 03 ldsb [ %g4 + %g3 ], %g2
<== NOT EXECUTED
400155c8: b8 08 60 07 and %g1, 7, %i4
<== NOT EXECUTED
400155cc: b6 01 00 03 add %g4, %g3, %i3
<== NOT EXECUTED
400155d0: 85 38 80 1c sra %g2, %i4, %g2
<== NOT EXECUTED
400155d4: 80 88 a0 01 btst 1, %g2
<== NOT EXECUTED
400155d8: 02 80 00 26 be 40015670 <fat_get_unique_ino+0xd4>
<== NOT EXECUTED
400155dc: c6 09 00 03 ldub [ %g4 + %g3 ], %g3
<== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
400155e0: 10 80 00 0e b 40015618 <fat_get_unique_ino+0x7c>
<== NOT EXECUTED
400155e4: ba 10 20 00 clr %i5
<== NOT EXECUTED
400155e8: 80 a7 40 09 cmp %i5, %o1
<== NOT EXECUTED
400155ec: 02 80 00 12 be 40015634 <fat_get_unique_ino+0x98>
<== NOT EXECUTED
400155f0: c2 26 20 80 st %g1, [ %i0 + 0x80 ]
<== NOT EXECUTED
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
400155f4: c2 06 20 80 ld [ %i0 + 0x80 ], %g1
<== NOT EXECUTED
400155f8: 87 30 60 03 srl %g1, 3, %g3
<== NOT EXECUTED
400155fc: c4 49 00 03 ldsb [ %g4 + %g3 ], %g2
<== NOT EXECUTED
40015600: b8 08 60 07 and %g1, 7, %i4
<== NOT EXECUTED
40015604: b6 01 00 03 add %g4, %g3, %i3
<== NOT EXECUTED
40015608: 85 38 80 1c sra %g2, %i4, %g2
<== NOT EXECUTED
4001560c: 80 88 a0 01 btst 1, %g2
<== NOT EXECUTED
40015610: 02 80 00 18 be 40015670 <fat_get_unique_ino+0xd4>
<== NOT EXECUTED
40015614: c6 09 00 03 ldub [ %g4 + %g3 ], %g3
<== NOT EXECUTED
fs_info->index++;
40015618: 82 00 60 01 inc %g1
<== NOT EXECUTED
if (fs_info->index >= fs_info->uino_pool_size)
4001561c: 80 a0 40 09 cmp %g1, %o1
<== NOT EXECUTED
40015620: 0a bf ff f2 bcs 400155e8 <fat_get_unique_ino+0x4c>
<== NOT EXECUTED
40015624: ba 07 60 01 inc %i5
<== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
40015628: 80 a7 40 09 cmp %i5, %o1
<== NOT EXECUTED
4001562c: 12 bf ff f2 bne 400155f4 <fat_get_unique_ino+0x58>
<== NOT EXECUTED
40015630: c0 26 20 80 clr [ %i0 + 0x80 ]
<== NOT EXECUTED
40015634: 93 2a 60 01 sll %o1, 1, %o1
<== NOT EXECUTED
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
40015638: c2 06 20 88 ld [ %i0 + 0x88 ], %g1
<== NOT EXECUTED
4001563c: 82 26 80 01 sub %i2, %g1, %g1
<== NOT EXECUTED
40015640: 80 a0 40 09 cmp %g1, %o1
<== NOT EXECUTED
40015644: 08 80 00 13 bleu 40015690 <fat_get_unique_ino+0xf4>
<== NOT EXECUTED
40015648: 01 00 00 00 nop
<== NOT EXECUTED
{
fs_info->uino_pool_size <<= 1;
4001564c: d2 26 20 84 st %o1, [ %i0 + 0x84 ]
<== NOT EXECUTED
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
40015650: 7f ff c2 f4 call 40006220 <realloc>
<== NOT EXECUTED
40015654: d0 06 20 7c ld [ %i0 + 0x7c ], %o0
<== NOT EXECUTED
if (fs_info->uino != NULL)
40015658: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4001565c: 02 80 00 0d be 40015690 <fat_get_unique_ino+0xf4>
<== NOT EXECUTED
40015660: d0 26 20 7c st %o0, [ %i0 + 0x7c ]
<== NOT EXECUTED
fs_info->index = fs_info->uino_pool_size;
40015664: d2 06 20 84 ld [ %i0 + 0x84 ], %o1
<== NOT EXECUTED
40015668: 10 bf ff d1 b 400155ac <fat_get_unique_ino+0x10>
<== NOT EXECUTED
4001566c: d2 26 20 80 st %o1, [ %i0 + 0x80 ]
<== NOT EXECUTED
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
40015670: 82 10 20 01 mov 1, %g1
<== NOT EXECUTED
40015674: b9 28 40 1c sll %g1, %i4, %i4
<== NOT EXECUTED
40015678: 86 17 00 03 or %i4, %g3, %g3
<== NOT EXECUTED
4001567c: c6 2e c0 00 stb %g3, [ %i3 ]
<== NOT EXECUTED
return (fs_info->uino_base + fs_info->index);
40015680: c2 06 20 88 ld [ %i0 + 0x88 ], %g1
<== NOT EXECUTED
40015684: f0 06 20 80 ld [ %i0 + 0x80 ], %i0
<== NOT EXECUTED
40015688: 81 c7 e0 08 ret
<== NOT EXECUTED
4001568c: 91 e8 40 18 restore %g1, %i0, %o0
<== NOT EXECUTED
}
else
resrc_unsuff = true;
}
return 0;
}
40015690: 81 c7 e0 08 ret
<== NOT EXECUTED
40015694: 91 e8 20 00 restore %g0, 0, %o0
<== NOT EXECUTED
40015524 <fat_init_clusters_chain>:
int
fat_init_clusters_chain(
fat_fs_info_t *fs_info,
uint32_t start_cln
)
{
40015524: 9d e3 bf 98 save %sp, -104, %sp
int rc = RC_OK;
ssize_t ret = 0;
uint32_t cur_cln = start_cln;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40015528: 10 80 00 0e b 40015560 <fat_init_clusters_chain+0x3c>
4001552c: f2 27 bf fc st %i1, [ %fp + -4 ]
{
ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0);
40015530: 7f ff fc a5 call 400147c4 <fat_cluster_set>
40015534: d6 06 20 08 ld [ %i0 + 8 ], %o3
if ( ret != fs_info->vol.bpc )
40015538: c2 06 20 08 ld [ %i0 + 8 ], %g1
4001553c: 80 a0 40 08 cmp %g1, %o0
{
return -1;
}
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
40015540: 94 07 bf fc add %fp, -4, %o2
if ( ret != fs_info->vol.bpc )
40015544: 12 80 00 13 bne 40015590 <fat_init_clusters_chain+0x6c>
<== NEVER TAKEN
40015548: 90 10 00 18 mov %i0, %o0
rc = fat_get_fat_cluster(fs_info, cur_cln, &cur_cln);
4001554c: 7f ff f6 3f call 40012e48 <fat_get_fat_cluster>
40015550: d2 07 bf fc ld [ %fp + -4 ], %o1
if ( rc != RC_OK )
40015554: 80 a2 20 00 cmp %o0, 0
40015558: 12 80 00 0c bne 40015588 <fat_init_clusters_chain+0x64>
<== NEVER TAKEN
4001555c: f2 07 bf fc ld [ %fp + -4 ], %i1
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40015560: c4 06 20 18 ld [ %i0 + 0x18 ], %g2
40015564: c2 06 20 1c ld [ %i0 + 0x1c ], %g1
ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0);
40015568: 92 10 00 19 mov %i1, %o1
4001556c: 98 10 20 00 clr %o4
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40015570: b2 0e 40 02 and %i1, %g2, %i1
ret = fat_cluster_set(fs_info, cur_cln, 0, fs_info->vol.bpc, 0);
40015574: 94 10 20 00 clr %o2
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
40015578: 80 a6 40 01 cmp %i1, %g1
4001557c: 0a bf ff ed bcs 40015530 <fat_init_clusters_chain+0xc>
40015580: 90 10 00 18 mov %i0, %o0
return rc;
}
}
return rc;
40015584: 90 10 20 00 clr %o0
}
40015588: 81 c7 e0 08 ret
4001558c: 91 e8 00 08 restore %g0, %o0, %o0
return -1;
40015590: 90 10 3f ff mov -1, %o0
<== NOT EXECUTED
}
40015594: 81 c7 e0 08 ret
<== NOT EXECUTED
40015598: 91 e8 00 08 restore %g0, %o0, %o0
<== NOT EXECUTED
40014a9c <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)
{
40014a9c: 9d e3 be e8 save %sp, -280, %sp
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
vol->fd = open(device, O_RDWR);
40014aa0: 92 10 20 02 mov 2, %o1
{
40014aa4: a4 10 00 18 mov %i0, %l2
rtems_bdbuf_buffer *block = NULL;
40014aa8: c0 27 bf 8c clr [ %fp + -116 ]
vol->fd = open(device, O_RDWR);
40014aac: 7f ff c5 2d call 40005f60 <open>
40014ab0: 90 10 00 19 mov %i1, %o0
if (vol->fd < 0)
40014ab4: 80 a2 20 00 cmp %o0, 0
40014ab8: 06 80 01 cb bl 400151e4 <fat_init_volume_info+0x748>
<== NEVER TAKEN
40014abc: d0 24 a0 68 st %o0, [ %l2 + 0x68 ]
{
rtems_set_errno_and_return_minus_one(ENXIO);
}
rc = fstat(vol->fd, &stat_buf);
40014ac0: 7f ff c2 5a call 40005428 <fstat>
40014ac4: 92 07 bf a0 add %fp, -96, %o1
if (rc != 0)
40014ac8: 80 a2 20 00 cmp %o0, 0
40014acc: 12 80 01 c3 bne 400151d8 <fat_init_volume_info+0x73c>
<== NEVER TAKEN
40014ad0: 07 00 00 3c sethi %hi(0xf000), %g3
close(vol->fd);
rtems_set_errno_and_return_minus_one(ENXIO);
}
/* Must be a block device. */
if (!S_ISBLK(stat_buf.st_mode))
40014ad4: c4 07 bf ac ld [ %fp + -84 ], %g2
40014ad8: 84 08 80 03 and %g2, %g3, %g2
40014adc: 07 00 00 18 sethi %hi(0x6000), %g3
40014ae0: 80 a0 80 03 cmp %g2, %g3
40014ae4: 12 80 01 be bne 400151dc <fat_init_volume_info+0x740>
<== NEVER TAKEN
40014ae8: d0 06 20 68 ld [ %i0 + 0x68 ], %o0
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
40014aec: 94 06 20 6c add %i0, 0x6c, %o2
40014af0: 13 10 01 10 sethi %hi(0x40044000), %o1
40014af4: 40 00 04 31 call 40015bb8 <ioctl>
40014af8: 92 12 62 09 or %o1, 0x209, %o1 ! 40044209 <__end+0x16329>
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) {
40014afc: b0 92 20 00 orcc %o0, 0, %i0
40014b00: 12 80 01 b6 bne 400151d8 <fat_init_volume_info+0x73c>
<== NEVER TAKEN
40014b04: 94 07 bf 8c add %fp, -116, %o2
rtems_set_errno_and_return_minus_one(ENXIO);
}
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dd, 0, &block);
40014b08: d0 04 a0 6c ld [ %l2 + 0x6c ], %o0
40014b0c: 7f ff f3 be call 40011a04 <rtems_bdbuf_read>
40014b10: 92 10 20 00 clr %o1
if (sc != RTEMS_SUCCESSFUL)
40014b14: 80 a2 20 00 cmp %o0, 0
40014b18: 12 80 01 b9 bne 400151fc <fat_init_volume_info+0x760>
<== NEVER TAKEN
40014b1c: d0 07 bf 8c ld [ %fp + -116 ], %o0
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EIO);
}
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
40014b20: c4 02 20 1c ld [ %o0 + 0x1c ], %g2
40014b24: c2 08 a0 20 ldub [ %g2 + 0x20 ], %g1
40014b28: c2 2f bf 87 stb %g1, [ %fp + -121 ]
40014b2c: c2 08 a0 21 ldub [ %g2 + 0x21 ], %g1
40014b30: c2 2f bf 83 stb %g1, [ %fp + -125 ]
40014b34: c2 08 a0 22 ldub [ %g2 + 0x22 ], %g1
40014b38: c2 2f bf 7f stb %g1, [ %fp + -129 ]
40014b3c: c2 08 a0 23 ldub [ %g2 + 0x23 ], %g1
40014b40: c2 2f bf 7b stb %g1, [ %fp + -133 ]
40014b44: c2 08 a0 24 ldub [ %g2 + 0x24 ], %g1
40014b48: c2 2f bf 77 stb %g1, [ %fp + -137 ]
40014b4c: c2 08 a0 25 ldub [ %g2 + 0x25 ], %g1
40014b50: c2 2f bf 73 stb %g1, [ %fp + -141 ]
40014b54: c2 08 a0 26 ldub [ %g2 + 0x26 ], %g1
40014b58: c2 2f bf 6f stb %g1, [ %fp + -145 ]
40014b5c: c2 08 a0 27 ldub [ %g2 + 0x27 ], %g1
40014b60: c2 2f bf 6b stb %g1, [ %fp + -149 ]
40014b64: c2 08 a0 28 ldub [ %g2 + 0x28 ], %g1
40014b68: e6 08 a0 0b ldub [ %g2 + 0xb ], %l3
40014b6c: fa 08 a0 0c ldub [ %g2 + 0xc ], %i5
40014b70: e0 08 a0 0d ldub [ %g2 + 0xd ], %l0
40014b74: ee 08 a0 0e ldub [ %g2 + 0xe ], %l7
40014b78: f4 08 a0 0f ldub [ %g2 + 0xf ], %i2
40014b7c: e2 08 a0 10 ldub [ %g2 + 0x10 ], %l1
40014b80: ec 08 a0 11 ldub [ %g2 + 0x11 ], %l6
40014b84: f2 08 a0 12 ldub [ %g2 + 0x12 ], %i1
40014b88: e8 08 a0 13 ldub [ %g2 + 0x13 ], %l4
40014b8c: f8 08 a0 14 ldub [ %g2 + 0x14 ], %i4
40014b90: ea 08 a0 16 ldub [ %g2 + 0x16 ], %l5
40014b94: f6 08 a0 17 ldub [ %g2 + 0x17 ], %i3
40014b98: c2 2f bf 67 stb %g1, [ %fp + -153 ]
40014b9c: c2 08 a0 2c ldub [ %g2 + 0x2c ], %g1
40014ba0: c2 2f bf 5b stb %g1, [ %fp + -165 ]
40014ba4: c2 08 a0 2d ldub [ %g2 + 0x2d ], %g1
40014ba8: c2 2f bf 57 stb %g1, [ %fp + -169 ]
40014bac: c2 08 a0 2e ldub [ %g2 + 0x2e ], %g1
40014bb0: c2 2f bf 63 stb %g1, [ %fp + -157 ]
40014bb4: c2 08 a0 2f ldub [ %g2 + 0x2f ], %g1
40014bb8: c2 2f bf 5f stb %g1, [ %fp + -161 ]
40014bbc: c2 08 a0 30 ldub [ %g2 + 0x30 ], %g1
40014bc0: c2 2f bf 53 stb %g1, [ %fp + -173 ]
40014bc4: c2 08 a0 31 ldub [ %g2 + 0x31 ], %g1
sc = rtems_bdbuf_release( block);
40014bc8: 7f ff f4 18 call 40011c28 <rtems_bdbuf_release>
40014bcc: c2 2f bf 4f stb %g1, [ %fp + -177 ]
if (sc != RTEMS_SUCCESSFUL)
40014bd0: 80 a2 20 00 cmp %o0, 0
40014bd4: 12 80 01 8a bne 400151fc <fat_init_volume_info+0x760>
<== NEVER TAKEN
40014bd8: bb 2f 60 08 sll %i5, 8, %i5
close(vol->fd);
rtems_set_errno_and_return_minus_one( EIO );
}
/* Evaluate boot record */
vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec);
40014bdc: a6 17 40 13 or %i5, %l3, %l3
if ( (vol->bps != 512) &&
40014be0: 84 04 fe 00 add %l3, -512, %g2
40014be4: 84 08 bd ff and %g2, -513, %g2
40014be8: 85 28 a0 10 sll %g2, 0x10, %g2
(vol->bps != 1024) &&
(vol->bps != 2048) &&
40014bec: 80 a0 a0 00 cmp %g2, 0
40014bf0: 02 80 00 07 be 40014c0c <fat_init_volume_info+0x170>
<== ALWAYS TAKEN
40014bf4: e6 34 80 00 sth %l3, [ %l2 ]
(vol->bps != 1024) &&
40014bf8: 84 04 f8 00 add %l3, -2048, %g2
<== NOT EXECUTED
40014bfc: 07 3f ff c2 sethi %hi(0xffff0800), %g3
<== NOT EXECUTED
(vol->bps != 2048) &&
40014c00: 80 a8 80 03 andncc %g2, %g3, %g0
<== NOT EXECUTED
40014c04: 12 80 00 41 bne 40014d08 <fat_init_volume_info+0x26c>
<== NOT EXECUTED
40014c08: 01 00 00 00 nop
<== NOT EXECUTED
(vol->bps != 4096))
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
40014c0c: 93 2c e0 10 sll %l3, 0x10, %o1
40014c10: 85 32 60 19 srl %o1, 0x19, %g2
40014c14: 80 88 a0 01 btst 1, %g2
40014c18: 12 80 00 09 bne 40014c3c <fat_init_volume_info+0x1a0>
<== ALWAYS TAKEN
40014c1c: c0 2c a0 03 clrb [ %l2 + 3 ]
40014c20: 86 10 20 00 clr %g3
<== NOT EXECUTED
i >>= 1, vol->sec_mul++);
40014c24: 85 38 a0 01 sra %g2, 1, %g2
<== NOT EXECUTED
40014c28: 88 00 e0 01 add %g3, 1, %g4
<== NOT EXECUTED
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
40014c2c: 80 88 a0 01 btst 1, %g2
<== NOT EXECUTED
40014c30: 02 bf ff fd be 40014c24 <fat_init_volume_info+0x188>
<== NOT EXECUTED
40014c34: 86 10 00 04 mov %g4, %g3
<== NOT EXECUTED
40014c38: c8 2c a0 03 stb %g4, [ %l2 + 3 ]
<== NOT EXECUTED
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
40014c3c: 85 32 60 10 srl %o1, 0x10, %g2
40014c40: 80 8c e0 01 btst 1, %l3
40014c44: 12 80 00 0a bne 40014c6c <fat_init_volume_info+0x1d0>
<== NEVER TAKEN
40014c48: c0 2c a0 02 clrb [ %l2 + 2 ]
40014c4c: 10 80 00 03 b 40014c58 <fat_init_volume_info+0x1bc>
40014c50: 86 10 20 01 mov 1, %g3
40014c54: 86 10 00 01 mov %g1, %g3
i >>= 1, vol->sec_log2++);
40014c58: 85 38 a0 01 sra %g2, 1, %g2
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
40014c5c: 80 88 a0 01 btst 1, %g2
40014c60: 02 bf ff fd be 40014c54 <fat_init_volume_info+0x1b8>
40014c64: 82 00 e0 01 add %g3, 1, %g1
40014c68: c6 2c a0 02 stb %g3, [ %l2 + 2 ]
/* Assign the sector size as bdbuf block size for now.
* If possible the bdbuf block size will get increased to the cluster
* size at the end of this method for better performance */
sc = rtems_bdbuf_set_block_size (vol->dd, vol->bps, true);
40014c6c: 94 10 20 01 mov 1, %o2
40014c70: d0 04 a0 6c ld [ %l2 + 0x6c ], %o0
40014c74: 7f ff f4 78 call 40011e54 <rtems_bdbuf_set_block_size>
40014c78: 93 32 60 10 srl %o1, 0x10, %o1
if (sc != RTEMS_SUCCESSFUL)
40014c7c: 80 a2 20 00 cmp %o0, 0
40014c80: 12 80 00 22 bne 40014d08 <fat_init_volume_info+0x26c>
<== NEVER TAKEN
40014c84: 84 10 20 01 mov 1, %g2
{
close(vol->fd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
vol->bytes_per_block = vol->bps;
40014c88: c8 14 80 00 lduh [ %l2 ], %g4
vol->bytes_per_block_log2 = vol->sec_log2;
40014c8c: de 0c a0 02 ldub [ %l2 + 2 ], %o7
vol->bytes_per_block = vol->bps;
40014c90: 89 29 20 10 sll %g4, 0x10, %g4
40014c94: bb 31 20 10 srl %g4, 0x10, %i5
vol->bytes_per_block_log2 = vol->sec_log2;
40014c98: de 2c a0 14 stb %o7, [ %l2 + 0x14 ]
vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec);
/*
* "sectors per cluster" of zero is invalid
* (and would hang the following loop)
*/
if (vol->spc == 0)
40014c9c: 9a 8c 20 ff andcc %l0, 0xff, %o5
vol->bytes_per_block = vol->bps;
40014ca0: fa 24 a0 10 st %i5, [ %l2 + 0x10 ]
vol->sectors_per_block = 1;
40014ca4: c4 2c a0 0d stb %g2, [ %l2 + 0xd ]
if (vol->spc == 0)
40014ca8: 02 80 00 18 be 40014d08 <fat_init_volume_info+0x26c>
<== NEVER TAKEN
40014cac: e0 2c a0 04 stb %l0, [ %l2 + 4 ]
{
close(vol->fd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
40014cb0: c0 2c a0 05 clrb [ %l2 + 5 ]
40014cb4: 80 8c 20 01 btst 1, %l0
40014cb8: 12 80 00 1c bne 40014d28 <fat_init_volume_info+0x28c>
40014cbc: 84 10 00 0d mov %o5, %g2
40014cc0: 10 80 00 03 b 40014ccc <fat_init_volume_info+0x230>
40014cc4: 86 10 20 01 mov 1, %g3
40014cc8: 86 10 00 01 mov %g1, %g3
i >>= 1, vol->spc_log2++);
40014ccc: 85 38 a0 01 sra %g2, 1, %g2
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
40014cd0: 80 88 a0 01 btst 1, %g2
40014cd4: 02 bf ff fd be 40014cc8 <fat_init_volume_info+0x22c>
40014cd8: 82 00 e0 01 add %g3, 1, %g1
40014cdc: 84 08 e0 ff and %g3, 0xff, %g2
40014ce0: c6 2c a0 05 stb %g3, [ %l2 + 5 ]
40014ce4: 86 10 20 01 mov 1, %g3
40014ce8: 10 80 00 12 b 40014d30 <fat_init_volume_info+0x294>
40014cec: 87 28 c0 02 sll %g3, %g2, %g3
if (fs_info->c.state == FAT_CACHE_EMPTY)
40014cf0: c4 0c a0 91 ldub [ %l2 + 0x91 ], %g2
<== NOT EXECUTED
40014cf4: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40014cf8: 02 80 00 04 be 40014d08 <fat_init_volume_info+0x26c>
<== NOT EXECUTED
40014cfc: 01 00 00 00 nop
<== NOT EXECUTED
40014d00: 7f ff fd b7 call 400143dc <fat_buf_release.part.5>
<== NOT EXECUTED
40014d04: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
FAT_FSINFO_LEAD_SIGNATURE_VALUE)
{
_fat_block_release(fs_info);
close(vol->fd);
40014d08: 7f ff c1 52 call 40005250 <close>
<== NOT EXECUTED
40014d0c: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
40014d10: 40 00 19 0b call 4001b13c <__errno>
<== NOT EXECUTED
40014d14: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
40014d18: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40014d1c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40014d20: 81 c7 e0 08 ret
<== NOT EXECUTED
40014d24: 81 e8 00 00 restore
<== NOT EXECUTED
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
40014d28: 84 10 20 00 clr %g2
40014d2c: 86 10 20 01 mov 1, %g3
if (vol->spc != UINT32_C(1) << vol->spc_log2)
40014d30: 80 a3 40 03 cmp %o5, %g3
40014d34: 12 bf ff f5 bne 40014d08 <fat_init_volume_info+0x26c>
<== NEVER TAKEN
40014d38: bb 2f 40 02 sll %i5, %g2, %i5
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
40014d3c: c0 2c a0 0c clrb [ %l2 + 0xc ]
40014d40: 84 10 00 1d mov %i5, %g2
40014d44: 80 8f 60 01 btst 1, %i5
40014d48: 12 80 00 0a bne 40014d70 <fat_init_volume_info+0x2d4>
<== NEVER TAKEN
40014d4c: fa 24 a0 08 st %i5, [ %l2 + 8 ]
40014d50: 10 80 00 03 b 40014d5c <fat_init_volume_info+0x2c0>
40014d54: 86 10 20 01 mov 1, %g3
40014d58: 86 10 00 01 mov %g1, %g3
i >>= 1, vol->bpc_log2++);
40014d5c: 85 38 a0 01 sra %g2, 1, %g2
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
40014d60: 80 88 a0 01 btst 1, %g2
40014d64: 02 bf ff fd be 40014d58 <fat_init_volume_info+0x2bc>
40014d68: 82 00 e0 01 add %g3, 1, %g1
40014d6c: c6 2c a0 0c stb %g3, [ %l2 + 0xc ]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014d70: 89 31 20 10 srl %g4, 0x10, %g4
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
40014d74: b5 2e a0 08 sll %i2, 8, %i2
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014d78: 86 01 3f ff add %g4, -1, %g3
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
40014d7c: b3 2e 60 08 sll %i1, 8, %i1
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
40014d80: ae 16 80 17 or %i2, %l7, %l7
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
40014d84: ac 16 40 16 or %i1, %l6, %l6
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
40014d88: e2 2c a0 15 stb %l1, [ %l2 + 0x15 ]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014d8c: 85 2d a0 05 sll %l6, 5, %g2
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
40014d90: ee 34 a0 20 sth %l7, [ %l2 + 0x20 ]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014d94: 84 00 80 03 add %g2, %g3, %g2
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
40014d98: ec 34 a0 2c sth %l6, [ %l2 + 0x2c ]
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014d9c: 83 38 a0 1f sra %g2, 0x1f, %g1
40014da0: 81 80 60 00 wr %g1, %y
40014da4: 01 00 00 00 nop
40014da8: 01 00 00 00 nop
40014dac: 01 00 00 00 nop
40014db0: 88 78 80 04 sdiv %g2, %g4, %g4
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
40014db4: 9f 29 00 0f sll %g4, %o7, %o7
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
40014db8: c8 24 a0 30 st %g4, [ %l2 + 0x30 ]
if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0)
40014dbc: b7 2e e0 08 sll %i3, 8, %i3
40014dc0: aa 16 c0 15 or %i3, %l5, %l5
40014dc4: ab 2d 60 10 sll %l5, 0x10, %l5
40014dc8: 80 a5 60 00 cmp %l5, 0
40014dcc: 02 80 00 98 be 4001502c <fat_init_volume_info+0x590>
40014dd0: de 24 a0 34 st %o7, [ %l2 + 0x34 ]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
40014dd4: ab 35 60 10 srl %l5, 0x10, %l5
40014dd8: ea 24 a0 24 st %l5, [ %l2 + 0x24 ]
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
40014ddc: a2 5d 40 11 smul %l5, %l1, %l1
40014de0: ae 04 40 17 add %l1, %l7, %l7
40014de4: 88 01 00 17 add %g4, %l7, %g4
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
40014de8: ee 24 a0 28 st %l7, [ %l2 + 0x28 ]
if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0)
40014dec: b9 2f 20 08 sll %i4, 8, %i4
40014df0: a8 17 00 14 or %i4, %l4, %l4
40014df4: a9 2d 20 10 sll %l4, 0x10, %l4
40014df8: 80 a5 20 00 cmp %l4, 0
40014dfc: 02 80 00 80 be 40014ffc <fat_init_volume_info+0x560>
40014e00: c8 24 a0 3c st %g4, [ %l2 + 0x3c ]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
40014e04: a9 35 20 10 srl %l4, 0x10, %l4
40014e08: e8 24 a0 38 st %l4, [ %l2 + 0x38 ]
data_secs = vol->tot_secs - vol->data_fsec;
40014e0c: a8 25 00 04 sub %l4, %g4, %l4
vol->data_cls = data_secs / vol->spc;
40014e10: 81 80 20 00 wr %g0, %y
40014e14: 01 00 00 00 nop
40014e18: 01 00 00 00 nop
40014e1c: 01 00 00 00 nop
40014e20: 84 75 00 0d udiv %l4, %o5, %g2
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
40014e24: 80 a0 af f4 cmp %g2, 0xff4
40014e28: 18 80 00 69 bgu 40014fcc <fat_init_volume_info+0x530>
40014e2c: c4 24 a0 40 st %g2, [ %l2 + 0x40 ]
vol->type = FAT_FAT12;
40014e30: 84 10 20 01 mov 1, %g2
40014e34: c4 2c a0 16 stb %g2, [ %l2 + 0x16 ]
vol->mask = FAT_FAT12_MASK;
40014e38: 84 10 2f ff mov 0xfff, %g2
40014e3c: c4 24 a0 18 st %g2, [ %l2 + 0x18 ]
vol->eoc_val = FAT_FAT12_EOC;
40014e40: 84 10 2f f8 mov 0xff8, %g2
40014e44: c4 24 a0 1c st %g2, [ %l2 + 0x1c ]
else
{
vol->rdir_cl = 0;
vol->mirror = 0;
vol->afat = 0;
vol->free_cls = FAT_UNDEFINED_VALUE;
40014e48: 84 10 3f ff mov -1, %g2
vol->rdir_cl = 0;
40014e4c: c0 24 a0 44 clr [ %l2 + 0x44 ]
vol->mirror = 0;
40014e50: c0 2c a0 5c clrb [ %l2 + 0x5c ]
vol->afat = 0;
40014e54: c0 2c a0 64 clrb [ %l2 + 0x64 ]
vol->free_cls = FAT_UNDEFINED_VALUE;
40014e58: c4 24 a0 4c st %g2, [ %l2 + 0x4c ]
vol->next_cl = FAT_UNDEFINED_VALUE;
40014e5c: c4 24 a0 54 st %g2, [ %l2 + 0x54 ]
if (fs_info->c.state == FAT_CACHE_EMPTY)
40014e60: c4 0c a0 91 ldub [ %l2 + 0x91 ], %g2
40014e64: 80 a0 a0 00 cmp %g2, 0
40014e68: 12 80 00 7d bne 4001505c <fat_init_volume_info+0x5c0>
40014e6c: 01 00 00 00 nop
}
_fat_block_release(fs_info);
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
40014e70: c4 0c a0 64 ldub [ %l2 + 0x64 ], %g2
40014e74: c8 04 a0 24 ld [ %l2 + 0x24 ], %g4
40014e78: c6 14 a0 20 lduh [ %l2 + 0x20 ], %g3
40014e7c: 84 58 80 04 smul %g2, %g4, %g2
40014e80: 84 00 80 03 add %g2, %g3, %g2
40014e84: c4 24 a0 60 st %g2, [ %l2 + 0x60 ]
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
40014e88: 92 10 20 0c mov 0xc, %o1
40014e8c: 7f ff c0 cc call 400051bc <calloc>
40014e90: 90 10 20 02 mov 2, %o0
40014e94: d0 24 a0 74 st %o0, [ %l2 + 0x74 ]
if ( fs_info->vhash == NULL )
40014e98: 80 a2 20 00 cmp %o0, 0
40014e9c: 02 80 01 03 be 400152a8 <fat_init_volume_info+0x80c>
<== NEVER TAKEN
40014ea0: 84 10 00 08 mov %o0, %g2
head->previous = NULL;
40014ea4: c0 22 20 04 clr [ %o0 + 4 ]
return &the_chain->Tail.Node;
40014ea8: ba 02 20 04 add %o0, 4, %i5
head->next = tail;
40014eac: fa 22 00 00 st %i5, [ %o0 ]
return &the_chain->Tail.Node;
40014eb0: 86 02 20 0c add %o0, 0xc, %g3
40014eb4: 88 02 20 10 add %o0, 0x10, %g4
tail->previous = head;
40014eb8: c4 20 a0 08 st %g2, [ %g2 + 8 ]
}
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));
40014ebc: 92 10 20 0c mov 0xc, %o1
head->next = tail;
40014ec0: c8 20 a0 0c st %g4, [ %g2 + 0xc ]
40014ec4: 90 10 20 02 mov 2, %o0
head->previous = NULL;
40014ec8: c0 20 a0 10 clr [ %g2 + 0x10 ]
40014ecc: 7f ff c0 bc call 400051bc <calloc>
40014ed0: c6 20 a0 14 st %g3, [ %g2 + 0x14 ]
40014ed4: d0 24 a0 78 st %o0, [ %l2 + 0x78 ]
if ( fs_info->rhash == NULL )
40014ed8: 80 a2 20 00 cmp %o0, 0
40014edc: 02 80 00 e7 be 40015278 <fat_init_volume_info+0x7dc>
<== NEVER TAKEN
40014ee0: 84 10 00 08 mov %o0, %g2
}
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;
40014ee4: c8 0c a0 03 ldub [ %l2 + 3 ], %g4
40014ee8: c6 04 a0 38 ld [ %l2 + 0x38 ], %g3
40014eec: c0 22 20 04 clr [ %o0 + 4 ]
40014ef0: 87 28 c0 04 sll %g3, %g4, %g3
return &the_chain->Tail.Node;
40014ef4: ba 02 20 04 add %o0, 4, %i5
40014ef8: 87 28 e0 04 sll %g3, 4, %g3
head->next = tail;
40014efc: fa 22 00 00 st %i5, [ %o0 ]
fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE;
40014f00: 88 10 21 00 mov 0x100, %g4
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
40014f04: c6 24 a0 88 st %g3, [ %l2 + 0x88 ]
return &the_chain->Tail.Node;
40014f08: 86 02 20 0c add %o0, 0xc, %g3
fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE;
40014f0c: c8 24 a0 84 st %g4, [ %l2 + 0x84 ]
40014f10: 88 02 20 10 add %o0, 0x10, %g4
fs_info->index = 0;
40014f14: c0 24 a0 80 clr [ %l2 + 0x80 ]
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
40014f18: 92 10 20 01 mov 1, %o1
tail->previous = head;
40014f1c: c4 20 a0 08 st %g2, [ %g2 + 8 ]
40014f20: 90 10 21 00 mov 0x100, %o0
head->next = tail;
40014f24: c8 20 a0 0c st %g4, [ %g2 + 0xc ]
head->previous = NULL;
40014f28: c0 20 a0 10 clr [ %g2 + 0x10 ]
40014f2c: 7f ff c0 a4 call 400051bc <calloc>
40014f30: c6 20 a0 14 st %g3, [ %g2 + 0x14 ]
if ( fs_info->uino == NULL )
40014f34: 80 a2 20 00 cmp %o0, 0
40014f38: 02 80 00 b9 be 4001521c <fat_init_volume_info+0x780>
<== NEVER TAKEN
40014f3c: d0 24 a0 7c st %o0, [ %l2 + 0x7c ]
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));
40014f40: d0 14 80 00 lduh [ %l2 ], %o0
40014f44: 7f ff c0 9e call 400051bc <calloc>
40014f48: 92 10 20 01 mov 1, %o1
if (fs_info->sec_buf == NULL)
40014f4c: 80 a2 20 00 cmp %o0, 0
40014f50: 02 80 00 ce be 40015288 <fat_init_volume_info+0x7ec>
<== NEVER TAKEN
40014f54: d0 24 a0 98 st %o0, [ %l2 + 0x98 ]
return (sec_num & (vol->spc - 1)) == 0;
40014f58: c4 0c a0 04 ldub [ %l2 + 4 ], %g2
40014f5c: c6 04 a0 3c ld [ %l2 + 0x3c ], %g3
40014f60: 84 00 bf ff add %g2, -1, %g2
/*
* 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)
40014f64: 80 88 80 03 btst %g2, %g3
40014f68: 12 80 00 d6 bne 400152c0 <fat_init_volume_info+0x824>
<== NEVER TAKEN
40014f6c: 01 00 00 00 nop
&& (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc)))
40014f70: c6 0c a0 16 ldub [ %l2 + 0x16 ], %g3
40014f74: 80 a0 e0 04 cmp %g3, 4
40014f78: 22 80 00 07 be,a 40014f94 <fat_init_volume_info+0x4f8>
40014f7c: d2 04 a0 08 ld [ %l2 + 8 ], %o1
return (sec_num & (vol->spc - 1)) == 0;
40014f80: c6 04 a0 28 ld [ %l2 + 0x28 ], %g3
&& (FAT_FAT32 == vol->type || is_cluster_aligned(vol, vol->rdir_loc)))
40014f84: 80 88 80 03 btst %g2, %g3
40014f88: 12 80 00 ce bne 400152c0 <fat_init_volume_info+0x824>
<== NEVER TAKEN
40014f8c: 01 00 00 00 nop
{
sc = rtems_bdbuf_set_block_size (vol->dd, vol->bpc, true);
40014f90: d2 04 a0 08 ld [ %l2 + 8 ], %o1
40014f94: d0 04 a0 6c ld [ %l2 + 0x6c ], %o0
40014f98: 7f ff f3 af call 40011e54 <rtems_bdbuf_set_block_size>
40014f9c: 94 10 20 01 mov 1, %o2
if (sc == RTEMS_SUCCESSFUL)
40014fa0: 80 a2 20 00 cmp %o0, 0
40014fa4: 12 80 00 c7 bne 400152c0 <fat_init_volume_info+0x824>
40014fa8: 01 00 00 00 nop
{
vol->bytes_per_block = vol->bpc;
40014fac: c8 04 a0 08 ld [ %l2 + 8 ], %g4
vol->bytes_per_block_log2 = vol->bpc_log2;
40014fb0: c6 0c a0 0c ldub [ %l2 + 0xc ], %g3
vol->sectors_per_block = vol->spc;
40014fb4: c4 0c a0 04 ldub [ %l2 + 4 ], %g2
vol->bytes_per_block = vol->bpc;
40014fb8: c8 24 a0 10 st %g4, [ %l2 + 0x10 ]
vol->bytes_per_block_log2 = vol->bpc_log2;
40014fbc: c6 2c a0 14 stb %g3, [ %l2 + 0x14 ]
vol->sectors_per_block = vol->spc;
40014fc0: c4 2c a0 0d stb %g2, [ %l2 + 0xd ]
40014fc4: 81 c7 e0 08 ret
40014fc8: 81 e8 00 00 restore
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
40014fcc: 07 00 00 3f sethi %hi(0xfc00), %g3
40014fd0: 88 10 e3 f4 or %g3, 0x3f4, %g4 ! fff4 <_Configuration_Interrupt_stack_size+0xeff4>
40014fd4: 80 a0 80 04 cmp %g2, %g4
40014fd8: 38 80 00 25 bgu,a 4001506c <fat_init_volume_info+0x5d0>
40014fdc: 07 03 ff ff sethi %hi(0xffffc00), %g3
vol->mask = FAT_FAT16_MASK;
40014fe0: 84 10 e3 ff or %g3, 0x3ff, %g2 ! fffffff <RAM_SIZE+0xfbfffff>
vol->type = FAT_FAT16;
40014fe4: 88 10 20 02 mov 2, %g4
vol->eoc_val = FAT_FAT16_EOC;
40014fe8: 86 10 e3 f8 or %g3, 0x3f8, %g3
vol->type = FAT_FAT16;
40014fec: c8 2c a0 16 stb %g4, [ %l2 + 0x16 ]
vol->mask = FAT_FAT16_MASK;
40014ff0: c4 24 a0 18 st %g2, [ %l2 + 0x18 ]
40014ff4: 10 bf ff 95 b 40014e48 <fat_init_volume_info+0x3ac>
40014ff8: c6 24 a0 1c st %g3, [ %l2 + 0x1c ]
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
40014ffc: c2 0f bf 83 ldub [ %fp + -125 ], %g1
40015000: bb 28 60 08 sll %g1, 8, %i5
40015004: c2 0f bf 7f ldub [ %fp + -129 ], %g1
40015008: 85 28 60 10 sll %g1, 0x10, %g2
4001500c: c2 0f bf 7b ldub [ %fp + -133 ], %g1
40015010: a9 28 60 18 sll %g1, 0x18, %l4
40015014: c2 0f bf 87 ldub [ %fp + -121 ], %g1
40015018: ba 17 40 02 or %i5, %g2, %i5
4001501c: ba 17 40 01 or %i5, %g1, %i5
40015020: a8 17 40 14 or %i5, %l4, %l4
40015024: 10 bf ff 7a b 40014e0c <fat_init_volume_info+0x370>
40015028: e8 24 a0 38 st %l4, [ %l2 + 0x38 ]
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
4001502c: c2 0f bf 73 ldub [ %fp + -141 ], %g1
40015030: ab 28 60 08 sll %g1, 8, %l5
40015034: c2 0f bf 6f ldub [ %fp + -145 ], %g1
40015038: 87 28 60 10 sll %g1, 0x10, %g3
4001503c: c2 0f bf 6b ldub [ %fp + -149 ], %g1
40015040: 85 28 60 18 sll %g1, 0x18, %g2
40015044: c2 0f bf 77 ldub [ %fp + -137 ], %g1
40015048: aa 15 40 03 or %l5, %g3, %l5
4001504c: aa 15 40 01 or %l5, %g1, %l5
40015050: aa 15 40 02 or %l5, %g2, %l5
40015054: 10 bf ff 62 b 40014ddc <fat_init_volume_info+0x340>
40015058: ea 24 a0 24 st %l5, [ %l2 + 0x24 ]
4001505c: 7f ff fc e0 call 400143dc <fat_buf_release.part.5>
40015060: 90 10 00 12 mov %l2, %o0
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
40015064: 10 bf ff 84 b 40014e74 <fat_init_volume_info+0x3d8>
40015068: c4 0c a0 64 ldub [ %l2 + 0x64 ], %g2
else if ( vol->data_cls < FAT_FAT32_MASK - 1 )
4001506c: 88 10 e3 fd or %g3, 0x3fd, %g4
40015070: 80 a0 80 04 cmp %g2, %g4
40015074: 18 bf ff 25 bgu 40014d08 <fat_init_volume_info+0x26c>
<== NEVER TAKEN
40015078: c2 0f bf 57 ldub [ %fp + -169 ], %g1
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
4001507c: 85 28 60 08 sll %g1, 8, %g2
40015080: c2 0f bf 63 ldub [ %fp + -157 ], %g1
40015084: 89 28 60 10 sll %g1, 0x10, %g4
40015088: c2 0f bf 5f ldub [ %fp + -161 ], %g1
vol->mask = FAT_FAT32_MASK;
4001508c: b8 10 e3 ff or %g3, 0x3ff, %i4
vol->eoc_val = FAT_FAT32_EOC;
40015090: ba 10 e3 f8 or %g3, 0x3f8, %i5
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
40015094: f6 0f bf 5b ldub [ %fp + -165 ], %i3
40015098: 87 28 60 18 sll %g1, 0x18, %g3
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
4001509c: c2 0f bf 67 ldub [ %fp + -153 ], %g1
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
400150a0: 84 10 80 04 or %g2, %g4, %g2
vol->mask = FAT_FAT32_MASK;
400150a4: f8 24 a0 18 st %i4, [ %l2 + 0x18 ]
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
400150a8: 84 10 80 1b or %g2, %i3, %g2
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
400150ac: 88 08 7f 80 and %g1, -128, %g4
vol->type = FAT_FAT32;
400150b0: b6 10 20 04 mov 4, %i3
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
400150b4: 84 10 80 03 or %g2, %g3, %g2
vol->type = FAT_FAT32;
400150b8: f6 2c a0 16 stb %i3, [ %l2 + 0x16 ]
if (vol->mirror)
400150bc: 80 88 60 80 btst 0x80, %g1
vol->eoc_val = FAT_FAT32_EOC;
400150c0: fa 24 a0 1c st %i5, [ %l2 + 0x1c ]
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
400150c4: c4 24 a0 44 st %g2, [ %l2 + 0x44 ]
if (vol->mirror)
400150c8: 02 80 00 42 be 400151d0 <fat_init_volume_info+0x734>
<== ALWAYS TAKEN
400150cc: c8 2c a0 5c stb %g4, [ %l2 + 0x5c ]
vol->afat = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_FAT_NUM;
400150d0: c2 0f bf 67 ldub [ %fp + -153 ], %g1
<== NOT EXECUTED
400150d4: 82 08 60 0f and %g1, 0xf, %g1
<== NOT EXECUTED
400150d8: c2 2c a0 64 stb %g1, [ %l2 + 0x64 ]
<== NOT EXECUTED
vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec);
400150dc: c2 0f bf 4f ldub [ %fp + -177 ], %g1
400150e0: 93 28 60 08 sll %g1, 8, %o1
400150e4: c2 0f bf 53 ldub [ %fp + -173 ], %g1
400150e8: 92 12 40 01 or %o1, %g1, %o1
if( vol->info_sec == 0 )
400150ec: 80 a2 60 00 cmp %o1, 0
400150f0: 02 bf ff 06 be 40014d08 <fat_init_volume_info+0x26c>
<== NEVER TAKEN
400150f4: d2 34 a0 48 sth %o1, [ %l2 + 0x48 ]
ret = _fat_block_read(fs_info, vol->info_sec , 0,
400150f8: 96 10 20 04 mov 4, %o3
400150fc: 98 07 bf 90 add %fp, -112, %o4
40015100: 94 10 20 00 clr %o2
40015104: 7f ff fd 65 call 40014698 <_fat_block_read>
40015108: 90 10 00 12 mov %l2, %o0
if ( ret < 0 )
4001510c: 80 a2 20 00 cmp %o0, 0
40015110: 06 80 00 56 bl 40015268 <fat_init_volume_info+0x7cc>
<== NEVER TAKEN
40015114: c6 0f bf 93 ldub [ %fp + -109 ], %g3
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
40015118: 87 28 e0 18 sll %g3, 0x18, %g3
4001511c: c4 0f bf 91 ldub [ %fp + -111 ], %g2
40015120: c8 0f bf 92 ldub [ %fp + -110 ], %g4
40015124: fa 0f bf 90 ldub [ %fp + -112 ], %i5
40015128: 85 28 a0 08 sll %g2, 8, %g2
4001512c: 89 29 20 10 sll %g4, 0x10, %g4
40015130: 84 10 80 04 or %g2, %g4, %g2
40015134: 84 10 80 1d or %g2, %i5, %g2
40015138: 84 10 80 03 or %g2, %g3, %g2
4001513c: 07 10 58 54 sethi %hi(0x41615000), %g3
40015140: 86 10 e2 52 or %g3, 0x252, %g3 ! 41615252 <RAM_END+0x1215252>
40015144: 80 a0 80 03 cmp %g2, %g3
40015148: 12 bf fe ea bne 40014cf0 <fat_init_volume_info+0x254>
<== NEVER TAKEN
4001514c: 98 07 bf 90 add %fp, -112, %o4
ret = _fat_block_read(fs_info, vol->info_sec , FAT_FSI_INFO,
40015150: d2 14 a0 48 lduh [ %l2 + 0x48 ], %o1
40015154: 96 10 20 0c mov 0xc, %o3
40015158: 94 10 21 e4 mov 0x1e4, %o2
4001515c: 7f ff fd 4f call 40014698 <_fat_block_read>
40015160: 90 10 00 12 mov %l2, %o0
if ( ret < 0 )
40015164: 80 a2 20 00 cmp %o0, 0
40015168: 06 80 00 3a bl 40015250 <fat_init_volume_info+0x7b4>
<== NEVER TAKEN
4001516c: c6 0f bf 95 ldub [ %fp + -107 ], %g3
FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
40015170: f6 0f bf 96 ldub [ %fp + -106 ], %i3
40015174: f2 0f bf 94 ldub [ %fp + -108 ], %i1
40015178: f8 0f bf 97 ldub [ %fp + -105 ], %i4
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
4001517c: c4 0f bf 99 ldub [ %fp + -103 ], %g2
40015180: fa 0f bf 9a ldub [ %fp + -102 ], %i5
40015184: f4 0f bf 98 ldub [ %fp + -104 ], %i2
40015188: c8 0f bf 9b ldub [ %fp + -101 ], %g4
FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
4001518c: 87 28 e0 08 sll %g3, 8, %g3
40015190: b7 2e e0 10 sll %i3, 0x10, %i3
40015194: b9 2f 20 18 sll %i4, 0x18, %i4
40015198: 86 10 c0 1b or %g3, %i3, %g3
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
4001519c: 85 28 a0 08 sll %g2, 8, %g2
FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
400151a0: 86 10 c0 19 or %g3, %i1, %g3
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
400151a4: bb 2f 60 10 sll %i5, 0x10, %i5
FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
400151a8: 86 10 c0 1c or %g3, %i4, %g3
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
400151ac: 84 10 80 1d or %g2, %i5, %g2
400151b0: 89 29 20 18 sll %g4, 0x18, %g4
400151b4: 84 10 80 1a or %g2, %i2, %g2
vol->free_cls_in_fs_info =
400151b8: c6 24 a0 50 st %g3, [ %l2 + 0x50 ]
FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
400151bc: 84 10 80 04 or %g2, %g4, %g2
vol->free_cls = vol->free_cls_in_fs_info;
400151c0: c6 24 a0 4c st %g3, [ %l2 + 0x4c ]
vol->next_cl_in_fs_info =
400151c4: c4 24 a0 58 st %g2, [ %l2 + 0x58 ]
400151c8: 10 bf ff 26 b 40014e60 <fat_init_volume_info+0x3c4>
400151cc: c4 24 a0 54 st %g2, [ %l2 + 0x54 ]
vol->afat = 0;
400151d0: 10 bf ff c3 b 400150dc <fat_init_volume_info+0x640>
400151d4: c0 2c a0 64 clrb [ %l2 + 0x64 ]
close(vol->fd);
400151d8: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
400151dc: 7f ff c0 1d call 40005250 <close>
<== NOT EXECUTED
400151e0: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENXIO);
400151e4: 40 00 17 d6 call 4001b13c <__errno>
<== NOT EXECUTED
400151e8: b0 10 3f ff mov -1, %i0 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
400151ec: 82 10 20 06 mov 6, %g1
<== NOT EXECUTED
400151f0: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400151f4: 81 c7 e0 08 ret
<== NOT EXECUTED
400151f8: 81 e8 00 00 restore
<== NOT EXECUTED
close(vol->fd);
400151fc: 7f ff c0 15 call 40005250 <close>
<== NOT EXECUTED
40015200: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
40015204: 40 00 17 ce call 4001b13c <__errno>
<== NOT EXECUTED
40015208: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4001520c: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
40015210: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40015214: 81 c7 e0 08 ret
<== NOT EXECUTED
40015218: 81 e8 00 00 restore
<== NOT EXECUTED
close(vol->fd);
4001521c: 7f ff c0 0d call 40005250 <close>
<== NOT EXECUTED
40015220: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
free(fs_info->vhash);
40015224: 7f ff c0 6b call 400053d0 <free>
<== NOT EXECUTED
40015228: d0 04 a0 74 ld [ %l2 + 0x74 ], %o0
<== NOT EXECUTED
free(fs_info->rhash);
4001522c: d0 04 a0 78 ld [ %l2 + 0x78 ], %o0
<== NOT EXECUTED
free(fs_info->uino);
40015230: 7f ff c0 68 call 400053d0 <free>
<== NOT EXECUTED
40015234: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
40015238: 40 00 17 c1 call 4001b13c <__errno>
<== NOT EXECUTED
4001523c: 01 00 00 00 nop
<== NOT EXECUTED
40015240: 82 10 20 0c mov 0xc, %g1 ! c <_TLS_Alignment+0xb>
<== NOT EXECUTED
40015244: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40015248: 81 c7 e0 08 ret
<== NOT EXECUTED
4001524c: 81 e8 00 00 restore
<== NOT EXECUTED
if (fs_info->c.state == FAT_CACHE_EMPTY)
40015250: c4 0c a0 91 ldub [ %l2 + 0x91 ], %g2
<== NOT EXECUTED
40015254: 80 a0 a0 00 cmp %g2, 0
<== NOT EXECUTED
40015258: 02 80 00 04 be 40015268 <fat_init_volume_info+0x7cc>
<== NOT EXECUTED
4001525c: 01 00 00 00 nop
<== NOT EXECUTED
40015260: 7f ff fc 5f call 400143dc <fat_buf_release.part.5>
<== NOT EXECUTED
40015264: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
close(vol->fd);
40015268: 7f ff bf fa call 40005250 <close>
<== NOT EXECUTED
4001526c: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
return -1;
40015270: 81 c7 e0 08 ret
<== NOT EXECUTED
40015274: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
close(vol->fd);
40015278: 7f ff bf f6 call 40005250 <close>
<== NOT EXECUTED
4001527c: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
free(fs_info->vhash);
40015280: 10 bf ff ec b 40015230 <fat_init_volume_info+0x794>
<== NOT EXECUTED
40015284: d0 04 a0 74 ld [ %l2 + 0x74 ], %o0
<== NOT EXECUTED
close(vol->fd);
40015288: 7f ff bf f2 call 40005250 <close>
<== NOT EXECUTED
4001528c: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
free(fs_info->vhash);
40015290: 7f ff c0 50 call 400053d0 <free>
<== NOT EXECUTED
40015294: d0 04 a0 74 ld [ %l2 + 0x74 ], %o0
<== NOT EXECUTED
free(fs_info->rhash);
40015298: 7f ff c0 4e call 400053d0 <free>
<== NOT EXECUTED
4001529c: d0 04 a0 78 ld [ %l2 + 0x78 ], %o0
<== NOT EXECUTED
free(fs_info->uino);
400152a0: 10 bf ff e4 b 40015230 <fat_init_volume_info+0x794>
<== NOT EXECUTED
400152a4: d0 04 a0 7c ld [ %l2 + 0x7c ], %o0
<== NOT EXECUTED
close(vol->fd);
400152a8: 7f ff bf ea call 40005250 <close>
<== NOT EXECUTED
400152ac: d0 04 a0 68 ld [ %l2 + 0x68 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
400152b0: 40 00 17 a3 call 4001b13c <__errno>
<== NOT EXECUTED
400152b4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400152b8: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
400152bc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400152c0: 81 c7 e0 08 ret
400152c4: 81 e8 00 00 restore
4001337c <fat_scan_fat_for_free_clusters>:
{
4001337c: 9d e3 bf 98 save %sp, -104, %sp
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
40013380: c2 06 20 40 ld [ %i0 + 0x40 ], %g1
if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls)
40013384: e0 06 20 54 ld [ %i0 + 0x54 ], %l0
40013388: 84 04 3f fe add %l0, -2, %g2
{
4001338c: a4 10 00 18 mov %i0, %l2
if (fs_info->vol.next_cl - 2 < fs_info->vol.data_cls)
40013390: 80 a0 40 02 cmp %g1, %g2
40013394: 18 80 00 03 bgu 400133a0 <fat_scan_fat_for_free_clusters+0x24>
40013398: a6 00 60 02 add %g1, 2, %l3
uint32_t cl4find = 2;
4001339c: a0 10 20 02 mov 2, %l0
*cls_added = 0;
400133a0: c0 26 c0 00 clr [ %i3 ]
while (*cls_added != count && i < data_cls_val)
400133a4: 80 a4 e0 02 cmp %l3, 2
400133a8: 18 80 00 03 bgu 400133b4 <fat_scan_fat_for_free_clusters+0x38>
<== ALWAYS TAKEN
400133ac: 82 10 20 01 mov 1, %g1
400133b0: 82 10 20 00 clr %g1
<== NOT EXECUTED
400133b4: 80 88 60 ff btst 0xff, %g1
400133b8: 02 80 00 50 be 400134f8 <fat_scan_fat_for_free_clusters+0x17c>
<== NEVER TAKEN
400133bc: 80 a6 a0 00 cmp %i2, 0
400133c0: 02 80 00 4e be 400134f8 <fat_scan_fat_for_free_clusters+0x17c>
<== NEVER TAKEN
400133c4: a2 10 20 02 mov 2, %l1
uint32_t save_cln = FAT_UNDEFINED_VALUE;
400133c8: 10 80 00 19 b 4001342c <fat_scan_fat_for_free_clusters+0xb0>
400133cc: a8 10 3f ff mov -1, %l4
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
400133d0: 94 10 3f ff mov -1, %o2
400133d4: 92 10 00 10 mov %l0, %o1
400133d8: 7f ff ff 0f call 40013014 <fat_set_fat_cluster>
400133dc: 90 10 00 12 mov %l2, %o0
if ( rc != RC_OK )
400133e0: b0 92 20 00 orcc %o0, 0, %i0
400133e4: 12 80 00 38 bne 400134c4 <fat_scan_fat_for_free_clusters+0x148>
<== NEVER TAKEN
400133e8: 80 a7 60 00 cmp %i5, 0
if (zero_fill)
400133ec: 32 80 00 38 bne,a 400134cc <fat_scan_fat_for_free_clusters+0x150>
400133f0: d6 04 a0 08 ld [ %l2 + 8 ], %o3
(*cls_added)++;
400133f4: c2 06 c0 00 ld [ %i3 ], %g1
400133f8: 82 00 60 01 inc %g1
400133fc: c2 26 c0 00 st %g1, [ %i3 ]
40013400: a8 10 00 10 mov %l0, %l4
cl4find++;
40013404: a0 04 20 01 inc %l0
if (cl4find >= data_cls_val)
40013408: 80 a4 c0 10 cmp %l3, %l0
4001340c: 18 80 00 03 bgu 40013418 <fat_scan_fat_for_free_clusters+0x9c>
40013410: a2 04 60 01 inc %l1
cl4find = 2;
40013414: a0 10 20 02 mov 2, %l0
while (*cls_added != count && i < data_cls_val)
40013418: 80 a6 80 01 cmp %i2, %g1
4001341c: 02 80 00 38 be 400134fc <fat_scan_fat_for_free_clusters+0x180>
40013420: 80 a4 40 13 cmp %l1, %l3
40013424: 3a 80 00 37 bcc,a 40013500 <fat_scan_fat_for_free_clusters+0x184>
40013428: e8 27 00 00 st %l4, [ %i4 ]
uint32_t next_cln = 0;
4001342c: c0 27 bf fc clr [ %fp + -4 ]
rc = fat_get_fat_cluster(fs_info, cl4find, &next_cln);
40013430: 94 07 bf fc add %fp, -4, %o2
40013434: 92 10 00 10 mov %l0, %o1
40013438: 7f ff fe 84 call 40012e48 <fat_get_fat_cluster>
4001343c: 90 10 00 12 mov %l2, %o0
if (*cls_added != 0)
40013440: c2 06 c0 00 ld [ %i3 ], %g1
if ( rc != RC_OK )
40013444: 80 a2 20 00 cmp %o0, 0
40013448: 12 80 00 3a bne 40013530 <fat_scan_fat_for_free_clusters+0x1b4>
<== NEVER TAKEN
4001344c: b0 10 00 08 mov %o0, %i0
if (next_cln == FAT_GENFAT_FREE)
40013450: c4 07 bf fc ld [ %fp + -4 ], %g2
40013454: 80 a0 a0 00 cmp %g2, 0
40013458: 32 bf ff ec bne,a 40013408 <fat_scan_fat_for_free_clusters+0x8c>
4001345c: a0 04 20 01 inc %l0
if (*cls_added == 0)
40013460: 80 a0 60 00 cmp %g1, 0
40013464: 22 bf ff db be,a 400133d0 <fat_scan_fat_for_free_clusters+0x54>
40013468: e0 26 40 00 st %l0, [ %i1 ]
rc = fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_EOC);
4001346c: 94 10 3f ff mov -1, %o2
40013470: 92 10 00 10 mov %l0, %o1
40013474: 7f ff fe e8 call 40013014 <fat_set_fat_cluster>
40013478: 90 10 00 12 mov %l2, %o0
if ( rc != RC_OK )
4001347c: b0 92 20 00 orcc %o0, 0, %i0
40013480: 12 80 00 2f bne 4001353c <fat_scan_fat_for_free_clusters+0x1c0>
<== NEVER TAKEN
40013484: 94 10 00 10 mov %l0, %o2
rc = fat_set_fat_cluster(fs_info, save_cln, cl4find);
40013488: 92 10 00 14 mov %l4, %o1
4001348c: 7f ff fe e2 call 40013014 <fat_set_fat_cluster>
40013490: 90 10 00 12 mov %l2, %o0
if ( rc != RC_OK )
40013494: b0 92 20 00 orcc %o0, 0, %i0
40013498: 02 bf ff d5 be 400133ec <fat_scan_fat_for_free_clusters+0x70>
<== ALWAYS TAKEN
4001349c: 80 a7 60 00 cmp %i5, 0
fat_free_fat_clusters_chain(fs_info, (*chain));
400134a0: d2 06 40 00 ld [ %i1 ], %o1
<== NOT EXECUTED
400134a4: 7f ff ff 7e call 4001329c <fat_free_fat_clusters_chain>
<== NOT EXECUTED
400134a8: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
(void) fat_set_fat_cluster(fs_info, cl4find, FAT_GENFAT_FREE);
400134ac: 94 10 20 00 clr %o2
<== NOT EXECUTED
400134b0: 92 10 00 10 mov %l0, %o1
<== NOT EXECUTED
400134b4: 7f ff fe d8 call 40013014 <fat_set_fat_cluster>
<== NOT EXECUTED
400134b8: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
fat_buf_release(fs_info);
400134bc: 40 00 04 6e call 40014674 <fat_buf_release>
<== NOT EXECUTED
400134c0: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
return rc;
400134c4: 81 c7 e0 08 ret
<== NOT EXECUTED
400134c8: 81 e8 00 00 restore
<== NOT EXECUTED
ssize_t bytes_written =
400134cc: 98 10 20 00 clr %o4
400134d0: 94 10 20 00 clr %o2
400134d4: 92 10 00 10 mov %l0, %o1
400134d8: 40 00 04 bb call 400147c4 <fat_cluster_set>
400134dc: 90 10 00 12 mov %l2, %o0
if (fs_info->vol.bpc != bytes_written)
400134e0: c2 04 a0 08 ld [ %l2 + 8 ], %g1
400134e4: 80 a0 40 08 cmp %g1, %o0
400134e8: 22 bf ff c4 be,a 400133f8 <fat_scan_fat_for_free_clusters+0x7c>
<== ALWAYS TAKEN
400134ec: c2 06 c0 00 ld [ %i3 ], %g1
rc = -1;
400134f0: 10 bf ff ec b 400134a0 <fat_scan_fat_for_free_clusters+0x124>
<== NOT EXECUTED
400134f4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
uint32_t save_cln = FAT_UNDEFINED_VALUE;
400134f8: a8 10 3f ff mov -1, %l4
<== NOT EXECUTED
*last_cl = save_cln;
400134fc: e8 27 00 00 st %l4, [ %i4 ]
fs_info->vol.next_cl = save_cln;
40013500: e8 24 a0 54 st %l4, [ %l2 + 0x54 ]
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
40013504: c2 04 a0 4c ld [ %l2 + 0x4c ], %g1
40013508: 80 a0 7f ff cmp %g1, -1
4001350c: 02 80 00 05 be 40013520 <fat_scan_fat_for_free_clusters+0x1a4>
<== ALWAYS TAKEN
40013510: 90 10 00 12 mov %l2, %o0
fs_info->vol.free_cls -= (*cls_added);
40013514: c4 06 c0 00 ld [ %i3 ], %g2
<== NOT EXECUTED
40013518: 82 20 40 02 sub %g1, %g2, %g1
<== NOT EXECUTED
4001351c: c2 24 a0 4c st %g1, [ %l2 + 0x4c ]
<== NOT EXECUTED
fat_buf_release(fs_info);
40013520: 40 00 04 55 call 40014674 <fat_buf_release>
40013524: b0 10 20 00 clr %i0
}
40013528: 81 c7 e0 08 ret
4001352c: 81 e8 00 00 restore
if (*cls_added != 0)
40013530: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40013534: 02 80 00 05 be 40013548 <fat_scan_fat_for_free_clusters+0x1cc>
<== NOT EXECUTED
40013538: 01 00 00 00 nop
<== NOT EXECUTED
fat_free_fat_clusters_chain(fs_info, (*chain));
4001353c: d2 06 40 00 ld [ %i1 ], %o1
<== NOT EXECUTED
40013540: 7f ff ff 57 call 4001329c <fat_free_fat_clusters_chain>
<== NOT EXECUTED
40013544: 90 10 00 12 mov %l2, %o0
<== NOT EXECUTED
return rc;
40013548: 81 c7 e0 08 ret
<== NOT EXECUTED
4001354c: 81 e8 00 00 restore
<== NOT EXECUTED
40014718 <fat_sector_write>:
fat_fs_info_t *fs_info,
uint32_t start,
uint32_t offset,
uint32_t count,
const void *buff)
{
40014718: 9d e3 bf 98 save %sp, -104, %sp
uint32_t sec_num = start;
uint32_t ofs = offset;
uint8_t *sec_buf;
uint32_t c = 0;
while(count > 0)
4001471c: 80 a6 e0 00 cmp %i3, 0
40014720: 02 80 00 27 be 400147bc <fat_sector_write+0xa4>
<== NEVER TAKEN
40014724: a0 10 20 00 clr %l0
fs_info->c.modified = true;
40014728: 10 80 00 13 b 40014774 <fat_sector_write+0x5c>
4001472c: a2 10 20 01 mov 1, %l1
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);
40014730: 94 10 20 01 mov 1, %o2
40014734: 96 07 bf fc add %fp, -4, %o3
40014738: 7f ff ff 9f call 400145b4 <fat_buf_access>
4001473c: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
return -1;
memcpy((sec_buf + ofs), (buff + cmpltd), c);
40014740: 92 07 00 10 add %i4, %l0, %o1
if (rc != RC_OK)
40014744: 80 a2 20 00 cmp %o0, 0
40014748: 12 80 00 1c bne 400147b8 <fat_sector_write+0xa0>
<== NEVER TAKEN
4001474c: 94 10 00 1d mov %i5, %o2
memcpy((sec_buf + ofs), (buff + cmpltd), c);
40014750: d0 07 bf fc ld [ %fp + -4 ], %o0
40014754: 40 00 1d 6b call 4001bd00 <memcpy>
40014758: 90 02 00 1a add %o0, %i2, %o0
4001475c: e2 2e 20 90 stb %l1, [ %i0 + 0x90 ]
fat_buf_mark_modified(fs_info);
count -= c;
cmpltd +=c;
40014760: a0 04 00 1d add %l0, %i5, %l0
sec_num++;
40014764: b2 06 60 01 inc %i1
while(count > 0)
40014768: b6 a6 c0 1d subcc %i3, %i5, %i3
4001476c: 02 80 00 14 be 400147bc <fat_sector_write+0xa4>
<== ALWAYS TAKEN
40014770: b4 10 20 00 clr %i2
c = MIN(count, (fs_info->vol.bps - ofs));
40014774: fa 16 00 00 lduh [ %i0 ], %i5
40014778: ba 27 40 1a sub %i5, %i2, %i5
4001477c: 80 a7 40 1b cmp %i5, %i3
40014780: 38 80 00 02 bgu,a 40014788 <fat_sector_write+0x70>
40014784: ba 10 00 1b mov %i3, %i5
if (c == fs_info->vol.bytes_per_block)
40014788: c2 06 20 10 ld [ %i0 + 0x10 ], %g1
4001478c: 80 a0 40 1d cmp %g1, %i5
40014790: 12 bf ff e8 bne 40014730 <fat_sector_write+0x18>
<== ALWAYS TAKEN
40014794: 92 10 00 19 mov %i1, %o1
rc = fat_buf_access(fs_info, sec_num, FAT_OP_TYPE_GET, &sec_buf);
40014798: 94 10 20 02 mov 2, %o2
<== NOT EXECUTED
4001479c: 96 07 bf fc add %fp, -4, %o3
<== NOT EXECUTED
400147a0: 7f ff ff 85 call 400145b4 <fat_buf_access>
<== NOT EXECUTED
400147a4: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
memcpy((sec_buf + ofs), (buff + cmpltd), c);
400147a8: 92 07 00 10 add %i4, %l0, %o1
<== NOT EXECUTED
if (rc != RC_OK)
400147ac: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
400147b0: 02 bf ff e8 be 40014750 <fat_sector_write+0x38>
<== NOT EXECUTED
400147b4: 94 10 00 1d mov %i5, %o2
<== NOT EXECUTED
return -1;
400147b8: a0 10 3f ff mov -1, %l0
<== NOT EXECUTED
ofs = 0;
}
return cmpltd;
}
400147bc: 81 c7 e0 08 ret
400147c0: 91 e8 00 10 restore %g0, %l0, %o0
40013014 <fat_set_fat_cluster>:
fat_set_fat_cluster(
fat_fs_info_t *fs_info,
uint32_t cln,
uint32_t in_val
)
{
40013014: 9d e3 bf 98 save %sp, -104, %sp
int rc = RC_OK;
uint32_t sec = 0;
uint32_t ofs = 0;
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
uint8_t *sec_buf = NULL;
40013018: c0 27 bf fc clr [ %fp + -4 ]
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
4001301c: 80 a6 60 01 cmp %i1, 1
40013020: 08 80 00 74 bleu 400131f0 <fat_set_fat_cluster+0x1dc>
<== NEVER TAKEN
40013024: ba 10 00 18 mov %i0, %i5
40013028: c2 06 20 40 ld [ %i0 + 0x40 ], %g1
4001302c: 82 00 60 01 inc %g1
40013030: 80 a0 40 19 cmp %g1, %i1
40013034: 0a 80 00 6f bcs 400131f0 <fat_set_fat_cluster+0x1dc>
<== NEVER TAKEN
40013038: 01 00 00 00 nop
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4001303c: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
40013040: 80 88 60 01 btst 1, %g1
40013044: 12 80 00 22 bne 400130cc <fat_set_fat_cluster+0xb8>
40013048: b7 36 60 01 srl %i1, 1, %i3
4001304c: 80 88 60 02 btst 2, %g1
40013050: 02 80 00 03 be 4001305c <fat_set_fat_cluster+0x48>
40013054: a1 2e 60 02 sll %i1, 2, %l0
40013058: a1 2e 60 01 sll %i1, 1, %l0
4001305c: f8 0f 60 02 ldub [ %i5 + 2 ], %i4
40013060: c2 07 60 60 ld [ %i5 + 0x60 ], %g1
40013064: b9 34 00 1c srl %l0, %i4, %i4
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
40013068: f6 17 40 00 lduh [ %i5 ], %i3
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
4001306c: b8 07 00 01 add %i4, %g1, %i4
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &sec_buf);
40013070: 94 10 20 01 mov 1, %o2
40013074: 96 07 bf fc add %fp, -4, %o3
40013078: 92 10 00 1c mov %i4, %o1
4001307c: 40 00 05 4e call 400145b4 <fat_buf_access>
40013080: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40013084: b0 92 20 00 orcc %o0, 0, %i0
40013088: 12 80 00 0f bne 400130c4 <fat_set_fat_cluster+0xb0>
<== NEVER TAKEN
4001308c: b6 06 ff ff add %i3, -1, %i3
return rc;
switch ( fs_info->vol.type )
40013090: e2 0f 60 16 ldub [ %i5 + 0x16 ], %l1
40013094: 80 a4 60 02 cmp %l1, 2
40013098: 02 80 00 35 be 4001316c <fat_set_fat_cluster+0x158>
4001309c: b6 0e c0 10 and %i3, %l0, %i3
400130a0: 80 a4 60 04 cmp %l1, 4
400130a4: 02 80 00 26 be 4001313c <fat_set_fat_cluster+0x128>
400130a8: 80 a4 60 01 cmp %l1, 1
400130ac: 02 80 00 0a be 400130d4 <fat_set_fat_cluster+0xc0>
<== ALWAYS TAKEN
400130b0: 80 8e 60 01 btst 1, %i1
fat_buf_mark_modified(fs_info);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
400130b4: 40 00 20 22 call 4001b13c <__errno>
<== NOT EXECUTED
400130b8: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400130bc: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
400130c0: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
break;
}
return RC_OK;
}
400130c4: 81 c7 e0 08 ret
<== NOT EXECUTED
400130c8: 81 e8 00 00 restore
<== NOT EXECUTED
400130cc: 10 bf ff e4 b 4001305c <fat_set_fat_cluster+0x48>
400130d0: a0 06 c0 19 add %i3, %i1, %l0
if ( FAT_CLUSTER_IS_ODD(cln) )
400130d4: 02 80 00 30 be 40013194 <fat_set_fat_cluster+0x180>
400130d8: c2 07 bf fc ld [ %fp + -4 ], %g1
*(sec_buf + ofs) &= 0x0F;
400130dc: c4 08 40 1b ldub [ %g1 + %i3 ], %g2
400130e0: 84 08 a0 0f and %g2, 0xf, %g2
400130e4: c4 28 40 1b stb %g2, [ %g1 + %i3 ]
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
400130e8: 83 2e a0 04 sll %i2, 4, %g1
*(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00F0);
400130ec: c4 07 bf fc ld [ %fp + -4 ], %g2
400130f0: c6 08 80 1b ldub [ %g2 + %i3 ], %g3
400130f4: 82 10 40 03 or %g1, %g3, %g1
400130f8: c2 28 80 1b stb %g1, [ %g2 + %i3 ]
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
400130fc: e2 2f 60 90 stb %l1, [ %i5 + 0x90 ]
if ( ofs == (fs_info->vol.bps - 1) )
40013100: c2 17 40 00 lduh [ %i5 ], %g1
40013104: 82 00 7f ff add %g1, -1, %g1
40013108: 80 a0 40 1b cmp %g1, %i3
4001310c: 02 80 00 52 be 40013254 <fat_set_fat_cluster+0x240>
40013110: c2 07 bf fc ld [ %fp + -4 ], %g1
*(sec_buf + ofs + 1) &= 0x00;
40013114: b6 06 e0 01 inc %i3
40013118: c0 28 40 1b clrb [ %g1 + %i3 ]
*(sec_buf + ofs + 1) |= (uint8_t )((fat16_clv & 0xFF00)>>8);
4001311c: 83 2e a0 14 sll %i2, 0x14, %g1
40013120: c4 07 bf fc ld [ %fp + -4 ], %g2
40013124: c6 08 80 1b ldub [ %g2 + %i3 ], %g3
40013128: 83 30 60 18 srl %g1, 0x18, %g1
4001312c: 82 10 40 03 or %g1, %g3, %g1
40013130: c2 28 80 1b stb %g1, [ %g2 + %i3 ]
40013134: 81 c7 e0 08 ret
40013138: 81 e8 00 00 restore
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
4001313c: 11 3c 00 00 sethi %hi(0xf0000000), %o0
40013140: 40 00 55 f3 call 4002890c <__bswapsi2>
40013144: 90 2e 80 08 andn %i2, %o0, %o0
*((uint32_t *)(sec_buf + ofs)) &= CT_LE_L(0xF0000000);
40013148: c4 07 bf fc ld [ %fp + -4 ], %g2
4001314c: c2 00 80 1b ld [ %g2 + %i3 ], %g1
40013150: 82 08 60 f0 and %g1, 0xf0, %g1
*((uint32_t *)(sec_buf + ofs)) |= fat32_clv;
40013154: 90 10 40 08 or %g1, %o0, %o0
40013158: d0 20 80 1b st %o0, [ %g2 + %i3 ]
4001315c: 82 10 20 01 mov 1, %g1
40013160: c2 2f 60 90 stb %g1, [ %i5 + 0x90 ]
40013164: 81 c7 e0 08 ret
40013168: 81 e8 00 00 restore
(uint16_t )(CT_LE_W(in_val));
4001316c: 83 2e a0 08 sll %i2, 8, %g1
40013170: b5 2e a0 10 sll %i2, 0x10, %i2
40013174: b5 36 a0 18 srl %i2, 0x18, %i2
40013178: b4 10 40 1a or %g1, %i2, %i2
*((uint16_t *)(sec_buf + ofs)) =
4001317c: c2 07 bf fc ld [ %fp + -4 ], %g1
40013180: f4 30 40 1b sth %i2, [ %g1 + %i3 ]
40013184: 82 10 20 01 mov 1, %g1
40013188: c2 2f 60 90 stb %g1, [ %i5 + 0x90 ]
4001318c: 81 c7 e0 08 ret
40013190: 81 e8 00 00 restore
*(sec_buf + ofs) &= 0x00;
40013194: c0 28 40 1b clrb [ %g1 + %i3 ]
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
40013198: b4 0e af ff and %i2, 0xfff, %i2
*(sec_buf + ofs) |= (uint8_t)(fat16_clv & 0x00FF);
4001319c: c4 07 bf fc ld [ %fp + -4 ], %g2
400131a0: c2 08 80 1b ldub [ %g2 + %i3 ], %g1
400131a4: 82 16 80 01 or %i2, %g1, %g1
400131a8: c2 28 80 1b stb %g1, [ %g2 + %i3 ]
400131ac: e2 2f 60 90 stb %l1, [ %i5 + 0x90 ]
if ( ofs == (fs_info->vol.bps - 1) )
400131b0: c2 17 40 00 lduh [ %i5 ], %g1
400131b4: 82 00 7f ff add %g1, -1, %g1
400131b8: 80 a0 40 1b cmp %g1, %i3
400131bc: 02 80 00 13 be 40013208 <fat_set_fat_cluster+0x1f4>
<== NEVER TAKEN
400131c0: c4 07 bf fc ld [ %fp + -4 ], %g2
*(sec_buf + ofs + 1) &= 0xF0;
400131c4: b6 06 e0 01 inc %i3
400131c8: c2 08 80 1b ldub [ %g2 + %i3 ], %g1
400131cc: 82 08 7f f0 and %g1, -16, %g1
400131d0: c2 28 80 1b stb %g1, [ %g2 + %i3 ]
*(sec_buf + ofs+1) |= (uint8_t)((fat16_clv & 0xFF00)>>8);
400131d4: b5 36 a0 08 srl %i2, 8, %i2
400131d8: c2 07 bf fc ld [ %fp + -4 ], %g1
400131dc: c4 08 40 1b ldub [ %g1 + %i3 ], %g2
400131e0: b4 16 80 02 or %i2, %g2, %i2
400131e4: f4 28 40 1b stb %i2, [ %g1 + %i3 ]
400131e8: 81 c7 e0 08 ret
400131ec: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one(EIO);
400131f0: 40 00 1f d3 call 4001b13c <__errno>
<== NOT EXECUTED
400131f4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400131f8: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
400131fc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
40013200: 81 c7 e0 08 ret
<== NOT EXECUTED
40013204: 81 e8 00 00 restore
<== NOT EXECUTED
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
40013208: 96 07 bf fc add %fp, -4, %o3
<== NOT EXECUTED
4001320c: 94 10 20 01 mov 1, %o2
<== NOT EXECUTED
40013210: 92 07 20 01 add %i4, 1, %o1
<== NOT EXECUTED
40013214: 40 00 04 e8 call 400145b4 <fat_buf_access>
<== NOT EXECUTED
40013218: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
if (rc != RC_OK)
4001321c: b0 92 20 00 orcc %o0, 0, %i0
<== NOT EXECUTED
40013220: 12 bf ff a9 bne 400130c4 <fat_set_fat_cluster+0xb0>
<== NOT EXECUTED
40013224: c4 07 bf fc ld [ %fp + -4 ], %g2
<== NOT EXECUTED
*sec_buf &= 0xF0;
40013228: c2 08 80 00 ldub [ %g2 ], %g1
<== NOT EXECUTED
4001322c: 82 08 7f f0 and %g1, -16, %g1
<== NOT EXECUTED
40013230: c2 28 80 00 stb %g1, [ %g2 ]
<== NOT EXECUTED
*sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8);
40013234: b5 36 a0 08 srl %i2, 8, %i2
<== NOT EXECUTED
40013238: c4 07 bf fc ld [ %fp + -4 ], %g2
<== NOT EXECUTED
4001323c: c2 08 80 00 ldub [ %g2 ], %g1
<== NOT EXECUTED
40013240: 82 16 80 01 or %i2, %g1, %g1
<== NOT EXECUTED
40013244: c2 28 80 00 stb %g1, [ %g2 ]
<== NOT EXECUTED
40013248: e2 2f 60 90 stb %l1, [ %i5 + 0x90 ]
<== NOT EXECUTED
4001324c: 81 c7 e0 08 ret
<== NOT EXECUTED
40013250: 81 e8 00 00 restore
<== NOT EXECUTED
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
40013254: 96 07 bf fc add %fp, -4, %o3
40013258: 94 10 20 01 mov 1, %o2
4001325c: 92 07 20 01 add %i4, 1, %o1
40013260: 40 00 04 d5 call 400145b4 <fat_buf_access>
40013264: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
40013268: b0 92 20 00 orcc %o0, 0, %i0
4001326c: 12 bf ff 96 bne 400130c4 <fat_set_fat_cluster+0xb0>
<== NEVER TAKEN
40013270: c2 07 bf fc ld [ %fp + -4 ], %g1
*sec_buf &= 0x00;
40013274: c0 28 40 00 clrb [ %g1 ]
*sec_buf |= (uint8_t)((fat16_clv & 0xFF00)>>8);
40013278: 83 2e a0 14 sll %i2, 0x14, %g1
4001327c: c4 07 bf fc ld [ %fp + -4 ], %g2
40013280: c6 08 80 00 ldub [ %g2 ], %g3
40013284: 83 30 60 18 srl %g1, 0x18, %g1
40013288: 82 10 40 03 or %g1, %g3, %g1
4001328c: c2 28 80 00 stb %g1, [ %g2 ]
40013290: e2 2f 60 90 stb %l1, [ %i5 + 0x90 ]
40013294: 81 c7 e0 08 ret
40013298: 81 e8 00 00 restore
400153d4 <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)
{
400153d4: 9d e3 bf a0 save %sp, -96, %sp
int rc = RC_OK;
int i = 0;
rc = fat_sync(fs_info);
400153d8: 7f ff ff bc call 400152c8 <fat_sync>
400153dc: 90 10 00 18 mov %i0, %o0
rc = -1;
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
400153e0: fa 06 20 74 ld [ %i0 + 0x74 ], %i5
if ( rc != RC_OK )
400153e4: 80 a0 00 08 cmp %g0, %o0
rc = fat_sync(fs_info);
400153e8: b4 10 00 08 mov %o0, %i2
return _Chain_Immutable_head( the_chain )->next;
400153ec: d0 07 40 00 ld [ %i5 ], %o0
{
400153f0: b8 10 00 18 mov %i0, %i4
return &the_chain->Tail.Node;
400153f4: b6 07 60 04 add %i5, 4, %i3
if ( rc != RC_OK )
400153f8: b0 60 20 00 subx %g0, 0, %i0
if ( !_Chain_Is_empty(the_chain))
400153fc: 80 a6 c0 08 cmp %i3, %o0
40015400: 22 80 00 0c be,a 40015430 <fat_shutdown_drive+0x5c>
40015404: d0 07 60 0c ld [ %i5 + 0xc ], %o0
new_first = old_first->next;
40015408: c2 02 00 00 ld [ %o0 ], %g1
head->next = new_first;
4001540c: c2 27 40 00 st %g1, [ %i5 ]
while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL )
free(node);
40015410: 7f ff bf f0 call 400053d0 <free>
40015414: fa 20 60 04 st %i5, [ %g1 + 4 ]
return _Chain_Immutable_head( the_chain )->next;
40015418: d0 07 40 00 ld [ %i5 ], %o0
if ( !_Chain_Is_empty(the_chain))
4001541c: 80 a6 c0 08 cmp %i3, %o0
40015420: 32 bf ff fb bne,a 4001540c <fat_shutdown_drive+0x38>
40015424: c2 02 00 00 ld [ %o0 ], %g1
40015428: fa 07 20 74 ld [ %i4 + 0x74 ], %i5
return _Chain_Immutable_head( the_chain )->next;
4001542c: d0 07 60 0c ld [ %i5 + 0xc ], %o0
return &the_chain->Tail.Node;
40015430: b6 07 60 10 add %i5, 0x10, %i3
if ( !_Chain_Is_empty(the_chain))
40015434: 80 a2 00 1b cmp %o0, %i3
40015438: 02 80 00 0a be 40015460 <fat_shutdown_drive+0x8c>
<== ALWAYS TAKEN
4001543c: b2 07 60 0c add %i5, 0xc, %i1
new_first = old_first->next;
40015440: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
head->next = new_first;
40015444: c2 27 60 0c st %g1, [ %i5 + 0xc ]
<== NOT EXECUTED
40015448: 7f ff bf e2 call 400053d0 <free>
<== NOT EXECUTED
4001544c: f2 20 60 04 st %i1, [ %g1 + 4 ]
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
40015450: d0 07 60 0c ld [ %i5 + 0xc ], %o0
<== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
40015454: 80 a6 c0 08 cmp %i3, %o0
<== NOT EXECUTED
40015458: 32 bf ff fb bne,a 40015444 <fat_shutdown_drive+0x70>
<== NOT EXECUTED
4001545c: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
}
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
40015460: fa 07 20 78 ld [ %i4 + 0x78 ], %i5
return _Chain_Immutable_head( the_chain )->next;
40015464: d0 07 40 00 ld [ %i5 ], %o0
return &the_chain->Tail.Node;
40015468: b6 07 60 04 add %i5, 4, %i3
if ( !_Chain_Is_empty(the_chain))
4001546c: 80 a6 c0 08 cmp %i3, %o0
40015470: 22 80 00 0c be,a 400154a0 <fat_shutdown_drive+0xcc>
<== ALWAYS TAKEN
40015474: d0 07 60 0c ld [ %i5 + 0xc ], %o0
new_first = old_first->next;
40015478: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
head->next = new_first;
4001547c: c2 27 40 00 st %g1, [ %i5 ]
<== NOT EXECUTED
while ( (node = rtems_chain_get_unprotected(the_chain)) != NULL )
free(node);
40015480: 7f ff bf d4 call 400053d0 <free>
<== NOT EXECUTED
40015484: fa 20 60 04 st %i5, [ %g1 + 4 ]
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
40015488: d0 07 40 00 ld [ %i5 ], %o0
<== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
4001548c: 80 a2 00 1b cmp %o0, %i3
<== NOT EXECUTED
40015490: 32 bf ff fb bne,a 4001547c <fat_shutdown_drive+0xa8>
<== NOT EXECUTED
40015494: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
40015498: fa 07 20 78 ld [ %i4 + 0x78 ], %i5
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
4001549c: d0 07 60 0c ld [ %i5 + 0xc ], %o0
<== NOT EXECUTED
return &the_chain->Tail.Node;
400154a0: b6 07 60 10 add %i5, 0x10, %i3
if ( !_Chain_Is_empty(the_chain))
400154a4: 80 a6 c0 08 cmp %i3, %o0
400154a8: 02 80 00 0a be 400154d0 <fat_shutdown_drive+0xfc>
<== ALWAYS TAKEN
400154ac: b2 07 60 0c add %i5, 0xc, %i1
new_first = old_first->next;
400154b0: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
head->next = new_first;
400154b4: c2 27 60 0c st %g1, [ %i5 + 0xc ]
<== NOT EXECUTED
400154b8: 7f ff bf c6 call 400053d0 <free>
<== NOT EXECUTED
400154bc: f2 20 60 04 st %i1, [ %g1 + 4 ]
<== NOT EXECUTED
return _Chain_Immutable_head( the_chain )->next;
400154c0: d0 07 60 0c ld [ %i5 + 0xc ], %o0
<== NOT EXECUTED
if ( !_Chain_Is_empty(the_chain))
400154c4: 80 a6 c0 08 cmp %i3, %o0
<== NOT EXECUTED
400154c8: 32 bf ff fb bne,a 400154b4 <fat_shutdown_drive+0xe0>
<== NOT EXECUTED
400154cc: c2 02 00 00 ld [ %o0 ], %g1
<== NOT EXECUTED
}
free(fs_info->vhash);
400154d0: 7f ff bf c0 call 400053d0 <free>
400154d4: d0 07 20 74 ld [ %i4 + 0x74 ], %o0
free(fs_info->rhash);
400154d8: 7f ff bf be call 400053d0 <free>
400154dc: d0 07 20 78 ld [ %i4 + 0x78 ], %o0
free(fs_info->uino);
400154e0: 7f ff bf bc call 400053d0 <free>
400154e4: d0 07 20 7c ld [ %i4 + 0x7c ], %o0
free(fs_info->sec_buf);
400154e8: 7f ff bf ba call 400053d0 <free>
400154ec: d0 07 20 98 ld [ %i4 + 0x98 ], %o0
close(fs_info->vol.fd);
400154f0: 7f ff bf 58 call 40005250 <close>
400154f4: d0 07 20 68 ld [ %i4 + 0x68 ], %o0
if (rc)
400154f8: 80 a6 a0 00 cmp %i2, 0
400154fc: 12 80 00 04 bne 4001550c <fat_shutdown_drive+0x138>
<== NEVER TAKEN
40015500: 01 00 00 00 nop
errno = EIO;
return rc;
}
40015504: 81 c7 e0 08 ret
40015508: 81 e8 00 00 restore
errno = EIO;
4001550c: 40 00 17 0c call 4001b13c <__errno>
<== NOT EXECUTED
40015510: 01 00 00 00 nop
<== NOT EXECUTED
40015514: 82 10 20 05 mov 5, %g1 ! 5 <_TLS_Alignment+0x4>
<== NOT EXECUTED
40015518: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
}
4001551c: 81 c7 e0 08 ret
<== NOT EXECUTED
40015520: 81 e8 00 00 restore
<== NOT EXECUTED
400152c8 <fat_sync>:
return RC_OK;
}
int
fat_sync(fat_fs_info_t *fs_info)
{
400152c8: 9d e3 bf 98 save %sp, -104, %sp
if (fs_info->vol.type == FAT_FAT32)
400152cc: c2 0e 20 16 ldub [ %i0 + 0x16 ], %g1
{
400152d0: ba 10 00 18 mov %i0, %i5
if (fs_info->vol.type == FAT_FAT32)
400152d4: 80 a0 60 04 cmp %g1, 4
400152d8: 02 80 00 0d be 4001530c <fat_sync+0x44>
400152dc: b0 10 20 00 clr %i0
if (fs_info->c.state == FAT_CACHE_EMPTY)
400152e0: c2 0f 60 91 ldub [ %i5 + 0x91 ], %g1
400152e4: 80 a0 60 00 cmp %g1, 0
400152e8: 12 80 00 18 bne 40015348 <fat_sync+0x80>
400152ec: 01 00 00 00 nop
if ( rc != RC_OK )
rc = -1;
fat_buf_release(fs_info);
if (rtems_bdbuf_syncdev(fs_info->vol.dd) != RTEMS_SUCCESSFUL)
400152f0: 7f ff f2 b6 call 40011dc8 <rtems_bdbuf_syncdev>
400152f4: d0 07 60 6c ld [ %i5 + 0x6c ], %o0
400152f8: 80 a2 20 00 cmp %o0, 0
400152fc: 12 80 00 34 bne 400153cc <fat_sync+0x104>
<== NEVER TAKEN
40015300: 01 00 00 00 nop
rc = -1;
return rc;
}
40015304: 81 c7 e0 08 ret
40015308: 81 e8 00 00 restore
uint32_t free_count = fs_info->vol.free_cls;
4001530c: f6 07 60 4c ld [ %i5 + 0x4c ], %i3
if (free_count != fs_info->vol.free_cls_in_fs_info)
40015310: c2 07 60 50 ld [ %i5 + 0x50 ], %g1
40015314: 80 a6 c0 01 cmp %i3, %g1
40015318: 12 80 00 1e bne 40015390 <fat_sync+0xc8>
<== NEVER TAKEN
4001531c: f8 07 60 54 ld [ %i5 + 0x54 ], %i4
if (next_free != fs_info->vol.next_cl_in_fs_info)
40015320: c2 07 60 58 ld [ %i5 + 0x58 ], %g1
40015324: 80 a7 00 01 cmp %i4, %g1
40015328: 12 80 00 0b bne 40015354 <fat_sync+0x8c>
4001532c: 01 00 00 00 nop
if ( (ret1 < 0) || (ret2 < 0) )
40015330: b0 0e 20 ff and %i0, 0xff, %i0
40015334: b0 20 00 18 neg %i0
if (fs_info->c.state == FAT_CACHE_EMPTY)
40015338: c2 0f 60 91 ldub [ %i5 + 0x91 ], %g1
4001533c: 80 a0 60 00 cmp %g1, 0
40015340: 02 bf ff ec be 400152f0 <fat_sync+0x28>
40015344: 01 00 00 00 nop
40015348: 7f ff fc 25 call 400143dc <fat_buf_release.part.5>
4001534c: 90 10 00 1d mov %i5, %o0
40015350: 30 bf ff e8 b,a 400152f0 <fat_sync+0x28>
uint32_t le_next_free = CT_LE_L(next_free);
40015354: 40 00 4d 6e call 4002890c <__bswapsi2>
40015358: 90 10 00 1c mov %i4, %o0
fs_info->vol.next_cl_in_fs_info = next_free;
4001535c: f8 27 60 58 st %i4, [ %i5 + 0x58 ]
ret2 = fat_sector_write(fs_info,
40015360: 98 07 bf fc add %fp, -4, %o4
40015364: d2 17 60 48 lduh [ %i5 + 0x48 ], %o1
uint32_t le_next_free = CT_LE_L(next_free);
40015368: d0 27 bf fc st %o0, [ %fp + -4 ]
ret2 = fat_sector_write(fs_info,
4001536c: 96 10 20 04 mov 4, %o3
40015370: 94 10 21 ec mov 0x1ec, %o2
40015374: 7f ff fc e9 call 40014718 <fat_sector_write>
40015378: 90 10 00 1d mov %i5, %o0
4001537c: 91 32 20 1f srl %o0, 0x1f, %o0
40015380: b0 12 00 18 or %o0, %i0, %i0
if ( (ret1 < 0) || (ret2 < 0) )
40015384: b0 0e 20 ff and %i0, 0xff, %i0
40015388: 10 bf ff ec b 40015338 <fat_sync+0x70>
4001538c: b0 20 00 18 neg %i0
uint32_t le_free_count = CT_LE_L(free_count);
40015390: 40 00 4d 5f call 4002890c <__bswapsi2>
<== NOT EXECUTED
40015394: 90 10 00 1b mov %i3, %o0
<== NOT EXECUTED
fs_info->vol.free_cls_in_fs_info = free_count;
40015398: f6 27 60 50 st %i3, [ %i5 + 0x50 ]
<== NOT EXECUTED
ret1 = fat_sector_write(fs_info,
4001539c: 98 07 bf fc add %fp, -4, %o4
<== NOT EXECUTED
400153a0: d2 17 60 48 lduh [ %i5 + 0x48 ], %o1
<== NOT EXECUTED
uint32_t le_free_count = CT_LE_L(free_count);
400153a4: d0 27 bf fc st %o0, [ %fp + -4 ]
<== NOT EXECUTED
ret1 = fat_sector_write(fs_info,
400153a8: 96 10 20 04 mov 4, %o3
<== NOT EXECUTED
400153ac: 94 10 21 e8 mov 0x1e8, %o2
<== NOT EXECUTED
400153b0: 7f ff fc da call 40014718 <fat_sector_write>
<== NOT EXECUTED
400153b4: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
if (next_free != fs_info->vol.next_cl_in_fs_info)
400153b8: c2 07 60 58 ld [ %i5 + 0x58 ], %g1
<== NOT EXECUTED
400153bc: 80 a7 00 01 cmp %i4, %g1
<== NOT EXECUTED
400153c0: 02 bf ff dc be 40015330 <fat_sync+0x68>
<== NOT EXECUTED
400153c4: b1 32 20 1f srl %o0, 0x1f, %i0
<== NOT EXECUTED
400153c8: 30 bf ff e3 b,a 40015354 <fat_sync+0x8c>
<== NOT EXECUTED
}
400153cc: 81 c7 e0 08 ret
<== NOT EXECUTED
400153d0: 91 e8 3f ff restore %g0, -1, %o0
<== NOT EXECUTED
40017a4c <msdos_creat_node>:
fat_file_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
40017a4c: 9d e3 bf 00 save %sp, -256, %sp
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
40017a50: c2 06 20 14 ld [ %i0 + 0x14 ], %g1
40017a54: e0 00 60 08 ld [ %g1 + 8 ], %l0
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
fat_file_fd_t *fat_fd = NULL;
40017a58: c0 27 bf 6c clr [ %fp + -148 ]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40017a5c: 82 10 3f ff mov -1, %g1
time_t now;
uint16_t time_val = 0;
40017a60: c0 37 bf 68 clrh [ %fp + -152 ]
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) {
40017a64: 80 a6 e1 04 cmp %i3, 0x104
uint16_t date = 0;
40017a68: c0 37 bf 6a clrh [ %fp + -150 ]
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40017a6c: c0 27 bf 80 clr [ %fp + -128 ]
40017a70: c0 27 bf 84 clr [ %fp + -124 ]
dir_pos->sname.cln = 0;
40017a74: c0 27 bf 70 clr [ %fp + -144 ]
40017a78: c0 27 bf 88 clr [ %fp + -120 ]
40017a7c: c0 27 bf 8c clr [ %fp + -116 ]
dir_pos->sname.ofs = 0;
40017a80: c0 27 bf 74 clr [ %fp + -140 ]
40017a84: c0 27 bf 90 clr [ %fp + -112 ]
40017a88: c0 27 bf 94 clr [ %fp + -108 ]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40017a8c: c2 27 bf 78 st %g1, [ %fp + -136 ]
40017a90: c0 27 bf 98 clr [ %fp + -104 ]
40017a94: c0 27 bf 9c clr [ %fp + -100 ]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40017a98: c2 27 bf 7c st %g1, [ %fp + -132 ]
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
40017a9c: c0 27 bf c0 clr [ %fp + -64 ]
40017aa0: c0 27 bf c4 clr [ %fp + -60 ]
40017aa4: c0 27 bf c8 clr [ %fp + -56 ]
40017aa8: c0 27 bf cc clr [ %fp + -52 ]
40017aac: c0 27 bf d0 clr [ %fp + -48 ]
40017ab0: c0 27 bf d4 clr [ %fp + -44 ]
40017ab4: c0 27 bf d8 clr [ %fp + -40 ]
40017ab8: c0 27 bf dc clr [ %fp + -36 ]
40017abc: c0 27 bf e0 clr [ %fp + -32 ]
40017ac0: c0 27 bf e4 clr [ %fp + -28 ]
40017ac4: c0 27 bf e8 clr [ %fp + -24 ]
40017ac8: c0 27 bf ec clr [ %fp + -20 ]
40017acc: c0 27 bf f0 clr [ %fp + -16 ]
40017ad0: c0 27 bf f4 clr [ %fp + -12 ]
40017ad4: c0 27 bf f8 clr [ %fp + -8 ]
40017ad8: c0 27 bf fc clr [ %fp + -4 ]
if (name_len > MSDOS_NAME_MAX_LFN_WITH_DOT) {
40017adc: 14 80 00 e3 bg 40017e68 <msdos_creat_node+0x41c>
<== NEVER TAKEN
40017ae0: f8 06 20 08 ld [ %i0 + 8 ], %i4
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
}
name_type = msdos_long_to_short (fs_info->converter,
40017ae4: d0 04 20 c0 ld [ %l0 + 0xc0 ], %o0
40017ae8: 98 10 20 0b mov 0xb, %o4
40017aec: 96 07 bf 80 add %fp, -128, %o3
40017af0: 94 10 00 1b mov %i3, %o2
40017af4: 40 00 01 bf call 400181f0 <msdos_long_to_short>
40017af8: 92 10 00 1a mov %i2, %o1
name, name_len,
MSDOS_DIR_NAME(short_node),
MSDOS_NAME_MAX);
if (name_type == MSDOS_NAME_INVALID) {
40017afc: a6 92 20 00 orcc %o0, 0, %l3
40017b00: 02 80 00 df be 40017e7c <msdos_creat_node+0x430>
<== NEVER TAKEN
40017b04: 01 00 00 00 nop
rtems_set_errno_and_return_minus_one(EINVAL);
}
/* fill reserved field */
*MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE;
40017b08: c0 2f bf 8c clrb [ %fp + -116 ]
/* set up last write date and time */
now = time(NULL);
40017b0c: 40 00 1f f3 call 4001fad8 <time>
40017b10: 90 10 20 00 clr %o0
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;
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40017b14: c2 0f 20 30 ldub [ %i4 + 0x30 ], %g1
40017b18: a2 10 00 08 mov %o0, %l1
40017b1c: a4 10 00 09 mov %o1, %l2
40017b20: 82 10 60 02 or %g1, 2, %g1
fat_fd->ctime = t;
40017b24: d2 27 20 44 st %o1, [ %i4 + 0x44 ]
fat_file_set_ctime_mtime(parent_fat_fd, now);
msdos_date_unix2dos(now, &date, &time_val);
40017b28: 94 07 bf 68 add %fp, -152, %o2
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40017b2c: c2 2f 20 30 stb %g1, [ %i4 + 0x30 ]
40017b30: 92 07 bf 6a add %fp, -150, %o1
fat_fd->ctime = t;
40017b34: e2 27 20 40 st %l1, [ %i4 + 0x40 ]
40017b38: 90 10 00 12 mov %l2, %o0
fat_fd->mtime = t;
40017b3c: e2 27 20 48 st %l1, [ %i4 + 0x48 ]
40017b40: 40 00 08 af call 40019dfc <msdos_date_unix2dos>
40017b44: e4 27 20 4c st %l2, [ %i4 + 0x4c ]
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
40017b48: c2 17 bf 68 lduh [ %fp + -152 ], %g1
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40017b4c: c6 17 bf 6a lduh [ %fp + -150 ], %g3
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
40017b50: 85 28 60 08 sll %g1, 8, %g2
40017b54: 89 30 60 08 srl %g1, 8, %g4
*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;
40017b58: c0 27 bf 9c clr [ %fp + -100 ]
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40017b5c: 83 28 e0 08 sll %g3, 8, %g1
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
40017b60: 84 10 80 04 or %g2, %g4, %g2
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40017b64: 87 30 e0 08 srl %g3, 8, %g3
*MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
40017b68: c4 37 bf 8e sth %g2, [ %fp + -114 ]
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40017b6c: 82 10 40 03 or %g1, %g3, %g1
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
40017b70: c4 37 bf 96 sth %g2, [ %fp + -106 ]
if (type == FAT_DIRECTORY) {
40017b74: 80 a6 60 00 cmp %i1, 0
*MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
40017b78: c2 37 bf 90 sth %g1, [ %fp + -112 ]
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
40017b7c: c2 37 bf 98 sth %g1, [ %fp + -104 ]
if (type == FAT_DIRECTORY) {
40017b80: 02 80 00 13 be 40017bcc <msdos_creat_node+0x180>
40017b84: c2 37 bf 92 sth %g1, [ %fp + -110 ]
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
}
else if (type == FAT_HARD_LINK) {
40017b88: 80 a6 60 02 cmp %i1, 2
40017b8c: 02 80 00 2c be 40017c3c <msdos_creat_node+0x1f0>
<== NEVER TAKEN
40017b90: 82 07 bf 80 add %fp, -128, %g1
/*
* 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,
40017b94: c2 23 a0 5c st %g1, [ %sp + 0x5c ]
40017b98: 9a 07 bf 70 add %fp, -144, %o5
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
40017b9c: c2 0f bf 8b ldub [ %fp + -117 ], %g1
40017ba0: 82 10 60 20 or %g1, 0x20, %g1
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017ba4: 98 10 00 13 mov %l3, %o4
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
40017ba8: c2 2f bf 8b stb %g1, [ %fp + -117 ]
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017bac: 96 10 00 1b mov %i3, %o3
40017bb0: 94 10 00 1a mov %i2, %o2
40017bb4: 92 10 20 01 mov 1, %o1
40017bb8: 40 00 07 81 call 400199bc <msdos_get_name_node>
40017bbc: 90 10 00 18 mov %i0, %o0
40017bc0: ba 10 00 08 mov %o0, %i5
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;
}
40017bc4: 81 c7 e0 08 ret
40017bc8: 91 e8 00 1d restore %g0, %i5, %o0
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017bcc: 82 07 bf 80 add %fp, -128, %g1
40017bd0: c2 23 a0 5c st %g1, [ %sp + 0x5c ]
40017bd4: 9a 07 bf 70 add %fp, -144, %o5
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
40017bd8: c2 0f bf 8b ldub [ %fp + -117 ], %g1
40017bdc: 82 10 60 10 or %g1, 0x10, %g1
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017be0: 98 10 00 13 mov %l3, %o4
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
40017be4: c2 2f bf 8b stb %g1, [ %fp + -117 ]
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017be8: 96 10 00 1b mov %i3, %o3
40017bec: 94 10 00 1a mov %i2, %o2
40017bf0: 92 10 20 01 mov 1, %o1
40017bf4: 40 00 07 72 call 400199bc <msdos_get_name_node>
40017bf8: 90 10 00 18 mov %i0, %o0
if ( rc != RC_OK )
40017bfc: ba 92 20 00 orcc %o0, 0, %i5
40017c00: 12 bf ff f1 bne 40017bc4 <msdos_creat_node+0x178>
<== NEVER TAKEN
40017c04: 94 07 bf 6c add %fp, -148, %o2
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
40017c08: 92 07 bf 70 add %fp, -144, %o1
40017c0c: 7f ff ee 78 call 400135ec <fat_file_open>
40017c10: 90 10 00 10 mov %l0, %o0
if (rc != RC_OK)
40017c14: ba 92 20 00 orcc %o0, 0, %i5
40017c18: 02 80 00 3e be 40017d10 <msdos_creat_node+0x2c4>
<== ALWAYS TAKEN
40017c1c: c2 07 bf 6c ld [ %fp + -148 ], %g1
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
40017c20: d0 06 20 14 ld [ %i0 + 0x14 ], %o0
<== NOT EXECUTED
40017c24: 94 10 20 e5 mov 0xe5, %o2
<== NOT EXECUTED
40017c28: 92 07 bf 70 add %fp, -144, %o1
<== NOT EXECUTED
40017c2c: 40 00 02 cf call 40018768 <msdos_set_first_char4file_name>
<== NOT EXECUTED
40017c30: b0 10 00 1d mov %i5, %i0
<== NOT EXECUTED
}
40017c34: 81 c7 e0 08 ret
<== NOT EXECUTED
40017c38: 81 e8 00 00 restore
<== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(&fs_info->fat,
40017c3c: c2 07 60 20 ld [ %i5 + 0x20 ], %g1
<== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
40017c40: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
40017c44: 32 80 00 07 bne,a 40017c60 <msdos_creat_node+0x214>
<== NOT EXECUTED
40017c48: c4 0c 20 05 ldub [ %l0 + 5 ], %g2
<== NOT EXECUTED
40017c4c: c4 0c 20 16 ldub [ %l0 + 0x16 ], %g2
<== NOT EXECUTED
40017c50: 80 88 a0 03 btst 3, %g2
<== NOT EXECUTED
40017c54: 32 80 00 07 bne,a 40017c70 <msdos_creat_node+0x224>
<== NOT EXECUTED
40017c58: c2 04 20 28 ld [ %l0 + 0x28 ], %g1
<== NOT EXECUTED
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40017c5c: c4 0c 20 05 ldub [ %l0 + 5 ], %g2
<== NOT EXECUTED
40017c60: d2 04 20 3c ld [ %l0 + 0x3c ], %o1
<== NOT EXECUTED
40017c64: 82 00 7f fe add %g1, -2, %g1
<== NOT EXECUTED
40017c68: 83 28 40 02 sll %g1, %g2, %g1
<== NOT EXECUTED
40017c6c: 82 00 40 09 add %g1, %o1, %g1
<== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
40017c70: c4 14 00 00 lduh [ %l0 ], %g2
<== NOT EXECUTED
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
40017c74: d4 07 60 24 ld [ %i5 + 0x24 ], %o2
<== NOT EXECUTED
40017c78: d2 0c 20 02 ldub [ %l0 + 2 ], %o1
<== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
40017c7c: 84 00 bf ff add %g2, -1, %g2
<== NOT EXECUTED
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
40017c80: 93 32 80 09 srl %o2, %o1, %o1
<== NOT EXECUTED
ret = _fat_block_read(&fs_info->fat,
40017c84: 98 07 bf a0 add %fp, -96, %o4
<== NOT EXECUTED
40017c88: 96 10 20 20 mov 0x20, %o3
<== NOT EXECUTED
40017c8c: 94 08 80 0a and %g2, %o2, %o2
<== NOT EXECUTED
40017c90: 92 02 40 01 add %o1, %g1, %o1
<== NOT EXECUTED
40017c94: 7f ff f2 81 call 40014698 <_fat_block_read>
<== NOT EXECUTED
40017c98: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
if (ret < 0) {
40017c9c: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
40017ca0: 06 80 00 8b bl 40017ecc <msdos_creat_node+0x480>
<== NOT EXECUTED
40017ca4: c4 0f bf ad ldub [ %fp + -83 ], %g2
<== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
40017ca8: c4 2f bf 8d stb %g2, [ %fp + -115 ]
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017cac: 82 07 bf 80 add %fp, -128, %g1
<== NOT EXECUTED
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
40017cb0: c4 17 bf ae lduh [ %fp + -82 ], %g2
<== NOT EXECUTED
40017cb4: c4 37 bf 8e sth %g2, [ %fp + -114 ]
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017cb8: 9a 07 bf 70 add %fp, -144, %o5
<== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
40017cbc: c4 17 bf b0 lduh [ %fp + -80 ], %g2
<== NOT EXECUTED
40017cc0: c4 37 bf 90 sth %g2, [ %fp + -112 ]
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017cc4: 98 10 00 13 mov %l3, %o4
<== NOT EXECUTED
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
40017cc8: c4 07 bf bc ld [ %fp + -68 ], %g2
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017ccc: c2 23 a0 5c st %g1, [ %sp + 0x5c ]
<== NOT EXECUTED
40017cd0: 96 10 00 1b mov %i3, %o3
<== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
40017cd4: c2 0f bf ab ldub [ %fp + -85 ], %g1
<== NOT EXECUTED
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
40017cd8: c4 27 bf 9c st %g2, [ %fp + -100 ]
<== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
40017cdc: 82 10 60 20 or %g1, 0x20, %g1
<== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
40017ce0: c4 17 bf ba lduh [ %fp + -70 ], %g2
<== NOT EXECUTED
40017ce4: c4 37 bf 9a sth %g2, [ %fp + -102 ]
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017ce8: 94 10 00 1a mov %i2, %o2
<== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
40017cec: c4 17 bf b4 lduh [ %fp + -76 ], %g2
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017cf0: 92 10 20 01 mov 1, %o1
<== NOT EXECUTED
40017cf4: 90 10 00 18 mov %i0, %o0
<== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
40017cf8: c4 37 bf 94 sth %g2, [ %fp + -108 ]
<== NOT EXECUTED
rc = msdos_get_name_node(parent_loc, true, name, name_len,
40017cfc: 40 00 07 30 call 400199bc <msdos_get_name_node>
<== NOT EXECUTED
40017d00: c2 2f bf 8b stb %g1, [ %fp + -117 ]
<== NOT EXECUTED
40017d04: ba 10 00 08 mov %o0, %i5
<== NOT EXECUTED
}
40017d08: 81 c7 e0 08 ret
<== NOT EXECUTED
40017d0c: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
40017d10: c4 08 60 30 ldub [ %g1 + 0x30 ], %g2
40017d14: 84 10 a0 02 or %g2, 2, %g2
40017d18: c4 28 60 30 stb %g2, [ %g1 + 0x30 ]
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40017d1c: 05 00 08 00 sethi %hi(0x200000), %g2
fat_fd->fat_file_type = FAT_DIRECTORY;
40017d20: c0 20 60 10 clr [ %g1 + 0x10 ]
rc = fat_file_extend(&fs_info->fat,
40017d24: 98 07 bf a0 add %fp, -96, %o4
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40017d28: c4 20 60 14 st %g2, [ %g1 + 0x14 ]
rc = fat_file_extend(&fs_info->fat,
40017d2c: 94 10 20 01 mov 1, %o2
fat_fd->ctime = t;
40017d30: e2 20 60 40 st %l1, [ %g1 + 0x40 ]
40017d34: 92 10 00 01 mov %g1, %o1
40017d38: e4 20 60 44 st %l2, [ %g1 + 0x44 ]
40017d3c: 90 10 00 10 mov %l0, %o0
fat_fd->mtime = t;
40017d40: e2 20 60 48 st %l1, [ %g1 + 0x48 ]
40017d44: e4 20 60 4c st %l2, [ %g1 + 0x4c ]
40017d48: 7f ff f0 3b call 40013e34 <fat_file_extend>
40017d4c: d6 04 20 08 ld [ %l0 + 8 ], %o3
if (rc != RC_OK)
40017d50: ba 92 20 00 orcc %o0, 0, %i5
40017d54: 32 bf ff b4 bne,a 40017c24 <msdos_creat_node+0x1d8>
<== NEVER TAKEN
40017d58: d0 06 20 14 ld [ %i0 + 0x14 ], %o0
<== NOT EXECUTED
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40017d5c: d8 1f bf 88 ldd [ %fp + -120 ], %o4
40017d60: c4 1f bf 98 ldd [ %fp + -104 ], %g2
40017d64: e4 1f bf 80 ldd [ %fp + -128 ], %l2
40017d68: f4 1f bf 90 ldd [ %fp + -112 ], %i2
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
40017d6c: 03 10 00 a9 sethi %hi(0x4002a400), %g1
40017d70: d2 00 61 f8 ld [ %g1 + 0x1f8 ], %o1 ! 4002a5f8 <MSDOS_DOT_NAME>
40017d74: 94 10 20 0b mov 0xb, %o2
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40017d78: d8 3f bf c8 std %o4, [ %fp + -56 ]
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
40017d7c: 90 07 bf c0 add %fp, -64, %o0
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40017d80: c4 3f bf d8 std %g2, [ %fp + -40 ]
memcpy(DOTDOT_NODE_P(dot_dotdot), short_node,
40017d84: d8 3f bf e8 std %o4, [ %fp + -24 ]
40017d88: c4 3f bf f8 std %g2, [ %fp + -8 ]
memcpy(DOT_NODE_P(dot_dotdot), short_node,
40017d8c: e4 3f bf c0 std %l2, [ %fp + -64 ]
40017d90: f4 3f bf d0 std %i2, [ %fp + -48 ]
memcpy(DOTDOT_NODE_P(dot_dotdot), short_node,
40017d94: e4 3f bf e0 std %l2, [ %fp + -32 ]
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
40017d98: 40 00 0f da call 4001bd00 <memcpy>
40017d9c: f4 3f bf f0 std %i2, [ %fp + -16 ]
memcpy(MSDOS_DIR_NAME(DOTDOT_NODE_P(dot_dotdot)), MSDOS_DOTDOT_NAME,
40017da0: 03 10 00 a9 sethi %hi(0x4002a400), %g1
40017da4: d2 00 61 f4 ld [ %g1 + 0x1f4 ], %o1 ! 4002a5f4 <MSDOS_DOTDOT_NAME>
40017da8: 94 10 20 0b mov 0xb, %o2
40017dac: 40 00 0f d5 call 4001bd00 <memcpy>
40017db0: 90 07 bf e0 add %fp, -32, %o0
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
40017db4: c2 07 20 20 ld [ %i4 + 0x20 ], %g1
40017db8: 80 a0 60 01 cmp %g1, 1
40017dbc: 22 80 00 37 be,a 40017e98 <msdos_creat_node+0x44c>
40017dc0: c2 07 20 24 ld [ %i4 + 0x24 ], %g1
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
40017dc4: c2 07 20 1c ld [ %i4 + 0x1c ], %g1
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
40017dc8: 85 30 60 10 srl %g1, 0x10, %g2
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
40017dcc: 89 28 60 08 sll %g1, 8, %g4
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
40017dd0: 87 28 a0 08 sll %g2, 8, %g3
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
40017dd4: 83 28 60 10 sll %g1, 0x10, %g1
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
40017dd8: 85 30 a0 08 srl %g2, 8, %g2
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
40017ddc: 83 30 60 18 srl %g1, 0x18, %g1
CT_LE_W((uint16_t )(((parent_fat_fd->cln) & 0xFFFF0000)>>16));
40017de0: 84 10 c0 02 or %g3, %g2, %g2
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
40017de4: 82 11 00 01 or %g4, %g1, %g1
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) =
40017de8: c4 37 bf f4 sth %g2, [ %fp + -12 ]
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) =
40017dec: c2 37 bf fa sth %g1, [ %fp + -6 ]
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
40017df0: 98 07 bf c0 add %fp, -64, %o4
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
40017df4: d2 07 bf 6c ld [ %fp + -148 ], %o1
40017df8: c2 02 60 1c ld [ %o1 + 0x1c ], %g1
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
40017dfc: 85 30 60 10 srl %g1, 0x10, %g2
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
40017e00: 89 28 60 08 sll %g1, 8, %g4
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
40017e04: 87 28 a0 08 sll %g2, 8, %g3
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
40017e08: 83 28 60 10 sll %g1, 0x10, %g1
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
40017e0c: 85 30 a0 08 srl %g2, 8, %g2
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
40017e10: 83 30 60 18 srl %g1, 0x18, %g1
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
40017e14: 84 10 c0 02 or %g3, %g2, %g2
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
40017e18: 82 11 00 01 or %g4, %g1, %g1
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
40017e1c: 96 10 20 40 mov 0x40, %o3
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
40017e20: c2 37 bf da sth %g1, [ %fp + -38 ]
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
40017e24: 94 10 20 00 clr %o2
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
40017e28: c4 37 bf d4 sth %g2, [ %fp + -44 ]
ret = fat_file_write(&fs_info->fat, fat_fd, 0,
40017e2c: 7f ff f0 9e call 400140a4 <fat_file_write>
40017e30: 90 10 00 10 mov %l0, %o0
if (ret < 0)
40017e34: 80 a2 20 00 cmp %o0, 0
40017e38: 06 80 00 16 bl 40017e90 <msdos_creat_node+0x444>
<== NEVER TAKEN
40017e3c: d2 07 bf 6c ld [ %fp + -148 ], %o1
rc = fat_file_write_first_cluster_num(&fs_info->fat, fat_fd);
40017e40: 40 00 01 f3 call 4001860c <fat_file_write_first_cluster_num>
40017e44: 90 10 00 10 mov %l0, %o0
if (rc != RC_OK)
40017e48: ba 92 20 00 orcc %o0, 0, %i5
40017e4c: 02 80 00 1d be 40017ec0 <msdos_creat_node+0x474>
<== ALWAYS TAKEN
40017e50: d2 07 bf 6c ld [ %fp + -148 ], %o1
fat_file_close(&fs_info->fat, fat_fd);
40017e54: d2 07 bf 6c ld [ %fp + -148 ], %o1
<== NOT EXECUTED
40017e58: 7f ff ef 8d call 40013c8c <fat_file_close>
<== NOT EXECUTED
40017e5c: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
40017e60: 10 bf ff 71 b 40017c24 <msdos_creat_node+0x1d8>
<== NOT EXECUTED
40017e64: d0 06 20 14 ld [ %i0 + 0x14 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
40017e68: 40 00 0c b5 call 4001b13c <__errno>
<== NOT EXECUTED
40017e6c: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
40017e70: 82 10 20 5b mov 0x5b, %g1
<== NOT EXECUTED
40017e74: 10 bf ff 54 b 40017bc4 <msdos_creat_node+0x178>
<== NOT EXECUTED
40017e78: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EINVAL);
40017e7c: 40 00 0c b0 call 4001b13c <__errno>
<== NOT EXECUTED
40017e80: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
40017e84: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
40017e88: 10 bf ff 4f b 40017bc4 <msdos_creat_node+0x178>
<== NOT EXECUTED
40017e8c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rc = -1;
40017e90: 10 bf ff f1 b 40017e54 <msdos_creat_node+0x408>
<== NOT EXECUTED
40017e94: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
40017e98: 80 a0 60 00 cmp %g1, 0
40017e9c: 32 bf ff cb bne,a 40017dc8 <msdos_creat_node+0x37c>
<== NEVER TAKEN
40017ea0: c2 07 20 1c ld [ %i4 + 0x1c ], %g1
<== NOT EXECUTED
40017ea4: c2 0c 20 16 ldub [ %l0 + 0x16 ], %g1
40017ea8: 80 88 60 04 btst 4, %g1
40017eac: 22 bf ff c7 be,a 40017dc8 <msdos_creat_node+0x37c>
<== ALWAYS TAKEN
40017eb0: c2 07 20 1c ld [ %i4 + 0x1c ], %g1
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
40017eb4: c0 37 bf fa clrh [ %fp + -6 ]
<== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
40017eb8: 10 bf ff ce b 40017df0 <msdos_creat_node+0x3a4>
<== NOT EXECUTED
40017ebc: c0 37 bf f4 clrh [ %fp + -12 ]
<== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
40017ec0: 7f ff ef 73 call 40013c8c <fat_file_close>
40017ec4: 90 10 00 10 mov %l0, %o0
40017ec8: 30 bf ff 3f b,a 40017bc4 <msdos_creat_node+0x178>
return -1;
40017ecc: 10 bf ff 3e b 40017bc4 <msdos_creat_node+0x178>
<== NOT EXECUTED
40017ed0: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
40019fc0 <msdos_date_dos2unix>:
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40019fc0: 83 32 60 05 srl %o1, 5, %g1
if (lastdosdate != dd) {
40019fc4: 07 10 00 b4 sethi %hi(0x4002d000), %g3
40019fc8: da 10 e1 94 lduh [ %g3 + 0x194 ], %o5 ! 4002d194 <lastdosdate>
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40019fcc: 89 32 60 0b srl %o1, 0xb, %g4
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40019fd0: 84 08 60 3f and %g1, 0x3f, %g2
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40019fd4: 88 09 20 1f and %g4, 0x1f, %g4
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40019fd8: 83 28 a0 04 sll %g2, 4, %g1
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40019fdc: 88 59 27 08 smul %g4, 0x708, %g4
seconds = 2 * ((dt & MSDOS_DT_2SECONDS_MASK) >> MSDOS_DT_2SECONDS_SHIFT)
40019fe0: 92 0a 60 1f and %o1, 0x1f, %o1
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40019fe4: 82 20 40 02 sub %g1, %g2, %g1
if (lastdosdate != dd) {
40019fe8: 80 a3 40 08 cmp %o5, %o0
+ ((dt & MSDOS_DT_MINUTES_MASK) >> MSDOS_DT_MINUTES_SHIFT) * 60
40019fec: 83 28 60 01 sll %g1, 1, %g1
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
40019ff0: 88 01 00 01 add %g4, %g1, %g4
40019ff4: 88 01 00 09 add %g4, %o1, %g4
if (lastdosdate != dd) {
40019ff8: 02 80 00 34 be 4001a0c8 <msdos_date_dos2unix+0x108>
40019ffc: 89 29 20 01 sll %g4, 1, %g4
lastdosdate = dd;
4001a000: d0 30 e1 94 sth %o0, [ %g3 + 0x194 ]
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
4001a004: 99 32 20 09 srl %o0, 9, %o4
days = 0;
4001a008: 84 10 20 00 clr %g2
for (y = 0; y < year; y++)
4001a00c: 82 10 20 00 clr %g1
4001a010: 9a 8b 20 7f andcc %o4, 0x7f, %o5
4001a014: 12 80 00 08 bne 4001a034 <msdos_date_dos2unix+0x74>
<== ALWAYS TAKEN
4001a018: 86 10 21 6e mov 0x16e, %g3
months = year & 0x03 ? regyear : leapyear;
4001a01c: 10 80 00 0b b 4001a048 <msdos_date_dos2unix+0x88>
<== NOT EXECUTED
4001a020: 80 8b 20 03 btst 3, %o4
<== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
4001a024: 86 08 60 03 and %g1, 3, %g3
4001a028: 80 a0 00 03 cmp %g0, %g3
4001a02c: 86 60 3f ff subx %g0, -1, %g3
4001a030: 86 00 e1 6d add %g3, 0x16d, %g3
for (y = 0; y < year; y++)
4001a034: 82 00 60 01 inc %g1
4001a038: 80 a3 40 01 cmp %o5, %g1
4001a03c: 12 bf ff fa bne 4001a024 <msdos_date_dos2unix+0x64>
4001a040: 84 00 80 03 add %g2, %g3, %g2
months = year & 0x03 ? regyear : leapyear;
4001a044: 80 8b 20 03 btst 3, %o4
4001a048: 12 80 00 1e bne 4001a0c0 <msdos_date_dos2unix+0x100>
4001a04c: 03 10 00 af sethi %hi(0x4002bc00), %g1
4001a050: 03 10 00 af sethi %hi(0x4002bc00), %g1
4001a054: 82 10 63 c8 or %g1, 0x3c8, %g1 ! 4002bfc8 <leapyear>
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
4001a058: 87 32 20 05 srl %o0, 5, %g3
4001a05c: 86 08 e0 0f and %g3, 0xf, %g3
if (month == 0) {
4001a060: 80 a0 e0 01 cmp %g3, 1
4001a064: 28 80 00 0b bleu,a 4001a090 <msdos_date_dos2unix+0xd0>
4001a068: 82 0a 20 1f and %o0, 0x1f, %g1
4001a06c: 87 28 e0 01 sll %g3, 1, %g3
4001a070: 86 00 ff fe add %g3, -2, %g3
4001a074: 86 00 40 03 add %g1, %g3, %g3
days += months[m];
4001a078: da 10 40 00 lduh [ %g1 ], %o5
4001a07c: 82 00 60 02 add %g1, 2, %g1
for (m = 0; m < month - 1; m++)
4001a080: 80 a0 c0 01 cmp %g3, %g1
4001a084: 12 bf ff fd bne 4001a078 <msdos_date_dos2unix+0xb8>
<== NEVER TAKEN
4001a088: 84 00 80 0d add %g2, %o5, %g2
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
4001a08c: 82 0a 20 1f and %o0, 0x1f, %g1
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
4001a090: 11 00 00 54 sethi %hi(0x15000), %o0
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
4001a094: 82 00 7f ff add %g1, -1, %g1
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
4001a098: 90 12 21 80 or %o0, 0x180, %o0
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
4001a09c: 84 00 40 02 add %g1, %g2, %g2
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
4001a0a0: 03 10 00 b4 sethi %hi(0x4002d000), %g1
4001a0a4: 84 58 80 08 smul %g2, %o0, %g2
4001a0a8: 11 04 b3 a9 sethi %hi(0x12cea400), %o0
4001a0ac: 90 12 22 00 or %o0, 0x200, %o0 ! 12cea600 <RAM_SIZE+0x128ea600>
4001a0b0: 90 00 80 08 add %g2, %o0, %o0
4001a0b4: d0 20 61 90 st %o0, [ %g1 + 0x190 ]
}
4001a0b8: 81 c3 e0 08 retl
4001a0bc: 90 01 00 08 add %g4, %o0, %o0
months = year & 0x03 ? regyear : leapyear;
4001a0c0: 10 bf ff e6 b 4001a058 <msdos_date_dos2unix+0x98>
4001a0c4: 82 10 63 e0 or %g1, 0x3e0, %g1
4001a0c8: 03 10 00 b4 sethi %hi(0x4002d000), %g1
4001a0cc: d0 00 61 90 ld [ %g1 + 0x190 ], %o0 ! 4002d190 <lastseconds>
}
4001a0d0: 81 c3 e0 08 retl
4001a0d4: 90 01 00 08 add %g4, %o0, %o0
40019dfc <msdos_date_unix2dos>:
if (lasttime != t) {
40019dfc: 1b 10 00 b4 sethi %hi(0x4002d000), %o5
40019e00: c2 03 61 a0 ld [ %o5 + 0x1a0 ], %g1 ! 4002d1a0 <lasttime>
40019e04: 80 a0 40 08 cmp %g1, %o0
40019e08: 02 80 00 5a be 40019f70 <msdos_date_unix2dos+0x174>
40019e0c: 03 22 22 22 sethi %hi(0x88888800), %g1
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e10: 82 10 60 89 or %g1, 0x89, %g1 ! 88888889 <RAM_END+0x48488889>
40019e14: 80 52 00 01 umul %o0, %g1, %g0
40019e18: 87 40 00 00 rd %y, %g3
40019e1c: 97 30 e0 05 srl %g3, 5, %o3
40019e20: 80 52 c0 01 umul %o3, %g1, %g0
40019e24: 83 40 00 00 rd %y, %g1
40019e28: 89 30 60 05 srl %g1, 5, %g4
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019e2c: 05 24 68 ac sethi %hi(0x91a2b000), %g2
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e30: 83 29 20 04 sll %g4, 4, %g1
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019e34: 84 10 a3 c5 or %g2, 0x3c5, %g2
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e38: 82 20 40 04 sub %g1, %g4, %g1
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019e3c: 80 52 00 02 umul %o0, %g2, %g0
40019e40: 85 40 00 00 rd %y, %g2
40019e44: 19 2a aa aa sethi %hi(0xaaaaa800), %o4
40019e48: 85 30 a0 0b srl %g2, 0xb, %g2
40019e4c: 98 13 22 ab or %o4, 0x2ab, %o4
40019e50: 80 50 80 0c umul %g2, %o4, %g0
40019e54: 99 40 00 00 rd %y, %o4
40019e58: 89 33 20 04 srl %o4, 4, %g4
40019e5c: 87 29 20 01 sll %g4, 1, %g3
40019e60: 88 00 c0 04 add %g3, %g4, %g4
40019e64: 89 29 20 03 sll %g4, 3, %g4
40019e68: 84 20 80 04 sub %g2, %g4, %g2
40019e6c: 85 28 a0 0b sll %g2, 0xb, %g2
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e70: 83 28 60 02 sll %g1, 2, %g1
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40019e74: 87 2a e0 04 sll %o3, 4, %g3
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e78: 82 22 c0 01 sub %o3, %g1, %g1
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40019e7c: 86 20 c0 0b sub %g3, %o3, %g3
+ (((t / 60) % 60) << MSDOS_DT_MINUTES_SHIFT)
40019e80: 83 28 60 05 sll %g1, 5, %g1
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40019e84: 87 28 e0 02 sll %g3, 2, %g3
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019e88: 82 00 40 02 add %g1, %g2, %g1
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40019e8c: 84 22 00 03 sub %o0, %g3, %g2
40019e90: 85 30 a0 01 srl %g2, 1, %g2
lasttime = t;
40019e94: d0 23 61 a0 st %o0, [ %o5 + 0x1a0 ]
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019e98: 82 00 40 02 add %g1, %g2, %g1
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
40019e9c: 05 10 00 b4 sethi %hi(0x4002d000), %g2
40019ea0: c2 30 a1 96 sth %g1, [ %g2 + 0x196 ] ! 4002d196 <lastdtime>
+ (((t / 3600) % 24) << MSDOS_DT_HOURS_SHIFT);
40019ea4: 86 10 00 01 mov %g1, %g3
if (days != lastday) {
40019ea8: 05 10 00 b4 sethi %hi(0x4002d000), %g2
days = t / (SECONDSPERDAY);
40019eac: 03 30 8b 91 sethi %hi(0xc22e4400), %g1
if (days != lastday) {
40019eb0: c8 00 a1 9c ld [ %g2 + 0x19c ], %g4
days = t / (SECONDSPERDAY);
40019eb4: 82 10 61 07 or %g1, 0x107, %g1
40019eb8: 80 52 00 01 umul %o0, %g1, %g0
40019ebc: 91 40 00 00 rd %y, %o0
40019ec0: 03 10 00 b4 sethi %hi(0x4002d000), %g1
40019ec4: 91 32 20 10 srl %o0, 0x10, %o0
if (days != lastday) {
40019ec8: 80 a1 00 08 cmp %g4, %o0
40019ecc: 02 80 00 26 be 40019f64 <msdos_date_unix2dos+0x168>
40019ed0: c2 10 61 98 lduh [ %g1 + 0x198 ], %g1
lastday = days;
40019ed4: d0 20 a1 9c st %o0, [ %g2 + 0x19c ]
for (year = 1970;; year++) {
40019ed8: 10 80 00 03 b 40019ee4 <msdos_date_unix2dos+0xe8>
40019edc: 84 10 27 b2 mov 0x7b2, %g2
40019ee0: 84 00 a0 01 inc %g2
inc = year & 0x03 ? 365 : 366;
40019ee4: 88 08 a0 03 and %g2, 3, %g4
40019ee8: 80 a0 00 04 cmp %g0, %g4
40019eec: 82 60 3f ff subx %g0, -1, %g1
40019ef0: 82 00 61 6d add %g1, 0x16d, %g1
if (days < inc)
40019ef4: 80 a2 00 01 cmp %o0, %g1
40019ef8: 3a bf ff fa bcc,a 40019ee0 <msdos_date_unix2dos+0xe4>
40019efc: 90 22 00 01 sub %o0, %g1, %o0
months = year & 0x03 ? regyear : leapyear;
40019f00: 80 a1 20 00 cmp %g4, 0
40019f04: 02 80 00 22 be 40019f8c <msdos_date_unix2dos+0x190>
<== ALWAYS TAKEN
40019f08: 1b 10 00 af sethi %hi(0x4002bc00), %o5
40019f0c: 1b 10 00 af sethi %hi(0x4002bc00), %o5
<== NOT EXECUTED
40019f10: 9a 13 63 e0 or %o5, 0x3e0, %o5 ! 4002bfe0 <regyear>
<== NOT EXECUTED
for (month = 0; month < 12; month++) {
40019f14: 82 10 20 00 clr %g1
if (days < months[month])
40019f18: 89 28 60 01 sll %g1, 1, %g4
40019f1c: c8 13 40 04 lduh [ %o5 + %g4 ], %g4
40019f20: 80 a1 00 08 cmp %g4, %o0
40019f24: 18 80 00 1c bgu 40019f94 <msdos_date_unix2dos+0x198>
<== ALWAYS TAKEN
40019f28: 82 00 60 01 inc %g1
for (month = 0; month < 12; month++) {
40019f2c: 80 a0 60 0c cmp %g1, 0xc
<== NOT EXECUTED
40019f30: 12 bf ff fa bne 40019f18 <msdos_date_unix2dos+0x11c>
<== NOT EXECUTED
40019f34: 90 22 00 04 sub %o0, %g4, %o0
<== NOT EXECUTED
40019f38: 82 10 21 a0 mov 0x1a0, %g1
<== NOT EXECUTED
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40019f3c: 82 00 60 01 inc %g1
<== NOT EXECUTED
if (year > 1980)
40019f40: 80 a0 a7 bc cmp %g2, 0x7bc
<== NOT EXECUTED
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40019f44: 90 00 40 08 add %g1, %o0, %o0
<== NOT EXECUTED
if (year > 1980)
40019f48: 08 80 00 19 bleu 40019fac <msdos_date_unix2dos+0x1b0>
<== NOT EXECUTED
40019f4c: 82 10 00 08 mov %o0, %g1
<== NOT EXECUTED
lastddate += (year - 1980) <<
40019f50: 84 00 b8 44 add %g2, -1980, %g2
40019f54: 85 28 a0 09 sll %g2, 9, %g2
40019f58: 82 02 00 02 add %o0, %g2, %g1
40019f5c: 05 10 00 b4 sethi %hi(0x4002d000), %g2
40019f60: c2 30 a1 98 sth %g1, [ %g2 + 0x198 ] ! 4002d198 <lastddate>
*dtp = lastdtime;
40019f64: c6 32 80 00 sth %g3, [ %o2 ]
}
40019f68: 81 c3 e0 08 retl
40019f6c: c2 32 40 00 sth %g1, [ %o1 ]
40019f70: 03 10 00 b4 sethi %hi(0x4002d000), %g1
40019f74: c6 10 61 96 lduh [ %g1 + 0x196 ], %g3 ! 4002d196 <lastdtime>
*dtp = lastdtime;
40019f78: c6 32 80 00 sth %g3, [ %o2 ]
40019f7c: 03 10 00 b4 sethi %hi(0x4002d000), %g1
40019f80: c2 10 61 98 lduh [ %g1 + 0x198 ], %g1 ! 4002d198 <lastddate>
}
40019f84: 81 c3 e0 08 retl
40019f88: c2 32 40 00 sth %g1, [ %o1 ]
months = year & 0x03 ? regyear : leapyear;
40019f8c: 10 bf ff e2 b 40019f14 <msdos_date_unix2dos+0x118>
40019f90: 9a 13 63 c8 or %o5, 0x3c8, %o5
40019f94: 83 28 60 05 sll %g1, 5, %g1
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40019f98: 82 00 60 01 inc %g1
if (year > 1980)
40019f9c: 80 a0 a7 bc cmp %g2, 0x7bc
+ ((month + 1) << MSDOS_DD_MONTH_SHIFT);
40019fa0: 90 00 40 08 add %g1, %o0, %o0
if (year > 1980)
40019fa4: 18 bf ff eb bgu 40019f50 <msdos_date_unix2dos+0x154>
<== ALWAYS TAKEN
40019fa8: 82 10 00 08 mov %o0, %g1
*dtp = lastdtime;
40019fac: c6 32 80 00 sth %g3, [ %o2 ]
<== NOT EXECUTED
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
40019fb0: 05 10 00 b4 sethi %hi(0x4002d000), %g2
<== NOT EXECUTED
*ddp = lastddate;
40019fb4: c2 32 40 00 sth %g1, [ %o1 ]
<== NOT EXECUTED
}
40019fb8: 81 c3 e0 08 retl
<== NOT EXECUTED
40019fbc: d0 30 a1 98 sth %o0, [ %g2 + 0x198 ]
<== NOT EXECUTED
4002a3d8 <msdos_dir_handlers>:
4002a3d8: 40 01 2b d0 40 01 29 38 40 01 a8 4c 40 01 2c cc @.+.@.)8@..L@.,.
4002a3e8: 40 01 29 dc 40 01 2a 1c 40 01 ac c0 40 01 29 a4 @.).@.*.@...@.).
4002a3f8: 40 01 9c fc 40 01 9c fc 40 01 29 70 40 01 2b d8 @...@...@.)p@.+.
4002a408: 40 01 29 f8 40 01 2c 18 40 01 2c e8 40 01 2b 98 @.).@.,.@.,.@.+.
400188f8 <msdos_dir_is_empty>:
{
400188f8: 9d e3 bf a0 save %sp, -96, %sp
msdos_fs_info_t *fs_info = mt_entry->fs_info;
400188fc: e0 06 20 08 ld [ %i0 + 8 ], %l0
40018900: f8 14 00 00 lduh [ %l0 ], %i4
*ret_val = false;
40018904: c0 2e 80 00 clrb [ %i2 ]
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
40018908: 25 10 00 a9 sethi %hi(0x4002a400), %l2
4001890c: f0 04 20 bc ld [ %l0 + 0xbc ], %i0
(strncmp(MSDOS_DIR_NAME((entry)),
40018910: 27 10 00 a9 sethi %hi(0x4002a400), %l3
uint32_t j = 0, i = 0;
40018914: a8 10 20 00 clr %l4
40018918: b9 2f 20 10 sll %i4, 0x10, %i4
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
4001891c: a4 14 a0 f8 or %l2, 0xf8, %l2
(strncmp(MSDOS_DIR_NAME((entry)),
40018920: a6 14 e1 08 or %l3, 0x108, %l3
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * fs_info->fat.vol.bps,
40018924: 97 37 20 10 srl %i4, 0x10, %o3
40018928: 98 10 00 18 mov %i0, %o4
4001892c: 94 5a c0 14 smul %o3, %l4, %o2
40018930: 92 10 00 19 mov %i1, %o1
40018934: 7f ff ec 17 call 40013990 <fat_file_read>
40018938: 90 10 00 10 mov %l0, %o0
4001893c: 80 a2 20 00 cmp %o0, 0
40018940: 02 80 00 24 be 400189d0 <msdos_dir_is_empty+0xd8>
<== NEVER TAKEN
40018944: 80 a2 20 1f cmp %o0, 0x1f
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40018948: 04 80 00 26 ble 400189e0 <msdos_dir_is_empty+0xe8>
<== NEVER TAKEN
4001894c: b0 10 3f ff mov -1, %i0
assert(ret == fs_info->fat.vol.bps);
40018950: f8 14 00 00 lduh [ %l0 ], %i4
40018954: b9 2f 20 10 sll %i4, 0x10, %i4
40018958: a3 37 20 10 srl %i4, 0x10, %l1
4001895c: 80 a4 40 08 cmp %l1, %o0
40018960: 12 80 00 29 bne 40018a04 <msdos_dir_is_empty+0x10c>
<== NEVER TAKEN
40018964: 80 a4 60 00 cmp %l1, 0
40018968: f0 04 20 bc ld [ %l0 + 0xbc ], %i0
for (i = 0;
4001896c: 02 80 00 24 be 400189fc <msdos_dir_is_empty+0x104>
<== NEVER TAKEN
40018970: ba 10 00 18 mov %i0, %i5
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
40018974: f6 0f 40 00 ldub [ %i5 ], %i3
40018978: 80 a6 e0 e5 cmp %i3, 0xe5
4001897c: 22 80 00 1c be,a 400189ec <msdos_dir_is_empty+0xf4>
40018980: ba 07 60 20 add %i5, 0x20, %i5
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
40018984: c2 0f 60 0b ldub [ %i5 + 0xb ], %g1
40018988: 82 08 60 3f and %g1, 0x3f, %g1
4001898c: 80 a0 60 0f cmp %g1, 0xf
40018990: 02 80 00 16 be 400189e8 <msdos_dir_is_empty+0xf0>
40018994: 94 10 20 0b mov 0xb, %o2
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
40018998: 92 10 00 12 mov %l2, %o1
4001899c: 40 00 11 b0 call 4001d05c <strncmp>
400189a0: 90 10 00 1d mov %i5, %o0
MSDOS_ATTR_LFN) ||
400189a4: 80 a2 20 00 cmp %o0, 0
400189a8: 02 80 00 10 be 400189e8 <msdos_dir_is_empty+0xf0>
400189ac: 94 10 20 0b mov 0xb, %o2
(strncmp(MSDOS_DIR_NAME((entry)),
400189b0: 92 10 00 13 mov %l3, %o1
400189b4: 40 00 11 aa call 4001d05c <strncmp>
400189b8: 90 10 00 1d mov %i5, %o0
MSDOS_SHORT_NAME_LEN) == 0) ||
400189bc: 80 a2 20 00 cmp %o0, 0
400189c0: 02 80 00 0a be 400189e8 <msdos_dir_is_empty+0xf0>
400189c4: 80 a6 e0 00 cmp %i3, 0
if ((*MSDOS_DIR_NAME(entry)) ==
400189c8: 12 80 00 06 bne 400189e0 <msdos_dir_is_empty+0xe8>
400189cc: b0 10 20 00 clr %i0
*ret_val = true;
400189d0: 82 10 20 01 mov 1, %g1
400189d4: c2 2e 80 00 stb %g1, [ %i2 ]
return RC_OK;
400189d8: 81 c7 e0 08 ret
400189dc: 91 e8 20 00 restore %g0, 0, %o0
}
400189e0: 81 c7 e0 08 ret
400189e4: 81 e8 00 00 restore
400189e8: ba 07 60 20 add %i5, 0x20, %i5
for (i = 0;
400189ec: 82 27 40 18 sub %i5, %i0, %g1
400189f0: 80 a4 40 01 cmp %l1, %g1
400189f4: 38 bf ff e1 bgu,a 40018978 <msdos_dir_is_empty+0x80>
400189f8: f6 0f 40 00 ldub [ %i5 ], %i3
j++;
400189fc: 10 bf ff ca b 40018924 <msdos_dir_is_empty+0x2c>
40018a00: a8 05 20 01 inc %l4
assert(ret == fs_info->fat.vol.bps);
40018a04: 17 10 00 a9 sethi %hi(0x4002a400), %o3
<== NOT EXECUTED
40018a08: 15 10 00 a9 sethi %hi(0x4002a400), %o2
<== NOT EXECUTED
40018a0c: 11 10 00 a9 sethi %hi(0x4002a400), %o0
<== NOT EXECUTED
40018a10: 96 12 e0 78 or %o3, 0x78, %o3
<== NOT EXECUTED
40018a14: 94 12 a1 e0 or %o2, 0x1e0, %o2
<== NOT EXECUTED
40018a18: 92 10 23 c5 mov 0x3c5, %o1
<== NOT EXECUTED
40018a1c: 7f ff f3 a0 call 4001589c <__assert_func>
<== NOT EXECUTED
40018a20: 90 12 20 98 or %o0, 0x98, %o0
<== NOT EXECUTED
40018a24: 01 00 00 00 nop
<== NOT EXECUTED
4001a84c <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)
{
4001a84c: 9d e3 be 40 save %sp, -448, %sp
int rc = RC_OK;
int eno = 0;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
4001a850: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
4001a854: ea 00 60 08 ld [ %g1 + 8 ], %l5
rtems_dosfs_convert_control *converter = fs_info->converter;
4001a858: c2 05 60 c0 ld [ %l5 + 0xc0 ], %g1
const rtems_dosfs_convert_handler *convert_handler = converter->handler;
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
fat_file_fd_t *tmp_fat_fd = NULL;
struct dirent tmp_dirent;
size_t lfn_len = 0;
uint16_t *lfn_buf = converter->buffer.data;
4001a85c: c4 00 60 04 ld [ %g1 + 4 ], %g2
const rtems_dosfs_convert_handler *convert_handler = converter->handler;
4001a860: ec 00 40 00 ld [ %g1 ], %l6
rtems_dosfs_convert_control *converter = fs_info->converter;
4001a864: c2 27 be c0 st %g1, [ %fp + -320 ]
4001a868: 90 05 60 a4 add %l5, 0xa4, %o0
char *sfn_buf = converter->buffer.data;
const size_t buf_size = converter->buffer.size;
4001a86c: c2 00 60 08 ld [ %g1 + 8 ], %g1
uint16_t *lfn_buf = converter->buffer.data;
4001a870: c4 27 be c4 st %g2, [ %fp + -316 ]
* 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);
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
4001a874: b5 36 a0 03 srl %i2, 3, %i2
const size_t buf_size = converter->buffer.size;
4001a878: c2 27 be a8 st %g1, [ %fp + -344 ]
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
4001a87c: e8 06 20 14 ld [ %i0 + 0x14 ], %l4
4001a880: d0 27 be ac st %o0, [ %fp + -340 ]
fat_file_fd_t *tmp_fat_fd = NULL;
4001a884: c0 27 be cc clr [ %fp + -308 ]
_Mutex_recursive_Acquire( mutex );
4001a888: 7f ff bc 51 call 400099cc <_Mutex_recursive_Acquire>
4001a88c: c0 27 be d0 clr [ %fp + -304 ]
start = iop->offset / sizeof(struct dirent);
4001a890: d0 1e 00 00 ldd [ %i0 ], %o0
4001a894: 94 10 20 00 clr %o2
4001a898: 7f ff 9d a4 call 40001f28 <__divdi3>
4001a89c: 96 10 21 18 mov 0x118, %o3
{
4001a8a0: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
4001a8a4: 03 03 a8 3a sethi %hi(0xea0e800), %g1
* 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 :
4001a8a8: c4 05 20 20 ld [ %l4 + 0x20 ], %g2
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
4001a8ac: 82 10 62 0f or %g1, 0x20f, %g1
start = iop->offset / sizeof(struct dirent);
4001a8b0: a0 10 00 09 mov %o1, %l0
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
4001a8b4: 80 56 80 01 umul %i2, %g1, %g0
4001a8b8: b5 40 00 00 rd %y, %i2
fat_fd->fat_file_size :
4001a8bc: 80 a0 a0 01 cmp %g2, 1
count = (count / sizeof(struct dirent)) * sizeof(struct dirent);
4001a8c0: b5 36 a0 01 srl %i2, 1, %i2
fat_fd->fat_file_size :
4001a8c4: 02 80 00 e5 be 4001ac58 <msdos_dir_read+0x40c>
4001a8c8: b4 5e a1 18 smul %i2, 0x118, %i2
4001a8cc: c2 05 60 08 ld [ %l5 + 8 ], %g1
4001a8d0: c2 27 be b0 st %g1, [ %fp + -336 ]
fs_info->fat.vol.bpc;
while (count > 0 && cmpltd >= 0)
4001a8d4: 80 a6 a0 00 cmp %i2, 0
4001a8d8: 02 80 00 f8 be 4001acb8 <msdos_dir_read+0x46c>
<== NEVER TAKEN
4001a8dc: 03 00 00 3f sethi %hi(0xfc00), %g1
uint8_t lfn_checksum = 0;
4001a8e0: c0 2f be bf clrb [ %fp + -321 ]
* convert dir entry from fixed 8+3 format (without dot)
* to 0..8 + 1dot + 0..3 format
*/
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
sfn_buf, entry); /* src text */
eno = (*convert_handler->codepage_to_utf8) (
4001a8e4: 82 10 63 ff or %g1, 0x3ff, %g1
size_t lfn_len = 0;
4001a8e8: c0 27 be b4 clr [ %fp + -332 ]
while (count > 0 && cmpltd >= 0)
4001a8ec: ae 10 20 00 clr %l7
eno = (*convert_handler->codepage_to_utf8) (
4001a8f0: c2 27 be b8 st %g1, [ %fp + -328 ]
int lfn_entries = 0;
4001a8f4: a2 10 20 00 clr %l1
uint32_t lfn_start = FAT_FILE_SHORT_NAME;
4001a8f8: b6 10 3f ff mov -1, %i3
ssize_t cmpltd = 0;
4001a8fc: ba 10 20 00 clr %i5
ret = fat_file_read(&fs_info->fat, fat_fd, (j * bts2rd),
4001a900: d8 05 60 bc ld [ %l5 + 0xbc ], %o4
4001a904: d6 07 be b0 ld [ %fp + -336 ], %o3
4001a908: 94 10 00 17 mov %l7, %o2
4001a90c: 92 10 00 14 mov %l4, %o1
4001a910: 7f ff e4 20 call 40013990 <fat_file_read>
4001a914: 90 10 00 15 mov %l5, %o0
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001a918: 80 a2 20 1f cmp %o0, 0x1f
4001a91c: 04 80 00 e0 ble 4001ac9c <msdos_dir_read+0x450>
<== NEVER TAKEN
4001a920: b8 10 00 08 mov %o0, %i4
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001a924: 88 38 00 1d xnor %g0, %i5, %g4
4001a928: 80 a7 60 00 cmp %i5, 0
4001a92c: 06 80 00 47 bl 4001aa48 <msdos_dir_read+0x1fc>
<== NEVER TAKEN
4001a930: 9f 31 20 1f srl %g4, 0x1f, %o7
char* entry = (char*) fs_info->cl_buf + i;
4001a934: e4 05 60 bc ld [ %l5 + 0xbc ], %l2
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
4001a938: c2 0c 80 00 ldub [ %l2 ], %g1
4001a93c: 9e 88 60 ff andcc %g1, 0xff, %o7
4001a940: 02 80 00 28 be 4001a9e0 <msdos_dir_read+0x194>
<== NEVER TAKEN
4001a944: 01 00 00 00 nop
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001a948: a6 10 20 00 clr %l3 ! 0 <PROM_START>
lfn_start = FAT_FILE_SHORT_NAME;
4001a94c: b2 10 3f ff mov -1, %i1
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
4001a950: 80 a3 e0 e5 cmp %o7, 0xe5
4001a954: 22 80 00 17 be,a 4001a9b0 <msdos_dir_read+0x164>
4001a958: a6 04 e0 20 add %l3, 0x20, %l3
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
4001a95c: de 0c a0 0b ldub [ %l2 + 0xb ], %o7
4001a960: 80 8b e0 08 btst 8, %o7
4001a964: 02 80 00 3e be 4001aa5c <msdos_dir_read+0x210>
4001a968: 98 0b e0 3f and %o7, 0x3f, %o4
4001a96c: 80 a3 20 0f cmp %o4, 0xf
4001a970: 32 80 00 10 bne,a 4001a9b0 <msdos_dir_read+0x164>
4001a974: a6 04 e0 20 add %l3, 0x20, %l3
if (lfn_start == FAT_FILE_SHORT_NAME)
4001a978: 80 a6 ff ff cmp %i3, -1
4001a97c: 02 80 00 8a be 4001aba4 <msdos_dir_read+0x358>
4001a980: 96 10 20 00 clr %o3
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
4001a984: c2 0c 80 00 ldub [ %l2 ], %g1
4001a988: 82 08 60 3f and %g1, 0x3f, %g1
4001a98c: 80 a0 40 11 cmp %g1, %l1
4001a990: 12 80 00 06 bne 4001a9a8 <msdos_dir_read+0x15c>
4001a994: c2 0f be bf ldub [ %fp + -321 ], %g1
MSDOS_LAST_LONG_ENTRY_MASK)) ||
4001a998: de 0c a0 0d ldub [ %l2 + 0xd ], %o7
4001a99c: 80 a3 c0 01 cmp %o7, %g1
4001a9a0: 02 80 00 14 be 4001a9f0 <msdos_dir_read+0x1a4>
<== ALWAYS TAKEN
4001a9a4: c2 07 be a8 ld [ %fp + -344 ], %g1
lfn_start = FAT_FILE_SHORT_NAME;
4001a9a8: b6 10 3f ff mov -1, %i3
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001a9ac: a6 04 e0 20 add %l3, 0x20, %l3
4001a9b0: 83 31 20 1f srl %g4, 0x1f, %g1
4001a9b4: 80 a4 c0 1c cmp %l3, %i4
4001a9b8: 1a 80 00 24 bcc 4001aa48 <msdos_dir_read+0x1fc>
4001a9bc: 9e 10 00 01 mov %g1, %o7
4001a9c0: 80 a0 60 00 cmp %g1, 0
4001a9c4: 02 80 00 22 be 4001aa4c <msdos_dir_read+0x200>
<== NEVER TAKEN
4001a9c8: c2 07 be b0 ld [ %fp + -336 ], %g1
char* entry = (char*) fs_info->cl_buf + i;
4001a9cc: d2 05 60 bc ld [ %l5 + 0xbc ], %o1
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
4001a9d0: c2 0a 40 13 ldub [ %o1 + %l3 ], %g1
4001a9d4: 9e 88 60 ff andcc %g1, 0xff, %o7
4001a9d8: 12 bf ff de bne 4001a950 <msdos_dir_read+0x104>
4001a9dc: a4 02 40 13 add %o1, %l3, %l2
_Mutex_recursive_Release( mutex );
4001a9e0: 7f ff bc 20 call 40009a60 <_Mutex_recursive_Release>
4001a9e4: d0 07 be ac ld [ %fp + -340 ], %o0
j++;
}
msdos_fs_unlock(fs_info);
return cmpltd;
}
4001a9e8: 81 c7 e0 08 ret
4001a9ec: 91 e8 00 1d restore %g0, %i5, %o0
lfn_entries--;
4001a9f0: a2 04 7f ff add %l1, -1, %l1
offset_lfn = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
4001a9f4: 95 2c 60 01 sll %l1, 1, %o2
4001a9f8: 94 02 80 11 add %o2, %l1, %o2
4001a9fc: 95 2a a0 02 sll %o2, 2, %o2
4001aa00: 94 02 80 11 add %o2, %l1, %o2
&lfn_buf[offset_lfn],
4001aa04: 93 2a a0 01 sll %o2, 1, %o1
lfn_len += msdos_get_utf16_string_from_long_entry (
4001aa08: 94 20 40 0a sub %g1, %o2, %o2
4001aa0c: c2 07 be c4 ld [ %fp + -316 ], %g1
4001aa10: c8 27 be a4 st %g4, [ %fp + -348 ]
4001aa14: 92 00 40 09 add %g1, %o1, %o1
4001aa18: 96 0a e0 01 and %o3, 1, %o3
4001aa1c: 7f ff f8 03 call 40018a28 <msdos_get_utf16_string_from_long_entry>
4001aa20: 90 10 00 12 mov %l2, %o0
4001aa24: c2 07 be b4 ld [ %fp + -332 ], %g1
4001aa28: 82 00 40 08 add %g1, %o0, %g1
4001aa2c: c2 27 be b4 st %g1, [ %fp + -332 ]
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001aa30: a6 04 e0 20 add %l3, 0x20, %l3
4001aa34: c8 07 be a4 ld [ %fp + -348 ], %g4
4001aa38: 83 31 20 1f srl %g4, 0x1f, %g1
4001aa3c: 80 a4 c0 1c cmp %l3, %i4
4001aa40: 0a bf ff e0 bcs 4001a9c0 <msdos_dir_read+0x174>
4001aa44: 9e 10 00 01 mov %g1, %o7
4001aa48: c2 07 be b0 ld [ %fp + -336 ], %g1
while (count > 0 && cmpltd >= 0)
4001aa4c: 80 8b e0 ff btst 0xff, %o7
4001aa50: 12 bf ff ac bne 4001a900 <msdos_dir_read+0xb4>
<== ALWAYS TAKEN
4001aa54: ae 05 c0 01 add %l7, %g1, %l7
4001aa58: 30 bf ff e2 b,a 4001a9e0 <msdos_dir_read+0x194>
<== NOT EXECUTED
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
4001aa5c: 80 a3 20 0f cmp %o4, 0xf
4001aa60: 02 bf ff c6 be 4001a978 <msdos_dir_read+0x12c>
<== NEVER TAKEN
4001aa64: 80 a4 20 00 cmp %l0, 0
if (start)
4001aa68: 02 80 00 05 be 4001aa7c <msdos_dir_read+0x230>
4001aa6c: 98 07 be d0 add %fp, -304, %o4
start--;
4001aa70: a0 04 3f ff add %l0, -1, %l0
lfn_start = FAT_FILE_SHORT_NAME;
4001aa74: 10 bf ff ce b 4001a9ac <msdos_dir_read+0x160>
4001aa78: b6 10 3f ff mov -1, %i3
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
4001aa7c: 96 10 00 17 mov %l7, %o3
4001aa80: 94 10 20 01 mov 1, %o2
4001aa84: 92 10 00 14 mov %l4, %o1
4001aa88: 7f ff e4 b6 call 40013d60 <fat_file_ioctl>
4001aa8c: 90 10 00 15 mov %l5, %o0
if (rc != RC_OK)
4001aa90: 80 a2 20 00 cmp %o0, 0
4001aa94: 12 80 00 7c bne 4001ac84 <msdos_dir_read+0x438>
<== NEVER TAKEN
4001aa98: c2 07 be d0 ld [ %fp + -304 ], %g1
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
4001aa9c: f2 27 be e0 st %i1, [ %fp + -288 ]
rc = fat_file_open(&fs_info->fat, &dir_pos, &tmp_fat_fd);
4001aaa0: 94 07 be cc add %fp, -308, %o2
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
4001aaa4: f2 27 be e4 st %i1, [ %fp + -284 ]
4001aaa8: 92 07 be d8 add %fp, -296, %o1
dir_pos.sname.cln = cur_cln;
4001aaac: c2 27 be d8 st %g1, [ %fp + -296 ]
rc = fat_file_open(&fs_info->fat, &dir_pos, &tmp_fat_fd);
4001aab0: 90 10 00 15 mov %l5, %o0
4001aab4: 7f ff e2 ce call 400135ec <fat_file_open>
4001aab8: e6 27 be dc st %l3, [ %fp + -292 ]
if (rc != RC_OK)
4001aabc: 80 a2 20 00 cmp %o0, 0
4001aac0: 12 80 00 71 bne 4001ac84 <msdos_dir_read+0x438>
<== NEVER TAKEN
4001aac4: c2 07 be cc ld [ %fp + -308 ], %g1
tmp_dirent.d_ino = tmp_fat_fd->ino;
4001aac8: c2 00 60 0c ld [ %g1 + 0xc ], %g1
tmp_dirent.d_off = start + cmpltd;
4001aacc: 89 3f 60 1f sra %i5, 0x1f, %g4
4001aad0: fa 27 be f4 st %i5, [ %fp + -268 ]
if (lfn_entries == 0 &&
4001aad4: 80 a6 ff ff cmp %i3, -1
tmp_dirent.d_off = start + cmpltd;
4001aad8: c8 27 be f0 st %g4, [ %fp + -272 ]
tmp_dirent.d_reclen = sizeof(struct dirent);
4001aadc: 88 10 21 18 mov 0x118, %g4
tmp_dirent.d_ino = tmp_fat_fd->ino;
4001aae0: c2 27 be e8 st %g1, [ %fp + -280 ]
if (lfn_entries == 0 &&
4001aae4: 02 80 00 05 be 4001aaf8 <msdos_dir_read+0x2ac>
4001aae8: c8 37 be f8 sth %g4, [ %fp + -264 ]
4001aaec: 80 a4 60 00 cmp %l1, 0
4001aaf0: 02 80 00 44 be 4001ac00 <msdos_dir_read+0x3b4>
<== ALWAYS TAKEN
4001aaf4: 01 00 00 00 nop
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
4001aaf8: f6 07 be c4 ld [ %fp + -316 ], %i3
size_t len = sizeof(tmp_dirent.d_name) - 1;
4001aafc: 82 10 20 ff mov 0xff, %g1
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
4001ab00: 92 10 00 12 mov %l2, %o1
size_t len = sizeof(tmp_dirent.d_name) - 1;
4001ab04: c2 27 be d4 st %g1, [ %fp + -300 ]
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
4001ab08: 7f ff f7 d0 call 40018a48 <msdos_format_dirent_with_dot>
4001ab0c: 90 10 00 1b mov %i3, %o0
eno = (*convert_handler->codepage_to_utf8) (
4001ab10: c4 07 be b8 ld [ %fp + -328 ], %g2
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
4001ab14: d0 37 be fa sth %o0, [ %fp + -262 ]
eno = (*convert_handler->codepage_to_utf8) (
4001ab18: 94 0a 00 02 and %o0, %g2, %o2
4001ab1c: c2 05 a0 04 ld [ %l6 + 4 ], %g1
4001ab20: d0 07 be c0 ld [ %fp + -320 ], %o0
4001ab24: 98 07 be d4 add %fp, -300, %o4
4001ab28: 96 07 be fc add %fp, -260, %o3
4001ab2c: 9f c0 40 00 call %g1
4001ab30: 92 10 00 1b mov %i3, %o1
if ( 0 == eno ) {
4001ab34: a4 92 20 00 orcc %o0, 0, %l2
4001ab38: 12 80 00 2c bne 4001abe8 <msdos_dir_read+0x39c>
<== NEVER TAKEN
4001ab3c: c2 07 be d4 ld [ %fp + -300 ], %g1
tmp_dirent.d_name[len] = '\0';
4001ab40: 88 07 80 01 add %fp, %g1, %g4
tmp_dirent.d_namlen = len;
4001ab44: c2 37 be fa sth %g1, [ %fp + -262 ]
4001ab48: b6 10 3f ff mov -1, %i3
tmp_dirent.d_name[len] = '\0';
4001ab4c: c0 29 3e fc clrb [ %g4 + -260 ]
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
4001ab50: 94 10 21 18 mov 0x118, %o2
4001ab54: c2 07 a0 48 ld [ %fp + 0x48 ], %g1
4001ab58: 90 00 40 1d add %g1, %i5, %o0
4001ab5c: 40 00 04 69 call 4001bd00 <memcpy>
4001ab60: 92 07 be e8 add %fp, -280, %o1
iop->offset = iop->offset + sizeof(struct dirent);
4001ab64: d8 1e 00 00 ldd [ %i0 ], %o4
4001ab68: 96 83 61 18 addcc %o5, 0x118, %o3
4001ab6c: 94 43 20 00 addx %o4, 0, %o2
4001ab70: d4 3e 00 00 std %o2, [ %i0 ]
rc = fat_file_close(&fs_info->fat, tmp_fat_fd);
4001ab74: 90 10 00 15 mov %l5, %o0
4001ab78: 7f ff e4 45 call 40013c8c <fat_file_close>
4001ab7c: d2 07 be cc ld [ %fp + -308 ], %o1
cmpltd += (sizeof(struct dirent));
4001ab80: ba 07 61 18 add %i5, 0x118, %i5
if (rc != RC_OK)
4001ab84: 80 a2 20 00 cmp %o0, 0
4001ab88: 12 80 00 3f bne 4001ac84 <msdos_dir_read+0x438>
<== NEVER TAKEN
4001ab8c: b4 06 be e8 add %i2, -280, %i2
if (count <= 0)
4001ab90: 80 a6 a0 00 cmp %i2, 0
4001ab94: 02 bf ff 93 be 4001a9e0 <msdos_dir_read+0x194>
<== ALWAYS TAKEN
4001ab98: 88 38 00 1d xnor %g0, %i5, %g4
for (i = 0; i < ret && cmpltd >= 0; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001ab9c: 10 bf ff 85 b 4001a9b0 <msdos_dir_read+0x164>
<== NOT EXECUTED
4001aba0: a6 04 e0 20 add %l3, 0x20, %l3
<== NOT EXECUTED
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
4001aba4: 80 88 60 40 btst 0x40, %g1
4001aba8: 22 bf ff 82 be,a 4001a9b0 <msdos_dir_read+0x164>
4001abac: a6 04 e0 20 add %l3, 0x20, %l3
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
4001abb0: a2 08 60 3f and %g1, 0x3f, %l1
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
4001abb4: c2 0c a0 0d ldub [ %l2 + 0xd ], %g1
4001abb8: c8 27 be a4 st %g4, [ %fp + -348 ]
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
4001abbc: 94 10 21 00 mov 0x100, %o2
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
4001abc0: c2 2f be bf stb %g1, [ %fp + -321 ]
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
4001abc4: 92 10 20 00 clr %o1
4001abc8: 90 07 be fc add %fp, -260, %o0
4001abcc: 40 00 04 89 call 4001bdf0 <memset>
4001abd0: c0 27 be b4 clr [ %fp + -332 ]
lfn_start =
4001abd4: b6 05 c0 13 add %l7, %l3, %i3
is_first_entry = true;
4001abd8: 96 10 20 01 mov 1, %o3
lfn_start =
4001abdc: b7 36 e0 05 srl %i3, 5, %i3
4001abe0: 10 bf ff 69 b 4001a984 <msdos_dir_read+0x138>
4001abe4: c8 07 be a4 ld [ %fp + -348 ], %g4
errno = eno;
4001abe8: 40 00 01 55 call 4001b13c <__errno>
<== NOT EXECUTED
4001abec: b6 10 3f ff mov -1, %i3
<== NOT EXECUTED
4001abf0: e4 22 00 00 st %l2, [ %o0 ]
<== NOT EXECUTED
cmpltd = -1;
4001abf4: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
4001abf8: 10 bf ff 6d b 4001a9ac <msdos_dir_read+0x160>
<== NOT EXECUTED
4001abfc: 88 10 20 00 clr %g4
<== NOT EXECUTED
lfn_checksum == msdos_lfn_checksum(entry)) {
4001ac00: 7f ff f5 6f call 400181bc <msdos_lfn_checksum>
4001ac04: 90 10 00 12 mov %l2, %o0
if (lfn_entries == 0 &&
4001ac08: c2 0f be bf ldub [ %fp + -321 ], %g1
4001ac0c: 80 a2 00 01 cmp %o0, %g1
4001ac10: 12 bf ff ba bne 4001aaf8 <msdos_dir_read+0x2ac>
<== NEVER TAKEN
4001ac14: 82 10 20 ff mov 0xff, %g1
size_t len = sizeof(tmp_dirent.d_name) - 1;
4001ac18: c2 27 be d4 st %g1, [ %fp + -300 ]
eno = (*convert_handler->utf16_to_utf8) (
4001ac1c: 98 07 be d4 add %fp, -300, %o4
4001ac20: c2 05 a0 0c ld [ %l6 + 0xc ], %g1
4001ac24: d4 07 be b4 ld [ %fp + -332 ], %o2
4001ac28: d2 07 be c4 ld [ %fp + -316 ], %o1
4001ac2c: d0 07 be c0 ld [ %fp + -320 ], %o0
4001ac30: 9f c0 40 00 call %g1
4001ac34: 96 07 be fc add %fp, -260, %o3
if (eno == 0) {
4001ac38: 80 a2 20 00 cmp %o0, 0
4001ac3c: 32 bf ff b0 bne,a 4001aafc <msdos_dir_read+0x2b0>
4001ac40: f6 07 be c4 ld [ %fp + -316 ], %i3
tmp_dirent.d_namlen = len;
4001ac44: c2 07 be d4 ld [ %fp + -300 ], %g1
tmp_dirent.d_name[len] = '\0';
4001ac48: 88 07 80 01 add %fp, %g1, %g4
tmp_dirent.d_namlen = len;
4001ac4c: c2 37 be fa sth %g1, [ %fp + -262 ]
tmp_dirent.d_name[len] = '\0';
4001ac50: 10 bf ff c0 b 4001ab50 <msdos_dir_read+0x304>
4001ac54: c0 29 3e fc clrb [ %g4 + -260 ]
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
4001ac58: c2 05 20 24 ld [ %l4 + 0x24 ], %g1
4001ac5c: 80 a0 60 00 cmp %g1, 0
4001ac60: 32 bf ff 1c bne,a 4001a8d0 <msdos_dir_read+0x84>
<== NEVER TAKEN
4001ac64: c2 05 60 08 ld [ %l5 + 8 ], %g1
<== NOT EXECUTED
4001ac68: c2 0d 60 16 ldub [ %l5 + 0x16 ], %g1
4001ac6c: 80 88 60 03 btst 3, %g1
4001ac70: 22 bf ff 18 be,a 4001a8d0 <msdos_dir_read+0x84>
<== NEVER TAKEN
4001ac74: c2 05 60 08 ld [ %l5 + 8 ], %g1
<== NOT EXECUTED
fat_fd->fat_file_size :
4001ac78: c2 05 20 18 ld [ %l4 + 0x18 ], %g1
4001ac7c: 10 bf ff 16 b 4001a8d4 <msdos_dir_read+0x88>
4001ac80: c2 27 be b0 st %g1, [ %fp + -336 ]
4001ac84: 82 10 00 08 mov %o0, %g1
<== NOT EXECUTED
4001ac88: d0 07 be ac ld [ %fp + -340 ], %o0
<== NOT EXECUTED
4001ac8c: 7f ff bb 75 call 40009a60 <_Mutex_recursive_Release>
<== NOT EXECUTED
4001ac90: ba 10 00 01 mov %g1, %i5
<== NOT EXECUTED
}
4001ac94: 81 c7 e0 08 ret
<== NOT EXECUTED
4001ac98: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
4001ac9c: 7f ff bb 71 call 40009a60 <_Mutex_recursive_Release>
<== NOT EXECUTED
4001aca0: d0 07 be ac ld [ %fp + -340 ], %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
4001aca4: 40 00 01 26 call 4001b13c <__errno>
<== NOT EXECUTED
4001aca8: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
4001acac: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
4001acb0: 10 bf ff 4e b 4001a9e8 <msdos_dir_read+0x19c>
<== NOT EXECUTED
4001acb4: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
ssize_t cmpltd = 0;
4001acb8: 10 bf ff 4a b 4001a9e0 <msdos_dir_read+0x194>
<== NOT EXECUTED
4001acbc: ba 10 20 00 clr %i5
<== NOT EXECUTED
4001af3c <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)
{
4001af3c: 9d e3 bf 98 save %sp, -104, %sp
int rc = RC_OK;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
4001af40: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
4001af44: f8 00 60 08 ld [ %g1 + 8 ], %i4
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
4001af48: fa 06 20 14 ld [ %i0 + 0x14 ], %i5
4001af4c: b6 07 20 a4 add %i4, 0xa4, %i3
_Mutex_recursive_Acquire( mutex );
4001af50: 7f ff ba 9f call 400099cc <_Mutex_recursive_Acquire>
4001af54: 90 10 00 1b mov %i3, %o0
uint32_t old_length;
msdos_fs_lock(fs_info);
old_length = fat_fd->fat_file_size;
if (length < old_length) {
4001af58: 82 10 20 00 clr %g1
4001af5c: 80 a0 40 19 cmp %g1, %i1
4001af60: 14 80 00 23 bg 4001afec <msdos_file_ftruncate+0xb0>
<== NEVER TAKEN
4001af64: e0 07 60 18 ld [ %i5 + 0x18 ], %l0
4001af68: 02 80 00 1f be 4001afe4 <msdos_file_ftruncate+0xa8>
<== ALWAYS TAKEN
4001af6c: 80 a4 00 1a cmp %l0, %i2
rc = fat_file_truncate(&fs_info->fat, fat_fd, length);
} else {
uint32_t new_length;
rc = fat_file_extend(&fs_info->fat,
4001af70: 98 07 bf fc add %fp, -4, %o4
<== NOT EXECUTED
4001af74: 96 10 00 1a mov %i2, %o3
4001af78: 94 10 20 01 mov 1, %o2
4001af7c: 92 10 00 1d mov %i5, %o1
4001af80: 7f ff e3 ad call 40013e34 <fat_file_extend>
4001af84: 90 10 00 1c mov %i4, %o0
fat_fd,
true,
length,
&new_length);
if (rc == RC_OK && length != new_length) {
4001af88: b0 92 20 00 orcc %o0, 0, %i0
4001af8c: 12 80 00 12 bne 4001afd4 <msdos_file_ftruncate+0x98>
<== NEVER TAKEN
4001af90: 80 a6 00 19 cmp %i0, %i1
4001af94: 12 80 00 28 bne 4001b034 <msdos_file_ftruncate+0xf8>
<== NEVER TAKEN
4001af98: c2 07 bf fc ld [ %fp + -4 ], %g1
4001af9c: 80 a0 40 1a cmp %g1, %i2
4001afa0: 12 80 00 26 bne 4001b038 <msdos_file_ftruncate+0xfc>
<== NEVER TAKEN
4001afa4: 94 10 00 10 mov %l0, %o2
4001afa8: c2 0f 60 30 ldub [ %i5 + 0x30 ], %g1
4001afac: 82 10 60 02 or %g1, 2, %g1
fat_fd->fat_file_size = s;
4001afb0: f4 27 60 18 st %i2, [ %i5 + 0x18 ]
}
if (rc == RC_OK)
{
fat_file_set_file_size(fat_fd, length);
fat_file_set_ctime_mtime(fat_fd, time(NULL));
4001afb4: 90 10 20 00 clr %o0
4001afb8: 40 00 12 c8 call 4001fad8 <time>
4001afbc: c2 2f 60 30 stb %g1, [ %i5 + 0x30 ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001afc0: c2 0f 60 30 ldub [ %i5 + 0x30 ], %g1
4001afc4: 82 10 60 02 or %g1, 2, %g1
fat_fd->ctime = t;
4001afc8: d0 3f 60 40 std %o0, [ %i5 + 0x40 ]
fat_fd->mtime = t;
4001afcc: d0 3f 60 48 std %o0, [ %i5 + 0x48 ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001afd0: c2 2f 60 30 stb %g1, [ %i5 + 0x30 ]
_Mutex_recursive_Release( mutex );
4001afd4: 7f ff ba a3 call 40009a60 <_Mutex_recursive_Release>
4001afd8: 90 10 00 1b mov %i3, %o0
}
msdos_fs_unlock(fs_info);
return rc;
}
4001afdc: 81 c7 e0 08 ret
4001afe0: 81 e8 00 00 restore
if (length < old_length) {
4001afe4: 08 bf ff e4 bleu 4001af74 <msdos_file_ftruncate+0x38>
4001afe8: 98 07 bf fc add %fp, -4, %o4
rc = fat_file_truncate(&fs_info->fat, fat_fd, length);
4001afec: 94 10 00 1a mov %i2, %o2
4001aff0: 92 10 00 1d mov %i5, %o1
4001aff4: 7f ff e2 e3 call 40013b80 <fat_file_truncate>
4001aff8: 90 10 00 1c mov %i4, %o0
if (rc == RC_OK)
4001affc: b0 92 20 00 orcc %o0, 0, %i0
4001b000: 12 bf ff f5 bne 4001afd4 <msdos_file_ftruncate+0x98>
<== NEVER TAKEN
4001b004: 90 10 20 00 clr %o0
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001b008: c2 0f 60 30 ldub [ %i5 + 0x30 ], %g1
4001b00c: 82 10 60 02 or %g1, 2, %g1
fat_fd->fat_file_size = s;
4001b010: f4 27 60 18 st %i2, [ %i5 + 0x18 ]
fat_file_set_ctime_mtime(fat_fd, time(NULL));
4001b014: 40 00 12 b1 call 4001fad8 <time>
4001b018: c2 2f 60 30 stb %g1, [ %i5 + 0x30 ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001b01c: c2 0f 60 30 ldub [ %i5 + 0x30 ], %g1
4001b020: 82 10 60 02 or %g1, 2, %g1
fat_fd->ctime = t;
4001b024: d0 3f 60 40 std %o0, [ %i5 + 0x40 ]
fat_fd->mtime = t;
4001b028: d0 3f 60 48 std %o0, [ %i5 + 0x48 ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001b02c: 10 bf ff ea b 4001afd4 <msdos_file_ftruncate+0x98>
4001b030: c2 2f 60 30 stb %g1, [ %i5 + 0x30 ]
fat_file_truncate(&fs_info->fat, fat_fd, old_length);
4001b034: 94 10 00 10 mov %l0, %o2
<== NOT EXECUTED
4001b038: 92 10 00 1d mov %i5, %o1
<== NOT EXECUTED
4001b03c: 7f ff e2 d1 call 40013b80 <fat_file_truncate>
<== NOT EXECUTED
4001b040: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
errno = ENOSPC;
4001b044: 40 00 00 3e call 4001b13c <__errno>
<== NOT EXECUTED
4001b048: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4001b04c: 82 10 20 1c mov 0x1c, %g1
<== NOT EXECUTED
4001b050: 10 bf ff e1 b 4001afd4 <msdos_file_ftruncate+0x98>
<== NOT EXECUTED
4001b054: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4002a418 <msdos_file_handlers>:
4002a418: 40 01 2b d0 40 01 29 38 40 01 ad 48 40 01 ad ac @.+.@.)8@..H@...
4002a428: 40 01 29 dc 40 01 2a 60 40 01 ae a0 40 01 af 3c @.).@.*`@...@..<
4002a438: 40 01 b0 58 40 01 9c fc 40 01 29 70 40 01 2b d8 @..X@...@.)p@.+.
4002a448: 40 01 29 f8 40 01 2c 18 40 01 2c e8 40 01 2b 98 @.).@.,.@.,.@.+.
4002a458: 20 2b 2c 3b 3d 5b 5d 00 24 25 27 2d 5f 40 7e 60 +,;=[].$%'-_@~`
4002a468: 21 28 29 7b 7d 5e 23 26 00 00 00 00 00 00 00 00 !(){}^#&........
4002a478: 72 65 74 20 3d 3d 20 66 73 5f 69 6e 66 6f 2d 3e ret == fs_info->
4002a488: 66 61 74 2e 76 6f 6c 2e 62 70 73 00 00 00 00 00 fat.vol.bps.....
4002a498: 2f 68 6f 6d 65 2f 6c 75 6e 61 74 69 63 2f 64 65 /home/lunatic/de
4002a4a8: 76 65 6c 6f 70 6d 65 6e 74 2f 72 74 65 6d 73 2f velopment/rtems/
4002a4b8: 6b 65 72 6e 65 6c 2f 72 74 65 6d 73 2f 63 2f 73 kernel/rtems/c/s
4002a4c8: 72 63 2f 2e 2e 2f 2e 2e 2f 63 70 75 6b 69 74 2f rc/../../cpukit/
4002a4d8: 6c 69 62 66 73 2f 73 72 63 2f 64 6f 73 66 73 2f libfs/src/dosfs/
4002a4e8: 6d 73 64 6f 73 5f 6d 69 73 63 2e 63 00 00 00 00 msdos_misc.c....
4002a4f8: 2e 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 . .....
4002a508: 2e 2e 20 20 20 20 20 20 20 20 20 00 00 00 00 00 .. .....
4002a518: 6e 61 6d 65 5f 75 74 66 38 5f 6c 65 6e 20 3e 20 name_utf8_len >
4002a528: 30 00 00 00 00 00 00 00 62 79 74 65 73 5f 72 65 0.......bytes_re
4002a538: 61 64 20 3d 3d 20 62 74 73 32 72 64 00 00 00 00 ad == bts2rd....
4002a548: 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF
...
4002a560: 72 65 74 20 3d 3d 20 62 74 73 32 72 64 00 00 00 ret == bts2rd...
4001b058 <msdos_file_sync>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_sync(rtems_libio_t *iop)
{
4001b058: 9d e3 bf a0 save %sp, -96, %sp
int rc = RC_OK;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
4001b05c: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
4001b060: fa 00 60 08 ld [ %g1 + 8 ], %i5
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
4001b064: f6 06 20 14 ld [ %i0 + 0x14 ], %i3
4001b068: b8 07 60 a4 add %i5, 0xa4, %i4
_Mutex_recursive_Acquire( mutex );
4001b06c: 7f ff ba 58 call 400099cc <_Mutex_recursive_Acquire>
4001b070: 90 10 00 1c mov %i4, %o0
msdos_fs_lock(fs_info);
rc = fat_file_update(&fs_info->fat, fat_fd);
4001b074: 92 10 00 1b mov %i3, %o1
4001b078: 7f ff e2 25 call 4001390c <fat_file_update>
4001b07c: 90 10 00 1d mov %i5, %o0
if (rc != RC_OK)
4001b080: b0 92 20 00 orcc %o0, 0, %i0
4001b084: 12 80 00 04 bne 4001b094 <msdos_file_sync+0x3c>
<== NEVER TAKEN
4001b088: 01 00 00 00 nop
{
msdos_fs_unlock(fs_info);
return rc;
}
rc = fat_sync(&fs_info->fat);
4001b08c: 7f ff e8 8f call 400152c8 <fat_sync>
4001b090: 90 10 00 1d mov %i5, %o0
_Mutex_recursive_Release( mutex );
4001b094: 7f ff ba 73 call 40009a60 <_Mutex_recursive_Release>
4001b098: 90 10 00 1c mov %i4, %o0
msdos_fs_unlock(fs_info);
return RC_OK;
}
4001b09c: 81 c7 e0 08 ret
4001b0a0: 81 e8 00 00 restore
4001adac <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)
{
4001adac: 9d e3 bf a0 save %sp, -96, %sp
ssize_t ret = 0;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
4001adb0: c2 06 20 20 ld [ %i0 + 0x20 ], %g1
4001adb4: f6 00 60 08 ld [ %g1 + 8 ], %i3
fat_file_fd_t *fat_fd = iop->pathinfo.node_access;
4001adb8: f8 06 20 14 ld [ %i0 + 0x14 ], %i4
4001adbc: a0 06 e0 a4 add %i3, 0xa4, %l0
_Mutex_recursive_Acquire( mutex );
4001adc0: 7f ff bb 03 call 400099cc <_Mutex_recursive_Acquire>
4001adc4: 90 10 00 10 mov %l0, %o0
{
4001adc8: ba 10 00 18 mov %i0, %i5
4001adcc: c2 06 20 08 ld [ %i0 + 8 ], %g1
msdos_fs_lock(fs_info);
if (rtems_libio_iop_is_append(iop))
4001add0: 80 88 62 00 btst 0x200, %g1
4001add4: 32 80 00 24 bne,a 4001ae64 <msdos_file_write+0xb8>
4001add8: d4 07 20 18 ld [ %i4 + 0x18 ], %o2
4001addc: d4 06 20 04 ld [ %i0 + 4 ], %o2
iop->offset = fat_fd->fat_file_size;
ret = fat_file_write(&fs_info->fat, fat_fd, iop->offset, count,
4001ade0: 98 10 00 19 mov %i1, %o4
4001ade4: 96 10 00 1a mov %i2, %o3
4001ade8: 92 10 00 1c mov %i4, %o1
4001adec: 7f ff e4 ae call 400140a4 <fat_file_write>
4001adf0: 90 10 00 1b mov %i3, %o0
buffer);
if (ret < 0)
4001adf4: b0 92 20 00 orcc %o0, 0, %i0
4001adf8: 06 80 00 25 bl 4001ae8c <msdos_file_write+0xe0>
4001adfc: 85 3e 20 1f sra %i0, 0x1f, %g2
/*
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
iop->offset += ret;
4001ae00: f4 1f 40 00 ldd [ %i5 ], %i2
4001ae04: 9a 86 00 1b addcc %i0, %i3, %o5
4001ae08: 98 40 80 1a addx %g2, %i2, %o4
4001ae0c: d8 3f 40 00 std %o4, [ %i5 ]
if (iop->offset > fat_fd->fat_file_size)
4001ae10: 80 a3 20 00 cmp %o4, 0
4001ae14: 04 80 00 17 ble 4001ae70 <msdos_file_write+0xc4>
<== ALWAYS TAKEN
4001ae18: c2 07 20 18 ld [ %i4 + 0x18 ], %g1
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001ae1c: c2 0f 20 30 ldub [ %i4 + 0x30 ], %g1
<== NOT EXECUTED
4001ae20: 82 10 60 02 or %g1, 2, %g1
fat_file_set_file_size(fat_fd, (uint32_t) iop->offset);
4001ae24: da 27 20 18 st %o5, [ %i4 + 0x18 ]
4001ae28: c2 2f 20 30 stb %g1, [ %i4 + 0x30 ]
if (ret > 0)
4001ae2c: 80 a6 20 00 cmp %i0, 0
4001ae30: 02 80 00 09 be 4001ae54 <msdos_file_write+0xa8>
<== NEVER TAKEN
4001ae34: 01 00 00 00 nop
fat_file_set_ctime_mtime(fat_fd, time(NULL));
4001ae38: 40 00 13 28 call 4001fad8 <time>
4001ae3c: 90 10 20 00 clr %o0 ! 0 <PROM_START>
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001ae40: c2 0f 20 30 ldub [ %i4 + 0x30 ], %g1
4001ae44: 82 10 60 02 or %g1, 2, %g1
fat_fd->ctime = t;
4001ae48: d0 3f 20 40 std %o0, [ %i4 + 0x40 ]
fat_fd->mtime = t;
4001ae4c: d0 3f 20 48 std %o0, [ %i4 + 0x48 ]
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001ae50: c2 2f 20 30 stb %g1, [ %i4 + 0x30 ]
_Mutex_recursive_Release( mutex );
4001ae54: 7f ff bb 03 call 40009a60 <_Mutex_recursive_Release>
4001ae58: 90 10 00 10 mov %l0, %o0
msdos_fs_unlock(fs_info);
return ret;
}
4001ae5c: 81 c7 e0 08 ret
4001ae60: 81 e8 00 00 restore
iop->offset = fat_fd->fat_file_size;
4001ae64: d4 26 20 04 st %o2, [ %i0 + 4 ]
4001ae68: 10 bf ff de b 4001ade0 <msdos_file_write+0x34>
4001ae6c: c0 26 00 00 clr [ %i0 ]
if (iop->offset > fat_fd->fat_file_size)
4001ae70: 12 bf ff f0 bne 4001ae30 <msdos_file_write+0x84>
<== NEVER TAKEN
4001ae74: 80 a6 20 00 cmp %i0, 0
4001ae78: 80 a3 40 01 cmp %o5, %g1
4001ae7c: 08 bf ff ed bleu 4001ae30 <msdos_file_write+0x84>
4001ae80: 80 a6 20 00 cmp %i0, 0
fat_fd->flags |= FAT_FILE_META_DATA_CHANGED;
4001ae84: 10 bf ff e7 b 4001ae20 <msdos_file_write+0x74>
4001ae88: c2 0f 20 30 ldub [ %i4 + 0x30 ], %g1
return -1;
4001ae8c: b0 10 3f ff mov -1, %i0
4001ae90: 7f ff ba f4 call 40009a60 <_Mutex_recursive_Release>
4001ae94: 90 10 00 10 mov %l0, %o0
4001ae98: 81 c7 e0 08 ret
4001ae9c: 81 e8 00 00 restore
4001a0d8 <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)
{
4001a0d8: 9d e3 bf 98 save %sp, -104, %sp
ssize_t returned_size = 0;
int eno = 0;
size_t name_size;
size_t dest_size = long_name_size;
4001a0dc: f8 27 bf fc st %i4, [ %fp + -4 ]
returned_size = msdos_filename_process_dot_names (
4001a0e0: 96 10 00 1c mov %i4, %o3
4001a0e4: 94 10 00 1b mov %i3, %o2
4001a0e8: 92 10 00 1a mov %i2, %o1
4001a0ec: 7f ff ff 1f call 40019d68 <msdos_filename_process_dot_names>
4001a0f0: 90 10 00 19 mov %i1, %o0
utf8_name,
utf8_name_size,
long_name,
long_name_size);
if (returned_size == 0) {
4001a0f4: 80 a2 20 00 cmp %o0, 0
4001a0f8: 12 80 00 12 bne 4001a140 <msdos_filename_utf8_to_long_name_for_compare+0x68>
<== NEVER TAKEN
4001a0fc: 94 10 00 1a mov %i2, %o2
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
4001a100: 80 a6 a0 00 cmp %i2, 0
4001a104: 14 80 00 15 bg 4001a158 <msdos_filename_utf8_to_long_name_for_compare+0x80>
<== ALWAYS TAKEN
4001a108: 82 06 bf ff add %i2, -1, %g1
name_size = msdos_filename_delete_trailing_dots (
&utf8_name[0],
utf8_name_size);
if (name_size > 0) {
4001a10c: 80 a2 a0 00 cmp %o2, 0
<== NOT EXECUTED
4001a110: 02 80 00 18 be 4001a170 <msdos_filename_utf8_to_long_name_for_compare+0x98>
<== NEVER TAKEN
4001a114: 98 07 bf fc add %fp, -4, %o4
eno = (*converter->handler->utf8_normalize_and_fold) (
4001a118: c2 06 00 00 ld [ %i0 ], %g1
4001a11c: c2 00 60 10 ld [ %g1 + 0x10 ], %g1
4001a120: 96 10 00 1b mov %i3, %o3
4001a124: 92 10 00 19 mov %i1, %o1
4001a128: 9f c0 40 00 call %g1
4001a12c: 90 10 00 18 mov %i0, %o0
converter,
utf8_name,
name_size,
long_name,
&dest_size);
if (eno == 0) {
4001a130: ba 92 20 00 orcc %o0, 0, %i5
4001a134: 12 80 00 10 bne 4001a174 <msdos_filename_utf8_to_long_name_for_compare+0x9c>
<== NEVER TAKEN
4001a138: 01 00 00 00 nop
returned_size = (ssize_t)dest_size;
4001a13c: d0 07 bf fc ld [ %fp + -4 ], %o0
errno = eno;
returned_size = -1;
}
return returned_size;
}
4001a140: 81 c7 e0 08 ret
4001a144: 91 e8 00 08 restore %g0, %o0, %o0
i -= UTF8_FULL_STOP_SIZE;
4001a148: 82 00 7f ff add %g1, -1, %g1
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
4001a14c: 80 a0 7f ff cmp %g1, -1
4001a150: 02 bf ff f0 be 4001a110 <msdos_filename_utf8_to_long_name_for_compare+0x38>
<== NEVER TAKEN
4001a154: 80 a2 a0 00 cmp %o2, 0
&& filename_utf8[i] == UTF8_FULL_STOP;) {
4001a158: c4 0e 40 01 ldub [ %i1 + %g1 ], %g2
4001a15c: 80 a0 a0 2e cmp %g2, 0x2e
4001a160: 22 bf ff fa be,a 4001a148 <msdos_filename_utf8_to_long_name_for_compare+0x70>
4001a164: 94 10 00 01 mov %g1, %o2
if (name_size > 0) {
4001a168: 10 bf ff ea b 4001a110 <msdos_filename_utf8_to_long_name_for_compare+0x38>
4001a16c: 80 a2 a0 00 cmp %o2, 0
eno = EINVAL;
4001a170: ba 10 20 16 mov 0x16, %i5
<== NOT EXECUTED
errno = eno;
4001a174: 40 00 03 f2 call 4001b13c <__errno>
<== NOT EXECUTED
4001a178: 01 00 00 00 nop
<== NOT EXECUTED
4001a17c: fa 22 00 00 st %i5, [ %o0 ]
<== NOT EXECUTED
return returned_size;
4001a180: 10 bf ff f0 b 4001a140 <msdos_filename_utf8_to_long_name_for_compare+0x68>
<== NOT EXECUTED
4001a184: 90 10 3f ff mov -1, %o0
<== NOT EXECUTED
4001a2c8 <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)
{
4001a2c8: 9d e3 bf 98 save %sp, -104, %sp
size_t name_size_tmp;
int i;
uint16_t c;
unsigned int chars_written;
name_size_tmp = long_name_size;
4001a2cc: f8 27 bf fc st %i4, [ %fp + -4 ]
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
4001a2d0: 80 a6 a0 00 cmp %i2, 0
4001a2d4: 14 80 00 07 bg 4001a2f0 <msdos_filename_utf8_to_long_name_for_save+0x28>
<== ALWAYS TAKEN
4001a2d8: 82 06 bf ff add %i2, -1, %g1
4001a2dc: 30 80 00 0a b,a 4001a304 <msdos_filename_utf8_to_long_name_for_save+0x3c>
<== NOT EXECUTED
i -= UTF8_FULL_STOP_SIZE;
4001a2e0: 82 00 7f ff add %g1, -1, %g1
for ( i = size_returned - UTF8_FULL_STOP_SIZE;
4001a2e4: 80 a0 7f ff cmp %g1, -1
4001a2e8: 02 80 00 07 be 4001a304 <msdos_filename_utf8_to_long_name_for_save+0x3c>
<== NEVER TAKEN
4001a2ec: 80 a6 a0 00 cmp %i2, 0
&& filename_utf8[i] == UTF8_FULL_STOP;) {
4001a2f0: c4 0e 40 01 ldub [ %i1 + %g1 ], %g2
4001a2f4: 80 a0 a0 2e cmp %g2, 0x2e
4001a2f8: 22 bf ff fa be,a 4001a2e0 <msdos_filename_utf8_to_long_name_for_save+0x18>
4001a2fc: b4 10 00 01 mov %g1, %i2
name_size = msdos_filename_delete_trailing_dots (
&utf8_name[0],
utf8_name_size);
if (name_size > 0) {
4001a300: 80 a6 a0 00 cmp %i2, 0
4001a304: 02 80 00 64 be 4001a494 <msdos_filename_utf8_to_long_name_for_save+0x1cc>
<== NEVER TAKEN
4001a308: 98 07 bf fc add %fp, -4, %o4
/*
* Finally convert from UTF-8 to UTF-16
*/
eno = (*converter->handler->utf8_to_utf16) (
4001a30c: c2 06 00 00 ld [ %i0 ], %g1
4001a310: c2 00 60 08 ld [ %g1 + 8 ], %g1
4001a314: 96 10 00 1b mov %i3, %o3
4001a318: 94 10 00 1a mov %i2, %o2
4001a31c: 92 10 00 19 mov %i1, %o1
4001a320: 9f c0 40 00 call %g1
4001a324: 90 10 00 18 mov %i0, %o0
converter,
utf8_name,
name_size,
&long_name[0],
&name_size_tmp);
if (eno == 0) {
4001a328: ba 92 20 00 orcc %o0, 0, %i5
4001a32c: 12 80 00 3b bne 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
<== NEVER TAKEN
4001a330: c8 07 bf fc ld [ %fp + -4 ], %g4
if (name_size_tmp <= (MSDOS_NAME_MAX_LNF_LEN * MSDOS_NAME_LFN_BYTES_PER_CHAR))
4001a334: 80 a1 21 fe cmp %g4, 0x1fe
4001a338: 38 80 00 38 bgu,a 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
4001a33c: ba 10 20 5b mov 0x5b, %i5
if ( eno == 0 )
{
/*
* Validate the characters and assign them to the UTF-16 file name
*/
for ( i = 0;
4001a340: 80 a1 20 00 cmp %g4, 0
4001a344: 02 80 00 56 be 4001a49c <msdos_filename_utf8_to_long_name_for_save+0x1d4>
<== NEVER TAKEN
4001a348: 86 10 00 1b mov %i3, %g3
retval = codepage_valid_char_map[char_num];
4001a34c: 1f 10 00 a9 sethi %hi(0x4002a400), %o7
switch ( char_num )
4001a350: 31 10 00 68 sethi %hi(0x4001a000), %i0
retval = codepage_valid_char_map[char_num];
4001a354: 9e 13 e2 08 or %o7, 0x208, %o7
switch ( char_num )
4001a358: b0 16 21 88 or %i0, 0x188, %i0
uint16_t char_num = CF_LE_W( utf16_character );
4001a35c: c4 10 c0 00 lduh [ %g3 ], %g2
4001a360: 83 28 a0 08 sll %g2, 8, %g1
4001a364: 85 30 a0 08 srl %g2, 8, %g2
4001a368: 82 10 40 02 or %g1, %g2, %g1
if ( char_num <= 0x00ff ) {
4001a36c: b5 28 60 10 sll %g1, 0x10, %i2
4001a370: b3 36 a0 10 srl %i2, 0x10, %i1
4001a374: 80 a6 60 ff cmp %i1, 0xff
4001a378: 18 80 00 0d bgu 4001a3ac <msdos_filename_utf8_to_long_name_for_save+0xe4>
4001a37c: 84 10 00 01 mov %g1, %g2
switch ( char_num )
4001a380: 82 00 7f d5 add %g1, -43, %g1
4001a384: 83 28 60 10 sll %g1, 0x10, %g1
4001a388: 83 30 60 10 srl %g1, 0x10, %g1
4001a38c: 80 a0 60 4f cmp %g1, 0x4f
4001a390: 18 80 00 05 bgu 4001a3a4 <msdos_filename_utf8_to_long_name_for_save+0xdc>
4001a394: 83 28 60 02 sll %g1, 2, %g1
4001a398: c2 06 00 01 ld [ %i0 + %g1 ], %g1
4001a39c: 81 c0 40 00 jmp %g1
4001a3a0: 01 00 00 00 nop
4001a3a4: b5 36 a0 10 srl %i2, 0x10, %i2
retval = codepage_valid_char_map[char_num];
4001a3a8: c4 0b c0 1a ldub [ %o7 + %i2 ], %g2
return CT_LE_W( retval );
4001a3ac: 83 28 a0 08 sll %g2, 8, %g1
4001a3b0: 85 28 a0 10 sll %g2, 0x10, %g2
4001a3b4: 85 30 a0 18 srl %g2, 0x18, %g2
4001a3b8: 84 10 40 02 or %g1, %g2, %g2
name_size
&& (c = msdos_get_valid_utf16_filename_character ( long_name[i]) );
4001a3bc: 83 28 a0 10 sll %g2, 0x10, %g1
4001a3c0: 80 a0 60 00 cmp %g1, 0
4001a3c4: 02 80 00 1a be 4001a42c <msdos_filename_utf8_to_long_name_for_save+0x164>
4001a3c8: 80 a1 20 02 cmp %g4, 2
++i ) {
long_name[i] = c;
4001a3cc: c4 30 c0 00 sth %g2, [ %g3 ]
returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR;
4001a3d0: ba 07 60 02 add %i5, 2, %i5
for ( i = 0;
4001a3d4: 88 81 3f fe addcc %g4, -2, %g4
4001a3d8: 12 bf ff e1 bne 4001a35c <msdos_filename_utf8_to_long_name_for_save+0x94>
4001a3dc: 86 00 e0 02 add %g3, 2, %g3
4001a3e0: 85 3f 60 01 sra %i5, 1, %g2
4001a3e4: 83 28 a0 01 sll %g2, 1, %g1
4001a3e8: 82 00 7f fe add %g1, -2, %g1
returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR;
}
else if ( name_size != 0 )
eno = EINVAL;
chars_written = returned_size / MSDOS_NAME_LFN_BYTES_PER_CHAR;
if ( long_name [chars_written - 1] != UTF16_NULL
4001a3ec: c2 16 c0 01 lduh [ %i3 + %g1 ], %g1
4001a3f0: 80 a0 60 00 cmp %g1, 0
4001a3f4: 02 80 00 2d be 4001a4a8 <msdos_filename_utf8_to_long_name_for_save+0x1e0>
<== NEVER TAKEN
4001a3f8: 82 07 60 02 add %i5, 2, %g1
&& (returned_size + UTF16_NULL_SIZE ) <= long_name_size ) {
4001a3fc: 80 a0 40 1c cmp %g1, %i4
4001a400: 18 80 00 04 bgu 4001a410 <msdos_filename_utf8_to_long_name_for_save+0x148>
<== NEVER TAKEN
4001a404: b0 10 00 1d mov %i5, %i0
long_name[chars_written] = UTF16_NULL;
4001a408: 85 28 a0 01 sll %g2, 1, %g2
4001a40c: c0 36 c0 02 clrh [ %i3 + %g2 ]
4001a410: 81 c7 e0 08 ret
4001a414: 81 e8 00 00 restore
}
else
eno = EINVAL;
if ( eno != 0 ) {
errno = eno;
4001a418: 40 00 03 49 call 4001b13c <__errno>
4001a41c: b0 10 3f ff mov -1, %i0
4001a420: fa 22 00 00 st %i5, [ %o0 ]
4001a424: 81 c7 e0 08 ret
4001a428: 81 e8 00 00 restore
if ( name_size == UTF16_NULL_SIZE && c == UTF16_NULL ) {
4001a42c: 12 80 00 0c bne 4001a45c <msdos_filename_utf8_to_long_name_for_save+0x194>
<== ALWAYS TAKEN
4001a430: b0 07 60 02 add %i5, 2, %i0
long_name[i] = c;
4001a434: c0 30 c0 00 clrh [ %g3 ]
<== NOT EXECUTED
chars_written = returned_size / MSDOS_NAME_LFN_BYTES_PER_CHAR;
4001a438: 85 3e 20 01 sra %i0, 1, %g2
<== NOT EXECUTED
if ( long_name [chars_written - 1] != UTF16_NULL
4001a43c: 83 28 a0 01 sll %g2, 1, %g1
<== NOT EXECUTED
4001a440: 82 00 7f fe add %g1, -2, %g1
<== NOT EXECUTED
4001a444: c2 16 c0 01 lduh [ %i3 + %g1 ], %g1
<== NOT EXECUTED
4001a448: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
4001a44c: 12 80 00 19 bne 4001a4b0 <msdos_filename_utf8_to_long_name_for_save+0x1e8>
<== NOT EXECUTED
4001a450: ba 07 60 04 add %i5, 4, %i5
<== NOT EXECUTED
returned_size = -1;
}
return returned_size;
}
4001a454: 81 c7 e0 08 ret
<== NOT EXECUTED
4001a458: 81 e8 00 00 restore
<== NOT EXECUTED
4001a45c: 85 3f 60 01 sra %i5, 1, %g2
if ( long_name [chars_written - 1] != UTF16_NULL
4001a460: 83 28 a0 01 sll %g2, 1, %g1
4001a464: 82 00 7f fe add %g1, -2, %g1
4001a468: c2 16 c0 01 lduh [ %i3 + %g1 ], %g1
4001a46c: 80 a0 60 00 cmp %g1, 0
4001a470: 22 bf ff ea be,a 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
<== NEVER TAKEN
4001a474: ba 10 20 16 mov 0x16, %i5
<== NOT EXECUTED
&& (returned_size + UTF16_NULL_SIZE ) <= long_name_size ) {
4001a478: ba 07 60 02 add %i5, 2, %i5
4001a47c: 80 a7 40 1c cmp %i5, %i4
4001a480: 18 bf ff e6 bgu 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
<== NEVER TAKEN
4001a484: ba 10 20 16 mov 0x16, %i5
long_name[chars_written] = UTF16_NULL;
4001a488: 85 28 a0 01 sll %g2, 1, %g2
4001a48c: 10 bf ff e3 b 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
4001a490: c0 36 c0 02 clrh [ %i3 + %g2 ]
eno = EINVAL;
4001a494: 10 bf ff e1 b 4001a418 <msdos_filename_utf8_to_long_name_for_save+0x150>
<== NOT EXECUTED
4001a498: ba 10 20 16 mov 0x16, %i5
<== NOT EXECUTED
for ( i = 0;
4001a49c: 84 10 20 00 clr %g2
<== NOT EXECUTED
4001a4a0: 10 bf ff d3 b 4001a3ec <msdos_filename_utf8_to_long_name_for_save+0x124>
<== NOT EXECUTED
4001a4a4: 82 10 3f fe mov -2, %g1
<== NOT EXECUTED
}
4001a4a8: 81 c7 e0 08 ret
<== NOT EXECUTED
4001a4ac: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
&& (returned_size + UTF16_NULL_SIZE ) <= long_name_size ) {
4001a4b0: 80 a7 00 1d cmp %i4, %i5
<== NOT EXECUTED
4001a4b4: 1a bf ff d6 bcc 4001a40c <msdos_filename_utf8_to_long_name_for_save+0x144>
<== NOT EXECUTED
4001a4b8: 85 28 a0 01 sll %g2, 1, %g2
<== NOT EXECUTED
4001a4bc: 81 c7 e0 08 ret
<== NOT EXECUTED
4001a4c0: 81 e8 00 00 restore
<== NOT EXECUTED
4001a4c4 <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)
{
4001a4c4: 9d e3 bf 68 save %sp, -152, %sp
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);
4001a4c8: 82 10 20 30 mov 0x30, %g1
returned_size = msdos_filename_process_dot_names (
4001a4cc: 96 10 00 1c mov %i4, %o3
size_t name_size_tmp = sizeof(name_normalized_buf);
4001a4d0: c2 27 bf cc st %g1, [ %fp + -52 ]
returned_size = msdos_filename_process_dot_names (
4001a4d4: 94 10 00 1b mov %i3, %o2
4001a4d8: 92 10 00 1a mov %i2, %o1
4001a4dc: 7f ff fe 23 call 40019d68 <msdos_filename_process_dot_names>
4001a4e0: 90 10 00 19 mov %i1, %o0
utf8_name,
utf8_name_size,
short_name,
short_name_size);
if (returned_size == 0) {
4001a4e4: ba 92 20 00 orcc %o0, 0, %i5
4001a4e8: 12 80 00 1e bne 4001a560 <msdos_filename_utf8_to_short_name_for_compare+0x9c>
4001a4ec: 80 a6 a0 00 cmp %i2, 0
while ( *name_size >= UTF8_FULL_STOP_SIZE
4001a4f0: 32 80 00 07 bne,a 4001a50c <msdos_filename_utf8_to_short_name_for_compare+0x48>
<== ALWAYS TAKEN
4001a4f4: c2 0e 40 00 ldub [ %i1 ], %g1
if ( eno == 0 ) {
memcpy (&dest_ptr[0], &name_ptr[0], name_size);
returned_size = name_size;
}
} else
eno = EINVAL;
4001a4f8: 10 80 00 17 b 4001a554 <msdos_filename_utf8_to_short_name_for_compare+0x90>
<== NOT EXECUTED
4001a4fc: b8 10 20 16 mov 0x16, %i4
<== NOT EXECUTED
while ( *name_size >= UTF8_FULL_STOP_SIZE
4001a500: 02 bf ff fe be 4001a4f8 <msdos_filename_utf8_to_short_name_for_compare+0x34>
<== NOT EXECUTED
4001a504: b2 06 60 01 inc %i1
<== NOT EXECUTED
&& **name_utf8 == UTF8_FULL_STOP) {
4001a508: c2 0e 40 00 ldub [ %i1 ], %g1
<== NOT EXECUTED
4001a50c: 80 a0 60 2e cmp %g1, 0x2e
4001a510: 22 bf ff fc be,a 4001a500 <msdos_filename_utf8_to_short_name_for_compare+0x3c>
<== NEVER TAKEN
4001a514: b4 86 bf ff addcc %i2, -1, %i2
<== NOT EXECUTED
eno = (*converter->handler->utf8_normalize_and_fold) (
4001a518: c2 06 00 00 ld [ %i0 ], %g1
4001a51c: c2 00 60 10 ld [ %g1 + 0x10 ], %g1
4001a520: 98 07 bf cc add %fp, -52, %o4
4001a524: 96 07 bf d0 add %fp, -48, %o3
4001a528: 94 10 00 1a mov %i2, %o2
4001a52c: 92 10 00 19 mov %i1, %o1
4001a530: 9f c0 40 00 call %g1
4001a534: 90 10 00 18 mov %i0, %o0
name_size = name_size_tmp;
4001a538: fa 07 bf cc ld [ %fp + -52 ], %i5
if ( eno == ENOMEM ) {
4001a53c: 80 a2 20 0c cmp %o0, 0xc
4001a540: 02 80 00 0a be 4001a568 <msdos_filename_utf8_to_short_name_for_compare+0xa4>
<== NEVER TAKEN
4001a544: b8 10 00 08 mov %o0, %i4
if ( eno == 0 ) {
4001a548: 80 a7 20 00 cmp %i4, 0
4001a54c: 02 80 00 08 be 4001a56c <msdos_filename_utf8_to_short_name_for_compare+0xa8>
<== ALWAYS TAKEN
4001a550: 94 10 00 1d mov %i5, %o2
}
if ( eno != 0 ) {
errno = eno;
4001a554: 40 00 02 fa call 4001b13c <__errno>
<== NOT EXECUTED
4001a558: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
4001a55c: f8 22 00 00 st %i4, [ %o0 ]
<== NOT EXECUTED
returned_size = -1;
}
return returned_size;
}
4001a560: 81 c7 e0 08 ret
4001a564: 91 e8 00 1d restore %g0, %i5, %o0
memcpy (&dest_ptr[0], &name_ptr[0], name_size);
4001a568: 94 10 00 1d mov %i5, %o2
<== NOT EXECUTED
4001a56c: 92 07 bf d0 add %fp, -48, %o1
4001a570: 90 10 00 1b mov %i3, %o0
4001a574: 40 00 05 e3 call 4001bd00 <memcpy>
4001a578: b0 10 00 1d mov %i5, %i0
}
4001a57c: 81 c7 e0 08 ret
4001a580: 81 e8 00 00 restore
4001a584 <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)
{
4001a584: 9d e3 bf 88 save %sp, -120, %sp
char *dest_ptr = (char*)short_name;
unsigned int i;
size_t name_size_tmp;
char name_to_format_buf[MSDOS_SHORT_NAME_LEN +1];
returned_size = msdos_filename_process_dot_names (
4001a588: 94 10 00 1b mov %i3, %o2
4001a58c: 96 10 00 1c mov %i4, %o3
4001a590: 92 10 00 1a mov %i2, %o1
4001a594: 7f ff fd f5 call 40019d68 <msdos_filename_process_dot_names>
4001a598: 90 10 00 19 mov %i1, %o0
utf8_name,
utf8_name_size,
short_name,
short_name_size);
if (returned_size == 0) {
4001a59c: ba 92 20 00 orcc %o0, 0, %i5
4001a5a0: 12 80 00 08 bne 4001a5c0 <msdos_filename_utf8_to_short_name_for_save+0x3c>
<== NEVER TAKEN
4001a5a4: 80 a6 a0 00 cmp %i2, 0
while ( *name_size >= UTF8_FULL_STOP_SIZE
4001a5a8: 32 80 00 0b bne,a 4001a5d4 <msdos_filename_utf8_to_short_name_for_save+0x50>
<== ALWAYS TAKEN
4001a5ac: c2 0e 40 00 ldub [ %i1 ], %g1
else
eno = EINVAL;
}
if ( eno != 0 ) {
errno = eno;
4001a5b0: 40 00 02 e3 call 4001b13c <__errno>
<== NOT EXECUTED
4001a5b4: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
4001a5b8: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4001a5bc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
return -1;
}
return returned_size;
}
4001a5c0: 81 c7 e0 08 ret
4001a5c4: 91 e8 00 1d restore %g0, %i5, %o0
while ( *name_size >= UTF8_FULL_STOP_SIZE
4001a5c8: 02 bf ff fa be 4001a5b0 <msdos_filename_utf8_to_short_name_for_save+0x2c>
<== NOT EXECUTED
4001a5cc: b2 06 60 01 inc %i1
<== NOT EXECUTED
&& **name_utf8 == UTF8_FULL_STOP) {
4001a5d0: c2 0e 40 00 ldub [ %i1 ], %g1
<== NOT EXECUTED
4001a5d4: 80 a0 60 2e cmp %g1, 0x2e
4001a5d8: 22 bf ff fc be,a 4001a5c8 <msdos_filename_utf8_to_short_name_for_save+0x44>
<== NEVER TAKEN
4001a5dc: b4 86 bf ff addcc %i2, -1, %i2
<== NOT EXECUTED
eno = (*converter->handler->utf8_to_codepage) (
4001a5e0: c2 06 00 00 ld [ %i0 ], %g1
name_size_tmp = sizeof ( name_to_format_buf );
4001a5e4: 84 10 20 0c mov 0xc, %g2
4001a5e8: c4 27 bf ec st %g2, [ %fp + -20 ]
eno = (*converter->handler->utf8_to_codepage) (
4001a5ec: 94 10 00 1a mov %i2, %o2
4001a5f0: c2 00 40 00 ld [ %g1 ], %g1
4001a5f4: 92 10 00 19 mov %i1, %o1
4001a5f8: a0 07 bf f0 add %fp, -16, %l0
4001a5fc: 98 07 bf ec add %fp, -20, %o4
4001a600: 96 10 00 10 mov %l0, %o3
4001a604: 9f c0 40 00 call %g1
4001a608: 90 10 00 18 mov %i0, %o0
name_size = name_size_tmp;
4001a60c: f2 07 bf ec ld [ %fp + -20 ], %i1
for (i = 0; i < name_size; ++i)
4001a610: 80 a6 60 00 cmp %i1, 0
4001a614: 02 bf ff eb be 4001a5c0 <msdos_filename_utf8_to_short_name_for_save+0x3c>
<== NEVER TAKEN
4001a618: b4 10 20 00 clr %i2
name_to_format_buf[i] = toupper ( (unsigned char)(name_to_format_buf[i]) );
4001a61c: 40 00 05 12 call 4001ba64 <__locale_ctype_ptr>
4001a620: fa 0c 00 1a ldub [ %l0 + %i2 ], %i5
4001a624: 82 0f 60 ff and %i5, 0xff, %g1
4001a628: 90 02 00 01 add %o0, %g1, %o0
4001a62c: c4 0a 20 01 ldub [ %o0 + 1 ], %g2
4001a630: 84 08 a0 03 and %g2, 3, %g2
4001a634: 80 a0 a0 02 cmp %g2, 2
4001a638: 22 80 00 02 be,a 4001a640 <msdos_filename_utf8_to_short_name_for_save+0xbc>
4001a63c: 82 00 7f e0 add %g1, -32, %g1
4001a640: c2 2c 00 1a stb %g1, [ %l0 + %i2 ]
for (i = 0; i < name_size; ++i)
4001a644: 82 06 a0 01 add %i2, 1, %g1
4001a648: 80 a6 40 01 cmp %i1, %g1
4001a64c: 32 bf ff f4 bne,a 4001a61c <msdos_filename_utf8_to_short_name_for_save+0x98>
4001a650: b4 10 00 01 mov %g1, %i2
if ( 0x20 == *name_ptr )
4001a654: c2 0f bf f0 ldub [ %fp + -16 ], %g1
4001a658: 80 a0 60 20 cmp %g1, 0x20
4001a65c: 02 80 00 09 be 4001a680 <msdos_filename_utf8_to_short_name_for_save+0xfc>
4001a660: 80 a0 60 e5 cmp %g1, 0xe5
else if ( 0xE5 == *name_ptr )
4001a664: 02 80 00 0a be 4001a68c <msdos_filename_utf8_to_short_name_for_save+0x108>
<== NEVER TAKEN
4001a668: 05 10 00 a9 sethi %hi(0x4002a400), %g2
char c = codepage_valid_char_map[character];
4001a66c: 84 10 a2 08 or %g2, 0x208, %g2 ! 4002a608 <codepage_valid_char_map>
if (c == 0) {
4001a670: c6 48 80 01 ldsb [ %g2 + %g1 ], %g3
4001a674: 80 a0 e0 00 cmp %g3, 0
4001a678: 12 80 00 03 bne 4001a684 <msdos_filename_utf8_to_short_name_for_save+0x100>
4001a67c: c2 08 80 01 ldub [ %g2 + %g1 ], %g1
c = '_';
4001a680: 82 10 20 5f mov 0x5f, %g1
dest_ptr[0] = msdos_get_valid_codepage_filename_character(*name_ptr);
4001a684: 10 80 00 04 b 4001a694 <msdos_filename_utf8_to_short_name_for_save+0x110>
4001a688: c2 2e c0 00 stb %g1, [ %i3 ]
dest_ptr[0] = 0x05;
4001a68c: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
4001a690: c2 2e c0 00 stb %g1, [ %i3 ]
<== NOT EXECUTED
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a694: 80 a6 a0 00 cmp %i2, 0
4001a698: 02 80 00 68 be 4001a838 <msdos_filename_utf8_to_short_name_for_save+0x2b4>
4001a69c: c2 0f bf f1 ldub [ %fp + -15 ], %g1
4001a6a0: 80 a0 60 2e cmp %g1, 0x2e
4001a6a4: 02 80 00 2f be 4001a760 <msdos_filename_utf8_to_short_name_for_save+0x1dc>
4001a6a8: 05 10 00 a9 sethi %hi(0x4002a400), %g2
4001a6ac: 84 10 a2 08 or %g2, 0x208, %g2 ! 4002a608 <codepage_valid_char_map>
if (c == 0) {
4001a6b0: c6 48 80 01 ldsb [ %g2 + %g1 ], %g3
++returned_size;
4001a6b4: ba 10 20 01 mov 1, %i5
if (c == 0) {
4001a6b8: 80 a0 e0 00 cmp %g3, 0
4001a6bc: 12 80 00 03 bne 4001a6c8 <msdos_filename_utf8_to_short_name_for_save+0x144>
4001a6c0: c2 08 80 01 ldub [ %g2 + %g1 ], %g1
c = '_';
4001a6c4: 82 10 20 5f mov 0x5f, %g1
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
4001a6c8: c2 2e c0 1d stb %g1, [ %i3 + %i5 ]
--name_size;
4001a6cc: 86 06 bf ff add %i2, -1, %g3
4001a6d0: 82 07 bf f1 add %fp, -15, %g1
4001a6d4: 88 00 40 1d add %g1, %i5, %g4
++returned_size;
4001a6d8: ba 07 60 01 inc %i5
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a6dc: 80 a7 60 08 cmp %i5, 8
4001a6e0: 02 80 00 16 be 4001a738 <msdos_filename_utf8_to_short_name_for_save+0x1b4>
4001a6e4: b2 10 00 1d mov %i5, %i1
4001a6e8: 80 a0 e0 00 cmp %g3, 0
4001a6ec: 02 80 00 22 be 4001a774 <msdos_filename_utf8_to_short_name_for_save+0x1f0>
4001a6f0: 82 10 00 19 mov %i1, %g1
4001a6f4: c2 0c 00 1d ldub [ %l0 + %i5 ], %g1
4001a6f8: 80 a0 60 2e cmp %g1, 0x2e
4001a6fc: 02 80 00 4d be 4001a830 <msdos_filename_utf8_to_short_name_for_save+0x2ac>
4001a700: 88 01 20 01 inc %g4
4001a704: b4 10 00 03 mov %g3, %i2
if (c == 0) {
4001a708: c6 48 80 01 ldsb [ %g2 + %g1 ], %g3
4001a70c: 80 a0 e0 00 cmp %g3, 0
4001a710: 02 bf ff ed be 4001a6c4 <msdos_filename_utf8_to_short_name_for_save+0x140>
4001a714: c2 08 80 01 ldub [ %g2 + %g1 ], %g1
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
4001a718: c2 2e c0 1d stb %g1, [ %i3 + %i5 ]
--name_size;
4001a71c: 86 06 bf ff add %i2, -1, %g3
4001a720: 82 07 bf f1 add %fp, -15, %g1
4001a724: 88 00 40 1d add %g1, %i5, %g4
++returned_size;
4001a728: ba 07 60 01 inc %i5
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a72c: 80 a7 60 08 cmp %i5, 8
4001a730: 12 bf ff ee bne 4001a6e8 <msdos_filename_utf8_to_short_name_for_save+0x164>
4001a734: b2 10 00 1d mov %i5, %i1
if ( name_size > 0 && *name_ptr == '.' ) {
4001a738: 80 a0 e0 00 cmp %g3, 0
4001a73c: 02 80 00 2d be 4001a7f0 <msdos_filename_utf8_to_short_name_for_save+0x26c>
4001a740: 82 10 20 08 mov 8, %g1
4001a744: c2 09 00 00 ldub [ %g4 ], %g1
4001a748: 80 a0 60 2e cmp %g1, 0x2e
4001a74c: 32 80 00 17 bne,a 4001a7a8 <msdos_filename_utf8_to_short_name_for_save+0x224>
4001a750: b4 10 20 08 mov 8, %i2
++name_ptr;
4001a754: 88 01 20 01 inc %g4
--name_size;
4001a758: 10 80 00 0f b 4001a794 <msdos_filename_utf8_to_short_name_for_save+0x210>
4001a75c: 86 06 bf fe add %i2, -2, %g3
4001a760: 86 06 bf ff add %i2, -1, %g3
++name_ptr;
4001a764: 88 07 bf f2 add %fp, -14, %g4
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a768: b2 10 20 01 mov 1, %i1
++returned_size;
4001a76c: ba 10 20 01 mov 1, %i5
4001a770: 82 10 00 19 mov %i1, %g1
dest_ptr[i] = ' ';
4001a774: 84 10 20 20 mov 0x20, %g2
4001a778: c4 2e c0 01 stb %g2, [ %i3 + %g1 ]
for (; i < 8; ++i) {
4001a77c: 82 00 60 01 inc %g1
4001a780: 80 a0 60 08 cmp %g1, 8
4001a784: 32 bf ff fe bne,a 4001a77c <msdos_filename_utf8_to_short_name_for_save+0x1f8>
4001a788: c4 2e c0 01 stb %g2, [ %i3 + %g1 ]
4001a78c: ba 27 40 19 sub %i5, %i1, %i5
4001a790: ba 07 60 08 add %i5, 8, %i5
for (; i <= 10 && name_size ; i++) {
4001a794: 80 a0 e0 00 cmp %g3, 0
4001a798: 02 80 00 24 be 4001a828 <msdos_filename_utf8_to_short_name_for_save+0x2a4>
4001a79c: 05 10 00 a9 sethi %hi(0x4002a400), %g2
4001a7a0: b4 10 00 1d mov %i5, %i2
4001a7a4: 84 10 a2 08 or %g2, 0x208, %g2
4001a7a8: 82 10 20 08 mov 8, %g1
4001a7ac: b4 21 00 1a sub %g4, %i2, %i2
4001a7b0: 10 80 00 05 b 4001a7c4 <msdos_filename_utf8_to_short_name_for_save+0x240>
4001a7b4: 86 00 e0 08 add %g3, 8, %g3
4001a7b8: 80 a0 c0 01 cmp %g3, %g1
4001a7bc: 22 80 00 0e be,a 4001a7f4 <msdos_filename_utf8_to_short_name_for_save+0x270>
4001a7c0: 84 06 c0 01 add %i3, %g1, %g2
char c = codepage_valid_char_map[character];
4001a7c4: c8 0e 80 1d ldub [ %i2 + %i5 ], %g4
if (c == 0) {
4001a7c8: f2 48 80 04 ldsb [ %g2 + %g4 ], %i1
4001a7cc: 80 a6 60 00 cmp %i1, 0
4001a7d0: 12 80 00 03 bne 4001a7dc <msdos_filename_utf8_to_short_name_for_save+0x258>
4001a7d4: c8 08 80 04 ldub [ %g2 + %g4 ], %g4
c = '_';
4001a7d8: 88 10 20 5f mov 0x5f, %g4
dest_ptr[i] = msdos_get_valid_codepage_filename_character(*name_ptr);
4001a7dc: c8 2e c0 01 stb %g4, [ %i3 + %g1 ]
for (; i <= 10 && name_size ; i++) {
4001a7e0: 82 00 60 01 inc %g1
4001a7e4: 80 a0 60 0b cmp %g1, 0xb
4001a7e8: 12 bf ff f4 bne 4001a7b8 <msdos_filename_utf8_to_short_name_for_save+0x234>
4001a7ec: ba 07 60 01 inc %i5
4001a7f0: 84 06 c0 01 add %i3, %g1, %g2
dest_ptr[i] = ' ';
4001a7f4: 86 10 20 20 mov 0x20, %g3
for ( ; i < short_name_size; ++i ) {
4001a7f8: 80 a0 40 1c cmp %g1, %i4
4001a7fc: 1a bf ff 71 bcc 4001a5c0 <msdos_filename_utf8_to_short_name_for_save+0x3c>
4001a800: b6 06 c0 1c add %i3, %i4, %i3
dest_ptr[i] = ' ';
4001a804: c6 28 80 00 stb %g3, [ %g2 ]
4001a808: 84 00 a0 01 inc %g2
for ( ; i < short_name_size; ++i ) {
4001a80c: 80 a6 c0 02 cmp %i3, %g2
4001a810: 32 bf ff fe bne,a 4001a808 <msdos_filename_utf8_to_short_name_for_save+0x284>
4001a814: c6 28 80 00 stb %g3, [ %g2 ]
4001a818: ba 27 40 01 sub %i5, %g1, %i5
4001a81c: ba 07 40 1c add %i5, %i4, %i5
}
4001a820: 81 c7 e0 08 ret
4001a824: 91 e8 00 1d restore %g0, %i5, %o0
for (; i <= 10 && name_size ; i++) {
4001a828: 10 bf ff f2 b 4001a7f0 <msdos_filename_utf8_to_short_name_for_save+0x26c>
4001a82c: 82 10 20 08 mov 8, %g1
--name_size;
4001a830: 10 bf ff d0 b 4001a770 <msdos_filename_utf8_to_short_name_for_save+0x1ec>
4001a834: 86 06 bf fe add %i2, -2, %g3
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a838: 86 10 20 00 clr %g3
++name_ptr;
4001a83c: 88 07 bf f1 add %fp, -15, %g4
for (i = 1; i <= 7 && name_size && *name_ptr != '.'; ++i) {
4001a840: b2 10 20 01 mov 1, %i1
++returned_size;
4001a844: 10 bf ff cb b 4001a770 <msdos_filename_utf8_to_short_name_for_save+0x1ec>
4001a848: ba 10 20 01 mov 1, %i5
40019ab0 <msdos_find_name>:
{
40019ab0: 9d e3 bf 60 save %sp, -160, %sp
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
40019ab4: c2 06 20 14 ld [ %i0 + 0x14 ], %g1
40019ab8: f8 00 60 08 ld [ %g1 + 8 ], %i4
name_type = msdos_long_to_short (
40019abc: d0 07 20 c0 ld [ %i4 + 0xc0 ], %o0
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019ac0: ba 07 bf e0 add %fp, -32, %i5
name_type = msdos_long_to_short (
40019ac4: 98 10 20 0b mov 0xb, %o4
40019ac8: 96 10 00 1d mov %i5, %o3
40019acc: 94 10 00 1a mov %i2, %o2
40019ad0: 92 10 00 19 mov %i1, %o1
fat_file_fd_t *fat_fd = NULL;
40019ad4: c0 27 bf cc clr [ %fp + -52 ]
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019ad8: c0 27 bf e0 clr [ %fp + -32 ]
40019adc: c0 27 bf e4 clr [ %fp + -28 ]
40019ae0: c0 27 bf e8 clr [ %fp + -24 ]
40019ae4: c0 27 bf ec clr [ %fp + -20 ]
40019ae8: c0 27 bf f0 clr [ %fp + -16 ]
40019aec: c0 27 bf f4 clr [ %fp + -12 ]
40019af0: c0 27 bf f8 clr [ %fp + -8 ]
name_type = msdos_long_to_short (
40019af4: 7f ff f9 bf call 400181f0 <msdos_long_to_short>
40019af8: c0 27 bf fc clr [ %fp + -4 ]
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
40019afc: fa 23 a0 5c st %i5, [ %sp + 0x5c ]
40019b00: 98 10 00 08 mov %o0, %o4
40019b04: 96 10 00 1a mov %i2, %o3
40019b08: 9a 07 bf d0 add %fp, -48, %o5
40019b0c: 94 10 00 19 mov %i1, %o2
40019b10: 92 10 20 00 clr %o1
40019b14: 7f ff ff aa call 400199bc <msdos_get_name_node>
40019b18: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
40019b1c: ba 92 20 00 orcc %o0, 0, %i5
40019b20: 12 80 00 1d bne 40019b94 <msdos_find_name+0xe4>
40019b24: c2 0f bf eb ldub [ %fp + -21 ], %g1
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
40019b28: 80 88 60 08 btst 8, %g1
40019b2c: 12 80 00 1c bne 40019b9c <msdos_find_name+0xec>
<== NEVER TAKEN
40019b30: 82 08 60 3f and %g1, 0x3f, %g1
40019b34: 80 a0 60 0f cmp %g1, 0xf
40019b38: 02 80 00 19 be 40019b9c <msdos_find_name+0xec>
<== NEVER TAKEN
40019b3c: 94 07 bf cc add %fp, -52, %o2
rc = fat_file_open(&fs_info->fat, &dir_pos, &fat_fd);
40019b40: 92 07 bf d0 add %fp, -48, %o1
40019b44: 7f ff e6 aa call 400135ec <fat_file_open>
40019b48: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
40019b4c: ba 92 20 00 orcc %o0, 0, %i5
40019b50: 12 80 00 11 bne 40019b94 <msdos_find_name+0xe4>
<== NEVER TAKEN
40019b54: c2 07 bf cc ld [ %fp + -52 ], %g1
fat_fd->dir_pos = dir_pos;
40019b58: c4 1f bf d0 ldd [ %fp + -48 ], %g2
40019b5c: c4 38 60 20 std %g2, [ %g1 + 0x20 ]
40019b60: c4 1f bf d8 ldd [ %fp + -40 ], %g2
40019b64: c4 38 60 28 std %g2, [ %g1 + 0x28 ]
if (fat_fd->links_num == 1)
40019b68: c4 00 60 08 ld [ %g1 + 8 ], %g2
40019b6c: 80 a0 a0 01 cmp %g2, 1
40019b70: 02 80 00 0f be 40019bac <msdos_find_name+0xfc>
40019b74: c4 17 bf fa lduh [ %fp + -6 ], %g2
rc = fat_file_close(&fs_info->fat, parent_loc->node_access);
40019b78: d2 06 20 08 ld [ %i0 + 8 ], %o1
40019b7c: 7f ff e8 44 call 40013c8c <fat_file_close>
40019b80: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
40019b84: ba 92 20 00 orcc %o0, 0, %i5
40019b88: 12 80 00 4e bne 40019cc0 <msdos_find_name+0x210>
<== NEVER TAKEN
40019b8c: c2 07 bf cc ld [ %fp + -52 ], %g1
parent_loc->node_access = fat_fd;
40019b90: c2 26 20 08 st %g1, [ %i0 + 8 ]
}
40019b94: 81 c7 e0 08 ret
40019b98: 91 e8 00 1d restore %g0, %i5, %o0
return MSDOS_NAME_NOT_FOUND_ERR;
40019b9c: 3b 00 00 1f sethi %hi(0x7c00), %i5
<== NOT EXECUTED
40019ba0: ba 17 61 01 or %i5, 0x101, %i5 ! 7d01 <_Configuration_Interrupt_stack_size+0x6d01>
<== NOT EXECUTED
}
40019ba4: 81 c7 e0 08 ret
<== NOT EXECUTED
40019ba8: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(node_entry);
40019bac: c8 17 bf f4 lduh [ %fp + -12 ], %g4
40019bb0: bb 30 a0 08 srl %g2, 8, %i5
40019bb4: 87 28 a0 08 sll %g2, 8, %g3
40019bb8: 85 29 20 08 sll %g4, 8, %g2
40019bbc: 86 10 c0 1d or %g3, %i5, %g3
40019bc0: 89 31 20 08 srl %g4, 8, %g4
40019bc4: 87 28 e0 10 sll %g3, 0x10, %g3
40019bc8: 84 10 80 04 or %g2, %g4, %g2
40019bcc: 87 30 e0 10 srl %g3, 0x10, %g3
40019bd0: 85 28 a0 10 sll %g2, 0x10, %g2
40019bd4: 84 10 80 03 or %g2, %g3, %g2
40019bd8: c4 20 60 1c st %g2, [ %g1 + 0x1c ]
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40019bdc: c4 17 bf f8 lduh [ %fp + -8 ], %g2
40019be0: c2 17 bf f6 lduh [ %fp + -10 ], %g1
40019be4: 91 28 a0 08 sll %g2, 8, %o0
40019be8: 93 28 60 08 sll %g1, 8, %o1
40019bec: 85 30 a0 08 srl %g2, 8, %g2
40019bf0: 83 30 60 08 srl %g1, 8, %g1
40019bf4: 90 12 00 02 or %o0, %g2, %o0
40019bf8: 92 12 40 01 or %o1, %g1, %o1
40019bfc: 91 2a 20 10 sll %o0, 0x10, %o0
40019c00: 93 2a 60 10 sll %o1, 0x10, %o1
40019c04: 91 32 20 10 srl %o0, 0x10, %o0
40019c08: 40 00 00 ee call 40019fc0 <msdos_date_dos2unix>
40019c0c: 93 32 60 10 srl %o1, 0x10, %o1
40019c10: c2 07 bf cc ld [ %fp + -52 ], %g1
40019c14: d0 20 60 4c st %o0, [ %g1 + 0x4c ]
fat_fd->ctime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40019c18: c4 17 bf f0 lduh [ %fp + -16 ], %g2
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40019c1c: c0 20 60 48 clr [ %g1 + 0x48 ]
fat_fd->ctime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
40019c20: 91 28 a0 08 sll %g2, 8, %o0
40019c24: c2 17 bf ee lduh [ %fp + -18 ], %g1
40019c28: 85 30 a0 08 srl %g2, 8, %g2
40019c2c: 93 28 60 08 sll %g1, 8, %o1
40019c30: 83 30 60 08 srl %g1, 8, %g1
40019c34: 90 12 00 02 or %o0, %g2, %o0
40019c38: 92 12 40 01 or %o1, %g1, %o1
40019c3c: 91 2a 20 10 sll %o0, 0x10, %o0
40019c40: 93 2a 60 10 sll %o1, 0x10, %o1
40019c44: 91 32 20 10 srl %o0, 0x10, %o0
40019c48: 40 00 00 de call 40019fc0 <msdos_date_dos2unix>
40019c4c: 93 32 60 10 srl %o1, 0x10, %o1
40019c50: fa 07 bf cc ld [ %fp + -52 ], %i5
40019c54: c0 27 60 40 clr [ %i5 + 0x40 ]
40019c58: d0 27 60 44 st %o0, [ %i5 + 0x44 ]
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
40019c5c: c2 0f bf eb ldub [ %fp + -21 ], %g1
40019c60: 80 88 60 10 btst 0x10, %g1
40019c64: 32 80 00 1b bne,a 40019cd0 <msdos_find_name+0x220>
40019c68: c0 27 60 10 clr [ %i5 + 0x10 ]
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
40019c6c: 40 00 3b 28 call 4002890c <__bswapsi2>
40019c70: d0 07 bf fc ld [ %fp + -4 ], %o0
fat_fd->fat_file_type = FAT_FILE;
40019c74: 82 10 20 04 mov 4, %g1
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
40019c78: d0 27 60 18 st %o0, [ %i5 + 0x18 ]
fat_fd->fat_file_type = FAT_FILE;
40019c7c: c2 27 60 10 st %g1, [ %i5 + 0x10 ]
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
40019c80: 82 10 3f ff mov -1, %g1
40019c84: c2 27 60 14 st %g1, [ %i5 + 0x14 ]
if ((fat_fd->fat_file_size != 0) &&
40019c88: 80 a2 20 00 cmp %o0, 0
fat_fd->map.disk_cln = fat_fd->cln;
40019c8c: c2 07 60 1c ld [ %i5 + 0x1c ], %g1
fat_fd->map.file_cln = 0;
40019c90: c0 27 60 34 clr [ %i5 + 0x34 ]
if ((fat_fd->fat_file_size != 0) &&
40019c94: 02 80 00 08 be 40019cb4 <msdos_find_name+0x204>
40019c98: c2 27 60 38 st %g1, [ %i5 + 0x38 ]
40019c9c: c4 07 20 08 ld [ %i4 + 8 ], %g2
40019ca0: 80 a0 80 08 cmp %g2, %o0
40019ca4: 2a 80 00 05 bcs,a 40019cb8 <msdos_find_name+0x208>
40019ca8: 82 10 3f ff mov -1, %g1
fat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
40019cac: 10 bf ff b3 b 40019b78 <msdos_find_name+0xc8>
40019cb0: c2 27 60 3c st %g1, [ %i5 + 0x3c ]
40019cb4: 82 10 3f ff mov -1, %g1
40019cb8: 10 bf ff b0 b 40019b78 <msdos_find_name+0xc8>
40019cbc: c2 27 60 3c st %g1, [ %i5 + 0x3c ]
fat_file_close(&fs_info->fat, fat_fd);
40019cc0: d2 07 bf cc ld [ %fp + -52 ], %o1
<== NOT EXECUTED
40019cc4: 7f ff e7 f2 call 40013c8c <fat_file_close>
<== NOT EXECUTED
40019cc8: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
return rc;
40019ccc: 30 bf ff b2 b,a 40019b94 <msdos_find_name+0xe4>
<== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40019cd0: 03 00 08 00 sethi %hi(0x200000), %g1
40019cd4: c2 27 60 14 st %g1, [ %i5 + 0x14 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
40019cd8: 92 10 00 1d mov %i5, %o1
40019cdc: 7f ff e9 8e call 40014314 <fat_file_size>
40019ce0: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
40019ce4: ba 92 20 00 orcc %o0, 0, %i5
40019ce8: 12 bf ff f7 bne 40019cc4 <msdos_find_name+0x214>
<== NEVER TAKEN
40019cec: d2 07 bf cc ld [ %fp + -52 ], %o1
40019cf0: fa 07 bf cc ld [ %fp + -52 ], %i5
40019cf4: 10 bf ff e5 b 40019c88 <msdos_find_name+0x1d8>
40019cf8: d0 07 60 18 ld [ %i5 + 0x18 ], %o0
40018b8c <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)
{
40018b8c: 9d e3 be d0 save %sp, -304, %sp
int retval = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40018b90: e0 06 20 08 ld [ %i0 + 8 ], %l0
ssize_t name_len_for_compare;
uint32_t bts2rd = 0;
uint32_t empty_file_offset = 0;
uint32_t empty_entry_count = 0;
unsigned int lfn_entries;
rtems_dosfs_convert_control *converter = fs_info->converter;
40018b94: c2 04 20 c0 ld [ %l0 + 0xc0 ], %g1
void *buffer = converter->buffer.data;
40018b98: c4 00 60 04 ld [ %g1 + 4 ], %g2
rtems_dosfs_convert_control *converter = fs_info->converter;
40018b9c: c2 27 bf 4c st %g1, [ %fp + -180 ]
size_t buffer_size = converter->buffer.size;
40018ba0: c2 00 60 08 ld [ %g1 + 8 ], %g1
40018ba4: c2 27 bf 48 st %g1, [ %fp + -184 ]
assert(name_utf8_len > 0);
40018ba8: 82 97 20 00 orcc %i4, 0, %g1
{
40018bac: f8 27 a0 54 st %i4, [ %fp + 0x54 ]
40018bb0: f6 27 a0 50 st %i3, [ %fp + 0x50 ]
40018bb4: fa 27 a0 58 st %i5, [ %fp + 0x58 ]
assert(name_utf8_len > 0);
40018bb8: 04 80 02 69 ble 4001955c <msdos_find_name_in_fat_file+0x9d0>
<== NEVER TAKEN
40018bbc: c4 27 bf 58 st %g2, [ %fp + -168 ]
dir_pos->sname.cln = 0;
40018bc0: c2 07 a0 5c ld [ %fp + 0x5c ], %g1
40018bc4: c0 20 40 00 clr [ %g1 ]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40018bc8: 82 10 3f ff mov -1, %g1
dir_pos->sname.ofs = 0;
40018bcc: c4 07 a0 5c ld [ %fp + 0x5c ], %g2
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40018bd0: c2 20 a0 08 st %g1, [ %g2 + 8 ]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40018bd4: c2 20 a0 0c st %g1, [ %g2 + 0xc ]
dir_pos->sname.ofs = 0;
40018bd8: c0 20 a0 04 clr [ %g2 + 4 ]
fat_dir_pos_init(dir_pos);
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40018bdc: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40018be0: 80 a0 60 01 cmp %g1, 1
40018be4: 22 80 00 1c be,a 40018c54 <msdos_find_name_in_fat_file+0xc8>
40018be8: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
40018bec: e2 04 20 08 ld [ %l0 + 8 ], %l1
switch ( name_type ) {
40018bf0: c2 07 a0 58 ld [ %fp + 0x58 ], %g1
40018bf4: 80 a0 60 01 cmp %g1, 1
40018bf8: 02 80 00 20 be 40018c78 <msdos_find_name_in_fat_file+0xec>
40018bfc: 80 a0 60 02 cmp %g1, 2
40018c00: 12 80 00 0f bne 40018c3c <msdos_find_name_in_fat_file+0xb0>
40018c04: f6 07 bf 58 ld [ %fp + -168 ], %i3
}
else
retval = -1;
break;
case MSDOS_NAME_LONG:
name_len_for_save = msdos_filename_utf8_to_long_name_for_save (
40018c08: f0 07 bf 48 ld [ %fp + -184 ], %i0
40018c0c: f8 07 bf 4c ld [ %fp + -180 ], %i4
40018c10: d4 07 a0 54 ld [ %fp + 0x54 ], %o2
40018c14: d2 07 a0 50 ld [ %fp + 0x50 ], %o1
40018c18: 98 10 00 18 mov %i0, %o4
40018c1c: 96 10 00 1b mov %i3, %o3
40018c20: 40 00 05 aa call 4001a2c8 <msdos_filename_utf8_to_long_name_for_save>
40018c24: 90 10 00 1c mov %i4, %o0
converter,
name_utf8,
name_utf8_len,
buffer,
buffer_size);
if (name_len_for_save > 0) {
40018c28: ba 92 20 00 orcc %o0, 0, %i5
40018c2c: 14 80 01 5d bg 400191a0 <msdos_find_name_in_fat_file+0x614>
40018c30: d4 07 a0 54 ld [ %fp + 0x54 ], %o2
entry = fs_info->cl_buf;
40018c34: 81 c7 e0 08 ret
40018c38: 91 e8 3f ff restore %g0, -1, %o0
}
else
retval = -1;
break;
default:
errno = EINVAL;
40018c3c: 40 00 09 40 call 4001b13c <__errno>
40018c40: b0 10 3f ff mov -1, %i0
40018c44: 82 10 20 16 mov 0x16, %g1
40018c48: c2 22 00 00 st %g1, [ %o0 ]
40018c4c: 81 c7 e0 08 ret
40018c50: 81 e8 00 00 restore
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40018c54: 80 a0 60 00 cmp %g1, 0
40018c58: 32 bf ff e6 bne,a 40018bf0 <msdos_find_name_in_fat_file+0x64>
<== NEVER TAKEN
40018c5c: e2 04 20 08 ld [ %l0 + 8 ], %l1
<== NOT EXECUTED
40018c60: c2 0c 20 16 ldub [ %l0 + 0x16 ], %g1
40018c64: 80 88 60 03 btst 3, %g1
40018c68: 22 bf ff e2 be,a 40018bf0 <msdos_find_name_in_fat_file+0x64>
40018c6c: e2 04 20 08 ld [ %l0 + 8 ], %l1
bts2rd = fat_fd->fat_file_size;
40018c70: 10 bf ff e0 b 40018bf0 <msdos_find_name_in_fat_file+0x64>
40018c74: e2 06 60 18 ld [ %i1 + 0x18 ], %l1
name_len_for_compare = msdos_filename_utf8_to_short_name_for_compare (
40018c78: d6 07 bf 58 ld [ %fp + -168 ], %o3
40018c7c: d4 07 a0 54 ld [ %fp + 0x54 ], %o2
40018c80: d2 07 a0 50 ld [ %fp + 0x50 ], %o1
40018c84: d0 07 bf 4c ld [ %fp + -180 ], %o0
40018c88: 40 00 06 0f call 4001a4c4 <msdos_filename_utf8_to_short_name_for_compare>
40018c8c: 98 10 20 0b mov 0xb, %o4
lfn_entries = 0;
40018c90: 86 10 20 00 clr %g3
if (name_len_for_compare > 0) {
40018c94: 80 a2 20 00 cmp %o0, 0
40018c98: 04 bf ff e7 ble 40018c34 <msdos_find_name_in_fat_file+0xa8>
<== NEVER TAKEN
40018c9c: ac 10 00 08 mov %o0, %l6
uint32_t entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
40018ca0: 83 34 60 05 srl %l1, 5, %g1
40018ca4: f2 27 a0 48 st %i1, [ %fp + 0x48 ]
uint32_t empty_file_offset = 0;
40018ca8: a4 10 20 00 clr %l2
uint32_t entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
40018cac: c2 27 bf 44 st %g1, [ %fp + -188 ]
*entry_matched = false;
40018cb0: ae 10 20 00 clr %l7
rtems_dosfs_convert_control *converter = fs_info->converter;
40018cb4: c2 04 20 c0 ld [ %l0 + 0xc0 ], %g1
40018cb8: c2 27 bf 54 st %g1, [ %fp + -172 ]
lfn_start->cln = FAT_FILE_SHORT_NAME;
40018cbc: 82 10 3f ff mov -1, %g1
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40018cc0: d8 04 20 bc ld [ %l0 + 0xbc ], %o4
lfn_start->cln = FAT_FILE_SHORT_NAME;
40018cc4: c2 27 bf 68 st %g1, [ %fp + -152 ]
if (*empty_entry_count == (lfn_entries + 1))
40018cc8: 82 00 e0 01 add %g3, 1, %g1
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40018ccc: d2 07 a0 48 ld [ %fp + 0x48 ], %o1
*entry_matched = false;
40018cd0: c0 2f bf 63 clrb [ %fp + -157 ]
40018cd4: b2 10 00 12 mov %l2, %i1
uint8_t lfn_checksum = 0;
40018cd8: c0 2f bf 53 clrb [ %fp + -173 ]
40018cdc: a4 10 00 1a mov %i2, %l2
if (*empty_entry_count == (lfn_entries + 1))
40018ce0: c2 27 bf 5c st %g1, [ %fp + -164 ]
40018ce4: b4 10 00 17 mov %l7, %i2
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40018ce8: 96 10 00 11 mov %l1, %o3
40018cec: 94 10 00 1a mov %i2, %o2
40018cf0: 90 10 00 10 mov %l0, %o0
40018cf4: 7f ff eb 27 call 40013990 <fat_file_read>
40018cf8: aa 10 00 16 mov %l6, %l5
uint32_t empty_entry_count = 0;
40018cfc: b6 10 20 00 clr %i3
uint32_t dir_offset = 0;
40018d00: a8 10 20 00 clr %l4
int lfn_entry = 0;
40018d04: b0 10 20 00 clr %i0
&& rc == RC_OK)
40018d08: 80 a2 20 00 cmp %o0, 0
40018d0c: 02 80 00 b2 be 40018fd4 <msdos_find_name_in_fat_file+0x448>
<== NEVER TAKEN
40018d10: a6 10 20 00 clr %l3
if (bytes_read < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40018d14: 80 a2 20 1f cmp %o0, 0x1f
40018d18: 04 80 01 65 ble 400192ac <msdos_find_name_in_fat_file+0x720>
<== NEVER TAKEN
40018d1c: 80 a4 40 08 cmp %l1, %o0
assert(bytes_read == bts2rd);
40018d20: 12 80 02 03 bne 4001952c <msdos_find_name_in_fat_file+0x9a0>
<== NEVER TAKEN
40018d24: ba 10 20 00 clr %i5
lfn_start->cln = FAT_FILE_SHORT_NAME;
40018d28: 10 80 00 1c b 40018d98 <msdos_find_name_in_fat_file+0x20c>
40018d2c: ae 10 3f ff mov -1, %l7
if (create_node && !empty_space_found)
40018d30: 12 80 00 06 bne 40018d48 <msdos_find_name_in_fat_file+0x1bc>
<== NEVER TAKEN
40018d34: 80 a4 a0 00 cmp %l2, 0
40018d38: 22 80 00 05 be,a 40018d4c <msdos_find_name_in_fat_file+0x1c0>
40018d3c: c4 0f 20 0b ldub [ %i4 + 0xb ], %g2
*empty_entry_count = 0;
40018d40: b6 10 20 00 clr %i3
*empty_file_offset = 0;
40018d44: b2 10 20 00 clr %i1
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
40018d48: c4 0f 20 0b ldub [ %i4 + 0xb ], %g2
40018d4c: 86 08 a0 3f and %g2, 0x3f, %g3
40018d50: 80 a0 e0 0f cmp %g3, 0xf
40018d54: 02 80 00 26 be 40018dec <msdos_find_name_in_fat_file+0x260>
40018d58: c6 0f bf 63 ldub [ %fp + -157 ], %g3
if (entry_matched)
40018d5c: 80 a0 e0 00 cmp %g3, 0
40018d60: 02 80 00 31 be 40018e24 <msdos_find_name_in_fat_file+0x298>
40018d64: 80 88 a0 08 btst 8, %g2
if (lfn_entry ||
40018d68: 80 a5 60 00 cmp %l5, 0
40018d6c: 14 80 00 04 bg 40018d7c <msdos_find_name_in_fat_file+0x1f0>
40018d70: 80 a6 20 00 cmp %i0, 0
40018d74: 02 80 00 ea be 4001911c <msdos_find_name_in_fat_file+0x590>
<== ALWAYS TAKEN
40018d78: 88 10 20 00 clr %g4
lfn_start->cln = FAT_FILE_SHORT_NAME;
40018d7c: ee 27 bf 68 st %l7, [ %fp + -152 ]
*entry_matched = false;
40018d80: aa 10 00 16 mov %l6, %l5
40018d84: c0 2f bf 63 clrb [ %fp + -157 ]
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40018d88: ba 07 60 20 add %i5, 0x20, %i5
for (dir_entry = 0;
40018d8c: 80 a4 40 1d cmp %l1, %i5
40018d90: 28 80 00 87 bleu,a 40018fac <msdos_find_name_in_fat_file+0x420>
40018d94: d8 04 20 bc ld [ %l0 + 0xbc ], %o4
char* entry = (char*) fs_info->cl_buf + dir_entry;
40018d98: c2 04 20 bc ld [ %l0 + 0xbc ], %g1
40018d9c: b8 00 40 1d add %g1, %i5, %i4
if (*empty_entry_count == 0)
40018da0: 80 a6 e0 00 cmp %i3, 0
40018da4: 12 80 00 03 bne 40018db0 <msdos_find_name_in_fat_file+0x224>
40018da8: c2 08 40 1d ldub [ %g1 + %i5 ], %g1
40018dac: b2 06 80 1d add %i2, %i5, %i1
if (remainder_empty)
40018db0: 84 88 60 ff andcc %g1, 0xff, %g2
40018db4: 02 80 00 c5 be 400190c8 <msdos_find_name_in_fat_file+0x53c>
40018db8: 80 a0 a0 e5 cmp %g2, 0xe5
else if (entry_empty)
40018dbc: 12 bf ff dd bne 40018d30 <msdos_find_name_in_fat_file+0x1a4>
40018dc0: 80 8c e0 ff btst 0xff, %l3
if (create_node)
40018dc4: 80 a4 a0 00 cmp %l2, 0
40018dc8: 22 bf ff ee be,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
40018dcc: ee 27 bf 68 st %l7, [ %fp + -152 ]
if (*empty_entry_count == (lfn_entries + 1))
40018dd0: c2 07 bf 5c ld [ %fp + -164 ], %g1
(*empty_entry_count)++;
40018dd4: b6 06 e0 01 inc %i3
if (*empty_entry_count == (lfn_entries + 1))
40018dd8: 80 a6 c0 01 cmp %i3, %g1
40018ddc: 22 bf ff e8 be,a 40018d7c <msdos_find_name_in_fat_file+0x1f0>
40018de0: a6 10 20 01 mov 1, %l3
lfn_start->cln = FAT_FILE_SHORT_NAME;
40018de4: 10 bf ff e7 b 40018d80 <msdos_find_name_in_fat_file+0x1f4>
40018de8: ee 27 bf 68 st %l7, [ %fp + -152 ]
(lfn_start.cln == FAT_FILE_SHORT_NAME);
40018dec: c4 07 bf 68 ld [ %fp + -152 ], %g2
if (is_first_lfn_entry)
40018df0: 80 a0 bf ff cmp %g2, -1
40018df4: 02 80 00 7d be 40018fe8 <msdos_find_name_in_fat_file+0x45c>
40018df8: 82 08 60 3f and %g1, 0x3f, %g1
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
40018dfc: 80 a6 00 01 cmp %i0, %g1
40018e00: 32 bf ff e0 bne,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
40018e04: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK)) ||
40018e08: c2 0f 20 0d ldub [ %i4 + 0xd ], %g1
40018e0c: c6 0f bf 53 ldub [ %fp + -173 ], %g3
40018e10: 80 a0 c0 01 cmp %g3, %g1
40018e14: 32 bf ff db bne,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
40018e18: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
bool is_first_lfn_entry =
40018e1c: 10 80 00 7f b 40019018 <msdos_find_name_in_fat_file+0x48c>
40018e20: 84 38 00 02 xnor %g0, %g2, %g2
} else if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_VOLUME_ID)
40018e24: 32 bf ff da bne,a 40018d8c <msdos_find_name_in_fat_file+0x200>
40018e28: ba 07 60 20 add %i5, 0x20, %i5
size_t bytes_converted = buf_size;
40018e2c: 82 10 20 0c mov 0xc, %g1
ssize_t bytes_written = msdos_format_dirent_with_dot(char_buf, entry);
40018e30: 92 10 00 1c mov %i4, %o1
size_t bytes_converted = buf_size;
40018e34: c2 27 bf 64 st %g1, [ %fp + -156 ]
ssize_t bytes_written = msdos_format_dirent_with_dot(char_buf, entry);
40018e38: 7f ff ff 04 call 40018a48 <msdos_format_dirent_with_dot>
40018e3c: 90 07 bf 70 add %fp, -144, %o0
if (bytes_written > 0) {
40018e40: 94 92 20 00 orcc %o0, 0, %o2
40018e44: 04 80 01 b8 ble 40019524 <msdos_find_name_in_fat_file+0x998>
<== NEVER TAKEN
40018e48: c2 4f bf 70 ldsb [ %fp + -144 ], %g1
if (char_buf[0] == 0x05)
40018e4c: 80 a0 60 05 cmp %g1, 5
40018e50: 12 80 00 04 bne 40018e60 <msdos_find_name_in_fat_file+0x2d4>
<== ALWAYS TAKEN
40018e54: 98 07 bf 64 add %fp, -156, %o4
char_buf[0] = 0xE5;
40018e58: 82 10 3f e5 mov -27, %g1
<== NOT EXECUTED
40018e5c: c2 2f bf 70 stb %g1, [ %fp + -144 ]
<== NOT EXECUTED
eno = (*converter->handler->codepage_to_utf8) (
40018e60: d0 07 bf 54 ld [ %fp + -172 ], %o0
40018e64: c2 02 00 00 ld [ %o0 ], %g1
40018e68: c2 00 60 04 ld [ %g1 + 4 ], %g1
40018e6c: 96 07 bf 90 add %fp, -112, %o3
40018e70: 9f c0 40 00 call %g1
40018e74: 92 07 bf 70 add %fp, -144, %o1
if (eno == 0)
40018e78: aa 92 20 00 orcc %o0, 0, %l5
40018e7c: 02 80 00 8e be 400190b4 <msdos_find_name_in_fat_file+0x528>
<== ALWAYS TAKEN
40018e80: d4 07 bf 64 ld [ %fp + -156 ], %o2
errno = eno;
40018e84: 40 00 08 ae call 4001b13c <__errno>
<== NOT EXECUTED
40018e88: 01 00 00 00 nop
<== NOT EXECUTED
40018e8c: ea 22 00 00 st %l5, [ %o0 ]
<== NOT EXECUTED
bytes_in_entry = msdos_short_entry_to_utf8_name (
40018e90: 94 10 3f ff mov -1, %o2
<== NOT EXECUTED
name_len_remaining = msdos_compare_entry_against_filename (
40018e94: d6 07 bf 58 ld [ %fp + -168 ], %o3
<== NOT EXECUTED
40018e98: d0 07 bf 54 ld [ %fp + -172 ], %o0
40018e9c: 9a 07 bf 63 add %fp, -157, %o5
40018ea0: 98 10 00 16 mov %l6, %o4
40018ea4: 7f ff fc 5c call 40018014 <msdos_compare_entry_against_filename>
40018ea8: 92 07 bf 90 add %fp, -112, %o1
if (entry_matched && name_len_remaining == 0) {
40018eac: c2 0f bf 63 ldub [ %fp + -157 ], %g1
40018eb0: 80 a0 60 00 cmp %g1, 0
40018eb4: 02 bf ff b2 be 40018d7c <msdos_find_name_in_fat_file+0x1f0>
40018eb8: 80 a2 20 00 cmp %o0, 0
40018ebc: 32 bf ff b1 bne,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
40018ec0: ee 27 bf 68 st %l7, [ %fp + -152 ]
rc = msdos_on_entry_found (
40018ec4: fa 23 a0 60 st %i5, [ %sp + 0x60 ]
40018ec8: 82 07 bf 68 add %fp, -152, %g1
40018ecc: e8 23 a0 5c st %l4, [ %sp + 0x5c ]
40018ed0: b4 10 00 12 mov %l2, %i2
40018ed4: c2 23 a0 64 st %g1, [ %sp + 0x64 ]
40018ed8: a4 10 00 19 mov %i1, %l2
40018edc: da 07 a0 5c ld [ %fp + 0x5c ], %o5
40018ee0: f2 07 a0 48 ld [ %fp + 0x48 ], %i1
40018ee4: d6 07 a0 60 ld [ %fp + 0x60 ], %o3
40018ee8: 98 10 00 1c mov %i4, %o4
40018eec: 94 10 00 11 mov %l1, %o2
40018ef0: 92 10 00 19 mov %i1, %o1
40018ef4: 7f ff fc 6c call 400180a4 <msdos_on_entry_found>
40018ef8: 90 10 00 10 mov %l0, %o0
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
40018efc: ba 07 60 20 add %i5, 0x20, %i5
for (dir_entry = 0;
40018f00: 80 a7 40 11 cmp %i5, %l1
40018f04: 1a 80 01 92 bcc 4001954c <msdos_find_name_in_fat_file+0x9c0>
40018f08: b0 10 00 08 mov %o0, %i0
40018f0c: 80 a2 20 00 cmp %o0, 0
40018f10: 12 80 01 8f bne 4001954c <msdos_find_name_in_fat_file+0x9c0>
<== NEVER TAKEN
40018f14: 82 10 00 1a mov %i2, %g1
if ( retval == RC_OK
40018f18: 80 88 60 ff btst 0xff, %g1
40018f1c: 02 bf ff 4c be 40018c4c <msdos_find_name_in_fat_file+0xc0>
40018f20: c2 07 a0 58 ld [ %fp + 0x58 ], %g1
switch (name_type) {
40018f24: 80 a0 60 01 cmp %g1, 1
40018f28: 02 80 00 ac be 400191d8 <msdos_find_name_in_fat_file+0x64c>
40018f2c: 80 a0 60 02 cmp %g1, 2
40018f30: 12 bf ff 43 bne 40018c3c <msdos_find_name_in_fat_file+0xb0>
<== NEVER TAKEN
40018f34: d8 07 bf 48 ld [ %fp + -184 ], %o4
name_len_for_save = msdos_filename_utf8_to_long_name_for_save (
40018f38: d6 07 bf 58 ld [ %fp + -168 ], %o3
40018f3c: d4 07 a0 54 ld [ %fp + 0x54 ], %o2
40018f40: d2 07 a0 50 ld [ %fp + 0x50 ], %o1
40018f44: 40 00 04 e1 call 4001a2c8 <msdos_filename_utf8_to_long_name_for_save>
40018f48: d0 07 bf 4c ld [ %fp + -180 ], %o0
if (name_len_for_save > 0) {
40018f4c: 80 a2 20 00 cmp %o0, 0
40018f50: 04 bf ff 39 ble 40018c34 <msdos_find_name_in_fat_file+0xa8>
<== NEVER TAKEN
40018f54: b8 02 20 19 add %o0, 0x19, %i4
/ MSDOS_LFN_ENTRY_SIZE;
40018f58: 03 13 b1 3b sethi %hi(0x4ec4ec00), %g1
40018f5c: 82 10 60 4f or %g1, 0x4f, %g1 ! 4ec4ec4f <RAM_END+0xe84ec4f>
40018f60: 80 57 00 01 umul %i4, %g1, %g0
40018f64: b9 40 00 00 rd %y, %i4
40018f68: b9 37 20 03 srl %i4, 3, %i4
if (empty_entry_count < lfn_entries + 1)
40018f6c: b4 07 20 01 add %i4, 1, %i2
40018f70: 80 a6 80 1b cmp %i2, %i3
40018f74: 08 80 00 d7 bleu 400192d0 <msdos_find_name_in_fat_file+0x744>
40018f78: 98 07 bf 90 add %fp, -112, %o4
empty_file_offset = fat_fd->fat_file_size -
40018f7c: e4 06 60 18 ld [ %i1 + 0x18 ], %l2
ret = fat_file_extend(&fs_info->fat,
40018f80: d6 04 20 08 ld [ %l0 + 8 ], %o3
40018f84: 96 04 80 0b add %l2, %o3, %o3
40018f88: 94 10 20 01 mov 1, %o2
40018f8c: 92 10 00 19 mov %i1, %o1
40018f90: 7f ff eb a9 call 40013e34 <fat_file_extend>
40018f94: 90 10 00 10 mov %l0, %o0
if (ret != RC_OK)
40018f98: b0 92 20 00 orcc %o0, 0, %i0
40018f9c: 02 80 00 cc be 400192cc <msdos_find_name_in_fat_file+0x740>
<== ALWAYS TAKEN
40018fa0: b7 2e e0 05 sll %i3, 5, %i3
empty_entry_count
);
}
return retval;
}
40018fa4: 81 c7 e0 08 ret
<== NOT EXECUTED
40018fa8: 81 e8 00 00 restore
<== NOT EXECUTED
while ( (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
40018fac: d2 07 a0 48 ld [ %fp + 0x48 ], %o1
40018fb0: b4 06 80 11 add %i2, %l1, %i2
40018fb4: 96 10 00 11 mov %l1, %o3
40018fb8: 94 10 00 1a mov %i2, %o2
40018fbc: 90 10 00 10 mov %l0, %o0
40018fc0: 7f ff ea 74 call 40013990 <fat_file_read>
40018fc4: a8 05 20 01 inc %l4
&& rc == RC_OK)
40018fc8: 80 a2 20 00 cmp %o0, 0
40018fcc: 12 bf ff 53 bne 40018d18 <msdos_find_name_in_fat_file+0x18c>
40018fd0: 80 a2 20 1f cmp %o0, 0x1f
40018fd4: b4 10 00 12 mov %l2, %i2
40018fd8: b0 10 20 00 clr %i0
40018fdc: a4 10 00 19 mov %i1, %l2
40018fe0: 10 80 00 4a b 40019108 <msdos_find_name_in_fat_file+0x57c>
40018fe4: f2 07 a0 48 ld [ %fp + 0x48 ], %i1
entry_matched = false;
40018fe8: c0 2f bf 63 clrb [ %fp + -157 ]
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
40018fec: c2 0f 00 00 ldub [ %i4 ], %g1
40018ff0: 80 88 60 40 btst 0x40, %g1
40018ff4: 22 bf ff 66 be,a 40018d8c <msdos_find_name_in_fat_file+0x200>
40018ff8: ba 07 60 20 add %i5, 0x20, %i5
lfn_start.cln = dir_offset;
40018ffc: e8 27 bf 68 st %l4, [ %fp + -152 ]
lfn_start.ofs = dir_entry;
40019000: fa 27 bf 6c st %i5, [ %fp + -148 ]
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
40019004: c2 0f 20 0d ldub [ %i4 + 0xd ], %g1
40019008: c2 2f bf 53 stb %g1, [ %fp + -173 ]
lfn_entry = (*MSDOS_DIR_ENTRY_TYPE(entry)
4001900c: f0 0f 00 00 ldub [ %i4 ], %i0
40019010: b0 0e 20 3f and %i0, 0x3f, %i0
bool is_first_lfn_entry =
40019014: 84 38 00 02 xnor %g0, %g2, %g2
size_t bytes_in_utf8 = buf_size;
40019018: 82 10 20 70 mov 0x70, %g1
4001901c: 80 a0 00 02 cmp %g0, %g2
40019020: 94 60 3f ff subx %g0, -1, %o2
40019024: c2 27 bf 64 st %g1, [ %fp + -156 ]
40019028: 92 07 bf 70 add %fp, -144, %o1
4001902c: 90 10 00 1c mov %i4, %o0
40019030: 7f ff fc 43 call 4001813c <msdos_get_utf16_string_from_long_entry.part.2>
40019034: b0 06 3f ff add %i0, -1, %i0
if (retval >= 0) {
40019038: 80 a2 20 00 cmp %o0, 0
4001903c: 06 80 00 0c bl 4001906c <msdos_find_name_in_fat_file+0x4e0>
<== NEVER TAKEN
40019040: 94 10 00 08 mov %o0, %o2
eno = (*converter->handler->utf16_to_utf8) (
40019044: d0 07 bf 54 ld [ %fp + -172 ], %o0
40019048: c2 02 00 00 ld [ %o0 ], %g1
4001904c: c2 00 60 0c ld [ %g1 + 0xc ], %g1
40019050: 98 07 bf 64 add %fp, -156, %o4
40019054: 96 07 bf 90 add %fp, -112, %o3
40019058: 9f c0 40 00 call %g1
4001905c: 92 07 bf 70 add %fp, -144, %o1
if ( eno == 0 ) {
40019060: b8 92 20 00 orcc %o0, 0, %i4
40019064: 12 80 00 40 bne 40019164 <msdos_find_name_in_fat_file+0x5d8>
40019068: d4 07 bf 64 ld [ %fp + -156 ], %o2
if (bytes_in_entry > 0) {
4001906c: 80 a2 a0 00 cmp %o2, 0
40019070: 22 bf ff 44 be,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
40019074: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
name_len_remaining = msdos_compare_entry_against_filename (
40019078: d6 07 bf 58 ld [ %fp + -168 ], %o3
4001907c: d0 07 bf 54 ld [ %fp + -172 ], %o0
40019080: 98 10 00 15 mov %l5, %o4
40019084: 9a 07 bf 63 add %fp, -157, %o5
40019088: 7f ff fb e3 call 40018014 <msdos_compare_entry_against_filename>
4001908c: 92 07 bf 90 add %fp, -112, %o1
if (name_len_remaining < 0 || !entry_matched) {
40019090: aa 92 20 00 orcc %o0, 0, %l5
40019094: 26 bf ff 3b bl,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
40019098: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
4001909c: c2 0f bf 63 ldub [ %fp + -157 ], %g1
400190a0: 80 a0 60 00 cmp %g1, 0
400190a4: 32 bf ff 3a bne,a 40018d8c <msdos_find_name_in_fat_file+0x200>
400190a8: ba 07 60 20 add %i5, 0x20, %i5
lfn_start->cln = FAT_FILE_SHORT_NAME;
400190ac: 10 bf ff 35 b 40018d80 <msdos_find_name_in_fat_file+0x1f4>
400190b0: ee 27 bf 68 st %l7, [ %fp + -152 ]
if (bytes_in_entry > 0) {
400190b4: 80 a2 a0 00 cmp %o2, 0
400190b8: 22 bf ff 32 be,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
400190bc: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
name_len_remaining = msdos_compare_entry_against_filename (
400190c0: 10 bf ff 76 b 40018e98 <msdos_find_name_in_fat_file+0x30c>
400190c4: d6 07 bf 58 ld [ %fp + -168 ], %o3
400190c8: b4 10 00 12 mov %l2, %i2
400190cc: a4 10 00 19 mov %i1, %l2
if (!create_node)
400190d0: 80 a6 a0 00 cmp %i2, 0
400190d4: 12 80 00 06 bne 400190ec <msdos_find_name_in_fat_file+0x560>
400190d8: f2 07 a0 48 ld [ %fp + 0x48 ], %i1
rc = MSDOS_NAME_NOT_FOUND_ERR;
400190dc: 31 00 00 1f sethi %hi(0x7c00), %i0
400190e0: b0 16 21 01 or %i0, 0x101, %i0 ! 7d01 <_Configuration_Interrupt_stack_size+0x6d01>
400190e4: 81 c7 e0 08 ret
400190e8: 81 e8 00 00 restore
if ( !empty_space_found
400190ec: 80 8c e0 ff btst 0xff, %l3
400190f0: 12 80 00 06 bne 40019108 <msdos_find_name_in_fat_file+0x57c>
400190f4: b0 10 20 00 clr %i0
*empty_entry_count +=
400190f8: c2 07 bf 44 ld [ %fp + -188 ], %g1
400190fc: b6 00 40 1b add %g1, %i3, %i3
entries_per_block - (dir_entry / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019100: bb 37 60 05 srl %i5, 5, %i5
*empty_entry_count +=
40019104: b6 26 c0 1d sub %i3, %i5, %i3
if (!create_node)
40019108: 80 a6 a0 00 cmp %i2, 0
4001910c: 02 bf ff f4 be 400190dc <msdos_find_name_in_fat_file+0x550>
40019110: 82 10 20 01 mov 1, %g1
if ( retval == RC_OK
40019114: 10 bf ff 82 b 40018f1c <msdos_find_name_in_fat_file+0x390>
40019118: 80 88 60 ff btst 0xff, %g1
cs = 0;
4001911c: 10 80 00 03 b 40019128 <msdos_find_name_in_fat_file+0x59c>
40019120: 84 10 20 00 clr %g2
40019124: c2 0f 00 04 ldub [ %i4 + %g4 ], %g1
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019128: 84 08 a0 ff and %g2, 0xff, %g2
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
4001912c: 88 01 20 01 inc %g4
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019130: 87 28 a0 07 sll %g2, 7, %g3
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40019134: 80 a1 20 0b cmp %g4, 0xb
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019138: 85 30 a0 01 srl %g2, 1, %g2
4001913c: 84 00 c0 02 add %g3, %g2, %g2
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40019140: 12 bf ff f9 bne 40019124 <msdos_find_name_in_fat_file+0x598>
40019144: 84 00 80 01 add %g2, %g1, %g2
name_len_remaining > 0 ||
40019148: c2 0f bf 53 ldub [ %fp + -173 ], %g1
4001914c: 84 08 a0 ff and %g2, 0xff, %g2
40019150: 80 a0 80 01 cmp %g2, %g1
40019154: 32 bf ff 0b bne,a 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NEVER TAKEN
40019158: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
rc = msdos_on_entry_found (
4001915c: 10 bf ff 5b b 40018ec8 <msdos_find_name_in_fat_file+0x33c>
40019160: fa 23 a0 60 st %i5, [ %sp + 0x60 ]
errno = eno;
40019164: 40 00 07 f6 call 4001b13c <__errno>
40019168: 01 00 00 00 nop
4001916c: f8 22 00 00 st %i4, [ %o0 ]
name_len_remaining = msdos_compare_entry_against_filename (
40019170: 98 10 00 15 mov %l5, %o4
40019174: d6 07 bf 58 ld [ %fp + -168 ], %o3
40019178: d0 07 bf 54 ld [ %fp + -172 ], %o0
bytes_in_entry = msdos_long_entry_to_utf8_name (
4001917c: 94 10 3f ff mov -1, %o2
name_len_remaining = msdos_compare_entry_against_filename (
40019180: 9a 07 bf 63 add %fp, -157, %o5
40019184: 7f ff fb a4 call 40018014 <msdos_compare_entry_against_filename>
40019188: 92 07 bf 90 add %fp, -112, %o1
if (name_len_remaining < 0 || !entry_matched) {
4001918c: aa 92 20 00 orcc %o0, 0, %l5
40019190: 36 bf ff c4 bge,a 400190a0 <msdos_find_name_in_fat_file+0x514>
<== ALWAYS TAKEN
40019194: c2 0f bf 63 ldub [ %fp + -157 ], %g1
lfn_start->cln = FAT_FILE_SHORT_NAME;
40019198: 10 bf fe fa b 40018d80 <msdos_find_name_in_fat_file+0x1f4>
<== NOT EXECUTED
4001919c: ee 27 bf 68 st %l7, [ %fp + -152 ]
<== NOT EXECUTED
name_len_for_compare = msdos_filename_utf8_to_long_name_for_compare (
400191a0: d2 07 a0 50 ld [ %fp + 0x50 ], %o1
400191a4: 98 10 00 18 mov %i0, %o4
400191a8: 96 10 00 1b mov %i3, %o3
400191ac: 40 00 03 cb call 4001a0d8 <msdos_filename_utf8_to_long_name_for_compare>
400191b0: 90 10 00 1c mov %i4, %o0
if (0 >= name_len_for_compare) {
400191b4: ac 92 20 00 orcc %o0, 0, %l6
400191b8: 04 bf fe 9f ble 40018c34 <msdos_find_name_in_fat_file+0xa8>
<== NEVER TAKEN
400191bc: 86 07 60 19 add %i5, 0x19, %g3
/ MSDOS_LFN_ENTRY_SIZE;
400191c0: 03 13 b1 3b sethi %hi(0x4ec4ec00), %g1
400191c4: 82 10 60 4f or %g1, 0x4f, %g1 ! 4ec4ec4f <RAM_END+0xe84ec4f>
400191c8: 80 50 c0 01 umul %g3, %g1, %g0
400191cc: 87 40 00 00 rd %y, %g3
400191d0: 10 bf fe b4 b 40018ca0 <msdos_find_name_in_fat_file+0x114>
400191d4: 87 30 e0 03 srl %g3, 3, %g3
name_len_for_save = msdos_filename_utf8_to_short_name_for_save (
400191d8: d6 07 bf 58 ld [ %fp + -168 ], %o3
400191dc: d4 07 a0 54 ld [ %fp + 0x54 ], %o2
400191e0: d2 07 a0 50 ld [ %fp + 0x50 ], %o1
400191e4: d0 07 bf 4c ld [ %fp + -180 ], %o0
400191e8: 40 00 04 e7 call 4001a584 <msdos_filename_utf8_to_short_name_for_save>
400191ec: 98 10 20 0b mov 0xb, %o4
if (name_len_for_save > 0 ) {
400191f0: 80 a2 20 00 cmp %o0, 0
400191f4: 04 bf fe 90 ble 40018c34 <msdos_find_name_in_fat_file+0xa8>
<== NEVER TAKEN
400191f8: 80 a6 e0 00 cmp %i3, 0
if (empty_entry_count < lfn_entries + 1)
400191fc: 12 80 00 0c bne 4001922c <msdos_find_name_in_fat_file+0x6a0>
40019200: 98 07 bf 90 add %fp, -112, %o4
empty_file_offset = fat_fd->fat_file_size -
40019204: e4 06 60 18 ld [ %i1 + 0x18 ], %l2
ret = fat_file_extend(&fs_info->fat,
40019208: d6 04 20 08 ld [ %l0 + 8 ], %o3
4001920c: 96 04 80 0b add %l2, %o3, %o3
40019210: 94 10 20 01 mov 1, %o2
40019214: 92 10 00 19 mov %i1, %o1
40019218: 7f ff eb 07 call 40013e34 <fat_file_extend>
4001921c: 90 10 00 10 mov %l0, %o0
if (ret != RC_OK)
40019220: b0 92 20 00 orcc %o0, 0, %i0
40019224: 12 80 00 28 bne 400192c4 <msdos_find_name_in_fat_file+0x738>
<== ALWAYS TAKEN
40019228: 01 00 00 00 nop
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
4001922c: c6 07 a0 5c ld [ %fp + 0x5c ], %g3
40019230: 84 10 3f ff mov -1, %g2
pos->ofs = file_offset & (bts2rd - 1);
40019234: 82 04 7f ff add %l1, -1, %g1
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40019238: c4 20 e0 08 st %g2, [ %g3 + 8 ]
pos->ofs = file_offset & (bts2rd - 1);
4001923c: 82 08 40 12 and %g1, %l2, %g1
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40019240: c4 20 e0 0c st %g2, [ %g3 + 0xc ]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
40019244: 98 10 00 03 mov %g3, %o4
pos->ofs = file_offset & (bts2rd - 1);
40019248: c2 20 e0 04 st %g1, [ %g3 + 4 ]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
4001924c: 96 10 00 12 mov %l2, %o3
40019250: 94 10 20 01 mov 1, %o2
40019254: 92 10 00 19 mov %i1, %o1
40019258: 7f ff ea c2 call 40013d60 <fat_file_ioctl>
4001925c: 90 10 00 10 mov %l0, %o0
entry = fs_info->cl_buf;
40019260: f4 04 20 bc ld [ %l0 + 0xbc ], %i2
40019264: a2 10 20 20 mov 0x20, %l1
40019268: b6 10 20 20 mov 0x20, %i3
memcpy(entry, name_dir_entry, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
4001926c: d2 07 a0 60 ld [ %fp + 0x60 ], %o1
40019270: 94 10 20 20 mov 0x20, %o2
40019274: 40 00 0a a3 call 4001bd00 <memcpy>
40019278: 90 10 00 1a mov %i2, %o0
bytes_written = fat_file_write(&fs_info->fat, fat_fd,
4001927c: d8 04 20 bc ld [ %l0 + 0xbc ], %o4
40019280: 96 10 00 1b mov %i3, %o3
40019284: 94 10 00 12 mov %l2, %o2
40019288: 92 10 00 19 mov %i1, %o1
4001928c: 90 10 00 10 mov %l0, %o0
40019290: 7f ff eb 85 call 400140a4 <fat_file_write>
40019294: b0 10 20 00 clr %i0
if (bytes_written == (ssize_t) length)
40019298: 80 a2 00 11 cmp %o0, %l1
4001929c: 02 bf fe 6c be 40018c4c <msdos_find_name_in_fat_file+0xc0>
<== ALWAYS TAKEN
400192a0: 80 a2 3f ff cmp %o0, -1
else if (bytes_written == -1)
400192a4: 02 bf fe 64 be 40018c34 <msdos_find_name_in_fat_file+0xa8>
<== NOT EXECUTED
400192a8: 01 00 00 00 nop
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
400192ac: 40 00 07 a4 call 4001b13c <__errno>
<== NOT EXECUTED
400192b0: b0 10 3f ff mov -1, %i0 ! ffffffff <RAM_END+0xbfbfffff>
<== NOT EXECUTED
400192b4: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
400192b8: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400192bc: 81 c7 e0 08 ret
<== NOT EXECUTED
400192c0: 81 e8 00 00 restore
<== NOT EXECUTED
400192c4: 81 c7 e0 08 ret
400192c8: 81 e8 00 00 restore
empty_file_offset = fat_fd->fat_file_size -
400192cc: a4 24 80 1b sub %l2, %i3, %l2
if ((*c == ' ') || (*c == '.'))
400192d0: c2 07 a0 60 ld [ %fp + 0x60 ], %g1
400192d4: c2 48 40 00 ldsb [ %g1 ], %g1
slot = (empty_file_offset /
400192d8: 89 34 a0 05 srl %l2, 5, %g4
if ((*c == ' ') || (*c == '.'))
400192dc: 80 a0 60 2e cmp %g1, 0x2e
400192e0: 02 80 00 86 be 400194f8 <msdos_find_name_in_fat_file+0x96c>
<== NEVER TAKEN
400192e4: 88 01 00 1a add %g4, %i2, %g4
400192e8: 80 a0 60 20 cmp %g1, 0x20
400192ec: 02 80 00 84 be 400194fc <msdos_find_name_in_fat_file+0x970>
<== NEVER TAKEN
400192f0: c4 07 a0 60 ld [ %fp + 0x60 ], %g2
400192f4: c2 07 a0 60 ld [ %fp + 0x60 ], %g1
400192f8: c2 48 60 01 ldsb [ %g1 + 1 ], %g1
400192fc: 80 a0 60 20 cmp %g1, 0x20
40019300: 02 80 00 82 be 40019508 <msdos_find_name_in_fat_file+0x97c>
40019304: 80 a0 60 2e cmp %g1, 0x2e
40019308: 02 80 00 81 be 4001950c <msdos_find_name_in_fat_file+0x980>
<== NEVER TAKEN
4001930c: c4 07 a0 60 ld [ %fp + 0x60 ], %g2
for (i = 0; i < 2; i++, c++)
40019310: c2 07 a0 60 ld [ %fp + 0x60 ], %g1
40019314: 86 00 60 02 add %g1, 2, %g3
40019318: 3b 10 00 a9 sethi %hi(0x4002a400), %i5
4001931c: 82 10 20 0c mov 0xc, %g1
40019320: ba 17 61 48 or %i5, 0x148, %i5
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
40019324: 85 31 00 01 srl %g4, %g1, %g2
40019328: 84 08 a0 0f and %g2, 0xf, %g2
4001932c: c4 0f 40 02 ldub [ %i5 + %g2 ], %g2
40019330: c4 28 c0 00 stb %g2, [ %g3 ]
40019334: 82 00 7f fc add %g1, -4, %g1
for (i = 0; i < 4; i++, c++)
40019338: 80 a0 7f fc cmp %g1, -4
4001933c: 12 bf ff fa bne 40019324 <msdos_find_name_in_fat_file+0x798>
40019340: 86 00 e0 01 inc %g3
*c++ = '~';
40019344: 82 10 20 7e mov 0x7e, %g1
40019348: c4 07 a0 60 ld [ %fp + 0x60 ], %g2
4001934c: c2 28 a0 06 stb %g1, [ %g2 + 6 ]
*c = '1';
40019350: 82 10 20 31 mov 0x31, %g1
40019354: c2 28 a0 07 stb %g1, [ %g2 + 7 ]
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40019358: 86 10 20 00 clr %g3
cs = 0;
4001935c: ba 10 20 00 clr %i5
40019360: c2 07 a0 60 ld [ %fp + 0x60 ], %g1
40019364: c4 08 40 03 ldub [ %g1 + %g3 ], %g2
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019368: 82 0f 60 ff and %i5, 0xff, %g1
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
4001936c: 86 00 e0 01 inc %g3
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019370: bb 28 60 07 sll %g1, 7, %i5
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40019374: 80 a0 e0 0b cmp %g3, 0xb
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + name[i];
40019378: 83 30 60 01 srl %g1, 1, %g1
4001937c: 82 00 40 02 add %g1, %g2, %g1
for (i = 0; i < MSDOS_SHORT_NAME_LEN; ++i) {
40019380: 12 bf ff f8 bne 40019360 <msdos_find_name_in_fat_file+0x7d4>
40019384: ba 07 40 01 add %i5, %g1, %i5
pos->ofs = file_offset & (bts2rd - 1);
40019388: c4 07 a0 5c ld [ %fp + 0x5c ], %g2
4001938c: a2 04 7f ff add %l1, -1, %l1
40019390: 82 0c 40 12 and %l1, %l2, %g1
40019394: c2 20 a0 0c st %g1, [ %g2 + 0xc ]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
40019398: 98 00 a0 08 add %g2, 8, %o4
4001939c: 96 10 00 12 mov %l2, %o3
400193a0: 94 10 20 01 mov 1, %o2
400193a4: 92 10 00 19 mov %i1, %o1
400193a8: 7f ff ea 6e call 40013d60 <fat_file_ioctl>
400193ac: 90 10 00 10 mov %l0, %o0
if (ret != RC_OK)
400193b0: b0 92 20 00 orcc %o0, 0, %i0
400193b4: 12 bf fe 26 bne 40018c4c <msdos_find_name_in_fat_file+0xc0>
<== NEVER TAKEN
400193b8: c2 07 a0 5c ld [ %fp + 0x5c ], %g1
* MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400193bc: b1 2f 20 05 sll %i4, 5, %i0
short_file_offset = empty_file_offset + lfn_entries
400193c0: 96 06 00 12 add %i0, %l2, %o3
pos->ofs = file_offset & (bts2rd - 1);
400193c4: a2 0a c0 11 and %o3, %l1, %l1
400193c8: e2 20 60 04 st %l1, [ %g1 + 4 ]
return fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM,
400193cc: 98 10 00 01 mov %g1, %o4
400193d0: 94 10 20 01 mov 1, %o2
400193d4: 92 10 00 19 mov %i1, %o1
400193d8: 7f ff ea 62 call 40013d60 <fat_file_ioctl>
400193dc: 90 10 00 10 mov %l0, %o0
400193e0: b7 2e a0 05 sll %i2, 5, %i3
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
400193e4: 80 a7 20 00 cmp %i4, 0
entry = fs_info->cl_buf;
400193e8: f4 04 20 bc ld [ %l0 + 0xbc ], %i2
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
400193ec: 02 bf ff a0 be 4001926c <msdos_find_name_in_fat_file+0x6e0>
<== NEVER TAKEN
400193f0: a2 10 00 1b mov %i3, %l1
400193f4: c2 07 bf 58 ld [ %fp + -168 ], %g1
400193f8: aa 5f 20 1a smul %i4, 0x1a, %l5
400193fc: a8 10 00 1c mov %i4, %l4
40019400: aa 05 7f e6 add %l5, -26, %l5
40019404: a6 10 20 00 clr %l3
40019408: aa 00 40 15 add %g1, %l5, %l5
entry = fs_info->cl_buf;
4001940c: 98 10 00 1a mov %i2, %o4
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019410: 90 10 00 0c mov %o4, %o0
40019414: 94 10 20 20 mov 0x20, %o2
40019418: 40 00 0a 76 call 4001bdf0 <memset>
4001941c: 92 10 20 00 clr %o1
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
40019420: fa 2a 20 0d stb %i5, [ %o0 + 0xd ]
n = (const uint8_t *) name_converted +
40019424: 84 10 00 15 mov %l5, %g2
if (*n != 0 || *(n + 1) != 0)
40019428: c8 08 80 00 ldub [ %g2 ], %g4
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
4001942c: 98 10 00 08 mov %o0, %o4
40019430: 82 02 20 01 add %o0, 1, %g1
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
40019434: 86 10 20 00 clr %g3
if (*n != 0 || *(n + 1) != 0)
40019438: 80 89 20 ff btst 0xff, %g4
4001943c: 12 80 00 15 bne 40019490 <msdos_find_name_in_fat_file+0x904>
<== ALWAYS TAKEN
40019440: 9a 10 20 00 clr %o5
40019444: de 08 a0 01 ldub [ %g2 + 1 ], %o7
<== NOT EXECUTED
40019448: 80 a3 e0 00 cmp %o7, 0
4001944c: 32 80 00 12 bne,a 40019494 <msdos_find_name_in_fat_file+0x908>
40019450: c8 28 40 00 stb %g4, [ %g1 ]
p [0] = fill;
40019454: da 28 40 00 stb %o5, [ %g1 ]
40019458: 88 00 e0 01 add %g3, 1, %g4
p [1] = fill;
4001945c: da 28 60 01 stb %o5, [ %g1 + 1 ]
switch (i)
40019460: 80 a0 e0 04 cmp %g3, 4
40019464: 02 80 00 12 be 400194ac <msdos_find_name_in_fat_file+0x920>
40019468: 9a 10 3f ff mov -1, %o5
4001946c: 80 a0 e0 0a cmp %g3, 0xa
40019470: 12 80 00 12 bne 400194b8 <msdos_find_name_in_fat_file+0x92c>
40019474: 80 a1 20 0d cmp %g4, 0xd
p += 4;
40019478: 82 00 60 04 add %g1, 4, %g1
entry = fs_info->cl_buf;
4001947c: 86 10 00 04 mov %g4, %g3
if (*n != 0 || *(n + 1) != 0)
40019480: c8 08 80 00 ldub [ %g2 ], %g4
40019484: 80 89 20 ff btst 0xff, %g4
40019488: 22 bf ff f0 be,a 40019448 <msdos_find_name_in_fat_file+0x8bc>
4001948c: de 08 a0 01 ldub [ %g2 + 1 ], %o7
*p = *n;
40019490: c8 28 40 00 stb %g4, [ %g1 ]
n += MSDOS_NAME_LFN_BYTES_PER_CHAR;
40019494: 84 00 a0 02 add %g2, 2, %g2
*(p + 1) = *(n + 1);
40019498: c8 08 bf ff ldub [ %g2 + -1 ], %g4
4001949c: c8 28 60 01 stb %g4, [ %g1 + 1 ]
switch (i)
400194a0: 80 a0 e0 04 cmp %g3, 4
400194a4: 12 bf ff f2 bne 4001946c <msdos_find_name_in_fat_file+0x8e0>
400194a8: 88 00 e0 01 add %g3, 1, %g4
p += 5;
400194ac: 82 00 60 05 add %g1, 5, %g1
entry = fs_info->cl_buf;
400194b0: 10 bf ff f4 b 40019480 <msdos_find_name_in_fat_file+0x8f4>
400194b4: 86 10 00 04 mov %g4, %g3
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
400194b8: 12 bf ff f1 bne 4001947c <msdos_find_name_in_fat_file+0x8f0>
400194bc: 82 00 60 02 add %g1, 2, %g1
if (lfn_entry == 0)
400194c0: 80 a4 e0 00 cmp %l3, 0
400194c4: 02 80 00 15 be 40019518 <msdos_find_name_in_fat_file+0x98c>
400194c8: e8 2b 00 00 stb %l4, [ %o4 ]
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
400194cc: c2 0b 20 0b ldub [ %o4 + 0xb ], %g1
400194d0: 82 10 60 0f or %g1, 0xf, %g1
400194d4: c2 2b 20 0b stb %g1, [ %o4 + 0xb ]
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
400194d8: a6 04 e0 01 inc %l3
400194dc: a8 05 3f ff add %l4, -1, %l4
entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
400194e0: 98 03 20 20 add %o4, 0x20, %o4
for (lfn_entry = 0; lfn_entry < lfn_entries; ++lfn_entry) {
400194e4: 80 a7 00 13 cmp %i4, %l3
400194e8: 12 bf ff ca bne 40019410 <msdos_find_name_in_fat_file+0x884>
400194ec: aa 05 7f e6 add %l5, -26, %l5
400194f0: 10 bf ff 5f b 4001926c <msdos_find_name_in_fat_file+0x6e0>
400194f4: b4 06 80 18 add %i2, %i0, %i2
*c = '_';
400194f8: c4 07 a0 60 ld [ %fp + 0x60 ], %g2
<== NOT EXECUTED
400194fc: 82 10 20 5f mov 0x5f, %g1
<== NOT EXECUTED
40019500: 10 bf ff 7d b 400192f4 <msdos_find_name_in_fat_file+0x768>
<== NOT EXECUTED
40019504: c2 28 80 00 stb %g1, [ %g2 ]
<== NOT EXECUTED
40019508: c4 07 a0 60 ld [ %fp + 0x60 ], %g2
4001950c: 82 10 20 5f mov 0x5f, %g1
40019510: 10 bf ff 80 b 40019310 <msdos_find_name_in_fat_file+0x784>
40019514: c2 28 a0 01 stb %g1, [ %g2 + 1 ]
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
40019518: 82 15 20 40 or %l4, 0x40, %g1
4001951c: 10 bf ff ec b 400194cc <msdos_find_name_in_fat_file+0x940>
40019520: c2 2b 00 00 stb %g1, [ %o4 ]
eno = EINVAL;
40019524: 10 bf fe 58 b 40018e84 <msdos_find_name_in_fat_file+0x2f8>
<== NOT EXECUTED
40019528: aa 10 20 16 mov 0x16, %l5
<== NOT EXECUTED
assert(bytes_read == bts2rd);
4001952c: 17 10 00 a9 sethi %hi(0x4002a400), %o3
<== NOT EXECUTED
40019530: 15 10 00 a9 sethi %hi(0x4002a400), %o2
<== NOT EXECUTED
40019534: 11 10 00 a9 sethi %hi(0x4002a400), %o0
<== NOT EXECUTED
40019538: 96 12 e1 30 or %o3, 0x130, %o3
<== NOT EXECUTED
4001953c: 94 12 a1 a0 or %o2, 0x1a0, %o2
<== NOT EXECUTED
40019540: 92 10 25 4c mov 0x54c, %o1
<== NOT EXECUTED
40019544: 7f ff f0 d6 call 4001589c <__assert_func>
<== NOT EXECUTED
40019548: 90 12 20 98 or %o0, 0x98, %o0
<== NOT EXECUTED
4001954c: 80 a0 00 18 cmp %g0, %i0
40019550: 82 60 3f ff subx %g0, -1, %g1
40019554: 10 bf fe 71 b 40018f18 <msdos_find_name_in_fat_file+0x38c>
40019558: 82 0e 80 01 and %i2, %g1, %g1
assert(name_utf8_len > 0);
4001955c: 17 10 00 a9 sethi %hi(0x4002a400), %o3
<== NOT EXECUTED
40019560: 15 10 00 a9 sethi %hi(0x4002a400), %o2
<== NOT EXECUTED
40019564: 11 10 00 a9 sethi %hi(0x4002a400), %o0
<== NOT EXECUTED
40019568: 96 12 e1 18 or %o3, 0x118, %o3
<== NOT EXECUTED
4001956c: 94 12 a1 c0 or %o2, 0x1c0, %o2
<== NOT EXECUTED
40019570: 92 10 27 45 mov 0x745, %o1
<== NOT EXECUTED
40019574: 7f ff f0 ca call 4001589c <__assert_func>
<== NOT EXECUTED
40019578: 90 12 20 98 or %o0, 0x98, %o0
<== NOT EXECUTED
4001957c: 01 00 00 00 nop
<== NOT EXECUTED
40019580 <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
)
{
40019580: 9d e3 bf a0 save %sp, -96, %sp
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) &&
40019584: c2 06 60 20 ld [ %i1 + 0x20 ], %g1
40019588: 80 a0 60 01 cmp %g1, 1
4001958c: 02 80 00 32 be 40019654 <msdos_find_node_by_cluster_num_in_fat_file+0xd4>
40019590: e2 06 20 08 ld [ %i0 + 8 ], %l1
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
40019594: f0 04 60 08 ld [ %l1 + 8 ], %i0
40019598: d8 04 60 bc ld [ %l1 + 0xbc ], %o4
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
rtems_set_errno_and_return_minus_one( EIO );
assert(ret == bts2rd);
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001959c: a4 10 20 00 clr %l2
while ((ret = fat_file_read(&fs_info->fat, fat_fd, j * bts2rd, bts2rd,
400195a0: 96 10 00 18 mov %i0, %o3
400195a4: 94 10 00 12 mov %l2, %o2
400195a8: 92 10 00 19 mov %i1, %o1
400195ac: 7f ff e8 f9 call 40013990 <fat_file_read>
400195b0: 90 10 00 11 mov %l1, %o0
400195b4: 80 a2 20 00 cmp %o0, 0
400195b8: 02 80 00 23 be 40019644 <msdos_find_node_by_cluster_num_in_fat_file+0xc4>
<== NEVER TAKEN
400195bc: 80 a2 20 1f cmp %o0, 0x1f
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
400195c0: 04 80 00 40 ble 400196c0 <msdos_find_node_by_cluster_num_in_fat_file+0x140>
<== NEVER TAKEN
400195c4: 80 a2 00 18 cmp %o0, %i0
assert(ret == bts2rd);
400195c8: 12 80 00 44 bne 400196d8 <msdos_find_node_by_cluster_num_in_fat_file+0x158>
<== NEVER TAKEN
400195cc: a0 10 20 00 clr %l0
{
char* entry = (char*) fs_info->cl_buf + i;
400195d0: d8 04 60 bc ld [ %l1 + 0xbc ], %o4
400195d4: ba 10 00 0c mov %o4, %i5
/* if this and all rest entries are empty - return not-found */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
400195d8: c2 0f 40 00 ldub [ %i5 ], %g1
400195dc: 80 a0 60 00 cmp %g1, 0
400195e0: 02 80 00 19 be 40019644 <msdos_find_node_by_cluster_num_in_fat_file+0xc4>
<== NEVER TAKEN
400195e4: 80 a0 60 e5 cmp %g1, 0xe5
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)) ==
400195e8: 22 80 00 12 be,a 40019630 <msdos_find_node_by_cluster_num_in_fat_file+0xb0>
<== NEVER TAKEN
400195ec: a0 04 20 20 add %l0, 0x20, %l0
<== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* if get a non-empty entry - compare clusters num */
if (MSDOS_EXTRACT_CLUSTER_NUM(entry) == cl4find)
400195f0: c2 17 60 1a lduh [ %i5 + 0x1a ], %g1
400195f4: c6 17 60 14 lduh [ %i5 + 0x14 ], %g3
400195f8: 85 28 60 08 sll %g1, 8, %g2
400195fc: 89 30 60 08 srl %g1, 8, %g4
40019600: 83 28 e0 08 sll %g3, 8, %g1
40019604: 84 10 80 04 or %g2, %g4, %g2
40019608: 87 30 e0 08 srl %g3, 8, %g3
4001960c: 85 28 a0 10 sll %g2, 0x10, %g2
40019610: 82 10 40 03 or %g1, %g3, %g1
40019614: 85 30 a0 10 srl %g2, 0x10, %g2
40019618: 83 28 60 10 sll %g1, 0x10, %g1
4001961c: 82 10 40 02 or %g1, %g2, %g1
40019620: 80 a0 40 1a cmp %g1, %i2
40019624: 22 80 00 16 be,a 4001967c <msdos_find_node_by_cluster_num_in_fat_file+0xfc>
40019628: 98 10 00 1b mov %i3, %o4
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
4001962c: a0 04 20 20 add %l0, 0x20, %l0
40019630: 80 a4 00 18 cmp %l0, %i0
40019634: 0a bf ff e9 bcs 400195d8 <msdos_find_node_by_cluster_num_in_fat_file+0x58>
<== ALWAYS TAKEN
40019638: ba 07 60 20 add %i5, 0x20, %i5
4001963c: 10 bf ff d9 b 400195a0 <msdos_find_node_by_cluster_num_in_fat_file+0x20>
<== NOT EXECUTED
40019640: a4 04 80 08 add %l2, %o0, %l2
<== NOT EXECUTED
return MSDOS_NAME_NOT_FOUND_ERR;
40019644: 31 00 00 1f sethi %hi(0x7c00), %i0
<== NOT EXECUTED
40019648: b0 16 21 01 or %i0, 0x101, %i0 ! 7d01 <_Configuration_Interrupt_stack_size+0x6d01>
<== NOT EXECUTED
}
}
j++;
}
return MSDOS_NAME_NOT_FOUND_ERR;
}
4001964c: 81 c7 e0 08 ret
<== NOT EXECUTED
40019650: 81 e8 00 00 restore
<== NOT EXECUTED
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
40019654: c2 06 60 24 ld [ %i1 + 0x24 ], %g1
40019658: 80 a0 60 00 cmp %g1, 0
4001965c: 32 bf ff cf bne,a 40019598 <msdos_find_node_by_cluster_num_in_fat_file+0x18>
<== NEVER TAKEN
40019660: f0 04 60 08 ld [ %l1 + 8 ], %i0
<== NOT EXECUTED
40019664: c2 0c 60 16 ldub [ %l1 + 0x16 ], %g1
40019668: 80 88 60 03 btst 3, %g1
4001966c: 22 bf ff cb be,a 40019598 <msdos_find_node_by_cluster_num_in_fat_file+0x18>
<== NEVER TAKEN
40019670: f0 04 60 08 ld [ %l1 + 8 ], %i0
<== NOT EXECUTED
bts2rd = fat_fd->fat_file_size;
40019674: 10 bf ff c9 b 40019598 <msdos_find_node_by_cluster_num_in_fat_file+0x18>
40019678: f0 06 60 18 ld [ %i1 + 0x18 ], %i0
rc = fat_file_ioctl(&fs_info->fat, fat_fd, F_CLU_NUM, j * bts2rd,
4001967c: 96 10 00 12 mov %l2, %o3
40019680: 94 10 20 01 mov 1, %o2
40019684: 92 10 00 19 mov %i1, %o1
40019688: 7f ff e9 b6 call 40013d60 <fat_file_ioctl>
4001968c: 90 10 00 11 mov %l1, %o0
if (rc != RC_OK)
40019690: b0 92 20 00 orcc %o0, 0, %i0
40019694: 12 bf ff ee bne 4001964c <msdos_find_node_by_cluster_num_in_fat_file+0xcc>
<== NEVER TAKEN
40019698: 82 10 3f ff mov -1, %g1
dir_pos->sname.ofs = i;
4001969c: e0 26 e0 04 st %l0, [ %i3 + 4 ]
memcpy(dir_entry, entry,
400196a0: 94 10 20 20 mov 0x20, %o2
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400196a4: c2 26 e0 08 st %g1, [ %i3 + 8 ]
memcpy(dir_entry, entry,
400196a8: 92 10 00 1d mov %i5, %o1
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
400196ac: c2 26 e0 0c st %g1, [ %i3 + 0xc ]
memcpy(dir_entry, entry,
400196b0: 40 00 09 94 call 4001bd00 <memcpy>
400196b4: 90 10 00 1c mov %i4, %o0
return RC_OK;
400196b8: 81 c7 e0 08 ret
400196bc: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one( EIO );
400196c0: 40 00 06 9f call 4001b13c <__errno>
<== NOT EXECUTED
400196c4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
400196c8: 82 10 20 05 mov 5, %g1
<== NOT EXECUTED
400196cc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400196d0: 81 c7 e0 08 ret
<== NOT EXECUTED
400196d4: 81 e8 00 00 restore
<== NOT EXECUTED
assert(ret == bts2rd);
400196d8: 17 10 00 a9 sethi %hi(0x4002a400), %o3
<== NOT EXECUTED
400196dc: 15 10 00 a9 sethi %hi(0x4002a400), %o2
<== NOT EXECUTED
400196e0: 11 10 00 a9 sethi %hi(0x4002a400), %o0
<== NOT EXECUTED
400196e4: 96 12 e1 60 or %o3, 0x160, %o3
<== NOT EXECUTED
400196e8: 94 12 a1 70 or %o2, 0x170, %o2
<== NOT EXECUTED
400196ec: 92 10 27 f0 mov 0x7f0, %o1
<== NOT EXECUTED
400196f0: 7f ff f0 6b call 4001589c <__assert_func>
<== NOT EXECUTED
400196f4: 90 12 20 98 or %o0, 0x98, %o0
<== NOT EXECUTED
400196f8: 01 00 00 00 nop
<== NOT EXECUTED
4000d9d0 <msdos_format>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
4000d9d0: 9d e3 bc d0 save %sp, -816, %sp
msdos_format_param_t fmt_params;
/*
* open device for writing
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "open device\n");
4000d9d4: 92 10 20 02 mov 2, %o1
4000d9d8: 90 10 00 19 mov %i1, %o0
4000d9dc: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000d9e0: 7f ff ff 3d call 4000d6d4 <msdos_format_printf>
4000d9e4: 94 12 a2 48 or %o2, 0x248, %o2 ! 40029e48 <_Thread_queue_Operations_default+0x6c>
fd = open(devname, O_RDWR);
4000d9e8: 92 10 20 02 mov 2, %o1
4000d9ec: 90 10 00 18 mov %i0, %o0
4000d9f0: 7f ff e1 5c call 40005f60 <open>
4000d9f4: ba 10 00 18 mov %i0, %i5
if (fd == -1) {
4000d9f8: 80 a2 3f ff cmp %o0, -1
4000d9fc: 02 80 01 09 be 4000de20 <msdos_format+0x450>
<== NEVER TAKEN
4000da00: a0 10 00 08 mov %o0, %l0
}
/*
* sanity check on device
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000da04: 96 10 00 18 mov %i0, %o3
4000da08: 92 10 20 02 mov 2, %o1
4000da0c: 90 10 00 19 mov %i1, %o0
4000da10: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000da14: 7f ff ff 30 call 4000d6d4 <msdos_format_printf>
4000da18: 94 12 a2 58 or %o2, 0x258, %o2 ! 40029e58 <_Thread_queue_Operations_default+0x7c>
"stat check: %s\n", devname);
if (ret_val == 0) {
ret_val = fstat(fd, &stat_buf);
4000da1c: 92 07 bd a0 add %fp, -608, %o1
4000da20: 7f ff de 82 call 40005428 <fstat>
4000da24: 90 10 00 10 mov %l0, %o0
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
4000da28: 96 10 00 1d mov %i5, %o3
ret_val = fstat(fd, &stat_buf);
4000da2c: b0 10 00 08 mov %o0, %i0
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
4000da30: 92 10 20 01 mov 1, %o1
4000da34: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000da38: 90 10 00 19 mov %i1, %o0
4000da3c: 7f ff ff 26 call 4000d6d4 <msdos_format_printf>
4000da40: 94 12 a2 68 or %o2, 0x268, %o2
"formating: %s\n", devname);
/* rtems feature: no block devices, all are character devices */
if ((ret_val == 0) && (!S_ISBLK(stat_buf.st_mode))) {
4000da44: 80 a6 20 00 cmp %i0, 0
4000da48: 12 80 00 ea bne 4000ddf0 <msdos_format+0x420>
<== NEVER TAKEN
4000da4c: 05 00 00 3c sethi %hi(0xf000), %g2
4000da50: c2 07 bd ac ld [ %fp + -596 ], %g1
4000da54: 82 08 40 02 and %g1, %g2, %g1
4000da58: 05 00 00 18 sethi %hi(0x6000), %g2
4000da5c: 80 a0 40 02 cmp %g1, %g2
4000da60: 12 80 00 e8 bne 4000de00 <msdos_format+0x430>
<== NEVER TAKEN
4000da64: 92 10 20 00 clr %o1
memset(fmt_params,0,sizeof(*fmt_params));
4000da68: 94 10 20 54 mov 0x54, %o2
4000da6c: 40 00 38 e1 call 4001bdf0 <memset>
4000da70: 90 07 bd 4c add %fp, -692, %o0
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);
4000da74: 94 07 bd 4c add %fp, -692, %o2
4000da78: 3b 10 01 10 sethi %hi(0x40044000), %i5
4000da7c: 90 10 00 10 mov %l0, %o0
4000da80: 40 00 20 4e call 40015bb8 <ioctl>
4000da84: 92 17 62 02 or %i5, 0x202, %o1
4000da88: d8 07 bd 50 ld [ %fp + -688 ], %o4
if (ret_val == 0) {
4000da8c: 80 a2 20 00 cmp %o0, 0
4000da90: 02 80 00 f3 be 4000de5c <msdos_format+0x48c>
<== ALWAYS TAKEN
4000da94: b0 10 00 08 mov %o0, %i0
if ( fmt_params->totl_sector_cnt == 0 )
4000da98: 80 a3 20 00 cmp %o4, 0
<== NOT EXECUTED
4000da9c: 02 80 01 d4 be 4000e1ec <msdos_format+0x81c>
<== NOT EXECUTED
4000daa0: fa 07 bd 54 ld [ %fp + -684 ], %i5
<== NOT EXECUTED
4000daa4: c2 0f bd 7c ldub [ %fp + -644 ], %g1
4000daa8: c6 07 bd 5c ld [ %fp + -676 ], %g3
4000daac: 82 58 40 03 smul %g1, %g3, %g1
4000dab0: 82 00 40 1d add %g1, %i5, %g1
fmt_params->root_dir_start_sec =
4000dab4: c2 27 bd 6c st %g1, [ %fp + -660 ]
if (fmt_params->root_dir_sectors > 0) {
4000dab8: c4 07 bd 68 ld [ %fp + -664 ], %g2
4000dabc: 80 a0 a0 00 cmp %g2, 0
4000dac0: 02 80 01 da be 4000e228 <msdos_format+0x858>
4000dac4: c2 07 bd 58 ld [ %fp + -680 ], %g1
fmt_params->root_dir_fmt_sec_cnt = fmt_params->root_dir_sectors;
4000dac8: c4 27 bd 70 st %g2, [ %fp + -656 ]
if (ret_val == 0) {
4000dacc: 80 a6 20 00 cmp %i0, 0
4000dad0: 12 80 00 c8 bne 4000ddf0 <msdos_format+0x420>
4000dad4: 80 a6 60 00 cmp %i1, 0
if ((rqdata != NULL) && (rqdata->OEMName != NULL)) {
4000dad8: 02 80 02 aa be 4000e580 <msdos_format+0xbb0>
4000dadc: 39 10 00 a7 sethi %hi(0x40029c00), %i4
4000dae0: f8 06 40 00 ld [ %i1 ], %i4
4000dae4: 80 a7 20 00 cmp %i4, 0
4000dae8: 22 80 02 a6 be,a 4000e580 <msdos_format+0xbb0>
4000daec: 39 10 00 a7 sethi %hi(0x40029c00), %i4
4000daf0: b6 07 bd 87 add %fp, -633, %i3
from = "RTEMS"; /* default: make "from" point to OS Name */
4000daf4: ba 07 bd 7f add %fp, -641, %i5
*to++=' ';
4000daf8: 10 80 00 06 b 4000db10 <msdos_format+0x140>
4000dafc: b4 10 20 20 mov 0x20, %i2
*to++ = *from++;
4000db00: b8 07 20 01 inc %i4
for (cnt = 0; cnt < (sizeof(fmt_params->OEMName)-1); cnt++) {
4000db04: 80 a7 40 1b cmp %i5, %i3
4000db08: 02 80 00 0e be 4000db40 <msdos_format+0x170>
<== NEVER TAKEN
4000db0c: c0 2f 40 00 clrb [ %i5 ]
if (isprint((unsigned char)*from)) {
4000db10: 40 00 37 d5 call 4001ba64 <__locale_ctype_ptr>
4000db14: ba 07 60 01 inc %i5
4000db18: c2 0f 00 00 ldub [ %i4 ], %g1
4000db1c: 90 02 00 01 add %o0, %g1, %o0
4000db20: c4 4a 20 01 ldsb [ %o0 + 1 ], %g2
4000db24: 80 88 a0 97 btst 0x97, %g2
4000db28: 32 bf ff f6 bne,a 4000db00 <msdos_format+0x130>
4000db2c: c2 2f 7f ff stb %g1, [ %i5 + -1 ]
*to++=' ';
4000db30: f4 2f 7f ff stb %i2, [ %i5 + -1 ]
for (cnt = 0; cnt < (sizeof(fmt_params->OEMName)-1); cnt++) {
4000db34: 80 a7 40 1b cmp %i5, %i3
4000db38: 12 bf ff f6 bne 4000db10 <msdos_format+0x140>
4000db3c: c0 2f 40 00 clrb [ %i5 ]
if ((rqdata != NULL) &&
4000db40: 80 a6 60 00 cmp %i1, 0
4000db44: 02 80 02 8d be 4000e578 <msdos_format+0xba8>
4000db48: 39 10 00 a7 sethi %hi(0x40029c00), %i4
(rqdata->VolLabel != NULL)) {
4000db4c: f8 06 60 04 ld [ %i1 + 4 ], %i4
if ((rqdata != NULL) &&
4000db50: 80 a7 20 00 cmp %i4, 0
4000db54: 02 80 02 88 be 4000e574 <msdos_format+0xba4>
4000db58: 82 10 20 01 mov 1, %g1
fmt_params->VolLabel_present = true;
4000db5c: c2 2f bd 94 stb %g1, [ %fp + -620 ]
4000db60: b6 07 bd 93 add %fp, -621, %i3
from = ""; /* default: make "from" point to empty string */
4000db64: ba 07 bd 88 add %fp, -632, %i5
*to++=' ';
4000db68: 10 80 00 06 b 4000db80 <msdos_format+0x1b0>
4000db6c: b4 10 20 20 mov 0x20, %i2
*to++ = *from++;
4000db70: b8 07 20 01 inc %i4
for (cnt = 0; cnt < (sizeof(fmt_params->VolLabel)-1); cnt++) {
4000db74: 80 a7 40 1b cmp %i5, %i3
4000db78: 02 80 00 0e be 4000dbb0 <msdos_format+0x1e0>
<== NEVER TAKEN
4000db7c: c0 2f 40 00 clrb [ %i5 ]
if (isprint((unsigned char)*from)) {
4000db80: 40 00 37 b9 call 4001ba64 <__locale_ctype_ptr>
4000db84: ba 07 60 01 inc %i5
4000db88: c2 0f 00 00 ldub [ %i4 ], %g1
4000db8c: 90 02 00 01 add %o0, %g1, %o0
4000db90: c4 4a 20 01 ldsb [ %o0 + 1 ], %g2
4000db94: 80 88 a0 97 btst 0x97, %g2
4000db98: 32 bf ff f6 bne,a 4000db70 <msdos_format+0x1a0>
4000db9c: c2 2f 7f ff stb %g1, [ %i5 + -1 ]
*to++=' ';
4000dba0: f4 2f 7f ff stb %i2, [ %i5 + -1 ]
for (cnt = 0; cnt < (sizeof(fmt_params->VolLabel)-1); cnt++) {
4000dba4: 80 a7 40 1b cmp %i5, %i3
4000dba8: 12 bf ff f6 bne 4000db80 <msdos_format+0x1b0>
4000dbac: c0 2f 40 00 clrb [ %i5 ]
rc = rtems_clock_get_tod_timeval(&time_value);
4000dbb0: 40 00 21 95 call 40016204 <rtems_clock_get_tod_timeval>
4000dbb4: 90 07 be 00 add %fp, -512, %o0
if (rc == RTEMS_SUCCESSFUL) {
4000dbb8: 80 a2 20 00 cmp %o0, 0
4000dbbc: 12 80 03 9d bne 4000ea30 <msdos_format+0x1060>
<== ALWAYS TAKEN
4000dbc0: c2 07 be 04 ld [ %fp + -508 ], %g1
*volid_ptr = time_value.tv_sec + time_value.tv_sec;
4000dbc4: 83 28 60 01 sll %g1, 1, %g1
<== NOT EXECUTED
4000dbc8: c2 27 bd 98 st %g1, [ %fp + -616 ]
<== NOT EXECUTED
ret_val = msdos_format_determine_fmt_params(fd,rqdata,&fmt_params);
}
/*
* if requested, write whole disk/partition with 0xe5
*/
if ((ret_val == 0) &&
4000dbcc: 80 a6 60 00 cmp %i1, 0
4000dbd0: 02 80 00 06 be 4000dbe8 <msdos_format+0x218>
4000dbd4: b6 10 20 00 clr %i3
(rqdata != NULL) &&
!(rqdata->quick_format)) {
4000dbd8: f6 0e 60 15 ldub [ %i1 + 0x15 ], %i3
(rqdata != NULL) &&
4000dbdc: 80 8e e0 ff btst 0xff, %i3
4000dbe0: 02 80 02 33 be 4000e4ac <msdos_format+0xadc>
<== NEVER TAKEN
4000dbe4: d8 07 bd 4c ld [ %fp + -692 ], %o4
*/
if (ret_val == 0) {
/*
* Read the current MBR to obtain the partition table.
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000dbe8: 92 10 20 02 mov 2, %o1
4000dbec: 90 10 00 19 mov %i1, %o0
4000dbf0: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000dbf4: 7f ff fe b8 call 4000d6d4 <msdos_format_printf>
4000dbf8: 94 12 a3 40 or %o2, 0x340, %o2 ! 40029f40 <_Thread_queue_Operations_default+0x164>
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
4000dbfc: 96 10 20 00 clr %o3
"read MRB sector\n");
ret_val = msdos_format_read_sec(fd,
4000dc00: fa 07 bd 4c ld [ %fp + -692 ], %i5
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
4000dc04: 92 10 20 00 clr %o1
4000dc08: 94 10 20 00 clr %o2
4000dc0c: 40 00 20 27 call 40015ca8 <lseek>
4000dc10: 90 10 00 10 mov %l0, %o0
4000dc14: 80 a2 20 00 cmp %o0, 0
4000dc18: 06 80 03 8a bl 4000ea40 <msdos_format+0x1070>
<== NEVER TAKEN
4000dc1c: 94 10 00 1d mov %i5, %o2
if (0 > read(fd,buffer,sector_size)) {
4000dc20: 92 07 be 00 add %fp, -512, %o1
4000dc24: 40 00 20 ca call 40015f4c <read>
4000dc28: 90 10 00 10 mov %l0, %o0
4000dc2c: 80 a2 20 00 cmp %o0, 0
4000dc30: 06 80 03 84 bl 4000ea40 <msdos_format+0x1070>
<== NEVER TAKEN
4000dc34: 92 10 20 02 mov 2, %o1
0,
fmt_params.bytes_per_sector,
tmp_sec);
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000dc38: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000dc3c: 90 10 00 19 mov %i1, %o0
4000dc40: 7f ff fe a5 call 4000d6d4 <msdos_format_printf>
4000dc44: 94 12 a2 f0 or %o2, 0x2f0, %o2
if (fmt_params->totl_sector_cnt < 0x10000) {
4000dc48: c2 07 bd 50 ld [ %fp + -688 ], %g1
4000dc4c: 05 00 00 3f sethi %hi(0xfc00), %g2
4000dc50: 84 10 a3 ff or %g2, 0x3ff, %g2 ! ffff <_Configuration_Interrupt_stack_size+0xefff>
4000dc54: 80 a0 40 02 cmp %g1, %g2
4000dc58: 18 80 02 20 bgu 4000e4d8 <msdos_format+0xb08>
4000dc5c: a3 30 60 08 srl %g1, 8, %l1
4000dc60: b5 30 60 08 srl %g1, 8, %i2
4000dc64: ba 10 00 01 mov %g1, %i5
4000dc68: b0 10 20 00 clr %i0
4000dc6c: b8 10 20 00 clr %i4
4000dc70: a2 10 20 00 clr %l1
4000dc74: a4 10 20 00 clr %l2
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
4000dc78: 94 10 21 be mov 0x1be, %o2
4000dc7c: 92 10 20 00 clr %o1
4000dc80: 40 00 38 5c call 4001bdf0 <memset>
4000dc84: 90 07 be 00 add %fp, -512, %o0
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
4000dc88: 94 10 20 08 mov 8, %o2
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
4000dc8c: c0 37 bf fe clrh [ %fp + -2 ]
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
4000dc90: 92 07 bd 7f add %fp, -641, %o1
4000dc94: 40 00 38 1b call 4001bd00 <memcpy>
4000dc98: 90 07 be 03 add %fp, -509, %o0
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
4000dc9c: c4 07 bd 64 ld [ %fp + -668 ], %g2
4000dca0: 83 30 a0 08 srl %g2, 8, %g1
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
4000dca4: c8 07 bd 4c ld [ %fp + -692 ], %g4
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
4000dca8: c2 2f be 12 stb %g1, [ %fp + -494 ]
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
4000dcac: 97 31 20 08 srl %g4, 8, %o3
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
4000dcb0: c2 0f bd 7d ldub [ %fp + -643 ], %g1
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
4000dcb4: c6 07 bd 54 ld [ %fp + -684 ], %g3
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
4000dcb8: c8 2f be 0b stb %g4, [ %fp + -501 ]
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
4000dcbc: 99 30 e0 08 srl %g3, 8, %o4
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
4000dcc0: c8 07 bd 58 ld [ %fp + -680 ], %g4
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
4000dcc4: c2 2f be 15 stb %g1, [ %fp + -491 ]
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
4000dcc8: 82 10 3f ff mov -1, %g1
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
4000dccc: 9a 10 20 02 mov 2, %o5
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
4000dcd0: 9e 10 20 01 mov 1, %o7
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
4000dcd4: c6 2f be 0e stb %g3, [ %fp + -498 ]
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
4000dcd8: fa 2f be 13 stb %i5, [ %fp + -493 ]
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
4000dcdc: c2 2f be 18 stb %g1, [ %fp + -488 ]
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
4000dce0: 82 10 20 06 mov 6, %g1
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
4000dce4: d6 2f be 0c stb %o3, [ %fp + -500 ]
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
4000dce8: c2 2f be 1a stb %g1, [ %fp + -486 ]
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
4000dcec: c8 2f be 0d stb %g4, [ %fp + -499 ]
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
4000dcf0: d8 2f be 0f stb %o4, [ %fp + -497 ]
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
4000dcf4: da 2f be 10 stb %o5, [ %fp + -496 ]
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
4000dcf8: c4 2f be 11 stb %g2, [ %fp + -495 ]
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
4000dcfc: f4 2f be 14 stb %i2, [ %fp + -492 ]
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
4000dd00: de 2f be 1c stb %o7, [ %fp + -484 ]
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
4000dd04: e4 2f be 20 stb %l2, [ %fp + -480 ]
4000dd08: e2 2f be 21 stb %l1, [ %fp + -479 ]
4000dd0c: f8 2f be 22 stb %i4, [ %fp + -478 ]
4000dd10: f0 2f be 23 stb %i0, [ %fp + -477 ]
4000dd14: c2 07 bd 5c ld [ %fp + -676 ], %g1
if (fmt_params->fattype != FAT_FAT32) {
4000dd18: fa 0f bd 7e ldub [ %fp + -642 ], %i5
4000dd1c: 80 a7 60 04 cmp %i5, 4
4000dd20: 02 80 03 1b be 4000e98c <msdos_format+0xfbc>
4000dd24: 87 30 60 08 srl %g1, 8, %g3
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
4000dd28: c4 07 bd 98 ld [ %fp + -616 ], %g2
4000dd2c: 89 30 a0 18 srl %g2, 0x18, %g4
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
4000dd30: c2 2f be 16 stb %g1, [ %fp + -490 ]
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
4000dd34: 82 10 20 29 mov 0x29, %g1
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
4000dd38: b5 30 a0 08 srl %g2, 8, %i2
4000dd3c: b9 30 a0 10 srl %g2, 0x10, %i4
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
4000dd40: c6 2f be 17 stb %g3, [ %fp + -489 ]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
4000dd44: 94 10 20 0b mov 0xb, %o2
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
4000dd48: c2 2f be 26 stb %g1, [ %fp + -474 ]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
4000dd4c: 92 07 bd 88 add %fp, -632, %o1
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
4000dd50: c4 2f be 27 stb %g2, [ %fp + -473 ]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
4000dd54: 90 07 be 2b add %fp, -469, %o0
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
4000dd58: f4 2f be 28 stb %i2, [ %fp + -472 ]
4000dd5c: f8 2f be 29 stb %i4, [ %fp + -471 ]
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
4000dd60: 40 00 37 e8 call 4001bd00 <memcpy>
4000dd64: c8 2f be 2a stb %g4, [ %fp + -470 ]
memcpy(FAT_GET_ADDR_BR_FILSYSTYPE(mbr),
4000dd68: 80 a7 60 01 cmp %i5, 1
4000dd6c: 02 80 03 4c be 4000ea9c <msdos_format+0x10cc>
4000dd70: 03 10 00 a7 sethi %hi(0x40029c00), %g1
4000dd74: 03 10 00 a7 sethi %hi(0x40029c00), %g1
4000dd78: 82 10 62 38 or %g1, 0x238, %g1 ! 40029e38 <_Thread_queue_Operations_default+0x5c>
4000dd7c: c8 10 40 00 lduh [ %g1 ], %g4
4000dd80: c6 10 60 02 lduh [ %g1 + 2 ], %g3
4000dd84: c4 10 60 04 lduh [ %g1 + 4 ], %g2
4000dd88: c2 10 60 06 lduh [ %g1 + 6 ], %g1
4000dd8c: c8 37 be 36 sth %g4, [ %fp + -458 ]
4000dd90: c6 37 be 38 sth %g3, [ %fp + -456 ]
4000dd94: c4 37 be 3a sth %g2, [ %fp + -454 ]
4000dd98: c2 37 be 3c sth %g1, [ %fp + -452 ]
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
4000dd9c: 03 00 00 15 sethi %hi(0x5400), %g1
4000dda0: 82 10 61 aa or %g1, 0x1aa, %g1 ! 55aa <_Configuration_Interrupt_stack_size+0x45aa>
4000dda4: c2 37 bf fe sth %g1, [ %fp + -2 ]
FAT_SET_VAL8(mbr,0,0xeb);
4000dda8: 03 3f ff fa sethi %hi(0xffffe800), %g1
4000ddac: 82 10 63 3c or %g1, 0x33c, %g1 ! ffffeb3c <RAM_END+0xbfbfeb3c>
4000ddb0: c2 37 be 00 sth %g1, [ %fp + -512 ]
FAT_SET_VAL8(mbr,1,0x3c);
4000ddb4: 82 10 3f 90 mov -112, %g1
/*
* 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,
4000ddb8: 92 10 20 02 mov 2, %o1
4000ddbc: 90 10 00 19 mov %i1, %o0
FAT_SET_VAL8(mbr,1,0x3c);
4000ddc0: c2 2f be 02 stb %g1, [ %fp + -510 ]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000ddc4: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000ddc8: 7f ff fe 43 call 4000d6d4 <msdos_format_printf>
4000ddcc: 94 12 a3 08 or %o2, 0x308, %o2 ! 40029f08 <_Thread_queue_Operations_default+0x12c>
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
4000ddd0: d4 07 bd 4c ld [ %fp + -692 ], %o2
4000ddd4: 96 07 be 00 add %fp, -512, %o3
4000ddd8: 92 10 20 00 clr %o1
4000dddc: 7f ff fe 58 call 4000d73c <msdos_format_write_sec>
4000dde0: 90 10 00 10 mov %l0, %o0
0,
fmt_params.bytes_per_sector,
tmp_sec);
}
if ((ret_val == 0) &&
4000dde4: b0 92 20 00 orcc %o0, 0, %i0
4000dde8: 02 80 01 12 be 4000e230 <msdos_format+0x860>
<== ALWAYS TAKEN
4000ddec: c2 07 bd 74 ld [ %fp + -652 ], %g1
* cleanup:
* sync and unlock disk
* free any data structures (not needed now)
*/
if (fd != -1) {
close(fd);
4000ddf0: 7f ff dd 18 call 40005250 <close>
4000ddf4: 90 10 00 10 mov %l0, %o0
}
return ret_val;
}
4000ddf8: 81 c7 e0 08 ret
4000ddfc: 81 e8 00 00 restore
errno = ENOTTY;
4000de00: 40 00 34 cf call 4001b13c <__errno>
<== NOT EXECUTED
4000de04: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4000de08: 82 10 20 19 mov 0x19, %g1
<== NOT EXECUTED
4000de0c: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
close(fd);
4000de10: 7f ff dd 10 call 40005250 <close>
<== NOT EXECUTED
4000de14: 90 10 00 10 mov %l0, %o0
<== NOT EXECUTED
}
4000de18: 81 c7 e0 08 ret
<== NOT EXECUTED
4000de1c: 81 e8 00 00 restore
<== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000de20: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
4000de24: 96 10 00 18 mov %i0, %o3
<== NOT EXECUTED
4000de28: 92 10 20 02 mov 2, %o1
<== NOT EXECUTED
4000de2c: 15 10 00 a7 sethi %hi(0x40029c00), %o2
<== NOT EXECUTED
4000de30: 7f ff fe 29 call 4000d6d4 <msdos_format_printf>
<== NOT EXECUTED
4000de34: 94 12 a2 58 or %o2, 0x258, %o2 ! 40029e58 <_Thread_queue_Operations_default+0x7c>
<== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
4000de38: 96 10 00 18 mov %i0, %o3
<== NOT EXECUTED
4000de3c: 92 10 20 01 mov 1, %o1
<== NOT EXECUTED
ret_val= -1;
4000de40: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
4000de44: 15 10 00 a7 sethi %hi(0x40029c00), %o2
<== NOT EXECUTED
4000de48: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
4000de4c: 7f ff fe 22 call 4000d6d4 <msdos_format_printf>
<== NOT EXECUTED
4000de50: 94 12 a2 68 or %o2, 0x268, %o2
<== NOT EXECUTED
4000de54: 81 c7 e0 08 ret
<== NOT EXECUTED
4000de58: 81 e8 00 00 restore
<== NOT EXECUTED
static inline int rtems_disk_fd_get_block_count(
int fd,
rtems_blkdev_bnum *block_count
)
{
return ioctl(fd, RTEMS_BLKIO_GETSIZE, block_count);
4000de5c: 94 07 bd 50 add %fp, -688, %o2
4000de60: 92 17 62 05 or %i5, 0x205, %o1
4000de64: 40 00 1f 55 call 40015bb8 <ioctl>
4000de68: 90 10 00 10 mov %l0, %o0
if (ret_val == 0) {
4000de6c: b0 92 20 00 orcc %o0, 0, %i0
4000de70: 12 80 01 c6 bne 4000e588 <msdos_format+0xbb8>
<== NEVER TAKEN
4000de74: d6 07 bd 4c ld [ %fp + -692 ], %o3
total_size = (uint64_t)fmt_params->bytes_per_sector * fmt_params->totl_sector_cnt;
4000de78: d8 07 bd 50 ld [ %fp + -688 ], %o4
4000de7c: ba 52 c0 0c umul %o3, %o4, %i5
4000de80: b9 40 00 00 rd %y, %i4
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000de84: fa 23 a0 5c st %i5, [ %sp + 0x5c ]
4000de88: 9a 10 00 1c mov %i4, %o5
4000de8c: f8 3f bd 40 std %i4, [ %fp + -704 ]
4000de90: 92 10 20 02 mov 2, %o1
4000de94: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000de98: 90 10 00 19 mov %i1, %o0
4000de9c: 7f ff fe 0e call 4000d6d4 <msdos_format_printf>
4000dea0: 94 12 a2 78 or %o2, 0x278, %o2
if ((rqdata == NULL) || (rqdata->fat_num == 0)) {
4000dea4: 80 a6 60 00 cmp %i1, 0
4000dea8: 02 80 02 72 be 4000e870 <msdos_format+0xea0>
4000deac: 82 10 20 02 mov 2, %g1
4000deb0: d6 06 60 0c ld [ %i1 + 0xc ], %o3
4000deb4: 80 a2 e0 00 cmp %o3, 0
4000deb8: 22 80 01 b6 be,a 4000e590 <msdos_format+0xbc0>
4000debc: 96 10 20 02 mov 2, %o3
else if (rqdata->fat_num <= 6) {
4000dec0: 80 a2 e0 06 cmp %o3, 6
4000dec4: 18 80 02 f8 bgu 4000eaa4 <msdos_format+0x10d4>
4000dec8: 01 00 00 00 nop
fmt_params->fat_num = rqdata->fat_num;
4000decc: d6 2f bd 7c stb %o3, [ %fp + -644 ]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000ded0: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000ded4: 92 10 20 02 mov 2, %o1
4000ded8: 94 12 a2 b8 or %o2, 0x2b8, %o2
4000dedc: 7f ff fd fe call 4000d6d4 <msdos_format_printf>
4000dee0: 90 10 00 19 mov %i1, %o0
if (rqdata != NULL && rqdata->sectors_per_cluster != 0) {
4000dee4: c2 06 60 08 ld [ %i1 + 8 ], %g1
4000dee8: 80 a0 60 00 cmp %g1, 0
4000deec: 02 80 02 69 be 4000e890 <msdos_format+0xec0>
4000def0: 05 00 00 1f sethi %hi(0x7c00), %g2
4000def4: 84 58 6f f5 smul %g1, 0xff5, %g2
if (fmt_params->totl_sector_cnt < FAT_FAT12_MAX_CLN * fat12_sect_per_clust) {
4000def8: c6 07 bd 50 ld [ %fp + -688 ], %g3
4000defc: 80 a0 c0 02 cmp %g3, %g2
4000df00: 1a 80 02 67 bcc 4000e89c <msdos_format+0xecc>
4000df04: 05 00 00 3f sethi %hi(0xfc00), %g2
fmt_params->fattype = FAT_FAT12;
4000df08: 82 10 20 01 mov 1, %g1
4000df0c: c2 2f bd 7e stb %g1, [ %fp + -642 ]
fmt_params->sectors_per_cluster = 2;
4000df10: 82 10 20 02 mov 2, %g1
4000df14: c2 27 bd 58 st %g1, [ %fp + -680 ]
ret_val = msdos_set_sectors_per_cluster_from_request( rqdata, fmt_params );
4000df18: 92 07 bd 4c add %fp, -692, %o1
4000df1c: 94 07 bd 58 add %fp, -680, %o2
4000df20: 7f ff fe 88 call 4000d940 <msdos_set_sectors_per_cluster_from_request.isra.1>
4000df24: 90 10 00 19 mov %i1, %o0
if (ret_val == 0) {
4000df28: b0 92 20 00 orcc %o0, 0, %i0
4000df2c: 12 bf fe db bne 4000da98 <msdos_format+0xc8>
<== NEVER TAKEN
4000df30: d8 07 bd 50 ld [ %fp + -688 ], %o4
&& fmt_params->fattype != fat_type
4000df34: c4 0f bd 7e ldub [ %fp + -642 ], %g2
4000df38: 80 a0 a0 ff cmp %g2, 0xff
4000df3c: 02 80 02 e6 be 4000ead4 <msdos_format+0x1104>
<== NEVER TAKEN
4000df40: c2 07 bd 50 ld [ %fp + -688 ], %g1
&& fmt_params->totl_sector_cnt > 0 ) {
4000df44: 80 a0 60 00 cmp %g1, 0
4000df48: 02 80 00 a9 be 4000e1ec <msdos_format+0x81c>
<== NEVER TAKEN
4000df4c: 01 00 00 00 nop
uint32_t gigs = ( total_size + ONE_GB ) / ONE_GB;
4000df50: 37 10 00 00 sethi %hi(0x40000000), %i3
uint32_t ms_sectors_per_cluster_limit_FAT12 =
4000df54: f0 27 bd 38 st %i0, [ %fp + -712 ]
uint32_t gigs = ( total_size + ONE_GB ) / ONE_GB;
4000df58: 9a 87 40 1b addcc %i5, %i3, %o5
4000df5c: 83 33 60 1e srl %o5, 0x1e, %g1
4000df60: b4 10 20 00 clr %i2
4000df64: 98 47 00 1a addx %i4, %i2, %o4
4000df68: 85 2b 20 02 sll %o4, 2, %g2
4000df6c: b6 10 80 01 or %g2, %g1, %i3
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000df70: 03 10 00 a7 sethi %hi(0x40029c00), %g1
4000df74: 82 10 62 d0 or %g1, 0x2d0, %g1 ! 40029ed0 <_Thread_queue_Operations_default+0xf4>
if (MS_BYTES_PER_CLUSTER_LIMIT_FAT12 < (sectors_per_cluster * bytes_per_sector)) {
4000df78: 23 00 00 04 sethi %hi(0x1000), %l1
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000df7c: c2 27 bd 3c st %g1, [ %fp + -708 ]
uint32_t ms_sectors_per_cluster_limit_FAT16 =
4000df80: 2b 00 00 20 sethi %hi(0x8000), %l5
((fattype == FAT_FAT16) && (*data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
4000df84: 03 00 00 3f sethi %hi(0xfc00), %g1
uint32_t gigs = ( total_size + ONE_GB ) / ONE_GB;
4000df88: a4 10 20 00 clr %l2
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
4000df8c: 29 00 00 40 sethi %hi(0x10000), %l4
((fattype == FAT_FAT16) && (*data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
4000df90: a6 10 63 f5 or %g1, 0x3f5, %l3
uint32_t ms_sectors_per_cluster_limit_FAT16 =
4000df94: aa 15 60 01 or %l5, 1, %l5
uint32_t ms_sectors_per_cluster_limit_FAT12 =
4000df98: ac 14 60 01 or %l1, 1, %l6
if (ret_val == 0 && rqdata != NULL)
4000df9c: 80 a6 60 00 cmp %i1, 0
4000dfa0: 02 80 02 00 be 4000e7a0 <msdos_format+0xdd0>
4000dfa4: d6 07 bd 58 ld [ %fp + -680 ], %o3
fmt_params->skip_alignment = rqdata->skip_alignment;
4000dfa8: c2 0e 60 16 ldub [ %i1 + 0x16 ], %g1
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000dfac: d4 07 bd 3c ld [ %fp + -708 ], %o2
fmt_params->skip_alignment = rqdata->skip_alignment;
4000dfb0: c2 2f bd 9c stb %g1, [ %fp + -612 ]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000dfb4: 92 10 20 02 mov 2, %o1
4000dfb8: 7f ff fd c7 call 4000d6d4 <msdos_format_printf>
4000dfbc: 90 10 00 19 mov %i1, %o0
if (fmt_params->fattype == FAT_FAT32) {
4000dfc0: ee 0f bd 7e ldub [ %fp + -642 ], %l7
4000dfc4: ba 0d e0 ff and %l7, 0xff, %i5
4000dfc8: 80 a7 60 04 cmp %i5, 4
4000dfcc: 02 80 01 fe be 4000e7c4 <msdos_format+0xdf4>
4000dfd0: 82 10 00 17 mov %l7, %g1
fmt_params->rsvd_sector_cnt = 1;
4000dfd4: 84 10 20 01 mov 1, %g2
4000dfd8: c4 27 bd 54 st %g2, [ %fp + -684 ]
(rqdata->files_per_root_dir > 0)) {
4000dfdc: c6 06 60 10 ld [ %i1 + 0x10 ], %g3
if ((rqdata != NULL) &&
4000dfe0: 80 a0 e0 00 cmp %g3, 0
4000dfe4: 02 80 02 0f be 4000e820 <msdos_format+0xe50>
4000dfe8: 80 a7 60 02 cmp %i5, 2
4000dfec: 86 00 ff ff add %g3, -1, %g3
4000dff0: 96 10 20 01 mov 1, %o3
(2*fmt_params->bytes_per_sector/
4000dff4: f8 07 bd 4c ld [ %fp + -692 ], %i4
4000dff8: 83 2f 20 01 sll %i4, 1, %g1
4000dffc: 85 30 60 05 srl %g1, 5, %g2
fmt_params->files_per_root_dir = (fmt_params->files_per_root_dir +
4000e000: 86 00 80 03 add %g2, %g3, %g3
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
4000e004: 81 80 20 00 wr %g0, %y
4000e008: 01 00 00 00 nop
4000e00c: 01 00 00 00 nop
4000e010: 01 00 00 00 nop
4000e014: 82 70 c0 02 udiv %g3, %g2, %g1
4000e018: 82 58 40 02 smul %g1, %g2, %g1
4000e01c: c2 27 bd 64 st %g1, [ %fp + -668 ]
4000e020: 83 28 60 05 sll %g1, 5, %g1
4000e024: 9a 07 3f ff add %i4, -1, %o5
+ fmt_params->bytes_per_sector - 1)
4000e028: 82 03 40 01 add %o5, %g1, %g1
/ fmt_params->bytes_per_sector);
4000e02c: 81 80 20 00 wr %g0, %y
4000e030: 01 00 00 00 nop
4000e034: 01 00 00 00 nop
4000e038: 01 00 00 00 nop
4000e03c: 92 70 40 1c udiv %g1, %i4, %o1
fmt_params->root_dir_sectors =
4000e040: d2 27 bd 68 st %o1, [ %fp + -664 ]
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
4000e044: 81 80 20 00 wr %g0, %y
4000e048: 01 00 00 00 nop
4000e04c: 01 00 00 00 nop
4000e050: 01 00 00 00 nop
4000e054: 84 75 00 1c udiv %l4, %i4, %g2
ret_val = msdos_format_eval_sectors_per_cluster(fmt_params->fattype,
4000e058: c2 07 bd 58 ld [ %fp + -680 ], %g1
4000e05c: d8 07 bd 50 ld [ %fp + -688 ], %o4
4000e060: de 0f bd 7c ldub [ %fp + -644 ], %o7
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
4000e064: 80 a0 40 02 cmp %g1, %g2
4000e068: 08 80 00 06 bleu 4000e080 <msdos_format+0x6b0>
<== ALWAYS TAKEN
4000e06c: f0 0f bd 9c ldub [ %fp + -612 ], %i0
sectors_per_cluster /= 2;
4000e070: 83 30 60 01 srl %g1, 1, %g1
<== NOT EXECUTED
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
4000e074: 80 a0 40 02 cmp %g1, %g2
<== NOT EXECUTED
4000e078: 38 bf ff ff bgu,a 4000e074 <msdos_format+0x6a4>
<== NOT EXECUTED
4000e07c: 83 30 60 01 srl %g1, 1, %g1
<== NOT EXECUTED
fatdata_sect_cnt = total_sector_cnt
4000e080: 94 23 00 0b sub %o4, %o3, %o2
4000e084: 9e 0b e0 ff and %o7, 0xff, %o7
4000e088: b0 0e 20 ff and %i0, 0xff, %i0
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e08c: 96 02 ff ff add %o3, -1, %o3
4000e090: 90 02 7f ff add %o1, -1, %o0
if (! skip_alignment)
4000e094: 80 a6 20 00 cmp %i0, 0
4000e098: 12 80 01 40 bne 4000e598 <msdos_format+0xbc8>
4000e09c: 80 a7 60 01 cmp %i5, 1
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e0a0: 84 20 00 01 neg %g1, %g2
4000e0a4: 86 02 c0 01 add %o3, %g1, %g3
4000e0a8: 86 08 c0 02 and %g3, %g2, %g3
if (fattype == FAT_FAT12) {
4000e0ac: 02 80 01 6a be 4000e654 <msdos_format+0xc84>
4000e0b0: 86 23 00 03 sub %o4, %g3, %g3
else if (fattype == FAT_FAT16) {
4000e0b4: 80 a7 60 02 cmp %i5, 2
4000e0b8: 22 80 01 b8 be,a 4000e798 <msdos_format+0xdc8>
4000e0bc: 88 02 00 01 add %o0, %g1, %g4
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
4000e0c0: 81 80 20 00 wr %g0, %y
4000e0c4: 01 00 00 00 nop
4000e0c8: 01 00 00 00 nop
4000e0cc: 01 00 00 00 nop
4000e0d0: 84 70 c0 01 udiv %g3, %g1, %g2
fat_capacity = fatdata_cluster_cnt * 4;
4000e0d4: 89 28 a0 02 sll %g2, 2, %g4
+ (bytes_per_sector - 1))
4000e0d8: 88 03 40 04 add %o5, %g4, %g4
4000e0dc: b4 00 7f ff add %g1, -1, %i2
sectors_per_fat = ((fat_capacity
4000e0e0: 81 80 20 00 wr %g0, %y
4000e0e4: 01 00 00 00 nop
4000e0e8: 01 00 00 00 nop
4000e0ec: 01 00 00 00 nop
4000e0f0: 86 71 00 1c udiv %g4, %i4, %g3
if (! skip_alignment)
4000e0f4: 80 a6 20 00 cmp %i0, 0
fat_sectors_cnt = loc_align_object (sectors_per_fat * fat_num,
4000e0f8: 86 58 c0 0f smul %g3, %o7, %g3
if (! skip_alignment)
4000e0fc: 12 80 00 05 bne 4000e110 <msdos_format+0x740>
4000e100: 88 00 c0 1a add %g3, %i2, %g4
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e104: 86 20 00 01 neg %g1, %g3
4000e108: 86 08 c0 04 and %g3, %g4, %g3
4000e10c: 88 00 c0 1a add %g3, %i2, %g4
/ sectors_per_cluster));
4000e110: 81 80 20 00 wr %g0, %y
4000e114: 01 00 00 00 nop
4000e118: 01 00 00 00 nop
4000e11c: 01 00 00 00 nop
4000e120: b4 71 00 01 udiv %g4, %g1, %i2
if (((fattype == FAT_FAT12) && (*data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
4000e124: 80 a7 60 01 cmp %i5, 1
4000e128: 02 80 01 29 be 4000e5cc <msdos_format+0xbfc>
4000e12c: 84 20 80 1a sub %g2, %i2, %g2
4000e130: 80 a7 60 02 cmp %i5, 2
4000e134: 12 80 00 09 bne 4000e158 <msdos_format+0x788>
4000e138: 80 a0 80 13 cmp %g2, %l3
((fattype == FAT_FAT16) && (*data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
4000e13c: 28 80 01 54 bleu,a 4000e68c <msdos_format+0xcbc>
4000e140: c2 27 bd 58 st %g1, [ %fp + -680 ]
sectors_per_cluster *= 2;
4000e144: 83 28 60 01 sll %g1, 1, %g1
} else if ((sectors_per_cluster * bytes_per_sector)
4000e148: 88 5f 00 01 smul %i4, %g1, %g4
4000e14c: 80 a1 00 14 cmp %g4, %l4
4000e150: 08 bf ff d2 bleu 4000e098 <msdos_format+0x6c8>
<== ALWAYS TAKEN
4000e154: 80 a6 20 00 cmp %i0, 0
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e158: 81 80 20 00 wr %g0, %y
4000e15c: 01 00 00 00 nop
4000e160: 01 00 00 00 nop
4000e164: 01 00 00 00 nop
4000e168: 88 70 c0 0f udiv %g3, %o7, %g4
fmt_params->sectors_per_cluster = sectors_per_cluster_adj;
4000e16c: c2 27 bd 58 st %g1, [ %fp + -680 ]
uint32_t ms_sectors_per_cluster_limit_FAT12 =
4000e170: 81 80 20 00 wr %g0, %y
4000e174: 01 00 00 00 nop
4000e178: 01 00 00 00 nop
4000e17c: 01 00 00 00 nop
4000e180: 86 75 80 1c udiv %l6, %i4, %g3
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e184: c8 27 bd 5c st %g4, [ %fp + -676 ]
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e188: 80 a0 c0 01 cmp %g3, %g1
uint32_t ms_sectors_per_cluster_limit_FAT16 =
4000e18c: 81 80 20 00 wr %g0, %y
4000e190: 01 00 00 00 nop
4000e194: 01 00 00 00 nop
4000e198: 01 00 00 00 nop
4000e19c: 88 75 40 1c udiv %l5, %i4, %g4
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e1a0: 0a 80 02 52 bcs 4000eae8 <msdos_format+0x1118>
4000e1a4: 80 a0 af f4 cmp %g2, 0xff4
4000e1a8: 18 80 02 50 bgu 4000eae8 <msdos_format+0x1118>
<== ALWAYS TAKEN
4000e1ac: 86 10 20 01 mov 1, %g3
if (fat_type != fmt_params->fattype) {
4000e1b0: ae 08 e0 ff and %g3, 0xff, %l7
4000e1b4: 80 a7 40 17 cmp %i5, %l7
4000e1b8: 12 80 01 a1 bne 4000e83c <msdos_format+0xe6c>
<== ALWAYS TAKEN
4000e1bc: c6 2f bd 7e stb %g3, [ %fp + -642 ]
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
4000e1c0: ae 1f 40 17 xor %i5, %l7, %l7
4000e1c4: 84 10 00 0c mov %o4, %g2
4000e1c8: 80 a0 00 17 cmp %g0, %l7
++iteration_cnt;
4000e1cc: a4 04 a0 01 inc %l2
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
4000e1d0: 82 40 20 00 addx %g0, 0, %g1
&& fmt_params->fattype != fat_type
4000e1d4: 80 88 60 ff btst 0xff, %g1
4000e1d8: 02 80 01 bb be 4000e8c4 <msdos_format+0xef4>
4000e1dc: 80 a3 20 00 cmp %o4, 0
&& fmt_params->totl_sector_cnt > 0 ) {
4000e1e0: 80 a0 a0 00 cmp %g2, 0
4000e1e4: 12 bf ff 6f bne 4000dfa0 <msdos_format+0x5d0>
<== ALWAYS TAKEN
4000e1e8: 80 a6 60 00 cmp %i1, 0
errno = EINVAL;
4000e1ec: 40 00 33 d4 call 4001b13c <__errno>
4000e1f0: b0 10 3f ff mov -1, %i0
4000e1f4: 82 10 20 16 mov 0x16, %g1
4000e1f8: fa 07 bd 54 ld [ %fp + -684 ], %i5
4000e1fc: c2 22 00 00 st %g1, [ %o0 ]
4000e200: c2 0f bd 7c ldub [ %fp + -644 ], %g1
4000e204: c6 07 bd 5c ld [ %fp + -676 ], %g3
4000e208: 82 58 40 03 smul %g1, %g3, %g1
4000e20c: 82 00 40 1d add %g1, %i5, %g1
fmt_params->root_dir_start_sec =
4000e210: c2 27 bd 6c st %g1, [ %fp + -660 ]
if (fmt_params->root_dir_sectors > 0) {
4000e214: c4 07 bd 68 ld [ %fp + -664 ], %g2
4000e218: 80 a0 a0 00 cmp %g2, 0
4000e21c: 32 bf fe 2c bne,a 4000dacc <msdos_format+0xfc>
<== ALWAYS TAKEN
4000e220: c4 27 bd 70 st %g2, [ %fp + -656 ]
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
4000e224: c2 07 bd 58 ld [ %fp + -680 ], %g1
<== NOT EXECUTED
4000e228: 10 bf fe 29 b 4000dacc <msdos_format+0xfc>
4000e22c: c2 27 bd 70 st %g1, [ %fp + -656 ]
if ((ret_val == 0) &&
4000e230: 80 a0 60 00 cmp %g1, 0
4000e234: 02 80 00 0e be 4000e26c <msdos_format+0x89c>
4000e238: 92 10 20 02 mov 2, %o1
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000e23c: 90 10 00 19 mov %i1, %o0
4000e240: 15 10 00 a7 sethi %hi(0x40029c00), %o2
4000e244: 7f ff fd 24 call 4000d6d4 <msdos_format_printf>
4000e248: 94 12 a3 20 or %o2, 0x320, %o2 ! 40029f20 <_Thread_queue_Operations_default+0x144>
ret_val = msdos_format_write_sec(fd,
4000e24c: d4 07 bd 4c ld [ %fp + -692 ], %o2
4000e250: d2 07 bd 74 ld [ %fp + -652 ], %o1
4000e254: 96 07 be 00 add %fp, -512, %o3
4000e258: 7f ff fd 39 call 4000d73c <msdos_format_write_sec>
4000e25c: 90 10 00 10 mov %l0, %o0
if ((ret_val == 0) &&
4000e260: b0 92 20 00 orcc %o0, 0, %i0
4000e264: 12 bf fe e3 bne 4000ddf0 <msdos_format+0x420>
<== NEVER TAKEN
4000e268: 01 00 00 00 nop
(fmt_params.fsinfo_sec != 0)) {
4000e26c: fa 07 bd 78 ld [ %fp + -648 ], %i5
if ((ret_val == 0) &&
4000e270: 80 a7 60 00 cmp %i5, 0
4000e274: 12 80 00 72 bne 4000e43c <msdos_format+0xa6c>
4000e278: d8 07 bd 4c ld [ %fp + -692 ], %o4
fmt_params.fat_num*fmt_params.sectors_per_fat,/* sector count */
4000e27c: d6 0f bd 7c ldub [ %fp + -644 ], %o3
ret_val = msdos_format_fill_sectors
4000e280: c2 07 bd 5c ld [ %fp + -676 ], %g1
4000e284: d4 07 bd 54 ld [ %fp + -684 ], %o2
4000e288: 9a 10 20 00 clr %o5
4000e28c: 96 5a c0 01 smul %o3, %g1, %o3
4000e290: 92 10 00 10 mov %l0, %o1
4000e294: 7f ff fd 3d call 4000d788 <msdos_format_fill_sectors>
4000e298: 90 10 00 19 mov %i1, %o0
if (ret_val == 0) {
4000e29c: b0 92 20 00 orcc %o0, 0, %i0
4000e2a0: 12 bf fe d4 bne 4000ddf0 <msdos_format+0x420>
<== NEVER TAKEN
4000e2a4: d8 07 bd 4c ld [ %fp + -692 ], %o4
ret_val = msdos_format_fill_sectors
4000e2a8: d6 07 bd 70 ld [ %fp + -656 ], %o3
4000e2ac: d4 07 bd 6c ld [ %fp + -660 ], %o2
4000e2b0: 9a 10 20 00 clr %o5
4000e2b4: 92 10 00 10 mov %l0, %o1
4000e2b8: 7f ff fd 34 call 4000d788 <msdos_format_fill_sectors>
4000e2bc: 90 10 00 19 mov %i1, %o0
if ((ret_val == 0) && fmt_params.VolLabel_present) {
4000e2c0: b0 92 20 00 orcc %o0, 0, %i0
4000e2c4: 12 bf fe cb bne 4000ddf0 <msdos_format+0x420>
<== NEVER TAKEN
4000e2c8: c2 0f bd 94 ldub [ %fp + -620 ], %g1
4000e2cc: 80 a0 60 00 cmp %g1, 0
4000e2d0: 12 80 00 44 bne 4000e3e0 <msdos_format+0xa10>
4000e2d4: 94 10 22 00 mov 0x200, %o2
memset(tmp_sec,0,sizeof(tmp_sec));
4000e2d8: 92 10 20 00 clr %o1
4000e2dc: 40 00 36 c5 call 4001bdf0 <memset>
4000e2e0: 90 07 be 00 add %fp, -512, %o0
switch(fmt_params.fattype) {
4000e2e4: c2 0f bd 7e ldub [ %fp + -642 ], %g1
4000e2e8: 80 a0 60 02 cmp %g1, 2
4000e2ec: 02 80 00 99 be 4000e550 <msdos_format+0xb80>
4000e2f0: 80 a0 60 04 cmp %g1, 4
4000e2f4: 02 80 00 7f be 4000e4f0 <msdos_format+0xb20>
4000e2f8: 80 a0 60 01 cmp %g1, 1
4000e2fc: 02 80 00 8e be 4000e534 <msdos_format+0xb64>
<== ALWAYS TAKEN
4000e300: c2 0f bd 7d ldub [ %fp + -643 ], %g1
errno = EINVAL;
4000e304: 40 00 33 8e call 4001b13c <__errno>
<== NOT EXECUTED
4000e308: ba 10 3f ff mov -1, %i5
<== NOT EXECUTED
4000e30c: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4000e310: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
if (fmt_params.fattype == FAT_FAT32) {
4000e314: c2 0f bd 7e ldub [ %fp + -642 ], %g1
<== NOT EXECUTED
4000e318: 80 a0 60 04 cmp %g1, 4
<== NOT EXECUTED
4000e31c: 22 80 00 83 be,a 4000e528 <msdos_format+0xb58>
<== NOT EXECUTED
4000e320: 03 3e 3f ff sethi %hi(0xf8fffc00), %g1
<== NOT EXECUTED
if (! skip_alignment)
4000e324: c4 0f bd 9c ldub [ %fp + -612 ], %g2
start_sector = loc_align_object (fmt_params.rsvd_sector_cnt,
4000e328: f8 07 bd 54 ld [ %fp + -684 ], %i4
if (! skip_alignment)
4000e32c: 80 a0 a0 00 cmp %g2, 0
4000e330: 12 80 00 06 bne 4000e348 <msdos_format+0x978>
4000e334: c2 07 bd 58 ld [ %fp + -680 ], %g1
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e338: b8 07 00 01 add %i4, %g1, %i4
4000e33c: 82 20 00 01 neg %g1
4000e340: b8 07 3f ff add %i4, -1, %i4
4000e344: b8 0f 00 01 and %i4, %g1, %i4
for (i = 0;
4000e348: c2 0f bd 7c ldub [ %fp + -644 ], %g1
4000e34c: 80 a0 60 00 cmp %g1, 0
4000e350: 02 80 01 d1 be 4000ea94 <msdos_format+0x10c4>
<== NEVER TAKEN
4000e354: 80 a7 60 00 cmp %i5, 0
(i < fmt_params.fat_num) && (ret_val == 0);
4000e358: 02 80 00 06 be 4000e370 <msdos_format+0x9a0>
<== ALWAYS TAKEN
4000e35c: d2 07 bd 5c ld [ %fp + -676 ], %o1
ret_val = -1;
4000e360: 10 bf fe a4 b 4000ddf0 <msdos_format+0x420>
<== NOT EXECUTED
4000e364: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
(i < fmt_params.fat_num) && (ret_val == 0);
4000e368: 12 80 00 19 bne 4000e3cc <msdos_format+0x9fc>
<== NEVER TAKEN
4000e36c: d2 07 bd 5c ld [ %fp + -676 ], %o1
ret_val = msdos_format_write_sec
4000e370: d4 07 bd 4c ld [ %fp + -692 ], %o2
+ (i * fmt_params.sectors_per_fat),
4000e374: 92 5f 40 09 smul %i5, %o1, %o1
ret_val = msdos_format_write_sec
4000e378: 96 07 be 00 add %fp, -512, %o3
4000e37c: 92 02 40 1c add %o1, %i4, %o1
4000e380: 7f ff fc ef call 4000d73c <msdos_format_write_sec>
4000e384: 90 10 00 10 mov %l0, %o0
(i < fmt_params.fat_num) && (ret_val == 0);
4000e388: c2 0f bd 7c ldub [ %fp + -644 ], %g1
i++) {
4000e38c: ba 07 60 01 inc %i5
for (i = 0;
4000e390: 80 a0 40 1d cmp %g1, %i5
4000e394: 14 bf ff f5 bg 4000e368 <msdos_format+0x998>
4000e398: 80 a2 20 00 cmp %o0, 0
if (ret_val == 0 && rqdata != NULL && rqdata->sync_device) {
4000e39c: 80 a2 20 00 cmp %o0, 0
4000e3a0: 12 80 00 0b bne 4000e3cc <msdos_format+0x9fc>
<== NEVER TAKEN
4000e3a4: 80 8e e0 ff btst 0xff, %i3
4000e3a8: 22 80 00 0a be,a 4000e3d0 <msdos_format+0xa00>
4000e3ac: b0 10 00 08 mov %o0, %i0
4000e3b0: c2 0e 60 17 ldub [ %i1 + 0x17 ], %g1
4000e3b4: 80 a0 60 00 cmp %g1, 0
4000e3b8: 02 bf fe 8e be 4000ddf0 <msdos_format+0x420>
4000e3bc: 13 08 00 10 sethi %hi(0x20004000), %o1
return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr);
}
static inline int rtems_disk_fd_sync(int fd)
{
return ioctl(fd, RTEMS_BLKIO_SYNCDEV);
4000e3c0: 90 10 00 10 mov %l0, %o0
4000e3c4: 40 00 1d fd call 40015bb8 <ioctl>
4000e3c8: 92 12 62 06 or %o1, 0x206, %o1
4000e3cc: b0 10 00 08 mov %o0, %i0
close(fd);
4000e3d0: 7f ff db a0 call 40005250 <close>
4000e3d4: 90 10 00 10 mov %l0, %o0
}
4000e3d8: 81 c7 e0 08 ret
4000e3dc: 81 e8 00 00 restore
memset(tmp_sec,0,sizeof(tmp_sec));
4000e3e0: 92 10 20 00 clr %o1
4000e3e4: 40 00 36 83 call 4001bdf0 <memset>
4000e3e8: 90 07 be 00 add %fp, -512, %o0
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
4000e3ec: c2 0f bd 92 ldub [ %fp + -622 ], %g1
4000e3f0: c6 07 bd 8c ld [ %fp + -628 ], %g3
4000e3f4: c4 17 bd 90 lduh [ %fp + -624 ], %g2
4000e3f8: c8 07 bd 88 ld [ %fp + -632 ], %g4
4000e3fc: c2 2f be 0a stb %g1, [ %fp + -502 ]
*MSDOS_DIR_ATTR(tmp_sec) = MSDOS_ATTR_VOLUME_ID;
4000e400: 82 10 20 08 mov 8, %g1
ret_val = msdos_format_write_sec
4000e404: d4 07 bd 4c ld [ %fp + -692 ], %o2
4000e408: d2 07 bd 6c ld [ %fp + -660 ], %o1
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
4000e40c: c8 27 be 00 st %g4, [ %fp + -512 ]
ret_val = msdos_format_write_sec
4000e410: 96 07 be 00 add %fp, -512, %o3
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
4000e414: c6 27 be 04 st %g3, [ %fp + -508 ]
ret_val = msdos_format_write_sec
4000e418: 90 10 00 10 mov %l0, %o0
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
4000e41c: c4 37 be 08 sth %g2, [ %fp + -504 ]
ret_val = msdos_format_write_sec
4000e420: 7f ff fc c7 call 4000d73c <msdos_format_write_sec>
4000e424: c2 2f be 0b stb %g1, [ %fp + -501 ]
if (ret_val == 0) {
4000e428: 80 a2 20 00 cmp %o0, 0
4000e42c: 02 bf ff ab be 4000e2d8 <msdos_format+0x908>
<== ALWAYS TAKEN
4000e430: 94 10 22 00 mov 0x200, %o2
4000e434: 10 bf ff e7 b 4000e3d0 <msdos_format+0xa00>
<== NOT EXECUTED
4000e438: b0 10 00 08 mov %o0, %i0
<== NOT EXECUTED
4000e43c: d8 27 bd 3c st %o4, [ %fp + -708 ]
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
4000e440: 94 10 22 00 mov 0x200, %o2
4000e444: 92 10 20 00 clr %o1
4000e448: 40 00 36 6a call 4001bdf0 <memset>
4000e44c: 90 07 be 00 add %fp, -512, %o0
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
4000e450: 03 14 94 98 sethi %hi(0x52526000), %g1
4000e454: 82 10 61 41 or %g1, 0x141, %g1 ! 52526141 <RAM_END+0x12126141>
4000e458: c2 27 be 00 st %g1, [ %fp + -512 ]
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
4000e45c: 03 00 00 15 sethi %hi(0x5400), %g1
4000e460: 82 10 61 aa or %g1, 0x1aa, %g1 ! 55aa <_Configuration_Interrupt_stack_size+0x45aa>
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
4000e464: 84 10 3f ff mov -1, %g2
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
4000e468: c2 37 bf fe sth %g1, [ %fp + -2 ]
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
4000e46c: 03 1c 9c 90 sethi %hi(0x72724000), %g1
ret_val = msdos_format_write_sec(fd,
4000e470: d8 07 bd 3c ld [ %fp + -708 ], %o4
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
4000e474: 82 10 61 61 or %g1, 0x161, %g1
ret_val = msdos_format_write_sec(fd,
4000e478: 96 07 be 00 add %fp, -512, %o3
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
4000e47c: c4 27 bf e8 st %g2, [ %fp + -24 ]
ret_val = msdos_format_write_sec(fd,
4000e480: 94 10 00 0c mov %o4, %o2
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
4000e484: c2 27 bf e4 st %g1, [ %fp + -28 ]
ret_val = msdos_format_write_sec(fd,
4000e488: 92 10 00 1d mov %i5, %o1
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO, 0xffffffff);
4000e48c: c4 27 bf ec st %g2, [ %fp + -20 ]
ret_val = msdos_format_write_sec(fd,
4000e490: 7f ff fc ab call 4000d73c <msdos_format_write_sec>
4000e494: 90 10 00 10 mov %l0, %o0
if (ret_val == 0) {
4000e498: b0 92 20 00 orcc %o0, 0, %i0
4000e49c: 12 bf fe 55 bne 4000ddf0 <msdos_format+0x420>
<== NEVER TAKEN
4000e4a0: d8 07 bd 4c ld [ %fp + -692 ], %o4
fmt_params.fat_num*fmt_params.sectors_per_fat,/* sector count */
4000e4a4: 10 bf ff 77 b 4000e280 <msdos_format+0x8b0>
4000e4a8: d6 0f bd 7c ldub [ %fp + -644 ], %o3
ret_val = msdos_format_fill_sectors
4000e4ac: d6 07 bd 50 ld [ %fp + -688 ], %o3
<== NOT EXECUTED
4000e4b0: 9a 10 3f e5 mov -27, %o5
<== NOT EXECUTED
4000e4b4: 94 10 20 00 clr %o2
<== NOT EXECUTED
4000e4b8: 92 10 00 10 mov %l0, %o1
<== NOT EXECUTED
4000e4bc: 7f ff fc b3 call 4000d788 <msdos_format_fill_sectors>
<== NOT EXECUTED
4000e4c0: 90 10 00 19 mov %i1, %o0
<== NOT EXECUTED
if (ret_val == 0) {
4000e4c4: b0 92 20 00 orcc %o0, 0, %i0
<== NOT EXECUTED
4000e4c8: 12 bf fe 4a bne 4000ddf0 <msdos_format+0x420>
<== NOT EXECUTED
4000e4cc: 01 00 00 00 nop
<== NOT EXECUTED
4000e4d0: 10 bf fd c6 b 4000dbe8 <msdos_format+0x218>
<== NOT EXECUTED
4000e4d4: b6 10 20 01 mov 1, %i3 ! 1 <_TLS_Alignment>
<== NOT EXECUTED
4000e4d8: b9 30 60 10 srl %g1, 0x10, %i4
4000e4dc: a4 10 00 01 mov %g1, %l2
4000e4e0: b1 30 60 18 srl %g1, 0x18, %i0
if (fmt_params->totl_sector_cnt < 0x10000) {
4000e4e4: b4 10 20 00 clr %i2
4000e4e8: 10 bf fd e4 b 4000dc78 <msdos_format+0x2a8>
4000e4ec: ba 10 20 00 clr %i5
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
4000e4f0: 82 10 3f ff mov -1, %g1
4000e4f4: c4 0f bd 7d ldub [ %fp + -643 ], %g2
4000e4f8: c4 2f be 00 stb %g2, [ %fp + -512 ]
FAT_SET_VAL32(tmp_sec,4,0xc0000000|FAT_FAT32_EOC);
4000e4fc: 84 10 3f f8 mov -8, %g2
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
4000e500: c2 2f be 01 stb %g1, [ %fp + -511 ]
FAT_SET_VAL32(tmp_sec,4,0xc0000000|FAT_FAT32_EOC);
4000e504: ba 10 20 00 clr %i5
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
4000e508: c2 2f be 02 stb %g1, [ %fp + -510 ]
4000e50c: c2 2f be 03 stb %g1, [ %fp + -509 ]
FAT_SET_VAL32(tmp_sec,4,0xc0000000|FAT_FAT32_EOC);
4000e510: c2 2f be 05 stb %g1, [ %fp + -507 ]
4000e514: c2 2f be 06 stb %g1, [ %fp + -506 ]
4000e518: 82 10 3f cf mov -49, %g1
4000e51c: c4 2f be 04 stb %g2, [ %fp + -508 ]
4000e520: c2 2f be 07 stb %g1, [ %fp + -505 ]
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
4000e524: 03 3e 3f ff sethi %hi(0xf8fffc00), %g1
4000e528: 82 10 63 0f or %g1, 0x30f, %g1 ! f8ffff0f <RAM_END+0xb8bfff0f>
4000e52c: 10 bf ff 7e b 4000e324 <msdos_format+0x954>
4000e530: c2 27 be 08 st %g1, [ %fp + -504 ]
FAT_SET_VAL8(tmp_sec,0,(fmt_params.media_code));
4000e534: c2 2f be 00 stb %g1, [ %fp + -512 ]
FAT_SET_VAL8(tmp_sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
4000e538: 82 10 3f 8f mov -113, %g1
ret_val = -1;
4000e53c: ba 10 20 00 clr %i5
FAT_SET_VAL8(tmp_sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
4000e540: c2 2f be 01 stb %g1, [ %fp + -511 ]
FAT_SET_VAL8(tmp_sec,2,(FAT_FAT12_EOC >> 4));
4000e544: 82 10 3f ff mov -1, %g1
4000e548: 10 bf ff 77 b 4000e324 <msdos_format+0x954>
4000e54c: c2 2f be 02 stb %g1, [ %fp + -510 ]
FAT_SET_VAL8(tmp_sec,0,fmt_params.media_code);
4000e550: c4 0f bd 7d ldub [ %fp + -643 ], %g2
FAT_SET_VAL8(tmp_sec,1,0xff);
4000e554: 82 10 3f ff mov -1, %g1
FAT_SET_VAL8(tmp_sec,0,fmt_params.media_code);
4000e558: c4 2f be 00 stb %g2, [ %fp + -512 ]
ret_val = -1;
4000e55c: ba 10 20 00 clr %i5
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
4000e560: 84 10 3f f8 mov -8, %g2
FAT_SET_VAL8(tmp_sec,1,0xff);
4000e564: c2 2f be 01 stb %g1, [ %fp + -511 ]
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
4000e568: c4 2f be 02 stb %g2, [ %fp + -510 ]
4000e56c: 10 bf ff 6e b 4000e324 <msdos_format+0x954>
4000e570: c2 2f be 03 stb %g1, [ %fp + -509 ]
from = ""; /* default: make "from" point to empty string */
4000e574: 39 10 00 a7 sethi %hi(0x40029c00), %i4
4000e578: 10 bf fd 7a b 4000db60 <msdos_format+0x190>
4000e57c: b8 17 22 e8 or %i4, 0x2e8, %i4 ! 40029ee8 <_Thread_queue_Operations_default+0x10c>
from = "RTEMS"; /* default: make "from" point to OS Name */
4000e580: 10 bf fd 5c b 4000daf0 <msdos_format+0x120>
4000e584: b8 17 22 20 or %i4, 0x220, %i4
4000e588: 10 bf fd 44 b 4000da98 <msdos_format+0xc8>
<== NOT EXECUTED
4000e58c: d8 07 bd 50 ld [ %fp + -688 ], %o4
<== NOT EXECUTED
fmt_params->fat_num = 2;
4000e590: 10 bf fe 50 b 4000ded0 <msdos_format+0x500>
4000e594: c2 2f bd 7c stb %g1, [ %fp + -644 ]
if (fattype == FAT_FAT12) {
4000e598: 02 80 00 3b be 4000e684 <msdos_format+0xcb4>
4000e59c: 86 10 00 0a mov %o2, %g3
else if (fattype == FAT_FAT16) {
4000e5a0: 80 a7 60 02 cmp %i5, 2
4000e5a4: 12 bf fe c7 bne 4000e0c0 <msdos_format+0x6f0>
<== NEVER TAKEN
4000e5a8: 84 10 00 09 mov %o1, %g2
fatdata_sect_cnt = fatdata_sect_cnt
4000e5ac: 86 20 c0 02 sub %g3, %g2, %g3
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
4000e5b0: 81 80 20 00 wr %g0, %y
4000e5b4: 01 00 00 00 nop
4000e5b8: 01 00 00 00 nop
4000e5bc: 01 00 00 00 nop
4000e5c0: 84 70 c0 01 udiv %g3, %g1, %g2
fat_capacity = fatdata_cluster_cnt * 2;
4000e5c4: 10 bf fe c5 b 4000e0d8 <msdos_format+0x708>
4000e5c8: 89 28 a0 01 sll %g2, 1, %g4
if (((fattype == FAT_FAT12) && (*data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
4000e5cc: 80 a0 af f5 cmp %g2, 0xff5
4000e5d0: 38 80 00 1c bgu,a 4000e640 <msdos_format+0xc70>
4000e5d4: 83 28 60 01 sll %g1, 1, %g1
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e5d8: 81 80 20 00 wr %g0, %y
4000e5dc: 01 00 00 00 nop
4000e5e0: 01 00 00 00 nop
4000e5e4: 01 00 00 00 nop
4000e5e8: 88 70 c0 0f udiv %g3, %o7, %g4
fmt_params->sectors_per_cluster = sectors_per_cluster_adj;
4000e5ec: c2 27 bd 58 st %g1, [ %fp + -680 ]
uint32_t ms_sectors_per_cluster_limit_FAT12 =
4000e5f0: 81 80 20 00 wr %g0, %y
4000e5f4: 01 00 00 00 nop
4000e5f8: 01 00 00 00 nop
4000e5fc: 01 00 00 00 nop
4000e600: 86 75 80 1c udiv %l6, %i4, %g3
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e604: c8 27 bd 5c st %g4, [ %fp + -676 ]
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e608: 80 a0 c0 01 cmp %g3, %g1
uint32_t ms_sectors_per_cluster_limit_FAT16 =
4000e60c: 81 80 20 00 wr %g0, %y
4000e610: 01 00 00 00 nop
4000e614: 01 00 00 00 nop
4000e618: 01 00 00 00 nop
4000e61c: 88 75 40 1c udiv %l5, %i4, %g4
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e620: 0a 80 01 32 bcs 4000eae8 <msdos_format+0x1118>
4000e624: 80 a0 af f4 cmp %g2, 0xff4
4000e628: 38 80 01 31 bgu,a 4000eaec <msdos_format+0x111c>
<== NEVER TAKEN
4000e62c: 07 00 00 3f sethi %hi(0xfc00), %g3
<== NOT EXECUTED
fmt_params->fattype = msdos_get_fat_type(
4000e630: 82 10 20 01 mov 1, %g1
4000e634: ae 10 20 01 mov 1, %l7
4000e638: 10 bf fe e2 b 4000e1c0 <msdos_format+0x7f0>
4000e63c: c2 2f bd 7e stb %g1, [ %fp + -642 ]
if (MS_BYTES_PER_CLUSTER_LIMIT_FAT12 < (sectors_per_cluster * bytes_per_sector)) {
4000e640: 88 5f 00 01 smul %i4, %g1, %g4
4000e644: 80 a1 00 11 cmp %g4, %l1
4000e648: 08 bf fe 94 bleu 4000e098 <msdos_format+0x6c8>
<== ALWAYS TAKEN
4000e64c: 80 a6 20 00 cmp %i0, 0
4000e650: 30 bf ff e2 b,a 4000e5d8 <msdos_format+0xc08>
<== NOT EXECUTED
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e654: 88 02 00 01 add %o0, %g1, %g4
4000e658: 84 09 00 02 and %g4, %g2, %g2
fatdata_sect_cnt = fatdata_sect_cnt
4000e65c: 86 20 c0 02 sub %g3, %g2, %g3
fatdata_cluster_cnt = fatdata_sect_cnt/sectors_per_cluster;
4000e660: 81 80 20 00 wr %g0, %y
4000e664: 01 00 00 00 nop
4000e668: 01 00 00 00 nop
4000e66c: 01 00 00 00 nop
4000e670: 84 70 c0 01 udiv %g3, %g1, %g2
fat_capacity = fatdata_cluster_cnt * 3 / 2;
4000e674: 89 28 a0 01 sll %g2, 1, %g4
4000e678: 88 01 00 02 add %g4, %g2, %g4
4000e67c: 10 bf fe 97 b 4000e0d8 <msdos_format+0x708>
4000e680: 89 31 20 01 srl %g4, 1, %g4
return sectors;
4000e684: 10 bf ff f6 b 4000e65c <msdos_format+0xc8c>
4000e688: 84 10 00 09 mov %o1, %g2
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e68c: 81 80 20 00 wr %g0, %y
4000e690: 01 00 00 00 nop
4000e694: 01 00 00 00 nop
4000e698: 01 00 00 00 nop
4000e69c: 88 70 c0 0f udiv %g3, %o7, %g4
uint32_t ms_sectors_per_cluster_limit_FAT12 =
4000e6a0: 81 80 20 00 wr %g0, %y
4000e6a4: 01 00 00 00 nop
4000e6a8: 01 00 00 00 nop
4000e6ac: 01 00 00 00 nop
4000e6b0: 86 75 80 1c udiv %l6, %i4, %g3
*sectors_per_fat_ptr = fat_sectors_cnt / fat_num;
4000e6b4: c8 27 bd 5c st %g4, [ %fp + -676 ]
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e6b8: 80 a0 c0 01 cmp %g3, %g1
uint32_t ms_sectors_per_cluster_limit_FAT16 =
4000e6bc: 81 80 20 00 wr %g0, %y
4000e6c0: 01 00 00 00 nop
4000e6c4: 01 00 00 00 nop
4000e6c8: 01 00 00 00 nop
4000e6cc: 88 75 40 1c udiv %l5, %i4, %g4
if ( number_of_clusters < FAT_FAT12_MAX_CLN
4000e6d0: 0a 80 00 04 bcs 4000e6e0 <msdos_format+0xd10>
4000e6d4: 80 a0 af f4 cmp %g2, 0xff4
4000e6d8: 28 80 00 58 bleu,a 4000e838 <msdos_format+0xe68>
<== NEVER TAKEN
4000e6dc: 82 10 20 01 mov 1, %g1
<== NOT EXECUTED
else if ( number_of_clusters < FAT_FAT16_MAX_CLN
4000e6e0: 80 a1 00 01 cmp %g4, %g1
4000e6e4: 1a 80 00 45 bcc 4000e7f8 <msdos_format+0xe28>
4000e6e8: 03 00 00 3f sethi %hi(0xfc00), %g1
fmt_params->fattype = msdos_get_fat_type(
4000e6ec: 82 10 20 04 mov 4, %g1
4000e6f0: c2 2f bd 7e stb %g1, [ %fp + -642 ]
if ( (gigs & ( 1 << b) ) != 0 )
4000e6f4: 86 10 20 01 mov 1, %g3
for ( b = 31; b > 0; b-- ) {
4000e6f8: 82 10 20 1f mov 0x1f, %g1
if (fat_type != fmt_params->fattype) {
4000e6fc: 80 a7 60 04 cmp %i5, 4
4000e700: 12 80 00 06 bne 4000e718 <msdos_format+0xd48>
4000e704: ae 0d e0 ff and %l7, 0xff, %l7
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
4000e708: 10 bf fe af b 4000e1c4 <msdos_format+0x7f4>
4000e70c: ae 1f 40 17 xor %i5, %l7, %l7
for ( b = 31; b > 0; b-- ) {
4000e710: 02 80 00 06 be 4000e728 <msdos_format+0xd58>
<== NEVER TAKEN
4000e714: 84 10 20 01 mov 1, %g2
if ( (gigs & ( 1 << b) ) != 0 )
4000e718: 85 28 c0 01 sll %g3, %g1, %g2
4000e71c: 80 8e c0 02 btst %i3, %g2
4000e720: 22 bf ff fc be,a 4000e710 <msdos_format+0xd40>
4000e724: 82 80 7f ff addcc %g1, -1, %g1
fmt_params->sectors_per_cluster = 1 << b;
4000e728: c4 27 bd 58 st %g2, [ %fp + -680 ]
ret_val = msdos_set_sectors_per_cluster_from_request( rqdata,
4000e72c: 94 07 bd 58 add %fp, -680, %o2
4000e730: 92 07 bd 4c add %fp, -692, %o1
4000e734: 7f ff fc 83 call 4000d940 <msdos_set_sectors_per_cluster_from_request.isra.1>
4000e738: 90 10 00 19 mov %i1, %o0
if (fat_type != fmt_params->fattype && 1 < iteration_cnt) {
4000e73c: c2 0f bd 7e ldub [ %fp + -642 ], %g1
4000e740: ba 18 40 1d xor %g1, %i5, %i5
4000e744: 80 a0 00 1d cmp %g0, %i5
4000e748: 84 0c a0 ff and %l2, 0xff, %g2
4000e74c: 86 40 20 00 addx %g0, 0, %g3
4000e750: 88 10 20 01 mov 1, %g4
4000e754: 80 a0 a0 01 cmp %g2, 1
4000e758: 18 80 00 03 bgu 4000e764 <msdos_format+0xd94>
4000e75c: 82 10 00 03 mov %g3, %g1
4000e760: 88 10 20 00 clr %g4
4000e764: 80 89 20 ff btst 0xff, %g4
4000e768: 02 80 00 38 be 4000e848 <msdos_format+0xe78>
4000e76c: d8 07 bd 50 ld [ %fp + -688 ], %o4
4000e770: 80 a0 e0 00 cmp %g3, 0
4000e774: 02 80 00 35 be 4000e848 <msdos_format+0xe78>
<== NEVER TAKEN
4000e778: 80 a2 20 00 cmp %o0, 0
--fmt_params->totl_sector_cnt;
4000e77c: 98 03 3f ff add %o4, -1, %o4
4000e780: d8 27 bd 50 st %o4, [ %fp + -688 ]
4000e784: 84 10 00 0c mov %o4, %g2
while( ret_val == 0
4000e788: 02 bf fe 96 be 4000e1e0 <msdos_format+0x810>
<== ALWAYS TAKEN
4000e78c: a4 04 a0 01 inc %l2
4000e790: 10 bf fc c2 b 4000da98 <msdos_format+0xc8>
<== NOT EXECUTED
4000e794: b0 10 00 08 mov %o0, %i0
<== NOT EXECUTED
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e798: 10 bf ff 85 b 4000e5ac <msdos_format+0xbdc>
4000e79c: 84 09 00 02 and %g4, %g2, %g2
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000e7a0: d4 07 bd 3c ld [ %fp + -708 ], %o2
4000e7a4: 92 10 20 02 mov 2, %o1
4000e7a8: 7f ff fb cb call 4000d6d4 <msdos_format_printf>
4000e7ac: 90 10 20 00 clr %o0
if (fmt_params->fattype == FAT_FAT32) {
4000e7b0: c2 0f bd 7e ldub [ %fp + -642 ], %g1
4000e7b4: ba 08 60 ff and %g1, 0xff, %i5
4000e7b8: 80 a7 60 04 cmp %i5, 4
4000e7bc: 12 80 00 17 bne 4000e818 <msdos_format+0xe48>
4000e7c0: 84 10 20 01 mov 1, %g2
fmt_params->rsvd_sector_cnt = 32;
4000e7c4: 82 10 20 20 mov 0x20, %g1
4000e7c8: c2 27 bd 54 st %g1, [ %fp + -684 ]
fmt_params->mbr_copy_sec = 6;
4000e7cc: 82 10 20 06 mov 6, %g1
fmt_params->fsinfo_sec = 1;
4000e7d0: 84 10 20 01 mov 1, %g2
fmt_params->mbr_copy_sec = 6;
4000e7d4: c2 27 bd 74 st %g1, [ %fp + -652 ]
fmt_params->fsinfo_sec = 1;
4000e7d8: ae 10 20 04 mov 4, %l7
fmt_params->files_per_root_dir = 0;
4000e7dc: c0 27 bd 64 clr [ %fp + -668 ]
fmt_params->fsinfo_sec = 1;
4000e7e0: 96 10 20 20 mov 0x20, %o3
4000e7e4: 82 10 20 00 clr %g1
4000e7e8: c4 27 bd 78 st %g2, [ %fp + -648 ]
4000e7ec: ba 10 20 04 mov 4, %i5
4000e7f0: 10 bf fe 0d b 4000e024 <msdos_format+0x654>
4000e7f4: f8 07 bd 4c ld [ %fp + -692 ], %i4
else if ( number_of_clusters < FAT_FAT16_MAX_CLN
4000e7f8: 82 10 63 f4 or %g1, 0x3f4, %g1
4000e7fc: 80 a0 40 02 cmp %g1, %g2
4000e800: 0a bf ff bc bcs 4000e6f0 <msdos_format+0xd20>
4000e804: 82 10 20 04 mov 4, %g1
fmt_params->fattype = msdos_get_fat_type(
4000e808: 82 10 20 02 mov 2, %g1
4000e80c: ae 10 20 02 mov 2, %l7
4000e810: 10 bf fe 6c b 4000e1c0 <msdos_format+0x7f0>
4000e814: c2 2f bd 7e stb %g1, [ %fp + -642 ]
fmt_params->rsvd_sector_cnt = 1;
4000e818: c4 27 bd 54 st %g2, [ %fp + -684 ]
if (fmt_params->fattype == FAT_FAT16) {
4000e81c: 80 a7 60 02 cmp %i5, 2
4000e820: 02 80 00 10 be 4000e860 <msdos_format+0xe90>
4000e824: ae 10 00 01 mov %g1, %l7
4000e828: d6 07 bd 54 ld [ %fp + -684 ], %o3
4000e82c: 86 10 20 3f mov 0x3f, %g3
4000e830: 10 bf fd f1 b 4000dff4 <msdos_format+0x624>
4000e834: ba 08 60 ff and %g1, 0xff, %i5
fmt_params->fattype = msdos_get_fat_type(
4000e838: c2 2f bd 7e stb %g1, [ %fp + -642 ]
<== NOT EXECUTED
fmt_params->sectors_per_cluster = 2;
4000e83c: 82 10 20 02 mov 2, %g1
4000e840: 10 bf ff bb b 4000e72c <msdos_format+0xd5c>
4000e844: c2 27 bd 58 st %g1, [ %fp + -680 ]
4000e848: 84 10 00 0c mov %o4, %g2
while( ret_val == 0
4000e84c: 80 a2 20 00 cmp %o0, 0
4000e850: 02 bf fe 61 be 4000e1d4 <msdos_format+0x804>
<== ALWAYS TAKEN
4000e854: a4 04 a0 01 inc %l2
4000e858: 10 bf fc 90 b 4000da98 <msdos_format+0xc8>
<== NOT EXECUTED
4000e85c: b0 10 00 08 mov %o0, %i0
<== NOT EXECUTED
4000e860: d6 07 bd 54 ld [ %fp + -684 ], %o3
if (fmt_params->fattype == FAT_FAT16) {
4000e864: 86 10 21 ff mov 0x1ff, %g3
4000e868: 10 bf fd e3 b 4000dff4 <msdos_format+0x624>
4000e86c: ba 08 60 ff and %g1, 0xff, %i5
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000e870: 15 10 00 a7 sethi %hi(0x40029c00), %o2
fmt_params->fat_num = 2;
4000e874: c2 2f bd 7c stb %g1, [ %fp + -644 ]
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
4000e878: 96 10 20 02 mov 2, %o3
4000e87c: 94 12 a2 b8 or %o2, 0x2b8, %o2
4000e880: 92 10 20 02 mov 2, %o1
4000e884: 7f ff fb 94 call 4000d6d4 <msdos_format_printf>
4000e888: 90 10 20 00 clr %o0
{
4000e88c: 05 00 00 1f sethi %hi(0x7c00), %g2
uint32_t fat16_sect_per_clust = 32;
4000e890: 82 10 20 20 mov 0x20, %g1
{
4000e894: 10 bf fd 99 b 4000def8 <msdos_format+0x528>
4000e898: 84 10 a3 a8 or %g2, 0x3a8, %g2
else if (fmt_params->totl_sector_cnt < FAT_FAT16_MAX_CLN * fat16_sect_per_clust) {
4000e89c: 84 10 a3 f5 or %g2, 0x3f5, %g2
4000e8a0: 82 58 40 02 smul %g1, %g2, %g1
4000e8a4: 80 a0 c0 01 cmp %g3, %g1
4000e8a8: 1a 80 00 68 bcc 4000ea48 <msdos_format+0x1078>
4000e8ac: 82 10 20 04 mov 4, %g1
fmt_params->fattype = FAT_FAT16;
4000e8b0: 82 10 20 02 mov 2, %g1
4000e8b4: c2 2f bd 7e stb %g1, [ %fp + -642 ]
fmt_params->sectors_per_cluster = 2;
4000e8b8: 82 10 20 02 mov 2, %g1
4000e8bc: 10 bf fd 97 b 4000df18 <msdos_format+0x548>
4000e8c0: c2 27 bd 58 st %g1, [ %fp + -680 ]
if ( fmt_params->totl_sector_cnt == 0 )
4000e8c4: 02 bf fe 4a be 4000e1ec <msdos_format+0x81c>
<== NEVER TAKEN
4000e8c8: f0 07 bd 38 ld [ %fp + -712 ], %i0
4000e8cc: c2 0f bd 9c ldub [ %fp + -612 ], %g1
if (FAT_FAT32 != fmt_params->fattype)
4000e8d0: c4 0f bd 7e ldub [ %fp + -642 ], %g2
4000e8d4: c6 07 bd 58 ld [ %fp + -680 ], %g3
4000e8d8: 80 a0 a0 04 cmp %g2, 4
4000e8dc: 02 80 00 0d be 4000e910 <msdos_format+0xf40>
4000e8e0: 88 08 60 ff and %g1, 0xff, %g4
if (! skip_alignment)
4000e8e4: 88 88 60 ff andcc %g1, 0xff, %g4
4000e8e8: 12 80 00 06 bne 4000e900 <msdos_format+0xf30>
4000e8ec: c4 07 bd 68 ld [ %fp + -664 ], %g2
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e8f0: 82 00 bf ff add %g2, -1, %g1
4000e8f4: 84 20 00 03 neg %g3, %g2
4000e8f8: 82 00 40 03 add %g1, %g3, %g1
4000e8fc: 84 08 40 02 and %g1, %g2, %g2
* (fmt_params->bytes_per_sector / FAT_DIRENTRY_SIZE);
4000e900: c2 07 bd 4c ld [ %fp + -692 ], %g1
4000e904: 83 30 60 05 srl %g1, 5, %g1
4000e908: 82 58 40 02 smul %g1, %g2, %g1
fmt_params->files_per_root_dir = loc_align_object (fmt_params->root_dir_sectors,
4000e90c: c2 27 bd 64 st %g1, [ %fp + -668 ]
if (! skip_alignment)
4000e910: 80 a1 20 00 cmp %g4, 0
4000e914: 12 80 00 06 bne 4000e92c <msdos_format+0xf5c>
4000e918: fa 07 bd 54 ld [ %fp + -684 ], %i5
return (sectors + clustersize - 1) & ~(clustersize - 1);
4000e91c: 82 07 7f ff add %i5, -1, %g1
4000e920: ba 20 00 03 neg %g3, %i5
4000e924: 82 00 40 03 add %g1, %g3, %g1
4000e928: ba 08 40 1d and %g1, %i5, %i5
if ((rqdata != NULL) && (rqdata->media != 0)) {
4000e92c: 80 a6 60 00 cmp %i1, 0
4000e930: 02 80 00 14 be 4000e980 <msdos_format+0xfb0>
4000e934: fa 27 bd 54 st %i5, [ %fp + -684 ]
4000e938: f8 0e 60 14 ldub [ %i1 + 0x14 ], %i4
4000e93c: 92 8f 20 ff andcc %i4, 0xff, %o1
4000e940: 02 80 00 11 be 4000e984 <msdos_format+0xfb4>
4000e944: 82 10 3f f8 mov -8, %g1
const char valid_media_codes[] =
4000e948: 03 10 00 a7 sethi %hi(0x40029c00), %g1
4000e94c: c4 18 63 58 ldd [ %g1 + 0x358 ], %g2 ! 40029f58 <_Thread_queue_Operations_default+0x17c>
4000e950: 88 10 63 58 or %g1, 0x358, %g4
4000e954: c2 09 20 08 ldub [ %g4 + 8 ], %g1
4000e958: c4 3f be 00 std %g2, [ %fp + -512 ]
if (NULL==memchr(valid_media_codes,
4000e95c: 94 10 20 09 mov 9, %o2
const char valid_media_codes[] =
4000e960: c2 2f be 08 stb %g1, [ %fp + -504 ]
if (NULL==memchr(valid_media_codes,
4000e964: 40 00 34 76 call 4001bb3c <memchr>
4000e968: 90 07 be 00 add %fp, -512, %o0
4000e96c: 80 a2 20 00 cmp %o0, 0
4000e970: 02 bf fe 1f be 4000e1ec <msdos_format+0x81c>
<== ALWAYS TAKEN
4000e974: 01 00 00 00 nop
fmt_params->media_code = rqdata->media;
4000e978: 10 bf fc 4b b 4000daa4 <msdos_format+0xd4>
<== NOT EXECUTED
4000e97c: f8 2f bd 7d stb %i4, [ %fp + -643 ]
<== NOT EXECUTED
fmt_params->media_code = FAT_BR_MEDIA_FIXED;
4000e980: 82 10 3f f8 mov -8, %g1
4000e984: 10 bf fc 48 b 4000daa4 <msdos_format+0xd4>
4000e988: c2 2f bd 7d stb %g1, [ %fp + -643 ]
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
4000e98c: b9 30 60 10 srl %g1, 0x10, %i4
4000e990: bb 30 60 18 srl %g1, 0x18, %i5
4000e994: c2 2f be 24 stb %g1, [ %fp + -476 ]
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
4000e998: 82 10 20 29 mov 0x29, %g1
4000e99c: c2 2f be 42 stb %g1, [ %fp + -446 ]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
4000e9a0: 03 00 00 11 sethi %hi(0x4400), %g1
4000e9a4: 82 10 62 41 or %g1, 0x241, %g1 ! 4641 <_Configuration_Interrupt_stack_size+0x3641>
4000e9a8: c2 37 be 52 sth %g1, [ %fp + -430 ]
4000e9ac: 03 00 00 15 sethi %hi(0x5400), %g1
4000e9b0: 82 10 60 33 or %g1, 0x33, %g1 ! 5433 <_Configuration_Interrupt_stack_size+0x4433>
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
4000e9b4: c4 07 bd 74 ld [ %fp + -652 ], %g2
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
4000e9b8: c2 37 be 54 sth %g1, [ %fp + -428 ]
4000e9bc: 03 00 00 0c sethi %hi(0x3000), %g1
4000e9c0: 82 10 62 20 or %g1, 0x220, %g1 ! 3220 <_Configuration_Interrupt_stack_size+0x2220>
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
4000e9c4: 89 30 a0 08 srl %g2, 8, %g4
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
4000e9c8: c2 37 be 56 sth %g1, [ %fp + -426 ]
4000e9cc: 03 00 00 08 sethi %hi(0x2000), %g1
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
4000e9d0: c6 2f be 25 stb %g3, [ %fp + -475 ]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
4000e9d4: 82 10 60 20 or %g1, 0x20, %g1
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
4000e9d8: f8 2f be 26 stb %i4, [ %fp + -474 ]
4000e9dc: fa 2f be 27 stb %i5, [ %fp + -473 ]
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
4000e9e0: da 2f be 2c stb %o5, [ %fp + -468 ]
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
4000e9e4: de 2f be 30 stb %o7, [ %fp + -464 ]
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
4000e9e8: c4 2f be 32 stb %g2, [ %fp + -462 ]
4000e9ec: c8 2f be 33 stb %g4, [ %fp + -461 ]
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
4000e9f0: c0 27 be 34 clr [ %fp + -460 ]
4000e9f4: c0 27 be 38 clr [ %fp + -456 ]
4000e9f8: c0 27 be 3c clr [ %fp + -452 ]
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
4000e9fc: c0 2f be 47 clrb [ %fp + -441 ]
4000ea00: c0 2f be 48 clrb [ %fp + -440 ]
4000ea04: c0 2f be 49 clrb [ %fp + -439 ]
4000ea08: c0 2f be 4a clrb [ %fp + -438 ]
4000ea0c: c0 2f be 4b clrb [ %fp + -437 ]
4000ea10: c0 2f be 4c clrb [ %fp + -436 ]
4000ea14: c0 2f be 4d clrb [ %fp + -435 ]
4000ea18: c0 2f be 4e clrb [ %fp + -434 ]
4000ea1c: c0 2f be 4f clrb [ %fp + -433 ]
4000ea20: c0 2f be 50 clrb [ %fp + -432 ]
4000ea24: c0 2f be 51 clrb [ %fp + -431 ]
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
4000ea28: 10 bf fc dd b 4000dd9c <msdos_format+0x3cc>
4000ea2c: c2 37 be 58 sth %g1, [ %fp + -424 ]
*volid_ptr = rand();
4000ea30: 40 00 37 81 call 4001c834 <rand>
4000ea34: 01 00 00 00 nop
4000ea38: 10 bf fc 65 b 4000dbcc <msdos_format+0x1fc>
4000ea3c: d0 27 bd 98 st %o0, [ %fp + -616 ]
ret_val = -1;
4000ea40: 10 bf fc ec b 4000ddf0 <msdos_format+0x420>
<== NOT EXECUTED
4000ea44: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4000ea48: 84 10 20 00 clr %g2
4000ea4c: 07 10 00 00 sethi %hi(0x40000000), %g3
fmt_params->fattype = FAT_FAT32;
4000ea50: c2 2f bd 7e stb %g1, [ %fp + -642 ]
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4000ea54: b6 87 40 03 addcc %i5, %g3, %i3
for (b = 31; b > 0; b--)
4000ea58: 82 10 20 1f mov 0x1f, %g1
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4000ea5c: b4 47 00 02 addx %i4, %g2, %i2
if ((gigs & (1 << b)) != 0)
4000ea60: 88 10 20 01 mov 1, %g4
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
4000ea64: 87 2e a0 02 sll %i2, 2, %g3
4000ea68: 85 36 e0 1e srl %i3, 0x1e, %g2
4000ea6c: 10 80 00 04 b 4000ea7c <msdos_format+0x10ac>
4000ea70: 86 10 c0 02 or %g3, %g2, %g3
for (b = 31; b > 0; b--)
4000ea74: 02 80 00 16 be 4000eacc <msdos_format+0x10fc>
4000ea78: 84 10 20 01 mov 1, %g2
if ((gigs & (1 << b)) != 0)
4000ea7c: 85 29 00 01 sll %g4, %g1, %g2
4000ea80: 80 88 c0 02 btst %g3, %g2
4000ea84: 02 bf ff fc be 4000ea74 <msdos_format+0x10a4>
4000ea88: 82 80 7f ff addcc %g1, -1, %g1
fmt_params->sectors_per_cluster = 1 << b;
4000ea8c: 10 bf fd 23 b 4000df18 <msdos_format+0x548>
4000ea90: c4 27 bd 58 st %g2, [ %fp + -680 ]
for (i = 0;
4000ea94: 10 bf fe 42 b 4000e39c <msdos_format+0x9cc>
<== NOT EXECUTED
4000ea98: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_FILSYSTYPE(mbr),
4000ea9c: 10 bf fc b8 b 4000dd7c <msdos_format+0x3ac>
4000eaa0: 82 10 62 28 or %g1, 0x228, %g1
errno = EINVAL;
4000eaa4: 40 00 31 a6 call 4001b13c <__errno>
4000eaa8: 01 00 00 00 nop
4000eaac: 82 10 20 16 mov 0x16, %g1 ! 16 <_TLS_Alignment+0x15>
4000eab0: c2 22 00 00 st %g1, [ %o0 ]
if ( fmt_params->totl_sector_cnt == 0 )
4000eab4: c2 07 bd 50 ld [ %fp + -688 ], %g1
4000eab8: 80 a0 60 00 cmp %g1, 0
4000eabc: 02 bf fd cc be 4000e1ec <msdos_format+0x81c>
<== NEVER TAKEN
4000eac0: fa 07 bd 54 ld [ %fp + -684 ], %i5
ret_val = -1;
4000eac4: 10 bf fb f8 b 4000daa4 <msdos_format+0xd4>
4000eac8: b0 10 3f ff mov -1, %i0
fmt_params->sectors_per_cluster = 1 << b;
4000eacc: 10 bf fd 13 b 4000df18 <msdos_format+0x548>
4000ead0: c4 27 bd 58 st %g2, [ %fp + -680 ]
if ( fmt_params->totl_sector_cnt == 0 )
4000ead4: 80 a0 60 00 cmp %g1, 0
<== NOT EXECUTED
4000ead8: 02 bf fd c5 be 4000e1ec <msdos_format+0x81c>
<== NOT EXECUTED
4000eadc: c6 07 bd 58 ld [ %fp + -680 ], %g3
<== NOT EXECUTED
4000eae0: 10 bf ff 81 b 4000e8e4 <msdos_format+0xf14>
<== NOT EXECUTED
4000eae4: c2 0f bd 9c ldub [ %fp + -612 ], %g1
<== NOT EXECUTED
else if ( number_of_clusters < FAT_FAT16_MAX_CLN
4000eae8: 07 00 00 3f sethi %hi(0xfc00), %g3
4000eaec: 86 10 e3 f4 or %g3, 0x3f4, %g3 ! fff4 <_Configuration_Interrupt_stack_size+0xeff4>
4000eaf0: 80 a0 c0 02 cmp %g3, %g2
4000eaf4: 0a bf fe fe bcs 4000e6ec <msdos_format+0xd1c>
4000eaf8: 80 a1 00 01 cmp %g4, %g1
4000eafc: 1a bf fd ad bcc 4000e1b0 <msdos_format+0x7e0>
<== ALWAYS TAKEN
4000eb00: 86 10 20 02 mov 2, %g3
fmt_params->fattype = msdos_get_fat_type(
4000eb04: 10 bf fe fb b 4000e6f0 <msdos_format+0xd20>
<== NOT EXECUTED
4000eb08: 82 10 20 04 mov 4, %g1
<== NOT EXECUTED
40018a48 <msdos_format_dirent_with_dot>:
{
40018a48: 9d e3 bf a0 save %sp, -96, %sp
for (i = MSDOS_SHORT_BASE_LEN, src_tmp = src + MSDOS_SHORT_BASE_LEN - 1;
40018a4c: b6 10 20 08 mov 8, %i3
40018a50: 82 06 60 07 add %i1, 7, %g1
i > 0 && *src_tmp == ' ';
40018a54: c6 48 40 00 ldsb [ %g1 ], %g3
40018a58: 80 a0 e0 20 cmp %g3, 0x20
40018a5c: 12 80 00 15 bne 40018ab0 <msdos_format_dirent_with_dot+0x68>
40018a60: 84 06 ff ff add %i3, -1, %g2
40018a64: b6 10 00 02 mov %g2, %i3
for (i = MSDOS_SHORT_BASE_LEN, src_tmp = src + MSDOS_SHORT_BASE_LEN - 1;
40018a68: 80 a0 a0 00 cmp %g2, 0
40018a6c: 12 bf ff fa bne 40018a54 <msdos_format_dirent_with_dot+0xc>
<== ALWAYS TAKEN
40018a70: 82 00 7f ff add %g1, -1, %g1
i > 0 && *src_tmp == ' ';
40018a74: c2 4e 60 0a ldsb [ %i1 + 0xa ], %g1
40018a78: 80 a0 60 20 cmp %g1, 0x20
40018a7c: 12 80 00 3e bne 40018b74 <msdos_format_dirent_with_dot+0x12c>
40018a80: a0 06 20 01 add %i0, 1, %l0
40018a84: c2 4e 60 09 ldsb [ %i1 + 9 ], %g1
40018a88: 80 a0 60 20 cmp %g1, 0x20
40018a8c: 32 80 00 1c bne,a 40018afc <msdos_format_dirent_with_dot+0xb4>
40018a90: b4 10 20 01 mov 1, %i2
40018a94: c2 4e 60 08 ldsb [ %i1 + 8 ], %g1
40018a98: 80 a0 60 20 cmp %g1, 0x20
40018a9c: 12 80 00 19 bne 40018b00 <msdos_format_dirent_with_dot+0xb8>
40018aa0: b4 10 20 00 clr %i2
*dst = '\0'; /* terminate string */
40018aa4: c0 2e 00 00 clrb [ %i0 ]
}
40018aa8: 81 c7 e0 08 ret
40018aac: 91 e8 00 02 restore %g0, %g2, %o0
40018ab0: b8 10 20 00 clr %i4
40018ab4: b4 10 00 1b mov %i3, %i2
*dst++ = tolower((unsigned char)(*src_tmp++));
40018ab8: 40 00 0b eb call 4001ba64 <__locale_ctype_ptr>
40018abc: fa 0e 40 1c ldub [ %i1 + %i4 ], %i5
40018ac0: 82 0f 60 ff and %i5, 0xff, %g1
40018ac4: 90 02 00 01 add %o0, %g1, %o0
40018ac8: c4 0a 20 01 ldub [ %o0 + 1 ], %g2
40018acc: 84 08 a0 03 and %g2, 3, %g2
40018ad0: 80 a0 a0 01 cmp %g2, 1
40018ad4: 22 80 00 02 be,a 40018adc <msdos_format_dirent_with_dot+0x94>
40018ad8: 82 00 60 20 add %g1, 0x20, %g1
40018adc: c2 2e 00 1c stb %g1, [ %i0 + %i4 ]
40018ae0: b8 07 20 01 inc %i4
while (i-- > 0) {
40018ae4: 82 26 80 1c sub %i2, %i4, %g1
40018ae8: 80 a0 60 00 cmp %g1, 0
40018aec: 14 bf ff f3 bg 40018ab8 <msdos_format_dirent_with_dot+0x70>
40018af0: 84 10 00 1b mov %i3, %g2
40018af4: 10 bf ff e0 b 40018a74 <msdos_format_dirent_with_dot+0x2c>
40018af8: b0 06 00 1a add %i0, %i2, %i0
*dst++ = '.'; /* append dot */
40018afc: a0 06 20 01 add %i0, 1, %l0
40018b00: 82 10 20 2e mov 0x2e, %g1
src_tmp = src + MSDOS_SHORT_BASE_LEN;
40018b04: b2 06 60 08 add %i1, 8, %i1
*dst++ = '.'; /* append dot */
40018b08: c2 2e 00 00 stb %g1, [ %i0 ]
++len; /* dot */
40018b0c: b0 00 a0 01 add %g2, 1, %i0
src_tmp = src + MSDOS_SHORT_BASE_LEN;
40018b10: b6 10 00 1a mov %i2, %i3
40018b14: b8 10 00 10 mov %l0, %i4
*dst++ = tolower((unsigned char)(*src_tmp++));
40018b18: 40 00 0b d3 call 4001ba64 <__locale_ctype_ptr>
40018b1c: fa 0e 40 00 ldub [ %i1 ], %i5
40018b20: 82 0f 60 ff and %i5, 0xff, %g1
40018b24: 90 02 00 01 add %o0, %g1, %o0
40018b28: c4 0a 20 01 ldub [ %o0 + 1 ], %g2
40018b2c: 84 08 a0 03 and %g2, 3, %g2
40018b30: b2 06 60 01 inc %i1
40018b34: 80 a0 a0 01 cmp %g2, 1
40018b38: 12 80 00 03 bne 40018b44 <msdos_format_dirent_with_dot+0xfc>
40018b3c: b8 07 20 01 inc %i4
40018b40: 82 00 60 20 add %g1, 0x20, %g1
40018b44: c2 2f 3f ff stb %g1, [ %i4 + -1 ]
while (i-- > 0) {
40018b48: b6 06 ff ff add %i3, -1, %i3
40018b4c: 82 06 e0 01 add %i3, 1, %g1
40018b50: 80 a0 60 00 cmp %g1, 0
40018b54: 14 bf ff f1 bg 40018b18 <msdos_format_dirent_with_dot+0xd0>
40018b58: 82 06 a0 01 add %i2, 1, %g1
40018b5c: 84 06 20 01 add %i0, 1, %g2
40018b60: b0 04 00 01 add %l0, %g1, %i0
40018b64: 84 00 80 1a add %g2, %i2, %g2
*dst = '\0'; /* terminate string */
40018b68: c0 2e 00 00 clrb [ %i0 ]
}
40018b6c: 81 c7 e0 08 ret
40018b70: 91 e8 00 02 restore %g0, %g2, %o0
*dst++ = '.'; /* append dot */
40018b74: 82 10 20 2e mov 0x2e, %g1
src_tmp = src + MSDOS_SHORT_BASE_LEN;
40018b78: b2 06 60 08 add %i1, 8, %i1
*dst++ = '.'; /* append dot */
40018b7c: c2 2e 00 00 stb %g1, [ %i0 ]
src_tmp = src + MSDOS_SHORT_BASE_LEN;
40018b80: b4 10 20 02 mov 2, %i2
++len; /* dot */
40018b84: 10 bf ff e3 b 40018b10 <msdos_format_dirent_with_dot+0xc8>
40018b88: b0 00 a0 01 add %g2, 1, %i0
400196fc <msdos_get_dotdot_dir_info_cluster_num_and_offset>:
{
400196fc: 9d e3 bf 50 save %sp, -176, %sp
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40019700: f8 06 20 08 ld [ %i0 + 8 ], %i4
fat_file_fd_t *fat_fd = NULL;
40019704: c0 27 bf bc clr [ %fp + -68 ]
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
40019708: 94 07 bf bc add %fp, -68, %o2
rtems_dosfs_convert_control *converter = fs_info->converter;
4001970c: e0 07 20 c0 ld [ %i4 + 0xc0 ], %l0
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
40019710: 92 10 00 1a mov %i2, %o1
40019714: 7f ff e7 b6 call 400135ec <fat_file_open>
40019718: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
4001971c: ba 92 20 00 orcc %o0, 0, %i5
40019720: 02 80 00 04 be 40019730 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x34>
<== ALWAYS TAKEN
40019724: c2 07 bf bc ld [ %fp + -68 ], %g1
}
40019728: 81 c7 e0 08 ret
4001972c: 91 e8 00 1d restore %g0, %i5, %o0
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40019730: 05 00 08 00 sethi %hi(0x200000), %g2
fat_fd->cln = cln;
40019734: f2 20 60 1c st %i1, [ %g1 + 0x1c ]
rc = fat_file_size(&fs_info->fat, fat_fd);
40019738: 92 10 00 01 mov %g1, %o1
fat_fd->fat_file_type = FAT_DIRECTORY;
4001973c: c0 20 60 10 clr [ %g1 + 0x10 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
40019740: 90 10 00 1c mov %i4, %o0
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40019744: c4 20 60 14 st %g2, [ %g1 + 0x14 ]
fat_fd->map.file_cln = 0;
40019748: c0 20 60 34 clr [ %g1 + 0x34 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
4001974c: 7f ff ea f2 call 40014314 <fat_file_size>
40019750: f2 20 60 38 st %i1, [ %g1 + 0x38 ]
if (rc != RC_OK)
40019754: ba 92 20 00 orcc %o0, 0, %i5
40019758: 12 80 00 8a bne 40019980 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x284>
<== NEVER TAKEN
4001975c: 98 10 20 0b mov 0xb, %o4
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019760: ba 07 bf c0 add %fp, -64, %i5
msdos_long_to_short(
40019764: 96 10 00 1d mov %i5, %o3
40019768: 94 10 20 01 mov 1, %o2
4001976c: 33 10 00 a7 sethi %hi(0x40029c00), %i1
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019770: c0 27 bf c0 clr [ %fp + -64 ]
msdos_long_to_short(
40019774: 92 16 60 a8 or %i1, 0xa8, %o1
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019778: c0 27 bf c4 clr [ %fp + -60 ]
msdos_long_to_short(
4001977c: 90 10 00 10 mov %l0, %o0
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
40019780: c0 27 bf c8 clr [ %fp + -56 ]
40019784: c0 27 bf cc clr [ %fp + -52 ]
40019788: c0 27 bf d0 clr [ %fp + -48 ]
4001978c: c0 27 bf d4 clr [ %fp + -44 ]
40019790: c0 27 bf d8 clr [ %fp + -40 ]
msdos_long_to_short(
40019794: 7f ff fa 97 call 400181f0 <msdos_long_to_short>
40019798: c0 27 bf dc clr [ %fp + -36 ]
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, (const uint8_t*)".", 1,
4001979c: fa 23 a0 60 st %i5, [ %sp + 0x60 ]
400197a0: 9a 10 20 01 mov 1, %o5
400197a4: f4 23 a0 5c st %i2, [ %sp + 0x5c ]
400197a8: 98 10 20 01 mov 1, %o4
400197ac: d2 07 bf bc ld [ %fp + -68 ], %o1
400197b0: 96 16 60 a8 or %i1, 0xa8, %o3
400197b4: 94 10 20 00 clr %o2
400197b8: 7f ff fc f5 call 40018b8c <msdos_find_name_in_fat_file>
400197bc: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
400197c0: ba 92 20 00 orcc %o0, 0, %i5
400197c4: 12 80 00 6f bne 40019980 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x284>
<== NEVER TAKEN
400197c8: 98 10 20 0b mov 0xb, %o4
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
400197cc: ba 07 bf e0 add %fp, -32, %i5
msdos_long_to_short(
400197d0: 96 10 00 1d mov %i5, %o3
400197d4: 94 10 20 02 mov 2, %o2
400197d8: 33 10 00 a7 sethi %hi(0x40029c00), %i1
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
400197dc: c0 27 bf e0 clr [ %fp + -32 ]
msdos_long_to_short(
400197e0: 92 16 60 b0 or %i1, 0xb0, %o1
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
400197e4: c0 27 bf e4 clr [ %fp + -28 ]
msdos_long_to_short(
400197e8: 90 10 00 10 mov %l0, %o0
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
400197ec: c0 27 bf e8 clr [ %fp + -24 ]
400197f0: c0 27 bf ec clr [ %fp + -20 ]
400197f4: c0 27 bf f0 clr [ %fp + -16 ]
400197f8: c0 27 bf f4 clr [ %fp + -12 ]
400197fc: c0 27 bf f8 clr [ %fp + -8 ]
msdos_long_to_short(
40019800: 7f ff fa 7c call 400181f0 <msdos_long_to_short>
40019804: c0 27 bf fc clr [ %fp + -4 ]
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, (const uint8_t*)"..", 2,
40019808: fa 23 a0 60 st %i5, [ %sp + 0x60 ]
4001980c: 9a 10 20 01 mov 1, %o5
40019810: f4 23 a0 5c st %i2, [ %sp + 0x5c ]
40019814: 98 10 20 02 mov 2, %o4
40019818: d2 07 bf bc ld [ %fp + -68 ], %o1
4001981c: 96 16 60 b0 or %i1, 0xb0, %o3
40019820: 94 10 20 00 clr %o2
40019824: 7f ff fc da call 40018b8c <msdos_find_name_in_fat_file>
40019828: 90 10 00 18 mov %i0, %o0
if (rc != RC_OK)
4001982c: ba 92 20 00 orcc %o0, 0, %i5
40019830: 12 80 00 54 bne 40019980 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x284>
<== NEVER TAKEN
40019834: c4 17 bf da lduh [ %fp + -38 ], %g2
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
40019838: c2 17 bf d4 lduh [ %fp + -44 ], %g1
4001983c: b3 28 a0 08 sll %g2, 8, %i1
40019840: a1 28 60 08 sll %g1, 8, %l0
40019844: 85 30 a0 08 srl %g2, 8, %g2
40019848: 83 30 60 08 srl %g1, 8, %g1
rc = fat_file_close(&fs_info->fat, fat_fd);
4001984c: d2 07 bf bc ld [ %fp + -68 ], %o1
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
40019850: b2 16 40 02 or %i1, %g2, %i1
40019854: a0 14 00 01 or %l0, %g1, %l0
rc = fat_file_close(&fs_info->fat, fat_fd);
40019858: 7f ff e9 0d call 40013c8c <fat_file_close>
4001985c: 90 10 00 1c mov %i4, %o0
if ( rc != RC_OK )
40019860: ba 92 20 00 orcc %o0, 0, %i5
40019864: 12 bf ff b1 bne 40019728 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x2c>
<== NEVER TAKEN
40019868: c4 17 bf fa lduh [ %fp + -6 ], %g2
if ( (MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
4001986c: c6 17 bf f4 lduh [ %fp + -12 ], %g3
40019870: 83 28 a0 08 sll %g2, 8, %g1
40019874: 89 30 a0 08 srl %g2, 8, %g4
40019878: 85 28 e0 08 sll %g3, 8, %g2
4001987c: 82 10 40 04 or %g1, %g4, %g1
40019880: 87 30 e0 08 srl %g3, 8, %g3
40019884: 83 28 60 10 sll %g1, 0x10, %g1
40019888: 84 10 80 03 or %g2, %g3, %g2
4001988c: 83 30 60 10 srl %g1, 0x10, %g1
40019890: 85 28 a0 10 sll %g2, 0x10, %g2
40019894: 80 90 80 01 orcc %g2, %g1, %g0
40019898: 12 80 00 08 bne 400198b8 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x1bc>
4001989c: 94 07 bf bc add %fp, -68, %o2
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400198a0: 82 10 3f ff mov -1, %g1
dir_pos->sname.ofs = 0;
400198a4: c0 26 a0 04 clr [ %i2 + 4 ]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
400198a8: c2 26 a0 08 st %g1, [ %i2 + 8 ]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
400198ac: c2 26 a0 0c st %g1, [ %i2 + 0xc ]
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
400198b0: 82 10 20 01 mov 1, %g1
400198b4: c2 26 80 00 st %g1, [ %i2 ]
rc = fat_file_open(&fs_info->fat, dir_pos, &fat_fd);
400198b8: 92 10 00 1a mov %i2, %o1
400198bc: 7f ff e7 4c call 400135ec <fat_file_open>
400198c0: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
400198c4: ba 92 20 00 orcc %o0, 0, %i5
400198c8: 12 bf ff 98 bne 40019728 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x2c>
<== NEVER TAKEN
400198cc: c2 17 bf fa lduh [ %fp + -6 ], %g1
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
400198d0: c6 17 bf f4 lduh [ %fp + -12 ], %g3
400198d4: 85 28 60 08 sll %g1, 8, %g2
400198d8: 89 30 60 08 srl %g1, 8, %g4
400198dc: 83 28 e0 08 sll %g3, 8, %g1
400198e0: 87 30 e0 08 srl %g3, 8, %g3
400198e4: 84 10 80 04 or %g2, %g4, %g2
400198e8: 82 10 40 03 or %g1, %g3, %g1
400198ec: 85 28 a0 10 sll %g2, 0x10, %g2
400198f0: 83 28 60 10 sll %g1, 0x10, %g1
400198f4: 85 30 a0 10 srl %g2, 0x10, %g2
400198f8: 82 90 40 02 orcc %g1, %g2, %g1
400198fc: 12 80 00 27 bne 40019998 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x29c>
40019900: c6 07 bf bc ld [ %fp + -68 ], %g3
fat_fd->cln = fs_info->fat.vol.rdir_cl;
40019904: c2 07 20 44 ld [ %i4 + 0x44 ], %g1
40019908: c2 20 e0 1c st %g1, [ %g3 + 0x1c ]
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
4001990c: 05 00 08 00 sethi %hi(0x200000), %g2
fat_fd->fat_file_type = FAT_DIRECTORY;
40019910: c0 20 e0 10 clr [ %g3 + 0x10 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
40019914: 92 10 00 03 mov %g3, %o1
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
40019918: c4 20 e0 14 st %g2, [ %g3 + 0x14 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
4001991c: 90 10 00 1c mov %i4, %o0
fat_fd->map.file_cln = 0;
40019920: c0 20 e0 34 clr [ %g3 + 0x34 ]
rc = fat_file_size(&fs_info->fat, fat_fd);
40019924: 7f ff ea 7c call 40014314 <fat_file_size>
40019928: c2 20 e0 38 st %g1, [ %g3 + 0x38 ]
fat_file_close(&fs_info->fat, fat_fd);
4001992c: d2 07 bf bc ld [ %fp + -68 ], %o1
if (rc != RC_OK)
40019930: 80 a2 20 00 cmp %o0, 0
40019934: 12 80 00 1b bne 400199a0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x2a4>
<== NEVER TAKEN
40019938: ba 10 00 08 mov %o0, %i5
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
4001993c: 85 2e 60 10 sll %i1, 0x10, %g2
40019940: 85 30 a0 10 srl %g2, 0x10, %g2
40019944: 95 2c 20 10 sll %l0, 0x10, %o2
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
40019948: 98 10 00 1b mov %i3, %o4
4001994c: 96 10 00 1a mov %i2, %o3
40019950: 94 12 80 02 or %o2, %g2, %o2
40019954: 7f ff ff 0b call 40019580 <msdos_find_node_by_cluster_num_in_fat_file>
40019958: 90 10 00 18 mov %i0, %o0
fat_file_close(&fs_info->fat, fat_fd);
4001995c: d2 07 bf bc ld [ %fp + -68 ], %o1
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
40019960: ba 10 00 08 mov %o0, %i5
if (rc != RC_OK)
40019964: 80 a7 60 00 cmp %i5, 0
40019968: 12 80 00 12 bne 400199b0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x2b4>
<== NEVER TAKEN
4001996c: 90 10 00 1c mov %i4, %o0
rc = fat_file_close(&fs_info->fat, fat_fd);
40019970: 7f ff e8 c7 call 40013c8c <fat_file_close>
40019974: 01 00 00 00 nop
return rc;
40019978: 10 bf ff 6c b 40019728 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x2c>
4001997c: ba 10 00 08 mov %o0, %i5
fat_file_close(&fs_info->fat, fat_fd);
40019980: d2 07 bf bc ld [ %fp + -68 ], %o1
<== NOT EXECUTED
40019984: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
40019988: 7f ff e8 c1 call 40013c8c <fat_file_close>
<== NOT EXECUTED
4001998c: b0 10 00 1d mov %i5, %i0
<== NOT EXECUTED
}
40019990: 81 c7 e0 08 ret
<== NOT EXECUTED
40019994: 81 e8 00 00 restore
<== NOT EXECUTED
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
40019998: 10 bf ff dd b 4001990c <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x210>
4001999c: c2 20 e0 1c st %g1, [ %g3 + 0x1c ]
fat_file_close(&fs_info->fat, fat_fd);
400199a0: 7f ff e8 bb call 40013c8c <fat_file_close>
<== NOT EXECUTED
400199a4: 90 10 00 1c mov %i4, %o0
<== NOT EXECUTED
return rc;
400199a8: 81 c7 e0 08 ret
<== NOT EXECUTED
400199ac: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
fat_file_close(&fs_info->fat, fat_fd);
400199b0: 7f ff e8 b7 call 40013c8c <fat_file_close>
<== NOT EXECUTED
400199b4: b0 10 00 1d mov %i5, %i0
<== NOT EXECUTED
return rc;
400199b8: 30 bf ff f6 b,a 40019990 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x294>
<== NOT EXECUTED
400199bc <msdos_get_name_node>:
{
400199bc: 9d e3 bf 98 save %sp, -104, %sp
400199c0: e0 07 a0 5c ld [ %fp + 0x5c ], %l0
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
400199c4: e0 23 a0 60 st %l0, [ %sp + 0x60 ]
400199c8: 9a 10 00 1c mov %i4, %o5
400199cc: fa 23 a0 5c st %i5, [ %sp + 0x5c ]
400199d0: 98 10 00 1b mov %i3, %o4
400199d4: d2 06 20 08 ld [ %i0 + 8 ], %o1
400199d8: d0 06 20 14 ld [ %i0 + 0x14 ], %o0
400199dc: 96 10 00 1a mov %i2, %o3
400199e0: 7f ff fc 6b call 40018b8c <msdos_find_name_in_fat_file>
400199e4: 94 10 00 19 mov %i1, %o2
if ((rc != RC_OK) && (rc != MSDOS_NAME_NOT_FOUND_ERR))
400199e8: 80 a0 00 08 cmp %g0, %o0
400199ec: 03 00 00 1f sethi %hi(0x7c00), %g1
400199f0: 86 40 20 00 addx %g0, 0, %g3
400199f4: 82 10 61 01 or %g1, 0x101, %g1
400199f8: 84 1a 00 01 xor %o0, %g1, %g2
400199fc: 80 a0 00 02 cmp %g0, %g2
40019a00: 84 40 20 00 addx %g0, 0, %g2
if (!create_node)
40019a04: 80 88 c0 02 btst %g3, %g2
40019a08: 12 80 00 05 bne 40019a1c <msdos_get_name_node+0x60>
40019a0c: b8 10 00 08 mov %o0, %i4
40019a10: 80 a6 60 00 cmp %i1, 0
40019a14: 02 80 00 04 be 40019a24 <msdos_get_name_node+0x68>
40019a18: 80 a2 00 01 cmp %o0, %g1
}
40019a1c: 81 c7 e0 08 ret
40019a20: 91 e8 00 1c restore %g0, %i4, %o0
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
40019a24: 02 bf ff fe be 40019a1c <msdos_get_name_node+0x60>
40019a28: 80 a2 20 00 cmp %o0, 0
if (rc == RC_OK)
40019a2c: 12 bf ff fc bne 40019a1c <msdos_get_name_node+0x60>
<== NEVER TAKEN
40019a30: 94 10 20 02 mov 2, %o2
if (strncmp(name, "..", 2) == 0)
40019a34: 90 10 00 1a mov %i2, %o0
40019a38: 13 10 00 a7 sethi %hi(0x40029c00), %o1
40019a3c: 40 00 0d 88 call 4001d05c <strncmp>
40019a40: 92 12 60 b0 or %o1, 0xb0, %o1 ! 40029cb0 <rtems_filesystem_default_pathconf+0x38>
40019a44: 80 a2 20 00 cmp %o0, 0
40019a48: 12 bf ff f5 bne 40019a1c <msdos_get_name_node+0x60>
40019a4c: 01 00 00 00 nop
dotdot_cln = MSDOS_EXTRACT_CLUSTER_NUM((name_dir_entry));
40019a50: c2 14 20 1a lduh [ %l0 + 0x1a ], %g1
40019a54: c4 14 20 14 lduh [ %l0 + 0x14 ], %g2
40019a58: b3 28 60 08 sll %g1, 8, %i1
40019a5c: 87 30 60 08 srl %g1, 8, %g3
40019a60: 83 28 a0 08 sll %g2, 8, %g1
40019a64: b2 16 40 03 or %i1, %g3, %i1
40019a68: 85 30 a0 08 srl %g2, 8, %g2
40019a6c: b3 2e 60 10 sll %i1, 0x10, %i1
40019a70: 82 10 40 02 or %g1, %g2, %g1
40019a74: b3 36 60 10 srl %i1, 0x10, %i1
40019a78: 83 28 60 10 sll %g1, 0x10, %g1
if (dotdot_cln == 0)
40019a7c: b2 90 40 19 orcc %g1, %i1, %i1
40019a80: 12 80 00 08 bne 40019aa0 <msdos_get_name_node+0xe4>
40019a84: 82 10 3f ff mov -1, %g1
dir_pos->sname.ofs = 0;
40019a88: c0 27 60 04 clr [ %i5 + 4 ]
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
40019a8c: c2 27 60 08 st %g1, [ %i5 + 8 ]
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
40019a90: c2 27 60 0c st %g1, [ %i5 + 0xc ]
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
40019a94: 82 10 20 01 mov 1, %g1
40019a98: 10 bf ff e1 b 40019a1c <msdos_get_name_node+0x60>
40019a9c: c2 27 40 00 st %g1, [ %i5 ]
rc =
40019aa0: f0 06 20 14 ld [ %i0 + 0x14 ], %i0
<== NOT EXECUTED
40019aa4: b6 10 00 10 mov %l0, %i3
<== NOT EXECUTED
40019aa8: 7f ff ff 15 call 400196fc <msdos_get_dotdot_dir_info_cluster_num_and_offset>
<== NOT EXECUTED
40019aac: 95 e8 00 1d restore %g0, %i5, %o2
40018a28 <msdos_get_utf16_string_from_long_entry>:
if (buf_size >= MSDOS_LFN_ENTRY_SIZE) {
40018a28: 80 a2 a0 19 cmp %o2, 0x19
40018a2c: 08 80 00 05 bleu 40018a40 <msdos_get_utf16_string_from_long_entry+0x18>
<== NEVER TAKEN
40018a30: 94 10 00 0b mov %o3, %o2
40018a34: 82 13 c0 00 mov %o7, %g1
40018a38: 7f ff fd c1 call 4001813c <msdos_get_utf16_string_from_long_entry.part.2>
40018a3c: 9e 10 40 00 mov %g1, %o7
}
40018a40: 81 c3 e0 08 retl
<== NOT EXECUTED
40018a44: 90 10 20 0c mov 0xc, %o0
<== NOT EXECUTED
4000ebf8 <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
)
{
4000ebf8: 9d e3 bf 88 save %sp, -120, %sp
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));
4000ebfc: 92 10 20 c4 mov 0xc4, %o1
fat_file_fd_t *fat_fd = NULL;
4000ec00: c0 27 bf ec clr [ %fp + -20 ]
fs_info = (msdos_fs_info_t *)calloc(1, sizeof(msdos_fs_info_t));
4000ec04: 7f ff d9 6e call 400051bc <calloc>
4000ec08: 90 10 20 01 mov 1, %o0
if (!fs_info)
4000ec0c: ba 92 20 00 orcc %o0, 0, %i5
4000ec10: 02 80 00 52 be 4000ed58 <msdos_initialize_support+0x160>
<== NEVER TAKEN
4000ec14: 01 00 00 00 nop
rtems_set_errno_and_return_minus_one(ENOMEM);
temp_mt_entry->fs_info = fs_info;
fs_info->converter = converter;
4000ec18: f8 27 60 c0 st %i4, [ %i5 + 0xc0 ]
temp_mt_entry->fs_info = fs_info;
4000ec1c: fa 26 20 08 st %i5, [ %i0 + 8 ]
rc = fat_init_volume_info(&fs_info->fat, temp_mt_entry->dev);
4000ec20: 40 00 17 9f call 40014a9c <fat_init_volume_info>
4000ec24: d2 06 20 38 ld [ %i0 + 0x38 ], %o1
if (rc != RC_OK)
4000ec28: b8 92 20 00 orcc %o0, 0, %i4
4000ec2c: 12 80 00 38 bne 4000ed0c <msdos_initialize_support+0x114>
<== NEVER TAKEN
4000ec30: 82 10 3f ff mov -1, %g1
{
free(fs_info);
return rc;
}
fs_info->file_handlers = file_handlers;
4000ec34: f4 27 60 a0 st %i2, [ %i5 + 0xa0 ]
* 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;
rc = fat_file_open(&fs_info->fat, &root_pos, &fat_fd);
4000ec38: 94 07 bf ec add %fp, -20, %o2
fs_info->directory_handlers = directory_handlers;
4000ec3c: f6 27 60 9c st %i3, [ %i5 + 0x9c ]
rc = fat_file_open(&fs_info->fat, &root_pos, &fat_fd);
4000ec40: 92 07 bf f0 add %fp, -16, %o1
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
4000ec44: c2 27 bf f8 st %g1, [ %fp + -8 ]
4000ec48: 90 10 00 1d mov %i5, %o0
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
4000ec4c: c2 27 bf fc st %g1, [ %fp + -4 ]
root_pos.sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
4000ec50: 82 10 20 01 mov 1, %g1
dir_pos->sname.ofs = 0;
4000ec54: c0 27 bf f4 clr [ %fp + -12 ]
rc = fat_file_open(&fs_info->fat, &root_pos, &fat_fd);
4000ec58: 40 00 12 65 call 400135ec <fat_file_open>
4000ec5c: c2 27 bf f0 st %g1, [ %fp + -16 ]
if (rc != RC_OK)
4000ec60: b8 92 20 00 orcc %o0, 0, %i4
4000ec64: 12 80 00 28 bne 4000ed04 <msdos_initialize_support+0x10c>
<== NEVER TAKEN
4000ec68: f4 07 bf ec ld [ %fp + -20 ], %i2
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
fat_fd->cln = fs_info->fat.vol.rdir_cl;
4000ec6c: c2 07 60 44 ld [ %i5 + 0x44 ], %g1
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
4000ec70: 05 00 08 00 sethi %hi(0x200000), %g2
fat_fd->fat_file_type = FAT_DIRECTORY;
4000ec74: c0 26 a0 10 clr [ %i2 + 0x10 ]
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
4000ec78: 80 a0 60 00 cmp %g1, 0
fat_fd->size_limit = MSDOS_MAX_DIR_LENGTH;
4000ec7c: c4 26 a0 14 st %g2, [ %i2 + 0x14 ]
fat_fd->cln = fs_info->fat.vol.rdir_cl;
4000ec80: c2 26 a0 1c st %g1, [ %i2 + 0x1c ]
fat_fd->map.file_cln = 0;
4000ec84: c0 26 a0 34 clr [ %i2 + 0x34 ]
if ( fat_fd->cln == 0 )
4000ec88: 12 80 00 25 bne 4000ed1c <msdos_initialize_support+0x124>
4000ec8c: c2 26 a0 38 st %g1, [ %i2 + 0x38 ]
{
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
4000ec90: c2 07 60 34 ld [ %i5 + 0x34 ], %g1
4000ec94: c2 26 a0 18 st %g1, [ %i2 + 0x18 ]
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
4000ec98: d0 07 60 08 ld [ %i5 + 8 ], %o0
4000ec9c: 80 a2 00 01 cmp %o0, %g1
4000eca0: 2a 80 00 02 bcs,a 4000eca8 <msdos_initialize_support+0xb0>
4000eca4: 90 10 00 01 mov %g1, %o0
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
4000eca8: 7f ff d9 45 call 400051bc <calloc>
4000ecac: 92 10 20 01 mov 1, %o1
if (fs_info->cl_buf == NULL)
4000ecb0: 80 a2 20 00 cmp %o0, 0
4000ecb4: 02 80 00 22 be 4000ed3c <msdos_initialize_support+0x144>
<== NEVER TAKEN
4000ecb8: d0 27 60 bc st %o0, [ %i5 + 0xbc ]
const char *_name)
{
struct _Mutex_recursive_Control _init =
_MUTEX_RECURSIVE_NAMED_INITIALIZER(_name);
*_mutex = _init;
4000ecbc: 03 10 00 a4 sethi %hi(0x40029000), %g1
4000ecc0: 82 10 63 70 or %g1, 0x370, %g1 ! 40029370 <_rodata_start+0x10>
4000ecc4: c0 27 60 a4 clr [ %i5 + 0xa4 ]
4000ecc8: c2 27 60 b4 st %g1, [ %i5 + 0xb4 ]
4000eccc: c0 27 60 a8 clr [ %i5 + 0xa8 ]
}
rtems_recursive_mutex_init(&fs_info->vol_mutex,
RTEMS_FILESYSTEM_TYPE_DOSFS);
temp_mt_entry->mt_fs_root->location.node_access = fat_fd;
4000ecd0: c2 06 20 24 ld [ %i0 + 0x24 ], %g1
4000ecd4: c0 27 60 ac clr [ %i5 + 0xac ]
4000ecd8: c0 27 60 b0 clr [ %i5 + 0xb0 ]
4000ecdc: c0 27 60 b8 clr [ %i5 + 0xb8 ]
4000ece0: f4 20 60 08 st %i2, [ %g1 + 8 ]
temp_mt_entry->mt_fs_root->location.handlers = directory_handlers;
4000ece4: f6 20 60 10 st %i3, [ %g1 + 0x10 ]
temp_mt_entry->ops = op_table;
4000ece8: f2 26 20 0c st %i1, [ %i0 + 0xc ]
return rc;
}
4000ecec: 81 c7 e0 08 ret
4000ecf0: 91 e8 00 1c restore %g0, %i4, %o0
fat_file_close(&fs_info->fat, fat_fd);
4000ecf4: d2 07 bf ec ld [ %fp + -20 ], %o1
<== NOT EXECUTED
4000ecf8: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
4000ecfc: 40 00 13 e4 call 40013c8c <fat_file_close>
<== NOT EXECUTED
4000ed00: b8 10 00 01 mov %g1, %i4
<== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
4000ed04: 40 00 19 b4 call 400153d4 <fat_shutdown_drive>
<== NOT EXECUTED
4000ed08: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
free(fs_info);
4000ed0c: 7f ff d9 b1 call 400053d0 <free>
<== NOT EXECUTED
4000ed10: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
}
4000ed14: 81 c7 e0 08 ret
<== NOT EXECUTED
4000ed18: 91 e8 00 1c restore %g0, %i4, %o0
<== NOT EXECUTED
rc = fat_file_size(&fs_info->fat, fat_fd);
4000ed1c: 92 10 00 1a mov %i2, %o1
4000ed20: 40 00 15 7d call 40014314 <fat_file_size>
4000ed24: 90 10 00 1d mov %i5, %o0
if ( rc != RC_OK )
4000ed28: 82 92 20 00 orcc %o0, 0, %g1
4000ed2c: 12 bf ff f2 bne 4000ecf4 <msdos_initialize_support+0xfc>
<== NEVER TAKEN
4000ed30: f4 07 bf ec ld [ %fp + -20 ], %i2
cl_buf_size = fs_info->fat.vol.bpc;
4000ed34: 10 bf ff dd b 4000eca8 <msdos_initialize_support+0xb0>
4000ed38: d0 07 60 08 ld [ %i5 + 8 ], %o0
fat_file_close(&fs_info->fat, fat_fd);
4000ed3c: 92 10 00 1a mov %i2, %o1
<== NOT EXECUTED
4000ed40: 40 00 13 d3 call 40013c8c <fat_file_close>
<== NOT EXECUTED
4000ed44: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
fat_shutdown_drive(&fs_info->fat);
4000ed48: 40 00 19 a3 call 400153d4 <fat_shutdown_drive>
<== NOT EXECUTED
4000ed4c: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
free(fs_info);
4000ed50: 7f ff d9 a0 call 400053d0 <free>
<== NOT EXECUTED
4000ed54: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
4000ed58: 40 00 30 f9 call 4001b13c <__errno>
<== NOT EXECUTED
4000ed5c: b8 10 3f ff mov -1, %i4
<== NOT EXECUTED
4000ed60: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
4000ed64: 10 bf ff ec b 4000ed14 <msdos_initialize_support+0x11c>
<== NOT EXECUTED
4000ed68: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
400181f0 <msdos_long_to_short>:
{
400181f0: 9d e3 bf 90 save %sp, -112, %sp
size_t codepage_name_len = converter->buffer.size;
400181f4: c2 06 20 08 ld [ %i0 + 8 ], %g1
400181f8: c2 27 bf fc st %g1, [ %fp + -4 ]
memset (sfn, ' ', sfn_len);
400181fc: 94 10 00 1c mov %i4, %o2
void *buffer = converter->buffer.data;
40018200: e0 06 20 04 ld [ %i0 + 4 ], %l0
memset (sfn, ' ', sfn_len);
40018204: 92 10 20 20 mov 0x20, %o1
40018208: 40 00 0e fa call 4001bdf0 <memset>
4001820c: 90 10 00 1b mov %i3, %o0
if ((lfn[0] == '.') && (lfn_len == 1))
40018210: c2 4e 40 00 ldsb [ %i1 ], %g1
40018214: 80 a0 60 2e cmp %g1, 0x2e
40018218: 02 80 00 81 be 4001841c <msdos_long_to_short+0x22c>
4001821c: 80 a6 a0 00 cmp %i2, 0
for (i = 0; i < lfn_len; i++)
40018220: 04 80 00 78 ble 40018400 <msdos_long_to_short+0x210>
<== NEVER TAKEN
40018224: 80 a0 60 20 cmp %g1, 0x20
if ((lfn[i] != ' ') && (lfn[i] != '.'))
40018228: 12 80 00 0c bne 40018258 <msdos_long_to_short+0x68>
4001822c: 82 10 20 00 clr %g1
for (i = 0; i < lfn_len; i++)
40018230: 82 00 60 01 inc %g1
40018234: 80 a6 80 01 cmp %i2, %g1
40018238: 04 80 00 74 ble 40018408 <msdos_long_to_short+0x218>
4001823c: 01 00 00 00 nop
if ((lfn[i] != ' ') && (lfn[i] != '.'))
40018240: c4 4e 40 01 ldsb [ %i1 + %g1 ], %g2
40018244: 80 a0 a0 20 cmp %g2, 0x20
40018248: 02 bf ff fa be 40018230 <msdos_long_to_short+0x40>
4001824c: 80 a0 a0 2e cmp %g2, 0x2e
40018250: 02 bf ff f9 be 40018234 <msdos_long_to_short+0x44>
40018254: 82 00 60 01 inc %g1
eno = (*converter->handler->utf8_to_codepage) (
40018258: c2 06 00 00 ld [ %i0 ], %g1
4001825c: c2 00 40 00 ld [ %g1 ], %g1
40018260: 98 07 bf fc add %fp, -4, %o4
40018264: 96 10 00 10 mov %l0, %o3
40018268: 94 10 00 1a mov %i2, %o2
4001826c: 92 10 00 19 mov %i1, %o1
40018270: 9f c0 40 00 call %g1
40018274: 90 10 00 18 mov %i0, %o0
if (eno == EINVAL)
40018278: 80 a2 20 16 cmp %o0, 0x16
4001827c: 02 80 00 52 be 400183c4 <msdos_long_to_short+0x1d4>
40018280: ba 10 20 02 mov 2, %i5
while (*name && (count < name_len))
40018284: fa 0c 00 00 ldub [ %l0 ], %i5
type = msdos_name_type (
40018288: e6 07 bf fc ld [ %fp + -4 ], %l3
while (*name && (count < name_len))
4001828c: 93 2f 60 18 sll %i5, 0x18, %o1
40018290: 80 a0 00 09 cmp %g0, %o1
40018294: 83 3c e0 1f sra %l3, 0x1f, %g1
40018298: 84 40 20 00 addx %g0, 0, %g2
4001829c: 82 20 40 13 sub %g1, %l3, %g1
400182a0: 83 30 60 1f srl %g1, 0x1f, %g1
400182a4: 82 08 80 01 and %g2, %g1, %g1
400182a8: 80 a0 60 00 cmp %g1, 0
400182ac: 02 80 00 6a be 40018454 <msdos_long_to_short+0x264>
<== NEVER TAKEN
400182b0: a8 10 00 01 mov %g1, %l4
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
400182b4: 2b 10 00 a9 sethi %hi(0x4002a400), %l5
bool lowercase = false;
400182b8: c0 2f bf f7 clrb [ %fp + -9 ]
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
400182bc: 82 15 60 60 or %l5, 0x60, %g1
400182c0: c2 27 bf f0 st %g1, [ %fp + -16 ]
if (strchr(" +,;=[]", ch) != NULL)
400182c4: 25 10 00 a9 sethi %hi(0x4002a400), %l2
bool uppercase = false;
400182c8: ac 10 20 00 clr %l6
int count = 0;
400182cc: ae 10 20 00 clr %l7
int dot_at = -1;
400182d0: a2 10 3f ff mov -1, %l1
if (strchr(" +,;=[]", ch) != NULL)
400182d4: a4 14 a0 58 or %l2, 0x58, %l2
400182d8: ab 3a 60 18 sra %o1, 0x18, %l5
400182dc: 90 10 00 12 mov %l2, %o0
400182e0: 40 00 12 62 call 4001cc68 <strchr>
400182e4: 92 10 00 15 mov %l5, %o1
400182e8: 80 a2 20 00 cmp %o0, 0
400182ec: 32 80 00 36 bne,a 400183c4 <msdos_long_to_short+0x1d4>
400182f0: ba 10 20 02 mov 2, %i5
if ((ch == '.') || isalnum((unsigned char)ch) ||
400182f4: 80 a5 60 2e cmp %l5, 0x2e
400182f8: 02 80 00 3e be 400183f0 <msdos_long_to_short+0x200>
400182fc: 80 a4 7f ff cmp %l1, -1
40018300: 40 00 0d d9 call 4001ba64 <__locale_ctype_ptr>
40018304: ba 0f 60 ff and %i5, 0xff, %i5
40018308: 90 02 00 1d add %o0, %i5, %o0
4001830c: c6 0a 20 01 ldub [ %o0 + 1 ], %g3
40018310: 80 88 e0 07 btst 7, %g3
40018314: 12 80 00 0a bne 4001833c <msdos_long_to_short+0x14c>
40018318: d0 07 bf f0 ld [ %fp + -16 ], %o0
(strchr("$%'-_@~`!(){}^#&", ch) != NULL) || (unsigned char) ch > 127)
4001831c: 40 00 12 53 call 4001cc68 <strchr>
40018320: 92 10 00 15 mov %l5, %o1
40018324: 80 a2 20 00 cmp %o0, 0
40018328: 12 80 00 05 bne 4001833c <msdos_long_to_short+0x14c>
4001832c: bb 37 60 07 srl %i5, 7, %i5
40018330: 80 a7 60 00 cmp %i5, 0
40018334: 02 80 00 38 be 40018414 <msdos_long_to_short+0x224>
40018338: ba 10 20 00 clr %i5
if (dot_at >= 0)
4001833c: 80 a4 7f ff cmp %l1, -1
40018340: 02 80 00 4d be 40018474 <msdos_long_to_short+0x284>
40018344: 82 25 c0 11 sub %l7, %l1, %g1
if (is_dot || ((count - dot_at) > 3))
40018348: 80 a0 60 03 cmp %g1, 3
4001834c: 14 80 00 1e bg 400183c4 <msdos_long_to_short+0x1d4>
40018350: ba 10 20 02 mov 2, %i5
else if ((*name >= 'A') && (*name <= 'Z'))
40018354: c2 0c 00 17 ldub [ %l0 + %l7 ], %g1
40018358: 86 00 7f bf add %g1, -65, %g3
4001835c: 80 a0 e0 19 cmp %g3, 0x19
40018360: 28 80 00 06 bleu,a 40018378 <msdos_long_to_short+0x188>
40018364: ac 10 00 14 mov %l4, %l6
else if ((*name >= 'a') && (*name <= 'z'))
40018368: 82 00 7f 9f add %g1, -97, %g1
4001836c: 80 a0 60 19 cmp %g1, 0x19
40018370: 28 80 00 02 bleu,a 40018378 <msdos_long_to_short+0x188>
40018374: e8 2f bf f7 stb %l4, [ %fp + -9 ]
count++;
40018378: ae 05 e0 01 inc %l7
while (*name && (count < name_len))
4001837c: fa 0c 00 17 ldub [ %l0 + %l7 ], %i5
40018380: 93 2f 60 18 sll %i5, 0x18, %o1
40018384: 80 a2 60 00 cmp %o1, 0
40018388: 02 80 00 08 be 400183a8 <msdos_long_to_short+0x1b8>
4001838c: 80 a4 c0 17 cmp %l3, %l7
40018390: 14 80 00 03 bg 4001839c <msdos_long_to_short+0x1ac>
40018394: 82 10 20 01 mov 1, %g1
40018398: 82 10 20 00 clr %g1
4001839c: 80 88 60 ff btst 0xff, %g1
400183a0: 32 bf ff cf bne,a 400182dc <msdos_long_to_short+0xec>
400183a4: ab 3a 60 18 sra %o1, 0x18, %l5
if (lowercase && uppercase)
400183a8: c2 0f bf f7 ldub [ %fp + -9 ], %g1
400183ac: 80 88 60 ff btst 0xff, %g1
400183b0: 02 80 00 29 be 40018454 <msdos_long_to_short+0x264>
400183b4: 80 8d a0 ff btst 0xff, %l6
400183b8: 02 80 00 03 be 400183c4 <msdos_long_to_short+0x1d4>
400183bc: ba 10 20 01 mov 1, %i5
type = MSDOS_NAME_LONG;
400183c0: ba 10 20 02 mov 2, %i5
short_filename_length = msdos_filename_utf8_to_short_name_for_save (
400183c4: 98 10 00 1c mov %i4, %o4
400183c8: 96 10 00 1b mov %i3, %o3
400183cc: 94 10 00 1a mov %i2, %o2
400183d0: 92 10 00 19 mov %i1, %o1
400183d4: 40 00 08 6c call 4001a584 <msdos_filename_utf8_to_short_name_for_save>
400183d8: 90 10 00 18 mov %i0, %o0
if (short_filename_length < 0 ) {
400183dc: 80 a2 20 00 cmp %o0, 0
400183e0: 26 80 00 0d bl,a 40018414 <msdos_long_to_short+0x224>
<== NEVER TAKEN
400183e4: ba 10 20 00 clr %i5
<== NOT EXECUTED
}
400183e8: 81 c7 e0 08 ret
400183ec: 91 e8 00 1d restore %g0, %i5, %o0
if (dot_at >= 0)
400183f0: 12 bf ff f5 bne 400183c4 <msdos_long_to_short+0x1d4>
400183f4: ba 10 20 02 mov 2, %i5
400183f8: 10 bf ff e0 b 40018378 <msdos_long_to_short+0x188>
400183fc: a2 10 00 17 mov %l7, %l1
for (i = 0; i < lfn_len; i++)
40018400: 82 10 20 00 clr %g1
<== NOT EXECUTED
if (i == lfn_len)
40018404: 80 a6 80 01 cmp %i2, %g1
<== NOT EXECUTED
40018408: 32 bf ff 95 bne,a 4001825c <msdos_long_to_short+0x6c>
<== NEVER TAKEN
4001840c: c2 06 00 00 ld [ %i0 ], %g1
<== NOT EXECUTED
type = MSDOS_NAME_INVALID;
40018410: ba 10 20 00 clr %i5
}
40018414: 81 c7 e0 08 ret
40018418: 91 e8 00 1d restore %g0, %i5, %o0
if ((lfn[0] == '.') && (lfn_len == 1))
4001841c: 80 a6 a0 01 cmp %i2, 1
40018420: 02 80 00 0f be 4001845c <msdos_long_to_short+0x26c>
40018424: ba 10 20 01 mov 1, %i5
if ((lfn[0] == '.') && (lfn[1] == '.') && (lfn_len == 2))
40018428: c4 4e 60 01 ldsb [ %i1 + 1 ], %g2
4001842c: 80 a0 a0 2e cmp %g2, 0x2e
40018430: 12 80 00 04 bne 40018440 <msdos_long_to_short+0x250>
<== NEVER TAKEN
40018434: 80 a6 a0 02 cmp %i2, 2
40018438: 22 80 00 0c be,a 40018468 <msdos_long_to_short+0x278>
4001843c: c2 2e e0 01 stb %g1, [ %i3 + 1 ]
for (i = 0; i < lfn_len; i++)
40018440: 80 a6 a0 00 cmp %i2, 0
40018444: 14 bf ff 7b bg 40018230 <msdos_long_to_short+0x40>
<== ALWAYS TAKEN
40018448: 82 10 20 00 clr %g1
if (i == lfn_len)
4001844c: 10 bf ff ef b 40018408 <msdos_long_to_short+0x218>
<== NOT EXECUTED
40018450: 80 a6 80 01 cmp %i2, %g1
<== NOT EXECUTED
return MSDOS_NAME_SHORT;
40018454: 10 bf ff dc b 400183c4 <msdos_long_to_short+0x1d4>
40018458: ba 10 20 01 mov 1, %i5
sfn[0] = '.';
4001845c: c2 2e c0 00 stb %g1, [ %i3 ]
}
40018460: 81 c7 e0 08 ret
40018464: 91 e8 00 1d restore %g0, %i5, %o0
return MSDOS_NAME_SHORT;
40018468: ba 10 20 01 mov 1, %i5
4001846c: 10 bf ff df b 400183e8 <msdos_long_to_short+0x1f8>
40018470: c2 2e c0 00 stb %g1, [ %i3 ]
if (count == 8 && !is_dot)
40018474: 80 a5 e0 08 cmp %l7, 8
40018478: 32 bf ff b8 bne,a 40018358 <msdos_long_to_short+0x168>
4001847c: c2 0c 00 17 ldub [ %l0 + %l7 ], %g1
type = MSDOS_NAME_LONG;
40018480: 10 bf ff d1 b 400183c4 <msdos_long_to_short+0x1d4>
40018484: ba 10 20 02 mov 2, %i5
4000ed6c <msdos_mknod>:
const char *name,
size_t namelen,
mode_t mode,
dev_t dev
)
{
4000ed6c: 9d e3 bf a0 save %sp, -96, %sp
fat_file_type_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
4000ed70: 03 00 00 3c sethi %hi(0xf000), %g1
4000ed74: 05 00 00 10 sethi %hi(0x4000), %g2
4000ed78: 82 0e c0 01 and %i3, %g1, %g1
4000ed7c: 80 a0 40 02 cmp %g1, %g2
4000ed80: 02 80 00 0b be 4000edac <msdos_mknod+0x40>
4000ed84: 07 00 00 20 sethi %hi(0x8000), %g3
{
type = FAT_DIRECTORY;
}
else if (S_ISREG(mode))
4000ed88: 80 a0 40 03 cmp %g1, %g3
4000ed8c: 12 80 00 0f bne 4000edc8 <msdos_mknod+0x5c>
<== NEVER TAKEN
4000ed90: 84 10 20 04 mov 4, %g2
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
/* Create an MSDOS node */
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
4000ed94: b8 10 00 1b mov %i3, %i4
4000ed98: ba 10 20 00 clr %i5
4000ed9c: b6 10 00 1a mov %i2, %i3
4000eda0: b4 10 00 19 mov %i1, %i2
4000eda4: 40 00 23 2a call 40017a4c <msdos_creat_node>
4000eda8: 93 e8 00 02 restore %g0, %g2, %o1
type = FAT_DIRECTORY;
4000edac: 84 10 20 00 clr %g2
rc = msdos_creat_node(parentloc, type, name, namelen, mode, NULL);
4000edb0: b8 10 00 1b mov %i3, %i4
4000edb4: ba 10 20 00 clr %i5
4000edb8: b6 10 00 1a mov %i2, %i3
4000edbc: b4 10 00 19 mov %i1, %i2
4000edc0: 40 00 23 23 call 40017a4c <msdos_creat_node>
4000edc4: 93 e8 00 02 restore %g0, %g2, %o1
rtems_set_errno_and_return_minus_one(EINVAL);
4000edc8: 40 00 30 dd call 4001b13c <__errno>
<== NOT EXECUTED
4000edcc: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4000edd0: 82 10 20 16 mov 0x16, %g1
<== NOT EXECUTED
4000edd4: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
return rc;
}
4000edd8: 81 c7 e0 08 ret
<== NOT EXECUTED
4000eddc: 81 e8 00 00 restore
<== NOT EXECUTED
40029f64 <msdos_ops>:
40029f64: 40 00 eb 1c 40 00 eb 30 40 01 7f 9c 40 01 2a 00 @...@..0@...@.*.
40029f74: 40 00 39 44 40 00 ed 6c 40 00 ee 28 40 01 29 54 @.9D@..l@..(@.)T
40029f84: 40 01 29 1c 40 00 eb 0c 40 01 7f b4 40 01 2b b4 @.).@...@...@.+.
40029f94: 40 01 2c b0 40 01 7f cc 40 00 eb 44 40 01 2c 94 @.,.@...@..D@.,.
40029fa4: 40 01 2b e0 40 00 ed e0 40 00 ee d8 53 70 61 72 @.+.@...@...Spar
40029fb4: 73 65 20 44 69 73 6b 00 00 00 00 00 0a 0a 2a 2a se Disk.......**
40029fc4: 2a 20 42 45 47 49 4e 20 4f 46 20 54 45 53 54 20 * BEGIN OF TEST
40029fd4: 25 73 20 2a 2a 2a 0a 2a 2a 2a 20 54 45 53 54 20 %s ***.*** TEST
40029fe4: 56 45 52 53 49 4f 4e 3a 20 25 73 0a 2a 2a 2a 20 VERSION: %s.***
40029ff4: 54 45 53 54 20 53 54 41 54 45 3a 20 25 73 0a 2a TEST STATE: %s.*
4002a004: 2a 2a 20 54 45 53 54 20 42 55 49 4c 44 3a 20 52 ** TEST BUILD: R
4002a014: 54 45 4d 53 5f 4e 45 54 57 4f 52 4b 49 4e 47 20 TEMS_NETWORKING
4002a024: 52 54 45 4d 53 5f 50 4f 53 49 58 5f 41 50 49 0a RTEMS_POSIX_API.
4002a034: 2a 2a 2a 20 54 45 53 54 20 54 4f 4f 4c 53 3a 20 *** TEST TOOLS:
4002a044: 37 2e 33 2e 30 20 32 30 31 38 30 31 32 35 20 28 7.3.0 20180125 (
4002a054: 52 54 45 4d 53 20 35 2c 20 52 53 42 20 32 35 66 RTEMS 5, RSB 25f
4002a064: 34 64 62 30 39 63 38 35 61 35 32 66 62 31 36 34 4db09c85a52fb164
4002a074: 30 61 32 39 66 39 62 64 63 32 64 65 38 63 32 37 0a29f9bdc2de8c27
4002a084: 36 38 39 38 38 2c 20 4e 65 77 6c 69 62 20 33 2e 68988, Newlib 3.
4002a094: 30 2e 30 29 0a 00 00 00 00 00 00 00 0a 2a 2a 2a 0.0).........***
4002a0a4: 20 45 4e 44 20 4f 46 20 54 45 53 54 20 25 73 20 END OF TEST %s
4002a0b4: 2a 2a 2a 0a 0a 00 00 00 00 00 00 00 45 58 50 45 ***.........EXPE
4002a0c4: 43 54 45 44 2d 50 41 53 53 00 00 00 45 58 50 45 CTED-PASS...EXPE
4002a0d4: 43 54 45 44 2d 46 41 49 4c 00 00 00 55 53 45 52 CTED-FAIL...USER
4002a0e4: 5f 49 4e 50 55 54 00 00 00 00 00 00 49 4e 44 45 _INPUT......INDE
4002a0f4: 54 45 52 4d 49 4e 41 54 45 00 00 00 42 45 4e 43 TERMINATE...BENC
4002a104: 48 4d 41 52 4b 00 00 00 HMARK...
4000ede0 <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
)
{
4000ede0: 9d e3 bf a0 save %sp, -96, %sp
<== NOT EXECUTED
int rc = RC_OK;
fat_file_fd_t *old_fat_fd = old_loc->node_access;
4000ede4: fa 06 60 08 ld [ %i1 + 8 ], %i5
<== NOT EXECUTED
/*
* create new directory entry as "hard link", copying relevant info from
* existing file
*/
rc = msdos_creat_node(new_parent_loc,
4000ede8: 9a 10 00 1d mov %i5, %o5
<== NOT EXECUTED
4000edec: 19 00 00 20 sethi %hi(0x8000), %o4
<== NOT EXECUTED
4000edf0: 96 10 00 1c mov %i4, %o3
<== NOT EXECUTED
4000edf4: 94 10 00 1b mov %i3, %o2
<== NOT EXECUTED
4000edf8: 92 10 20 02 mov 2, %o1
<== NOT EXECUTED
4000edfc: 40 00 23 14 call 40017a4c <msdos_creat_node>
<== NOT EXECUTED
4000ee00: 90 10 00 1a mov %i2, %o0
<== NOT EXECUTED
FAT_HARD_LINK,new_name,new_namelen,S_IFREG,
old_fat_fd);
if (rc != RC_OK)
4000ee04: 80 a2 20 00 cmp %o0, 0
<== NOT EXECUTED
4000ee08: 02 80 00 04 be 4000ee18 <msdos_rename+0x38>
<== NOT EXECUTED
4000ee0c: b0 10 00 08 mov %o0, %i0
<== NOT EXECUTED
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
&old_fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
return rc;
}
4000ee10: 81 c7 e0 08 ret
<== NOT EXECUTED
4000ee14: 81 e8 00 00 restore
<== NOT EXECUTED
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
4000ee18: f0 06 60 14 ld [ %i1 + 0x14 ], %i0
<== NOT EXECUTED
4000ee1c: b4 10 20 e5 mov 0xe5, %i2
<== NOT EXECUTED
4000ee20: 40 00 26 52 call 40018768 <msdos_set_first_char4file_name>
<== NOT EXECUTED
4000ee24: 93 ef 60 20 restore %i5, 0x20, %o1
<== NOT EXECUTED
4000ee28 <msdos_rmnod>:
#include "msdos.h"
int
msdos_rmnod(const rtems_filesystem_location_info_t *parent_pathloc,
const rtems_filesystem_location_info_t *pathloc)
{
4000ee28: 9d e3 bf 98 save %sp, -104, %sp
int rc = RC_OK;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
4000ee2c: fa 06 60 08 ld [ %i1 + 8 ], %i5
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
4000ee30: d0 06 60 14 ld [ %i1 + 0x14 ], %o0
if (fat_fd->fat_file_type == FAT_DIRECTORY)
4000ee34: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000ee38: 80 a0 60 00 cmp %g1, 0
4000ee3c: 12 80 00 11 bne 4000ee80 <msdos_rmnod+0x58>
4000ee40: f8 02 20 08 ld [ %o0 + 8 ], %i4
{
bool is_empty = false;
4000ee44: c0 2f bf ff clrb [ %fp + -1 ]
/*
* You cannot remove a node that still has children
*/
rc = msdos_dir_is_empty(pathloc->mt_entry, fat_fd, &is_empty);
4000ee48: 94 07 bf ff add %fp, -1, %o2
4000ee4c: 40 00 26 ab call 400188f8 <msdos_dir_is_empty>
4000ee50: 92 10 00 1d mov %i5, %o1
if (rc != RC_OK)
4000ee54: b0 92 20 00 orcc %o0, 0, %i0
4000ee58: 12 80 00 12 bne 4000eea0 <msdos_rmnod+0x78>
<== NEVER TAKEN
4000ee5c: c2 0f bf ff ldub [ %fp + -1 ], %g1
{
return rc;
}
if (!is_empty)
4000ee60: 80 a0 60 00 cmp %g1, 0
4000ee64: 02 80 00 11 be 4000eea8 <msdos_rmnod+0x80>
4000ee68: 01 00 00 00 nop
/*
* We deny attempts to delete open directory (if directory is current
* directory we assume it is open one)
*/
if (fat_fd->links_num > 1)
4000ee6c: c2 07 60 08 ld [ %i5 + 8 ], %g1
4000ee70: 80 a0 60 01 cmp %g1, 1
4000ee74: 18 80 00 13 bgu 4000eec0 <msdos_rmnod+0x98>
<== NEVER TAKEN
4000ee78: 01 00 00 00 nop
4000ee7c: d0 06 60 14 ld [ %i1 + 0x14 ], %o0
* not used - mount() not implemenetd yet.
*/
}
/* mark file removed */
rc = msdos_set_first_char4file_name(pathloc->mt_entry, &fat_fd->dir_pos,
4000ee80: 94 10 20 e5 mov 0xe5, %o2
4000ee84: 40 00 26 39 call 40018768 <msdos_set_first_char4file_name>
4000ee88: 92 07 60 20 add %i5, 0x20, %o1
MSDOS_THIS_DIR_ENTRY_EMPTY);
if (rc != RC_OK)
4000ee8c: b0 92 20 00 orcc %o0, 0, %i0
4000ee90: 12 80 00 04 bne 4000eea0 <msdos_rmnod+0x78>
<== NEVER TAKEN
4000ee94: 92 10 00 1d mov %i5, %o1
{
return rc;
}
fat_file_mark_removed(&fs_info->fat, fat_fd);
4000ee98: 40 00 15 07 call 400142b4 <fat_file_mark_removed>
4000ee9c: 90 10 00 1c mov %i4, %o0
return rc;
}
4000eea0: 81 c7 e0 08 ret
4000eea4: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one(ENOTEMPTY);
4000eea8: 40 00 30 a5 call 4001b13c <__errno>
4000eeac: b0 10 3f ff mov -1, %i0
4000eeb0: 82 10 20 5a mov 0x5a, %g1
4000eeb4: c2 22 00 00 st %g1, [ %o0 ]
4000eeb8: 81 c7 e0 08 ret
4000eebc: 81 e8 00 00 restore
rtems_set_errno_and_return_minus_one(EBUSY);
4000eec0: 40 00 30 9f call 4001b13c <__errno>
<== NOT EXECUTED
4000eec4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4000eec8: 82 10 20 10 mov 0x10, %g1
<== NOT EXECUTED
4000eecc: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
4000eed0: 81 c7 e0 08 ret
<== NOT EXECUTED
4000eed4: 81 e8 00 00 restore
<== NOT EXECUTED
40018768 <msdos_set_first_char4file_name>:
{
40018768: 9d e3 bf 98 save %sp, -104, %sp
fat_pos_t start = dir_pos->lname;
4001876c: c2 06 60 0c ld [ %i1 + 0xc ], %g1
40018770: c4 06 60 08 ld [ %i1 + 8 ], %g2
msdos_fs_info_t *fs_info = mt_entry->fs_info;
40018774: fa 06 20 08 ld [ %i0 + 8 ], %i5
{
40018778: f4 2f a0 4c stb %i2, [ %fp + 0x4c ]
fat_pos_t start = dir_pos->lname;
4001877c: c2 27 bf fc st %g1, [ %fp + -4 ]
40018780: c4 27 bf f8 st %g2, [ %fp + -8 ]
fat_pos_t end = dir_pos->sname;
40018784: f8 06 40 00 ld [ %i1 ], %i4
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
40018788: c2 07 60 44 ld [ %i5 + 0x44 ], %g1
4001878c: 80 a0 40 1c cmp %g1, %i4
40018790: 02 80 00 54 be 400188e0 <msdos_set_first_char4file_name+0x178>
40018794: f4 06 60 04 ld [ %i1 + 4 ], %i2
dir_block_size = fs_info->fat.vol.bpc;
40018798: f6 07 60 08 ld [ %i5 + 8 ], %i3
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
4001879c: c2 06 60 08 ld [ %i1 + 8 ], %g1
400187a0: 80 a0 7f ff cmp %g1, -1
400187a4: 22 80 00 4a be,a 400188cc <msdos_set_first_char4file_name+0x164>
400187a8: c2 06 60 04 ld [ %i1 + 4 ], %g1
400187ac: c4 07 bf fc ld [ %fp + -4 ], %g2
400187b0: 10 80 00 1b b 4001881c <msdos_set_first_char4file_name+0xb4>
400187b4: d2 07 bf f8 ld [ %fp + -8 ], %o1
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
400187b8: 80 88 60 03 btst 3, %g1
400187bc: 22 80 00 1c be,a 4001882c <msdos_set_first_char4file_name+0xc4>
<== NEVER TAKEN
400187c0: c2 0f 60 05 ldub [ %i5 + 5 ], %g1
<== NOT EXECUTED
return fs_info->vol.rdir_loc;
400187c4: c2 07 60 28 ld [ %i5 + 0x28 ], %g1
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
400187c8: d4 17 40 00 lduh [ %i5 ], %o2
(start.ofs >> fs_info->fat.vol.sec_log2));
400187cc: d2 0f 60 02 ldub [ %i5 + 2 ], %o1
400187d0: 93 30 80 09 srl %g2, %o1, %o1
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
400187d4: 94 02 bf ff add %o2, -1, %o2
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
400187d8: 98 07 a0 4c add %fp, 0x4c, %o4
400187dc: 94 0a 80 02 and %o2, %g2, %o2
400187e0: 96 10 20 01 mov 1, %o3
400187e4: 92 02 40 01 add %o1, %g1, %o1
400187e8: 7f ff ef cc call 40014718 <fat_sector_write>
400187ec: 90 10 00 1d mov %i5, %o0
if (ret < 0)
400187f0: 80 a2 20 00 cmp %o0, 0
400187f4: 06 80 00 20 bl 40018874 <msdos_set_first_char4file_name+0x10c>
<== NEVER TAKEN
400187f8: b0 10 3f ff mov -1, %i0
if ((start.cln == end.cln) && (start.ofs == end.ofs))
400187fc: d2 07 bf f8 ld [ %fp + -8 ], %o1
40018800: c2 07 bf fc ld [ %fp + -4 ], %g1
40018804: 80 a7 00 09 cmp %i4, %o1
40018808: 02 80 00 1d be 4001887c <msdos_set_first_char4file_name+0x114>
4001880c: 84 00 60 20 add %g1, 0x20, %g2
if (start.ofs >= dir_block_size)
40018810: 80 a0 80 1b cmp %g2, %i3
40018814: 1a 80 00 1f bcc 40018890 <msdos_set_first_char4file_name+0x128>
40018818: c4 27 bf fc st %g2, [ %fp + -4 ]
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
4001881c: 80 a2 60 00 cmp %o1, 0
40018820: 22 bf ff e6 be,a 400187b8 <msdos_set_first_char4file_name+0x50>
40018824: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
40018828: c2 0f 60 05 ldub [ %i5 + 5 ], %g1
4001882c: c6 07 60 3c ld [ %i5 + 0x3c ], %g3
40018830: 92 02 7f fe add %o1, -2, %o1
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
40018834: d4 17 40 00 lduh [ %i5 ], %o2
40018838: 83 2a 40 01 sll %o1, %g1, %g1
(start.ofs >> fs_info->fat.vol.sec_log2));
4001883c: d2 0f 60 02 ldub [ %i5 + 2 ], %o1
40018840: 82 00 40 03 add %g1, %g3, %g1
40018844: 93 30 80 09 srl %g2, %o1, %o1
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));
40018848: 94 02 bf ff add %o2, -1, %o2
ret = fat_sector_write(&fs_info->fat, sec, byte + MSDOS_FILE_NAME_OFFSET,
4001884c: 98 07 a0 4c add %fp, 0x4c, %o4
40018850: 94 0a 80 02 and %o2, %g2, %o2
40018854: 96 10 20 01 mov 1, %o3
40018858: 92 02 40 01 add %o1, %g1, %o1
4001885c: 7f ff ef af call 40014718 <fat_sector_write>
40018860: 90 10 00 1d mov %i5, %o0
if (ret < 0)
40018864: 80 a2 20 00 cmp %o0, 0
40018868: 16 bf ff e6 bge 40018800 <msdos_set_first_char4file_name+0x98>
<== ALWAYS TAKEN
4001886c: d2 07 bf f8 ld [ %fp + -8 ], %o1
return -1;
40018870: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
}
40018874: 81 c7 e0 08 ret
<== NOT EXECUTED
40018878: 81 e8 00 00 restore
<== NOT EXECUTED
if ((start.cln == end.cln) && (start.ofs == end.ofs))
4001887c: 80 a6 80 01 cmp %i2, %g1
40018880: 12 bf ff e5 bne 40018814 <msdos_set_first_char4file_name+0xac>
40018884: 80 a0 80 1b cmp %g2, %i3
return RC_OK;
40018888: 81 c7 e0 08 ret
4001888c: 91 e8 20 00 restore %g0, 0, %o0
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
40018890: c2 07 60 44 ld [ %i5 + 0x44 ], %g1
40018894: 80 a7 00 01 cmp %i4, %g1
40018898: 12 80 00 06 bne 400188b0 <msdos_set_first_char4file_name+0x148>
<== ALWAYS TAKEN
4001889c: 94 07 bf f8 add %fp, -8, %o2
400188a0: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
<== NOT EXECUTED
400188a4: 80 88 60 03 btst 3, %g1
<== NOT EXECUTED
400188a8: 12 bf ff f8 bne 40018888 <msdos_set_first_char4file_name+0x120>
<== NOT EXECUTED
400188ac: 01 00 00 00 nop
<== NOT EXECUTED
rc = fat_get_fat_cluster(&fs_info->fat, start.cln, &start.cln);
400188b0: 7f ff e9 66 call 40012e48 <fat_get_fat_cluster>
400188b4: 90 10 00 1d mov %i5, %o0
if ( rc != RC_OK )
400188b8: b0 92 20 00 orcc %o0, 0, %i0
400188bc: 12 bf ff ee bne 40018874 <msdos_set_first_char4file_name+0x10c>
<== NEVER TAKEN
400188c0: 84 10 20 00 clr %g2
start.ofs = 0;
400188c4: 10 bf ff bb b 400187b0 <msdos_set_first_char4file_name+0x48>
400188c8: c0 27 bf fc clr [ %fp + -4 ]
start = dir_pos->sname;
400188cc: c2 27 bf fc st %g1, [ %fp + -4 ]
400188d0: c4 06 40 00 ld [ %i1 ], %g2
400188d4: c4 27 bf f8 st %g2, [ %fp + -8 ]
400188d8: 10 bf ff b6 b 400187b0 <msdos_set_first_char4file_name+0x48>
400188dc: c4 07 bf fc ld [ %fp + -4 ], %g2
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
400188e0: c2 0f 60 16 ldub [ %i5 + 0x16 ], %g1
400188e4: 80 88 60 03 btst 3, %g1
400188e8: 22 bf ff ad be,a 4001879c <msdos_set_first_char4file_name+0x34>
<== NEVER TAKEN
400188ec: f6 07 60 08 ld [ %i5 + 8 ], %i3
<== NOT EXECUTED
dir_block_size = fs_info->fat.vol.rdir_size;
400188f0: 10 bf ff ab b 4001879c <msdos_set_first_char4file_name+0x34>
400188f4: f6 07 60 34 ld [ %i5 + 0x34 ], %i3
40017fcc <msdos_shut_down>:
* temp_mt_entry - mount table entry
*
*/
void
msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
{
40017fcc: 9d e3 bf a0 save %sp, -96, %sp
msdos_fs_info_t *fs_info = temp_mt_entry->fs_info;
fat_file_fd_t *fat_fd = temp_mt_entry->mt_fs_root->location.node_access;
40017fd0: c2 06 20 24 ld [ %i0 + 0x24 ], %g1
msdos_fs_info_t *fs_info = temp_mt_entry->fs_info;
40017fd4: fa 06 20 08 ld [ %i0 + 8 ], %i5
rtems_dosfs_convert_control *converter = fs_info->converter;
/* close fat-file which corresponds to root directory */
fat_file_close(&fs_info->fat, fat_fd);
40017fd8: d2 00 60 08 ld [ %g1 + 8 ], %o1
rtems_dosfs_convert_control *converter = fs_info->converter;
40017fdc: f8 07 60 c0 ld [ %i5 + 0xc0 ], %i4
fat_file_close(&fs_info->fat, fat_fd);
40017fe0: 7f ff ef 2b call 40013c8c <fat_file_close>
40017fe4: 90 10 00 1d mov %i5, %o0
fat_shutdown_drive(&fs_info->fat);
40017fe8: 7f ff f4 fb call 400153d4 <fat_shutdown_drive>
40017fec: 90 10 00 1d mov %i5, %o0
rtems_recursive_mutex_destroy(&fs_info->vol_mutex);
(*converter->handler->destroy)( converter );
40017ff0: c2 07 00 00 ld [ %i4 ], %g1
40017ff4: c2 00 60 14 ld [ %g1 + 0x14 ], %g1
40017ff8: 9f c0 40 00 call %g1
40017ffc: 90 10 00 1c mov %i4, %o0
free(fs_info->cl_buf);
40018000: 7f ff b4 f4 call 400053d0 <free>
40018004: d0 07 60 bc ld [ %i5 + 0xbc ], %o0
free(temp_mt_entry->fs_info);
40018008: f0 06 20 08 ld [ %i0 + 8 ], %i0
<== NOT EXECUTED
4001800c: 7f ff b4 f1 call 400053d0 <free>
<== NOT EXECUTED
40018010: 81 e8 00 00 restore
4000eed8 <msdos_statvfs>:
#include "msdos.h"
int msdos_statvfs(
const rtems_filesystem_location_info_t *__restrict root_loc,
struct statvfs *__restrict sb)
{
4000eed8: 9d e3 bf 98 save %sp, -104, %sp
msdos_fs_info_t *fs_info = root_loc->mt_entry->fs_info;
4000eedc: c2 06 20 14 ld [ %i0 + 0x14 ], %g1
4000eee0: f8 00 60 08 ld [ %g1 + 8 ], %i4
rtems_recursive_mutex_lock(&fs_info->vol_mutex);
4000eee4: a2 07 20 a4 add %i4, 0xa4, %l1
_Mutex_recursive_Acquire( mutex );
4000eee8: 7f ff ea b9 call 400099cc <_Mutex_recursive_Acquire>
4000eeec: 90 10 00 11 mov %l1, %o0
fat_vol_t *vol = &fs_info->fat.vol;
msdos_fs_lock(fs_info);
sb->f_bsize = FAT_SECTOR512_SIZE;
sb->f_frsize = vol->bpc;
4000eef0: c2 07 20 08 ld [ %i4 + 8 ], %g1
sb->f_blocks = vol->data_cls;
4000eef4: e0 07 20 40 ld [ %i4 + 0x40 ], %l0
sb->f_bsize = FAT_SECTOR512_SIZE;
4000eef8: 84 10 22 00 mov 0x200, %g2
sb->f_frsize = vol->bpc;
4000eefc: c2 26 60 04 st %g1, [ %i1 + 4 ]
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;
4000ef00: 82 10 20 ff mov 0xff, %g1
sb->f_bsize = FAT_SECTOR512_SIZE;
4000ef04: c4 26 40 00 st %g2, [ %i1 ]
sb->f_namemax = MSDOS_NAME_MAX_LNF_LEN;
4000ef08: c2 26 60 34 st %g1, [ %i1 + 0x34 ]
sb->f_bfree = 0;
4000ef0c: c0 26 60 10 clr [ %i1 + 0x10 ]
4000ef10: c0 26 60 14 clr [ %i1 + 0x14 ]
sb->f_bavail = 0;
4000ef14: c0 26 60 18 clr [ %i1 + 0x18 ]
4000ef18: c0 26 60 1c clr [ %i1 + 0x1c ]
sb->f_blocks = vol->data_cls;
4000ef1c: c0 26 60 08 clr [ %i1 + 8 ]
4000ef20: e0 26 60 0c st %l0, [ %i1 + 0xc ]
sb->f_files = 0; // FAT doesn't store inodes
4000ef24: c0 26 60 20 clr [ %i1 + 0x20 ]
sb->f_ffree = 0;
4000ef28: c0 26 60 24 clr [ %i1 + 0x24 ]
sb->f_favail = 0;
4000ef2c: c0 26 60 28 clr [ %i1 + 0x28 ]
sb->f_flag = 0;
4000ef30: c0 26 60 30 clr [ %i1 + 0x30 ]
if (vol->free_cls == FAT_UNDEFINED_VALUE)
4000ef34: c2 07 20 4c ld [ %i4 + 0x4c ], %g1
4000ef38: 80 a0 7f ff cmp %g1, -1
4000ef3c: 22 80 00 0b be,a 4000ef68 <msdos_statvfs+0x90>
<== ALWAYS TAKEN
4000ef40: a0 04 20 02 add %l0, 2, %l0
}
}
}
else
{
sb->f_bfree = vol->free_cls;
4000ef44: c0 26 60 10 clr [ %i1 + 0x10 ]
<== NOT EXECUTED
4000ef48: c2 26 60 14 st %g1, [ %i1 + 0x14 ]
<== NOT EXECUTED
sb->f_bavail = vol->free_cls;
4000ef4c: c0 26 60 18 clr [ %i1 + 0x18 ]
<== NOT EXECUTED
4000ef50: c2 26 60 1c st %g1, [ %i1 + 0x1c ]
<== NOT EXECUTED
}
msdos_fs_unlock(fs_info);
return RC_OK;
4000ef54: b0 10 20 00 clr %i0
<== NOT EXECUTED
_Mutex_recursive_Release( mutex );
4000ef58: 7f ff ea c2 call 40009a60 <_Mutex_recursive_Release>
4000ef5c: 90 10 00 11 mov %l1, %o0
}
4000ef60: 81 c7 e0 08 ret
4000ef64: 81 e8 00 00 restore
for (; cur_cl < data_cls_val; ++cur_cl)
4000ef68: 80 a4 20 02 cmp %l0, 2
4000ef6c: 08 bf ff fa bleu 4000ef54 <msdos_statvfs+0x7c>
<== NEVER TAKEN
4000ef70: c0 27 bf fc clr [ %fp + -4 ]
uint32_t cur_cl = 2;
4000ef74: 10 80 00 10 b 4000efb4 <msdos_statvfs+0xdc>
4000ef78: ba 10 20 02 mov 2, %i5
if (value == FAT_GENFAT_FREE)
4000ef7c: 80 a0 60 00 cmp %g1, 0
4000ef80: 12 80 00 0a bne 4000efa8 <msdos_statvfs+0xd0>
4000ef84: ba 07 60 01 inc %i5
sb->f_bfree++;
4000ef88: f4 1e 60 10 ldd [ %i1 + 0x10 ], %i2
sb->f_bavail++;
4000ef8c: c4 1e 60 18 ldd [ %i1 + 0x18 ], %g2
sb->f_bfree++;
4000ef90: 9a 86 e0 01 addcc %i3, 1, %o5
4000ef94: 98 46 a0 00 addx %i2, 0, %o4
sb->f_bavail++;
4000ef98: b6 80 e0 01 addcc %g3, 1, %i3
sb->f_bfree++;
4000ef9c: d8 3e 60 10 std %o4, [ %i1 + 0x10 ]
sb->f_bavail++;
4000efa0: b4 40 a0 00 addx %g2, 0, %i2
4000efa4: f4 3e 60 18 std %i2, [ %i1 + 0x18 ]
for (; cur_cl < data_cls_val; ++cur_cl)
4000efa8: 80 a4 00 1d cmp %l0, %i5
4000efac: 02 bf ff eb be 4000ef58 <msdos_statvfs+0x80>
4000efb0: b0 10 20 00 clr %i0
rc = fat_get_fat_cluster(&fs_info->fat, cur_cl, &value);
4000efb4: 92 10 00 1d mov %i5, %o1
4000efb8: 94 07 bf fc add %fp, -4, %o2
4000efbc: 40 00 0f a3 call 40012e48 <fat_get_fat_cluster>
4000efc0: 90 10 00 1c mov %i4, %o0
if (rc != RC_OK)
4000efc4: b0 92 20 00 orcc %o0, 0, %i0
4000efc8: 02 bf ff ed be 4000ef7c <msdos_statvfs+0xa4>
<== ALWAYS TAKEN
4000efcc: c2 07 bf fc ld [ %fp + -4 ], %g1
4000efd0: 7f ff ea a4 call 40009a60 <_Mutex_recursive_Release>
<== NOT EXECUTED
4000efd4: 90 10 00 11 mov %l1, %o0
<== NOT EXECUTED
4000efd8: 81 c7 e0 08 ret
<== NOT EXECUTED
4000efdc: 81 e8 00 00 restore
<== NOT EXECUTED
40017a14 <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)
{
40017a14: 9d e3 bf a0 save %sp, -96, %sp
msdos_default_convert_control *self = malloc( sizeof( *self ) );
40017a18: 7f ff b7 ee call 400059d0 <malloc>
40017a1c: 90 10 22 14 mov 0x214, %o0
if ( self != NULL ) {
40017a20: b0 92 20 00 orcc %o0, 0, %i0
40017a24: 02 80 00 08 be 40017a44 <rtems_dosfs_create_default_converter+0x30>
<== NEVER TAKEN
40017a28: 03 10 00 a8 sethi %hi(0x4002a000), %g1
rtems_dosfs_convert_control *super = &self->super;
super->handler = &msdos_default_convert_handler;
40017a2c: 82 10 63 b8 or %g1, 0x3b8, %g1 ! 4002a3b8 <msdos_default_convert_handler>
super->buffer.data = &self->buffer;
40017a30: 84 06 20 0c add %i0, 0xc, %g2
super->handler = &msdos_default_convert_handler;
40017a34: c2 26 00 00 st %g1, [ %i0 ]
super->buffer.size = sizeof( self->buffer );
40017a38: 82 10 22 08 mov 0x208, %g1
super->buffer.data = &self->buffer;
40017a3c: c4 26 20 04 st %g2, [ %i0 + 4 ]
super->buffer.size = sizeof( self->buffer );
40017a40: c2 26 20 08 st %g1, [ %i0 + 8 ]
}
return &self->super;
}
40017a44: 81 c7 e0 08 ret
40017a48: 81 e8 00 00 restore
4000eacc <rtems_dosfs_create_utf8_converter>:
};
rtems_dosfs_convert_control *rtems_dosfs_create_utf8_converter(
const char *codepage
)
{
4000eacc: 9d e3 bf a0 save %sp, -96, %sp
msdos_utf8_convert_control *self = malloc( sizeof( *self ) );
4000ead0: 7f ff df ad call 40006984 <malloc>
4000ead4: 90 10 24 2c mov 0x42c, %o0
if ( self != NULL ) {
4000ead8: ba 92 20 00 orcc %o0, 0, %i5
4000eadc: 02 80 00 27 be 4000eb78 <rtems_dosfs_create_utf8_converter+0xac>
<== NEVER TAKEN
4000eae0: 39 10 00 da sethi %hi(0x40036800), %i4
self->desc_codepage_to_utf8 = iconv_open( "UTF-8", codepage );
4000eae4: 92 10 00 18 mov %i0, %o1
4000eae8: 40 00 3e f1 call 4001e6ac <iconv_open>
4000eaec: 90 17 22 c0 or %i4, 0x2c0, %o0
4000eaf0: d0 27 60 0c st %o0, [ %i5 + 0xc ]
self->desc_utf8_to_codepage = iconv_open( codepage, "UTF-8" );
4000eaf4: 92 17 22 c0 or %i4, 0x2c0, %o1
4000eaf8: 40 00 3e ed call 4001e6ac <iconv_open>
4000eafc: 90 10 00 18 mov %i0, %o0
4000eb00: d0 27 60 10 st %o0, [ %i5 + 0x10 ]
self->desc_utf16_to_utf8 = iconv_open( "UTF-8", "UTF-16LE" );
4000eb04: 37 10 00 da sethi %hi(0x40036800), %i3
4000eb08: 90 17 22 c0 or %i4, 0x2c0, %o0
4000eb0c: 40 00 3e e8 call 4001e6ac <iconv_open>
4000eb10: 92 16 e2 c8 or %i3, 0x2c8, %o1
4000eb14: d0 27 60 14 st %o0, [ %i5 + 0x14 ]
self->desc_utf8_to_utf16 = iconv_open( "UTF-16LE", "UTF-8" );
4000eb18: 92 17 22 c0 or %i4, 0x2c0, %o1
4000eb1c: 40 00 3e e4 call 4001e6ac <iconv_open>
4000eb20: 90 16 e2 c8 or %i3, 0x2c8, %o0
4000eb24: d0 27 60 18 st %o0, [ %i5 + 0x18 ]
if (
4000eb28: c2 07 60 14 ld [ %i5 + 0x14 ], %g1
4000eb2c: 80 a0 7f ff cmp %g1, -1
4000eb30: 22 80 00 15 be,a 4000eb84 <rtems_dosfs_create_utf8_converter+0xb8>
<== NEVER TAKEN
4000eb34: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
self->desc_utf16_to_utf8 != INVALID_ICONV_DESC
&& self->desc_utf8_to_codepage != INVALID_ICONV_DESC
4000eb38: c2 07 60 10 ld [ %i5 + 0x10 ], %g1
4000eb3c: 80 a0 7f ff cmp %g1, -1
4000eb40: 22 80 00 11 be,a 4000eb84 <rtems_dosfs_create_utf8_converter+0xb8>
<== NEVER TAKEN
4000eb44: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
&& self->desc_codepage_to_utf8 != INVALID_ICONV_DESC
4000eb48: c2 07 60 0c ld [ %i5 + 0xc ], %g1
&& self->desc_utf8_to_utf16 != INVALID_ICONV_DESC
4000eb4c: 80 a0 7f ff cmp %g1, -1
4000eb50: 02 80 00 0c be 4000eb80 <rtems_dosfs_create_utf8_converter+0xb4>
<== NEVER TAKEN
4000eb54: 80 a2 3f ff cmp %o0, -1
4000eb58: 02 80 00 0a be 4000eb80 <rtems_dosfs_create_utf8_converter+0xb4>
<== NEVER TAKEN
4000eb5c: 03 10 00 da sethi %hi(0x40036800), %g1
) {
rtems_dosfs_convert_control *super = &self->super;
super->handler = &msdos_utf8_convert_handler;
4000eb60: 82 10 63 04 or %g1, 0x304, %g1 ! 40036b04 <msdos_utf8_convert_handler>
super->buffer.data = &self->buffer;
4000eb64: 84 07 60 1c add %i5, 0x1c, %g2
super->handler = &msdos_utf8_convert_handler;
4000eb68: c2 27 40 00 st %g1, [ %i5 ]
super->buffer.size = sizeof( self->buffer );
4000eb6c: 82 10 24 10 mov 0x410, %g1
super->buffer.data = &self->buffer;
4000eb70: c4 27 60 04 st %g2, [ %i5 + 4 ]
super->buffer.size = sizeof( self->buffer );
4000eb74: c2 27 60 08 st %g1, [ %i5 + 8 ]
self = NULL;
}
}
return &self->super;
}
4000eb78: 81 c7 e0 08 ret
4000eb7c: 91 e8 00 1d restore %g0, %i5, %o0
msdos_utf8_destroy( &self->super );
4000eb80: 90 10 00 1d mov %i5, %o0
<== NOT EXECUTED
4000eb84: 7f ff ff 8e call 4000e9bc <msdos_utf8_destroy>
<== NOT EXECUTED
4000eb88: ba 10 20 00 clr %i5
<== NOT EXECUTED
}
4000eb8c: 81 c7 e0 08 ret
<== NOT EXECUTED
4000eb90: 91 e8 00 1d restore %g0, %i5, %o0
<== NOT EXECUTED
4000eb94 <rtems_dosfs_initialize>:
*/
int rtems_dosfs_initialize(
rtems_filesystem_mount_table_entry_t *mt_entry,
const void *data
)
{
4000eb94: 9d e3 bf a0 save %sp, -96, %sp
int rc = 0;
const rtems_dosfs_mount_options *mount_options = data;
rtems_dosfs_convert_control *converter;
if (mount_options == NULL || mount_options->converter == NULL) {
4000eb98: 80 a6 60 00 cmp %i1, 0
4000eb9c: 02 80 00 0c be 4000ebcc <rtems_dosfs_initialize+0x38>
4000eba0: 01 00 00 00 nop
4000eba4: f8 06 40 00 ld [ %i1 ], %i4
4000eba8: 80 a7 20 00 cmp %i4, 0
4000ebac: 02 80 00 08 be 4000ebcc <rtems_dosfs_initialize+0x38>
<== NEVER TAKEN
4000ebb0: 37 10 00 a8 sethi %hi(0x4002a000), %i3
} else {
converter = mount_options->converter;
}
if (converter != NULL) {
rc = msdos_initialize_support(mt_entry,
4000ebb4: 35 10 00 a9 sethi %hi(0x4002a400), %i2
4000ebb8: 33 10 00 a7 sethi %hi(0x40029c00), %i1
4000ebbc: b6 16 e3 d8 or %i3, 0x3d8, %i3
4000ebc0: b4 16 a0 18 or %i2, 0x18, %i2
4000ebc4: 40 00 00 0d call 4000ebf8 <msdos_initialize_support>
4000ebc8: 93 ee 63 64 restore %i1, 0x364, %o1
converter = rtems_dosfs_create_default_converter();
4000ebcc: 40 00 23 92 call 40017a14 <rtems_dosfs_create_default_converter>
4000ebd0: 01 00 00 00 nop
if (converter != NULL) {
4000ebd4: b8 92 20 00 orcc %o0, 0, %i4
4000ebd8: 12 bf ff f7 bne 4000ebb4 <rtems_dosfs_initialize+0x20>
<== ALWAYS TAKEN
4000ebdc: 37 10 00 a8 sethi %hi(0x4002a000), %i3
&msdos_ops,
&msdos_file_handlers,
&msdos_dir_handlers,
converter);
} else {
errno = ENOMEM;
4000ebe0: 40 00 31 57 call 4001b13c <__errno>
<== NOT EXECUTED
4000ebe4: b0 10 3f ff mov -1, %i0
<== NOT EXECUTED
4000ebe8: 82 10 20 0c mov 0xc, %g1
<== NOT EXECUTED
4000ebec: c2 22 00 00 st %g1, [ %o0 ]
<== NOT EXECUTED
rc = -1;
}
return rc;
}
4000ebf0: 81 c7 e0 08 ret
<== NOT EXECUTED
4000ebf4: 81 e8 00 00 restore
<== NOT EXECUTED