RTEMS 4.10.2Annotated Report
Tue Dec 13 20:41:54 2011
00009c28 <IMFS_Set_handlers>:
{
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
switch( node->type ) {
9c28: e5903000 ldr r3, [r0]
9c2c: e593304c ldr r3, [r3, #76] ; 0x4c
)
{
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
9c30: e5902010 ldr r2, [r0, #16]
switch( node->type ) {
9c34: e2433001 sub r3, r3, #1
)
{
IMFS_jnode_t *node = loc->node_access;
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
9c38: e5922034 ldr r2, [r2, #52] ; 0x34
switch( node->type ) {
9c3c: e3530006 cmp r3, #6
9c40: 979ff103 ldrls pc, [pc, r3, lsl #2]
9c44: ea000008 b 9c6c <IMFS_Set_handlers+0x44> <== NOT EXECUTED
9c48: 00009c94 .word 0x00009c94 <== NOT EXECUTED
9c4c: 00009ca4 .word 0x00009ca4 <== NOT EXECUTED
9c50: 00009c84 .word 0x00009c84 <== NOT EXECUTED
9c54: 00009c84 .word 0x00009c84 <== NOT EXECUTED
9c58: 00009c74 .word 0x00009c74 <== NOT EXECUTED
9c5c: 00009c74 .word 0x00009c74 <== NOT EXECUTED
9c60: 00009c64 .word 0x00009c64 <== NOT EXECUTED
break;
case IMFS_MEMORY_FILE:
loc->handlers = fs_info->memfile_handlers;
break;
case IMFS_FIFO:
loc->handlers = &IMFS_fifo_handlers;
9c64: e59f3048 ldr r3, [pc, #72] ; 9cb4 <IMFS_Set_handlers+0x8c>
9c68: e5803008 str r3, [r0, #8]
break;
}
return 0;
}
9c6c: e3a00000 mov r0, #0
9c70: e12fff1e bx lr
break;
case IMFS_LINEAR_FILE:
loc->handlers = fs_info->memfile_handlers;
break;
case IMFS_MEMORY_FILE:
loc->handlers = fs_info->memfile_handlers;
9c74: e5923008 ldr r3, [r2, #8]
9c78: e5803008 str r3, [r0, #8]
loc->handlers = &IMFS_fifo_handlers;
break;
}
return 0;
}
9c7c: e3a00000 mov r0, #0
9c80: e12fff1e bx lr
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
break;
case IMFS_SYM_LINK:
case IMFS_HARD_LINK:
loc->handlers = &IMFS_link_handlers;
9c84: e59f302c ldr r3, [pc, #44] ; 9cb8 <IMFS_Set_handlers+0x90>
9c88: e5803008 str r3, [r0, #8]
loc->handlers = &IMFS_fifo_handlers;
break;
}
return 0;
}
9c8c: e3a00000 mov r0, #0
9c90: e12fff1e bx lr
IMFS_fs_info_t *fs_info;
fs_info = loc->mt_entry->fs_info;
switch( node->type ) {
case IMFS_DIRECTORY:
loc->handlers = fs_info->directory_handlers;
9c94: e592300c ldr r3, [r2, #12]
9c98: e5803008 str r3, [r0, #8]
loc->handlers = &IMFS_fifo_handlers;
break;
}
return 0;
}
9c9c: e3a00000 mov r0, #0
9ca0: e12fff1e bx lr
switch( node->type ) {
case IMFS_DIRECTORY:
loc->handlers = fs_info->directory_handlers;
break;
case IMFS_DEVICE:
loc->handlers = &IMFS_device_handlers;
9ca4: e59f3010 ldr r3, [pc, #16] ; 9cbc <IMFS_Set_handlers+0x94>
9ca8: e5803008 str r3, [r0, #8]
loc->handlers = &IMFS_fifo_handlers;
break;
}
return 0;
}
9cac: e3a00000 mov r0, #0
9cb0: e12fff1e bx lr
00009ae0 <IMFS_create_node>:
IMFS_jnode_types_t type,
const char *name,
mode_t mode,
const IMFS_types_union *info
)
{
9ae0: e92d40f0 push {r4, r5, r6, r7, lr}
IMFS_fs_info_t *fs_info;
/*
* MUST have a parent node to call this routine.
*/
if ( parent_loc == NULL )
9ae4: e2504000 subs r4, r0, #0
IMFS_jnode_types_t type,
const char *name,
mode_t mode,
const IMFS_types_union *info
)
{
9ae8: e1a05001 mov r5, r1
9aec: e59d6014 ldr r6, [sp, #20]
9af0: e1a01002 mov r1, r2
IMFS_fs_info_t *fs_info;
/*
* MUST have a parent node to call this routine.
*/
if ( parent_loc == NULL )
9af4: 01a07004 moveq r7, r4
9af8: 1a000001 bne 9b04 <IMFS_create_node+0x24>
node->st_ino = ++fs_info->ino_count;
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
}
9afc: e1a00007 mov r0, r7 <== NOT EXECUTED
9b00: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
return NULL;
/*
* Allocate filesystem node and fill in basic information
*/
node = IMFS_allocate_node( type, name, mode & ~rtems_filesystem_umask );
9b04: e59f210c ldr r2, [pc, #268] ; 9c18 <IMFS_create_node+0x138>
9b08: e5922000 ldr r2, [r2]
9b0c: e592202c ldr r2, [r2, #44] ; 0x2c
9b10: e1a00005 mov r0, r5
9b14: e1c32002 bic r2, r3, r2
9b18: ebffffc1 bl 9a24 <IMFS_allocate_node>
if ( !node )
9b1c: e2507000 subs r7, r0, #0
9b20: 0afffff5 beq 9afc <IMFS_create_node+0x1c>
return NULL;
/*
* Set the type specific information
*/
switch (type) {
9b24: e2455001 sub r5, r5, #1
9b28: e3550006 cmp r5, #6
9b2c: 979ff105 ldrls pc, [pc, r5, lsl #2]
9b30: ea000033 b 9c04 <IMFS_create_node+0x124> <== NOT EXECUTED
9b34: 00009be8 .word 0x00009be8 <== NOT EXECUTED
9b38: 00009bd4 .word 0x00009bd4 <== NOT EXECUTED
9b3c: 00009b50 .word 0x00009b50 <== NOT EXECUTED
9b40: 00009b50 .word 0x00009b50 <== NOT EXECUTED
9b44: 00009ba4 .word 0x00009ba4 <== NOT EXECUTED
9b48: 00009b8c .word 0x00009b8c <== NOT EXECUTED
9b4c: 00009bc8 .word 0x00009bc8 <== NOT EXECUTED
case IMFS_HARD_LINK:
node->info.hard_link.link_node = info->hard_link.link_node;
break;
case IMFS_SYM_LINK:
node->info.sym_link.name = info->sym_link.name;
9b50: e5963000 ldr r3, [r6]
9b54: e5873050 str r3, [r7, #80] ; 0x50
/*
* This node MUST have a parent, so put it in that directory list.
*/
parent = parent_loc->node_access;
fs_info = parent_loc->mt_entry->fs_info;
9b58: e5943010 ldr r3, [r4, #16]
9b5c: e5932034 ldr r2, [r3, #52] ; 0x34
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
9b60: e5923004 ldr r3, [r2, #4]
}
/*
* This node MUST have a parent, so put it in that directory list.
*/
parent = parent_loc->node_access;
9b64: e5940000 ldr r0, [r4]
fs_info = parent_loc->mt_entry->fs_info;
node->Parent = parent;
node->st_ino = ++fs_info->ino_count;
9b68: e2833001 add r3, r3, #1
9b6c: e5823004 str r3, [r2, #4]
* This node MUST have a parent, so put it in that directory list.
*/
parent = parent_loc->node_access;
fs_info = parent_loc->mt_entry->fs_info;
node->Parent = parent;
9b70: e5870008 str r0, [r7, #8]
node->st_ino = ++fs_info->ino_count;
9b74: e5873038 str r3, [r7, #56] ; 0x38
9b78: e2800050 add r0, r0, #80 ; 0x50
9b7c: e1a01007 mov r1, r7
9b80: ebfff14d bl 60bc <_Chain_Append>
rtems_chain_append( &parent->info.directory.Entries, &node->Node );
return node;
}
9b84: e1a00007 mov r0, r7
9b88: e8bd80f0 pop {r4, r5, r6, r7, pc}
node->info.device.major = info->device.major;
node->info.device.minor = info->device.minor;
break;
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
9b8c: e3a03000 mov r3, #0 <== NOT EXECUTED
9b90: e3a02000 mov r2, #0 <== NOT EXECUTED
9b94: e5872050 str r2, [r7, #80] ; 0x50 <== NOT EXECUTED
9b98: e5873054 str r3, [r7, #84] ; 0x54 <== NOT EXECUTED
node->info.linearfile.direct = 0;
9b9c: e3a03000 mov r3, #0 <== NOT EXECUTED
9ba0: e5873058 str r3, [r7, #88] ; 0x58 <== NOT EXECUTED
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
node->info.file.indirect = 0;
9ba4: e3a03000 mov r3, #0
case IMFS_LINEAR_FILE:
node->info.linearfile.size = 0;
node->info.linearfile.direct = 0;
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
9ba8: e3a01000 mov r1, #0
9bac: e3a02000 mov r2, #0
9bb0: e5871050 str r1, [r7, #80] ; 0x50
9bb4: e5872054 str r2, [r7, #84] ; 0x54
node->info.file.indirect = 0;
node->info.file.doubly_indirect = 0;
node->info.file.triply_indirect = 0;
9bb8: e5873060 str r3, [r7, #96] ; 0x60
node->info.linearfile.size = 0;
node->info.linearfile.direct = 0;
case IMFS_MEMORY_FILE:
node->info.file.size = 0;
node->info.file.indirect = 0;
9bbc: e5873058 str r3, [r7, #88] ; 0x58
node->info.file.doubly_indirect = 0;
9bc0: e587305c str r3, [r7, #92] ; 0x5c
node->info.file.triply_indirect = 0;
break;
9bc4: eaffffe3 b 9b58 <IMFS_create_node+0x78>
case IMFS_FIFO:
node->info.fifo.pipe = NULL;
9bc8: e3a03000 mov r3, #0
9bcc: e5873050 str r3, [r7, #80] ; 0x50
break;
9bd0: eaffffe0 b 9b58 <IMFS_create_node+0x78>
node->info.sym_link.name = info->sym_link.name;
break;
case IMFS_DEVICE:
node->info.device.major = info->device.major;
node->info.device.minor = info->device.minor;
9bd4: e5962004 ldr r2, [r6, #4]
case IMFS_SYM_LINK:
node->info.sym_link.name = info->sym_link.name;
break;
case IMFS_DEVICE:
node->info.device.major = info->device.major;
9bd8: e5963000 ldr r3, [r6]
node->info.device.minor = info->device.minor;
9bdc: e5872054 str r2, [r7, #84] ; 0x54
case IMFS_SYM_LINK:
node->info.sym_link.name = info->sym_link.name;
break;
case IMFS_DEVICE:
node->info.device.major = info->device.major;
9be0: e5873050 str r3, [r7, #80] ; 0x50
node->info.device.minor = info->device.minor;
break;
9be4: eaffffdb b 9b58 <IMFS_create_node+0x78>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
9be8: e2872054 add r2, r7, #84 ; 0x54
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
9bec: e2873050 add r3, r7, #80 ; 0x50
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
9bf0: e5872050 str r2, [r7, #80] ; 0x50
the_chain->permanent_null = NULL;
9bf4: e3a02000 mov r2, #0
9bf8: e5872054 str r2, [r7, #84] ; 0x54
the_chain->last = _Chain_Head(the_chain);
9bfc: e5873058 str r3, [r7, #88] ; 0x58
9c00: eaffffd4 b 9b58 <IMFS_create_node+0x78>
case IMFS_FIFO:
node->info.fifo.pipe = NULL;
break;
default:
assert(0);
9c04: e59f0010 ldr r0, [pc, #16] ; 9c1c <IMFS_create_node+0x13c> <== NOT EXECUTED
9c08: e3a0105c mov r1, #92 ; 0x5c <== NOT EXECUTED
9c0c: e59f200c ldr r2, [pc, #12] ; 9c20 <IMFS_create_node+0x140> <== NOT EXECUTED
9c10: e59f300c ldr r3, [pc, #12] ; 9c24 <IMFS_create_node+0x144> <== NOT EXECUTED
9c14: eb0003ce bl ab54 <__assert_func> <== NOT EXECUTED
00003f28 <IMFS_dump_directory>:
rtems_chain_node *the_node;
rtems_chain_control *the_chain;
IMFS_jnode_t *the_jnode;
int i;
assert( the_directory );
3f28: e3500000 cmp r0, #0
void IMFS_dump_directory(
IMFS_jnode_t *the_directory,
int level
)
{
3f2c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
3f30: e1a05001 mov r5, r1
rtems_chain_node *the_node;
rtems_chain_control *the_chain;
IMFS_jnode_t *the_jnode;
int i;
assert( the_directory );
3f34: 0a000021 beq 3fc0 <IMFS_dump_directory+0x98>
assert( level >= 0 );
3f38: e3510000 cmp r1, #0
3f3c: ba000029 blt 3fe8 <IMFS_dump_directory+0xc0>
assert( the_directory->type == IMFS_DIRECTORY );
3f40: e590304c ldr r3, [r0, #76] ; 0x4c
3f44: e3530001 cmp r3, #1
3f48: 1a000021 bne 3fd4 <IMFS_dump_directory+0xac>
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
3f4c: e5907050 ldr r7, [r0, #80] ; 0x50
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
3f50: e2808054 add r8, r0, #84 ; 0x54
3f54: e1570008 cmp r7, r8
3f58: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc}
3f5c: e59f6098 ldr r6, [pc, #152] ; 3ffc <IMFS_dump_directory+0xd4>
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
3f60: e281a001 add sl, r1, #1
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
3f64: e3a04000 mov r4, #0
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
3f68: e5963000 ldr r3, [r6]
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
3f6c: e2844001 add r4, r4, #1
fprintf(stdout, "...." );
3f70: e5933008 ldr r3, [r3, #8]
3f74: e59f0084 ldr r0, [pc, #132] ; 4000 <IMFS_dump_directory+0xd8>
3f78: e3a01001 mov r1, #1
3f7c: e3a02004 mov r2, #4
3f80: eb003dda bl 136f0 <fwrite>
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
for ( i=0 ; i<=level ; i++ )
3f84: e1550004 cmp r5, r4
3f88: aafffff6 bge 3f68 <IMFS_dump_directory+0x40>
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
3f8c: e1a00007 mov r0, r7
3f90: ebffff7a bl 3d80 <IMFS_print_jnode>
if ( the_jnode->type == IMFS_DIRECTORY )
3f94: e597304c ldr r3, [r7, #76] ; 0x4c
3f98: e3530001 cmp r3, #1
3f9c: 0a000003 beq 3fb0 <IMFS_dump_directory+0x88>
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
3fa0: e5977000 ldr r7, [r7]
assert( the_directory->type == IMFS_DIRECTORY );
the_chain = &the_directory->info.directory.Entries;
for ( the_node = the_chain->first;
3fa4: e1570008 cmp r7, r8
3fa8: 1affffed bne 3f64 <IMFS_dump_directory+0x3c>
3fac: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
if ( the_jnode->type == IMFS_DIRECTORY )
IMFS_dump_directory( the_jnode, level + 1 );
3fb0: e1a00007 mov r0, r7
3fb4: e1a0100a mov r1, sl
3fb8: ebffffda bl 3f28 <IMFS_dump_directory>
3fbc: eafffff7 b 3fa0 <IMFS_dump_directory+0x78>
rtems_chain_node *the_node;
rtems_chain_control *the_chain;
IMFS_jnode_t *the_jnode;
int i;
assert( the_directory );
3fc0: e59f003c ldr r0, [pc, #60] ; 4004 <IMFS_dump_directory+0xdc><== NOT EXECUTED
3fc4: e3a01084 mov r1, #132 ; 0x84 <== NOT EXECUTED
3fc8: e59f2038 ldr r2, [pc, #56] ; 4008 <IMFS_dump_directory+0xe0><== NOT EXECUTED
3fcc: e59f3038 ldr r3, [pc, #56] ; 400c <IMFS_dump_directory+0xe4><== NOT EXECUTED
3fd0: eb000225 bl 486c <__assert_func> <== NOT EXECUTED
assert( level >= 0 );
assert( the_directory->type == IMFS_DIRECTORY );
3fd4: e59f0028 ldr r0, [pc, #40] ; 4004 <IMFS_dump_directory+0xdc><== NOT EXECUTED
3fd8: e3a01088 mov r1, #136 ; 0x88 <== NOT EXECUTED
3fdc: e59f2024 ldr r2, [pc, #36] ; 4008 <IMFS_dump_directory+0xe0><== NOT EXECUTED
3fe0: e59f3028 ldr r3, [pc, #40] ; 4010 <IMFS_dump_directory+0xe8><== NOT EXECUTED
3fe4: eb000220 bl 486c <__assert_func> <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
int i;
assert( the_directory );
assert( level >= 0 );
3fe8: e59f0014 ldr r0, [pc, #20] ; 4004 <IMFS_dump_directory+0xdc><== NOT EXECUTED
3fec: e3a01086 mov r1, #134 ; 0x86 <== NOT EXECUTED
3ff0: e59f2010 ldr r2, [pc, #16] ; 4008 <IMFS_dump_directory+0xe0><== NOT EXECUTED
3ff4: e59f3018 ldr r3, [pc, #24] ; 4014 <IMFS_dump_directory+0xec><== NOT EXECUTED
3ff8: eb00021b bl 486c <__assert_func> <== NOT EXECUTED
00009e20 <IMFS_eval_path>:
const char *pathname, /* IN */
size_t pathnamelen, /* IN */
int flags, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
9e20: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
IMFS_token_types type = IMFS_CURRENT_DIR;
char token[ IMFS_NAME_MAX + 1 ];
IMFS_jnode_t *node;
int result;
if ( !rtems_libio_is_valid_perms( flags ) ) {
9e24: e3d25007 bics r5, r2, #7
const char *pathname, /* IN */
size_t pathnamelen, /* IN */
int flags, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
9e28: e24dd02c sub sp, sp, #44 ; 0x2c
9e2c: e58d2000 str r2, [sp]
9e30: e1a0a000 mov sl, r0
9e34: e1a04001 mov r4, r1
9e38: e1a07003 mov r7, r3
IMFS_token_types type = IMFS_CURRENT_DIR;
char token[ IMFS_NAME_MAX + 1 ];
IMFS_jnode_t *node;
int result;
if ( !rtems_libio_is_valid_perms( flags ) ) {
9e3c: 1a0000b8 bne a124 <IMFS_eval_path+0x304>
/*
* This was filled in by the caller and is valid in the
* mount table.
*/
node = pathloc->node_access;
9e40: e5936000 ldr r6, [r3]
9e44: e28d8004 add r8, sp, #4
9e48: e28d9028 add r9, sp, #40 ; 0x28
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
9e4c: e1a02008 mov r2, r8
9e50: e1a03009 mov r3, r9
9e54: e08a0005 add r0, sl, r5
9e58: e1a01004 mov r1, r4
9e5c: eb00029d bl a8d8 <IMFS_get_token>
pathnamelen -= len;
i += len;
if ( !pathloc->node_access )
9e60: e5973000 ldr r3, [r7]
9e64: e3530000 cmp r3, #0
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
9e68: e1a0b000 mov fp, r0
pathnamelen -= len;
9e6c: e59d2028 ldr r2, [sp, #40] ; 0x28
i += len;
if ( !pathloc->node_access )
9e70: 0a000078 beq a058 <IMFS_eval_path+0x238>
rtems_set_errno_and_return_minus_one( ENOENT );
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
9e74: e3500000 cmp r0, #0
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
pathnamelen -= len;
i += len;
9e78: e0855002 add r5, r5, r2
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
type = IMFS_get_token( &pathname[i], pathnamelen, token, &len );
pathnamelen -= len;
9e7c: e0624004 rsb r4, r2, r4
rtems_set_errno_and_return_minus_one( ENOENT );
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
9e80: 1a00000f bne 9ec4 <IMFS_eval_path+0xa4>
* new fs root node and let let the mounted filesystem set the handlers.
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
9e84: e593204c ldr r2, [r3, #76] ; 0x4c
9e88: e3520001 cmp r2, #1
9e8c: 0a000076 beq a06c <IMFS_eval_path+0x24c>
flags, pathloc );
} else {
result = IMFS_Set_handlers( pathloc );
}
} else {
result = IMFS_Set_handlers( pathloc );
9e90: e1a00007 mov r0, r7
9e94: ebffff63 bl 9c28 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
9e98: e59d1000 ldr r1, [sp]
flags, pathloc );
} else {
result = IMFS_Set_handlers( pathloc );
}
} else {
result = IMFS_Set_handlers( pathloc );
9e9c: e1a0b000 mov fp, r0
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( pathloc, flags ) )
9ea0: e1a00007 mov r0, r7
9ea4: ebffff85 bl 9cc0 <IMFS_evaluate_permission>
9ea8: e3500000 cmp r0, #0
9eac: 1a000036 bne 9f8c <IMFS_eval_path+0x16c>
rtems_set_errno_and_return_minus_one( EACCES );
9eb0: eb001102 bl e2c0 <__errno>
9eb4: e3a0300d mov r3, #13
9eb8: e5803000 str r3, [r0]
9ebc: e3e0b000 mvn fp, #0
9ec0: ea000031 b 9f8c <IMFS_eval_path+0x16c>
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
9ec4: e596104c ldr r1, [r6, #76] ; 0x4c
9ec8: e3510001 cmp r1, #1
9ecc: 0a000053 beq a020 <IMFS_eval_path+0x200>
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
switch( type ) {
9ed0: e35b0003 cmp fp, #3
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
9ed4: e1a06003 mov r6, r3
switch( type ) {
9ed8: 0a000006 beq 9ef8 <IMFS_eval_path+0xd8>
9edc: e35b0004 cmp fp, #4
9ee0: 0a000025 beq 9f7c <IMFS_eval_path+0x15c>
9ee4: e35b0002 cmp fp, #2
9ee8: 0a000013 beq 9f3c <IMFS_eval_path+0x11c>
/*
* Evaluate all tokens until we are done or an error occurs.
*/
while( (type != IMFS_NO_MORE_PATH) && (type != IMFS_INVALID_TOKEN) ) {
9eec: e35b0004 cmp fp, #4
9ef0: 1affffd5 bne 9e4c <IMFS_eval_path+0x2c>
9ef4: eaffffe2 b 9e84 <IMFS_eval_path+0x64> <== NOT EXECUTED
case IMFS_NAME:
/*
* If we are at a link follow it.
*/
if ( node->type == IMFS_HARD_LINK ) {
9ef8: e593304c ldr r3, [r3, #76] ; 0x4c
9efc: e3530003 cmp r3, #3
9f00: 0a00004c beq a038 <IMFS_eval_path+0x218>
node = pathloc->node_access;
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
} else if ( node->type == IMFS_SYM_LINK ) {
9f04: e3530004 cmp r3, #4
9f08: 0a00007a beq a0f8 <IMFS_eval_path+0x2d8>
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
9f0c: e3530001 cmp r3, #1
9f10: 1a000069 bne a0bc <IMFS_eval_path+0x29c>
/*
* Find the token name in the current node.
*/
node = IMFS_find_match_in_dir( node, token );
9f14: e1a00006 mov r0, r6
9f18: e1a01008 mov r1, r8
9f1c: eb00023e bl a81c <IMFS_find_match_in_dir>
if ( !node )
9f20: e2506000 subs r6, r0, #0
9f24: 0a00004b beq a058 <IMFS_eval_path+0x238>
* file system and not the IMFS. For example the IMFS length is
* limited. If the token is a parent directory move back up otherwise
* set loc to the new fs root node and let them finish evaluating the
* path.
*/
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
9f28: e596304c ldr r3, [r6, #76] ; 0x4c
9f2c: e3530001 cmp r3, #1
9f30: 0a000018 beq 9f98 <IMFS_eval_path+0x178>
/*
* Set the node access to the point we have found.
*/
pathloc->node_access = node;
9f34: e5876000 str r6, [r7]
break;
9f38: eaffffc3 b 9e4c <IMFS_eval_path+0x2c>
case IMFS_UP_DIR:
/*
* Am I at the root of all filesystems? (chroot'ed?)
*/
if ( pathloc->node_access == rtems_filesystem_root.node_access )
9f3c: e59f11f4 ldr r1, [pc, #500] ; a138 <IMFS_eval_path+0x318>
9f40: e5912000 ldr r2, [r1]
9f44: e5922018 ldr r2, [r2, #24]
9f48: e1520003 cmp r2, r3
9f4c: 0affffbe beq 9e4c <IMFS_eval_path+0x2c>
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
pathloc->mt_entry->mt_fs_root.node_access) {
9f50: e597c010 ldr ip, [r7, #16]
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
9f54: e59c201c ldr r2, [ip, #28]
9f58: e1520003 cmp r2, r3
9f5c: 0a00006e beq a11c <IMFS_eval_path+0x2fc>
return (*pathloc->ops->evalpath_h)(&(pathname[i-len]),
pathnamelen+len,
flags,pathloc);
}
} else {
if ( !node->Parent )
9f60: e5936008 ldr r6, [r3, #8]
9f64: e3560000 cmp r6, #0
9f68: 1afffff1 bne 9f34 <IMFS_eval_path+0x114>
rtems_set_errno_and_return_minus_one( ENOENT );
9f6c: eb0010d3 bl e2c0 <__errno>
9f70: e580b000 str fp, [r0]
9f74: e3e0b000 mvn fp, #0
9f78: ea000003 b 9f8c <IMFS_eval_path+0x16c>
case IMFS_NO_MORE_PATH:
case IMFS_CURRENT_DIR:
break;
case IMFS_INVALID_TOKEN:
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
9f7c: eb0010cf bl e2c0 <__errno>
9f80: e3a0305b mov r3, #91 ; 0x5b
9f84: e5803000 str r3, [r0]
9f88: e3e0b000 mvn fp, #0
if ( !IMFS_evaluate_permission( pathloc, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
9f8c: e1a0000b mov r0, fp
9f90: e28dd02c add sp, sp, #44 ; 0x2c
9f94: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
* file system and not the IMFS. For example the IMFS length is
* limited. If the token is a parent directory move back up otherwise
* set loc to the new fs root node and let them finish evaluating the
* path.
*/
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
9f98: e596305c ldr r3, [r6, #92] ; 0x5c
9f9c: e3530000 cmp r3, #0
9fa0: 108ab005 addne fp, sl, r5
9fa4: 0affffe2 beq 9f34 <IMFS_eval_path+0x114>
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
9fa8: e5db0000 ldrb r0, [fp]
9fac: ebffe41a bl 301c <rtems_filesystem_is_separator>
9fb0: e3500000 cmp r0, #0
++(*index);
--(*len);
9fb4: e1a0c00b mov ip, fp
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
9fb8: 0a00000c beq 9ff0 <IMFS_eval_path+0x1d0>
9fbc: e5db3000 ldrb r3, [fp]
9fc0: e3530000 cmp r3, #0
9fc4: 0a000041 beq a0d0 <IMFS_eval_path+0x2b0>
9fc8: e3540000 cmp r4, #0
9fcc: e28bb001 add fp, fp, #1
9fd0: 0a000007 beq 9ff4 <IMFS_eval_path+0x1d4>
9fd4: e5db0000 ldrb r0, [fp]
9fd8: ebffe40f bl 301c <rtems_filesystem_is_separator>
9fdc: e3500000 cmp r0, #0
++(*index);
9fe0: e2855001 add r5, r5, #1
--(*len);
9fe4: e2444001 sub r4, r4, #1
9fe8: e1a0c00b mov ip, fp
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
9fec: 1afffff2 bne 9fbc <IMFS_eval_path+0x19c>
9ff0: e5db3000 ldrb r3, [fp]
* set loc to the new fs root node and let them finish evaluating the
* path.
*/
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
IMFS_skip_separator( pathname, &pathnamelen, &i);
if ((pathname[i] != '.') || (pathname[i + 1] != '.')) {
9ff4: e353002e cmp r3, #46 ; 0x2e
9ff8: 1a000034 bne a0d0 <IMFS_eval_path+0x2b0>
9ffc: e08a3005 add r3, sl, r5
a000: e5d33001 ldrb r3, [r3, #1]
a004: e353002e cmp r3, #46 ; 0x2e
a008: 1a000030 bne a0d0 <IMFS_eval_path+0x2b0>
pathnamelen,
flags, pathloc );
}
i += 2;
pathnamelen -= 2;
node = node->Parent;
a00c: e5966008 ldr r6, [r6, #8]
*pathloc = node->info.directory.mt_fs->mt_fs_root;
return (*pathloc->ops->evalpath_h)( &pathname[i],
pathnamelen,
flags, pathloc );
}
i += 2;
a010: e2855002 add r5, r5, #2
pathnamelen -= 2;
a014: e2444002 sub r4, r4, #2
/*
* Set the node access to the point we have found.
*/
pathloc->node_access = node;
a018: e5876000 str r6, [r7]
a01c: eaffff8a b 9e4c <IMFS_eval_path+0x2c>
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
a020: e1a00007 mov r0, r7
a024: ebffff25 bl 9cc0 <IMFS_evaluate_permission>
a028: e3500000 cmp r0, #0
a02c: 0affff9f beq 9eb0 <IMFS_eval_path+0x90>
a030: e5973000 ldr r3, [r7]
a034: eaffffa5 b 9ed0 <IMFS_eval_path+0xb0>
* If we are at a link follow it.
*/
if ( node->type == IMFS_HARD_LINK ) {
IMFS_evaluate_hard_link( pathloc, 0 );
a038: e1a00007 mov r0, r7
a03c: e3a01000 mov r1, #0
a040: ebffff2e bl 9d00 <IMFS_evaluate_hard_link>
node = pathloc->node_access;
a044: e5976000 ldr r6, [r7]
if ( !node )
a048: e3560000 cmp r6, #0
a04c: 0a00001a beq a0bc <IMFS_eval_path+0x29c>
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
node = pathloc->node_access;
a050: e596304c ldr r3, [r6, #76] ; 0x4c
a054: eaffffac b 9f0c <IMFS_eval_path+0xec>
*/
node = IMFS_find_match_in_dir( node, token );
if ( !node )
rtems_set_errno_and_return_minus_one( ENOENT );
a058: eb001098 bl e2c0 <__errno>
a05c: e3a03002 mov r3, #2
a060: e5803000 str r3, [r0]
a064: e3e0b000 mvn fp, #0
a068: eaffffc7 b 9f8c <IMFS_eval_path+0x16c>
*
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
a06c: e593c05c ldr ip, [r3, #92] ; 0x5c
a070: e35c0000 cmp ip, #0
a074: 0affff85 beq 9e90 <IMFS_eval_path+0x70>
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a078: e28cc01c add ip, ip, #28 <== NOT EXECUTED
a07c: e8bc000f ldm ip!, {r0, r1, r2, r3}
a080: e1a0e007 mov lr, r7
a084: e8ae000f stmia lr!, {r0, r1, r2, r3}
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
a088: e59d1028 ldr r1, [sp, #40] ; 0x28
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a08c: e59c2000 ldr r2, [ip]
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
a090: e0610005 rsb r0, r1, r5
* NOTE: The behavior of stat() on a mount point appears to be questionable.
*/
if ( node->type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a094: e58e2000 str r2, [lr]
return (*pathloc->ops->evalpath_h)( &pathname[i-len],
a098: e08a0000 add r0, sl, r0
a09c: e0841001 add r1, r4, r1
a0a0: e59d2000 ldr r2, [sp]
a0a4: e1a03007 mov r3, r7
a0a8: e597c00c ldr ip, [r7, #12]
a0ac: e1a0e00f mov lr, pc
a0b0: e59cf000 ldr pc, [ip]
a0b4: e1a0b000 mov fp, r0
a0b8: eaffffb3 b 9f8c <IMFS_eval_path+0x16c>
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
a0bc: eb00107f bl e2c0 <__errno>
a0c0: e3a03014 mov r3, #20
a0c4: e5803000 str r3, [r0]
a0c8: e3e0b000 mvn fp, #0
a0cc: eaffffae b 9f8c <IMFS_eval_path+0x16c>
* path.
*/
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
IMFS_skip_separator( pathname, &pathnamelen, &i);
if ((pathname[i] != '.') || (pathname[i + 1] != '.')) {
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a0d0: e596e05c ldr lr, [r6, #92] ; 0x5c
a0d4: e28ee01c add lr, lr, #28
a0d8: e8be000f ldm lr!, {r0, r1, r2, r3}
a0dc: e1a05007 mov r5, r7
a0e0: e8a5000f stmia r5!, {r0, r1, r2, r3}
a0e4: e59e2000 ldr r2, [lr]
return (*pathloc->ops->evalpath_h)( &pathname[i],
a0e8: e1a0000c mov r0, ip
* path.
*/
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
IMFS_skip_separator( pathname, &pathnamelen, &i);
if ((pathname[i] != '.') || (pathname[i + 1] != '.')) {
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a0ec: e5852000 str r2, [r5]
return (*pathloc->ops->evalpath_h)( &pathname[i],
a0f0: e1a01004 mov r1, r4
a0f4: eaffffe9 b a0a0 <IMFS_eval_path+0x280>
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
a0f8: e1a00007 mov r0, r7
a0fc: e3a01000 mov r1, #0
a100: ebffff16 bl 9d60 <IMFS_evaluate_sym_link>
node = pathloc->node_access;
if ( result == -1 )
a104: e3700001 cmn r0, #1
if ( !node )
rtems_set_errno_and_return_minus_one( ENOTDIR );
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
a108: e1a0b000 mov fp, r0
node = pathloc->node_access;
a10c: e5976000 ldr r6, [r7]
if ( result == -1 )
a110: 0affff9d beq 9f8c <IMFS_eval_path+0x16c>
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_sym_link( pathloc, 0 );
node = pathloc->node_access;
a114: e596304c ldr r3, [r6, #76] ; 0x4c
a118: eaffff7b b 9f0c <IMFS_eval_path+0xec>
*/
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break; /* Throw out the .. in this case */
} else {
*pathloc = pathloc->mt_entry->mt_point_node;
a11c: e28cc008 add ip, ip, #8
a120: eaffffd5 b a07c <IMFS_eval_path+0x25c>
char token[ IMFS_NAME_MAX + 1 ];
IMFS_jnode_t *node;
int result;
if ( !rtems_libio_is_valid_perms( flags ) ) {
assert( 0 );
a124: e59f0010 ldr r0, [pc, #16] ; a13c <IMFS_eval_path+0x31c> <== NOT EXECUTED
a128: e3a01f82 mov r1, #520 ; 0x208 <== NOT EXECUTED
a12c: e59f200c ldr r2, [pc, #12] ; a140 <IMFS_eval_path+0x320> <== NOT EXECUTED
a130: e59f300c ldr r3, [pc, #12] ; a144 <IMFS_eval_path+0x324> <== NOT EXECUTED
a134: eb000286 bl ab54 <__assert_func> <== NOT EXECUTED
0000a21c <IMFS_evaluate_for_make>:
int IMFS_evaluate_for_make(
const char *path, /* IN */
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
const char **name /* OUT */
)
{
a21c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
a220: e24dd02c sub sp, sp, #44 ; 0x2c
a224: e1a07001 mov r7, r1
/*
* This was filled in by the caller and is valid in the
* mount table.
*/
node = pathloc->node_access;
a228: e5916000 ldr r6, [r1]
int IMFS_evaluate_for_make(
const char *path, /* IN */
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
const char **name /* OUT */
)
{
a22c: e58d2000 str r2, [sp]
a230: e1a0a000 mov sl, r0
node = pathloc->node_access;
/*
* Get the path length.
*/
pathlen = strlen( path );
a234: eb001426 bl f2d4 <strlen>
a238: e3a05000 mov r5, #0
a23c: e28d8004 add r8, sp, #4
a240: e1a04000 mov r4, r0
* Evaluate all tokens until we are done or an error occurs.
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
a244: e28d3028 add r3, sp, #40 ; 0x28
a248: e08a0005 add r0, sl, r5
a24c: e1a01004 mov r1, r4
a250: e1a02008 mov r2, r8
a254: eb00019f bl a8d8 <IMFS_get_token>
pathlen -= len;
i += len;
if ( !pathloc->node_access )
a258: e5973000 ldr r3, [r7]
a25c: e3530000 cmp r3, #0
* Evaluate all tokens until we are done or an error occurs.
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
a260: e1a09000 mov r9, r0
pathlen -= len;
a264: e59db028 ldr fp, [sp, #40] ; 0x28
i += len;
if ( !pathloc->node_access )
a268: 0a00003b beq a35c <IMFS_evaluate_for_make+0x140>
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
a26c: e3500000 cmp r0, #0
a270: 1a000006 bne a290 <IMFS_evaluate_for_make+0x74>
pathloc->node_access = node;
}
break;
case IMFS_NO_MORE_PATH:
rtems_set_errno_and_return_minus_one( EEXIST );
a274: eb001011 bl e2c0 <__errno>
a278: e3a03011 mov r3, #17
a27c: e5803000 str r3, [r0]
a280: e3e06000 mvn r6, #0
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
a284: e1a00006 mov r0, r6
a288: e28dd02c add sp, sp, #44 ; 0x2c
a28c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
/*
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
a290: e596104c ldr r1, [r6, #76] ; 0x4c
a294: e3510001 cmp r1, #1
a298: 0a000052 beq a3e8 <IMFS_evaluate_for_make+0x1cc>
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
pathlen -= len;
i += len;
a29c: e085500b add r5, r5, fp
*/
while( !done ) {
type = IMFS_get_token( &path[i], pathlen, token, &len );
pathlen -= len;
a2a0: e06b4004 rsb r4, fp, r4
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
rtems_set_errno_and_return_minus_one( EACCES );
node = pathloc->node_access;
a2a4: e1a06003 mov r6, r3
switch( type ) {
a2a8: e3590004 cmp r9, #4
a2ac: 979ff109 ldrls pc, [pc, r9, lsl #2]
a2b0: eaffffe3 b a244 <IMFS_evaluate_for_make+0x28> <== NOT EXECUTED
a2b4: 0000a274 .word 0x0000a274 <== NOT EXECUTED
a2b8: 0000a244 .word 0x0000a244 <== NOT EXECUTED
a2bc: 0000a32c .word 0x0000a32c <== NOT EXECUTED
a2c0: 0000a2dc .word 0x0000a2dc <== NOT EXECUTED
a2c4: 0000a2c8 .word 0x0000a2c8 <== NOT EXECUTED
case IMFS_NO_MORE_PATH:
rtems_set_errno_and_return_minus_one( EEXIST );
break;
case IMFS_INVALID_TOKEN:
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
a2c8: eb000ffc bl e2c0 <__errno>
a2cc: e3a0305b mov r3, #91 ; 0x5b
a2d0: e5803000 str r3, [r0]
a2d4: e3e06000 mvn r6, #0
a2d8: eaffffe9 b a284 <IMFS_evaluate_for_make+0x68>
case IMFS_NAME:
/*
* If we are at a link follow it.
*/
if ( node->type == IMFS_HARD_LINK ) {
a2dc: e593304c ldr r3, [r3, #76] ; 0x4c
a2e0: e3530003 cmp r3, #3
a2e4: 0a00006c beq a49c <IMFS_evaluate_for_make+0x280>
result = IMFS_evaluate_link( pathloc, 0 );
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
a2e8: e3530004 cmp r3, #4
a2ec: 0a00006a beq a49c <IMFS_evaluate_for_make+0x280>
if ( result == -1 )
return -1;
}
node = pathloc->node_access;
if ( !node )
a2f0: e3560000 cmp r6, #0
a2f4: 0a000063 beq a488 <IMFS_evaluate_for_make+0x26c>
/*
* Only a directory can be decended into.
*/
if ( node->type != IMFS_DIRECTORY )
a2f8: e596304c ldr r3, [r6, #76] ; 0x4c
a2fc: e3530001 cmp r3, #1
a300: 1a000060 bne a488 <IMFS_evaluate_for_make+0x26c>
/*
* Find the token name in the present location.
*/
node = IMFS_find_match_in_dir( node, token );
a304: e1a00006 mov r0, r6
a308: e1a01008 mov r1, r8
a30c: eb000142 bl a81c <IMFS_find_match_in_dir>
/*
* If there is no node we have found the name of the node we
* wish to create.
*/
if ( ! node )
a310: e2506000 subs r6, r0, #0
a314: 0a000039 beq a400 <IMFS_evaluate_for_make+0x1e4>
done = true;
else {
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
a318: e596304c ldr r3, [r6, #76] ; 0x4c
a31c: e3530001 cmp r3, #1
a320: 0a000012 beq a370 <IMFS_evaluate_for_make+0x154>
i += 2;
pathlen -= 2;
node = node->Parent;
}
pathloc->node_access = node;
a324: e5876000 str r6, [r7]
a328: eaffffc5 b a244 <IMFS_evaluate_for_make+0x28>
case IMFS_UP_DIR:
/*
* Am I at the root of all filesystems? (chroot'ed?)
*/
if ( pathloc->node_access == rtems_filesystem_root.node_access )
a32c: e59f11ec ldr r1, [pc, #492] ; a520 <IMFS_evaluate_for_make+0x304>
a330: e5912000 ldr r2, [r1]
a334: e5922018 ldr r2, [r2, #24]
a338: e1520003 cmp r2, r3
a33c: 0affffc0 beq a244 <IMFS_evaluate_for_make+0x28>
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access == pathloc->mt_entry->mt_fs_root.node_access){
a340: e597c010 ldr ip, [r7, #16]
a344: e59c201c ldr r2, [ip, #28]
a348: e1520003 cmp r2, r3
a34c: 0a000069 beq a4f8 <IMFS_evaluate_for_make+0x2dc>
} else {
*pathloc = pathloc->mt_entry->mt_point_node;
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
}
} else {
if ( !node->Parent )
a350: e5936008 ldr r6, [r3, #8]
a354: e3560000 cmp r6, #0
a358: 1afffff1 bne a324 <IMFS_evaluate_for_make+0x108>
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
if ( !IMFS_is_separator( path[ i ] ) )
rtems_set_errno_and_return_minus_one( ENOENT );
a35c: eb000fd7 bl e2c0 <__errno>
a360: e3a03002 mov r3, #2
a364: e5803000 str r3, [r0]
a368: e3e06000 mvn r6, #0
a36c: eaffffc4 b a284 <IMFS_evaluate_for_make+0x68>
*/
if ( ! node )
done = true;
else {
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
a370: e596305c ldr r3, [r6, #92] ; 0x5c
a374: e3530000 cmp r3, #0
a378: 108a9005 addne r9, sl, r5
a37c: 1a000008 bne a3a4 <IMFS_evaluate_for_make+0x188>
a380: eaffffe7 b a324 <IMFS_evaluate_for_make+0x108>
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
a384: e5d93000 ldrb r3, [r9]
a388: e3530000 cmp r3, #0
a38c: 0a00004a beq a4bc <IMFS_evaluate_for_make+0x2a0>
a390: e3540000 cmp r4, #0
a394: e2899001 add r9, r9, #1
a398: 0a000007 beq a3bc <IMFS_evaluate_for_make+0x1a0>
++(*index);
a39c: e2855001 add r5, r5, #1
--(*len);
a3a0: e2444001 sub r4, r4, #1
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
a3a4: e5d90000 ldrb r0, [r9]
a3a8: ebffe31b bl 301c <rtems_filesystem_is_separator>
a3ac: e3500000 cmp r0, #0
++(*index);
--(*len);
a3b0: e1a0c009 mov ip, r9
const char *path, /* IN */
size_t *len, /* IN/OUT */
int *index /* IN/OUT */
)
{
while ( IMFS_is_separator( path[*index] ) && path[*index] && *len ) {
a3b4: 1afffff2 bne a384 <IMFS_evaluate_for_make+0x168>
a3b8: e5d93000 ldrb r3, [r9]
if ( ! node )
done = true;
else {
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
IMFS_skip_separator( path, &pathlen, &i);
if ((path[i] != '.') || (path[i + 1] != '.')) {
a3bc: e353002e cmp r3, #46 ; 0x2e
a3c0: 1a00003d bne a4bc <IMFS_evaluate_for_make+0x2a0>
a3c4: e08a3005 add r3, sl, r5
a3c8: e5d33001 ldrb r3, [r3, #1]
a3cc: e353002e cmp r3, #46 ; 0x2e
a3d0: 1a000039 bne a4bc <IMFS_evaluate_for_make+0x2a0>
pathloc,
name );
}
i += 2;
pathlen -= 2;
node = node->Parent;
a3d4: e5966008 ldr r6, [r6, #8]
*pathloc = node->info.directory.mt_fs->mt_fs_root;
return (*pathloc->ops->evalformake_h)( &path[i],
pathloc,
name );
}
i += 2;
a3d8: e2855002 add r5, r5, #2
pathlen -= 2;
a3dc: e2444002 sub r4, r4, #2
node = node->Parent;
}
pathloc->node_access = node;
a3e0: e5876000 str r6, [r7]
a3e4: eaffff96 b a244 <IMFS_evaluate_for_make+0x28>
* I cannot move out of this directory without execute permission.
*/
if ( type != IMFS_NO_MORE_PATH )
if ( node->type == IMFS_DIRECTORY )
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_SEARCH ) )
a3e8: e1a00007 mov r0, r7
a3ec: ebfffe33 bl 9cc0 <IMFS_evaluate_permission>
a3f0: e3500000 cmp r0, #0
a3f4: 0a00001e beq a474 <IMFS_evaluate_for_make+0x258>
a3f8: e5973000 ldr r3, [r7]
a3fc: eaffffa6 b a29c <IMFS_evaluate_for_make+0x80>
case IMFS_CURRENT_DIR:
break;
}
}
*name = &path[ i - len ];
a400: e59d3028 ldr r3, [sp, #40] ; 0x28
a404: e59de000 ldr lr, [sp]
a408: e0633005 rsb r3, r3, r5
a40c: e08a3003 add r3, sl, r3
a410: e58e3000 str r3, [lr]
/*
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++) {
a414: e7da0005 ldrb r0, [sl, r5]
a418: e3500000 cmp r0, #0
a41c: 0a000008 beq a444 <IMFS_evaluate_for_make+0x228>
a420: e08a5005 add r5, sl, r5
a424: ea000002 b a434 <IMFS_evaluate_for_make+0x218>
a428: e5f50001 ldrb r0, [r5, #1]!
a42c: e3500000 cmp r0, #0
a430: 0a000003 beq a444 <IMFS_evaluate_for_make+0x228>
if ( !IMFS_is_separator( path[ i ] ) )
a434: ebffe2f8 bl 301c <rtems_filesystem_is_separator>
a438: e3500000 cmp r0, #0
a43c: 1afffff9 bne a428 <IMFS_evaluate_for_make+0x20c>
a440: eaffffc5 b a35c <IMFS_evaluate_for_make+0x140>
/*
* Verify we can execute and write to this directory.
*/
result = IMFS_Set_handlers( pathloc );
a444: e1a00007 mov r0, r7
a448: ebfffdf6 bl 9c28 <IMFS_Set_handlers>
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
a44c: e5973000 ldr r3, [r7]
a450: e593304c ldr r3, [r3, #76] ; 0x4c
a454: e3530001 cmp r3, #1
/*
* Verify we can execute and write to this directory.
*/
result = IMFS_Set_handlers( pathloc );
a458: e1a06000 mov r6, r0
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
a45c: 1a000009 bne a488 <IMFS_evaluate_for_make+0x26c>
/*
* We must have Write and execute permission on the returned node.
*/
if ( !IMFS_evaluate_permission( pathloc, RTEMS_LIBIO_PERMS_WX ) )
a460: e1a00007 mov r0, r7
a464: e3a01003 mov r1, #3
a468: ebfffe14 bl 9cc0 <IMFS_evaluate_permission>
a46c: e3500000 cmp r0, #0
a470: 1affff83 bne a284 <IMFS_evaluate_for_make+0x68>
rtems_set_errno_and_return_minus_one( EACCES );
a474: eb000f91 bl e2c0 <__errno>
a478: e3a0300d mov r3, #13
a47c: e5803000 str r3, [r0]
a480: e3e06000 mvn r6, #0
a484: eaffff7e b a284 <IMFS_evaluate_for_make+0x68>
/*
* The returned node must be a directory
*/
node = pathloc->node_access;
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
a488: eb000f8c bl e2c0 <__errno>
a48c: e3a03014 mov r3, #20
a490: e5803000 str r3, [r0]
a494: e3e06000 mvn r6, #0
a498: eaffff79 b a284 <IMFS_evaluate_for_make+0x68>
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_link( pathloc, 0 );
a49c: e1a00007 mov r0, r7
a4a0: e3a01000 mov r1, #0
a4a4: ebffff27 bl a148 <IMFS_evaluate_link>
if ( result == -1 )
a4a8: e3700001 cmn r0, #1
if ( result == -1 )
return -1;
} else if ( node->type == IMFS_SYM_LINK ) {
result = IMFS_evaluate_link( pathloc, 0 );
a4ac: e1a06000 mov r6, r0
if ( result == -1 )
a4b0: 0affff73 beq a284 <IMFS_evaluate_for_make+0x68>
a4b4: e5976000 ldr r6, [r7]
a4b8: eaffff8c b a2f0 <IMFS_evaluate_for_make+0xd4>
done = true;
else {
if (( node->type == IMFS_DIRECTORY ) && ( node->info.directory.mt_fs != NULL )) {
IMFS_skip_separator( path, &pathlen, &i);
if ((path[i] != '.') || (path[i + 1] != '.')) {
*pathloc = node->info.directory.mt_fs->mt_fs_root;
a4bc: e596e05c ldr lr, [r6, #92] ; 0x5c
a4c0: e28ee01c add lr, lr, #28
a4c4: e8be000f ldm lr!, {r0, r1, r2, r3}
a4c8: e1a04007 mov r4, r7
a4cc: e8a4000f stmia r4!, {r0, r1, r2, r3}
a4d0: e59e2000 ldr r2, [lr]
a4d4: e5842000 str r2, [r4]
return (*pathloc->ops->evalformake_h)( &path[i],
a4d8: e1a0000c mov r0, ip
a4dc: e1a01007 mov r1, r7
a4e0: e59d2000 ldr r2, [sp]
a4e4: e597300c ldr r3, [r7, #12]
a4e8: e1a0e00f mov lr, pc
a4ec: e593f004 ldr pc, [r3, #4]
a4f0: e1a06000 mov r6, r0
a4f4: eaffff62 b a284 <IMFS_evaluate_for_make+0x68>
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break;
} else {
*pathloc = pathloc->mt_entry->mt_point_node;
a4f8: e28cc008 add ip, ip, #8
a4fc: e8bc000f ldm ip!, {r0, r1, r2, r3}
a500: e1a04007 mov r4, r7
a504: e8a4000f stmia r4!, {r0, r1, r2, r3}
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
a508: e59d0028 ldr r0, [sp, #40] ; 0x28
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break;
} else {
*pathloc = pathloc->mt_entry->mt_point_node;
a50c: e59c2000 ldr r2, [ip]
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
a510: e0600005 rsb r0, r0, r5
if ( pathloc->node_access == rtems_filesystem_root.node_access ) {
break;
} else {
*pathloc = pathloc->mt_entry->mt_point_node;
a514: e5842000 str r2, [r4]
return (*pathloc->ops->evalformake_h)( &path[i-len], pathloc, name );
a518: e08a0000 add r0, sl, r0
a51c: eaffffee b a4dc <IMFS_evaluate_for_make+0x2c0>
00009d00 <IMFS_evaluate_hard_link>:
int IMFS_evaluate_hard_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
IMFS_jnode_t *jnode = node->node_access;
9d00: e5903000 ldr r3, [r0]
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
9d04: e593204c ldr r2, [r3, #76] ; 0x4c
9d08: e3520003 cmp r2, #3
int IMFS_evaluate_hard_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
9d0c: e92d4030 push {r4, r5, lr}
9d10: e1a04000 mov r4, r0
9d14: e1a05001 mov r5, r1
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
9d18: 1a00000d bne 9d54 <IMFS_evaluate_hard_link+0x54>
/*
* Set the hard link value and the handlers.
*/
node->node_access = jnode->info.hard_link.link_node;
9d1c: e5933050 ldr r3, [r3, #80] ; 0x50
9d20: e5803000 str r3, [r0]
IMFS_Set_handlers( node );
9d24: ebffffbf bl 9c28 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
9d28: e1a00004 mov r0, r4
9d2c: e1a01005 mov r1, r5
9d30: ebffffe2 bl 9cc0 <IMFS_evaluate_permission>
9d34: e3500000 cmp r0, #0
9d38: 13a00000 movne r0, #0
9d3c: 18bd8030 popne {r4, r5, pc}
rtems_set_errno_and_return_minus_one( EACCES );
9d40: eb00115e bl e2c0 <__errno> <== NOT EXECUTED
9d44: e3a0300d mov r3, #13 <== NOT EXECUTED
9d48: e5803000 str r3, [r0] <== NOT EXECUTED
9d4c: e3e00000 mvn r0, #0 <== NOT EXECUTED
return result;
}
9d50: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_HARD_LINK )
rtems_fatal_error_occurred (0xABCD0000);
9d54: e3a0032b mov r0, #-1409286144 ; 0xac000000 <== NOT EXECUTED
9d58: e2400833 sub r0, r0, #3342336 ; 0x330000 <== NOT EXECUTED
9d5c: ebfff01f bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00009cc0 <IMFS_evaluate_permission>:
uid_t st_uid;
gid_t st_gid;
IMFS_jnode_t *jnode;
int flags_to_test;
if ( !rtems_libio_is_valid_perms( flags ) )
9cc0: e3d13007 bics r3, r1, #7
int IMFS_evaluate_permission(
rtems_filesystem_location_info_t *node,
int flags
)
{
9cc4: e52de004 push {lr} ; (str lr, [sp, #-4]!)
uid_t st_uid;
gid_t st_gid;
IMFS_jnode_t *jnode;
int flags_to_test;
if ( !rtems_libio_is_valid_perms( flags ) )
9cc8: 1a000007 bne 9cec <IMFS_evaluate_permission+0x2c>
/*
* If all of the flags are set we have permission
* to do this.
*/
if ( ( flags_to_test & jnode->st_mode) == flags_to_test )
9ccc: e5903000 ldr r3, [r0]
9cd0: e5930030 ldr r0, [r3, #48] ; 0x30
9cd4: e1a01301 lsl r1, r1, #6
9cd8: e0010000 and r0, r1, r0
9cdc: e1510000 cmp r1, r0
9ce0: 13a00000 movne r0, #0
9ce4: 03a00001 moveq r0, #1
return 1;
return 0;
}
9ce8: e49df004 pop {pc} ; (ldr pc, [sp], #4)
gid_t st_gid;
IMFS_jnode_t *jnode;
int flags_to_test;
if ( !rtems_libio_is_valid_perms( flags ) )
rtems_set_errno_and_return_minus_one( EPERM );
9cec: eb001173 bl e2c0 <__errno> <== NOT EXECUTED
9cf0: e3a03001 mov r3, #1 <== NOT EXECUTED
9cf4: e5803000 str r3, [r0] <== NOT EXECUTED
9cf8: e3e00000 mvn r0, #0 <== NOT EXECUTED
9cfc: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00009d60 <IMFS_evaluate_sym_link>:
int IMFS_evaluate_sym_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
9d60: e92d4070 push {r4, r5, r6, lr}
IMFS_jnode_t *jnode = node->node_access;
9d64: e5906000 ldr r6, [r0]
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
9d68: e596304c ldr r3, [r6, #76] ; 0x4c
9d6c: e3530004 cmp r3, #4
int IMFS_evaluate_sym_link(
rtems_filesystem_location_info_t *node, /* IN/OUT */
int flags /* IN */
)
{
9d70: e24dd004 sub sp, sp, #4
9d74: e1a04000 mov r4, r0
9d78: e1a05001 mov r5, r1
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
9d7c: 1a000024 bne 9e14 <IMFS_evaluate_sym_link+0xb4>
rtems_fatal_error_occurred (0xABCD0000);
if ( !jnode->Parent )
9d80: e5963008 ldr r3, [r6, #8]
9d84: e3530000 cmp r3, #0
9d88: 0a00001e beq 9e08 <IMFS_evaluate_sym_link+0xa8>
/*
* Move the node_access to either the symbolic links parent or
* root depending on the symbolic links path.
*/
node->node_access = jnode->Parent;
9d8c: e5803000 str r3, [r0]
rtems_filesystem_get_sym_start_loc(
9d90: e1a0100d mov r1, sp
9d94: e5960050 ldr r0, [r6, #80] ; 0x50
9d98: e1a02004 mov r2, r4
9d9c: eb00053c bl b294 <rtems_filesystem_get_sym_start_loc>
/*
* Use eval path to evaluate the path of the symbolic link.
*/
result = IMFS_eval_path(
9da0: e59d3000 ldr r3, [sp]
9da4: e5966050 ldr r6, [r6, #80] ; 0x50
9da8: e0866003 add r6, r6, r3
9dac: e1a00006 mov r0, r6
9db0: eb001547 bl f2d4 <strlen>
9db4: e1a02005 mov r2, r5
9db8: e1a01000 mov r1, r0
9dbc: e1a03004 mov r3, r4
9dc0: e1a00006 mov r0, r6
9dc4: eb000015 bl 9e20 <IMFS_eval_path>
9dc8: e1a06000 mov r6, r0
strlen( &jnode->info.sym_link.name[i] ),
flags,
node
);
IMFS_Set_handlers( node );
9dcc: e1a00004 mov r0, r4
9dd0: ebffff94 bl 9c28 <IMFS_Set_handlers>
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
9dd4: e1a00004 mov r0, r4
9dd8: e1a01005 mov r1, r5
9ddc: ebffffb7 bl 9cc0 <IMFS_evaluate_permission>
9de0: e3500000 cmp r0, #0
9de4: 0a000002 beq 9df4 <IMFS_evaluate_sym_link+0x94>
rtems_set_errno_and_return_minus_one( EACCES );
return result;
}
9de8: e1a00006 mov r0, r6
9dec: e28dd004 add sp, sp, #4
9df0: e8bd8070 pop {r4, r5, r6, pc}
/*
* Verify we have the correct permissions for this node.
*/
if ( !IMFS_evaluate_permission( node, flags ) )
rtems_set_errno_and_return_minus_one( EACCES );
9df4: eb001131 bl e2c0 <__errno> <== NOT EXECUTED
9df8: e3a0300d mov r3, #13 <== NOT EXECUTED
9dfc: e5803000 str r3, [r0] <== NOT EXECUTED
9e00: e3e06000 mvn r6, #0 <== NOT EXECUTED
9e04: eafffff7 b 9de8 <IMFS_evaluate_sym_link+0x88> <== NOT EXECUTED
if ( jnode->type != IMFS_SYM_LINK )
rtems_fatal_error_occurred (0xABCD0000);
if ( !jnode->Parent )
rtems_fatal_error_occurred( 0xBAD00000 );
9e08: e3a004ba mov r0, #-1174405120 ; 0xba000000 <== NOT EXECUTED
9e0c: e280060d add r0, r0, #13631488 ; 0xd00000 <== NOT EXECUTED
9e10: ebffeff2 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
/*
* Check for things that should never happen.
*/
if ( jnode->type != IMFS_SYM_LINK )
rtems_fatal_error_occurred (0xABCD0000);
9e14: e3a0032b mov r0, #-1409286144 ; 0xac000000 <== NOT EXECUTED
9e18: e2400833 sub r0, r0, #3342336 ; 0x330000 <== NOT EXECUTED
9e1c: ebffefef bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000a6b0 <IMFS_fifo_close>:
}
int IMFS_fifo_close(
rtems_libio_t *iop
)
{
a6b0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
a6b4: e5905038 ldr r5, [r0, #56] ; 0x38 <== NOT EXECUTED
int err = pipe_release(&JNODE2PIPE(jnode), iop);
a6b8: e1a01000 mov r1, r0 <== NOT EXECUTED
}
int IMFS_fifo_close(
rtems_libio_t *iop
)
{
a6bc: e1a04000 mov r4, r0 <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
int err = pipe_release(&JNODE2PIPE(jnode), iop);
a6c0: e2850050 add r0, r5, #80 ; 0x50 <== NOT EXECUTED
a6c4: ebfffb8f bl 9508 <pipe_release> <== NOT EXECUTED
if (! err) {
a6c8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
a6cc: 0a000002 beq a6dc <IMFS_fifo_close+0x2c> <== NOT EXECUTED
/* Free jnode if file is already unlinked and no one opens it */
if (! rtems_libio_is_file_open(jnode) && jnode->st_nlink < 1)
free(jnode);
}
IMFS_FIFO_RETURN(err);
a6d0: ba00000e blt a710 <IMFS_fifo_close+0x60> <== NOT EXECUTED
}
a6d4: e1a00006 mov r0, r6 <== NOT EXECUTED
a6d8: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
int err = pipe_release(&JNODE2PIPE(jnode), iop);
if (! err) {
iop->flags &= ~LIBIO_FLAGS_OPEN;
a6dc: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
a6e0: e3c33c01 bic r3, r3, #256 ; 0x100 <== NOT EXECUTED
a6e4: e5843014 str r3, [r4, #20] <== NOT EXECUTED
/* Free jnode if file is already unlinked and no one opens it */
if (! rtems_libio_is_file_open(jnode) && jnode->st_nlink < 1)
a6e8: e1a00005 mov r0, r5 <== NOT EXECUTED
a6ec: eb0001a8 bl ad94 <rtems_libio_is_file_open> <== NOT EXECUTED
a6f0: e3500000 cmp r0, #0 <== NOT EXECUTED
a6f4: 1afffff6 bne a6d4 <IMFS_fifo_close+0x24> <== NOT EXECUTED
a6f8: e1d533b4 ldrh r3, [r5, #52] ; 0x34 <== NOT EXECUTED
a6fc: e3530000 cmp r3, #0 <== NOT EXECUTED
a700: 1afffff3 bne a6d4 <IMFS_fifo_close+0x24> <== NOT EXECUTED
free(jnode);
a704: e1a00005 mov r0, r5 <== NOT EXECUTED
a708: ebffde66 bl 20a8 <free> <== NOT EXECUTED
a70c: eafffff0 b a6d4 <IMFS_fifo_close+0x24> <== NOT EXECUTED
}
IMFS_FIFO_RETURN(err);
a710: eb000eea bl e2c0 <__errno> <== NOT EXECUTED
a714: e2666000 rsb r6, r6, #0 <== NOT EXECUTED
a718: e5806000 str r6, [r0] <== NOT EXECUTED
a71c: e3e06000 mvn r6, #0 <== NOT EXECUTED
a720: eaffffeb b a6d4 <IMFS_fifo_close+0x24> <== NOT EXECUTED
0000a57c <IMFS_fifo_ioctl>:
void *buffer
)
{
int err;
if (command == FIONBIO) {
a57c: e3a03a46 mov r3, #286720 ; 0x46000 <== NOT EXECUTED
a580: e2833e67 add r3, r3, #1648 ; 0x670 <== NOT EXECUTED
a584: e283313a add r3, r3, #-2147483634 ; 0x8000000e <== NOT EXECUTED
a588: e1510003 cmp r1, r3 <== NOT EXECUTED
int IMFS_fifo_ioctl(
rtems_libio_t *iop,
uint32_t command,
void *buffer
)
{
a58c: e92d4010 push {r4, lr} <== NOT EXECUTED
a590: e1a03002 mov r3, r2 <== NOT EXECUTED
int err;
if (command == FIONBIO) {
a594: 0a00000a beq a5c4 <IMFS_fifo_ioctl+0x48> <== NOT EXECUTED
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
return 0;
}
}
else
err = pipe_ioctl(LIBIO2PIPE(iop), command, buffer, iop);
a598: e590c038 ldr ip, [r0, #56] ; 0x38 <== NOT EXECUTED
a59c: e1a03000 mov r3, r0 <== NOT EXECUTED
a5a0: e59c0050 ldr r0, [ip, #80] ; 0x50 <== NOT EXECUTED
a5a4: ebfffad0 bl 90ec <pipe_ioctl> <== NOT EXECUTED
IMFS_FIFO_RETURN(err);
a5a8: e3500000 cmp r0, #0 <== NOT EXECUTED
a5ac: a8bd8010 popge {r4, pc} <== NOT EXECUTED
a5b0: e2604000 rsb r4, r0, #0 <== NOT EXECUTED
a5b4: eb000f41 bl e2c0 <__errno> <== NOT EXECUTED
a5b8: e5804000 str r4, [r0] <== NOT EXECUTED
a5bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
a5c0: e8bd8010 pop {r4, pc} <== NOT EXECUTED
)
{
int err;
if (command == FIONBIO) {
if (buffer == NULL)
a5c4: e3520000 cmp r2, #0 <== NOT EXECUTED
a5c8: 03a0400e moveq r4, #14 <== NOT EXECUTED
a5cc: 0afffff8 beq a5b4 <IMFS_fifo_ioctl+0x38> <== NOT EXECUTED
err = -EFAULT;
else {
if (*(int *)buffer)
a5d0: e5924000 ldr r4, [r2] <== NOT EXECUTED
a5d4: e3540000 cmp r4, #0 <== NOT EXECUTED
iop->flags |= LIBIO_FLAGS_NO_DELAY;
a5d8: 15903014 ldrne r3, [r0, #20] <== NOT EXECUTED
else
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
a5dc: 05903014 ldreq r3, [r0, #20] <== NOT EXECUTED
if (command == FIONBIO) {
if (buffer == NULL)
err = -EFAULT;
else {
if (*(int *)buffer)
iop->flags |= LIBIO_FLAGS_NO_DELAY;
a5e0: 13833001 orrne r3, r3, #1 <== NOT EXECUTED
else
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
a5e4: 03c33001 biceq r3, r3, #1 <== NOT EXECUTED
if (command == FIONBIO) {
if (buffer == NULL)
err = -EFAULT;
else {
if (*(int *)buffer)
iop->flags |= LIBIO_FLAGS_NO_DELAY;
a5e8: 15803014 strne r3, [r0, #20] <== NOT EXECUTED
else
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
a5ec: 05803014 streq r3, [r0, #20] <== NOT EXECUTED
if (command == FIONBIO) {
if (buffer == NULL)
err = -EFAULT;
else {
if (*(int *)buffer)
iop->flags |= LIBIO_FLAGS_NO_DELAY;
a5f0: 13a00000 movne r0, #0 <== NOT EXECUTED
else
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
a5f4: 01a00004 moveq r0, r4 <== NOT EXECUTED
a5f8: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0000a524 <IMFS_fifo_lseek>:
rtems_off64_t IMFS_fifo_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
a524: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
a528: e1a0c000 mov ip, r0 <== NOT EXECUTED
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
a52c: e5900038 ldr r0, [r0, #56] ; 0x38 <== NOT EXECUTED
rtems_off64_t IMFS_fifo_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
a530: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
a534: e5900050 ldr r0, [r0, #80] ; 0x50 <== NOT EXECUTED
a538: e58dc000 str ip, [sp] <== NOT EXECUTED
a53c: ebfffacc bl 9074 <pipe_lseek> <== NOT EXECUTED
a540: e1a03000 mov r3, r0 <== NOT EXECUTED
a544: e1a04fc3 asr r4, r3, #31 <== NOT EXECUTED
IMFS_FIFO_RETURN(err);
a548: e3540000 cmp r4, #0 <== NOT EXECUTED
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
a54c: e1a05000 mov r5, r0 <== NOT EXECUTED
IMFS_FIFO_RETURN(err);
a550: ba000003 blt a564 <IMFS_fifo_lseek+0x40> <== NOT EXECUTED
}
a554: e1a01004 mov r1, r4 <== NOT EXECUTED
a558: e1a00003 mov r0, r3 <== NOT EXECUTED
a55c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
a560: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
rtems_off64_t offset,
int whence
)
{
off_t err = pipe_lseek(LIBIO2PIPE(iop), offset, whence, iop);
IMFS_FIFO_RETURN(err);
a564: eb000f55 bl e2c0 <__errno> <== NOT EXECUTED
a568: e2655000 rsb r5, r5, #0 <== NOT EXECUTED
a56c: e5805000 str r5, [r0] <== NOT EXECUTED
a570: e3e03000 mvn r3, #0 <== NOT EXECUTED
a574: e3e04000 mvn r4, #0 <== NOT EXECUTED
a578: eafffff5 b a554 <IMFS_fifo_lseek+0x30> <== NOT EXECUTED
0000a658 <IMFS_fifo_read>:
ssize_t IMFS_fifo_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
a658: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
a65c: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
ssize_t IMFS_fifo_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
a660: e1a03000 mov r3, r0 <== NOT EXECUTED
a664: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
int err = pipe_read(JNODE2PIPE(jnode), buffer, count, iop);
a668: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED
a66c: ebfffb37 bl 9350 <pipe_read> <== NOT EXECUTED
if (err > 0)
a670: e2505000 subs r5, r0, #0 <== NOT EXECUTED
a674: da000007 ble a698 <IMFS_fifo_read+0x40> <== NOT EXECUTED
IMFS_update_atime(jnode);
a678: e1a0000d mov r0, sp <== NOT EXECUTED
a67c: e3a01000 mov r1, #0 <== NOT EXECUTED
a680: ebffdeb1 bl 214c <gettimeofday> <== NOT EXECUTED
a684: e59d3000 ldr r3, [sp] <== NOT EXECUTED
a688: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED
IMFS_FIFO_RETURN(err);
}
a68c: e1a00005 mov r0, r5 <== NOT EXECUTED
a690: e28dd008 add sp, sp, #8 <== NOT EXECUTED
a694: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
int err = pipe_read(JNODE2PIPE(jnode), buffer, count, iop);
if (err > 0)
IMFS_update_atime(jnode);
IMFS_FIFO_RETURN(err);
a698: 0afffffb beq a68c <IMFS_fifo_read+0x34> <== NOT EXECUTED
a69c: eb000f07 bl e2c0 <__errno> <== NOT EXECUTED
a6a0: e2655000 rsb r5, r5, #0 <== NOT EXECUTED
a6a4: e5805000 str r5, [r0] <== NOT EXECUTED
a6a8: e3e05000 mvn r5, #0 <== NOT EXECUTED
a6ac: eafffff6 b a68c <IMFS_fifo_read+0x34> <== NOT EXECUTED
0000a5fc <IMFS_fifo_write>:
ssize_t IMFS_fifo_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
a5fc: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
a600: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
ssize_t IMFS_fifo_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
a604: e1a03000 mov r3, r0 <== NOT EXECUTED
a608: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
IMFS_jnode_t *jnode = iop->file_info;
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
a60c: e5940050 ldr r0, [r4, #80] ; 0x50 <== NOT EXECUTED
a610: ebffface bl 9150 <pipe_write> <== NOT EXECUTED
if (err > 0) {
a614: e2505000 subs r5, r0, #0 <== NOT EXECUTED
a618: da000008 ble a640 <IMFS_fifo_write+0x44> <== NOT EXECUTED
IMFS_mtime_ctime_update(jnode);
a61c: e1a0000d mov r0, sp <== NOT EXECUTED
a620: e3a01000 mov r1, #0 <== NOT EXECUTED
a624: ebffdec8 bl 214c <gettimeofday> <== NOT EXECUTED
a628: e59d3000 ldr r3, [sp] <== NOT EXECUTED
a62c: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED
a630: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED
}
IMFS_FIFO_RETURN(err);
}
a634: e1a00005 mov r0, r5 <== NOT EXECUTED
a638: e28dd008 add sp, sp, #8 <== NOT EXECUTED
a63c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
int err = pipe_write(JNODE2PIPE(jnode), buffer, count, iop);
if (err > 0) {
IMFS_mtime_ctime_update(jnode);
}
IMFS_FIFO_RETURN(err);
a640: 0afffffb beq a634 <IMFS_fifo_write+0x38> <== NOT EXECUTED
a644: eb000f1d bl e2c0 <__errno> <== NOT EXECUTED
a648: e2655000 rsb r5, r5, #0 <== NOT EXECUTED
a64c: e5805000 str r5, [r0] <== NOT EXECUTED
a650: e3e05000 mvn r5, #0 <== NOT EXECUTED
a654: eafffff6 b a634 <IMFS_fifo_write+0x38> <== NOT EXECUTED
0000a81c <IMFS_find_match_in_dir>:
IMFS_jnode_t *IMFS_find_match_in_dir(
IMFS_jnode_t *directory,
char *name
)
{
a81c: e92d4070 push {r4, r5, r6, lr}
/*
* Check for fatal errors. A NULL directory show a problem in the
* the IMFS code.
*/
assert( directory );
a820: e2505000 subs r5, r0, #0
IMFS_jnode_t *IMFS_find_match_in_dir(
IMFS_jnode_t *directory,
char *name
)
{
a824: e1a04001 mov r4, r1
/*
* Check for fatal errors. A NULL directory show a problem in the
* the IMFS code.
*/
assert( directory );
a828: 0a000020 beq a8b0 <IMFS_find_match_in_dir+0x94>
if ( !name )
a82c: e3510000 cmp r1, #0
a830: 0a00000c beq a868 <IMFS_find_match_in_dir+0x4c>
/*
* Check for "." and ".."
*/
if ( !strcmp( name, dotname ) )
a834: e1a00001 mov r0, r1
a838: e59f1084 ldr r1, [pc, #132] ; a8c4 <IMFS_find_match_in_dir+0xa8>
a83c: eb0011c8 bl ef64 <strcmp>
a840: e3500000 cmp r0, #0
a844: 0a000005 beq a860 <IMFS_find_match_in_dir+0x44>
return directory;
if ( !strcmp( name, dotdotname ) )
a848: e1a00004 mov r0, r4
a84c: e59f1074 ldr r1, [pc, #116] ; a8c8 <IMFS_find_match_in_dir+0xac>
a850: eb0011c3 bl ef64 <strcmp>
a854: e3500000 cmp r0, #0
return directory->Parent;
a858: 05955008 ldreq r5, [r5, #8]
*/
if ( !strcmp( name, dotname ) )
return directory;
if ( !strcmp( name, dotdotname ) )
a85c: 1a000004 bne a874 <IMFS_find_match_in_dir+0x58>
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
}
a860: e1a00005 mov r0, r5
a864: e8bd8070 pop {r4, r5, r6, pc}
if ( !strcmp( name, dotdotname ) )
return directory->Parent;
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
a868: e3a05000 mov r5, #0
if ( !strcmp( name, the_jnode->name ) )
return the_jnode;
}
return 0;
}
a86c: e1a00005 mov r0, r5
a870: e8bd8070 pop {r4, r5, r6, pc}
if ( !strcmp( name, dotdotname ) )
return directory->Parent;
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
a874: e5956050 ldr r6, [r5, #80] ; 0x50
a878: e2855054 add r5, r5, #84 ; 0x54
a87c: e1560005 cmp r6, r5
a880: 1a000003 bne a894 <IMFS_find_match_in_dir+0x78>
a884: eafffff7 b a868 <IMFS_find_match_in_dir+0x4c>
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
a888: e5966000 ldr r6, [r6]
if ( !strcmp( name, dotdotname ) )
return directory->Parent;
the_chain = &directory->info.directory.Entries;
for ( the_node = the_chain->first;
a88c: e1560005 cmp r6, r5
a890: 0afffff4 beq a868 <IMFS_find_match_in_dir+0x4c>
!rtems_chain_is_tail( the_chain, the_node );
the_node = the_node->next ) {
the_jnode = (IMFS_jnode_t *) the_node;
if ( !strcmp( name, the_jnode->name ) )
a894: e1a00004 mov r0, r4
a898: e286100c add r1, r6, #12
a89c: eb0011b0 bl ef64 <strcmp>
a8a0: e3500000 cmp r0, #0
a8a4: 1afffff7 bne a888 <IMFS_find_match_in_dir+0x6c>
a8a8: e1a05006 mov r5, r6
a8ac: eaffffeb b a860 <IMFS_find_match_in_dir+0x44>
/*
* Check for fatal errors. A NULL directory show a problem in the
* the IMFS code.
*/
assert( directory );
a8b0: e59f0014 ldr r0, [pc, #20] ; a8cc <IMFS_find_match_in_dir+0xb0><== NOT EXECUTED
a8b4: e3a0102a mov r1, #42 ; 0x2a <== NOT EXECUTED
a8b8: e59f2010 ldr r2, [pc, #16] ; a8d0 <IMFS_find_match_in_dir+0xb4><== NOT EXECUTED
a8bc: e59f3010 ldr r3, [pc, #16] ; a8d4 <IMFS_find_match_in_dir+0xb8><== NOT EXECUTED
a8c0: eb0000a3 bl ab54 <__assert_func> <== NOT EXECUTED
0000a764 <IMFS_fsunmount>:
((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next))
int IMFS_fsunmount(
rtems_filesystem_mount_table_entry_t *temp_mt_entry
)
{
a764: e92d4070 push {r4, r5, r6, lr}
/*
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
a768: e1a0c000 mov ip, r0
a76c: e5bc401c ldr r4, [ip, #28]!
((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next))
int IMFS_fsunmount(
rtems_filesystem_mount_table_entry_t *temp_mt_entry
)
{
a770: e24dd014 sub sp, sp, #20
a774: e1a0e000 mov lr, r0
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
loc = temp_mt_entry->mt_fs_root;
a778: e8bc000f ldm ip!, {r0, r1, r2, r3}
a77c: e1a0600d mov r6, sp
a780: e8a6000f stmia r6!, {r0, r1, r2, r3}
a784: e59c2000 ldr r2, [ip]
/*
* Set this to null to indicate that it is being unmounted.
*/
temp_mt_entry->mt_fs_root.node_access = NULL;
a788: e3a03000 mov r3, #0
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
loc = temp_mt_entry->mt_fs_root;
a78c: e5862000 str r2, [r6]
/*
* Set this to null to indicate that it is being unmounted.
*/
temp_mt_entry->mt_fs_root.node_access = NULL;
a790: e58e301c str r3, [lr, #28]
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
jnode = (IMFS_jnode_t *)temp_mt_entry->mt_fs_root.node_access;
loc = temp_mt_entry->mt_fs_root;
a794: e1a0500d mov r5, sp
temp_mt_entry->mt_fs_root.node_access = NULL;
do {
next = jnode->Parent;
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
a798: e1a0000d mov r0, sp
temp_mt_entry->mt_fs_root.node_access = NULL;
do {
next = jnode->Parent;
loc.node_access = (void *)jnode;
a79c: e58d4000 str r4, [sp]
*/
temp_mt_entry->mt_fs_root.node_access = NULL;
do {
next = jnode->Parent;
a7a0: e5946008 ldr r6, [r4, #8]
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
a7a4: ebfffd1f bl 9c28 <IMFS_Set_handlers>
if ( jnode->type != IMFS_DIRECTORY ) {
a7a8: e594304c ldr r3, [r4, #76] ; 0x4c
a7ac: e3530001 cmp r3, #1
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
a7b0: e2842054 add r2, r4, #84 ; 0x54
a7b4: 1a000010 bne a7fc <IMFS_fsunmount+0x98>
a7b8: e5943050 ldr r3, [r4, #80] ; 0x50
a7bc: e1530002 cmp r3, r2
a7c0: 0a00000d beq a7fc <IMFS_fsunmount+0x98>
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
}
if ( jnode != NULL ) {
a7c4: e3540000 cmp r4, #0
a7c8: 0a000008 beq a7f0 <IMFS_fsunmount+0x8c>
if ( jnode->type == IMFS_DIRECTORY ) {
a7cc: e594304c ldr r3, [r4, #76] ; 0x4c
a7d0: e3530001 cmp r3, #1
a7d4: 1affffef bne a798 <IMFS_fsunmount+0x34>
a7d8: e5943050 ldr r3, [r4, #80] ; 0x50
a7dc: e2842054 add r2, r4, #84 ; 0x54
a7e0: e1530002 cmp r3, r2
a7e4: 0affffeb beq a798 <IMFS_fsunmount+0x34>
if ( jnode_has_children( jnode ) )
jnode = jnode_get_first_child( jnode );
}
}
} while (jnode != NULL);
a7e8: e2534000 subs r4, r3, #0
a7ec: 1affffe9 bne a798 <IMFS_fsunmount+0x34>
a7f0: e3a00000 mov r0, #0
return 0;
}
a7f4: e28dd014 add sp, sp, #20
a7f8: e8bd8070 pop {r4, r5, r6, pc}
result = IMFS_unlink( NULL, &loc );
if (result != 0)
return -1;
jnode = next;
} else if ( jnode_has_no_children( jnode ) ) {
result = IMFS_unlink( NULL, &loc );
a7fc: e3a00000 mov r0, #0
a800: e1a0100d mov r1, sp
a804: ebffdca3 bl 1a98 <IMFS_unlink>
if (result != 0)
a808: e3500000 cmp r0, #0
a80c: 01a04006 moveq r4, r6
a810: 0affffeb beq a7c4 <IMFS_fsunmount+0x60>
if ( jnode->type == IMFS_DIRECTORY ) {
if ( jnode_has_children( jnode ) )
jnode = jnode_get_first_child( jnode );
}
}
} while (jnode != NULL);
a814: e3e00000 mvn r0, #0 <== NOT EXECUTED
a818: eafffff5 b a7f4 <IMFS_fsunmount+0x90> <== NOT EXECUTED
00001660 <IMFS_initialize_support>:
IMFS_jnode_t *jnode;
/*
* determine/check value for imfs_memfile_bytes_per_block
*/
IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block,
1660: e59fc0dc ldr ip, [pc, #220] ; 1744 <IMFS_initialize_support+0xe4>
1664: e59cc000 ldr ip, [ip]
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
1668: e35c0010 cmp ip, #16
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *memfile_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers
)
{
166c: e92d41f0 push {r4, r5, r6, r7, r8, lr}
1670: e1a04000 mov r4, r0
1674: e1a07001 mov r7, r1
1678: e1a08002 mov r8, r2
167c: e1a06003 mov r6, r3
int bit_mask;
/*
* check, whether requested bytes per block is valid
*/
for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
1680: 0a000008 beq 16a8 <IMFS_initialize_support+0x48>
1684: e3a03000 mov r3, #0
1688: e3a02020 mov r2, #32
168c: e15c0002 cmp ip, r2
1690: e2833001 add r3, r3, #1
1694: 0a000003 beq 16a8 <IMFS_initialize_support+0x48>
1698: e3530005 cmp r3, #5
169c: e1a02082 lsl r2, r2, #1
16a0: 1afffff9 bne 168c <IMFS_initialize_support+0x2c>
16a4: e3a0c080 mov ip, #128 ; 0x80 <== NOT EXECUTED
if (bit_mask == requested_bytes_per_block) {
is_valid = true;
}
}
*dest_bytes_per_block = ((is_valid)
16a8: e59f5098 ldr r5, [pc, #152] ; 1748 <IMFS_initialize_support+0xe8>
16ac: e585c000 str ip, [r5]
/*
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
16b0: eb0020fa bl 9aa0 <IMFS_create_root_node>
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
16b4: e59fe090 ldr lr, [pc, #144] ; 174c <IMFS_initialize_support+0xec>
/*
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
16b8: e584001c str r0, [r4, #28]
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
16bc: e8be000f ldm lr!, {r0, r1, r2, r3}
16c0: e284c038 add ip, r4, #56 ; 0x38
16c4: e8ac000f stmia ip!, {r0, r1, r2, r3}
16c8: e8be000f ldm lr!, {r0, r1, r2, r3}
16cc: e8ac000f stmia ip!, {r0, r1, r2, r3}
16d0: e89e000f ldm lr, {r0, r1, r2, r3}
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
16d4: e5847028 str r7, [r4, #40] ; 0x28
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
16d8: e88c000f stm ip, {r0, r1, r2, r3}
* Create the root node
*
* NOTE: UNIX root is 755 and owned by root/root (0/0).
*/
temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node();
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
16dc: e5846024 str r6, [r4, #36] ; 0x24
temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS;
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
16e0: e3a00001 mov r0, #1
16e4: e3a01010 mov r1, #16
16e8: eb0001d8 bl 1e50 <calloc>
if ( !fs_info ) {
16ec: e3500000 cmp r0, #0
16f0: 0a00000c beq 1728 <IMFS_initialize_support+0xc8>
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
16f4: e5952004 ldr r2, [r5, #4]
fs_info->ino_count = 1;
fs_info->memfile_handlers = memfile_handlers;
fs_info->directory_handlers = directory_handlers;
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
16f8: e594101c ldr r1, [r4, #28]
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
fs_info->ino_count = 1;
16fc: e3a03001 mov r3, #1
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
1700: e880000c stm r0, {r2, r3}
fs_info->ino_count = 1;
fs_info->memfile_handlers = memfile_handlers;
fs_info->directory_handlers = directory_handlers;
1704: e580600c str r6, [r0, #12]
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
fs_info->ino_count = 1;
fs_info->memfile_handlers = memfile_handlers;
1708: e5808008 str r8, [r0, #8]
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
170c: e0822003 add r2, r2, r3
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
if ( !fs_info ) {
free(temp_mt_entry->mt_fs_root.node_access);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
temp_mt_entry->fs_info = fs_info;
1710: e5840034 str r0, [r4, #52] ; 0x34
fs_info->ino_count = 1;
fs_info->memfile_handlers = memfile_handlers;
fs_info->directory_handlers = directory_handlers;
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
1714: e5813038 str r3, [r1, #56] ; 0x38
/*
* Set st_ino for the root to 1.
*/
fs_info->instance = imfs_instance++;
1718: e5852004 str r2, [r5, #4]
jnode = temp_mt_entry->mt_fs_root.node_access;
jnode->st_ino = fs_info->ino_count;
/* Initialize POSIX FIFO/pipe module */
rtems_pipe_initialize();
171c: eb001e56 bl 907c <rtems_pipe_initialize>
1720: e3a00000 mov r0, #0
return 0;
}
1724: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
/*
* Create custom file system data.
*/
fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) );
if ( !fs_info ) {
free(temp_mt_entry->mt_fs_root.node_access);
1728: e594001c ldr r0, [r4, #28] <== NOT EXECUTED
172c: eb00025d bl 20a8 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
1730: eb0032e2 bl e2c0 <__errno> <== NOT EXECUTED
1734: e3a0300c mov r3, #12 <== NOT EXECUTED
1738: e5803000 str r3, [r0] <== NOT EXECUTED
173c: e3e00000 mvn r0, #0 <== NOT EXECUTED
1740: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00001750 <IMFS_link>:
int IMFS_link(
rtems_filesystem_location_info_t *to_loc, /* IN */
rtems_filesystem_location_info_t *parent_loc, /* IN */
const char *token /* IN */
)
{
1750: e92d4070 push {r4, r5, r6, lr}
int i;
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
1754: e5903000 ldr r3, [r0]
int IMFS_link(
rtems_filesystem_location_info_t *to_loc, /* IN */
rtems_filesystem_location_info_t *parent_loc, /* IN */
const char *token /* IN */
)
{
1758: e24dd048 sub sp, sp, #72 ; 0x48
int i;
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
175c: e58d3028 str r3, [sp, #40] ; 0x28
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
1760: e1d333b4 ldrh r3, [r3, #52] ; 0x34
1764: e3530007 cmp r3, #7
int IMFS_link(
rtems_filesystem_location_info_t *to_loc, /* IN */
rtems_filesystem_location_info_t *parent_loc, /* IN */
const char *token /* IN */
)
{
1768: e1a05001 mov r5, r1
176c: e1a06002 mov r6, r2
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
1770: 8a00001e bhi 17f0 <IMFS_link+0xa0>
rtems_set_errno_and_return_minus_one( EMLINK );
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( token, strlen( token ), new_name, &i );
1774: e1a00002 mov r0, r2
1778: eb0036d5 bl f2d4 <strlen>
177c: e28d4004 add r4, sp, #4
1780: e1a01000 mov r1, r0
1784: e1a02004 mov r2, r4
1788: e28d3044 add r3, sp, #68 ; 0x44
178c: e1a00006 mov r0, r6
1790: eb002450 bl a8d8 <IMFS_get_token>
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
1794: e3a03ca2 mov r3, #41472 ; 0xa200
1798: e28dc028 add ip, sp, #40 ; 0x28
179c: e1a00005 mov r0, r5
17a0: e1a02004 mov r2, r4
17a4: e2433001 sub r3, r3, #1
17a8: e3a01003 mov r1, #3
17ac: e58dc000 str ip, [sp]
17b0: eb0020ca bl 9ae0 <IMFS_create_node>
new_name,
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
17b4: e3500000 cmp r0, #0
17b8: 0a000011 beq 1804 <IMFS_link+0xb4>
rtems_set_errno_and_return_minus_one( ENOMEM );
/*
* Increment the link count of the node being pointed to.
*/
info.hard_link.link_node->st_nlink++;
17bc: e59d3028 ldr r3, [sp, #40] ; 0x28
17c0: e1d323b4 ldrh r2, [r3, #52] ; 0x34
17c4: e2822001 add r2, r2, #1
17c8: e1c323b4 strh r2, [r3, #52] ; 0x34
IMFS_update_ctime( info.hard_link.link_node );
17cc: e28d003c add r0, sp, #60 ; 0x3c
17d0: e3a01000 mov r1, #0
17d4: eb00025c bl 214c <gettimeofday>
17d8: e59d203c ldr r2, [sp, #60] ; 0x3c
17dc: e59d3028 ldr r3, [sp, #40] ; 0x28
17e0: e5832048 str r2, [r3, #72] ; 0x48
17e4: e3a00000 mov r0, #0
return 0;
}
17e8: e28dd048 add sp, sp, #72 ; 0x48
17ec: e8bd8070 pop {r4, r5, r6, pc}
/*
* Verify this node can be linked to.
*/
info.hard_link.link_node = to_loc->node_access;
if ( info.hard_link.link_node->st_nlink >= LINK_MAX )
rtems_set_errno_and_return_minus_one( EMLINK );
17f0: eb0032b2 bl e2c0 <__errno>
17f4: e3a0301f mov r3, #31
17f8: e5803000 str r3, [r0]
17fc: e3e00000 mvn r0, #0
1800: eafffff8 b 17e8 <IMFS_link+0x98>
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
1804: eb0032ad bl e2c0 <__errno> <== NOT EXECUTED
1808: e3a0300c mov r3, #12 <== NOT EXECUTED
180c: e5803000 str r3, [r0] <== NOT EXECUTED
1810: e3e00000 mvn r0, #0 <== NOT EXECUTED
1814: eafffff3 b 17e8 <IMFS_link+0x98> <== NOT EXECUTED
0000c980 <IMFS_memfile_addblock>:
)
{
block_p memory;
block_p *block_entry_ptr;
assert( the_jnode );
c980: e2503000 subs r3, r0, #0
MEMFILE_STATIC int IMFS_memfile_addblock(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
c984: e92d4030 push {r4, r5, lr}
block_p memory;
block_p *block_entry_ptr;
assert( the_jnode );
c988: 0a00000f beq c9cc <IMFS_memfile_addblock+0x4c>
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
c98c: e593304c ldr r3, [r3, #76] ; 0x4c
c990: e3530005 cmp r3, #5
c994: 1a000012 bne c9e4 <IMFS_memfile_addblock+0x64>
if ( the_jnode->type != IMFS_MEMORY_FILE )
rtems_set_errno_and_return_minus_one( EIO );
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
c998: e3a02001 mov r2, #1
c99c: ebfffe99 bl c408 <IMFS_memfile_get_block_pointer>
if ( *block_entry_ptr )
c9a0: e5904000 ldr r4, [r0]
c9a4: e3540000 cmp r4, #0
assert( the_jnode->type == IMFS_MEMORY_FILE );
if ( the_jnode->type != IMFS_MEMORY_FILE )
rtems_set_errno_and_return_minus_one( EIO );
block_entry_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 1 );
c9a8: e1a05000 mov r5, r0
if ( *block_entry_ptr )
c9ac: 13a00000 movne r0, #0
c9b0: 18bd8030 popne {r4, r5, pc}
#if 0
fprintf(stdout, "%d %p", block, block_entry_ptr );
fflush(stdout);
#endif
memory = memfile_alloc_block();
c9b4: ebfffe86 bl c3d4 <memfile_alloc_block>
if ( !memory )
c9b8: e3500000 cmp r0, #0
return 1;
*block_entry_ptr = memory;
c9bc: 15850000 strne r0, [r5]
fprintf(stdout, "%d %p", block, block_entry_ptr );
fflush(stdout);
#endif
memory = memfile_alloc_block();
if ( !memory )
c9c0: 03a00001 moveq r0, #1
return 1;
*block_entry_ptr = memory;
c9c4: 11a00004 movne r0, r4
return 0;
}
c9c8: e8bd8030 pop {r4, r5, pc}
)
{
block_p memory;
block_p *block_entry_ptr;
assert( the_jnode );
c9cc: e3a01f5a mov r1, #360 ; 0x168 <== NOT EXECUTED
c9d0: e2811001 add r1, r1, #1 <== NOT EXECUTED
c9d4: e59f0020 ldr r0, [pc, #32] ; c9fc <IMFS_memfile_addblock+0x7c><== NOT EXECUTED
c9d8: e59f2020 ldr r2, [pc, #32] ; ca00 <IMFS_memfile_addblock+0x80><== NOT EXECUTED
c9dc: e59f3020 ldr r3, [pc, #32] ; ca04 <IMFS_memfile_addblock+0x84><== NOT EXECUTED
c9e0: ebfff85b bl ab54 <__assert_func> <== NOT EXECUTED
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
c9e4: e3a01f5b mov r1, #364 ; 0x16c <== NOT EXECUTED
c9e8: e2811001 add r1, r1, #1 <== NOT EXECUTED
c9ec: e59f0008 ldr r0, [pc, #8] ; c9fc <IMFS_memfile_addblock+0x7c><== NOT EXECUTED
c9f0: e59f2008 ldr r2, [pc, #8] ; ca00 <IMFS_memfile_addblock+0x80><== NOT EXECUTED
c9f4: e59f300c ldr r3, [pc, #12] ; ca08 <IMFS_memfile_addblock+0x88><== NOT EXECUTED
c9f8: ebfff855 bl ab54 <__assert_func> <== NOT EXECUTED
0000ca0c <IMFS_memfile_extend>:
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
off_t new_length
)
{
ca0c: e92d4df0 push {r4, r5, r6, r7, r8, sl, fp, lr}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
ca10: e2504000 subs r4, r0, #0
MEMFILE_STATIC int IMFS_memfile_extend(
IMFS_jnode_t *the_jnode,
off_t new_length
)
{
ca14: e24dd004 sub sp, sp, #4
ca18: e1a08001 mov r8, r1
ca1c: e1a06002 mov r6, r2
/*
* Perform internal consistency checks
*/
assert( the_jnode );
ca20: 0a00004f beq cb64 <IMFS_memfile_extend+0x158>
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
ca24: e594304c ldr r3, [r4, #76] ; 0x4c
ca28: e3530005 cmp r3, #5
ca2c: 1a000046 bne cb4c <IMFS_memfile_extend+0x140>
if ( the_jnode->type != IMFS_MEMORY_FILE )
rtems_set_errno_and_return_minus_one( EIO );
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
ca30: e59f3144 ldr r3, [pc, #324] ; cb7c <IMFS_memfile_extend+0x170>
ca34: e593b000 ldr fp, [r3]
ca38: e1a0312b lsr r3, fp, #2
ca3c: e0213393 mla r1, r3, r3, r3
ca40: e0223391 mla r2, r1, r3, r3
ca44: e3a03000 mov r3, #0
ca48: e1530006 cmp r3, r6
ca4c: e2423001 sub r3, r2, #1
ca50: e002039b mul r2, fp, r3
ca54: da000034 ble cb2c <IMFS_memfile_extend+0x120>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( new_length <= the_jnode->info.file.size )
ca58: e5947054 ldr r7, [r4, #84] ; 0x54
ca5c: e1560007 cmp r6, r7
ca60: e594a050 ldr sl, [r4, #80] ; 0x50
ca64: da000027 ble cb08 <IMFS_memfile_extend+0xfc>
/*
* Calculate the number of range of blocks to allocate
*/
new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK;
ca68: e1a0cfcb asr ip, fp, #31
ca6c: e1a0300c mov r3, ip
ca70: e1a0200b mov r2, fp
ca74: e1a00008 mov r0, r8
ca78: e1a01006 mov r1, r6
ca7c: e58dc000 str ip, [sp]
ca80: eb002e89 bl 184ac <__divdi3>
old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK;
ca84: e59dc000 ldr ip, [sp]
/*
* Calculate the number of range of blocks to allocate
*/
new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK;
ca88: e1a05000 mov r5, r0
old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK;
ca8c: e1a01007 mov r1, r7
ca90: e1a0000a mov r0, sl
ca94: e1a0200b mov r2, fp
ca98: e1a0300c mov r3, ip
ca9c: eb002e82 bl 184ac <__divdi3>
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
caa0: e1550000 cmp r5, r0
/*
* Calculate the number of range of blocks to allocate
*/
new_blocks = new_length / IMFS_MEMFILE_BYTES_PER_BLOCK;
old_blocks = the_jnode->info.file.size / IMFS_MEMFILE_BYTES_PER_BLOCK;
caa4: e1a0a000 mov sl, r0
/*
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
caa8: 3a00001b bcc cb1c <IMFS_memfile_extend+0x110>
caac: e1a07000 mov r7, r0
cab0: ea000002 b cac0 <IMFS_memfile_extend+0xb4>
cab4: e2877001 add r7, r7, #1
cab8: e1550007 cmp r5, r7
cabc: 3a000016 bcc cb1c <IMFS_memfile_extend+0x110>
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
cac0: e1a00004 mov r0, r4
cac4: e1a01007 mov r1, r7
cac8: ebffffac bl c980 <IMFS_memfile_addblock>
cacc: e3500000 cmp r0, #0
cad0: 0afffff7 beq cab4 <IMFS_memfile_extend+0xa8>
cad4: ea000003 b cae8 <IMFS_memfile_extend+0xdc> <== NOT EXECUTED
for ( ; block>=old_blocks ; block-- ) {
IMFS_memfile_remove_block( the_jnode, block );
cad8: e1a01007 mov r1, r7 <== NOT EXECUTED
cadc: e1a00004 mov r0, r4 <== NOT EXECUTED
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
for ( ; block>=old_blocks ; block-- ) {
cae0: e2477001 sub r7, r7, #1 <== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
cae4: ebfffef5 bl c6c0 <IMFS_memfile_remove_block> <== NOT EXECUTED
* Now allocate each of those blocks.
*/
for ( block=old_blocks ; block<=new_blocks ; block++ ) {
if ( IMFS_memfile_addblock( the_jnode, block ) ) {
for ( ; block>=old_blocks ; block-- ) {
cae8: e15a0007 cmp sl, r7 <== NOT EXECUTED
caec: 9afffff9 bls cad8 <IMFS_memfile_extend+0xcc> <== NOT EXECUTED
IMFS_memfile_remove_block( the_jnode, block );
}
rtems_set_errno_and_return_minus_one( ENOSPC );
caf0: eb0005f2 bl e2c0 <__errno> <== NOT EXECUTED
caf4: e3a0301c mov r3, #28 <== NOT EXECUTED
caf8: e5803000 str r3, [r0] <== NOT EXECUTED
cafc: e3e00000 mvn r0, #0 <== NOT EXECUTED
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
return 0;
}
cb00: e28dd004 add sp, sp, #4
cb04: e8bd8df0 pop {r4, r5, r6, r7, r8, sl, fp, pc}
rtems_set_errno_and_return_minus_one( EIO );
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( new_length <= the_jnode->info.file.size )
cb08: 1a000001 bne cb14 <IMFS_memfile_extend+0x108>
cb0c: e158000a cmp r8, sl
cb10: 8affffd4 bhi ca68 <IMFS_memfile_extend+0x5c>
/*
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
cb14: e3a00000 mov r0, #0
return 0;
cb18: eafffff8 b cb00 <IMFS_memfile_extend+0xf4>
/*
* Set the new length of the file.
*/
the_jnode->info.file.size = new_length;
cb1c: e5846054 str r6, [r4, #84] ; 0x54
cb20: e5848050 str r8, [r4, #80] ; 0x50
cb24: e3a00000 mov r0, #0
cb28: eafffff4 b cb00 <IMFS_memfile_extend+0xf4>
assert( the_jnode->type == IMFS_MEMORY_FILE );
if ( the_jnode->type != IMFS_MEMORY_FILE )
rtems_set_errno_and_return_minus_one( EIO );
if ( new_length >= IMFS_MEMFILE_MAXIMUM_SIZE )
cb2c: 1a000001 bne cb38 <IMFS_memfile_extend+0x12c>
cb30: e1520008 cmp r2, r8
cb34: 8affffc7 bhi ca58 <IMFS_memfile_extend+0x4c>
rtems_set_errno_and_return_minus_one( EINVAL );
cb38: eb0005e0 bl e2c0 <__errno> <== NOT EXECUTED
cb3c: e3a03016 mov r3, #22 <== NOT EXECUTED
cb40: e5803000 str r3, [r0] <== NOT EXECUTED
cb44: e3e00000 mvn r0, #0 <== NOT EXECUTED
cb48: eaffffec b cb00 <IMFS_memfile_extend+0xf4> <== NOT EXECUTED
assert( the_jnode );
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
cb4c: e3a01f4d mov r1, #308 ; 0x134 <== NOT EXECUTED
cb50: e2811001 add r1, r1, #1 <== NOT EXECUTED
cb54: e59f0024 ldr r0, [pc, #36] ; cb80 <IMFS_memfile_extend+0x174><== NOT EXECUTED
cb58: e59f2024 ldr r2, [pc, #36] ; cb84 <IMFS_memfile_extend+0x178><== NOT EXECUTED
cb5c: e59f3024 ldr r3, [pc, #36] ; cb88 <IMFS_memfile_extend+0x17c><== NOT EXECUTED
cb60: ebfff7fb bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Perform internal consistency checks
*/
assert( the_jnode );
cb64: e3a01e13 mov r1, #304 ; 0x130 <== NOT EXECUTED
cb68: e2811001 add r1, r1, #1 <== NOT EXECUTED
cb6c: e59f000c ldr r0, [pc, #12] ; cb80 <IMFS_memfile_extend+0x174><== NOT EXECUTED
cb70: e59f200c ldr r2, [pc, #12] ; cb84 <IMFS_memfile_extend+0x178><== NOT EXECUTED
cb74: e59f3010 ldr r3, [pc, #16] ; cb8c <IMFS_memfile_extend+0x180><== NOT EXECUTED
cb78: ebfff7f5 bl ab54 <__assert_func> <== NOT EXECUTED
0000c408 <IMFS_memfile_get_block_pointer>:
#endif
IMFS_jnode_t *the_jnode,
unsigned int block,
int malloc_it
)
{
c408: e92d41f0 push {r4, r5, r6, r7, r8, lr}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
c40c: e2504000 subs r4, r0, #0
#endif
IMFS_jnode_t *the_jnode,
unsigned int block,
int malloc_it
)
{
c410: e24dd004 sub sp, sp, #4
/*
* Perform internal consistency checks
*/
assert( the_jnode );
c414: 0a000073 beq c5e8 <IMFS_memfile_get_block_pointer+0x1e0>
if ( !the_jnode )
return NULL;
assert( the_jnode->type == IMFS_MEMORY_FILE );
c418: e594304c ldr r3, [r4, #76] ; 0x4c
c41c: e3530005 cmp r3, #5
c420: 1a00006b bne c5d4 <IMFS_memfile_get_block_pointer+0x1cc>
/*
* Is the block number in the simple indirect portion?
*/
if ( my_block <= LAST_INDIRECT ) {
c424: e59f31f8 ldr r3, [pc, #504] ; c624 <IMFS_memfile_get_block_pointer+0x21c>
c428: e5935000 ldr r5, [r3]
c42c: e1a05125 lsr r5, r5, #2
c430: e2453001 sub r3, r5, #1
c434: e1510003 cmp r1, r3
c438: 9a000019 bls c4a4 <IMFS_memfile_get_block_pointer+0x9c>
/*
* Is the block number in the doubly indirect portion?
*/
if ( my_block <= LAST_DOUBLY_INDIRECT ) {
c43c: e0265595 mla r6, r5, r5, r5 <== NOT EXECUTED
c440: e2463001 sub r3, r6, #1 <== NOT EXECUTED
c444: e1510003 cmp r1, r3 <== NOT EXECUTED
c448: 8a000025 bhi c4e4 <IMFS_memfile_get_block_pointer+0xdc> <== NOT EXECUTED
#if 0
fprintf(stdout, "(d %d) ", block );
fflush(stdout);
#endif
my_block -= FIRST_DOUBLY_INDIRECT;
c44c: e0656001 rsb r6, r5, r1 <== NOT EXECUTED
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
c450: e1a00006 mov r0, r6 <== NOT EXECUTED
c454: e1a01005 mov r1, r5 <== NOT EXECUTED
c458: e58d2000 str r2, [sp] <== NOT EXECUTED
c45c: eb002d65 bl 179f8 <__umodsi3> <== NOT EXECUTED
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c460: e1a01005 mov r1, r5 <== NOT EXECUTED
fflush(stdout);
#endif
my_block -= FIRST_DOUBLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
c464: e1a07000 mov r7, r0 <== NOT EXECUTED
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c468: e1a00006 mov r0, r6 <== NOT EXECUTED
c46c: eb002d1d bl 178e8 <__aeabi_uidiv> <== NOT EXECUTED
p = info->doubly_indirect;
if ( malloc_it ) {
c470: e59d2000 ldr r2, [sp] <== NOT EXECUTED
c474: e3520000 cmp r2, #0 <== NOT EXECUTED
#endif
my_block -= FIRST_DOUBLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c478: e1a05000 mov r5, r0 <== NOT EXECUTED
p = info->doubly_indirect;
c47c: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED
if ( malloc_it ) {
c480: 0a000047 beq c5a4 <IMFS_memfile_get_block_pointer+0x19c> <== NOT EXECUTED
if ( !p ) {
c484: e3530000 cmp r3, #0 <== NOT EXECUTED
c488: 0a00004c beq c5c0 <IMFS_memfile_get_block_pointer+0x1b8> <== NOT EXECUTED
if ( !p )
return 0;
info->doubly_indirect = p;
}
p1 = (block_p *)p[ doubly ];
c48c: e7930105 ldr r0, [r3, r5, lsl #2] <== NOT EXECUTED
if ( !p1 ) {
c490: e3500000 cmp r0, #0 <== NOT EXECUTED
if ( !p )
return 0;
info->doubly_indirect = p;
}
p1 = (block_p *)p[ doubly ];
c494: e0835105 add r5, r3, r5, lsl #2 <== NOT EXECUTED
if ( !p1 ) {
c498: 0a000034 beq c570 <IMFS_memfile_get_block_pointer+0x168> <== NOT EXECUTED
p2 = (block_p *)p1[ doubly ];
if ( !p2 )
return 0;
return (block_p *)&p2[ singly ];
c49c: e0800107 add r0, r0, r7, lsl #2 <== NOT EXECUTED
c4a0: ea000005 b c4bc <IMFS_memfile_get_block_pointer+0xb4> <== NOT EXECUTED
fprintf(stdout, "(s %d) ", block );
fflush(stdout);
#endif
p = info->indirect;
if ( malloc_it ) {
c4a4: e3520000 cmp r2, #0
if ( my_block <= LAST_INDIRECT ) {
#if 0
fprintf(stdout, "(s %d) ", block );
fflush(stdout);
#endif
p = info->indirect;
c4a8: e5940058 ldr r0, [r4, #88] ; 0x58
if ( malloc_it ) {
c4ac: 0a000035 beq c588 <IMFS_memfile_get_block_pointer+0x180>
if ( !p ) {
c4b0: e3500000 cmp r0, #0
c4b4: 0a000002 beq c4c4 <IMFS_memfile_get_block_pointer+0xbc>
}
if ( !p )
return 0;
return &info->indirect[ my_block ];
c4b8: e0800101 add r0, r0, r1, lsl #2
/*
* This means the requested block number is out of range.
*/
return 0;
}
c4bc: e28dd004 add sp, sp, #4
c4c0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
p = info->indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
c4c4: e58d1000 str r1, [sp]
c4c8: ebffffc1 bl c3d4 <memfile_alloc_block>
if ( !p )
c4cc: e3500000 cmp r0, #0
c4d0: e59d1000 ldr r1, [sp]
return 0;
info->indirect = p;
c4d4: 15840058 strne r0, [r4, #88] ; 0x58
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
if ( !p )
c4d8: 1afffff6 bne c4b8 <IMFS_memfile_get_block_pointer+0xb0>
p2 = (block_p *)p1[ doubly ];
if ( !p2 )
return 0;
return (block_p *)&p2[ singly ];
c4dc: e3a00000 mov r0, #0 <== NOT EXECUTED
c4e0: eafffff5 b c4bc <IMFS_memfile_get_block_pointer+0xb4> <== NOT EXECUTED
#endif
/*
* Is the block number in the triply indirect portion?
*/
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
c4e4: e0235596 mla r3, r6, r5, r5 <== NOT EXECUTED
c4e8: e2433001 sub r3, r3, #1 <== NOT EXECUTED
c4ec: e1510003 cmp r1, r3 <== NOT EXECUTED
c4f0: 8afffff9 bhi c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
my_block -= FIRST_TRIPLY_INDIRECT;
c4f4: e0666001 rsb r6, r6, r1 <== NOT EXECUTED
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
c4f8: e1a00006 mov r0, r6 <== NOT EXECUTED
c4fc: e1a01005 mov r1, r5 <== NOT EXECUTED
c500: e58d2000 str r2, [sp] <== NOT EXECUTED
c504: eb002d3b bl 179f8 <__umodsi3> <== NOT EXECUTED
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c508: e1a01005 mov r1, r5 <== NOT EXECUTED
*/
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
my_block -= FIRST_TRIPLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
c50c: e1a07000 mov r7, r0 <== NOT EXECUTED
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c510: e1a00006 mov r0, r6 <== NOT EXECUTED
c514: eb002cf3 bl 178e8 <__aeabi_uidiv> <== NOT EXECUTED
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
c518: e1a01005 mov r1, r5 <== NOT EXECUTED
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
my_block -= FIRST_TRIPLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
c51c: e1a08000 mov r8, r0 <== NOT EXECUTED
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
c520: eb002cf0 bl 178e8 <__aeabi_uidiv> <== NOT EXECUTED
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
c524: e1a01005 mov r1, r5 <== NOT EXECUTED
if ( my_block <= LAST_TRIPLY_INDIRECT ) {
my_block -= FIRST_TRIPLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
c528: e1a06000 mov r6, r0 <== NOT EXECUTED
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
c52c: e1a00008 mov r0, r8 <== NOT EXECUTED
c530: eb002d30 bl 179f8 <__umodsi3> <== NOT EXECUTED
p = info->triply_indirect;
if ( malloc_it ) {
c534: e59d2000 ldr r2, [sp] <== NOT EXECUTED
c538: e3520000 cmp r2, #0 <== NOT EXECUTED
my_block -= FIRST_TRIPLY_INDIRECT;
singly = my_block % IMFS_MEMFILE_BLOCK_SLOTS;
doubly = my_block / IMFS_MEMFILE_BLOCK_SLOTS;
triply = doubly / IMFS_MEMFILE_BLOCK_SLOTS;
doubly %= IMFS_MEMFILE_BLOCK_SLOTS;
c53c: e1a05000 mov r5, r0 <== NOT EXECUTED
p = info->triply_indirect;
c540: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED
if ( malloc_it ) {
c544: 0a000013 beq c598 <IMFS_memfile_get_block_pointer+0x190> <== NOT EXECUTED
if ( !p ) {
c548: e3530000 cmp r3, #0 <== NOT EXECUTED
c54c: 0a00002f beq c610 <IMFS_memfile_get_block_pointer+0x208> <== NOT EXECUTED
if ( !p )
return 0;
info->triply_indirect = p;
}
p1 = (block_p *) p[ triply ];
c550: e7932106 ldr r2, [r3, r6, lsl #2] <== NOT EXECUTED
if ( !p1 ) {
c554: e3520000 cmp r2, #0 <== NOT EXECUTED
if ( !p )
return 0;
info->triply_indirect = p;
}
p1 = (block_p *) p[ triply ];
c558: e0836106 add r6, r3, r6, lsl #2 <== NOT EXECUTED
if ( !p1 ) {
c55c: 0a000026 beq c5fc <IMFS_memfile_get_block_pointer+0x1f4> <== NOT EXECUTED
if ( !p1 )
return 0;
p[ triply ] = (block_p) p1;
}
p2 = (block_p *)p1[ doubly ];
c560: e7920105 ldr r0, [r2, r5, lsl #2] <== NOT EXECUTED
if ( !p2 ) {
c564: e3500000 cmp r0, #0 <== NOT EXECUTED
if ( !p1 )
return 0;
p[ triply ] = (block_p) p1;
}
p2 = (block_p *)p1[ doubly ];
c568: e0825105 add r5, r2, r5, lsl #2 <== NOT EXECUTED
if ( !p2 ) {
c56c: 1affffca bne c49c <IMFS_memfile_get_block_pointer+0x94> <== NOT EXECUTED
p2 = memfile_alloc_block();
c570: ebffff97 bl c3d4 <memfile_alloc_block> <== NOT EXECUTED
if ( !p2 )
c574: e3500000 cmp r0, #0 <== NOT EXECUTED
return 0;
p1[ doubly ] = (block_p) p2;
c578: 15850000 strne r0, [r5] <== NOT EXECUTED
}
p2 = (block_p *)p1[ doubly ];
if ( !p2 ) {
p2 = memfile_alloc_block();
if ( !p2 )
c57c: 0affffd6 beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
p2 = (block_p *)p1[ doubly ];
if ( !p2 )
return 0;
return (block_p *)&p2[ singly ];
c580: e0800107 add r0, r0, r7, lsl #2 <== NOT EXECUTED
c584: eaffffcc b c4bc <IMFS_memfile_get_block_pointer+0xb4> <== NOT EXECUTED
info->indirect = p;
}
return &info->indirect[ my_block ];
}
if ( !p )
c588: e3500000 cmp r0, #0
c58c: 1affffc9 bne c4b8 <IMFS_memfile_get_block_pointer+0xb0>
p2 = (block_p *)p1[ doubly ];
if ( !p2 )
return 0;
return (block_p *)&p2[ singly ];
c590: e3a00000 mov r0, #0 <== NOT EXECUTED
c594: eaffffc8 b c4bc <IMFS_memfile_get_block_pointer+0xb4> <== NOT EXECUTED
p1[ doubly ] = (block_p) p2;
}
return (block_p *)&p2[ singly ];
}
if ( !p )
c598: e3530000 cmp r3, #0 <== NOT EXECUTED
c59c: 0affffce beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
#if 0
fprintf(stdout, "(t %d %d %d %d %d) ", block, my_block, triply, doubly, singly );
fflush(stdout);
#endif
p1 = (block_p *) p[ triply ];
c5a0: e7933106 ldr r3, [r3, r6, lsl #2] <== NOT EXECUTED
if ( !p1 )
c5a4: e3530000 cmp r3, #0 <== NOT EXECUTED
c5a8: 0affffcb beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
return 0;
p2 = (block_p *)p1[ doubly ];
c5ac: e7930105 ldr r0, [r3, r5, lsl #2] <== NOT EXECUTED
if ( !p2 )
c5b0: e3500000 cmp r0, #0 <== NOT EXECUTED
c5b4: 0affffc8 beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
return 0;
return (block_p *)&p2[ singly ];
c5b8: e0800107 add r0, r0, r7, lsl #2 <== NOT EXECUTED
c5bc: eaffffbe b c4bc <IMFS_memfile_get_block_pointer+0xb4> <== NOT EXECUTED
p = info->doubly_indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
c5c0: ebffff83 bl c3d4 <memfile_alloc_block> <== NOT EXECUTED
if ( !p )
c5c4: e2503000 subs r3, r0, #0 <== NOT EXECUTED
c5c8: 0affffc3 beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
return 0;
info->doubly_indirect = p;
c5cc: e584305c str r3, [r4, #92] ; 0x5c <== NOT EXECUTED
c5d0: eaffffad b c48c <IMFS_memfile_get_block_pointer+0x84> <== NOT EXECUTED
assert( the_jnode );
if ( !the_jnode )
return NULL;
assert( the_jnode->type == IMFS_MEMORY_FILE );
c5d4: e59f004c ldr r0, [pc, #76] ; c628 <IMFS_memfile_get_block_pointer+0x220><== NOT EXECUTED
c5d8: e3a01fe3 mov r1, #908 ; 0x38c <== NOT EXECUTED
c5dc: e59f2048 ldr r2, [pc, #72] ; c62c <IMFS_memfile_get_block_pointer+0x224><== NOT EXECUTED
c5e0: e59f3048 ldr r3, [pc, #72] ; c630 <IMFS_memfile_get_block_pointer+0x228><== NOT EXECUTED
c5e4: ebfff95a bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Perform internal consistency checks
*/
assert( the_jnode );
c5e8: e59f0038 ldr r0, [pc, #56] ; c628 <IMFS_memfile_get_block_pointer+0x220><== NOT EXECUTED
c5ec: e3a01fe2 mov r1, #904 ; 0x388 <== NOT EXECUTED
c5f0: e59f2034 ldr r2, [pc, #52] ; c62c <IMFS_memfile_get_block_pointer+0x224><== NOT EXECUTED
c5f4: e59f3038 ldr r3, [pc, #56] ; c634 <IMFS_memfile_get_block_pointer+0x22c><== NOT EXECUTED
c5f8: ebfff955 bl ab54 <__assert_func> <== NOT EXECUTED
info->triply_indirect = p;
}
p1 = (block_p *) p[ triply ];
if ( !p1 ) {
p1 = memfile_alloc_block();
c5fc: ebffff74 bl c3d4 <memfile_alloc_block> <== NOT EXECUTED
if ( !p1 )
c600: e2502000 subs r2, r0, #0 <== NOT EXECUTED
c604: 0affffb4 beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
return 0;
p[ triply ] = (block_p) p1;
c608: e5862000 str r2, [r6] <== NOT EXECUTED
c60c: eaffffd3 b c560 <IMFS_memfile_get_block_pointer+0x158> <== NOT EXECUTED
p = info->triply_indirect;
if ( malloc_it ) {
if ( !p ) {
p = memfile_alloc_block();
c610: ebffff6f bl c3d4 <memfile_alloc_block> <== NOT EXECUTED
if ( !p )
c614: e2503000 subs r3, r0, #0 <== NOT EXECUTED
c618: 0affffaf beq c4dc <IMFS_memfile_get_block_pointer+0xd4> <== NOT EXECUTED
return 0;
info->triply_indirect = p;
c61c: e5843060 str r3, [r4, #96] ; 0x60 <== NOT EXECUTED
c620: eaffffca b c550 <IMFS_memfile_get_block_pointer+0x148> <== NOT EXECUTED
0000d028 <IMFS_memfile_read>:
IMFS_jnode_t *the_jnode,
off_t start,
unsigned char *destination,
unsigned int length
)
{
d028: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
d02c: e2509000 subs r9, r0, #0
IMFS_jnode_t *the_jnode,
off_t start,
unsigned char *destination,
unsigned int length
)
{
d030: e24dd014 sub sp, sp, #20
d034: e1a08003 mov r8, r3
d038: e1a0a001 mov sl, r1
d03c: e1a0b002 mov fp, r2
d040: e59d5038 ldr r5, [sp, #56] ; 0x38
/*
* Perform internal consistency checks
*/
assert( the_jnode );
d044: 0a000089 beq d270 <IMFS_memfile_read+0x248>
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE ||
d048: e599304c ldr r3, [r9, #76] ; 0x4c
d04c: e2432005 sub r2, r3, #5
d050: e3520001 cmp r2, #1
d054: 8a000096 bhi d2b4 <IMFS_memfile_read+0x28c>
/*
* Error checks on arguments
*/
assert( dest );
d058: e3580000 cmp r8, #0
d05c: 0a00008e beq d29c <IMFS_memfile_read+0x274>
/*
* If there is nothing to read, then quick exit.
*/
my_length = length;
if ( !my_length )
d060: e3550000 cmp r5, #0
d064: 0a000076 beq d244 <IMFS_memfile_read+0x21c>
/*
* Linear files (as created from a tar file are easier to handle
* than block files).
*/
if (the_jnode->type == IMFS_LINEAR_FILE) {
d068: e3530006 cmp r3, #6
d06c: 0a00005a beq d1dc <IMFS_memfile_read+0x1b4>
* If the last byte we are supposed to read is past the end of this
* in memory file, then shorten the length to read.
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size )
d070: e5993054 ldr r3, [r9, #84] ; 0x54
d074: e3a02000 mov r2, #0
d078: e1520003 cmp r2, r3
/*
* If the last byte we are supposed to read is past the end of this
* in memory file, then shorten the length to read.
*/
last_byte = start + length;
d07c: e1a03001 mov r3, r1
if ( last_byte > the_jnode->info.file.size )
d080: e5992050 ldr r2, [r9, #80] ; 0x50
d084: e0851001 add r1, r5, r1
d088: da00004f ble d1cc <IMFS_memfile_read+0x1a4>
my_length = the_jnode->info.file.size - start;
d08c: e0635002 rsb r5, r3, r2
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
d090: e59f624c ldr r6, [pc, #588] ; d2e4 <IMFS_memfile_read+0x2bc>
d094: e5964000 ldr r4, [r6]
d098: e1a0000a mov r0, sl
d09c: e1a02004 mov r2, r4
d0a0: e1a03fc2 asr r3, r2, #31
d0a4: e1a0100b mov r1, fp
d0a8: e98d000c stmib sp, {r2, r3}
d0ac: eb002e28 bl 18954 <__moddi3>
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
d0b0: e1a0100b mov r1, fp
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
d0b4: e1a0c000 mov ip, r0
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
d0b8: e99d000c ldmib sp, {r2, r3}
d0bc: e1a0000a mov r0, sl
d0c0: e58dc000 str ip, [sp]
d0c4: eb002cf8 bl 184ac <__divdi3>
if ( start_offset ) {
d0c8: e59dc000 ldr ip, [sp]
d0cc: e35c0000 cmp ip, #0
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
d0d0: e1a07000 mov r7, r0
if ( start_offset ) {
d0d4: 01a0a00c moveq sl, ip
d0d8: 0a000013 beq d12c <IMFS_memfile_read+0x104>
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
d0dc: e1a00009 mov r0, r9
d0e0: e1a01007 mov r1, r7
d0e4: e3a02000 mov r2, #0
d0e8: e58dc000 str ip, [sp]
d0ec: ebfffcc5 bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
d0f0: e3500000 cmp r0, #0
d0f4: e59dc000 ldr ip, [sp]
d0f8: 0a000073 beq d2cc <IMFS_memfile_read+0x2a4>
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
d0fc: e06ca004 rsb sl, ip, r4
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
d100: e5901000 ldr r1, [r0]
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
d104: e155000a cmp r5, sl
d108: 31a0a005 movcc sl, r5
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
d10c: e1a00008 mov r0, r8
d110: e081100c add r1, r1, ip
d114: e1a0200a mov r2, sl
d118: eb000676 bl eaf8 <memcpy>
dest += to_copy;
block++;
my_length -= to_copy;
d11c: e5964000 ldr r4, [r6]
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ start_offset ], to_copy );
dest += to_copy;
d120: e088800a add r8, r8, sl
block++;
d124: e2877001 add r7, r7, #1
my_length -= to_copy;
d128: e06a5005 rsb r5, sl, r5
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
d12c: e1550004 cmp r5, r4
d130: 3a000010 bcc d178 <IMFS_memfile_read+0x150>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
d134: e1a00009 mov r0, r9
d138: e1a01007 mov r1, r7
d13c: e3a02000 mov r2, #0
d140: ebfffcb0 bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
d144: e3500000 cmp r0, #0
d148: 0a000042 beq d258 <IMFS_memfile_read+0x230>
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
d14c: e5901000 ldr r1, [r0]
d150: e1a02004 mov r2, r4
d154: e1a00008 mov r0, r8
d158: eb000666 bl eaf8 <memcpy>
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
d15c: e5963000 ldr r3, [r6]
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
dest += to_copy;
block++;
my_length -= to_copy;
d160: e0645005 rsb r5, r4, r5
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
d164: e1530005 cmp r3, r5
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], to_copy );
dest += to_copy;
d168: e0888004 add r8, r8, r4
block++;
d16c: e2877001 add r7, r7, #1
my_length -= to_copy;
copied += to_copy;
d170: e08aa004 add sl, sl, r4
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
d174: 9affffee bls d134 <IMFS_memfile_read+0x10c>
* Phase 3: possibly the first part of one block
*/
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
if ( my_length ) {
d178: e3550000 cmp r5, #0
d17c: 0a00000a beq d1ac <IMFS_memfile_read+0x184>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
d180: e1a01007 mov r1, r7
d184: e1a00009 mov r0, r9
d188: e3a02000 mov r2, #0
d18c: ebfffc9d bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
d190: e2503000 subs r3, r0, #0
d194: 0a00003a beq d284 <IMFS_memfile_read+0x25c>
if ( !block_ptr )
return copied;
memcpy( dest, &(*block_ptr)[ 0 ], my_length );
d198: e1a00008 mov r0, r8
d19c: e5931000 ldr r1, [r3]
d1a0: e1a02005 mov r2, r5
d1a4: eb000653 bl eaf8 <memcpy>
copied += my_length;
d1a8: e08aa005 add sl, sl, r5
}
IMFS_update_atime( the_jnode );
d1ac: e28d000c add r0, sp, #12
d1b0: e3a01000 mov r1, #0
d1b4: ebffd3e4 bl 214c <gettimeofday>
d1b8: e59d300c ldr r3, [sp, #12]
d1bc: e5893040 str r3, [r9, #64] ; 0x40
return copied;
d1c0: e1a0000a mov r0, sl
}
d1c4: e28dd014 add sp, sp, #20
d1c8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
* If the last byte we are supposed to read is past the end of this
* in memory file, then shorten the length to read.
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size )
d1cc: 1affffaf bne d090 <IMFS_memfile_read+0x68>
d1d0: e1510002 cmp r1, r2
d1d4: 9affffad bls d090 <IMFS_memfile_read+0x68>
d1d8: eaffffab b d08c <IMFS_memfile_read+0x64>
if (the_jnode->type == IMFS_LINEAR_FILE) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
if (my_length > (the_jnode->info.linearfile.size - start))
d1dc: e2894050 add r4, r9, #80 ; 0x50 <== NOT EXECUTED
d1e0: e8940018 ldm r4, {r3, r4} <== NOT EXECUTED
d1e4: e1a00003 mov r0, r3 <== NOT EXECUTED
d1e8: e1a01004 mov r1, r4 <== NOT EXECUTED
d1ec: e3a02000 mov r2, #0 <== NOT EXECUTED
d1f0: e050000a subs r0, r0, sl <== NOT EXECUTED
d1f4: e0c1100b sbc r1, r1, fp <== NOT EXECUTED
d1f8: e1520001 cmp r2, r1 <== NOT EXECUTED
* than block files).
*/
if (the_jnode->type == IMFS_LINEAR_FILE) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
d1fc: e5992058 ldr r2, [r9, #88] ; 0x58 <== NOT EXECUTED
if (my_length > (the_jnode->info.linearfile.size - start))
d200: da00000b ble d234 <IMFS_memfile_read+0x20c> <== NOT EXECUTED
my_length = the_jnode->info.linearfile.size - start;
d204: e06a5003 rsb r5, sl, r3 <== NOT EXECUTED
memcpy(dest, &file_ptr[start], my_length);
d208: e082100a add r1, r2, sl <== NOT EXECUTED
d20c: e1a00008 mov r0, r8 <== NOT EXECUTED
d210: e1a02005 mov r2, r5 <== NOT EXECUTED
d214: eb000637 bl eaf8 <memcpy> <== NOT EXECUTED
IMFS_update_atime( the_jnode );
d218: e28d000c add r0, sp, #12 <== NOT EXECUTED
d21c: e3a01000 mov r1, #0 <== NOT EXECUTED
d220: ebffd3c9 bl 214c <gettimeofday> <== NOT EXECUTED
d224: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
return my_length;
d228: e1a00005 mov r0, r5 <== NOT EXECUTED
if (my_length > (the_jnode->info.linearfile.size - start))
my_length = the_jnode->info.linearfile.size - start;
memcpy(dest, &file_ptr[start], my_length);
IMFS_update_atime( the_jnode );
d22c: e5893040 str r3, [r9, #64] ; 0x40 <== NOT EXECUTED
return my_length;
d230: eaffffe3 b d1c4 <IMFS_memfile_read+0x19c> <== NOT EXECUTED
if (the_jnode->type == IMFS_LINEAR_FILE) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
if (my_length > (the_jnode->info.linearfile.size - start))
d234: 1afffff3 bne d208 <IMFS_memfile_read+0x1e0> <== NOT EXECUTED
d238: e1550000 cmp r5, r0 <== NOT EXECUTED
d23c: 8afffff0 bhi d204 <IMFS_memfile_read+0x1dc> <== NOT EXECUTED
d240: eafffff0 b d208 <IMFS_memfile_read+0x1e0> <== NOT EXECUTED
* If there is nothing to read, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
d244: eb00041d bl e2c0 <__errno> <== NOT EXECUTED
d248: e3a03016 mov r3, #22 <== NOT EXECUTED
d24c: e5803000 str r3, [r0] <== NOT EXECUTED
d250: e3e00000 mvn r0, #0 <== NOT EXECUTED
d254: eaffffda b d1c4 <IMFS_memfile_read+0x19c> <== NOT EXECUTED
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
d258: e3a01fa9 mov r1, #676 ; 0x2a4 <== NOT EXECUTED
d25c: e2811003 add r1, r1, #3 <== NOT EXECUTED
d260: e59f0080 ldr r0, [pc, #128] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d264: e59f2080 ldr r2, [pc, #128] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d268: e59f3080 ldr r3, [pc, #128] ; d2f0 <IMFS_memfile_read+0x2c8><== NOT EXECUTED
d26c: ebfff638 bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Perform internal consistency checks
*/
assert( the_jnode );
d270: e59f0070 ldr r0, [pc, #112] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d274: e3a01f93 mov r1, #588 ; 0x24c <== NOT EXECUTED
d278: e59f206c ldr r2, [pc, #108] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d27c: e59f3070 ldr r3, [pc, #112] ; d2f4 <IMFS_memfile_read+0x2cc><== NOT EXECUTED
d280: ebfff633 bl ab54 <__assert_func> <== NOT EXECUTED
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
if ( my_length ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
d284: e3a01fae mov r1, #696 ; 0x2b8 <== NOT EXECUTED
d288: e2811001 add r1, r1, #1 <== NOT EXECUTED
d28c: e59f0054 ldr r0, [pc, #84] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d290: e59f2054 ldr r2, [pc, #84] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d294: e59f3054 ldr r3, [pc, #84] ; d2f0 <IMFS_memfile_read+0x2c8><== NOT EXECUTED
d298: ebfff62d bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Error checks on arguments
*/
assert( dest );
d29c: e3a01f96 mov r1, #600 ; 0x258 <== NOT EXECUTED
d2a0: e2811002 add r1, r1, #2 <== NOT EXECUTED
d2a4: e59f003c ldr r0, [pc, #60] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d2a8: e59f203c ldr r2, [pc, #60] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d2ac: e59f3044 ldr r3, [pc, #68] ; d2f8 <IMFS_memfile_read+0x2d0><== NOT EXECUTED
d2b0: ebfff627 bl ab54 <__assert_func> <== NOT EXECUTED
assert( the_jnode );
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE ||
d2b4: e3a01e25 mov r1, #592 ; 0x250 <== NOT EXECUTED
d2b8: e2811001 add r1, r1, #1 <== NOT EXECUTED
d2bc: e59f0024 ldr r0, [pc, #36] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d2c0: e59f2024 ldr r2, [pc, #36] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d2c4: e59f3030 ldr r3, [pc, #48] ; d2fc <IMFS_memfile_read+0x2d4><== NOT EXECUTED
d2c8: ebfff621 bl ab54 <__assert_func> <== NOT EXECUTED
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
d2cc: e3a01fa5 mov r1, #660 ; 0x294 <== NOT EXECUTED
d2d0: e2811002 add r1, r1, #2 <== NOT EXECUTED
d2d4: e59f000c ldr r0, [pc, #12] ; d2e8 <IMFS_memfile_read+0x2c0><== NOT EXECUTED
d2d8: e59f200c ldr r2, [pc, #12] ; d2ec <IMFS_memfile_read+0x2c4><== NOT EXECUTED
d2dc: e59f300c ldr r3, [pc, #12] ; d2f0 <IMFS_memfile_read+0x2c8><== NOT EXECUTED
d2e0: ebfff61b bl ab54 <__assert_func> <== NOT EXECUTED
0000c710 <IMFS_memfile_remove>:
*/
int IMFS_memfile_remove(
IMFS_jnode_t *the_jnode
)
{
c710: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
c714: e250a000 subs sl, r0, #0
c718: 0a00004f beq c85c <IMFS_memfile_remove+0x14c>
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
c71c: e59a304c ldr r3, [sl, #76] ; 0x4c
c720: e3530005 cmp r3, #5
c724: 1a000052 bne c874 <IMFS_memfile_remove+0x164>
/*
* Eventually this could be set smarter at each call to
* memfile_free_blocks_in_table to greatly speed this up.
*/
to_free = IMFS_MEMFILE_BLOCK_SLOTS;
c728: e59f615c ldr r6, [pc, #348] ; c88c <IMFS_memfile_remove+0x17c>
* + indirect
* + doubly indirect
* + triply indirect
*/
info = &the_jnode->info.file;
c72c: e59a3058 ldr r3, [sl, #88] ; 0x58
/*
* Eventually this could be set smarter at each call to
* memfile_free_blocks_in_table to greatly speed this up.
*/
to_free = IMFS_MEMFILE_BLOCK_SLOTS;
c730: e5967000 ldr r7, [r6]
* + indirect
* + doubly indirect
* + triply indirect
*/
info = &the_jnode->info.file;
c734: e3530000 cmp r3, #0
/*
* Eventually this could be set smarter at each call to
* memfile_free_blocks_in_table to greatly speed this up.
*/
to_free = IMFS_MEMFILE_BLOCK_SLOTS;
c738: e1a07127 lsr r7, r7, #2
*/
info = &the_jnode->info.file;
if ( info->indirect ) {
memfile_free_blocks_in_table( &info->indirect, to_free );
c73c: 128a0058 addne r0, sl, #88 ; 0x58
c740: 11a01007 movne r1, r7
c744: 1bffffbb blne c638 <memfile_free_blocks_in_table>
}
if ( info->doubly_indirect ) {
c748: e59a305c ldr r3, [sl, #92] ; 0x5c
c74c: e3530000 cmp r3, #0
c750: 0a000014 beq c7a8 <IMFS_memfile_remove+0x98>
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
c754: e5962000 ldr r2, [r6] <== NOT EXECUTED
c758: e1b02122 lsrs r2, r2, #2 <== NOT EXECUTED
c75c: 0a00000e beq c79c <IMFS_memfile_remove+0x8c> <== NOT EXECUTED
c760: e3a02000 mov r2, #0 <== NOT EXECUTED
c764: e1a04002 mov r4, r2 <== NOT EXECUTED
c768: ea000000 b c770 <IMFS_memfile_remove+0x60> <== NOT EXECUTED
c76c: e59a305c ldr r3, [sl, #92] ; 0x5c <== NOT EXECUTED
if ( info->doubly_indirect[i] ) {
c770: e7931102 ldr r1, [r3, r2, lsl #2] <== NOT EXECUTED
c774: e3510000 cmp r1, #0 <== NOT EXECUTED
c778: e1a02102 lsl r2, r2, #2 <== NOT EXECUTED
memfile_free_blocks_in_table(
c77c: 10830002 addne r0, r3, r2 <== NOT EXECUTED
c780: 11a01007 movne r1, r7 <== NOT EXECUTED
c784: 1bffffab blne c638 <memfile_free_blocks_in_table> <== NOT EXECUTED
memfile_free_blocks_in_table( &info->indirect, to_free );
}
if ( info->doubly_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
c788: e5963000 ldr r3, [r6] <== NOT EXECUTED
c78c: e2844001 add r4, r4, #1 <== NOT EXECUTED
c790: e1540123 cmp r4, r3, lsr #2 <== NOT EXECUTED
c794: e1a02004 mov r2, r4 <== NOT EXECUTED
c798: 3afffff3 bcc c76c <IMFS_memfile_remove+0x5c> <== NOT EXECUTED
if ( info->doubly_indirect[i] ) {
memfile_free_blocks_in_table(
(block_p **)&info->doubly_indirect[i], to_free );
}
}
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
c79c: e28a005c add r0, sl, #92 ; 0x5c <== NOT EXECUTED
c7a0: e1a01007 mov r1, r7 <== NOT EXECUTED
c7a4: ebffffa3 bl c638 <memfile_free_blocks_in_table> <== NOT EXECUTED
}
if ( info->triply_indirect ) {
c7a8: e59a0060 ldr r0, [sl, #96] ; 0x60
c7ac: e3500000 cmp r0, #0
c7b0: 0a000027 beq c854 <IMFS_memfile_remove+0x144>
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
c7b4: e5963000 ldr r3, [r6] <== NOT EXECUTED
c7b8: e1b03123 lsrs r3, r3, #2 <== NOT EXECUTED
c7bc: 0a000021 beq c848 <IMFS_memfile_remove+0x138> <== NOT EXECUTED
p = (block_p *) info->triply_indirect[i];
c7c0: e5905000 ldr r5, [r0] <== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
c7c4: e3550000 cmp r5, #0 <== NOT EXECUTED
c7c8: 13a09000 movne r9, #0 <== NOT EXECUTED
c7cc: 11a08009 movne r8, r9 <== NOT EXECUTED
c7d0: 0a00001c beq c848 <IMFS_memfile_remove+0x138> <== NOT EXECUTED
break;
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
c7d4: e3530000 cmp r3, #0 <== NOT EXECUTED
c7d8: 0a00000d beq c814 <IMFS_memfile_remove+0x104> <== NOT EXECUTED
c7dc: e3a00000 mov r0, #0 <== NOT EXECUTED
c7e0: e1a04000 mov r4, r0 <== NOT EXECUTED
if ( p[j] ) {
c7e4: e7953100 ldr r3, [r5, r0, lsl #2] <== NOT EXECUTED
c7e8: e3530000 cmp r3, #0 <== NOT EXECUTED
c7ec: e1a00100 lsl r0, r0, #2 <== NOT EXECUTED
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
c7f0: 10850000 addne r0, r5, r0 <== NOT EXECUTED
c7f4: 11a01007 movne r1, r7 <== NOT EXECUTED
c7f8: 1bffff8e blne c638 <memfile_free_blocks_in_table> <== NOT EXECUTED
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
p = (block_p *) info->triply_indirect[i];
if ( !p ) /* ensure we have a valid pointer */
break;
for ( j=0 ; j<IMFS_MEMFILE_BLOCK_SLOTS ; j++ ) {
c7fc: e5963000 ldr r3, [r6] <== NOT EXECUTED
c800: e2844001 add r4, r4, #1 <== NOT EXECUTED
c804: e1540123 cmp r4, r3, lsr #2 <== NOT EXECUTED
c808: e1a00004 mov r0, r4 <== NOT EXECUTED
c80c: 3afffff4 bcc c7e4 <IMFS_memfile_remove+0xd4> <== NOT EXECUTED
c810: e59a0060 ldr r0, [sl, #96] ; 0x60 <== NOT EXECUTED
if ( p[j] ) {
memfile_free_blocks_in_table( (block_p **)&p[j], to_free);
}
}
memfile_free_blocks_in_table(
c814: e0800009 add r0, r0, r9 <== NOT EXECUTED
c818: e1a01007 mov r1, r7 <== NOT EXECUTED
c81c: ebffff85 bl c638 <memfile_free_blocks_in_table> <== NOT EXECUTED
memfile_free_blocks_in_table( &info->doubly_indirect, to_free );
}
if ( info->triply_indirect ) {
for ( i=0 ; i<IMFS_MEMFILE_BLOCK_SLOTS ; i++ ) {
c820: e5963000 ldr r3, [r6] <== NOT EXECUTED
c824: e2888001 add r8, r8, #1 <== NOT EXECUTED
c828: e1a03123 lsr r3, r3, #2 <== NOT EXECUTED
c82c: e1530008 cmp r3, r8 <== NOT EXECUTED
c830: 9a000004 bls c848 <IMFS_memfile_remove+0x138> <== NOT EXECUTED
p = (block_p *) info->triply_indirect[i];
c834: e59a0060 ldr r0, [sl, #96] ; 0x60 <== NOT EXECUTED
c838: e7905108 ldr r5, [r0, r8, lsl #2] <== NOT EXECUTED
if ( !p ) /* ensure we have a valid pointer */
c83c: e3550000 cmp r5, #0 <== NOT EXECUTED
c840: e1a09108 lsl r9, r8, #2 <== NOT EXECUTED
c844: 1affffe2 bne c7d4 <IMFS_memfile_remove+0xc4> <== NOT EXECUTED
}
}
memfile_free_blocks_in_table(
(block_p **)&info->triply_indirect[i], to_free );
}
memfile_free_blocks_in_table(
c848: e28a0060 add r0, sl, #96 ; 0x60 <== NOT EXECUTED
c84c: e1a01007 mov r1, r7 <== NOT EXECUTED
c850: ebffff78 bl c638 <memfile_free_blocks_in_table> <== NOT EXECUTED
(block_p **)&info->triply_indirect, to_free );
}
return 0;
}
c854: e3a00000 mov r0, #0
c858: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
c85c: e3a01f7b mov r1, #492 ; 0x1ec <== NOT EXECUTED
c860: e2811002 add r1, r1, #2 <== NOT EXECUTED
c864: e59f0024 ldr r0, [pc, #36] ; c890 <IMFS_memfile_remove+0x180><== NOT EXECUTED
c868: e59f2024 ldr r2, [pc, #36] ; c894 <IMFS_memfile_remove+0x184><== NOT EXECUTED
c86c: e59f3024 ldr r3, [pc, #36] ; c898 <IMFS_memfile_remove+0x188><== NOT EXECUTED
c870: ebfff8b7 bl ab54 <__assert_func> <== NOT EXECUTED
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
c874: e3a01e1f mov r1, #496 ; 0x1f0 <== NOT EXECUTED
c878: e2811002 add r1, r1, #2 <== NOT EXECUTED
c87c: e59f000c ldr r0, [pc, #12] ; c890 <IMFS_memfile_remove+0x180><== NOT EXECUTED
c880: e59f200c ldr r2, [pc, #12] ; c894 <IMFS_memfile_remove+0x184><== NOT EXECUTED
c884: e59f3010 ldr r3, [pc, #16] ; c89c <IMFS_memfile_remove+0x18c><== NOT EXECUTED
c888: ebfff8b1 bl ab54 <__assert_func> <== NOT EXECUTED
0000c6c0 <IMFS_memfile_remove_block>:
MEMFILE_STATIC int IMFS_memfile_remove_block(
IMFS_jnode_t *the_jnode,
unsigned int block
)
{
c6c0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
block_p *block_ptr;
block_p ptr;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
c6c4: e3a02000 mov r2, #0 <== NOT EXECUTED
c6c8: ebffff4e bl c408 <IMFS_memfile_get_block_pointer> <== NOT EXECUTED
assert( block_ptr );
c6cc: e2503000 subs r3, r0, #0 <== NOT EXECUTED
c6d0: 0a000005 beq c6ec <IMFS_memfile_remove_block+0x2c> <== NOT EXECUTED
if ( block_ptr ) {
ptr = *block_ptr;
*block_ptr = 0;
c6d4: e3a02000 mov r2, #0 <== NOT EXECUTED
block_p ptr;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
if ( block_ptr ) {
ptr = *block_ptr;
c6d8: e5930000 ldr r0, [r3] <== NOT EXECUTED
*block_ptr = 0;
c6dc: e5832000 str r2, [r3] <== NOT EXECUTED
memfile_free_block( ptr );
c6e0: ebffff33 bl c3b4 <memfile_free_block> <== NOT EXECUTED
}
return 1;
}
c6e4: e3a00001 mov r0, #1 <== NOT EXECUTED
c6e8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
{
block_p *block_ptr;
block_p ptr;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
c6ec: e3a01f65 mov r1, #404 ; 0x194 <== NOT EXECUTED
c6f0: e2811002 add r1, r1, #2 <== NOT EXECUTED
c6f4: e59f0008 ldr r0, [pc, #8] ; c704 <IMFS_memfile_remove_block+0x44><== NOT EXECUTED
c6f8: e59f2008 ldr r2, [pc, #8] ; c708 <IMFS_memfile_remove_block+0x48><== NOT EXECUTED
c6fc: e59f3008 ldr r3, [pc, #8] ; c70c <IMFS_memfile_remove_block+0x4c><== NOT EXECUTED
c700: ebfff913 bl ab54 <__assert_func> <== NOT EXECUTED
0000cca4 <IMFS_memfile_write>:
IMFS_jnode_t *the_jnode,
off_t start,
const unsigned char *source,
unsigned int length
)
{
cca4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
/*
* Perform internal consistency checks
*/
assert( the_jnode );
cca8: e2509000 subs r9, r0, #0
IMFS_jnode_t *the_jnode,
off_t start,
const unsigned char *source,
unsigned int length
)
{
ccac: e24dd014 sub sp, sp, #20
ccb0: e1a06001 mov r6, r1
ccb4: e1a07002 mov r7, r2
ccb8: e1a08003 mov r8, r3
ccbc: e59da038 ldr sl, [sp, #56] ; 0x38
/*
* Perform internal consistency checks
*/
assert( the_jnode );
ccc0: 0a000079 beq ceac <IMFS_memfile_write+0x208>
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
ccc4: e599304c ldr r3, [r9, #76] ; 0x4c
ccc8: e3530005 cmp r3, #5
cccc: 1a000070 bne ce94 <IMFS_memfile_write+0x1f0>
/*
* Error check arguments
*/
assert( source );
ccd0: e3580000 cmp r8, #0
ccd4: 0a000085 beq cef0 <IMFS_memfile_write+0x24c>
/*
* If there is nothing to write, then quick exit.
*/
my_length = length;
if ( !my_length )
ccd8: e35a0000 cmp sl, #0
ccdc: 0a000062 beq ce6c <IMFS_memfile_write+0x1c8>
* If the last byte we are supposed to write is past the end of this
* in memory file, then extend the length.
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size ) {
cce0: e5993054 ldr r3, [r9, #84] ; 0x54
cce4: e3530000 cmp r3, #0
cce8: e08a1001 add r1, sl, r1
ccec: ba000054 blt ce44 <IMFS_memfile_write+0x1a0>
ccf0: 0a000050 beq ce38 <IMFS_memfile_write+0x194>
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
ccf4: e59f520c ldr r5, [pc, #524] ; cf08 <IMFS_memfile_write+0x264>
ccf8: e5954000 ldr r4, [r5]
ccfc: e1a00006 mov r0, r6
cd00: e1a02004 mov r2, r4
cd04: e1a03fc2 asr r3, r2, #31
cd08: e1a01007 mov r1, r7
cd0c: e98d000c stmib sp, {r2, r3}
cd10: eb002f0f bl 18954 <__moddi3>
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
cd14: e1a01007 mov r1, r7
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
cd18: e1a0b000 mov fp, r0
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
cd1c: e99d000c ldmib sp, {r2, r3}
cd20: e1a00006 mov r0, r6
cd24: eb002de0 bl 184ac <__divdi3>
if ( start_offset ) {
cd28: e35b0000 cmp fp, #0
cd2c: 01a0700a moveq r7, sl
/*
* Phase 1: possibly the last part of one block
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
cd30: e1a06000 mov r6, r0
if ( start_offset ) {
cd34: 01a0a00b moveq sl, fp
cd38: 1a000028 bne cde0 <IMFS_memfile_write+0x13c>
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
cd3c: e1570004 cmp r7, r4
cd40: 3a000010 bcc cd88 <IMFS_memfile_write+0xe4>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
cd44: e1a00009 mov r0, r9
cd48: e1a01006 mov r1, r6
cd4c: e3a02000 mov r2, #0
cd50: ebfffdac bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
cd54: e3500000 cmp r0, #0
cd58: 0a000048 beq ce80 <IMFS_memfile_write+0x1dc>
if ( !block_ptr )
return copied;
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
cd5c: e1a01008 mov r1, r8
cd60: e5900000 ldr r0, [r0]
cd64: e1a02004 mov r2, r4
cd68: eb000762 bl eaf8 <memcpy>
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
cd6c: e5953000 ldr r3, [r5]
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
src += to_copy;
block++;
my_length -= to_copy;
cd70: e0647007 rsb r7, r4, r7
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
cd74: e1530007 cmp r3, r7
return copied;
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
src += to_copy;
cd78: e0888004 add r8, r8, r4
block++;
cd7c: e2866001 add r6, r6, #1
*
* This routine writes the specified data buffer into the in memory
* file pointed to by the_jnode. The file is extended as needed.
*/
MEMFILE_STATIC ssize_t IMFS_memfile_write(
cd80: e08aa004 add sl, sl, r4
/*
* Phase 2: all of zero of more blocks
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
cd84: 9affffee bls cd44 <IMFS_memfile_write+0xa0>
*/
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
to_copy = my_length;
if ( my_length ) {
cd88: e3570000 cmp r7, #0
cd8c: 0a00000a beq cdbc <IMFS_memfile_write+0x118>
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
cd90: e1a01006 mov r1, r6
cd94: e1a00009 mov r0, r9
cd98: e3a02000 mov r2, #0
cd9c: ebfffd99 bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
cda0: e3500000 cmp r0, #0
cda4: 0a00004b beq ced8 <IMFS_memfile_write+0x234>
if ( !block_ptr )
return copied;
#if 0
fprintf(stdout, "write %d in %d: %*s\n", to_copy, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ 0 ], src, my_length );
cda8: e5900000 ldr r0, [r0]
cdac: e1a01008 mov r1, r8
cdb0: e1a02007 mov r2, r7
cdb4: eb00074f bl eaf8 <memcpy>
my_length = 0;
copied += to_copy;
cdb8: e08aa007 add sl, sl, r7
}
IMFS_mtime_ctime_update( the_jnode );
cdbc: e28d000c add r0, sp, #12
cdc0: e3a01000 mov r1, #0
cdc4: ebffd4e0 bl 214c <gettimeofday>
cdc8: e59d300c ldr r3, [sp, #12]
cdcc: e5893048 str r3, [r9, #72] ; 0x48
cdd0: e5893044 str r3, [r9, #68] ; 0x44
return copied;
}
cdd4: e1a0000a mov r0, sl
cdd8: e28dd014 add sp, sp, #20
cddc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
cde0: e1a00009 mov r0, r9
cde4: e1a01006 mov r1, r6
cde8: e3a02000 mov r2, #0
cdec: ebfffd85 bl c408 <IMFS_memfile_get_block_pointer>
assert( block_ptr );
cdf0: e3500000 cmp r0, #0
cdf4: 0a000032 beq cec4 <IMFS_memfile_write+0x220>
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
cdf8: e06b3004 rsb r3, fp, r4
if ( !block_ptr )
return copied;
#if 0
fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
cdfc: e5900000 ldr r0, [r0]
*/
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
ce00: e153000a cmp r3, sl
ce04: 21a0300a movcs r3, sl
if ( !block_ptr )
return copied;
#if 0
fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
ce08: e1a01008 mov r1, r8
ce0c: e1a02003 mov r2, r3
ce10: e080000b add r0, r0, fp
ce14: e58d3000 str r3, [sp]
ce18: eb000736 bl eaf8 <memcpy>
src += to_copy;
ce1c: e59d3000 ldr r3, [sp]
block++;
my_length -= to_copy;
copied += to_copy;
ce20: e5954000 ldr r4, [r5]
fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
src += to_copy;
block++;
my_length -= to_copy;
ce24: e063700a rsb r7, r3, sl
return copied;
#if 0
fprintf(stdout, "write %d at %d in %d: %*s\n", to_copy, start_offset, block, to_copy, src );
#endif
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
src += to_copy;
ce28: e0888003 add r8, r8, r3
block++;
ce2c: e2866001 add r6, r6, #1
my_length -= to_copy;
copied += to_copy;
ce30: e1a0a003 mov sl, r3
ce34: eaffffc0 b cd3c <IMFS_memfile_write+0x98>
* If the last byte we are supposed to write is past the end of this
* in memory file, then extend the length.
*/
last_byte = start + length;
if ( last_byte > the_jnode->info.file.size ) {
ce38: e5993050 ldr r3, [r9, #80] ; 0x50
ce3c: e1530001 cmp r3, r1
ce40: 2affffab bcs ccf4 <IMFS_memfile_write+0x50>
status = IMFS_memfile_extend( the_jnode, last_byte );
ce44: e1a00009 mov r0, r9
ce48: e3a02000 mov r2, #0
ce4c: ebfffeee bl ca0c <IMFS_memfile_extend>
if ( status )
ce50: e3500000 cmp r0, #0
ce54: 0affffa6 beq ccf4 <IMFS_memfile_write+0x50>
rtems_set_errno_and_return_minus_one( ENOSPC );
ce58: eb000518 bl e2c0 <__errno> <== NOT EXECUTED
ce5c: e3a0301c mov r3, #28 <== NOT EXECUTED
ce60: e5803000 str r3, [r0] <== NOT EXECUTED
ce64: e3e0a000 mvn sl, #0 <== NOT EXECUTED
ce68: eaffffd9 b cdd4 <IMFS_memfile_write+0x130> <== NOT EXECUTED
* If there is nothing to write, then quick exit.
*/
my_length = length;
if ( !my_length )
rtems_set_errno_and_return_minus_one( EINVAL );
ce6c: eb000513 bl e2c0 <__errno> <== NOT EXECUTED
ce70: e3a03016 mov r3, #22 <== NOT EXECUTED
ce74: e5803000 str r3, [r0] <== NOT EXECUTED
ce78: e3e0a000 mvn sl, #0 <== NOT EXECUTED
ce7c: eaffffd4 b cdd4 <IMFS_memfile_write+0x130> <== NOT EXECUTED
*/
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK;
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
ce80: e59f0084 ldr r0, [pc, #132] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
ce84: e3a01e33 mov r1, #816 ; 0x330 <== NOT EXECUTED
ce88: e59f2080 ldr r2, [pc, #128] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
ce8c: e59f3080 ldr r3, [pc, #128] ; cf14 <IMFS_memfile_write+0x270><== NOT EXECUTED
ce90: ebfff72f bl ab54 <__assert_func> <== NOT EXECUTED
assert( the_jnode );
if ( !the_jnode )
rtems_set_errno_and_return_minus_one( EIO );
assert( the_jnode->type == IMFS_MEMORY_FILE );
ce94: e3a01fb9 mov r1, #740 ; 0x2e4 <== NOT EXECUTED
ce98: e2811003 add r1, r1, #3 <== NOT EXECUTED
ce9c: e59f0068 ldr r0, [pc, #104] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
cea0: e59f2068 ldr r2, [pc, #104] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
cea4: e59f306c ldr r3, [pc, #108] ; cf18 <IMFS_memfile_write+0x274><== NOT EXECUTED
cea8: ebfff729 bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Perform internal consistency checks
*/
assert( the_jnode );
ceac: e3a01e2e mov r1, #736 ; 0x2e0 <== NOT EXECUTED
ceb0: e2811003 add r1, r1, #3 <== NOT EXECUTED
ceb4: e59f0050 ldr r0, [pc, #80] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
ceb8: e59f2050 ldr r2, [pc, #80] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
cebc: e59f3058 ldr r3, [pc, #88] ; cf1c <IMFS_memfile_write+0x278><== NOT EXECUTED
cec0: ebfff723 bl ab54 <__assert_func> <== NOT EXECUTED
if ( start_offset ) {
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
if ( to_copy > my_length )
to_copy = my_length;
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
cec4: e59f0040 ldr r0, [pc, #64] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
cec8: e3a01fc7 mov r1, #796 ; 0x31c <== NOT EXECUTED
cecc: e59f203c ldr r2, [pc, #60] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
ced0: e59f303c ldr r3, [pc, #60] ; cf14 <IMFS_memfile_write+0x270><== NOT EXECUTED
ced4: ebfff71e bl ab54 <__assert_func> <== NOT EXECUTED
assert( my_length < IMFS_MEMFILE_BYTES_PER_BLOCK );
to_copy = my_length;
if ( my_length ) {
block_ptr = IMFS_memfile_get_block_pointer( the_jnode, block, 0 );
assert( block_ptr );
ced8: e3a01fd1 mov r1, #836 ; 0x344 <== NOT EXECUTED
cedc: e2811002 add r1, r1, #2 <== NOT EXECUTED
cee0: e59f0024 ldr r0, [pc, #36] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
cee4: e59f2024 ldr r2, [pc, #36] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
cee8: e59f3024 ldr r3, [pc, #36] ; cf14 <IMFS_memfile_write+0x270><== NOT EXECUTED
ceec: ebfff718 bl ab54 <__assert_func> <== NOT EXECUTED
/*
* Error check arguments
*/
assert( source );
cef0: e3a01fbb mov r1, #748 ; 0x2ec <== NOT EXECUTED
cef4: e2811003 add r1, r1, #3 <== NOT EXECUTED
cef8: e59f000c ldr r0, [pc, #12] ; cf0c <IMFS_memfile_write+0x268><== NOT EXECUTED
cefc: e59f200c ldr r2, [pc, #12] ; cf10 <IMFS_memfile_write+0x26c><== NOT EXECUTED
cf00: e59f3018 ldr r3, [pc, #24] ; cf20 <IMFS_memfile_write+0x27c><== NOT EXECUTED
cf04: ebfff712 bl ab54 <__assert_func> <== NOT EXECUTED
00001818 <IMFS_mknod>:
const char *token, /* IN */
mode_t mode, /* IN */
dev_t dev, /* IN */
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
)
{
1818: e92d41f0 push {r4, r5, r6, r7, r8, lr}
181c: e24dd040 sub sp, sp, #64 ; 0x40
1820: e1a04001 mov r4, r1
1824: e1a07002 mov r7, r2
1828: e1a06003 mov r6, r3
182c: e1a08000 mov r8, r0
IMFS_jnode_t *new_node;
int result;
char new_name[ IMFS_NAME_MAX + 1 ];
IMFS_types_union info;
IMFS_get_token( token, strlen( token ), new_name, &result );
1830: eb0036a7 bl f2d4 <strlen>
1834: e28d5004 add r5, sp, #4
1838: e1a01000 mov r1, r0
183c: e28d303c add r3, sp, #60 ; 0x3c
1840: e1a00008 mov r0, r8
1844: e1a02005 mov r2, r5
1848: eb002422 bl a8d8 <IMFS_get_token>
/*
* Figure out what type of IMFS node this is.
*/
if ( S_ISDIR(mode) )
184c: e2043a0f and r3, r4, #61440 ; 0xf000
1850: e3530901 cmp r3, #16384 ; 0x4000
1854: 0a00001b beq 18c8 <IMFS_mknod+0xb0>
type = IMFS_DIRECTORY;
else if ( S_ISREG(mode) )
1858: e3530902 cmp r3, #32768 ; 0x8000
185c: 03a01005 moveq r1, #5
1860: 0a000005 beq 187c <IMFS_mknod+0x64>
type = IMFS_MEMORY_FILE;
else if ( S_ISBLK(mode) || S_ISCHR(mode) ) {
1864: e3530a06 cmp r3, #24576 ; 0x6000
1868: 13530a02 cmpne r3, #8192 ; 0x2000
type = IMFS_DEVICE;
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
186c: 058d7028 streq r7, [sp, #40] ; 0x28
1870: 058d602c streq r6, [sp, #44] ; 0x2c
1874: 03a01002 moveq r1, #2
*/
if ( S_ISDIR(mode) )
type = IMFS_DIRECTORY;
else if ( S_ISREG(mode) )
type = IMFS_MEMORY_FILE;
else if ( S_ISBLK(mode) || S_ISCHR(mode) ) {
1878: 1a00000a bne 18a8 <IMFS_mknod+0x90>
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
187c: e28dc028 add ip, sp, #40 ; 0x28
1880: e59d0058 ldr r0, [sp, #88] ; 0x58
1884: e1a02005 mov r2, r5
1888: e1a03004 mov r3, r4
188c: e58dc000 str ip, [sp]
1890: eb002092 bl 9ae0 <IMFS_create_node>
new_name,
mode,
&info
);
if ( !new_node )
1894: e3500000 cmp r0, #0
1898: 13a00000 movne r0, #0
189c: 0a00000b beq 18d0 <IMFS_mknod+0xb8>
rtems_set_errno_and_return_minus_one( ENOMEM );
return 0;
}
18a0: e28dd040 add sp, sp, #64 ; 0x40
18a4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
type = IMFS_MEMORY_FILE;
else if ( S_ISBLK(mode) || S_ISCHR(mode) ) {
type = IMFS_DEVICE;
rtems_filesystem_split_dev_t( dev, info.device.major, info.device.minor );
}
else if (S_ISFIFO(mode))
18a8: e3530a01 cmp r3, #4096 ; 0x1000
18ac: 03a01007 moveq r1, #7
18b0: 0afffff1 beq 187c <IMFS_mknod+0x64>
type = IMFS_FIFO;
else {
rtems_set_errno_and_return_minus_one( EINVAL );
18b4: eb003281 bl e2c0 <__errno> <== NOT EXECUTED
18b8: e3a03016 mov r3, #22 <== NOT EXECUTED
18bc: e5803000 str r3, [r0] <== NOT EXECUTED
18c0: e3e00000 mvn r0, #0 <== NOT EXECUTED
18c4: eafffff5 b 18a0 <IMFS_mknod+0x88> <== NOT EXECUTED
18c8: e3a01001 mov r1, #1
18cc: eaffffea b 187c <IMFS_mknod+0x64>
mode,
&info
);
if ( !new_node )
rtems_set_errno_and_return_minus_one( ENOMEM );
18d0: eb00327a bl e2c0 <__errno> <== NOT EXECUTED
18d4: e3a0300c mov r3, #12 <== NOT EXECUTED
18d8: e5803000 str r3, [r0] <== NOT EXECUTED
18dc: e3e00000 mvn r0, #0 <== NOT EXECUTED
18e0: eaffffee b 18a0 <IMFS_mknod+0x88> <== NOT EXECUTED
000018e4 <IMFS_mount>:
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
IMFS_jnode_t *node;
node = mt_entry->mt_point_node.node_access;
18e4: e5903008 ldr r3, [r0, #8]
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
18e8: e593204c ldr r2, [r3, #76] ; 0x4c
18ec: e3520001 cmp r2, #1
#include <rtems/seterr.h>
int IMFS_mount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
18f0: e52de004 push {lr} ; (str lr, [sp, #-4]!)
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
18f4: 1a000002 bne 1904 <IMFS_mount+0x20>
/*
* Set mt_fs pointer to point to the mount table entry for
* the mounted file system.
*/
node->info.directory.mt_fs = mt_entry;
18f8: e583005c str r0, [r3, #92] ; 0x5c
18fc: e3a00000 mov r0, #0
return 0;
}
1900: e49df004 pop {pc} ; (ldr pc, [sp], #4)
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
1904: eb00326d bl e2c0 <__errno> <== NOT EXECUTED
1908: e3a03014 mov r3, #20 <== NOT EXECUTED
190c: e5803000 str r3, [r0] <== NOT EXECUTED
1910: e3e00000 mvn r0, #0 <== NOT EXECUTED
1914: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00003d80 <IMFS_print_jnode>:
*/
void IMFS_print_jnode(
IMFS_jnode_t *the_jnode
)
{
3d80: e92d4030 push {r4, r5, lr}
assert( the_jnode );
3d84: e2504000 subs r4, r0, #0
3d88: 0a000055 beq 3ee4 <IMFS_print_jnode+0x164>
fprintf(stdout, "%s", the_jnode->name );
3d8c: e59f5164 ldr r5, [pc, #356] ; 3ef8 <IMFS_print_jnode+0x178>
3d90: e5953000 ldr r3, [r5]
3d94: e284000c add r0, r4, #12
3d98: e5931008 ldr r1, [r3, #8]
3d9c: eb003b3e bl 12a9c <fputs>
switch( the_jnode->type ) {
3da0: e594204c ldr r2, [r4, #76] ; 0x4c
3da4: e2423001 sub r3, r2, #1
3da8: e3530006 cmp r3, #6
3dac: 979ff103 ldrls pc, [pc, r3, lsl #2]
3db0: ea000011 b 3dfc <IMFS_print_jnode+0x7c> <== NOT EXECUTED
3db4: 00003e20 .word 0x00003e20 <== NOT EXECUTED
3db8: 00003e3c .word 0x00003e3c <== NOT EXECUTED
3dbc: 00003e58 .word 0x00003e58 <== NOT EXECUTED
3dc0: 00003e84 .word 0x00003e84 <== NOT EXECUTED
3dc4: 00003eb0 .word 0x00003eb0 <== NOT EXECUTED
3dc8: 00003ec8 .word 0x00003ec8 <== NOT EXECUTED
3dcc: 00003dd0 .word 0x00003dd0 <== NOT EXECUTED
fprintf(stdout, " links not printed\n" );
assert(0);
break;
case IMFS_FIFO:
fprintf(stdout, " FIFO not printed\n" );
3dd0: e5953000 ldr r3, [r5] <== NOT EXECUTED
3dd4: e3a01001 mov r1, #1 <== NOT EXECUTED
3dd8: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED
3ddc: e3a02012 mov r2, #18 <== NOT EXECUTED
3de0: e59f0114 ldr r0, [pc, #276] ; 3efc <IMFS_print_jnode+0x17c><== NOT EXECUTED
3de4: eb003e41 bl 136f0 <fwrite> <== NOT EXECUTED
assert(0);
3de8: e59f0110 ldr r0, [pc, #272] ; 3f00 <IMFS_print_jnode+0x180><== NOT EXECUTED
3dec: e3a01067 mov r1, #103 ; 0x67 <== NOT EXECUTED
3df0: e59f210c ldr r2, [pc, #268] ; 3f04 <IMFS_print_jnode+0x184><== NOT EXECUTED
3df4: e59f310c ldr r3, [pc, #268] ; 3f08 <IMFS_print_jnode+0x188><== NOT EXECUTED
3df8: eb00029b bl 486c <__assert_func> <== NOT EXECUTED
break;
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
3dfc: e5953000 ldr r3, [r5] <== NOT EXECUTED
3e00: e59f1104 ldr r1, [pc, #260] ; 3f0c <IMFS_print_jnode+0x18c><== NOT EXECUTED
3e04: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
3e08: eb003ac2 bl 12918 <fprintf> <== NOT EXECUTED
assert(0);
3e0c: e59f00ec ldr r0, [pc, #236] ; 3f00 <IMFS_print_jnode+0x180><== NOT EXECUTED
3e10: e3a0106c mov r1, #108 ; 0x6c <== NOT EXECUTED
3e14: e59f20e8 ldr r2, [pc, #232] ; 3f04 <IMFS_print_jnode+0x184><== NOT EXECUTED
3e18: e59f30e8 ldr r3, [pc, #232] ; 3f08 <IMFS_print_jnode+0x188><== NOT EXECUTED
3e1c: eb000292 bl 486c <__assert_func> <== NOT EXECUTED
assert( the_jnode );
fprintf(stdout, "%s", the_jnode->name );
switch( the_jnode->type ) {
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
3e20: e5953000 ldr r3, [r5]
3e24: e3a0002f mov r0, #47 ; 0x2f
3e28: e5931008 ldr r1, [r3, #8]
3e2c: eb003ad5 bl 12988 <fputc>
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
assert(0);
break;
}
puts("");
3e30: e59f00d8 ldr r0, [pc, #216] ; 3f10 <IMFS_print_jnode+0x190>
}
3e34: e8bd4030 pop {r4, r5, lr}
default:
fprintf(stdout, " bad type %d\n", the_jnode->type );
assert(0);
break;
}
puts("");
3e38: ea00421e b 146b8 <puts>
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
break;
case IMFS_DEVICE:
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
3e3c: e5952000 ldr r2, [r5]
3e40: e5943054 ldr r3, [r4, #84] ; 0x54
3e44: e5920008 ldr r0, [r2, #8]
3e48: e59f10c4 ldr r1, [pc, #196] ; 3f14 <IMFS_print_jnode+0x194>
3e4c: e5942050 ldr r2, [r4, #80] ; 0x50
3e50: eb003ab0 bl 12918 <fprintf>
the_jnode->info.device.major, the_jnode->info.device.minor );
break;
3e54: eafffff5 b 3e30 <IMFS_print_jnode+0xb0>
(uint32_t)the_jnode->info.file.size );
#endif
break;
case IMFS_HARD_LINK:
fprintf(stdout, " links not printed\n" );
3e58: e5953000 ldr r3, [r5] <== NOT EXECUTED
3e5c: e3a01001 mov r1, #1 <== NOT EXECUTED
3e60: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED
3e64: e3a02013 mov r2, #19 <== NOT EXECUTED
3e68: e59f00a8 ldr r0, [pc, #168] ; 3f18 <IMFS_print_jnode+0x198><== NOT EXECUTED
3e6c: eb003e1f bl 136f0 <fwrite> <== NOT EXECUTED
assert(0);
3e70: e59f0088 ldr r0, [pc, #136] ; 3f00 <IMFS_print_jnode+0x180><== NOT EXECUTED
3e74: e3a0105d mov r1, #93 ; 0x5d <== NOT EXECUTED
3e78: e59f2084 ldr r2, [pc, #132] ; 3f04 <IMFS_print_jnode+0x184><== NOT EXECUTED
3e7c: e59f3084 ldr r3, [pc, #132] ; 3f08 <IMFS_print_jnode+0x188><== NOT EXECUTED
3e80: eb000279 bl 486c <__assert_func> <== NOT EXECUTED
break;
case IMFS_SYM_LINK:
fprintf(stdout, " links not printed\n" );
3e84: e5953000 ldr r3, [r5] <== NOT EXECUTED
3e88: e3a01001 mov r1, #1 <== NOT EXECUTED
3e8c: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED
3e90: e3a02013 mov r2, #19 <== NOT EXECUTED
3e94: e59f007c ldr r0, [pc, #124] ; 3f18 <IMFS_print_jnode+0x198><== NOT EXECUTED
3e98: eb003e14 bl 136f0 <fwrite> <== NOT EXECUTED
assert(0);
3e9c: e59f005c ldr r0, [pc, #92] ; 3f00 <IMFS_print_jnode+0x180> <== NOT EXECUTED
3ea0: e3a01062 mov r1, #98 ; 0x62 <== NOT EXECUTED
3ea4: e59f2058 ldr r2, [pc, #88] ; 3f04 <IMFS_print_jnode+0x184> <== NOT EXECUTED
3ea8: e59f3058 ldr r3, [pc, #88] ; 3f08 <IMFS_print_jnode+0x188> <== NOT EXECUTED
3eac: eb00026e bl 486c <__assert_func> <== NOT EXECUTED
the_jnode->info.file.indirect,
the_jnode->info.file.doubly_indirect,
the_jnode->info.file.triply_indirect
);
#else
fprintf(stdout, " (file %" PRId32 ")",
3eb0: e5953000 ldr r3, [r5]
3eb4: e5942050 ldr r2, [r4, #80] ; 0x50
3eb8: e5930008 ldr r0, [r3, #8]
3ebc: e59f1058 ldr r1, [pc, #88] ; 3f1c <IMFS_print_jnode+0x19c>
3ec0: eb003a94 bl 12918 <fprintf>
(uint32_t)the_jnode->info.file.size );
#endif
break;
3ec4: eaffffd9 b 3e30 <IMFS_print_jnode+0xb0>
fprintf(stdout, " (device %" PRId32 ", %" PRId32 ")",
the_jnode->info.device.major, the_jnode->info.device.minor );
break;
case IMFS_LINEAR_FILE:
fprintf(stdout, " (file %" PRId32 " %p)",
3ec8: e5952000 ldr r2, [r5] <== NOT EXECUTED
3ecc: e5943058 ldr r3, [r4, #88] ; 0x58 <== NOT EXECUTED
3ed0: e5920008 ldr r0, [r2, #8] <== NOT EXECUTED
3ed4: e59f1044 ldr r1, [pc, #68] ; 3f20 <IMFS_print_jnode+0x1a0> <== NOT EXECUTED
3ed8: e5942050 ldr r2, [r4, #80] ; 0x50 <== NOT EXECUTED
3edc: eb003a8d bl 12918 <fprintf> <== NOT EXECUTED
(uint32_t)the_jnode->info.linearfile.size,
the_jnode->info.linearfile.direct
);
break;
3ee0: eaffffd2 b 3e30 <IMFS_print_jnode+0xb0> <== NOT EXECUTED
void IMFS_print_jnode(
IMFS_jnode_t *the_jnode
)
{
assert( the_jnode );
3ee4: e59f0014 ldr r0, [pc, #20] ; 3f00 <IMFS_print_jnode+0x180> <== NOT EXECUTED
3ee8: e3a01038 mov r1, #56 ; 0x38 <== NOT EXECUTED
3eec: e59f2010 ldr r2, [pc, #16] ; 3f04 <IMFS_print_jnode+0x184> <== NOT EXECUTED
3ef0: e59f302c ldr r3, [pc, #44] ; 3f24 <IMFS_print_jnode+0x1a4> <== NOT EXECUTED
3ef4: eb00025c bl 486c <__assert_func> <== NOT EXECUTED
00001924 <IMFS_readlink>:
)
{
IMFS_jnode_t *node;
int i;
node = loc->node_access;
1924: e5903000 ldr r3, [r0]
if ( node->type != IMFS_SYM_LINK )
1928: e593004c ldr r0, [r3, #76] ; 0x4c
192c: e3500004 cmp r0, #4
int IMFS_readlink(
rtems_filesystem_location_info_t *loc,
char *buf, /* OUT */
size_t bufsize
)
{
1930: e92d4010 push {r4, lr}
IMFS_jnode_t *node;
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
1934: 1a000013 bne 1988 <IMFS_readlink+0x64>
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
1938: e3520000 cmp r2, #0
193c: 0a00000f beq 1980 <IMFS_readlink+0x5c>
1940: e5930050 ldr r0, [r3, #80] ; 0x50
1944: e5d0c000 ldrb ip, [r0]
1948: e35c0000 cmp ip, #0
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
194c: 13a04000 movne r4, #0
1950: 11a00004 movne r0, r4
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
1954: 0a000009 beq 1980 <IMFS_readlink+0x5c>
1958: e2800001 add r0, r0, #1
195c: e1520000 cmp r2, r0
buf[i] = node->info.sym_link.name[i];
1960: e7c1c004 strb ip, [r1, r4]
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
for( i=0; ((i<bufsize) && (node->info.sym_link.name[i] != '\0')); i++ )
1964: e1a04000 mov r4, r0
1968: 98bd8010 popls {r4, pc}
196c: e593c050 ldr ip, [r3, #80] ; 0x50
1970: e7dcc000 ldrb ip, [ip, r0]
1974: e35c0000 cmp ip, #0
1978: 1afffff6 bne 1958 <IMFS_readlink+0x34>
197c: e8bd8010 pop {r4, pc}
1980: e3a00000 mov r0, #0 <== NOT EXECUTED
buf[i] = node->info.sym_link.name[i];
return i;
}
1984: e8bd8010 pop {r4, pc} <== NOT EXECUTED
int i;
node = loc->node_access;
if ( node->type != IMFS_SYM_LINK )
rtems_set_errno_and_return_minus_one( EINVAL );
1988: eb00324c bl e2c0 <__errno> <== NOT EXECUTED
198c: e3a03016 mov r3, #22 <== NOT EXECUTED
1990: e5803000 str r3, [r0] <== NOT EXECUTED
1994: e3e00000 mvn r0, #0 <== NOT EXECUTED
1998: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0000aa60 <IMFS_stat>:
{
IMFS_fs_info_t *fs_info;
IMFS_jnode_t *the_jnode;
IMFS_device_t *io;
the_jnode = loc->node_access;
aa60: e5903000 ldr r3, [r0]
switch ( the_jnode->type ) {
aa64: e593204c ldr r2, [r3, #76] ; 0x4c
aa68: e2422002 sub r2, r2, #2
int IMFS_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
aa6c: e92d4030 push {r4, r5, lr}
IMFS_device_t *io;
the_jnode = loc->node_access;
switch ( the_jnode->type ) {
aa70: e3520005 cmp r2, #5
aa74: 979ff102 ldrls pc, [pc, r2, lsl #2]
aa78: ea00002a b ab28 <IMFS_stat+0xc8> <== NOT EXECUTED
aa7c: 0000ab14 .word 0x0000ab14 <== NOT EXECUTED
aa80: 0000ab28 .word 0x0000ab28 <== NOT EXECUTED
aa84: 0000aa94 .word 0x0000aa94 <== NOT EXECUTED
aa88: 0000ab3c .word 0x0000ab3c <== NOT EXECUTED
aa8c: 0000ab3c .word 0x0000ab3c <== NOT EXECUTED
aa90: 0000aa94 .word 0x0000aa94 <== NOT EXECUTED
case IMFS_SYM_LINK:
buf->st_size = 0;
break;
case IMFS_FIFO:
buf->st_size = 0;
aa94: e3a04000 mov r4, #0 <== NOT EXECUTED
aa98: e3a05000 mov r5, #0 <== NOT EXECUTED
aa9c: e5814020 str r4, [r1, #32] <== NOT EXECUTED
aaa0: e5815024 str r5, [r1, #36] ; 0x24 <== NOT EXECUTED
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
aaa4: e5932030 ldr r2, [r3, #48] ; 0x30
aaa8: e581200c str r2, [r1, #12]
buf->st_nlink = the_jnode->st_nlink;
buf->st_ino = the_jnode->st_ino;
aaac: e5932038 ldr r2, [r3, #56] ; 0x38
aab0: e5812008 str r2, [r1, #8]
buf->st_uid = the_jnode->st_uid;
buf->st_gid = the_jnode->st_gid;
buf->st_atime = the_jnode->stat_atime;
aab4: e5932040 ldr r2, [r3, #64] ; 0x40
aab8: e5812028 str r2, [r1, #40] ; 0x28
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
aabc: e5902010 ldr r2, [r0, #16]
aac0: e5922034 ldr r2, [r2, #52] ; 0x34
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
aac4: e1d353b4 ldrh r5, [r3, #52] ; 0x34
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
aac8: e592c000 ldr ip, [r2]
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
buf->st_blksize = imfs_rq_memfile_bytes_per_block;
aacc: e59f207c ldr r2, [pc, #124] ; ab50 <IMFS_stat+0xf0>
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
aad0: e1c151b0 strh r5, [r1, #16]
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
buf->st_blksize = imfs_rq_memfile_bytes_per_block;
aad4: e5924000 ldr r4, [r2]
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
aad8: e3a02cff mov r2, #65280 ; 0xff00
aadc: e28220fe add r2, r2, #254 ; 0xfe
buf->st_ino = the_jnode->st_ino;
buf->st_uid = the_jnode->st_uid;
buf->st_gid = the_jnode->st_gid;
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
aae0: e5930044 ldr r0, [r3, #68] ; 0x44
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
aae4: e5812000 str r2, [r1]
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
buf->st_ino = the_jnode->st_ino;
buf->st_uid = the_jnode->st_uid;
aae8: e1d323bc ldrh r2, [r3, #60] ; 0x3c
buf->st_gid = the_jnode->st_gid;
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
aaec: e5810030 str r0, [r1, #48] ; 0x30
rtems_filesystem_make_dev_t( IMFS_DEVICE_MAJOR_NUMBER, fs_info->instance );
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
buf->st_ino = the_jnode->st_ino;
buf->st_uid = the_jnode->st_uid;
aaf0: e1c121b2 strh r2, [r1, #18]
buf->st_gid = the_jnode->st_gid;
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
aaf4: e5930048 ldr r0, [r3, #72] ; 0x48
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
buf->st_ino = the_jnode->st_ino;
buf->st_uid = the_jnode->st_uid;
buf->st_gid = the_jnode->st_gid;
aaf8: e1d333be ldrh r3, [r3, #62] ; 0x3e
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
aafc: e5810038 str r0, [r1, #56] ; 0x38
buf->st_blksize = imfs_rq_memfile_bytes_per_block;
ab00: e5814040 str r4, [r1, #64] ; 0x40
/*
* The device number of the IMFS is the major number and the minor is the
* instance.
*/
fs_info = loc->mt_entry->fs_info;
buf->st_dev =
ab04: e581c004 str ip, [r1, #4]
buf->st_mode = the_jnode->st_mode;
buf->st_nlink = the_jnode->st_nlink;
buf->st_ino = the_jnode->st_ino;
buf->st_uid = the_jnode->st_uid;
buf->st_gid = the_jnode->st_gid;
ab08: e1c131b4 strh r3, [r1, #20]
buf->st_atime = the_jnode->stat_atime;
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
buf->st_blksize = imfs_rq_memfile_bytes_per_block;
ab0c: e3a00000 mov r0, #0
return 0;
}
ab10: e8bd8030 pop {r4, r5, pc}
switch ( the_jnode->type ) {
case IMFS_DEVICE:
io = &the_jnode->info.device;
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
ab14: e2832050 add r2, r3, #80 ; 0x50
ab18: e8921004 ldm r2, {r2, ip}
ab1c: e581c01c str ip, [r1, #28]
ab20: e5812018 str r2, [r1, #24]
break;
ab24: eaffffde b aaa4 <IMFS_stat+0x44>
case IMFS_FIFO:
buf->st_size = 0;
break;
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
ab28: eb000de4 bl e2c0 <__errno> <== NOT EXECUTED
ab2c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
ab30: e5803000 str r3, [r0] <== NOT EXECUTED
ab34: e3e00000 mvn r0, #0 <== NOT EXECUTED
ab38: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
break;
case IMFS_LINEAR_FILE:
case IMFS_MEMORY_FILE:
buf->st_size = the_jnode->info.file.size;
ab3c: e2835050 add r5, r3, #80 ; 0x50
ab40: e8950030 ldm r5, {r4, r5}
ab44: e5814020 str r4, [r1, #32]
ab48: e5815024 str r5, [r1, #36] ; 0x24
break;
ab4c: eaffffd4 b aaa4 <IMFS_stat+0x44>
00001a00 <IMFS_symlink>:
int IMFS_symlink(
rtems_filesystem_location_info_t *parent_loc,
const char *link_name,
const char *node_name
)
{
1a00: e92d40f0 push {r4, r5, r6, r7, lr}
1a04: e1a06000 mov r6, r0
1a08: e24dd040 sub sp, sp, #64 ; 0x40
int i;
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
1a0c: e1a00002 mov r0, r2
int IMFS_symlink(
rtems_filesystem_location_info_t *parent_loc,
const char *link_name,
const char *node_name
)
{
1a10: e1a07002 mov r7, r2
1a14: e1a05001 mov r5, r1
int i;
/*
* Remove any separators at the end of the string.
*/
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
1a18: eb00362d bl f2d4 <strlen>
1a1c: e28d4004 add r4, sp, #4
1a20: e1a01000 mov r1, r0
1a24: e1a02004 mov r2, r4
1a28: e28d303c add r3, sp, #60 ; 0x3c
1a2c: e1a00007 mov r0, r7
1a30: eb0023a8 bl a8d8 <IMFS_get_token>
/*
* Duplicate link name
*/
info.sym_link.name = strdup(link_name);
1a34: e1a00005 mov r0, r5
1a38: eb003611 bl f284 <strdup>
if (info.sym_link.name == NULL) {
1a3c: e3500000 cmp r0, #0
IMFS_get_token( node_name, strlen( node_name ), new_name, &i );
/*
* Duplicate link name
*/
info.sym_link.name = strdup(link_name);
1a40: e58d0028 str r0, [sp, #40] ; 0x28
if (info.sym_link.name == NULL) {
1a44: 0a00000e beq 1a84 <IMFS_symlink+0x84>
* was ONLY passed a NULL when we created the root node. We
* added a new IMFS_create_root_node() so this path no longer
* existed. The result was simpler code which should not have
* this path.
*/
new_node = IMFS_create_node(
1a48: e3a03ca2 mov r3, #41472 ; 0xa200
1a4c: e28dc028 add ip, sp, #40 ; 0x28
1a50: e1a00006 mov r0, r6
1a54: e1a02004 mov r2, r4
1a58: e2433001 sub r3, r3, #1
1a5c: e3a01004 mov r1, #4
1a60: e58dc000 str ip, [sp]
1a64: eb00201d bl 9ae0 <IMFS_create_node>
new_name,
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if (new_node == NULL) {
1a68: e3500000 cmp r0, #0
1a6c: 13a00000 movne r0, #0
1a70: 0a000001 beq 1a7c <IMFS_symlink+0x7c>
free(info.sym_link.name);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
return 0;
}
1a74: e28dd040 add sp, sp, #64 ; 0x40
1a78: e8bd80f0 pop {r4, r5, r6, r7, pc}
( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
&info
);
if (new_node == NULL) {
free(info.sym_link.name);
1a7c: e59d0028 ldr r0, [sp, #40] ; 0x28 <== NOT EXECUTED
1a80: eb000188 bl 20a8 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
1a84: eb00320d bl e2c0 <__errno> <== NOT EXECUTED
1a88: e3a0300c mov r3, #12 <== NOT EXECUTED
1a8c: e5803000 str r3, [r0] <== NOT EXECUTED
1a90: e3e00000 mvn r0, #0 <== NOT EXECUTED
1a94: eafffff6 b 1a74 <IMFS_symlink+0x74> <== NOT EXECUTED
00001a98 <IMFS_unlink>:
int IMFS_unlink(
rtems_filesystem_location_info_t *parentloc, /* IN */
rtems_filesystem_location_info_t *loc /* IN */
)
{
1a98: e92d41f0 push {r4, r5, r6, r7, r8, lr}
IMFS_jnode_t *node;
rtems_filesystem_location_info_t the_link;
int result = 0;
node = loc->node_access;
1a9c: e5915000 ldr r5, [r1]
/*
* If this is the last last pointer to the node
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
1aa0: e595304c ldr r3, [r5, #76] ; 0x4c
1aa4: e3530003 cmp r3, #3
int IMFS_unlink(
rtems_filesystem_location_info_t *parentloc, /* IN */
rtems_filesystem_location_info_t *loc /* IN */
)
{
1aa8: e24dd01c sub sp, sp, #28
1aac: e1a04001 mov r4, r1
1ab0: e1a06000 mov r6, r0
/*
* If this is the last last pointer to the node
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
1ab4: 0a000006 beq 1ad4 <IMFS_unlink+0x3c>
/*
* Now actually free the node we were asked to free.
*/
result = (*loc->handlers->rmnod_h)( parentloc, loc );
1ab8: e1a00006 mov r0, r6
1abc: e1a01004 mov r1, r4
1ac0: e5943008 ldr r3, [r4, #8]
1ac4: e1a0e00f mov lr, pc
1ac8: e593f034 ldr pc, [r3, #52] ; 0x34
return result;
}
1acc: e28dd01c add sp, sp, #28
1ad0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
* free the node.
*/
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
1ad4: e595e050 ldr lr, [r5, #80] ; 0x50
1ad8: e35e0000 cmp lr, #0
1adc: 0a00001f beq 1b60 <IMFS_unlink+0xc8>
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
1ae0: e1a07001 mov r7, r1
1ae4: e8b7000f ldm r7!, {r0, r1, r2, r3}
1ae8: e1a0c00d mov ip, sp
1aec: e8ac000f stmia ip!, {r0, r1, r2, r3}
the_link.node_access = node->info.hard_link.link_node;
1af0: e28d801c add r8, sp, #28
1af4: e528e01c str lr, [r8, #-28]!
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
1af8: e5973000 ldr r3, [r7]
the_link.node_access = node->info.hard_link.link_node;
IMFS_Set_handlers( &the_link );
1afc: e1a0000d mov r0, sp
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
the_link = *loc;
1b00: e58c3000 str r3, [ip]
the_link.node_access = node->info.hard_link.link_node;
IMFS_Set_handlers( &the_link );
1b04: eb002047 bl 9c28 <IMFS_Set_handlers>
/*
* If removing the last hard link to a node, then we need
* to remove the node that is a link and the node itself.
*/
if ( node->info.hard_link.link_node->st_nlink == 1)
1b08: e5953050 ldr r3, [r5, #80] ; 0x50
1b0c: e1d323b4 ldrh r2, [r3, #52] ; 0x34
1b10: e3520001 cmp r2, #1
1b14: 0a000008 beq 1b3c <IMFS_unlink+0xa4>
if ( result != 0 )
return -1;
}
else
{
node->info.hard_link.link_node->st_nlink --;
1b18: e2422001 sub r2, r2, #1
1b1c: e1c323b4 strh r2, [r3, #52] ; 0x34
IMFS_update_ctime( node->info.hard_link.link_node );
1b20: e28d0014 add r0, sp, #20
1b24: e3a01000 mov r1, #0
1b28: eb000187 bl 214c <gettimeofday>
1b2c: e5953050 ldr r3, [r5, #80] ; 0x50
1b30: e59d2014 ldr r2, [sp, #20]
1b34: e5832048 str r2, [r3, #72] ; 0x48
1b38: eaffffde b 1ab8 <IMFS_unlink+0x20>
* to remove the node that is a link and the node itself.
*/
if ( node->info.hard_link.link_node->st_nlink == 1)
{
result = (*the_link.handlers->rmnod_h)( parentloc, &the_link );
1b3c: e1a0100d mov r1, sp
1b40: e1a00006 mov r0, r6
1b44: e59d3008 ldr r3, [sp, #8]
1b48: e1a0e00f mov lr, pc
1b4c: e593f034 ldr pc, [r3, #52] ; 0x34
if ( result != 0 )
1b50: e3500000 cmp r0, #0
1b54: 13e00000 mvnne r0, #0
1b58: 0affffd6 beq 1ab8 <IMFS_unlink+0x20>
1b5c: eaffffda b 1acc <IMFS_unlink+0x34>
*/
if ( node->type == IMFS_HARD_LINK ) {
if ( !node->info.hard_link.link_node )
rtems_set_errno_and_return_minus_one( EINVAL );
1b60: eb0031d6 bl e2c0 <__errno> <== NOT EXECUTED
1b64: e3a03016 mov r3, #22 <== NOT EXECUTED
1b68: e5803000 str r3, [r0] <== NOT EXECUTED
1b6c: e3e00000 mvn r0, #0 <== NOT EXECUTED
1b70: eaffffd5 b 1acc <IMFS_unlink+0x34> <== NOT EXECUTED
00001b74 <IMFS_unmount>:
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
IMFS_jnode_t *node;
node = mt_entry->mt_point_node.node_access;
1b74: e5903008 ldr r3, [r0, #8]
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
1b78: e593204c ldr r2, [r3, #76] ; 0x4c
1b7c: e3520001 cmp r2, #1
#include <rtems/seterr.h>
int IMFS_unmount(
rtems_filesystem_mount_table_entry_t *mt_entry
)
{
1b80: e52de004 push {lr} ; (str lr, [sp, #-4]!)
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
1b84: 1a000005 bne 1ba0 <IMFS_unmount+0x2c>
/*
* Did the node indicate that there was a directory mounted here?
*/
if ( node->info.directory.mt_fs == NULL )
1b88: e593205c ldr r2, [r3, #92] ; 0x5c
1b8c: e3520000 cmp r2, #0
1b90: 0a000007 beq 1bb4 <IMFS_unmount+0x40>
/*
* Set the mt_fs pointer to indicate that there is no longer
* a file system mounted to this point.
*/
node->info.directory.mt_fs = NULL;
1b94: e3a00000 mov r0, #0
1b98: e583005c str r0, [r3, #92] ; 0x5c
return 0;
}
1b9c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
/*
* Is the node that we are mounting onto a directory node ?
*/
if ( node->type != IMFS_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
1ba0: eb0031c6 bl e2c0 <__errno> <== NOT EXECUTED
1ba4: e3a03014 mov r3, #20 <== NOT EXECUTED
1ba8: e5803000 str r3, [r0] <== NOT EXECUTED
1bac: e3e00000 mvn r0, #0 <== NOT EXECUTED
1bb0: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
/*
* Did the node indicate that there was a directory mounted here?
*/
if ( node->info.directory.mt_fs == NULL )
rtems_set_errno_and_return_minus_one( EINVAL ); /* XXX */
1bb4: eb0031c1 bl e2c0 <__errno> <== NOT EXECUTED
1bb8: e3a03016 mov r3, #22 <== NOT EXECUTED
1bbc: e5803000 str r3, [r0] <== NOT EXECUTED
1bc0: e3e00000 mvn r0, #0 <== NOT EXECUTED
1bc4: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
0000231c <RTEMS_Malloc_Initialize>:
#endif
/*
* If configured, initialize the statistics support
*/
if ( rtems_malloc_statistics_helpers != NULL ) {
231c: e59f30d0 ldr r3, [pc, #208] ; 23f4 <RTEMS_Malloc_Initialize+0xd8>
2320: e5933000 ldr r3, [r3]
2324: e3530000 cmp r3, #0
void RTEMS_Malloc_Initialize(
void *heap_begin,
uintptr_t heap_size,
size_t sbrk_amount
)
{
2328: e92d4070 push {r4, r5, r6, lr}
232c: e1a05000 mov r5, r0
2330: e1a06001 mov r6, r1
2334: e1a04002 mov r4, r2
/*
* If configured, initialize the statistics support
*/
if ( rtems_malloc_statistics_helpers != NULL ) {
(*rtems_malloc_statistics_helpers->initialize)();
2338: 11a0e00f movne lr, pc
233c: 1593f000 ldrne pc, [r3]
}
/*
* Initialize the garbage collection list to start with nothing on it.
*/
malloc_deferred_frees_initialize();
2340: ebffffe1 bl 22cc <malloc_deferred_frees_initialize>
/*
* Initialize the optional sbrk support for extending the heap
*/
if ( rtems_malloc_sbrk_helpers != NULL ) {
2344: e59f30ac ldr r3, [pc, #172] ; 23f8 <RTEMS_Malloc_Initialize+0xdc>
2348: e5933000 ldr r3, [r3]
234c: e3530000 cmp r3, #0
2350: 0a000006 beq 2370 <RTEMS_Malloc_Initialize+0x54>
void *new_heap_begin = (*rtems_malloc_sbrk_helpers->initialize)(
2354: e1a00005 mov r0, r5 <== NOT EXECUTED
2358: e1a01004 mov r1, r4 <== NOT EXECUTED
235c: e1a0e00f mov lr, pc <== NOT EXECUTED
2360: e593f000 ldr pc, [r3] <== NOT EXECUTED
heap_begin,
sbrk_amount
);
heap_size -= (uintptr_t) new_heap_begin - (uintptr_t) heap_begin;
2364: e0856006 add r6, r5, r6 <== NOT EXECUTED
2368: e0606006 rsb r6, r0, r6 <== NOT EXECUTED
236c: e1a05000 mov r5, r0 <== NOT EXECUTED
* of the time under UNIX because zero'ing memory when it is first
* given to a process eliminates the chance of a process seeing data
* left over from another process. This would be a security violation.
*/
if (
2370: e59f4084 ldr r4, [pc, #132] ; 23fc <RTEMS_Malloc_Initialize+0xe0>
2374: e5d41000 ldrb r1, [r4]
2378: e3510000 cmp r1, #0
237c: 1a000018 bne 23e4 <RTEMS_Malloc_Initialize+0xc8>
!rtems_unified_work_area
&& rtems_configuration_get_do_zero_of_workspace()
2380: e59f3078 ldr r3, [pc, #120] ; 2400 <RTEMS_Malloc_Initialize+0xe4>
2384: e5d33028 ldrb r3, [r3, #40] ; 0x28
2388: e3530000 cmp r3, #0
238c: 1a00000e bne 23cc <RTEMS_Malloc_Initialize+0xb0>
void *area_begin,
uintptr_t area_size,
uintptr_t page_size
)
{
return _Heap_Initialize( heap, area_begin, area_size, page_size );
2390: e59f406c ldr r4, [pc, #108] ; 2404 <RTEMS_Malloc_Initialize+0xe8>
2394: e1a01005 mov r1, r5
2398: e1a02006 mov r2, r6
239c: e5940000 ldr r0, [r4]
23a0: e3a03004 mov r3, #4
23a4: eb0010a0 bl 662c <_Heap_Initialize>
RTEMS_Malloc_Heap,
heap_begin,
heap_size,
CPU_HEAP_ALIGNMENT
);
if ( status == 0 ) {
23a8: e3500000 cmp r0, #0
23ac: 0a00000e beq 23ec <RTEMS_Malloc_Initialize+0xd0>
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
}
MSBUMP( space_available, _Protected_heap_Get_size(RTEMS_Malloc_Heap) );
23b0: e59f5050 ldr r5, [pc, #80] ; 2408 <RTEMS_Malloc_Initialize+0xec>
23b4: e5940000 ldr r0, [r4]
23b8: e5954000 ldr r4, [r5]
23bc: eb0013a2 bl 724c <_Protected_heap_Get_size>
23c0: e0800004 add r0, r0, r4
23c4: e5850000 str r0, [r5]
printk( "\n" );
rtems_print_buffer( (heap_begin + heap_size) - 48, 48 );
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
}
#endif
}
23c8: e8bd8070 pop {r4, r5, r6, pc}
if (
!rtems_unified_work_area
&& rtems_configuration_get_do_zero_of_workspace()
) {
memset( heap_begin, 0, heap_size );
23cc: e1a00005 mov r0, r5
23d0: e1a02006 mov r2, r6
23d4: eb003203 bl ebe8 <memset>
* Unfortunately we cannot use assert if this fails because if this
* has failed we do not have a heap and if we do not have a heap
* STDIO cannot work because there will be no buffers.
*/
if ( !rtems_unified_work_area ) {
23d8: e5d43000 ldrb r3, [r4]
23dc: e3530000 cmp r3, #0
23e0: 0affffea beq 2390 <RTEMS_Malloc_Initialize+0x74>
23e4: e59f4018 ldr r4, [pc, #24] ; 2404 <RTEMS_Malloc_Initialize+0xe8>
23e8: eafffff0 b 23b0 <RTEMS_Malloc_Initialize+0x94>
heap_begin,
heap_size,
CPU_HEAP_ALIGNMENT
);
if ( status == 0 ) {
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
23ec: e280001a add r0, r0, #26 <== NOT EXECUTED
23f0: eb000e7a bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
000060f0 <Stack_check_Dump_threads_usage>:
static rtems_printk_plugin_t print_handler;
void Stack_check_Dump_threads_usage(
Thread_Control *the_thread
)
{
60f0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
void *high_water_mark;
void *current;
Stack_Control *stack;
char name[5];
if ( !the_thread )
60f4: e250a000 subs sl, r0, #0 <== NOT EXECUTED
static rtems_printk_plugin_t print_handler;
void Stack_check_Dump_threads_usage(
Thread_Control *the_thread
)
{
60f8: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
void *high_water_mark;
void *current;
Stack_Control *stack;
char name[5];
if ( !the_thread )
60fc: 0a000031 beq 61c8 <Stack_check_Dump_threads_usage+0xd8> <== NOT EXECUTED
return;
if ( !print_handler )
6100: e59f4110 ldr r4, [pc, #272] ; 6218 <Stack_check_Dump_threads_usage+0x128><== NOT EXECUTED
6104: e5947004 ldr r7, [r4, #4] <== NOT EXECUTED
6108: e3570000 cmp r7, #0 <== NOT EXECUTED
610c: 0a00002d beq 61c8 <Stack_check_Dump_threads_usage+0xd8> <== NOT EXECUTED
/*
* Obtain interrupt stack information
*/
if (the_thread == (Thread_Control *) -1) {
6110: e37a0001 cmn sl, #1 <== NOT EXECUTED
6114: 0a000032 beq 61e4 <Stack_check_Dump_threads_usage+0xf4> <== NOT EXECUTED
}
else
return;
} else {
stack = &the_thread->Start.Initial_stack;
current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
6118: e59a80f0 ldr r8, [sl, #240] ; 0xf0 <== NOT EXECUTED
current = 0;
}
else
return;
} else {
stack = &the_thread->Start.Initial_stack;
611c: e28a50c0 add r5, sl, #192 ; 0xc0 <== NOT EXECUTED
current = (void *)_CPU_Context_Get_SP( &the_thread->Registers );
}
low = Stack_check_usable_stack_start(stack);
6120: e8950240 ldm r5, {r6, r9} <== NOT EXECUTED
6124: e2899010 add r9, r9, #16 <== NOT EXECUTED
size = Stack_check_usable_stack_size(stack);
6128: e2466010 sub r6, r6, #16 <== NOT EXECUTED
high_water_mark = Stack_check_find_high_water_mark(low, size);
612c: e1a00009 mov r0, r9 <== NOT EXECUTED
6130: e1a01006 mov r1, r6 <== NOT EXECUTED
6134: ebffffd7 bl 6098 <Stack_check_find_high_water_mark> <== NOT EXECUTED
if ( high_water_mark )
6138: e250b000 subs fp, r0, #0 <== NOT EXECUTED
used = Stack_check_Calculate_used( low, size, high_water_mark );
613c: 10899006 addne r9, r9, r6 <== NOT EXECUTED
6140: 106bb009 rsbne fp, fp, r9 <== NOT EXECUTED
else
used = 0;
if ( the_thread ) {
6144: e35a0000 cmp sl, #0 <== NOT EXECUTED
6148: 0a00002c beq 6200 <Stack_check_Dump_threads_usage+0x110> <== NOT EXECUTED
(*print_handler)(
614c: e59aa008 ldr sl, [sl, #8] <== NOT EXECUTED
6150: e28d2008 add r2, sp, #8 <== NOT EXECUTED
6154: e3a01005 mov r1, #5 <== NOT EXECUTED
6158: e1a0000a mov r0, sl <== NOT EXECUTED
615c: e5949008 ldr r9, [r4, #8] <== NOT EXECUTED
6160: eb001821 bl c1ec <rtems_object_get_name> <== NOT EXECUTED
6164: e1a0200a mov r2, sl <== NOT EXECUTED
6168: e1a03000 mov r3, r0 <== NOT EXECUTED
616c: e59f10a8 ldr r1, [pc, #168] ; 621c <Stack_check_Dump_threads_usage+0x12c><== NOT EXECUTED
6170: e1a00009 mov r0, r9 <== NOT EXECUTED
6174: e1a0e00f mov lr, pc <== NOT EXECUTED
6178: e12fff17 bx r7 <== NOT EXECUTED
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
(*print_handler)(
617c: e5953000 ldr r3, [r5] <== NOT EXECUTED
6180: e5952004 ldr r2, [r5, #4] <== NOT EXECUTED
6184: e2433001 sub r3, r3, #1 <== NOT EXECUTED
6188: e0823003 add r3, r2, r3 <== NOT EXECUTED
618c: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
6190: e58d8000 str r8, [sp] <== NOT EXECUTED
6194: e58d6004 str r6, [sp, #4] <== NOT EXECUTED
6198: e59f1080 ldr r1, [pc, #128] ; 6220 <Stack_check_Dump_threads_usage+0x130><== NOT EXECUTED
619c: e1a0e00f mov lr, pc <== NOT EXECUTED
61a0: e594f004 ldr pc, [r4, #4] <== NOT EXECUTED
stack->area + stack->size - 1,
current,
size
);
if (Stack_check_Initialized == 0) {
61a4: e5943000 ldr r3, [r4] <== NOT EXECUTED
61a8: e3530000 cmp r3, #0 <== NOT EXECUTED
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
}
(*print_handler)(
61ac: e59f3064 ldr r3, [pc, #100] ; 6218 <Stack_check_Dump_threads_usage+0x128><== NOT EXECUTED
stack->area + stack->size - 1,
current,
size
);
if (Stack_check_Initialized == 0) {
61b0: 0a000006 beq 61d0 <Stack_check_Dump_threads_usage+0xe0> <== NOT EXECUTED
(*print_handler)( print_context, "Unavailable\n" );
} else {
(*print_handler)( print_context, "%8" PRId32 "\n", used );
61b4: e1a0200b mov r2, fp <== NOT EXECUTED
61b8: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
61bc: e59f1060 ldr r1, [pc, #96] ; 6224 <Stack_check_Dump_threads_usage+0x134><== NOT EXECUTED
61c0: e1a0e00f mov lr, pc <== NOT EXECUTED
61c4: e593f004 ldr pc, [r3, #4] <== NOT EXECUTED
}
}
61c8: e28dd010 add sp, sp, #16 <== NOT EXECUTED
61cc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
current,
size
);
if (Stack_check_Initialized == 0) {
(*print_handler)( print_context, "Unavailable\n" );
61d0: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
61d4: e59f104c ldr r1, [pc, #76] ; 6228 <Stack_check_Dump_threads_usage+0x138><== NOT EXECUTED
61d8: e1a0e00f mov lr, pc <== NOT EXECUTED
61dc: e593f004 ldr pc, [r3, #4] <== NOT EXECUTED
61e0: eafffff8 b 61c8 <Stack_check_Dump_threads_usage+0xd8> <== NOT EXECUTED
/*
* Obtain interrupt stack information
*/
if (the_thread == (Thread_Control *) -1) {
if (Stack_check_Interrupt_stack.area) {
61e4: e59f5040 ldr r5, [pc, #64] ; 622c <Stack_check_Dump_threads_usage+0x13c><== NOT EXECUTED
61e8: e5953004 ldr r3, [r5, #4] <== NOT EXECUTED
61ec: e3530000 cmp r3, #0 <== NOT EXECUTED
61f0: 13a08000 movne r8, #0 <== NOT EXECUTED
61f4: 11a0a008 movne sl, r8 <== NOT EXECUTED
61f8: 1affffc8 bne 6120 <Stack_check_Dump_threads_usage+0x30> <== NOT EXECUTED
61fc: eafffff1 b 61c8 <Stack_check_Dump_threads_usage+0xd8> <== NOT EXECUTED
"0x%08" PRIx32 " %4s",
the_thread->Object.id,
rtems_object_get_name( the_thread->Object.id, sizeof(name), name )
);
} else {
(*print_handler)( print_context, "0x%08" PRIx32 " INTR", ~0 );
6200: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
6204: e59f1024 ldr r1, [pc, #36] ; 6230 <Stack_check_Dump_threads_usage+0x140><== NOT EXECUTED
6208: e3e02000 mvn r2, #0 <== NOT EXECUTED
620c: e1a0e00f mov lr, pc <== NOT EXECUTED
6210: e12fff17 bx r7 <== NOT EXECUTED
6214: eaffffd8 b 617c <Stack_check_Dump_threads_usage+0x8c> <== NOT EXECUTED
00006098 <Stack_check_find_high_water_mark>:
/*
* start at lower memory and find first word that does not
* match pattern
*/
base += PATTERN_SIZE_WORDS;
6098: e2803010 add r3, r0, #16 <== NOT EXECUTED
for (ebase = base + length; base < ebase; base++)
609c: e3c11003 bic r1, r1, #3 <== NOT EXECUTED
60a0: e0831001 add r1, r3, r1 <== NOT EXECUTED
60a4: e1530001 cmp r3, r1 <== NOT EXECUTED
60a8: 2a00000c bcs 60e0 <Stack_check_find_high_water_mark+0x48> <== NOT EXECUTED
if (*base != U32_PATTERN)
60ac: e3a02ca6 mov r2, #42496 ; 0xa600 <== NOT EXECUTED
60b0: e242205b sub r2, r2, #91 ; 0x5b <== NOT EXECUTED
60b4: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
60b8: e1822802 orr r2, r2, r2, lsl #16 <== NOT EXECUTED
60bc: e1500002 cmp r0, r2 <== NOT EXECUTED
60c0: 0a000003 beq 60d4 <Stack_check_find_high_water_mark+0x3c> <== NOT EXECUTED
60c4: ea000007 b 60e8 <Stack_check_find_high_water_mark+0x50> <== NOT EXECUTED
60c8: e5932000 ldr r2, [r3] <== NOT EXECUTED
60cc: e1520000 cmp r2, r0 <== NOT EXECUTED
60d0: 1a000004 bne 60e8 <Stack_check_find_high_water_mark+0x50> <== NOT EXECUTED
* start at lower memory and find first word that does not
* match pattern
*/
base += PATTERN_SIZE_WORDS;
for (ebase = base + length; base < ebase; base++)
60d4: e2833004 add r3, r3, #4 <== NOT EXECUTED
60d8: e1510003 cmp r1, r3 <== NOT EXECUTED
60dc: 8afffff9 bhi 60c8 <Stack_check_find_high_water_mark+0x30> <== NOT EXECUTED
60e0: e3a00000 mov r0, #0 <== NOT EXECUTED
if (*base != U32_PATTERN)
return (void *) base;
#endif
return (void *)0;
}
60e4: e12fff1e bx lr <== NOT EXECUTED
*/
base += PATTERN_SIZE_WORDS;
for (ebase = base + length; base < ebase; base++)
if (*base != U32_PATTERN)
return (void *) base;
60e8: e1a00003 mov r0, r3 <== NOT EXECUTED
60ec: e12fff1e bx lr <== NOT EXECUTED
00042698 <T.57>:
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
42698: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_bitmap_element* map_bits;
int map_index;
int map_offset;
int rc;
*found = false;
4269c: e3a06000 mov r6, #0 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
426a0: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
426a4: e58d1020 str r1, [sp, #32] <== NOT EXECUTED
rtems_rfs_bitmap_element* map_bits;
int map_index;
int map_offset;
int rc;
*found = false;
426a8: e5c26000 strb r6, [r2] <== NOT EXECUTED
/*
* Load the bitmap.
*/
rc = rtems_rfs_bitmap_load_map (control, &map);
426ac: e28d1024 add r1, sp, #36 ; 0x24 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
426b0: e58d201c str r2, [sp, #28] <== NOT EXECUTED
426b4: e1a04003 mov r4, r3 <== NOT EXECUTED
426b8: e58d0014 str r0, [sp, #20] <== NOT EXECUTED
*found = false;
/*
* Load the bitmap.
*/
rc = rtems_rfs_bitmap_load_map (control, &map);
426bc: ebfffeec bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
426c0: e3500000 cmp r0, #0 <== NOT EXECUTED
426c4: da000001 ble 426d0 <T.57+0x38> <== NOT EXECUTED
}
while (((direction < 0) && (test_bit >= end_bit))
|| ((direction > 0) && (test_bit <= end_bit)));
return 0;
}
426c8: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
426cc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
return rc;
/*
* Calculate the bit we are testing plus the end point we search over.
*/
test_bit = *bit;
426d0: e59d1020 ldr r1, [sp, #32] <== NOT EXECUTED
426d4: e5910000 ldr r0, [r1] <== NOT EXECUTED
end_bit = test_bit + (window * direction);
if (end_bit < 0)
426d8: e0905584 adds r5, r0, r4, lsl #11 <== NOT EXECUTED
426dc: 41a05006 movmi r5, r6 <== NOT EXECUTED
426e0: 4a000003 bmi 426f4 <T.57+0x5c> <== NOT EXECUTED
end_bit = 0;
else if (end_bit >= control->size)
426e4: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
426e8: e592300c ldr r3, [r2, #12] <== NOT EXECUTED
426ec: e1550003 cmp r5, r3 <== NOT EXECUTED
end_bit = control->size - 1;
426f0: 22435001 subcs r5, r3, #1 <== NOT EXECUTED
map_index = rtems_rfs_bitmap_map_index (test_bit);
map_offset = rtems_rfs_bitmap_map_offset (test_bit);
search_index = rtems_rfs_bitmap_map_index (map_index);
search_offset = rtems_rfs_bitmap_map_offset (map_index);
search_bits = &control->search_bits[search_index];
426f4: e59dc014 ldr ip, [sp, #20] <== NOT EXECUTED
426f8: e59c3014 ldr r3, [ip, #20] <== NOT EXECUTED
426fc: e1a02540 asr r2, r0, #10 <== NOT EXECUTED
42700: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
map_bits = &map[map_index];
42704: e59d9024 ldr r9, [sp, #36] ; 0x24 <== NOT EXECUTED
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
42708: e1a01104 lsl r1, r4, #2 <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
4270c: e1a02fa4 lsr r2, r4, #31 <== NOT EXECUTED
if (end_bit < 0)
end_bit = 0;
else if (end_bit >= control->size)
end_bit = control->size - 1;
map_index = rtems_rfs_bitmap_map_index (test_bit);
42710: e1a0a2c0 asr sl, r0, #5 <== NOT EXECUTED
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
42714: e58d1010 str r1, [sp, #16] <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
42718: e58d200c str r2, [sp, #12] <== NOT EXECUTED
map_index = rtems_rfs_bitmap_map_index (test_bit);
map_offset = rtems_rfs_bitmap_map_offset (test_bit);
search_index = rtems_rfs_bitmap_map_index (map_index);
search_offset = rtems_rfs_bitmap_map_offset (map_index);
search_bits = &control->search_bits[search_index];
4271c: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
map_bits = &map[map_index];
42720: e089910a add r9, r9, sl, lsl #2 <== NOT EXECUTED
end_bit = 0;
else if (end_bit >= control->size)
end_bit = control->size - 1;
map_index = rtems_rfs_bitmap_map_index (test_bit);
map_offset = rtems_rfs_bitmap_map_offset (test_bit);
42724: e200301f and r3, r0, #31 <== NOT EXECUTED
search_index = rtems_rfs_bitmap_map_index (map_index);
search_offset = rtems_rfs_bitmap_map_offset (map_index);
42728: e20a801f and r8, sl, #31 <== NOT EXECUTED
/*
* If any bit is clear find that bit and then search the map element. If
* all bits are set there are no map bits so move to the next search
* element.
*/
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
4272c: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
42730: e59cc000 ldr ip, [ip] <== NOT EXECUTED
42734: e35c0000 cmp ip, #0 <== NOT EXECUTED
42738: e58dc000 str ip, [sp] <== NOT EXECUTED
4273c: 0a00003a beq 4282c <T.57+0x194> <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
42740: e1a01284 lsl r1, r4, #5 <== NOT EXECUTED
42744: e08ab004 add fp, sl, r4 <== NOT EXECUTED
42748: e58d1018 str r1, [sp, #24] <== NOT EXECUTED
4274c: e1a0b28b lsl fp, fp, #5 <== NOT EXECUTED
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
42750: e3a06001 mov r6, #1 <== NOT EXECUTED
* all bits are set there are no map bits so move to the next search
* element.
*/
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
{
while ((search_offset >= 0)
42754: e358001f cmp r8, #31 <== NOT EXECUTED
42758: 8a00003f bhi 4285c <T.57+0x1c4> <== NOT EXECUTED
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
4275c: e1a02816 lsl r2, r6, r8 <== NOT EXECUTED
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
{
while ((search_offset >= 0)
&& (search_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*search_bits, search_offset))
42760: e59dc000 ldr ip, [sp] <== NOT EXECUTED
42764: e112000c tst r2, ip <== NOT EXECUTED
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
42768: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
if (!rtems_rfs_bitmap_match (*search_bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
{
while ((search_offset >= 0)
&& (search_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*search_bits, search_offset))
4276c: 0a000013 beq 427c0 <T.57+0x128> <== NOT EXECUTED
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
42770: e1a01316 lsl r1, r6, r3 <== NOT EXECUTED
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
42774: e5997000 ldr r7, [r9] <== NOT EXECUTED
42778: e1110007 tst r1, r7 <== NOT EXECUTED
4277c: 1a00004a bne 428ac <T.57+0x214> <== NOT EXECUTED
*found = true;
rtems_rfs_buffer_mark_dirty (control->buffer);
return 0;
}
if (test_bit == end_bit)
42780: e1550000 cmp r5, r0 <== NOT EXECUTED
42784: 10833004 addne r3, r3, r4 <== NOT EXECUTED
42788: 10802004 addne r2, r0, r4 <== NOT EXECUTED
4278c: 1a000009 bne 427b8 <T.57+0x120> <== NOT EXECUTED
42790: ea00000a b 427c0 <T.57+0x128> <== NOT EXECUTED
*/
static bool
rtems_rfs_bitmap_test (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_bit bit)
{
return RTEMS_RFS_BITMAP_TEST_BIT (target, bit);
42794: e1a01316 lsl r1, r6, r3 <== NOT EXECUTED
*found = true;
rtems_rfs_buffer_mark_dirty (control->buffer);
return 0;
}
if (test_bit == end_bit)
42798: e1a00002 mov r0, r2 <== NOT EXECUTED
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
4279c: e1110007 tst r1, r7 <== NOT EXECUTED
*search_bits = rtems_rfs_bitmap_set (*search_bits,
1 << search_offset);
control->free--;
*bit = test_bit;
*found = true;
rtems_rfs_buffer_mark_dirty (control->buffer);
427a0: e0822004 add r2, r2, r4 <== NOT EXECUTED
427a4: e0833004 add r3, r3, r4 <== NOT EXECUTED
return 0;
}
if (test_bit == end_bit)
427a8: e064c002 rsb ip, r4, r2 <== NOT EXECUTED
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
427ac: 1a00003e bne 428ac <T.57+0x214> <== NOT EXECUTED
*found = true;
rtems_rfs_buffer_mark_dirty (control->buffer);
return 0;
}
if (test_bit == end_bit)
427b0: e155000c cmp r5, ip <== NOT EXECUTED
427b4: 0a000001 beq 427c0 <T.57+0x128> <== NOT EXECUTED
{
/*
* Find the clear bit in the map. Update the search map and map if
* found. We may find none are spare if searching up from the seed.
*/
while ((map_offset >= 0)
427b8: e353001f cmp r3, #31 <== NOT EXECUTED
427bc: 9afffff4 bls 42794 <T.57+0xfc> <== NOT EXECUTED
}
}
map_bits += direction;
map_index += direction;
map_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
427c0: e3540000 cmp r4, #0 <== NOT EXECUTED
427c4: d3a0001f movle r0, #31 <== NOT EXECUTED
427c8: c3a00000 movgt r0, #0 <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
427cc: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
}
}
map_bits += direction;
map_index += direction;
map_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
427d0: d1a03000 movle r3, r0 <== NOT EXECUTED
427d4: c1a03000 movgt r3, r0 <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
427d8: e08b0000 add r0, fp, r0 <== NOT EXECUTED
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
427dc: e1550000 cmp r5, r0 <== NOT EXECUTED
427e0: b3a02000 movlt r2, #0 <== NOT EXECUTED
427e4: a2022001 andge r2, r2, #1 <== NOT EXECUTED
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
427e8: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
427ec: e3520000 cmp r2, #0 <== NOT EXECUTED
map_offset += direction;
test_bit += direction;
}
}
map_bits += direction;
427f0: e0899001 add r9, r9, r1 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_search_map_for_clear_bit (rtems_rfs_bitmap_control* control,
427f4: e084a00a add sl, r4, sl <== NOT EXECUTED
test_bit = (map_index * rtems_rfs_bitmap_element_bits ()) + map_offset;
search_offset += direction;
if (((direction < 0) && (test_bit <= end_bit))
427f8: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
427fc: 1a00004c bne 42934 <T.57+0x29c> <== NOT EXECUTED
42800: e1550000 cmp r5, r0 <== NOT EXECUTED
42804: c3a01000 movgt r1, #0 <== NOT EXECUTED
42808: d3a01001 movle r1, #1 <== NOT EXECUTED
4280c: e3540000 cmp r4, #0 <== NOT EXECUTED
42810: d3a01000 movle r1, #0 <== NOT EXECUTED
42814: e59dc018 ldr ip, [sp, #24] <== NOT EXECUTED
42818: e3510000 cmp r1, #0 <== NOT EXECUTED
4281c: e08bb00c add fp, fp, ip <== NOT EXECUTED
42820: 1a000037 bne 42904 <T.57+0x26c> <== NOT EXECUTED
42824: e0848008 add r8, r4, r8 <== NOT EXECUTED
42828: eaffffc9 b 42754 <T.57+0xbc> <== NOT EXECUTED
* Align test_bit either up or down depending on the direction to next 32
* bit boundary.
*/
rtems_rfs_bitmap_bit bits_skipped;
test_bit &= ~((1 << RTEMS_RFS_ELEMENT_BITS_POWER_2) - 1);
if (direction > 0)
4282c: e3540000 cmp r4, #0 <== NOT EXECUTED
bits_skipped = search_offset + 1;
/*
* Need to remove 1 for the rounding up. The above rounds down and
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
42830: d1e03288 mvnle r3, r8, lsl #5 <== NOT EXECUTED
*/
rtems_rfs_bitmap_bit bits_skipped;
test_bit &= ~((1 << RTEMS_RFS_ELEMENT_BITS_POWER_2) - 1);
if (direction > 0)
{
bits_skipped = rtems_rfs_bitmap_element_bits () - search_offset;
42834: c2688020 rsbgt r8, r8, #32 <== NOT EXECUTED
test_bit += bits_skipped * rtems_rfs_bitmap_element_bits ();
map_offset = 0;
}
else
{
bits_skipped = search_offset + 1;
42838: d2888001 addle r8, r8, #1 <== NOT EXECUTED
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
map_offset = rtems_rfs_bitmap_element_bits () - 1;
}
map_bits += direction * bits_skipped;
4283c: e0020894 mul r2, r4, r8 <== NOT EXECUTED
*
* Align test_bit either up or down depending on the direction to next 32
* bit boundary.
*/
rtems_rfs_bitmap_bit bits_skipped;
test_bit &= ~((1 << RTEMS_RFS_ELEMENT_BITS_POWER_2) - 1);
42840: e3c0001f bic r0, r0, #31 <== NOT EXECUTED
if (direction > 0)
{
bits_skipped = rtems_rfs_bitmap_element_bits () - search_offset;
test_bit += bits_skipped * rtems_rfs_bitmap_element_bits ();
42844: c59d3000 ldrgt r3, [sp] <== NOT EXECUTED
bits_skipped = search_offset + 1;
/*
* Need to remove 1 for the rounding up. The above rounds down and
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
42848: d0830000 addle r0, r3, r0 <== NOT EXECUTED
rtems_rfs_bitmap_bit bits_skipped;
test_bit &= ~((1 << RTEMS_RFS_ELEMENT_BITS_POWER_2) - 1);
if (direction > 0)
{
bits_skipped = rtems_rfs_bitmap_element_bits () - search_offset;
test_bit += bits_skipped * rtems_rfs_bitmap_element_bits ();
4284c: c0800288 addgt r0, r0, r8, lsl #5 <== NOT EXECUTED
bits_skipped = search_offset + 1;
/*
* Need to remove 1 for the rounding up. The above rounds down and
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
42850: d3a0301f movle r3, #31 <== NOT EXECUTED
map_offset = rtems_rfs_bitmap_element_bits () - 1;
}
map_bits += direction * bits_skipped;
map_index += direction * bits_skipped;
42854: e08aa002 add sl, sl, r2 <== NOT EXECUTED
* adds 1. Remember the logic is for subtraction.
*/
test_bit -= ((bits_skipped - 1) * rtems_rfs_bitmap_element_bits ()) + 1;
map_offset = rtems_rfs_bitmap_element_bits () - 1;
}
map_bits += direction * bits_skipped;
42858: e0899102 add r9, r9, r2, lsl #2 <== NOT EXECUTED
map_index += direction * bits_skipped;
}
search_bits += direction;
4285c: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
42860: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
search_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
42864: e3540000 cmp r4, #0 <== NOT EXECUTED
}
map_bits += direction * bits_skipped;
map_index += direction * bits_skipped;
}
search_bits += direction;
42868: e0811002 add r1, r1, r2 <== NOT EXECUTED
4286c: e58d1008 str r1, [sp, #8] <== NOT EXECUTED
search_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
42870: da000029 ble 4291c <T.57+0x284> <== NOT EXECUTED
42874: e1550000 cmp r5, r0 <== NOT EXECUTED
42878: c3a01000 movgt r1, #0 <== NOT EXECUTED
4287c: d3a01001 movle r1, #1 <== NOT EXECUTED
42880: e3a02000 mov r2, #0 <== NOT EXECUTED
42884: e3a08000 mov r8, #0 <== NOT EXECUTED
}
while (((direction < 0) && (test_bit >= end_bit))
|| ((direction > 0) && (test_bit <= end_bit)));
42888: e1110002 tst r1, r2 <== NOT EXECUTED
4288c: 1affffa6 bne 4272c <T.57+0x94> <== NOT EXECUTED
42890: e1550000 cmp r5, r0 <== NOT EXECUTED
42894: a3540000 cmpge r4, #0 <== NOT EXECUTED
42898: d3a02000 movle r2, #0 <== NOT EXECUTED
4289c: c3a02001 movgt r2, #1 <== NOT EXECUTED
428a0: caffffa1 bgt 4272c <T.57+0x94> <== NOT EXECUTED
428a4: e1a00002 mov r0, r2 <== NOT EXECUTED
428a8: eaffff86 b 426c8 <T.57+0x30> <== NOT EXECUTED
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
428ac: e1c71001 bic r1, r7, r1 <== NOT EXECUTED
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
{
*map_bits = rtems_rfs_bitmap_set (*map_bits, 1 << map_offset);
if (rtems_rfs_bitmap_match(*map_bits,
428b0: e3510000 cmp r1, #0 <== NOT EXECUTED
while ((map_offset >= 0)
&& (map_offset < rtems_rfs_bitmap_element_bits ()))
{
if (!rtems_rfs_bitmap_test (*map_bits, map_offset))
{
*map_bits = rtems_rfs_bitmap_set (*map_bits, 1 << map_offset);
428b4: e5891000 str r1, [r9] <== NOT EXECUTED
if (rtems_rfs_bitmap_match(*map_bits,
RTEMS_RFS_BITMAP_ELEMENT_SET))
*search_bits = rtems_rfs_bitmap_set (*search_bits,
428b8: 059d1008 ldreq r1, [sp, #8] <== NOT EXECUTED
428bc: 059d2004 ldreq r2, [sp, #4] <== NOT EXECUTED
428c0: 05913000 ldreq r3, [r1] <== NOT EXECUTED
428c4: 01c33002 biceq r3, r3, r2 <== NOT EXECUTED
428c8: 05813000 streq r3, [r1] <== NOT EXECUTED
1 << search_offset);
control->free--;
428cc: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
428d0: e5931010 ldr r1, [r3, #16] <== NOT EXECUTED
428d4: e59dc014 ldr ip, [sp, #20] <== NOT EXECUTED
428d8: e2411001 sub r1, r1, #1 <== NOT EXECUTED
428dc: e58c1010 str r1, [ip, #16] <== NOT EXECUTED
*bit = test_bit;
*found = true;
rtems_rfs_buffer_mark_dirty (control->buffer);
428e0: e5932000 ldr r2, [r3] <== NOT EXECUTED
if (rtems_rfs_bitmap_match(*map_bits,
RTEMS_RFS_BITMAP_ELEMENT_SET))
*search_bits = rtems_rfs_bitmap_set (*search_bits,
1 << search_offset);
control->free--;
*bit = test_bit;
428e4: e59d1020 ldr r1, [sp, #32] <== NOT EXECUTED
*found = true;
428e8: e59dc01c ldr ip, [sp, #28] <== NOT EXECUTED
428ec: e3a03001 mov r3, #1 <== NOT EXECUTED
if (rtems_rfs_bitmap_match(*map_bits,
RTEMS_RFS_BITMAP_ELEMENT_SET))
*search_bits = rtems_rfs_bitmap_set (*search_bits,
1 << search_offset);
control->free--;
*bit = test_bit;
428f0: e5810000 str r0, [r1] <== NOT EXECUTED
*found = true;
428f4: e5cc3000 strb r3, [ip] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (control->buffer);
428f8: e3a00000 mov r0, #0 <== NOT EXECUTED
428fc: e5c23000 strb r3, [r2] <== NOT EXECUTED
42900: eaffff70 b 426c8 <T.57+0x30> <== NOT EXECUTED
}
map_bits += direction * bits_skipped;
map_index += direction * bits_skipped;
}
search_bits += direction;
42904: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
42908: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
4290c: e08cc001 add ip, ip, r1 <== NOT EXECUTED
42910: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
42914: e3a01001 mov r1, #1 <== NOT EXECUTED
42918: eaffffd9 b 42884 <T.57+0x1ec> <== NOT EXECUTED
search_offset = direction > 0 ? 0 : rtems_rfs_bitmap_element_bits () - 1;
4291c: e1550000 cmp r5, r0 <== NOT EXECUTED
42920: c3a01000 movgt r1, #0 <== NOT EXECUTED
42924: d3a01001 movle r1, #1 <== NOT EXECUTED
42928: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
4292c: e3a0801f mov r8, #31 <== NOT EXECUTED
42930: eaffffd4 b 42888 <T.57+0x1f0> <== NOT EXECUTED
}
map_bits += direction * bits_skipped;
map_index += direction * bits_skipped;
}
search_bits += direction;
42934: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
42938: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
4293c: e08cc001 add ip, ip, r1 <== NOT EXECUTED
42940: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
42944: e1550000 cmp r5, r0 <== NOT EXECUTED
42948: c3a01000 movgt r1, #0 <== NOT EXECUTED
4294c: d3a01001 movle r1, #1 <== NOT EXECUTED
42950: e3a02001 mov r2, #1 <== NOT EXECUTED
42954: e3a0801f mov r8, #31 <== NOT EXECUTED
42958: eaffffca b 42888 <T.57+0x1f0> <== NOT EXECUTED
00000454 <_Barrier_Manager_initialization>:
#include <rtems/score/object.h>
#include <rtems/rtems/barrier.h>
void _Barrier_Manager_initialization(void)
{
}
454: e12fff1e bx lr
0000b980 <_CORE_mutex_Seize_interrupt_trylock>:
{
Thread_Control *executing;
/* disabled when you get here */
executing = _Thread_Executing;
b980: e59f3138 ldr r3, [pc, #312] ; bac0 <_CORE_mutex_Seize_interrupt_trylock+0x140>
b984: e5933000 ldr r3, [r3]
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
b988: e3a02000 mov r2, #0
b98c: e5832034 str r2, [r3, #52] ; 0x34
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
b990: e590c050 ldr ip, [r0, #80] ; 0x50
b994: e15c0002 cmp ip, r2
#if defined(__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__)
int _CORE_mutex_Seize_interrupt_trylock(
CORE_mutex_Control *the_mutex,
ISR_Level *level_p
)
{
b998: e92d4070 push {r4, r5, r6, lr}
b99c: 0a00000e beq b9dc <_CORE_mutex_Seize_interrupt_trylock+0x5c>
the_mutex->lock = CORE_MUTEX_LOCKED;
b9a0: e5802050 str r2, [r0, #80] ; 0x50
*/
RTEMS_INLINE_ROUTINE bool _CORE_mutex_Is_inherit_priority(
CORE_mutex_Attributes *the_attribute
)
{
return the_attribute->discipline == CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
b9a4: e590c048 ldr ip, [r0, #72] ; 0x48
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
b9a8: e5935008 ldr r5, [r3, #8]
the_mutex->nest_count = 1;
b9ac: e3a04001 mov r4, #1
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
b9b0: e35c0002 cmp ip, #2
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
the_mutex->holder_id = executing->Object.id;
b9b4: e5805060 str r5, [r0, #96] ; 0x60
executing = _Thread_Executing;
executing->Wait.return_code = CORE_MUTEX_STATUS_SUCCESSFUL;
if ( !_CORE_mutex_Is_locked( the_mutex ) ) {
the_mutex->lock = CORE_MUTEX_LOCKED;
the_mutex->holder = executing;
b9b8: e580305c str r3, [r0, #92] ; 0x5c
the_mutex->holder_id = executing->Object.id;
the_mutex->nest_count = 1;
b9bc: e5804054 str r4, [r0, #84] ; 0x54
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
b9c0: 0a00000a beq b9f0 <_CORE_mutex_Seize_interrupt_trylock+0x70>
b9c4: e35c0003 cmp ip, #3
b9c8: 0a000019 beq ba34 <_CORE_mutex_Seize_interrupt_trylock+0xb4>
b9cc: e5913000 ldr r3, [r1]
b9d0: e129f003 msr CPSR_fc, r3
b9d4: e3a00000 mov r0, #0
b9d8: e8bd8070 pop {r4, r5, r6, pc}
/*
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
b9dc: e590205c ldr r2, [r0, #92] ; 0x5c
b9e0: e1530002 cmp r3, r2
b9e4: 0a000008 beq ba0c <_CORE_mutex_Seize_interrupt_trylock+0x8c>
b9e8: e3a00001 mov r0, #1
return _CORE_mutex_Seize_interrupt_trylock_body( the_mutex, level_p );
}
b9ec: e8bd8070 pop {r4, r5, r6, pc}
_Chain_Prepend_unprotected( &executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = executing->current_priority;
#endif
executing->resource_count++;
b9f0: e593201c ldr r2, [r3, #28]
b9f4: e2822001 add r2, r2, #1
b9f8: e583201c str r2, [r3, #28]
b9fc: e5913000 ldr r3, [r1]
ba00: e129f003 msr CPSR_fc, r3
ba04: e3a00000 mov r0, #0
ba08: e8bd8070 pop {r4, r5, r6, pc}
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
switch ( the_mutex->Attributes.lock_nesting_behavior ) {
ba0c: e5902040 ldr r2, [r0, #64] ; 0x40
ba10: e3520000 cmp r2, #0
ba14: 1a000017 bne ba78 <_CORE_mutex_Seize_interrupt_trylock+0xf8>
case CORE_MUTEX_NESTING_ACQUIRES:
the_mutex->nest_count++;
ba18: e5903054 ldr r3, [r0, #84] ; 0x54
ba1c: e2833001 add r3, r3, #1
ba20: e5803054 str r3, [r0, #84] ; 0x54
ba24: e5913000 ldr r3, [r1]
ba28: e129f003 msr CPSR_fc, r3
ba2c: e3a00000 mov r0, #0
ba30: e8bd8070 pop {r4, r5, r6, pc}
_Chain_Prepend_unprotected( &executing->lock_mutex,
&the_mutex->queue.lock_queue );
the_mutex->queue.priority_before = executing->current_priority;
#endif
executing->resource_count++;
ba34: e593c01c ldr ip, [r3, #28]
ba38: e08c5004 add r5, ip, r4
ba3c: e583501c str r5, [r3, #28]
{
Priority_Control ceiling;
Priority_Control current;
ceiling = the_mutex->Attributes.priority_ceiling;
current = executing->current_priority;
ba40: e5935014 ldr r5, [r3, #20]
*/
{
Priority_Control ceiling;
Priority_Control current;
ceiling = the_mutex->Attributes.priority_ceiling;
ba44: e590604c ldr r6, [r0, #76] ; 0x4c
current = executing->current_priority;
if ( current == ceiling ) {
ba48: e1560005 cmp r6, r5
ba4c: 0affffde beq b9cc <_CORE_mutex_Seize_interrupt_trylock+0x4c>
_ISR_Enable( *level_p );
return 0;
}
if ( current > ceiling ) {
ba50: 3a00000d bcc ba8c <_CORE_mutex_Seize_interrupt_trylock+0x10c>
);
_Thread_Enable_dispatch();
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
ba54: e3a05006 mov r5, #6
ba58: e5835034 str r5, [r3, #52] ; 0x34
the_mutex->lock = CORE_MUTEX_UNLOCKED;
the_mutex->nest_count = 0; /* undo locking above */
ba5c: e5802054 str r2, [r0, #84] ; 0x54
_Thread_Enable_dispatch();
return 0;
}
/* if ( current < ceiling ) */ {
executing->Wait.return_code = CORE_MUTEX_STATUS_CEILING_VIOLATED;
the_mutex->lock = CORE_MUTEX_UNLOCKED;
ba60: e5804050 str r4, [r0, #80] ; 0x50
the_mutex->nest_count = 0; /* undo locking above */
executing->resource_count--; /* undo locking above */
ba64: e583c01c str ip, [r3, #28]
ba68: e5913000 ldr r3, [r1]
ba6c: e129f003 msr CPSR_fc, r3
ba70: e3a00000 mov r0, #0
ba74: e8bd8070 pop {r4, r5, r6, pc}
* At this point, we know the mutex was not available. If this thread
* is the thread that has locked the mutex, let's see if we are allowed
* to nest access.
*/
if ( _Thread_Is_executing( the_mutex->holder ) ) {
switch ( the_mutex->Attributes.lock_nesting_behavior ) {
ba78: e3520001 cmp r2, #1
ba7c: 1affffd9 bne b9e8 <_CORE_mutex_Seize_interrupt_trylock+0x68>
case CORE_MUTEX_NESTING_ACQUIRES:
the_mutex->nest_count++;
_ISR_Enable( *level_p );
return 0;
case CORE_MUTEX_NESTING_IS_ERROR:
executing->Wait.return_code = CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED;
ba80: e3a02002 mov r2, #2 <== NOT EXECUTED
ba84: e5832034 str r2, [r3, #52] ; 0x34 <== NOT EXECUTED
ba88: eaffffcf b b9cc <_CORE_mutex_Seize_interrupt_trylock+0x4c> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
ba8c: e59f3030 ldr r3, [pc, #48] ; bac4 <_CORE_mutex_Seize_interrupt_trylock+0x144>
ba90: e5932000 ldr r2, [r3]
ba94: e2822001 add r2, r2, #1
ba98: e5832000 str r2, [r3]
ba9c: e5913000 ldr r3, [r1]
baa0: e129f003 msr CPSR_fc, r3
}
if ( current > ceiling ) {
_Thread_Disable_dispatch();
_ISR_Enable( *level_p );
_Thread_Change_priority(
baa4: e3a02000 mov r2, #0
baa8: e590104c ldr r1, [r0, #76] ; 0x4c
baac: e590005c ldr r0, [r0, #92] ; 0x5c
bab0: ebffedfb bl 72a4 <_Thread_Change_priority>
the_mutex->holder,
the_mutex->Attributes.priority_ceiling,
false
);
_Thread_Enable_dispatch();
bab4: ebffef65 bl 7850 <_Thread_Enable_dispatch>
bab8: e3a00000 mov r0, #0
babc: e8bd8070 pop {r4, r5, r6, pc}
00000458 <_Dual_ported_memory_Manager_initialization>:
#include <rtems/rtems/types.h>
#include <rtems/rtems/dpmem.h>
void _Dual_ported_memory_Manager_initialization(void)
{
}
458: e12fff1e bx lr
0000045c <_Event_Manager_initialization>:
#include <rtems/score/thread.h>
#include <rtems/score/interr.h>
void _Event_Manager_initialization(void)
{
}
45c: e12fff1e bx lr
00000478 <_Extension_Manager_initialization>:
#include <rtems/extension.h>
#include <rtems/score/interr.h>
void _Extension_Manager_initialization(void)
{
}
478: e12fff1e bx lr
0000bb3c <_Heap_Allocate_aligned_with_boundary>:
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
bb3c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
bb40: e1a08002 mov r8, r2
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
Heap_Block *block = _Heap_Free_list_first( heap );
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
bb44: e5902010 ldr r2, [r0, #16]
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
bb48: e24dd01c sub sp, sp, #28
bb4c: e1a05001 mov r5, r1
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
uintptr_t alloc_begin = 0;
uint32_t search_count = 0;
if ( block_size_floor < alloc_size ) {
bb50: e2911004 adds r1, r1, #4
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
bb54: e1a07000 mov r7, r0
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
uintptr_t alloc_begin = 0;
uint32_t search_count = 0;
if ( block_size_floor < alloc_size ) {
bb58: e58d1000 str r1, [sp]
Heap_Control *heap,
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
bb5c: e1a0b003 mov fp, r3
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
bb60: e590a008 ldr sl, [r0, #8]
Heap_Statistics *const stats = &heap->stats;
Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
Heap_Block *block = _Heap_Free_list_first( heap );
uintptr_t const block_size_floor = alloc_size + HEAP_BLOCK_HEADER_SIZE
- HEAP_BLOCK_SIZE_OFFSET;
uintptr_t const page_size = heap->page_size;
bb64: e58d200c str r2, [sp, #12]
uintptr_t alloc_begin = 0;
uint32_t search_count = 0;
if ( block_size_floor < alloc_size ) {
bb68: 2a000076 bcs bd48 <_Heap_Allocate_aligned_with_boundary+0x20c>
/* Integer overflow occured */
return NULL;
}
if ( boundary != 0 ) {
bb6c: e3530000 cmp r3, #0
bb70: 1a000072 bne bd40 <_Heap_Allocate_aligned_with_boundary+0x204>
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
bb74: e157000a cmp r7, sl
bb78: 03a06000 moveq r6, #0
bb7c: 0a000074 beq bd54 <_Heap_Allocate_aligned_with_boundary+0x218>
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
bb80: e59d300c ldr r3, [sp, #12]
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
uintptr_t alloc_begin = alloc_end - alloc_size;
bb84: e2651004 rsb r1, r5, #4
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
bb88: e2833007 add r3, r3, #7
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
bb8c: e3a06000 mov r6, #0
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
bb90: e58d3010 str r3, [sp, #16]
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
uintptr_t alloc_begin = alloc_end - alloc_size;
bb94: e58d1014 str r1, [sp, #20]
bb98: ea000004 b bbb0 <_Heap_Allocate_aligned_with_boundary+0x74>
boundary
);
}
}
if ( alloc_begin != 0 ) {
bb9c: e3540000 cmp r4, #0
bba0: 1a000059 bne bd0c <_Heap_Allocate_aligned_with_boundary+0x1d0>
break;
}
block = block->next;
bba4: e59aa008 ldr sl, [sl, #8]
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
bba8: e157000a cmp r7, sl
bbac: 0a000068 beq bd54 <_Heap_Allocate_aligned_with_boundary+0x218>
/*
* The HEAP_PREV_BLOCK_USED flag is always set in the block size_and_flag
* field. Thus the value is about one unit larger than the real block
* size. The greater than operator takes this into account.
*/
if ( block->size_and_flag > block_size_floor ) {
bbb0: e59a9004 ldr r9, [sl, #4]
bbb4: e59d2000 ldr r2, [sp]
bbb8: e1520009 cmp r2, r9
while ( block != free_list_tail ) {
_HAssert( _Heap_Is_prev_used( block ) );
/* Statistics */
++search_count;
bbbc: e2866001 add r6, r6, #1
/*
* The HEAP_PREV_BLOCK_USED flag is always set in the block size_and_flag
* field. Thus the value is about one unit larger than the real block
* size. The greater than operator takes this into account.
*/
if ( block->size_and_flag > block_size_floor ) {
bbc0: 2afffff7 bcs bba4 <_Heap_Allocate_aligned_with_boundary+0x68>
if ( alignment == 0 ) {
bbc4: e3580000 cmp r8, #0
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
bbc8: 028a4008 addeq r4, sl, #8
bbcc: 0afffff2 beq bb9c <_Heap_Allocate_aligned_with_boundary+0x60>
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
uintptr_t alloc_begin = alloc_end - alloc_size;
bbd0: e59d1014 ldr r1, [sp, #20]
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
uintptr_t const block_begin = (uintptr_t) block;
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
bbd4: e3c99001 bic r9, r9, #1
bbd8: e08a9009 add r9, sl, r9
uintptr_t alignment,
uintptr_t boundary
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
bbdc: e5973014 ldr r3, [r7, #20]
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
bbe0: e59d2010 ldr r2, [sp, #16]
uintptr_t alloc_end = block_end + HEAP_BLOCK_SIZE_OFFSET;
uintptr_t alloc_begin = alloc_end - alloc_size;
bbe4: e0814009 add r4, r1, r9
uintptr_t alignment,
uintptr_t boundary
)
{
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
bbe8: e58d3004 str r3, [sp, #4]
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
bbec: e1a00004 mov r0, r4
uintptr_t const block_size = _Heap_Block_size( block );
uintptr_t const block_end = block_begin + block_size;
uintptr_t const alloc_begin_floor = _Heap_Alloc_area_of_block( block );
uintptr_t const alloc_begin_ceiling = block_end - min_block_size
+ HEAP_BLOCK_HEADER_SIZE + page_size - 1;
bbf0: e0633002 rsb r3, r3, r2
bbf4: e1a01008 mov r1, r8
bbf8: e0839009 add r9, r3, r9
bbfc: eb002f7d bl 179f8 <__umodsi3>
bc00: e0604004 rsb r4, r0, r4
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Alloc_area_of_block(
const Heap_Block *block
)
{
return (uintptr_t) block + HEAP_BLOCK_HEADER_SIZE;
bc04: e28a3008 add r3, sl, #8
uintptr_t alloc_begin = alloc_end - alloc_size;
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
bc08: e1590004 cmp r9, r4
bc0c: e58d3008 str r3, [sp, #8]
bc10: 2a000003 bcs bc24 <_Heap_Allocate_aligned_with_boundary+0xe8>
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
uintptr_t value,
uintptr_t alignment
)
{
return value - (value % alignment);
bc14: e1a00009 mov r0, r9
bc18: e1a01008 mov r1, r8
bc1c: eb002f75 bl 179f8 <__umodsi3>
bc20: e0604009 rsb r4, r0, r9
}
alloc_end = alloc_begin + alloc_size;
/* Ensure boundary constaint */
if ( boundary != 0 ) {
bc24: e35b0000 cmp fp, #0
bc28: 0a000025 beq bcc4 <_Heap_Allocate_aligned_with_boundary+0x188>
/* Ensure that the we have a valid new block at the end */
if ( alloc_begin > alloc_begin_ceiling ) {
alloc_begin = _Heap_Align_down( alloc_begin_ceiling, alignment );
}
alloc_end = alloc_begin + alloc_size;
bc2c: e0849005 add r9, r4, r5
bc30: e1a00009 mov r0, r9
bc34: e1a0100b mov r1, fp
bc38: eb002f6e bl 179f8 <__umodsi3>
bc3c: e0600009 rsb r0, r0, r9
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
bc40: e1590000 cmp r9, r0
bc44: 93a03000 movls r3, #0
bc48: 83a03001 movhi r3, #1
bc4c: e1540000 cmp r4, r0
bc50: 23a03000 movcs r3, #0
bc54: e3530000 cmp r3, #0
bc58: 0a000019 beq bcc4 <_Heap_Allocate_aligned_with_boundary+0x188>
alloc_end = alloc_begin + alloc_size;
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
bc5c: e59d1008 ldr r1, [sp, #8]
bc60: e0819005 add r9, r1, r5
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
if ( boundary_line < boundary_floor ) {
bc64: e1590000 cmp r9, r0
bc68: 958d6018 strls r6, [sp, #24]
bc6c: 9a000002 bls bc7c <_Heap_Allocate_aligned_with_boundary+0x140>
bc70: eaffffcb b bba4 <_Heap_Allocate_aligned_with_boundary+0x68>
bc74: e1590000 cmp r9, r0
bc78: 8a000037 bhi bd5c <_Heap_Allocate_aligned_with_boundary+0x220>
return 0;
}
alloc_begin = boundary_line - alloc_size;
bc7c: e0654000 rsb r4, r5, r0
bc80: e1a01008 mov r1, r8
bc84: e1a00004 mov r0, r4
bc88: eb002f5a bl 179f8 <__umodsi3>
bc8c: e0604004 rsb r4, r0, r4
alloc_begin = _Heap_Align_down( alloc_begin, alignment );
alloc_end = alloc_begin + alloc_size;
bc90: e0846005 add r6, r4, r5
bc94: e1a00006 mov r0, r6
bc98: e1a0100b mov r1, fp
bc9c: eb002f55 bl 179f8 <__umodsi3>
bca0: e0600006 rsb r0, r0, r6
/* Ensure boundary constaint */
if ( boundary != 0 ) {
uintptr_t const boundary_floor = alloc_begin_floor + alloc_size;
uintptr_t boundary_line = _Heap_Align_down( alloc_end, boundary );
while ( alloc_begin < boundary_line && boundary_line < alloc_end ) {
bca4: e1560000 cmp r6, r0
bca8: 93a03000 movls r3, #0
bcac: 83a03001 movhi r3, #1
bcb0: e1540000 cmp r4, r0
bcb4: 23a03000 movcs r3, #0
bcb8: e3530000 cmp r3, #0
bcbc: 1affffec bne bc74 <_Heap_Allocate_aligned_with_boundary+0x138>
bcc0: e59d6018 ldr r6, [sp, #24]
boundary_line = _Heap_Align_down( alloc_end, boundary );
}
}
/* Ensure that the we have a valid new block at the beginning */
if ( alloc_begin >= alloc_begin_floor ) {
bcc4: e59d2008 ldr r2, [sp, #8]
bcc8: e1520004 cmp r2, r4
bccc: 8affffb4 bhi bba4 <_Heap_Allocate_aligned_with_boundary+0x68>
uintptr_t const alloc_block_begin =
(uintptr_t) _Heap_Block_of_alloc_area( alloc_begin, page_size );
uintptr_t const free_size = alloc_block_begin - block_begin;
bcd0: e59d100c ldr r1, [sp, #12]
bcd4: e1a00004 mov r0, r4
bcd8: eb002f46 bl 179f8 <__umodsi3>
bcdc: e26a94ff rsb r9, sl, #-16777216 ; 0xff000000
bce0: e28998ff add r9, r9, #16711680 ; 0xff0000
bce4: e2899cff add r9, r9, #65280 ; 0xff00
bce8: e28990f8 add r9, r9, #248 ; 0xf8
bcec: e0899004 add r9, r9, r4
if ( free_size >= min_block_size || free_size == 0 ) {
bcf0: e59d1004 ldr r1, [sp, #4]
bcf4: e0603009 rsb r3, r0, r9
bcf8: e1590000 cmp r9, r0
bcfc: 11510003 cmpne r1, r3
bd00: 8affffa7 bhi bba4 <_Heap_Allocate_aligned_with_boundary+0x68>
boundary
);
}
}
if ( alloc_begin != 0 ) {
bd04: e3540000 cmp r4, #0
bd08: 0affffa5 beq bba4 <_Heap_Allocate_aligned_with_boundary+0x68>
block = block->next;
}
if ( alloc_begin != 0 ) {
/* Statistics */
stats->searches += search_count;
bd0c: e597304c ldr r3, [r7, #76] ; 0x4c
bd10: e0833006 add r3, r3, r6
bd14: e587304c str r3, [r7, #76] ; 0x4c
block = _Heap_Block_allocate( heap, block, alloc_begin, alloc_size );
bd18: e1a0100a mov r1, sl
bd1c: e1a03005 mov r3, r5
bd20: e1a00007 mov r0, r7
bd24: e1a02004 mov r2, r4
bd28: ebffead7 bl 688c <_Heap_Block_allocate>
bd2c: e1a00004 mov r0, r4
uintptr_t alloc_size,
uintptr_t alignment,
uintptr_t boundary
)
{
Heap_Statistics *const stats = &heap->stats;
bd30: e5973044 ldr r3, [r7, #68] ; 0x44
bd34: e1530006 cmp r3, r6
);
}
/* Statistics */
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
bd38: 35876044 strcc r6, [r7, #68] ; 0x44
bd3c: ea000002 b bd4c <_Heap_Allocate_aligned_with_boundary+0x210>
/* Integer overflow occured */
return NULL;
}
if ( boundary != 0 ) {
if ( boundary < alloc_size ) {
bd40: e1550003 cmp r5, r3
bd44: 9a000006 bls bd64 <_Heap_Allocate_aligned_with_boundary+0x228>
);
}
/* Statistics */
if ( stats->max_search < search_count ) {
stats->max_search = search_count;
bd48: e3a00000 mov r0, #0
}
return (void *) alloc_begin;
}
bd4c: e28dd01c add sp, sp, #28
bd50: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
if ( alignment == 0 ) {
alignment = page_size;
}
}
while ( block != free_list_tail ) {
bd54: e3a00000 mov r0, #0
bd58: eafffff4 b bd30 <_Heap_Allocate_aligned_with_boundary+0x1f4>
bd5c: e59d6018 ldr r6, [sp, #24] <== NOT EXECUTED
bd60: eaffff8f b bba4 <_Heap_Allocate_aligned_with_boundary+0x68><== NOT EXECUTED
if ( boundary != 0 ) {
if ( boundary < alloc_size ) {
return NULL;
}
if ( alignment == 0 ) {
bd64: e3580000 cmp r8, #0
bd68: 01a08002 moveq r8, r2
bd6c: eaffff80 b bb74 <_Heap_Allocate_aligned_with_boundary+0x38>
0000763c <_Heap_Walk>:
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
763c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
Heap_Block *const last_block = heap->last_block;
Heap_Block *block = heap->first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
if ( !_System_state_Is_up( _System_state_Get() ) ) {
7640: e59f35dc ldr r3, [pc, #1500] ; 7c24 <_Heap_Walk+0x5e8>
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
Heap_Block *const last_block = heap->last_block;
Heap_Block *block = heap->first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
7644: e31200ff tst r2, #255 ; 0xff
if ( !_System_state_Is_up( _System_state_Get() ) ) {
7648: e5933000 ldr r3, [r3]
uintptr_t const page_size = heap->page_size;
uintptr_t const min_block_size = heap->min_block_size;
Heap_Block *const last_block = heap->last_block;
Heap_Block *block = heap->first_block;
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
764c: e59f25d4 ldr r2, [pc, #1492] ; 7c28 <_Heap_Walk+0x5ec>
7650: e59fa5d4 ldr sl, [pc, #1492] ; 7c2c <_Heap_Walk+0x5f0>
7654: 01a0a002 moveq sl, r2
if ( !_System_state_Is_up( _System_state_Get() ) ) {
7658: e3530003 cmp r3, #3
Heap_Control *heap,
int source,
bool dump
)
{
uintptr_t const page_size = heap->page_size;
765c: e5902010 ldr r2, [r0, #16]
uintptr_t const min_block_size = heap->min_block_size;
Heap_Block *const last_block = heap->last_block;
7660: e5903024 ldr r3, [r0, #36] ; 0x24
bool _Heap_Walk(
Heap_Control *heap,
int source,
bool dump
)
{
7664: e24dd03c sub sp, sp, #60 ; 0x3c
7668: e1a04000 mov r4, r0
766c: e1a08001 mov r8, r1
uintptr_t const page_size = heap->page_size;
7670: e58d2020 str r2, [sp, #32]
uintptr_t const min_block_size = heap->min_block_size;
7674: e590b014 ldr fp, [r0, #20]
Heap_Block *const last_block = heap->last_block;
7678: e58d3024 str r3, [sp, #36] ; 0x24
Heap_Block *block = heap->first_block;
767c: e5905020 ldr r5, [r0, #32]
Heap_Walk_printer printer = dump ?
_Heap_Walk_print : _Heap_Walk_print_nothing;
if ( !_System_state_Is_up( _System_state_Get() ) ) {
7680: 0a000002 beq 7690 <_Heap_Walk+0x54>
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
}
while ( block != last_block ) {
7684: e3a00001 mov r0, #1
block = next_block;
}
return true;
}
7688: e28dd03c add sp, sp, #60 ; 0x3c
768c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
Heap_Block *const first_block = heap->first_block;
Heap_Block *const last_block = heap->last_block;
(*printer)(
7690: e5900018 ldr r0, [r0, #24]
7694: e594101c ldr r1, [r4, #28]
7698: e2842008 add r2, r4, #8
769c: e892000c ldm r2, {r2, r3}
76a0: e59dc024 ldr ip, [sp, #36] ; 0x24
76a4: e98d0003 stmib sp, {r0, r1}
76a8: e58d2014 str r2, [sp, #20]
76ac: e58d3018 str r3, [sp, #24]
76b0: e59f2578 ldr r2, [pc, #1400] ; 7c30 <_Heap_Walk+0x5f4>
76b4: e58db000 str fp, [sp]
76b8: e58d500c str r5, [sp, #12]
76bc: e58dc010 str ip, [sp, #16]
76c0: e1a00008 mov r0, r8
76c4: e3a01000 mov r1, #0
76c8: e59d3020 ldr r3, [sp, #32]
76cc: e1a0e00f mov lr, pc
76d0: e12fff1a bx sl
heap->area_begin, heap->area_end,
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
76d4: e59d2020 ldr r2, [sp, #32]
76d8: e3520000 cmp r2, #0
76dc: 0a000032 beq 77ac <_Heap_Walk+0x170>
(*printer)( source, true, "page size is zero\n" );
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
76e0: e59d3020 ldr r3, [sp, #32]
76e4: e2139003 ands r9, r3, #3
76e8: 1a000036 bne 77c8 <_Heap_Walk+0x18c>
);
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
76ec: e1a0000b mov r0, fp
76f0: e59d1020 ldr r1, [sp, #32]
76f4: ebffe547 bl c18 <__umodsi3>
76f8: e2506000 subs r6, r0, #0
76fc: 1a000038 bne 77e4 <_Heap_Walk+0x1a8>
);
return false;
}
if (
7700: e2850008 add r0, r5, #8
7704: e59d1020 ldr r1, [sp, #32]
7708: ebffe542 bl c18 <__umodsi3>
770c: e2509000 subs r9, r0, #0
7710: 1a00003b bne 7804 <_Heap_Walk+0x1c8>
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
7714: e5957004 ldr r7, [r5, #4]
);
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
7718: e2176001 ands r6, r7, #1
771c: 0a000040 beq 7824 <_Heap_Walk+0x1e8>
);
return false;
}
if ( first_block->prev_size != page_size ) {
7720: e5953000 ldr r3, [r5]
7724: e59dc020 ldr ip, [sp, #32]
7728: e15c0003 cmp ip, r3
772c: 1a000016 bne 778c <_Heap_Walk+0x150>
);
return false;
}
if ( _Heap_Is_free( last_block ) ) {
7730: e59d2024 ldr r2, [sp, #36] ; 0x24
7734: e5923004 ldr r3, [r2, #4]
7738: e3c33001 bic r3, r3, #1
773c: e0823003 add r3, r2, r3
7740: e5939004 ldr r9, [r3, #4]
7744: e2199001 ands r9, r9, #1
7748: 0a000114 beq 7ba0 <_Heap_Walk+0x564>
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
774c: e5949008 ldr r9, [r4, #8]
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
7750: e5943010 ldr r3, [r4, #16]
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
7754: e1540009 cmp r4, r9
int source,
Heap_Walk_printer printer,
Heap_Control *heap
)
{
uintptr_t const page_size = heap->page_size;
7758: e58d3028 str r3, [sp, #40] ; 0x28
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
775c: 0a00006e beq 791c <_Heap_Walk+0x2e0>
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
7760: e5942020 ldr r2, [r4, #32]
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
7764: e1520009 cmp r2, r9
7768: 9a000034 bls 7840 <_Heap_Walk+0x204>
if ( !_Heap_Is_block_in_heap( heap, free_block ) ) {
(*printer)(
776c: e1a00008 mov r0, r8
7770: e1a03009 mov r3, r9
7774: e3a01001 mov r1, #1
7778: e59f24b4 ldr r2, [pc, #1204] ; 7c34 <_Heap_Walk+0x5f8>
777c: e1a0e00f mov lr, pc
7780: e12fff1a bx sl
7784: e3a00000 mov r0, #0
7788: eaffffbe b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( first_block->prev_size != page_size ) {
(*printer)(
778c: e1a00008 mov r0, r8
7790: e58dc000 str ip, [sp]
7794: e3a01001 mov r1, #1
7798: e59f2498 ldr r2, [pc, #1176] ; 7c38 <_Heap_Walk+0x5fc>
779c: e1a0e00f mov lr, pc
77a0: e12fff1a bx sl
77a4: e1a00009 mov r0, r9
77a8: eaffffb6 b 7688 <_Heap_Walk+0x4c>
first_block, last_block,
first_free_block, last_free_block
);
if ( page_size == 0 ) {
(*printer)( source, true, "page size is zero\n" );
77ac: e1a00008 mov r0, r8
77b0: e3a01001 mov r1, #1
77b4: e59f2480 ldr r2, [pc, #1152] ; 7c3c <_Heap_Walk+0x600>
77b8: e1a0e00f mov lr, pc
77bc: e12fff1a bx sl
77c0: e59d0020 ldr r0, [sp, #32]
77c4: eaffffaf b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( !_Addresses_Is_aligned( (void *) page_size ) ) {
(*printer)(
77c8: e1a00008 mov r0, r8
77cc: e3a01001 mov r1, #1
77d0: e59f2468 ldr r2, [pc, #1128] ; 7c40 <_Heap_Walk+0x604>
77d4: e1a0e00f mov lr, pc
77d8: e12fff1a bx sl
77dc: e3a00000 mov r0, #0
77e0: eaffffa8 b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( !_Heap_Is_aligned( min_block_size, page_size ) ) {
(*printer)(
77e4: e1a00008 mov r0, r8
77e8: e1a0300b mov r3, fp
77ec: e3a01001 mov r1, #1
77f0: e59f244c ldr r2, [pc, #1100] ; 7c44 <_Heap_Walk+0x608>
77f4: e1a0e00f mov lr, pc
77f8: e12fff1a bx sl
77fc: e1a00009 mov r0, r9
7800: eaffffa0 b 7688 <_Heap_Walk+0x4c>
}
if (
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( first_block ), page_size )
) {
(*printer)(
7804: e1a00008 mov r0, r8
7808: e1a03005 mov r3, r5
780c: e3a01001 mov r1, #1
7810: e59f2430 ldr r2, [pc, #1072] ; 7c48 <_Heap_Walk+0x60c>
7814: e1a0e00f mov lr, pc
7818: e12fff1a bx sl
781c: e1a00006 mov r0, r6
7820: eaffff98 b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( !_Heap_Is_prev_used( first_block ) ) {
(*printer)(
7824: e1a00008 mov r0, r8
7828: e3a01001 mov r1, #1
782c: e59f2418 ldr r2, [pc, #1048] ; 7c4c <_Heap_Walk+0x610>
7830: e1a0e00f mov lr, pc
7834: e12fff1a bx sl
7838: e1a00006 mov r0, r6
783c: eaffff91 b 7688 <_Heap_Walk+0x4c>
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
7840: e594c024 ldr ip, [r4, #36] ; 0x24
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
7844: e159000c cmp r9, ip
&& (uintptr_t) block <= (uintptr_t) heap->last_block;
7848: e58dc02c str ip, [sp, #44] ; 0x2c
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
784c: 8affffc6 bhi 776c <_Heap_Walk+0x130>
);
return false;
}
if (
7850: e2890008 add r0, r9, #8
7854: e1a01003 mov r1, r3
7858: e58d201c str r2, [sp, #28]
785c: ebffe4ed bl c18 <__umodsi3>
7860: e3500000 cmp r0, #0
7864: e59d201c ldr r2, [sp, #28]
7868: 1a0000d3 bne 7bbc <_Heap_Walk+0x580>
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
786c: e5993004 ldr r3, [r9, #4]
7870: e3c33001 bic r3, r3, #1
7874: e0893003 add r3, r9, r3
7878: e5933004 ldr r3, [r3, #4]
787c: e3130001 tst r3, #1
7880: 1a0000df bne 7c04 <_Heap_Walk+0x5c8>
);
return false;
}
if ( free_block->prev != prev_block ) {
7884: e599c00c ldr ip, [r9, #12]
7888: e15c0004 cmp ip, r4
788c: 1a0000d3 bne 7be0 <_Heap_Walk+0x5a4>
7890: e58d7030 str r7, [sp, #48] ; 0x30
7894: e58db034 str fp, [sp, #52] ; 0x34
7898: e59d702c ldr r7, [sp, #44] ; 0x2c
789c: e59db028 ldr fp, [sp, #40] ; 0x28
78a0: e58d502c str r5, [sp, #44] ; 0x2c
78a4: e58d6038 str r6, [sp, #56] ; 0x38
78a8: e1a0500c mov r5, ip
78ac: e58d4028 str r4, [sp, #40] ; 0x28
78b0: e1a06002 mov r6, r2
78b4: ea000011 b 7900 <_Heap_Walk+0x2c4>
78b8: e1560009 cmp r6, r9
78bc: 8affffaa bhi 776c <_Heap_Walk+0x130>
78c0: e1590007 cmp r9, r7
);
return false;
}
if (
78c4: e2890008 add r0, r9, #8
78c8: e1a0100b mov r1, fp
78cc: 8affffa6 bhi 776c <_Heap_Walk+0x130>
78d0: ebffe4d0 bl c18 <__umodsi3>
78d4: e3500000 cmp r0, #0
78d8: 1a0000b7 bne 7bbc <_Heap_Walk+0x580>
);
return false;
}
if ( _Heap_Is_used( free_block ) ) {
78dc: e5993004 ldr r3, [r9, #4]
78e0: e3c33001 bic r3, r3, #1
78e4: e0833009 add r3, r3, r9
78e8: e5933004 ldr r3, [r3, #4]
78ec: e3130001 tst r3, #1
78f0: 1a0000c3 bne 7c04 <_Heap_Walk+0x5c8>
);
return false;
}
if ( free_block->prev != prev_block ) {
78f4: e599200c ldr r2, [r9, #12]
78f8: e1540002 cmp r4, r2
78fc: 1a0000b6 bne 7bdc <_Heap_Walk+0x5a0>
(*printer)(
7900: e1a04009 mov r4, r9
return false;
}
prev_block = free_block;
free_block = free_block->next;
7904: e5999008 ldr r9, [r9, #8]
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
7908: e1550009 cmp r5, r9
790c: 1affffe9 bne 78b8 <_Heap_Walk+0x27c>
7910: e28d4028 add r4, sp, #40 ; 0x28
7914: e89408b0 ldm r4, {r4, r5, r7, fp}
7918: e59d6038 ldr r6, [sp, #56] ; 0x38
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
}
while ( block != last_block ) {
791c: e59d3024 ldr r3, [sp, #36] ; 0x24
7920: e1530005 cmp r3, r5
"block 0x%08x: prev 0x%08x%s, next 0x%08x%s\n",
block,
block->prev,
block->prev == first_free_block ?
" (= first)"
: (block->prev == free_list_head ? " (= head)" : ""),
7924: 158db028 strne fp, [sp, #40] ; 0x28
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
}
while ( block != last_block ) {
7928: 0affff55 beq 7684 <_Heap_Walk+0x48>
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
792c: e3c77001 bic r7, r7, #1
uintptr_t const block_size = _Heap_Block_size( block );
bool const prev_used = _Heap_Is_prev_used( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
uintptr_t const next_block_begin = (uintptr_t) next_block;
if ( prev_used ) {
7930: e21610ff ands r1, r6, #255 ; 0xff
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
7934: e0876005 add r6, r7, r5
7938: 0a000012 beq 7988 <_Heap_Walk+0x34c>
(*printer)(
793c: e1a03005 mov r3, r5
7940: e58d7000 str r7, [sp]
7944: e1a00008 mov r0, r8
7948: e3a01000 mov r1, #0
794c: e59f22fc ldr r2, [pc, #764] ; 7c50 <_Heap_Walk+0x614>
7950: e1a0e00f mov lr, pc
7954: e12fff1a bx sl
RTEMS_INLINE_ROUTINE bool _Heap_Is_block_in_heap(
const Heap_Control *heap,
const Heap_Block *block
)
{
return (uintptr_t) block >= (uintptr_t) heap->first_block
7958: e5943020 ldr r3, [r4, #32]
795c: e1530006 cmp r3, r6
7960: 9a000013 bls 79b4 <_Heap_Walk+0x378>
block->prev_size
);
}
if ( !_Heap_Is_block_in_heap( heap, next_block ) ) {
(*printer)(
7964: e1a00008 mov r0, r8
7968: e58d6000 str r6, [sp]
796c: e1a03005 mov r3, r5
7970: e3a01001 mov r1, #1
7974: e59f22d8 ldr r2, [pc, #728] ; 7c54 <_Heap_Walk+0x618>
7978: e1a0e00f mov lr, pc
797c: e12fff1a bx sl
7980: e3a00000 mov r0, #0
"block 0x%08x: next block 0x%08x not in heap\n",
block,
next_block
);
return false;
7984: eaffff3f b 7688 <_Heap_Walk+0x4c>
"block 0x%08x: size %u\n",
block,
block_size
);
} else {
(*printer)(
7988: e58d7000 str r7, [sp]
798c: e5953000 ldr r3, [r5]
7990: e1a00008 mov r0, r8
7994: e58d3004 str r3, [sp, #4]
7998: e59f22b8 ldr r2, [pc, #696] ; 7c58 <_Heap_Walk+0x61c>
799c: e1a03005 mov r3, r5
79a0: e1a0e00f mov lr, pc
79a4: e12fff1a bx sl
79a8: e5943020 ldr r3, [r4, #32]
79ac: e1530006 cmp r3, r6
79b0: 8affffeb bhi 7964 <_Heap_Walk+0x328>
79b4: e5943024 ldr r3, [r4, #36] ; 0x24
79b8: e1530006 cmp r3, r6
79bc: 3affffe8 bcc 7964 <_Heap_Walk+0x328>
);
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) ) {
79c0: e1a00007 mov r0, r7
79c4: e59d1020 ldr r1, [sp, #32]
79c8: ebffe492 bl c18 <__umodsi3>
79cc: e2509000 subs r9, r0, #0
79d0: 1a000055 bne 7b2c <_Heap_Walk+0x4f0>
);
return false;
}
if ( block_size < min_block_size ) {
79d4: e59d2028 ldr r2, [sp, #40] ; 0x28
79d8: e1520007 cmp r2, r7
79dc: 8a00005b bhi 7b50 <_Heap_Walk+0x514>
);
return false;
}
if ( next_block_begin <= block_begin ) {
79e0: e1550006 cmp r5, r6
79e4: 2a000064 bcs 7b7c <_Heap_Walk+0x540>
);
return false;
}
if ( !_Heap_Is_prev_used( next_block ) ) {
79e8: e5963004 ldr r3, [r6, #4]
79ec: e3130001 tst r3, #1
79f0: 1a000036 bne 7ad0 <_Heap_Walk+0x494>
block->size_and_flag = size | flag;
}
RTEMS_INLINE_ROUTINE bool _Heap_Is_prev_used( const Heap_Block *block )
{
return block->size_and_flag & HEAP_PREV_BLOCK_USED;
79f4: e595b004 ldr fp, [r5, #4]
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
79f8: e595200c ldr r2, [r5, #12]
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
79fc: e5943008 ldr r3, [r4, #8]
- HEAP_BLOCK_HEADER_SIZE);
}
RTEMS_INLINE_ROUTINE uintptr_t _Heap_Block_size( const Heap_Block *block )
{
return block->size_and_flag & ~HEAP_PREV_BLOCK_USED;
7a00: e3cb7001 bic r7, fp, #1
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
7a04: e1530002 cmp r3, r2
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_last( Heap_Control *heap )
{
return _Heap_Free_list_tail(heap)->prev;
7a08: e594100c ldr r1, [r4, #12]
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Block_at(
const Heap_Block *block,
uintptr_t offset
)
{
return (Heap_Block *) ((uintptr_t) block + offset);
7a0c: e0859007 add r9, r5, r7
return &heap->free_list;
}
RTEMS_INLINE_ROUTINE Heap_Block *_Heap_Free_list_first( Heap_Control *heap )
{
return _Heap_Free_list_head(heap)->next;
7a10: 059f0244 ldreq r0, [pc, #580] ; 7c5c <_Heap_Walk+0x620>
7a14: 0a000003 beq 7a28 <_Heap_Walk+0x3ec>
"block 0x%08x: prev 0x%08x%s, next 0x%08x%s\n",
block,
block->prev,
block->prev == first_free_block ?
" (= first)"
: (block->prev == free_list_head ? " (= head)" : ""),
7a18: e59f3240 ldr r3, [pc, #576] ; 7c60 <_Heap_Walk+0x624>
7a1c: e1520004 cmp r2, r4
7a20: e59f023c ldr r0, [pc, #572] ; 7c64 <_Heap_Walk+0x628>
7a24: 11a00003 movne r0, r3
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
7a28: e5953008 ldr r3, [r5, #8]
7a2c: e1510003 cmp r1, r3
7a30: 059f1230 ldreq r1, [pc, #560] ; 7c68 <_Heap_Walk+0x62c>
7a34: 0a000003 beq 7a48 <_Heap_Walk+0x40c>
" (= first)"
: (block->prev == free_list_head ? " (= head)" : ""),
block->next,
block->next == last_free_block ?
" (= last)"
: (block->next == free_list_tail ? " (= tail)" : "")
7a38: e59fc220 ldr ip, [pc, #544] ; 7c60 <_Heap_Walk+0x624>
7a3c: e1530004 cmp r3, r4
7a40: e59f1224 ldr r1, [pc, #548] ; 7c6c <_Heap_Walk+0x630>
7a44: 11a0100c movne r1, ip
Heap_Block *const last_free_block = _Heap_Free_list_last( heap );
bool const prev_used = _Heap_Is_prev_used( block );
uintptr_t const block_size = _Heap_Block_size( block );
Heap_Block *const next_block = _Heap_Block_at( block, block_size );
(*printer)(
7a48: e58d2000 str r2, [sp]
7a4c: e98d0009 stmib sp, {r0, r3}
7a50: e58d100c str r1, [sp, #12]
7a54: e1a03005 mov r3, r5
7a58: e1a00008 mov r0, r8
7a5c: e3a01000 mov r1, #0
7a60: e59f2208 ldr r2, [pc, #520] ; 7c70 <_Heap_Walk+0x634>
7a64: e1a0e00f mov lr, pc
7a68: e12fff1a bx sl
block->next == last_free_block ?
" (= last)"
: (block->next == free_list_tail ? " (= tail)" : "")
);
if ( block_size != next_block->prev_size ) {
7a6c: e5993000 ldr r3, [r9]
7a70: e1570003 cmp r7, r3
7a74: 0a00000a beq 7aa4 <_Heap_Walk+0x468>
(*printer)(
7a78: e58d3004 str r3, [sp, #4]
7a7c: e1a00008 mov r0, r8
7a80: e58d7000 str r7, [sp]
7a84: e58d9008 str r9, [sp, #8]
7a88: e1a03005 mov r3, r5
7a8c: e3a01001 mov r1, #1
7a90: e59f21dc ldr r2, [pc, #476] ; 7c74 <_Heap_Walk+0x638>
7a94: e1a0e00f mov lr, pc
7a98: e12fff1a bx sl
7a9c: e3a00000 mov r0, #0
7aa0: eafffef8 b 7688 <_Heap_Walk+0x4c>
);
return false;
}
if ( !prev_used ) {
7aa4: e21b9001 ands r9, fp, #1
7aa8: 0a000017 beq 7b0c <_Heap_Walk+0x4d0>
7aac: e5943008 ldr r3, [r4, #8]
)
{
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *free_block = _Heap_Free_list_first( heap );
while ( free_block != free_list_tail ) {
7ab0: e1530004 cmp r3, r4
7ab4: 1a000003 bne 7ac8 <_Heap_Walk+0x48c>
7ab8: ea00000b b 7aec <_Heap_Walk+0x4b0> <== NOT EXECUTED
if ( free_block == block ) {
return true;
}
free_block = free_block->next;
7abc: e5933008 ldr r3, [r3, #8]
)
{
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *free_block = _Heap_Free_list_first( heap );
while ( free_block != free_list_tail ) {
7ac0: e1530004 cmp r3, r4
7ac4: 0a000008 beq 7aec <_Heap_Walk+0x4b0>
if ( free_block == block ) {
7ac8: e1530005 cmp r3, r5
7acc: 1afffffa bne 7abc <_Heap_Walk+0x480>
if ( !_Heap_Walk_check_control( source, printer, heap ) ) {
return false;
}
while ( block != last_block ) {
7ad0: e59d2024 ldr r2, [sp, #36] ; 0x24
7ad4: e1520006 cmp r2, r6
7ad8: 0afffee9 beq 7684 <_Heap_Walk+0x48>
const Heap_Block *const free_list_tail = _Heap_Free_list_tail( heap );
const Heap_Block *const first_free_block = _Heap_Free_list_first( heap );
const Heap_Block *prev_block = free_list_tail;
const Heap_Block *free_block = first_free_block;
while ( free_block != free_list_tail ) {
7adc: e5967004 ldr r7, [r6, #4]
7ae0: e1a05006 mov r5, r6
7ae4: e2076001 and r6, r7, #1
7ae8: eaffff8f b 792c <_Heap_Walk+0x2f0>
return false;
}
if ( !_Heap_Walk_is_in_free_list( heap, block ) ) {
(*printer)(
7aec: e1a00008 mov r0, r8
7af0: e1a03005 mov r3, r5
7af4: e3a01001 mov r1, #1
7af8: e59f2178 ldr r2, [pc, #376] ; 7c78 <_Heap_Walk+0x63c>
7afc: e1a0e00f mov lr, pc
7b00: e12fff1a bx sl
7b04: e3a00000 mov r0, #0
7b08: eafffede b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( !prev_used ) {
(*printer)(
7b0c: e1a00008 mov r0, r8
7b10: e1a03005 mov r3, r5
7b14: e3a01001 mov r1, #1
7b18: e59f215c ldr r2, [pc, #348] ; 7c7c <_Heap_Walk+0x640>
7b1c: e1a0e00f mov lr, pc
7b20: e12fff1a bx sl
7b24: e1a00009 mov r0, r9
7b28: eafffed6 b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( !_Heap_Is_aligned( block_size, page_size ) ) {
(*printer)(
7b2c: e1a00008 mov r0, r8
7b30: e58d7000 str r7, [sp]
7b34: e1a03005 mov r3, r5
7b38: e3a01001 mov r1, #1
7b3c: e59f213c ldr r2, [pc, #316] ; 7c80 <_Heap_Walk+0x644>
7b40: e1a0e00f mov lr, pc
7b44: e12fff1a bx sl
7b48: e3a00000 mov r0, #0
"block 0x%08x: block size %u not page aligned\n",
block,
block_size
);
return false;
7b4c: eafffecd b 7688 <_Heap_Walk+0x4c>
}
if ( block_size < min_block_size ) {
(*printer)(
7b50: e58d2004 str r2, [sp, #4]
7b54: e1a00008 mov r0, r8
7b58: e1a0b002 mov fp, r2
7b5c: e58d7000 str r7, [sp]
7b60: e1a03005 mov r3, r5
7b64: e3a01001 mov r1, #1
7b68: e59f2114 ldr r2, [pc, #276] ; 7c84 <_Heap_Walk+0x648>
7b6c: e1a0e00f mov lr, pc
7b70: e12fff1a bx sl
7b74: e1a00009 mov r0, r9
block,
block_size,
min_block_size
);
return false;
7b78: eafffec2 b 7688 <_Heap_Walk+0x4c>
}
if ( next_block_begin <= block_begin ) {
(*printer)(
7b7c: e1a00008 mov r0, r8
7b80: e58d6000 str r6, [sp]
7b84: e1a03005 mov r3, r5
7b88: e3a01001 mov r1, #1
7b8c: e59f20f4 ldr r2, [pc, #244] ; 7c88 <_Heap_Walk+0x64c>
7b90: e1a0e00f mov lr, pc
7b94: e12fff1a bx sl
7b98: e1a00009 mov r0, r9
"block 0x%08x: next block 0x%08x is not a successor\n",
block,
next_block
);
return false;
7b9c: eafffeb9 b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( _Heap_Is_free( last_block ) ) {
(*printer)(
7ba0: e1a00008 mov r0, r8
7ba4: e3a01001 mov r1, #1
7ba8: e59f20dc ldr r2, [pc, #220] ; 7c8c <_Heap_Walk+0x650>
7bac: e1a0e00f mov lr, pc
7bb0: e12fff1a bx sl
7bb4: e1a00009 mov r0, r9
7bb8: eafffeb2 b 7688 <_Heap_Walk+0x4c>
}
if (
!_Heap_Is_aligned( _Heap_Alloc_area_of_block( free_block ), page_size )
) {
(*printer)(
7bbc: e1a00008 mov r0, r8
7bc0: e1a03009 mov r3, r9
7bc4: e3a01001 mov r1, #1
7bc8: e59f20c0 ldr r2, [pc, #192] ; 7c90 <_Heap_Walk+0x654>
7bcc: e1a0e00f mov lr, pc
7bd0: e12fff1a bx sl
7bd4: e3a00000 mov r0, #0
7bd8: eafffeaa b 7688 <_Heap_Walk+0x4c>
);
return false;
}
if ( free_block->prev != prev_block ) {
7bdc: e1a0c002 mov ip, r2
(*printer)(
7be0: e1a00008 mov r0, r8
7be4: e58dc000 str ip, [sp]
7be8: e1a03009 mov r3, r9
7bec: e3a01001 mov r1, #1
7bf0: e59f209c ldr r2, [pc, #156] ; 7c94 <_Heap_Walk+0x658>
7bf4: e1a0e00f mov lr, pc
7bf8: e12fff1a bx sl
7bfc: e3a00000 mov r0, #0
7c00: eafffea0 b 7688 <_Heap_Walk+0x4c>
return false;
}
if ( _Heap_Is_used( free_block ) ) {
(*printer)(
7c04: e1a00008 mov r0, r8
7c08: e1a03009 mov r3, r9
7c0c: e3a01001 mov r1, #1
7c10: e59f2080 ldr r2, [pc, #128] ; 7c98 <_Heap_Walk+0x65c>
7c14: e1a0e00f mov lr, pc
7c18: e12fff1a bx sl
7c1c: e3a00000 mov r0, #0
7c20: eafffe98 b 7688 <_Heap_Walk+0x4c>
00000460 <_Message_queue_Manager_initialization>:
#include <rtems/score/wkspace.h>
#include <rtems/score/interr.h>
void _Message_queue_Manager_initialization(void)
{
}
460: e12fff1e bx lr
00006afc <_Objects_Extend_information>:
*/
void _Objects_Extend_information(
Objects_Information *information
)
{
6afc: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
minimum_index = _Objects_Get_index( information->minimum_id );
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
6b00: e5908034 ldr r8, [r0, #52] ; 0x34
6b04: e3580000 cmp r8, #0
*/
void _Objects_Extend_information(
Objects_Information *information
)
{
6b08: e24dd014 sub sp, sp, #20
6b0c: e1a05000 mov r5, r0
/*
* Search for a free block of indexes. The block variable ends up set
* to block_count + 1 if the table needs to be extended.
*/
minimum_index = _Objects_Get_index( information->minimum_id );
6b10: e1d070b8 ldrh r7, [r0, #8]
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
6b14: 0a00009c beq 6d8c <_Objects_Extend_information+0x290>
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
6b18: e1d091b4 ldrh r9, [r0, #20]
6b1c: e1d0a1b0 ldrh sl, [r0, #16]
6b20: e1a01009 mov r1, r9
6b24: e1a0000a mov r0, sl
6b28: eb00436e bl 178e8 <__aeabi_uidiv>
6b2c: e1a03800 lsl r3, r0, #16
for ( ; block < block_count; block++ ) {
6b30: e1b03823 lsrs r3, r3, #16
6b34: 01a01009 moveq r1, r9
6b38: 01a06007 moveq r6, r7
6b3c: 01a04003 moveq r4, r3
6b40: 0a00000f beq 6b84 <_Objects_Extend_information+0x88>
if ( information->object_blocks[ block ] == NULL )
6b44: e5984000 ldr r4, [r8]
6b48: e3540000 cmp r4, #0
6b4c: 11a01009 movne r1, r9
6b50: 11a06007 movne r6, r7
6b54: 13a04000 movne r4, #0
6b58: 01a01009 moveq r1, r9
6b5c: 01a06007 moveq r6, r7
6b60: 1a000003 bne 6b74 <_Objects_Extend_information+0x78>
6b64: ea000006 b 6b84 <_Objects_Extend_information+0x88> <== NOT EXECUTED
6b68: e7982104 ldr r2, [r8, r4, lsl #2]
6b6c: e3520000 cmp r2, #0
6b70: 0a000003 beq 6b84 <_Objects_Extend_information+0x88>
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
6b74: e2844001 add r4, r4, #1
6b78: e1530004 cmp r3, r4
if ( information->object_blocks[ block ] == NULL )
break;
else
index_base += information->allocation_size;
6b7c: e0866009 add r6, r6, r9
if ( information->object_blocks == NULL )
block_count = 0;
else {
block_count = information->maximum / information->allocation_size;
for ( ; block < block_count; block++ ) {
6b80: 8afffff8 bhi 6b68 <_Objects_Extend_information+0x6c>
else
index_base += information->allocation_size;
}
}
maximum = (uint32_t) information->maximum + information->allocation_size;
6b84: e08aa001 add sl, sl, r1
/*
* We need to limit the number of objects to the maximum number
* representable in the index portion of the object Id. In the
* case of 16-bit Ids, this is only 256 object instances.
*/
if ( maximum > OBJECTS_ID_FINAL_INDEX ) {
6b88: e35a0801 cmp sl, #65536 ; 0x10000
6b8c: 2a000064 bcs 6d24 <_Objects_Extend_information+0x228>
/*
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
if ( information->auto_extend ) {
6b90: e5d50012 ldrb r0, [r5, #18]
/*
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
6b94: e5952018 ldr r2, [r5, #24]
if ( information->auto_extend ) {
6b98: e3500000 cmp r0, #0
/*
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
6b9c: e0000192 mul r0, r2, r1
if ( information->auto_extend ) {
6ba0: 1a000061 bne 6d2c <_Objects_Extend_information+0x230>
new_object_block = _Workspace_Allocate( block_size );
if ( !new_object_block )
return;
} else {
new_object_block = _Workspace_Allocate_or_fatal_error( block_size );
6ba4: e58d3000 str r3, [sp]
6ba8: eb000809 bl 8bd4 <_Workspace_Allocate_or_fatal_error>
6bac: e59d3000 ldr r3, [sp]
6bb0: e1a09000 mov r9, r0
}
/*
* If the index_base is the maximum we need to grow the tables.
*/
if (index_base >= information->maximum ) {
6bb4: e1d521b0 ldrh r2, [r5, #16]
6bb8: e1560002 cmp r6, r2
6bbc: 3a000038 bcc 6ca4 <_Objects_Extend_information+0x1a8>
*/
/*
* Up the block count and maximum
*/
block_count++;
6bc0: e283c001 add ip, r3, #1
* Allocate the tables and break it up.
*/
block_size = block_count *
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
6bc4: e08c008c add r0, ip, ip, lsl #1
6bc8: e08a0000 add r0, sl, r0
6bcc: e0800007 add r0, r0, r7
6bd0: e1a00100 lsl r0, r0, #2
6bd4: e88d1008 stm sp, {r3, ip}
6bd8: eb000809 bl 8c04 <_Workspace_Allocate>
if ( !object_blocks ) {
6bdc: e250b000 subs fp, r0, #0
6be0: e89d1008 ldm sp, {r3, ip}
6be4: 0a00006e beq 6da4 <_Objects_Extend_information+0x2a8>
* Take the block count down. Saves all the (block_count - 1)
* in the copies.
*/
block_count--;
if ( information->maximum > minimum_index ) {
6be8: e1d521b0 ldrh r2, [r5, #16]
6bec: e1570002 cmp r7, r2
RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset (
const void *base,
uintptr_t offset
)
{
return (void *)((uintptr_t)base + offset);
6bf0: e08b818c add r8, fp, ip, lsl #3
6bf4: e08bc10c add ip, fp, ip, lsl #2
6bf8: 3a000051 bcc 6d44 <_Objects_Extend_information+0x248>
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
6bfc: e3570000 cmp r7, #0
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
6c00: 13a02000 movne r2, #0
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
local_table[ index ] = NULL;
6c04: 11a01002 movne r1, r2
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
6c08: 0a000003 beq 6c1c <_Objects_Extend_information+0x120>
local_table[ index ] = NULL;
6c0c: e7881102 str r1, [r8, r2, lsl #2]
} else {
/*
* Deal with the special case of the 0 to minimum_index
*/
for ( index = 0; index < minimum_index; index++ ) {
6c10: e2822001 add r2, r2, #1
6c14: e1570002 cmp r7, r2
6c18: 8afffffb bhi 6c0c <_Objects_Extend_information+0x110>
6c1c: e1a03103 lsl r3, r3, #2
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
index < ( information->allocation_size + index_base );
6c20: e1d511b4 ldrh r1, [r5, #20]
6c24: e0861001 add r1, r6, r1
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
6c28: e3a00000 mov r0, #0
inactive_per_block[block_count] = 0;
for ( index=index_base ;
6c2c: e1560001 cmp r6, r1
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
6c30: e78c0003 str r0, [ip, r3]
}
/*
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
6c34: e78b0003 str r0, [fp, r3]
inactive_per_block[block_count] = 0;
for ( index=index_base ;
6c38: 2a000005 bcs 6c54 <_Objects_Extend_information+0x158>
6c3c: e0882106 add r2, r8, r6, lsl #2
6c40: e1a03006 mov r3, r6
index < ( information->allocation_size + index_base );
index++ ) {
6c44: e2833001 add r3, r3, #1
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
6c48: e1510003 cmp r1, r3
index < ( information->allocation_size + index_base );
index++ ) {
local_table[ index ] = NULL;
6c4c: e4820004 str r0, [r2], #4
* Initialise the new entries in the table.
*/
object_blocks[block_count] = NULL;
inactive_per_block[block_count] = 0;
for ( index=index_base ;
6c50: 8afffffb bhi 6c44 <_Objects_Extend_information+0x148>
6c54: e10f3000 mrs r3, CPSR
6c58: e3832080 orr r2, r3, #128 ; 0x80
6c5c: e129f002 msr CPSR_fc, r2
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
information->maximum_id = _Objects_Build_id(
6c60: e5952000 ldr r2, [r5]
6c64: e1d510b4 ldrh r1, [r5, #4]
6c68: e1a02c02 lsl r2, r2, #24
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
6c6c: e1a0a80a lsl sl, sl, #16
information->maximum_id = _Objects_Build_id(
6c70: e3822801 orr r2, r2, #65536 ; 0x10000
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
6c74: e1a0a82a lsr sl, sl, #16
information->maximum_id = _Objects_Build_id(
6c78: e1822d81 orr r2, r2, r1, lsl #27
6c7c: e182200a orr r2, r2, sl
local_table[ index ] = NULL;
}
_ISR_Disable( level );
old_tables = information->object_blocks;
6c80: e5950034 ldr r0, [r5, #52] ; 0x34
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
6c84: e585c030 str ip, [r5, #48] ; 0x30
information->local_table = local_table;
6c88: e585801c str r8, [r5, #28]
information->maximum = (Objects_Maximum) maximum;
information->maximum_id = _Objects_Build_id(
6c8c: e585200c str r2, [r5, #12]
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
information->inactive_per_block = inactive_per_block;
information->local_table = local_table;
information->maximum = (Objects_Maximum) maximum;
6c90: e1c5a1b0 strh sl, [r5, #16]
_ISR_Disable( level );
old_tables = information->object_blocks;
information->object_blocks = object_blocks;
6c94: e585b034 str fp, [r5, #52] ; 0x34
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
6c98: e129f003 msr CPSR_fc, r3
information->maximum
);
_ISR_Enable( level );
if ( old_tables )
6c9c: e3500000 cmp r0, #0
_Workspace_Free( old_tables );
6ca0: 1b0007dd blne 8c1c <_Workspace_Free>
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
6ca4: e5953034 ldr r3, [r5, #52] ; 0x34
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
6ca8: e28d7008 add r7, sp, #8
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
6cac: e7839104 str r9, [r3, r4, lsl #2]
/*
* Initialize objects .. add to a local chain first.
*/
_Chain_Initialize(
6cb0: e1a01009 mov r1, r9
6cb4: e1a00007 mov r0, r7
6cb8: e1d521b4 ldrh r2, [r5, #20]
6cbc: e5953018 ldr r3, [r5, #24]
6cc0: eb0012e7 bl b864 <_Chain_Initialize>
}
/*
* Assign the new object block to the object block table.
*/
information->object_blocks[ block ] = new_object_block;
6cc4: e1a04104 lsl r4, r4, #2
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
6cc8: e2858020 add r8, r5, #32
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
6ccc: ea000008 b 6cf4 <_Objects_Extend_information+0x1f8>
the_object->id = _Objects_Build_id(
6cd0: e5952000 ldr r2, [r5]
6cd4: e1d5c0b4 ldrh ip, [r5, #4]
6cd8: e1a02c02 lsl r2, r2, #24
6cdc: e3822801 orr r2, r2, #65536 ; 0x10000
6ce0: e1822d8c orr r2, r2, ip, lsl #27
6ce4: e1822006 orr r2, r2, r6
6ce8: e5832008 str r2, [r3, #8]
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
6cec: ebfffcf2 bl 60bc <_Chain_Append>
index++;
6cf0: e2866001 add r6, r6, #1
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
6cf4: e1a00007 mov r0, r7
6cf8: ebfffd03 bl 610c <_Chain_Get>
6cfc: e2503000 subs r3, r0, #0
information->the_class,
_Objects_Local_node,
index
);
_Chain_Append( &information->Inactive, &the_object->Node );
6d00: e1a01003 mov r1, r3
6d04: e1a00008 mov r0, r8
/*
* Move from the local chain, initialise, then append to the inactive chain
*/
index = index_base;
while ((the_object = (Objects_Control *) _Chain_Get( &Inactive )) != NULL ) {
6d08: 1afffff0 bne 6cd0 <_Objects_Extend_information+0x1d4>
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
6d0c: e1d531b4 ldrh r3, [r5, #20]
information->inactive =
6d10: e1d522bc ldrh r2, [r5, #44] ; 0x2c
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
6d14: e5951030 ldr r1, [r5, #48] ; 0x30
information->inactive =
6d18: e0832002 add r2, r3, r2
_Chain_Append( &information->Inactive, &the_object->Node );
index++;
}
information->inactive_per_block[ block ] = information->allocation_size;
6d1c: e7813004 str r3, [r1, r4]
information->inactive =
6d20: e1c522bc strh r2, [r5, #44] ; 0x2c
(Objects_Maximum)(information->inactive + information->allocation_size);
}
6d24: e28dd014 add sp, sp, #20
6d28: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
* Allocate the name table, and the objects and if it fails either return or
* generate a fatal error depending on auto-extending being active.
*/
block_size = information->allocation_size * information->size;
if ( information->auto_extend ) {
new_object_block = _Workspace_Allocate( block_size );
6d2c: e58d3000 str r3, [sp]
6d30: eb0007b3 bl 8c04 <_Workspace_Allocate>
if ( !new_object_block )
6d34: e2509000 subs r9, r0, #0
6d38: e59d3000 ldr r3, [sp]
6d3c: 1affff9c bne 6bb4 <_Objects_Extend_information+0xb8>
6d40: eafffff7 b 6d24 <_Objects_Extend_information+0x228>
/*
* Copy each section of the table over. This has to be performed as
* separate parts as size of each block has changed.
*/
memcpy( object_blocks,
6d44: e1a03103 lsl r3, r3, #2
6d48: e1a02003 mov r2, r3
6d4c: e5951034 ldr r1, [r5, #52] ; 0x34
6d50: e88d1008 stm sp, {r3, ip}
6d54: eb001f67 bl eaf8 <memcpy>
information->object_blocks,
block_count * sizeof(void*) );
memcpy( inactive_per_block,
6d58: e89d1008 ldm sp, {r3, ip}
6d5c: e1a0000c mov r0, ip
6d60: e1a02003 mov r2, r3
6d64: e5951030 ldr r1, [r5, #48] ; 0x30
6d68: eb001f62 bl eaf8 <memcpy>
information->inactive_per_block,
block_count * sizeof(uint32_t) );
memcpy( local_table,
6d6c: e1d521b0 ldrh r2, [r5, #16]
6d70: e0872002 add r2, r7, r2
6d74: e1a02102 lsl r2, r2, #2
6d78: e1a00008 mov r0, r8
6d7c: e595101c ldr r1, [r5, #28]
6d80: eb001f5c bl eaf8 <memcpy>
6d84: e89d1008 ldm sp, {r3, ip}
6d88: eaffffa4 b 6c20 <_Objects_Extend_information+0x124>
minimum_index = _Objects_Get_index( information->minimum_id );
index_base = minimum_index;
block = 0;
/* if ( information->maximum < minimum_index ) */
if ( information->object_blocks == NULL )
6d8c: e1a04008 mov r4, r8
6d90: e1d0a1b0 ldrh sl, [r0, #16]
6d94: e1d011b4 ldrh r1, [r0, #20]
6d98: e1a06007 mov r6, r7
6d9c: e1a03008 mov r3, r8
6da0: eaffff77 b 6b84 <_Objects_Extend_information+0x88>
(sizeof(void *) + sizeof(uint32_t) + sizeof(Objects_Name *)) +
((maximum + minimum_index) * sizeof(Objects_Control *));
object_blocks = (void**) _Workspace_Allocate( block_size );
if ( !object_blocks ) {
_Workspace_Free( new_object_block );
6da4: e1a00009 mov r0, r9
6da8: eb00079b bl 8c1c <_Workspace_Free>
return;
6dac: eaffffdc b 6d24 <_Objects_Extend_information+0x228>
00000464 <_Partition_Manager_initialization>:
#include <rtems/score/thread.h>
#include <rtems/score/interr.h>
void _Partition_Manager_initialization(void)
{
}
464: e12fff1e bx lr
00000474 <_Rate_monotonic_Manager_initialization>:
#include <rtems/rtems/types.h>
#include <rtems/rtems/ratemon.h>
void _Rate_monotonic_Manager_initialization(void)
{
}
474: e12fff1e bx lr
00000468 <_Region_Manager_initialization>:
#include <rtems/score/thread.h>
#include <rtems/score/interr.h>
void _Region_Manager_initialization(void)
{
}
468: e12fff1e bx lr
00007dd4 <_Thread_queue_Enqueue_priority>:
Priority_Control priority;
States_Control block_state;
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
7dd4: e5913014 ldr r3, [r1, #20]
Thread_blocking_operation_States _Thread_queue_Enqueue_priority (
Thread_queue_Control *the_thread_queue,
Thread_Control *the_thread,
ISR_Level *level_p
)
{
7dd8: e92d05f0 push {r4, r5, r6, r7, r8, sl}
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
7ddc: e1a0c323 lsr ip, r3, #6
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
7de0: e281503c add r5, r1, #60 ; 0x3c
7de4: e08cc08c add ip, ip, ip, lsl #1
block_state = the_thread_queue->state;
if ( _Thread_queue_Is_reverse_search( priority ) )
7de8: e3130020 tst r3, #32
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
7dec: e2814038 add r4, r1, #56 ; 0x38
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
7df0: e5815038 str r5, [r1, #56] ; 0x38
the_chain->permanent_null = NULL;
7df4: e3a05000 mov r5, #0
7df8: e581503c str r5, [r1, #60] ; 0x3c
the_chain->last = _Chain_Head(the_chain);
7dfc: e5814040 str r4, [r1, #64] ; 0x40
_Chain_Initialize_empty( &the_thread->Wait.Block2n );
priority = the_thread->current_priority;
header_index = _Thread_queue_Header_number( priority );
header = &the_thread_queue->Queues.Priority[ header_index ];
7e00: e080c10c add ip, r0, ip, lsl #2
block_state = the_thread_queue->state;
7e04: e5906038 ldr r6, [r0, #56] ; 0x38
7e08: 159fa178 ldrne sl, [pc, #376] ; 7f88 <_Thread_queue_Enqueue_priority+0x1b4>
if ( _Thread_queue_Is_reverse_search( priority ) )
7e0c: 1a00001c bne 7e84 <_Thread_queue_Enqueue_priority+0xb0>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
7e10: e28ca004 add sl, ip, #4
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
7e14: e10f8000 mrs r8, CPSR
7e18: e3884080 orr r4, r8, #128 ; 0x80
7e1c: e129f004 msr CPSR_fc, r4
goto restart_reverse_search;
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->first;
7e20: e59c4000 ldr r4, [ip]
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
7e24: e154000a cmp r4, sl
7e28: 1a000009 bne 7e54 <_Thread_queue_Enqueue_priority+0x80>
7e2c: ea000052 b 7f7c <_Thread_queue_Enqueue_priority+0x1a8>
static inline void arm_interrupt_flash( uint32_t level )
{
uint32_t arm_switch_reg;
asm volatile (
7e30: e10f7000 mrs r7, CPSR
7e34: e129f008 msr CPSR_fc, r8
7e38: e129f007 msr CPSR_fc, r7
search_priority = search_thread->current_priority;
if ( priority <= search_priority )
break;
#endif
_ISR_Flash( level );
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
7e3c: e5947010 ldr r7, [r4, #16]
7e40: e1160007 tst r6, r7
7e44: 0a000033 beq 7f18 <_Thread_queue_Enqueue_priority+0x144>
_ISR_Enable( level );
goto restart_forward_search;
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
7e48: e5944000 ldr r4, [r4]
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->first;
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
7e4c: e154000a cmp r4, sl
7e50: 0a000002 beq 7e60 <_Thread_queue_Enqueue_priority+0x8c>
search_priority = search_thread->current_priority;
7e54: e5945014 ldr r5, [r4, #20]
if ( priority <= search_priority )
7e58: e1530005 cmp r3, r5
7e5c: 8afffff3 bhi 7e30 <_Thread_queue_Enqueue_priority+0x5c>
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->first;
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
7e60: e1a06008 mov r6, r8
}
search_thread =
(Thread_Control *)search_thread->Object.Node.next;
}
if ( the_thread_queue->sync_state !=
7e64: e590c030 ldr ip, [r0, #48] ; 0x30
7e68: e35c0001 cmp ip, #1
7e6c: 0a00002b beq 7f20 <_Thread_queue_Enqueue_priority+0x14c>
* For example, the blocking thread could have been given
* the mutex by an ISR or timed out.
*
* WARNING! Returning with interrupts disabled!
*/
*level_p = level;
7e70: e5826000 str r6, [r2]
return the_thread_queue->sync_state;
7e74: e1a0000c mov r0, ip
}
7e78: e8bd05f0 pop {r4, r5, r6, r7, r8, sl}
7e7c: e12fff1e bx lr
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
7e80: e129f008 msr CPSR_fc, r8 <== NOT EXECUTED
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
7e84: e5da5000 ldrb r5, [sl]
7e88: e2855001 add r5, r5, #1
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
7e8c: e10f8000 mrs r8, CPSR
7e90: e3884080 orr r4, r8, #128 ; 0x80
7e94: e129f004 msr CPSR_fc, r4
_ISR_Disable( level );
search_thread = (Thread_Control *) header->last;
7e98: e59c4008 ldr r4, [ip, #8]
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
7e9c: e154000c cmp r4, ip
7ea0: 1a000009 bne 7ecc <_Thread_queue_Enqueue_priority+0xf8>
7ea4: ea00000b b 7ed8 <_Thread_queue_Enqueue_priority+0x104>
static inline void arm_interrupt_flash( uint32_t level )
{
uint32_t arm_switch_reg;
asm volatile (
7ea8: e10f7000 mrs r7, CPSR
7eac: e129f008 msr CPSR_fc, r8
7eb0: e129f007 msr CPSR_fc, r7
search_priority = search_thread->current_priority;
if ( priority >= search_priority )
break;
#endif
_ISR_Flash( level );
if ( !_States_Are_set( search_thread->current_state, block_state) ) {
7eb4: e5947010 ldr r7, [r4, #16]
7eb8: e1160007 tst r6, r7
7ebc: 0affffef beq 7e80 <_Thread_queue_Enqueue_priority+0xac>
_ISR_Enable( level );
goto restart_reverse_search;
}
search_thread = (Thread_Control *)
7ec0: e5944004 ldr r4, [r4, #4]
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->last;
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
7ec4: e154000c cmp r4, ip
7ec8: 0a000002 beq 7ed8 <_Thread_queue_Enqueue_priority+0x104>
search_priority = search_thread->current_priority;
7ecc: e5945014 ldr r5, [r4, #20]
if ( priority >= search_priority )
7ed0: e1530005 cmp r3, r5
7ed4: 3afffff3 bcc 7ea8 <_Thread_queue_Enqueue_priority+0xd4>
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
}
if ( the_thread_queue->sync_state !=
7ed8: e590c030 ldr ip, [r0, #48] ; 0x30
7edc: e35c0001 cmp ip, #1
restart_reverse_search:
search_priority = PRIORITY_MAXIMUM + 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->last;
while ( !_Chain_Is_head( header, (Chain_Node *)search_thread ) ) {
7ee0: e1a06008 mov r6, r8
}
search_thread = (Thread_Control *)
search_thread->Object.Node.previous;
}
if ( the_thread_queue->sync_state !=
7ee4: 1affffe1 bne 7e70 <_Thread_queue_Enqueue_priority+0x9c>
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( priority == search_priority )
7ee8: e1530005 cmp r3, r5
if ( the_thread_queue->sync_state !=
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
7eec: e3a03000 mov r3, #0
7ef0: e5803030 str r3, [r0, #48] ; 0x30
if ( priority == search_priority )
7ef4: 0a000016 beq 7f54 <_Thread_queue_Enqueue_priority+0x180>
goto equal_priority;
search_node = (Chain_Node *) search_thread;
next_node = search_node->next;
7ef8: e5943000 ldr r3, [r4]
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
the_node->previous = search_node;
7efc: e8810018 stm r1, {r3, r4}
search_node->next = the_node;
next_node->previous = the_node;
the_thread->Wait.queue = the_thread_queue;
7f00: e5810044 str r0, [r1, #68] ; 0x44
next_node = search_node->next;
the_node = (Chain_Node *) the_thread;
the_node->next = next_node;
the_node->previous = search_node;
search_node->next = the_node;
7f04: e5841000 str r1, [r4]
next_node->previous = the_node;
7f08: e5831004 str r1, [r3, #4]
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
7f0c: e129f008 msr CPSR_fc, r8
7f10: e3a00001 mov r0, #1
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
7f14: eaffffd7 b 7e78 <_Thread_queue_Enqueue_priority+0xa4>
7f18: e129f008 msr CPSR_fc, r8 <== NOT EXECUTED
7f1c: eaffffbc b 7e14 <_Thread_queue_Enqueue_priority+0x40> <== NOT EXECUTED
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
if ( priority == search_priority )
7f20: e1530005 cmp r3, r5
if ( the_thread_queue->sync_state !=
THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
goto synchronize;
the_thread_queue->sync_state = THREAD_BLOCKING_OPERATION_SYNCHRONIZED;
7f24: e3a03000 mov r3, #0
7f28: e5803030 str r3, [r0, #48] ; 0x30
if ( priority == search_priority )
7f2c: 0a000008 beq 7f54 <_Thread_queue_Enqueue_priority+0x180>
goto equal_priority;
search_node = (Chain_Node *) search_thread;
previous_node = search_node->previous;
7f30: e5943004 ldr r3, [r4, #4]
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
7f34: e5814000 str r4, [r1]
the_node->previous = previous_node;
7f38: e5813004 str r3, [r1, #4]
previous_node->next = the_node;
search_node->previous = the_node;
the_thread->Wait.queue = the_thread_queue;
7f3c: e5810044 str r0, [r1, #68] ; 0x44
previous_node = search_node->previous;
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
the_node->previous = previous_node;
previous_node->next = the_node;
7f40: e5831000 str r1, [r3]
search_node->previous = the_node;
7f44: e5841004 str r1, [r4, #4]
7f48: e129f008 msr CPSR_fc, r8
7f4c: e3a00001 mov r0, #1
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
7f50: eaffffc8 b 7e78 <_Thread_queue_Enqueue_priority+0xa4>
7f54: e284403c add r4, r4, #60 ; 0x3c
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
equal_priority: /* add at end of priority group */
search_node = _Chain_Tail( &search_thread->Wait.Block2n );
previous_node = search_node->previous;
7f58: e5943004 ldr r3, [r4, #4]
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
7f5c: e5814000 str r4, [r1]
the_node->previous = previous_node;
7f60: e5813004 str r3, [r1, #4]
previous_node->next = the_node;
search_node->previous = the_node;
the_thread->Wait.queue = the_thread_queue;
7f64: e5810044 str r0, [r1, #68] ; 0x44
previous_node = search_node->previous;
the_node = (Chain_Node *) the_thread;
the_node->next = search_node;
the_node->previous = previous_node;
previous_node->next = the_node;
7f68: e5831000 str r1, [r3]
search_node->previous = the_node;
7f6c: e5841004 str r1, [r4, #4]
7f70: e129f006 msr CPSR_fc, r6
7f74: e3a00001 mov r0, #1
the_thread->Wait.queue = the_thread_queue;
_ISR_Enable( level );
return THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED;
7f78: eaffffbe b 7e78 <_Thread_queue_Enqueue_priority+0xa4>
restart_forward_search:
search_priority = PRIORITY_MINIMUM - 1;
_ISR_Disable( level );
search_thread = (Thread_Control *) header->first;
while ( !_Chain_Is_tail( header, (Chain_Node *)search_thread ) ) {
7f7c: e1a06008 mov r6, r8
7f80: e3e05000 mvn r5, #0
7f84: eaffffb6 b 7e64 <_Thread_queue_Enqueue_priority+0x90>
00000470 <_Timer_Manager_initialization>:
#include <rtems/rtems/types.h>
#include <rtems/rtems/timer.h>
void _Timer_Manager_initialization(void)
{
}
470: e12fff1e bx lr
00016a3c <_Timer_server_Body>:
* @a arg points to the corresponding timer server control block.
*/
static rtems_task _Timer_server_Body(
rtems_task_argument arg
)
{
16a3c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
16a40: e24dd024 sub sp, sp, #36 ; 0x24
16a44: e28d700c add r7, sp, #12
16a48: e28d2018 add r2, sp, #24
16a4c: e1a04000 mov r4, r0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
16a50: e3a03000 mov r3, #0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
16a54: e282a004 add sl, r2, #4
16a58: e2872004 add r2, r7, #4
16a5c: e58d2000 str r2, [sp]
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
16a60: e58d301c str r3, [sp, #28]
the_chain->last = _Chain_Head(the_chain);
16a64: e28d0018 add r0, sp, #24
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
16a68: e58d200c str r2, [sp, #12]
the_chain->permanent_null = NULL;
16a6c: e58d3010 str r3, [sp, #16]
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
16a70: e2842008 add r2, r4, #8
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
16a74: e2843040 add r3, r4, #64 ; 0x40
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
16a78: e58da018 str sl, [sp, #24]
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
16a7c: e58d0020 str r0, [sp, #32]
16a80: e58d7014 str r7, [sp, #20]
16a84: e59f91a0 ldr r9, [pc, #416] ; 16c2c <_Timer_server_Body+0x1f0>
16a88: e59fb1a0 ldr fp, [pc, #416] ; 16c30 <_Timer_server_Body+0x1f4>
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
16a8c: e58d2008 str r2, [sp, #8]
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
16a90: e58d3004 str r3, [sp, #4]
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
16a94: e2846030 add r6, r4, #48 ; 0x30
/*
* This path is for normal forward movement and cases where the
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
16a98: e2848068 add r8, r4, #104 ; 0x68
{
/*
* Afterwards all timer inserts are directed to this chain and the interval
* and TOD chains will be no more modified by other parties.
*/
ts->insert_chain = insert_chain;
16a9c: e28d0018 add r0, sp, #24
16aa0: e5840078 str r0, [r4, #120] ; 0x78
static void _Timer_server_Process_interval_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = _Watchdog_Ticks_since_boot;
16aa4: e5993000 ldr r3, [r9]
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
16aa8: e594103c ldr r1, [r4, #60] ; 0x3c
watchdogs->last_snapshot = snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
16aac: e1a00006 mov r0, r6
16ab0: e0611003 rsb r1, r1, r3
/*
* We assume adequate unsigned arithmetic here.
*/
Watchdog_Interval delta = snapshot - watchdogs->last_snapshot;
watchdogs->last_snapshot = snapshot;
16ab4: e584303c str r3, [r4, #60] ; 0x3c
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
16ab8: e1a02007 mov r2, r7
16abc: eb00109c bl 1ad34 <_Watchdog_Adjust_to_chain>
static void _Timer_server_Process_tod_watchdogs(
Timer_server_Watchdogs *watchdogs,
Chain_Control *fire_chain
)
{
Watchdog_Interval snapshot = (Watchdog_Interval) _TOD_Seconds_since_epoch();
16ac0: e59b5000 ldr r5, [fp]
Watchdog_Interval last_snapshot = watchdogs->last_snapshot;
16ac4: e5941074 ldr r1, [r4, #116] ; 0x74
/*
* Process the seconds chain. Start by checking that the Time
* of Day (TOD) has not been set backwards. If it has then
* we want to adjust the watchdogs->Chain to indicate this.
*/
if ( snapshot > last_snapshot ) {
16ac8: e1550001 cmp r5, r1
16acc: 8a000022 bhi 16b5c <_Timer_server_Body+0x120>
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
} else if ( snapshot < last_snapshot ) {
16ad0: 3a000018 bcc 16b38 <_Timer_server_Body+0xfc>
*/
delta = last_snapshot - snapshot;
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
}
watchdogs->last_snapshot = snapshot;
16ad4: e5845074 str r5, [r4, #116] ; 0x74
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
16ad8: e5940078 ldr r0, [r4, #120] ; 0x78
16adc: eb000240 bl 173e4 <_Chain_Get>
if ( timer == NULL ) {
16ae0: e3500000 cmp r0, #0
16ae4: 0a00000b beq 16b18 <_Timer_server_Body+0xdc>
static void _Timer_server_Insert_timer(
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
16ae8: e5903038 ldr r3, [r0, #56] ; 0x38
16aec: e3530001 cmp r3, #1
16af0: 0a000015 beq 16b4c <_Timer_server_Body+0x110>
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
} else if ( timer->the_class == TIMER_TIME_OF_DAY_ON_TASK ) {
16af4: e3530003 cmp r3, #3
16af8: 1afffff6 bne 16ad8 <_Timer_server_Body+0x9c>
_Watchdog_Insert( &ts->TOD_watchdogs.Chain, &timer->Ticker );
16afc: e2801010 add r1, r0, #16
16b00: e1a00008 mov r0, r8
16b04: eb0010b9 bl 1adf0 <_Watchdog_Insert>
}
static void _Timer_server_Process_insertions( Timer_server_Control *ts )
{
while ( true ) {
Timer_Control *timer = (Timer_Control *) _Chain_Get( ts->insert_chain );
16b08: e5940078 ldr r0, [r4, #120] ; 0x78
16b0c: eb000234 bl 173e4 <_Chain_Get>
if ( timer == NULL ) {
16b10: e3500000 cmp r0, #0
16b14: 1afffff3 bne 16ae8 <_Timer_server_Body+0xac>
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
16b18: e10f2000 mrs r2, CPSR
16b1c: e3823080 orr r3, r2, #128 ; 0x80
16b20: e129f003 msr CPSR_fc, r3
* body loop.
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
if ( _Chain_Is_empty( insert_chain ) ) {
16b24: e59d3018 ldr r3, [sp, #24]
16b28: e15a0003 cmp sl, r3
16b2c: 0a00000f beq 16b70 <_Timer_server_Body+0x134>
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
16b30: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
16b34: eaffffda b 16aa4 <_Timer_server_Body+0x68> <== NOT EXECUTED
/*
* The current TOD is before the last TOD which indicates that
* TOD has been set backwards.
*/
delta = last_snapshot - snapshot;
_Watchdog_Adjust( &watchdogs->Chain, WATCHDOG_BACKWARD, delta );
16b38: e0652001 rsb r2, r5, r1
16b3c: e1a00008 mov r0, r8
16b40: e3a01001 mov r1, #1
16b44: eb00104b bl 1ac78 <_Watchdog_Adjust>
16b48: eaffffe1 b 16ad4 <_Timer_server_Body+0x98>
Timer_server_Control *ts,
Timer_Control *timer
)
{
if ( timer->the_class == TIMER_INTERVAL_ON_TASK ) {
_Watchdog_Insert( &ts->Interval_watchdogs.Chain, &timer->Ticker );
16b4c: e2801010 add r1, r0, #16
16b50: e1a00006 mov r0, r6
16b54: eb0010a5 bl 1adf0 <_Watchdog_Insert>
16b58: eaffffde b 16ad8 <_Timer_server_Body+0x9c>
/*
* This path is for normal forward movement and cases where the
* TOD has been set forward.
*/
delta = snapshot - last_snapshot;
_Watchdog_Adjust_to_chain( &watchdogs->Chain, delta, fire_chain );
16b5c: e0611005 rsb r1, r1, r5
16b60: e1a00008 mov r0, r8
16b64: e1a02007 mov r2, r7
16b68: eb001071 bl 1ad34 <_Watchdog_Adjust_to_chain>
16b6c: eaffffd8 b 16ad4 <_Timer_server_Body+0x98>
*/
_Timer_server_Process_insertions( ts );
_ISR_Disable( level );
if ( _Chain_Is_empty( insert_chain ) ) {
ts->insert_chain = NULL;
16b70: e5840078 str r0, [r4, #120] ; 0x78
16b74: e129f002 msr CPSR_fc, r2
_Chain_Initialize_empty( &fire_chain );
while ( true ) {
_Timer_server_Get_watchdogs_that_fire_now( ts, &insert_chain, &fire_chain );
if ( !_Chain_Is_empty( &fire_chain ) ) {
16b78: e59d300c ldr r3, [sp, #12]
16b7c: e59d2000 ldr r2, [sp]
16b80: e1520003 cmp r2, r3
16b84: 159d5000 ldrne r5, [sp]
16b88: 1a00000a bne 16bb8 <_Timer_server_Body+0x17c>
16b8c: ea000011 b 16bd8 <_Timer_server_Body+0x19c>
{
Chain_Node *return_node;
Chain_Node *new_first;
return_node = the_chain->first;
new_first = return_node->next;
16b90: e5932000 ldr r2, [r3]
* service routine may remove a watchdog from the chain.
*/
_ISR_Disable( level );
watchdog = (Watchdog_Control *) _Chain_Get_unprotected( &fire_chain );
if ( watchdog != NULL ) {
watchdog->state = WATCHDOG_INACTIVE;
16b94: e3a00000 mov r0, #0
the_chain->first = new_first;
16b98: e58d200c str r2, [sp, #12]
16b9c: e5830008 str r0, [r3, #8]
new_first->previous = _Chain_Head(the_chain);
16ba0: e5827004 str r7, [r2, #4]
16ba4: e129f001 msr CPSR_fc, r1
/*
* The timer server may block here and wait for resources or time.
* The system watchdogs are inactive and will remain inactive since
* the active flag of the timer server is true.
*/
(*watchdog->routine)( watchdog->id, watchdog->user_data );
16ba8: e2830020 add r0, r3, #32
16bac: e8900003 ldm r0, {r0, r1}
16bb0: e1a0e00f mov lr, pc
16bb4: e593f01c ldr pc, [r3, #28]
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
16bb8: e10f1000 mrs r1, CPSR
16bbc: e3813080 orr r3, r1, #128 ; 0x80
16bc0: e129f003 msr CPSR_fc, r3
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
16bc4: e59d300c ldr r3, [sp, #12]
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Get_unprotected(
Chain_Control *the_chain
)
{
if ( !_Chain_Is_empty(the_chain))
16bc8: e1550003 cmp r5, r3
16bcc: 1affffef bne 16b90 <_Timer_server_Body+0x154>
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
16bd0: e129f001 msr CPSR_fc, r1
16bd4: eaffffb0 b 16a9c <_Timer_server_Body+0x60>
}
} else {
ts->active = false;
16bd8: e3a02000 mov r2, #0
16bdc: e5c4207c strb r2, [r4, #124] ; 0x7c
16be0: e59f004c ldr r0, [pc, #76] ; 16c34 <_Timer_server_Body+0x1f8>
16be4: e5903000 ldr r3, [r0]
16be8: e2833001 add r3, r3, #1
16bec: e5803000 str r3, [r0]
/*
* Block until there is something to do.
*/
_Thread_Disable_dispatch();
_Thread_Set_state( ts->thread, STATES_DELAYING );
16bf0: e3a01008 mov r1, #8
16bf4: e5940000 ldr r0, [r4]
16bf8: eb000db2 bl 1a2c8 <_Thread_Set_state>
_Timer_server_Reset_interval_system_watchdog( ts );
16bfc: e1a00004 mov r0, r4
16c00: ebffff61 bl 1698c <_Timer_server_Reset_interval_system_watchdog>
_Timer_server_Reset_tod_system_watchdog( ts );
16c04: e1a00004 mov r0, r4
16c08: ebffff75 bl 169e4 <_Timer_server_Reset_tod_system_watchdog>
_Thread_Enable_dispatch();
16c0c: eb000aff bl 19810 <_Thread_Enable_dispatch>
ts->active = true;
16c10: e3a02001 mov r2, #1
16c14: e5c4207c strb r2, [r4, #124] ; 0x7c
static void _Timer_server_Stop_interval_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->Interval_watchdogs.System_watchdog );
16c18: e59d0008 ldr r0, [sp, #8]
16c1c: eb0010d4 bl 1af74 <_Watchdog_Remove>
static void _Timer_server_Stop_tod_system_watchdog(
Timer_server_Control *ts
)
{
_Watchdog_Remove( &ts->TOD_watchdogs.System_watchdog );
16c20: e59d0004 ldr r0, [sp, #4]
16c24: eb0010d2 bl 1af74 <_Watchdog_Remove>
16c28: eaffff9b b 16a9c <_Timer_server_Body+0x60>
0000a858 <_Watchdog_Adjust>:
void _Watchdog_Adjust(
Chain_Control *header,
Watchdog_Adjust_directions direction,
Watchdog_Interval units
)
{
a858: e92d41f0 push {r4, r5, r6, r7, r8, lr}
a85c: e1a04000 mov r4, r0
a860: e1a05002 mov r5, r2
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
a864: e10f3000 mrs r3, CPSR
a868: e3832080 orr r2, r3, #128 ; 0x80
a86c: e129f002 msr CPSR_fc, r2
*/
RTEMS_INLINE_ROUTINE bool _Chain_Is_empty(
Chain_Control *the_chain
)
{
return (the_chain->first == _Chain_Tail(the_chain));
a870: e1a07000 mov r7, r0
a874: e4972004 ldr r2, [r7], #4
* hence the compiler must not assume *header to remain
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
a878: e1520007 cmp r2, r7
a87c: 0a000018 beq a8e4 <_Watchdog_Adjust+0x8c>
switch ( direction ) {
a880: e3510000 cmp r1, #0
a884: 1a000018 bne a8ec <_Watchdog_Adjust+0x94>
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
a888: e3550000 cmp r5, #0
a88c: 0a000014 beq a8e4 <_Watchdog_Adjust+0x8c>
if ( units < _Watchdog_First( header )->delta_interval ) {
a890: e5926010 ldr r6, [r2, #16]
a894: e1550006 cmp r5, r6
_Watchdog_First( header )->delta_interval -= units;
break;
} else {
units -= _Watchdog_First( header )->delta_interval;
_Watchdog_First( header )->delta_interval = 1;
a898: 23a08001 movcs r8, #1
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
a89c: 2a000005 bcs a8b8 <_Watchdog_Adjust+0x60>
a8a0: ea000018 b a908 <_Watchdog_Adjust+0xb0> <== NOT EXECUTED
switch ( direction ) {
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
a8a4: e0555006 subs r5, r5, r6
a8a8: 0a00000d beq a8e4 <_Watchdog_Adjust+0x8c>
if ( units < _Watchdog_First( header )->delta_interval ) {
a8ac: e5926010 ldr r6, [r2, #16]
a8b0: e1560005 cmp r6, r5
a8b4: 8a000013 bhi a908 <_Watchdog_Adjust+0xb0>
_Watchdog_First( header )->delta_interval -= units;
break;
} else {
units -= _Watchdog_First( header )->delta_interval;
_Watchdog_First( header )->delta_interval = 1;
a8b8: e5828010 str r8, [r2, #16]
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
a8bc: e129f003 msr CPSR_fc, r3
_ISR_Enable( level );
_Watchdog_Tickle( header );
a8c0: e1a00004 mov r0, r4
a8c4: eb00009e bl ab44 <_Watchdog_Tickle>
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
a8c8: e10f3000 mrs r3, CPSR
a8cc: e3832080 orr r2, r3, #128 ; 0x80
a8d0: e129f002 msr CPSR_fc, r2
a8d4: e5941000 ldr r1, [r4]
_ISR_Disable( level );
if ( _Chain_Is_empty( header ) )
a8d8: e1570001 cmp r7, r1
RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_First(
Chain_Control *header
)
{
return ( (Watchdog_Control *) header->first );
a8dc: e1a02001 mov r2, r1
a8e0: 1affffef bne a8a4 <_Watchdog_Adjust+0x4c>
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
a8e4: e129f003 msr CPSR_fc, r3
}
}
_ISR_Enable( level );
}
a8e8: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
* unmodified across that call.
*
* Till Straumann, 7/2003
*/
if ( !_Chain_Is_empty( header ) ) {
switch ( direction ) {
a8ec: e3510001 cmp r1, #1
a8f0: 1afffffb bne a8e4 <_Watchdog_Adjust+0x8c>
case WATCHDOG_BACKWARD:
_Watchdog_First( header )->delta_interval += units;
a8f4: e5921010 ldr r1, [r2, #16]
a8f8: e0815005 add r5, r1, r5
a8fc: e5825010 str r5, [r2, #16]
a900: e129f003 msr CPSR_fc, r3
}
}
_ISR_Enable( level );
}
a904: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
_Watchdog_First( header )->delta_interval += units;
break;
case WATCHDOG_FORWARD:
while ( units ) {
if ( units < _Watchdog_First( header )->delta_interval ) {
_Watchdog_First( header )->delta_interval -= units;
a908: e0655006 rsb r5, r5, r6
a90c: e5825010 str r5, [r2, #16]
break;
a910: eafffff3 b a8e4 <_Watchdog_Adjust+0x8c>
0002207c <__kill>:
#endif
int __kill( pid_t pid, int sig )
{
return 0;
}
2207c: e3a00000 mov r0, #0 <== NOT EXECUTED
22080: e12fff1e bx lr <== NOT EXECUTED
00019d78 <_exit>:
/*
* If the toolset uses init/fini sections, then we need to
* run the global destructors now.
*/
#if defined(__USE_INIT_FINI__)
FINI_SYMBOL();
19d78: e24dd004 sub sp, sp, #4
19d7c: e58d0000 str r0, [sp]
19d80: eb0001f2 bl 1a550 <___DTOR_END__>
* We need to do the exit processing on the global reentrancy structure.
* This has already been done on the per task reentrancy structure
* associated with this task.
*/
libc_wrapup();
19d84: ebffffe1 bl 19d10 <libc_wrapup>
rtems_shutdown_executive(status);
19d88: e59d0000 ldr r0, [sp]
19d8c: eb00003e bl 19e8c <rtems_shutdown_executive>
19d90: eafffffe b 19d90 <_exit+0x18> <== NOT EXECUTED
00026648 <_fat_block_read>:
uint32_t start,
uint32_t offset,
uint32_t count,
void *buff
)
{
26648: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
2664c: e2534000 subs r4, r3, #0 <== NOT EXECUTED
uint32_t start,
uint32_t offset,
uint32_t count,
void *buff
)
{
26650: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
int rc = RC_OK;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
26654: e5909034 ldr r9, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
26658: 01a05004 moveq r5, r4 <== NOT EXECUTED
2665c: 0a00001d beq 266d8 <_fat_block_read+0x90> <== NOT EXECUTED
int rc = RC_OK;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
26660: e3a05000 mov r5, #0 <== NOT EXECUTED
26664: e28db004 add fp, sp, #4 <== NOT EXECUTED
26668: e52b5004 str r5, [fp, #-4]! <== NOT EXECUTED
2666c: e1a07002 mov r7, r2 <== NOT EXECUTED
26670: e1a06001 mov r6, r1 <== NOT EXECUTED
26674: ea00000d b 266b0 <_fat_block_read+0x68> <== NOT EXECUTED
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
26678: e1d980b0 ldrh r8, [r9] <== NOT EXECUTED
memcpy((buff + cmpltd), (block->buffer + ofs), c);
2667c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
26680: e0678008 rsb r8, r7, r8 <== NOT EXECUTED
memcpy((buff + cmpltd), (block->buffer + ofs), c);
26684: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
26688: e1580004 cmp r8, r4 <== NOT EXECUTED
2668c: 21a08004 movcs r8, r4 <== NOT EXECUTED
memcpy((buff + cmpltd), (block->buffer + ofs), c);
26690: e0811007 add r1, r1, r7 <== NOT EXECUTED
26694: e1a02008 mov r2, r8 <== NOT EXECUTED
26698: eb007f04 bl 462b0 <memcpy> <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
2669c: e0544008 subs r4, r4, r8 <== NOT EXECUTED
c = MIN(count, (fs_info->vol.bps - ofs));
memcpy((buff + cmpltd), (block->buffer + ofs), c);
count -= c;
cmpltd += c;
266a0: e0885005 add r5, r8, r5 <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
266a4: 0a00000b beq 266d8 <_fat_block_read+0x90> <== NOT EXECUTED
c = MIN(count, (fs_info->vol.bps - ofs));
memcpy((buff + cmpltd), (block->buffer + ofs), c);
count -= c;
cmpltd += c;
blk++;
266a8: e2866001 add r6, r6, #1 <== NOT EXECUTED
266ac: e1a0700a mov r7, sl <== NOT EXECUTED
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while (count > 0)
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
266b0: e1a0300d mov r3, sp <== NOT EXECUTED
266b4: e1a01006 mov r1, r6 <== NOT EXECUTED
266b8: e1a00009 mov r0, r9 <== NOT EXECUTED
266bc: e3a02001 mov r2, #1 <== NOT EXECUTED
266c0: ebfffe8d bl 260fc <fat_buf_access> <== NOT EXECUTED
if (rc != RC_OK)
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
memcpy((buff + cmpltd), (block->buffer + ofs), c);
266c4: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
uint32_t c = 0;
while (count > 0)
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
266c8: e250a000 subs sl, r0, #0 <== NOT EXECUTED
return -1;
c = MIN(count, (fs_info->vol.bps - ofs));
memcpy((buff + cmpltd), (block->buffer + ofs), c);
266cc: e0830005 add r0, r3, r5 <== NOT EXECUTED
uint32_t c = 0;
while (count > 0)
{
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
266d0: 0affffe8 beq 26678 <_fat_block_read+0x30> <== NOT EXECUTED
c = MIN(count, (fs_info->vol.bps - ofs));
memcpy((buff + cmpltd), (block->buffer + ofs), c);
count -= c;
cmpltd += c;
blk++;
266d4: e3e05000 mvn r5, #0 <== NOT EXECUTED
ofs = 0;
}
return cmpltd;
}
266d8: e1a00005 mov r0, r5 <== NOT EXECUTED
266dc: e28dd004 add sp, sp, #4 <== NOT EXECUTED
266e0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
000260f4 <_fat_block_release>:
int
_fat_block_release(
rtems_filesystem_mount_table_entry_t *mt_entry)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
return fat_buf_release(fs_info);
260f4: e5900034 ldr r0, [r0, #52] ; 0x34 <== NOT EXECUTED
260f8: eaffffa4 b 25f90 <fat_buf_release> <== NOT EXECUTED
00026314 <_fat_block_write>:
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t start,
uint32_t offset,
uint32_t count,
const void *buff)
{
26314: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
26318: e2535000 subs r5, r3, #0 <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t start,
uint32_t offset,
uint32_t count,
const void *buff)
{
2631c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
26320: e5907034 ldr r7, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
26324: 01a06005 moveq r6, r5 <== NOT EXECUTED
26328: 0a00002d beq 263e4 <_fat_block_write+0xd0> <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
ssize_t cmpltd = 0;
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
2632c: e3a06000 mov r6, #0 <== NOT EXECUTED
26330: e28db004 add fp, sp, #4 <== NOT EXECUTED
26334: e52b6004 str r6, [fp, #-4]! <== NOT EXECUTED
26338: e1a08002 mov r8, r2 <== NOT EXECUTED
2633c: e1a09001 mov r9, r1 <== NOT EXECUTED
26340: ea000015 b 2639c <_fat_block_write+0x88> <== NOT EXECUTED
c = MIN(count, (fs_info->vol.bps - ofs));
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
26344: e1a01009 mov r1, r9 <== NOT EXECUTED
26348: e1a0300d mov r3, sp <== NOT EXECUTED
2634c: e3a02001 mov r2, #1 <== NOT EXECUTED
26350: e1a00007 mov r0, r7 <== NOT EXECUTED
26354: ebffff68 bl 260fc <fat_buf_access> <== NOT EXECUTED
if (rc != RC_OK)
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
26358: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
c = MIN(count, (fs_info->vol.bps - ofs));
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
2635c: e1a0a000 mov sl, r0 <== NOT EXECUTED
if (rc != RC_OK)
26360: e35a0000 cmp sl, #0 <== NOT EXECUTED
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
26364: e0831006 add r1, r3, r6 <== NOT EXECUTED
26368: e1a02004 mov r2, r4 <== NOT EXECUTED
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
2636c: 1a00001b bne 263e0 <_fat_block_write+0xcc> <== NOT EXECUTED
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
26370: e59d3000 ldr r3, [sp] <== NOT EXECUTED
26374: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
26378: e0800008 add r0, r0, r8 <== NOT EXECUTED
2637c: eb007fcb bl 462b0 <memcpy> <== NOT EXECUTED
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
26380: e3a03001 mov r3, #1 <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
26384: e0555004 subs r5, r5, r4 <== NOT EXECUTED
26388: e5c73080 strb r3, [r7, #128] ; 0x80 <== NOT EXECUTED
memcpy((block->buffer + ofs), (buff + cmpltd), c);
fat_buf_mark_modified(fs_info);
count -= c;
cmpltd +=c;
2638c: e0846006 add r6, r4, r6 <== NOT EXECUTED
uint32_t blk = start;
uint32_t ofs = offset;
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
26390: 0a000013 beq 263e4 <_fat_block_write+0xd0> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
count -= c;
cmpltd +=c;
blk++;
26394: e2899001 add r9, r9, #1 <== NOT EXECUTED
26398: e1a0800a mov r8, sl <== NOT EXECUTED
rtems_bdbuf_buffer *block = NULL;
uint32_t c = 0;
while(count > 0)
{
c = MIN(count, (fs_info->vol.bps - ofs));
2639c: e1d730b0 ldrh r3, [r7] <== NOT EXECUTED
263a0: e0684003 rsb r4, r8, r3 <== NOT EXECUTED
263a4: e1540005 cmp r4, r5 <== NOT EXECUTED
263a8: 21a04005 movcs r4, r5 <== NOT EXECUTED
if (c == fs_info->vol.bps)
263ac: e1530004 cmp r3, r4 <== NOT EXECUTED
263b0: 1affffe3 bne 26344 <_fat_block_write+0x30> <== NOT EXECUTED
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
263b4: e1a01009 mov r1, r9 <== NOT EXECUTED
263b8: e3a02002 mov r2, #2 <== NOT EXECUTED
263bc: e1a0300d mov r3, sp <== NOT EXECUTED
263c0: e1a00007 mov r0, r7 <== NOT EXECUTED
263c4: ebffff4c bl 260fc <fat_buf_access> <== NOT EXECUTED
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
263c8: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
while(count > 0)
{
c = MIN(count, (fs_info->vol.bps - ofs));
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
263cc: e1a0a000 mov sl, r0 <== NOT EXECUTED
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
263d0: e35a0000 cmp sl, #0 <== NOT EXECUTED
return -1;
memcpy((block->buffer + ofs), (buff + cmpltd), c);
263d4: e0831006 add r1, r3, r6 <== NOT EXECUTED
263d8: e1a02004 mov r2, r4 <== NOT EXECUTED
if (c == fs_info->vol.bps)
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_GET, &block);
else
rc = fat_buf_access(fs_info, blk, FAT_OP_TYPE_READ, &block);
if (rc != RC_OK)
263dc: 0affffe3 beq 26370 <_fat_block_write+0x5c> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
count -= c;
cmpltd +=c;
blk++;
263e0: e3e06000 mvn r6, #0 <== NOT EXECUTED
ofs = 0;
}
return cmpltd;
}
263e4: e1a00006 mov r0, r6 <== NOT EXECUTED
263e8: e28dd004 add sp, sp, #4 <== NOT EXECUTED
263ec: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0003f9d4 <_fcntl_r>:
int fd,
int cmd,
int arg
)
{
return fcntl( fd, cmd, arg );
3f9d4: e1a00001 mov r0, r1 <== NOT EXECUTED
3f9d8: e1a01002 mov r1, r2 <== NOT EXECUTED
3f9dc: e1a02003 mov r2, r3 <== NOT EXECUTED
3f9e0: eaffff81 b 3f7ec <fcntl> <== NOT EXECUTED
0002205c <_getpid_r>:
pid_t _getpid_r(
struct _reent *ptr __attribute__((unused))
)
{
return getpid();
}
2205c: e3a00001 mov r0, #1 <== NOT EXECUTED
22060: e12fff1e bx lr <== NOT EXECUTED
000021b4 <_gettimeofday>:
int _gettimeofday(
struct timeval *tp,
struct timezone *tzp
)
{
return gettimeofday( tp, tzp );
21b4: eaffffe4 b 214c <gettimeofday> <== NOT EXECUTED
00022074 <_kill_r>:
#include <reent.h>
int _kill_r( struct _reent *ptr, pid_t pid, int sig )
{
return 0;
}
22074: e3a00000 mov r0, #0 <== NOT EXECUTED
22078: e12fff1e bx lr <== NOT EXECUTED
00029db8 <_link_r>:
struct _reent *ptr __attribute__((unused)),
const char *existing,
const char *new
)
{
return link( existing, new );
29db8: e1a00001 mov r0, r1 <== NOT EXECUTED
29dbc: e1a01002 mov r1, r2 <== NOT EXECUTED
29dc0: eaffff75 b 29b9c <link> <== NOT EXECUTED
0002a004 <_lstat_r>:
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
return _STAT_NAME( path, buf );
2a004: e1a00001 mov r0, r1 <== NOT EXECUTED
2a008: e1a01002 mov r1, r2 <== NOT EXECUTED
2a00c: eaffffc2 b 29f1c <lstat> <== NOT EXECUTED
00019e70 <_realloc_r>:
struct _reent *ignored __attribute__((unused)),
void *ptr,
size_t size
)
{
return realloc( ptr, size );
19e70: e1a00001 mov r0, r1 <== NOT EXECUTED
19e74: e1a01002 mov r1, r2 <== NOT EXECUTED
19e78: ea00000e b 19eb8 <realloc> <== NOT EXECUTED
0005ccac <_rename_r>:
int _rename_r(
struct _reent *ptr __attribute__((unused)),
const char *old,
const char *new
)
{
5ccac: e92d41f0 push {r4, r5, r6, r7, r8, lr}
/*
* Get the parent node of the old path to be renamed. Find the parent path.
*/
old_parent_pathlen = rtems_filesystem_dirname ( old );
5ccb0: e1a00001 mov r0, r1
int _rename_r(
struct _reent *ptr __attribute__((unused)),
const char *old,
const char *new
)
{
5ccb4: e24dd048 sub sp, sp, #72 ; 0x48
5ccb8: e1a05001 mov r5, r1
5ccbc: e1a06002 mov r6, r2
/*
* Get the parent node of the old path to be renamed. Find the parent path.
*/
old_parent_pathlen = rtems_filesystem_dirname ( old );
5ccc0: ebfeabbb bl 7bb4 <rtems_filesystem_dirname>
if ( old_parent_pathlen == 0 )
5ccc4: e2507000 subs r7, r0, #0
5ccc8: 1a00008b bne 5cefc <_rename_r+0x250>
rtems_filesystem_get_start_loc( old, &i, &old_parent_loc );
5cccc: e28d4018 add r4, sp, #24
5ccd0: e1a00005 mov r0, r5
5ccd4: e28d1044 add r1, sp, #68 ; 0x44
5ccd8: e1a02004 mov r2, r4
5ccdc: ebfeb292 bl 972c <rtems_filesystem_get_start_loc>
5cce0: e1a08007 mov r8, r7
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
5cce4: e1a0e004 mov lr, r4
5cce8: e8be000f ldm lr!, {r0, r1, r2, r3}
5ccec: e28dc02c add ip, sp, #44 ; 0x2c
5ccf0: e8ac000f stmia ip!, {r0, r1, r2, r3}
5ccf4: e59e3000 ldr r3, [lr]
name = old + old_parent_pathlen;
5ccf8: e0855007 add r5, r5, r7
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
5ccfc: e58c3000 str r3, [ip]
name = old + old_parent_pathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
5cd00: e1a00005 mov r0, r5
/*
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
name = old + old_parent_pathlen;
5cd04: e58d5040 str r5, [sp, #64] ; 0x40
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
5cd08: ebffb3b5 bl 49be4 <strlen>
5cd0c: e1a01000 mov r1, r0
5cd10: e1a00005 mov r0, r5
5cd14: ebfeab91 bl 7b60 <rtems_filesystem_prefix_separators>
5cd18: e0855000 add r5, r5, r0
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
5cd1c: e1a00005 mov r0, r5
* Start from the parent to find the node that should be under it.
*/
old_loc = old_parent_loc;
name = old + old_parent_pathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
5cd20: e58d5040 str r5, [sp, #64] ; 0x40
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
5cd24: ebffb3ae bl 49be4 <strlen>
5cd28: e28d702c add r7, sp, #44 ; 0x2c
5cd2c: e3a0c000 mov ip, #0
5cd30: e1a01000 mov r1, r0
5cd34: e1a0200c mov r2, ip
5cd38: e1a00005 mov r0, r5
5cd3c: e1a03007 mov r3, r7
5cd40: e58dc000 str ip, [sp]
5cd44: ebfeabab bl 7bf8 <rtems_filesystem_evaluate_relative_path>
0, &old_loc, false );
if ( result != 0 ) {
5cd48: e3500000 cmp r0, #0
5cd4c: 1a00005b bne 5cec0 <_rename_r+0x214>
/*
* Get the parent of the new node we are renaming to.
*/
rtems_filesystem_get_start_loc( new, &i, &new_parent_loc );
5cd50: e28d5004 add r5, sp, #4
5cd54: e1a00006 mov r0, r6
5cd58: e28d1044 add r1, sp, #68 ; 0x44
5cd5c: e1a02005 mov r2, r5
5cd60: ebfeb271 bl 972c <rtems_filesystem_get_start_loc>
if ( !new_parent_loc.ops->evalformake_h ) {
5cd64: e59d3010 ldr r3, [sp, #16]
5cd68: e5933004 ldr r3, [r3, #4]
5cd6c: e3530000 cmp r3, #0
5cd70: 0a00008f beq 5cfb4 <_rename_r+0x308>
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
5cd74: e59d0044 ldr r0, [sp, #68] ; 0x44
5cd78: e1a01005 mov r1, r5
5cd7c: e0860000 add r0, r6, r0
5cd80: e28d2040 add r2, sp, #64 ; 0x40
5cd84: e1a0e00f mov lr, pc
5cd88: e12fff13 bx r3
if ( result != 0 ) {
5cd8c: e3500000 cmp r0, #0
5cd90: 1a000065 bne 5cf2c <_rename_r+0x280>
/*
* Check to see if the caller is trying to rename across file system
* boundaries.
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
5cd94: e59d3014 ldr r3, [sp, #20]
5cd98: e59d2028 ldr r2, [sp, #40] ; 0x28
5cd9c: e1520003 cmp r2, r3
5cda0: 1a000027 bne 5ce44 <_rename_r+0x198>
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
if ( !new_parent_loc.ops->rename_h ) {
5cda4: e59d3010 ldr r3, [sp, #16]
5cda8: e593c040 ldr ip, [r3, #64] ; 0x40
5cdac: e35c0000 cmp ip, #0
5cdb0: 0a00007a beq 5cfa0 <_rename_r+0x2f4>
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
5cdb4: e59d3040 ldr r3, [sp, #64] ; 0x40
5cdb8: e1a00004 mov r0, r4
5cdbc: e1a01007 mov r1, r7
5cdc0: e1a02005 mov r2, r5
5cdc4: e1a0e00f mov lr, pc
5cdc8: e12fff1c bx ip
rtems_filesystem_freenode( &new_parent_loc );
5cdcc: e59d3010 ldr r3, [sp, #16]
5cdd0: e3530000 cmp r3, #0
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
5cdd4: e1a06000 mov r6, r0
rtems_filesystem_freenode( &new_parent_loc );
5cdd8: 0a000004 beq 5cdf0 <_rename_r+0x144>
5cddc: e593301c ldr r3, [r3, #28]
5cde0: e3530000 cmp r3, #0
5cde4: 11a00005 movne r0, r5
5cde8: 11a0e00f movne lr, pc
5cdec: 112fff13 bxne r3
if ( free_old_parentloc )
5cdf0: e3580000 cmp r8, #0
5cdf4: 0a000007 beq 5ce18 <_rename_r+0x16c>
rtems_filesystem_freenode( &old_parent_loc );
5cdf8: e59d3024 ldr r3, [sp, #36] ; 0x24
5cdfc: e3530000 cmp r3, #0
5ce00: 0a000004 beq 5ce18 <_rename_r+0x16c>
5ce04: e593301c ldr r3, [r3, #28]
5ce08: e3530000 cmp r3, #0
5ce0c: 11a00004 movne r0, r4
5ce10: 11a0e00f movne lr, pc
5ce14: 112fff13 bxne r3
rtems_filesystem_freenode( &old_loc );
5ce18: e59d3038 ldr r3, [sp, #56] ; 0x38
5ce1c: e3530000 cmp r3, #0
5ce20: 0a000004 beq 5ce38 <_rename_r+0x18c>
5ce24: e593301c ldr r3, [r3, #28]
5ce28: e3530000 cmp r3, #0
5ce2c: 11a00007 movne r0, r7
5ce30: 11a0e00f movne lr, pc
5ce34: 112fff13 bxne r3
return result;
}
5ce38: e1a00006 mov r0, r6
5ce3c: e28dd048 add sp, sp, #72 ; 0x48
5ce40: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
* Check to see if the caller is trying to rename across file system
* boundaries.
*/
if ( old_parent_loc.mt_entry != new_parent_loc.mt_entry ) {
rtems_filesystem_freenode( &new_parent_loc );
5ce44: e59d3010 ldr r3, [sp, #16]
5ce48: e3530000 cmp r3, #0
5ce4c: 0a000004 beq 5ce64 <_rename_r+0x1b8>
5ce50: e593301c ldr r3, [r3, #28]
5ce54: e3530000 cmp r3, #0
5ce58: 11a00005 movne r0, r5
5ce5c: 11a0e00f movne lr, pc
5ce60: 112fff13 bxne r3
if ( free_old_parentloc )
5ce64: e3580000 cmp r8, #0
5ce68: 0a000007 beq 5ce8c <_rename_r+0x1e0>
rtems_filesystem_freenode( &old_parent_loc );
5ce6c: e59d3024 ldr r3, [sp, #36] ; 0x24
5ce70: e3530000 cmp r3, #0
5ce74: 0a000004 beq 5ce8c <_rename_r+0x1e0>
5ce78: e593301c ldr r3, [r3, #28]
5ce7c: e3530000 cmp r3, #0
5ce80: 11a00004 movne r0, r4
5ce84: 11a0e00f movne lr, pc
5ce88: 112fff13 bxne r3
rtems_filesystem_freenode( &old_loc );
5ce8c: e59d3038 ldr r3, [sp, #56] ; 0x38
5ce90: e3530000 cmp r3, #0
5ce94: 0a000004 beq 5ceac <_rename_r+0x200>
5ce98: e593301c ldr r3, [r3, #28]
5ce9c: e3530000 cmp r3, #0
5cea0: 11a00007 movne r0, r7
5cea4: 11a0e00f movne lr, pc
5cea8: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( EXDEV );
5ceac: ebff984f bl 42ff0 <__errno>
5ceb0: e3a03012 mov r3, #18
5ceb4: e5803000 str r3, [r0]
5ceb8: e3e06000 mvn r6, #0
5cebc: eaffffdd b 5ce38 <_rename_r+0x18c>
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &old_loc, false );
if ( result != 0 ) {
if ( free_old_parentloc )
5cec0: e3580000 cmp r8, #0
5cec4: 1a000001 bne 5ced0 <_rename_r+0x224>
result = (*new_parent_loc.ops->rename_h)( &old_parent_loc, &old_loc, &new_parent_loc, name );
rtems_filesystem_freenode( &new_parent_loc );
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
rtems_filesystem_freenode( &old_loc );
5cec8: e3e06000 mvn r6, #0 <== NOT EXECUTED
5cecc: eaffffd9 b 5ce38 <_rename_r+0x18c> <== NOT EXECUTED
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &old_loc, false );
if ( result != 0 ) {
if ( free_old_parentloc )
rtems_filesystem_freenode( &old_parent_loc );
5ced0: e59d3024 ldr r3, [sp, #36] ; 0x24
5ced4: e3530000 cmp r3, #0
5ced8: 0afffffa beq 5cec8 <_rename_r+0x21c>
5cedc: e593301c ldr r3, [r3, #28]
5cee0: e3530000 cmp r3, #0
5cee4: 0afffff7 beq 5cec8 <_rename_r+0x21c>
5cee8: e1a00004 mov r0, r4
5ceec: e1a0e00f mov lr, pc
5cef0: e12fff13 bx r3
5cef4: e3e06000 mvn r6, #0
5cef8: eaffffce b 5ce38 <_rename_r+0x18c>
old_parent_pathlen = rtems_filesystem_dirname ( old );
if ( old_parent_pathlen == 0 )
rtems_filesystem_get_start_loc( old, &i, &old_parent_loc );
else {
result = rtems_filesystem_evaluate_path( old, old_parent_pathlen,
5cefc: e28d4018 add r4, sp, #24
5cf00: e3a0c000 mov ip, #0
5cf04: e1a00005 mov r0, r5
5cf08: e1a01007 mov r1, r7
5cf0c: e3a02002 mov r2, #2
5cf10: e1a03004 mov r3, r4
5cf14: e58dc000 str ip, [sp]
5cf18: ebfeab72 bl 7ce8 <rtems_filesystem_evaluate_path>
RTEMS_LIBIO_PERMS_WRITE,
&old_parent_loc,
false );
if ( result != 0 )
5cf1c: e3500000 cmp r0, #0
5cf20: 1affffe8 bne 5cec8 <_rename_r+0x21c>
5cf24: e3a08001 mov r8, #1
5cf28: eaffff6d b 5cce4 <_rename_r+0x38>
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*new_parent_loc.ops->evalformake_h)( &new[i], &new_parent_loc, &name );
if ( result != 0 ) {
rtems_filesystem_freenode( &new_parent_loc );
5cf2c: e59d3010 ldr r3, [sp, #16]
5cf30: e3530000 cmp r3, #0
5cf34: 0a000004 beq 5cf4c <_rename_r+0x2a0>
5cf38: e593301c ldr r3, [r3, #28]
5cf3c: e3530000 cmp r3, #0
5cf40: 11a00005 movne r0, r5
5cf44: 11a0e00f movne lr, pc
5cf48: 112fff13 bxne r3
if ( free_old_parentloc )
5cf4c: e3580000 cmp r8, #0
5cf50: 0a000007 beq 5cf74 <_rename_r+0x2c8>
rtems_filesystem_freenode( &old_parent_loc );
5cf54: e59d3024 ldr r3, [sp, #36] ; 0x24
5cf58: e3530000 cmp r3, #0
5cf5c: 0a000004 beq 5cf74 <_rename_r+0x2c8>
5cf60: e593301c ldr r3, [r3, #28]
5cf64: e3530000 cmp r3, #0
5cf68: 11a00004 movne r0, r4
5cf6c: 11a0e00f movne lr, pc
5cf70: 112fff13 bxne r3
rtems_filesystem_freenode( &old_loc );
5cf74: e59d3038 ldr r3, [sp, #56] ; 0x38
5cf78: e3530000 cmp r3, #0
5cf7c: 0affffd1 beq 5cec8 <_rename_r+0x21c>
5cf80: e593301c ldr r3, [r3, #28]
5cf84: e3530000 cmp r3, #0
5cf88: 0affffce beq 5cec8 <_rename_r+0x21c>
5cf8c: e1a00007 mov r0, r7
5cf90: e1a0e00f mov lr, pc
5cf94: e12fff13 bx r3
5cf98: e3e06000 mvn r6, #0
5cf9c: eaffffa5 b 5ce38 <_rename_r+0x18c>
rtems_filesystem_freenode( &old_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
if ( !new_parent_loc.ops->rename_h ) {
rtems_filesystem_freenode( &new_parent_loc );
5cfa0: e593301c ldr r3, [r3, #28]
5cfa4: e3530000 cmp r3, #0
5cfa8: 11a00005 movne r0, r5
5cfac: 11a0e00f movne lr, pc
5cfb0: 112fff13 bxne r3
if ( free_old_parentloc )
5cfb4: e3580000 cmp r8, #0
5cfb8: 0a000007 beq 5cfdc <_rename_r+0x330>
rtems_filesystem_freenode( &old_parent_loc );
5cfbc: e59d3024 ldr r3, [sp, #36] ; 0x24
5cfc0: e3530000 cmp r3, #0
5cfc4: 0a000004 beq 5cfdc <_rename_r+0x330>
5cfc8: e593301c ldr r3, [r3, #28]
5cfcc: e3530000 cmp r3, #0
5cfd0: 11a00004 movne r0, r4
5cfd4: 11a0e00f movne lr, pc
5cfd8: 112fff13 bxne r3
rtems_filesystem_freenode( &old_loc );
5cfdc: e59d3038 ldr r3, [sp, #56] ; 0x38
5cfe0: e3530000 cmp r3, #0
5cfe4: 0a000004 beq 5cffc <_rename_r+0x350>
5cfe8: e593301c ldr r3, [r3, #28]
5cfec: e3530000 cmp r3, #0
5cff0: 11a00007 movne r0, r7
5cff4: 11a0e00f movne lr, pc
5cff8: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( ENOTSUP );
5cffc: ebff97fb bl 42ff0 <__errno>
5d000: e3a03086 mov r3, #134 ; 0x86
5d004: e5803000 str r3, [r0]
5d008: e3e06000 mvn r6, #0
5d00c: eaffff89 b 5ce38 <_rename_r+0x18c>
00009720 <_stat_r>:
struct _reent *ptr __attribute__((unused)),
const char *path,
struct stat *buf
)
{
return _STAT_NAME( path, buf );
9720: e1a00001 mov r0, r1 <== NOT EXECUTED
9724: e1a01002 mov r1, r2 <== NOT EXECUTED
9728: eaffffc2 b 9638 <stat> <== NOT EXECUTED
0000dd70 <_unlink_r>:
int _unlink_r(
struct _reent *ptr __attribute__((unused)),
const char *path
)
{
return unlink( path );
dd70: e1a00001 mov r0, r1 <== NOT EXECUTED
dd74: eaffff6c b db2c <unlink> <== NOT EXECUTED
00028b0c <chdir>:
#include <rtems/seterr.h>
int chdir(
const char *pathname
)
{
28b0c: e92d4030 push {r4, r5, lr}
rtems_filesystem_location_info_t loc;
int result;
if ( !pathname )
28b10: e2505000 subs r5, r0, #0
#include <rtems/seterr.h>
int chdir(
const char *pathname
)
{
28b14: e24dd018 sub sp, sp, #24
rtems_filesystem_location_info_t loc;
int result;
if ( !pathname )
28b18: 0a000031 beq 28be4 <chdir+0xd8>
rtems_set_errno_and_return_minus_one( EFAULT );
/*
* Get the node where we wish to go.
*/
result = rtems_filesystem_evaluate_path(
28b1c: eb008430 bl 49be4 <strlen>
28b20: e28d4004 add r4, sp, #4
28b24: e3a0c001 mov ip, #1
28b28: e1a01000 mov r1, r0
28b2c: e1a0200c mov r2, ip
28b30: e1a00005 mov r0, r5
28b34: e1a03004 mov r3, r4
28b38: e58dc000 str ip, [sp]
28b3c: ebff7c69 bl 7ce8 <rtems_filesystem_evaluate_path>
pathname, strlen( pathname ), RTEMS_LIBIO_PERMS_SEARCH, &loc, true );
if ( result != 0 )
28b40: e3500000 cmp r0, #0
28b44: 1a000024 bne 28bdc <chdir+0xd0>
return -1;
/*
* Verify you can change directory into this node.
*/
if ( !loc.ops->node_type_h ) {
28b48: e59d2010 ldr r2, [sp, #16]
28b4c: e5923010 ldr r3, [r2, #16]
28b50: e3530000 cmp r3, #0
28b54: 0a000018 beq 28bbc <chdir+0xb0>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
28b58: e1a00004 mov r0, r4
28b5c: e1a0e00f mov lr, pc
28b60: e12fff13 bx r3
28b64: e3500001 cmp r0, #1
28b68: 1a000022 bne 28bf8 <chdir+0xec>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTDIR );
}
rtems_filesystem_freenode( &rtems_filesystem_current );
28b6c: e59f50b8 ldr r5, [pc, #184] ; 28c2c <chdir+0x120>
28b70: e595c000 ldr ip, [r5]
28b74: e59c3010 ldr r3, [ip, #16]
28b78: e3530000 cmp r3, #0
28b7c: 0a000006 beq 28b9c <chdir+0x90>
28b80: e593301c ldr r3, [r3, #28]
28b84: e3530000 cmp r3, #0
28b88: 0a000003 beq 28b9c <chdir+0x90>
28b8c: e28c0004 add r0, ip, #4
28b90: e1a0e00f mov lr, pc
28b94: e12fff13 bx r3
28b98: e595c000 ldr ip, [r5]
rtems_filesystem_current = loc;
28b9c: e8b4000f ldm r4!, {r0, r1, r2, r3}
28ba0: e28cc004 add ip, ip, #4
28ba4: e8ac000f stmia ip!, {r0, r1, r2, r3}
28ba8: e5943000 ldr r3, [r4]
28bac: e58c3000 str r3, [ip]
28bb0: e3a00000 mov r0, #0
return 0;
}
28bb4: e28dd018 add sp, sp, #24
28bb8: e8bd8030 pop {r4, r5, pc}
/*
* Verify you can change directory into this node.
*/
if ( !loc.ops->node_type_h ) {
rtems_filesystem_freenode( &loc );
28bbc: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
28bc0: e3530000 cmp r3, #0 <== NOT EXECUTED
28bc4: 11a00004 movne r0, r4 <== NOT EXECUTED
28bc8: 11a0e00f movne lr, pc <== NOT EXECUTED
28bcc: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
28bd0: eb006906 bl 42ff0 <__errno> <== NOT EXECUTED
28bd4: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
28bd8: e5803000 str r3, [r0] <== NOT EXECUTED
28bdc: e3e00000 mvn r0, #0
28be0: eafffff3 b 28bb4 <chdir+0xa8>
{
rtems_filesystem_location_info_t loc;
int result;
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
28be4: eb006901 bl 42ff0 <__errno>
28be8: e3a0300e mov r3, #14
28bec: e5803000 str r3, [r0]
28bf0: e3e00000 mvn r0, #0
28bf4: eaffffee b 28bb4 <chdir+0xa8>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_filesystem_freenode( &loc );
28bf8: e59d3010 ldr r3, [sp, #16]
28bfc: e3530000 cmp r3, #0
28c00: 0a000004 beq 28c18 <chdir+0x10c>
28c04: e593301c ldr r3, [r3, #28]
28c08: e3530000 cmp r3, #0
28c0c: 11a00004 movne r0, r4
28c10: 11a0e00f movne lr, pc
28c14: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( ENOTDIR );
28c18: eb0068f4 bl 42ff0 <__errno>
28c1c: e3a03014 mov r3, #20
28c20: e5803000 str r3, [r0]
28c24: e3e00000 mvn r0, #0
28c28: eaffffe1 b 28bb4 <chdir+0xa8>
000077a8 <chmod>:
int chmod(
const char *path,
mode_t mode
)
{
77a8: e92d4070 push {r4, r5, r6, lr}
77ac: e24dd018 sub sp, sp, #24
77b0: e1a05001 mov r5, r1
77b4: e1a06000 mov r6, r0
int status;
rtems_filesystem_location_info_t loc;
int result;
status = rtems_filesystem_evaluate_path( path, strlen( path ), 0, &loc, true );
77b8: eb010909 bl 49be4 <strlen>
77bc: e28d4004 add r4, sp, #4
77c0: e1a01000 mov r1, r0
77c4: e3a0c001 mov ip, #1
77c8: e1a00006 mov r0, r6
77cc: e3a02000 mov r2, #0
77d0: e1a03004 mov r3, r4
77d4: e58dc000 str ip, [sp]
77d8: eb000142 bl 7ce8 <rtems_filesystem_evaluate_path>
if ( status != 0 )
77dc: e3500000 cmp r0, #0
77e0: 1a000020 bne 7868 <chmod+0xc0>
return -1;
if ( !loc.handlers ){
77e4: e59d300c ldr r3, [sp, #12]
77e8: e3530000 cmp r3, #0
77ec: 0a000012 beq 783c <chmod+0x94>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( EBADF );
}
if ( !loc.handlers->fchmod_h ){
77f0: e593301c ldr r3, [r3, #28]
77f4: e3530000 cmp r3, #0
77f8: 0a00001c beq 7870 <chmod+0xc8>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.handlers->fchmod_h)( &loc, mode );
77fc: e1a01005 mov r1, r5
7800: e1a00004 mov r0, r4
7804: e1a0e00f mov lr, pc
7808: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
780c: e59d3010 ldr r3, [sp, #16]
7810: e3530000 cmp r3, #0
if ( !loc.handlers->fchmod_h ){
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.handlers->fchmod_h)( &loc, mode );
7814: e1a05000 mov r5, r0
rtems_filesystem_freenode( &loc );
7818: 0a000004 beq 7830 <chmod+0x88>
781c: e593301c ldr r3, [r3, #28]
7820: e3530000 cmp r3, #0
7824: 11a00004 movne r0, r4
7828: 11a0e00f movne lr, pc
782c: 112fff13 bxne r3
return result;
}
7830: e1a00005 mov r0, r5
7834: e28dd018 add sp, sp, #24
7838: e8bd8070 pop {r4, r5, r6, pc}
status = rtems_filesystem_evaluate_path( path, strlen( path ), 0, &loc, true );
if ( status != 0 )
return -1;
if ( !loc.handlers ){
rtems_filesystem_freenode( &loc );
783c: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
7840: e3530000 cmp r3, #0 <== NOT EXECUTED
7844: 0a000004 beq 785c <chmod+0xb4> <== NOT EXECUTED
7848: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
784c: e3530000 cmp r3, #0 <== NOT EXECUTED
7850: 11a00004 movne r0, r4 <== NOT EXECUTED
7854: 11a0e00f movne lr, pc <== NOT EXECUTED
7858: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EBADF );
785c: eb00ede3 bl 42ff0 <__errno> <== NOT EXECUTED
7860: e3a03009 mov r3, #9 <== NOT EXECUTED
7864: e5803000 str r3, [r0] <== NOT EXECUTED
7868: e3e05000 mvn r5, #0
786c: eaffffef b 7830 <chmod+0x88>
}
if ( !loc.handlers->fchmod_h ){
rtems_filesystem_freenode( &loc );
7870: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
7874: e3530000 cmp r3, #0 <== NOT EXECUTED
7878: 0a000004 beq 7890 <chmod+0xe8> <== NOT EXECUTED
787c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
7880: e3530000 cmp r3, #0 <== NOT EXECUTED
7884: 11a00004 movne r0, r4 <== NOT EXECUTED
7888: 11a0e00f movne lr, pc <== NOT EXECUTED
788c: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
7890: eb00edd6 bl 42ff0 <__errno> <== NOT EXECUTED
7894: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
7898: e5803000 str r3, [r0] <== NOT EXECUTED
789c: e3e05000 mvn r5, #0 <== NOT EXECUTED
78a0: eaffffe2 b 7830 <chmod+0x88> <== NOT EXECUTED
00028c30 <chown>:
int chown(
const char *path,
uid_t owner,
gid_t group
)
{
28c30: e92d40f0 push {r4, r5, r6, r7, lr}
28c34: e1a01801 lsl r1, r1, #16
28c38: e24dd018 sub sp, sp, #24
28c3c: e1a02802 lsl r2, r2, #16
28c40: e1a06821 lsr r6, r1, #16
28c44: e1a05822 lsr r5, r2, #16
28c48: e1a07000 mov r7, r0
rtems_filesystem_location_info_t loc;
int result;
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &loc, true ) )
28c4c: eb0083e4 bl 49be4 <strlen>
28c50: e28d4004 add r4, sp, #4
28c54: e1a01000 mov r1, r0
28c58: e3a0c001 mov ip, #1
28c5c: e1a00007 mov r0, r7
28c60: e3a02000 mov r2, #0
28c64: e1a03004 mov r3, r4
28c68: e58dc000 str ip, [sp]
28c6c: ebff7c1d bl 7ce8 <rtems_filesystem_evaluate_path>
28c70: e3500000 cmp r0, #0
28c74: 1a00001c bne 28cec <chown+0xbc>
return -1;
if ( !loc.ops->chown_h ) {
28c78: e59d2010 ldr r2, [sp, #16]
28c7c: e5923018 ldr r3, [r2, #24]
28c80: e3530000 cmp r3, #0
28c84: 0a000010 beq 28ccc <chown+0x9c>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->chown_h)( &loc, owner, group );
28c88: e1a02005 mov r2, r5
28c8c: e1a01006 mov r1, r6
28c90: e1a00004 mov r0, r4
28c94: e1a0e00f mov lr, pc
28c98: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
28c9c: e59d3010 ldr r3, [sp, #16]
28ca0: e3530000 cmp r3, #0
if ( !loc.ops->chown_h ) {
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->chown_h)( &loc, owner, group );
28ca4: e1a05000 mov r5, r0
rtems_filesystem_freenode( &loc );
28ca8: 0a000004 beq 28cc0 <chown+0x90>
28cac: e593301c ldr r3, [r3, #28]
28cb0: e3530000 cmp r3, #0
28cb4: 11a00004 movne r0, r4
28cb8: 11a0e00f movne lr, pc
28cbc: 112fff13 bxne r3
return result;
}
28cc0: e1a00005 mov r0, r5
28cc4: e28dd018 add sp, sp, #24
28cc8: e8bd80f0 pop {r4, r5, r6, r7, pc}
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &loc, true ) )
return -1;
if ( !loc.ops->chown_h ) {
rtems_filesystem_freenode( &loc );
28ccc: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
28cd0: e3530000 cmp r3, #0 <== NOT EXECUTED
28cd4: 11a00004 movne r0, r4 <== NOT EXECUTED
28cd8: 11a0e00f movne lr, pc <== NOT EXECUTED
28cdc: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
28ce0: eb0068c2 bl 42ff0 <__errno> <== NOT EXECUTED
28ce4: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
28ce8: e5803000 str r3, [r0] <== NOT EXECUTED
28cec: e3e05000 mvn r5, #0
28cf0: eafffff2 b 28cc0 <chown+0x90>
00028cf4 <chroot>:
#include <rtems/seterr.h>
int chroot(
const char *pathname
)
{
28cf4: e92d4070 push {r4, r5, r6, lr}
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
28cf8: e59f50d8 ldr r5, [pc, #216] ; 28dd8 <chroot+0xe4>
28cfc: e59f30d8 ldr r3, [pc, #216] ; 28ddc <chroot+0xe8>
28d00: e5954000 ldr r4, [r5]
28d04: e1540003 cmp r4, r3
#include <rtems/seterr.h>
int chroot(
const char *pathname
)
{
28d08: e24dd018 sub sp, sp, #24
28d0c: e1a06000 mov r6, r0
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
28d10: 0a000020 beq 28d98 <chroot+0xa4>
rtems_libio_set_private_env(); /* try to set a new private env*/
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = chdir(pathname);
28d14: e1a00006 mov r0, r6
28d18: ebffff7b bl 28b0c <chdir>
if (result) {
28d1c: e250c000 subs ip, r0, #0
28d20: 1a000025 bne 28dbc <chroot+0xc8>
rtems_set_errno_and_return_minus_one( errno );
}
/* clone the new root location */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
28d24: e28d4004 add r4, sp, #4
28d28: e1a0200c mov r2, ip
28d2c: e59f00ac ldr r0, [pc, #172] ; 28de0 <chroot+0xec>
28d30: e3a01001 mov r1, #1
28d34: e1a03004 mov r3, r4
28d38: e58dc000 str ip, [sp]
28d3c: ebff7be9 bl 7ce8 <rtems_filesystem_evaluate_path>
28d40: e3500000 cmp r0, #0
28d44: 1a00001c bne 28dbc <chroot+0xc8>
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
}
rtems_filesystem_freenode(&rtems_filesystem_root);
28d48: e595c000 ldr ip, [r5]
28d4c: e59c3024 ldr r3, [ip, #36] ; 0x24
28d50: e3530000 cmp r3, #0
28d54: 0a000007 beq 28d78 <chroot+0x84>
28d58: e593301c ldr r3, [r3, #28]
28d5c: e3530000 cmp r3, #0
28d60: 0a000004 beq 28d78 <chroot+0x84>
28d64: e28c0018 add r0, ip, #24
28d68: e1a0e00f mov lr, pc
28d6c: e12fff13 bx r3
28d70: e59f3060 ldr r3, [pc, #96] ; 28dd8 <chroot+0xe4>
28d74: e593c000 ldr ip, [r3]
rtems_filesystem_root = loc;
28d78: e8b4000f ldm r4!, {r0, r1, r2, r3}
28d7c: e28cc018 add ip, ip, #24
28d80: e8ac000f stmia ip!, {r0, r1, r2, r3}
28d84: e5943000 ldr r3, [r4]
28d88: e58c3000 str r3, [ip]
28d8c: e3a00000 mov r0, #0
return 0;
}
28d90: e28dd018 add sp, sp, #24
28d94: e8bd8070 pop {r4, r5, r6, pc}
int result;
rtems_filesystem_location_info_t loc;
/* an automatic call to new private env the first time */
if (rtems_current_user_env == &rtems_global_user_env) {
rtems_libio_set_private_env(); /* try to set a new private env*/
28d98: eb0005cf bl 2a4dc <rtems_libio_set_private_env>
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
28d9c: e5953000 ldr r3, [r5]
28da0: e1530004 cmp r3, r4
28da4: 1affffda bne 28d14 <chroot+0x20>
rtems_set_errno_and_return_minus_one( ENOTSUP );
28da8: eb006890 bl 42ff0 <__errno> <== NOT EXECUTED
28dac: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
28db0: e5803000 str r3, [r0] <== NOT EXECUTED
28db4: e3e00000 mvn r0, #0 <== NOT EXECUTED
28db8: eafffff4 b 28d90 <chroot+0x9c> <== NOT EXECUTED
}
/* clone the new root location */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
/* our cwd has changed, though - but there is no easy way of return :-( */
rtems_set_errno_and_return_minus_one( errno );
28dbc: eb00688b bl 42ff0 <__errno> <== NOT EXECUTED
28dc0: e1a04000 mov r4, r0 <== NOT EXECUTED
28dc4: eb006889 bl 42ff0 <__errno> <== NOT EXECUTED
28dc8: e5903000 ldr r3, [r0] <== NOT EXECUTED
28dcc: e3e00000 mvn r0, #0 <== NOT EXECUTED
28dd0: e5843000 str r3, [r4] <== NOT EXECUTED
28dd4: eaffffed b 28d90 <chroot+0x9c> <== NOT EXECUTED
00002334 <create_disk>:
return disktab [major].minor + minor;
}
static rtems_status_code
create_disk(dev_t dev, const char *name, rtems_disk_device **dd_ptr)
{
2334: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major >= disktab_size) {
2338: e59f61a0 ldr r6, [pc, #416] ; 24e0 <create_disk+0x1ac>
233c: e5967000 ldr r7, [r6]
2340: e1500007 cmp r0, r7
return disktab [major].minor + minor;
}
static rtems_status_code
create_disk(dev_t dev, const char *name, rtems_disk_device **dd_ptr)
{
2344: e24dd004 sub sp, sp, #4
2348: e1a05000 mov r5, r0
234c: e1a04001 mov r4, r1
2350: e1a09002 mov r9, r2
2354: e1a0b003 mov fp, r3
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major >= disktab_size) {
2358: 35968004 ldrcc r8, [r6, #4]
235c: 2a000043 bcs 2470 <create_disk+0x13c>
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
disktab = table;
disktab_size = new_size;
}
if (disktab [major].minor == NULL || minor >= disktab[major].size) {
2360: e7987185 ldr r7, [r8, r5, lsl #3]
2364: e1a0a185 lsl sl, r5, #3
2368: e3570000 cmp r7, #0
236c: e088800a add r8, r8, sl
2370: 05988004 ldreq r8, [r8, #4]
2374: 0a000026 beq 2414 <create_disk+0xe0>
2378: e5988004 ldr r8, [r8, #4]
237c: e1540008 cmp r4, r8
2380: 2a000023 bcs 2414 <create_disk+0xe0>
{
rtems_disk_device **dd_entry = create_disk_table_entry(dev);
rtems_disk_device *dd = NULL;
char *alloc_name = NULL;
if (dd_entry == NULL) {
2384: e0976104 adds r6, r7, r4, lsl #2
2388: 0a000048 beq 24b0 <create_disk+0x17c>
return RTEMS_NO_MEMORY;
}
if (*dd_entry != NULL) {
238c: e7973104 ldr r3, [r7, r4, lsl #2]
2390: e3530000 cmp r3, #0
2394: 13a0000c movne r0, #12
2398: 0a000001 beq 23a4 <create_disk+0x70>
*dd_entry = dd;
*dd_ptr = dd;
return RTEMS_SUCCESSFUL;
}
239c: e28dd004 add sp, sp, #4
23a0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
if (*dd_entry != NULL) {
return RTEMS_RESOURCE_IN_USE;
}
dd = malloc(sizeof(*dd));
23a4: e3a00034 mov r0, #52 ; 0x34
23a8: eb00042d bl 3464 <malloc>
if (dd == NULL) {
23ac: e2507000 subs r7, r0, #0
23b0: 0a00003e beq 24b0 <create_disk+0x17c>
return RTEMS_NO_MEMORY;
}
if (name != NULL) {
23b4: e3590000 cmp r9, #0
23b8: 0a00000c beq 23f0 <create_disk+0xbc>
alloc_name = strdup(name);
23bc: e1a00009 mov r0, r9
23c0: eb00434e bl 13100 <strdup>
if (alloc_name == NULL) {
23c4: e3500000 cmp r0, #0
if (dd == NULL) {
return RTEMS_NO_MEMORY;
}
if (name != NULL) {
alloc_name = strdup(name);
23c8: e1a08000 mov r8, r0
23cc: e1a09000 mov r9, r0
if (alloc_name == NULL) {
23d0: 0a00003e beq 24d0 <create_disk+0x19c>
return RTEMS_NO_MEMORY;
}
}
if (name != NULL) {
if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) {
23d4: e3a01c61 mov r1, #24832 ; 0x6100
23d8: e28110ff add r1, r1, #255 ; 0xff
23dc: e1a02005 mov r2, r5
23e0: e1a03004 mov r3, r4
23e4: eb000461 bl 3570 <mknod>
23e8: e3500000 cmp r0, #0
23ec: ba000031 blt 24b8 <create_disk+0x184>
}
}
dd->dev = dev;
dd->name = alloc_name;
dd->uses = 0;
23f0: e3a00000 mov r0, #0
dd->deleted = false;
*dd_entry = dd;
23f4: e5867000 str r7, [r6]
free(dd);
return RTEMS_UNSATISFIED;
}
}
dd->dev = dev;
23f8: e5875000 str r5, [r7]
dd->name = alloc_name;
dd->uses = 0;
dd->deleted = false;
*dd_entry = dd;
*dd_ptr = dd;
23fc: e58b7000 str r7, [fp]
free(dd);
return RTEMS_UNSATISFIED;
}
}
dd->dev = dev;
2400: e5874004 str r4, [r7, #4]
dd->name = alloc_name;
2404: e5879010 str r9, [r7, #16]
dd->uses = 0;
2408: e5870014 str r0, [r7, #20]
dd->deleted = false;
240c: e5c70030 strb r0, [r7, #48] ; 0x30
*dd_entry = dd;
*dd_ptr = dd;
return RTEMS_SUCCESSFUL;
2410: eaffffe1 b 239c <create_disk+0x68>
if (disktab [major].minor == NULL || minor >= disktab[major].size) {
rtems_disk_device **table = disktab [major].minor;
rtems_device_minor_number old_size = disktab [major].size;
rtems_device_minor_number new_size = 0;
if (old_size == 0) {
2414: e3580000 cmp r8, #0
2418: 03a03008 moveq r3, #8
new_size = DISKTAB_INITIAL_SIZE;
} else {
new_size = 2 * old_size;
241c: 11a03088 lslne r3, r8, #1
}
if (minor >= new_size) {
2420: e1540003 cmp r4, r3
new_size = minor + 1;
2424: 22843001 addcs r3, r4, #1
}
table = realloc(table, new_size * sizeof(*table));
2428: e1a00007 mov r0, r7
242c: e1a01103 lsl r1, r3, #2
2430: e58d3000 str r3, [sp]
2434: eb0006f3 bl 4008 <realloc>
if (table == NULL) {
2438: e2507000 subs r7, r0, #0
243c: e59d3000 ldr r3, [sp]
2440: 0a00001a beq 24b0 <create_disk+0x17c>
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
2444: e0682003 rsb r2, r8, r3
2448: e1a02102 lsl r2, r2, #2
244c: e0870108 add r0, r7, r8, lsl #2
2450: e3a01000 mov r1, #0
2454: eb0041ae bl 12b14 <memset>
disktab [major].minor = table;
2458: e5962004 ldr r2, [r6, #4]
disktab [major].size = new_size;
245c: e59d3000 ldr r3, [sp]
if (table == NULL) {
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
disktab [major].minor = table;
2460: e082a00a add sl, r2, sl
disktab [major].size = new_size;
2464: e58a3004 str r3, [sl, #4]
if (table == NULL) {
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
disktab [major].minor = table;
2468: e7827185 str r7, [r2, r5, lsl #3]
246c: eaffffc4 b 2384 <create_disk+0x50>
rtems_filesystem_split_dev_t(dev, major, minor);
if (major >= disktab_size) {
rtems_disk_device_table *table = disktab;
rtems_device_major_number old_size = disktab_size;
rtems_device_major_number new_size = 2 * old_size;
2470: e1a0a087 lsl sl, r7, #1
if (major >= new_size) {
2474: e150000a cmp r0, sl
new_size = major + 1;
2478: 2285a001 addcs sl, r5, #1
rtems_device_minor_number minor = 0;
rtems_filesystem_split_dev_t(dev, major, minor);
if (major >= disktab_size) {
rtems_disk_device_table *table = disktab;
247c: e5960004 ldr r0, [r6, #4]
if (major >= new_size) {
new_size = major + 1;
}
table = realloc(table, new_size * sizeof(*table));
2480: e1a0118a lsl r1, sl, #3
2484: eb0006df bl 4008 <realloc>
if (table == NULL) {
2488: e2508000 subs r8, r0, #0
248c: 0a000007 beq 24b0 <create_disk+0x17c>
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
2490: e067200a rsb r2, r7, sl <== NOT EXECUTED
2494: e0880187 add r0, r8, r7, lsl #3 <== NOT EXECUTED
2498: e1a02182 lsl r2, r2, #3 <== NOT EXECUTED
249c: e3a01000 mov r1, #0 <== NOT EXECUTED
24a0: eb00419b bl 12b14 <memset> <== NOT EXECUTED
disktab = table;
disktab_size = new_size;
24a4: e586a000 str sl, [r6] <== NOT EXECUTED
if (table == NULL) {
return NULL;
}
memset(table + old_size, 0, (new_size - old_size) * sizeof(*table));
disktab = table;
24a8: e5868004 str r8, [r6, #4] <== NOT EXECUTED
24ac: eaffffab b 2360 <create_disk+0x2c> <== NOT EXECUTED
dd->deleted = false;
*dd_entry = dd;
*dd_ptr = dd;
return RTEMS_SUCCESSFUL;
24b0: e3a0001a mov r0, #26
24b4: eaffffb8 b 239c <create_disk+0x68>
}
}
if (name != NULL) {
if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) {
free(alloc_name);
24b8: e1a00008 mov r0, r8 <== NOT EXECUTED
24bc: eb00030f bl 3100 <free> <== NOT EXECUTED
free(dd);
24c0: e1a00007 mov r0, r7 <== NOT EXECUTED
24c4: eb00030d bl 3100 <free> <== NOT EXECUTED
24c8: e3a0000d mov r0, #13 <== NOT EXECUTED
return RTEMS_UNSATISFIED;
24cc: eaffffb2 b 239c <create_disk+0x68> <== NOT EXECUTED
if (name != NULL) {
alloc_name = strdup(name);
if (alloc_name == NULL) {
free(dd);
24d0: e1a00007 mov r0, r7 <== NOT EXECUTED
24d4: eb000309 bl 3100 <free> <== NOT EXECUTED
24d8: e3a0001a mov r0, #26 <== NOT EXECUTED
return RTEMS_NO_MEMORY;
24dc: eaffffae b 239c <create_disk+0x68> <== NOT EXECUTED
000088f0 <devFS_evaluate_path>:
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
88f0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
int i;
rtems_device_name_t *device_name_table;
/* see if 'flags' is valid */
if ( !rtems_libio_is_valid_perms( flags ) )
88f4: e3d2a007 bics sl, r2, #7
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
88f8: e1a09000 mov r9, r0
88fc: e1a04001 mov r4, r1
8900: e1a0b003 mov fp, r3
int i;
rtems_device_name_t *device_name_table;
/* see if 'flags' is valid */
if ( !rtems_libio_is_valid_perms( flags ) )
8904: 1a000028 bne 89ac <devFS_evaluate_path+0xbc>
rtems_set_errno_and_return_minus_one( EPERM );
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
8908: e5937000 ldr r7, [r3]
if (!device_name_table)
890c: e3570000 cmp r7, #0
8910: 0a00002a beq 89c0 <devFS_evaluate_path+0xd0>
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
8914: e59f30b8 ldr r3, [pc, #184] ; 89d4 <devFS_evaluate_path+0xe4>
8918: e5938000 ldr r8, [r3]
891c: e3580000 cmp r8, #0
rtems_set_errno_and_return_minus_one( EPERM );
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
8920: 11a0500a movne r5, sl
for (i = 0; i < rtems_device_table_size; i++) {
8924: 0a000011 beq 8970 <devFS_evaluate_path+0x80>
if (!device_name_table[i].device_name)
8928: e08aa10a add sl, sl, sl, lsl #2
892c: e797610a ldr r6, [r7, sl, lsl #2]
8930: e3560000 cmp r6, #0
continue;
if (strncmp(pathname, device_name_table[i].device_name, pathnamelen) != 0)
8934: e1a00009 mov r0, r9
8938: e1a02004 mov r2, r4
893c: e1a01006 mov r1, r6
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
8940: e2855001 add r5, r5, #1
if (!device_name_table[i].device_name)
8944: e087a10a add sl, r7, sl, lsl #2
8948: 0a000005 beq 8964 <devFS_evaluate_path+0x74>
continue;
if (strncmp(pathname, device_name_table[i].device_name, pathnamelen) != 0)
894c: eb000a3e bl b24c <strncmp>
8950: e3500000 cmp r0, #0
8954: 1a000002 bne 8964 <devFS_evaluate_path+0x74>
continue;
if (device_name_table[i].device_name[pathnamelen] != '\0')
8958: e7d60004 ldrb r0, [r6, r4]
895c: e3500000 cmp r0, #0
8960: 0a000007 beq 8984 <devFS_evaluate_path+0x94>
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (i = 0; i < rtems_device_table_size; i++) {
8964: e1580005 cmp r8, r5
8968: e1a0a005 mov sl, r5
896c: 8affffed bhi 8928 <devFS_evaluate_path+0x38>
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
return 0;
}
/* no such file or directory */
rtems_set_errno_and_return_minus_one( ENOENT );
8970: eb00067f bl a374 <__errno>
8974: e3a03002 mov r3, #2
8978: e5803000 str r3, [r0]
897c: e3e00000 mvn r0, #0
}
8980: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
pathloc->handlers = &devFS_file_handlers;
pathloc->ops = &devFS_ops;
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
8984: e59f304c ldr r3, [pc, #76] ; 89d8 <devFS_evaluate_path+0xe8>
8988: e5933000 ldr r3, [r3]
898c: e5933028 ldr r3, [r3, #40] ; 0x28
8990: e58b3010 str r3, [fp, #16]
if (device_name_table[i].device_name[pathnamelen] != '\0')
continue;
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
pathloc->handlers = &devFS_file_handlers;
8994: e59f3040 ldr r3, [pc, #64] ; 89dc <devFS_evaluate_path+0xec>
8998: e58b3008 str r3, [fp, #8]
pathloc->ops = &devFS_ops;
899c: e59f303c ldr r3, [pc, #60] ; 89e0 <devFS_evaluate_path+0xf0>
if (device_name_table[i].device_name[pathnamelen] != '\0')
continue;
/* find the device, set proper values */
pathloc->node_access = (void *)&device_name_table[i];
89a0: e58ba000 str sl, [fp]
pathloc->handlers = &devFS_file_handlers;
pathloc->ops = &devFS_ops;
89a4: e58b300c str r3, [fp, #12]
pathloc->mt_entry = rtems_filesystem_root.mt_entry;
return 0;
89a8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
int i;
rtems_device_name_t *device_name_table;
/* see if 'flags' is valid */
if ( !rtems_libio_is_valid_perms( flags ) )
rtems_set_errno_and_return_minus_one( EPERM );
89ac: eb000670 bl a374 <__errno> <== NOT EXECUTED
89b0: e3a03001 mov r3, #1 <== NOT EXECUTED
89b4: e5803000 str r3, [r0] <== NOT EXECUTED
89b8: e3e00000 mvn r0, #0 <== NOT EXECUTED
89bc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/* get the device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
89c0: eb00066b bl a374 <__errno> <== NOT EXECUTED
89c4: e3a0300e mov r3, #14 <== NOT EXECUTED
89c8: e5803000 str r3, [r0] <== NOT EXECUTED
89cc: e3e00000 mvn r0, #0 <== NOT EXECUTED
89d0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0000137c <devFS_initialize>:
int devFS_initialize(
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const void *data
)
{
137c: e92d4070 push {r4, r5, r6, lr}
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
1380: e59f605c ldr r6, [pc, #92] ; 13e4 <devFS_initialize+0x68>
1384: e5963000 ldr r3, [r6]
1388: e0833103 add r3, r3, r3, lsl #2
int devFS_initialize(
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const void *data
)
{
138c: e1a04000 mov r4, r0
rtems_device_name_t *device_name_table;
/* allocate device only filesystem name table */
device_name_table = (rtems_device_name_t *)_Workspace_Allocate(
1390: e1a00103 lsl r0, r3, #2
1394: eb001c25 bl 8430 <_Workspace_Allocate>
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
1398: e2505000 subs r5, r0, #0
139c: 0a00000b beq 13d0 <devFS_initialize+0x54>
rtems_set_errno_and_return_minus_one( ENOMEM );
memset(
13a0: e5962000 ldr r2, [r6]
13a4: e0822102 add r2, r2, r2, lsl #2
13a8: e1a02102 lsl r2, r2, #2
13ac: e3a01000 mov r1, #0
13b0: eb00261d bl ac2c <memset>
device_name_table, 0,
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
13b4: e59f302c ldr r3, [pc, #44] ; 13e8 <devFS_initialize+0x6c>
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
13b8: e2832038 add r2, r3, #56 ; 0x38
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
13bc: e584501c str r5, [r4, #28]
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
13c0: e5842028 str r2, [r4, #40] ; 0x28
device_name_table, 0,
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* set file handlers */
temp_mt_entry->mt_fs_root.handlers = &devFS_file_handlers;
13c4: e5843024 str r3, [r4, #36] ; 0x24
temp_mt_entry->mt_fs_root.ops = &devFS_ops;
/* Set the node_access to device name table */
temp_mt_entry->mt_fs_root.node_access = (void *)device_name_table;
13c8: e3a00000 mov r0, #0
return 0;
}
13cc: e8bd8070 pop {r4, r5, r6, pc}
sizeof( rtems_device_name_t ) * ( rtems_device_table_size )
);
/* no memory for device filesystem */
if (!device_name_table)
rtems_set_errno_and_return_minus_one( ENOMEM );
13d0: eb0023e7 bl a374 <__errno> <== NOT EXECUTED
13d4: e3a0300c mov r3, #12 <== NOT EXECUTED
13d8: e5803000 str r3, [r0] <== NOT EXECUTED
13dc: e3e00000 mvn r0, #0 <== NOT EXECUTED
13e0: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00001558 <devFS_ioctl>:
int devFS_ioctl(
rtems_libio_t *iop,
uint32_t command,
void *buffer
)
{
1558: e52de004 push {lr} ; (str lr, [sp, #-4]!)
155c: e24dd010 sub sp, sp, #16
1560: e1a03000 mov r3, r0
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
args.command = command;
1564: e58d1004 str r1, [sp, #4]
{
rtems_libio_ioctl_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
1568: e5900038 ldr r0, [r0, #56] ; 0x38
args.iop = iop;
args.command = command;
args.buffer = buffer;
156c: e58d2008 str r2, [sp, #8]
status = rtems_io_control(
1570: e590100c ldr r1, [r0, #12]
1574: e1a0200d mov r2, sp
1578: e5900008 ldr r0, [r0, #8]
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
157c: e58d3000 str r3, [sp]
args.command = command;
args.buffer = buffer;
status = rtems_io_control(
1580: eb00107d bl 577c <rtems_io_control>
np->major,
np->minor,
(void *) &args
);
if ( status )
1584: e3500000 cmp r0, #0
return rtems_deviceio_errno(status);
return args.ioctl_return;
1588: 059d000c ldreq r0, [sp, #12]
np->major,
np->minor,
(void *) &args
);
if ( status )
158c: 1a000001 bne 1598 <devFS_ioctl+0x40>
return rtems_deviceio_errno(status);
return args.ioctl_return;
}
1590: e28dd010 add sp, sp, #16
1594: e8bd8000 pop {pc}
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
1598: eb001d11 bl 89e4 <rtems_deviceio_errno> <== NOT EXECUTED
159c: eafffffb b 1590 <devFS_ioctl+0x38> <== NOT EXECUTED
000013ec <devFS_mknod>:
const char *path,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
13ec: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
13f0: e1a04000 mov r4, r0
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
13f4: e5d00000 ldrb r0, [r0]
13f8: e3500064 cmp r0, #100 ; 0x64
const char *path,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
13fc: e1a05001 mov r5, r1
1400: e1a06002 mov r6, r2
1404: e1a0b003 mov fp, r3
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
1408: 0a000036 beq 14e8 <devFS_mknod+0xfc>
(path[2] == 'v') && (path[3] == '\0'))
return 0;
/* must be a character device or a block device */
if (!S_ISBLK(mode) && !S_ISCHR(mode))
140c: e2053a0f and r3, r5, #61440 ; 0xf000
1410: e3530a02 cmp r3, #8192 ; 0x2000
1414: 13530a06 cmpne r3, #24576 ; 0x6000
1418: 03a03000 moveq r3, #0
141c: 13a03001 movne r3, #1
1420: 1a00003a bne 1510 <devFS_mknod+0x124>
rtems_set_errno_and_return_minus_one( EINVAL );
else
rtems_filesystem_split_dev_t(dev, major, minor);
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
1424: e59d2024 ldr r2, [sp, #36] ; 0x24
1428: e5928000 ldr r8, [r2]
if (!device_name_table)
142c: e3580000 cmp r8, #0
1430: 0a000040 beq 1538 <devFS_mknod+0x14c>
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
1434: e59f2110 ldr r2, [pc, #272] ; 154c <devFS_mknod+0x160>
1438: e592a000 ldr sl, [r2]
143c: e35a0000 cmp sl, #0
rtems_filesystem_split_dev_t(dev, major, minor);
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
1440: 13e09000 mvnne r9, #0
1444: 11a07003 movne r7, r3
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
1448: 1a000007 bne 146c <devFS_mknod+0x80>
144c: ea000034 b 1524 <devFS_mknod+0x138> <== NOT EXECUTED
if (device_name_table[i].device_name == NULL)
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
1450: eb00269d bl aecc <strcmp> <== NOT EXECUTED
1454: e3500000 cmp r0, #0 <== NOT EXECUTED
1458: 0a00001d beq 14d4 <devFS_mknod+0xe8> <== NOT EXECUTED
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
145c: e2877001 add r7, r7, #1 <== NOT EXECUTED
1460: e157000a cmp r7, sl <== NOT EXECUTED
1464: e1a03007 mov r3, r7 <== NOT EXECUTED
1468: 2a000009 bcs 1494 <devFS_mknod+0xa8> <== NOT EXECUTED
if (device_name_table[i].device_name == NULL)
146c: e0833103 add r3, r3, r3, lsl #2
1470: e7983103 ldr r3, [r8, r3, lsl #2]
1474: e2531000 subs r1, r3, #0
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
1478: e1a00004 mov r0, r4
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
if (device_name_table[i].device_name == NULL)
147c: 1afffff3 bne 1450 <devFS_mknod+0x64>
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
1480: e1a09007 mov r9, r7
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
1484: e2877001 add r7, r7, #1
1488: e157000a cmp r7, sl
148c: e1a03007 mov r3, r7
1490: 3afffff5 bcc 146c <devFS_mknod+0x80>
else
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
}
if (slot == -1)
1494: e3790001 cmn r9, #1
1498: 0a000021 beq 1524 <devFS_mknod+0x138>
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
149c: e10f7000 mrs r7, CPSR
14a0: e3873080 orr r3, r7, #128 ; 0x80
14a4: e129f003 msr CPSR_fc, r3
rtems_set_errno_and_return_minus_one( ENOMEM );
_ISR_Disable(level);
device_name_table[slot].device_name = (char *)path;
14a8: e0899109 add r9, r9, r9, lsl #2
14ac: e1a09109 lsl r9, r9, #2
14b0: e7884009 str r4, [r8, r9]
device_name_table[slot].device_name_length = strlen(path);
14b4: e1a00004 mov r0, r4
14b8: eb00274b bl b1ec <strlen>
if (slot == -1)
rtems_set_errno_and_return_minus_one( ENOMEM );
_ISR_Disable(level);
device_name_table[slot].device_name = (char *)path;
14bc: e0888009 add r8, r8, r9
device_name_table[slot].device_name_length = strlen(path);
device_name_table[slot].major = major;
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
14c0: e5885010 str r5, [r8, #16]
if (slot == -1)
rtems_set_errno_and_return_minus_one( ENOMEM );
_ISR_Disable(level);
device_name_table[slot].device_name = (char *)path;
device_name_table[slot].device_name_length = strlen(path);
14c4: e9880841 stmib r8, {r0, r6, fp}
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
14c8: e129f007 msr CPSR_fc, r7
14cc: e3a00000 mov r0, #0
device_name_table[slot].minor = minor;
device_name_table[slot].mode = mode;
_ISR_Enable(level);
return 0;
}
14d0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
for (slot = -1, i = 0; i < rtems_device_table_size; i++){
if (device_name_table[i].device_name == NULL)
slot = i;
else
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
14d4: eb0023a6 bl a374 <__errno> <== NOT EXECUTED
14d8: e3a03011 mov r3, #17 <== NOT EXECUTED
14dc: e5803000 str r3, [r0] <== NOT EXECUTED
14e0: e3e00000 mvn r0, #0 <== NOT EXECUTED
14e4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* condition and do not create the '/dev' and the 'path'
* actually passed in is 'dev', not '/dev'. Just return 0 to
* indicate we are OK.
*/
if ((path[0] == 'd') && (path[1] == 'e') &&
14e8: e5d43001 ldrb r3, [r4, #1]
14ec: e3530065 cmp r3, #101 ; 0x65
14f0: 1affffc5 bne 140c <devFS_mknod+0x20>
(path[2] == 'v') && (path[3] == '\0'))
14f4: e5d43002 ldrb r3, [r4, #2]
14f8: e3530076 cmp r3, #118 ; 0x76
14fc: 1affffc2 bne 140c <devFS_mknod+0x20>
1500: e5d40003 ldrb r0, [r4, #3]
1504: e3500000 cmp r0, #0
1508: 1affffbf bne 140c <devFS_mknod+0x20>
150c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
return 0;
/* must be a character device or a block device */
if (!S_ISBLK(mode) && !S_ISCHR(mode))
rtems_set_errno_and_return_minus_one( EINVAL );
1510: eb002397 bl a374 <__errno> <== NOT EXECUTED
1514: e3a03016 mov r3, #22 <== NOT EXECUTED
1518: e5803000 str r3, [r0] <== NOT EXECUTED
151c: e3e00000 mvn r0, #0 <== NOT EXECUTED
1520: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if (strcmp(path, device_name_table[i].device_name) == 0)
rtems_set_errno_and_return_minus_one( EEXIST );
}
if (slot == -1)
rtems_set_errno_and_return_minus_one( ENOMEM );
1524: eb002392 bl a374 <__errno> <== NOT EXECUTED
1528: e3a0300c mov r3, #12 <== NOT EXECUTED
152c: e5803000 str r3, [r0] <== NOT EXECUTED
1530: e3e00000 mvn r0, #0 <== NOT EXECUTED
1534: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rtems_filesystem_split_dev_t(dev, major, minor);
/* Find an empty slot in device name table */
device_name_table = (rtems_device_name_t *)pathloc->node_access;
if (!device_name_table)
rtems_set_errno_and_return_minus_one( EFAULT );
1538: eb00238d bl a374 <__errno> <== NOT EXECUTED
153c: e3a0300e mov r3, #14 <== NOT EXECUTED
1540: e5803000 str r3, [r0] <== NOT EXECUTED
1544: e3e00000 mvn r0, #0 <== NOT EXECUTED
1548: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
000015e0 <devFS_read>:
ssize_t devFS_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
15e0: e92d4800 push {fp, lr} <== NOT EXECUTED
15e4: e1a03000 mov r3, r0 <== NOT EXECUTED
15e8: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
15ec: e5900014 ldr r0, [r0, #20] <== NOT EXECUTED
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
15f0: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
args.flags = iop->flags;
args.bytes_moved = 0;
15f4: e3a02000 mov r2, #0 <== NOT EXECUTED
15f8: e58d2018 str r2, [sp, #24] <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
15fc: e58d0014 str r0, [sp, #20] <== NOT EXECUTED
{
rtems_libio_rw_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
1600: e5932038 ldr r2, [r3, #56] ; 0x38 <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
1604: e283c00c add ip, r3, #12 <== NOT EXECUTED
1608: e89c1800 ldm ip, {fp, ip} <== NOT EXECUTED
args.buffer = buffer;
160c: e58d100c str r1, [sp, #12] <== NOT EXECUTED
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
1610: e2820008 add r0, r2, #8 <== NOT EXECUTED
1614: e8900003 ldm r0, {r0, r1} <== NOT EXECUTED
1618: e1a0200d mov r2, sp <== NOT EXECUTED
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
args.offset = iop->offset;
161c: e98d1800 stmib sp, {fp, ip} <== NOT EXECUTED
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
1620: e58d3000 str r3, [sp] <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
1624: eb0010b6 bl 5904 <rtems_io_read> <== NOT EXECUTED
np->major,
np->minor,
(void *) &args
);
if ( status )
1628: e3500000 cmp r0, #0 <== NOT EXECUTED
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
162c: 059d0018 ldreq r0, [sp, #24] <== NOT EXECUTED
np->major,
np->minor,
(void *) &args
);
if ( status )
1630: 1a000001 bne 163c <devFS_read+0x5c> <== NOT EXECUTED
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
}
1634: e28dd01c add sp, sp, #28 <== NOT EXECUTED
1638: e8bd8800 pop {fp, pc} <== NOT EXECUTED
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
163c: eb001ce8 bl 89e4 <rtems_deviceio_errno> <== NOT EXECUTED
1640: eafffffb b 1634 <devFS_read+0x54> <== NOT EXECUTED
00001644 <devFS_stat>:
struct stat *buf
)
{
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
1644: e5903000 ldr r3, [r0]
if (!the_dev)
1648: e3530000 cmp r3, #0
int devFS_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
164c: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
1650: 0a000007 beq 1674 <devFS_stat+0x30>
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
buf->st_mode = the_dev->mode;
1654: e5930010 ldr r0, [r3, #16]
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
1658: e593200c ldr r2, [r3, #12]
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
165c: e5933008 ldr r3, [r3, #8]
1660: e581201c str r2, [r1, #28]
buf->st_mode = the_dev->mode;
1664: e581000c str r0, [r1, #12]
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
buf->st_rdev = rtems_filesystem_make_dev_t( the_dev->major, the_dev->minor );
1668: e5813018 str r3, [r1, #24]
buf->st_mode = the_dev->mode;
166c: e3a00000 mov r0, #0
return 0;
}
1670: e49df004 pop {pc} ; (ldr pc, [sp], #4)
{
rtems_device_name_t *the_dev;
the_dev = (rtems_device_name_t *)loc->node_access;
if (!the_dev)
rtems_set_errno_and_return_minus_one( EFAULT );
1674: eb00233e bl a374 <__errno> <== NOT EXECUTED
1678: e3a0300e mov r3, #14 <== NOT EXECUTED
167c: e5803000 str r3, [r0] <== NOT EXECUTED
1680: e3e00000 mvn r0, #0 <== NOT EXECUTED
1684: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00001688 <devFS_write>:
ssize_t devFS_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
1688: e92d4800 push {fp, lr}
168c: e1a03000 mov r3, r0
1690: e24dd01c sub sp, sp, #28
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
1694: e5900014 ldr r0, [r0, #20]
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
1698: e58d2010 str r2, [sp, #16]
args.flags = iop->flags;
args.bytes_moved = 0;
169c: e3a02000 mov r2, #0
16a0: e58d2018 str r2, [sp, #24]
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
16a4: e58d0014 str r0, [sp, #20]
{
rtems_libio_rw_args_t args;
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
16a8: e5932038 ldr r2, [r3, #56] ; 0x38
args.iop = iop;
args.offset = iop->offset;
16ac: e283c00c add ip, r3, #12
16b0: e89c1800 ldm ip, {fp, ip}
args.buffer = (void *) buffer;
16b4: e58d100c str r1, [sp, #12]
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
16b8: e2820008 add r0, r2, #8
16bc: e8900003 ldm r0, {r0, r1}
16c0: e1a0200d mov r2, sp
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
args.offset = iop->offset;
16c4: e98d1800 stmib sp, {fp, ip}
rtems_status_code status;
rtems_device_name_t *np;
np = (rtems_device_name_t *)iop->file_info;
args.iop = iop;
16c8: e58d3000 str r3, [sp]
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
16cc: eb0010a0 bl 5954 <rtems_io_write>
np->major,
np->minor,
(void *) &args
);
if ( status )
16d0: e3500000 cmp r0, #0
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
16d4: 059d0018 ldreq r0, [sp, #24]
np->major,
np->minor,
(void *) &args
);
if ( status )
16d8: 1a000001 bne 16e4 <devFS_write+0x5c>
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
}
16dc: e28dd01c add sp, sp, #28
16e0: e8bd8800 pop {fp, pc}
np->minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
16e4: eb001cbe bl 89e4 <rtems_deviceio_errno> <== NOT EXECUTED
16e8: eafffffb b 16dc <devFS_write+0x54> <== NOT EXECUTED
0000d4d0 <device_ioctl>:
int device_ioctl(
rtems_libio_t *iop,
uint32_t command,
void *buffer
)
{
d4d0: e52de004 push {lr} ; (str lr, [sp, #-4]!)
d4d4: e24dd010 sub sp, sp, #16
rtems_status_code status;
IMFS_jnode_t *the_jnode;
args.iop = iop;
args.command = command;
args.buffer = buffer;
d4d8: e88d0007 stm sp, {r0, r1, r2}
the_jnode = iop->file_info;
d4dc: e5903038 ldr r3, [r0, #56] ; 0x38
status = rtems_io_control(
d4e0: e1a0200d mov r2, sp
d4e4: e2830050 add r0, r3, #80 ; 0x50
d4e8: e8900003 ldm r0, {r0, r1}
d4ec: eb000292 bl df3c <rtems_io_control>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d4f0: e3500000 cmp r0, #0
return rtems_deviceio_errno(status);
return args.ioctl_return;
d4f4: 059d000c ldreq r0, [sp, #12]
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d4f8: 1a000001 bne d504 <device_ioctl+0x34>
return rtems_deviceio_errno(status);
return args.ioctl_return;
}
d4fc: e28dd010 add sp, sp, #16
d500: e8bd8000 pop {pc}
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
d504: eb000337 bl e1e8 <rtems_deviceio_errno> <== NOT EXECUTED
d508: eafffffb b d4fc <device_ioctl+0x2c> <== NOT EXECUTED
0000d56c <device_read>:
ssize_t device_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
d56c: e92d4800 push {fp, lr}
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
d570: e5903014 ldr r3, [r0, #20]
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
d574: e280c00c add ip, r0, #12
d578: e89c1800 ldm ip, {fp, ip}
ssize_t device_read(
rtems_libio_t *iop,
void *buffer,
size_t count
)
{
d57c: e24dd01c sub sp, sp, #28
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
d580: e58d3014 str r3, [sp, #20]
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
d584: e98d1800 stmib sp, {fp, ip}
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
d588: e3a03000 mov r3, #0
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
d58c: e58d2010 str r2, [sp, #16]
args.flags = iop->flags;
args.bytes_moved = 0;
d590: e58d3018 str r3, [sp, #24]
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
d594: e58d100c str r1, [sp, #12]
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
d598: e58d0000 str r0, [sp]
{
rtems_libio_rw_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
d59c: e5903038 ldr r3, [r0, #56] ; 0x38
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read(
d5a0: e1a0200d mov r2, sp
d5a4: e2830050 add r0, r3, #80 ; 0x50
d5a8: e8900003 ldm r0, {r0, r1}
d5ac: eb00028a bl dfdc <rtems_io_read>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d5b0: e3500000 cmp r0, #0 <== NOT EXECUTED
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
d5b4: 059d0018 ldreq r0, [sp, #24] <== NOT EXECUTED
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d5b8: 1a000001 bne d5c4 <device_read+0x58> <== NOT EXECUTED
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
}
d5bc: e28dd01c add sp, sp, #28 <== NOT EXECUTED
d5c0: e8bd8800 pop {fp, pc} <== NOT EXECUTED
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
d5c4: eb000307 bl e1e8 <rtems_deviceio_errno> <== NOT EXECUTED
d5c8: eafffffb b d5bc <device_read+0x50> <== NOT EXECUTED
0000d50c <device_write>:
ssize_t device_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
d50c: e92d4800 push {fp, lr}
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
d510: e5903014 ldr r3, [r0, #20]
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
d514: e280c00c add ip, r0, #12
d518: e89c1800 ldm ip, {fp, ip}
ssize_t device_write(
rtems_libio_t *iop,
const void *buffer,
size_t count
)
{
d51c: e24dd01c sub sp, sp, #28
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
d520: e58d3014 str r3, [sp, #20]
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
d524: e98d1800 stmib sp, {fp, ip}
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
d528: e3a03000 mov r3, #0
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
d52c: e58d2010 str r2, [sp, #16]
args.flags = iop->flags;
args.bytes_moved = 0;
d530: e58d3018 str r3, [sp, #24]
the_jnode = iop->file_info;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
d534: e58d100c str r1, [sp, #12]
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
args.iop = iop;
d538: e58d0000 str r0, [sp]
{
rtems_libio_rw_args_t args;
rtems_status_code status;
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
d53c: e5903038 ldr r3, [r0, #56] ; 0x38
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write(
d540: e1a0200d mov r2, sp
d544: e2830050 add r0, r3, #80 ; 0x50
d548: e8900003 ldm r0, {r0, r1}
d54c: eb0002b6 bl e02c <rtems_io_write>
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d550: e3500000 cmp r0, #0
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
d554: 059d0018 ldreq r0, [sp, #24]
the_jnode->info.device.major,
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
d558: 1a000001 bne d564 <device_write+0x58>
return rtems_deviceio_errno(status);
return (ssize_t) args.bytes_moved;
}
d55c: e28dd01c add sp, sp, #28
d560: e8bd8800 pop {fp, pc}
the_jnode->info.device.minor,
(void *) &args
);
if ( status )
return rtems_deviceio_errno(status);
d564: eb00031f bl e1e8 <rtems_deviceio_errno> <== NOT EXECUTED
d568: eafffffb b d55c <device_write+0x50> <== NOT EXECUTED
00001f6c <disk_unlock>:
static void
disk_unlock(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
diskdevs_protected = false;
1f6c: e59f3028 ldr r3, [pc, #40] ; 1f9c <disk_unlock+0x30>
1f70: e3a02000 mov r2, #0
}
}
static void
disk_unlock(void)
{
1f74: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_status_code sc = RTEMS_SUCCESSFUL;
diskdevs_protected = false;
sc = rtems_semaphore_release(diskdevs_mutex);
1f78: e5930008 ldr r0, [r3, #8]
static void
disk_unlock(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
diskdevs_protected = false;
1f7c: e5c3200c strb r2, [r3, #12]
sc = rtems_semaphore_release(diskdevs_mutex);
1f80: eb00132c bl 6c38 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL) {
1f84: e3500000 cmp r0, #0
1f88: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
/* FIXME: Error number */
rtems_fatal_error_occurred(0xdeadbeef);
1f8c: e3e00585 mvn r0, #557842432 ; 0x21400000 <== NOT EXECUTED
1f90: e2400949 sub r0, r0, #1196032 ; 0x124000 <== NOT EXECUTED
1f94: e2400e11 sub r0, r0, #272 ; 0x110 <== NOT EXECUTED
1f98: eb001456 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
00003e2c <drainOutput>:
drainOutput (struct rtems_termios_tty *tty)
{
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
3e2c: e59030b4 ldr r3, [r0, #180] ; 0xb4
3e30: e3530000 cmp r3, #0
/*
* Drain output queue
*/
static void
drainOutput (struct rtems_termios_tty *tty)
{
3e34: e92d4030 push {r4, r5, lr}
3e38: e1a04000 mov r4, r0
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
3e3c: 08bd8030 popeq {r4, r5, pc}
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
3e40: e10f3000 mrs r3, CPSR <== NOT EXECUTED
3e44: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
3e48: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
rtems_interrupt_disable (level);
while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) {
3e4c: e5901084 ldr r1, [r0, #132] ; 0x84 <== NOT EXECUTED
3e50: e5902080 ldr r2, [r0, #128] ; 0x80 <== NOT EXECUTED
3e54: e1510002 cmp r1, r2 <== NOT EXECUTED
3e58: 0a00000f beq 3e9c <drainOutput+0x70> <== NOT EXECUTED
tty->rawOutBufState = rob_wait;
3e5c: e3a05002 mov r5, #2 <== NOT EXECUTED
3e60: e5845094 str r5, [r4, #148] ; 0x94 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3e64: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore,
3e68: e3a01000 mov r1, #0 <== NOT EXECUTED
3e6c: e594008c ldr r0, [r4, #140] ; 0x8c <== NOT EXECUTED
3e70: e1a02001 mov r2, r1 <== NOT EXECUTED
3e74: eb00064c bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
3e78: e3500000 cmp r0, #0 <== NOT EXECUTED
3e7c: 1a000008 bne 3ea4 <drainOutput+0x78> <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
3e80: e10f3000 mrs r3, CPSR <== NOT EXECUTED
3e84: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
3e88: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts != TERMIOS_POLLED) {
rtems_interrupt_disable (level);
while (tty->rawOutBuf.Tail != tty->rawOutBuf.Head) {
3e8c: e5941084 ldr r1, [r4, #132] ; 0x84 <== NOT EXECUTED
3e90: e5942080 ldr r2, [r4, #128] ; 0x80 <== NOT EXECUTED
3e94: e1510002 cmp r1, r2 <== NOT EXECUTED
3e98: 1afffff0 bne 3e60 <drainOutput+0x34> <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3e9c: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
3ea0: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore,
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
3ea4: eb0007cd bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000279c <dup2>:
int dup2(
int fildes,
int fildes2
)
{
279c: e92d4070 push {r4, r5, r6, lr}
27a0: e24dd048 sub sp, sp, #72 ; 0x48
27a4: e1a05001 mov r5, r1
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
27a8: e1a0100d mov r1, sp
int dup2(
int fildes,
int fildes2
)
{
27ac: e1a06000 mov r6, r0
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
27b0: eb00019c bl 2e28 <fstat>
if ( status == -1 )
27b4: e3700001 cmn r0, #1
/*
* If fildes is not valid, then fildes2 should not be closed.
*/
status = fstat( fildes, &buf );
27b8: e1a0400d mov r4, sp
if ( status == -1 )
27bc: 1a000002 bne 27cc <dup2+0x30>
/*
* This fcntl handles everything else.
*/
return fcntl( fildes, F_DUPFD, fildes2 );
27c0: e3e00000 mvn r0, #0
}
27c4: e28dd048 add sp, sp, #72 ; 0x48
27c8: e8bd8070 pop {r4, r5, r6, pc}
/*
* If fildes2 is not valid, then we should not do anything either.
*/
status = fstat( fildes2, &buf );
27cc: e1a0100d mov r1, sp
27d0: e1a00005 mov r0, r5
27d4: eb000193 bl 2e28 <fstat>
if ( status == -1 )
27d8: e3700001 cmn r0, #1
27dc: 0afffff7 beq 27c0 <dup2+0x24>
/*
* This fcntl handles everything else.
*/
return fcntl( fildes, F_DUPFD, fildes2 );
27e0: e1a00006 mov r0, r6 <== NOT EXECUTED
27e4: e1a02005 mov r2, r5 <== NOT EXECUTED
27e8: e3a01000 mov r1, #0 <== NOT EXECUTED
27ec: eb000087 bl 2a10 <fcntl> <== NOT EXECUTED
27f0: eafffff3 b 27c4 <dup2+0x28> <== NOT EXECUTED
0000389c <echo>:
/*
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
389c: e92d4010 push {r4, lr} <== NOT EXECUTED
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
38a0: e591303c ldr r3, [r1, #60] ; 0x3c <== NOT EXECUTED
38a4: e3130c02 tst r3, #512 ; 0x200 <== NOT EXECUTED
/*
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
38a8: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
38ac: e1a04001 mov r4, r1 <== NOT EXECUTED
38b0: e20000ff and r0, r0, #255 ; 0xff <== NOT EXECUTED
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
38b4: 0a000007 beq 38d8 <echo+0x3c> <== NOT EXECUTED
38b8: e59f3060 ldr r3, [pc, #96] ; 3920 <echo+0x84> <== NOT EXECUTED
38bc: e5933000 ldr r3, [r3] <== NOT EXECUTED
38c0: e0833000 add r3, r3, r0 <== NOT EXECUTED
38c4: e5d32001 ldrb r2, [r3, #1] <== NOT EXECUTED
38c8: e2503009 subs r3, r0, #9 <== NOT EXECUTED
38cc: 13a03001 movne r3, #1 <== NOT EXECUTED
38d0: e01332a2 ands r3, r3, r2, lsr #5 <== NOT EXECUTED
38d4: 1a000003 bne 38e8 <echo+0x4c> <== NOT EXECUTED
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
tty->column += 2;
}
else {
oproc (c, tty);
38d8: e1a01004 mov r1, r4 <== NOT EXECUTED
38dc: ebffff92 bl 372c <oproc> <== NOT EXECUTED
}
}
38e0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
38e4: e8bd8010 pop {r4, pc} <== NOT EXECUTED
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
38e8: e350000a cmp r0, #10 <== NOT EXECUTED
38ec: 0afffff9 beq 38d8 <echo+0x3c> <== NOT EXECUTED
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
38f0: e2203040 eor r3, r0, #64 ; 0x40 <== NOT EXECUTED
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
38f4: e3a0c05e mov ip, #94 ; 0x5e <== NOT EXECUTED
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
38f8: e1a0000d mov r0, sp <== NOT EXECUTED
38fc: e3a01002 mov r1, #2 <== NOT EXECUTED
3900: e1a02004 mov r2, r4 <== NOT EXECUTED
{
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
echobuf[1] = c ^ 0x40;
3904: e5cd3001 strb r3, [sp, #1] <== NOT EXECUTED
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
char echobuf[2];
echobuf[0] = '^';
3908: e5cdc000 strb ip, [sp] <== NOT EXECUTED
echobuf[1] = c ^ 0x40;
rtems_termios_puts (echobuf, 2, tty);
390c: ebffff3e bl 360c <rtems_termios_puts> <== NOT EXECUTED
tty->column += 2;
3910: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3914: e2833002 add r3, r3, #2 <== NOT EXECUTED
3918: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
* Echo a typed character
*/
static void
echo (unsigned char c, struct rtems_termios_tty *tty)
{
if ((tty->termios.c_lflag & ECHOCTL) && iscntrl(c) && (c != '\t') && (c != '\n')) {
391c: eaffffef b 38e0 <echo+0x44> <== NOT EXECUTED
000291b4 <endgrent>:
group_fp = fopen("/etc/group", "r");
}
void endgrent(void)
{
if (group_fp != NULL)
291b4: e59f300c ldr r3, [pc, #12] ; 291c8 <endgrent+0x14> <== NOT EXECUTED
291b8: e5930000 ldr r0, [r3] <== NOT EXECUTED
291bc: e3500000 cmp r0, #0 <== NOT EXECUTED
291c0: 012fff1e bxeq lr <== NOT EXECUTED
fclose(group_fp);
291c4: ea0067d6 b 43124 <fclose> <== NOT EXECUTED
000291cc <endpwent>:
passwd_fp = fopen("/etc/passwd", "r");
}
void endpwent(void)
{
if (passwd_fp != NULL)
291cc: e59f300c ldr r3, [pc, #12] ; 291e0 <endpwent+0x14> <== NOT EXECUTED
291d0: e5930004 ldr r0, [r3, #4] <== NOT EXECUTED
291d4: e3500000 cmp r0, #0 <== NOT EXECUTED
291d8: 012fff1e bxeq lr <== NOT EXECUTED
fclose(passwd_fp);
291dc: ea0067d0 b 43124 <fclose> <== NOT EXECUTED
00003924 <erase>:
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
{
if (tty->ccount == 0)
3924: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
3928: e3530000 cmp r3, #0 <== NOT EXECUTED
* FIXME: Needs support for WERASE and ECHOPRT.
* FIXME: Some of the tests should check for IEXTEN, too.
*/
static void
erase (struct rtems_termios_tty *tty, int lineFlag)
{
392c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
3930: e1a04000 mov r4, r0 <== NOT EXECUTED
3934: e1a06001 mov r6, r1 <== NOT EXECUTED
if (tty->ccount == 0)
3938: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
return;
if (lineFlag) {
393c: e3510000 cmp r1, #0 <== NOT EXECUTED
3940: 0590203c ldreq r2, [r0, #60] ; 0x3c <== NOT EXECUTED
3944: 1a000025 bne 39e0 <erase+0xbc> <== NOT EXECUTED
rtems_termios_puts ("\b", 1, tty);
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
3948: e59f71d4 ldr r7, [pc, #468] ; 3b24 <erase+0x200> <== NOT EXECUTED
394c: ea000007 b 3970 <erase+0x4c> <== NOT EXECUTED
3950: e3120c02 tst r2, #512 ; 0x200 <== NOT EXECUTED
3954: 1a00005a bne 3ac4 <erase+0x1a0> <== NOT EXECUTED
if (tty->column)
tty->column--;
}
}
}
if (!lineFlag)
3958: e3560000 cmp r6, #0 <== NOT EXECUTED
395c: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
return;
}
}
while (tty->ccount) {
3960: e5943020 ldr r3, [r4, #32] <== NOT EXECUTED
3964: e3530000 cmp r3, #0 <== NOT EXECUTED
3968: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
396c: e594203c ldr r2, [r4, #60] ; 0x3c <== NOT EXECUTED
unsigned char c = tty->cbuf[--tty->ccount];
3970: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3974: e5843020 str r3, [r4, #32] <== NOT EXECUTED
3978: e594001c ldr r0, [r4, #28] <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO) {
397c: e3120008 tst r2, #8 <== NOT EXECUTED
echo ('\n', tty);
return;
}
}
while (tty->ccount) {
unsigned char c = tty->cbuf[--tty->ccount];
3980: e7d05003 ldrb r5, [r0, r3] <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO) {
3984: 0afffff3 beq 3958 <erase+0x34> <== NOT EXECUTED
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
3988: e3560000 cmp r6, #0 <== NOT EXECUTED
398c: 1a000001 bne 3998 <erase+0x74> <== NOT EXECUTED
3990: e3120010 tst r2, #16 <== NOT EXECUTED
3994: 0a000046 beq 3ab4 <erase+0x190> <== NOT EXECUTED
echo (tty->termios.c_cc[VERASE], tty);
}
else if (c == '\t') {
3998: e3550009 cmp r5, #9 <== NOT EXECUTED
399c: 0a000020 beq 3a24 <erase+0x100> <== NOT EXECUTED
rtems_termios_puts ("\b", 1, tty);
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
39a0: e5973000 ldr r3, [r7] <== NOT EXECUTED
39a4: e2855001 add r5, r5, #1 <== NOT EXECUTED
39a8: e7d33005 ldrb r3, [r3, r5] <== NOT EXECUTED
39ac: e3130020 tst r3, #32 <== NOT EXECUTED
39b0: 1affffe6 bne 3950 <erase+0x2c> <== NOT EXECUTED
rtems_termios_puts ("\b \b", 3, tty);
if (tty->column)
tty->column--;
}
if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) {
rtems_termios_puts ("\b \b", 3, tty);
39b4: e59f016c ldr r0, [pc, #364] ; 3b28 <erase+0x204> <== NOT EXECUTED
39b8: e3a01003 mov r1, #3 <== NOT EXECUTED
39bc: e1a02004 mov r2, r4 <== NOT EXECUTED
39c0: ebffff11 bl 360c <rtems_termios_puts> <== NOT EXECUTED
if (tty->column)
39c4: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
39c8: e3530000 cmp r3, #0 <== NOT EXECUTED
tty->column--;
39cc: 12433001 subne r3, r3, #1 <== NOT EXECUTED
39d0: 15843028 strne r3, [r4, #40] ; 0x28 <== NOT EXECUTED
}
}
}
if (!lineFlag)
39d4: e3560000 cmp r6, #0 <== NOT EXECUTED
39d8: 1affffe0 bne 3960 <erase+0x3c> <== NOT EXECUTED
39dc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
erase (struct rtems_termios_tty *tty, int lineFlag)
{
if (tty->ccount == 0)
return;
if (lineFlag) {
if (!(tty->termios.c_lflag & ECHO)) {
39e0: e590203c ldr r2, [r0, #60] ; 0x3c <== NOT EXECUTED
39e4: e2121008 ands r1, r2, #8 <== NOT EXECUTED
tty->ccount = 0;
39e8: 05801020 streq r1, [r0, #32] <== NOT EXECUTED
erase (struct rtems_termios_tty *tty, int lineFlag)
{
if (tty->ccount == 0)
return;
if (lineFlag) {
if (!(tty->termios.c_lflag & ECHO)) {
39ec: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
tty->ccount = 0;
return;
}
if (!(tty->termios.c_lflag & ECHOE)) {
39f0: e2121010 ands r1, r2, #16 <== NOT EXECUTED
39f4: 1affffd3 bne 3948 <erase+0x24> <== NOT EXECUTED
tty->ccount = 0;
39f8: e5801020 str r1, [r0, #32] <== NOT EXECUTED
echo (tty->termios.c_cc[VKILL], tty);
39fc: e5d00044 ldrb r0, [r0, #68] ; 0x44 <== NOT EXECUTED
3a00: e1a01004 mov r1, r4 <== NOT EXECUTED
3a04: ebffffa4 bl 389c <echo> <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOK)
3a08: e594303c ldr r3, [r4, #60] ; 0x3c <== NOT EXECUTED
3a0c: e3130020 tst r3, #32 <== NOT EXECUTED
3a10: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
echo ('\n', tty);
3a14: e1a01004 mov r1, r4 <== NOT EXECUTED
3a18: e3a0000a mov r0, #10 <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
3a1c: e8bd45f0 pop {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
}
if (!(tty->termios.c_lflag & ECHOE)) {
tty->ccount = 0;
echo (tty->termios.c_cc[VKILL], tty);
if (tty->termios.c_lflag & ECHOK)
echo ('\n', tty);
3a20: eaffff9d b 389c <echo> <== NOT EXECUTED
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
3a24: e3530000 cmp r3, #0 <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
}
else if (c == '\t') {
int col = tty->read_start_column;
3a28: e594502c ldr r5, [r4, #44] ; 0x2c <== NOT EXECUTED
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
3a2c: 0a000011 beq 3a78 <erase+0x154> <== NOT EXECUTED
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
}
else if (iscntrl (c)) {
3a30: e5978000 ldr r8, [r7] <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOCTL)
3a34: e202ac02 and sl, r2, #512 ; 0x200 <== NOT EXECUTED
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
}
else if (iscntrl (c)) {
3a38: e3a02000 mov r2, #0 <== NOT EXECUTED
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
3a3c: e7d01002 ldrb r1, [r0, r2] <== NOT EXECUTED
if (c == '\t') {
3a40: e3510009 cmp r1, #9 <== NOT EXECUTED
col = (col | 7) + 1;
3a44: 03855007 orreq r5, r5, #7 <== NOT EXECUTED
}
else if (iscntrl (c)) {
3a48: e088c001 add ip, r8, r1 <== NOT EXECUTED
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
3a4c: e2822001 add r2, r2, #1 <== NOT EXECUTED
if (c == '\t') {
col = (col | 7) + 1;
3a50: 02855001 addeq r5, r5, #1 <== NOT EXECUTED
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
3a54: 0a000005 beq 3a70 <erase+0x14c> <== NOT EXECUTED
col = (col | 7) + 1;
}
else if (iscntrl (c)) {
3a58: e5dc1001 ldrb r1, [ip, #1] <== NOT EXECUTED
3a5c: e3110020 tst r1, #32 <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOCTL)
col += 2;
}
else {
col++;
3a60: 02855001 addeq r5, r5, #1 <== NOT EXECUTED
while (i != tty->ccount) {
c = tty->cbuf[i++];
if (c == '\t') {
col = (col | 7) + 1;
}
else if (iscntrl (c)) {
3a64: 0a000001 beq 3a70 <erase+0x14c> <== NOT EXECUTED
if (tty->termios.c_lflag & ECHOCTL)
3a68: e35a0000 cmp sl, #0 <== NOT EXECUTED
col += 2;
3a6c: 12855002 addne r5, r5, #2 <== NOT EXECUTED
int i = 0;
/*
* Find the character before the tab
*/
while (i != tty->ccount) {
3a70: e1530002 cmp r3, r2 <== NOT EXECUTED
3a74: 1afffff0 bne 3a3c <erase+0x118> <== NOT EXECUTED
}
/*
* Back up over the tab
*/
while (tty->column > col) {
3a78: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3a7c: e1550003 cmp r5, r3 <== NOT EXECUTED
3a80: aaffffb4 bge 3958 <erase+0x34> <== NOT EXECUTED
rtems_termios_puts ("\b", 1, tty);
3a84: e59f00a0 ldr r0, [pc, #160] ; 3b2c <erase+0x208> <== NOT EXECUTED
3a88: e3a01001 mov r1, #1 <== NOT EXECUTED
3a8c: e1a02004 mov r2, r4 <== NOT EXECUTED
3a90: ebfffedd bl 360c <rtems_termios_puts> <== NOT EXECUTED
tty->column--;
3a94: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3a98: e2433001 sub r3, r3, #1 <== NOT EXECUTED
}
/*
* Back up over the tab
*/
while (tty->column > col) {
3a9c: e1550003 cmp r5, r3 <== NOT EXECUTED
rtems_termios_puts ("\b", 1, tty);
tty->column--;
3aa0: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
}
/*
* Back up over the tab
*/
while (tty->column > col) {
3aa4: bafffff6 blt 3a84 <erase+0x160> <== NOT EXECUTED
if (tty->column)
tty->column--;
}
}
}
if (!lineFlag)
3aa8: e3560000 cmp r6, #0 <== NOT EXECUTED
3aac: 1affffab bne 3960 <erase+0x3c> <== NOT EXECUTED
3ab0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
while (tty->ccount) {
unsigned char c = tty->cbuf[--tty->ccount];
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
3ab4: e5d40043 ldrb r0, [r4, #67] ; 0x43 <== NOT EXECUTED
3ab8: e1a01004 mov r1, r4 <== NOT EXECUTED
}
}
if (!lineFlag)
break;
}
}
3abc: e8bd45f0 pop {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
while (tty->ccount) {
unsigned char c = tty->cbuf[--tty->ccount];
if (tty->termios.c_lflag & ECHO) {
if (!lineFlag && !(tty->termios.c_lflag & ECHOE)) {
echo (tty->termios.c_cc[VERASE], tty);
3ac0: eaffff75 b 389c <echo> <== NOT EXECUTED
tty->column--;
}
}
else {
if (iscntrl (c) && (tty->termios.c_lflag & ECHOCTL)) {
rtems_termios_puts ("\b \b", 3, tty);
3ac4: e59f005c ldr r0, [pc, #92] ; 3b28 <erase+0x204> <== NOT EXECUTED
3ac8: e3a01003 mov r1, #3 <== NOT EXECUTED
3acc: e1a02004 mov r2, r4 <== NOT EXECUTED
3ad0: ebfffecd bl 360c <rtems_termios_puts> <== NOT EXECUTED
if (tty->column)
3ad4: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3ad8: e3530000 cmp r3, #0 <== NOT EXECUTED
tty->column--;
3adc: 12433001 subne r3, r3, #1 <== NOT EXECUTED
3ae0: 15843028 strne r3, [r4, #40] ; 0x28 <== NOT EXECUTED
}
if (!iscntrl (c) || (tty->termios.c_lflag & ECHOCTL)) {
3ae4: e5973000 ldr r3, [r7] <== NOT EXECUTED
3ae8: e7d33005 ldrb r3, [r3, r5] <== NOT EXECUTED
3aec: e3130020 tst r3, #32 <== NOT EXECUTED
3af0: 0affffaf beq 39b4 <erase+0x90> <== NOT EXECUTED
3af4: e594203c ldr r2, [r4, #60] ; 0x3c <== NOT EXECUTED
3af8: e3120c02 tst r2, #512 ; 0x200 <== NOT EXECUTED
3afc: 0affff95 beq 3958 <erase+0x34> <== NOT EXECUTED
rtems_termios_puts ("\b \b", 3, tty);
3b00: e59f0020 ldr r0, [pc, #32] ; 3b28 <erase+0x204> <== NOT EXECUTED
3b04: e3a01003 mov r1, #3 <== NOT EXECUTED
3b08: e1a02004 mov r2, r4 <== NOT EXECUTED
3b0c: ebfffebe bl 360c <rtems_termios_puts> <== NOT EXECUTED
if (tty->column)
3b10: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3b14: e3530000 cmp r3, #0 <== NOT EXECUTED
tty->column--;
3b18: 12433001 subne r3, r3, #1 <== NOT EXECUTED
3b1c: 15843028 strne r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3b20: eaffffab b 39d4 <erase+0xb0> <== NOT EXECUTED
000260fc <fat_buf_access>:
#include "fat_fat_operations.h"
int
fat_buf_access(fat_fs_info_t *fs_info, uint32_t blk, int op_type,
rtems_bdbuf_buffer **buf)
{
260fc: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
26100: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
26104: e5d00081 ldrb r0, [r0, #129] ; 0x81 <== NOT EXECUTED
26108: e3500000 cmp r0, #0 <== NOT EXECUTED
#include "fat_fat_operations.h"
int
fat_buf_access(fat_fs_info_t *fs_info, uint32_t blk, int op_type,
rtems_bdbuf_buffer **buf)
{
2610c: e1a08003 mov r8, r3 <== NOT EXECUTED
26110: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
26114: e1a06001 mov r6, r1 <== NOT EXECUTED
26118: e1a07002 mov r7, r2 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
2611c: 1594307c ldrne r3, [r4, #124] ; 0x7c <== NOT EXECUTED
26120: 1a00000d bne 2615c <fat_buf_access+0x60> <== NOT EXECUTED
{
if (op_type == FAT_OP_TYPE_READ)
26124: e3520001 cmp r2, #1 <== NOT EXECUTED
26128: 0a000062 beq 262b8 <fat_buf_access+0x1bc> <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
2612c: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
26130: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
26134: e1a02006 mov r2, r6 <== NOT EXECUTED
26138: e2843084 add r3, r4, #132 ; 0x84 <== NOT EXECUTED
2613c: ebff7d39 bl 5628 <rtems_bdbuf_get> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
26140: e3500000 cmp r0, #0 <== NOT EXECUTED
26144: 1a00006d bne 26300 <fat_buf_access+0x204> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
fs_info->c.modified = 0;
fs_info->c.state = FAT_CACHE_ACTUAL;
26148: e3a03001 mov r3, #1 <== NOT EXECUTED
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
fs_info->c.modified = 0;
2614c: e5c40080 strb r0, [r4, #128] ; 0x80 <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
26150: e584607c str r6, [r4, #124] ; 0x7c <== NOT EXECUTED
fs_info->c.modified = 0;
fs_info->c.state = FAT_CACHE_ACTUAL;
26154: e5c43081 strb r3, [r4, #129] ; 0x81 <== NOT EXECUTED
26158: e1a03006 mov r3, r6 <== NOT EXECUTED
}
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
2615c: e1d421b4 ldrh r2, [r4, #20] <== NOT EXECUTED
26160: e1520003 cmp r2, r3 <== NOT EXECUTED
26164: 83a05000 movhi r5, #0 <== NOT EXECUTED
26168: 9a00004d bls 262a4 <fat_buf_access+0x1a8> <== NOT EXECUTED
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.blk_num != blk)
2616c: e1560003 cmp r6, r3 <== NOT EXECUTED
26170: 0a000046 beq 26290 <fat_buf_access+0x194> <== NOT EXECUTED
{
if (fs_info->c.modified)
26174: e5d4a080 ldrb sl, [r4, #128] ; 0x80 <== NOT EXECUTED
26178: e35a0000 cmp sl, #0 <== NOT EXECUTED
2617c: 0a000032 beq 2624c <fat_buf_access+0x150> <== NOT EXECUTED
{
if (sec_of_fat && !fs_info->vol.mirror)
26180: e3550000 cmp r5, #0 <== NOT EXECUTED
26184: 0a000002 beq 26194 <fat_buf_access+0x98> <== NOT EXECUTED
26188: e5d43048 ldrb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
2618c: e3530000 cmp r3, #0 <== NOT EXECUTED
26190: 0a00004e beq 262d0 <fat_buf_access+0x1d4> <== NOT EXECUTED
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer,
fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
26194: e5940084 ldr r0, [r4, #132] ; 0x84 <== NOT EXECUTED
26198: ebff78a3 bl 442c <rtems_bdbuf_release_modified> <== NOT EXECUTED
fs_info->c.state = FAT_CACHE_EMPTY;
2619c: e3a03000 mov r3, #0 <== NOT EXECUTED
fs_info->c.modified = 0;
if (sc != RTEMS_SUCCESSFUL)
261a0: e3500000 cmp r0, #0 <== NOT EXECUTED
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer,
fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
fs_info->c.state = FAT_CACHE_EMPTY;
fs_info->c.modified = 0;
261a4: e5c43080 strb r3, [r4, #128] ; 0x80 <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer,
fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
fs_info->c.state = FAT_CACHE_EMPTY;
261a8: e5c43081 strb r3, [r4, #129] ; 0x81 <== NOT EXECUTED
fs_info->c.modified = 0;
if (sc != RTEMS_SUCCESSFUL)
261ac: 1a000053 bne 26300 <fat_buf_access+0x204> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
if (sec_of_fat && !fs_info->vol.mirror)
261b0: e3550000 cmp r5, #0 <== NOT EXECUTED
261b4: 0a000029 beq 26260 <fat_buf_access+0x164> <== NOT EXECUTED
261b8: e5d43048 ldrb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
261bc: e3530000 cmp r3, #0 <== NOT EXECUTED
261c0: 1a000026 bne 26260 <fat_buf_access+0x164> <== NOT EXECUTED
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
261c4: e5d43009 ldrb r3, [r4, #9] <== NOT EXECUTED
261c8: e3530001 cmp r3, #1 <== NOT EXECUTED
261cc: 9a000023 bls 26260 <fat_buf_access+0x164> <== NOT EXECUTED
261d0: e3a05001 mov r5, #1 <== NOT EXECUTED
261d4: e1a0a00d mov sl, sp <== NOT EXECUTED
261d8: ea00000d b 26214 <fat_buf_access+0x118> <== NOT EXECUTED
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
261dc: e59d3000 ldr r3, [sp] <== NOT EXECUTED
261e0: e5941088 ldr r1, [r4, #136] ; 0x88 <== NOT EXECUTED
261e4: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
261e8: e1d420b0 ldrh r2, [r4] <== NOT EXECUTED
261ec: eb00802f bl 462b0 <memcpy> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified(b);
261f0: e59d0000 ldr r0, [sp] <== NOT EXECUTED
261f4: ebff788c bl 442c <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
261f8: e2855001 add r5, r5, #1 <== NOT EXECUTED
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
261fc: e3500000 cmp r0, #0 <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26200: e20550ff and r5, r5, #255 ; 0xff <== NOT EXECUTED
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
26204: 1a00000b bne 26238 <fat_buf_access+0x13c> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26208: e5d43009 ldrb r3, [r4, #9] <== NOT EXECUTED
2620c: e1530005 cmp r3, r5 <== NOT EXECUTED
26210: 9a000012 bls 26260 <fat_buf_access+0x164> <== NOT EXECUTED
{
sc = rtems_bdbuf_get(fs_info->vol.dev,
26214: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
26218: e5942018 ldr r2, [r4, #24] <== NOT EXECUTED
2621c: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
26220: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
26224: e0223295 mla r2, r5, r2, r3 <== NOT EXECUTED
26228: e1a0300d mov r3, sp <== NOT EXECUTED
2622c: ebff7cfd bl 5628 <rtems_bdbuf_get> <== NOT EXECUTED
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
26230: e3500000 cmp r0, #0 <== NOT EXECUTED
26234: 0affffe8 beq 261dc <fat_buf_access+0xe0> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
26238: eb00736c bl 42ff0 <__errno> <== NOT EXECUTED
2623c: e3a0300c mov r3, #12 <== NOT EXECUTED
26240: e5803000 str r3, [r0] <== NOT EXECUTED
26244: e3e00000 mvn r0, #0 <== NOT EXECUTED
26248: ea000013 b 2629c <fat_buf_access+0x1a0> <== NOT EXECUTED
}
}
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
2624c: e5940084 ldr r0, [r4, #132] ; 0x84 <== NOT EXECUTED
26250: ebff7897 bl 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
fs_info->c.state = FAT_CACHE_EMPTY;
if (sc != RTEMS_SUCCESSFUL)
26254: e3500000 cmp r0, #0 <== NOT EXECUTED
}
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
fs_info->c.state = FAT_CACHE_EMPTY;
26258: e5c4a081 strb sl, [r4, #129] ; 0x81 <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2625c: 1a000027 bne 26300 <fat_buf_access+0x204> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
if (op_type == FAT_OP_TYPE_READ)
26260: e3570001 cmp r7, #1 <== NOT EXECUTED
26264: 0a00001f beq 262e8 <fat_buf_access+0x1ec> <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
26268: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
2626c: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
26270: e1a02006 mov r2, r6 <== NOT EXECUTED
26274: e2843084 add r3, r4, #132 ; 0x84 <== NOT EXECUTED
26278: ebff7cea bl 5628 <rtems_bdbuf_get> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2627c: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
fs_info->c.state = FAT_CACHE_ACTUAL;
26280: 03a03001 moveq r3, #1 <== NOT EXECUTED
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
26284: 0584607c streq r6, [r4, #124] ; 0x7c <== NOT EXECUTED
fs_info->c.state = FAT_CACHE_ACTUAL;
26288: 05c43081 strbeq r3, [r4, #129] ; 0x81 <== NOT EXECUTED
}
if (op_type == FAT_OP_TYPE_READ)
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
2628c: 1a00001b bne 26300 <fat_buf_access+0x204> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.blk_num = blk;
fs_info->c.state = FAT_CACHE_ACTUAL;
}
*buf = fs_info->c.buf;
26290: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
26294: e5883000 str r3, [r8] <== NOT EXECUTED
26298: e3a00000 mov r0, #0 <== NOT EXECUTED
return RC_OK;
}
2629c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
262a0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
fs_info->c.blk_num = blk;
fs_info->c.modified = 0;
fs_info->c.state = FAT_CACHE_ACTUAL;
}
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
262a4: e594501c ldr r5, [r4, #28] <== NOT EXECUTED
262a8: e1550003 cmp r5, r3 <== NOT EXECUTED
262ac: 93a05000 movls r5, #0 <== NOT EXECUTED
262b0: 83a05001 movhi r5, #1 <== NOT EXECUTED
262b4: eaffffac b 2616c <fat_buf_access+0x70> <== NOT EXECUTED
if (fs_info->c.state == FAT_CACHE_EMPTY)
{
if (op_type == FAT_OP_TYPE_READ)
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
262b8: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
262bc: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
262c0: e1a02006 mov r2, r6 <== NOT EXECUTED
262c4: e2843084 add r3, r4, #132 ; 0x84 <== NOT EXECUTED
262c8: ebff7d0a bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
262cc: eaffff9b b 26140 <fat_buf_access+0x44> <== NOT EXECUTED
if (fs_info->c.blk_num != blk)
{
if (fs_info->c.modified)
{
if (sec_of_fat && !fs_info->vol.mirror)
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer,
262d0: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
262d4: e5940088 ldr r0, [r4, #136] ; 0x88 <== NOT EXECUTED
262d8: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
262dc: e1d420b0 ldrh r2, [r4] <== NOT EXECUTED
262e0: eb007ff2 bl 462b0 <memcpy> <== NOT EXECUTED
262e4: eaffffaa b 26194 <fat_buf_access+0x98> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
}
if (op_type == FAT_OP_TYPE_READ)
sc = rtems_bdbuf_read(fs_info->vol.dev, blk, &fs_info->c.buf);
262e8: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
262ec: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
262f0: e1a02006 mov r2, r6 <== NOT EXECUTED
262f4: e2843084 add r3, r4, #132 ; 0x84 <== NOT EXECUTED
262f8: ebff7cfe bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
262fc: eaffffde b 2627c <fat_buf_access+0x180> <== NOT EXECUTED
else
sc = rtems_bdbuf_get(fs_info->vol.dev, blk, &fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
26300: eb00733a bl 42ff0 <__errno> <== NOT EXECUTED
26304: e3a03005 mov r3, #5 <== NOT EXECUTED
26308: e5803000 str r3, [r0] <== NOT EXECUTED
2630c: e3e00000 mvn r0, #0 <== NOT EXECUTED
26310: eaffffe1 b 2629c <fat_buf_access+0x1a0> <== NOT EXECUTED
00025f90 <fat_buf_release>:
return RC_OK;
}
int
fat_buf_release(fat_fs_info_t *fs_info)
{
25f90: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
25f94: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
25f98: e5d00081 ldrb r0, [r0, #129] ; 0x81 <== NOT EXECUTED
25f9c: e3500000 cmp r0, #0 <== NOT EXECUTED
return RC_OK;
}
int
fat_buf_release(fat_fs_info_t *fs_info)
{
25fa0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
uint8_t i;
bool sec_of_fat;
if (fs_info->c.state == FAT_CACHE_EMPTY)
25fa4: 0a000037 beq 26088 <fat_buf_release+0xf8> <== NOT EXECUTED
return RC_OK;
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
25fa8: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
25fac: e1d421b4 ldrh r2, [r4, #20] <== NOT EXECUTED
25fb0: e1530002 cmp r3, r2 <== NOT EXECUTED
25fb4: 33a05000 movcc r5, #0 <== NOT EXECUTED
25fb8: 2a000034 bcs 26090 <fat_buf_release+0x100> <== NOT EXECUTED
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.modified)
25fbc: e5d43080 ldrb r3, [r4, #128] ; 0x80 <== NOT EXECUTED
25fc0: e3530000 cmp r3, #0 <== NOT EXECUTED
25fc4: 0a000038 beq 260ac <fat_buf_release+0x11c> <== NOT EXECUTED
{
if (sec_of_fat && !fs_info->vol.mirror)
25fc8: e3550000 cmp r5, #0 <== NOT EXECUTED
25fcc: 0a000002 beq 25fdc <fat_buf_release+0x4c> <== NOT EXECUTED
25fd0: e5d43048 ldrb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
25fd4: e3530000 cmp r3, #0 <== NOT EXECUTED
25fd8: 0a00003a beq 260c8 <fat_buf_release+0x138> <== NOT EXECUTED
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
25fdc: e5940084 ldr r0, [r4, #132] ; 0x84 <== NOT EXECUTED
25fe0: ebff7911 bl 442c <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
25fe4: e3500000 cmp r0, #0 <== NOT EXECUTED
25fe8: 1a00003c bne 260e0 <fat_buf_release+0x150> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.modified = 0;
if (sec_of_fat && !fs_info->vol.mirror)
25fec: e3550000 cmp r5, #0 <== NOT EXECUTED
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
fs_info->c.modified = 0;
25ff0: e5c40080 strb r0, [r4, #128] ; 0x80 <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
25ff4: 0a000030 beq 260bc <fat_buf_release+0x12c> <== NOT EXECUTED
25ff8: e5d43048 ldrb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
25ffc: e3530000 cmp r3, #0 <== NOT EXECUTED
26000: 1a00002d bne 260bc <fat_buf_release+0x12c> <== NOT EXECUTED
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26004: e5d43009 ldrb r3, [r4, #9] <== NOT EXECUTED
26008: e3530001 cmp r3, #1 <== NOT EXECUTED
2600c: 9a00002a bls 260bc <fat_buf_release+0x12c> <== NOT EXECUTED
26010: e3a05001 mov r5, #1 <== NOT EXECUTED
26014: e1a0600d mov r6, sp <== NOT EXECUTED
26018: ea00000d b 26054 <fat_buf_release+0xc4> <== NOT EXECUTED
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
2601c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
26020: e5941088 ldr r1, [r4, #136] ; 0x88 <== NOT EXECUTED
26024: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
26028: e1d420b0 ldrh r2, [r4] <== NOT EXECUTED
2602c: eb00809f bl 462b0 <memcpy> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified(b);
26030: e59d0000 ldr r0, [sp] <== NOT EXECUTED
26034: ebff78fc bl 442c <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26038: e2855001 add r5, r5, #1 <== NOT EXECUTED
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
2603c: e3500000 cmp r0, #0 <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26040: e20550ff and r5, r5, #255 ; 0xff <== NOT EXECUTED
&b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
26044: 1a00000b bne 26078 <fat_buf_release+0xe8> <== NOT EXECUTED
if (sec_of_fat && !fs_info->vol.mirror)
{
rtems_bdbuf_buffer *b;
for (i = 1; i < fs_info->vol.fats; i++)
26048: e5d43009 ldrb r3, [r4, #9] <== NOT EXECUTED
2604c: e1530005 cmp r3, r5 <== NOT EXECUTED
26050: 9a000019 bls 260bc <fat_buf_release+0x12c> <== NOT EXECUTED
{
sc = rtems_bdbuf_get(fs_info->vol.dev,
26054: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
26058: e5942018 ldr r2, [r4, #24] <== NOT EXECUTED
2605c: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
26060: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
26064: e0223295 mla r2, r5, r2, r3 <== NOT EXECUTED
26068: e1a0300d mov r3, sp <== NOT EXECUTED
2606c: ebff7d6d bl 5628 <rtems_bdbuf_get> <== NOT EXECUTED
fs_info->c.blk_num +
fs_info->vol.fat_length * i,
&b);
if ( sc != RTEMS_SUCCESSFUL)
26070: e3500000 cmp r0, #0 <== NOT EXECUTED
26074: 0affffe8 beq 2601c <fat_buf_release+0x8c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
memcpy(b->buffer, fs_info->sec_buf, fs_info->vol.bps);
sc = rtems_bdbuf_release_modified(b);
if ( sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(ENOMEM);
26078: eb0073dc bl 42ff0 <__errno> <== NOT EXECUTED
2607c: e3a0300c mov r3, #12 <== NOT EXECUTED
26080: e5803000 str r3, [r0] <== NOT EXECUTED
26084: e3e00000 mvn r0, #0 <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
}
fs_info->c.state = FAT_CACHE_EMPTY;
return RC_OK;
}
26088: e28dd004 add sp, sp, #4 <== NOT EXECUTED
2608c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
*buf = fs_info->c.buf;
return RC_OK;
}
int
fat_buf_release(fat_fs_info_t *fs_info)
26090: e594501c ldr r5, [r4, #28] <== NOT EXECUTED
26094: e1530005 cmp r3, r5 <== NOT EXECUTED
26098: 23a05000 movcs r5, #0 <== NOT EXECUTED
2609c: 33a05001 movcc r5, #1 <== NOT EXECUTED
return RC_OK;
sec_of_fat = ((fs_info->c.blk_num >= fs_info->vol.fat_loc) &&
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.modified)
260a0: e5d43080 ldrb r3, [r4, #128] ; 0x80 <== NOT EXECUTED
260a4: e3530000 cmp r3, #0 <== NOT EXECUTED
260a8: 1affffc6 bne 25fc8 <fat_buf_release+0x38> <== NOT EXECUTED
}
}
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
260ac: e5940084 ldr r0, [r4, #132] ; 0x84 <== NOT EXECUTED
260b0: ebff78ff bl 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
260b4: e3500000 cmp r0, #0 <== NOT EXECUTED
260b8: 1a000008 bne 260e0 <fat_buf_release+0x150> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
fs_info->c.state = FAT_CACHE_EMPTY;
260bc: e3a00000 mov r0, #0 <== NOT EXECUTED
260c0: e5c40081 strb r0, [r4, #129] ; 0x81 <== NOT EXECUTED
return RC_OK;
260c4: eaffffef b 26088 <fat_buf_release+0xf8> <== NOT EXECUTED
(fs_info->c.blk_num < fs_info->vol.rdir_loc));
if (fs_info->c.modified)
{
if (sec_of_fat && !fs_info->vol.mirror)
memcpy(fs_info->sec_buf, fs_info->c.buf->buffer, fs_info->vol.bps);
260c8: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
260cc: e5940088 ldr r0, [r4, #136] ; 0x88 <== NOT EXECUTED
260d0: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
260d4: e1d420b0 ldrh r2, [r4] <== NOT EXECUTED
260d8: eb008074 bl 462b0 <memcpy> <== NOT EXECUTED
260dc: eaffffbe b 25fdc <fat_buf_release+0x4c> <== NOT EXECUTED
}
else
{
sc = rtems_bdbuf_release(fs_info->c.buf);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
260e0: eb0073c2 bl 42ff0 <__errno> <== NOT EXECUTED
260e4: e3a03005 mov r3, #5 <== NOT EXECUTED
260e8: e5803000 str r3, [r0] <== NOT EXECUTED
260ec: e3e00000 mvn r0, #0 <== NOT EXECUTED
260f0: eaffffe4 b 26088 <fat_buf_release+0xf8> <== NOT EXECUTED
00026d70 <fat_cluster_read>:
fat_cluster_read(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
void *buff
)
{
26d70: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
26d74: e2513000 subs r3, r1, #0 <== NOT EXECUTED
26d78: e1a0c002 mov ip, r2 <== NOT EXECUTED
26d7c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
26d80: e5902034 ldr r2, [r0, #52] ; 0x34 <== NOT EXECUTED
26d84: 1a000003 bne 26d98 <fat_cluster_read+0x28> <== NOT EXECUTED
26d88: e5d2100a ldrb r1, [r2, #10] <== NOT EXECUTED
26d8c: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
26d90: 1592101c ldrne r1, [r2, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
26d94: 1a000003 bne 26da8 <fat_cluster_read+0x38> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
26d98: e5d21005 ldrb r1, [r2, #5] <== NOT EXECUTED
26d9c: e592e030 ldr lr, [r2, #48] ; 0x30 <== NOT EXECUTED
26da0: e2433002 sub r3, r3, #2 <== NOT EXECUTED
26da4: e08e1113 add r1, lr, r3, lsl r1 <== NOT EXECUTED
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(mt_entry, cln);
return _fat_block_read(mt_entry, fsec, 0,
26da8: e5d23002 ldrb r3, [r2, #2] <== NOT EXECUTED
26dac: e5d22004 ldrb r2, [r2, #4] <== NOT EXECUTED
26db0: e1a03312 lsl r3, r2, r3 <== NOT EXECUTED
26db4: e3a02000 mov r2, #0 <== NOT EXECUTED
26db8: e58dc000 str ip, [sp] <== NOT EXECUTED
26dbc: ebfffe21 bl 26648 <_fat_block_read> <== NOT EXECUTED
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
}
26dc0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
26dc4: e8bd8000 pop {pc} <== NOT EXECUTED
00026540 <fat_cluster_write>:
fat_cluster_write(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
const void *buff
)
{
26540: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
26544: e2513000 subs r3, r1, #0 <== NOT EXECUTED
26548: e1a0c002 mov ip, r2 <== NOT EXECUTED
2654c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
26550: e5902034 ldr r2, [r0, #52] ; 0x34 <== NOT EXECUTED
26554: 1a000003 bne 26568 <fat_cluster_write+0x28> <== NOT EXECUTED
26558: e5d2100a ldrb r1, [r2, #10] <== NOT EXECUTED
2655c: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
26560: 1592101c ldrne r1, [r2, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
26564: 1a000003 bne 26578 <fat_cluster_write+0x38> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
26568: e5d21005 ldrb r1, [r2, #5] <== NOT EXECUTED
2656c: e592e030 ldr lr, [r2, #48] ; 0x30 <== NOT EXECUTED
26570: e2433002 sub r3, r3, #2 <== NOT EXECUTED
26574: e08e1113 add r1, lr, r3, lsl r1 <== NOT EXECUTED
uint32_t fsec = 0;
fsec = fat_cluster_num_to_sector_num(mt_entry, cln);
return _fat_block_write(mt_entry, fsec, 0,
26578: e5d23002 ldrb r3, [r2, #2] <== NOT EXECUTED
2657c: e5d22004 ldrb r2, [r2, #4] <== NOT EXECUTED
26580: e1a03312 lsl r3, r2, r3 <== NOT EXECUTED
26584: e3a02000 mov r2, #0 <== NOT EXECUTED
26588: e58dc000 str ip, [sp] <== NOT EXECUTED
2658c: ebffff60 bl 26314 <_fat_block_write> <== NOT EXECUTED
fs_info->vol.spc << fs_info->vol.sec_log2, buff);
}
26590: e28dd004 add sp, sp, #4 <== NOT EXECUTED
26594: e8bd8000 pop {pc} <== NOT EXECUTED
000263f0 <fat_fat32_update_fsinfo_sector>:
fat_fat32_update_fsinfo_sector(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t free_count,
uint32_t next_free
)
{
263f0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
ssize_t ret1 = 0, ret2 = 0;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
263f4: e5905034 ldr r5, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
le_next_free = CT_LE_L(next_free);
ret1 = _fat_block_write(mt_entry,
263f8: e1d533bc ldrh r3, [r5, #60] ; 0x3c <== NOT EXECUTED
fat_fat32_update_fsinfo_sector(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t free_count,
uint32_t next_free
)
{
263fc: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
le_next_free = CT_LE_L(next_free);
ret1 = _fat_block_write(mt_entry,
26400: e28dc008 add ip, sp, #8 <== NOT EXECUTED
ssize_t ret1 = 0, ret2 = 0;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t le_free_count = 0;
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
26404: e58d1008 str r1, [sp, #8] <== NOT EXECUTED
le_next_free = CT_LE_L(next_free);
26408: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
ret1 = _fat_block_write(mt_entry,
2640c: e1a01003 mov r1, r3 <== NOT EXECUTED
26410: e3a02f7a mov r2, #488 ; 0x1e8 <== NOT EXECUTED
26414: e3a03004 mov r3, #4 <== NOT EXECUTED
fat_fat32_update_fsinfo_sector(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t free_count,
uint32_t next_free
)
{
26418: e1a04000 mov r4, r0 <== NOT EXECUTED
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
le_next_free = CT_LE_L(next_free);
ret1 = _fat_block_write(mt_entry,
2641c: e58dc000 str ip, [sp] <== NOT EXECUTED
26420: ebffffbb bl 26314 <_fat_block_write> <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET,
4,
(char *)(&le_free_count));
ret2 = _fat_block_write(mt_entry,
26424: e3a03004 mov r3, #4 <== NOT EXECUTED
26428: e1d513bc ldrh r1, [r5, #60] ; 0x3c <== NOT EXECUTED
2642c: e08dc003 add ip, sp, r3 <== NOT EXECUTED
uint32_t le_next_free = 0;
le_free_count = CT_LE_L(free_count);
le_next_free = CT_LE_L(next_free);
ret1 = _fat_block_write(mt_entry,
26430: e1a06000 mov r6, r0 <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_FREE_CLUSTER_COUNT_OFFSET,
4,
(char *)(&le_free_count));
ret2 = _fat_block_write(mt_entry,
26434: e3a02f7b mov r2, #492 ; 0x1ec <== NOT EXECUTED
26438: e1a00004 mov r0, r4 <== NOT EXECUTED
2643c: e58dc000 str ip, [sp] <== NOT EXECUTED
26440: ebffffb3 bl 26314 <_fat_block_write> <== NOT EXECUTED
fs_info->vol.info_sec,
FAT_FSINFO_NEXT_FREE_CLUSTER_OFFSET,
4,
(char *)(&le_next_free));
if ( (ret1 < 0) || (ret2 < 0) )
26444: e1a06fa6 lsr r6, r6, #31 <== NOT EXECUTED
26448: e1960fa0 orrs r0, r6, r0, lsr #31 <== NOT EXECUTED
return -1;
return RC_OK;
}
2644c: 13e00000 mvnne r0, #0 <== NOT EXECUTED
26450: e28dd00c add sp, sp, #12 <== NOT EXECUTED
26454: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00025b58 <fat_file_close>:
/*
* if links_num field of fat-file descriptor is greater than 1
* decrement the count of links and return
*/
if (fat_fd->links_num > 1)
25b58: e5913008 ldr r3, [r1, #8] <== NOT EXECUTED
25b5c: e3530001 cmp r3, #1 <== NOT EXECUTED
{
fat_fd->links_num--;
25b60: 82433001 subhi r3, r3, #1 <== NOT EXECUTED
int
fat_file_close(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
25b64: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
* if links_num field of fat-file descriptor is greater than 1
* decrement the count of links and return
*/
if (fat_fd->links_num > 1)
{
fat_fd->links_num--;
25b68: 85813008 strhi r3, [r1, #8] <== NOT EXECUTED
int
fat_file_close(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
25b6c: e1a05000 mov r5, r0 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25b70: e5906034 ldr r6, [r0, #52] ; 0x34 <== NOT EXECUTED
int
fat_file_close(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
25b74: e1a04001 mov r4, r1 <== NOT EXECUTED
* if links_num field of fat-file descriptor is greater than 1
* decrement the count of links and return
*/
if (fat_fd->links_num > 1)
{
fat_fd->links_num--;
25b78: 83a00000 movhi r0, #0 <== NOT EXECUTED
/*
* if links_num field of fat-file descriptor is greater than 1
* decrement the count of links and return
*/
if (fat_fd->links_num > 1)
25b7c: 88bd80f0 pophi {r4, r5, r6, r7, pc} <== NOT EXECUTED
return rc;
}
key = fat_construct_key(mt_entry, &fat_fd->dir_pos.sname);
if (fat_fd->flags & FAT_FILE_REMOVED)
25b80: e5d17030 ldrb r7, [r1, #48] ; 0x30 <== NOT EXECUTED
25b84: e2177001 ands r7, r7, #1 <== NOT EXECUTED
25b88: 0a00000d beq 25bc4 <fat_file_close+0x6c> <== NOT EXECUTED
{
rc = fat_file_truncate(mt_entry, fat_fd, 0);
25b8c: e3a02000 mov r2, #0 <== NOT EXECUTED
25b90: ebfffe1d bl 2540c <fat_file_truncate> <== NOT EXECUTED
if ( rc != RC_OK )
25b94: e3500000 cmp r0, #0 <== NOT EXECUTED
25b98: 18bd80f0 popne {r4, r5, r6, r7, pc} <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
25b9c: e1a00004 mov r0, r4 <== NOT EXECUTED
25ba0: ebff9d42 bl d0b0 <_Chain_Extract> <== NOT EXECUTED
return rc;
_hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd);
if ( fat_ino_is_unique(mt_entry, fat_fd->ino) )
25ba4: e1a00005 mov r0, r5 <== NOT EXECUTED
25ba8: e594100c ldr r1, [r4, #12] <== NOT EXECUTED
25bac: eb0000b6 bl 25e8c <fat_ino_is_unique> <== NOT EXECUTED
25bb0: e3500000 cmp r0, #0 <== NOT EXECUTED
25bb4: 1a00000d bne 25bf0 <fat_file_close+0x98> <== NOT EXECUTED
fat_fd->links_num = 0;
}
else
{
_hash_delete(fs_info->vhash, key, fat_fd->ino, fat_fd);
free(fat_fd);
25bb8: e1a00004 mov r0, r4 <== NOT EXECUTED
25bbc: ebff886b bl 7d70 <free> <== NOT EXECUTED
25bc0: ea000004 b 25bd8 <fat_file_close+0x80> <== NOT EXECUTED
free(fat_fd);
}
else
{
if (fat_ino_is_unique(mt_entry, fat_fd->ino))
25bc4: e591100c ldr r1, [r1, #12] <== NOT EXECUTED
25bc8: eb0000af bl 25e8c <fat_ino_is_unique> <== NOT EXECUTED
25bcc: e3500000 cmp r0, #0 <== NOT EXECUTED
{
fat_fd->links_num = 0;
25bd0: 15847008 strne r7, [r4, #8] <== NOT EXECUTED
free(fat_fd);
}
else
{
if (fat_ino_is_unique(mt_entry, fat_fd->ino))
25bd4: 0a000002 beq 25be4 <fat_file_close+0x8c> <== NOT EXECUTED
}
}
/*
* flush any modified "cached" buffer back to disk
*/
rc = fat_buf_release(fs_info);
25bd8: e1a00006 mov r0, r6 <== NOT EXECUTED
return rc;
}
25bdc: e8bd40f0 pop {r4, r5, r6, r7, lr} <== NOT EXECUTED
}
}
/*
* flush any modified "cached" buffer back to disk
*/
rc = fat_buf_release(fs_info);
25be0: ea0000ea b 25f90 <fat_buf_release> <== NOT EXECUTED
25be4: e1a00004 mov r0, r4 <== NOT EXECUTED
25be8: ebff9d30 bl d0b0 <_Chain_Extract> <== NOT EXECUTED
25bec: eafffff1 b 25bb8 <fat_file_close+0x60> <== NOT EXECUTED
return rc;
_hash_delete(fs_info->rhash, key, fat_fd->ino, fat_fd);
if ( fat_ino_is_unique(mt_entry, fat_fd->ino) )
fat_free_unique_ino(mt_entry, fat_fd->ino);
25bf0: e1a00005 mov r0, r5 <== NOT EXECUTED
25bf4: e594100c ldr r1, [r4, #12] <== NOT EXECUTED
25bf8: eb000099 bl 25e64 <fat_free_unique_ino> <== NOT EXECUTED
25bfc: eaffffed b 25bb8 <fat_file_close+0x60> <== NOT EXECUTED
000251b4 <fat_file_datasync>:
int
fat_file_datasync(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
251b4: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
uint32_t cur_cln = fat_fd->cln;
rtems_bdbuf_buffer *block = NULL;
uint32_t sec = 0;
uint32_t i = 0;
if (fat_fd->fat_file_size == 0)
251b8: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
251bc: e3530000 cmp r3, #0 <== NOT EXECUTED
int
fat_file_datasync(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
251c0: e1a08000 mov r8, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_fs_info_t *fs_info = mt_entry->fs_info;
251c4: e5905034 ldr r5, [r0, #52] ; 0x34 <== NOT EXECUTED
int
fat_file_datasync(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
251c8: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
251cc: e591201c ldr r2, [r1, #28] <== NOT EXECUTED
rtems_bdbuf_buffer *block = NULL;
uint32_t sec = 0;
uint32_t i = 0;
if (fat_fd->fat_file_size == 0)
251d0: 01a00003 moveq r0, r3 <== NOT EXECUTED
251d4: 1a000001 bne 251e0 <fat_file_datasync+0x2c> <== NOT EXECUTED
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
if ( rc != RC_OK )
return rc;
}
return rc;
}
251d8: e28dd008 add sp, sp, #8 <== NOT EXECUTED
251dc: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
rtems_bdbuf_buffer *block = NULL;
251e0: e3a03000 mov r3, #0 <== NOT EXECUTED
/*
* we can use only one bdbuf :( and we also know that cache is useless
* for sync operation, so don't use it
*/
rc = fat_buf_release(fs_info);
251e4: e1a00005 mov r0, r5 <== NOT EXECUTED
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
rtems_bdbuf_buffer *block = NULL;
251e8: e58d3000 str r3, [sp] <== NOT EXECUTED
)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
251ec: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
/*
* we can use only one bdbuf :( and we also know that cache is useless
* for sync operation, so don't use it
*/
rc = fat_buf_release(fs_info);
251f0: eb000366 bl 25f90 <fat_buf_release> <== NOT EXECUTED
if (rc != RC_OK)
251f4: e250a000 subs sl, r0, #0 <== NOT EXECUTED
251f8: 01a0700d moveq r7, sp <== NOT EXECUTED
sc = rtems_bdbuf_sync(block);
if ( sc != RTEMS_SUCCESSFUL )
rtems_set_errno_and_return_minus_one( EIO );
}
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
251fc: 028d9004 addeq r9, sp, #4 <== NOT EXECUTED
/*
* we can use only one bdbuf :( and we also know that cache is useless
* for sync operation, so don't use it
*/
rc = fat_buf_release(fs_info);
if (rc != RC_OK)
25200: 1a00002a bne 252b0 <fat_file_datasync+0xfc> <== NOT EXECUTED
return rc;
/* for each cluster of the file ... */
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
25204: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
25208: e285200c add r2, r5, #12 <== NOT EXECUTED
2520c: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
25210: e0012002 and r2, r1, r2 <== NOT EXECUTED
25214: e1520003 cmp r2, r3 <== NOT EXECUTED
25218: 2a000024 bcs 252b0 <fat_file_datasync+0xfc> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
2521c: e3510000 cmp r1, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
25220: e5983034 ldr r3, [r8, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25224: 0a00001c beq 2529c <fat_file_datasync+0xe8> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25228: e5932030 ldr r2, [r3, #48] ; 0x30 <== NOT EXECUTED
2522c: e5d33005 ldrb r3, [r3, #5] <== NOT EXECUTED
25230: e2416002 sub r6, r1, #2 <== NOT EXECUTED
25234: e0826316 add r6, r2, r6, lsl r3 <== NOT EXECUTED
{
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
/* for each sector in cluster ... */
for ( i = 0; i < fs_info->vol.spc; i++ )
25238: e5d53004 ldrb r3, [r5, #4] <== NOT EXECUTED
2523c: e3530000 cmp r3, #0 <== NOT EXECUTED
25240: 0a00001d beq 252bc <fat_file_datasync+0x108> <== NOT EXECUTED
25244: e3a04000 mov r4, #0 <== NOT EXECUTED
25248: ea000006 b 25268 <fat_file_datasync+0xb4> <== NOT EXECUTED
/* ... sync it */
sc = rtems_bdbuf_read(fs_info->vol.dev, (sec + i), &block);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one( EIO );
sc = rtems_bdbuf_sync(block);
2524c: e59d0000 ldr r0, [sp] <== NOT EXECUTED
25250: ebff7f0d bl 4e8c <rtems_bdbuf_sync> <== NOT EXECUTED
if ( sc != RTEMS_SUCCESSFUL )
25254: e3500000 cmp r0, #0 <== NOT EXECUTED
25258: 1a00000a bne 25288 <fat_file_datasync+0xd4> <== NOT EXECUTED
/* for each cluster of the file ... */
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
/* for each sector in cluster ... */
for ( i = 0; i < fs_info->vol.spc; i++ )
2525c: e5d53004 ldrb r3, [r5, #4] <== NOT EXECUTED
25260: e1530004 cmp r3, r4 <== NOT EXECUTED
25264: 9a000013 bls 252b8 <fat_file_datasync+0x104> <== NOT EXECUTED
{
/* ... sync it */
sc = rtems_bdbuf_read(fs_info->vol.dev, (sec + i), &block);
25268: e0842006 add r2, r4, r6 <== NOT EXECUTED
2526c: e2851054 add r1, r5, #84 ; 0x54 <== NOT EXECUTED
25270: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
25274: e1a0300d mov r3, sp <== NOT EXECUTED
25278: ebff811e bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2527c: e3500000 cmp r0, #0 <== NOT EXECUTED
/* for each cluster of the file ... */
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
/* for each sector in cluster ... */
for ( i = 0; i < fs_info->vol.spc; i++ )
25280: e2844001 add r4, r4, #1 <== NOT EXECUTED
{
/* ... sync it */
sc = rtems_bdbuf_read(fs_info->vol.dev, (sec + i), &block);
if (sc != RTEMS_SUCCESSFUL)
25284: 0afffff0 beq 2524c <fat_file_datasync+0x98> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
sc = rtems_bdbuf_sync(block);
if ( sc != RTEMS_SUCCESSFUL )
rtems_set_errno_and_return_minus_one( EIO );
25288: eb007758 bl 42ff0 <__errno> <== NOT EXECUTED
2528c: e3a03005 mov r3, #5 <== NOT EXECUTED
25290: e5803000 str r3, [r0] <== NOT EXECUTED
25294: e3e00000 mvn r0, #0 <== NOT EXECUTED
25298: eaffffce b 251d8 <fat_file_datasync+0x24> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
2529c: e5d3200a ldrb r2, [r3, #10] <== NOT EXECUTED
252a0: e3120003 tst r2, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
252a4: 1593601c ldrne r6, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
252a8: 1affffe2 bne 25238 <fat_file_datasync+0x84> <== NOT EXECUTED
252ac: eaffffdd b 25228 <fat_file_datasync+0x74> <== NOT EXECUTED
rc = fat_buf_release(fs_info);
if (rc != RC_OK)
return rc;
/* for each cluster of the file ... */
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
252b0: e1a0000a mov r0, sl <== NOT EXECUTED
252b4: eaffffc7 b 251d8 <fat_file_datasync+0x24> <== NOT EXECUTED
{
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
/* for each sector in cluster ... */
for ( i = 0; i < fs_info->vol.spc; i++ )
252b8: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
sc = rtems_bdbuf_sync(block);
if ( sc != RTEMS_SUCCESSFUL )
rtems_set_errno_and_return_minus_one( EIO );
}
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
252bc: e1a00008 mov r0, r8 <== NOT EXECUTED
252c0: e1a02009 mov r2, r9 <== NOT EXECUTED
252c4: eb0066d7 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
252c8: e3500000 cmp r0, #0 <== NOT EXECUTED
252cc: 0affffcc beq 25204 <fat_file_datasync+0x50> <== NOT EXECUTED
252d0: eaffffc0 b 251d8 <fat_file_datasync+0x24> <== NOT EXECUTED
00025514 <fat_file_extend>:
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t new_length,
uint32_t *a_length
)
{
25514: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
25518: e1a08003 mov r8, r3 <== NOT EXECUTED
uint32_t old_last_cl;
uint32_t last_cl = 0;
uint32_t bytes_remain = 0;
uint32_t cls_added;
*a_length = new_length;
2551c: e5882000 str r2, [r8] <== NOT EXECUTED
if (new_length <= fat_fd->fat_file_size)
25520: e591b018 ldr fp, [r1, #24] <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t new_length,
uint32_t *a_length
)
{
25524: e24dd014 sub sp, sp, #20 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t chain = 0;
25528: e3a03000 mov r3, #0 <== NOT EXECUTED
uint32_t bytes_remain = 0;
uint32_t cls_added;
*a_length = new_length;
if (new_length <= fat_fd->fat_file_size)
2552c: e152000b cmp r2, fp <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t new_length,
uint32_t *a_length
)
{
25530: e1a04002 mov r4, r2 <== NOT EXECUTED
25534: e1a05001 mov r5, r1 <== NOT EXECUTED
25538: e1a06000 mov r6, r0 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t chain = 0;
uint32_t bytes2add = 0;
uint32_t cls2add = 0;
uint32_t old_last_cl;
uint32_t last_cl = 0;
2553c: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
uint32_t *a_length
)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t chain = 0;
25540: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
uint32_t new_length,
uint32_t *a_length
)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25544: e5907034 ldr r7, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t bytes_remain = 0;
uint32_t cls_added;
*a_length = new_length;
if (new_length <= fat_fd->fat_file_size)
25548: 9a000039 bls 25634 <fat_file_extend+0x120> <== NOT EXECUTED
return RC_OK;
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
2554c: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
25550: e3530001 cmp r3, #1 <== NOT EXECUTED
25554: 0a00003a beq 25644 <fat_file_extend+0x130> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
rtems_set_errno_and_return_minus_one( ENOSPC );
bytes_remain = (fs_info->vol.bpc -
25558: e1d720b6 ldrh r2, [r7, #6] <== NOT EXECUTED
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
2555c: e2423001 sub r3, r2, #1 <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
rtems_set_errno_and_return_minus_one( ENOSPC );
bytes_remain = (fs_info->vol.bpc -
25560: e003a00b and sl, r3, fp <== NOT EXECUTED
25564: e06aa002 rsb sl, sl, r2 <== NOT EXECUTED
25568: e00aa003 and sl, sl, r3 <== NOT EXECUTED
(fat_fd->fat_file_size & (fs_info->vol.bpc - 1))) &
(fs_info->vol.bpc - 1);
bytes2add = new_length - fat_fd->fat_file_size;
2556c: e06bb004 rsb fp, fp, r4 <== NOT EXECUTED
if (bytes2add > bytes_remain)
25570: e15a000b cmp sl, fp <== NOT EXECUTED
25574: 2a00002e bcs 25634 <fat_file_extend+0x120> <== NOT EXECUTED
/*
* if in last cluster allocated for the file there is enough room to
* handle extention (hence we don't need to add even one cluster to the
* file ) - return
*/
if (bytes2add == 0)
25578: e05bb00a subs fp, fp, sl <== NOT EXECUTED
2557c: 0a00002c beq 25634 <fat_file_extend+0x120> <== NOT EXECUTED
return RC_OK;
cls2add = ((bytes2add - 1) >> fs_info->vol.bpc_log2) + 1;
25580: e5d73008 ldrb r3, [r7, #8] <== NOT EXECUTED
25584: e24b9001 sub r9, fp, #1 <== NOT EXECUTED
25588: e1a09339 lsr r9, r9, r3 <== NOT EXECUTED
2558c: e2899001 add r9, r9, #1 <== NOT EXECUTED
rc = fat_scan_fat_for_free_clusters(mt_entry, &chain, cls2add,
25590: e28dc008 add ip, sp, #8 <== NOT EXECUTED
25594: e1a00006 mov r0, r6 <== NOT EXECUTED
25598: e28d1010 add r1, sp, #16 <== NOT EXECUTED
2559c: e1a02009 mov r2, r9 <== NOT EXECUTED
255a0: e28d3004 add r3, sp, #4 <== NOT EXECUTED
255a4: e58dc000 str ip, [sp] <== NOT EXECUTED
255a8: eb0066b5 bl 3f084 <fat_scan_fat_for_free_clusters> <== NOT EXECUTED
&cls_added, &last_cl);
/* this means that low level I/O error occured */
if (rc != RC_OK)
255ac: e3500000 cmp r0, #0 <== NOT EXECUTED
255b0: 11a08000 movne r8, r0 <== NOT EXECUTED
255b4: 1a00001f bne 25638 <fat_file_extend+0x124> <== NOT EXECUTED
return rc;
/* this means that no space left on device */
if ((cls_added == 0) && (bytes_remain == 0))
255b8: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
255bc: e19aa002 orrs sl, sl, r2 <== NOT EXECUTED
255c0: 0a000025 beq 2565c <fat_file_extend+0x148> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOSPC);
/* check wether we satisfied request for 'cls2add' clusters */
if (cls2add != cls_added)
255c4: e1590002 cmp r9, r2 <== NOT EXECUTED
255c8: 0a000008 beq 255f0 <fat_file_extend+0xdc> <== NOT EXECUTED
*a_length = new_length -
255cc: e5d73008 ldrb r3, [r7, #8] <== NOT EXECUTED
255d0: e1e01002 mvn r1, r2 <== NOT EXECUTED
255d4: e0819009 add r9, r1, r9 <== NOT EXECUTED
255d8: e0449319 sub r9, r4, r9, lsl r3 <== NOT EXECUTED
255dc: e1d730b6 ldrh r3, [r7, #6] <== NOT EXECUTED
255e0: e2433001 sub r3, r3, #1 <== NOT EXECUTED
255e4: e00bb003 and fp, fp, r3 <== NOT EXECUTED
255e8: e06bb009 rsb fp, fp, r9 <== NOT EXECUTED
255ec: e588b000 str fp, [r8] <== NOT EXECUTED
((cls2add - cls_added - 1) << fs_info->vol.bpc_log2) -
(bytes2add & (fs_info->vol.bpc - 1));
/* add new chain to the end of existed */
if ( fat_fd->fat_file_size == 0 )
255f0: e5953018 ldr r3, [r5, #24] <== NOT EXECUTED
255f4: e3530000 cmp r3, #0 <== NOT EXECUTED
255f8: 1a00001c bne 25670 <fat_file_extend+0x15c> <== NOT EXECUTED
{
fat_fd->map.disk_cln = fat_fd->cln = chain;
255fc: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
fat_fd->map.file_cln = 0;
25600: e5853034 str r3, [r5, #52] ; 0x34 <== NOT EXECUTED
(bytes2add & (fs_info->vol.bpc - 1));
/* add new chain to the end of existed */
if ( fat_fd->fat_file_size == 0 )
{
fat_fd->map.disk_cln = fat_fd->cln = chain;
25604: e5851038 str r1, [r5, #56] ; 0x38 <== NOT EXECUTED
25608: e585101c str r1, [r5, #28] <== NOT EXECUTED
}
fat_buf_release(fs_info);
}
/* update number of the last cluster of the file if it changed */
if (cls_added != 0)
2560c: e3520000 cmp r2, #0 <== NOT EXECUTED
25610: 0a000004 beq 25628 <fat_file_extend+0x114> <== NOT EXECUTED
{
fat_fd->map.last_cln = last_cl;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
25614: e5953010 ldr r3, [r5, #16] <== NOT EXECUTED
25618: e3530001 cmp r3, #1 <== NOT EXECUTED
}
/* update number of the last cluster of the file if it changed */
if (cls_added != 0)
{
fat_fd->map.last_cln = last_cl;
2561c: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
25620: e585303c str r3, [r5, #60] ; 0x3c <== NOT EXECUTED
if (fat_fd->fat_file_type == FAT_DIRECTORY)
25624: 0a00001e beq 256a4 <fat_file_extend+0x190> <== NOT EXECUTED
return rc;
}
}
}
fat_fd->fat_file_size = new_length;
25628: e5854018 str r4, [r5, #24] <== NOT EXECUTED
2562c: e3a08000 mov r8, #0 <== NOT EXECUTED
return RC_OK;
25630: ea000000 b 25638 <fat_file_extend+0x124> <== NOT EXECUTED
25634: e3a08000 mov r8, #0 <== NOT EXECUTED
}
25638: e1a00008 mov r0, r8 <== NOT EXECUTED
2563c: e28dd014 add sp, sp, #20 <== NOT EXECUTED
25640: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
*a_length = new_length;
if (new_length <= fat_fd->fat_file_size)
return RC_OK;
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
25644: e5913024 ldr r3, [r1, #36] ; 0x24 <== NOT EXECUTED
25648: e3530000 cmp r3, #0 <== NOT EXECUTED
2564c: 1affffc1 bne 25558 <fat_file_extend+0x44> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
25650: e5d7300a ldrb r3, [r7, #10] <== NOT EXECUTED
25654: e3130003 tst r3, #3 <== NOT EXECUTED
25658: 0affffbe beq 25558 <fat_file_extend+0x44> <== NOT EXECUTED
if (rc != RC_OK)
return rc;
/* this means that no space left on device */
if ((cls_added == 0) && (bytes_remain == 0))
rtems_set_errno_and_return_minus_one(ENOSPC);
2565c: eb007663 bl 42ff0 <__errno> <== NOT EXECUTED
25660: e3a0301c mov r3, #28 <== NOT EXECUTED
25664: e5803000 str r3, [r0] <== NOT EXECUTED
25668: e3e08000 mvn r8, #0 <== NOT EXECUTED
2566c: eafffff1 b 25638 <fat_file_extend+0x124> <== NOT EXECUTED
fat_fd->map.disk_cln = fat_fd->cln = chain;
fat_fd->map.file_cln = 0;
}
else
{
if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE)
25670: e595103c ldr r1, [r5, #60] ; 0x3c <== NOT EXECUTED
25674: e3710001 cmn r1, #1 <== NOT EXECUTED
{
old_last_cl = fat_fd->map.last_cln;
25678: 158d100c strne r1, [sp, #12] <== NOT EXECUTED
fat_fd->map.disk_cln = fat_fd->cln = chain;
fat_fd->map.file_cln = 0;
}
else
{
if (fat_fd->map.last_cln != FAT_UNDEFINED_VALUE)
2567c: 0a000011 beq 256c8 <fat_file_extend+0x1b4> <== NOT EXECUTED
fat_free_fat_clusters_chain(mt_entry, chain);
return rc;
}
}
rc = fat_set_fat_cluster(mt_entry, old_last_cl, chain);
25680: e1a00006 mov r0, r6 <== NOT EXECUTED
25684: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
25688: eb006545 bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
2568c: e2508000 subs r8, r0, #0 <== NOT EXECUTED
25690: 1a000008 bne 256b8 <fat_file_extend+0x1a4> <== NOT EXECUTED
{
fat_free_fat_clusters_chain(mt_entry, chain);
return rc;
}
fat_buf_release(fs_info);
25694: e1a00007 mov r0, r7 <== NOT EXECUTED
25698: eb00023c bl 25f90 <fat_buf_release> <== NOT EXECUTED
2569c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
256a0: eaffffd9 b 2560c <fat_file_extend+0xf8> <== NOT EXECUTED
if (cls_added != 0)
{
fat_fd->map.last_cln = last_cl;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
{
rc = fat_init_clusters_chain(mt_entry, chain);
256a4: e1a00006 mov r0, r6 <== NOT EXECUTED
256a8: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
256ac: eb0003b9 bl 26598 <fat_init_clusters_chain> <== NOT EXECUTED
if ( rc != RC_OK )
256b0: e2508000 subs r8, r0, #0 <== NOT EXECUTED
256b4: 0affffdb beq 25628 <fat_file_extend+0x114> <== NOT EXECUTED
{
fat_free_fat_clusters_chain(mt_entry, chain);
256b8: e1a00006 mov r0, r6 <== NOT EXECUTED
256bc: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
256c0: eb006639 bl 3efac <fat_free_fat_clusters_chain> <== NOT EXECUTED
return rc;
256c4: eaffffdb b 25638 <fat_file_extend+0x124> <== NOT EXECUTED
{
old_last_cl = fat_fd->map.last_cln;
}
else
{
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
256c8: e1a01005 mov r1, r5 <== NOT EXECUTED
256cc: e28dc00c add ip, sp, #12 <== NOT EXECUTED
256d0: e2433001 sub r3, r3, #1 <== NOT EXECUTED
256d4: e1a00006 mov r0, r6 <== NOT EXECUTED
256d8: e3a02001 mov r2, #1 <== NOT EXECUTED
256dc: e58dc000 str ip, [sp] <== NOT EXECUTED
256e0: ebffff0f bl 25324 <fat_file_ioctl> <== NOT EXECUTED
(fat_fd->fat_file_size - 1), &old_last_cl);
if ( rc != RC_OK )
256e4: e2508000 subs r8, r0, #0 <== NOT EXECUTED
{
fat_free_fat_clusters_chain(mt_entry, chain);
return rc;
256e8: 059d100c ldreq r1, [sp, #12] <== NOT EXECUTED
}
else
{
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
(fat_fd->fat_file_size - 1), &old_last_cl);
if ( rc != RC_OK )
256ec: 0affffe3 beq 25680 <fat_file_extend+0x16c> <== NOT EXECUTED
256f0: eafffff0 b 256b8 <fat_file_extend+0x1a4> <== NOT EXECUTED
00025324 <fat_file_ioctl>:
fat_file_ioctl(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
int cmd,
...)
{
25324: e92d000c push {r2, r3} <== NOT EXECUTED
25328: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
2532c: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
25330: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
uint32_t *ret;
va_list ap;
va_start(ap, cmd);
switch (cmd)
25334: e3530001 cmp r3, #1 <== NOT EXECUTED
uint32_t cl_start = 0;
uint32_t pos = 0;
uint32_t *ret;
va_list ap;
va_start(ap, cmd);
25338: e28d3018 add r3, sp, #24 <== NOT EXECUTED
2533c: e58d3000 str r3, [sp] <== NOT EXECUTED
int cmd,
...)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = 0;
25340: e3a02000 mov r2, #0 <== NOT EXECUTED
25344: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
fat_file_fd_t *fat_fd,
int cmd,
...)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25348: e590c034 ldr ip, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t *ret;
va_list ap;
va_start(ap, cmd);
switch (cmd)
2534c: 0a000007 beq 25370 <fat_file_ioctl+0x4c> <== NOT EXECUTED
*ret = cur_cln;
break;
default:
errno = EINVAL;
25350: eb007726 bl 42ff0 <__errno> <== NOT EXECUTED
25354: e3a03016 mov r3, #22 <== NOT EXECUTED
25358: e5803000 str r3, [r0] <== NOT EXECUTED
2535c: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc = -1;
break;
}
return rc;
}
25360: e28dd008 add sp, sp, #8 <== NOT EXECUTED
25364: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED
25368: e28dd008 add sp, sp, #8 <== NOT EXECUTED
2536c: e12fff1e bx lr <== NOT EXECUTED
case F_CLU_NUM:
pos = va_arg(ap, uint32_t );
ret = va_arg(ap, uint32_t *);
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
25370: e5914018 ldr r4, [r1, #24] <== NOT EXECUTED
va_start(ap, cmd);
switch (cmd)
{
case F_CLU_NUM:
pos = va_arg(ap, uint32_t );
25374: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
ret = va_arg(ap, uint32_t *);
25378: e2833008 add r3, r3, #8 <== NOT EXECUTED
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
2537c: e1520004 cmp r2, r4 <== NOT EXECUTED
switch (cmd)
{
case F_CLU_NUM:
pos = va_arg(ap, uint32_t );
ret = va_arg(ap, uint32_t *);
25380: e58d3000 str r3, [sp] <== NOT EXECUTED
25384: e59d401c ldr r4, [sp, #28] <== NOT EXECUTED
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
25388: 2a00001a bcs 253f8 <fat_file_ioctl+0xd4> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
2538c: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
25390: e3530001 cmp r3, #1 <== NOT EXECUTED
25394: 0a000008 beq 253bc <fat_file_ioctl+0x98> <== NOT EXECUTED
return RC_OK;
}
cl_start = pos >> fs_info->vol.bpc_log2;
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
25398: e5dc3008 ldrb r3, [ip, #8] <== NOT EXECUTED
2539c: e1a02332 lsr r2, r2, r3 <== NOT EXECUTED
253a0: e28d3004 add r3, sp, #4 <== NOT EXECUTED
253a4: ebffff53 bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if ( rc != RC_OK )
253a8: e3500000 cmp r0, #0 <== NOT EXECUTED
253ac: 1affffeb bne 25360 <fat_file_ioctl+0x3c> <== NOT EXECUTED
return rc;
*ret = cur_cln;
253b0: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
253b4: e5843000 str r3, [r4] <== NOT EXECUTED
break;
253b8: eaffffe8 b 25360 <fat_file_ioctl+0x3c> <== NOT EXECUTED
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
rtems_set_errno_and_return_minus_one( EIO );
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
253bc: e5913024 ldr r3, [r1, #36] ; 0x24 <== NOT EXECUTED
253c0: e3530000 cmp r3, #0 <== NOT EXECUTED
253c4: 1afffff3 bne 25398 <fat_file_ioctl+0x74> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
253c8: e5dc500a ldrb r5, [ip, #10] <== NOT EXECUTED
253cc: e3150003 tst r5, #3 <== NOT EXECUTED
{
/* cluster 0 (zero) reserved for root dir */
*ret = 0;
253d0: 15843000 strne r3, [r4] <== NOT EXECUTED
253d4: 11a00003 movne r0, r3 <== NOT EXECUTED
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
rtems_set_errno_and_return_minus_one( EIO );
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
253d8: 1affffe0 bne 25360 <fat_file_ioctl+0x3c> <== NOT EXECUTED
return RC_OK;
}
cl_start = pos >> fs_info->vol.bpc_log2;
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
253dc: e5dc3008 ldrb r3, [ip, #8] <== NOT EXECUTED
253e0: e1a02332 lsr r2, r2, r3 <== NOT EXECUTED
253e4: e28d3004 add r3, sp, #4 <== NOT EXECUTED
253e8: ebffff42 bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if ( rc != RC_OK )
253ec: e3500000 cmp r0, #0 <== NOT EXECUTED
253f0: 0affffee beq 253b0 <fat_file_ioctl+0x8c> <== NOT EXECUTED
253f4: eaffffd9 b 25360 <fat_file_ioctl+0x3c> <== NOT EXECUTED
pos = va_arg(ap, uint32_t );
ret = va_arg(ap, uint32_t *);
/* sanity check */
if ( pos >= fat_fd->fat_file_size )
rtems_set_errno_and_return_minus_one( EIO );
253f8: eb0076fc bl 42ff0 <__errno> <== NOT EXECUTED
253fc: e3a03005 mov r3, #5 <== NOT EXECUTED
25400: e5803000 str r3, [r0] <== NOT EXECUTED
25404: e3e00000 mvn r0, #0 <== NOT EXECUTED
25408: eaffffd4 b 25360 <fat_file_ioctl+0x3c> <== NOT EXECUTED
000250f8 <fat_file_lseek>:
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t file_cln,
uint32_t *disk_cln
)
{
250f8: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
int rc = RC_OK;
if (file_cln == fat_fd->map.file_cln)
250fc: e5918034 ldr r8, [r1, #52] ; 0x34 <== NOT EXECUTED
25100: e1580002 cmp r8, r2 <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t file_cln,
uint32_t *disk_cln
)
{
25104: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
25108: e1a05001 mov r5, r1 <== NOT EXECUTED
2510c: e1a06002 mov r6, r2 <== NOT EXECUTED
25110: e1a04000 mov r4, r0 <== NOT EXECUTED
25114: e1a09003 mov r9, r3 <== NOT EXECUTED
int rc = RC_OK;
if (file_cln == fat_fd->map.file_cln)
25118: 0a000020 beq 251a0 <fat_file_lseek+0xa8> <== NOT EXECUTED
uint32_t count;
uint32_t i;
if (file_cln > fat_fd->map.file_cln)
{
cur_cln = fat_fd->map.disk_cln;
2511c: 35911038 ldrcc r1, [r1, #56] ; 0x38 <== NOT EXECUTED
count = file_cln - fat_fd->map.file_cln;
}
else
{
cur_cln = fat_fd->cln;
25120: 2595101c ldrcs r1, [r5, #28] <== NOT EXECUTED
uint32_t i;
if (file_cln > fat_fd->map.file_cln)
{
cur_cln = fat_fd->map.disk_cln;
count = file_cln - fat_fd->map.file_cln;
25124: 30688002 rsbcc r8, r8, r2 <== NOT EXECUTED
}
else
{
cur_cln = fat_fd->cln;
25128: 21a08002 movcs r8, r2 <== NOT EXECUTED
uint32_t count;
uint32_t i;
if (file_cln > fat_fd->map.file_cln)
{
cur_cln = fat_fd->map.disk_cln;
2512c: 358d1000 strcc r1, [sp] <== NOT EXECUTED
count = file_cln - fat_fd->map.file_cln;
}
else
{
cur_cln = fat_fd->cln;
25130: 258d1000 strcs r1, [sp] <== NOT EXECUTED
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
25134: e3580000 cmp r8, #0 <== NOT EXECUTED
25138: 0a000012 beq 25188 <fat_file_lseek+0x90> <== NOT EXECUTED
2513c: e3a07000 mov r7, #0 <== NOT EXECUTED
25140: e1a0a00d mov sl, sp <== NOT EXECUTED
25144: ea000002 b 25154 <fat_file_lseek+0x5c> <== NOT EXECUTED
25148: e1580007 cmp r8, r7 <== NOT EXECUTED
2514c: 9a00000c bls 25184 <fat_file_lseek+0x8c> <== NOT EXECUTED
25150: e59d1000 ldr r1, [sp] <== NOT EXECUTED
{
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
25154: e1a00004 mov r0, r4 <== NOT EXECUTED
25158: e1a0200d mov r2, sp <== NOT EXECUTED
2515c: eb006731 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
25160: e3500000 cmp r0, #0 <== NOT EXECUTED
cur_cln = fat_fd->cln;
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
25164: e2877001 add r7, r7, #1 <== NOT EXECUTED
{
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
if ( rc != RC_OK )
25168: 0afffff6 beq 25148 <fat_file_lseek+0x50> <== NOT EXECUTED
return rc;
2516c: e1a03000 mov r3, r0 <== NOT EXECUTED
25170: e1a04fc3 asr r4, r3, #31 <== NOT EXECUTED
fat_fd->map.disk_cln = cur_cln;
*disk_cln = cur_cln;
}
return RC_OK;
}
25174: e1a01004 mov r1, r4 <== NOT EXECUTED
25178: e1a00003 mov r0, r3 <== NOT EXECUTED
2517c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
25180: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
cur_cln = fat_fd->cln;
count = file_cln;
}
/* skip over the clusters */
for (i = 0; i < count; i++)
25184: e59d1000 ldr r1, [sp] <== NOT EXECUTED
if ( rc != RC_OK )
return rc;
}
/* update cache */
fat_fd->map.file_cln = file_cln;
25188: e5856034 str r6, [r5, #52] ; 0x34 <== NOT EXECUTED
fat_fd->map.disk_cln = cur_cln;
2518c: e5851038 str r1, [r5, #56] ; 0x38 <== NOT EXECUTED
*disk_cln = cur_cln;
25190: e3a03000 mov r3, #0 <== NOT EXECUTED
25194: e5891000 str r1, [r9] <== NOT EXECUTED
25198: e3a04000 mov r4, #0 <== NOT EXECUTED
2519c: eafffff4 b 25174 <fat_file_lseek+0x7c> <== NOT EXECUTED
)
{
int rc = RC_OK;
if (file_cln == fat_fd->map.file_cln)
*disk_cln = fat_fd->map.disk_cln;
251a0: e5913038 ldr r3, [r1, #56] ; 0x38 <== NOT EXECUTED
251a4: e3a04000 mov r4, #0 <== NOT EXECUTED
251a8: e5893000 str r3, [r9] <== NOT EXECUTED
251ac: e3a03000 mov r3, #0 <== NOT EXECUTED
251b0: eaffffef b 25174 <fat_file_lseek+0x7c> <== NOT EXECUTED
000252d4 <fat_file_mark_removed>:
static inline uint32_t
fat_construct_key(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_pos_t *pos)
{
return ( ((fat_cluster_num_to_sector512_num(mt_entry, pos->cln) +
252d4: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
uint32_t cln
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
252d8: e3530001 cmp r3, #1 <== NOT EXECUTED
void
fat_file_mark_removed(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
252dc: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
252e0: e1a04001 mov r4, r1 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
252e4: e5905034 ldr r5, [r0, #52] ; 0x34 <== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
252e8: e5946024 ldr r6, [r4, #36] ; 0x24 <== NOT EXECUTED
252ec: e1a062a6 lsr r6, r6, #5 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
252f0: e1a00004 mov r0, r4 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
252f4: e2066001 and r6, r6, #1 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
252f8: ebff9f6c bl d0b0 <_Chain_Extract> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
252fc: e5953068 ldr r3, [r5, #104] ; 0x68 <== NOT EXECUTED
25300: e1a02086 lsl r2, r6, #1 <== NOT EXECUTED
25304: e0826006 add r6, r2, r6 <== NOT EXECUTED
25308: e0830106 add r0, r3, r6, lsl #2 <== NOT EXECUTED
2530c: e1a01004 mov r1, r4 <== NOT EXECUTED
25310: ebff9f5b bl d084 <_Chain_Append> <== NOT EXECUTED
_hash_delete(fs_info->vhash, key, fat_fd->ino, fat_fd);
_hash_insert(fs_info->rhash, key, fat_fd->ino, fat_fd);
fat_fd->flags |= FAT_FILE_REMOVED;
25314: e5d43030 ldrb r3, [r4, #48] ; 0x30 <== NOT EXECUTED
25318: e3833001 orr r3, r3, #1 <== NOT EXECUTED
2531c: e5c43030 strb r3, [r4, #48] ; 0x30 <== NOT EXECUTED
}
25320: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00025c00 <fat_file_open>:
fat_file_open(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_dir_pos_t *dir_pos,
fat_file_fd_t **fat_fd
)
{
25c00: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
static inline uint32_t
fat_construct_key(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_pos_t *pos)
{
return ( ((fat_cluster_num_to_sector512_num(mt_entry, pos->cln) +
25c04: e5915000 ldr r5, [r1] <== NOT EXECUTED
uint32_t cln
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
25c08: e3550001 cmp r5, #1 <== NOT EXECUTED
25c0c: e1a08001 mov r8, r1 <== NOT EXECUTED
25c10: e1a0a000 mov sl, r0 <== NOT EXECUTED
25c14: e1a09002 mov r9, r2 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25c18: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
25c1c: 0a000007 beq 25c40 <fat_file_open+0x40> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25c20: e3550000 cmp r5, #0 <== NOT EXECUTED
25c24: 0a00005b beq 25d98 <fat_file_open+0x198> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25c28: e5d42005 ldrb r2, [r4, #5] <== NOT EXECUTED
25c2c: e5943030 ldr r3, [r4, #48] ; 0x30 <== NOT EXECUTED
25c30: e2455002 sub r5, r5, #2 <== NOT EXECUTED
25c34: e0835215 add r5, r3, r5, lsl r2 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
return 1;
return (fat_cluster_num_to_sector_num(mt_entry, cln) <<
25c38: e5d43003 ldrb r3, [r4, #3] <== NOT EXECUTED
25c3c: e1a05315 lsl r5, r5, r3 <== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
25c40: e5983004 ldr r3, [r8, #4] <== NOT EXECUTED
static inline uint32_t
fat_construct_key(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_pos_t *pos)
{
return ( ((fat_cluster_num_to_sector512_num(mt_entry, pos->cln) +
25c44: e1a022a3 lsr r2, r3, #5 <== NOT EXECUTED
25c48: e08554a3 add r5, r5, r3, lsr #9 <== NOT EXECUTED
25c4c: e202200f and r2, r2, #15 <== NOT EXECUTED
25c50: e0825205 add r5, r2, r5, lsl #4 <== NOT EXECUTED
uint32_t key2,
fat_file_fd_t **ret
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = ((rtems_chain_control *)((hash) + mod))->first;
25c54: e2053001 and r3, r5, #1 <== NOT EXECUTED
25c58: e1a07083 lsl r7, r3, #1 <== NOT EXECUTED
25c5c: e0877003 add r7, r7, r3 <== NOT EXECUTED
25c60: e594c064 ldr ip, [r4, #100] ; 0x64 <== NOT EXECUTED
25c64: e1a07107 lsl r7, r7, #2 <== NOT EXECUTED
25c68: e79c3007 ldr r3, [ip, r7] <== NOT EXECUTED
25c6c: e08cc007 add ip, ip, r7 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
25c70: e28cc004 add ip, ip, #4 <== NOT EXECUTED
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
25c74: e15c0003 cmp ip, r3 <== NOT EXECUTED
25c78: 1a000003 bne 25c8c <fat_file_open+0x8c> <== NOT EXECUTED
25c7c: ea00001e b 25cfc <fat_file_open+0xfc> <== NOT EXECUTED
{
*ret = (void *)the_node;
return 0;
}
}
the_node = the_node->next;
25c80: e5933000 ldr r3, [r3] <== NOT EXECUTED
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = ((rtems_chain_control *)((hash) + mod))->first;
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
25c84: e15c0003 cmp ip, r3 <== NOT EXECUTED
25c88: 0a00001b beq 25cfc <fat_file_open+0xfc> <== NOT EXECUTED
25c8c: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
uint32_t cln
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
25c90: e3520001 cmp r2, #1 <== NOT EXECUTED
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25c94: e2420002 sub r0, r2, #2 <== NOT EXECUTED
uint32_t cln
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
25c98: 0a00000a beq 25cc8 <fat_file_open+0xc8> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25c9c: e3520000 cmp r2, #0 <== NOT EXECUTED
25ca0: 1a000003 bne 25cb4 <fat_file_open+0xb4> <== NOT EXECUTED
25ca4: e5d4200a ldrb r2, [r4, #10] <== NOT EXECUTED
25ca8: e3120003 tst r2, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
25cac: 1594201c ldrne r2, [r4, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25cb0: 1a000002 bne 25cc0 <fat_file_open+0xc0> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25cb4: e5d41005 ldrb r1, [r4, #5] <== NOT EXECUTED
25cb8: e5942030 ldr r2, [r4, #48] ; 0x30 <== NOT EXECUTED
25cbc: e0822110 add r2, r2, r0, lsl r1 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
return 1;
return (fat_cluster_num_to_sector_num(mt_entry, cln) <<
25cc0: e5d46003 ldrb r6, [r4, #3] <== NOT EXECUTED
25cc4: e1a02612 lsl r2, r2, r6 <== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
25cc8: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
{
fat_file_fd_t *ffd = (fat_file_fd_t *)the_node;
uint32_t ck = fat_construct_key(mt_entry, &ffd->dir_pos.sname);
if ( (key1) == ck)
25ccc: e1a002a1 lsr r0, r1, #5 <== NOT EXECUTED
25cd0: e200000f and r0, r0, #15 <== NOT EXECUTED
25cd4: e08214a1 add r1, r2, r1, lsr #9 <== NOT EXECUTED
25cd8: e0801201 add r1, r0, r1, lsl #4 <== NOT EXECUTED
25cdc: e1550001 cmp r5, r1 <== NOT EXECUTED
25ce0: 1affffe6 bne 25c80 <fat_file_open+0x80> <== NOT EXECUTED
rc = _hash_search(mt_entry, fs_info->vhash, key, 0, &lfat_fd);
if ( rc == RC_OK )
{
/* return pointer to fat_file_descriptor allocated before */
(*fat_fd) = lfat_fd;
lfat_fd->links_num++;
25ce4: e5932008 ldr r2, [r3, #8] <== NOT EXECUTED
25ce8: e2822001 add r2, r2, #1 <== NOT EXECUTED
25cec: e5832008 str r2, [r3, #8] <== NOT EXECUTED
/* access "valid" hash table */
rc = _hash_search(mt_entry, fs_info->vhash, key, 0, &lfat_fd);
if ( rc == RC_OK )
{
/* return pointer to fat_file_descriptor allocated before */
(*fat_fd) = lfat_fd;
25cf0: e5893000 str r3, [r9] <== NOT EXECUTED
lfat_fd->links_num++;
25cf4: e3a00000 mov r0, #0 <== NOT EXECUTED
return rc;
25cf8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
uint32_t key2,
fat_file_fd_t **ret
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = ((rtems_chain_control *)((hash) + mod))->first;
25cfc: e594c068 ldr ip, [r4, #104] ; 0x68 <== NOT EXECUTED
25d00: e79c3007 ldr r3, [ip, r7] <== NOT EXECUTED
25d04: e08cc007 add ip, ip, r7 <== NOT EXECUTED
25d08: e28cc004 add ip, ip, #4 <== NOT EXECUTED
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
25d0c: e153000c cmp r3, ip <== NOT EXECUTED
25d10: 1a000009 bne 25d3c <fat_file_open+0x13c> <== NOT EXECUTED
25d14: e3e0b000 mvn fp, #0 <== NOT EXECUTED
25d18: ea000024 b 25db0 <fat_file_open+0x1b0> <== NOT EXECUTED
fat_file_fd_t *ffd = (fat_file_fd_t *)the_node;
uint32_t ck = fat_construct_key(mt_entry, &ffd->dir_pos.sname);
if ( (key1) == ck)
{
if ( ((key2) == 0) || ((key2) == ffd->ino) )
25d1c: e3550000 cmp r5, #0 <== NOT EXECUTED
25d20: 0a000021 beq 25dac <fat_file_open+0x1ac> <== NOT EXECUTED
25d24: e593200c ldr r2, [r3, #12] <== NOT EXECUTED
25d28: e1550002 cmp r5, r2 <== NOT EXECUTED
25d2c: 0a00001e beq 25dac <fat_file_open+0x1ac> <== NOT EXECUTED
{
*ret = (void *)the_node;
return 0;
}
}
the_node = the_node->next;
25d30: e5933000 ldr r3, [r3] <== NOT EXECUTED
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = ((rtems_chain_control *)((hash) + mod))->first;
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
25d34: e15c0003 cmp ip, r3 <== NOT EXECUTED
25d38: 0afffff5 beq 25d14 <fat_file_open+0x114> <== NOT EXECUTED
static inline uint32_t
fat_construct_key(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_pos_t *pos)
{
return ( ((fat_cluster_num_to_sector512_num(mt_entry, pos->cln) +
25d3c: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
uint32_t cln
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
25d40: e3520001 cmp r2, #1 <== NOT EXECUTED
25d44: 0a00000b beq 25d78 <fat_file_open+0x178> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25d48: e3520000 cmp r2, #0 <== NOT EXECUTED
25d4c: 1a000003 bne 25d60 <fat_file_open+0x160> <== NOT EXECUTED
25d50: e5d4100a ldrb r1, [r4, #10] <== NOT EXECUTED
25d54: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
25d58: 1594201c ldrne r2, [r4, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25d5c: 1a000003 bne 25d70 <fat_file_open+0x170> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25d60: e5d41005 ldrb r1, [r4, #5] <== NOT EXECUTED
25d64: e5940030 ldr r0, [r4, #48] ; 0x30 <== NOT EXECUTED
25d68: e2422002 sub r2, r2, #2 <== NOT EXECUTED
25d6c: e0802112 add r2, r0, r2, lsl r1 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
if (cln == 1)
return 1;
return (fat_cluster_num_to_sector_num(mt_entry, cln) <<
25d70: e5d40003 ldrb r0, [r4, #3] <== NOT EXECUTED
25d74: e1a02012 lsl r2, r2, r0 <== NOT EXECUTED
(pos->ofs >> FAT_SECTOR512_BITS)) << 4) +
25d78: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
{
fat_file_fd_t *ffd = (fat_file_fd_t *)the_node;
uint32_t ck = fat_construct_key(mt_entry, &ffd->dir_pos.sname);
if ( (key1) == ck)
25d7c: e1a002a1 lsr r0, r1, #5 <== NOT EXECUTED
25d80: e200000f and r0, r0, #15 <== NOT EXECUTED
25d84: e08214a1 add r1, r2, r1, lsr #9 <== NOT EXECUTED
25d88: e0801201 add r1, r0, r1, lsl #4 <== NOT EXECUTED
25d8c: e1550001 cmp r5, r1 <== NOT EXECUTED
25d90: 1affffe6 bne 25d30 <fat_file_open+0x130> <== NOT EXECUTED
25d94: eaffffe0 b 25d1c <fat_file_open+0x11c> <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25d98: e5d4300a ldrb r3, [r4, #10] <== NOT EXECUTED
25d9c: e3130003 tst r3, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
25da0: 1594501c ldrne r5, [r4, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25da4: 1affffa3 bne 25c38 <fat_file_open+0x38> <== NOT EXECUTED
25da8: eaffff9e b 25c28 <fat_file_open+0x28> <== NOT EXECUTED
)
{
uint32_t mod = (key1) % FAT_HASH_MODULE;
rtems_chain_node *the_node = ((rtems_chain_control *)((hash) + mod))->first;
for ( ; !rtems_chain_is_tail((hash) + mod, the_node) ; )
25dac: e3a0b000 mov fp, #0 <== NOT EXECUTED
}
/* access "removed-but-still-open" hash table */
rc = _hash_search(mt_entry, fs_info->rhash, key, key, &lfat_fd);
lfat_fd = (*fat_fd) = (fat_file_fd_t*)malloc(sizeof(fat_file_fd_t));
25db0: e3a00044 mov r0, #68 ; 0x44 <== NOT EXECUTED
25db4: ebff89b1 bl 8480 <malloc> <== NOT EXECUTED
if ( lfat_fd == NULL )
25db8: e3500000 cmp r0, #0 <== NOT EXECUTED
}
/* access "removed-but-still-open" hash table */
rc = _hash_search(mt_entry, fs_info->rhash, key, key, &lfat_fd);
lfat_fd = (*fat_fd) = (fat_file_fd_t*)malloc(sizeof(fat_file_fd_t));
25dbc: e1a06000 mov r6, r0 <== NOT EXECUTED
25dc0: e5890000 str r0, [r9] <== NOT EXECUTED
if ( lfat_fd == NULL )
25dc4: 0a000021 beq 25e50 <fat_file_open+0x250> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
memset(lfat_fd, 0, sizeof(fat_file_fd_t));
25dc8: e3a01000 mov r1, #0 <== NOT EXECUTED
25dcc: e3a02044 mov r2, #68 ; 0x44 <== NOT EXECUTED
25dd0: eb0081bd bl 464cc <memset> <== NOT EXECUTED
lfat_fd->links_num = 1;
lfat_fd->flags &= ~FAT_FILE_REMOVED;
25dd4: e5d6c030 ldrb ip, [r6, #48] ; 0x30 <== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
lfat_fd->dir_pos = *dir_pos;
25dd8: e898000f ldm r8, {r0, r1, r2, r3} <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
memset(lfat_fd, 0, sizeof(fat_file_fd_t));
lfat_fd->links_num = 1;
lfat_fd->flags &= ~FAT_FILE_REMOVED;
25ddc: e3cce001 bic lr, ip, #1 <== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
lfat_fd->dir_pos = *dir_pos;
25de0: e286c020 add ip, r6, #32 <== NOT EXECUTED
if ( rc != RC_OK )
25de4: e35b0000 cmp fp, #0 <== NOT EXECUTED
memset(lfat_fd, 0, sizeof(fat_file_fd_t));
lfat_fd->links_num = 1;
lfat_fd->flags &= ~FAT_FILE_REMOVED;
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
25de8: e3e08000 mvn r8, #0 <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
25dec: e88c000f stm ip, {r0, r1, r2, r3} <== NOT EXECUTED
if ( lfat_fd == NULL )
rtems_set_errno_and_return_minus_one( ENOMEM );
memset(lfat_fd, 0, sizeof(fat_file_fd_t));
lfat_fd->links_num = 1;
25df0: e3a03001 mov r3, #1 <== NOT EXECUTED
25df4: e5863008 str r3, [r6, #8] <== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
25df8: e5c6e030 strb lr, [r6, #48] ; 0x30 <== NOT EXECUTED
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
25dfc: e586803c str r8, [r6, #60] ; 0x3c <== NOT EXECUTED
lfat_fd->dir_pos = *dir_pos;
if ( rc != RC_OK )
lfat_fd->ino = key;
25e00: 1586500c strne r5, [r6, #12] <== NOT EXECUTED
lfat_fd->flags &= ~FAT_FILE_REMOVED;
lfat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
lfat_fd->dir_pos = *dir_pos;
if ( rc != RC_OK )
25e04: 0a000005 beq 25e20 <fat_file_open+0x220> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
25e08: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
25e0c: e1a01006 mov r1, r6 <== NOT EXECUTED
25e10: e0800007 add r0, r0, r7 <== NOT EXECUTED
25e14: ebff9c9a bl d084 <_Chain_Append> <== NOT EXECUTED
25e18: e3a00000 mov r0, #0 <== NOT EXECUTED
* other fields of fat-file descriptor will be initialized on upper
* level
*/
return RC_OK;
}
25e1c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if ( rc != RC_OK )
lfat_fd->ino = key;
else
{
lfat_fd->ino = fat_get_unique_ino(mt_entry);
25e20: e1a0000a mov r0, sl <== NOT EXECUTED
25e24: eb00001e bl 25ea4 <fat_get_unique_ino> <== NOT EXECUTED
if ( lfat_fd->ino == 0 )
25e28: e3500000 cmp r0, #0 <== NOT EXECUTED
if ( rc != RC_OK )
lfat_fd->ino = key;
else
{
lfat_fd->ino = fat_get_unique_ino(mt_entry);
25e2c: e586000c str r0, [r6, #12] <== NOT EXECUTED
if ( lfat_fd->ino == 0 )
25e30: 1afffff4 bne 25e08 <fat_file_open+0x208> <== NOT EXECUTED
{
free((*fat_fd));
25e34: e5990000 ldr r0, [r9] <== NOT EXECUTED
25e38: ebff87cc bl 7d70 <free> <== NOT EXECUTED
/*
* XXX: kernel resource is unsufficient, but not the memory,
* but there is no suitable errno :(
*/
rtems_set_errno_and_return_minus_one( ENOMEM );
25e3c: eb00746b bl 42ff0 <__errno> <== NOT EXECUTED
25e40: e3a0300c mov r3, #12 <== NOT EXECUTED
25e44: e5803000 str r3, [r0] <== NOT EXECUTED
25e48: e1a00008 mov r0, r8 <== NOT EXECUTED
25e4c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/* access "removed-but-still-open" hash table */
rc = _hash_search(mt_entry, fs_info->rhash, key, key, &lfat_fd);
lfat_fd = (*fat_fd) = (fat_file_fd_t*)malloc(sizeof(fat_file_fd_t));
if ( lfat_fd == NULL )
rtems_set_errno_and_return_minus_one( ENOMEM );
25e50: eb007466 bl 42ff0 <__errno> <== NOT EXECUTED
25e54: e3a0300c mov r3, #12 <== NOT EXECUTED
25e58: e5803000 str r3, [r0] <== NOT EXECUTED
25e5c: e3e00000 mvn r0, #0 <== NOT EXECUTED
25e60: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0002594c <fat_file_read>:
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
uint8_t *buf
)
{
2594c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
/* it couldn't be removed - otherwise cache update will be broken */
if (count == 0)
25950: e2535000 subs r5, r3, #0 <== NOT EXECUTED
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
uint8_t *buf
)
{
25954: e24dd014 sub sp, sp, #20 <== NOT EXECUTED
25958: e1a06000 mov r6, r0 <== NOT EXECUTED
2595c: e1a0a001 mov sl, r1 <== NOT EXECUTED
25960: e1a04002 mov r4, r2 <== NOT EXECUTED
int rc = RC_OK;
ssize_t ret = 0;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25964: e5907034 ldr r7, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
/* it couldn't be removed - otherwise cache update will be broken */
if (count == 0)
25968: 0a00004d beq 25aa4 <fat_file_read+0x158> <== NOT EXECUTED
/*
* >= because start is offset and computed from 0 and file_size
* computed from 1
*/
if ( start >= fat_fd->fat_file_size )
2596c: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
25970: e1530002 cmp r3, r2 <== NOT EXECUTED
25974: 9a00004a bls 25aa4 <fat_file_read+0x158> <== NOT EXECUTED
return FAT_EOF;
if ((count > fat_fd->fat_file_size) ||
25978: e1550003 cmp r5, r3 <== NOT EXECUTED
2597c: 9a00004b bls 25ab0 <fat_file_read+0x164> <== NOT EXECUTED
(start > fat_fd->fat_file_size - count))
count = fat_fd->fat_file_size - start;
25980: e0645003 rsb r5, r4, r3 <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
25984: e59a3020 ldr r3, [sl, #32] <== NOT EXECUTED
25988: e3530001 cmp r3, #1 <== NOT EXECUTED
{
int rc = RC_OK;
ssize_t ret = 0;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cmpltd = 0;
uint32_t cur_cln = 0;
2598c: e3a03000 mov r3, #0 <== NOT EXECUTED
25990: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
if ((count > fat_fd->fat_file_size) ||
(start > fat_fd->fat_file_size - count))
count = fat_fd->fat_file_size - start;
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
25994: 0a000049 beq 25ac0 <fat_file_read+0x174> <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
25998: e5d73008 ldrb r3, [r7, #8] <== NOT EXECUTED
2599c: e1a03334 lsr r3, r4, r3 <== NOT EXECUTED
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
259a0: e28db010 add fp, sp, #16 <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
259a4: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
259a8: e1a02003 mov r2, r3 <== NOT EXECUTED
259ac: e1a00006 mov r0, r6 <== NOT EXECUTED
259b0: e1a0100a mov r1, sl <== NOT EXECUTED
259b4: e1a0300b mov r3, fp <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
259b8: e1d790b6 ldrh r9, [r7, #6] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
259bc: ebfffdcd bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if (rc != RC_OK)
259c0: e2508000 subs r8, r0, #0 <== NOT EXECUTED
259c4: 11a00008 movne r0, r8 <== NOT EXECUTED
259c8: 1a000036 bne 25aa8 <fat_file_read+0x15c> <== NOT EXECUTED
return rc;
while (count > 0)
259cc: e3550000 cmp r5, #0 <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
259d0: e2499001 sub r9, r9, #1 <== NOT EXECUTED
259d4: e0049009 and r9, r4, r9 <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
259d8: 01a00005 moveq r0, r5 <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
259dc: e58d9008 str r9, [sp, #8] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
259e0: 01a08000 moveq r8, r0 <== NOT EXECUTED
259e4: 01a09000 moveq r9, r0 <== NOT EXECUTED
259e8: 0a000051 beq 25b34 <fat_file_read+0x1e8> <== NOT EXECUTED
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
259ec: e5d79002 ldrb r9, [r7, #2] <== NOT EXECUTED
259f0: e1d720b0 ldrh r2, [r7] <== NOT EXECUTED
259f4: e58da00c str sl, [sp, #12] <== NOT EXECUTED
259f8: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
259fc: e59da038 ldr sl, [sp, #56] ; 0x38 <== NOT EXECUTED
25a00: ea000003 b 25a14 <fat_file_read+0xc8> <== NOT EXECUTED
return rc;
while (count > 0)
25a04: e0555004 subs r5, r5, r4 <== NOT EXECUTED
25a08: 0a000047 beq 25b2c <fat_file_read+0x1e0> <== NOT EXECUTED
25a0c: e5d79002 ldrb r9, [r7, #2] <== NOT EXECUTED
25a10: e1d720b0 ldrh r2, [r7] <== NOT EXECUTED
{
c = MIN(count, (fs_info->vol.bpc - ofs));
25a14: e1d740b6 ldrh r4, [r7, #6] <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
25a18: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
if (rc != RC_OK)
return rc;
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
25a1c: e0614004 rsb r4, r1, r4 <== NOT EXECUTED
25a20: e1540005 cmp r4, r5 <== NOT EXECUTED
25a24: 21a04005 movcs r4, r5 <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25a28: e3500000 cmp r0, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
25a2c: e5963034 ldr r3, [r6, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25a30: e2400002 sub r0, r0, #2 <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25a34: 1a000003 bne 25a48 <fat_file_read+0xfc> <== NOT EXECUTED
25a38: e5d3c00a ldrb ip, [r3, #10] <== NOT EXECUTED
25a3c: e31c0003 tst ip, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
25a40: 1593e01c ldrne lr, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25a44: 1a000002 bne 25a54 <fat_file_read+0x108> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25a48: e593c030 ldr ip, [r3, #48] ; 0x30 <== NOT EXECUTED
25a4c: e5d3e005 ldrb lr, [r3, #5] <== NOT EXECUTED
25a50: e08cee10 add lr, ip, r0, lsl lr <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_read(mt_entry, sec, byte, c, buf + cmpltd);
25a54: e2422001 sub r2, r2, #1 <== NOT EXECUTED
25a58: e0022001 and r2, r2, r1 <== NOT EXECUTED
25a5c: e08ac008 add ip, sl, r8 <== NOT EXECUTED
25a60: e1a03004 mov r3, r4 <== NOT EXECUTED
25a64: e1a00006 mov r0, r6 <== NOT EXECUTED
25a68: e08e1931 add r1, lr, r1, lsr r9 <== NOT EXECUTED
25a6c: e58dc000 str ip, [sp] <== NOT EXECUTED
25a70: eb0002f4 bl 26648 <_fat_block_read> <== NOT EXECUTED
if ( ret < 0 )
25a74: e3500000 cmp r0, #0 <== NOT EXECUTED
return -1;
count -= c;
cmpltd += c;
25a78: e0888004 add r8, r8, r4 <== NOT EXECUTED
save_cln = cur_cln;
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
25a7c: e1a0200b mov r2, fp <== NOT EXECUTED
25a80: e1a00006 mov r0, r6 <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_read(mt_entry, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
25a84: ba000026 blt 25b24 <fat_file_read+0x1d8> <== NOT EXECUTED
return -1;
count -= c;
cmpltd += c;
save_cln = cur_cln;
25a88: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
25a8c: e1a01009 mov r1, r9 <== NOT EXECUTED
25a90: eb0064e4 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
25a94: e2501000 subs r1, r0, #0 <== NOT EXECUTED
25a98: 0affffd9 beq 25a04 <fat_file_read+0xb8> <== NOT EXECUTED
25a9c: e1a00001 mov r0, r1 <== NOT EXECUTED
25aa0: ea000000 b 25aa8 <fat_file_read+0x15c> <== NOT EXECUTED
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
25aa4: e3a00000 mov r0, #0 <== NOT EXECUTED
}
25aa8: e28dd014 add sp, sp, #20 <== NOT EXECUTED
25aac: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* computed from 1
*/
if ( start >= fat_fd->fat_file_size )
return FAT_EOF;
if ((count > fat_fd->fat_file_size) ||
25ab0: e0652003 rsb r2, r5, r3 <== NOT EXECUTED
25ab4: e1540002 cmp r4, r2 <== NOT EXECUTED
25ab8: 9affffb1 bls 25984 <fat_file_read+0x38> <== NOT EXECUTED
25abc: eaffffaf b 25980 <fat_file_read+0x34> <== NOT EXECUTED
(start > fat_fd->fat_file_size - count))
count = fat_fd->fat_file_size - start;
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
25ac0: e59a3024 ldr r3, [sl, #36] ; 0x24 <== NOT EXECUTED
25ac4: e3530000 cmp r3, #0 <== NOT EXECUTED
25ac8: 1affffb2 bne 25998 <fat_file_read+0x4c> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
25acc: e5d7300a ldrb r3, [r7, #10] <== NOT EXECUTED
25ad0: e3130003 tst r3, #3 <== NOT EXECUTED
25ad4: 0affffaf beq 25998 <fat_file_read+0x4c> <== NOT EXECUTED
{
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->cln);
25ad8: e59a301c ldr r3, [sl, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25adc: e3530000 cmp r3, #0 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25ae0: 15d71005 ldrbne r1, [r7, #5] <== NOT EXECUTED
25ae4: 15972030 ldrne r2, [r7, #48] ; 0x30 <== NOT EXECUTED
25ae8: 12433002 subne r3, r3, #2 <== NOT EXECUTED
25aec: 10823113 addne r3, r2, r3, lsl r1 <== NOT EXECUTED
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_read(mt_entry, sec, byte, count, buf);
25af0: e1d720b0 ldrh r2, [r7] <== NOT EXECUTED
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
return fs_info->vol.rdir_loc;
25af4: 0597301c ldreq r3, [r7, #28] <== NOT EXECUTED
25af8: e5d71002 ldrb r1, [r7, #2] <== NOT EXECUTED
25afc: e59dc038 ldr ip, [sp, #56] ; 0x38 <== NOT EXECUTED
25b00: e2422001 sub r2, r2, #1 <== NOT EXECUTED
25b04: e0831134 add r1, r3, r4, lsr r1 <== NOT EXECUTED
25b08: e0042002 and r2, r4, r2 <== NOT EXECUTED
25b0c: e1a00006 mov r0, r6 <== NOT EXECUTED
25b10: e1a03005 mov r3, r5 <== NOT EXECUTED
25b14: e58dc000 str ip, [sp] <== NOT EXECUTED
25b18: eb0002ca bl 26648 <_fat_block_read> <== NOT EXECUTED
if ( ret < 0 )
25b1c: e3500000 cmp r0, #0 <== NOT EXECUTED
25b20: aaffffe0 bge 25aa8 <fat_file_read+0x15c> <== NOT EXECUTED
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
25b24: e3e00000 mvn r0, #0 <== NOT EXECUTED
25b28: eaffffde b 25aa8 <fat_file_read+0x15c> <== NOT EXECUTED
25b2c: e59da00c ldr sl, [sp, #12] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
25b30: e1a00008 mov r0, r8 <== NOT EXECUTED
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
25b34: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
25b38: e5d73008 ldrb r3, [r7, #8] <== NOT EXECUTED
25b3c: e2424001 sub r4, r2, #1 <== NOT EXECUTED
25b40: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
25b44: e0848008 add r8, r4, r8 <== NOT EXECUTED
25b48: e08c8338 add r8, ip, r8, lsr r3 <== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
25b4c: e58a9038 str r9, [sl, #56] ; 0x38 <== NOT EXECUTED
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
25b50: e58a8034 str r8, [sl, #52] ; 0x34 <== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
25b54: eaffffd3 b 25aa8 <fat_file_read+0x15c> <== NOT EXECUTED
00025018 <fat_file_reopen>:
* RC_OK
*/
int
fat_file_reopen(fat_file_fd_t *fat_fd)
{
fat_fd->links_num++;
25018: e5903008 ldr r3, [r0, #8] <== NOT EXECUTED
2501c: e2833001 add r3, r3, #1 <== NOT EXECUTED
25020: e5803008 str r3, [r0, #8] <== NOT EXECUTED
return RC_OK;
}
25024: e3a00000 mov r0, #0 <== NOT EXECUTED
25028: e12fff1e bx lr <== NOT EXECUTED
0002502c <fat_file_size>:
int
fat_file_size(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
2502c: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
uint32_t save_cln = 0;
/* Have we requested root dir size for FAT12/16? */
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
25030: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
25034: e3530001 cmp r3, #1 <== NOT EXECUTED
int
fat_file_size(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
25038: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
2503c: e1a05001 mov r5, r1 <== NOT EXECUTED
25040: e1a08000 mov r8, r0 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25044: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t cur_cln = fat_fd->cln;
25048: e591601c ldr r6, [r1, #28] <== NOT EXECUTED
uint32_t save_cln = 0;
/* Have we requested root dir size for FAT12/16? */
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
2504c: 0a000020 beq 250d4 <fat_file_size+0xa8> <== NOT EXECUTED
{
fat_fd->fat_file_size = fs_info->vol.rdir_size;
return rc;
}
fat_fd->fat_file_size = 0;
25050: e3a03000 mov r3, #0 <== NOT EXECUTED
25054: e5853018 str r3, [r5, #24] <== NOT EXECUTED
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
25058: e284100c add r1, r4, #12 <== NOT EXECUTED
2505c: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
25060: e0061001 and r1, r6, r1 <== NOT EXECUTED
25064: e1510002 cmp r1, r2 <== NOT EXECUTED
25068: 2a000015 bcs 250c4 <fat_file_size+0x98> <== NOT EXECUTED
fat_file_fd_t *fat_fd
)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
2506c: e28d7004 add r7, sp, #4 <== NOT EXECUTED
25070: e5276004 str r6, [r7, #-4]! <== NOT EXECUTED
25074: ea00000a b 250a4 <fat_file_size+0x78> <== NOT EXECUTED
save_cln = cur_cln;
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
if ( rc != RC_OK )
return rc;
fat_fd->fat_file_size += fs_info->vol.bpc;
25078: e5952018 ldr r2, [r5, #24] <== NOT EXECUTED
2507c: e1d430b6 ldrh r3, [r4, #6] <== NOT EXECUTED
25080: e0823003 add r3, r2, r3 <== NOT EXECUTED
25084: e5853018 str r3, [r5, #24] <== NOT EXECUTED
return rc;
}
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
25088: e59d3000 ldr r3, [sp] <== NOT EXECUTED
2508c: e284100c add r1, r4, #12 <== NOT EXECUTED
25090: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
25094: e0031001 and r1, r3, r1 <== NOT EXECUTED
25098: e1510002 cmp r1, r2 <== NOT EXECUTED
2509c: 2a000009 bcs 250c8 <fat_file_size+0x9c> <== NOT EXECUTED
250a0: e1a06003 mov r6, r3 <== NOT EXECUTED
{
save_cln = cur_cln;
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
250a4: e1a01006 mov r1, r6 <== NOT EXECUTED
250a8: e1a00008 mov r0, r8 <== NOT EXECUTED
250ac: e1a0200d mov r2, sp <== NOT EXECUTED
250b0: eb00675c bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
250b4: e3500000 cmp r0, #0 <== NOT EXECUTED
250b8: 0affffee beq 25078 <fat_file_size+0x4c> <== NOT EXECUTED
fat_fd->fat_file_size += fs_info->vol.bpc;
}
fat_fd->map.last_cln = save_cln;
return rc;
}
250bc: e28dd004 add sp, sp, #4 <== NOT EXECUTED
250c0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
return rc;
}
fat_fd->fat_file_size = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
250c4: e1a06003 mov r6, r3 <== NOT EXECUTED
if ( rc != RC_OK )
return rc;
fat_fd->fat_file_size += fs_info->vol.bpc;
}
fat_fd->map.last_cln = save_cln;
250c8: e585603c str r6, [r5, #60] ; 0x3c <== NOT EXECUTED
250cc: e3a00000 mov r0, #0 <== NOT EXECUTED
return rc;
250d0: eafffff9 b 250bc <fat_file_size+0x90> <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = fat_fd->cln;
uint32_t save_cln = 0;
/* Have we requested root dir size for FAT12/16? */
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
250d4: e5910024 ldr r0, [r1, #36] ; 0x24 <== NOT EXECUTED
250d8: e3500000 cmp r0, #0 <== NOT EXECUTED
250dc: 1affffdb bne 25050 <fat_file_size+0x24> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
250e0: e5d4300a ldrb r3, [r4, #10] <== NOT EXECUTED
250e4: e3130003 tst r3, #3 <== NOT EXECUTED
250e8: 0affffd8 beq 25050 <fat_file_size+0x24> <== NOT EXECUTED
{
fat_fd->fat_file_size = fs_info->vol.rdir_size;
250ec: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
250f0: e5813018 str r3, [r1, #24] <== NOT EXECUTED
return rc;
250f4: eafffff0 b 250bc <fat_file_size+0x90> <== NOT EXECUTED
0002540c <fat_file_truncate>:
fat_file_truncate(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t new_length
)
{
2540c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
uint32_t cur_cln = 0;
uint32_t cl_start = 0;
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
if ( new_length >= fat_fd->fat_file_size )
25410: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
25414: e1530002 cmp r3, r2 <== NOT EXECUTED
fat_file_truncate(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
uint32_t new_length
)
{
25418: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
2541c: e1a05001 mov r5, r1 <== NOT EXECUTED
25420: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25424: e590c034 ldr ip, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t cur_cln = 0;
uint32_t cl_start = 0;
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
if ( new_length >= fat_fd->fat_file_size )
25428: 9a00002d bls 254e4 <fat_file_truncate+0xd8> <== NOT EXECUTED
uint32_t new_length
)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = 0;
2542c: e3a06000 mov r6, #0 <== NOT EXECUTED
25430: e58d6004 str r6, [sp, #4] <== NOT EXECUTED
if ( new_length >= fat_fd->fat_file_size )
return rc;
assert(fat_fd->fat_file_size);
25434: e3530000 cmp r3, #0 <== NOT EXECUTED
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = 0;
uint32_t cl_start = 0;
uint32_t new_last_cln = FAT_UNDEFINED_VALUE;
25438: e3e06000 mvn r6, #0 <== NOT EXECUTED
2543c: e58d6000 str r6, [sp] <== NOT EXECUTED
if ( new_length >= fat_fd->fat_file_size )
return rc;
assert(fat_fd->fat_file_size);
25440: 0a00002a beq 254f0 <fat_file_truncate+0xe4> <== NOT EXECUTED
cl_start = (new_length + fs_info->vol.bpc - 1) >> fs_info->vol.bpc_log2;
25444: e1dc60b6 ldrh r6, [ip, #6] <== NOT EXECUTED
25448: e5dcc008 ldrb ip, [ip, #8] <== NOT EXECUTED
2544c: e2466001 sub r6, r6, #1 <== NOT EXECUTED
25450: e0866002 add r6, r6, r2 <== NOT EXECUTED
25454: e1a06c36 lsr r6, r6, ip <== NOT EXECUTED
if ((cl_start << fs_info->vol.bpc_log2) >= fat_fd->fat_file_size)
25458: e1530c16 cmp r3, r6, lsl ip <== NOT EXECUTED
2545c: 9a000020 bls 254e4 <fat_file_truncate+0xd8> <== NOT EXECUTED
return RC_OK;
if (cl_start != 0)
25460: e3560000 cmp r6, #0 <== NOT EXECUTED
25464: 0a000004 beq 2547c <fat_file_truncate+0x70> <== NOT EXECUTED
{
rc = fat_file_lseek(mt_entry, fat_fd, cl_start - 1, &new_last_cln);
25468: e2462001 sub r2, r6, #1 <== NOT EXECUTED
2546c: e1a0300d mov r3, sp <== NOT EXECUTED
25470: ebffff20 bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if (rc != RC_OK)
25474: e3500000 cmp r0, #0 <== NOT EXECUTED
25478: 1a00001a bne 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
return rc;
}
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
2547c: e1a00004 mov r0, r4 <== NOT EXECUTED
25480: e1a01005 mov r1, r5 <== NOT EXECUTED
25484: e1a02006 mov r2, r6 <== NOT EXECUTED
25488: e28d3004 add r3, sp, #4 <== NOT EXECUTED
2548c: ebffff19 bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if (rc != RC_OK)
25490: e3500000 cmp r0, #0 <== NOT EXECUTED
25494: 1a000013 bne 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
return rc;
rc = fat_free_fat_clusters_chain(mt_entry, cur_cln);
25498: e1a00004 mov r0, r4 <== NOT EXECUTED
2549c: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
254a0: eb0066c1 bl 3efac <fat_free_fat_clusters_chain> <== NOT EXECUTED
if (rc != RC_OK)
254a4: e3500000 cmp r0, #0 <== NOT EXECUTED
254a8: 1a00000e bne 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
return rc;
if (cl_start != 0)
254ac: e3560000 cmp r6, #0 <== NOT EXECUTED
254b0: 0a00000c beq 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
{
rc = fat_set_fat_cluster(mt_entry, new_last_cln, FAT_GENFAT_EOC);
254b4: e1a00004 mov r0, r4 <== NOT EXECUTED
254b8: e59d1000 ldr r1, [sp] <== NOT EXECUTED
254bc: e3e02000 mvn r2, #0 <== NOT EXECUTED
254c0: eb0065b7 bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
254c4: e3500000 cmp r0, #0 <== NOT EXECUTED
254c8: 1a000006 bne 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
return rc;
fat_fd->map.file_cln = cl_start - 1;
fat_fd->map.disk_cln = new_last_cln;
254cc: e59d3000 ldr r3, [sp] <== NOT EXECUTED
if (cl_start != 0)
{
rc = fat_set_fat_cluster(mt_entry, new_last_cln, FAT_GENFAT_EOC);
if ( rc != RC_OK )
return rc;
fat_fd->map.file_cln = cl_start - 1;
254d0: e2466001 sub r6, r6, #1 <== NOT EXECUTED
fat_fd->map.disk_cln = new_last_cln;
fat_fd->map.last_cln = new_last_cln;
254d4: e585303c str r3, [r5, #60] ; 0x3c <== NOT EXECUTED
if (cl_start != 0)
{
rc = fat_set_fat_cluster(mt_entry, new_last_cln, FAT_GENFAT_EOC);
if ( rc != RC_OK )
return rc;
fat_fd->map.file_cln = cl_start - 1;
254d8: e5856034 str r6, [r5, #52] ; 0x34 <== NOT EXECUTED
fat_fd->map.disk_cln = new_last_cln;
254dc: e5853038 str r3, [r5, #56] ; 0x38 <== NOT EXECUTED
254e0: ea000000 b 254e8 <fat_file_truncate+0xdc> <== NOT EXECUTED
fat_fd->map.last_cln = new_last_cln;
254e4: e3a00000 mov r0, #0 <== NOT EXECUTED
}
return RC_OK;
}
254e8: e28dd008 add sp, sp, #8 <== NOT EXECUTED
254ec: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
if ( new_length >= fat_fd->fat_file_size )
return rc;
assert(fat_fd->fat_file_size);
254f0: e3a01f9b mov r1, #620 ; 0x26c <== NOT EXECUTED
254f4: e2811001 add r1, r1, #1 <== NOT EXECUTED
254f8: e59f0008 ldr r0, [pc, #8] ; 25508 <fat_file_truncate+0xfc> <== NOT EXECUTED
254fc: e59f2008 ldr r2, [pc, #8] ; 2550c <fat_file_truncate+0x100><== NOT EXECUTED
25500: e59f3008 ldr r3, [pc, #8] ; 25510 <fat_file_truncate+0x104><== NOT EXECUTED
25504: eb000d06 bl 28924 <__assert_func> <== NOT EXECUTED
000256f4 <fat_file_write>:
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
const uint8_t *buf
)
{
256f4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
uint32_t save_ofs;
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
if ( count == 0 )
256f8: e2534000 subs r4, r3, #0 <== NOT EXECUTED
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
const uint8_t *buf
)
{
256fc: e1a05000 mov r5, r0 <== NOT EXECUTED
int rc = 0;
ssize_t ret = 0;
fat_fs_info_t *fs_info = mt_entry->fs_info;
25700: e5906034 ldr r6, [r0, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd,
uint32_t start,
uint32_t count,
const uint8_t *buf
)
{
25704: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
25708: e1a08002 mov r8, r2 <== NOT EXECUTED
2570c: e1a07001 mov r7, r1 <== NOT EXECUTED
uint32_t save_ofs;
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
if ( count == 0 )
25710: 01a00004 moveq r0, r4 <== NOT EXECUTED
25714: 0a00005a beq 25884 <fat_file_write+0x190> <== NOT EXECUTED
return cmpltd;
if ( start > fat_fd->fat_file_size )
25718: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
2571c: e1530002 cmp r3, r2 <== NOT EXECUTED
{
int rc = 0;
ssize_t ret = 0;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cmpltd = 0;
uint32_t cur_cln = 0;
25720: e3a03000 mov r3, #0 <== NOT EXECUTED
uint32_t cl_start = 0;
uint32_t ofs = 0;
uint32_t save_ofs;
uint32_t sec = 0;
uint32_t byte = 0;
uint32_t c = 0;
25724: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
{
int rc = 0;
ssize_t ret = 0;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cmpltd = 0;
uint32_t cur_cln = 0;
25728: e58d3014 str r3, [sp, #20] <== NOT EXECUTED
uint32_t c = 0;
if ( count == 0 )
return cmpltd;
if ( start > fat_fd->fat_file_size )
2572c: 3a000076 bcc 2590c <fat_file_write+0x218> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
if ((count > fat_fd->size_limit) ||
25730: e5913014 ldr r3, [r1, #20] <== NOT EXECUTED
25734: e1540003 cmp r4, r3 <== NOT EXECUTED
25738: 8a000073 bhi 2590c <fat_file_write+0x218> <== NOT EXECUTED
2573c: e0643003 rsb r3, r4, r3 <== NOT EXECUTED
25740: e1520003 cmp r2, r3 <== NOT EXECUTED
25744: 8a000070 bhi 2590c <fat_file_write+0x218> <== NOT EXECUTED
(start > fat_fd->size_limit - count))
rtems_set_errno_and_return_minus_one( EIO );
rc = fat_file_extend(mt_entry, fat_fd, start + count, &c);
25748: e084a002 add sl, r4, r2 <== NOT EXECUTED
2574c: e1a0200a mov r2, sl <== NOT EXECUTED
25750: e28d3010 add r3, sp, #16 <== NOT EXECUTED
25754: ebffff6e bl 25514 <fat_file_extend> <== NOT EXECUTED
if (rc != RC_OK)
25758: e3500000 cmp r0, #0 <== NOT EXECUTED
2575c: 1a000048 bne 25884 <fat_file_write+0x190> <== NOT EXECUTED
/*
* check whether there was enough room on device to locate
* file of 'start + count' bytes
*/
if (c != (start + count))
25760: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
25764: e15a0003 cmp sl, r3 <== NOT EXECUTED
count = c - start;
25768: 10684003 rsbne r4, r8, r3 <== NOT EXECUTED
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
2576c: e5973020 ldr r3, [r7, #32] <== NOT EXECUTED
25770: e3530001 cmp r3, #1 <== NOT EXECUTED
25774: 0a000044 beq 2588c <fat_file_write+0x198> <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
25778: e5d63008 ldrb r3, [r6, #8] <== NOT EXECUTED
2577c: e1a03338 lsr r3, r8, r3 <== NOT EXECUTED
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
25780: e28db014 add fp, sp, #20 <== NOT EXECUTED
return -1;
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
25784: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
25788: e1a02003 mov r2, r3 <== NOT EXECUTED
2578c: e1a00005 mov r0, r5 <== NOT EXECUTED
25790: e1a01007 mov r1, r7 <== NOT EXECUTED
25794: e1a0300b mov r3, fp <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
25798: e1d6a0b6 ldrh sl, [r6, #6] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
2579c: ebfffe55 bl 250f8 <fat_file_lseek> <== NOT EXECUTED
if (rc != RC_OK)
257a0: e3500000 cmp r0, #0 <== NOT EXECUTED
257a4: 1a000036 bne 25884 <fat_file_write+0x190> <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
257a8: e24aa001 sub sl, sl, #1 <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
257ac: e3540000 cmp r4, #0 <== NOT EXECUTED
return ret;
}
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
257b0: e008a00a and sl, r8, sl <== NOT EXECUTED
257b4: e58da008 str sl, [sp, #8] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
257b8: 01a09000 moveq r9, r0 <== NOT EXECUTED
257bc: 01a08000 moveq r8, r0 <== NOT EXECUTED
257c0: 0a000058 beq 25928 <fat_file_write+0x234> <== NOT EXECUTED
cl_start = start >> fs_info->vol.bpc_log2;
save_ofs = ofs = start & (fs_info->vol.bpc - 1);
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
257c4: e5d69002 ldrb r9, [r6, #2] <== NOT EXECUTED
257c8: e1d620b0 ldrh r2, [r6] <== NOT EXECUTED
257cc: e1a08000 mov r8, r0 <== NOT EXECUTED
257d0: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
257d4: e58d700c str r7, [sp, #12] <== NOT EXECUTED
257d8: e59da03c ldr sl, [sp, #60] ; 0x3c <== NOT EXECUTED
257dc: ea000004 b 257f4 <fat_file_write+0x100> <== NOT EXECUTED
return rc;
while (count > 0)
257e0: e0544007 subs r4, r4, r7 <== NOT EXECUTED
ret = _fat_block_write(mt_entry, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
return -1;
count -= c;
cmpltd += c;
257e4: e0888007 add r8, r8, r7 <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
257e8: 0a00004c beq 25920 <fat_file_write+0x22c> <== NOT EXECUTED
257ec: e5d69002 ldrb r9, [r6, #2] <== NOT EXECUTED
257f0: e1d620b0 ldrh r2, [r6] <== NOT EXECUTED
{
c = MIN(count, (fs_info->vol.bpc - ofs));
257f4: e1d6c0b6 ldrh ip, [r6, #6] <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
257f8: e59d0014 ldr r0, [sp, #20] <== NOT EXECUTED
if (rc != RC_OK)
return rc;
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
257fc: e061c00c rsb ip, r1, ip <== NOT EXECUTED
25800: e15c0004 cmp ip, r4 <== NOT EXECUTED
25804: 21a0c004 movcs ip, r4 <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25808: e3500000 cmp r0, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
2580c: e5953034 ldr r3, [r5, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25810: e2400002 sub r0, r0, #2 <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25814: 1a000003 bne 25828 <fat_file_write+0x134> <== NOT EXECUTED
25818: e5d3e00a ldrb lr, [r3, #10] <== NOT EXECUTED
2581c: e31e0003 tst lr, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
25820: 1593701c ldrne r7, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
25824: 1a000002 bne 25834 <fat_file_write+0x140> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
25828: e593e030 ldr lr, [r3, #48] ; 0x30 <== NOT EXECUTED
2582c: e5d37005 ldrb r7, [r3, #5] <== NOT EXECUTED
25830: e08e7710 add r7, lr, r0, lsl r7 <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(mt_entry, sec, byte, c, buf + cmpltd);
25834: e2422001 sub r2, r2, #1 <== NOT EXECUTED
25838: e0022001 and r2, r2, r1 <== NOT EXECUTED
2583c: e08ae008 add lr, sl, r8 <== NOT EXECUTED
25840: e1a0300c mov r3, ip <== NOT EXECUTED
25844: e1a00005 mov r0, r5 <== NOT EXECUTED
25848: e0871931 add r1, r7, r1, lsr r9 <== NOT EXECUTED
2584c: e58de000 str lr, [sp] <== NOT EXECUTED
if (rc != RC_OK)
return rc;
while (count > 0)
{
c = MIN(count, (fs_info->vol.bpc - ofs));
25850: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(mt_entry, sec, byte, c, buf + cmpltd);
25854: eb0002ae bl 26314 <_fat_block_write> <== NOT EXECUTED
if ( ret < 0 )
25858: e3500000 cmp r0, #0 <== NOT EXECUTED
return -1;
count -= c;
cmpltd += c;
save_cln = cur_cln;
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
2585c: e1a0200b mov r2, fp <== NOT EXECUTED
25860: e1a00005 mov r0, r5 <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, cur_cln);
sec += (ofs >> fs_info->vol.sec_log2);
byte = ofs & (fs_info->vol.bps - 1);
ret = _fat_block_write(mt_entry, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
25864: ba000026 blt 25904 <fat_file_write+0x210> <== NOT EXECUTED
return -1;
count -= c;
cmpltd += c;
save_cln = cur_cln;
25868: e59d9014 ldr r9, [sp, #20] <== NOT EXECUTED
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
2586c: e1a01009 mov r1, r9 <== NOT EXECUTED
ret = _fat_block_write(mt_entry, sec, byte, c, buf + cmpltd);
if ( ret < 0 )
return -1;
count -= c;
25870: e59d7010 ldr r7, [sp, #16] <== NOT EXECUTED
cmpltd += c;
save_cln = cur_cln;
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
25874: eb00656b bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
25878: e2501000 subs r1, r0, #0 <== NOT EXECUTED
2587c: 0affffd7 beq 257e0 <fat_file_write+0xec> <== NOT EXECUTED
25880: e1a00001 mov r0, r1 <== NOT EXECUTED
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
}
25884: e28dd018 add sp, sp, #24 <== NOT EXECUTED
25888: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* file of 'start + count' bytes
*/
if (c != (start + count))
count = c - start;
if ((FAT_FD_OF_ROOT_DIR(fat_fd)) &&
2588c: e5973024 ldr r3, [r7, #36] ; 0x24 <== NOT EXECUTED
25890: e3530000 cmp r3, #0 <== NOT EXECUTED
25894: 1affffb7 bne 25778 <fat_file_write+0x84> <== NOT EXECUTED
(fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)))
25898: e5d6300a ldrb r3, [r6, #10] <== NOT EXECUTED
2589c: e3130003 tst r3, #3 <== NOT EXECUTED
258a0: 0affffb4 beq 25778 <fat_file_write+0x84> <== NOT EXECUTED
{
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->cln);
258a4: e597201c ldr r2, [r7, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
258a8: e3520000 cmp r2, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
258ac: e5953034 ldr r3, [r5, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
258b0: 1a000003 bne 258c4 <fat_file_write+0x1d0> <== NOT EXECUTED
258b4: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
258b8: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
258bc: 1593301c ldrne r3, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
258c0: 1a000003 bne 258d4 <fat_file_write+0x1e0> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
258c4: e5931030 ldr r1, [r3, #48] ; 0x30 <== NOT EXECUTED
258c8: e5d33005 ldrb r3, [r3, #5] <== NOT EXECUTED
258cc: e2422002 sub r2, r2, #2 <== NOT EXECUTED
258d0: e0813312 add r3, r1, r2, lsl r3 <== NOT EXECUTED
sec += (start >> fs_info->vol.sec_log2);
byte = start & (fs_info->vol.bps - 1);
ret = _fat_block_write(mt_entry, sec, byte, count, buf);
258d4: e1d620b0 ldrh r2, [r6] <== NOT EXECUTED
258d8: e5d61002 ldrb r1, [r6, #2] <== NOT EXECUTED
258dc: e59dc03c ldr ip, [sp, #60] ; 0x3c <== NOT EXECUTED
258e0: e2422001 sub r2, r2, #1 <== NOT EXECUTED
258e4: e0831138 add r1, r3, r8, lsr r1 <== NOT EXECUTED
258e8: e0082002 and r2, r8, r2 <== NOT EXECUTED
258ec: e1a00005 mov r0, r5 <== NOT EXECUTED
258f0: e1a03004 mov r3, r4 <== NOT EXECUTED
258f4: e58dc000 str ip, [sp] <== NOT EXECUTED
258f8: eb000285 bl 26314 <_fat_block_write> <== NOT EXECUTED
if ( ret < 0 )
258fc: e3500000 cmp r0, #0 <== NOT EXECUTED
25900: aaffffdf bge 25884 <fat_file_write+0x190> <== NOT EXECUTED
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
25904: e3e00000 mvn r0, #0 <== NOT EXECUTED
25908: eaffffdd b 25884 <fat_file_write+0x190> <== NOT EXECUTED
if ( start > fat_fd->fat_file_size )
rtems_set_errno_and_return_minus_one( EIO );
if ((count > fat_fd->size_limit) ||
(start > fat_fd->size_limit - count))
rtems_set_errno_and_return_minus_one( EIO );
2590c: eb0075b7 bl 42ff0 <__errno> <== NOT EXECUTED
25910: e3a03005 mov r3, #5 <== NOT EXECUTED
25914: e5803000 str r3, [r0] <== NOT EXECUTED
25918: e3e00000 mvn r0, #0 <== NOT EXECUTED
2591c: eaffffd8 b 25884 <fat_file_write+0x190> <== NOT EXECUTED
25920: e59d700c ldr r7, [sp, #12] <== NOT EXECUTED
rc = fat_file_lseek(mt_entry, fat_fd, cl_start, &cur_cln);
if (rc != RC_OK)
return rc;
while (count > 0)
25924: e1a00008 mov r0, r8 <== NOT EXECUTED
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
25928: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
2592c: e2412001 sub r2, r1, #1 <== NOT EXECUTED
25930: e5d63008 ldrb r3, [r6, #8] <== NOT EXECUTED
25934: e0828008 add r8, r2, r8 <== NOT EXECUTED
25938: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
2593c: e0828338 add r8, r2, r8, lsr r3 <== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
25940: e5879038 str r9, [r7, #56] ; 0x38 <== NOT EXECUTED
ofs = 0;
}
/* update cache */
/* XXX: check this - I'm not sure :( */
fat_fd->map.file_cln = cl_start +
25944: e5878034 str r8, [r7, #52] ; 0x34 <== NOT EXECUTED
((save_ofs + cmpltd - 1) >> fs_info->vol.bpc_log2);
fat_fd->map.disk_cln = save_cln;
return cmpltd;
25948: eaffffcd b 25884 <fat_file_write+0x190> <== NOT EXECUTED
0003efac <fat_free_fat_clusters_chain>:
int
fat_free_fat_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t chain
)
{
3efac: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
int rc = RC_OK, rc1 = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
3efb0: e5905034 ldr r5, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3efb4: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
3efb8: e5952010 ldr r2, [r5, #16] <== NOT EXECUTED
3efbc: e0013003 and r3, r1, r3 <== NOT EXECUTED
)
{
int rc = RC_OK, rc1 = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
3efc0: e3a07000 mov r7, #0 <== NOT EXECUTED
int
fat_free_fat_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t chain
)
{
3efc4: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3efc8: e1520003 cmp r2, r3 <== NOT EXECUTED
int
fat_free_fat_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t chain
)
{
3efcc: e1a06000 mov r6, r0 <== NOT EXECUTED
3efd0: e1a09001 mov r9, r1 <== NOT EXECUTED
int rc = RC_OK, rc1 = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
3efd4: e58d7000 str r7, [sp] <== NOT EXECUTED
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3efd8: 91a08007 movls r8, r7 <== NOT EXECUTED
3efdc: 9a00001d bls 3f058 <fat_free_fat_clusters_chain+0xac> <== NOT EXECUTED
3efe0: e1a04001 mov r4, r1 <== NOT EXECUTED
3efe4: e1a08007 mov r8, r7 <== NOT EXECUTED
3efe8: e1a0a00d mov sl, sp <== NOT EXECUTED
3efec: ea000009 b 3f018 <fat_free_fat_clusters_chain+0x6c> <== NOT EXECUTED
fat_buf_release(fs_info);
return rc;
}
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
3eff0: ebfffeeb bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
rc1 = rc;
freed_cls_cnt++;
cur_cln = next_cln;
3eff4: e59d4000 ldr r4, [sp] <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3eff8: e285200c add r2, r5, #12 <== NOT EXECUTED
3effc: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
fat_buf_release(fs_info);
return rc;
}
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
if ( rc != RC_OK )
3f000: e3500000 cmp r0, #0 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3f004: e0042002 and r2, r4, r2 <== NOT EXECUTED
fat_buf_release(fs_info);
return rc;
}
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
if ( rc != RC_OK )
3f008: 11a08000 movne r8, r0 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3f00c: e1520003 cmp r2, r3 <== NOT EXECUTED
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
if ( rc != RC_OK )
rc1 = rc;
freed_cls_cnt++;
3f010: e2877001 add r7, r7, #1 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = chain;
uint32_t next_cln = 0;
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
3f014: 2a00000f bcs 3f058 <fat_free_fat_clusters_chain+0xac> <== NOT EXECUTED
{
rc = fat_get_fat_cluster(mt_entry, cur_cln, &next_cln);
3f018: e1a01004 mov r1, r4 <== NOT EXECUTED
3f01c: e1a0200d mov r2, sp <== NOT EXECUTED
3f020: e1a00006 mov r0, r6 <== NOT EXECUTED
3f024: ebffff7f bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
fat_buf_release(fs_info);
return rc;
}
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
3f028: e1a01004 mov r1, r4 <== NOT EXECUTED
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
rc = fat_get_fat_cluster(mt_entry, cur_cln, &next_cln);
if ( rc != RC_OK )
3f02c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
fat_buf_release(fs_info);
return rc;
}
rc = fat_set_fat_cluster(mt_entry, cur_cln, FAT_GENFAT_FREE);
3f030: e1a02004 mov r2, r4 <== NOT EXECUTED
3f034: e1a00006 mov r0, r6 <== NOT EXECUTED
uint32_t freed_cls_cnt = 0;
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
rc = fat_get_fat_cluster(mt_entry, cur_cln, &next_cln);
if ( rc != RC_OK )
3f038: 0affffec beq 3eff0 <fat_free_fat_clusters_chain+0x44> <== NOT EXECUTED
{
if(fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
3f03c: e5953040 ldr r3, [r5, #64] ; 0x40 <== NOT EXECUTED
3f040: e3730001 cmn r3, #1 <== NOT EXECUTED
fs_info->vol.free_cls += freed_cls_cnt;
3f044: 10873003 addne r3, r7, r3 <== NOT EXECUTED
3f048: 15853040 strne r3, [r5, #64] ; 0x40 <== NOT EXECUTED
fat_buf_release(fs_info);
3f04c: e1a00005 mov r0, r5 <== NOT EXECUTED
3f050: ebff9bce bl 25f90 <fat_buf_release> <== NOT EXECUTED
return rc;
3f054: ea000007 b 3f078 <fat_free_fat_clusters_chain+0xcc> <== NOT EXECUTED
freed_cls_cnt++;
cur_cln = next_cln;
}
fs_info->vol.next_cl = chain;
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
3f058: e5953040 ldr r3, [r5, #64] ; 0x40 <== NOT EXECUTED
3f05c: e3730001 cmn r3, #1 <== NOT EXECUTED
fs_info->vol.free_cls += freed_cls_cnt;
3f060: 10873003 addne r3, r7, r3 <== NOT EXECUTED
freed_cls_cnt++;
cur_cln = next_cln;
}
fs_info->vol.next_cl = chain;
3f064: e5859044 str r9, [r5, #68] ; 0x44 <== NOT EXECUTED
if (fs_info->vol.free_cls != FAT_UNDEFINED_VALUE)
fs_info->vol.free_cls += freed_cls_cnt;
3f068: 15853040 strne r3, [r5, #64] ; 0x40 <== NOT EXECUTED
fat_buf_release(fs_info);
3f06c: e1a00005 mov r0, r5 <== NOT EXECUTED
3f070: ebff9bc6 bl 25f90 <fat_buf_release> <== NOT EXECUTED
3f074: e1a04008 mov r4, r8 <== NOT EXECUTED
if (rc1 != RC_OK)
return rc1;
return RC_OK;
}
3f078: e1a00004 mov r0, r4 <== NOT EXECUTED
3f07c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3f080: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
00025e64 <fat_free_unique_ino>:
fat_free_unique_ino(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t ino
)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
25e64: e5903034 ldr r3, [r0, #52] ; 0x34 <== NOT EXECUTED
FAT_SET_UNIQ_INO_FREE((ino - fs_info->uino_base), fs_info->uino);
25e68: e5932078 ldr r2, [r3, #120] ; 0x78 <== NOT EXECUTED
25e6c: e593306c ldr r3, [r3, #108] ; 0x6c <== NOT EXECUTED
25e70: e0622001 rsb r2, r2, r1 <== NOT EXECUTED
25e74: e7d301a2 ldrb r0, [r3, r2, lsr #3] <== NOT EXECUTED
25e78: e2021007 and r1, r2, #7 <== NOT EXECUTED
25e7c: e3a0c001 mov ip, #1 <== NOT EXECUTED
25e80: e1c0111c bic r1, r0, ip, lsl r1 <== NOT EXECUTED
25e84: e7c311a2 strb r1, [r3, r2, lsr #3] <== NOT EXECUTED
}
25e88: e12fff1e bx lr <== NOT EXECUTED
0003ee28 <fat_get_fat_cluster>:
fat_get_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t *ret_val
)
{
3ee28: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
int rc = RC_OK;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
rtems_bdbuf_buffer *block0 = NULL;
3ee2c: e3a03000 mov r3, #0 <== NOT EXECUTED
fat_get_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t *ret_val
)
{
3ee30: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_bdbuf_buffer *block0 = NULL;
uint32_t sec = 0;
uint32_t ofs = 0;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
3ee34: e3510001 cmp r1, #1 <== NOT EXECUTED
fat_get_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t *ret_val
)
{
3ee38: e1a05001 mov r5, r1 <== NOT EXECUTED
int rc = RC_OK;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
rtems_bdbuf_buffer *block0 = NULL;
3ee3c: e58d3000 str r3, [sp] <== NOT EXECUTED
fat_get_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t *ret_val
)
{
3ee40: e1a0a002 mov sl, r2 <== NOT EXECUTED
int rc = RC_OK;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
3ee44: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
rtems_bdbuf_buffer *block0 = NULL;
uint32_t sec = 0;
uint32_t ofs = 0;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
3ee48: 9a000021 bls 3eed4 <fat_get_fat_cluster+0xac> <== NOT EXECUTED
3ee4c: e5943034 ldr r3, [r4, #52] ; 0x34 <== NOT EXECUTED
3ee50: e2833001 add r3, r3, #1 <== NOT EXECUTED
3ee54: e1510003 cmp r1, r3 <== NOT EXECUTED
3ee58: 8a00001d bhi 3eed4 <fat_get_fat_cluster+0xac> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
3ee5c: e5d4300a ldrb r3, [r4, #10] <== NOT EXECUTED
3ee60: e3130001 tst r3, #1 <== NOT EXECUTED
3ee64: 1a000020 bne 3eeec <fat_get_fat_cluster+0xc4> <== NOT EXECUTED
3ee68: e3130002 tst r3, #2 <== NOT EXECUTED
3ee6c: 15d48002 ldrbne r8, [r4, #2] <== NOT EXECUTED
3ee70: 1594304c ldrne r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3ee74: 05d48002 ldrbeq r8, [r4, #2] <== NOT EXECUTED
3ee78: 0594304c ldreq r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3ee7c: 11a06081 lslne r6, r1, #1 <== NOT EXECUTED
3ee80: 01a06101 lsleq r6, r1, #2 <== NOT EXECUTED
3ee84: 10838836 addne r8, r3, r6, lsr r8 <== NOT EXECUTED
3ee88: 00838836 addeq r8, r3, r6, lsr r8 <== NOT EXECUTED
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3ee8c: e1a00004 mov r0, r4 <== NOT EXECUTED
3ee90: e1a01008 mov r1, r8 <== NOT EXECUTED
3ee94: e3a02001 mov r2, #1 <== NOT EXECUTED
3ee98: e1a0300d mov r3, sp <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3ee9c: e1d490b0 ldrh r9, [r4] <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3eea0: ebff9c95 bl 260fc <fat_buf_access> <== NOT EXECUTED
if (rc != RC_OK)
3eea4: e3500000 cmp r0, #0 <== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3eea8: e1a0700d mov r7, sp <== NOT EXECUTED
if (rc != RC_OK)
3eeac: 1a00000c bne 3eee4 <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
switch ( fs_info->vol.type )
3eeb0: e5d4200a ldrb r2, [r4, #10] <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3eeb4: e2499001 sub r9, r9, #1 <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
3eeb8: e3520002 cmp r2, #2 <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3eebc: e0066009 and r6, r6, r9 <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
3eec0: 0a00000e beq 3ef00 <fat_get_fat_cluster+0xd8> <== NOT EXECUTED
3eec4: e3520004 cmp r2, #4 <== NOT EXECUTED
3eec8: 0a000025 beq 3ef64 <fat_get_fat_cluster+0x13c> <== NOT EXECUTED
3eecc: e3520001 cmp r2, #1 <== NOT EXECUTED
3eed0: 0a00000f beq 3ef14 <fat_get_fat_cluster+0xec> <== NOT EXECUTED
*ret_val = *((uint32_t *)(block0->buffer + ofs));
*ret_val = CF_LE_L(*ret_val);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
3eed4: eb001045 bl 42ff0 <__errno> <== NOT EXECUTED
3eed8: e3a03005 mov r3, #5 <== NOT EXECUTED
3eedc: e5803000 str r3, [r0] <== NOT EXECUTED
3eee0: e3e00000 mvn r0, #0 <== NOT EXECUTED
break;
}
return RC_OK;
}
3eee4: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3eee8: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
3eeec: e5d48002 ldrb r8, [r4, #2] <== NOT EXECUTED
3eef0: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3eef4: e08160a1 add r6, r1, r1, lsr #1 <== NOT EXECUTED
3eef8: e0838836 add r8, r3, r6, lsr r8 <== NOT EXECUTED
3eefc: eaffffe2 b 3ee8c <fat_get_fat_cluster+0x64> <== NOT EXECUTED
*ret_val = (*ret_val) & FAT_FAT12_MASK;
break;
case FAT_FAT16:
*ret_val = *((uint16_t *)(block0->buffer + ofs));
*ret_val = CF_LE_W(*ret_val);
3ef00: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ef04: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ef08: e19330b6 ldrh r3, [r3, r6] <== NOT EXECUTED
3ef0c: e58a3000 str r3, [sl] <== NOT EXECUTED
break;
3ef10: eafffff3 b 3eee4 <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
case FAT_FAT12:
/*
* we are enforced in complex computations for FAT12 to escape CPU
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
3ef14: e59d3000 ldr r3, [sp] <== NOT EXECUTED
if ( ofs == (fs_info->vol.bps - 1) )
3ef18: e1d400b0 ldrh r0, [r4] <== NOT EXECUTED
case FAT_FAT12:
/*
* we are enforced in complex computations for FAT12 to escape CPU
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
3ef1c: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
if ( ofs == (fs_info->vol.bps - 1) )
3ef20: e2400001 sub r0, r0, #1 <== NOT EXECUTED
case FAT_FAT12:
/*
* we are enforced in complex computations for FAT12 to escape CPU
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
3ef24: e7d13006 ldrb r3, [r1, r6] <== NOT EXECUTED
if ( ofs == (fs_info->vol.bps - 1) )
3ef28: e1500006 cmp r0, r6 <== NOT EXECUTED
case FAT_FAT12:
/*
* we are enforced in complex computations for FAT12 to escape CPU
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
3ef2c: e58a3000 str r3, [sl] <== NOT EXECUTED
if ( ofs == (fs_info->vol.bps - 1) )
3ef30: 0a000010 beq 3ef78 <fat_get_fat_cluster+0x150> <== NOT EXECUTED
*ret_val |= (*((uint8_t *)(block0->buffer)))<<8;
}
else
{
*ret_val |= (*((uint8_t *)(block0->buffer + ofs + 1)))<<8;
3ef34: e0816006 add r6, r1, r6 <== NOT EXECUTED
3ef38: e5d62001 ldrb r2, [r6, #1] <== NOT EXECUTED
3ef3c: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
3ef40: e58a3000 str r3, [sl] <== NOT EXECUTED
}
if ( FAT_CLUSTER_IS_ODD(cln) )
3ef44: e2150001 ands r0, r5, #1 <== NOT EXECUTED
*ret_val = (*ret_val) >> FAT12_SHIFT;
else
*ret_val = (*ret_val) & FAT_FAT12_MASK;
3ef48: 01a03a03 lsleq r3, r3, #20 <== NOT EXECUTED
{
*ret_val |= (*((uint8_t *)(block0->buffer + ofs + 1)))<<8;
}
if ( FAT_CLUSTER_IS_ODD(cln) )
*ret_val = (*ret_val) >> FAT12_SHIFT;
3ef4c: 11a03223 lsrne r3, r3, #4 <== NOT EXECUTED
else
*ret_val = (*ret_val) & FAT_FAT12_MASK;
3ef50: 01a03a23 lsreq r3, r3, #20 <== NOT EXECUTED
{
*ret_val |= (*((uint8_t *)(block0->buffer + ofs + 1)))<<8;
}
if ( FAT_CLUSTER_IS_ODD(cln) )
*ret_val = (*ret_val) >> FAT12_SHIFT;
3ef54: 158a3000 strne r3, [sl] <== NOT EXECUTED
3ef58: 13a00000 movne r0, #0 <== NOT EXECUTED
else
*ret_val = (*ret_val) & FAT_FAT12_MASK;
3ef5c: 058a3000 streq r3, [sl] <== NOT EXECUTED
3ef60: eaffffdf b 3eee4 <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
*ret_val = CF_LE_W(*ret_val);
break;
case FAT_FAT32:
*ret_val = *((uint32_t *)(block0->buffer + ofs));
*ret_val = CF_LE_L(*ret_val);
3ef64: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ef68: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ef6c: e7933006 ldr r3, [r3, r6] <== NOT EXECUTED
3ef70: e58a3000 str r3, [sl] <== NOT EXECUTED
break;
3ef74: eaffffda b 3eee4 <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
* align problems for some architectures
*/
*ret_val = (*((uint8_t *)(block0->buffer + ofs)));
if ( ofs == (fs_info->vol.bps - 1) )
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
3ef78: e1a00004 mov r0, r4 <== NOT EXECUTED
3ef7c: e2881001 add r1, r8, #1 <== NOT EXECUTED
3ef80: e1a0300d mov r3, sp <== NOT EXECUTED
3ef84: ebff9c5c bl 260fc <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
3ef88: e3500000 cmp r0, #0 <== NOT EXECUTED
3ef8c: 1affffd4 bne 3eee4 <fat_get_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
*ret_val |= (*((uint8_t *)(block0->buffer)))<<8;
3ef90: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ef94: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ef98: e5d32000 ldrb r2, [r3] <== NOT EXECUTED
3ef9c: e59a3000 ldr r3, [sl] <== NOT EXECUTED
3efa0: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
3efa4: e58a3000 str r3, [sl] <== NOT EXECUTED
3efa8: eaffffe5 b 3ef44 <fat_get_fat_cluster+0x11c> <== NOT EXECUTED
00025ea4 <fat_get_unique_ino>:
* 0 means FAILED !!!
*
*/
uint32_t
fat_get_unique_ino(rtems_filesystem_mount_table_entry_t *mt_entry)
{
25ea4: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
register fat_fs_info_t *fs_info = mt_entry->fs_info;
25ea8: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
25eac: e5941074 ldr r1, [r4, #116] ; 0x74 <== NOT EXECUTED
for (j = 0; j < fs_info->uino_pool_size; j++)
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
25eb0: e3a05000 mov r5, #0 <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
25eb4: e3510000 cmp r1, #0 <== NOT EXECUTED
25eb8: e1a02001 mov r2, r1 <== NOT EXECUTED
25ebc: 0a000019 beq 25f28 <fat_get_unique_ino+0x84> <== NOT EXECUTED
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
25ec0: e284006c add r0, r4, #108 ; 0x6c <== NOT EXECUTED
25ec4: e8900009 ldm r0, {r0, r3} <== NOT EXECUTED
25ec8: e7d061a3 ldrb r6, [r0, r3, lsr #3] <== NOT EXECUTED
25ecc: e203c007 and ip, r3, #7 <== NOT EXECUTED
25ed0: e1a02c56 asr r2, r6, ip <== NOT EXECUTED
25ed4: e3120001 tst r2, #1 <== NOT EXECUTED
25ed8: e08071a3 add r7, r0, r3, lsr #3 <== NOT EXECUTED
25edc: 0a00001b beq 25f50 <fat_get_unique_ino+0xac> <== NOT EXECUTED
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
25ee0: e3a02000 mov r2, #0 <== NOT EXECUTED
25ee4: ea000006 b 25f04 <fat_get_unique_ino+0x60> <== NOT EXECUTED
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
25ee8: e5943070 ldr r3, [r4, #112] ; 0x70 <== NOT EXECUTED
25eec: e7d061a3 ldrb r6, [r0, r3, lsr #3] <== NOT EXECUTED
25ef0: e203c007 and ip, r3, #7 <== NOT EXECUTED
25ef4: e1a07c56 asr r7, r6, ip <== NOT EXECUTED
25ef8: e3170001 tst r7, #1 <== NOT EXECUTED
25efc: e08071a3 add r7, r0, r3, lsr #3 <== NOT EXECUTED
25f00: 0a000012 beq 25f50 <fat_get_unique_ino+0xac> <== NOT EXECUTED
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
}
fs_info->index++;
25f04: e2833001 add r3, r3, #1 <== NOT EXECUTED
if (fs_info->index >= fs_info->uino_pool_size)
fs_info->index = 0;
25f08: e1510003 cmp r1, r3 <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
25f0c: e2822001 add r2, r2, #1 <== NOT EXECUTED
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
}
fs_info->index++;
if (fs_info->index >= fs_info->uino_pool_size)
fs_info->index = 0;
25f10: 81a0c003 movhi ip, r3 <== NOT EXECUTED
25f14: 91a0c005 movls ip, r5 <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
25f18: e1520001 cmp r2, r1 <== NOT EXECUTED
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
return (fs_info->uino_base + fs_info->index);
}
fs_info->index++;
if (fs_info->index >= fs_info->uino_pool_size)
fs_info->index = 0;
25f1c: e584c070 str ip, [r4, #112] ; 0x70 <== NOT EXECUTED
uint32_t j = 0;
bool resrc_unsuff = false;
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
25f20: 3afffff0 bcc 25ee8 <fat_get_unique_ino+0x44> <== NOT EXECUTED
25f24: e1a02001 mov r2, r1 <== 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))
25f28: e5943078 ldr r3, [r4, #120] ; 0x78 <== NOT EXECUTED
25f2c: e26336ff rsb r3, r3, #267386880 ; 0xff00000 <== NOT EXECUTED
25f30: e2833aff add r3, r3, #1044480 ; 0xff000 <== NOT EXECUTED
25f34: e2833eff add r3, r3, #4080 ; 0xff0 <== NOT EXECUTED
25f38: e1a01082 lsl r1, r2, #1 <== NOT EXECUTED
25f3c: e283300f add r3, r3, #15 <== NOT EXECUTED
25f40: e1510003 cmp r1, r3 <== NOT EXECUTED
25f44: 3a000008 bcc 25f6c <fat_get_unique_ino+0xc8> <== NOT EXECUTED
while (!resrc_unsuff)
{
for (j = 0; j < fs_info->uino_pool_size; j++)
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
25f48: e3a00000 mov r0, #0 <== NOT EXECUTED
}
else
resrc_unsuff = true;
}
return 0;
}
25f4c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
{
for (j = 0; j < fs_info->uino_pool_size; j++)
{
if (!FAT_UNIQ_INO_IS_BUSY(fs_info->index, fs_info->uino))
{
FAT_SET_UNIQ_INO_BUSY(fs_info->index, fs_info->uino);
25f50: e3a03001 mov r3, #1 <== NOT EXECUTED
25f54: e186cc13 orr ip, r6, r3, lsl ip <== NOT EXECUTED
25f58: e5c7c000 strb ip, [r7] <== NOT EXECUTED
return (fs_info->uino_base + fs_info->index);
25f5c: e5943078 ldr r3, [r4, #120] ; 0x78 <== NOT EXECUTED
25f60: e5940070 ldr r0, [r4, #112] ; 0x70 <== NOT EXECUTED
25f64: e0800003 add r0, r0, r3 <== NOT EXECUTED
25f68: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
fs_info->index = 0;
}
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
{
fs_info->uino_pool_size <<= 1;
25f6c: e5841074 str r1, [r4, #116] ; 0x74 <== NOT EXECUTED
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
25f70: e594006c ldr r0, [r4, #108] ; 0x6c <== NOT EXECUTED
25f74: ebff8cd1 bl 92c0 <realloc> <== NOT EXECUTED
if (fs_info->uino != NULL)
25f78: e3500000 cmp r0, #0 <== NOT EXECUTED
}
if ((fs_info->uino_pool_size << 1) < (0x0FFFFFFF - fs_info->uino_base))
{
fs_info->uino_pool_size <<= 1;
fs_info->uino = realloc(fs_info->uino, fs_info->uino_pool_size);
25f7c: e584006c str r0, [r4, #108] ; 0x6c <== NOT EXECUTED
if (fs_info->uino != NULL)
25f80: 0afffff0 beq 25f48 <fat_get_unique_ino+0xa4> <== NOT EXECUTED
fs_info->index = fs_info->uino_pool_size;
25f84: e5941074 ldr r1, [r4, #116] ; 0x74 <== NOT EXECUTED
25f88: e5841070 str r1, [r4, #112] ; 0x70 <== NOT EXECUTED
25f8c: eaffffc8 b 25eb4 <fat_get_unique_ino+0x10> <== NOT EXECUTED
00026598 <fat_init_clusters_chain>:
int
fat_init_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t start_cln
)
{
26598: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
int rc = RC_OK;
ssize_t ret = 0;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
2659c: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
int
fat_init_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t start_cln
)
{
265a0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
int rc = RC_OK;
ssize_t ret = 0;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = start_cln;
265a4: e58d1000 str r1, [sp] <== NOT EXECUTED
int
fat_init_clusters_chain(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t start_cln
)
{
265a8: e1a05000 mov r5, r0 <== NOT EXECUTED
ssize_t ret = 0;
register fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = start_cln;
char *buf;
buf = calloc(fs_info->vol.bpc, sizeof(char));
265ac: e3a01001 mov r1, #1 <== NOT EXECUTED
265b0: e1d400b6 ldrh r0, [r4, #6] <== NOT EXECUTED
265b4: ebff8469 bl 7760 <calloc> <== NOT EXECUTED
if ( buf == NULL )
265b8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
{
free(buf);
return -1;
}
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
265bc: 11a0700d movne r7, sp <== NOT EXECUTED
register fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cur_cln = start_cln;
char *buf;
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
265c0: 0a00001b beq 26634 <fat_init_clusters_chain+0x9c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
265c4: e59d3000 ldr r3, [sp] <== NOT EXECUTED
265c8: e594e00c ldr lr, [r4, #12] <== NOT EXECUTED
265cc: e594c010 ldr ip, [r4, #16] <== NOT EXECUTED
{
ret = fat_cluster_write(mt_entry, cur_cln, buf);
265d0: e1a01003 mov r1, r3 <== NOT EXECUTED
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
rtems_set_errno_and_return_minus_one( EIO );
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
265d4: e003300e and r3, r3, lr <== NOT EXECUTED
265d8: e153000c cmp r3, ip <== NOT EXECUTED
{
ret = fat_cluster_write(mt_entry, cur_cln, buf);
265dc: e1a02006 mov r2, r6 <== NOT EXECUTED
265e0: e1a00005 mov r0, r5 <== NOT EXECUTED
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
rtems_set_errno_and_return_minus_one( EIO );
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
265e4: 2a00000e bcs 26624 <fat_init_clusters_chain+0x8c> <== NOT EXECUTED
{
ret = fat_cluster_write(mt_entry, cur_cln, buf);
265e8: ebffffd4 bl 26540 <fat_cluster_write> <== NOT EXECUTED
265ec: e1a08000 mov r8, r0 <== NOT EXECUTED
if ( ret == -1 )
265f0: e3780001 cmn r8, #1 <== NOT EXECUTED
{
free(buf);
return -1;
}
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
265f4: e1a0200d mov r2, sp <== NOT EXECUTED
265f8: e1a00005 mov r0, r5 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
while ((cur_cln & fs_info->vol.mask) < fs_info->vol.eoc_val)
{
ret = fat_cluster_write(mt_entry, cur_cln, buf);
if ( ret == -1 )
265fc: 0a000003 beq 26610 <fat_init_clusters_chain+0x78> <== NOT EXECUTED
{
free(buf);
return -1;
}
rc = fat_get_fat_cluster(mt_entry, cur_cln, &cur_cln);
26600: e59d1000 ldr r1, [sp] <== NOT EXECUTED
26604: eb006207 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
26608: e2508000 subs r8, r0, #0 <== NOT EXECUTED
2660c: 0affffec beq 265c4 <fat_init_clusters_chain+0x2c> <== NOT EXECUTED
{
free(buf);
26610: e1a00006 mov r0, r6 <== NOT EXECUTED
26614: ebff85d5 bl 7d70 <free> <== NOT EXECUTED
}
}
free(buf);
return rc;
}
26618: e1a00008 mov r0, r8 <== NOT EXECUTED
2661c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
26620: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
free(buf);
return rc;
}
}
free(buf);
26624: e1a00006 mov r0, r6 <== NOT EXECUTED
26628: ebff85d0 bl 7d70 <free> <== NOT EXECUTED
2662c: e3a08000 mov r8, #0 <== NOT EXECUTED
return rc;
26630: eafffff8 b 26618 <fat_init_clusters_chain+0x80> <== NOT EXECUTED
uint32_t cur_cln = start_cln;
char *buf;
buf = calloc(fs_info->vol.bpc, sizeof(char));
if ( buf == NULL )
rtems_set_errno_and_return_minus_one( EIO );
26634: eb00726d bl 42ff0 <__errno> <== NOT EXECUTED
26638: e3a03005 mov r3, #5 <== NOT EXECUTED
2663c: e5803000 str r3, [r0] <== NOT EXECUTED
26640: e3e08000 mvn r8, #0 <== NOT EXECUTED
26644: eafffff3 b 26618 <fat_init_clusters_chain+0x80> <== NOT EXECUTED
000266e4 <fat_init_volume_info>:
* RC_OK on success, or -1 if error occured
* and errno set appropriately
*/
int
fat_init_volume_info(rtems_filesystem_mount_table_entry_t *mt_entry)
{
266e4: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
266e8: e24dd0b8 sub sp, sp, #184 ; 0xb8 <== NOT EXECUTED
266ec: e1a05000 mov r5, r0 <== NOT EXECUTED
char boot_rec[FAT_MAX_BPB_SIZE];
char fs_info_sector[FAT_USEFUL_INFO_SIZE];
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
266f0: e3a06000 mov r6, #0 <== NOT EXECUTED
rc = stat(mt_entry->dev, &stat_buf);
266f4: e5900070 ldr r0, [r0, #112] ; 0x70 <== NOT EXECUTED
266f8: e28d1060 add r1, sp, #96 ; 0x60 <== NOT EXECUTED
char boot_rec[FAT_MAX_BPB_SIZE];
char fs_info_sector[FAT_USEFUL_INFO_SIZE];
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
266fc: e58d60b4 str r6, [sp, #180] ; 0xb4 <== NOT EXECUTED
int
fat_init_volume_info(rtems_filesystem_mount_table_entry_t *mt_entry)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
26700: e5954034 ldr r4, [r5, #52] ; 0x34 <== NOT EXECUTED
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
rc = stat(mt_entry->dev, &stat_buf);
26704: ebff8bcb bl 9638 <stat> <== NOT EXECUTED
if (rc == -1)
26708: e3700001 cmn r0, #1 <== NOT EXECUTED
ssize_t ret = 0;
struct stat stat_buf;
int i = 0;
rtems_bdbuf_buffer *block = NULL;
rc = stat(mt_entry->dev, &stat_buf);
2670c: e1a07000 mov r7, r0 <== NOT EXECUTED
if (rc == -1)
26710: 0a0000e9 beq 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
return rc;
/* Must be a block device. */
if (!S_ISBLK(stat_buf.st_mode))
26714: e59d306c ldr r3, [sp, #108] ; 0x6c <== NOT EXECUTED
26718: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
2671c: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
26720: 1a000151 bne 26c6c <fat_init_volume_info+0x588> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOTTY);
/* check that device is registred as block device and lock it */
vol->dd = rtems_disk_obtain(stat_buf.st_rdev);
26724: e28d1078 add r1, sp, #120 ; 0x78 <== NOT EXECUTED
26728: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
2672c: ebff802a bl 67dc <rtems_disk_obtain> <== NOT EXECUTED
if (vol->dd == NULL)
26730: e3500000 cmp r0, #0 <== NOT EXECUTED
/* Must be a block device. */
if (!S_ISBLK(stat_buf.st_mode))
rtems_set_errno_and_return_minus_one(ENOTTY);
/* check that device is registred as block device and lock it */
vol->dd = rtems_disk_obtain(stat_buf.st_rdev);
26734: e584005c str r0, [r4, #92] ; 0x5c <== NOT EXECUTED
if (vol->dd == NULL)
26738: 0a000168 beq 26ce0 <fat_init_volume_info+0x5fc> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
vol->dev = stat_buf.st_rdev;
2673c: e28d1078 add r1, sp, #120 ; 0x78 <== NOT EXECUTED
26740: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dev, 0, &block);
26744: e1a02006 mov r2, r6 <== NOT EXECUTED
/* check that device is registred as block device and lock it */
vol->dd = rtems_disk_obtain(stat_buf.st_rdev);
if (vol->dd == NULL)
rtems_set_errno_and_return_minus_one(EIO);
vol->dev = stat_buf.st_rdev;
26748: e5840054 str r0, [r4, #84] ; 0x54 <== NOT EXECUTED
2674c: e5841058 str r1, [r4, #88] ; 0x58 <== NOT EXECUTED
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dev, 0, &block);
26750: e28d30b4 add r3, sp, #180 ; 0xb4 <== NOT EXECUTED
26754: ebff7be7 bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
26758: e3500000 cmp r0, #0 <== NOT EXECUTED
2675c: 1a00015d bne 26cd8 <fat_init_volume_info+0x5f4> <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EIO);
}
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
26760: e59d30b4 ldr r3, [sp, #180] ; 0xb4 <== NOT EXECUTED
26764: e3a0205a mov r2, #90 ; 0x5a <== NOT EXECUTED
26768: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
2676c: e28d0004 add r0, sp, #4 <== NOT EXECUTED
26770: eb007ece bl 462b0 <memcpy> <== NOT EXECUTED
sc = rtems_bdbuf_release( block);
26774: e59d00b4 ldr r0, [sp, #180] ; 0xb4 <== NOT EXECUTED
26778: ebff774d bl 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2677c: e3500000 cmp r0, #0 <== NOT EXECUTED
26780: 1a00015b bne 26cf4 <fat_init_volume_info+0x610> <== NOT EXECUTED
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EIO );
}
/* Evaluate boot record */
vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec);
26784: e5dd2010 ldrb r2, [sp, #16] <== NOT EXECUTED
26788: e5dd300f ldrb r3, [sp, #15] <== NOT EXECUTED
2678c: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
26790: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26794: e1a02823 lsr r2, r3, #16 <== NOT EXECUTED
if ( (vol->bps != 512) &&
26798: e3520b01 cmp r2, #1024 ; 0x400 <== NOT EXECUTED
2679c: 13520c02 cmpne r2, #512 ; 0x200 <== NOT EXECUTED
267a0: 03a01000 moveq r1, #0 <== NOT EXECUTED
267a4: 13a01001 movne r1, #1 <== NOT EXECUTED
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EIO );
}
/* Evaluate boot record */
vol->bps = FAT_GET_BR_BYTES_PER_SECTOR(boot_rec);
267a8: e1c420b0 strh r2, [r4] <== NOT EXECUTED
if ( (vol->bps != 512) &&
267ac: 0a0000c5 beq 26ac8 <fat_init_volume_info+0x3e4> <== NOT EXECUTED
267b0: e3520b02 cmp r2, #2048 ; 0x800 <== NOT EXECUTED
267b4: 0a000001 beq 267c0 <fat_init_volume_info+0xdc> <== NOT EXECUTED
267b8: e3520a01 cmp r2, #4096 ; 0x1000 <== NOT EXECUTED
267bc: 1a000131 bne 26c88 <fat_init_volume_info+0x5a4> <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
267c0: e3a03000 mov r3, #0 <== NOT EXECUTED
267c4: e5c43003 strb r3, [r4, #3] <== NOT EXECUTED
267c8: e1a034a2 lsr r3, r2, #9 <== NOT EXECUTED
267cc: e5d42003 ldrb r2, [r4, #3] <== NOT EXECUTED
i >>= 1, vol->sec_mul++);
267d0: e1a030c3 asr r3, r3, #1 <== NOT EXECUTED
267d4: e2822001 add r2, r2, #1 <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
267d8: e3130001 tst r3, #1 <== NOT EXECUTED
i >>= 1, vol->sec_mul++);
267dc: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
267e0: 0afffffa beq 267d0 <fat_init_volume_info+0xec> <== NOT EXECUTED
267e4: e5c42003 strb r2, [r4, #3] <== NOT EXECUTED
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
267e8: e1d410b0 ldrh r1, [r4] <== NOT EXECUTED
267ec: e3a03000 mov r3, #0 <== NOT EXECUTED
267f0: e3110001 tst r1, #1 <== NOT EXECUTED
267f4: e5c43002 strb r3, [r4, #2] <== NOT EXECUTED
267f8: e1a03001 mov r3, r1 <== NOT EXECUTED
267fc: 1a000008 bne 26824 <fat_init_volume_info+0x140> <== NOT EXECUTED
26800: e3a02001 mov r2, #1 <== NOT EXECUTED
26804: ea000000 b 2680c <fat_init_volume_info+0x128> <== NOT EXECUTED
26808: e1a02000 mov r2, r0 <== NOT EXECUTED
i >>= 1, vol->sec_log2++);
2680c: e1a030c3 asr r3, r3, #1 <== NOT EXECUTED
26810: e2820001 add r0, r2, #1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
26814: e3130001 tst r3, #1 <== NOT EXECUTED
i >>= 1, vol->sec_log2++);
26818: e20000ff and r0, r0, #255 ; 0xff <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
2681c: 0afffff9 beq 26808 <fat_init_volume_info+0x124> <== NOT EXECUTED
26820: e5c42002 strb r2, [r4, #2] <== NOT EXECUTED
i >>= 1, vol->sec_log2++);
vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec);
26824: e5dd3011 ldrb r3, [sp, #17] <== NOT EXECUTED
/*
* "sectors per cluster" of zero is invalid
* (and would hang the following loop)
*/
if (vol->spc == 0)
26828: e3530000 cmp r3, #0 <== NOT EXECUTED
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
i >>= 1, vol->sec_mul++);
for (vol->sec_log2 = 0, i = vol->bps; (i & 1) == 0;
i >>= 1, vol->sec_log2++);
vol->spc = FAT_GET_BR_SECTORS_PER_CLUSTER(boot_rec);
2682c: e5c43004 strb r3, [r4, #4] <== NOT EXECUTED
/*
* "sectors per cluster" of zero is invalid
* (and would hang the following loop)
*/
if (vol->spc == 0)
26830: 0a000114 beq 26c88 <fat_init_volume_info+0x5a4> <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
26834: e3a02000 mov r2, #0 <== NOT EXECUTED
26838: e3130001 tst r3, #1 <== NOT EXECUTED
2683c: e5c42005 strb r2, [r4, #5] <== NOT EXECUTED
26840: 1a000008 bne 26868 <fat_init_volume_info+0x184> <== NOT EXECUTED
26844: e3a02001 mov r2, #1 <== NOT EXECUTED
26848: ea000000 b 26850 <fat_init_volume_info+0x16c> <== NOT EXECUTED
2684c: e1a02000 mov r2, r0 <== NOT EXECUTED
i >>= 1, vol->spc_log2++);
26850: e1a030c3 asr r3, r3, #1 <== NOT EXECUTED
26854: e2820001 add r0, r2, #1 <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
26858: e3130001 tst r3, #1 <== NOT EXECUTED
i >>= 1, vol->spc_log2++);
2685c: e20000ff and r0, r0, #255 ; 0xff <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->spc_log2 = 0, i = vol->spc; (i & 1) == 0;
26860: 0afffff9 beq 2684c <fat_init_volume_info+0x168> <== NOT EXECUTED
26864: e5c42005 strb r2, [r4, #5] <== NOT EXECUTED
i >>= 1, vol->spc_log2++);
/*
* "bytes per cluster" value greater than 32K is invalid
*/
if ((vol->bpc = vol->bps << vol->spc_log2) > MS_BYTES_PER_CLUSTER_LIMIT)
26868: e1a03211 lsl r3, r1, r2 <== NOT EXECUTED
2686c: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26870: e1a03823 lsr r3, r3, #16 <== NOT EXECUTED
26874: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
26878: e1c430b6 strh r3, [r4, #6] <== NOT EXECUTED
2687c: 8a000101 bhi 26c88 <fat_init_volume_info+0x5a4> <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
26880: e3a02000 mov r2, #0 <== NOT EXECUTED
26884: e3130001 tst r3, #1 <== NOT EXECUTED
26888: e5c42008 strb r2, [r4, #8] <== NOT EXECUTED
2688c: 1a000008 bne 268b4 <fat_init_volume_info+0x1d0> <== NOT EXECUTED
26890: e3a02001 mov r2, #1 <== NOT EXECUTED
26894: ea000000 b 2689c <fat_init_volume_info+0x1b8> <== NOT EXECUTED
26898: e1a02000 mov r2, r0 <== NOT EXECUTED
i >>= 1, vol->bpc_log2++);
2689c: e1a030c3 asr r3, r3, #1 <== NOT EXECUTED
268a0: e2820001 add r0, r2, #1 <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
268a4: e3130001 tst r3, #1 <== NOT EXECUTED
i >>= 1, vol->bpc_log2++);
268a8: e20000ff and r0, r0, #255 ; 0xff <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one(EINVAL);
}
for (vol->bpc_log2 = 0, i = vol->bpc; (i & 1) == 0;
268ac: 0afffff9 beq 26898 <fat_init_volume_info+0x1b4> <== NOT EXECUTED
268b0: e5c42008 strb r2, [r4, #8] <== NOT EXECUTED
i >>= 1, vol->bpc_log2++);
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
268b4: e5dd6014 ldrb r6, [sp, #20] <== NOT EXECUTED
268b8: e5c46009 strb r6, [r4, #9] <== NOT EXECUTED
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
268bc: e5dd3012 ldrb r3, [sp, #18] <== NOT EXECUTED
268c0: e5dd7013 ldrb r7, [sp, #19] <== NOT EXECUTED
268c4: e1837407 orr r7, r3, r7, lsl #8 <== NOT EXECUTED
268c8: e1c471b4 strh r7, [r4, #20] <== NOT EXECUTED
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
268cc: e5dd2016 ldrb r2, [sp, #22] <== NOT EXECUTED
268d0: e5dd3015 ldrb r3, [sp, #21] <== NOT EXECUTED
/* calculate the count of sectors occupied by the root directory */
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
268d4: e2410001 sub r0, r1, #1 <== NOT EXECUTED
i >>= 1, vol->bpc_log2++);
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
268d8: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
/* calculate the count of sectors occupied by the root directory */
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
268dc: e0800283 add r0, r0, r3, lsl #5 <== NOT EXECUTED
i >>= 1, vol->bpc_log2++);
vol->fats = FAT_GET_BR_FAT_NUM(boot_rec);
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
268e0: e1c432b0 strh r3, [r4, #32] <== NOT EXECUTED
/* calculate the count of sectors occupied by the root directory */
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
268e4: eb00d1c3 bl 5aff8 <__aeabi_idiv> <== NOT EXECUTED
vol->bps;
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
268e8: e5d43002 ldrb r3, [r4, #2] <== NOT EXECUTED
268ec: e1a03310 lsl r3, r0, r3 <== NOT EXECUTED
vol->fat_loc = FAT_GET_BR_RESERVED_SECTORS_NUM(boot_rec);
vol->rdir_entrs = FAT_GET_BR_FILES_PER_ROOT_DIR(boot_rec);
/* calculate the count of sectors occupied by the root directory */
vol->rdir_secs = ((vol->rdir_entrs * FAT_DIRENTRY_SIZE) + (vol->bps - 1)) /
268f0: e5840024 str r0, [r4, #36] ; 0x24 <== NOT EXECUTED
vol->bps;
vol->rdir_size = vol->rdir_secs << vol->sec_log2;
268f4: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0)
268f8: e5dd301a ldrb r3, [sp, #26] <== NOT EXECUTED
268fc: e5dd201b ldrb r2, [sp, #27] <== NOT EXECUTED
26900: e1932402 orrs r2, r3, r2, lsl #8 <== NOT EXECUTED
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
else
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
26904: 05dd302a ldrbeq r3, [sp, #42] ; 0x2a <== NOT EXECUTED
26908: 05dd2029 ldrbeq r2, [sp, #41] ; 0x29 <== NOT EXECUTED
2690c: 05dd1028 ldrbeq r1, [sp, #40] ; 0x28 <== NOT EXECUTED
26910: 01a03803 lsleq r3, r3, #16 <== NOT EXECUTED
26914: 01833402 orreq r3, r3, r2, lsl #8 <== NOT EXECUTED
26918: 05dd202b ldrbeq r2, [sp, #43] ; 0x2b <== NOT EXECUTED
2691c: 01833001 orreq r3, r3, r1 <== NOT EXECUTED
26920: 01832c02 orreq r2, r3, r2, lsl #24 <== NOT EXECUTED
26924: e5842018 str r2, [r4, #24] <== NOT EXECUTED
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
vol->rdir_secs;
/* for FAT12/16 root dir starts at(sector) */
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
26928: e5d4c009 ldrb ip, [r4, #9] <== NOT EXECUTED
2692c: e594e018 ldr lr, [r4, #24] <== NOT EXECUTED
26930: e1d411b4 ldrh r1, [r4, #20] <== NOT EXECUTED
if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0)
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
else
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
26934: e0807007 add r7, r0, r7 <== NOT EXECUTED
26938: e0237296 mla r3, r6, r2, r7 <== NOT EXECUTED
vol->rdir_secs;
/* for FAT12/16 root dir starts at(sector) */
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
2693c: e0221c9e mla r2, lr, ip, r1 <== NOT EXECUTED
if ( (FAT_GET_BR_SECTORS_PER_FAT(boot_rec)) != 0)
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT(boot_rec);
else
vol->fat_length = FAT_GET_BR_SECTORS_PER_FAT32(boot_rec);
vol->data_fsec = vol->fat_loc + vol->fats * vol->fat_length +
26940: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED
vol->rdir_secs;
/* for FAT12/16 root dir starts at(sector) */
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
26944: e584201c str r2, [r4, #28] <== NOT EXECUTED
if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0)
26948: e5dd1018 ldrb r1, [sp, #24] <== NOT EXECUTED
2694c: e5dd2017 ldrb r2, [sp, #23] <== NOT EXECUTED
26950: e1922401 orrs r2, r2, r1, lsl #8 <== NOT EXECUTED
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
else
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
26954: 05dd2026 ldrbeq r2, [sp, #38] ; 0x26 <== NOT EXECUTED
26958: 05dd1025 ldrbeq r1, [sp, #37] ; 0x25 <== NOT EXECUTED
2695c: 01a02802 lsleq r2, r2, #16 <== NOT EXECUTED
26960: 05dd0024 ldrbeq r0, [sp, #36] ; 0x24 <== NOT EXECUTED
26964: 01822401 orreq r2, r2, r1, lsl #8 <== NOT EXECUTED
26968: 05dd1027 ldrbeq r1, [sp, #39] ; 0x27 <== NOT EXECUTED
2696c: 01822000 orreq r2, r2, r0 <== NOT EXECUTED
26970: 01822c01 orreq r2, r2, r1, lsl #24 <== NOT EXECUTED
data_secs = vol->tot_secs - vol->data_fsec;
vol->data_cls = data_secs / vol->spc;
26974: e0630002 rsb r0, r3, r2 <== NOT EXECUTED
vol->rdir_loc = vol->fat_loc + vol->fats * vol->fat_length;
if ( (FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec)) != 0)
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM16(boot_rec);
else
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
26978: e584202c str r2, [r4, #44] ; 0x2c <== NOT EXECUTED
data_secs = vol->tot_secs - vol->data_fsec;
vol->data_cls = data_secs / vol->spc;
2697c: e5d41004 ldrb r1, [r4, #4] <== NOT EXECUTED
26980: eb00d158 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
/* determine FAT type at least */
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
26984: e3a03eff mov r3, #4080 ; 0xff0 <== NOT EXECUTED
26988: e2833004 add r3, r3, #4 <== NOT EXECUTED
2698c: e1500003 cmp r0, r3 <== NOT EXECUTED
else
vol->tot_secs = FAT_GET_BR_TOTAL_SECTORS_NUM32(boot_rec);
data_secs = vol->tot_secs - vol->data_fsec;
vol->data_cls = data_secs / vol->spc;
26990: e5840034 str r0, [r4, #52] ; 0x34 <== NOT EXECUTED
/* determine FAT type at least */
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
26994: 8a000050 bhi 26adc <fat_init_volume_info+0x3f8> <== NOT EXECUTED
{
vol->type = FAT_FAT12;
vol->mask = FAT_FAT12_MASK;
26998: e3a02eff mov r2, #4080 ; 0xff0 <== NOT EXECUTED
vol->eoc_val = FAT_FAT12_EOC;
2699c: e1a03002 mov r3, r2 <== NOT EXECUTED
269a0: e2833008 add r3, r3, #8 <== NOT EXECUTED
/* determine FAT type at least */
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
{
vol->type = FAT_FAT12;
vol->mask = FAT_FAT12_MASK;
269a4: e282200f add r2, r2, #15 <== NOT EXECUTED
vol->data_cls = data_secs / vol->spc;
/* determine FAT type at least */
if ( vol->data_cls < FAT_FAT12_MAX_CLN)
{
vol->type = FAT_FAT12;
269a8: e3a01001 mov r1, #1 <== NOT EXECUTED
269ac: e5c4100a strb r1, [r4, #10] <== NOT EXECUTED
vol->mask = FAT_FAT12_MASK;
269b0: e584200c str r2, [r4, #12] <== NOT EXECUTED
vol->eoc_val = FAT_FAT12_EOC;
269b4: e5843010 str r3, [r4, #16] <== NOT EXECUTED
}
}
}
else
{
vol->rdir_cl = 0;
269b8: e3a03000 mov r3, #0 <== NOT EXECUTED
vol->mirror = 0;
vol->afat = 0;
vol->free_cls = 0xFFFFFFFF;
269bc: e3e02000 mvn r2, #0 <== NOT EXECUTED
}
else
{
vol->rdir_cl = 0;
vol->mirror = 0;
vol->afat = 0;
269c0: e5c43050 strb r3, [r4, #80] ; 0x50 <== NOT EXECUTED
vol->free_cls = 0xFFFFFFFF;
vol->next_cl = 0xFFFFFFFF;
269c4: e5842044 str r2, [r4, #68] ; 0x44 <== NOT EXECUTED
}
}
}
else
{
vol->rdir_cl = 0;
269c8: e5843038 str r3, [r4, #56] ; 0x38 <== NOT EXECUTED
vol->mirror = 0;
269cc: e5c43048 strb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
vol->afat = 0;
vol->free_cls = 0xFFFFFFFF;
269d0: e5842040 str r2, [r4, #64] ; 0x40 <== NOT EXECUTED
int
_fat_block_release(
rtems_filesystem_mount_table_entry_t *mt_entry)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
return fat_buf_release(fs_info);
269d4: e5950034 ldr r0, [r5, #52] ; 0x34 <== NOT EXECUTED
269d8: ebfffd6c bl 25f90 <fat_buf_release> <== NOT EXECUTED
vol->next_cl = 0xFFFFFFFF;
}
_fat_block_release(mt_entry);
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
269dc: e5d41050 ldrb r1, [r4, #80] ; 0x50 <== NOT EXECUTED
269e0: e5940018 ldr r0, [r4, #24] <== NOT EXECUTED
269e4: e1d421b4 ldrh r2, [r4, #20] <== NOT EXECUTED
269e8: e0232190 mla r3, r0, r1, r2 <== NOT EXECUTED
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
269ec: e3a00002 mov r0, #2 <== NOT EXECUTED
vol->next_cl = 0xFFFFFFFF;
}
_fat_block_release(mt_entry);
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
269f0: e584304c str r3, [r4, #76] ; 0x4c <== NOT EXECUTED
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
269f4: e3a0100c mov r1, #12 <== NOT EXECUTED
269f8: ebff8358 bl 7760 <calloc> <== NOT EXECUTED
if ( fs_info->vhash == NULL )
269fc: e3500000 cmp r0, #0 <== NOT EXECUTED
_fat_block_release(mt_entry);
vol->afat_loc = vol->fat_loc + vol->fat_length * vol->afat;
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
26a00: e1a03000 mov r3, r0 <== NOT EXECUTED
26a04: e5840064 str r0, [r4, #100] ; 0x64 <== NOT EXECUTED
if ( fs_info->vhash == NULL )
26a08: 0a0000d0 beq 26d50 <fat_init_volume_info+0x66c> <== NOT EXECUTED
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( ENOMEM );
}
for (i = 0; i < FAT_HASH_SIZE; i++)
rtems_chain_initialize_empty(fs_info->vhash + i);
26a0c: e280200c add r2, r0, #12 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
26a10: e280c004 add ip, r0, #4 <== NOT EXECUTED
the_chain->permanent_null = NULL;
26a14: e3a05000 mov r5, #0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
26a18: e280e010 add lr, r0, #16 <== NOT EXECUTED
the_chain->permanent_null = NULL;
26a1c: e5835004 str r5, [r3, #4] <== NOT EXECUTED
the_chain->last = _Chain_Head(the_chain);
26a20: e5833008 str r3, [r3, #8] <== NOT EXECUTED
fs_info->rhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
26a24: e3a00002 mov r0, #2 <== NOT EXECUTED
26a28: e3a0100c mov r1, #12 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
26a2c: e583e00c str lr, [r3, #12] <== NOT EXECUTED
26a30: e583c000 str ip, [r3] <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
26a34: e5822008 str r2, [r2, #8] <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
26a38: e5825004 str r5, [r2, #4] <== NOT EXECUTED
26a3c: ebff8347 bl 7760 <calloc> <== NOT EXECUTED
if ( fs_info->rhash == NULL )
26a40: e1500005 cmp r0, r5 <== NOT EXECUTED
}
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));
26a44: e5840068 str r0, [r4, #104] ; 0x68 <== NOT EXECUTED
if ( fs_info->rhash == NULL )
26a48: 0a0000bc beq 26d40 <fat_init_volume_info+0x65c> <== NOT EXECUTED
rtems_disk_release(vol->dd);
free(fs_info->vhash);
rtems_set_errno_and_return_minus_one( ENOMEM );
}
for (i = 0; i < FAT_HASH_SIZE; i++)
rtems_chain_initialize_empty(fs_info->rhash + i);
26a4c: e280300c add r3, r0, #12 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
26a50: e2802004 add r2, r0, #4 <== NOT EXECUTED
26a54: e2801010 add r1, r0, #16 <== NOT EXECUTED
26a58: e580100c str r1, [r0, #12] <== NOT EXECUTED
26a5c: e8800024 stm r0, {r2, r5} <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
26a60: e5800008 str r0, [r0, #8] <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
26a64: e5835004 str r5, [r3, #4] <== NOT EXECUTED
the_chain->last = _Chain_Head(the_chain);
26a68: e5833008 str r3, [r3, #8] <== NOT EXECUTED
fs_info->uino_pool_size = FAT_UINO_POOL_INIT_SIZE;
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
26a6c: e594202c ldr r2, [r4, #44] ; 0x2c <== NOT EXECUTED
26a70: e5d43003 ldrb r3, [r4, #3] <== NOT EXECUTED
26a74: e1a03312 lsl r3, r2, r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
}
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;
26a78: e3a00c01 mov r0, #256 ; 0x100 <== NOT EXECUTED
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
26a7c: e1a03203 lsl r3, r3, #4 <== NOT EXECUTED
26a80: e5843078 str r3, [r4, #120] ; 0x78 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
}
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;
26a84: e5840074 str r0, [r4, #116] ; 0x74 <== NOT EXECUTED
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
fs_info->index = 0;
26a88: e5845070 str r5, [r4, #112] ; 0x70 <== NOT EXECUTED
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
26a8c: e3a01001 mov r1, #1 <== NOT EXECUTED
26a90: ebff8332 bl 7760 <calloc> <== NOT EXECUTED
if ( fs_info->uino == NULL )
26a94: e3500000 cmp r0, #0 <== NOT EXECUTED
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;
fs_info->index = 0;
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
26a98: e584006c str r0, [r4, #108] ; 0x6c <== NOT EXECUTED
if ( fs_info->uino == NULL )
26a9c: 0a00009b beq 26d10 <fat_init_volume_info+0x62c> <== NOT EXECUTED
rtems_disk_release(vol->dd);
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));
26aa0: e1d400b0 ldrh r0, [r4] <== NOT EXECUTED
26aa4: e3a01001 mov r1, #1 <== NOT EXECUTED
26aa8: ebff832c bl 7760 <calloc> <== NOT EXECUTED
if (fs_info->sec_buf == NULL)
26aac: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_disk_release(vol->dd);
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));
26ab0: e5840088 str r0, [r4, #136] ; 0x88 <== NOT EXECUTED
if (fs_info->sec_buf == NULL)
26ab4: 11a07005 movne r7, r5 <== NOT EXECUTED
26ab8: 0a000079 beq 26ca4 <fat_init_volume_info+0x5c0> <== NOT EXECUTED
free(fs_info->uino);
rtems_set_errno_and_return_minus_one( ENOMEM );
}
return RC_OK;
}
26abc: e1a00007 mov r0, r7 <== NOT EXECUTED
26ac0: e28dd0b8 add sp, sp, #184 ; 0xb8 <== NOT EXECUTED
26ac4: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
for (vol->sec_mul = 0, i = (vol->bps >> FAT_SECTOR512_BITS); (i & 1) == 0;
26ac8: e1a03ca3 lsr r3, r3, #25 <== NOT EXECUTED
26acc: e3130001 tst r3, #1 <== NOT EXECUTED
26ad0: e5c41003 strb r1, [r4, #3] <== NOT EXECUTED
26ad4: 0affff3c beq 267cc <fat_init_volume_info+0xe8> <== NOT EXECUTED
26ad8: eaffff42 b 267e8 <fat_init_volume_info+0x104> <== NOT EXECUTED
vol->mask = FAT_FAT12_MASK;
vol->eoc_val = FAT_FAT12_EOC;
}
else
{
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
26adc: e3a03cff mov r3, #65280 ; 0xff00 <== NOT EXECUTED
26ae0: e28330f4 add r3, r3, #244 ; 0xf4 <== NOT EXECUTED
26ae4: e1500003 cmp r0, r3 <== NOT EXECUTED
26ae8: 9a000054 bls 26c40 <fat_init_volume_info+0x55c> <== NOT EXECUTED
vol->mask = FAT_FAT16_MASK;
vol->eoc_val = FAT_FAT16_EOC;
}
else
{
vol->type = FAT_FAT32;
26aec: e3a03004 mov r3, #4 <== NOT EXECUTED
26af0: e5c4300a strb r3, [r4, #10] <== NOT EXECUTED
vol->mask = FAT_FAT32_MASK;
26af4: e3e0320f mvn r3, #-268435456 ; 0xf0000000 <== NOT EXECUTED
26af8: e584300c str r3, [r4, #12] <== NOT EXECUTED
vol->eoc_val = FAT_FAT32_EOC;
26afc: e3e0327f mvn r3, #-268435449 ; 0xf0000007 <== NOT EXECUTED
26b00: e5843010 str r3, [r4, #16] <== NOT EXECUTED
}
}
if (vol->type == FAT_FAT32)
{
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
26b04: e5dd3032 ldrb r3, [sp, #50] ; 0x32 <== NOT EXECUTED
26b08: e5dd2031 ldrb r2, [sp, #49] ; 0x31 <== NOT EXECUTED
26b0c: e5dd1030 ldrb r1, [sp, #48] ; 0x30 <== NOT EXECUTED
26b10: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26b14: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
26b18: e5dd2033 ldrb r2, [sp, #51] ; 0x33 <== NOT EXECUTED
26b1c: e1833001 orr r3, r3, r1 <== NOT EXECUTED
26b20: e1833c02 orr r3, r3, r2, lsl #24 <== NOT EXECUTED
26b24: e5843038 str r3, [r4, #56] ; 0x38 <== NOT EXECUTED
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
26b28: e5dd302c ldrb r3, [sp, #44] ; 0x2c <== NOT EXECUTED
26b2c: e2033080 and r3, r3, #128 ; 0x80 <== NOT EXECUTED
if (vol->mirror)
26b30: e3530000 cmp r3, #0 <== NOT EXECUTED
if (vol->type == FAT_FAT32)
{
vol->rdir_cl = FAT_GET_BR_FAT32_ROOT_CLUSTER(boot_rec);
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
26b34: e5c43048 strb r3, [r4, #72] ; 0x48 <== NOT EXECUTED
if (vol->mirror)
26b38: 0a000049 beq 26c64 <fat_init_volume_info+0x580> <== NOT EXECUTED
vol->afat = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_FAT_NUM;
26b3c: e5dd302c ldrb r3, [sp, #44] ; 0x2c <== NOT EXECUTED
26b40: e203300f and r3, r3, #15 <== NOT EXECUTED
26b44: e5c43050 strb r3, [r4, #80] ; 0x50 <== NOT EXECUTED
else
vol->afat = 0;
vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec);
26b48: e5dd1035 ldrb r1, [sp, #53] ; 0x35 <== NOT EXECUTED
26b4c: e5dd3034 ldrb r3, [sp, #52] ; 0x34 <== NOT EXECUTED
26b50: e1831401 orr r1, r3, r1, lsl #8 <== NOT EXECUTED
if( vol->info_sec == 0 )
26b54: e3510000 cmp r1, #0 <== NOT EXECUTED
if (vol->mirror)
vol->afat = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_FAT_NUM;
else
vol->afat = 0;
vol->info_sec = FAT_GET_BR_FAT32_FS_INFO_SECTOR(boot_rec);
26b58: e1c413bc strh r1, [r4, #60] ; 0x3c <== NOT EXECUTED
if( vol->info_sec == 0 )
26b5c: 0a000049 beq 26c88 <fat_init_volume_info+0x5a4> <== NOT EXECUTED
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
else
{
ret = _fat_block_read(mt_entry, vol->info_sec , 0,
26b60: e28d60a8 add r6, sp, #168 ; 0xa8 <== NOT EXECUTED
26b64: e1a00005 mov r0, r5 <== NOT EXECUTED
26b68: e3a02000 mov r2, #0 <== NOT EXECUTED
26b6c: e3a03004 mov r3, #4 <== NOT EXECUTED
26b70: e58d6000 str r6, [sp] <== NOT EXECUTED
26b74: ebfffeb3 bl 26648 <_fat_block_read> <== NOT EXECUTED
FAT_FSI_LEADSIG_SIZE, fs_info_sector);
if ( ret < 0 )
26b78: e3500000 cmp r0, #0 <== NOT EXECUTED
26b7c: ba00006b blt 26d30 <fat_init_volume_info+0x64c> <== NOT EXECUTED
{
rtems_disk_release(vol->dd);
return -1;
}
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
26b80: e5dd30aa ldrb r3, [sp, #170] ; 0xaa <== NOT EXECUTED
26b84: e5dd20a9 ldrb r2, [sp, #169] ; 0xa9 <== NOT EXECUTED
26b88: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26b8c: e5dd10a8 ldrb r1, [sp, #168] ; 0xa8 <== NOT EXECUTED
26b90: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
26b94: e5dd20ab ldrb r2, [sp, #171] ; 0xab <== NOT EXECUTED
26b98: e1833001 orr r3, r3, r1 <== NOT EXECUTED
26b9c: e1832c02 orr r2, r3, r2, lsl #24 <== NOT EXECUTED
26ba0: e59f31c4 ldr r3, [pc, #452] ; 26d6c <fat_init_volume_info+0x688><== NOT EXECUTED
26ba4: e1520003 cmp r2, r3 <== NOT EXECUTED
26ba8: 1a000034 bne 26c80 <fat_init_volume_info+0x59c> <== NOT EXECUTED
rtems_disk_release(vol->dd);
rtems_set_errno_and_return_minus_one( EINVAL );
}
else
{
ret = _fat_block_read(mt_entry, vol->info_sec , FAT_FSI_INFO,
26bac: e1d413bc ldrh r1, [r4, #60] ; 0x3c <== NOT EXECUTED
26bb0: e1a00005 mov r0, r5 <== NOT EXECUTED
26bb4: e3a02f79 mov r2, #484 ; 0x1e4 <== NOT EXECUTED
26bb8: e3a0300c mov r3, #12 <== NOT EXECUTED
26bbc: e58d6000 str r6, [sp] <== NOT EXECUTED
26bc0: ebfffea0 bl 26648 <_fat_block_read> <== NOT EXECUTED
FAT_USEFUL_INFO_SIZE, fs_info_sector);
if ( ret < 0 )
26bc4: e3500000 cmp r0, #0 <== NOT EXECUTED
26bc8: ba000056 blt 26d28 <fat_init_volume_info+0x644> <== NOT EXECUTED
_fat_block_release(mt_entry);
rtems_disk_release(vol->dd);
return -1;
}
vol->free_cls = FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
26bcc: e5dd30ae ldrb r3, [sp, #174] ; 0xae <== NOT EXECUTED
26bd0: e5dd20ad ldrb r2, [sp, #173] ; 0xad <== NOT EXECUTED
26bd4: e5dd10ac ldrb r1, [sp, #172] ; 0xac <== NOT EXECUTED
26bd8: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26bdc: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
26be0: e5dd20af ldrb r2, [sp, #175] ; 0xaf <== NOT EXECUTED
26be4: e1833001 orr r3, r3, r1 <== NOT EXECUTED
26be8: e1833c02 orr r3, r3, r2, lsl #24 <== NOT EXECUTED
26bec: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED
vol->next_cl = FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
26bf0: e5dd30b2 ldrb r3, [sp, #178] ; 0xb2 <== NOT EXECUTED
26bf4: e5dd20b1 ldrb r2, [sp, #177] ; 0xb1 <== NOT EXECUTED
26bf8: e5dd10b0 ldrb r1, [sp, #176] ; 0xb0 <== NOT EXECUTED
26bfc: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
26c00: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
26c04: e5dd20b3 ldrb r2, [sp, #179] ; 0xb3 <== NOT EXECUTED
26c08: e1833001 orr r3, r3, r1 <== NOT EXECUTED
26c0c: e1833c02 orr r3, r3, r2, lsl #24 <== NOT EXECUTED
rc = fat_fat32_update_fsinfo_sector(mt_entry, 0xFFFFFFFF,
26c10: e3e01000 mvn r1, #0 <== NOT EXECUTED
rtems_disk_release(vol->dd);
return -1;
}
vol->free_cls = FAT_GET_FSINFO_FREE_CLUSTER_COUNT(fs_info_sector);
vol->next_cl = FAT_GET_FSINFO_NEXT_FREE_CLUSTER(fs_info_sector);
26c14: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED
rc = fat_fat32_update_fsinfo_sector(mt_entry, 0xFFFFFFFF,
26c18: e1a00005 mov r0, r5 <== NOT EXECUTED
26c1c: e1a02001 mov r2, r1 <== NOT EXECUTED
26c20: ebfffdf2 bl 263f0 <fat_fat32_update_fsinfo_sector> <== NOT EXECUTED
0xFFFFFFFF);
if ( rc != RC_OK )
26c24: e2507000 subs r7, r0, #0 <== NOT EXECUTED
26c28: 0affff69 beq 269d4 <fat_init_volume_info+0x2f0> <== NOT EXECUTED
int
_fat_block_release(
rtems_filesystem_mount_table_entry_t *mt_entry)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
return fat_buf_release(fs_info);
26c2c: e5950034 ldr r0, [r5, #52] ; 0x34 <== NOT EXECUTED
26c30: ebfffcd6 bl 25f90 <fat_buf_release> <== NOT EXECUTED
rc = fat_fat32_update_fsinfo_sector(mt_entry, 0xFFFFFFFF,
0xFFFFFFFF);
if ( rc != RC_OK )
{
_fat_block_release(mt_entry);
rtems_disk_release(vol->dd);
26c34: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26c38: ebff7f7b bl 6a2c <rtems_disk_release> <== NOT EXECUTED
return rc;
26c3c: eaffff9e b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
else
{
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
{
vol->type = FAT_FAT16;
vol->mask = FAT_FAT16_MASK;
26c40: e3a02801 mov r2, #65536 ; 0x10000 <== NOT EXECUTED
vol->eoc_val = FAT_FAT16_EOC;
26c44: e3a03cff mov r3, #65280 ; 0xff00 <== NOT EXECUTED
else
{
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
{
vol->type = FAT_FAT16;
vol->mask = FAT_FAT16_MASK;
26c48: e2422001 sub r2, r2, #1 <== NOT EXECUTED
vol->eoc_val = FAT_FAT16_EOC;
26c4c: e28330f8 add r3, r3, #248 ; 0xf8 <== NOT EXECUTED
}
else
{
if ( vol->data_cls < FAT_FAT16_MAX_CLN)
{
vol->type = FAT_FAT16;
26c50: e3a01002 mov r1, #2 <== NOT EXECUTED
26c54: e5c4100a strb r1, [r4, #10] <== NOT EXECUTED
vol->mask = FAT_FAT16_MASK;
26c58: e584200c str r2, [r4, #12] <== NOT EXECUTED
vol->eoc_val = FAT_FAT16_EOC;
26c5c: e5843010 str r3, [r4, #16] <== NOT EXECUTED
26c60: eaffff54 b 269b8 <fat_init_volume_info+0x2d4> <== NOT EXECUTED
vol->mirror = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_MIRROR;
if (vol->mirror)
vol->afat = FAT_GET_BR_EXT_FLAGS(boot_rec) & FAT_BR_EXT_FLAGS_FAT_NUM;
else
vol->afat = 0;
26c64: e5c43050 strb r3, [r4, #80] ; 0x50 <== NOT EXECUTED
26c68: eaffffb6 b 26b48 <fat_init_volume_info+0x464> <== NOT EXECUTED
if (rc == -1)
return rc;
/* Must be a block device. */
if (!S_ISBLK(stat_buf.st_mode))
rtems_set_errno_and_return_minus_one(ENOTTY);
26c6c: eb0070df bl 42ff0 <__errno> <== NOT EXECUTED
26c70: e3a03019 mov r3, #25 <== NOT EXECUTED
26c74: e5803000 str r3, [r0] <== NOT EXECUTED
26c78: e3e07000 mvn r7, #0 <== NOT EXECUTED
26c7c: eaffff8e b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
int
_fat_block_release(
rtems_filesystem_mount_table_entry_t *mt_entry)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
return fat_buf_release(fs_info);
26c80: e5950034 ldr r0, [r5, #52] ; 0x34 <== NOT EXECUTED
26c84: ebfffcc1 bl 25f90 <fat_buf_release> <== NOT EXECUTED
if (FAT_GET_FSINFO_LEAD_SIGNATURE(fs_info_sector) !=
FAT_FSINFO_LEAD_SIGNATURE_VALUE)
{
_fat_block_release(mt_entry);
rtems_disk_release(vol->dd);
26c88: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26c8c: ebff7f66 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
26c90: eb0070d6 bl 42ff0 <__errno> <== NOT EXECUTED
26c94: e3a03016 mov r3, #22 <== NOT EXECUTED
26c98: e5803000 str r3, [r0] <== NOT EXECUTED
26c9c: e3e07000 mvn r7, #0 <== NOT EXECUTED
26ca0: eaffff85 b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
}
fs_info->sec_buf = (uint8_t *)calloc(vol->bps, sizeof(uint8_t));
if (fs_info->sec_buf == NULL)
{
rtems_disk_release(vol->dd);
26ca4: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26ca8: ebff7f5f bl 6a2c <rtems_disk_release> <== NOT EXECUTED
free(fs_info->vhash);
26cac: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
26cb0: ebff842e bl 7d70 <free> <== NOT EXECUTED
free(fs_info->rhash);
26cb4: e5940068 ldr r0, [r4, #104] ; 0x68 <== NOT EXECUTED
26cb8: ebff842c bl 7d70 <free> <== NOT EXECUTED
free(fs_info->uino);
26cbc: e594006c ldr r0, [r4, #108] ; 0x6c <== NOT EXECUTED
26cc0: ebff842a bl 7d70 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
26cc4: eb0070c9 bl 42ff0 <__errno> <== NOT EXECUTED
26cc8: e3a0300c mov r3, #12 <== NOT EXECUTED
26ccc: e5803000 str r3, [r0] <== NOT EXECUTED
26cd0: e3e07000 mvn r7, #0 <== NOT EXECUTED
26cd4: eaffff78 b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
/* Read boot record */
/* FIXME: Asserts FAT_MAX_BPB_SIZE < bdbuf block size */
sc = rtems_bdbuf_read( vol->dev, 0, &block);
if (sc != RTEMS_SUCCESSFUL)
{
rtems_disk_release(vol->dd);
26cd8: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26cdc: ebff7f52 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO);
26ce0: eb0070c2 bl 42ff0 <__errno> <== NOT EXECUTED
26ce4: e3a03005 mov r3, #5 <== NOT EXECUTED
26ce8: e5803000 str r3, [r0] <== NOT EXECUTED
26cec: e3e07000 mvn r7, #0 <== NOT EXECUTED
26cf0: eaffff71 b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
memcpy( boot_rec, block->buffer, FAT_MAX_BPB_SIZE);
sc = rtems_bdbuf_release( block);
if (sc != RTEMS_SUCCESSFUL)
{
rtems_disk_release(vol->dd);
26cf4: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26cf8: ebff7f4b bl 6a2c <rtems_disk_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
26cfc: eb0070bb bl 42ff0 <__errno> <== NOT EXECUTED
26d00: e3a03005 mov r3, #5 <== NOT EXECUTED
26d04: e5803000 str r3, [r0] <== NOT EXECUTED
26d08: e3e07000 mvn r7, #0 <== NOT EXECUTED
26d0c: eaffff6a b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
fs_info->uino_base = (vol->tot_secs << vol->sec_mul) << 4;
fs_info->index = 0;
fs_info->uino = (char *)calloc(fs_info->uino_pool_size, sizeof(char));
if ( fs_info->uino == NULL )
{
rtems_disk_release(vol->dd);
26d10: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26d14: ebff7f44 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
free(fs_info->vhash);
26d18: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
26d1c: ebff8413 bl 7d70 <free> <== NOT EXECUTED
free(fs_info->rhash);
26d20: e5940068 ldr r0, [r4, #104] ; 0x68 <== NOT EXECUTED
26d24: eaffffe5 b 26cc0 <fat_init_volume_info+0x5dc> <== NOT EXECUTED
int
_fat_block_release(
rtems_filesystem_mount_table_entry_t *mt_entry)
{
fat_fs_info_t *fs_info = mt_entry->fs_info;
return fat_buf_release(fs_info);
26d28: e5950034 ldr r0, [r5, #52] ; 0x34 <== NOT EXECUTED
26d2c: ebfffc97 bl 25f90 <fat_buf_release> <== NOT EXECUTED
ret = _fat_block_read(mt_entry, vol->info_sec , FAT_FSI_INFO,
FAT_USEFUL_INFO_SIZE, fs_info_sector);
if ( ret < 0 )
{
_fat_block_release(mt_entry);
rtems_disk_release(vol->dd);
26d30: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26d34: ebff7f3c bl 6a2c <rtems_disk_release> <== NOT EXECUTED
26d38: e3e07000 mvn r7, #0 <== NOT EXECUTED
return -1;
26d3c: eaffff5e b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
rtems_chain_initialize_empty(fs_info->vhash + i);
fs_info->rhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
if ( fs_info->rhash == NULL )
{
rtems_disk_release(vol->dd);
26d40: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26d44: ebff7f38 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
free(fs_info->vhash);
26d48: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
26d4c: eaffffdb b 26cc0 <fat_init_volume_info+0x5dc> <== NOT EXECUTED
/* set up collection of fat-files fd */
fs_info->vhash = calloc(FAT_HASH_SIZE, sizeof(rtems_chain_control));
if ( fs_info->vhash == NULL )
{
rtems_disk_release(vol->dd);
26d50: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26d54: ebff7f34 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
26d58: eb0070a4 bl 42ff0 <__errno> <== NOT EXECUTED
26d5c: e3a0300c mov r3, #12 <== NOT EXECUTED
26d60: e5803000 str r3, [r0] <== NOT EXECUTED
26d64: e3e07000 mvn r7, #0 <== NOT EXECUTED
26d68: eaffff53 b 26abc <fat_init_volume_info+0x3d8> <== NOT EXECUTED
00025e8c <fat_ino_is_unique>:
inline bool
fat_ino_is_unique(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t ino
)
{
25e8c: e5903034 ldr r3, [r0, #52] ; 0x34 <== NOT EXECUTED
25e90: e5930078 ldr r0, [r3, #120] ; 0x78 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
return (ino >= fs_info->uino_base);
}
25e94: e1500001 cmp r0, r1 <== NOT EXECUTED
25e98: 83a00000 movhi r0, #0 <== NOT EXECUTED
25e9c: 93a00001 movls r0, #1 <== NOT EXECUTED
25ea0: e12fff1e bx lr <== NOT EXECUTED
0003f084 <fat_scan_fat_for_free_clusters>:
uint32_t *chain,
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl
)
{
3f084: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cl4find = 2;
uint32_t next_cln = 0;
3f088: e3a0b000 mov fp, #0 <== NOT EXECUTED
uint32_t *chain,
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl
)
{
3f08c: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cl4find = 2;
uint32_t next_cln = 0;
3f090: e58db00c str fp, [sp, #12] <== NOT EXECUTED
uint32_t *chain,
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl
)
{
3f094: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
3f098: e5900034 ldr r0, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
uint32_t i = 2;
*cls_added = 0;
if (count == 0)
3f09c: e3520000 cmp r2, #0 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cl4find = 2;
uint32_t next_cln = 0;
uint32_t save_cln = 0;
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
3f0a0: e5907034 ldr r7, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t *cls_added,
uint32_t *last_cl
)
{
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
3f0a4: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
uint32_t next_cln = 0;
uint32_t save_cln = 0;
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
uint32_t i = 2;
*cls_added = 0;
3f0a8: e583b000 str fp, [r3] <== NOT EXECUTED
uint32_t *chain,
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl
)
{
3f0ac: e1a0a003 mov sl, r3 <== NOT EXECUTED
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
uint32_t i = 2;
*cls_added = 0;
if (count == 0)
3f0b0: e58d2000 str r2, [sp] <== NOT EXECUTED
uint32_t *chain,
uint32_t count,
uint32_t *cls_added,
uint32_t *last_cl
)
{
3f0b4: e58d1008 str r1, [sp, #8] <== NOT EXECUTED
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
uint32_t i = 2;
*cls_added = 0;
if (count == 0)
3f0b8: 01a0b002 moveq fp, r2 <== NOT EXECUTED
3f0bc: 0a00003f beq 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
return rc;
if (fs_info->vol.next_cl != FAT_UNDEFINED_VALUE)
3f0c0: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
3f0c4: e5925044 ldr r5, [r2, #68] ; 0x44 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t cl4find = 2;
uint32_t next_cln = 0;
uint32_t save_cln = 0;
uint32_t data_cls_val = fs_info->vol.data_cls + 2;
3f0c8: e2877002 add r7, r7, #2 <== NOT EXECUTED
*cls_added = 0;
if (count == 0)
return rc;
if (fs_info->vol.next_cl != FAT_UNDEFINED_VALUE)
3f0cc: e3750001 cmn r5, #1 <== NOT EXECUTED
3f0d0: 03a05002 moveq r5, #2 <== NOT EXECUTED
/*
* fs_info->vol.data_cls is exactly the count of data clusters
* starting at cluster 2, so the maximum valid cluster number is
* (fs_info->vol.data_cls + 1)
*/
while (i < data_cls_val)
3f0d4: e3570002 cmp r7, #2 <== NOT EXECUTED
3f0d8: 9a00003b bls 3f1cc <fat_scan_fat_for_free_clusters+0x148> <== NOT EXECUTED
3f0dc: e3a06002 mov r6, #2 <== NOT EXECUTED
3f0e0: e28d900c add r9, sp, #12 <== NOT EXECUTED
3f0e4: ea000011 b 3f130 <fat_scan_fat_for_free_clusters+0xac> <== NOT EXECUTED
* by separate 'if' statement because otherwise undo function
* wouldn't work properly
*/
if (*cls_added == 0)
{
*chain = cl4find;
3f0e8: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
3f0ec: e5825000 str r5, [r2] <== NOT EXECUTED
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
3f0f0: e3e02000 mvn r2, #0 <== NOT EXECUTED
3f0f4: ebfffeaa bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
3f0f8: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3f0fc: 1a00002f bne 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
return rc;
}
}
save_cln = cl4find;
(*cls_added)++;
3f100: e59a3000 ldr r3, [sl] <== NOT EXECUTED
/* have we satisfied request ? */
if (*cls_added == count)
3f104: e59d2000 ldr r2, [sp] <== NOT EXECUTED
return rc;
}
}
save_cln = cl4find;
(*cls_added)++;
3f108: e2833001 add r3, r3, #1 <== NOT EXECUTED
/* have we satisfied request ? */
if (*cls_added == count)
3f10c: e1520003 cmp r2, r3 <== NOT EXECUTED
return rc;
}
}
save_cln = cl4find;
(*cls_added)++;
3f110: e58a3000 str r3, [sl] <== NOT EXECUTED
/* have we satisfied request ? */
if (*cls_added == count)
3f114: 0a000044 beq 3f22c <fat_scan_fat_for_free_clusters+0x1a8> <== NOT EXECUTED
fs_info->vol.next_cl = save_cln;
if (fs_info->vol.free_cls != 0xFFFFFFFF)
fs_info->vol.free_cls -= (*cls_added);
*last_cl = save_cln;
fat_buf_release(fs_info);
return rc;
3f118: e1a0b005 mov fp, r5 <== NOT EXECUTED
}
}
i++;
cl4find++;
3f11c: e2855001 add r5, r5, #1 <== NOT EXECUTED
if (cl4find >= data_cls_val)
3f120: e1570005 cmp r7, r5 <== NOT EXECUTED
3f124: 93a05002 movls r5, #2 <== NOT EXECUTED
/*
* fs_info->vol.data_cls is exactly the count of data clusters
* starting at cluster 2, so the maximum valid cluster number is
* (fs_info->vol.data_cls + 1)
*/
while (i < data_cls_val)
3f128: e1570006 cmp r7, r6 <== NOT EXECUTED
3f12c: 9a000026 bls 3f1cc <fat_scan_fat_for_free_clusters+0x148> <== NOT EXECUTED
{
rc = fat_get_fat_cluster(mt_entry, cl4find, &next_cln);
3f130: e1a01005 mov r1, r5 <== NOT EXECUTED
3f134: e1a02009 mov r2, r9 <== NOT EXECUTED
3f138: e1a00004 mov r0, r4 <== NOT EXECUTED
3f13c: ebffff39 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
3f140: e3500000 cmp r0, #0 <== NOT EXECUTED
*last_cl = save_cln;
fat_buf_release(fs_info);
return rc;
}
}
i++;
3f144: e2866001 add r6, r6, #1 <== NOT EXECUTED
* (fs_info->vol.data_cls + 1)
*/
while (i < data_cls_val)
{
rc = fat_get_fat_cluster(mt_entry, cl4find, &next_cln);
if ( rc != RC_OK )
3f148: 1a00002c bne 3f200 <fat_scan_fat_for_free_clusters+0x17c> <== NOT EXECUTED
if (*cls_added != 0)
fat_free_fat_clusters_chain(mt_entry, (*chain));
return rc;
}
if (next_cln == FAT_GENFAT_FREE)
3f14c: e59d800c ldr r8, [sp, #12] <== NOT EXECUTED
3f150: e3580000 cmp r8, #0 <== NOT EXECUTED
3f154: 1afffff0 bne 3f11c <fat_scan_fat_for_free_clusters+0x98> <== NOT EXECUTED
/*
* We are enforced to process allocation of the first free cluster
* by separate 'if' statement because otherwise undo function
* wouldn't work properly
*/
if (*cls_added == 0)
3f158: e59a3000 ldr r3, [sl] <== NOT EXECUTED
3f15c: e3530000 cmp r3, #0 <== NOT EXECUTED
}
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
3f160: e1a01005 mov r1, r5 <== NOT EXECUTED
3f164: e3e02000 mvn r2, #0 <== NOT EXECUTED
* wouldn't work properly
*/
if (*cls_added == 0)
{
*chain = cl4find;
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
3f168: e1a00004 mov r0, r4 <== NOT EXECUTED
/*
* We are enforced to process allocation of the first free cluster
* by separate 'if' statement because otherwise undo function
* wouldn't work properly
*/
if (*cls_added == 0)
3f16c: 0affffdd beq 3f0e8 <fat_scan_fat_for_free_clusters+0x64> <== NOT EXECUTED
}
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
3f170: e1a00004 mov r0, r4 <== NOT EXECUTED
3f174: ebfffe8a bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
/* cleanup activity */
fat_free_fat_clusters_chain(mt_entry, (*chain));
return rc;
}
rc = fat_set_fat_cluster(mt_entry, save_cln, cl4find);
3f178: e1a0100b mov r1, fp <== NOT EXECUTED
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
if ( rc != RC_OK )
3f17c: e250b000 subs fp, r0, #0 <== NOT EXECUTED
/* cleanup activity */
fat_free_fat_clusters_chain(mt_entry, (*chain));
return rc;
}
rc = fat_set_fat_cluster(mt_entry, save_cln, cl4find);
3f180: e1a02005 mov r2, r5 <== NOT EXECUTED
3f184: e1a00004 mov r0, r4 <== NOT EXECUTED
}
else
{
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
if ( rc != RC_OK )
3f188: 1a000034 bne 3f260 <fat_scan_fat_for_free_clusters+0x1dc> <== NOT EXECUTED
/* cleanup activity */
fat_free_fat_clusters_chain(mt_entry, (*chain));
return rc;
}
rc = fat_set_fat_cluster(mt_entry, save_cln, cl4find);
3f18c: ebfffe84 bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
3f190: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3f194: 0affffd9 beq 3f100 <fat_scan_fat_for_free_clusters+0x7c> <== NOT EXECUTED
{
/* cleanup activity */
fat_free_fat_clusters_chain(mt_entry, (*chain));
3f198: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
3f19c: e5901000 ldr r1, [r0] <== NOT EXECUTED
3f1a0: e1a00004 mov r0, r4 <== NOT EXECUTED
3f1a4: ebffff80 bl 3efac <fat_free_fat_clusters_chain> <== NOT EXECUTED
/* trying to save last allocated cluster for future use */
fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_FREE);
3f1a8: e1a00004 mov r0, r4 <== NOT EXECUTED
3f1ac: e1a01005 mov r1, r5 <== NOT EXECUTED
3f1b0: e1a02008 mov r2, r8 <== NOT EXECUTED
3f1b4: ebfffe7a bl 3eba4 <fat_set_fat_cluster> <== NOT EXECUTED
fat_buf_release(fs_info);
3f1b8: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3f1bc: ebff9b73 bl 25f90 <fat_buf_release> <== NOT EXECUTED
fs_info->vol.free_cls -= (*cls_added);
*last_cl = save_cln;
fat_buf_release(fs_info);
return RC_OK;
}
3f1c0: e1a0000b mov r0, fp <== NOT EXECUTED
3f1c4: e28dd010 add sp, sp, #16 <== NOT EXECUTED
3f1c8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if (cl4find >= data_cls_val)
cl4find = 2;
}
fs_info->vol.next_cl = save_cln;
if (fs_info->vol.free_cls != 0xFFFFFFFF)
3f1cc: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3f1d0: e5903040 ldr r3, [r0, #64] ; 0x40 <== NOT EXECUTED
cl4find++;
if (cl4find >= data_cls_val)
cl4find = 2;
}
fs_info->vol.next_cl = save_cln;
3f1d4: e580b044 str fp, [r0, #68] ; 0x44 <== NOT EXECUTED
if (fs_info->vol.free_cls != 0xFFFFFFFF)
3f1d8: e3730001 cmn r3, #1 <== NOT EXECUTED
fs_info->vol.free_cls -= (*cls_added);
3f1dc: 159a2000 ldrne r2, [sl] <== NOT EXECUTED
3f1e0: 10623003 rsbne r3, r2, r3 <== NOT EXECUTED
*last_cl = save_cln;
3f1e4: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
cl4find = 2;
}
fs_info->vol.next_cl = save_cln;
if (fs_info->vol.free_cls != 0xFFFFFFFF)
fs_info->vol.free_cls -= (*cls_added);
3f1e8: 15803040 strne r3, [r0, #64] ; 0x40 <== NOT EXECUTED
*last_cl = save_cln;
3f1ec: e582b000 str fp, [r2] <== NOT EXECUTED
fat_buf_release(fs_info);
3f1f0: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3f1f4: ebff9b65 bl 25f90 <fat_buf_release> <== NOT EXECUTED
3f1f8: e3a0b000 mov fp, #0 <== NOT EXECUTED
return RC_OK;
3f1fc: eaffffef b 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
while (i < data_cls_val)
{
rc = fat_get_fat_cluster(mt_entry, cl4find, &next_cln);
if ( rc != RC_OK )
{
if (*cls_added != 0)
3f200: e59a3000 ldr r3, [sl] <== NOT EXECUTED
3f204: e3530000 cmp r3, #0 <== NOT EXECUTED
3f208: e1a08000 mov r8, r0 <== NOT EXECUTED
fat_free_fat_clusters_chain(mt_entry, (*chain));
3f20c: 01a0b008 moveq fp, r8 <== NOT EXECUTED
3f210: 0affffea beq 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
3f214: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
3f218: e1a00004 mov r0, r4 <== NOT EXECUTED
3f21c: e5931000 ldr r1, [r3] <== NOT EXECUTED
3f220: ebffff61 bl 3efac <fat_free_fat_clusters_chain> <== NOT EXECUTED
3f224: e1a0b008 mov fp, r8 <== NOT EXECUTED
3f228: eaffffe4 b 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
/* have we satisfied request ? */
if (*cls_added == count)
{
fs_info->vol.next_cl = save_cln;
if (fs_info->vol.free_cls != 0xFFFFFFFF)
3f22c: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3f230: e5903040 ldr r3, [r0, #64] ; 0x40 <== NOT EXECUTED
(*cls_added)++;
/* have we satisfied request ? */
if (*cls_added == count)
{
fs_info->vol.next_cl = save_cln;
3f234: e5805044 str r5, [r0, #68] ; 0x44 <== NOT EXECUTED
if (fs_info->vol.free_cls != 0xFFFFFFFF)
3f238: e3730001 cmn r3, #1 <== NOT EXECUTED
fs_info->vol.free_cls -= (*cls_added);
3f23c: 159a2000 ldrne r2, [sl] <== NOT EXECUTED
3f240: 10623003 rsbne r3, r2, r3 <== NOT EXECUTED
*last_cl = save_cln;
3f244: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
/* have we satisfied request ? */
if (*cls_added == count)
{
fs_info->vol.next_cl = save_cln;
if (fs_info->vol.free_cls != 0xFFFFFFFF)
fs_info->vol.free_cls -= (*cls_added);
3f248: 15803040 strne r3, [r0, #64] ; 0x40 <== NOT EXECUTED
*last_cl = save_cln;
3f24c: e5825000 str r5, [r2] <== NOT EXECUTED
fat_buf_release(fs_info);
3f250: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3f254: ebff9b4d bl 25f90 <fat_buf_release> <== NOT EXECUTED
3f258: e3a0b000 mov fp, #0 <== NOT EXECUTED
return rc;
3f25c: eaffffd7 b 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
/* set EOC value to new allocated cluster */
rc = fat_set_fat_cluster(mt_entry, cl4find, FAT_GENFAT_EOC);
if ( rc != RC_OK )
{
/* cleanup activity */
fat_free_fat_clusters_chain(mt_entry, (*chain));
3f260: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
3f264: e5931000 ldr r1, [r3] <== NOT EXECUTED
3f268: ebffff4f bl 3efac <fat_free_fat_clusters_chain> <== NOT EXECUTED
return rc;
3f26c: eaffffd3 b 3f1c0 <fat_scan_fat_for_free_clusters+0x13c> <== NOT EXECUTED
0003eba4 <fat_set_fat_cluster>:
fat_set_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t in_val
)
{
3eba4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t sec = 0;
uint32_t ofs = 0;
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
rtems_bdbuf_buffer *block0 = NULL;
3eba8: e3a03000 mov r3, #0 <== NOT EXECUTED
fat_set_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t in_val
)
{
3ebac: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
rtems_bdbuf_buffer *block0 = NULL;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
3ebb0: e3510001 cmp r1, #1 <== NOT EXECUTED
fat_set_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t in_val
)
{
3ebb4: e1a05001 mov r5, r1 <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t sec = 0;
uint32_t ofs = 0;
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
rtems_bdbuf_buffer *block0 = NULL;
3ebb8: e58d3000 str r3, [sp] <== NOT EXECUTED
fat_set_fat_cluster(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
uint32_t in_val
)
{
3ebbc: e1a0b002 mov fp, r2 <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
3ebc0: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
uint16_t fat16_clv = 0;
uint32_t fat32_clv = 0;
rtems_bdbuf_buffer *block0 = NULL;
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
3ebc4: 9a000021 bls 3ec50 <fat_set_fat_cluster+0xac> <== NOT EXECUTED
3ebc8: e5943034 ldr r3, [r4, #52] ; 0x34 <== NOT EXECUTED
3ebcc: e2833001 add r3, r3, #1 <== NOT EXECUTED
3ebd0: e1510003 cmp r1, r3 <== NOT EXECUTED
3ebd4: 8a00001d bhi 3ec50 <fat_set_fat_cluster+0xac> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
3ebd8: e5d4300a ldrb r3, [r4, #10] <== NOT EXECUTED
3ebdc: e3130001 tst r3, #1 <== NOT EXECUTED
3ebe0: 1a000020 bne 3ec68 <fat_set_fat_cluster+0xc4> <== NOT EXECUTED
3ebe4: e3130002 tst r3, #2 <== NOT EXECUTED
3ebe8: 15d4a002 ldrbne sl, [r4, #2] <== NOT EXECUTED
3ebec: 1594304c ldrne r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3ebf0: 05d4a002 ldrbeq sl, [r4, #2] <== NOT EXECUTED
3ebf4: 0594304c ldreq r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3ebf8: 11a06081 lslne r6, r1, #1 <== NOT EXECUTED
3ebfc: 01a06101 lsleq r6, r1, #2 <== NOT EXECUTED
3ec00: 1083aa36 addne sl, r3, r6, lsr sl <== NOT EXECUTED
3ec04: 0083aa36 addeq sl, r3, r6, lsr sl <== NOT EXECUTED
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3ec08: e1a00004 mov r0, r4 <== NOT EXECUTED
3ec0c: e1a0100a mov r1, sl <== NOT EXECUTED
3ec10: e3a02001 mov r2, #1 <== NOT EXECUTED
3ec14: e1a0300d mov r3, sp <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3ec18: e1d490b0 ldrh r9, [r4] <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3ec1c: ebff9d36 bl 260fc <fat_buf_access> <== NOT EXECUTED
if (rc != RC_OK)
3ec20: e3500000 cmp r0, #0 <== NOT EXECUTED
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
3ec24: e1a0800d mov r8, sp <== NOT EXECUTED
if (rc != RC_OK)
3ec28: 1a00000c bne 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
switch ( fs_info->vol.type )
3ec2c: e5d4700a ldrb r7, [r4, #10] <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3ec30: e2499001 sub r9, r9, #1 <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
3ec34: e3570002 cmp r7, #2 <== NOT EXECUTED
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
fs_info->vol.afat_loc;
ofs = FAT_FAT_OFFSET(fs_info->vol.type, cln) & (fs_info->vol.bps - 1);
3ec38: e0066009 and r6, r6, r9 <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec, FAT_OP_TYPE_READ, &block0);
if (rc != RC_OK)
return rc;
switch ( fs_info->vol.type )
3ec3c: 0a00000e beq 3ec7c <fat_set_fat_cluster+0xd8> <== NOT EXECUTED
3ec40: e3570004 cmp r7, #4 <== NOT EXECUTED
3ec44: 0a00002e beq 3ed04 <fat_set_fat_cluster+0x160> <== NOT EXECUTED
3ec48: e3570001 cmp r7, #1 <== NOT EXECUTED
3ec4c: 0a000010 beq 3ec94 <fat_set_fat_cluster+0xf0> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
break;
default:
rtems_set_errno_and_return_minus_one(EIO);
3ec50: eb0010e6 bl 42ff0 <__errno> <== NOT EXECUTED
3ec54: e3a03005 mov r3, #5 <== NOT EXECUTED
3ec58: e5803000 str r3, [r0] <== NOT EXECUTED
3ec5c: e3e00000 mvn r0, #0 <== NOT EXECUTED
break;
}
return RC_OK;
}
3ec60: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3ec64: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/* sanity check */
if ( (cln < 2) || (cln > (fs_info->vol.data_cls + 1)) )
rtems_set_errno_and_return_minus_one(EIO);
sec = (FAT_FAT_OFFSET(fs_info->vol.type, cln) >> fs_info->vol.sec_log2) +
3ec68: e5d4a002 ldrb sl, [r4, #2] <== NOT EXECUTED
3ec6c: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
3ec70: e08160a1 add r6, r1, r1, lsr #1 <== NOT EXECUTED
3ec74: e083aa36 add sl, r3, r6, lsr sl <== NOT EXECUTED
3ec78: eaffffe2 b 3ec08 <fat_set_fat_cluster+0x64> <== NOT EXECUTED
}
}
break;
case FAT_FAT16:
*((uint16_t *)(block0->buffer + ofs)) =
3ec7c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ec80: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ec84: e183b0b6 strh fp, [r3, r6] <== NOT EXECUTED
}
static inline void
fat_buf_mark_modified(fat_fs_info_t *fs_info)
{
fs_info->c.modified = true;
3ec88: e3a03001 mov r3, #1 <== NOT EXECUTED
3ec8c: e5c43080 strb r3, [r4, #128] ; 0x80 <== NOT EXECUTED
3ec90: eafffff2 b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
switch ( fs_info->vol.type )
{
case FAT_FAT12:
if ( FAT_CLUSTER_IS_ODD(cln) )
3ec94: e3150001 tst r5, #1 <== NOT EXECUTED
3ec98: 0a000023 beq 3ed2c <fat_set_fat_cluster+0x188> <== NOT EXECUTED
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
3ec9c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3eca0: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
{
case FAT_FAT12:
if ( FAT_CLUSTER_IS_ODD(cln) )
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
*((uint8_t *)(block0->buffer + ofs)) =
3eca4: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
3eca8: e202200f and r2, r2, #15 <== NOT EXECUTED
3ecac: e7c32006 strb r2, [r3, r6] <== NOT EXECUTED
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) |
3ecb0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ecb4: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
*((uint8_t *)(block0->buffer + ofs)) =
3ecb8: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
switch ( fs_info->vol.type )
{
case FAT_FAT12:
if ( FAT_CLUSTER_IS_ODD(cln) )
{
fat16_clv = ((uint16_t )in_val) << FAT_FAT12_SHIFT;
3ecbc: e1a0ba0b lsl fp, fp, #20 <== NOT EXECUTED
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) & 0x0F;
*((uint8_t *)(block0->buffer + ofs)) =
3ecc0: e182282b orr r2, r2, fp, lsr #16 <== NOT EXECUTED
3ecc4: e7c32006 strb r2, [r3, r6] <== NOT EXECUTED
(*((uint8_t *)(block0->buffer + ofs))) |
(uint8_t )(fat16_clv & 0x00FF);
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
3ecc8: e1d430b0 ldrh r3, [r4] <== NOT EXECUTED
3eccc: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3ecd0: e1530006 cmp r3, r6 <== NOT EXECUTED
3ecd4: e5c47080 strb r7, [r4, #128] ; 0x80 <== NOT EXECUTED
3ecd8: 0a00002e beq 3ed98 <fat_set_fat_cluster+0x1f4> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) &= 0x00;
3ecdc: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ece0: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ece4: e2866001 add r6, r6, #1 <== NOT EXECUTED
3ece8: e7c30006 strb r0, [r3, r6] <== NOT EXECUTED
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) |
3ecec: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ecf0: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) &= 0x00;
*((uint8_t *)(block0->buffer + ofs + 1)) =
3ecf4: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
3ecf8: e182bc2b orr fp, r2, fp, lsr #24 <== NOT EXECUTED
3ecfc: e7c3b006 strb fp, [r3, r6] <== NOT EXECUTED
3ed00: eaffffd6 b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
case FAT_FAT32:
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
*((uint32_t *)(block0->buffer + ofs)) =
(*((uint32_t *)(block0->buffer + ofs))) & (CT_LE_L(0xF0000000));
3ed04: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ed08: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
break;
case FAT_FAT32:
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
*((uint32_t *)(block0->buffer + ofs)) =
3ed0c: e7932006 ldr r2, [r3, r6] <== NOT EXECUTED
(*((uint32_t *)(block0->buffer + ofs))) & (CT_LE_L(0xF0000000));
*((uint32_t *)(block0->buffer + ofs)) =
3ed10: e3cbb20f bic fp, fp, #-268435456 ; 0xf0000000 <== NOT EXECUTED
break;
case FAT_FAT32:
fat32_clv = CT_LE_L((in_val & FAT_FAT32_MASK));
*((uint32_t *)(block0->buffer + ofs)) =
3ed14: e202220f and r2, r2, #-268435456 ; 0xf0000000 <== NOT EXECUTED
(*((uint32_t *)(block0->buffer + ofs))) & (CT_LE_L(0xF0000000));
*((uint32_t *)(block0->buffer + ofs)) =
3ed18: e182b00b orr fp, r2, fp <== NOT EXECUTED
3ed1c: e783b006 str fp, [r3, r6] <== NOT EXECUTED
3ed20: e3a03001 mov r3, #1 <== NOT EXECUTED
3ed24: e5c43080 strb r3, [r4, #128] ; 0x80 <== NOT EXECUTED
3ed28: eaffffcc b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
}
}
else
{
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
*((uint8_t *)(block0->buffer + ofs)) &= 0x00;
3ed2c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ed30: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ed34: e7c30006 strb r0, [r3, r6] <== NOT EXECUTED
*((uint8_t *)(block0->buffer + ofs)) =
(*((uint8_t *)(block0->buffer + ofs))) |
3ed38: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ed3c: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
(uint8_t )((fat16_clv & 0xFF00)>>8);
}
}
else
{
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
3ed40: e1a0ba0b lsl fp, fp, #20 <== NOT EXECUTED
*((uint8_t *)(block0->buffer + ofs)) &= 0x00;
*((uint8_t *)(block0->buffer + ofs)) =
3ed44: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
(uint8_t )((fat16_clv & 0xFF00)>>8);
}
}
else
{
fat16_clv = ((uint16_t )in_val) & FAT_FAT12_MASK;
3ed48: e1a0ba2b lsr fp, fp, #20 <== NOT EXECUTED
*((uint8_t *)(block0->buffer + ofs)) &= 0x00;
*((uint8_t *)(block0->buffer + ofs)) =
3ed4c: e182200b orr r2, r2, fp <== NOT EXECUTED
3ed50: e7c32006 strb r2, [r3, r6] <== NOT EXECUTED
(*((uint8_t *)(block0->buffer + ofs))) |
(uint8_t )(fat16_clv & 0x00FF);
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
3ed54: e1d430b0 ldrh r3, [r4] <== NOT EXECUTED
3ed58: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3ed5c: e1530006 cmp r3, r6 <== NOT EXECUTED
3ed60: e5c47080 strb r7, [r4, #128] ; 0x80 <== NOT EXECUTED
3ed64: 0a00001c beq 3eddc <fat_set_fat_cluster+0x238> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
3ed68: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ed6c: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3ed70: e2866001 add r6, r6, #1 <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
}
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
3ed74: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
3ed78: e3c2200f bic r2, r2, #15 <== NOT EXECUTED
3ed7c: e7c32006 strb r2, [r3, r6] <== NOT EXECUTED
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
*((uint8_t *)(block0->buffer + ofs+1)) =
(*((uint8_t *)(block0->buffer + ofs+1))) |
3ed80: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ed84: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
else
{
*((uint8_t *)(block0->buffer + ofs + 1)) =
(*((uint8_t *)(block0->buffer + ofs + 1))) & 0xF0;
*((uint8_t *)(block0->buffer + ofs+1)) =
3ed88: e7d32006 ldrb r2, [r3, r6] <== NOT EXECUTED
3ed8c: e182b42b orr fp, r2, fp, lsr #8 <== NOT EXECUTED
3ed90: e7c3b006 strb fp, [r3, r6] <== NOT EXECUTED
3ed94: eaffffb1 b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
3ed98: e28a1001 add r1, sl, #1 <== NOT EXECUTED
3ed9c: e1a0300d mov r3, sp <== NOT EXECUTED
3eda0: e1a00004 mov r0, r4 <== NOT EXECUTED
3eda4: e1a02007 mov r2, r7 <== NOT EXECUTED
3eda8: ebff9cd3 bl 260fc <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
3edac: e3500000 cmp r0, #0 <== NOT EXECUTED
3edb0: 1affffaa bne 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) &= 0x00;
3edb4: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3edb8: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3edbc: e5c30000 strb r0, [r3] <== NOT EXECUTED
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) |
3edc0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3edc4: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
if (rc != RC_OK)
return rc;
*((uint8_t *)(block0->buffer)) &= 0x00;
*((uint8_t *)(block0->buffer)) =
3edc8: e5d32000 ldrb r2, [r3] <== NOT EXECUTED
3edcc: e182bc2b orr fp, r2, fp, lsr #24 <== NOT EXECUTED
3edd0: e5c3b000 strb fp, [r3] <== NOT EXECUTED
3edd4: e5c47080 strb r7, [r4, #128] ; 0x80 <== NOT EXECUTED
3edd8: eaffffa0 b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
fat_buf_mark_modified(fs_info);
if ( ofs == (fs_info->vol.bps - 1) )
{
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
3eddc: e28a1001 add r1, sl, #1 <== NOT EXECUTED
3ede0: e1a0300d mov r3, sp <== NOT EXECUTED
3ede4: e1a00004 mov r0, r4 <== NOT EXECUTED
3ede8: e1a02007 mov r2, r7 <== NOT EXECUTED
3edec: ebff9cc2 bl 260fc <fat_buf_access> <== NOT EXECUTED
&block0);
if (rc != RC_OK)
3edf0: e3500000 cmp r0, #0 <== NOT EXECUTED
3edf4: 1affff99 bne 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) & 0xF0;
3edf8: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3edfc: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
rc = fat_buf_access(fs_info, sec + 1, FAT_OP_TYPE_READ,
&block0);
if (rc != RC_OK)
return rc;
*((uint8_t *)(block0->buffer)) =
3ee00: e5d32000 ldrb r2, [r3] <== NOT EXECUTED
3ee04: e3c2200f bic r2, r2, #15 <== NOT EXECUTED
3ee08: e5c32000 strb r2, [r3] <== NOT EXECUTED
(*((uint8_t *)(block0->buffer))) & 0xF0;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) |
3ee0c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3ee10: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
return rc;
*((uint8_t *)(block0->buffer)) =
(*((uint8_t *)(block0->buffer))) & 0xF0;
*((uint8_t *)(block0->buffer)) =
3ee14: e5d32000 ldrb r2, [r3] <== NOT EXECUTED
3ee18: e182b42b orr fp, r2, fp, lsr #8 <== NOT EXECUTED
3ee1c: e5c3b000 strb fp, [r3] <== NOT EXECUTED
3ee20: e5c47080 strb r7, [r4, #128] ; 0x80 <== NOT EXECUTED
3ee24: eaffff8d b 3ec60 <fat_set_fat_cluster+0xbc> <== NOT EXECUTED
00026458 <fat_shutdown_drive>:
* RC_OK on success, or -1 if error occured
* and errno set appropriately
*/
int
fat_shutdown_drive(rtems_filesystem_mount_table_entry_t *mt_entry)
{
26458: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
int rc = RC_OK;
fat_fs_info_t *fs_info = mt_entry->fs_info;
2645c: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
int i = 0;
if (fs_info->vol.type & FAT_FAT32)
26460: e5d4500a ldrb r5, [r4, #10] <== NOT EXECUTED
26464: e2155004 ands r5, r5, #4 <== NOT EXECUTED
26468: 1a00002e bne 26528 <fat_shutdown_drive+0xd0> <== NOT EXECUTED
fs_info->vol.next_cl);
if ( rc != RC_OK )
rc = -1;
}
fat_buf_release(fs_info);
2646c: e1a00004 mov r0, r4 <== NOT EXECUTED
26470: ebfffec6 bl 25f90 <fat_buf_release> <== NOT EXECUTED
if (rtems_bdbuf_syncdev(fs_info->vol.dev) != RTEMS_SUCCESSFUL)
26474: e2841054 add r1, r4, #84 ; 0x54 <== NOT EXECUTED
26478: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
2647c: ebff7563 bl 3a10 <rtems_bdbuf_syncdev> <== NOT EXECUTED
26480: e3500000 cmp r0, #0 <== NOT EXECUTED
26484: 13e05000 mvnne r5, #0 <== NOT EXECUTED
26488: e3a08000 mov r8, #0 <== NOT EXECUTED
rc = -1;
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
2648c: e5946064 ldr r6, [r4, #100] ; 0x64 <== NOT EXECUTED
26490: e0866008 add r6, r6, r8 <== NOT EXECUTED
while ( (node = rtems_chain_get(the_chain)) != NULL )
26494: ea000000 b 2649c <fat_shutdown_drive+0x44> <== NOT EXECUTED
free(node);
26498: ebff8634 bl 7d70 <free> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
2649c: e1a00006 mov r0, r6 <== NOT EXECUTED
264a0: ebff9b0b bl d0d4 <_Chain_Get> <== NOT EXECUTED
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->vhash + i;
while ( (node = rtems_chain_get(the_chain)) != NULL )
264a4: e2507000 subs r7, r0, #0 <== NOT EXECUTED
264a8: 1afffffa bne 26498 <fat_shutdown_drive+0x40> <== NOT EXECUTED
264ac: e288800c add r8, r8, #12 <== NOT EXECUTED
fat_buf_release(fs_info);
if (rtems_bdbuf_syncdev(fs_info->vol.dev) != RTEMS_SUCCESSFUL)
rc = -1;
for (i = 0; i < FAT_HASH_SIZE; i++)
264b0: e3580018 cmp r8, #24 <== NOT EXECUTED
264b4: 1afffff4 bne 2648c <fat_shutdown_drive+0x34> <== NOT EXECUTED
}
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
264b8: e5946068 ldr r6, [r4, #104] ; 0x68 <== NOT EXECUTED
264bc: e0866007 add r6, r6, r7 <== NOT EXECUTED
while ( (node = rtems_chain_get(the_chain)) != NULL )
264c0: ea000000 b 264c8 <fat_shutdown_drive+0x70> <== NOT EXECUTED
free(node);
264c4: ebff8629 bl 7d70 <free> <== NOT EXECUTED
264c8: e1a00006 mov r0, r6 <== NOT EXECUTED
264cc: ebff9b00 bl d0d4 <_Chain_Get> <== NOT EXECUTED
for (i = 0; i < FAT_HASH_SIZE; i++)
{
rtems_chain_node *node = NULL;
rtems_chain_control *the_chain = fs_info->rhash + i;
while ( (node = rtems_chain_get(the_chain)) != NULL )
264d0: e3500000 cmp r0, #0 <== NOT EXECUTED
264d4: 1afffffa bne 264c4 <fat_shutdown_drive+0x6c> <== NOT EXECUTED
264d8: e287700c add r7, r7, #12 <== NOT EXECUTED
while ( (node = rtems_chain_get(the_chain)) != NULL )
free(node);
}
for (i = 0; i < FAT_HASH_SIZE; i++)
264dc: e3570018 cmp r7, #24 <== NOT EXECUTED
264e0: 1afffff4 bne 264b8 <fat_shutdown_drive+0x60> <== NOT EXECUTED
while ( (node = rtems_chain_get(the_chain)) != NULL )
free(node);
}
free(fs_info->vhash);
264e4: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
264e8: ebff8620 bl 7d70 <free> <== NOT EXECUTED
free(fs_info->rhash);
264ec: e5940068 ldr r0, [r4, #104] ; 0x68 <== NOT EXECUTED
264f0: ebff861e bl 7d70 <free> <== NOT EXECUTED
free(fs_info->uino);
264f4: e594006c ldr r0, [r4, #108] ; 0x6c <== NOT EXECUTED
264f8: ebff861c bl 7d70 <free> <== NOT EXECUTED
free(fs_info->sec_buf);
264fc: e5940088 ldr r0, [r4, #136] ; 0x88 <== NOT EXECUTED
26500: ebff861a bl 7d70 <free> <== NOT EXECUTED
rtems_disk_release(fs_info->vol.dd);
26504: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
26508: ebff8147 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
if (rc)
2650c: e3550000 cmp r5, #0 <== NOT EXECUTED
26510: 0a000002 beq 26520 <fat_shutdown_drive+0xc8> <== NOT EXECUTED
errno = EIO;
26514: eb0072b5 bl 42ff0 <__errno> <== NOT EXECUTED
26518: e3a03005 mov r3, #5 <== NOT EXECUTED
2651c: e5803000 str r3, [r0] <== NOT EXECUTED
return rc;
}
26520: e1a00005 mov r0, r5 <== NOT EXECUTED
26524: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
fat_fs_info_t *fs_info = mt_entry->fs_info;
int i = 0;
if (fs_info->vol.type & FAT_FAT32)
{
rc = fat_fat32_update_fsinfo_sector(mt_entry, fs_info->vol.free_cls,
26528: e2841040 add r1, r4, #64 ; 0x40 <== NOT EXECUTED
2652c: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
26530: ebffffae bl 263f0 <fat_fat32_update_fsinfo_sector> <== NOT EXECUTED
fs_info->vol.next_cl);
if ( rc != RC_OK )
26534: e2505000 subs r5, r0, #0 <== NOT EXECUTED
26538: 13e05000 mvnne r5, #0 <== NOT EXECUTED
2653c: eaffffca b 2646c <fat_shutdown_drive+0x14> <== NOT EXECUTED
0003f678 <fchdir>:
#include <rtems/seterr.h>
int fchdir(
int fd
)
{
3f678: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc, saved;
rtems_libio_check_fd( fd );
3f67c: e59f3158 ldr r3, [pc, #344] ; 3f7dc <fchdir+0x164> <== NOT EXECUTED
3f680: e5933000 ldr r3, [r3] <== NOT EXECUTED
3f684: e1500003 cmp r0, r3 <== NOT EXECUTED
#include <rtems/seterr.h>
int fchdir(
int fd
)
{
3f688: e24dd02c sub sp, sp, #44 ; 0x2c <== NOT EXECUTED
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc, saved;
rtems_libio_check_fd( fd );
3f68c: 2a000040 bcs 3f794 <fchdir+0x11c> <== NOT EXECUTED
iop = rtems_libio_iop( fd );
3f690: e59f3148 ldr r3, [pc, #328] ; 3f7e0 <fchdir+0x168> <== NOT EXECUTED
3f694: e5934000 ldr r4, [r3] <== NOT EXECUTED
3f698: e0844300 add r4, r4, r0, lsl #6 <== NOT EXECUTED
rtems_libio_check_is_open(iop);
3f69c: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
3f6a0: e3130c01 tst r3, #256 ; 0x100 <== NOT EXECUTED
3f6a4: 0a00003a beq 3f794 <fchdir+0x11c> <== NOT EXECUTED
/*
* Verify you can change directory into this node.
*/
if ( !iop->pathinfo.ops ) {
3f6a8: e5943024 ldr r3, [r4, #36] ; 0x24 <== NOT EXECUTED
3f6ac: e3530000 cmp r3, #0 <== NOT EXECUTED
3f6b0: 0a000044 beq 3f7c8 <fchdir+0x150> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( !iop->pathinfo.ops->node_type_h ) {
3f6b4: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED
3f6b8: e3530000 cmp r3, #0 <== NOT EXECUTED
3f6bc: 0a000041 beq 3f7c8 <fchdir+0x150> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*iop->pathinfo.ops->node_type_h)( &iop->pathinfo ) !=
3f6c0: e2844018 add r4, r4, #24 <== NOT EXECUTED
3f6c4: e1a00004 mov r0, r4 <== NOT EXECUTED
3f6c8: e1a0e00f mov lr, pc <== NOT EXECUTED
3f6cc: e12fff13 bx r3 <== NOT EXECUTED
3f6d0: e3500001 cmp r0, #1 <== NOT EXECUTED
3f6d4: e1a0e000 mov lr, r0 <== NOT EXECUTED
3f6d8: 1a000028 bne 3f780 <fchdir+0x108> <== NOT EXECUTED
* but note the race condition. Threads who
* share their rtems_filesystem_current better
* be synchronized!
*/
saved = rtems_filesystem_current;
3f6dc: e59f6100 ldr r6, [pc, #256] ; 3f7e4 <fchdir+0x16c> <== NOT EXECUTED
3f6e0: e5967000 ldr r7, [r6] <== NOT EXECUTED
3f6e4: e287c004 add ip, r7, #4 <== NOT EXECUTED
3f6e8: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED
3f6ec: e28d5004 add r5, sp, #4 <== NOT EXECUTED
3f6f0: e1a08005 mov r8, r5 <== NOT EXECUTED
3f6f4: e8a8000f stmia r8!, {r0, r1, r2, r3} <== NOT EXECUTED
3f6f8: e59c3000 ldr r3, [ip] <== NOT EXECUTED
3f6fc: e5883000 str r3, [r8] <== NOT EXECUTED
rtems_filesystem_current = iop->pathinfo;
3f700: e8b4000f ldm r4!, {r0, r1, r2, r3} <== NOT EXECUTED
3f704: e2877004 add r7, r7, #4 <== NOT EXECUTED
3f708: e8a7000f stmia r7!, {r0, r1, r2, r3} <== NOT EXECUTED
3f70c: e5943000 ldr r3, [r4] <== NOT EXECUTED
/* clone the current node */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
3f710: e3a07000 mov r7, #0 <== NOT EXECUTED
3f714: e28d4018 add r4, sp, #24 <== NOT EXECUTED
* share their rtems_filesystem_current better
* be synchronized!
*/
saved = rtems_filesystem_current;
rtems_filesystem_current = iop->pathinfo;
3f718: e58c3000 str r3, [ip] <== NOT EXECUTED
/* clone the current node */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
3f71c: e1a0100e mov r1, lr <== NOT EXECUTED
3f720: e1a02007 mov r2, r7 <== NOT EXECUTED
3f724: e59f00bc ldr r0, [pc, #188] ; 3f7e8 <fchdir+0x170> <== NOT EXECUTED
3f728: e1a03004 mov r3, r4 <== NOT EXECUTED
3f72c: e58d7000 str r7, [sp] <== NOT EXECUTED
3f730: ebff216c bl 7ce8 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
3f734: e1500007 cmp r0, r7 <== NOT EXECUTED
3f738: 1a00001a bne 3f7a8 <fchdir+0x130> <== NOT EXECUTED
/* cloning failed; restore original and bail out */
rtems_filesystem_current = saved;
return -1;
}
/* release the old one */
rtems_filesystem_freenode( &saved );
3f73c: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
3f740: e3530000 cmp r3, #0 <== NOT EXECUTED
3f744: 0a000004 beq 3f75c <fchdir+0xe4> <== NOT EXECUTED
3f748: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
3f74c: e3530000 cmp r3, #0 <== NOT EXECUTED
3f750: 11a00005 movne r0, r5 <== NOT EXECUTED
3f754: 11a0e00f movne lr, pc <== NOT EXECUTED
3f758: 112fff13 bxne r3 <== NOT EXECUTED
rtems_filesystem_current = loc;
3f75c: e596c000 ldr ip, [r6] <== NOT EXECUTED
3f760: e8b4000f ldm r4!, {r0, r1, r2, r3} <== NOT EXECUTED
3f764: e28cc004 add ip, ip, #4 <== NOT EXECUTED
3f768: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
3f76c: e5943000 ldr r3, [r4] <== NOT EXECUTED
3f770: e58c3000 str r3, [ip] <== NOT EXECUTED
3f774: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
}
3f778: e28dd02c add sp, sp, #44 ; 0x2c <== NOT EXECUTED
3f77c: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*iop->pathinfo.ops->node_type_h)( &iop->pathinfo ) !=
RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_set_errno_and_return_minus_one( ENOTDIR );
3f780: eb000e1a bl 42ff0 <__errno> <== NOT EXECUTED
3f784: e3a03014 mov r3, #20 <== NOT EXECUTED
3f788: e5803000 str r3, [r0] <== NOT EXECUTED
3f78c: e3e00000 mvn r0, #0 <== NOT EXECUTED
3f790: eafffff8 b 3f778 <fchdir+0x100> <== NOT EXECUTED
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc, saved;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
3f794: eb000e15 bl 42ff0 <__errno> <== NOT EXECUTED
3f798: e3a03009 mov r3, #9 <== NOT EXECUTED
3f79c: e5803000 str r3, [r0] <== NOT EXECUTED
3f7a0: e3e00000 mvn r0, #0 <== NOT EXECUTED
3f7a4: eafffff3 b 3f778 <fchdir+0x100> <== NOT EXECUTED
rtems_filesystem_current = iop->pathinfo;
/* clone the current node */
if (rtems_filesystem_evaluate_path(".", 1, 0, &loc, 0)) {
/* cloning failed; restore original and bail out */
rtems_filesystem_current = saved;
3f7a8: e596c000 ldr ip, [r6] <== NOT EXECUTED
3f7ac: e8b5000f ldm r5!, {r0, r1, r2, r3} <== NOT EXECUTED
3f7b0: e28cc004 add ip, ip, #4 <== NOT EXECUTED
3f7b4: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
3f7b8: e5983000 ldr r3, [r8] <== NOT EXECUTED
3f7bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
3f7c0: e58c3000 str r3, [ip] <== NOT EXECUTED
return -1;
3f7c4: eaffffeb b 3f778 <fchdir+0x100> <== NOT EXECUTED
if ( !iop->pathinfo.ops ) {
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( !iop->pathinfo.ops->node_type_h ) {
rtems_set_errno_and_return_minus_one( ENOTSUP );
3f7c8: eb000e08 bl 42ff0 <__errno> <== NOT EXECUTED
3f7cc: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
3f7d0: e5803000 str r3, [r0] <== NOT EXECUTED
3f7d4: e3e00000 mvn r0, #0 <== NOT EXECUTED
3f7d8: eaffffe6 b 3f778 <fchdir+0x100> <== NOT EXECUTED
00028de4 <fchmod>:
mode_t mode
)
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28de4: e59f3070 ldr r3, [pc, #112] ; 28e5c <fchmod+0x78> <== NOT EXECUTED
28de8: e5932000 ldr r2, [r3] <== NOT EXECUTED
28dec: e1500002 cmp r0, r2 <== NOT EXECUTED
int fchmod(
int fd,
mode_t mode
)
{
28df0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28df4: 2a00000e bcs 28e34 <fchmod+0x50> <== NOT EXECUTED
iop = rtems_libio_iop( fd );
28df8: e59f3060 ldr r3, [pc, #96] ; 28e60 <fchmod+0x7c> <== NOT EXECUTED
28dfc: e5933000 ldr r3, [r3] <== NOT EXECUTED
28e00: e0833300 add r3, r3, r0, lsl #6 <== NOT EXECUTED
rtems_libio_check_is_open(iop);
28e04: e5932014 ldr r2, [r3, #20] <== NOT EXECUTED
28e08: e3120c01 tst r2, #256 ; 0x100 <== NOT EXECUTED
28e0c: 0a000008 beq 28e34 <fchmod+0x50> <== NOT EXECUTED
/*
* Now process the fchmod().
*/
if ( !iop->handlers->fchmod_h )
28e10: e593203c ldr r2, [r3, #60] ; 0x3c <== NOT EXECUTED
28e14: e592201c ldr r2, [r2, #28] <== NOT EXECUTED
28e18: e3520000 cmp r2, #0 <== NOT EXECUTED
28e1c: 0a000009 beq 28e48 <fchmod+0x64> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->pathinfo.handlers->fchmod_h)( &iop->pathinfo, mode );
28e20: e2830018 add r0, r3, #24 <== NOT EXECUTED
28e24: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
28e28: e1a0e00f mov lr, pc <== NOT EXECUTED
28e2c: e593f01c ldr pc, [r3, #28] <== NOT EXECUTED
}
28e30: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
28e34: eb00686d bl 42ff0 <__errno> <== NOT EXECUTED
28e38: e3a03009 mov r3, #9 <== NOT EXECUTED
28e3c: e5803000 str r3, [r0] <== NOT EXECUTED
28e40: e3e00000 mvn r0, #0 <== NOT EXECUTED
28e44: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
/*
* Now process the fchmod().
*/
if ( !iop->handlers->fchmod_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
28e48: eb006868 bl 42ff0 <__errno> <== NOT EXECUTED
28e4c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
28e50: e5803000 str r3, [r0] <== NOT EXECUTED
28e54: e3e00000 mvn r0, #0 <== NOT EXECUTED
28e58: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00028e64 <fchown>:
gid_t group
)
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28e64: e59f3098 ldr r3, [pc, #152] ; 28f04 <fchown+0xa0> <== NOT EXECUTED
28e68: e5933000 ldr r3, [r3] <== NOT EXECUTED
int fchown(
int fd,
uid_t owner,
gid_t group
)
{
28e6c: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
28e70: e1a02802 lsl r2, r2, #16 <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28e74: e1500003 cmp r0, r3 <== NOT EXECUTED
int fchown(
int fd,
uid_t owner,
gid_t group
)
{
28e78: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
28e7c: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
28e80: e1a02822 lsr r2, r2, #16 <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28e84: 2a00000f bcs 28ec8 <fchown+0x64> <== NOT EXECUTED
iop = rtems_libio_iop( fd );
28e88: e59f3078 ldr r3, [pc, #120] ; 28f08 <fchown+0xa4> <== NOT EXECUTED
28e8c: e5933000 ldr r3, [r3] <== NOT EXECUTED
28e90: e0830300 add r0, r3, r0, lsl #6 <== NOT EXECUTED
rtems_libio_check_is_open(iop);
28e94: e5903014 ldr r3, [r0, #20] <== NOT EXECUTED
28e98: e3130c01 tst r3, #256 ; 0x100 <== NOT EXECUTED
28e9c: 0a000009 beq 28ec8 <fchown+0x64> <== NOT EXECUTED
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
28ea0: e3130004 tst r3, #4 <== NOT EXECUTED
28ea4: 0a00000c beq 28edc <fchown+0x78> <== NOT EXECUTED
if ( !iop->pathinfo.ops->chown_h )
28ea8: e5903024 ldr r3, [r0, #36] ; 0x24 <== NOT EXECUTED
28eac: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
28eb0: e3530000 cmp r3, #0 <== NOT EXECUTED
28eb4: 0a00000d beq 28ef0 <fchown+0x8c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->pathinfo.ops->chown_h)( &iop->pathinfo, owner, group );
28eb8: e2800018 add r0, r0, #24 <== NOT EXECUTED
28ebc: e1a0e00f mov lr, pc <== NOT EXECUTED
28ec0: e12fff13 bx r3 <== NOT EXECUTED
}
28ec4: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
28ec8: eb006848 bl 42ff0 <__errno> <== NOT EXECUTED
28ecc: e3a03009 mov r3, #9 <== NOT EXECUTED
28ed0: e5803000 str r3, [r0] <== NOT EXECUTED
28ed4: e3e00000 mvn r0, #0 <== NOT EXECUTED
28ed8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
28edc: eb006843 bl 42ff0 <__errno> <== NOT EXECUTED
28ee0: e3a03016 mov r3, #22 <== NOT EXECUTED
28ee4: e5803000 str r3, [r0] <== NOT EXECUTED
28ee8: e3e00000 mvn r0, #0 <== NOT EXECUTED
28eec: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
if ( !iop->pathinfo.ops->chown_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
28ef0: eb00683e bl 42ff0 <__errno> <== NOT EXECUTED
28ef4: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
28ef8: e5803000 str r3, [r0] <== NOT EXECUTED
28efc: e3e00000 mvn r0, #0 <== NOT EXECUTED
28f00: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
0003f7ec <fcntl>:
int fcntl(
int fd,
int cmd,
...
)
{
3f7ec: e92d000e push {r1, r2, r3}
3f7f0: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
int fd2;
int flags;
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
3f7f4: e59f31d0 ldr r3, [pc, #464] ; 3f9cc <fcntl+0x1e0>
3f7f8: e5933000 ldr r3, [r3]
int fcntl(
int fd,
int cmd,
...
)
{
3f7fc: e24dd004 sub sp, sp, #4
int ret;
va_list ap;
va_start( ap, cmd );
3f800: e28d2028 add r2, sp, #40 ; 0x28
int fd2;
int flags;
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
3f804: e1500003 cmp r0, r3
...
)
{
int ret;
va_list ap;
va_start( ap, cmd );
3f808: e58d2000 str r2, [sp]
int fcntl(
int fd,
int cmd,
...
)
{
3f80c: e59d4024 ldr r4, [sp, #36] ; 0x24
int fd2;
int flags;
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
3f810: 2a000061 bcs 3f99c <fcntl+0x1b0>
iop = rtems_libio_iop( fd );
3f814: e59f81b4 ldr r8, [pc, #436] ; 3f9d0 <fcntl+0x1e4>
3f818: e5986000 ldr r6, [r8]
3f81c: e0865300 add r5, r6, r0, lsl #6
rtems_libio_check_is_open(iop);
3f820: e595c014 ldr ip, [r5, #20]
3f824: e31c0c01 tst ip, #256 ; 0x100
3f828: 0a00005b beq 3f99c <fcntl+0x1b0>
/*
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
3f82c: e3540009 cmp r4, #9
3f830: 979ff104 ldrls pc, [pc, r4, lsl #2]
3f834: ea00002c b 3f8ec <fcntl+0x100>
3f838: 0003f900 .word 0x0003f900
3f83c: 0003f960 .word 0x0003f960
3f840: 0003f96c .word 0x0003f96c
3f844: 0003f98c .word 0x0003f98c
3f848: 0003f884 .word 0x0003f884
3f84c: 0003f860 .word 0x0003f860
3f850: 0003f860 .word 0x0003f860
3f854: 0003f860 .word 0x0003f860
3f858: 0003f860 .word 0x0003f860
3f85c: 0003f860 .word 0x0003f860
errno = ENOTSUP;
ret = -1;
break;
case F_GETOWN: /* for sockets. */
errno = ENOTSUP;
3f860: eb000de2 bl 42ff0 <__errno>
3f864: e3a03086 mov r3, #134 ; 0x86
3f868: e5803000 str r3, [r0]
3f86c: e3e06000 mvn r6, #0
va_list ap;
va_start( ap, cmd );
ret = vfcntl(fd,cmd,ap);
va_end(ap);
return ret;
}
3f870: e1a00006 mov r0, r6
3f874: e28dd004 add sp, sp, #4
3f878: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
3f87c: e28dd00c add sp, sp, #12
3f880: e12fff1e bx lr
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
break;
case F_SETFL:
flags = rtems_libio_fcntl_flags( va_arg( ap, int ) );
3f884: e5920000 ldr r0, [r2]
3f888: ebff2289 bl 82b4 <rtems_libio_fcntl_flags>
/*
* XXX If we are turning on append, should we seek to the end?
*/
iop->flags = (iop->flags & ~mask) | (flags & mask);
3f88c: e5953014 ldr r3, [r5, #20]
3f890: e3c00f7f bic r0, r0, #508 ; 0x1fc
3f894: e3c00002 bic r0, r0, #2
3f898: e1a00b00 lsl r0, r0, #22
3f89c: e3c33c02 bic r3, r3, #512 ; 0x200
3f8a0: e1a00b20 lsr r0, r0, #22
3f8a4: e3c33001 bic r3, r3, #1
3f8a8: e1800003 orr r0, r0, r3
3f8ac: e5850014 str r0, [r5, #20]
3f8b0: e3a06000 mov r6, #0
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
if (iop->handlers->fcntl_h) {
3f8b4: e595303c ldr r3, [r5, #60] ; 0x3c
3f8b8: e5933030 ldr r3, [r3, #48] ; 0x30
3f8bc: e3530000 cmp r3, #0
3f8c0: 0affffea beq 3f870 <fcntl+0x84>
int err = (*iop->handlers->fcntl_h)( cmd, iop );
3f8c4: e1a00004 mov r0, r4
3f8c8: e1a01005 mov r1, r5
3f8cc: e1a0e00f mov lr, pc
3f8d0: e12fff13 bx r3
if (err) {
3f8d4: e2504000 subs r4, r0, #0
3f8d8: 0affffe4 beq 3f870 <fcntl+0x84>
errno = err;
3f8dc: eb000dc3 bl 42ff0 <__errno> <== NOT EXECUTED
3f8e0: e5804000 str r4, [r0] <== NOT EXECUTED
3f8e4: e3e06000 mvn r6, #0 <== NOT EXECUTED
3f8e8: eaffffe0 b 3f870 <fcntl+0x84> <== NOT EXECUTED
errno = ENOTSUP;
ret = -1;
break;
default:
errno = EINVAL;
3f8ec: eb000dbf bl 42ff0 <__errno>
3f8f0: e3a03016 mov r3, #22
3f8f4: e5803000 str r3, [r0]
3f8f8: e3e06000 mvn r6, #0
3f8fc: eaffffdb b 3f870 <fcntl+0x84>
* This switch should contain all the cases from POSIX.
*/
switch ( cmd ) {
case F_DUPFD: /* dup */
fd2 = va_arg( ap, int );
3f900: e5927000 ldr r7, [r2]
if ( fd2 )
3f904: e3570000 cmp r7, #0
3f908: 0a000028 beq 3f9b0 <fcntl+0x1c4>
diop = rtems_libio_iop( fd2 );
3f90c: e1530007 cmp r3, r7 <== NOT EXECUTED
3f910: 93a09000 movls r9, #0 <== NOT EXECUTED
3f914: 80867307 addhi r7, r6, r7, lsl #6 <== NOT EXECUTED
3f918: 91a07009 movls r7, r9 <== NOT EXECUTED
3f91c: 81a09007 movhi r9, r7 <== NOT EXECUTED
}
diop->handlers = iop->handlers;
diop->file_info = iop->file_info;
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
3f920: e2858018 add r8, r5, #24
3f924: e8b8000f ldm r8!, {r0, r1, r2, r3}
3f928: e287a018 add sl, r7, #24
3f92c: e8aa000f stmia sl!, {r0, r1, r2, r3}
ret = -1;
break;
}
}
diop->handlers = iop->handlers;
3f930: e595203c ldr r2, [r5, #60] ; 0x3c
diop->file_info = iop->file_info;
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
3f934: e5981000 ldr r1, [r8]
break;
}
}
diop->handlers = iop->handlers;
diop->file_info = iop->file_info;
3f938: e5953038 ldr r3, [r5, #56] ; 0x38
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
3f93c: e0666009 rsb r6, r6, r9
}
diop->handlers = iop->handlers;
diop->file_info = iop->file_info;
diop->flags = iop->flags;
diop->pathinfo = iop->pathinfo;
3f940: e58a1000 str r1, [sl]
ret = -1;
break;
}
}
diop->handlers = iop->handlers;
3f944: e587203c str r2, [r7, #60] ; 0x3c
diop->file_info = iop->file_info;
3f948: e5873038 str r3, [r7, #56] ; 0x38
diop->flags = iop->flags;
3f94c: e587c014 str ip, [r7, #20]
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
3f950: e1a06346 asr r6, r6, #6
/*
* If we got this far successfully, then we give the optional
* filesystem specific handler a chance to process this.
*/
if (ret >= 0) {
3f954: e3560000 cmp r6, #0
3f958: aaffffd5 bge 3f8b4 <fcntl+0xc8>
3f95c: eaffffc3 b 3f870 <fcntl+0x84> <== NOT EXECUTED
diop->pathinfo = iop->pathinfo;
ret = (int) (diop - rtems_libio_iops);
break;
case F_GETFD: /* get f_flags */
ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0);
3f960: e1a0c5ac lsr ip, ip, #11
3f964: e20c6001 and r6, ip, #1
3f968: eaffffd1 b 3f8b4 <fcntl+0xc8>
* if a new process is exec()'ed. Since RTEMS does not support
* processes, then we can ignore this one except to make
* F_GETFD work.
*/
if ( va_arg( ap, int ) )
3f96c: e5926000 ldr r6, [r2]
3f970: e3560000 cmp r6, #0
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
3f974: 138ccb02 orrne ip, ip, #2048 ; 0x800
else
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
3f978: 03cccb02 biceq ip, ip, #2048 ; 0x800
* processes, then we can ignore this one except to make
* F_GETFD work.
*/
if ( va_arg( ap, int ) )
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
3f97c: 1585c014 strne ip, [r5, #20]
3f980: 13a06000 movne r6, #0
else
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
3f984: 0585c014 streq ip, [r5, #20]
3f988: eaffffc9 b 3f8b4 <fcntl+0xc8>
break;
case F_GETFL: /* more flags (cloexec) */
ret = rtems_libio_to_fcntl_flags( iop->flags );
3f98c: e1a0000c mov r0, ip
3f990: ebff21a7 bl 8034 <rtems_libio_to_fcntl_flags>
3f994: e1a06000 mov r6, r0
3f998: eaffffed b 3f954 <fcntl+0x168>
int mask;
int ret = 0;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
3f99c: eb000d93 bl 42ff0 <__errno> <== NOT EXECUTED
3f9a0: e3a03009 mov r3, #9 <== NOT EXECUTED
3f9a4: e5803000 str r3, [r0] <== NOT EXECUTED
3f9a8: e3e06000 mvn r6, #0 <== NOT EXECUTED
3f9ac: eaffffaf b 3f870 <fcntl+0x84> <== NOT EXECUTED
fd2 = va_arg( ap, int );
if ( fd2 )
diop = rtems_libio_iop( fd2 );
else {
/* allocate a file control block */
diop = rtems_libio_allocate();
3f9b0: ebff2211 bl 81fc <rtems_libio_allocate>
if ( diop == 0 ) {
3f9b4: e2507000 subs r7, r0, #0
3f9b8: 0affffc9 beq 3f8e4 <fcntl+0xf8>
3f9bc: e5986000 ldr r6, [r8]
3f9c0: e595c014 ldr ip, [r5, #20]
3f9c4: e1a09007 mov r9, r7
3f9c8: eaffffd4 b 3f920 <fcntl+0x134>
00002c08 <fdatasync>:
int fd
)
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
2c08: e59f3070 ldr r3, [pc, #112] ; 2c80 <fdatasync+0x78>
2c0c: e5933000 ldr r3, [r3]
2c10: e1500003 cmp r0, r3
#include <rtems/seterr.h>
int fdatasync(
int fd
)
{
2c14: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
2c18: 2a00000e bcs 2c58 <fdatasync+0x50>
iop = rtems_libio_iop( fd );
2c1c: e59f3060 ldr r3, [pc, #96] ; 2c84 <fdatasync+0x7c>
2c20: e5933000 ldr r3, [r3]
2c24: e0830300 add r0, r3, r0, lsl #6
rtems_libio_check_is_open(iop);
2c28: e5903014 ldr r3, [r0, #20]
2c2c: e3130c01 tst r3, #256 ; 0x100
2c30: 0a000008 beq 2c58 <fdatasync+0x50>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
2c34: e3130004 tst r3, #4
2c38: 0a000006 beq 2c58 <fdatasync+0x50>
/*
* Now process the fdatasync().
*/
if ( !iop->handlers->fdatasync_h )
2c3c: e590303c ldr r3, [r0, #60] ; 0x3c
2c40: e593302c ldr r3, [r3, #44] ; 0x2c
2c44: e3530000 cmp r3, #0
2c48: 0a000007 beq 2c6c <fdatasync+0x64>
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->handlers->fdatasync_h)( iop );
2c4c: e1a0e00f mov lr, pc <== NOT EXECUTED
2c50: e12fff13 bx r3 <== NOT EXECUTED
}
2c54: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
2c58: eb003278 bl f640 <__errno>
2c5c: e3a03009 mov r3, #9
2c60: e5803000 str r3, [r0]
2c64: e3e00000 mvn r0, #0
2c68: e49df004 pop {pc} ; (ldr pc, [sp], #4)
/*
* Now process the fdatasync().
*/
if ( !iop->handlers->fdatasync_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
2c6c: eb003273 bl f640 <__errno>
2c70: e3a03086 mov r3, #134 ; 0x86
2c74: e5803000 str r3, [r0]
2c78: e3e00000 mvn r0, #0
2c7c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
00009620 <fifo_open>:
*/
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9620: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
)
{
pipe_control_t *pipe;
int err = 0;
if (rtems_semaphore_obtain(rtems_pipe_semaphore,
9624: e59f53bc ldr r5, [pc, #956] ; 99e8 <fifo_open+0x3c8>
*/
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9628: e1a07001 mov r7, r1
)
{
pipe_control_t *pipe;
int err = 0;
if (rtems_semaphore_obtain(rtems_pipe_semaphore,
962c: e3a01000 mov r1, #0
*/
int fifo_open(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9630: e24dd008 sub sp, sp, #8
9634: e1a04000 mov r4, r0
)
{
pipe_control_t *pipe;
int err = 0;
if (rtems_semaphore_obtain(rtems_pipe_semaphore,
9638: e1a02001 mov r2, r1
963c: e5950000 ldr r0, [r5]
9640: ebfff059 bl 57ac <rtems_semaphore_obtain>
9644: e2509000 subs r9, r0, #0
9648: 13e08003 mvnne r8, #3
964c: 1a00001c bne 96c4 <fifo_open+0xa4>
RTEMS_WAIT, RTEMS_NO_TIMEOUT) != RTEMS_SUCCESSFUL)
return -EINTR;
pipe = *pipep;
9650: e5946000 ldr r6, [r4] <== NOT EXECUTED
if (pipe == NULL) {
9654: e3560000 cmp r6, #0 <== NOT EXECUTED
9658: 0a00001c beq 96d0 <fifo_open+0xb0> <== NOT EXECUTED
err = pipe_alloc(&pipe);
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
965c: e3a01000 mov r1, #0 <== NOT EXECUTED
9660: e5960028 ldr r0, [r6, #40] ; 0x28 <== NOT EXECUTED
9664: e1a02001 mov r2, r1 <== NOT EXECUTED
9668: ebfff04f bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
err = -EINTR;
if (*pipep == NULL) {
966c: e5943000 ldr r3, [r4] <== NOT EXECUTED
err = pipe_alloc(&pipe);
if (err)
goto out;
}
if (! PIPE_LOCK(pipe))
9670: e3500000 cmp r0, #0 <== NOT EXECUTED
9674: 01a08000 moveq r8, r0 <== NOT EXECUTED
9678: 13e08003 mvnne r8, #3 <== NOT EXECUTED
err = -EINTR;
if (*pipep == NULL) {
967c: e3530000 cmp r3, #0 <== NOT EXECUTED
9680: 0a0000ab beq 9934 <fifo_open+0x314> <== NOT EXECUTED
else
*pipep = pipe;
}
out:
rtems_semaphore_release(rtems_pipe_semaphore);
9684: e5950000 ldr r0, [r5] <== NOT EXECUTED
9688: ebfff08f bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
pipe_control_t *pipe;
unsigned int prevCounter;
int err;
err = pipe_new(pipep);
if (err)
968c: e3580000 cmp r8, #0 <== NOT EXECUTED
9690: 1a00000b bne 96c4 <fifo_open+0xa4> <== NOT EXECUTED
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
9694: e5973014 ldr r3, [r7, #20] <== NOT EXECUTED
9698: e2033006 and r3, r3, #6 <== NOT EXECUTED
969c: e3530004 cmp r3, #4 <== NOT EXECUTED
int err;
err = pipe_new(pipep);
if (err)
return err;
pipe = *pipep;
96a0: e5945000 ldr r5, [r4] <== NOT EXECUTED
switch (LIBIO_ACCMODE(iop)) {
96a4: 0a000082 beq 98b4 <fifo_open+0x294> <== NOT EXECUTED
96a8: e3530006 cmp r3, #6 <== NOT EXECUTED
96ac: 0a00006c beq 9864 <fifo_open+0x244> <== NOT EXECUTED
96b0: e3530002 cmp r3, #2 <== NOT EXECUTED
96b4: 0a000046 beq 97d4 <fifo_open+0x1b4> <== NOT EXECUTED
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
96b8: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
96bc: ebfff082 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
96c0: e3a08000 mov r8, #0 <== NOT EXECUTED
return 0;
out_error:
pipe_release(pipep, iop);
return err;
}
96c4: e1a00008 mov r0, r8
96c8: e28dd008 add sp, sp, #8
96cc: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
{
static char c = 'a';
pipe_control_t *pipe;
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
96d0: e3a00034 mov r0, #52 ; 0x34 <== NOT EXECUTED
96d4: ebffe34c bl 240c <malloc> <== NOT EXECUTED
if (pipe == NULL)
96d8: e3500000 cmp r0, #0 <== NOT EXECUTED
{
static char c = 'a';
pipe_control_t *pipe;
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
96dc: e1a06000 mov r6, r0 <== NOT EXECUTED
96e0: e1a0a000 mov sl, r0 <== NOT EXECUTED
if (pipe == NULL)
96e4: 0a0000bd beq 99e0 <fifo_open+0x3c0> <== NOT EXECUTED
return err;
memset(pipe, 0, sizeof(pipe_control_t));
96e8: e1a02000 mov r2, r0 <== NOT EXECUTED
96ec: e4829004 str r9, [r2], #4 <== NOT EXECUTED
96f0: e2822004 add r2, r2, #4 <== NOT EXECUTED
96f4: e4829004 str r9, [r2], #4 <== NOT EXECUTED
96f8: e4829004 str r9, [r2], #4 <== NOT EXECUTED
96fc: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9700: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9704: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9708: e4829004 str r9, [r2], #4 <== NOT EXECUTED
970c: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9710: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9714: e4829004 str r9, [r2], #4 <== NOT EXECUTED
9718: e4829004 str r9, [r2], #4 <== NOT EXECUTED
pipe->Size = PIPE_BUF;
971c: e3a03c02 mov r3, #512 ; 0x200 <== NOT EXECUTED
int err = -ENOMEM;
pipe = malloc(sizeof(pipe_control_t));
if (pipe == NULL)
return err;
memset(pipe, 0, sizeof(pipe_control_t));
9720: e5829000 str r9, [r2] <== NOT EXECUTED
pipe->Size = PIPE_BUF;
pipe->Buffer = malloc(pipe->Size);
9724: e1a00003 mov r0, r3 <== NOT EXECUTED
pipe = malloc(sizeof(pipe_control_t));
if (pipe == NULL)
return err;
memset(pipe, 0, sizeof(pipe_control_t));
pipe->Size = PIPE_BUF;
9728: e5863004 str r3, [r6, #4] <== NOT EXECUTED
pipe->Buffer = malloc(pipe->Size);
972c: ebffe336 bl 240c <malloc> <== NOT EXECUTED
if (! pipe->Buffer)
9730: e3500000 cmp r0, #0 <== NOT EXECUTED
if (pipe == NULL)
return err;
memset(pipe, 0, sizeof(pipe_control_t));
pipe->Size = PIPE_BUF;
pipe->Buffer = malloc(pipe->Size);
9734: e5860000 str r0, [r6] <== NOT EXECUTED
if (! pipe->Buffer)
9738: 0a0000a6 beq 99d8 <fifo_open+0x3b8> <== NOT EXECUTED
goto err_buf;
err = -ENOMEM;
if (rtems_barrier_create(
973c: e59f82a8 ldr r8, [pc, #680] ; 99ec <fifo_open+0x3cc> <== NOT EXECUTED
9740: e5d80000 ldrb r0, [r8] <== NOT EXECUTED
9744: e3800205 orr r0, r0, #1342177280 ; 0x50000000 <== NOT EXECUTED
9748: e3800849 orr r0, r0, #4784128 ; 0x490000 <== NOT EXECUTED
974c: e1a01009 mov r1, r9 <== NOT EXECUTED
9750: e3800c72 orr r0, r0, #29184 ; 0x7200 <== NOT EXECUTED
9754: e1a02009 mov r2, r9 <== NOT EXECUTED
9758: e286302c add r3, r6, #44 ; 0x2c <== NOT EXECUTED
975c: eb0006df bl b2e0 <rtems_barrier_create> <== NOT EXECUTED
9760: e2501000 subs r1, r0, #0 <== NOT EXECUTED
9764: 1a000099 bne 99d0 <fifo_open+0x3b0> <== NOT EXECUTED
rtems_build_name ('P', 'I', 'r', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->readBarrier) != RTEMS_SUCCESSFUL)
goto err_rbar;
if (rtems_barrier_create(
9768: e5d80000 ldrb r0, [r8] <== NOT EXECUTED
976c: e3800205 orr r0, r0, #1342177280 ; 0x50000000 <== NOT EXECUTED
9770: e3800849 orr r0, r0, #4784128 ; 0x490000 <== NOT EXECUTED
9774: e2863030 add r3, r6, #48 ; 0x30 <== NOT EXECUTED
9778: e3800c77 orr r0, r0, #30464 ; 0x7700 <== NOT EXECUTED
977c: e1a02001 mov r2, r1 <== NOT EXECUTED
9780: eb0006d6 bl b2e0 <rtems_barrier_create> <== NOT EXECUTED
9784: e2503000 subs r3, r0, #0 <== NOT EXECUTED
9788: 1a00008e bne 99c8 <fifo_open+0x3a8> <== NOT EXECUTED
rtems_build_name ('P', 'I', 'w', c),
RTEMS_BARRIER_MANUAL_RELEASE, 0,
&pipe->writeBarrier) != RTEMS_SUCCESSFUL)
goto err_wbar;
if (rtems_semaphore_create(
978c: e5d80000 ldrb r0, [r8] <== NOT EXECUTED
9790: e3800205 orr r0, r0, #1342177280 ; 0x50000000 <== NOT EXECUTED
9794: e3800849 orr r0, r0, #4784128 ; 0x490000 <== NOT EXECUTED
9798: e286c028 add ip, r6, #40 ; 0x28 <== NOT EXECUTED
979c: e3800c73 orr r0, r0, #29440 ; 0x7300 <== NOT EXECUTED
97a0: e3a01001 mov r1, #1 <== NOT EXECUTED
97a4: e3a02010 mov r2, #16 <== NOT EXECUTED
97a8: e58dc000 str ip, [sp] <== NOT EXECUTED
97ac: ebffef63 bl 5540 <rtems_semaphore_create> <== NOT EXECUTED
97b0: e3500000 cmp r0, #0 <== NOT EXECUTED
97b4: 1a000081 bne 99c0 <fifo_open+0x3a0> <== NOT EXECUTED
#ifdef RTEMS_POSIX_API
pipe_interruptible(pipe);
#endif
*pipep = pipe;
if (c ++ == 'z')
97b8: e5d83000 ldrb r3, [r8] <== NOT EXECUTED
97bc: e353007a cmp r3, #122 ; 0x7a <== NOT EXECUTED
97c0: e2833001 add r3, r3, #1 <== NOT EXECUTED
97c4: e5c83000 strb r3, [r8] <== NOT EXECUTED
c = 'a';
97c8: 03a03061 moveq r3, #97 ; 0x61 <== NOT EXECUTED
97cc: 05c83000 strbeq r3, [r8] <== NOT EXECUTED
97d0: eaffffa1 b 965c <fifo_open+0x3c> <== NOT EXECUTED
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
97d4: e5953010 ldr r3, [r5, #16] <== NOT EXECUTED
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
97d8: e5952020 ldr r2, [r5, #32] <== NOT EXECUTED
if (pipe->Readers ++ == 0)
97dc: e3530000 cmp r3, #0 <== NOT EXECUTED
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
97e0: e2822001 add r2, r2, #1 <== NOT EXECUTED
if (pipe->Readers ++ == 0)
97e4: e2833001 add r3, r3, #1 <== NOT EXECUTED
return err;
pipe = *pipep;
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
97e8: e5852020 str r2, [r5, #32] <== NOT EXECUTED
if (pipe->Readers ++ == 0)
97ec: e5853010 str r3, [r5, #16] <== NOT EXECUTED
97f0: 0a00006a beq 99a0 <fifo_open+0x380> <== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
if (pipe->Writers == 0) {
97f4: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
97f8: e3530000 cmp r3, #0 <== NOT EXECUTED
97fc: 1affffad bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
/* Not an error */
if (LIBIO_NODELAY(iop))
9800: e5973014 ldr r3, [r7, #20] <== NOT EXECUTED
9804: e3130001 tst r3, #1 <== NOT EXECUTED
9808: 1affffaa bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
break;
prevCounter = pipe->writerCounter;
980c: e5956024 ldr r6, [r5, #36] ; 0x24 <== NOT EXECUTED
9810: ea000006 b 9830 <fifo_open+0x210> <== NOT EXECUTED
/* Wait until a writer opens the pipe */
do {
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
goto out_error;
if (! PIPE_LOCK(pipe))
9814: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
9818: ebffefe3 bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
981c: e3500000 cmp r0, #0 <== NOT EXECUTED
9820: 1a00000a bne 9850 <fifo_open+0x230> <== NOT EXECUTED
goto out_error;
} while (prevCounter == pipe->writerCounter);
9824: e5953024 ldr r3, [r5, #36] ; 0x24 <== NOT EXECUTED
9828: e1530006 cmp r3, r6 <== NOT EXECUTED
982c: 1affffa1 bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
prevCounter = pipe->writerCounter;
err = -EINTR;
/* Wait until a writer opens the pipe */
do {
PIPE_UNLOCK(pipe);
9830: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
9834: ebfff024 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if (! PIPE_READWAIT(pipe))
9838: e3a01000 mov r1, #0 <== NOT EXECUTED
983c: e595002c ldr r0, [r5, #44] ; 0x2c <== NOT EXECUTED
9840: eb00070a bl b470 <rtems_barrier_wait> <== NOT EXECUTED
9844: e2501000 subs r1, r0, #0 <== NOT EXECUTED
goto out_error;
if (! PIPE_LOCK(pipe))
9848: e1a02001 mov r2, r1 <== NOT EXECUTED
prevCounter = pipe->writerCounter;
err = -EINTR;
/* Wait until a writer opens the pipe */
do {
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
984c: 0afffff0 beq 9814 <fifo_open+0x1f4> <== NOT EXECUTED
PIPE_WAKEUPREADERS(pipe);
break;
}
PIPE_UNLOCK(pipe);
return 0;
9850: e3e08003 mvn r8, #3 <== NOT EXECUTED
out_error:
pipe_release(pipep, iop);
9854: e1a00004 mov r0, r4 <== NOT EXECUTED
9858: e1a01007 mov r1, r7 <== NOT EXECUTED
985c: ebffff29 bl 9508 <pipe_release> <== NOT EXECUTED
return err;
9860: eaffff97 b 96c4 <fifo_open+0xa4> <== NOT EXECUTED
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
9864: e5953010 ldr r3, [r5, #16] <== NOT EXECUTED
} while (prevCounter == pipe->readerCounter);
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
9868: e5952020 ldr r2, [r5, #32] <== NOT EXECUTED
if (pipe->Readers ++ == 0)
986c: e3530000 cmp r3, #0 <== NOT EXECUTED
} while (prevCounter == pipe->readerCounter);
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
9870: e2822001 add r2, r2, #1 <== NOT EXECUTED
if (pipe->Readers ++ == 0)
9874: e2833001 add r3, r3, #1 <== NOT EXECUTED
} while (prevCounter == pipe->readerCounter);
}
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
9878: e5852020 str r2, [r5, #32] <== NOT EXECUTED
if (pipe->Readers ++ == 0)
987c: e5853010 str r3, [r5, #16] <== NOT EXECUTED
9880: 0a00003e beq 9980 <fifo_open+0x360> <== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
9884: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
9888: e5952024 ldr r2, [r5, #36] ; 0x24 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
988c: e3530000 cmp r3, #0 <== NOT EXECUTED
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
9890: e2822001 add r2, r2, #1 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
9894: e2833001 add r3, r3, #1 <== NOT EXECUTED
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
pipe->writerCounter ++;
9898: e5852024 str r2, [r5, #36] ; 0x24 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
989c: e5853014 str r3, [r5, #20] <== NOT EXECUTED
98a0: 1affff84 bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
PIPE_WAKEUPREADERS(pipe);
98a4: e595002c ldr r0, [r5, #44] ; 0x2c <== NOT EXECUTED
98a8: e28d1004 add r1, sp, #4 <== NOT EXECUTED
98ac: eb0006d6 bl b40c <rtems_barrier_release> <== NOT EXECUTED
98b0: eaffff80 b 96b8 <fifo_open+0x98> <== NOT EXECUTED
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
98b4: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
} while (prevCounter == pipe->writerCounter);
}
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
98b8: e5952024 ldr r2, [r5, #36] ; 0x24 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
98bc: e3530000 cmp r3, #0 <== NOT EXECUTED
} while (prevCounter == pipe->writerCounter);
}
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
98c0: e2822001 add r2, r2, #1 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
98c4: e2833001 add r3, r3, #1 <== NOT EXECUTED
} while (prevCounter == pipe->writerCounter);
}
break;
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
98c8: e5852024 str r2, [r5, #36] ; 0x24 <== NOT EXECUTED
if (pipe->Writers ++ == 0)
98cc: e5853014 str r3, [r5, #20] <== NOT EXECUTED
98d0: 0a00002e beq 9990 <fifo_open+0x370> <== NOT EXECUTED
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
98d4: e5953010 ldr r3, [r5, #16] <== NOT EXECUTED
98d8: e3530000 cmp r3, #0 <== NOT EXECUTED
98dc: 1affff75 bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
98e0: e5973014 ldr r3, [r7, #20] <== NOT EXECUTED
98e4: e3130001 tst r3, #1 <== NOT EXECUTED
err = -ENXIO;
goto out_error;
}
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
98e8: 05956020 ldreq r6, [r5, #32] <== NOT EXECUTED
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
98ec: 0a000007 beq 9910 <fifo_open+0x2f0> <== NOT EXECUTED
98f0: ea00002e b 99b0 <fifo_open+0x390> <== NOT EXECUTED
err = -EINTR;
do {
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
goto out_error;
if (! PIPE_LOCK(pipe))
98f4: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
98f8: ebffefab bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
98fc: e3500000 cmp r0, #0 <== NOT EXECUTED
9900: 1affffd2 bne 9850 <fifo_open+0x230> <== NOT EXECUTED
goto out_error;
} while (prevCounter == pipe->readerCounter);
9904: e5953020 ldr r3, [r5, #32] <== NOT EXECUTED
9908: e1530006 cmp r3, r6 <== NOT EXECUTED
990c: 1affff69 bne 96b8 <fifo_open+0x98> <== NOT EXECUTED
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
err = -EINTR;
do {
PIPE_UNLOCK(pipe);
9910: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
9914: ebffefec bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if (! PIPE_WRITEWAIT(pipe))
9918: e3a01000 mov r1, #0 <== NOT EXECUTED
991c: e5950030 ldr r0, [r5, #48] ; 0x30 <== NOT EXECUTED
9920: eb0006d2 bl b470 <rtems_barrier_wait> <== NOT EXECUTED
9924: e2501000 subs r1, r0, #0 <== NOT EXECUTED
goto out_error;
if (! PIPE_LOCK(pipe))
9928: e1a02001 mov r2, r1 <== NOT EXECUTED
if (pipe->Readers == 0) {
prevCounter = pipe->readerCounter;
err = -EINTR;
do {
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
992c: 0afffff0 beq 98f4 <fifo_open+0x2d4> <== NOT EXECUTED
9930: eaffffc6 b 9850 <fifo_open+0x230> <== NOT EXECUTED
if (! PIPE_LOCK(pipe))
err = -EINTR;
if (*pipep == NULL) {
if (err)
9934: e3580000 cmp r8, #0 <== NOT EXECUTED
9938: 1a000003 bne 994c <fifo_open+0x32c> <== NOT EXECUTED
pipe_free(pipe);
else
*pipep = pipe;
993c: e5846000 str r6, [r4] <== NOT EXECUTED
}
out:
rtems_semaphore_release(rtems_pipe_semaphore);
9940: e5950000 ldr r0, [r5] <== NOT EXECUTED
9944: ebffefe0 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
9948: eaffff51 b 9694 <fifo_open+0x74> <== NOT EXECUTED
/* Called with rtems_pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
994c: e596002c ldr r0, [r6, #44] ; 0x2c <== NOT EXECUTED
9950: eb000693 bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
rtems_barrier_delete(pipe->writeBarrier);
9954: e5960030 ldr r0, [r6, #48] ; 0x30 <== NOT EXECUTED
9958: eb000691 bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
rtems_semaphore_delete(pipe->Semaphore);
995c: e5960028 ldr r0, [r6, #40] ; 0x28 <== NOT EXECUTED
9960: ebffef68 bl 5708 <rtems_semaphore_delete> <== NOT EXECUTED
free(pipe->Buffer);
9964: e5960000 ldr r0, [r6] <== NOT EXECUTED
9968: ebffe1ce bl 20a8 <free> <== NOT EXECUTED
free(pipe);
996c: e1a00006 mov r0, r6 <== NOT EXECUTED
9970: ebffe1cc bl 20a8 <free> <== NOT EXECUTED
else
*pipep = pipe;
}
out:
rtems_semaphore_release(rtems_pipe_semaphore);
9974: e5950000 ldr r0, [r5] <== NOT EXECUTED
9978: ebffefd3 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
997c: eaffff50 b 96c4 <fifo_open+0xa4> <== NOT EXECUTED
break;
case LIBIO_FLAGS_READ_WRITE:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
9980: e5950030 ldr r0, [r5, #48] ; 0x30 <== NOT EXECUTED
9984: e28d1004 add r1, sp, #4 <== NOT EXECUTED
9988: eb00069f bl b40c <rtems_barrier_release> <== NOT EXECUTED
998c: eaffffbc b 9884 <fifo_open+0x264> <== NOT EXECUTED
case LIBIO_FLAGS_WRITE:
pipe->writerCounter ++;
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
9990: e595002c ldr r0, [r5, #44] ; 0x2c <== NOT EXECUTED
9994: e28d1004 add r1, sp, #4 <== NOT EXECUTED
9998: eb00069b bl b40c <rtems_barrier_release> <== NOT EXECUTED
999c: eaffffcc b 98d4 <fifo_open+0x2b4> <== NOT EXECUTED
switch (LIBIO_ACCMODE(iop)) {
case LIBIO_FLAGS_READ:
pipe->readerCounter ++;
if (pipe->Readers ++ == 0)
PIPE_WAKEUPWRITERS(pipe);
99a0: e5950030 ldr r0, [r5, #48] ; 0x30 <== NOT EXECUTED
99a4: e28d1004 add r1, sp, #4 <== NOT EXECUTED
99a8: eb000697 bl b40c <rtems_barrier_release> <== NOT EXECUTED
99ac: eaffff90 b 97f4 <fifo_open+0x1d4> <== NOT EXECUTED
if (pipe->Writers ++ == 0)
PIPE_WAKEUPREADERS(pipe);
if (pipe->Readers == 0 && LIBIO_NODELAY(iop)) {
PIPE_UNLOCK(pipe);
99b0: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
99b4: ebffefc4 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
99b8: e3e08005 mvn r8, #5 <== NOT EXECUTED
err = -ENXIO;
goto out_error;
99bc: eaffffa4 b 9854 <fifo_open+0x234> <== NOT EXECUTED
if (c ++ == 'z')
c = 'a';
return 0;
err_sem:
rtems_barrier_delete(pipe->writeBarrier);
99c0: e5960030 ldr r0, [r6, #48] ; 0x30 <== NOT EXECUTED
99c4: eb000676 bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
err_wbar:
rtems_barrier_delete(pipe->readBarrier);
99c8: e59a002c ldr r0, [sl, #44] ; 0x2c <== NOT EXECUTED
99cc: eb000674 bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
err_rbar:
free(pipe->Buffer);
99d0: e59a0000 ldr r0, [sl] <== NOT EXECUTED
99d4: ebffe1b3 bl 20a8 <free> <== NOT EXECUTED
err_buf:
free(pipe);
99d8: e1a0000a mov r0, sl <== NOT EXECUTED
99dc: ebffe1b1 bl 20a8 <free> <== NOT EXECUTED
99e0: e3e0800b mvn r8, #11 <== NOT EXECUTED
99e4: eaffffe2 b 9974 <fifo_open+0x354> <== NOT EXECUTED
00002c88 <fpathconf>:
{
long return_value;
rtems_libio_t *iop;
rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
2c88: e59f30ec ldr r3, [pc, #236] ; 2d7c <fpathconf+0xf4>
2c8c: e5933000 ldr r3, [r3]
2c90: e1500003 cmp r0, r3
long fpathconf(
int fd,
int name
)
{
2c94: e52de004 push {lr} ; (str lr, [sp, #-4]!)
long return_value;
rtems_libio_t *iop;
rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
2c98: 2a000032 bcs 2d68 <fpathconf+0xe0>
iop = rtems_libio_iop(fd);
2c9c: e59f30dc ldr r3, [pc, #220] ; 2d80 <fpathconf+0xf8>
2ca0: e5933000 ldr r3, [r3]
2ca4: e0830300 add r0, r3, r0, lsl #6
rtems_libio_check_is_open(iop);
2ca8: e5903014 ldr r3, [r0, #20]
2cac: e3130c01 tst r3, #256 ; 0x100
2cb0: 0a00002c beq 2d68 <fpathconf+0xe0>
/*
* Now process the information request.
*/
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
2cb4: e5903028 ldr r3, [r0, #40] ; 0x28
switch ( name ) {
2cb8: e351000b cmp r1, #11
2cbc: 979ff101 ldrls pc, [pc, r1, lsl #2]
2cc0: ea00000d b 2cfc <fpathconf+0x74>
2cc4: 00002d10 .word 0x00002d10
2cc8: 00002d18 .word 0x00002d18
2ccc: 00002d20 .word 0x00002d20
2cd0: 00002d28 .word 0x00002d28
2cd4: 00002d30 .word 0x00002d30
2cd8: 00002d38 .word 0x00002d38
2cdc: 00002d40 .word 0x00002d40
2ce0: 00002d48 .word 0x00002d48
2ce4: 00002d50 .word 0x00002d50
2ce8: 00002d58 .word 0x00002d58
2cec: 00002d60 .word 0x00002d60
2cf0: 00002cf4 .word 0x00002cf4
break;
case _PC_PRIO_IO:
return_value = the_limits->posix_prio_io;
break;
case _PC_SYNC_IO:
return_value = the_limits->posix_sync_io;
2cf4: e5930060 ldr r0, [r3, #96] ; 0x60
break;
2cf8: e49df004 pop {pc} ; (ldr pc, [sp], #4)
default:
rtems_set_errno_and_return_minus_one( EINVAL );
2cfc: eb00324f bl f640 <__errno>
2d00: e3a03016 mov r3, #22
2d04: e5803000 str r3, [r0]
2d08: e3e00000 mvn r0, #0
break;
}
return return_value;
}
2d0c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
switch ( name ) {
case _PC_LINK_MAX:
return_value = the_limits->link_max;
2d10: e5930038 ldr r0, [r3, #56] ; 0x38
break;
2d14: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_MAX_CANON:
return_value = the_limits->max_canon;
2d18: e593003c ldr r0, [r3, #60] ; 0x3c
break;
2d1c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_MAX_INPUT:
return_value = the_limits->max_input;
2d20: e5930040 ldr r0, [r3, #64] ; 0x40
break;
2d24: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_NAME_MAX:
return_value = the_limits->name_max;
2d28: e5930044 ldr r0, [r3, #68] ; 0x44
break;
2d2c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_PATH_MAX:
return_value = the_limits->path_max;
2d30: e5930048 ldr r0, [r3, #72] ; 0x48
break;
2d34: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_PIPE_BUF:
return_value = the_limits->pipe_buf;
2d38: e593004c ldr r0, [r3, #76] ; 0x4c
break;
2d3c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_CHOWN_RESTRICTED:
return_value = the_limits->posix_chown_restrictions;
2d40: e5930054 ldr r0, [r3, #84] ; 0x54
break;
2d44: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_NO_TRUNC:
return_value = the_limits->posix_no_trunc;
2d48: e5930058 ldr r0, [r3, #88] ; 0x58
break;
2d4c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_VDISABLE:
return_value = the_limits->posix_vdisable;
2d50: e5930064 ldr r0, [r3, #100] ; 0x64
break;
2d54: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_ASYNC_IO:
return_value = the_limits->posix_async_io;
2d58: e5930050 ldr r0, [r3, #80] ; 0x50
break;
2d5c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case _PC_PRIO_IO:
return_value = the_limits->posix_prio_io;
2d60: e593005c ldr r0, [r3, #92] ; 0x5c
break;
2d64: e49df004 pop {pc} ; (ldr pc, [sp], #4)
rtems_libio_t *iop;
rtems_filesystem_limits_and_options_t *the_limits;
rtems_libio_check_fd(fd);
iop = rtems_libio_iop(fd);
rtems_libio_check_is_open(iop);
2d68: eb003234 bl f640 <__errno>
2d6c: e3a03009 mov r3, #9
2d70: e5803000 str r3, [r0]
2d74: e3e00000 mvn r0, #0
2d78: e49df004 pop {pc} ; (ldr pc, [sp], #4)
000020a8 <free>:
void free(
void *ptr
)
{
MSBUMP(free_calls, 1);
20a8: e59f3088 ldr r3, [pc, #136] ; 2138 <free+0x90>
20ac: e593200c ldr r2, [r3, #12]
20b0: e92d4030 push {r4, r5, lr}
20b4: e2822001 add r2, r2, #1
if ( !ptr )
20b8: e2504000 subs r4, r0, #0
void free(
void *ptr
)
{
MSBUMP(free_calls, 1);
20bc: e583200c str r2, [r3, #12]
if ( !ptr )
20c0: 08bd8030 popeq {r4, r5, pc}
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
20c4: e59f3070 ldr r3, [pc, #112] ; 213c <free+0x94>
20c8: e5933000 ldr r3, [r3]
20cc: e3530003 cmp r3, #3
20d0: 0a000012 beq 2120 <free+0x78>
#endif
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
20d4: e59f3064 ldr r3, [pc, #100] ; 2140 <free+0x98>
20d8: e5933000 ldr r3, [r3]
20dc: e3530000 cmp r3, #0
(*rtems_malloc_statistics_helpers->at_free)(ptr);
20e0: 11a00004 movne r0, r4
20e4: 11a0e00f movne lr, pc
20e8: 1593f008 ldrne pc, [r3, #8]
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
20ec: e59f5050 ldr r5, [pc, #80] ; 2144 <free+0x9c>
20f0: e1a01004 mov r1, r4
20f4: e5950000 ldr r0, [r5]
20f8: eb001444 bl 7210 <_Protected_heap_Free>
20fc: e3500000 cmp r0, #0
2100: 18bd8030 popne {r4, r5, pc}
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
ptr,
RTEMS_Malloc_Heap->area_begin,
2104: e5952000 ldr r2, [r5] <== NOT EXECUTED
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_free)(ptr);
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
2108: e59f0038 ldr r0, [pc, #56] ; 2148 <free+0xa0> <== NOT EXECUTED
210c: e2822018 add r2, r2, #24 <== NOT EXECUTED
2110: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
2114: e1a01004 mov r1, r4 <== NOT EXECUTED
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
2118: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_free)(ptr);
if ( !_Protected_heap_Free( RTEMS_Malloc_Heap, ptr ) ) {
printk( "Program heap: free of bad pointer %p -- range %p - %p \n",
211c: ea000397 b 2f80 <printk> <== NOT EXECUTED
/*
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
2120: eb00005d bl 229c <malloc_is_system_state_OK>
2124: e3500000 cmp r0, #0
2128: 1affffe9 bne 20d4 <free+0x2c>
!malloc_is_system_state_OK() ) {
malloc_deferred_free(ptr);
212c: e1a00004 mov r0, r4 <== NOT EXECUTED
RTEMS_Malloc_Heap->area_begin,
RTEMS_Malloc_Heap->area_end
);
}
}
2130: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED
* Do not attempt to free memory if in a critical section or ISR.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
!malloc_is_system_state_OK() ) {
malloc_deferred_free(ptr);
2134: ea00006b b 22e8 <malloc_deferred_free> <== NOT EXECUTED
0002a3c8 <free_user_env>:
static void
free_user_env(void *venv)
{
rtems_user_env_t *env = (rtems_user_env_t*) venv ;
if (env != &rtems_global_user_env
2a3c8: e59f3058 ldr r3, [pc, #88] ; 2a428 <free_user_env+0x60> <== NOT EXECUTED
2a3cc: e1500003 cmp r0, r3 <== NOT EXECUTED
* NOTE: this must be called with
* thread dispatching disabled!
*/
static void
free_user_env(void *venv)
{
2a3d0: e92d4010 push {r4, lr} <== NOT EXECUTED
2a3d4: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_user_env_t *env = (rtems_user_env_t*) venv ;
if (env != &rtems_global_user_env
2a3d8: 08bd8010 popeq {r4, pc} <== NOT EXECUTED
#ifdef HAVE_USERENV_REFCNT
&& --env->refcnt <= 0
#endif
) {
rtems_filesystem_freenode( &env->current_directory);
2a3dc: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
2a3e0: e3530000 cmp r3, #0 <== NOT EXECUTED
2a3e4: 0a000004 beq 2a3fc <free_user_env+0x34> <== NOT EXECUTED
2a3e8: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2a3ec: e3530000 cmp r3, #0 <== NOT EXECUTED
2a3f0: 12800004 addne r0, r0, #4 <== NOT EXECUTED
2a3f4: 11a0e00f movne lr, pc <== NOT EXECUTED
2a3f8: 112fff13 bxne r3 <== NOT EXECUTED
rtems_filesystem_freenode( &env->root_directory);
2a3fc: e5943024 ldr r3, [r4, #36] ; 0x24 <== NOT EXECUTED
2a400: e3530000 cmp r3, #0 <== NOT EXECUTED
2a404: 0a000004 beq 2a41c <free_user_env+0x54> <== NOT EXECUTED
2a408: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2a40c: e3530000 cmp r3, #0 <== NOT EXECUTED
2a410: 12840018 addne r0, r4, #24 <== NOT EXECUTED
2a414: 11a0e00f movne lr, pc <== NOT EXECUTED
2a418: 112fff13 bxne r3 <== NOT EXECUTED
free(env);
2a41c: e1a00004 mov r0, r4 <== NOT EXECUTED
}
}
2a420: e8bd4010 pop {r4, lr} <== NOT EXECUTED
&& --env->refcnt <= 0
#endif
) {
rtems_filesystem_freenode( &env->current_directory);
rtems_filesystem_freenode( &env->root_directory);
free(env);
2a424: eaff7651 b 7d70 <free> <== NOT EXECUTED
00019ae4 <fstat>:
int fstat(
int fd,
struct stat *sbuf
)
{
19ae4: e92d4030 push {r4, r5, lr}
/*
* Check to see if we were passed a valid pointer.
*/
if ( !sbuf )
19ae8: e2515000 subs r5, r1, #0
19aec: 0a000023 beq 19b80 <fstat+0x9c>
/*
* Now process the stat() request.
*/
iop = rtems_libio_iop( fd );
19af0: e59f309c ldr r3, [pc, #156] ; 19b94 <fstat+0xb0>
19af4: e5933000 ldr r3, [r3]
19af8: e1500003 cmp r0, r3
19afc: 2a000015 bcs 19b58 <fstat+0x74>
19b00: e59f3090 ldr r3, [pc, #144] ; 19b98 <fstat+0xb4>
19b04: e5934000 ldr r4, [r3]
19b08: e0844300 add r4, r4, r0, lsl #6
rtems_libio_check_fd( fd );
rtems_libio_check_is_open(iop);
19b0c: e5943014 ldr r3, [r4, #20]
19b10: e3130c01 tst r3, #256 ; 0x100
19b14: 0a00000f beq 19b58 <fstat+0x74>
if ( !iop->handlers )
19b18: e594303c ldr r3, [r4, #60] ; 0x3c
19b1c: e3530000 cmp r3, #0
19b20: 0a00000c beq 19b58 <fstat+0x74>
rtems_set_errno_and_return_minus_one( EBADF );
if ( !iop->handlers->fstat_h )
19b24: e5933018 ldr r3, [r3, #24]
19b28: e3530000 cmp r3, #0
19b2c: 0a00000e beq 19b6c <fstat+0x88>
/*
* Zero out the stat structure so the various support
* versions of stat don't have to.
*/
memset( sbuf, 0, sizeof(struct stat) );
19b30: e3a01000 mov r1, #0
19b34: e3a02048 mov r2, #72 ; 0x48
19b38: e1a00005 mov r0, r5
19b3c: ebffd429 bl ebe8 <memset>
return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf );
19b40: e2840018 add r0, r4, #24
19b44: e1a01005 mov r1, r5
19b48: e594303c ldr r3, [r4, #60] ; 0x3c
19b4c: e1a0e00f mov lr, pc
19b50: e593f018 ldr pc, [r3, #24]
}
19b54: e8bd8030 pop {r4, r5, pc}
iop = rtems_libio_iop( fd );
rtems_libio_check_fd( fd );
rtems_libio_check_is_open(iop);
if ( !iop->handlers )
rtems_set_errno_and_return_minus_one( EBADF );
19b58: ebffd1d8 bl e2c0 <__errno>
19b5c: e3a03009 mov r3, #9
19b60: e5803000 str r3, [r0]
19b64: e3e00000 mvn r0, #0
19b68: e8bd8030 pop {r4, r5, pc}
if ( !iop->handlers->fstat_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
19b6c: ebffd1d3 bl e2c0 <__errno> <== NOT EXECUTED
19b70: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
19b74: e5803000 str r3, [r0] <== NOT EXECUTED
19b78: e3e00000 mvn r0, #0 <== NOT EXECUTED
19b7c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
/*
* Check to see if we were passed a valid pointer.
*/
if ( !sbuf )
rtems_set_errno_and_return_minus_one( EFAULT );
19b80: ebffd1ce bl e2c0 <__errno>
19b84: e3a0300e mov r3, #14
19b88: e5803000 str r3, [r0]
19b8c: e3e00000 mvn r0, #0
19b90: e8bd8030 pop {r4, r5, pc}
00028fd0 <fsync>:
int fd
)
{
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28fd0: e59f3070 ldr r3, [pc, #112] ; 29048 <fsync+0x78>
28fd4: e5933000 ldr r3, [r3]
28fd8: e1500003 cmp r0, r3
#include <rtems/seterr.h>
int fsync(
int fd
)
{
28fdc: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
28fe0: 2a00000e bcs 29020 <fsync+0x50>
iop = rtems_libio_iop( fd );
28fe4: e59f3060 ldr r3, [pc, #96] ; 2904c <fsync+0x7c>
28fe8: e5933000 ldr r3, [r3]
28fec: e0830300 add r0, r3, r0, lsl #6
rtems_libio_check_is_open(iop);
28ff0: e5903014 ldr r3, [r0, #20]
28ff4: e3130c01 tst r3, #256 ; 0x100
28ff8: 0a000008 beq 29020 <fsync+0x50>
/*
* Now process the fsync().
*/
if ( !iop->handlers )
28ffc: e590303c ldr r3, [r0, #60] ; 0x3c
29000: e3530000 cmp r3, #0
29004: 0a000005 beq 29020 <fsync+0x50>
rtems_set_errno_and_return_minus_one( EBADF );
if ( !iop->handlers->fsync_h )
29008: e5933028 ldr r3, [r3, #40] ; 0x28
2900c: e3530000 cmp r3, #0
29010: 0a000007 beq 29034 <fsync+0x64>
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->handlers->fsync_h)( iop );
29014: e1a0e00f mov lr, pc
29018: e12fff13 bx r3
}
2901c: e49df004 pop {pc} ; (ldr pc, [sp], #4)
/*
* Now process the fsync().
*/
if ( !iop->handlers )
rtems_set_errno_and_return_minus_one( EBADF );
29020: eb0067f2 bl 42ff0 <__errno> <== NOT EXECUTED
29024: e3a03009 mov r3, #9 <== NOT EXECUTED
29028: e5803000 str r3, [r0] <== NOT EXECUTED
2902c: e3e00000 mvn r0, #0 <== NOT EXECUTED
29030: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
if ( !iop->handlers->fsync_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
29034: eb0067ed bl 42ff0 <__errno>
29038: e3a03086 mov r3, #134 ; 0x86
2903c: e5803000 str r3, [r0]
29040: e3e00000 mvn r0, #0
29044: e49df004 pop {pc} ; (ldr pc, [sp], #4)
0000ac44 <ftruncate>:
int ftruncate(
int fd,
off_t length
)
{
ac44: e92d40f0 push {r4, r5, r6, r7, lr}
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
ac48: e59f30fc ldr r3, [pc, #252] ; ad4c <ftruncate+0x108>
ac4c: e5933000 ldr r3, [r3]
ac50: e1500003 cmp r0, r3
int ftruncate(
int fd,
off_t length
)
{
ac54: e24dd014 sub sp, sp, #20
ac58: e1a05001 mov r5, r1
ac5c: e1a06002 mov r6, r2
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
ac60: 2a000025 bcs acfc <ftruncate+0xb8>
iop = rtems_libio_iop( fd );
ac64: e59f30e4 ldr r3, [pc, #228] ; ad50 <ftruncate+0x10c>
ac68: e5934000 ldr r4, [r3]
ac6c: e0844300 add r4, r4, r0, lsl #6
rtems_libio_check_is_open(iop);
ac70: e5943014 ldr r3, [r4, #20]
ac74: e3130c01 tst r3, #256 ; 0x100
ac78: 0a00001f beq acfc <ftruncate+0xb8>
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
ac7c: e3130004 tst r3, #4
ac80: 0a000022 beq ad10 <ftruncate+0xcc>
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
ac84: e284c018 add ip, r4, #24
ac88: e8bc000f ldm ip!, {r0, r1, r2, r3}
ac8c: e1a0700d mov r7, sp
ac90: e8a7000f stmia r7!, {r0, r1, r2, r3}
if ( !loc.ops->node_type_h )
ac94: e59d200c ldr r2, [sp, #12]
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
ac98: e1a03007 mov r3, r7
if ( !loc.ops->node_type_h )
ac9c: e5927010 ldr r7, [r2, #16]
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
aca0: e59c2000 ldr r2, [ip]
if ( !loc.ops->node_type_h )
aca4: e3570000 cmp r7, #0
/*
* Make sure we are not working on a directory
*/
loc = iop->pathinfo;
aca8: e5832000 str r2, [r3]
if ( !loc.ops->node_type_h )
acac: 0a00001c beq ad24 <ftruncate+0xe0>
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
acb0: e1a0000d mov r0, sp
acb4: e1a0e00f mov lr, pc
acb8: e12fff17 bx r7
acbc: e3500001 cmp r0, #1
acc0: 0a00001c beq ad38 <ftruncate+0xf4>
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
acc4: e5943014 ldr r3, [r4, #20]
acc8: e3130004 tst r3, #4
accc: 0a00000f beq ad10 <ftruncate+0xcc>
if ( !iop->handlers->ftruncate_h )
acd0: e594303c ldr r3, [r4, #60] ; 0x3c
acd4: e5933020 ldr r3, [r3, #32]
acd8: e3530000 cmp r3, #0
acdc: 0a000010 beq ad24 <ftruncate+0xe0>
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->handlers->ftruncate_h)( iop, length );
ace0: e1a00004 mov r0, r4
ace4: e1a01005 mov r1, r5
ace8: e1a02006 mov r2, r6
acec: e1a0e00f mov lr, pc
acf0: e12fff13 bx r3
}
acf4: e28dd014 add sp, sp, #20
acf8: e8bd80f0 pop {r4, r5, r6, r7, pc}
rtems_libio_t *iop;
rtems_filesystem_location_info_t loc;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
acfc: eb000d6f bl e2c0 <__errno> <== NOT EXECUTED
ad00: e3a03009 mov r3, #9 <== NOT EXECUTED
ad04: e5803000 str r3, [r0] <== NOT EXECUTED
ad08: e3e00000 mvn r0, #0 <== NOT EXECUTED
ad0c: eafffff8 b acf4 <ftruncate+0xb0> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
ad10: eb000d6a bl e2c0 <__errno> <== NOT EXECUTED
ad14: e3a03016 mov r3, #22 <== NOT EXECUTED
ad18: e5803000 str r3, [r0] <== NOT EXECUTED
ad1c: e3e00000 mvn r0, #0 <== NOT EXECUTED
ad20: eafffff3 b acf4 <ftruncate+0xb0> <== NOT EXECUTED
if ( !iop->handlers->ftruncate_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
ad24: eb000d65 bl e2c0 <__errno> <== NOT EXECUTED
ad28: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
ad2c: e5803000 str r3, [r0] <== NOT EXECUTED
ad30: e3e00000 mvn r0, #0 <== NOT EXECUTED
ad34: eaffffee b acf4 <ftruncate+0xb0> <== NOT EXECUTED
loc = iop->pathinfo;
if ( !loc.ops->node_type_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( EISDIR );
ad38: eb000d60 bl e2c0 <__errno>
ad3c: e3a03015 mov r3, #21
ad40: e5803000 str r3, [r0]
ad44: e3e00000 mvn r0, #0
ad48: eaffffe9 b acf4 <ftruncate+0xb0>
0005cba0 <getdents>:
/*
* Get the file control block structure associated with the file descriptor
*/
iop = rtems_libio_iop( dd_fd );
5cba0: e59f30b8 ldr r3, [pc, #184] ; 5cc60 <getdents+0xc0>
5cba4: e5933000 ldr r3, [r3]
5cba8: e1500003 cmp r0, r3
5cbac: 359f30b0 ldrcc r3, [pc, #176] ; 5cc64 <getdents+0xc4>
int getdents(
int dd_fd,
char *dd_buf,
int dd_len
)
{
5cbb0: e92d40f0 push {r4, r5, r6, r7, lr}
/*
* Get the file control block structure associated with the file descriptor
*/
iop = rtems_libio_iop( dd_fd );
5cbb4: 35934000 ldrcc r4, [r3]
5cbb8: 23a04000 movcs r4, #0
5cbbc: 30844300 addcc r4, r4, r0, lsl #6
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5cbc0: e284c018 add ip, r4, #24
int getdents(
int dd_fd,
char *dd_buf,
int dd_len
)
{
5cbc4: e24dd014 sub sp, sp, #20
5cbc8: e1a06001 mov r6, r1
5cbcc: e1a05002 mov r5, r2
iop = rtems_libio_iop( dd_fd );
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5cbd0: e8bc000f ldm ip!, {r0, r1, r2, r3}
5cbd4: e1a0700d mov r7, sp
5cbd8: e8a7000f stmia r7!, {r0, r1, r2, r3}
if ( !loc.ops->node_type_h )
5cbdc: e59d200c ldr r2, [sp, #12]
iop = rtems_libio_iop( dd_fd );
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5cbe0: e1a03007 mov r3, r7
if ( !loc.ops->node_type_h )
5cbe4: e5927010 ldr r7, [r2, #16]
iop = rtems_libio_iop( dd_fd );
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5cbe8: e59c2000 ldr r2, [ip]
if ( !loc.ops->node_type_h )
5cbec: e3570000 cmp r7, #0
iop = rtems_libio_iop( dd_fd );
/*
* Make sure we are working on a directory
*/
loc = iop->pathinfo;
5cbf0: e5832000 str r2, [r3]
if ( !loc.ops->node_type_h )
5cbf4: 0a000014 beq 5cc4c <getdents+0xac>
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
5cbf8: e1a0000d mov r0, sp
5cbfc: e1a0e00f mov lr, pc
5cc00: e12fff17 bx r7
5cc04: e3500001 cmp r0, #1
5cc08: 1a00000a bne 5cc38 <getdents+0x98>
/*
* Return the number of bytes that were actually transfered as a result
* of the read attempt.
*/
if ( !iop->handlers->read_h )
5cc0c: e594303c ldr r3, [r4, #60] ; 0x3c
5cc10: e5933008 ldr r3, [r3, #8]
5cc14: e3530000 cmp r3, #0
5cc18: 0a00000b beq 5cc4c <getdents+0xac>
rtems_set_errno_and_return_minus_one( ENOTSUP );
return (*iop->handlers->read_h)( iop, dd_buf, dd_len );
5cc1c: e1a00004 mov r0, r4
5cc20: e1a01006 mov r1, r6
5cc24: e1a02005 mov r2, r5
5cc28: e1a0e00f mov lr, pc
5cc2c: e12fff13 bx r3
}
5cc30: e28dd014 add sp, sp, #20
5cc34: e8bd80f0 pop {r4, r5, r6, r7, pc}
loc = iop->pathinfo;
if ( !loc.ops->node_type_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
rtems_set_errno_and_return_minus_one( ENOTDIR );
5cc38: ebff98ec bl 42ff0 <__errno>
5cc3c: e3a03014 mov r3, #20
5cc40: e5803000 str r3, [r0]
5cc44: e3e00000 mvn r0, #0
5cc48: eafffff8 b 5cc30 <getdents+0x90>
* Return the number of bytes that were actually transfered as a result
* of the read attempt.
*/
if ( !iop->handlers->read_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
5cc4c: ebff98e7 bl 42ff0 <__errno> <== NOT EXECUTED
5cc50: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
5cc54: e5803000 str r3, [r0] <== NOT EXECUTED
5cc58: e3e00000 mvn r0, #0 <== NOT EXECUTED
5cc5c: eafffff3 b 5cc30 <getdents+0x90> <== NOT EXECUTED
00029188 <getgid>:
* 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs,
* P1003.1b-1993, p. 84
*/
gid_t getgid( void )
{
29188: e59f3008 ldr r3, [pc, #8] ; 29198 <getgid+0x10> <== NOT EXECUTED
2918c: e5933000 ldr r3, [r3] <== NOT EXECUTED
return _POSIX_types_Gid;
}
29190: e1d303b4 ldrh r0, [r3, #52] ; 0x34 <== NOT EXECUTED
29194: e12fff1e bx lr <== NOT EXECUTED
000297e4 <getgr_r>:
struct group *grp,
char *buffer,
size_t bufsize,
struct group **result
)
{
297e4: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
297e8: e59d801c ldr r8, [sp, #28]
297ec: e1a05000 mov r5, r0
297f0: e1a0a001 mov sl, r1
297f4: e1a04002 mov r4, r2
297f8: e1a07003 mov r7, r3
FILE *fp;
int match;
init_etc_passwd_group();
297fc: ebffffb2 bl 296cc <init_etc_passwd_group>
if ((fp = fopen("/etc/group", "r")) == NULL) {
29800: e59f00b0 ldr r0, [pc, #176] ; 298b8 <getgr_r+0xd4>
29804: e59f10b0 ldr r1, [pc, #176] ; 298bc <getgr_r+0xd8>
29808: eb006868 bl 439b0 <fopen>
2980c: e2506000 subs r6, r0, #0
29810: 1a000006 bne 29830 <getgr_r+0x4c>
29814: ea000022 b 298a4 <getgr_r+0xc0> <== NOT EXECUTED
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
match = (strcmp(grp->gr_name, name) == 0);
29818: e5940000 ldr r0, [r4]
2981c: eb007e88 bl 49244 <strcmp>
29820: e2700001 rsbs r0, r0, #1
29824: 33a00000 movcc r0, #0
}
else {
match = (grp->gr_gid == gid);
}
if (match) {
29828: e3500000 cmp r0, #0
2982c: 1a00000f bne 29870 <getgr_r+0x8c>
if ((fp = fopen("/etc/group", "r")) == NULL) {
errno = EINVAL;
return -1;
}
for(;;) {
if (!scangr(fp, grp, buffer, bufsize)) {
29830: e1a01004 mov r1, r4
29834: e1a02007 mov r2, r7
29838: e1a03008 mov r3, r8
2983c: e1a00006 mov r0, r6
29840: ebfffee1 bl 293cc <scangr>
29844: e3500000 cmp r0, #0
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
match = (strcmp(grp->gr_name, name) == 0);
29848: e1a01005 mov r1, r5
if ((fp = fopen("/etc/group", "r")) == NULL) {
errno = EINVAL;
return -1;
}
for(;;) {
if (!scangr(fp, grp, buffer, bufsize)) {
2984c: 0a00000d beq 29888 <getgr_r+0xa4>
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
29850: e3550000 cmp r5, #0
29854: 1affffef bne 29818 <getgr_r+0x34>
match = (strcmp(grp->gr_name, name) == 0);
}
else {
match = (grp->gr_gid == gid);
29858: e1d400b8 ldrh r0, [r4, #8] <== NOT EXECUTED
2985c: e150000a cmp r0, sl <== NOT EXECUTED
29860: 13a00000 movne r0, #0 <== NOT EXECUTED
29864: 03a00001 moveq r0, #1 <== NOT EXECUTED
}
if (match) {
29868: e3500000 cmp r0, #0 <== NOT EXECUTED
2986c: 0affffef beq 29830 <getgr_r+0x4c> <== NOT EXECUTED
fclose(fp);
29870: e1a00006 mov r0, r6
29874: eb00662a bl 43124 <fclose>
*result = grp;
29878: e59d3020 ldr r3, [sp, #32]
2987c: e3a00000 mov r0, #0
29880: e5834000 str r4, [r3]
}
}
fclose(fp);
errno = EINVAL;
return -1;
}
29884: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
errno = EINVAL;
return -1;
}
for(;;) {
if (!scangr(fp, grp, buffer, bufsize)) {
errno = EINVAL;
29888: eb0065d8 bl 42ff0 <__errno> <== NOT EXECUTED
2988c: e3a03016 mov r3, #22 <== NOT EXECUTED
29890: e5803000 str r3, [r0] <== NOT EXECUTED
fclose(fp);
29894: e1a00006 mov r0, r6 <== NOT EXECUTED
29898: eb006621 bl 43124 <fclose> <== NOT EXECUTED
2989c: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
298a0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
int match;
init_etc_passwd_group();
if ((fp = fopen("/etc/group", "r")) == NULL) {
errno = EINVAL;
298a4: eb0065d1 bl 42ff0 <__errno> <== NOT EXECUTED
298a8: e3a03016 mov r3, #22 <== NOT EXECUTED
298ac: e5803000 str r3, [r0] <== NOT EXECUTED
298b0: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
298b4: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
00029520 <getgrent>:
return NULL;
return p;
}
struct group *getgrent(void)
{
29520: e92d4010 push {r4, lr} <== NOT EXECUTED
if (group_fp == NULL)
29524: e59f4030 ldr r4, [pc, #48] ; 2955c <getgrent+0x3c> <== NOT EXECUTED
29528: e5940000 ldr r0, [r4] <== NOT EXECUTED
2952c: e3500000 cmp r0, #0 <== NOT EXECUTED
29530: 1a000001 bne 2953c <getgrent+0x1c> <== NOT EXECUTED
return NULL;
if (!scangr(group_fp, &grent, grbuf, sizeof grbuf))
29534: e3a00000 mov r0, #0 <== NOT EXECUTED
return NULL;
return &grent;
}
29538: e8bd8010 pop {r4, pc} <== NOT EXECUTED
struct group *getgrent(void)
{
if (group_fp == NULL)
return NULL;
if (!scangr(group_fp, &grent, grbuf, sizeof grbuf))
2953c: e2841008 add r1, r4, #8 <== NOT EXECUTED
29540: e2842018 add r2, r4, #24 <== NOT EXECUTED
29544: e3a030c8 mov r3, #200 ; 0xc8 <== NOT EXECUTED
29548: ebffff9f bl 293cc <scangr> <== NOT EXECUTED
2954c: e3500000 cmp r0, #0 <== NOT EXECUTED
29550: 12840008 addne r0, r4, #8 <== NOT EXECUTED
29554: 18bd8010 popne {r4, pc} <== NOT EXECUTED
29558: eafffff5 b 29534 <getgrent+0x14> <== NOT EXECUTED
000298fc <getgrgid>:
struct group *getgrgid(
gid_t gid
)
{
298fc: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
struct group *p;
if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p))
29900: e59f1030 ldr r1, [pc, #48] ; 29938 <getgrgid+0x3c> <== NOT EXECUTED
}
struct group *getgrgid(
gid_t gid
)
{
29904: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
29908: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
struct group *p;
if(getgrgid_r(gid, &grent, grbuf, sizeof grbuf, &p))
2990c: e28dc004 add ip, sp, #4 <== NOT EXECUTED
29910: e2812010 add r2, r1, #16 <== NOT EXECUTED
29914: e3a030c8 mov r3, #200 ; 0xc8 <== NOT EXECUTED
29918: e1a00820 lsr r0, r0, #16 <== NOT EXECUTED
2991c: e58dc000 str ip, [sp] <== NOT EXECUTED
29920: ebffffe6 bl 298c0 <getgrgid_r> <== NOT EXECUTED
29924: e3500000 cmp r0, #0 <== NOT EXECUTED
29928: 13a00000 movne r0, #0 <== NOT EXECUTED
return NULL;
return p;
2992c: 059d0004 ldreq r0, [sp, #4] <== NOT EXECUTED
}
29930: e28dd008 add sp, sp, #8 <== NOT EXECUTED
29934: e8bd8000 pop {pc} <== NOT EXECUTED
000298c0 <getgrgid_r>:
struct group *grp,
char *buffer,
size_t bufsize,
struct group **result
)
{
298c0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
298c4: e1a0c002 mov ip, r2 <== NOT EXECUTED
298c8: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
298cc: e1a0e001 mov lr, r1 <== NOT EXECUTED
return getgr_r(NULL, gid, grp, buffer, bufsize, result);
298d0: e58d3000 str r3, [sp] <== NOT EXECUTED
struct group *grp,
char *buffer,
size_t bufsize,
struct group **result
)
{
298d4: e1a01800 lsl r1, r0, #16 <== NOT EXECUTED
return getgr_r(NULL, gid, grp, buffer, bufsize, result);
298d8: e1a0300c mov r3, ip <== NOT EXECUTED
298dc: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
298e0: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
298e4: e1a0200e mov r2, lr <== NOT EXECUTED
298e8: e3a00000 mov r0, #0 <== NOT EXECUTED
298ec: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
298f0: ebffffbb bl 297e4 <getgr_r> <== NOT EXECUTED
}
298f4: e28dd008 add sp, sp, #8 <== NOT EXECUTED
298f8: e8bd8000 pop {pc} <== NOT EXECUTED
00022054 <getpid>:
*/
pid_t getpid( void )
{
return _Objects_Local_node;
}
22054: e3a00001 mov r0, #1 <== NOT EXECUTED
22058: e12fff1e bx lr <== NOT EXECUTED
000299dc <getpw_r>:
struct passwd *pwd,
char *buffer,
size_t bufsize,
struct passwd **result
)
{
299dc: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
299e0: e59d801c ldr r8, [sp, #28]
299e4: e1a05000 mov r5, r0
299e8: e1a0a001 mov sl, r1
299ec: e1a04002 mov r4, r2
299f0: e1a07003 mov r7, r3
FILE *fp;
int match;
init_etc_passwd_group();
299f4: ebffff34 bl 296cc <init_etc_passwd_group>
if ((fp = fopen("/etc/passwd", "r")) == NULL) {
299f8: e59f00b0 ldr r0, [pc, #176] ; 29ab0 <getpw_r+0xd4>
299fc: e59f10b0 ldr r1, [pc, #176] ; 29ab4 <getpw_r+0xd8>
29a00: eb0067ea bl 439b0 <fopen>
29a04: e2506000 subs r6, r0, #0
29a08: 1a000006 bne 29a28 <getpw_r+0x4c>
29a0c: ea000022 b 29a9c <getpw_r+0xc0> <== NOT EXECUTED
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
match = (strcmp(pwd->pw_name, name) == 0);
29a10: e5940000 ldr r0, [r4]
29a14: eb007e0a bl 49244 <strcmp>
29a18: e2700001 rsbs r0, r0, #1
29a1c: 33a00000 movcc r0, #0
}
else {
match = (pwd->pw_uid == uid);
}
if (match) {
29a20: e3500000 cmp r0, #0
29a24: 1a00000f bne 29a68 <getpw_r+0x8c>
if ((fp = fopen("/etc/passwd", "r")) == NULL) {
errno = EINVAL;
return -1;
}
for(;;) {
if (!scanpw(fp, pwd, buffer, bufsize)) {
29a28: e1a01004 mov r1, r4
29a2c: e1a02007 mov r2, r7
29a30: e1a03008 mov r3, r8
29a34: e1a00006 mov r0, r6
29a38: ebfffec8 bl 29560 <scanpw>
29a3c: e3500000 cmp r0, #0
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
match = (strcmp(pwd->pw_name, name) == 0);
29a40: e1a01005 mov r1, r5
if ((fp = fopen("/etc/passwd", "r")) == NULL) {
errno = EINVAL;
return -1;
}
for(;;) {
if (!scanpw(fp, pwd, buffer, bufsize)) {
29a44: 0a00000d beq 29a80 <getpw_r+0xa4>
errno = EINVAL;
fclose(fp);
return -1;
}
if (name) {
29a48: e3550000 cmp r5, #0
29a4c: 1affffef bne 29a10 <getpw_r+0x34>
match = (strcmp(pwd->pw_name, name) == 0);
}
else {
match = (pwd->pw_uid == uid);
29a50: e1d400b8 ldrh r0, [r4, #8] <== NOT EXECUTED
29a54: e150000a cmp r0, sl <== NOT EXECUTED
29a58: 13a00000 movne r0, #0 <== NOT EXECUTED
29a5c: 03a00001 moveq r0, #1 <== NOT EXECUTED
}
if (match) {
29a60: e3500000 cmp r0, #0 <== NOT EXECUTED
29a64: 0affffef beq 29a28 <getpw_r+0x4c> <== NOT EXECUTED
fclose(fp);
29a68: e1a00006 mov r0, r6
29a6c: eb0065ac bl 43124 <fclose>
*result = pwd;
29a70: e59d3020 ldr r3, [sp, #32]
29a74: e3a00000 mov r0, #0
29a78: e5834000 str r4, [r3]
}
}
fclose(fp);
errno = EINVAL;
return -1;
}
29a7c: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
errno = EINVAL;
return -1;
}
for(;;) {
if (!scanpw(fp, pwd, buffer, bufsize)) {
errno = EINVAL;
29a80: eb00655a bl 42ff0 <__errno> <== NOT EXECUTED
29a84: e3a03016 mov r3, #22 <== NOT EXECUTED
29a88: e5803000 str r3, [r0] <== NOT EXECUTED
fclose(fp);
29a8c: e1a00006 mov r0, r6 <== NOT EXECUTED
29a90: eb0065a3 bl 43124 <fclose> <== NOT EXECUTED
29a94: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
29a98: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
int match;
init_etc_passwd_group();
if ((fp = fopen("/etc/passwd", "r")) == NULL) {
errno = EINVAL;
29a9c: eb006553 bl 42ff0 <__errno> <== NOT EXECUTED
29aa0: e3a03016 mov r3, #22 <== NOT EXECUTED
29aa4: e5803000 str r3, [r0] <== NOT EXECUTED
29aa8: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
29aac: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
0002968c <getpwent>:
return NULL;
return p;
}
struct passwd *getpwent(void)
{
2968c: e92d4010 push {r4, lr} <== NOT EXECUTED
if (passwd_fp == NULL)
29690: e59f4030 ldr r4, [pc, #48] ; 296c8 <getpwent+0x3c> <== NOT EXECUTED
29694: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
29698: e3500000 cmp r0, #0 <== NOT EXECUTED
2969c: 1a000001 bne 296a8 <getpwent+0x1c> <== NOT EXECUTED
return NULL;
if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf))
296a0: e3a00000 mov r0, #0 <== NOT EXECUTED
return NULL;
return &pwent;
}
296a4: e8bd8010 pop {r4, pc} <== NOT EXECUTED
struct passwd *getpwent(void)
{
if (passwd_fp == NULL)
return NULL;
if (!scanpw(passwd_fp, &pwent, pwbuf, sizeof pwbuf))
296a8: e28410e0 add r1, r4, #224 ; 0xe0 <== NOT EXECUTED
296ac: e28420fc add r2, r4, #252 ; 0xfc <== NOT EXECUTED
296b0: e3a030c8 mov r3, #200 ; 0xc8 <== NOT EXECUTED
296b4: ebffffa9 bl 29560 <scanpw> <== NOT EXECUTED
296b8: e3500000 cmp r0, #0 <== NOT EXECUTED
296bc: 128400e0 addne r0, r4, #224 ; 0xe0 <== NOT EXECUTED
296c0: 18bd8010 popne {r4, pc} <== NOT EXECUTED
296c4: eafffff5 b 296a0 <getpwent+0x14> <== NOT EXECUTED
00029af4 <getpwuid>:
struct passwd *getpwuid(
uid_t uid
)
{
29af4: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
struct passwd *p;
if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p))
29af8: e59f1030 ldr r1, [pc, #48] ; 29b30 <getpwuid+0x3c> <== NOT EXECUTED
}
struct passwd *getpwuid(
uid_t uid
)
{
29afc: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
29b00: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
struct passwd *p;
if(getpwuid_r(uid, &pwent, pwbuf, sizeof pwbuf, &p))
29b04: e28dc004 add ip, sp, #4 <== NOT EXECUTED
29b08: e281201c add r2, r1, #28 <== NOT EXECUTED
29b0c: e3a030c8 mov r3, #200 ; 0xc8 <== NOT EXECUTED
29b10: e1a00820 lsr r0, r0, #16 <== NOT EXECUTED
29b14: e58dc000 str ip, [sp] <== NOT EXECUTED
29b18: ebffffe6 bl 29ab8 <getpwuid_r> <== NOT EXECUTED
29b1c: e3500000 cmp r0, #0 <== NOT EXECUTED
29b20: 13a00000 movne r0, #0 <== NOT EXECUTED
return NULL;
return p;
29b24: 059d0004 ldreq r0, [sp, #4] <== NOT EXECUTED
}
29b28: e28dd008 add sp, sp, #8 <== NOT EXECUTED
29b2c: e8bd8000 pop {pc} <== NOT EXECUTED
00029ab8 <getpwuid_r>:
struct passwd *pwd,
char *buffer,
size_t bufsize,
struct passwd **result
)
{
29ab8: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
29abc: e1a0c002 mov ip, r2 <== NOT EXECUTED
29ac0: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
29ac4: e1a0e001 mov lr, r1 <== NOT EXECUTED
return getpw_r(NULL, uid, pwd, buffer, bufsize, result);
29ac8: e58d3000 str r3, [sp] <== NOT EXECUTED
struct passwd *pwd,
char *buffer,
size_t bufsize,
struct passwd **result
)
{
29acc: e1a01800 lsl r1, r0, #16 <== NOT EXECUTED
return getpw_r(NULL, uid, pwd, buffer, bufsize, result);
29ad0: e1a0300c mov r3, ip <== NOT EXECUTED
29ad4: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
29ad8: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
29adc: e1a0200e mov r2, lr <== NOT EXECUTED
29ae0: e3a00000 mov r0, #0 <== NOT EXECUTED
29ae4: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
29ae8: ebffffbb bl 299dc <getpw_r> <== NOT EXECUTED
}
29aec: e28dd008 add sp, sp, #8 <== NOT EXECUTED
29af0: e8bd8000 pop {pc} <== NOT EXECUTED
0000214c <gettimeofday>:
*/
int gettimeofday(
struct timeval *tp,
void * __tz __attribute__((unused))
)
{
214c: e92d4030 push {r4, r5, lr}
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp ) {
2150: e2504000 subs r4, r0, #0
*/
int gettimeofday(
struct timeval *tp,
void * __tz __attribute__((unused))
)
{
2154: e24dd008 sub sp, sp, #8
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp ) {
2158: 0a00000f beq 219c <gettimeofday+0x50>
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
215c: e10f5000 mrs r5, CPSR
2160: e3853080 orr r3, r5, #128 ; 0x80
2164: e129f003 msr CPSR_fc, r3
ISR_Level level;
struct timespec now;
suseconds_t useconds;
_ISR_Disable(level);
_TOD_Get( &now );
2168: e1a0000d mov r0, sp
216c: eb0010df bl 64f0 <_TOD_Get>
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
2170: e129f005 msr CPSR_fc, r5
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
2174: e59f2034 ldr r2, [pc, #52] ; 21b0 <gettimeofday+0x64>
_ISR_Disable(level);
_TOD_Get( &now );
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
2178: e59d3004 ldr r3, [sp, #4]
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
time->tv_usec = useconds;
217c: e0c10392 smull r0, r1, r2, r3
_ISR_Enable(level);
useconds = (suseconds_t)now.tv_nsec;
useconds /= (suseconds_t)TOD_NANOSECONDS_PER_MICROSECOND;
time->tv_sec = now.tv_sec;
2180: e59d2000 ldr r2, [sp]
time->tv_usec = useconds;
2184: e1a03fc3 asr r3, r3, #31
2188: e0633341 rsb r3, r3, r1, asr #6
218c: e884000c stm r4, {r2, r3}
2190: e3a00000 mov r0, #0
* with Eric Norum, this is how GNU/Linux, Solaris, and MacOS X
* do it. This puts us in good company.
*/
return 0;
}
2194: e28dd008 add sp, sp, #8
2198: e8bd8030 pop {r4, r5, pc}
void * __tz __attribute__((unused))
)
{
/* struct timezone* tzp = (struct timezone*) __tz; */
if ( !tp ) {
errno = EFAULT;
219c: eb003047 bl e2c0 <__errno> <== NOT EXECUTED
21a0: e3a0300e mov r3, #14 <== NOT EXECUTED
21a4: e5803000 str r3, [r0] <== NOT EXECUTED
21a8: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
21ac: eafffff8 b 2194 <gettimeofday+0x48> <== NOT EXECUTED
00007e8c <getuid>:
* 4.2.1 Get Real User, Effective User, Ral Group, and Effective Group IDs,
* P1003.1b-1993, p. 84
*/
uid_t getuid( void )
{
7e8c: e59f3008 ldr r3, [pc, #8] ; 7e9c <getuid+0x10> <== NOT EXECUTED
7e90: e5933000 ldr r3, [r3] <== NOT EXECUTED
return _POSIX_types_Uid;
}
7e94: e1d303b2 ldrh r0, [r3, #50] ; 0x32 <== NOT EXECUTED
7e98: e12fff1e bx lr <== NOT EXECUTED
00005790 <ioctl>:
int ioctl(
int fd,
ioctl_command_t command,
...
)
{
5790: e92d000e push {r1, r2, r3}
va_list ap;
rtems_status_code rc;
rtems_libio_t *iop;
void *buffer;
rtems_libio_check_fd( fd );
5794: e59f3090 ldr r3, [pc, #144] ; 582c <ioctl+0x9c>
int ioctl(
int fd,
ioctl_command_t command,
...
)
{
5798: e52de004 push {lr} ; (str lr, [sp, #-4]!)
va_list ap;
rtems_status_code rc;
rtems_libio_t *iop;
void *buffer;
rtems_libio_check_fd( fd );
579c: e5933000 ldr r3, [r3]
57a0: e1500003 cmp r0, r3
int ioctl(
int fd,
ioctl_command_t command,
...
)
{
57a4: e24dd004 sub sp, sp, #4
va_list ap;
rtems_status_code rc;
rtems_libio_t *iop;
void *buffer;
rtems_libio_check_fd( fd );
57a8: 2a000015 bcs 5804 <ioctl+0x74>
iop = rtems_libio_iop( fd );
57ac: e59f307c ldr r3, [pc, #124] ; 5830 <ioctl+0xa0>
57b0: e5933000 ldr r3, [r3]
57b4: e0830300 add r0, r3, r0, lsl #6
rtems_libio_check_is_open(iop);
57b8: e5903014 ldr r3, [r0, #20]
57bc: e3130c01 tst r3, #256 ; 0x100
57c0: 0a00000f beq 5804 <ioctl+0x74>
/*
* Now process the ioctl().
*/
if ( !iop->handlers )
57c4: e590303c ldr r3, [r0, #60] ; 0x3c
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
va_start(ap, command);
buffer = va_arg(ap, void *);
57c8: e28d2010 add r2, sp, #16
/*
* Now process the ioctl().
*/
if ( !iop->handlers )
57cc: e3530000 cmp r3, #0
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
va_start(ap, command);
buffer = va_arg(ap, void *);
57d0: e58d2000 str r2, [sp]
57d4: e59d200c ldr r2, [sp, #12]
/*
* Now process the ioctl().
*/
if ( !iop->handlers )
57d8: 0a000009 beq 5804 <ioctl+0x74>
rtems_set_errno_and_return_minus_one( EBADF );
if ( !iop->handlers->ioctl_h )
57dc: e5933010 ldr r3, [r3, #16]
57e0: e3530000 cmp r3, #0
57e4: 0a00000b beq 5818 <ioctl+0x88>
rtems_set_errno_and_return_minus_one( ENOTSUP );
rc = (*iop->handlers->ioctl_h)( iop, command, buffer );
57e8: e59d1008 ldr r1, [sp, #8]
57ec: e1a0e00f mov lr, pc
57f0: e12fff13 bx r3
return rc;
}
57f4: e28dd004 add sp, sp, #4
57f8: e49de004 pop {lr} ; (ldr lr, [sp], #4)
57fc: e28dd00c add sp, sp, #12
5800: e12fff1e bx lr
/*
* Now process the ioctl().
*/
if ( !iop->handlers )
rtems_set_errno_and_return_minus_one( EBADF );
5804: eb003370 bl 125cc <__errno>
5808: e3a03009 mov r3, #9
580c: e5803000 str r3, [r0]
5810: e3e00000 mvn r0, #0
5814: eafffff6 b 57f4 <ioctl+0x64>
if ( !iop->handlers->ioctl_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
5818: eb00336b bl 125cc <__errno> <== NOT EXECUTED
581c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
5820: e5803000 str r3, [r0] <== NOT EXECUTED
5824: e3e00000 mvn r0, #0 <== NOT EXECUTED
5828: eafffff1 b 57f4 <ioctl+0x64> <== NOT EXECUTED
00003b30 <iproc>:
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
if (tty->termios.c_iflag & ISTRIP)
3b30: e5913030 ldr r3, [r1, #48] ; 0x30 <== NOT EXECUTED
3b34: e3130020 tst r3, #32 <== NOT EXECUTED
/*
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
3b38: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3b3c: e20040ff and r4, r0, #255 ; 0xff <== NOT EXECUTED
if (tty->termios.c_iflag & ISTRIP)
c &= 0x7f;
3b40: 1200407f andne r4, r0, #127 ; 0x7f <== NOT EXECUTED
if (tty->termios.c_iflag & IUCLC)
3b44: e3130c02 tst r3, #512 ; 0x200 <== NOT EXECUTED
/*
* Process a single input character
*/
static int
iproc (unsigned char c, struct rtems_termios_tty *tty)
{
3b48: e1a05001 mov r5, r1 <== NOT EXECUTED
if (tty->termios.c_iflag & ISTRIP)
c &= 0x7f;
if (tty->termios.c_iflag & IUCLC)
3b4c: 0a000007 beq 3b70 <iproc+0x40> <== NOT EXECUTED
c = tolower (c);
3b50: e59f2198 ldr r2, [pc, #408] ; 3cf0 <iproc+0x1c0> <== NOT EXECUTED
3b54: e5922000 ldr r2, [r2] <== NOT EXECUTED
3b58: e0822004 add r2, r2, r4 <== NOT EXECUTED
3b5c: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED
3b60: e2022003 and r2, r2, #3 <== NOT EXECUTED
3b64: e3520001 cmp r2, #1 <== NOT EXECUTED
3b68: 02844020 addeq r4, r4, #32 <== NOT EXECUTED
3b6c: e20440ff and r4, r4, #255 ; 0xff <== NOT EXECUTED
if (c == '\r') {
3b70: e354000d cmp r4, #13 <== NOT EXECUTED
3b74: 0a000012 beq 3bc4 <iproc+0x94> <== NOT EXECUTED
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
c = '\n';
}
else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
3b78: e354000a cmp r4, #10 <== NOT EXECUTED
3b7c: 0a000034 beq 3c54 <iproc+0x124> <== NOT EXECUTED
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
3b80: e3540000 cmp r4, #0 <== NOT EXECUTED
3b84: 1a000015 bne 3be0 <iproc+0xb0> <== NOT EXECUTED
}
/*
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
3b88: e59f3164 ldr r3, [pc, #356] ; 3cf4 <iproc+0x1c4> <== NOT EXECUTED
3b8c: e5932000 ldr r2, [r3] <== NOT EXECUTED
3b90: e5953020 ldr r3, [r5, #32] <== NOT EXECUTED
3b94: e2422001 sub r2, r2, #1 <== NOT EXECUTED
3b98: e1530002 cmp r3, r2 <== NOT EXECUTED
3b9c: aa00000a bge 3bcc <iproc+0x9c> <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO)
3ba0: e595203c ldr r2, [r5, #60] ; 0x3c <== NOT EXECUTED
3ba4: e3120008 tst r2, #8 <== NOT EXECUTED
3ba8: 1a00002c bne 3c60 <iproc+0x130> <== NOT EXECUTED
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
3bac: e595101c ldr r1, [r5, #28] <== NOT EXECUTED
3bb0: e2832001 add r2, r3, #1 <== NOT EXECUTED
3bb4: e7c14003 strb r4, [r1, r3] <== NOT EXECUTED
3bb8: e3a00000 mov r0, #0 <== NOT EXECUTED
3bbc: e5852020 str r2, [r5, #32] <== NOT EXECUTED
3bc0: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
if (tty->termios.c_iflag & ISTRIP)
c &= 0x7f;
if (tty->termios.c_iflag & IUCLC)
c = tolower (c);
if (c == '\r') {
if (tty->termios.c_iflag & IGNCR)
3bc4: e3130080 tst r3, #128 ; 0x80 <== NOT EXECUTED
3bc8: 0a000001 beq 3bd4 <iproc+0xa4> <== NOT EXECUTED
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
3bcc: e3a00000 mov r0, #0 <== NOT EXECUTED
}
return 0;
}
3bd0: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
if (tty->termios.c_iflag & IUCLC)
c = tolower (c);
if (c == '\r') {
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
3bd4: e3130c01 tst r3, #256 ; 0x100 <== NOT EXECUTED
3bd8: 03a0400d moveq r4, #13 <== NOT EXECUTED
3bdc: 13a0400a movne r4, #10 <== NOT EXECUTED
c = '\n';
}
else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
3be0: e595303c ldr r3, [r5, #60] ; 0x3c <== NOT EXECUTED
3be4: e3130002 tst r3, #2 <== NOT EXECUTED
3be8: 0affffe6 beq 3b88 <iproc+0x58> <== NOT EXECUTED
if (c == tty->termios.c_cc[VERASE]) {
3bec: e5d52043 ldrb r2, [r5, #67] ; 0x43 <== NOT EXECUTED
3bf0: e1520004 cmp r2, r4 <== NOT EXECUTED
3bf4: 0a000038 beq 3cdc <iproc+0x1ac> <== NOT EXECUTED
erase (tty, 0);
return 0;
}
else if (c == tty->termios.c_cc[VKILL]) {
3bf8: e5d52044 ldrb r2, [r5, #68] ; 0x44 <== NOT EXECUTED
3bfc: e1520004 cmp r2, r4 <== NOT EXECUTED
3c00: 0a000030 beq 3cc8 <iproc+0x198> <== NOT EXECUTED
erase (tty, 1);
return 0;
}
else if (c == tty->termios.c_cc[VEOF]) {
3c04: e5d52045 ldrb r2, [r5, #69] ; 0x45 <== NOT EXECUTED
3c08: e1520004 cmp r2, r4 <== NOT EXECUTED
3c0c: 0a000027 beq 3cb0 <iproc+0x180> <== NOT EXECUTED
return 1;
}
else if (c == '\n') {
3c10: e354000a cmp r4, #10 <== NOT EXECUTED
3c14: 0a00001b beq 3c88 <iproc+0x158> <== NOT EXECUTED
if (tty->termios.c_lflag & (ECHO | ECHONL))
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
return 1;
}
else if ((c == tty->termios.c_cc[VEOL])
3c18: e5d5204c ldrb r2, [r5, #76] ; 0x4c <== NOT EXECUTED
3c1c: e1520004 cmp r2, r4 <== NOT EXECUTED
3c20: 0a000002 beq 3c30 <iproc+0x100> <== NOT EXECUTED
|| (c == tty->termios.c_cc[VEOL2])) {
3c24: e5d52051 ldrb r2, [r5, #81] ; 0x51 <== NOT EXECUTED
3c28: e1520004 cmp r2, r4 <== NOT EXECUTED
3c2c: 1affffd5 bne 3b88 <iproc+0x58> <== NOT EXECUTED
if (tty->termios.c_lflag & ECHO)
3c30: e3130008 tst r3, #8 <== NOT EXECUTED
3c34: 1a00001f bne 3cb8 <iproc+0x188> <== NOT EXECUTED
echo (c, tty);
tty->cbuf[tty->ccount++] = c;
3c38: e285101c add r1, r5, #28 <== NOT EXECUTED
3c3c: e891000a ldm r1, {r1, r3} <== NOT EXECUTED
3c40: e2832001 add r2, r3, #1 <== NOT EXECUTED
3c44: e7c14003 strb r4, [r1, r3] <== NOT EXECUTED
3c48: e3a00001 mov r0, #1 <== NOT EXECUTED
3c4c: e5852020 str r2, [r5, #32] <== NOT EXECUTED
return 1;
3c50: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
if (tty->termios.c_iflag & IGNCR)
return 0;
if (tty->termios.c_iflag & ICRNL)
c = '\n';
}
else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
3c54: e3130040 tst r3, #64 ; 0x40 <== NOT EXECUTED
3c58: 13a0400d movne r4, #13 <== NOT EXECUTED
3c5c: eaffffdf b 3be0 <iproc+0xb0> <== NOT EXECUTED
/*
* FIXME: Should do IMAXBEL handling somehow
*/
if (tty->ccount < (CBUFSIZE-1)) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
3c60: e1a00004 mov r0, r4 <== NOT EXECUTED
3c64: e1a01005 mov r1, r5 <== NOT EXECUTED
3c68: ebffff0b bl 389c <echo> <== NOT EXECUTED
3c6c: e285101c add r1, r5, #28 <== NOT EXECUTED
3c70: e891000a ldm r1, {r1, r3} <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
3c74: e2832001 add r2, r3, #1 <== NOT EXECUTED
3c78: e7c14003 strb r4, [r1, r3] <== NOT EXECUTED
3c7c: e3a00000 mov r0, #0 <== NOT EXECUTED
3c80: e5852020 str r2, [r5, #32] <== NOT EXECUTED
3c84: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
}
else if (c == tty->termios.c_cc[VEOF]) {
return 1;
}
else if (c == '\n') {
if (tty->termios.c_lflag & (ECHO | ECHONL))
3c88: e3130048 tst r3, #72 ; 0x48 <== NOT EXECUTED
echo (c, tty);
3c8c: 11a00004 movne r0, r4 <== NOT EXECUTED
3c90: 11a01005 movne r1, r5 <== NOT EXECUTED
3c94: 1bffff00 blne 389c <echo> <== NOT EXECUTED
tty->cbuf[tty->ccount++] = c;
3c98: e285101c add r1, r5, #28 <== NOT EXECUTED
3c9c: e891000a ldm r1, {r1, r3} <== NOT EXECUTED
3ca0: e2832001 add r2, r3, #1 <== NOT EXECUTED
3ca4: e3a0000a mov r0, #10 <== NOT EXECUTED
3ca8: e7c10003 strb r0, [r1, r3] <== NOT EXECUTED
3cac: e5852020 str r2, [r5, #32] <== NOT EXECUTED
3cb0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
3cb4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
}
else if ((c == tty->termios.c_cc[VEOL])
|| (c == tty->termios.c_cc[VEOL2])) {
if (tty->termios.c_lflag & ECHO)
echo (c, tty);
3cb8: e1a00004 mov r0, r4 <== NOT EXECUTED
3cbc: e1a01005 mov r1, r5 <== NOT EXECUTED
3cc0: ebfffef5 bl 389c <echo> <== NOT EXECUTED
3cc4: eaffffdb b 3c38 <iproc+0x108> <== NOT EXECUTED
if (c == tty->termios.c_cc[VERASE]) {
erase (tty, 0);
return 0;
}
else if (c == tty->termios.c_cc[VKILL]) {
erase (tty, 1);
3cc8: e1a00005 mov r0, r5 <== NOT EXECUTED
3ccc: e3a01001 mov r1, #1 <== NOT EXECUTED
3cd0: ebffff13 bl 3924 <erase> <== NOT EXECUTED
3cd4: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
3cd8: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
else if ((c == '\n') && (tty->termios.c_iflag & INLCR)) {
c = '\r';
}
if ((c != '\0') && (tty->termios.c_lflag & ICANON)) {
if (c == tty->termios.c_cc[VERASE]) {
erase (tty, 0);
3cdc: e1a00005 mov r0, r5 <== NOT EXECUTED
3ce0: e3a01000 mov r1, #0 <== NOT EXECUTED
3ce4: ebffff0e bl 3924 <erase> <== NOT EXECUTED
3ce8: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
3cec: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
0002206c <kill>:
#if !defined(RTEMS_POSIX_API)
int kill( pid_t pid, int sig )
{
return 0;
}
2206c: e3a00000 mov r0, #0 <== NOT EXECUTED
22070: e12fff1e bx lr <== NOT EXECUTED
00029b9c <link>:
int link(
const char *existing,
const char *new
)
{
29b9c: e92d4070 push {r4, r5, r6, lr}
29ba0: e24dd034 sub sp, sp, #52 ; 0x34
29ba4: e1a05001 mov r5, r1
29ba8: e1a06000 mov r6, r0
/*
* Get the node we are linking to.
*/
result = rtems_filesystem_evaluate_path( existing, strlen( existing ),
29bac: eb00800c bl 49be4 <strlen>
29bb0: e28d4018 add r4, sp, #24
29bb4: e1a01000 mov r1, r0
29bb8: e3a0c001 mov ip, #1
29bbc: e1a00006 mov r0, r6
29bc0: e3a02000 mov r2, #0
29bc4: e1a03004 mov r3, r4
29bc8: e58dc000 str ip, [sp]
29bcc: ebff7845 bl 7ce8 <rtems_filesystem_evaluate_path>
0, &existing_loc, true );
if ( result != 0 )
29bd0: e3500000 cmp r0, #0
29bd4: 0a000003 beq 29be8 <link+0x4c>
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
if ( !parent_loc.ops->evalformake_h ) {
rtems_filesystem_freenode( &existing_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
29bd8: e3e05000 mvn r5, #0
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
return result;
}
29bdc: e1a00005 mov r0, r5
29be0: e28dd034 add sp, sp, #52 ; 0x34
29be4: e8bd8070 pop {r4, r5, r6, pc}
/*
* Get the parent of the node we are creating.
*/
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
29be8: e28d6004 add r6, sp, #4
29bec: e1a00005 mov r0, r5
29bf0: e28d1030 add r1, sp, #48 ; 0x30
29bf4: e1a02006 mov r2, r6
29bf8: ebff7ecb bl 972c <rtems_filesystem_get_start_loc>
if ( !parent_loc.ops->evalformake_h ) {
29bfc: e59d3010 ldr r3, [sp, #16]
29c00: e5933004 ldr r3, [r3, #4]
29c04: e3530000 cmp r3, #0
29c08: 0a000048 beq 29d30 <link+0x194>
rtems_filesystem_freenode( &existing_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
29c0c: e59d0030 ldr r0, [sp, #48] ; 0x30
29c10: e1a01006 mov r1, r6
29c14: e0850000 add r0, r5, r0
29c18: e28d202c add r2, sp, #44 ; 0x2c
29c1c: e1a0e00f mov lr, pc
29c20: e12fff13 bx r3
if ( result != 0 ) {
29c24: e2505000 subs r5, r0, #0
29c28: 1a000034 bne 29d00 <link+0x164>
/*
* Check to see if the caller is trying to link across file system
* boundaries.
*/
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
29c2c: e59d3028 ldr r3, [sp, #40] ; 0x28
29c30: e59d2014 ldr r2, [sp, #20]
29c34: e1520003 cmp r2, r3
29c38: 1a00001b bne 29cac <link+0x110>
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
if ( !parent_loc.ops->link_h ) {
29c3c: e59d2010 ldr r2, [sp, #16]
29c40: e5923008 ldr r3, [r2, #8]
29c44: e3530000 cmp r3, #0
29c48: 0a000044 beq 29d60 <link+0x1c4>
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*parent_loc.ops->link_h)( &existing_loc, &parent_loc, name_start );
29c4c: e1a00004 mov r0, r4
29c50: e1a01006 mov r1, r6
29c54: e59d202c ldr r2, [sp, #44] ; 0x2c
29c58: e1a0e00f mov lr, pc
29c5c: e12fff13 bx r3
rtems_filesystem_freenode( &existing_loc );
29c60: e59d3024 ldr r3, [sp, #36] ; 0x24
29c64: e3530000 cmp r3, #0
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*parent_loc.ops->link_h)( &existing_loc, &parent_loc, name_start );
29c68: e1a05000 mov r5, r0
rtems_filesystem_freenode( &existing_loc );
29c6c: 0a000004 beq 29c84 <link+0xe8>
29c70: e593301c ldr r3, [r3, #28]
29c74: e3530000 cmp r3, #0
29c78: 11a00004 movne r0, r4
29c7c: 11a0e00f movne lr, pc
29c80: 112fff13 bxne r3
rtems_filesystem_freenode( &parent_loc );
29c84: e59d3010 ldr r3, [sp, #16]
29c88: e3530000 cmp r3, #0
29c8c: 0affffd2 beq 29bdc <link+0x40>
29c90: e593301c ldr r3, [r3, #28]
29c94: e3530000 cmp r3, #0
29c98: 0affffcf beq 29bdc <link+0x40>
29c9c: e1a00006 mov r0, r6
29ca0: e1a0e00f mov lr, pc
29ca4: e12fff13 bx r3
29ca8: eaffffcb b 29bdc <link+0x40>
* Check to see if the caller is trying to link across file system
* boundaries.
*/
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
rtems_filesystem_freenode( &existing_loc );
29cac: e59d3024 ldr r3, [sp, #36] ; 0x24
29cb0: e3530000 cmp r3, #0
29cb4: 0a000004 beq 29ccc <link+0x130>
29cb8: e593301c ldr r3, [r3, #28]
29cbc: e3530000 cmp r3, #0
29cc0: 11a00004 movne r0, r4
29cc4: 11a0e00f movne lr, pc
29cc8: 112fff13 bxne r3
rtems_filesystem_freenode( &parent_loc );
29ccc: e59d3010 ldr r3, [sp, #16]
29cd0: e3530000 cmp r3, #0
29cd4: 0a000004 beq 29cec <link+0x150>
29cd8: e593301c ldr r3, [r3, #28]
29cdc: e3530000 cmp r3, #0
29ce0: 11a00006 movne r0, r6
29ce4: 11a0e00f movne lr, pc
29ce8: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( EXDEV );
29cec: eb0064bf bl 42ff0 <__errno>
29cf0: e3a03012 mov r3, #18
29cf4: e5803000 str r3, [r0]
29cf8: e3e05000 mvn r5, #0
29cfc: eaffffb6 b 29bdc <link+0x40>
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) {
rtems_filesystem_freenode( &existing_loc );
29d00: e59d3024 ldr r3, [sp, #36] ; 0x24
29d04: e3530000 cmp r3, #0
29d08: 0a000004 beq 29d20 <link+0x184>
29d0c: e593301c ldr r3, [r3, #28]
29d10: e3530000 cmp r3, #0
29d14: 11a00004 movne r0, r4
29d18: 11a0e00f movne lr, pc
29d1c: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( result );
29d20: eb0064b2 bl 42ff0 <__errno>
29d24: e5805000 str r5, [r0]
29d28: e3e05000 mvn r5, #0
29d2c: eaffffaa b 29bdc <link+0x40>
*/
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
if ( !parent_loc.ops->evalformake_h ) {
rtems_filesystem_freenode( &existing_loc );
29d30: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
29d34: e3530000 cmp r3, #0 <== NOT EXECUTED
29d38: 0a000004 beq 29d50 <link+0x1b4> <== NOT EXECUTED
29d3c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
29d40: e3530000 cmp r3, #0 <== NOT EXECUTED
29d44: 11a00004 movne r0, r4 <== NOT EXECUTED
29d48: 11a0e00f movne lr, pc <== NOT EXECUTED
29d4c: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
29d50: eb0064a6 bl 42ff0 <__errno> <== NOT EXECUTED
29d54: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
29d58: e5803000 str r3, [r0] <== NOT EXECUTED
29d5c: eaffff9d b 29bd8 <link+0x3c> <== NOT EXECUTED
rtems_filesystem_freenode( &parent_loc );
rtems_set_errno_and_return_minus_one( EXDEV );
}
if ( !parent_loc.ops->link_h ) {
rtems_filesystem_freenode( &existing_loc );
29d60: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
29d64: e3530000 cmp r3, #0 <== NOT EXECUTED
29d68: 0a000006 beq 29d88 <link+0x1ec> <== NOT EXECUTED
29d6c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
29d70: e3530000 cmp r3, #0 <== NOT EXECUTED
29d74: 0a000003 beq 29d88 <link+0x1ec> <== NOT EXECUTED
29d78: e1a00004 mov r0, r4 <== NOT EXECUTED
29d7c: e1a0e00f mov lr, pc <== NOT EXECUTED
29d80: e12fff13 bx r3 <== NOT EXECUTED
29d84: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
rtems_filesystem_freenode( &parent_loc );
29d88: e3520000 cmp r2, #0 <== NOT EXECUTED
29d8c: 0a000004 beq 29da4 <link+0x208> <== NOT EXECUTED
29d90: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
29d94: e3530000 cmp r3, #0 <== NOT EXECUTED
29d98: 11a00006 movne r0, r6 <== NOT EXECUTED
29d9c: 11a0e00f movne lr, pc <== NOT EXECUTED
29da0: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
29da4: eb006491 bl 42ff0 <__errno> <== NOT EXECUTED
29da8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
29dac: e5803000 str r3, [r0] <== NOT EXECUTED
29db0: e3e05000 mvn r5, #0 <== NOT EXECUTED
29db4: eaffff88 b 29bdc <link+0x40> <== NOT EXECUTED
00019bb0 <lseek>:
{
rtems_libio_t *iop;
off_t old_offset;
off_t status;
rtems_libio_check_fd( fd );
19bb0: e59fc134 ldr ip, [pc, #308] ; 19cec <lseek+0x13c>
19bb4: e59cc000 ldr ip, [ip]
19bb8: e150000c cmp r0, ip
off_t lseek(
int fd,
off_t offset,
int whence
)
{
19bbc: e92d41f0 push {r4, r5, r6, r7, r8, lr}
rtems_libio_t *iop;
off_t old_offset;
off_t status;
rtems_libio_check_fd( fd );
19bc0: 2a00003d bcs 19cbc <lseek+0x10c>
iop = rtems_libio_iop( fd );
19bc4: e59fc124 ldr ip, [pc, #292] ; 19cf0 <lseek+0x140>
19bc8: e59c4000 ldr r4, [ip]
19bcc: e0844300 add r4, r4, r0, lsl #6
rtems_libio_check_is_open(iop);
19bd0: e5940014 ldr r0, [r4, #20]
19bd4: e3100c01 tst r0, #256 ; 0x100
19bd8: 0a000037 beq 19cbc <lseek+0x10c>
/*
* Check as many errors as possible before touching iop->offset.
*/
if ( !iop->handlers->lseek_h )
19bdc: e594c03c ldr ip, [r4, #60] ; 0x3c
19be0: e59c0014 ldr r0, [ip, #20]
19be4: e3500000 cmp r0, #0
19be8: 0a000039 beq 19cd4 <lseek+0x124>
/*
* Now process the lseek().
*/
old_offset = iop->offset;
switch ( whence ) {
19bec: e3530001 cmp r3, #1
/*
* Now process the lseek().
*/
old_offset = iop->offset;
19bf0: e284600c add r6, r4, #12
19bf4: e8960060 ldm r6, {r5, r6}
switch ( whence ) {
19bf8: 0a00002a beq 19ca8 <lseek+0xf8>
19bfc: e3530002 cmp r3, #2
19c00: 0a00000d beq 19c3c <lseek+0x8c>
19c04: e3530000 cmp r3, #0
19c08: 1a00001e bne 19c88 <lseek+0xd8>
case SEEK_SET:
iop->offset = offset;
19c0c: e584100c str r1, [r4, #12]
19c10: e5842010 str r2, [r4, #16]
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->handlers->lseek_h)( iop, offset, whence );
19c14: e1a00004 mov r0, r4
19c18: e1a0e00f mov lr, pc
19c1c: e59cf014 ldr pc, [ip, #20]
if ( status == (off_t) -1 )
19c20: e3700001 cmn r0, #1
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->handlers->lseek_h)( iop, offset, whence );
19c24: e1a02000 mov r2, r0
19c28: e1a03001 mov r3, r1
if ( status == (off_t) -1 )
19c2c: 0a00000e beq 19c6c <lseek+0xbc>
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
19c30: e1a01003 mov r1, r3
19c34: e1a00002 mov r0, r2
19c38: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
case SEEK_CUR:
iop->offset += offset;
break;
case SEEK_END:
iop->offset = iop->size + offset;
19c3c: e9940180 ldmib r4, {r7, r8}
19c40: e0977001 adds r7, r7, r1
19c44: e0a88002 adc r8, r8, r2
19c48: e584700c str r7, [r4, #12]
19c4c: e5848010 str r8, [r4, #16]
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->handlers->lseek_h)( iop, offset, whence );
19c50: e1a00004 mov r0, r4
19c54: e1a0e00f mov lr, pc
19c58: e59cf014 ldr pc, [ip, #20]
if ( status == (off_t) -1 )
19c5c: e3700001 cmn r0, #1
/*
* At this time, handlers assume iop->offset has the desired
* new offset.
*/
status = (*iop->handlers->lseek_h)( iop, offset, whence );
19c60: e1a02000 mov r2, r0
19c64: e1a03001 mov r3, r1
if ( status == (off_t) -1 )
19c68: 1afffff0 bne 19c30 <lseek+0x80>
19c6c: e3710001 cmn r1, #1
19c70: 1affffee bne 19c30 <lseek+0x80>
iop->offset = old_offset;
19c74: e584500c str r5, [r4, #12]
19c78: e5846010 str r6, [r4, #16]
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
19c7c: e1a01003 mov r1, r3
19c80: e1a00002 mov r0, r2
19c84: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
case SEEK_END:
iop->offset = iop->size + offset;
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
19c88: ebffd18c bl e2c0 <__errno>
19c8c: e3a03016 mov r3, #22
19c90: e5803000 str r3, [r0]
19c94: e3e02000 mvn r2, #0
19c98: e3e03000 mvn r3, #0
/*
* So if the operation failed, we have to restore iop->offset.
*/
return status;
}
19c9c: e1a01003 mov r1, r3
19ca0: e1a00002 mov r0, r2
19ca4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
case SEEK_SET:
iop->offset = offset;
break;
case SEEK_CUR:
iop->offset += offset;
19ca8: e0917005 adds r7, r1, r5
19cac: e0a28006 adc r8, r2, r6
19cb0: e584700c str r7, [r4, #12]
19cb4: e5848010 str r8, [r4, #16]
break;
19cb8: eaffffd5 b 19c14 <lseek+0x64>
off_t old_offset;
off_t status;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open(iop);
19cbc: ebffd17f bl e2c0 <__errno> <== NOT EXECUTED
19cc0: e3a03009 mov r3, #9 <== NOT EXECUTED
19cc4: e5803000 str r3, [r0] <== NOT EXECUTED
19cc8: e3e02000 mvn r2, #0 <== NOT EXECUTED
19ccc: e3e03000 mvn r3, #0 <== NOT EXECUTED
19cd0: eaffffd6 b 19c30 <lseek+0x80> <== NOT EXECUTED
/*
* Check as many errors as possible before touching iop->offset.
*/
if ( !iop->handlers->lseek_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
19cd4: ebffd179 bl e2c0 <__errno> <== NOT EXECUTED
19cd8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
19cdc: e5803000 str r3, [r0] <== NOT EXECUTED
19ce0: e3e02000 mvn r2, #0 <== NOT EXECUTED
19ce4: e3e03000 mvn r3, #0 <== NOT EXECUTED
19ce8: eaffffd0 b 19c30 <lseek+0x80> <== NOT EXECUTED
00029f1c <lstat>:
int _STAT_NAME(
const char *path,
struct stat *buf
)
{
29f1c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
29f20: e2515000 subs r5, r1, #0 <== NOT EXECUTED
int _STAT_NAME(
const char *path,
struct stat *buf
)
{
29f24: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
29f28: e1a06000 mov r6, r0 <== NOT EXECUTED
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
29f2c: 0a00002f beq 29ff0 <lstat+0xd4> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EFAULT );
status = rtems_filesystem_evaluate_path( path, strlen( path ),
29f30: eb007f2b bl 49be4 <strlen> <== NOT EXECUTED
29f34: e28d4004 add r4, sp, #4 <== NOT EXECUTED
29f38: e3a0c000 mov ip, #0 <== NOT EXECUTED
29f3c: e1a01000 mov r1, r0 <== NOT EXECUTED
29f40: e1a0200c mov r2, ip <== NOT EXECUTED
29f44: e1a00006 mov r0, r6 <== NOT EXECUTED
29f48: e1a03004 mov r3, r4 <== NOT EXECUTED
29f4c: e58dc000 str ip, [sp] <== NOT EXECUTED
29f50: ebff7764 bl 7ce8 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
0, &loc, _STAT_FOLLOW_LINKS );
if ( status != 0 )
29f54: e2501000 subs r1, r0, #0 <== NOT EXECUTED
29f58: 1a000022 bne 29fe8 <lstat+0xcc> <== NOT EXECUTED
return -1;
if ( !loc.handlers->fstat_h ){
29f5c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
29f60: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
29f64: e3530000 cmp r3, #0 <== NOT EXECUTED
29f68: 0a000013 beq 29fbc <lstat+0xa0> <== NOT EXECUTED
/*
* Zero out the stat structure so the various support
* versions of stat don't have to.
*/
memset( buf, 0, sizeof(struct stat) );
29f6c: e3a02048 mov r2, #72 ; 0x48 <== NOT EXECUTED
29f70: e1a00005 mov r0, r5 <== NOT EXECUTED
29f74: eb007154 bl 464cc <memset> <== NOT EXECUTED
status = (*loc.handlers->fstat_h)( &loc, buf );
29f78: e1a01005 mov r1, r5 <== NOT EXECUTED
29f7c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
29f80: e1a00004 mov r0, r4 <== NOT EXECUTED
29f84: e1a0e00f mov lr, pc <== NOT EXECUTED
29f88: e593f018 ldr pc, [r3, #24] <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
29f8c: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
29f90: e3530000 cmp r3, #0 <== NOT EXECUTED
* versions of stat don't have to.
*/
memset( buf, 0, sizeof(struct stat) );
status = (*loc.handlers->fstat_h)( &loc, buf );
29f94: e1a05000 mov r5, r0 <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
29f98: 0a000004 beq 29fb0 <lstat+0x94> <== NOT EXECUTED
29f9c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
29fa0: e3530000 cmp r3, #0 <== NOT EXECUTED
29fa4: 11a00004 movne r0, r4 <== NOT EXECUTED
29fa8: 11a0e00f movne lr, pc <== NOT EXECUTED
29fac: 112fff13 bxne r3 <== NOT EXECUTED
return status;
}
29fb0: e1a00005 mov r0, r5 <== NOT EXECUTED
29fb4: e28dd018 add sp, sp, #24 <== NOT EXECUTED
29fb8: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
0, &loc, _STAT_FOLLOW_LINKS );
if ( status != 0 )
return -1;
if ( !loc.handlers->fstat_h ){
rtems_filesystem_freenode( &loc );
29fbc: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
29fc0: e3530000 cmp r3, #0 <== NOT EXECUTED
29fc4: 0a000004 beq 29fdc <lstat+0xc0> <== NOT EXECUTED
29fc8: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
29fcc: e3530000 cmp r3, #0 <== NOT EXECUTED
29fd0: 11a00004 movne r0, r4 <== NOT EXECUTED
29fd4: 11a0e00f movne lr, pc <== NOT EXECUTED
29fd8: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
29fdc: eb006403 bl 42ff0 <__errno> <== NOT EXECUTED
29fe0: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
29fe4: e5803000 str r3, [r0] <== NOT EXECUTED
29fe8: e3e05000 mvn r5, #0 <== NOT EXECUTED
29fec: eaffffef b 29fb0 <lstat+0x94> <== NOT EXECUTED
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
rtems_set_errno_and_return_minus_one( EFAULT );
29ff0: eb0063fe bl 42ff0 <__errno> <== NOT EXECUTED
29ff4: e3a0300e mov r3, #14 <== NOT EXECUTED
29ff8: e5803000 str r3, [r0] <== NOT EXECUTED
29ffc: e3e05000 mvn r5, #0 <== NOT EXECUTED
2a000: eaffffea b 29fb0 <lstat+0x94> <== NOT EXECUTED
0000240c <malloc>:
size_t size
)
{
void *return_this;
MSBUMP(malloc_calls, 1);
240c: e59f30dc ldr r3, [pc, #220] ; 24f0 <malloc+0xe4>
2410: e5932004 ldr r2, [r3, #4]
2414: e2822001 add r2, r2, #1
2418: e92d4070 push {r4, r5, r6, lr}
241c: e5832004 str r2, [r3, #4]
2420: e1a04000 mov r4, r0
/*
* If some free's have been deferred, then do them now.
*/
malloc_deferred_frees_process();
2424: ebffffb3 bl 22f8 <malloc_deferred_frees_process>
/*
* Validate the parameters
*/
if ( !size )
2428: e3540000 cmp r4, #0
242c: 0a00001f beq 24b0 <malloc+0xa4>
return (void *) 0;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
2430: e59f30bc ldr r3, [pc, #188] ; 24f4 <malloc+0xe8>
2434: e5933000 ldr r3, [r3]
2438: e3530003 cmp r3, #3
243c: 0a000018 beq 24a4 <malloc+0x98>
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
Heap_Control *heap,
uintptr_t size
)
{
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
2440: e59f30b0 ldr r3, [pc, #176] ; 24f8 <malloc+0xec>
2444: e3a02000 mov r2, #0
2448: e5930000 ldr r0, [r3]
244c: e1a01004 mov r1, r4
2450: e1a03002 mov r3, r2
2454: eb00135a bl 71c4 <_Protected_heap_Allocate_aligned_with_boundary>
* If this fails then return a NULL pointer.
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
2458: e2506000 subs r6, r0, #0
if (rtems_malloc_sbrk_helpers)
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
if ( !return_this ) {
errno = ENOMEM;
return (void *) 0;
245c: 11a05006 movne r5, r6
* If this fails then return a NULL pointer.
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
2460: 0a000015 beq 24bc <malloc+0xb0>
}
/*
* If the user wants us to dirty the allocated memory, then do it.
*/
if ( rtems_malloc_dirty_helper )
2464: e59f3090 ldr r3, [pc, #144] ; 24fc <malloc+0xf0>
2468: e5933000 ldr r3, [r3]
246c: e3530000 cmp r3, #0
(*rtems_malloc_dirty_helper)( return_this, size );
2470: 11a01004 movne r1, r4
2474: 11a00005 movne r0, r5
2478: 11a0e00f movne lr, pc
247c: 112fff13 bxne r3
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
2480: e59f3078 ldr r3, [pc, #120] ; 2500 <malloc+0xf4>
2484: e5933000 ldr r3, [r3]
2488: e3530000 cmp r3, #0
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
248c: 11a00005 movne r0, r5
2490: 11a0e00f movne lr, pc
2494: 1593f004 ldrne pc, [r3, #4]
2498: e1a06005 mov r6, r5
if (rtems_malloc_boundary_helpers)
(*rtems_malloc_boundary_helpers->at_malloc)(return_this, size);
#endif
return return_this;
}
249c: e1a00006 mov r0, r6
24a0: e8bd8070 pop {r4, r5, r6, pc}
return (void *) 0;
/*
* Do not attempt to allocate memory if not in correct system state.
*/
if ( _System_state_Is_up(_System_state_Get()) &&
24a4: ebffff7c bl 229c <malloc_is_system_state_OK>
24a8: e3500000 cmp r0, #0
24ac: 1affffe3 bne 2440 <malloc+0x34>
/*
* If configured, update the statistics
*/
if ( rtems_malloc_statistics_helpers )
(*rtems_malloc_statistics_helpers->at_malloc)(return_this);
24b0: e3a06000 mov r6, #0 <== NOT EXECUTED
if (rtems_malloc_boundary_helpers)
(*rtems_malloc_boundary_helpers->at_malloc)(return_this, size);
#endif
return return_this;
}
24b4: e1a00006 mov r0, r6 <== NOT EXECUTED
24b8: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
*/
return_this = _Protected_heap_Allocate( RTEMS_Malloc_Heap, size );
if ( !return_this ) {
if (rtems_malloc_sbrk_helpers)
24bc: e59f3040 ldr r3, [pc, #64] ; 2504 <malloc+0xf8>
24c0: e5933000 ldr r3, [r3]
24c4: e3530000 cmp r3, #0
24c8: 0a000004 beq 24e0 <malloc+0xd4>
return_this = (*rtems_malloc_sbrk_helpers->extend)( size );
24cc: e1a00004 mov r0, r4 <== NOT EXECUTED
24d0: e1a0e00f mov lr, pc <== NOT EXECUTED
24d4: e593f004 ldr pc, [r3, #4] <== NOT EXECUTED
if ( !return_this ) {
24d8: e2505000 subs r5, r0, #0 <== NOT EXECUTED
24dc: 1affffe0 bne 2464 <malloc+0x58> <== NOT EXECUTED
errno = ENOMEM;
24e0: eb002f76 bl e2c0 <__errno>
24e4: e3a0300c mov r3, #12
24e8: e5803000 str r3, [r0]
return (void *) 0;
24ec: eaffffea b 249c <malloc+0x90>
000022e8 <malloc_deferred_free>:
}
void malloc_deferred_free(
void *pointer
)
{
22e8: e1a01000 mov r1, r0 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
22ec: e59f0000 ldr r0, [pc, #0] ; 22f4 <malloc_deferred_free+0xc><== NOT EXECUTED
22f0: ea000f71 b 60bc <_Chain_Append> <== NOT EXECUTED
000022f8 <malloc_deferred_frees_process>:
{
rtems_chain_initialize_empty(&RTEMS_Malloc_GC_list);
}
void malloc_deferred_frees_process(void)
{
22f8: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_chain_node *to_be_freed;
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = rtems_chain_get(&RTEMS_Malloc_GC_list)) != NULL)
22fc: ea000000 b 2304 <malloc_deferred_frees_process+0xc>
free(to_be_freed);
2300: ebffff68 bl 20a8 <free> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
2304: e59f000c ldr r0, [pc, #12] ; 2318 <malloc_deferred_frees_process+0x20>
2308: eb000f7f bl 610c <_Chain_Get>
rtems_chain_node *to_be_freed;
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = rtems_chain_get(&RTEMS_Malloc_GC_list)) != NULL)
230c: e3500000 cmp r0, #0
2310: 1afffffa bne 2300 <malloc_deferred_frees_process+0x8>
free(to_be_freed);
}
2314: e49df004 pop {pc} ; (ldr pc, [sp], #4)
0000c638 <memfile_free_blocks_in_table>:
void memfile_free_blocks_in_table(
block_p **block_table,
int entries
)
{
c638: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
/*
* Perform internal consistency checks
*/
assert( block_table );
c63c: e2504000 subs r4, r0, #0
void memfile_free_blocks_in_table(
block_p **block_table,
int entries
)
{
c640: e1a08001 mov r8, r1
/*
* Perform internal consistency checks
*/
assert( block_table );
c644: 0a000014 beq c69c <memfile_free_blocks_in_table+0x64>
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
for ( i=0 ; i<entries ; i++ ) {
c648: e3510000 cmp r1, #0
/*
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
c64c: e5947000 ldr r7, [r4]
for ( i=0 ; i<entries ; i++ ) {
c650: da00000c ble c688 <memfile_free_blocks_in_table+0x50>
c654: e3a05000 mov r5, #0
c658: e1a06005 mov r6, r5
if ( b[i] ) {
memfile_free_block( b[i] );
b[i] = 0;
c65c: e1a0a005 mov sl, r5
*/
b = *block_table;
for ( i=0 ; i<entries ; i++ ) {
if ( b[i] ) {
c660: e7970005 ldr r0, [r7, r5]
c664: e3500000 cmp r0, #0
c668: 0a000001 beq c674 <memfile_free_blocks_in_table+0x3c>
memfile_free_block( b[i] );
c66c: ebffff50 bl c3b4 <memfile_free_block>
b[i] = 0;
c670: e787a005 str sl, [r7, r5]
* Now go through all the slots in the table and free the memory.
*/
b = *block_table;
for ( i=0 ; i<entries ; i++ ) {
c674: e2866001 add r6, r6, #1
c678: e1580006 cmp r8, r6
c67c: e2855004 add r5, r5, #4
c680: cafffff6 bgt c660 <memfile_free_blocks_in_table+0x28>
c684: e5947000 ldr r7, [r4]
/*
* Now that all the blocks in the block table are free, we can
* free the block table itself.
*/
memfile_free_block( *block_table );
c688: e1a00007 mov r0, r7
c68c: ebffff48 bl c3b4 <memfile_free_block>
*block_table = 0;
c690: e3a03000 mov r3, #0
c694: e5843000 str r3, [r4]
}
c698: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
/*
* Perform internal consistency checks
*/
assert( block_table );
c69c: e3a01e1b mov r1, #432 ; 0x1b0 <== NOT EXECUTED
c6a0: e2811003 add r1, r1, #3 <== NOT EXECUTED
c6a4: e59f0008 ldr r0, [pc, #8] ; c6b4 <memfile_free_blocks_in_table+0x7c><== NOT EXECUTED
c6a8: e59f2008 ldr r2, [pc, #8] ; c6b8 <memfile_free_blocks_in_table+0x80><== NOT EXECUTED
c6ac: e59f3008 ldr r3, [pc, #8] ; c6bc <memfile_free_blocks_in_table+0x84><== NOT EXECUTED
c6b0: ebfff927 bl ab54 <__assert_func> <== NOT EXECUTED
0000cb90 <memfile_ftruncate>:
int memfile_ftruncate(
rtems_libio_t *iop,
rtems_off64_t length
)
{
cb90: e92d4010 push {r4, lr}
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
cb94: e5904038 ldr r4, [r0, #56] ; 0x38
* POSIX 1003.1b does not specify what happens if you truncate a file
* and the new length is greater than the current size. We treat this
* as an extend operation.
*/
if ( length > the_jnode->info.file.size )
cb98: e5943054 ldr r3, [r4, #84] ; 0x54
cb9c: e1530002 cmp r3, r2
int memfile_ftruncate(
rtems_libio_t *iop,
rtems_off64_t length
)
{
cba0: e24dd008 sub sp, sp, #8
* POSIX 1003.1b does not specify what happens if you truncate a file
* and the new length is greater than the current size. We treat this
* as an extend operation.
*/
if ( length > the_jnode->info.file.size )
cba4: ba00000e blt cbe4 <memfile_ftruncate+0x54>
cba8: 0a00000a beq cbd8 <memfile_ftruncate+0x48>
* The in-memory files do not currently reclaim memory until the file is
* deleted. So we leave the previously allocated blocks in place for
* future use and just set the length.
*/
the_jnode->info.file.size = length;
cbac: e5841050 str r1, [r4, #80] ; 0x50
cbb0: e5842054 str r2, [r4, #84] ; 0x54
iop->size = the_jnode->info.file.size;
cbb4: e9800006 stmib r0, {r1, r2}
IMFS_update_atime( the_jnode );
cbb8: e3a01000 mov r1, #0
cbbc: e1a0000d mov r0, sp
cbc0: ebffd561 bl 214c <gettimeofday>
cbc4: e59d3000 ldr r3, [sp]
cbc8: e5843040 str r3, [r4, #64] ; 0x40
cbcc: e3a00000 mov r0, #0
return 0;
}
cbd0: e28dd008 add sp, sp, #8
cbd4: e8bd8010 pop {r4, pc}
* POSIX 1003.1b does not specify what happens if you truncate a file
* and the new length is greater than the current size. We treat this
* as an extend operation.
*/
if ( length > the_jnode->info.file.size )
cbd8: e5943050 ldr r3, [r4, #80] ; 0x50
cbdc: e1530001 cmp r3, r1
cbe0: 2afffff1 bcs cbac <memfile_ftruncate+0x1c>
return IMFS_memfile_extend( the_jnode, length );
cbe4: e1a00004 mov r0, r4 <== NOT EXECUTED
cbe8: ebffff87 bl ca0c <IMFS_memfile_extend> <== NOT EXECUTED
cbec: eafffff7 b cbd0 <memfile_ftruncate+0x40> <== NOT EXECUTED
0000cbf0 <memfile_lseek>:
rtems_off64_t memfile_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
cbf0: e92d4030 push {r4, r5, lr}
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
cbf4: e5905038 ldr r5, [r0, #56] ; 0x38
if (the_jnode->type == IMFS_LINEAR_FILE) {
cbf8: e595304c ldr r3, [r5, #76] ; 0x4c
cbfc: e3530006 cmp r3, #6
rtems_off64_t memfile_lseek(
rtems_libio_t *iop,
rtems_off64_t offset,
int whence
)
{
cc00: e1a04000 mov r4, r0
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
if (the_jnode->type == IMFS_LINEAR_FILE) {
cc04: 0a00000d beq cc40 <memfile_lseek+0x50>
if (iop->offset > the_jnode->info.linearfile.size)
iop->offset = the_jnode->info.linearfile.size;
}
else { /* Must be a block file (IMFS_MEMORY_FILE). */
if (IMFS_memfile_extend( the_jnode, iop->offset ))
cc08: e1a00005 mov r0, r5
cc0c: e284200c add r2, r4, #12
cc10: e8920006 ldm r2, {r1, r2}
cc14: ebffff7c bl ca0c <IMFS_memfile_extend>
cc18: e3500000 cmp r0, #0
cc1c: 1a00001a bne cc8c <memfile_lseek+0x9c>
rtems_set_errno_and_return_minus_one( ENOSPC );
iop->size = the_jnode->info.file.size;
cc20: e2853050 add r3, r5, #80 ; 0x50
cc24: e893000c ldm r3, {r2, r3}
cc28: e984000c stmib r4, {r2, r3}
cc2c: e284300c add r3, r4, #12
cc30: e893000c ldm r3, {r2, r3}
}
return iop->offset;
}
cc34: e1a01003 mov r1, r3
cc38: e1a00002 mov r0, r2
cc3c: e8bd8030 pop {r4, r5, pc}
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
if (the_jnode->type == IMFS_LINEAR_FILE) {
if (iop->offset > the_jnode->info.linearfile.size)
cc40: e5901010 ldr r1, [r0, #16] <== NOT EXECUTED
cc44: e2853050 add r3, r5, #80 ; 0x50 <== NOT EXECUTED
cc48: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
cc4c: e1510003 cmp r1, r3 <== NOT EXECUTED
cc50: e590000c ldr r0, [r0, #12] <== NOT EXECUTED
cc54: ca000007 bgt cc78 <memfile_lseek+0x88> <== NOT EXECUTED
cc58: 0a000004 beq cc70 <memfile_lseek+0x80> <== NOT EXECUTED
cc5c: e1a02000 mov r2, r0 <== NOT EXECUTED
cc60: e1a03001 mov r3, r1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSPC );
iop->size = the_jnode->info.file.size;
}
return iop->offset;
}
cc64: e1a01003 mov r1, r3 <== NOT EXECUTED
cc68: e1a00002 mov r0, r2 <== NOT EXECUTED
cc6c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
if (the_jnode->type == IMFS_LINEAR_FILE) {
if (iop->offset > the_jnode->info.linearfile.size)
cc70: e1500002 cmp r0, r2 <== NOT EXECUTED
cc74: 9afffff8 bls cc5c <memfile_lseek+0x6c> <== NOT EXECUTED
iop->offset = the_jnode->info.linearfile.size;
cc78: e584200c str r2, [r4, #12] <== NOT EXECUTED
cc7c: e5843010 str r3, [r4, #16] <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOSPC );
iop->size = the_jnode->info.file.size;
}
return iop->offset;
}
cc80: e1a01003 mov r1, r3 <== NOT EXECUTED
cc84: e1a00002 mov r0, r2 <== NOT EXECUTED
cc88: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
if (iop->offset > the_jnode->info.linearfile.size)
iop->offset = the_jnode->info.linearfile.size;
}
else { /* Must be a block file (IMFS_MEMORY_FILE). */
if (IMFS_memfile_extend( the_jnode, iop->offset ))
rtems_set_errno_and_return_minus_one( ENOSPC );
cc8c: eb00058b bl e2c0 <__errno> <== NOT EXECUTED
cc90: e3a0301c mov r3, #28 <== NOT EXECUTED
cc94: e5803000 str r3, [r0] <== NOT EXECUTED
cc98: e3e02000 mvn r2, #0 <== NOT EXECUTED
cc9c: e3e03000 mvn r3, #0 <== NOT EXECUTED
cca0: eaffffe3 b cc34 <memfile_lseek+0x44> <== NOT EXECUTED
0000cf68 <memfile_open>:
rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode
)
{
cf68: e92d4830 push {r4, r5, fp, lr}
the_jnode = iop->file_info;
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
cf6c: e5903014 ldr r3, [r0, #20]
cf70: e3130f81 tst r3, #516 ; 0x204
rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode
)
{
cf74: e24dd004 sub sp, sp, #4
cf78: e1a04000 mov r4, r0
IMFS_jnode_t *the_jnode;
the_jnode = iop->file_info;
cf7c: e5905038 ldr r5, [r0, #56] ; 0x38
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
cf80: 0a000002 beq cf90 <memfile_open+0x28>
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
cf84: e595204c ldr r2, [r5, #76] ; 0x4c
cf88: e3520006 cmp r2, #6
cf8c: 0a00000b beq cfc0 <memfile_open+0x58>
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
cf90: e5952050 ldr r2, [r5, #80] ; 0x50
cf94: e5951054 ldr r1, [r5, #84] ; 0x54
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
return -1;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
cf98: e3130c02 tst r3, #512 ; 0x200
iop->offset = the_jnode->info.file.size;
cf9c: 1584200c strne r2, [r4, #12]
cfa0: 15841010 strne r1, [r4, #16]
cfa4: 15951054 ldrne r1, [r5, #84] ; 0x54
cfa8: 15952050 ldrne r2, [r5, #80] ; 0x50
iop->size = the_jnode->info.file.size;
cfac: e5841008 str r1, [r4, #8]
cfb0: e5842004 str r2, [r4, #4]
cfb4: e3a00000 mov r0, #0
return 0;
}
cfb8: e28dd004 add sp, sp, #4
cfbc: e8bd8830 pop {r4, r5, fp, pc}
/*
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
cfc0: e595c050 ldr ip, [r5, #80] ; 0x50 <== NOT EXECUTED
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
cfc4: e3a00000 mov r0, #0 <== NOT EXECUTED
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
cfc8: e3a03005 mov r3, #5 <== NOT EXECUTED
the_jnode->info.file.size = 0;
cfcc: e3a01000 mov r1, #0 <== NOT EXECUTED
cfd0: e3a02000 mov r2, #0 <== NOT EXECUTED
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
cfd4: e35c0000 cmp ip, #0 <== NOT EXECUTED
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
cfd8: e585304c str r3, [r5, #76] ; 0x4c <== NOT EXECUTED
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
cfdc: e5850060 str r0, [r5, #96] ; 0x60 <== NOT EXECUTED
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
&& (the_jnode->type == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
cfe0: e5953058 ldr r3, [r5, #88] ; 0x58 <== NOT EXECUTED
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
cfe4: e5851050 str r1, [r5, #80] ; 0x50 <== NOT EXECUTED
cfe8: e5852054 str r2, [r5, #84] ; 0x54 <== NOT EXECUTED
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
cfec: e585005c str r0, [r5, #92] ; 0x5c <== NOT EXECUTED
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
cff0: e5850058 str r0, [r5, #88] ; 0x58 <== NOT EXECUTED
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
cff4: 1a000004 bne d00c <memfile_open+0xa4> <== NOT EXECUTED
cff8: e1a0b001 mov fp, r1 <== NOT EXECUTED
cffc: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
d000: e1a01002 mov r1, r2 <== NOT EXECUTED
d004: e1a0200b mov r2, fp <== NOT EXECUTED
d008: eaffffe2 b cf98 <memfile_open+0x30> <== NOT EXECUTED
&& (IMFS_memfile_write(the_jnode, 0, buffer, count) == -1))
d00c: e1a00005 mov r0, r5 <== NOT EXECUTED
d010: e58dc000 str ip, [sp] <== NOT EXECUTED
d014: ebffff22 bl cca4 <IMFS_memfile_write> <== NOT EXECUTED
the_jnode->type = IMFS_MEMORY_FILE;
the_jnode->info.file.size = 0;
the_jnode->info.file.indirect = 0;
the_jnode->info.file.doubly_indirect = 0;
the_jnode->info.file.triply_indirect = 0;
if ((count != 0)
d018: e3700001 cmn r0, #1 <== NOT EXECUTED
d01c: 0affffe5 beq cfb8 <memfile_open+0x50> <== NOT EXECUTED
d020: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
d024: eaffffd9 b cf90 <memfile_open+0x28> <== NOT EXECUTED
00002518 <mknod>:
int mknod(
const char *pathname,
mode_t mode,
dev_t dev
)
{
2518: e92d41f0 push {r4, r5, r6, r7, r8, lr}
251c: e1a06001 mov r6, r1
int result;
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & S_IFMT)
2520: e2011a0f and r1, r1, #61440 ; 0xf000
2524: e3510901 cmp r1, #16384 ; 0x4000
int mknod(
const char *pathname,
mode_t mode,
dev_t dev
)
{
2528: e24dd020 sub sp, sp, #32
252c: e1a05000 mov r5, r0
2530: e1a07002 mov r7, r2
2534: e1a08003 mov r8, r3
int result;
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & S_IFMT)
2538: 0a00000d beq 2574 <mknod+0x5c>
253c: 9a000008 bls 2564 <mknod+0x4c>
2540: e3510a06 cmp r1, #24576 ; 0x6000
2544: 0a00000a beq 2574 <mknod+0x5c>
2548: e3510902 cmp r1, #32768 ; 0x8000
254c: 0a000008 beq 2574 <mknod+0x5c>
case S_IFBLK:
case S_IFREG:
case S_IFIFO:
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
2550: eb002f5a bl e2c0 <__errno> <== NOT EXECUTED
2554: e3a03016 mov r3, #22 <== NOT EXECUTED
2558: e5803000 str r3, [r0] <== NOT EXECUTED
255c: e3e05000 mvn r5, #0 <== NOT EXECUTED
2560: ea000028 b 2608 <mknod+0xf0> <== NOT EXECUTED
int result;
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & S_IFMT)
2564: e3510a01 cmp r1, #4096 ; 0x1000
2568: 0a000001 beq 2574 <mknod+0x5c>
256c: e3510a02 cmp r1, #8192 ; 0x2000
2570: 1afffff6 bne 2550 <mknod+0x38>
break;
default:
rtems_set_errno_and_return_minus_one( EINVAL );
}
rtems_filesystem_get_start_loc( pathname, &i, &temp_loc );
2574: e28d4004 add r4, sp, #4
2578: e1a00005 mov r0, r5
257c: e28d101c add r1, sp, #28
2580: e1a02004 mov r2, r4
2584: eb000289 bl 2fb0 <rtems_filesystem_get_start_loc>
if ( !temp_loc.ops->evalformake_h ) {
2588: e59d3010 ldr r3, [sp, #16]
258c: e5933004 ldr r3, [r3, #4]
2590: e3530000 cmp r3, #0
2594: 0a000023 beq 2628 <mknod+0x110>
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->evalformake_h)(
2598: e59d001c ldr r0, [sp, #28]
259c: e1a01004 mov r1, r4
25a0: e0850000 add r0, r5, r0
25a4: e28d2018 add r2, sp, #24
25a8: e1a0e00f mov lr, pc
25ac: e12fff13 bx r3
&pathname[i],
&temp_loc,
&name_start
);
if ( result != 0 )
25b0: e3500000 cmp r0, #0
25b4: 1a00001e bne 2634 <mknod+0x11c>
return -1;
if ( !temp_loc.ops->mknod_h ) {
25b8: e59d3010 ldr r3, [sp, #16]
25bc: e593c014 ldr ip, [r3, #20]
25c0: e35c0000 cmp ip, #0
25c4: 0a000012 beq 2614 <mknod+0xfc>
rtems_filesystem_freenode( &temp_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
25c8: e1a03008 mov r3, r8
25cc: e58d4000 str r4, [sp]
25d0: e59d0018 ldr r0, [sp, #24]
25d4: e1a01006 mov r1, r6
25d8: e1a02007 mov r2, r7
25dc: e1a0e00f mov lr, pc
25e0: e12fff1c bx ip
rtems_filesystem_freenode( &temp_loc );
25e4: e59d3010 ldr r3, [sp, #16]
25e8: e3530000 cmp r3, #0
if ( !temp_loc.ops->mknod_h ) {
rtems_filesystem_freenode( &temp_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
25ec: e1a05000 mov r5, r0
rtems_filesystem_freenode( &temp_loc );
25f0: 0a000004 beq 2608 <mknod+0xf0>
25f4: e593301c ldr r3, [r3, #28]
25f8: e3530000 cmp r3, #0
25fc: 11a00004 movne r0, r4
2600: 11a0e00f movne lr, pc
2604: 112fff13 bxne r3
return result;
}
2608: e1a00005 mov r0, r5
260c: e28dd020 add sp, sp, #32
2610: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
);
if ( result != 0 )
return -1;
if ( !temp_loc.ops->mknod_h ) {
rtems_filesystem_freenode( &temp_loc );
2614: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2618: e3530000 cmp r3, #0 <== NOT EXECUTED
261c: 11a00004 movne r0, r4 <== NOT EXECUTED
2620: 11a0e00f movne lr, pc <== NOT EXECUTED
2624: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2628: eb002f24 bl e2c0 <__errno> <== NOT EXECUTED
262c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2630: e5803000 str r3, [r0] <== NOT EXECUTED
2634: e3e05000 mvn r5, #0
2638: eafffff2 b 2608 <mknod+0xf0>
000026c8 <mount>:
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
26c8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
/*
* Are the file system options valid?
*/
if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
26cc: e3530001 cmp r3, #1
const char *target,
const char *filesystemtype,
rtems_filesystem_options_t options,
const void *data
)
{
26d0: e24dd028 sub sp, sp, #40 ; 0x28
26d4: e58d3004 str r3, [sp, #4]
26d8: e1a08000 mov r8, r0
26dc: e1a07001 mov r7, r1
26e0: e1a0a002 mov sl, r2
/*
* Are the file system options valid?
*/
if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
26e4: 8a00009e bhi 2964 <mount+0x29c>
rtems_set_errno_and_return_minus_one( EINVAL );
/*
* Get mount handler
*/
mount_h = rtems_filesystem_get_mount_handler( filesystemtype );
26e8: e1a00002 mov r0, r2
26ec: eb0022ad bl b1a8 <rtems_filesystem_get_mount_handler>
if ( !mount_h )
26f0: e3500000 cmp r0, #0
26f4: e58d000c str r0, [sp, #12]
26f8: 0a000099 beq 2964 <mount+0x29c>
{
rtems_filesystem_fsmount_me_t mount_h = NULL;
rtems_filesystem_location_info_t loc;
rtems_filesystem_mount_table_entry_t *mt_entry = NULL;
rtems_filesystem_location_info_t *loc_to_free = NULL;
bool has_target = target != NULL;
26fc: e2575000 subs r5, r7, #0
2700: 13a05001 movne r5, #1
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
2704: e3550000 cmp r5, #0
2708: 0a000090 beq 2950 <mount+0x288>
* 4) The mount point exists with the proper permissions to allow mounting
* 5) The selected mount point already has a file system mounted to it
*
*/
int mount(
270c: e1a00007 mov r0, r7
2710: e58d7010 str r7, [sp, #16]
2714: eb0032ee bl f2d4 <strlen>
2718: e58d0008 str r0, [sp, #8]
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
271c: e1a0000a mov r0, sl
2720: eb0032eb bl f2d4 <strlen>
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
2724: e3580000 cmp r8, #0
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
size_t filesystemtype_size = strlen( filesystemtype ) + 1;
2728: e2806001 add r6, r0, #1
size_t source_size = source_or_null != NULL ?
strlen( source_or_null ) + 1 : 0;
272c: 01a0b008 moveq fp, r8
2730: 0a000002 beq 2740 <mount+0x78>
2734: e1a00008 mov r0, r8
2738: eb0032e5 bl f2d4 <strlen>
273c: e280b001 add fp, r0, #1
size_t target_length = strlen( target );
size_t size = sizeof( rtems_filesystem_mount_table_entry_t )
+ filesystemtype_size + source_size + target_length + 1;
rtems_filesystem_mount_table_entry_t *mt_entry = calloc( 1, size );
2740: e59d3008 ldr r3, [sp, #8]
2744: e2831075 add r1, r3, #117 ; 0x75
2748: e0811006 add r1, r1, r6
274c: e081100b add r1, r1, fp
2750: e3a00001 mov r0, #1
2754: ebfffdbd bl 1e50 <calloc>
if ( mt_entry != NULL ) {
2758: e2504000 subs r4, r0, #0
275c: 0a000076 beq 293c <mount+0x274>
char *str = (char *) mt_entry + sizeof( *mt_entry );
2760: e2849074 add r9, r4, #116 ; 0x74
strcpy( str, filesystemtype );
2764: e1a0100a mov r1, sl
2768: e1a00009 mov r0, r9
276c: eb003288 bl f194 <strcpy>
mt_entry->type = str;
str += filesystemtype_size;
if ( source_or_null != NULL ) {
2770: e3580000 cmp r8, #0
if ( mt_entry != NULL ) {
char *str = (char *) mt_entry + sizeof( *mt_entry );
strcpy( str, filesystemtype );
mt_entry->type = str;
str += filesystemtype_size;
2774: e0896006 add r6, r9, r6
if ( mt_entry != NULL ) {
char *str = (char *) mt_entry + sizeof( *mt_entry );
strcpy( str, filesystemtype );
mt_entry->type = str;
2778: e584906c str r9, [r4, #108] ; 0x6c
str += filesystemtype_size;
if ( source_or_null != NULL ) {
277c: 0a000004 beq 2794 <mount+0xcc>
strcpy( str, source_or_null );
2780: e1a00006 mov r0, r6
2784: e1a01008 mov r1, r8
2788: eb003281 bl f194 <strcpy>
mt_entry->dev = str;
278c: e5846070 str r6, [r4, #112] ; 0x70
str += source_size;
2790: e086600b add r6, r6, fp
}
strcpy( str, target );
2794: e59d1010 ldr r1, [sp, #16]
2798: e1a00006 mov r0, r6
279c: eb00327c bl f194 <strcpy>
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
mt_entry->options = options;
mt_entry->pathconf_limits_and_options = rtems_filesystem_default_pathconf;
27a0: e59fe24c ldr lr, [pc, #588] ; 29f4 <mount+0x32c>
27a4: e8be000f ldm lr!, {r0, r1, r2, r3}
27a8: e284c038 add ip, r4, #56 ; 0x38
27ac: e8ac000f stmia ip!, {r0, r1, r2, r3}
27b0: e8be000f ldm lr!, {r0, r1, r2, r3}
27b4: e8ac000f stmia ip!, {r0, r1, r2, r3}
27b8: e89e000f ldm lr, {r0, r1, r2, r3}
27bc: e88c000f stm ip, {r0, r1, r2, r3}
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
mt_entry->options = options;
27c0: e59d3004 ldr r3, [sp, #4]
/*
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
27c4: e3550000 cmp r5, #0
mt_entry->dev = str;
str += source_size;
}
strcpy( str, target );
mt_entry->target = str;
27c8: e5846068 str r6, [r4, #104] ; 0x68
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
mt_entry->options = options;
27cc: e5843030 str r3, [r4, #48] ; 0x30
&target_length
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
mt_entry->mt_fs_root.mt_entry = mt_entry;
27d0: e584402c str r4, [r4, #44] ; 0x2c
/*
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
27d4: 1a000023 bne 2868 <mount+0x1a0>
}
} else {
/*
* Do we already have a base file system ?
*/
if ( !rtems_chain_is_empty( &mount_chain ) ) {
27d8: e59f3218 ldr r3, [pc, #536] ; 29f8 <mount+0x330>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
27dc: e5932000 ldr r2, [r3]
27e0: e2833004 add r3, r3, #4
27e4: e1520003 cmp r2, r3
27e8: 01a06005 moveq r6, r5
27ec: 1a00006d bne 29a8 <mount+0x2e0>
* mt_point_node.node_access will be left to null to indicate that this
* is the root of the entire file system.
*/
}
if ( (*mount_h)( mt_entry, data ) ) {
27f0: e59d104c ldr r1, [sp, #76] ; 0x4c
27f4: e1a00004 mov r0, r4
27f8: e59d300c ldr r3, [sp, #12]
27fc: e1a0e00f mov lr, pc
2800: e12fff13 bx r3
2804: e2507000 subs r7, r0, #0
2808: 1a00005a bne 2978 <mount+0x2b0>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
280c: e59f61e8 ldr r6, [pc, #488] ; 29fc <mount+0x334>
2810: e1a02007 mov r2, r7
2814: e1a01007 mov r1, r7
2818: e5960000 ldr r0, [r6]
281c: eb000be2 bl 57ac <rtems_semaphore_obtain>
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
2820: e1a01004 mov r1, r4
2824: e59f01cc ldr r0, [pc, #460] ; 29f8 <mount+0x330>
2828: eb000e23 bl 60bc <_Chain_Append>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
282c: e5960000 ldr r0, [r6]
2830: eb000c25 bl 58cc <rtems_semaphore_release>
*/
rtems_libio_lock();
rtems_chain_append( &mount_chain, &mt_entry->Node );
rtems_libio_unlock();
if ( !has_target )
2834: e3550000 cmp r5, #0
rtems_filesystem_root = mt_entry->mt_fs_root;
2838: 059f31c0 ldreq r3, [pc, #448] ; 2a00 <mount+0x338>
283c: 0284401c addeq r4, r4, #28
2840: 0593c000 ldreq ip, [r3]
2844: 08b4000f ldmeq r4!, {r0, r1, r2, r3}
2848: 028cc018 addeq ip, ip, #24
284c: 08ac000f stmiaeq ip!, {r0, r1, r2, r3}
2850: 05943000 ldreq r3, [r4]
2854: 058c3000 streq r3, [ip]
*/
rtems_libio_lock();
rtems_chain_append( &mount_chain, &mt_entry->Node );
rtems_libio_unlock();
if ( !has_target )
2858: 11a00007 movne r0, r7
rtems_filesystem_root = mt_entry->mt_fs_root;
285c: 01a00005 moveq r0, r5
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
return -1;
}
2860: e28dd028 add sp, sp, #40 ; 0x28
2864: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
* The mount_point should be a directory with read/write/execute
* permissions in the existing tree.
*/
if ( has_target ) {
if ( rtems_filesystem_evaluate_path(
2868: e28d6014 add r6, sp, #20
286c: e3a0c001 mov ip, #1
2870: e1a00007 mov r0, r7
2874: e59d1008 ldr r1, [sp, #8]
2878: e3a02007 mov r2, #7
287c: e1a03006 mov r3, r6
2880: e58dc000 str ip, [sp]
2884: ebfffde5 bl 2020 <rtems_filesystem_evaluate_path>
2888: e3700001 cmn r0, #1
288c: 0a000048 beq 29b4 <mount+0x2ec>
/*
* Test for node_type_h
*/
if (!loc.ops->node_type_h) {
2890: e59d3020 ldr r3, [sp, #32]
2894: e5933010 ldr r3, [r3, #16]
2898: e3530000 cmp r3, #0
289c: 0a000050 beq 29e4 <mount+0x31c>
/*
* Test to see if it is a directory
*/
if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
28a0: e1a00006 mov r0, r6
28a4: e1a0e00f mov lr, pc
28a8: e12fff13 bx r3
28ac: e3500001 cmp r0, #1
28b0: 1a000043 bne 29c4 <mount+0x2fc>
/*
* You can only mount one file system onto a single mount point.
*/
if ( rtems_filesystem_mount_iterate( is_node_fs_root, loc.node_access ) ) {
28b4: e59f0148 ldr r0, [pc, #328] ; 2a04 <mount+0x33c>
28b8: e59d1014 ldr r1, [sp, #20]
28bc: ebffff63 bl 2650 <rtems_filesystem_mount_iterate>
28c0: e3500000 cmp r0, #0
28c4: 1a000042 bne 29d4 <mount+0x30c>
* may have been allocated in loc should not be sent to freenode
* until the system is unmounted. It may be needed to correctly
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
28c8: e59d1014 ldr r1, [sp, #20]
mt_entry->mt_point_node.handlers = loc.handlers;
mt_entry->mt_point_node.ops = loc.ops;
28cc: e59d2020 ldr r2, [sp, #32]
* may have been allocated in loc should not be sent to freenode
* until the system is unmounted. It may be needed to correctly
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
28d0: e5841008 str r1, [r4, #8]
mt_entry->mt_point_node.handlers = loc.handlers;
28d4: e59d101c ldr r1, [sp, #28]
/*
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( !loc.ops->mount_h ){
28d8: e5923020 ldr r3, [r2, #32]
* until the system is unmounted. It may be needed to correctly
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
mt_entry->mt_point_node.handlers = loc.handlers;
28dc: e5841010 str r1, [r4, #16]
mt_entry->mt_point_node.ops = loc.ops;
mt_entry->mt_point_node.mt_entry = loc.mt_entry;
28e0: e59d1024 ldr r1, [sp, #36] ; 0x24
/*
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( !loc.ops->mount_h ){
28e4: e3530000 cmp r3, #0
*/
mt_entry->mt_point_node.node_access = loc.node_access;
mt_entry->mt_point_node.handlers = loc.handlers;
mt_entry->mt_point_node.ops = loc.ops;
mt_entry->mt_point_node.mt_entry = loc.mt_entry;
28e8: e5841018 str r1, [r4, #24]
* traverse the tree.
*/
mt_entry->mt_point_node.node_access = loc.node_access;
mt_entry->mt_point_node.handlers = loc.handlers;
mt_entry->mt_point_node.ops = loc.ops;
28ec: e5842014 str r2, [r4, #20]
/*
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( !loc.ops->mount_h ){
28f0: 0a00003b beq 29e4 <mount+0x31c>
errno = ENOTSUP;
goto cleanup_and_bail;
}
if ( loc.ops->mount_h( mt_entry ) ) {
28f4: e1a00004 mov r0, r4
28f8: e1a0e00f mov lr, pc
28fc: e12fff13 bx r3
2900: e3500000 cmp r0, #0
2904: 0affffb9 beq 27f0 <mount+0x128>
return 0;
cleanup_and_bail:
free( mt_entry );
2908: e1a00004 mov r0, r4
290c: ebfffde5 bl 20a8 <free>
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
2910: e596300c ldr r3, [r6, #12]
2914: e3530000 cmp r3, #0
2918: 0a000020 beq 29a0 <mount+0x2d8>
291c: e593301c ldr r3, [r3, #28]
2920: e3530000 cmp r3, #0
2924: 0a00001d beq 29a0 <mount+0x2d8>
2928: e1a00006 mov r0, r6
292c: e1a0e00f mov lr, pc
2930: e12fff13 bx r3
2934: e3e00000 mvn r0, #0
2938: eaffffc8 b 2860 <mount+0x198>
target,
filesystemtype,
&target_length
);
if ( !mt_entry )
rtems_set_errno_and_return_minus_one( ENOMEM );
293c: eb002e5f bl e2c0 <__errno> <== NOT EXECUTED
2940: e3a0300c mov r3, #12 <== NOT EXECUTED
2944: e5803000 str r3, [r0] <== NOT EXECUTED
2948: e3e00000 mvn r0, #0 <== NOT EXECUTED
294c: eaffffc3 b 2860 <mount+0x198> <== NOT EXECUTED
const char *target_or_null,
const char *filesystemtype,
size_t *target_length_ptr
)
{
const char *target = target_or_null != NULL ? target_or_null : "/";
2950: e3a03001 mov r3, #1
2954: e58d3008 str r3, [sp, #8]
2958: e59f30a8 ldr r3, [pc, #168] ; 2a08 <mount+0x340>
295c: e58d3010 str r3, [sp, #16]
2960: eaffff6d b 271c <mount+0x54>
/*
* Get mount handler
*/
mount_h = rtems_filesystem_get_mount_handler( filesystemtype );
if ( !mount_h )
rtems_set_errno_and_return_minus_one( EINVAL );
2964: eb002e55 bl e2c0 <__errno>
2968: e3a03016 mov r3, #22
296c: e5803000 str r3, [r0]
2970: e3e00000 mvn r0, #0
2974: eaffffb9 b 2860 <mount+0x198>
if ( (*mount_h)( mt_entry, data ) ) {
/*
* Try to undo the mount operation
*/
if ( loc.ops->unmount_h ) {
2978: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
297c: e5933028 ldr r3, [r3, #40] ; 0x28 <== NOT EXECUTED
2980: e3530000 cmp r3, #0 <== NOT EXECUTED
loc.ops->unmount_h( mt_entry );
2984: 11a00004 movne r0, r4 <== NOT EXECUTED
2988: 11a0e00f movne lr, pc <== NOT EXECUTED
298c: 112fff13 bxne r3 <== NOT EXECUTED
return 0;
cleanup_and_bail:
free( mt_entry );
2990: e1a00004 mov r0, r4 <== NOT EXECUTED
2994: ebfffdc3 bl 20a8 <free> <== NOT EXECUTED
if ( loc_to_free )
2998: e3560000 cmp r6, #0 <== NOT EXECUTED
299c: 1affffdb bne 2910 <mount+0x248> <== NOT EXECUTED
rtems_filesystem_freenode( loc_to_free );
29a0: e3e00000 mvn r0, #0 <== NOT EXECUTED
29a4: eaffffad b 2860 <mount+0x198> <== NOT EXECUTED
} else {
/*
* Do we already have a base file system ?
*/
if ( !rtems_chain_is_empty( &mount_chain ) ) {
errno = EINVAL;
29a8: eb002e44 bl e2c0 <__errno> <== NOT EXECUTED
29ac: e3a03016 mov r3, #22 <== NOT EXECUTED
29b0: e5803000 str r3, [r0] <== NOT EXECUTED
return 0;
cleanup_and_bail:
free( mt_entry );
29b4: e1a00004 mov r0, r4 <== NOT EXECUTED
29b8: ebfffdba bl 20a8 <free> <== NOT EXECUTED
29bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
29c0: eaffffa6 b 2860 <mount+0x198> <== NOT EXECUTED
/*
* Test to see if it is a directory
*/
if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
errno = ENOTDIR;
29c4: eb002e3d bl e2c0 <__errno>
29c8: e3a03014 mov r3, #20
29cc: e5803000 str r3, [r0]
goto cleanup_and_bail;
29d0: eaffffcc b 2908 <mount+0x240>
/*
* You can only mount one file system onto a single mount point.
*/
if ( rtems_filesystem_mount_iterate( is_node_fs_root, loc.node_access ) ) {
errno = EBUSY;
29d4: eb002e39 bl e2c0 <__errno>
29d8: e3a03010 mov r3, #16
29dc: e5803000 str r3, [r0]
goto cleanup_and_bail;
29e0: eaffffc8 b 2908 <mount+0x240>
* This link to the parent is only done when we are dealing with system
* below the base file system
*/
if ( !loc.ops->mount_h ){
errno = ENOTSUP;
29e4: eb002e35 bl e2c0 <__errno> <== NOT EXECUTED
29e8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
29ec: e5803000 str r3, [r0] <== NOT EXECUTED
goto cleanup_and_bail;
29f0: eaffffc4 b 2908 <mount+0x240> <== NOT EXECUTED
00035ecc <msdos_creat_node>:
msdos_node_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
35ecc: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
35ed0: e24dd0ac sub sp, sp, #172 ; 0xac <== NOT EXECUTED
35ed4: e1a06000 mov r6, r0 <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
35ed8: e28d5074 add r5, sp, #116 ; 0x74 <== NOT EXECUTED
mode_t mode,
const fat_file_fd_t *link_fd)
{
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
35edc: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
fat_file_fd_t *fat_fd = NULL;
35ee0: e3a04000 mov r4, #0 <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
35ee4: e285c008 add ip, r5, #8 <== NOT EXECUTED
mode_t mode,
const fat_file_fd_t *link_fd)
{
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
35ee8: e5900034 ldr r0, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
35eec: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
35ef0: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
35ef4: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
35ef8: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
35efc: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
35f00: e58d4074 str r4, [sp, #116] ; 0x74 <== NOT EXECUTED
35f04: e58c4000 str r4, [ip] <== NOT EXECUTED
35f08: e58d4078 str r4, [sp, #120] ; 0x78 <== NOT EXECUTED
msdos_node_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
35f0c: e1a08003 mov r8, r3 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
35f10: e3e03000 mvn r3, #0 <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
35f14: e58d30a0 str r3, [sp, #160] ; 0xa0 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
35f18: e58d309c str r3, [sp, #156] ; 0x9c <== NOT EXECUTED
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
35f1c: e28d9014 add r9, sp, #20 <== NOT EXECUTED
const fat_file_fd_t *link_fd)
{
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
35f20: e5963000 ldr r3, [r6] <== NOT EXECUTED
mode_t mode,
const fat_file_fd_t *link_fd)
{
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
35f24: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
msdos_node_type_t type,
const char *name,
int name_len,
mode_t mode,
const fat_file_fd_t *link_fd)
{
35f28: e1a07002 mov r7, r2 <== NOT EXECUTED
35f2c: e1a0a001 mov sl, r1 <== NOT EXECUTED
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
35f30: e3a02040 mov r2, #64 ; 0x40 <== NOT EXECUTED
35f34: e1a01004 mov r1, r4 <== NOT EXECUTED
35f38: e1a00009 mov r0, r9 <== NOT EXECUTED
const fat_file_fd_t *link_fd)
{
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
fat_file_fd_t *parent_fat_fd = parent_loc->node_access;
35f3c: e58d300c str r3, [sp, #12] <== NOT EXECUTED
fat_file_fd_t *fat_fd = NULL;
35f40: e58d40a4 str r4, [sp, #164] ; 0xa4 <== NOT EXECUTED
time_t time_ret = 0;
uint16_t time_val = 0;
35f44: e1cd4aba strh r4, [sp, #170] ; 0xaa <== NOT EXECUTED
uint16_t date = 0;
35f48: e1cd4ab8 strh r4, [sp, #168] ; 0xa8 <== NOT EXECUTED
static inline void
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
35f4c: e58d4094 str r4, [sp, #148] ; 0x94 <== NOT EXECUTED
dir_pos->sname.ofs = 0;
35f50: e58d4098 str r4, [sp, #152] ; 0x98 <== NOT EXECUTED
uint32_t byte = 0;
fat_dir_pos_init(&dir_pos);
memset(short_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memset(dot_dotdot, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2);
35f54: eb00415c bl 464cc <memset> <== NOT EXECUTED
name_type = msdos_long_to_short (name, name_len,
35f58: e1a01008 mov r1, r8 <== NOT EXECUTED
35f5c: e1a02005 mov r2, r5 <== NOT EXECUTED
35f60: e3a0300b mov r3, #11 <== NOT EXECUTED
35f64: e1a00007 mov r0, r7 <== NOT EXECUTED
35f68: eb000811 bl 37fb4 <msdos_long_to_short> <== NOT EXECUTED
35f6c: e1a0b000 mov fp, r0 <== NOT EXECUTED
/* fill reserved field */
*MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE;
/* set up last write date and time */
time_ret = time(NULL);
35f70: e1a00004 mov r0, r4 <== NOT EXECUTED
name_type = msdos_long_to_short (name, name_len,
MSDOS_DIR_NAME(short_node),
MSDOS_NAME_MAX);
/* fill reserved field */
*MSDOS_DIR_NT_RES(short_node) = MSDOS_RES_NT_VALUE;
35f74: e5cd4080 strb r4, [sp, #128] ; 0x80 <== NOT EXECUTED
/* set up last write date and time */
time_ret = time(NULL);
35f78: eb00638e bl 4edb8 <time> <== NOT EXECUTED
if ( time_ret == -1 )
35f7c: e3700001 cmn r0, #1 <== NOT EXECUTED
35f80: 0a00001d beq 35ffc <msdos_creat_node+0x130> <== NOT EXECUTED
return -1;
msdos_date_unix2dos(time_ret, &date, &time_val);
35f84: e28d10a8 add r1, sp, #168 ; 0xa8 <== NOT EXECUTED
35f88: e28d20aa add r2, sp, #170 ; 0xaa <== NOT EXECUTED
35f8c: eb002d3c bl 41484 <msdos_date_unix2dos> <== NOT EXECUTED
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
35f90: e1ddeaba ldrh lr, [sp, #170] ; 0xaa <== NOT EXECUTED
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
35f94: e1dd1ab8 ldrh r1, [sp, #168] ; 0xa8 <== NOT EXECUTED
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
if (type == MSDOS_DIRECTORY) {
35f98: e35a0001 cmp sl, #1 <== NOT EXECUTED
msdos_date_unix2dos(time_ret, &date, &time_val);
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
35f9c: e58d4090 str r4, [sp, #144] ; 0x90 <== NOT EXECUTED
time_ret = time(NULL);
if ( time_ret == -1 )
return -1;
msdos_date_unix2dos(time_ret, &date, &time_val);
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
35fa0: e1cde8ba strh lr, [sp, #138] ; 0x8a <== NOT EXECUTED
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
35fa4: e1cd18bc strh r1, [sp, #140] ; 0x8c <== NOT EXECUTED
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
if (type == MSDOS_DIRECTORY) {
35fa8: 0a000015 beq 36004 <msdos_creat_node+0x138> <== NOT EXECUTED
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
}
else if (type == MSDOS_HARD_LINK) {
35fac: e35a0003 cmp sl, #3 <== NOT EXECUTED
35fb0: 0a000073 beq 36184 <msdos_creat_node+0x2b8> <== NOT EXECUTED
* set "last access" date to today
*/
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
}
else { /* regular file... */
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
35fb4: e5dd307f ldrb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
35fb8: e3833020 orr r3, r3, #32 <== NOT EXECUTED
35fbc: e5cd307f strb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
/*
* 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,
35fc0: e1a02007 mov r2, r7 <== NOT EXECUTED
35fc4: e1a03008 mov r3, r8 <== NOT EXECUTED
35fc8: e28d4094 add r4, sp, #148 ; 0x94 <== NOT EXECUTED
35fcc: e1a00006 mov r0, r6 <== NOT EXECUTED
35fd0: e3a01001 mov r1, #1 <== NOT EXECUTED
35fd4: e58db000 str fp, [sp] <== NOT EXECUTED
35fd8: e98d0030 stmib sp, {r4, r5} <== NOT EXECUTED
35fdc: eb0008fd bl 383d8 <msdos_get_name_node> <== NOT EXECUTED
name_type, &dir_pos, short_node);
if ( rc != RC_OK )
35fe0: e2507000 subs r7, r0, #0 <== NOT EXECUTED
35fe4: 1a000001 bne 35ff0 <msdos_creat_node+0x124> <== NOT EXECUTED
/*
* if we create a new file we are done, if directory there are more steps
* to do
*/
if (type == MSDOS_DIRECTORY)
35fe8: e35a0001 cmp sl, #1 <== NOT EXECUTED
35fec: 0a000008 beq 36014 <msdos_creat_node+0x148> <== NOT EXECUTED
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;
}
35ff0: e1a00007 mov r0, r7 <== NOT EXECUTED
35ff4: e28dd0ac add sp, sp, #172 ; 0xac <== NOT EXECUTED
35ff8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
fat_file_close(parent_loc->mt_entry, fat_fd);
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;
35ffc: e3e07000 mvn r7, #0 <== NOT EXECUTED
36000: eafffffa b 35ff0 <msdos_creat_node+0x124> <== NOT EXECUTED
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
if (type == MSDOS_DIRECTORY) {
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_DIRECTORY;
36004: e5dd307f ldrb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
36008: e3833010 orr r3, r3, #16 <== NOT EXECUTED
3600c: e5cd307f strb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
36010: eaffffea b 35fc0 <msdos_creat_node+0xf4> <== NOT EXECUTED
* to do
*/
if (type == MSDOS_DIRECTORY)
{
/* open new directory as fat-file */
rc = fat_file_open(parent_loc->mt_entry, &dir_pos, &fat_fd);
36014: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
36018: e1a01004 mov r1, r4 <== NOT EXECUTED
3601c: e28d20a4 add r2, sp, #164 ; 0xa4 <== NOT EXECUTED
36020: ebffbef6 bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
36024: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36028: 1a000044 bne 36140 <msdos_creat_node+0x274> <== NOT EXECUTED
/*
* we opened fat-file for node we just created, so initialize fat-file
* descritor
*/
fat_fd->fat_file_size = 0;
3602c: e59d30a4 ldr r3, [sp, #164] ; 0xa4 <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
36030: e3a02602 mov r2, #2097152 ; 0x200000 <== NOT EXECUTED
36034: e5832014 str r2, [r3, #20] <== NOT EXECUTED
/*
* we opened fat-file for node we just created, so initialize fat-file
* descritor
*/
fat_fd->fat_file_size = 0;
36038: e5837018 str r7, [r3, #24] <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
3603c: e583a010 str sl, [r3, #16] <== NOT EXECUTED
/*
* dot and dotdot entries are identical to new node except the
* names
*/
memcpy(DOT_NODE_P(dot_dotdot), short_node,
36040: e1a0e005 mov lr, r5 <== NOT EXECUTED
36044: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED
36048: e1a0c009 mov ip, r9 <== NOT EXECUTED
3604c: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
36050: e89e000f ldm lr, {r0, r1, r2, r3} <== NOT EXECUTED
36054: e88c000f stm ip, {r0, r1, r2, r3} <== NOT EXECUTED
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memcpy(DOTDOT_NODE_P(dot_dotdot), short_node,
36058: e8b5000f ldm r5!, {r0, r1, r2, r3} <== NOT EXECUTED
3605c: e2895020 add r5, r9, #32 <== NOT EXECUTED
36060: e1a0c005 mov ip, r5 <== NOT EXECUTED
36064: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
36068: e89e000f ldm lr, {r0, r1, r2, r3} <== NOT EXECUTED
3606c: e88c000f stm ip, {r0, r1, r2, r3} <== NOT EXECUTED
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
memcpy(MSDOS_DIR_NAME(DOT_NODE_P(dot_dotdot)), MSDOS_DOT_NAME,
36070: e59f31dc ldr r3, [pc, #476] ; 36254 <msdos_creat_node+0x388><== NOT EXECUTED
36074: e3a0200b mov r2, #11 <== NOT EXECUTED
36078: e5931000 ldr r1, [r3] <== NOT EXECUTED
3607c: e1a00009 mov r0, r9 <== NOT EXECUTED
36080: eb00408a bl 462b0 <memcpy> <== NOT EXECUTED
MSDOS_NAME_MAX);
memcpy(MSDOS_DIR_NAME(DOTDOT_NODE_P(dot_dotdot)), MSDOS_DOTDOT_NAME,
36084: e59f31cc ldr r3, [pc, #460] ; 36258 <msdos_creat_node+0x38c><== NOT EXECUTED
36088: e1a00005 mov r0, r5 <== NOT EXECUTED
3608c: e5931000 ldr r1, [r3] <== NOT EXECUTED
36090: e3a0200b mov r2, #11 <== NOT EXECUTED
36094: eb004085 bl 462b0 <memcpy> <== NOT EXECUTED
/*
* here we can ommit FAT32 condition because for all FAT types dirs
* right under root dir should contain 0 in dotdot entry but for
* FAT12/16 parent_fat_fd->cluster_num always contains such value
*/
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
36098: e59de00c ldr lr, [sp, #12] <== NOT EXECUTED
3609c: e59e3020 ldr r3, [lr, #32] <== NOT EXECUTED
360a0: e3530001 cmp r3, #1 <== NOT EXECUTED
360a4: 0a00002c beq 3615c <msdos_creat_node+0x290> <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
}
else
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) =
360a8: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
360ac: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
CT_LE_W((uint16_t )((parent_fat_fd->cln) & 0x0000FFFF));
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) =
360b0: e1a02823 lsr r2, r3, #16 <== NOT EXECUTED
360b4: e1cd24b8 strh r2, [sp, #72] ; 0x48 <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
}
else
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) =
360b8: e1cd34be strh r3, [sp, #78] ; 0x4e <== NOT EXECUTED
/*
* write dot and dotdot entries to new fat-file: currently fat-file
* correspondes to a new node is zero length, so it will be extended
* by one cluster and entries will be written
*/
ret = fat_file_write(parent_loc->mt_entry, fat_fd, 0,
360bc: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
360c0: e59d10a4 ldr r1, [sp, #164] ; 0xa4 <== NOT EXECUTED
360c4: e3a02000 mov r2, #0 <== NOT EXECUTED
360c8: e3a03040 mov r3, #64 ; 0x40 <== NOT EXECUTED
360cc: e58d9000 str r9, [sp] <== NOT EXECUTED
360d0: ebffbd87 bl 256f4 <fat_file_write> <== NOT EXECUTED
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE * 2,
(uint8_t *)dot_dotdot);
if (ret < 0)
360d4: e3500000 cmp r0, #0 <== NOT EXECUTED
360d8: ba00001d blt 36154 <msdos_creat_node+0x288> <== NOT EXECUTED
rc = -1;
goto error;
}
/* increment fat-file size by cluster size */
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
360dc: e59d10a4 ldr r1, [sp, #164] ; 0xa4 <== NOT EXECUTED
360e0: e59de010 ldr lr, [sp, #16] <== NOT EXECUTED
360e4: e5912018 ldr r2, [r1, #24] <== NOT EXECUTED
360e8: e1de30b6 ldrh r3, [lr, #6] <== NOT EXECUTED
/* set up cluster num for dot entry */
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
360ec: e591c01c ldr ip, [r1, #28] <== NOT EXECUTED
rc = -1;
goto error;
}
/* increment fat-file size by cluster size */
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
360f0: e0823003 add r3, r2, r3 <== NOT EXECUTED
360f4: e5813018 str r3, [r1, #24] <== NOT EXECUTED
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
/* rewrite dot entry */
ret = fat_file_write(parent_loc->mt_entry, fat_fd, 0,
360f8: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
/* set up cluster num for dot entry */
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
360fc: e1a0e82c lsr lr, ip, #16 <== NOT EXECUTED
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
/* rewrite dot entry */
ret = fat_file_write(parent_loc->mt_entry, fat_fd, 0,
36100: e3a02000 mov r2, #0 <== NOT EXECUTED
36104: e3a03020 mov r3, #32 <== NOT EXECUTED
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
/* set up cluster num for dot entry */
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
36108: e1cde2b8 strh lr, [sp, #40] ; 0x28 <== NOT EXECUTED
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
/* rewrite dot entry */
ret = fat_file_write(parent_loc->mt_entry, fat_fd, 0,
3610c: e58d9000 str r9, [sp] <== NOT EXECUTED
/* increment fat-file size by cluster size */
fat_fd->fat_file_size += fs_info->fat.vol.bpc;
/* set up cluster num for dot entry */
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOT_NODE_P(dot_dotdot)) =
36110: e1cdc2be strh ip, [sp, #46] ; 0x2e <== NOT EXECUTED
CT_LE_W((uint16_t )((fat_fd->cln) & 0x0000FFFF));
*MSDOS_DIR_FIRST_CLUSTER_HI(DOT_NODE_P(dot_dotdot)) =
CT_LE_W((uint16_t )(((fat_fd->cln) & 0xFFFF0000) >> 16));
/* rewrite dot entry */
ret = fat_file_write(parent_loc->mt_entry, fat_fd, 0,
36114: ebffbd76 bl 256f4 <fat_file_write> <== NOT EXECUTED
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE,
(uint8_t *)DOT_NODE_P(dot_dotdot));
if (ret < 0)
36118: e3500000 cmp r0, #0 <== NOT EXECUTED
3611c: ba00000c blt 36154 <msdos_creat_node+0x288> <== NOT EXECUTED
rc = -1;
goto error;
}
/* write first cluster num of a new directory to disk */
rc = msdos_set_first_cluster_num(parent_loc->mt_entry, fat_fd);
36120: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
36124: e59d10a4 ldr r1, [sp, #164] ; 0xa4 <== NOT EXECUTED
36128: eb000695 bl 37b84 <msdos_set_first_cluster_num> <== NOT EXECUTED
if (rc != RC_OK)
3612c: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36130: 0a000043 beq 36244 <msdos_creat_node+0x378> <== NOT EXECUTED
fat_file_close(parent_loc->mt_entry, fat_fd);
}
return RC_OK;
error:
fat_file_close(parent_loc->mt_entry, fat_fd);
36134: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
36138: e59d10a4 ldr r1, [sp, #164] ; 0xa4 <== NOT EXECUTED
3613c: ebffbe85 bl 25b58 <fat_file_close> <== NOT EXECUTED
err:
/* mark the used 32bytes structure on the disk as free */
msdos_set_first_char4file_name(parent_loc->mt_entry, &dir_pos, 0xE5);
36140: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
36144: e1a01004 mov r1, r4 <== NOT EXECUTED
36148: e3a020e5 mov r2, #229 ; 0xe5 <== NOT EXECUTED
3614c: eb0006bb bl 37c40 <msdos_set_first_char4file_name> <== NOT EXECUTED
return rc;
36150: eaffffa6 b 35ff0 <msdos_creat_node+0x124> <== NOT EXECUTED
/* write first cluster num of a new directory to disk */
rc = msdos_set_first_cluster_num(parent_loc->mt_entry, fat_fd);
if (rc != RC_OK)
goto error;
fat_file_close(parent_loc->mt_entry, fat_fd);
36154: e3e07000 mvn r7, #0 <== NOT EXECUTED
36158: eafffff5 b 36134 <msdos_creat_node+0x268> <== NOT EXECUTED
/*
* here we can ommit FAT32 condition because for all FAT types dirs
* right under root dir should contain 0 in dotdot entry but for
* FAT12/16 parent_fat_fd->cluster_num always contains such value
*/
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
3615c: e59e3024 ldr r3, [lr, #36] ; 0x24 <== NOT EXECUTED
36160: e3530000 cmp r3, #0 <== NOT EXECUTED
36164: 1affffcf bne 360a8 <msdos_creat_node+0x1dc> <== NOT EXECUTED
(fs_info->fat.vol.type & FAT_FAT32))
36168: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
3616c: e5d1200a ldrb r2, [r1, #10] <== NOT EXECUTED
36170: e3120004 tst r2, #4 <== NOT EXECUTED
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
*MSDOS_DIR_FIRST_CLUSTER_HI(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
36174: 11c933b4 strhne r3, [r9, #52] ; 0x34 <== NOT EXECUTED
* FAT12/16 parent_fat_fd->cluster_num always contains such value
*/
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
(fs_info->fat.vol.type & FAT_FAT32))
{
*MSDOS_DIR_FIRST_CLUSTER_LOW(DOTDOT_NODE_P(dot_dotdot)) = 0x0000;
36178: 11c933ba strhne r3, [r9, #58] ; 0x3a <== NOT EXECUTED
* here we can ommit FAT32 condition because for all FAT types dirs
* right under root dir should contain 0 in dotdot entry but for
* FAT12/16 parent_fat_fd->cluster_num always contains such value
*/
if ((FAT_FD_OF_ROOT_DIR(parent_fat_fd)) &&
(fs_info->fat.vol.type & FAT_FAT32))
3617c: 1affffce bne 360bc <msdos_creat_node+0x1f0> <== NOT EXECUTED
36180: eaffffc8 b 360a8 <msdos_creat_node+0x1dc> <== NOT EXECUTED
* node to the newly created
*/
/*
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(parent_loc->mt_entry,
36184: e59d30d4 ldr r3, [sp, #212] ; 0xd4 <== NOT EXECUTED
36188: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
3618c: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
36190: e3520000 cmp r2, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
36194: e5903034 ldr r3, [r0, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
36198: 1a000003 bne 361ac <msdos_creat_node+0x2e0> <== NOT EXECUTED
3619c: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
361a0: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
361a4: 1593c01c ldrne ip, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
361a8: 1a000003 bne 361bc <msdos_creat_node+0x2f0> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
361ac: e5931030 ldr r1, [r3, #48] ; 0x30 <== NOT EXECUTED
361b0: e5d33005 ldrb r3, [r3, #5] <== NOT EXECUTED
361b4: e2422002 sub r2, r2, #2 <== NOT EXECUTED
361b8: e081c312 add ip, r1, r2, lsl r3 <== NOT EXECUTED
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(parent_loc->mt_entry,
361bc: e59de010 ldr lr, [sp, #16] <== NOT EXECUTED
/*
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(parent_loc->mt_entry,
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
361c0: e59d10d4 ldr r1, [sp, #212] ; 0xd4 <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(parent_loc->mt_entry,
361c4: e1de20b0 ldrh r2, [lr] <== NOT EXECUTED
/*
* read the original directory entry
*/
sec = fat_cluster_num_to_sector_num(parent_loc->mt_entry,
link_fd->dir_pos.sname.cln);
sec += (link_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
361c8: e5913024 ldr r3, [r1, #36] ; 0x24 <== NOT EXECUTED
byte = (link_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
ret = _fat_block_read(parent_loc->mt_entry,
361cc: e5de1002 ldrb r1, [lr, #2] <== NOT EXECUTED
361d0: e2422001 sub r2, r2, #1 <== NOT EXECUTED
361d4: e08c1133 add r1, ip, r3, lsr r1 <== NOT EXECUTED
361d8: e0022003 and r2, r2, r3 <== NOT EXECUTED
361dc: e28dc054 add ip, sp, #84 ; 0x54 <== NOT EXECUTED
361e0: e3a03020 mov r3, #32 <== NOT EXECUTED
361e4: e58dc000 str ip, [sp] <== NOT EXECUTED
361e8: ebffc116 bl 26648 <_fat_block_read> <== NOT EXECUTED
sec, byte, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE,
link_node);
if (ret < 0) {
361ec: e3500000 cmp r0, #0 <== NOT EXECUTED
361f0: baffff81 blt 35ffc <msdos_creat_node+0x130> <== NOT EXECUTED
return -1;
}
/*
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
361f4: e5dd305f ldrb r3, [sp, #95] ; 0x5f <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
361f8: e5dd2061 ldrb r2, [sp, #97] ; 0x61 <== NOT EXECUTED
return -1;
}
/*
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
361fc: e5cd307f strb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
36200: e5cd2081 strb r2, [sp, #129] ; 0x81 <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
/*
* copy/set "file size", "first cluster"
*/
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
36204: e59d2070 ldr r2, [sp, #112] ; 0x70 <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
*MSDOS_DIR_FIRST_CLUSTER_HI(link_node);
/*
* set "archive bit" due to changes
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
36208: e5dd307f ldrb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
/*
* copy/set "file size", "first cluster"
*/
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
3620c: e585201c str r2, [r5, #28] <== NOT EXECUTED
/*
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
36210: e1dd26b2 ldrh r2, [sp, #98] ; 0x62 <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
*MSDOS_DIR_FIRST_CLUSTER_HI(link_node);
/*
* set "archive bit" due to changes
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
36214: e3833020 orr r3, r3, #32 <== NOT EXECUTED
36218: e5cd307f strb r3, [sp, #127] ; 0x7f <== NOT EXECUTED
/*
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
3621c: e1cd28b2 strh r2, [sp, #130] ; 0x82 <== NOT EXECUTED
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
36220: e1dd36b4 ldrh r3, [sp, #100] ; 0x64 <== NOT EXECUTED
/*
* copy/set "file size", "first cluster"
*/
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
36224: e1dde6be ldrh lr, [sp, #110] ; 0x6e <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(link_node);
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
36228: e1dd16b8 ldrh r1, [sp, #104] ; 0x68 <== NOT EXECUTED
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
/*
* set "last access" date to today
*/
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
3622c: e1dd2ab8 ldrh r2, [sp, #168] ; 0xa8 <== NOT EXECUTED
* copy various attributes
*/
*MSDOS_DIR_ATTR(short_node) =*MSDOS_DIR_ATTR(link_node);
*MSDOS_DIR_CRT_TIME_TENTH(short_node)=*MSDOS_DIR_CRT_TIME_TENTH(link_node);
*MSDOS_DIR_CRT_TIME(short_node) =*MSDOS_DIR_CRT_TIME(link_node);
*MSDOS_DIR_CRT_DATE(short_node) =*MSDOS_DIR_CRT_DATE(link_node);
36230: e1cd38b4 strh r3, [sp, #132] ; 0x84 <== NOT EXECUTED
/*
* copy/set "file size", "first cluster"
*/
*MSDOS_DIR_FILE_SIZE(short_node) =*MSDOS_DIR_FILE_SIZE(link_node);
*MSDOS_DIR_FIRST_CLUSTER_LOW(short_node) =
36234: e1cde8be strh lr, [sp, #142] ; 0x8e <== NOT EXECUTED
*MSDOS_DIR_FIRST_CLUSTER_LOW(link_node);
*MSDOS_DIR_FIRST_CLUSTER_HI(short_node) =
36238: e1cd18b8 strh r1, [sp, #136] ; 0x88 <== NOT EXECUTED
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
/*
* set "last access" date to today
*/
*MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
3623c: e1cd28b6 strh r2, [sp, #134] ; 0x86 <== NOT EXECUTED
36240: eaffff5e b 35fc0 <msdos_creat_node+0xf4> <== NOT EXECUTED
/* write first cluster num of a new directory to disk */
rc = msdos_set_first_cluster_num(parent_loc->mt_entry, fat_fd);
if (rc != RC_OK)
goto error;
fat_file_close(parent_loc->mt_entry, fat_fd);
36244: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
36248: e59d10a4 ldr r1, [sp, #164] ; 0xa4 <== NOT EXECUTED
3624c: ebffbe41 bl 25b58 <fat_file_close> <== NOT EXECUTED
36250: eaffff66 b 35ff0 <msdos_creat_node+0x124> <== NOT EXECUTED
0004160c <msdos_date_dos2unix>:
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
/*
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
4160c: e59f310c ldr r3, [pc, #268] ; 41720 <msdos_date_dos2unix+0x114><== NOT EXECUTED
41610: e1d320bc ldrh r2, [r3, #12] <== NOT EXECUTED
41614: e1520000 cmp r2, r0 <== NOT EXECUTED
* called from the stat(), and fstat() system calls and so probably need
* not be too efficient.
*/
unsigned int
msdos_date_dos2unix(unsigned int dd, unsigned int dt)
{
41618: e92d00f0 push {r4, r5, r6, r7} <== NOT EXECUTED
+ ((dt & MSDOS_DT_HOURS_MASK) >> MSDOS_DT_HOURS_SHIFT) * 3600;
/*
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
4161c: 05932010 ldreq r2, [r3, #16] <== NOT EXECUTED
41620: 0a00002e beq 416e0 <msdos_date_dos2unix+0xd4> <== NOT EXECUTED
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
41624: e2005cfe and r5, r0, #65024 ; 0xfe00 <== NOT EXECUTED
for (y = 0; y < year; y++)
41628: e1b054a5 lsrs r5, r5, #9 <== NOT EXECUTED
/*
* If the year, month, and day from the last conversion are the
* same then use the saved value.
*/
if (lastdosdate != dd) {
lastdosdate = dd;
4162c: e1c300bc strh r0, [r3, #12] <== NOT EXECUTED
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
41630: 0a000037 beq 41714 <msdos_date_dos2unix+0x108> <== NOT EXECUTED
41634: e3a04f5b mov r4, #364 ; 0x16c <== NOT EXECUTED
41638: e2844002 add r4, r4, #2 <== NOT EXECUTED
4163c: e3a0c000 mov ip, #0 <== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
41640: e3a06f5b mov r6, #364 ; 0x16c <== NOT EXECUTED
41644: e2866001 add r6, r6, #1 <== NOT EXECUTED
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
41648: e1a0200c mov r2, ip <== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
4164c: e1a07004 mov r7, r4 <== NOT EXECUTED
41650: ea000002 b 41660 <msdos_date_dos2unix+0x54> <== NOT EXECUTED
41654: e31c0003 tst ip, #3 <== NOT EXECUTED
41658: 11a04006 movne r4, r6 <== NOT EXECUTED
4165c: 01a04007 moveq r4, r7 <== NOT EXECUTED
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
41660: e28cc001 add ip, ip, #1 <== NOT EXECUTED
41664: e155000c cmp r5, ip <== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
41668: e0822004 add r2, r2, r4 <== NOT EXECUTED
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
4166c: 8afffff8 bhi 41654 <msdos_date_dos2unix+0x48> <== NOT EXECUTED
days += y & 0x03 ? 365 : 366;
months = year & 0x03 ? regyear : leapyear;
41670: e59fc0ac ldr ip, [pc, #172] ; 41724 <msdos_date_dos2unix+0x118><== NOT EXECUTED
41674: e3150003 tst r5, #3 <== NOT EXECUTED
41678: e24c5018 sub r5, ip, #24 <== NOT EXECUTED
4167c: 11a0500c movne r5, ip <== NOT EXECUTED
/*
* Prevent going from 0 to 0xffffffff in the following
* loop.
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
41680: e2006e1e and r6, r0, #480 ; 0x1e0 <== NOT EXECUTED
if (month == 0) {
41684: e1b062a6 lsrs r6, r6, #5 <== NOT EXECUTED
41688: 0a000008 beq 416b0 <msdos_date_dos2unix+0xa4> <== NOT EXECUTED
month = 1;
}
for (m = 0; m < month - 1; m++)
4168c: e2566001 subs r6, r6, #1 <== NOT EXECUTED
41690: 0a000006 beq 416b0 <msdos_date_dos2unix+0xa4> <== NOT EXECUTED
41694: e3a0c000 mov ip, #0 <== NOT EXECUTED
days += months[m];
41698: e1a0408c lsl r4, ip, #1 <== NOT EXECUTED
4169c: e19540b4 ldrh r4, [r5, r4] <== NOT EXECUTED
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
if (month == 0) {
month = 1;
}
for (m = 0; m < month - 1; m++)
416a0: e28cc001 add ip, ip, #1 <== NOT EXECUTED
416a4: e15c0006 cmp ip, r6 <== NOT EXECUTED
days += months[m];
416a8: e0822004 add r2, r2, r4 <== NOT EXECUTED
*/
month = (dd & MSDOS_DD_MONTH_MASK) >> MSDOS_DD_MONTH_SHIFT;
if (month == 0) {
month = 1;
}
for (m = 0; m < month - 1; m++)
416ac: 3afffff9 bcc 41698 <msdos_date_dos2unix+0x8c> <== NOT EXECUTED
days += months[m];
days += ((dd & MSDOS_DD_DAY_MASK) >> MSDOS_DD_DAY_SHIFT) - 1;
lastseconds = (days + DAYSTO1980) * SECONDSPERDAY;
416b0: e200001f and r0, r0, #31 <== NOT EXECUTED
416b4: e2400001 sub r0, r0, #1 <== NOT EXECUTED
416b8: e0802002 add r2, r0, r2 <== NOT EXECUTED
416bc: e0820102 add r0, r2, r2, lsl #2 <== NOT EXECUTED
416c0: e0820100 add r0, r2, r0, lsl #2 <== NOT EXECUTED
416c4: e0820200 add r0, r2, r0, lsl #4 <== NOT EXECUTED
416c8: e0822080 add r2, r2, r0, lsl #1 <== NOT EXECUTED
416cc: e1a02382 lsl r2, r2, #7 <== NOT EXECUTED
416d0: e282254b add r2, r2, #314572800 ; 0x12c00000 <== NOT EXECUTED
416d4: e2822aea add r2, r2, #958464 ; 0xea000 <== NOT EXECUTED
416d8: e2822c06 add r2, r2, #1536 ; 0x600 <== NOT EXECUTED
416dc: e5832010 str r2, [r3, #16] <== NOT EXECUTED
416e0: e2013b3e and r3, r1, #63488 ; 0xf800 <== NOT EXECUTED
416e4: e2010e7e and r0, r1, #2016 ; 0x7e0 <== NOT EXECUTED
416e8: e1a035a3 lsr r3, r3, #11 <== NOT EXECUTED
416ec: e0634183 rsb r4, r3, r3, lsl #3 <== NOT EXECUTED
416f0: e1a0c1a0 lsr ip, r0, #3 <== NOT EXECUTED
416f4: e0833284 add r3, r3, r4, lsl #5 <== NOT EXECUTED
416f8: e06c0080 rsb r0, ip, r0, lsl #1 <== NOT EXECUTED
416fc: e0800203 add r0, r0, r3, lsl #4 <== NOT EXECUTED
41700: e201101f and r1, r1, #31 <== NOT EXECUTED
41704: e0800001 add r0, r0, r1 <== NOT EXECUTED
}
return seconds + lastseconds;
}
41708: e0800002 add r0, r0, r2 <== NOT EXECUTED
4170c: e8bd00f0 pop {r4, r5, r6, r7} <== NOT EXECUTED
41710: e12fff1e bx lr <== NOT EXECUTED
*/
if (lastdosdate != dd) {
lastdosdate = dd;
days = 0;
year = (dd & MSDOS_DD_YEAR_MASK) >> MSDOS_DD_YEAR_SHIFT;
for (y = 0; y < year; y++)
41714: e1a02005 mov r2, r5 <== NOT EXECUTED
41718: e59f5008 ldr r5, [pc, #8] ; 41728 <msdos_date_dos2unix+0x11c><== NOT EXECUTED
4171c: eaffffd7 b 41680 <msdos_date_dos2unix+0x74> <== NOT EXECUTED
00041484 <msdos_date_unix2dos>:
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
41484: e59f316c ldr r3, [pc, #364] ; 415f8 <msdos_date_unix2dos+0x174><== NOT EXECUTED
41488: e593c000 ldr ip, [r3] <== NOT EXECUTED
4148c: e15c0000 cmp ip, r0 <== NOT EXECUTED
* file timestamps. The passed in unix time is assumed to be in GMT.
*/
void
msdos_date_unix2dos(unsigned int t, uint16_t *ddp,
uint16_t *dtp)
{
41490: e92d05f0 push {r4, r5, r6, r7, r8, sl} <== NOT EXECUTED
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
41494: 0a000054 beq 415ec <msdos_date_unix2dos+0x168> <== NOT EXECUTED
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
41498: e59fc15c ldr ip, [pc, #348] ; 415fc <msdos_date_unix2dos+0x178><== NOT EXECUTED
4149c: e59f415c ldr r4, [pc, #348] ; 41600 <msdos_date_unix2dos+0x17c><== NOT EXECUTED
414a0: e0856094 umull r6, r5, r4, r0 <== NOT EXECUTED
414a4: e084709c umull r7, r4, ip, r0 <== NOT EXECUTED
414a8: e1a042a4 lsr r4, r4, #5 <== NOT EXECUTED
414ac: e086849c umull r8, r6, ip, r4 <== NOT EXECUTED
414b0: e28cc422 add ip, ip, #570425344 ; 0x22000000 <== NOT EXECUTED
414b4: e28cc822 add ip, ip, #2228224 ; 0x220000 <== NOT EXECUTED
414b8: e28ccc22 add ip, ip, #8704 ; 0x2200 <== NOT EXECUTED
414bc: e1a055a5 lsr r5, r5, #11 <== NOT EXECUTED
414c0: e28cc022 add ip, ip, #34 ; 0x22 <== NOT EXECUTED
414c4: e087a59c umull sl, r7, ip, r5 <== NOT EXECUTED
/*
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
414c8: e59f8134 ldr r8, [pc, #308] ; 41604 <msdos_date_unix2dos+0x180><== NOT EXECUTED
414cc: e08ca098 umull sl, ip, r8, r0 <== NOT EXECUTED
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
414d0: e1a062a6 lsr r6, r6, #5 <== NOT EXECUTED
414d4: e1a07227 lsr r7, r7, #4 <== NOT EXECUTED
414d8: e1a08306 lsl r8, r6, #6 <== NOT EXECUTED
414dc: e0877087 add r7, r7, r7, lsl #1 <== NOT EXECUTED
414e0: e0486106 sub r6, r8, r6, lsl #2 <== NOT EXECUTED
414e4: e0455187 sub r5, r5, r7, lsl #3 <== NOT EXECUTED
414e8: e1a08304 lsl r8, r4, #6 <== NOT EXECUTED
414ec: e0488104 sub r8, r8, r4, lsl #2 <== NOT EXECUTED
414f0: e1a05585 lsl r5, r5, #11 <== NOT EXECUTED
414f4: e0664004 rsb r4, r6, r4 <== NOT EXECUTED
414f8: e0854284 add r4, r5, r4, lsl #5 <== NOT EXECUTED
414fc: e0686000 rsb r6, r8, r0 <== NOT EXECUTED
41500: e08460a6 add r6, r4, r6, lsr #1 <== NOT EXECUTED
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
41504: e5935008 ldr r5, [r3, #8] <== NOT EXECUTED
/*
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
41508: e1a0c82c lsr ip, ip, #16 <== NOT EXECUTED
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
4150c: e1a06806 lsl r6, r6, #16 <== NOT EXECUTED
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
41510: e15c0005 cmp ip, r5 <== NOT EXECUTED
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
41514: e1a06826 lsr r6, r6, #16 <== NOT EXECUTED
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
lasttime = t;
41518: e5830000 str r0, [r3] <== NOT EXECUTED
lastdtime = (((t % 60) >> 1) << MSDOS_DT_2SECONDS_SHIFT)
4151c: e1c360b4 strh r6, [r3, #4] <== NOT EXECUTED
* If the number of days since 1970 is the same as the last
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
41520: 01d3c0b6 ldrheq ip, [r3, #6] <== NOT EXECUTED
41524: 0a00002c beq 415dc <msdos_date_unix2dos+0x158> <== NOT EXECUTED
lastday = days;
for (year = 1970;; year++) {
inc = year & 0x03 ? 365 : 366;
41528: e3a07f5b mov r7, #364 ; 0x16c <== NOT EXECUTED
4152c: e1a05007 mov r5, r7 <== NOT EXECUTED
* time we did the computation then skip all this leap year
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
lastday = days;
41530: e3a00e7b mov r0, #1968 ; 0x7b0 <== NOT EXECUTED
41534: e583c008 str ip, [r3, #8] <== NOT EXECUTED
41538: e2800002 add r0, r0, #2 <== NOT EXECUTED
for (year = 1970;; year++) {
inc = year & 0x03 ? 365 : 366;
4153c: e2877001 add r7, r7, #1 <== NOT EXECUTED
41540: e2855002 add r5, r5, #2 <== NOT EXECUTED
41544: ea000001 b 41550 <msdos_date_unix2dos+0xcc> <== NOT EXECUTED
if (days < inc)
break;
days -= inc;
41548: e064c00c rsb ip, r4, ip <== NOT EXECUTED
* and month stuff.
*/
days = t / (SECONDSPERDAY);
if (days != lastday) {
lastday = days;
for (year = 1970;; year++) {
4154c: e2800001 add r0, r0, #1 <== NOT EXECUTED
inc = year & 0x03 ? 365 : 366;
41550: e2108003 ands r8, r0, #3 <== NOT EXECUTED
41554: 11a04007 movne r4, r7 <== NOT EXECUTED
41558: 01a04005 moveq r4, r5 <== NOT EXECUTED
if (days < inc)
4155c: e15c0004 cmp ip, r4 <== NOT EXECUTED
41560: 2afffff8 bcs 41548 <msdos_date_unix2dos+0xc4> <== NOT EXECUTED
break;
days -= inc;
}
months = year & 0x03 ? regyear : leapyear;
41564: e59f409c ldr r4, [pc, #156] ; 41608 <msdos_date_unix2dos+0x184><== NOT EXECUTED
41568: e3580000 cmp r8, #0 <== NOT EXECUTED
4156c: e2445018 sub r5, r4, #24 <== NOT EXECUTED
41570: 11a08004 movne r8, r4 <== NOT EXECUTED
41574: 01a08005 moveq r8, r5 <== NOT EXECUTED
41578: e3a04000 mov r4, #0 <== NOT EXECUTED
for (month = 0; month < 12; month++) {
if (days < months[month])
4157c: e1a05084 lsl r5, r4, #1 <== NOT EXECUTED
41580: e19850b5 ldrh r5, [r8, r5] <== NOT EXECUTED
41584: e155000c cmp r5, ip <== NOT EXECUTED
41588: 8a000003 bhi 4159c <msdos_date_unix2dos+0x118> <== NOT EXECUTED
if (days < inc)
break;
days -= inc;
}
months = year & 0x03 ? regyear : leapyear;
for (month = 0; month < 12; month++) {
4158c: e2844001 add r4, r4, #1 <== NOT EXECUTED
41590: e354000c cmp r4, #12 <== NOT EXECUTED
if (days < months[month])
break;
days -= months[month];
41594: e065c00c rsb ip, r5, ip <== NOT EXECUTED
if (days < inc)
break;
days -= inc;
}
months = year & 0x03 ? regyear : leapyear;
for (month = 0; month < 12; month++) {
41598: 1afffff7 bne 4157c <msdos_date_unix2dos+0xf8> <== NOT EXECUTED
if (days < months[month])
break;
days -= months[month];
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
4159c: e08cc284 add ip, ip, r4, lsl #5 <== NOT EXECUTED
415a0: e28cc021 add ip, ip, #33 ; 0x21 <== NOT EXECUTED
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
415a4: e3a05e7b mov r5, #1968 ; 0x7b0 <== NOT EXECUTED
for (month = 0; month < 12; month++) {
if (days < months[month])
break;
days -= months[month];
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
415a8: e1a0c80c lsl ip, ip, #16 <== NOT EXECUTED
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
415ac: e285500c add r5, r5, #12 <== NOT EXECUTED
for (month = 0; month < 12; month++) {
if (days < months[month])
break;
days -= months[month];
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
415b0: e1a0c82c lsr ip, ip, #16 <== NOT EXECUTED
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
415b4: e1500005 cmp r0, r5 <== NOT EXECUTED
for (month = 0; month < 12; month++) {
if (days < months[month])
break;
days -= months[month];
}
lastddate = ((days + 1) << MSDOS_DD_DAY_SHIFT)
415b8: e1c3c0b6 strh ip, [r3, #6] <== NOT EXECUTED
* Remember dos's idea of time is relative to 1980.
* unix's is relative to 1970. If somehow we get a
* time before 1980 then don't give totally crazy
* results.
*/
if (year > 1980)
415bc: 9a000006 bls 415dc <msdos_date_unix2dos+0x158> <== NOT EXECUTED
lastddate += (year - 1980) <<
415c0: e2400e7b sub r0, r0, #1968 ; 0x7b0 <== NOT EXECUTED
415c4: e240000c sub r0, r0, #12 <== NOT EXECUTED
415c8: e08cc480 add ip, ip, r0, lsl #9 <== NOT EXECUTED
415cc: e1a0c80c lsl ip, ip, #16 <== NOT EXECUTED
415d0: e59f3020 ldr r3, [pc, #32] ; 415f8 <msdos_date_unix2dos+0x174><== NOT EXECUTED
415d4: e1a0c82c lsr ip, ip, #16 <== NOT EXECUTED
415d8: e1c3c0b6 strh ip, [r3, #6] <== NOT EXECUTED
MSDOS_DD_YEAR_SHIFT;
}
}
*dtp = lastdtime;
415dc: e1c260b0 strh r6, [r2] <== NOT EXECUTED
*ddp = lastddate;
415e0: e1c1c0b0 strh ip, [r1] <== NOT EXECUTED
}
415e4: e8bd05f0 pop {r4, r5, r6, r7, r8, sl} <== NOT EXECUTED
415e8: e12fff1e bx lr <== NOT EXECUTED
/*
* If the time from the last conversion is the same as now, then
* skip the computations and use the saved result.
*/
if (lasttime != t) {
415ec: e1d3c0b6 ldrh ip, [r3, #6] <== NOT EXECUTED
415f0: e1d360b4 ldrh r6, [r3, #4] <== NOT EXECUTED
415f4: eafffff8 b 415dc <msdos_date_unix2dos+0x158> <== NOT EXECUTED
0004190c <msdos_dir_chmod>:
int
msdos_dir_chmod(rtems_filesystem_location_info_t *pathloc,
mode_t mode)
{
return RC_OK;
}
4190c: e3a00000 mov r0, #0 <== NOT EXECUTED
41910: e12fff1e bx lr <== NOT EXECUTED
00042164 <msdos_dir_close>:
int
msdos_dir_close(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
42164: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RC_OK, if directory closed successfully, or -1 if error occured (errno
* set apropriately.
*/
int
msdos_dir_close(rtems_libio_t *iop)
{
42168: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
4216c: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
42170: e3a01000 mov r1, #0 <== NOT EXECUTED
* RC_OK, if directory closed successfully, or -1 if error occured (errno
* set apropriately.
*/
int
msdos_dir_close(rtems_libio_t *iop)
{
42174: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
42178: e1a02001 mov r2, r1 <== NOT EXECUTED
4217c: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
msdos_dir_close(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
42180: e5946038 ldr r6, [r4, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
42184: ebff28ce bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
42188: e3500000 cmp r0, #0 <== NOT EXECUTED
4218c: 1a000007 bne 421b0 <msdos_dir_close+0x4c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
rc = fat_file_close(iop->pathinfo.mt_entry, fat_fd);
42190: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
42194: e1a01006 mov r1, r6 <== NOT EXECUTED
42198: ebff8e6e bl 25b58 <fat_file_close> <== NOT EXECUTED
if (rc != RC_OK)
4219c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
rtems_semaphore_release(fs_info->vol_sema);
421a0: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
421a4: ebff290e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
}
421a8: e1a00004 mov r0, r4 <== NOT EXECUTED
421ac: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one( EIO );
421b0: eb00038e bl 42ff0 <__errno> <== NOT EXECUTED
421b4: e3a03005 mov r3, #5 <== NOT EXECUTED
421b8: e5803000 str r3, [r0] <== NOT EXECUTED
421bc: e3e04000 mvn r4, #0 <== NOT EXECUTED
421c0: eafffff8 b 421a8 <msdos_dir_close+0x44> <== NOT EXECUTED
000379b4 <msdos_dir_is_empty>:
msdos_dir_is_empty(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
bool *ret_val
)
{
379b4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
379b8: e5909034 ldr r9, [r0, #52] ; 0x34 <== NOT EXECUTED
msdos_dir_is_empty(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
bool *ret_val
)
{
379bc: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t j = 0, i = 0;
/* dir is not empty */
*ret_val = false;
379c0: e3a03000 mov r3, #0 <== NOT EXECUTED
msdos_dir_is_empty(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
bool *ret_val
)
{
379c4: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
379c8: e58d100c str r1, [sp, #12] <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t j = 0, i = 0;
/* dir is not empty */
*ret_val = false;
379cc: e5c23000 strb r3, [r2] <== NOT EXECUTED
379d0: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
379d4: e1d940b0 ldrh r4, [r9] <== NOT EXECUTED
379d8: e5995098 ldr r5, [r9, #152] ; 0x98 <== NOT EXECUTED
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
379dc: e59f6110 ldr r6, [pc, #272] ; 37af4 <msdos_dir_is_empty+0x140><== NOT EXECUTED
msdos_dir_is_empty(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd,
bool *ret_val
)
{
379e0: e1a0b000 mov fp, r0 <== NOT EXECUTED
uint32_t j = 0, i = 0;
/* dir is not empty */
*ret_val = false;
while ((ret = fat_file_read(mt_entry, fat_fd, j * fs_info->fat.vol.bps,
379e4: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
379e8: e1a03004 mov r3, r4 <== NOT EXECUTED
379ec: e1a0000b mov r0, fp <== NOT EXECUTED
379f0: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
379f4: e0020294 mul r2, r4, r2 <== NOT EXECUTED
379f8: e58d5000 str r5, [sp] <== NOT EXECUTED
379fc: ebffb7d2 bl 2594c <fat_file_read> <== NOT EXECUTED
37a00: e3500000 cmp r0, #0 <== NOT EXECUTED
37a04: 0a00002e beq 37ac4 <msdos_dir_is_empty+0x110> <== NOT EXECUTED
fs_info->fat.vol.bps,
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
37a08: e350001f cmp r0, #31 <== NOT EXECUTED
37a0c: da000030 ble 37ad4 <msdos_dir_is_empty+0x120> <== NOT EXECUTED
return -1;
assert(ret == fs_info->fat.vol.bps);
37a10: e1d940b0 ldrh r4, [r9] <== NOT EXECUTED
37a14: e1500004 cmp r0, r4 <== NOT EXECUTED
37a18: 1a00002f bne 37adc <msdos_dir_is_empty+0x128> <== NOT EXECUTED
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
37a1c: e3540000 cmp r4, #0 <== NOT EXECUTED
37a20: 0a000025 beq 37abc <msdos_dir_is_empty+0x108> <== NOT EXECUTED
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
return -1;
assert(ret == fs_info->fat.vol.bps);
37a24: e5995098 ldr r5, [r9, #152] ; 0x98 <== NOT EXECUTED
37a28: e3a07000 mov r7, #0 <== NOT EXECUTED
37a2c: e1a08005 mov r8, r5 <== NOT EXECUTED
* then consider it as empty.
*
* Just ignore long file name entries. They must have a short entry to
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
37a30: e7d5a007 ldrb sl, [r5, r7] <== NOT EXECUTED
37a34: e35a00e5 cmp sl, #229 ; 0xe5 <== NOT EXECUTED
37a38: 0a000017 beq 37a9c <msdos_dir_is_empty+0xe8> <== NOT EXECUTED
37a3c: e5d8300b ldrb r3, [r8, #11] <== NOT EXECUTED
37a40: e203303f and r3, r3, #63 ; 0x3f <== NOT EXECUTED
37a44: e353000f cmp r3, #15 <== NOT EXECUTED
37a48: 0a000013 beq 37a9c <msdos_dir_is_empty+0xe8> <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
37a4c: e1a00008 mov r0, r8 <== NOT EXECUTED
37a50: e5961000 ldr r1, [r6] <== NOT EXECUTED
37a54: e3a0200b mov r2, #11 <== NOT EXECUTED
37a58: eb0048ab bl 49d0c <strncmp> <== NOT EXECUTED
* then consider it as empty.
*
* Just ignore long file name entries. They must have a short entry to
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
37a5c: e3500000 cmp r0, #0 <== NOT EXECUTED
37a60: 0a00000d beq 37a9c <msdos_dir_is_empty+0xe8> <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_EMPTY) ||
((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
MSDOS_ATTR_LFN) ||
(strncmp(MSDOS_DIR_NAME((entry)), MSDOS_DOT_NAME,
MSDOS_SHORT_NAME_LEN) == 0) ||
(strncmp(MSDOS_DIR_NAME((entry)),
37a64: e1a00008 mov r0, r8 <== NOT EXECUTED
37a68: e5961004 ldr r1, [r6, #4] <== NOT EXECUTED
37a6c: e3a0200b mov r2, #11 <== NOT EXECUTED
37a70: eb0048a5 bl 49d0c <strncmp> <== NOT EXECUTED
* then consider it as empty.
*
* Just ignore long file name entries. They must have a short entry to
* be valid.
*/
if (((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
37a74: e3500000 cmp r0, #0 <== NOT EXECUTED
37a78: 0a000007 beq 37a9c <msdos_dir_is_empty+0xe8> <== NOT EXECUTED
continue;
/*
* Nothing more to look at.
*/
if ((*MSDOS_DIR_NAME(entry)) ==
37a7c: e35a0000 cmp sl, #0 <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
*ret_val = true;
37a80: 059d2008 ldreq r2, [sp, #8] <== NOT EXECUTED
37a84: 03a03001 moveq r3, #1 <== NOT EXECUTED
37a88: 05c23000 strbeq r3, [r2] <== NOT EXECUTED
continue;
/*
* Nothing more to look at.
*/
if ((*MSDOS_DIR_NAME(entry)) ==
37a8c: 13a00000 movne r0, #0 <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
*ret_val = true;
37a90: 01a0000a moveq r0, sl <== NOT EXECUTED
}
j++;
}
*ret_val = true;
return RC_OK;
}
37a94: e28dd010 add sp, sp, #16 <== NOT EXECUTED
37a98: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
assert(ret == fs_info->fat.vol.bps);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
i < fs_info->fat.vol.bps;
i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
37a9c: e2877020 add r7, r7, #32 <== NOT EXECUTED
return -1;
assert(ret == fs_info->fat.vol.bps);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
37aa0: e1570004 cmp r7, r4 <== NOT EXECUTED
i < fs_info->fat.vol.bps;
i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
37aa4: e2888020 add r8, r8, #32 <== NOT EXECUTED
return -1;
assert(ret == fs_info->fat.vol.bps);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (i = 0;
37aa8: 3affffe0 bcc 37a30 <msdos_dir_is_empty+0x7c> <== NOT EXECUTED
/*
* Short file name entries mean not empty.
*/
return RC_OK;
}
j++;
37aac: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
37ab0: e2833001 add r3, r3, #1 <== NOT EXECUTED
37ab4: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
37ab8: eaffffc9 b 379e4 <msdos_dir_is_empty+0x30> <== NOT EXECUTED
*/
if ((*MSDOS_DIR_NAME(entry)) ==
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
*ret_val = true;
return RC_OK;
37abc: e5995098 ldr r5, [r9, #152] ; 0x98 <== NOT EXECUTED
37ac0: eafffff9 b 37aac <msdos_dir_is_empty+0xf8> <== NOT EXECUTED
*/
return RC_OK;
}
j++;
}
*ret_val = true;
37ac4: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
37ac8: e3a03001 mov r3, #1 <== NOT EXECUTED
37acc: e5c23000 strb r3, [r2] <== NOT EXECUTED
return RC_OK;
37ad0: eaffffef b 37a94 <msdos_dir_is_empty+0xe0> <== NOT EXECUTED
while ((ret = fat_file_read(mt_entry, fat_fd, j * fs_info->fat.vol.bps,
fs_info->fat.vol.bps,
fs_info->cl_buf)) != FAT_EOF)
{
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
37ad4: e3e00000 mvn r0, #0 <== NOT EXECUTED
37ad8: eaffffed b 37a94 <msdos_dir_is_empty+0xe0> <== NOT EXECUTED
return -1;
assert(ret == fs_info->fat.vol.bps);
37adc: e3a01fed mov r1, #948 ; 0x3b4 <== NOT EXECUTED
37ae0: e2811001 add r1, r1, #1 <== NOT EXECUTED
37ae4: e59f000c ldr r0, [pc, #12] ; 37af8 <msdos_dir_is_empty+0x144><== NOT EXECUTED
37ae8: e59f200c ldr r2, [pc, #12] ; 37afc <msdos_dir_is_empty+0x148><== NOT EXECUTED
37aec: e59f300c ldr r3, [pc, #12] ; 37b00 <msdos_dir_is_empty+0x14c><== NOT EXECUTED
37af0: ebffc38b bl 28924 <__assert_func> <== NOT EXECUTED
00041914 <msdos_dir_lseek>:
* set apropriately).
*/
rtems_off64_t
msdos_dir_lseek(rtems_libio_t *iop, rtems_off64_t offset, int whence)
{
switch (whence)
41914: e3530001 cmp r3, #1 <== NOT EXECUTED
* RC_OK on success, or -1 if error occured (errno
* set apropriately).
*/
rtems_off64_t
msdos_dir_lseek(rtems_libio_t *iop, rtems_off64_t offset, int whence)
{
41918: e92d4010 push {r4, lr} <== NOT EXECUTED
switch (whence)
4191c: 93a03000 movls r3, #0 <== NOT EXECUTED
41920: 93a04000 movls r4, #0 <== NOT EXECUTED
41924: 9a000004 bls 4193c <msdos_dir_lseek+0x28> <== NOT EXECUTED
* Movement past the end of the directory via lseek is not a
* permitted operation
*/
case SEEK_END:
default:
rtems_set_errno_and_return_minus_one( EINVAL );
41928: eb0005b0 bl 42ff0 <__errno> <== NOT EXECUTED
4192c: e3a03016 mov r3, #22 <== NOT EXECUTED
41930: e5803000 str r3, [r0] <== NOT EXECUTED
41934: e3e04000 mvn r4, #0 <== NOT EXECUTED
41938: e3e03000 mvn r3, #0 <== NOT EXECUTED
break;
}
return RC_OK;
}
4193c: e1a01004 mov r1, r4 <== NOT EXECUTED
41940: e1a00003 mov r0, r3 <== NOT EXECUTED
41944: e8bd8010 pop {r4, pc} <== NOT EXECUTED
000421c4 <msdos_dir_open>:
msdos_dir_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
421c4: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* set apropriately)
*/
int
msdos_dir_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
421c8: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
421cc: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
421d0: e3a01000 mov r1, #0 <== NOT EXECUTED
* set apropriately)
*/
int
msdos_dir_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
421d4: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
421d8: e1a02001 mov r2, r1 <== NOT EXECUTED
421dc: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
uint32_t mode)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
421e0: e5946038 ldr r6, [r4, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
421e4: ebff28b6 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
421e8: e3500000 cmp r0, #0 <== NOT EXECUTED
421ec: 1a00000a bne 4221c <msdos_dir_open+0x58> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
rc = fat_file_reopen(fat_fd);
421f0: e1a00006 mov r0, r6 <== NOT EXECUTED
421f4: ebff8b87 bl 25018 <fat_file_reopen> <== NOT EXECUTED
if (rc != RC_OK)
421f8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
iop->offset = 0;
421fc: 03a02000 moveq r2, #0 <== NOT EXECUTED
42200: 03a03000 moveq r3, #0 <== NOT EXECUTED
42204: 0584200c streq r2, [r4, #12] <== NOT EXECUTED
42208: 05843010 streq r3, [r4, #16] <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
4220c: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
42210: ebff28f3 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
}
42214: e1a00006 mov r0, r6 <== NOT EXECUTED
42218: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one( EIO );
4221c: eb000373 bl 42ff0 <__errno> <== NOT EXECUTED
42220: e3a03005 mov r3, #5 <== NOT EXECUTED
42224: e5803000 str r3, [r0] <== NOT EXECUTED
42228: e3e06000 mvn r6, #0 <== NOT EXECUTED
4222c: eafffff8 b 42214 <msdos_dir_open+0x50> <== NOT EXECUTED
00041b48 <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)
{
41b48: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
41b4c: e5903038 ldr r3, [r0, #56] ; 0x38 <== NOT EXECUTED
* 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)
{
41b50: e24dde16 sub sp, sp, #352 ; 0x160 <== NOT EXECUTED
41b54: e1a0a000 mov sl, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
41b58: e58d3024 str r3, [sp, #36] ; 0x24 <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
41b5c: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
ssize_t
msdos_dir_read(rtems_libio_t *iop, void *buffer, size_t count)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
41b60: e59a3028 ldr r3, [sl, #40] ; 0x28 <== NOT EXECUTED
41b64: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
41b68: e3500001 cmp r0, #1 <== NOT EXECUTED
* 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)
{
41b6c: e58d102c str r1, [sp, #44] ; 0x2c <== NOT EXECUTED
41b70: e1a04002 mov r4, r2 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
41b74: e58d300c str r3, [sp, #12] <== NOT EXECUTED
/*
* 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);
41b78: e28a600c add r6, sl, #12 <== NOT EXECUTED
41b7c: e8960060 ldm r6, {r5, r6} <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
41b80: 0a00011d beq 41ffc <msdos_dir_read+0x4b4> <== NOT EXECUTED
41b84: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
41b88: e1d330b6 ldrh r3, [r3, #6] <== NOT EXECUTED
41b8c: e58d3030 str r3, [sp, #48] ; 0x30 <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
fs_info->fat.vol.bpc;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41b90: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
uint32_t start = 0;
ssize_t ret = 0;
uint32_t cmpltd = 0;
uint32_t j = 0, i = 0;
uint32_t bts2rd = 0;
uint32_t cur_cln = 0;
41b94: e3a03000 mov r3, #0 <== NOT EXECUTED
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
fs_info->fat.vol.bpc;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41b98: e59c0094 ldr r0, [ip, #148] ; 0x94 <== NOT EXECUTED
41b9c: e1a01003 mov r1, r3 <== NOT EXECUTED
41ba0: e1a02003 mov r2, r3 <== NOT EXECUTED
uint32_t start = 0;
ssize_t ret = 0;
uint32_t cmpltd = 0;
uint32_t j = 0, i = 0;
uint32_t bts2rd = 0;
uint32_t cur_cln = 0;
41ba4: e58d3158 str r3, [sp, #344] ; 0x158 <== NOT EXECUTED
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
fat_file_fd_t *tmp_fat_fd = NULL;
41ba8: e58d315c str r3, [sp, #348] ; 0x15c <== NOT EXECUTED
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
fat_fd->fat_file_size :
fs_info->fat.vol.bpc;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41bac: ebff2a44 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
41bb0: e250c000 subs ip, r0, #0 <== NOT EXECUTED
41bb4: 1a000161 bne 42140 <msdos_dir_read+0x5f8> <== NOT EXECUTED
* 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);
41bb8: e59f259c ldr r2, [pc, #1436] ; 4215c <msdos_dir_read+0x614><== NOT EXECUTED
41bbc: e0831492 umull r1, r3, r2, r4 <== NOT EXECUTED
41bc0: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
41bc4: e0833203 add r3, r3, r3, lsl #4 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
while (count > 0)
41bc8: e1b03203 lsls r3, r3, #4 <== NOT EXECUTED
41bcc: e58d3018 str r3, [sp, #24] <== NOT EXECUTED
41bd0: 0a00015f beq 42154 <msdos_dir_read+0x60c> <== NOT EXECUTED
/*
* 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);
41bd4: e1a01006 mov r1, r6 <== NOT EXECUTED
41bd8: e3a02e11 mov r2, #272 ; 0x110 <== NOT EXECUTED
41bdc: e3a03000 mov r3, #0 <== NOT EXECUTED
41be0: e1a00005 mov r0, r5 <== NOT EXECUTED
41be4: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
41be8: eb00665e bl 5b568 <__divdi3> <== NOT EXECUTED
41bec: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
41bf0: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
41bf4: e28d1038 add r1, sp, #56 ; 0x38 <== NOT EXECUTED
41bf8: e2811010 add r1, r1, #16 <== NOT EXECUTED
41bfc: e592c098 ldr ip, [r2, #152] ; 0x98 <== NOT EXECUTED
41c00: e59f8558 ldr r8, [pc, #1368] ; 42160 <msdos_dir_read+0x618><== NOT EXECUTED
/*
* 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);
41c04: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
41c08: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
41c0c: e58d1034 str r1, [sp, #52] ; 0x34 <== NOT EXECUTED
/*
* 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);
41c10: e1a06000 mov r6, r0 <== NOT EXECUTED
41c14: e1a0b003 mov fp, r3 <== NOT EXECUTED
41c18: e3e09000 mvn r9, #0 <== NOT EXECUTED
* fat-file is already opened by open call, so read it
* Always read directory fat-file from the beggining because of MSDOS
* directories feature :( - we should count elements currently
* present in the directory because there may be holes :)
*/
ret = fat_file_read(iop->pathinfo.mt_entry, fat_fd, (j * bts2rd),
41c1c: e59a0028 ldr r0, [sl, #40] ; 0x28 <== NOT EXECUTED
41c20: e59d1024 ldr r1, [sp, #36] ; 0x24 <== NOT EXECUTED
41c24: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
41c28: e59d3030 ldr r3, [sp, #48] ; 0x30 <== NOT EXECUTED
41c2c: e58dc000 str ip, [sp] <== NOT EXECUTED
41c30: ebff8f45 bl 2594c <fat_file_read> <== NOT EXECUTED
bts2rd, fs_info->cl_buf);
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
41c34: e350001f cmp r0, #31 <== NOT EXECUTED
* fat-file is already opened by open call, so read it
* Always read directory fat-file from the beggining because of MSDOS
* directories feature :( - we should count elements currently
* present in the directory because there may be holes :)
*/
ret = fat_file_read(iop->pathinfo.mt_entry, fat_fd, (j * bts2rd),
41c38: e1a07000 mov r7, r0 <== NOT EXECUTED
bts2rd, fs_info->cl_buf);
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
41c3c: da00013c ble 42134 <msdos_dir_read+0x5ec> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
41c40: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
41c44: e592c098 ldr ip, [r2, #152] ; 0x98 <== NOT EXECUTED
/*
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
41c48: e5dc3000 ldrb r3, [ip] <== NOT EXECUTED
41c4c: e3530000 cmp r3, #0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
41c50: e1a0500c mov r5, ip <== NOT EXECUTED
/*
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
41c54: 0a0000c0 beq 41f5c <msdos_dir_read+0x414> <== NOT EXECUTED
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
41c58: e3a014b9 mov r1, #-1191182336 ; 0xb9000000 <== NOT EXECUTED
{
/*
* 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(
41c5c: e3e02f46 mvn r2, #280 ; 0x118 <== NOT EXECUTED
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
41c60: e1a01b41 asr r1, r1, #22 <== NOT EXECUTED
{
/*
* 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(
41c64: e2422001 sub r2, r2, #1 <== NOT EXECUTED
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
41c68: e58d101c str r1, [sp, #28] <== NOT EXECUTED
{
/*
* 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(
41c6c: e58d2028 str r2, [sp, #40] ; 0x28 <== NOT EXECUTED
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
rtems_semaphore_release(fs_info->vol_sema);
return cmpltd;
41c70: e3a04000 mov r4, #0 <== NOT EXECUTED
41c74: ea000009 b 41ca0 <msdos_dir_read+0x158> <== NOT EXECUTED
/* Is the directory entry empty */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* Is the directory entry empty a volume label */
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
41c78: e202203f and r2, r2, #63 ; 0x3f <== NOT EXECUTED
41c7c: e352000f cmp r2, #15 <== NOT EXECUTED
41c80: 0a00008a beq 41eb0 <msdos_dir_read+0x368> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
41c84: e2844020 add r4, r4, #32 <== NOT EXECUTED
41c88: e1540007 cmp r4, r7 <== NOT EXECUTED
41c8c: 2a000066 bcs 41e2c <msdos_dir_read+0x2e4> <== NOT EXECUTED
char* entry = (char*) fs_info->cl_buf + i;
/*
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
41c90: e7dc3004 ldrb r3, [ip, r4] <== NOT EXECUTED
41c94: e3530000 cmp r3, #0 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
41c98: e08c5004 add r5, ip, r4 <== NOT EXECUTED
/*
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
41c9c: 0a0000ae beq 41f5c <msdos_dir_read+0x414> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return cmpltd;
}
/* Is the directory entry empty */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) == MSDOS_THIS_DIR_ENTRY_EMPTY)
41ca0: e35300e5 cmp r3, #229 ; 0xe5 <== NOT EXECUTED
41ca4: 0afffff6 beq 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
continue;
/* Is the directory entry empty a volume label */
if (((*MSDOS_DIR_ATTR(entry)) & MSDOS_ATTR_VOLUME_ID) &&
41ca8: e5d5200b ldrb r2, [r5, #11] <== NOT EXECUTED
41cac: e3120008 tst r2, #8 <== NOT EXECUTED
41cb0: 1afffff0 bne 41c78 <msdos_dir_read+0x130> <== NOT EXECUTED
/*
* Check the attribute to see if the entry is for a long file
* name.
*/
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
41cb4: e202203f and r2, r2, #63 ; 0x3f <== NOT EXECUTED
41cb8: e352000f cmp r2, #15 <== NOT EXECUTED
41cbc: 0a00007b beq 41eb0 <msdos_dir_read+0x368> <== NOT EXECUTED
fat_dir_pos_t dir_pos;
/*
* Skip active entries until get the entry to start from.
*/
if (start)
41cc0: e3560000 cmp r6, #0 <== NOT EXECUTED
{
lfn_start = FAT_FILE_SHORT_NAME;
start--;
41cc4: 12466001 subne r6, r6, #1 <== NOT EXECUTED
41cc8: 13e09000 mvnne r9, #0 <== NOT EXECUTED
fat_dir_pos_t dir_pos;
/*
* Skip active entries until get the entry to start from.
*/
if (start)
41ccc: 1affffec bne 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
* unfortunately there is no method to extract ino except to
* open fat-file descriptor :( ... so, open it
*/
/* get number of cluster we are working with */
rc = fat_file_ioctl(iop->pathinfo.mt_entry, fat_fd, F_CLU_NUM,
41cd0: e59a0028 ldr r0, [sl, #40] ; 0x28 <== NOT EXECUTED
41cd4: e28dcf56 add ip, sp, #344 ; 0x158 <== NOT EXECUTED
41cd8: e59d1024 ldr r1, [sp, #36] ; 0x24 <== NOT EXECUTED
41cdc: e3a02001 mov r2, #1 <== NOT EXECUTED
41ce0: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
41ce4: e58dc000 str ip, [sp] <== NOT EXECUTED
41ce8: ebff8d8d bl 25324 <fat_file_ioctl> <== NOT EXECUTED
j * bts2rd, &cur_cln);
if (rc != RC_OK)
41cec: e3500000 cmp r0, #0 <== NOT EXECUTED
41cf0: 1a0000e2 bne 42080 <msdos_dir_read+0x538> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
fat_dir_pos_init(&dir_pos);
dir_pos.sname.cln = cur_cln;
41cf4: e59dc158 ldr ip, [sp, #344] ; 0x158 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
41cf8: e3e03000 mvn r3, #0 <== NOT EXECUTED
dir_pos.sname.ofs = i;
rc = fat_file_open(iop->pathinfo.mt_entry, &dir_pos, &tmp_fat_fd);
41cfc: e59a0028 ldr r0, [sl, #40] ; 0x28 <== NOT EXECUTED
41d00: e28d1f52 add r1, sp, #328 ; 0x148 <== NOT EXECUTED
41d04: e28d2f57 add r2, sp, #348 ; 0x15c <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
41d08: e58d3154 str r3, [sp, #340] ; 0x154 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
fat_dir_pos_init(&dir_pos);
dir_pos.sname.cln = cur_cln;
41d0c: e58dc148 str ip, [sp, #328] ; 0x148 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
41d10: e58d3150 str r3, [sp, #336] ; 0x150 <== NOT EXECUTED
dir_pos.sname.ofs = i;
41d14: e58d414c str r4, [sp, #332] ; 0x14c <== NOT EXECUTED
rc = fat_file_open(iop->pathinfo.mt_entry, &dir_pos, &tmp_fat_fd);
41d18: ebff8fb8 bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
41d1c: e3500000 cmp r0, #0 <== NOT EXECUTED
41d20: 1a0000f9 bne 4210c <msdos_dir_read+0x5c4> <== NOT EXECUTED
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
tmp_dirent.d_ino = tmp_fat_fd->ino;
41d24: e59d315c ldr r3, [sp, #348] ; 0x15c <== NOT EXECUTED
41d28: e593300c ldr r3, [r3, #12] <== NOT EXECUTED
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
41d2c: e59dc01c ldr ip, [sp, #28] <== NOT EXECUTED
tmp_dirent.d_ino = tmp_fat_fd->ino;
41d30: e58d3038 str r3, [sp, #56] ; 0x38 <== NOT EXECUTED
return rc;
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
41d34: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
/*
* If a long file name check if the correct number of
* entries have been found and if the checksum is correct.
* If not return the short file name.
*/
if (lfn_start != FAT_FILE_SHORT_NAME)
41d38: e3790001 cmn r9, #1 <== NOT EXECUTED
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
tmp_dirent.d_reclen = sizeof(struct dirent);
41d3c: e28d2e16 add r2, sp, #352 ; 0x160 <== NOT EXECUTED
41d40: e3a01e11 mov r1, #272 ; 0x110 <== NOT EXECUTED
return rc;
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
41d44: e58d303c str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
tmp_dirent.d_reclen = sizeof(struct dirent);
41d48: e18210bc strh r1, [r2, ip] <== NOT EXECUTED
return rc;
}
/* fill in dirent structure */
/* XXX: from what and in what d_off should be computed ?! */
tmp_dirent.d_off = start + cmpltd;
41d4c: e58d6040 str r6, [sp, #64] ; 0x40 <== NOT EXECUTED
/*
* If a long file name check if the correct number of
* entries have been found and if the checksum is correct.
* If not return the short file name.
*/
if (lfn_start != FAT_FILE_SHORT_NAME)
41d50: 11a02006 movne r2, r6 <== NOT EXECUTED
41d54: 11a03006 movne r3, r6 <== NOT EXECUTED
41d58: 11a00006 movne r0, r6 <== NOT EXECUTED
41d5c: 1a000002 bne 41d6c <msdos_dir_read+0x224> <== NOT EXECUTED
41d60: ea000036 b 41e40 <msdos_dir_read+0x2f8> <== NOT EXECUTED
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
41d64: e2100001 ands r0, r0, #1 <== NOT EXECUTED
41d68: 13a00080 movne r0, #128 ; 0x80 <== NOT EXECUTED
41d6c: e7d51003 ldrb r1, [r5, r3] <== NOT EXECUTED
41d70: e1a02b82 lsl r2, r2, #23 <== NOT EXECUTED
41d74: e0801001 add r1, r0, r1 <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
41d78: e2833001 add r3, r3, #1 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
41d7c: e0810c22 add r0, r1, r2, lsr #24 <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
41d80: e353000b cmp r3, #11 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
41d84: e20020ff and r2, r0, #255 ; 0xff <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) entry;
int i;
for (i = 0; i < 11; i++, p++)
41d88: 1afffff5 bne 41d64 <msdos_dir_read+0x21c> <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
if (lfn_entries || (lfn_checksum != cs))
41d8c: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
41d90: e35b0000 cmp fp, #0 <== NOT EXECUTED
41d94: 01530002 cmpeq r3, r2 <== NOT EXECUTED
41d98: 1a000028 bne 41e40 <msdos_dir_read+0x2f8> <== NOT EXECUTED
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
tmp_dirent.d_name, entry); /* src text */
}
else
{
tmp_dirent.d_namlen = strlen(tmp_dirent.d_name);
41d9c: e59d0034 ldr r0, [sp, #52] ; 0x34 <== NOT EXECUTED
41da0: eb001f8f bl 49be4 <strlen> <== NOT EXECUTED
41da4: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
41da8: e28d2e16 add r2, sp, #352 ; 0x160 <== NOT EXECUTED
41dac: e18200b1 strh r0, [r2, r1] <== NOT EXECUTED
}
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
41db0: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
41db4: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
41db8: e28d1038 add r1, sp, #56 ; 0x38 <== NOT EXECUTED
41dbc: e083000c add r0, r3, ip <== NOT EXECUTED
41dc0: e3a02e11 mov r2, #272 ; 0x110 <== NOT EXECUTED
41dc4: eb001139 bl 462b0 <memcpy> <== NOT EXECUTED
iop->offset = iop->offset + sizeof(struct dirent);
41dc8: e28a300c add r3, sl, #12 <== NOT EXECUTED
41dcc: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
41dd0: e3a00e11 mov r0, #272 ; 0x110 <== NOT EXECUTED
41dd4: e0922000 adds r2, r2, r0 <== NOT EXECUTED
41dd8: e3a01000 mov r1, #0 <== NOT EXECUTED
41ddc: e0a33001 adc r3, r3, r1 <== NOT EXECUTED
41de0: e58a200c str r2, [sl, #12] <== NOT EXECUTED
41de4: e58a3010 str r3, [sl, #16] <== NOT EXECUTED
cmpltd += (sizeof(struct dirent));
count -= (sizeof(struct dirent));
/* inode number extracted, close fat-file */
rc = fat_file_close(iop->pathinfo.mt_entry, tmp_fat_fd);
41de8: e59a0028 ldr r0, [sl, #40] ; 0x28 <== NOT EXECUTED
41dec: e59d115c ldr r1, [sp, #348] ; 0x15c <== NOT EXECUTED
41df0: ebff8f58 bl 25b58 <fat_file_close> <== NOT EXECUTED
if (rc != RC_OK)
41df4: e3500000 cmp r0, #0 <== NOT EXECUTED
41df8: 1a0000a0 bne 42080 <msdos_dir_read+0x538> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
if (count <= 0)
41dfc: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
}
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
iop->offset = iop->offset + sizeof(struct dirent);
cmpltd += (sizeof(struct dirent));
41e00: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
if (count <= 0)
41e04: e2522e11 subs r2, r2, #272 ; 0x110 <== NOT EXECUTED
}
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
iop->offset = iop->offset + sizeof(struct dirent);
cmpltd += (sizeof(struct dirent));
41e08: e2833e11 add r3, r3, #272 ; 0x110 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
if (count <= 0)
41e0c: e58d2018 str r2, [sp, #24] <== NOT EXECUTED
}
memcpy(buffer + cmpltd, &tmp_dirent, sizeof(struct dirent));
iop->offset = iop->offset + sizeof(struct dirent);
cmpltd += (sizeof(struct dirent));
41e10: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
if (count <= 0)
41e14: 0a0000b5 beq 420f0 <msdos_dir_read+0x5a8> <== NOT EXECUTED
41e18: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
rtems_set_errno_and_return_minus_one(EIO);
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
41e1c: e2844020 add r4, r4, #32 <== NOT EXECUTED
41e20: e1540007 cmp r4, r7 <== NOT EXECUTED
41e24: e591c098 ldr ip, [r1, #152] ; 0x98 <== NOT EXECUTED
41e28: 3affff98 bcc 41c90 <msdos_dir_read+0x148> <== NOT EXECUTED
41e2c: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
41e30: e59d3030 ldr r3, [sp, #48] ; 0x30 <== NOT EXECUTED
41e34: e0822003 add r2, r2, r3 <== NOT EXECUTED
41e38: e58d2014 str r2, [sp, #20] <== NOT EXECUTED
41e3c: eaffff76 b 41c1c <msdos_dir_read+0xd4> <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
41e40: e3a03007 mov r3, #7 <== NOT EXECUTED
const char *src_tmp;
/*
* find last non-blank character of base name
*/
for ((i = MSDOS_SHORT_BASE_LEN ,
41e44: e7d52003 ldrb r2, [r5, r3] <== NOT EXECUTED
41e48: e3520020 cmp r2, #32 <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
41e4c: e2839001 add r9, r3, #1 <== NOT EXECUTED
const char *src_tmp;
/*
* find last non-blank character of base name
*/
for ((i = MSDOS_SHORT_BASE_LEN ,
41e50: 1a000074 bne 42028 <msdos_dir_read+0x4e0> <== NOT EXECUTED
int i;
for (i = 0; i < 11; i++, p++)
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
if (lfn_entries || (lfn_checksum != cs))
41e54: e1a09003 mov r9, r3 <== NOT EXECUTED
const char *src_tmp;
/*
* find last non-blank character of base name
*/
for ((i = MSDOS_SHORT_BASE_LEN ,
41e58: e2533001 subs r3, r3, #1 <== NOT EXECUTED
41e5c: 2afffff8 bcs 41e44 <msdos_dir_read+0x2fc> <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
41e60: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
*dst++ = tolower((unsigned char)(*src_tmp++));
}
/*
* find last non-blank character of extension
*/
for ((i = MSDOS_SHORT_EXT_LEN ,
41e64: e5d5300a ldrb r3, [r5, #10] <== NOT EXECUTED
41e68: e3530020 cmp r3, #32 <== NOT EXECUTED
41e6c: 13a00003 movne r0, #3 <== NOT EXECUTED
41e70: 1a00008a bne 420a0 <msdos_dir_read+0x558> <== NOT EXECUTED
41e74: e5d53009 ldrb r3, [r5, #9] <== NOT EXECUTED
41e78: e3530020 cmp r3, #32 <== NOT EXECUTED
41e7c: 13a00002 movne r0, #2 <== NOT EXECUTED
src_tmp = src + MSDOS_SHORT_BASE_LEN+MSDOS_SHORT_EXT_LEN-1);
((i > 0) &&
(*src_tmp == ' '));
i--,src_tmp--)
41e80: e2853009 add r3, r5, #9 <== NOT EXECUTED
*dst++ = tolower((unsigned char)(*src_tmp++));
}
/*
* find last non-blank character of extension
*/
for ((i = MSDOS_SHORT_EXT_LEN ,
41e84: 1a000085 bne 420a0 <msdos_dir_read+0x558> <== NOT EXECUTED
41e88: e5533001 ldrb r3, [r3, #-1] <== NOT EXECUTED
41e8c: e3530020 cmp r3, #32 <== NOT EXECUTED
41e90: 1a000081 bne 4209c <msdos_dir_read+0x554> <== NOT EXECUTED
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
len++;
}
}
*dst = '\0'; /* terminate string */
41e94: e3a03000 mov r3, #0 <== NOT EXECUTED
41e98: e5c23000 strb r3, [r2] <== NOT EXECUTED
{
/*
* 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(
41e9c: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
41ea0: e28d2e16 add r2, sp, #352 ; 0x160 <== NOT EXECUTED
41ea4: e18290b1 strh r9, [r2, r1] <== NOT EXECUTED
41ea8: e3e09000 mvn r9, #0 <== NOT EXECUTED
41eac: eaffffbf b 41db0 <msdos_dir_read+0x268> <== NOT EXECUTED
int q;
/*
* Is this is the first entry of a LFN ?
*/
if (lfn_start == FAT_FILE_SHORT_NAME)
41eb0: e3790001 cmn r9, #1 <== NOT EXECUTED
41eb4: 0a00000c beq 41eec <msdos_dir_read+0x3a4> <== NOT EXECUTED
41eb8: e1a0c00b mov ip, fp <== NOT EXECUTED
41ebc: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41ec0: e203b03f and fp, r3, #63 ; 0x3f <== NOT EXECUTED
41ec4: e15b000c cmp fp, ip <== NOT EXECUTED
int q;
/*
* Is this is the first entry of a LFN ?
*/
if (lfn_start == FAT_FILE_SHORT_NAME)
41ec8: e58d1020 str r1, [sp, #32] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41ecc: 0a000018 beq 41f34 <msdos_dir_read+0x3ec> <== NOT EXECUTED
41ed0: e1a0b00c mov fp, ip <== NOT EXECUTED
41ed4: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
41ed8: e59dc020 ldr ip, [sp, #32] <== NOT EXECUTED
41edc: e3e09000 mvn r9, #0 <== NOT EXECUTED
41ee0: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
41ee4: e591c098 ldr ip, [r1, #152] ; 0x98 <== NOT EXECUTED
41ee8: eaffff65 b 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
if (lfn_start == FAT_FILE_SHORT_NAME)
{
/*
* The first entry must have the last long entry flag set.
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
41eec: e3130040 tst r3, #64 ; 0x40 <== NOT EXECUTED
41ef0: 0affff63 beq 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
continue;
/*
* Remember the start location of the long file name.
*/
lfn_start =
41ef4: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
/*
* Get the number of entries so we can count down and
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
41ef8: e203c03f and ip, r3, #63 ; 0x3f <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
41efc: e5d5300d ldrb r3, [r5, #13] <== NOT EXECUTED
continue;
/*
* Remember the start location of the long file name.
*/
lfn_start =
41f00: e0829004 add r9, r2, r4 <== NOT EXECUTED
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
41f04: e59d0034 ldr r0, [sp, #52] ; 0x34 <== NOT EXECUTED
41f08: e3a01000 mov r1, #0 <== NOT EXECUTED
41f0c: e3a02c01 mov r2, #256 ; 0x100 <== NOT EXECUTED
* Get the number of entries so we can count down and
* also the checksum of the short entry.
*/
lfn_entries = (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK);
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
41f10: e58d3020 str r3, [sp, #32] <== NOT EXECUTED
memset (tmp_dirent.d_name, 0, sizeof(tmp_dirent.d_name));
41f14: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
41f18: eb00116b bl 464cc <memset> <== NOT EXECUTED
41f1c: e5d53000 ldrb r3, [r5] <== NOT EXECUTED
41f20: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41f24: e203b03f and fp, r3, #63 ; 0x3f <== NOT EXECUTED
41f28: e15b000c cmp fp, ip <== NOT EXECUTED
continue;
/*
* Remember the start location of the long file name.
*/
lfn_start =
41f2c: e1a092a9 lsr r9, r9, #5 <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41f30: 1affffe6 bne 41ed0 <msdos_dir_read+0x388> <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK)) ||
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
41f34: e5d5200d ldrb r2, [r5, #13] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41f38: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
41f3c: e1520003 cmp r2, r3 <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK)) ||
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
41f40: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These could
* be orphaned entries depending on the history of the
* disk.
*/
if ((lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
41f44: 0a00000d beq 41f80 <msdos_dir_read+0x438> <== NOT EXECUTED
41f48: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
41f4c: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
41f50: e3e09000 mvn r9, #0 <== NOT EXECUTED
41f54: e591c098 ldr ip, [r1, #152] ; 0x98 <== NOT EXECUTED
41f58: eaffff49 b 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
* Is this directory from here on empty ?
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)
{
rtems_semaphore_release(fs_info->vol_sema);
41f5c: e28d3008 add r3, sp, #8 <== NOT EXECUTED
41f60: e8931008 ldm r3, {r3, ip} <== NOT EXECUTED
41f64: e59c0094 ldr r0, [ip, #148] ; 0x94 <== NOT EXECUTED
41f68: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
41f6c: ebff299c bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return cmpltd;
41f70: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
j++;
}
rtems_semaphore_release(fs_info->vol_sema);
return cmpltd;
}
41f74: e1a00003 mov r0, r3 <== NOT EXECUTED
41f78: e28dde16 add sp, sp, #352 ; 0x160 <== NOT EXECUTED
41f7c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* The DOS maximum length is 255 characters without the
* trailing nul character. We need to range check the length to
* fit in the directory entry name field.
*/
lfn_entries--;
41f80: e24cb001 sub fp, ip, #1 <== NOT EXECUTED
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
41f84: e08b308b add r3, fp, fp, lsl #1 <== NOT EXECUTED
41f88: e08b3103 add r3, fp, r3, lsl #2 <== NOT EXECUTED
41f8c: e28d2038 add r2, sp, #56 ; 0x38 <== NOT EXECUTED
41f90: e2831010 add r1, r3, #16 <== NOT EXECUTED
41f94: e0821001 add r1, r2, r1 <== NOT EXECUTED
* trailing nul character. We need to range check the length to
* fit in the directory entry name field.
*/
lfn_entries--;
p = entry + 1;
41f98: e2855001 add r5, r5, #1 <== NOT EXECUTED
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
41f9c: e3a02001 mov r2, #1 <== NOT EXECUTED
41fa0: ea000006 b 41fc0 <msdos_dir_read+0x478> <== NOT EXECUTED
tmp_dirent.d_name[o++] = *p;
if (*p == '\0')
break;
switch (q)
41fa4: e350000a cmp r0, #10 <== NOT EXECUTED
41fa8: 0a000011 beq 41ff4 <msdos_dir_read+0x4ac> <== NOT EXECUTED
lfn_entries--;
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
41fac: e352000c cmp r2, #12 <== NOT EXECUTED
41fb0: ca00002f bgt 42074 <msdos_dir_read+0x52c> <== NOT EXECUTED
break;
case 10:
p += 4;
break;
default:
p += 2;
41fb4: e2855002 add r5, r5, #2 <== NOT EXECUTED
* fit in the directory entry name field.
*/
lfn_entries--;
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
41fb8: e2822001 add r2, r2, #1 <== NOT EXECUTED
41fbc: e2811001 add r1, r1, #1 <== NOT EXECUTED
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
{
if (o >= (sizeof(tmp_dirent.d_name) - 1))
41fc0: e35300fe cmp r3, #254 ; 0xfe <== NOT EXECUTED
* fit in the directory entry name field.
*/
lfn_entries--;
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
41fc4: e2420001 sub r0, r2, #1 <== NOT EXECUTED
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
{
if (o >= (sizeof(tmp_dirent.d_name) - 1))
break;
tmp_dirent.d_name[o++] = *p;
41fc8: e2833001 add r3, r3, #1 <== NOT EXECUTED
p = entry + 1;
o = lfn_entries * MSDOS_LFN_LEN_PER_ENTRY;
for (q = 0; q < MSDOS_LFN_LEN_PER_ENTRY; q++)
{
if (o >= (sizeof(tmp_dirent.d_name) - 1))
41fcc: 8a000055 bhi 42128 <msdos_dir_read+0x5e0> <== NOT EXECUTED
break;
tmp_dirent.d_name[o++] = *p;
41fd0: e5d5c000 ldrb ip, [r5] <== NOT EXECUTED
41fd4: e5c1c000 strb ip, [r1] <== NOT EXECUTED
if (*p == '\0')
41fd8: e5d5c000 ldrb ip, [r5] <== NOT EXECUTED
41fdc: e35c0000 cmp ip, #0 <== NOT EXECUTED
41fe0: 0affff8c beq 41e18 <msdos_dir_read+0x2d0> <== NOT EXECUTED
break;
switch (q)
41fe4: e3500004 cmp r0, #4 <== NOT EXECUTED
41fe8: 1affffed bne 41fa4 <msdos_dir_read+0x45c> <== NOT EXECUTED
{
case 4:
p += 5;
41fec: e2855005 add r5, r5, #5 <== NOT EXECUTED
break;
41ff0: eafffff0 b 41fb8 <msdos_dir_read+0x470> <== NOT EXECUTED
case 10:
p += 4;
41ff4: e2855004 add r5, r5, #4 <== NOT EXECUTED
break;
41ff8: eaffffee b 41fb8 <msdos_dir_read+0x470> <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
41ffc: e59dc024 ldr ip, [sp, #36] ; 0x24 <== NOT EXECUTED
42000: e59c3024 ldr r3, [ip, #36] ; 0x24 <== NOT EXECUTED
42004: e3530000 cmp r3, #0 <== NOT EXECUTED
42008: 1afffedd bne 41b84 <msdos_dir_read+0x3c> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16))) ?
4200c: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
42010: e5d1300a ldrb r3, [r1, #10] <== NOT EXECUTED
42014: e3130003 tst r3, #3 <== NOT EXECUTED
42018: 0afffed9 beq 41b84 <msdos_dir_read+0x3c> <== NOT EXECUTED
* optimization: we know that root directory for FAT12/16 volumes is
* sequential set of sectors and any cluster is sequential set of sectors
* too, so read such set of sectors is quick operation for low-level IO
* layer.
*/
bts2rd = (FAT_FD_OF_ROOT_DIR(fat_fd) &&
4201c: e59c2018 ldr r2, [ip, #24] <== NOT EXECUTED
42020: e58d2030 str r2, [sp, #48] ; 0x30 <== NOT EXECUTED
42024: eafffed9 b 41b90 <msdos_dir_read+0x48> <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
42028: e3590000 cmp r9, #0 <== NOT EXECUTED
4202c: daffff8b ble 41e60 <msdos_dir_read+0x318> <== NOT EXECUTED
const char *src_tmp;
/*
* find last non-blank character of base name
*/
for ((i = MSDOS_SHORT_BASE_LEN ,
42030: e28dc038 add ip, sp, #56 ; 0x38 <== NOT EXECUTED
42034: e28c1011 add r1, ip, #17 <== NOT EXECUTED
* RETURNS:
* 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)
42038: e3a03000 mov r3, #0 <== NOT EXECUTED
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
4203c: e7d52003 ldrb r2, [r5, r3] <== NOT EXECUTED
42040: e5980000 ldr r0, [r8] <== NOT EXECUTED
42044: e0800002 add r0, r0, r2 <== NOT EXECUTED
42048: e5d00001 ldrb r0, [r0, #1] <== NOT EXECUTED
4204c: e2000003 and r0, r0, #3 <== NOT EXECUTED
42050: e3500001 cmp r0, #1 <== NOT EXECUTED
42054: e2833001 add r3, r3, #1 <== NOT EXECUTED
42058: 02822020 addeq r2, r2, #32 <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
4205c: e1530009 cmp r3, r9 <== NOT EXECUTED
*dst++ = tolower((unsigned char)(*src_tmp++));
42060: e5412001 strb r2, [r1, #-1] <== NOT EXECUTED
42064: e1a02001 mov r2, r1 <== NOT EXECUTED
42068: e2811001 add r1, r1, #1 <== NOT EXECUTED
/*
* copy base name to destination
*/
src_tmp = src;
len = i;
while (i-- > 0) {
4206c: 1afffff2 bne 4203c <msdos_dir_read+0x4f4> <== NOT EXECUTED
42070: eaffff7b b 41e64 <msdos_dir_read+0x31c> <== NOT EXECUTED
42074: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
42078: e592c098 ldr ip, [r2, #152] ; 0x98 <== NOT EXECUTED
4207c: eaffff00 b 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
/* inode number extracted, close fat-file */
rc = fat_file_close(iop->pathinfo.mt_entry, tmp_fat_fd);
if (rc != RC_OK)
{
rtems_semaphore_release(fs_info->vol_sema);
42080: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
42084: e1a03000 mov r3, r0 <== NOT EXECUTED
42088: e5910094 ldr r0, [r1, #148] ; 0x94 <== NOT EXECUTED
4208c: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
42090: ebff2953 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
42094: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
42098: eaffffb5 b 41f74 <msdos_dir_read+0x42c> <== NOT EXECUTED
tmp_dirent.d_namlen = msdos_format_dirent_with_dot(
tmp_dirent.d_name, entry); /* src text */
}
else
{
tmp_dirent.d_namlen = strlen(tmp_dirent.d_name);
4209c: e3a00001 mov r0, #1 <== NOT EXECUTED
{};
/*
* extension is not empty
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
420a0: e1a0e002 mov lr, r2 <== NOT EXECUTED
420a4: e3a0302e mov r3, #46 ; 0x2e <== NOT EXECUTED
len += i + 1; /* extension + dot */
420a8: e2899001 add r9, r9, #1 <== NOT EXECUTED
{};
/*
* extension is not empty
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
420ac: e4ce3001 strb r3, [lr], #1 <== NOT EXECUTED
len += i + 1; /* extension + dot */
420b0: e0899000 add r9, r9, r0 <== NOT EXECUTED
* RETURNS:
* 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)
420b4: e085c000 add ip, r5, r0 <== NOT EXECUTED
if (i > 0) {
*dst++ = '.'; /* append dot */
len += i + 1; /* extension + dot */
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
*dst++ = tolower((unsigned char)(*src_tmp++));
420b8: e5d53008 ldrb r3, [r5, #8] <== NOT EXECUTED
420bc: e5981000 ldr r1, [r8] <== NOT EXECUTED
420c0: e0811003 add r1, r1, r3 <== NOT EXECUTED
420c4: e5d11001 ldrb r1, [r1, #1] <== NOT EXECUTED
420c8: e2011003 and r1, r1, #3 <== NOT EXECUTED
420cc: e3510001 cmp r1, #1 <== NOT EXECUTED
420d0: e2855001 add r5, r5, #1 <== NOT EXECUTED
420d4: 02833020 addeq r3, r3, #32 <== NOT EXECUTED
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
len += i + 1; /* extension + dot */
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
420d8: e155000c cmp r5, ip <== NOT EXECUTED
*dst++ = tolower((unsigned char)(*src_tmp++));
420dc: e5e23001 strb r3, [r2, #1]! <== NOT EXECUTED
*/
if (i > 0) {
*dst++ = '.'; /* append dot */
len += i + 1; /* extension + dot */
src_tmp = src + MSDOS_SHORT_BASE_LEN;
while (i-- > 0) {
420e0: 1afffff4 bne 420b8 <msdos_dir_read+0x570> <== NOT EXECUTED
420e4: e0899000 add r9, r9, r0 <== NOT EXECUTED
420e8: e08e2000 add r2, lr, r0 <== NOT EXECUTED
420ec: eaffff68 b 41e94 <msdos_dir_read+0x34c> <== NOT EXECUTED
* RETURNS:
* 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)
420f0: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
break;
}
j++;
}
rtems_semaphore_release(fs_info->vol_sema);
420f4: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
420f8: e59c0094 ldr r0, [ip, #148] ; 0x94 <== NOT EXECUTED
420fc: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
42100: ebff2937 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
42104: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
return cmpltd;
42108: eaffff99 b 41f74 <msdos_dir_read+0x42c> <== NOT EXECUTED
dir_pos.sname.cln = cur_cln;
dir_pos.sname.ofs = i;
rc = fat_file_open(iop->pathinfo.mt_entry, &dir_pos, &tmp_fat_fd);
if (rc != RC_OK)
{
rtems_semaphore_release(fs_info->vol_sema);
4210c: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
42110: e1a03000 mov r3, r0 <== NOT EXECUTED
42114: e5920094 ldr r0, [r2, #148] ; 0x94 <== NOT EXECUTED
42118: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
4211c: ebff2930 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
42120: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
42124: eaffff92 b 41f74 <msdos_dir_read+0x42c> <== NOT EXECUTED
42128: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
4212c: e593c098 ldr ip, [r3, #152] ; 0x98 <== NOT EXECUTED
42130: eafffed3 b 41c84 <msdos_dir_read+0x13c> <== NOT EXECUTED
*/
ret = fat_file_read(iop->pathinfo.mt_entry, fat_fd, (j * bts2rd),
bts2rd, fs_info->cl_buf);
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
rtems_semaphore_release(fs_info->vol_sema);
42134: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
42138: e5930094 ldr r0, [r3, #148] ; 0x94 <== NOT EXECUTED
4213c: ebff2928 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
42140: eb0003aa bl 42ff0 <__errno> <== NOT EXECUTED
42144: e3a03005 mov r3, #5 <== NOT EXECUTED
42148: e5803000 str r3, [r0] <== NOT EXECUTED
4214c: e3e03000 mvn r3, #0 <== NOT EXECUTED
42150: eaffff87 b 41f74 <msdos_dir_read+0x42c> <== NOT EXECUTED
}
for (i = 0; i < ret; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
42154: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
42158: eaffffe5 b 420f4 <msdos_dir_read+0x5ac> <== NOT EXECUTED
000419f0 <msdos_dir_rmnod>:
* RC_OK on success, or -1 if error occured (errno set apropriately).
*/
int
msdos_dir_rmnod(rtems_filesystem_location_info_t *parent_pathloc,
rtems_filesystem_location_info_t *pathloc)
{
419f0: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
419f4: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
419f8: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = pathloc->node_access;
bool is_empty = false;
419fc: e3a03000 mov r3, #0 <== NOT EXECUTED
* RC_OK on success, or -1 if error occured (errno set apropriately).
*/
int
msdos_dir_rmnod(rtems_filesystem_location_info_t *parent_pathloc,
rtems_filesystem_location_info_t *pathloc)
{
41a00: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
41a04: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
bool is_empty = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41a08: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
41a0c: e1a01003 mov r1, r3 <== NOT EXECUTED
41a10: e1a02003 mov r2, r3 <== NOT EXECUTED
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
bool is_empty = false;
41a14: e5cd3003 strb r3, [sp, #3] <== NOT EXECUTED
rtems_filesystem_location_info_t *pathloc)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
41a18: e5945000 ldr r5, [r4] <== NOT EXECUTED
bool is_empty = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41a1c: ebff2aa8 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
41a20: e3500000 cmp r0, #0 <== NOT EXECUTED
41a24: 1a000023 bne 41ab8 <msdos_dir_rmnod+0xc8> <== NOT EXECUTED
/*
* We deny attempts to delete open directory (if directory is current
* directory we assume it is open one)
*/
if (fat_fd->links_num > 1)
41a28: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
41a2c: e3530001 cmp r3, #1 <== NOT EXECUTED
41a30: 8a000019 bhi 41a9c <msdos_dir_rmnod+0xac> <== NOT EXECUTED
}
/*
* You cannot remove a node that still has children
*/
rc = msdos_dir_is_empty(pathloc->mt_entry, fat_fd, &is_empty);
41a34: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
41a38: e1a01005 mov r1, r5 <== NOT EXECUTED
41a3c: e28d2003 add r2, sp, #3 <== NOT EXECUTED
41a40: ebffd7db bl 379b4 <msdos_dir_is_empty> <== NOT EXECUTED
if (rc != RC_OK)
41a44: e2507000 subs r7, r0, #0 <== NOT EXECUTED
41a48: 1a00000e bne 41a88 <msdos_dir_rmnod+0x98> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
if (!is_empty)
41a4c: e5dd3003 ldrb r3, [sp, #3] <== NOT EXECUTED
41a50: e3530000 cmp r3, #0 <== NOT EXECUTED
41a54: 0a00001c beq 41acc <msdos_dir_rmnod+0xdc> <== NOT EXECUTED
}
/*
* You cannot remove the file system root node.
*/
if (pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access)
41a58: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
41a5c: e5943000 ldr r3, [r4] <== NOT EXECUTED
41a60: e590201c ldr r2, [r0, #28] <== NOT EXECUTED
41a64: e1520003 cmp r2, r3 <== NOT EXECUTED
41a68: 0a00000b beq 41a9c <msdos_dir_rmnod+0xac> <== NOT EXECUTED
* You cannot remove a mountpoint.
* not used - mount() not implemenetd yet.
*/
/* mark file removed */
rc = msdos_set_first_char4file_name(pathloc->mt_entry, &fat_fd->dir_pos,
41a6c: e2851020 add r1, r5, #32 <== NOT EXECUTED
41a70: e3a020e5 mov r2, #229 ; 0xe5 <== NOT EXECUTED
41a74: ebffd871 bl 37c40 <msdos_set_first_char4file_name> <== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_EMPTY);
if (rc != RC_OK)
41a78: e2507000 subs r7, r0, #0 <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
fat_file_mark_removed(pathloc->mt_entry, fat_fd);
41a7c: 05940010 ldreq r0, [r4, #16] <== NOT EXECUTED
41a80: 01a01005 moveq r1, r5 <== NOT EXECUTED
41a84: 0bff8e12 bleq 252d4 <fat_file_mark_removed> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
41a88: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
41a8c: ebff2ad4 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
41a90: e1a00007 mov r0, r7 <== NOT EXECUTED
41a94: e28dd004 add sp, sp, #4 <== NOT EXECUTED
41a98: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
/*
* You cannot remove the file system root node.
*/
if (pathloc->mt_entry->mt_fs_root.node_access == pathloc->node_access)
{
rtems_semaphore_release(fs_info->vol_sema);
41a9c: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
41aa0: ebff2acf bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EBUSY);
41aa4: eb000551 bl 42ff0 <__errno> <== NOT EXECUTED
41aa8: e3a03010 mov r3, #16 <== NOT EXECUTED
41aac: e5803000 str r3, [r0] <== NOT EXECUTED
41ab0: e3e07000 mvn r7, #0 <== NOT EXECUTED
41ab4: eafffff5 b 41a90 <msdos_dir_rmnod+0xa0> <== NOT EXECUTED
bool is_empty = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
41ab8: eb00054c bl 42ff0 <__errno> <== NOT EXECUTED
41abc: e3a03005 mov r3, #5 <== NOT EXECUTED
41ac0: e5803000 str r3, [r0] <== NOT EXECUTED
41ac4: e3e07000 mvn r7, #0 <== NOT EXECUTED
41ac8: eafffff0 b 41a90 <msdos_dir_rmnod+0xa0> <== NOT EXECUTED
return rc;
}
if (!is_empty)
{
rtems_semaphore_release(fs_info->vol_sema);
41acc: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
41ad0: ebff2ac3 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOTEMPTY);
41ad4: eb000545 bl 42ff0 <__errno> <== NOT EXECUTED
41ad8: e3a0305a mov r3, #90 ; 0x5a <== NOT EXECUTED
41adc: e5803000 str r3, [r0] <== NOT EXECUTED
41ae0: e3e07000 mvn r7, #0 <== NOT EXECUTED
41ae4: eaffffe9 b 41a90 <msdos_dir_rmnod+0xa0> <== NOT EXECUTED
00041948 <msdos_dir_stat>:
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
41948: e5902010 ldr r2, [r0, #16] <== NOT EXECUTED
int
msdos_dir_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
4194c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
41950: e5925034 ldr r5, [r2, #52] ; 0x34 <== NOT EXECUTED
int
msdos_dir_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
41954: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41958: e3a01000 mov r1, #0 <== NOT EXECUTED
int
msdos_dir_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
4195c: e1a03000 mov r3, r0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41960: e1a02001 mov r2, r1 <== NOT EXECUTED
41964: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
struct stat *buf
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
41968: e5936000 ldr r6, [r3] <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
4196c: ebff2ad4 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
41970: e2507000 subs r7, r0, #0 <== NOT EXECUTED
41974: 1a000018 bne 419dc <msdos_dir_stat+0x94> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
41978: e596200c ldr r2, [r6, #12] <== NOT EXECUTED
buf->st_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
4197c: e3a03c41 mov r3, #16640 ; 0x4100 <== NOT EXECUTED
41980: e28330ff add r3, r3, #255 ; 0xff <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
41984: e5842008 str r2, [r4, #8] <== NOT EXECUTED
buf->st_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
41988: e584300c str r3, [r4, #12] <== NOT EXECUTED
buf->st_rdev = 0ll;
buf->st_size = fat_fd->fat_file_size;
4198c: e5963018 ldr r3, [r6, #24] <== NOT EXECUTED
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
buf->st_blksize = fs_info->fat.vol.bps;
41990: e1d520b0 ldrh r2, [r5] <== NOT EXECUTED
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
buf->st_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
buf->st_rdev = 0ll;
buf->st_size = fat_fd->fat_file_size;
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
41994: e1a014a3 lsr r1, r3, #9 <== NOT EXECUTED
41998: e5841044 str r1, [r4, #68] ; 0x44 <== NOT EXECUTED
buf->st_blksize = fs_info->fat.vol.bps;
4199c: e5842040 str r2, [r4, #64] ; 0x40 <== NOT EXECUTED
buf->st_mtime = fat_fd->mtime;
419a0: e5962040 ldr r2, [r6, #64] ; 0x40 <== NOT EXECUTED
419a4: e5842030 str r2, [r4, #48] ; 0x30 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
419a8: e2852054 add r2, r5, #84 ; 0x54 <== NOT EXECUTED
419ac: e8920006 ldm r2, {r1, r2} <== NOT EXECUTED
419b0: e8840006 stm r4, {r1, r2} <== NOT EXECUTED
buf->st_ino = fat_fd->ino;
buf->st_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
buf->st_rdev = 0ll;
419b4: e3a01000 mov r1, #0 <== NOT EXECUTED
419b8: e3a02000 mov r2, #0 <== NOT EXECUTED
419bc: e5841018 str r1, [r4, #24] <== NOT EXECUTED
419c0: e584201c str r2, [r4, #28] <== NOT EXECUTED
buf->st_size = fat_fd->fat_file_size;
419c4: e5843020 str r3, [r4, #32] <== NOT EXECUTED
419c8: e5847024 str r7, [r4, #36] ; 0x24 <== NOT EXECUTED
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
buf->st_blksize = fs_info->fat.vol.bps;
buf->st_mtime = fat_fd->mtime;
rtems_semaphore_release(fs_info->vol_sema);
419cc: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
419d0: ebff2b03 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
419d4: e1a00007 mov r0, r7 <== NOT EXECUTED
return RC_OK;
}
419d8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
419dc: eb000583 bl 42ff0 <__errno> <== NOT EXECUTED
419e0: e3a03005 mov r3, #5 <== NOT EXECUTED
419e4: e5803000 str r3, [r0] <== NOT EXECUTED
419e8: e3e00000 mvn r0, #0 <== NOT EXECUTED
419ec: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00041ae8 <msdos_dir_sync>:
msdos_dir_sync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
41ae8: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set apropriately).
*/
int
msdos_dir_sync(rtems_libio_t *iop)
{
41aec: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
41af0: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41af4: e3a01000 mov r1, #0 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set apropriately).
*/
int
msdos_dir_sync(rtems_libio_t *iop)
{
41af8: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41afc: e1a02001 mov r2, r1 <== NOT EXECUTED
41b00: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
int
msdos_dir_sync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
41b04: e5946038 ldr r6, [r4, #56] ; 0x38 <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
41b08: ebff2a6d bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
41b0c: e3500000 cmp r0, #0 <== NOT EXECUTED
41b10: 1a000007 bne 41b34 <msdos_dir_sync+0x4c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
rc = fat_file_datasync(iop->pathinfo.mt_entry, fat_fd);
41b14: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
41b18: e1a01006 mov r1, r6 <== NOT EXECUTED
41b1c: ebff8da4 bl 251b4 <fat_file_datasync> <== NOT EXECUTED
41b20: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
41b24: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
41b28: ebff2aad bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
41b2c: e1a00004 mov r0, r4 <== NOT EXECUTED
41b30: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
41b34: eb00052d bl 42ff0 <__errno> <== NOT EXECUTED
41b38: e3a03005 mov r3, #5 <== NOT EXECUTED
41b3c: e5803000 str r3, [r0] <== NOT EXECUTED
41b40: e3e04000 mvn r4, #0 <== NOT EXECUTED
41b44: eafffff8 b 41b2c <msdos_dir_sync+0x44> <== NOT EXECUTED
000364d4 <msdos_eval4make>:
msdos_eval4make(
const char *path,
rtems_filesystem_location_info_t *pathloc,
const char **name
)
{
364d4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
364d8: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
364dc: e5937034 ldr r7, [r3, #52] ; 0x34 <== NOT EXECUTED
msdos_eval4make(
const char *path,
rtems_filesystem_location_info_t *pathloc,
const char **name
)
{
364e0: e24dd020 sub sp, sp, #32 <== NOT EXECUTED
364e4: e1a04001 mov r4, r1 <== NOT EXECUTED
int i = 0;
int token_len;
const char *token;
bool done = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
364e8: e3a01000 mov r1, #0 <== NOT EXECUTED
msdos_eval4make(
const char *path,
rtems_filesystem_location_info_t *pathloc,
const char **name
)
{
364ec: e58d2000 str r2, [sp] <== NOT EXECUTED
364f0: e1a08000 mov r8, r0 <== NOT EXECUTED
int i = 0;
int token_len;
const char *token;
bool done = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
364f4: e1a02001 mov r2, r1 <== NOT EXECUTED
364f8: e5970094 ldr r0, [r7, #148] ; 0x94 <== NOT EXECUTED
364fc: ebff57f0 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36500: e3500000 cmp r0, #0 <== NOT EXECUTED
36504: 1a000092 bne 36754 <msdos_eval4make+0x280> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
if (!pathloc->node_access)
36508: e5940000 ldr r0, [r4] <== NOT EXECUTED
3650c: e3500000 cmp r0, #0 <== NOT EXECUTED
36510: 0a000069 beq 366bc <msdos_eval4make+0x1e8> <== NOT EXECUTED
goto err;
}
fat_fd = pathloc->node_access;
rc = fat_file_reopen(fat_fd);
36514: ebffbabf bl 25018 <fat_file_reopen> <== NOT EXECUTED
if (rc != RC_OK)
36518: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3651c: 11a0b005 movne fp, r5 <== NOT EXECUTED
36520: 1a00001d bne 3659c <msdos_eval4make+0xc8> <== NOT EXECUTED
36524: e1a06005 mov r6, r5 <== NOT EXECUTED
36528: e28d9018 add r9, sp, #24 <== NOT EXECUTED
3652c: e28db01c add fp, sp, #28 <== NOT EXECUTED
goto err;
while (!done)
{
type = msdos_get_token(&path[i], strlen(&path[i]), &token, &token_len);
36530: e088a006 add sl, r8, r6 <== NOT EXECUTED
36534: e1a0000a mov r0, sl <== NOT EXECUTED
36538: eb004da9 bl 49be4 <strlen> <== NOT EXECUTED
3653c: e1a02009 mov r2, r9 <== NOT EXECUTED
36540: e1a01000 mov r1, r0 <== NOT EXECUTED
36544: e1a0300b mov r3, fp <== NOT EXECUTED
36548: e1a0000a mov r0, sl <== NOT EXECUTED
3654c: eb000661 bl 37ed8 <msdos_get_token> <== NOT EXECUTED
i += token_len;
fat_fd = pathloc->node_access;
36550: e594c000 ldr ip, [r4] <== NOT EXECUTED
goto err;
while (!done)
{
type = msdos_get_token(&path[i], strlen(&path[i]), &token, &token_len);
i += token_len;
36554: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
fat_fd = pathloc->node_access;
36558: e1a0a00c mov sl, ip <== NOT EXECUTED
goto err;
while (!done)
{
type = msdos_get_token(&path[i], strlen(&path[i]), &token, &token_len);
i += token_len;
3655c: e0866002 add r6, r6, r2 <== NOT EXECUTED
fat_fd = pathloc->node_access;
switch (type)
36560: e3500004 cmp r0, #4 <== NOT EXECUTED
36564: 979ff100 ldrls pc, [pc, r0, lsl #2] <== NOT EXECUTED
36568: eafffff0 b 36530 <msdos_eval4make+0x5c> <== NOT EXECUTED
3656c: 000366a8 .word 0x000366a8 <== NOT EXECUTED
36570: 00036530 .word 0x00036530 <== NOT EXECUTED
36574: 00036660 .word 0x00036660 <== NOT EXECUTED
36578: 000365b4 .word 0x000365b4 <== NOT EXECUTED
3657c: 00036580 .word 0x00036580 <== NOT EXECUTED
case MSDOS_CURRENT_DIR:
break;
case MSDOS_INVALID_TOKEN:
errno = ENAMETOOLONG;
36580: eb00329a bl 42ff0 <__errno> <== NOT EXECUTED
36584: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED
36588: e5803000 str r3, [r0] <== NOT EXECUTED
3658c: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return RC_OK;
error:
fat_file_close(pathloc->mt_entry, fat_fd);
36590: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
36594: e1a0100a mov r1, sl <== NOT EXECUTED
36598: ebffbd6e bl 25b58 <fat_file_close> <== NOT EXECUTED
err:
rtems_semaphore_release(fs_info->vol_sema);
3659c: e5970094 ldr r0, [r7, #148] ; 0x94 <== NOT EXECUTED
365a0: ebff580f bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
365a4: e1a0500b mov r5, fp <== NOT EXECUTED
return rc;
}
365a8: e1a00005 mov r0, r5 <== NOT EXECUTED
365ac: e28dd020 add sp, sp, #32 <== NOT EXECUTED
365b0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
case MSDOS_NAME:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
365b4: e59c3010 ldr r3, [ip, #16] <== NOT EXECUTED
365b8: e3530001 cmp r3, #1 <== NOT EXECUTED
/*
* Otherwise find the token name in the present location and
* set the node access to the point we have found.
*/
rc = msdos_find_name(pathloc, token, token_len);
365bc: e1a00004 mov r0, r4 <== NOT EXECUTED
case MSDOS_NAME:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
365c0: 1a000068 bne 36768 <msdos_eval4make+0x294> <== NOT EXECUTED
/*
* Otherwise find the token name in the present location and
* set the node access to the point we have found.
*/
rc = msdos_find_name(pathloc, token, token_len);
365c4: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
365c8: eb0007ba bl 384b8 <msdos_find_name> <== NOT EXECUTED
if (rc)
365cc: e3500000 cmp r0, #0 <== NOT EXECUTED
365d0: 0affffd6 beq 36530 <msdos_eval4make+0x5c> <== NOT EXECUTED
{
if (rc != MSDOS_NAME_NOT_FOUND_ERR)
365d4: e3a03c7d mov r3, #32000 ; 0x7d00 <== NOT EXECUTED
365d8: e2833001 add r3, r3, #1 <== NOT EXECUTED
365dc: e1500003 cmp r0, r3 <== NOT EXECUTED
365e0: 1a000019 bne 3664c <msdos_eval4make+0x178> <== NOT EXECUTED
break;
}
}
*name = &path[i - token_len];
365e4: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
365e8: e59d2000 ldr r2, [sp] <== NOT EXECUTED
365ec: e0633006 rsb r3, r3, r6 <== NOT EXECUTED
365f0: e0883003 add r3, r8, r3 <== NOT EXECUTED
365f4: e5823000 str r3, [r2] <== NOT EXECUTED
/*
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++)
365f8: e7d80006 ldrb r0, [r8, r6] <== NOT EXECUTED
365fc: e3500000 cmp r0, #0 <== NOT EXECUTED
36600: e0886006 add r6, r8, r6 <== NOT EXECUTED
36604: 1a00000d bne 36640 <msdos_eval4make+0x16c> <== NOT EXECUTED
rc = -1;
goto error;
}
}
fat_fd = pathloc->node_access;
36608: e594a000 ldr sl, [r4] <== NOT EXECUTED
if (fat_fd->fat_file_type != FAT_DIRECTORY)
3660c: e59a3010 ldr r3, [sl, #16] <== NOT EXECUTED
36610: e3530001 cmp r3, #1 <== NOT EXECUTED
36614: 1a000053 bne 36768 <msdos_eval4make+0x294> <== NOT EXECUTED
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
loc->handlers = fs_info->directory_handlers;
36618: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
3661c: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED
36620: e593308c ldr r3, [r3, #140] ; 0x8c <== NOT EXECUTED
goto error;
}
msdos_set_handlers(pathloc);
rtems_semaphore_release(fs_info->vol_sema);
36624: e5970094 ldr r0, [r7, #148] ; 0x94 <== NOT EXECUTED
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
loc->handlers = fs_info->directory_handlers;
36628: e5843008 str r3, [r4, #8] <== NOT EXECUTED
goto error;
}
msdos_set_handlers(pathloc);
rtems_semaphore_release(fs_info->vol_sema);
3662c: ebff57ec bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
36630: eaffffdc b 365a8 <msdos_eval4make+0xd4> <== NOT EXECUTED
/*
* We have evaluated the path as far as we can.
* Verify there is not any invalid stuff at the end of the name.
*/
for( ; path[i] != '\0'; i++)
36634: e5f60001 ldrb r0, [r6, #1]! <== NOT EXECUTED
36638: e3500000 cmp r0, #0 <== NOT EXECUTED
3663c: 0afffff1 beq 36608 <msdos_eval4make+0x134> <== NOT EXECUTED
{
if (!msdos_is_separator(path[i]))
36640: ebff4c54 bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
36644: e3500000 cmp r0, #0 <== NOT EXECUTED
36648: 1afffff9 bne 36634 <msdos_eval4make+0x160> <== NOT EXECUTED
{
errno = ENOENT;
3664c: eb003267 bl 42ff0 <__errno> <== NOT EXECUTED
36650: e3a03002 mov r3, #2 <== NOT EXECUTED
36654: e5803000 str r3, [r0] <== NOT EXECUTED
36658: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto error;
3665c: eaffffcb b 36590 <msdos_eval4make+0xbc> <== NOT EXECUTED
{
case MSDOS_UP_DIR:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
36660: e59c3010 ldr r3, [ip, #16] <== NOT EXECUTED
36664: e3530001 cmp r3, #1 <== NOT EXECUTED
pathloc, name);
}
}
else
{
rc = msdos_find_name(pathloc, token, token_len);
36668: e1a00004 mov r0, r4 <== NOT EXECUTED
{
case MSDOS_UP_DIR:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
3666c: 1a00003d bne 36768 <msdos_eval4make+0x294> <== NOT EXECUTED
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
pathloc->mt_entry->mt_fs_root.node_access)
36670: e5941010 ldr r1, [r4, #16] <== NOT EXECUTED
}
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
36674: e591301c ldr r3, [r1, #28] <== NOT EXECUTED
36678: e15c0003 cmp ip, r3 <== NOT EXECUTED
3667c: 0a000013 beq 366d0 <msdos_eval4make+0x1fc> <== NOT EXECUTED
pathloc, name);
}
}
else
{
rc = msdos_find_name(pathloc, token, token_len);
36680: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
36684: eb00078b bl 384b8 <msdos_find_name> <== NOT EXECUTED
if (rc != RC_OK)
36688: e3500000 cmp r0, #0 <== NOT EXECUTED
3668c: 0affffa7 beq 36530 <msdos_eval4make+0x5c> <== NOT EXECUTED
{
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
36690: e3a03c7d mov r3, #32000 ; 0x7d00 <== NOT EXECUTED
36694: e2833001 add r3, r3, #1 <== NOT EXECUTED
36698: e1500003 cmp r0, r3 <== NOT EXECUTED
3669c: e1a0b000 mov fp, r0 <== NOT EXECUTED
366a0: 1affffba bne 36590 <msdos_eval4make+0xbc> <== NOT EXECUTED
366a4: eaffffe8 b 3664c <msdos_eval4make+0x178> <== NOT EXECUTED
done = true;
}
break;
case MSDOS_NO_MORE_PATH:
errno = EEXIST;
366a8: eb003250 bl 42ff0 <__errno> <== NOT EXECUTED
366ac: e3a03011 mov r3, #17 <== NOT EXECUTED
366b0: e5803000 str r3, [r0] <== NOT EXECUTED
366b4: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto error;
366b8: eaffffb4 b 36590 <msdos_eval4make+0xbc> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
if (!pathloc->node_access)
{
errno = ENOENT;
366bc: eb00324b bl 42ff0 <__errno> <== NOT EXECUTED
366c0: e3a03002 mov r3, #2 <== NOT EXECUTED
366c4: e5803000 str r3, [r0] <== NOT EXECUTED
366c8: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto err;
366cc: eaffffb2 b 3659c <msdos_eval4make+0xc8> <== NOT EXECUTED
/*
* Am I at the root of all filesystems?
* XXX: MSDOS is not supposed to be base fs.
*/
if (pathloc->node_access ==
rtems_filesystem_root.node_access)
366d0: e59f20a4 ldr r2, [pc, #164] ; 3677c <msdos_eval4make+0x2a8><== NOT EXECUTED
366d4: e5923000 ldr r3, [r2] <== NOT EXECUTED
366d8: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
366dc: e15c0003 cmp ip, r3 <== NOT EXECUTED
366e0: 0affff92 beq 36530 <msdos_eval4make+0x5c> <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
366e4: e281a008 add sl, r1, #8 <== NOT EXECUTED
366e8: e8ba000f ldm sl!, {r0, r1, r2, r3} <== NOT EXECUTED
366ec: e28d5004 add r5, sp, #4 <== NOT EXECUTED
366f0: e8a5000f stmia r5!, {r0, r1, r2, r3} <== NOT EXECUTED
*pathloc = newloc;
366f4: e28de004 add lr, sp, #4 <== NOT EXECUTED
366f8: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
366fc: e59ae000 ldr lr, [sl] <== NOT EXECUTED
*pathloc = newloc;
36700: e1a0a004 mov sl, r4 <== NOT EXECUTED
36704: e8aa000f stmia sl!, {r0, r1, r2, r3} <== NOT EXECUTED
rc = fat_file_close(pathloc->mt_entry, fat_fd);
36708: e1a0000e mov r0, lr <== NOT EXECUTED
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
*pathloc = newloc;
3670c: e58ae000 str lr, [sl] <== NOT EXECUTED
rc = fat_file_close(pathloc->mt_entry, fat_fd);
36710: e1a0100c mov r1, ip <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
36714: e585e000 str lr, [r5] <== NOT EXECUTED
*pathloc = newloc;
rc = fat_file_close(pathloc->mt_entry, fat_fd);
36718: ebffbd0e bl 25b58 <fat_file_close> <== NOT EXECUTED
if (rc != RC_OK)
3671c: e250b000 subs fp, r0, #0 <== NOT EXECUTED
36720: 1affff9d bne 3659c <msdos_eval4make+0xc8> <== NOT EXECUTED
goto err;
rtems_semaphore_release(fs_info->vol_sema);
36724: e5970094 ldr r0, [r7, #148] ; 0x94 <== NOT EXECUTED
36728: ebff57ad bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return (*pathloc->ops->evalformake_h)(&path[i-token_len],
3672c: e59d001c ldr r0, [sp, #28] <== NOT EXECUTED
36730: e0600006 rsb r0, r0, r6 <== NOT EXECUTED
36734: e0880000 add r0, r8, r0 <== NOT EXECUTED
36738: e1a01004 mov r1, r4 <== NOT EXECUTED
3673c: e59d2000 ldr r2, [sp] <== NOT EXECUTED
36740: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
36744: e1a0e00f mov lr, pc <== NOT EXECUTED
36748: e593f004 ldr pc, [r3, #4] <== NOT EXECUTED
3674c: e1a05000 mov r5, r0 <== NOT EXECUTED
36750: eaffff94 b 365a8 <msdos_eval4make+0xd4> <== NOT EXECUTED
bool done = false;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36754: eb003225 bl 42ff0 <__errno> <== NOT EXECUTED
36758: e3a03005 mov r3, #5 <== NOT EXECUTED
3675c: e5803000 str r3, [r0] <== NOT EXECUTED
36760: e3e05000 mvn r5, #0 <== NOT EXECUTED
36764: eaffff8f b 365a8 <msdos_eval4make+0xd4> <== NOT EXECUTED
fat_fd = pathloc->node_access;
if (fat_fd->fat_file_type != FAT_DIRECTORY)
{
errno = ENOTDIR;
36768: eb003220 bl 42ff0 <__errno> <== NOT EXECUTED
3676c: e3a03014 mov r3, #20 <== NOT EXECUTED
36770: e5803000 str r3, [r0] <== NOT EXECUTED
36774: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto error;
36778: eaffff84 b 36590 <msdos_eval4make+0xbc> <== NOT EXECUTED
0003625c <msdos_eval_path>:
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
3625c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
36260: e1a04003 mov r4, r3 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
36264: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED
36268: e5939034 ldr r9, [r3, #52] ; 0x34 <== NOT EXECUTED
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
3626c: e24dd024 sub sp, sp, #36 ; 0x24 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = NULL;
rtems_filesystem_location_info_t newloc;
int i = 0;
int token_len = 0;
36270: e3a03000 mov r3, #0 <== NOT EXECUTED
const char *pathname,
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc
)
{
36274: e88d0005 stm sp, {r0, r2} <== NOT EXECUTED
36278: e1a05001 mov r5, r1 <== NOT EXECUTED
int i = 0;
int token_len = 0;
msdos_token_types_t type = MSDOS_CURRENT_DIR;
const char *token;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
3627c: e5990094 ldr r0, [r9, #148] ; 0x94 <== NOT EXECUTED
36280: e1a01003 mov r1, r3 <== NOT EXECUTED
36284: e1a02003 mov r2, r3 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = NULL;
rtems_filesystem_location_info_t newloc;
int i = 0;
int token_len = 0;
36288: e58d3020 str r3, [sp, #32] <== NOT EXECUTED
msdos_token_types_t type = MSDOS_CURRENT_DIR;
const char *token;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
3628c: ebff588c bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36290: e3500000 cmp r0, #0 <== NOT EXECUTED
36294: 1a000083 bne 364a8 <msdos_eval_path+0x24c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
if (!pathloc->node_access)
36298: e5940000 ldr r0, [r4] <== NOT EXECUTED
3629c: e3500000 cmp r0, #0 <== NOT EXECUTED
362a0: 0a000058 beq 36408 <msdos_eval_path+0x1ac> <== NOT EXECUTED
goto err;
}
fat_fd = pathloc->node_access;
rc = fat_file_reopen(fat_fd);
362a4: ebffbb5b bl 25018 <fat_file_reopen> <== NOT EXECUTED
if (rc != RC_OK)
362a8: e2508000 subs r8, r0, #0 <== NOT EXECUTED
362ac: 11a0b008 movne fp, r8 <== NOT EXECUTED
362b0: 1a000027 bne 36354 <msdos_eval_path+0xf8> <== NOT EXECUTED
362b4: e1a06008 mov r6, r8 <== NOT EXECUTED
362b8: e28db020 add fp, sp, #32 <== NOT EXECUTED
goto err;
while ((type != MSDOS_NO_MORE_PATH) && (type != MSDOS_INVALID_TOKEN))
{
type = msdos_get_token(&pathname[i], pathnamelen, &token, &token_len);
362bc: e59dc000 ldr ip, [sp] <== NOT EXECUTED
362c0: e1a01005 mov r1, r5 <== NOT EXECUTED
362c4: e28d201c add r2, sp, #28 <== NOT EXECUTED
362c8: e08c0006 add r0, ip, r6 <== NOT EXECUTED
362cc: e1a0300b mov r3, fp <== NOT EXECUTED
362d0: eb000700 bl 37ed8 <msdos_get_token> <== NOT EXECUTED
pathnamelen -= token_len;
362d4: e59d2020 ldr r2, [sp, #32] <== NOT EXECUTED
i += token_len;
fat_fd = pathloc->node_access;
switch (type)
362d8: e3500003 cmp r0, #3 <== NOT EXECUTED
if (rc != RC_OK)
goto err;
while ((type != MSDOS_NO_MORE_PATH) && (type != MSDOS_INVALID_TOKEN))
{
type = msdos_get_token(&pathname[i], pathnamelen, &token, &token_len);
362dc: e1a0a000 mov sl, r0 <== NOT EXECUTED
pathnamelen -= token_len;
362e0: e0625005 rsb r5, r2, r5 <== NOT EXECUTED
i += token_len;
362e4: e0866002 add r6, r6, r2 <== NOT EXECUTED
fat_fd = pathloc->node_access;
362e8: e5947000 ldr r7, [r4] <== NOT EXECUTED
switch (type)
362ec: 0a00001e beq 3636c <msdos_eval_path+0x110> <== NOT EXECUTED
362f0: e3500004 cmp r0, #4 <== NOT EXECUTED
362f4: 0a00000f beq 36338 <msdos_eval_path+0xdc> <== NOT EXECUTED
362f8: e3500002 cmp r0, #2 <== NOT EXECUTED
362fc: 0a00002c beq 363b4 <msdos_eval_path+0x158> <== NOT EXECUTED
rc = fat_file_reopen(fat_fd);
if (rc != RC_OK)
goto err;
while ((type != MSDOS_NO_MORE_PATH) && (type != MSDOS_INVALID_TOKEN))
36300: e3500000 cmp r0, #0 <== NOT EXECUTED
36304: 13500004 cmpne r0, #4 <== NOT EXECUTED
36308: 1affffeb bne 362bc <msdos_eval_path+0x60> <== NOT EXECUTED
* None
*/
static void
msdos_set_handlers(rtems_filesystem_location_info_t *loc)
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
3630c: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
36310: e5972010 ldr r2, [r7, #16] <== NOT EXECUTED
* None
*/
static void
msdos_set_handlers(rtems_filesystem_location_info_t *loc)
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
36314: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
36318: e3520001 cmp r2, #1 <== NOT EXECUTED
loc->handlers = fs_info->directory_handlers;
3631c: 0593308c ldreq r3, [r3, #140] ; 0x8c <== NOT EXECUTED
else
loc->handlers = fs_info->file_handlers;
36320: 15933090 ldrne r3, [r3, #144] ; 0x90 <== NOT EXECUTED
{
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
if (fat_fd->fat_file_type == FAT_DIRECTORY)
loc->handlers = fs_info->directory_handlers;
36324: 05843008 streq r3, [r4, #8] <== NOT EXECUTED
else
loc->handlers = fs_info->file_handlers;
36328: 15843008 strne r3, [r4, #8] <== NOT EXECUTED
*/
fat_fd = pathloc->node_access;
msdos_set_handlers(pathloc);
rtems_semaphore_release(fs_info->vol_sema);
3632c: e5990094 ldr r0, [r9, #148] ; 0x94 <== NOT EXECUTED
36330: ebff58ab bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
36334: ea000009 b 36360 <msdos_eval_path+0x104> <== NOT EXECUTED
case MSDOS_NO_MORE_PATH:
case MSDOS_CURRENT_DIR:
break;
case MSDOS_INVALID_TOKEN:
errno = ENAMETOOLONG;
36338: eb00332c bl 42ff0 <__errno> <== NOT EXECUTED
3633c: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED
36340: e5803000 str r3, [r0] <== NOT EXECUTED
36344: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return RC_OK;
error:
fat_file_close(pathloc->mt_entry, fat_fd);
36348: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
3634c: e1a01007 mov r1, r7 <== NOT EXECUTED
36350: ebffbe00 bl 25b58 <fat_file_close> <== NOT EXECUTED
err:
rtems_semaphore_release(fs_info->vol_sema);
36354: e5990094 ldr r0, [r9, #148] ; 0x94 <== NOT EXECUTED
36358: ebff58a1 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
3635c: e1a0800b mov r8, fp <== NOT EXECUTED
return rc;
}
36360: e1a00008 mov r0, r8 <== NOT EXECUTED
36364: e28dd024 add sp, sp, #36 ; 0x24 <== NOT EXECUTED
36368: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
case MSDOS_NAME:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
3636c: e5973010 ldr r3, [r7, #16] <== NOT EXECUTED
36370: e3530001 cmp r3, #1 <== NOT EXECUTED
/*
* Otherwise find the token name in the present location and
* set the node access to the point we have found.
*/
rc = msdos_find_name(pathloc, token, token_len);
36374: e1a00004 mov r0, r4 <== NOT EXECUTED
case MSDOS_NAME:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
36378: 1a00004f bne 364bc <msdos_eval_path+0x260> <== NOT EXECUTED
/*
* Otherwise find the token name in the present location and
* set the node access to the point we have found.
*/
rc = msdos_find_name(pathloc, token, token_len);
3637c: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
36380: eb00084c bl 384b8 <msdos_find_name> <== NOT EXECUTED
if (rc != RC_OK)
36384: e3500000 cmp r0, #0 <== NOT EXECUTED
36388: 0affffcb beq 362bc <msdos_eval_path+0x60> <== NOT EXECUTED
{
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
3638c: e3a03c7d mov r3, #32000 ; 0x7d00 <== NOT EXECUTED
36390: e2833001 add r3, r3, #1 <== NOT EXECUTED
36394: e1500003 cmp r0, r3 <== NOT EXECUTED
36398: e1a0b000 mov fp, r0 <== NOT EXECUTED
3639c: 1affffe9 bne 36348 <msdos_eval_path+0xec> <== NOT EXECUTED
{
errno = ENOENT;
363a0: eb003312 bl 42ff0 <__errno> <== NOT EXECUTED
363a4: e3a03002 mov r3, #2 <== NOT EXECUTED
363a8: e5803000 str r3, [r0] <== NOT EXECUTED
363ac: e3e0b000 mvn fp, #0 <== NOT EXECUTED
363b0: eaffffe4 b 36348 <msdos_eval_path+0xec> <== NOT EXECUTED
{
case MSDOS_UP_DIR:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
363b4: e5973010 ldr r3, [r7, #16] <== NOT EXECUTED
363b8: e3530001 cmp r3, #1 <== NOT EXECUTED
flags, pathloc);
}
}
else
{
rc = msdos_find_name(pathloc, token, token_len);
363bc: e1a00004 mov r0, r4 <== NOT EXECUTED
{
case MSDOS_UP_DIR:
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
363c0: 1a00003d bne 364bc <msdos_eval_path+0x260> <== NOT EXECUTED
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
pathloc->mt_entry->mt_fs_root.node_access)
363c4: e5941010 ldr r1, [r4, #16] <== NOT EXECUTED
}
/*
* Am I at the root of this mounted filesystem?
*/
if (pathloc->node_access ==
363c8: e591301c ldr r3, [r1, #28] <== NOT EXECUTED
363cc: e1570003 cmp r7, r3 <== NOT EXECUTED
363d0: 0a000011 beq 3641c <msdos_eval_path+0x1c0> <== NOT EXECUTED
flags, pathloc);
}
}
else
{
rc = msdos_find_name(pathloc, token, token_len);
363d4: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
363d8: eb000836 bl 384b8 <msdos_find_name> <== NOT EXECUTED
if (rc != RC_OK)
363dc: e3500000 cmp r0, #0 <== NOT EXECUTED
363e0: 0affffb5 beq 362bc <msdos_eval_path+0x60> <== NOT EXECUTED
{
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
363e4: e3a03c7d mov r3, #32000 ; 0x7d00 <== NOT EXECUTED
363e8: e2833001 add r3, r3, #1 <== NOT EXECUTED
363ec: e1500003 cmp r0, r3 <== NOT EXECUTED
363f0: e1a0b000 mov fp, r0 <== NOT EXECUTED
363f4: 1affffd3 bne 36348 <msdos_eval_path+0xec> <== NOT EXECUTED
{
errno = ENOENT;
363f8: eb0032fc bl 42ff0 <__errno> <== NOT EXECUTED
363fc: e3e0b000 mvn fp, #0 <== NOT EXECUTED
36400: e580a000 str sl, [r0] <== NOT EXECUTED
36404: eaffffcf b 36348 <msdos_eval_path+0xec> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
if (!pathloc->node_access)
{
errno = ENOENT;
36408: eb0032f8 bl 42ff0 <__errno> <== NOT EXECUTED
3640c: e3a03002 mov r3, #2 <== NOT EXECUTED
36410: e5803000 str r3, [r0] <== NOT EXECUTED
36414: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto err;
36418: eaffffcd b 36354 <msdos_eval_path+0xf8> <== NOT EXECUTED
/*
* Am I at the root of all filesystems?
* XXX: MSDOS is not supposed to be base fs.
*/
if (pathloc->node_access ==
rtems_filesystem_root.node_access)
3641c: e59f20ac ldr r2, [pc, #172] ; 364d0 <msdos_eval_path+0x274><== NOT EXECUTED
36420: e5923000 ldr r3, [r2] <== NOT EXECUTED
36424: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
36428: e1570003 cmp r7, r3 <== NOT EXECUTED
3642c: 0affffa2 beq 362bc <msdos_eval_path+0x60> <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
36430: e2818008 add r8, r1, #8 <== NOT EXECUTED
36434: e8b8000f ldm r8!, {r0, r1, r2, r3} <== NOT EXECUTED
36438: e28de008 add lr, sp, #8 <== NOT EXECUTED
3643c: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED
*pathloc = newloc;
36440: e28dc008 add ip, sp, #8 <== NOT EXECUTED
36444: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
36448: e598c000 ldr ip, [r8] <== NOT EXECUTED
*pathloc = newloc;
3644c: e1a08004 mov r8, r4 <== NOT EXECUTED
36450: e8a8000f stmia r8!, {r0, r1, r2, r3} <== NOT EXECUTED
rc = fat_file_close(pathloc->mt_entry, fat_fd);
36454: e1a0000c mov r0, ip <== NOT EXECUTED
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
*pathloc = newloc;
36458: e588c000 str ip, [r8] <== NOT EXECUTED
rc = fat_file_close(pathloc->mt_entry, fat_fd);
3645c: e1a01007 mov r1, r7 <== NOT EXECUTED
{
break; /* Throw out the .. in this case */
}
else
{
newloc = pathloc->mt_entry->mt_point_node;
36460: e58ec000 str ip, [lr] <== NOT EXECUTED
*pathloc = newloc;
rc = fat_file_close(pathloc->mt_entry, fat_fd);
36464: ebffbdbb bl 25b58 <fat_file_close> <== NOT EXECUTED
if (rc != RC_OK)
36468: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3646c: 1affffb8 bne 36354 <msdos_eval_path+0xf8> <== NOT EXECUTED
goto err;
rtems_semaphore_release(fs_info->vol_sema);
36470: e5990094 ldr r0, [r9, #148] ; 0x94 <== NOT EXECUTED
36474: ebff585a bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return (*pathloc->ops->evalpath_h)(&(pathname[i-token_len]),
36478: e59d1020 ldr r1, [sp, #32] <== NOT EXECUTED
3647c: e59dc000 ldr ip, [sp] <== NOT EXECUTED
36480: e0610006 rsb r0, r1, r6 <== NOT EXECUTED
36484: e08c0000 add r0, ip, r0 <== NOT EXECUTED
36488: e0851001 add r1, r5, r1 <== NOT EXECUTED
3648c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
36490: e1a03004 mov r3, r4 <== NOT EXECUTED
36494: e594c00c ldr ip, [r4, #12] <== NOT EXECUTED
36498: e1a0e00f mov lr, pc <== NOT EXECUTED
3649c: e59cf000 ldr pc, [ip] <== NOT EXECUTED
364a0: e1a08000 mov r8, r0 <== NOT EXECUTED
364a4: eaffffad b 36360 <msdos_eval_path+0x104> <== NOT EXECUTED
const char *token;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
364a8: eb0032d0 bl 42ff0 <__errno> <== NOT EXECUTED
364ac: e3a03005 mov r3, #5 <== NOT EXECUTED
364b0: e5803000 str r3, [r0] <== NOT EXECUTED
364b4: e3e08000 mvn r8, #0 <== NOT EXECUTED
364b8: eaffffa8 b 36360 <msdos_eval_path+0x104> <== NOT EXECUTED
/*
* Only a directory can be decended into.
*/
if (fat_fd->fat_file_type != FAT_DIRECTORY)
{
errno = ENOTSUP;
364bc: eb0032cb bl 42ff0 <__errno> <== NOT EXECUTED
364c0: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
364c4: e5803000 str r3, [r0] <== NOT EXECUTED
364c8: e3e0b000 mvn fp, #0 <== NOT EXECUTED
rc = -1;
goto error;
364cc: eaffff9d b 36348 <msdos_eval_path+0xec> <== NOT EXECUTED
00036788 <msdos_file_chmod>:
int
msdos_file_chmod(rtems_filesystem_location_info_t *pathloc,
mode_t mode)
{
return RC_OK;
}
36788: e3a00000 mov r0, #0 <== NOT EXECUTED
3678c: e12fff1e bx lr <== NOT EXECUTED
00036c8c <msdos_file_close>:
int
msdos_file_close(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36c8c: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RC_OK, if file closed successfully, or -1 if error occured (errno set
* appropriately)
*/
int
msdos_file_close(rtems_libio_t *iop)
{
36c90: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36c94: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36c98: e3a01000 mov r1, #0 <== NOT EXECUTED
* RC_OK, if file closed successfully, or -1 if error occured (errno set
* appropriately)
*/
int
msdos_file_close(rtems_libio_t *iop)
{
36c9c: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36ca0: e1a02001 mov r2, r1 <== NOT EXECUTED
36ca4: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
msdos_file_close(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
36ca8: e5945038 ldr r5, [r4, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36cac: ebff5604 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36cb0: e3500000 cmp r0, #0 <== NOT EXECUTED
36cb4: 1a00001a bne 36d24 <msdos_file_close+0x98> <== NOT EXECUTED
/*
* if fat-file descriptor is not marked as "removed", synchronize
* size, first cluster number, write time and date fields of the file
*/
if (!FAT_FILE_IS_REMOVED(fat_fd))
36cb8: e5d53030 ldrb r3, [r5, #48] ; 0x30 <== NOT EXECUTED
36cbc: e3130001 tst r3, #1 <== NOT EXECUTED
36cc0: 0a000007 beq 36ce4 <msdos_file_close+0x58> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
rc = fat_file_close(iop->pathinfo.mt_entry, fat_fd);
36cc4: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36cc8: e1a01005 mov r1, r5 <== NOT EXECUTED
36ccc: ebffbba1 bl 25b58 <fat_file_close> <== NOT EXECUTED
36cd0: e1a07000 mov r7, r0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36cd4: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36cd8: ebff5641 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
36cdc: e1a00007 mov r0, r7 <== NOT EXECUTED
36ce0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* if fat-file descriptor is not marked as "removed", synchronize
* size, first cluster number, write time and date fields of the file
*/
if (!FAT_FILE_IS_REMOVED(fat_fd))
{
rc = msdos_set_first_cluster_num(iop->pathinfo.mt_entry, fat_fd);
36ce4: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36ce8: e1a01005 mov r1, r5 <== NOT EXECUTED
36cec: eb0003a4 bl 37b84 <msdos_set_first_cluster_num> <== NOT EXECUTED
if (rc != RC_OK)
36cf0: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36cf4: 1afffff6 bne 36cd4 <msdos_file_close+0x48> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
rc = msdos_set_file_size(iop->pathinfo.mt_entry, fat_fd);
36cf8: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36cfc: e1a01005 mov r1, r5 <== NOT EXECUTED
36d00: eb00037f bl 37b04 <msdos_set_file_size> <== NOT EXECUTED
if (rc != RC_OK)
36d04: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36d08: 1afffff1 bne 36cd4 <msdos_file_close+0x48> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
rc = msdos_set_dir_wrt_time_and_date(iop->pathinfo.mt_entry, fat_fd);
36d0c: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36d10: e1a01005 mov r1, r5 <== NOT EXECUTED
36d14: eb000425 bl 37db0 <msdos_set_dir_wrt_time_and_date> <== NOT EXECUTED
if (rc != RC_OK)
36d18: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36d1c: 0affffe8 beq 36cc4 <msdos_file_close+0x38> <== NOT EXECUTED
36d20: eaffffeb b 36cd4 <msdos_file_close+0x48> <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36d24: eb0030b1 bl 42ff0 <__errno> <== NOT EXECUTED
36d28: e3a03005 mov r3, #5 <== NOT EXECUTED
36d2c: e5803000 str r3, [r0] <== NOT EXECUTED
36d30: e3e07000 mvn r7, #0 <== NOT EXECUTED
36d34: eaffffe8 b 36cdc <msdos_file_close+0x50> <== NOT EXECUTED
000368a8 <msdos_file_datasync>:
msdos_file_datasync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
368a8: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_datasync(rtems_libio_t *iop)
{
368ac: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
368b0: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
368b4: e3a01000 mov r1, #0 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_datasync(rtems_libio_t *iop)
{
368b8: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
368bc: e1a02001 mov r2, r1 <== NOT EXECUTED
368c0: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
int
msdos_file_datasync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
368c4: e5946038 ldr r6, [r4, #56] ; 0x38 <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
368c8: ebff56fd bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
368cc: e2507000 subs r7, r0, #0 <== NOT EXECUTED
368d0: 1a000006 bne 368f0 <msdos_file_datasync+0x48> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
/* synchronize file data */
rc = fat_file_datasync(iop->pathinfo.mt_entry, fat_fd);
368d4: e1a01006 mov r1, r6 <== NOT EXECUTED
368d8: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
368dc: ebffba34 bl 251b4 <fat_file_datasync> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
368e0: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
368e4: ebff573e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
368e8: e1a00007 mov r0, r7 <== NOT EXECUTED
return RC_OK;
}
368ec: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
368f0: eb0031be bl 42ff0 <__errno> <== NOT EXECUTED
368f4: e3a03005 mov r3, #5 <== NOT EXECUTED
368f8: e5803000 str r3, [r0] <== NOT EXECUTED
368fc: e3e00000 mvn r0, #0 <== NOT EXECUTED
36900: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
000369c4 <msdos_file_ftruncate>:
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately).
*/
int
msdos_file_ftruncate(rtems_libio_t *iop, rtems_off64_t length)
{
369c4: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
369c8: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately).
*/
int
msdos_file_ftruncate(rtems_libio_t *iop, rtems_off64_t length)
{
369cc: e1a06002 mov r6, r2 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
369d0: e5905038 ldr r5, [r0, #56] ; 0x38 <== NOT EXECUTED
if (length >= fat_fd->fat_file_size)
369d4: e3a02000 mov r2, #0 <== NOT EXECUTED
369d8: e1520006 cmp r2, r6 <== NOT EXECUTED
int
msdos_file_ftruncate(rtems_libio_t *iop, rtems_off64_t length)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
369dc: e5938034 ldr r8, [r3, #52] ; 0x34 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately).
*/
int
msdos_file_ftruncate(rtems_libio_t *iop, rtems_off64_t length)
{
369e0: e1a04000 mov r4, r0 <== NOT EXECUTED
369e4: e1a07001 mov r7, r1 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
if (length >= fat_fd->fat_file_size)
369e8: e5953018 ldr r3, [r5, #24] <== NOT EXECUTED
369ec: ca000005 bgt 36a08 <msdos_file_ftruncate+0x44> <== NOT EXECUTED
369f0: 0a000002 beq 36a00 <msdos_file_ftruncate+0x3c> <== NOT EXECUTED
369f4: e3a0a000 mov sl, #0 <== NOT EXECUTED
if (length < fat_fd->fat_file_size)
iop->size = fat_fd->fat_file_size = length;
rtems_semaphore_release(fs_info->vol_sema);
return RC_OK;
}
369f8: e1a0000a mov r0, sl <== NOT EXECUTED
369fc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
if (length >= fat_fd->fat_file_size)
36a00: e1530001 cmp r3, r1 <== NOT EXECUTED
36a04: 9afffffa bls 369f4 <msdos_file_ftruncate+0x30> <== NOT EXECUTED
return RC_OK;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36a08: e3a01000 mov r1, #0 <== NOT EXECUTED
36a0c: e5980094 ldr r0, [r8, #148] ; 0x94 <== NOT EXECUTED
36a10: e1a02001 mov r2, r1 <== NOT EXECUTED
36a14: ebff56aa bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36a18: e3500000 cmp r0, #0 <== NOT EXECUTED
36a1c: 1a000013 bne 36a70 <msdos_file_ftruncate+0xac> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
rc = fat_file_truncate(iop->pathinfo.mt_entry, fat_fd, length);
36a20: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36a24: e1a01005 mov r1, r5 <== NOT EXECUTED
36a28: e1a02007 mov r2, r7 <== NOT EXECUTED
36a2c: ebffba76 bl 2540c <fat_file_truncate> <== NOT EXECUTED
if (rc != RC_OK)
36a30: e250a000 subs sl, r0, #0 <== NOT EXECUTED
36a34: 1a000009 bne 36a60 <msdos_file_ftruncate+0x9c> <== NOT EXECUTED
/*
* fat_file_truncate do nothing if new length >= fat-file size, so update
* file size only if length < fat-file size
*/
if (length < fat_fd->fat_file_size)
36a38: e15a0006 cmp sl, r6 <== NOT EXECUTED
36a3c: e5953018 ldr r3, [r5, #24] <== NOT EXECUTED
36a40: ca000002 bgt 36a50 <msdos_file_ftruncate+0x8c> <== NOT EXECUTED
36a44: 1a000005 bne 36a60 <msdos_file_ftruncate+0x9c> <== NOT EXECUTED
36a48: e1530007 cmp r3, r7 <== NOT EXECUTED
36a4c: 9a000003 bls 36a60 <msdos_file_ftruncate+0x9c> <== NOT EXECUTED
iop->size = fat_fd->fat_file_size = length;
36a50: e3a03000 mov r3, #0 <== NOT EXECUTED
36a54: e5843008 str r3, [r4, #8] <== NOT EXECUTED
36a58: e5857018 str r7, [r5, #24] <== NOT EXECUTED
36a5c: e5847004 str r7, [r4, #4] <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36a60: e5980094 ldr r0, [r8, #148] ; 0x94 <== NOT EXECUTED
36a64: ebff56de bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
}
36a68: e1a0000a mov r0, sl <== NOT EXECUTED
36a6c: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
return RC_OK;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36a70: eb00315e bl 42ff0 <__errno> <== NOT EXECUTED
36a74: e3a03005 mov r3, #5 <== NOT EXECUTED
36a78: e5803000 str r3, [r0] <== NOT EXECUTED
36a7c: e3e0a000 mvn sl, #0 <== NOT EXECUTED
36a80: eaffffdc b 369f8 <msdos_file_ftruncate+0x34> <== NOT EXECUTED
00036780 <msdos_file_ioctl>:
msdos_file_ioctl(rtems_libio_t *iop,uint32_t command, void *buffer)
{
int rc = RC_OK;
return rc;
}
36780: e3a00000 mov r0, #0 <== NOT EXECUTED
36784: e12fff1e bx lr <== NOT EXECUTED
00036a84 <msdos_file_lseek>:
* new offset on success, or -1 if error occured (errno set
* appropriately).
*/
rtems_off64_t
msdos_file_lseek(rtems_libio_t *iop, rtems_off64_t offset, int whence)
{
36a84: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36a88: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
36a8c: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
uint32_t real_size = 0;
36a90: e3a03000 mov r3, #0 <== NOT EXECUTED
* new offset on success, or -1 if error occured (errno set
* appropriately).
*/
rtems_off64_t
msdos_file_lseek(rtems_libio_t *iop, rtems_off64_t offset, int whence)
{
36a94: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
36a98: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
uint32_t real_size = 0;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36a9c: e1a01003 mov r1, r3 <== NOT EXECUTED
36aa0: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36aa4: e1a02003 mov r2, r3 <== NOT EXECUTED
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
uint32_t real_size = 0;
36aa8: e58d3000 str r3, [sp] <== NOT EXECUTED
msdos_file_lseek(rtems_libio_t *iop, rtems_off64_t offset, int whence)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
36aac: e5945038 ldr r5, [r4, #56] ; 0x38 <== NOT EXECUTED
uint32_t real_size = 0;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36ab0: ebff5683 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36ab4: e3500000 cmp r0, #0 <== NOT EXECUTED
36ab8: 1a00001b bne 36b2c <msdos_file_lseek+0xa8> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
rc = fat_file_extend(iop->pathinfo.mt_entry, fat_fd, iop->offset,
36abc: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36ac0: e1a01005 mov r1, r5 <== NOT EXECUTED
36ac4: e594200c ldr r2, [r4, #12] <== NOT EXECUTED
36ac8: e1a0300d mov r3, sp <== NOT EXECUTED
36acc: ebffba90 bl 25514 <fat_file_extend> <== NOT EXECUTED
&real_size);
if (rc != RC_OK)
36ad0: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36ad4: 1a00000f bne 36b18 <msdos_file_lseek+0x94> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
if (real_size > fat_fd->fat_file_size)
36ad8: e5952018 ldr r2, [r5, #24] <== NOT EXECUTED
36adc: e59d3000 ldr r3, [sp] <== NOT EXECUTED
36ae0: e1520003 cmp r2, r3 <== NOT EXECUTED
fat_fd->fat_file_size = iop->offset = real_size;
36ae4: 31a02003 movcc r2, r3 <== NOT EXECUTED
36ae8: 35852018 strcc r2, [r5, #24] <== NOT EXECUTED
36aec: 3584200c strcc r2, [r4, #12] <== NOT EXECUTED
36af0: 35847010 strcc r7, [r4, #16] <== NOT EXECUTED
iop->size = fat_fd->fat_file_size;
36af4: e9840084 stmib r4, {r2, r7} <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36af8: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36afc: ebff56b8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return iop->offset;
36b00: e284400c add r4, r4, #12 <== NOT EXECUTED
36b04: e8940018 ldm r4, {r3, r4} <== NOT EXECUTED
}
36b08: e1a01004 mov r1, r4 <== NOT EXECUTED
36b0c: e1a00003 mov r0, r3 <== NOT EXECUTED
36b10: e28dd004 add sp, sp, #4 <== NOT EXECUTED
36b14: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
rc = fat_file_extend(iop->pathinfo.mt_entry, fat_fd, iop->offset,
&real_size);
if (rc != RC_OK)
{
rtems_semaphore_release(fs_info->vol_sema);
36b18: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36b1c: ebff56b0 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
36b20: e1a03007 mov r3, r7 <== NOT EXECUTED
36b24: e1a04fc3 asr r4, r3, #31 <== NOT EXECUTED
36b28: eafffff6 b 36b08 <msdos_file_lseek+0x84> <== NOT EXECUTED
uint32_t real_size = 0;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36b2c: eb00312f bl 42ff0 <__errno> <== NOT EXECUTED
36b30: e3a03005 mov r3, #5 <== NOT EXECUTED
36b34: e5803000 str r3, [r0] <== NOT EXECUTED
36b38: e3e04000 mvn r4, #0 <== NOT EXECUTED
36b3c: e3e03000 mvn r3, #0 <== NOT EXECUTED
36b40: eafffff0 b 36b08 <msdos_file_lseek+0x84> <== NOT EXECUTED
00036d38 <msdos_file_open>:
msdos_file_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36d38: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* and errno set appropriately
*/
int
msdos_file_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
36d3c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36d40: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36d44: e3a01000 mov r1, #0 <== NOT EXECUTED
* and errno set appropriately
*/
int
msdos_file_open(rtems_libio_t *iop, const char *pathname, uint32_t flag,
uint32_t mode)
{
36d48: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36d4c: e1a02001 mov r2, r1 <== NOT EXECUTED
36d50: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
uint32_t mode)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
36d54: e5946038 ldr r6, [r4, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36d58: ebff55d9 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36d5c: e3500000 cmp r0, #0 <== NOT EXECUTED
36d60: 1a000011 bne 36dac <msdos_file_open+0x74> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
rc = fat_file_reopen(fat_fd);
36d64: e1a00006 mov r0, r6 <== NOT EXECUTED
36d68: ebffb8aa bl 25018 <fat_file_reopen> <== NOT EXECUTED
if (rc != RC_OK)
36d6c: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36d70: 1a000009 bne 36d9c <msdos_file_open+0x64> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
36d74: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
36d78: e3130c02 tst r3, #512 ; 0x200 <== NOT EXECUTED
iop->offset = fat_fd->fat_file_size;
36d7c: 15963018 ldrne r3, [r6, #24] <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
if (iop->flags & LIBIO_FLAGS_APPEND)
36d80: 05963018 ldreq r3, [r6, #24] <== NOT EXECUTED
36d84: 01a02007 moveq r2, r7 <== NOT EXECUTED
iop->offset = fat_fd->fat_file_size;
36d88: 11a02007 movne r2, r7 <== NOT EXECUTED
36d8c: 15847010 strne r7, [r4, #16] <== NOT EXECUTED
36d90: 1584300c strne r3, [r4, #12] <== NOT EXECUTED
iop->size = fat_fd->fat_file_size;
36d94: e5842008 str r2, [r4, #8] <== NOT EXECUTED
36d98: e5843004 str r3, [r4, #4] <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36d9c: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36da0: ebff560f bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
}
36da4: e1a00007 mov r0, r7 <== NOT EXECUTED
36da8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36dac: eb00308f bl 42ff0 <__errno> <== NOT EXECUTED
36db0: e3a03005 mov r3, #5 <== NOT EXECUTED
36db4: e5803000 str r3, [r0] <== NOT EXECUTED
36db8: e3e07000 mvn r7, #0 <== NOT EXECUTED
36dbc: eafffff8 b 36da4 <msdos_file_open+0x6c> <== NOT EXECUTED
00036c10 <msdos_file_read>:
* the number of bytes read on success, or -1 if error occured (errno set
* appropriately)
*/
ssize_t
msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
{
36c10: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36c14: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
36c18: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
* the number of bytes read on success, or -1 if error occured (errno set
* appropriately)
*/
ssize_t
msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
{
36c1c: e1a05001 mov r5, r1 <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36c20: e3a01000 mov r1, #0 <== NOT EXECUTED
* the number of bytes read on success, or -1 if error occured (errno set
* appropriately)
*/
ssize_t
msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
{
36c24: e1a06000 mov r6, r0 <== NOT EXECUTED
36c28: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
36c2c: e1a07002 mov r7, r2 <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36c30: e5940094 ldr r0, [r4, #148] ; 0x94 <== NOT EXECUTED
36c34: e1a02001 mov r2, r1 <== NOT EXECUTED
msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
{
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
36c38: e5968038 ldr r8, [r6, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36c3c: ebff5620 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36c40: e3500000 cmp r0, #0 <== NOT EXECUTED
36c44: 1a00000b bne 36c78 <msdos_file_read+0x68> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
ret = fat_file_read(iop->pathinfo.mt_entry, fat_fd, iop->offset, count,
36c48: e596200c ldr r2, [r6, #12] <== NOT EXECUTED
36c4c: e5960028 ldr r0, [r6, #40] ; 0x28 <== NOT EXECUTED
36c50: e1a01008 mov r1, r8 <== NOT EXECUTED
36c54: e1a03007 mov r3, r7 <== NOT EXECUTED
36c58: e58d5000 str r5, [sp] <== NOT EXECUTED
36c5c: ebffbb3a bl 2594c <fat_file_read> <== NOT EXECUTED
36c60: e1a05000 mov r5, r0 <== NOT EXECUTED
buffer);
rtems_semaphore_release(fs_info->vol_sema);
36c64: e5940094 ldr r0, [r4, #148] ; 0x94 <== NOT EXECUTED
36c68: ebff565d bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return ret;
}
36c6c: e1a00005 mov r0, r5 <== NOT EXECUTED
36c70: e28dd004 add sp, sp, #4 <== NOT EXECUTED
36c74: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36c78: eb0030dc bl 42ff0 <__errno> <== NOT EXECUTED
36c7c: e3a03005 mov r3, #5 <== NOT EXECUTED
36c80: e5803000 str r3, [r0] <== NOT EXECUTED
36c84: e3e05000 mvn r5, #0 <== NOT EXECUTED
36c88: eafffff7 b 36c6c <msdos_file_read+0x5c> <== NOT EXECUTED
00036838 <msdos_file_rmnod>:
msdos_file_rmnod(rtems_filesystem_location_info_t *parent_pathloc,
rtems_filesystem_location_info_t *pathloc)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
36838: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_rmnod(rtems_filesystem_location_info_t *parent_pathloc,
rtems_filesystem_location_info_t *pathloc)
{
3683c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
36840: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_rmnod(rtems_filesystem_location_info_t *parent_pathloc,
rtems_filesystem_location_info_t *pathloc)
{
36844: e1a04001 mov r4, r1 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36848: e3a01000 mov r1, #0 <== NOT EXECUTED
3684c: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36850: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_filesystem_location_info_t *pathloc)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = pathloc->node_access;
36854: e5946000 ldr r6, [r4] <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36858: ebff5719 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
3685c: e3500000 cmp r0, #0 <== NOT EXECUTED
36860: 1a00000b bne 36894 <msdos_file_rmnod+0x5c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
/* mark file removed */
rc = msdos_set_first_char4file_name(pathloc->mt_entry,
36864: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
36868: e2861020 add r1, r6, #32 <== NOT EXECUTED
3686c: e3a020e5 mov r2, #229 ; 0xe5 <== NOT EXECUTED
36870: eb0004f2 bl 37c40 <msdos_set_first_char4file_name> <== NOT EXECUTED
&fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
if (rc != RC_OK)
36874: e2507000 subs r7, r0, #0 <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
fat_file_mark_removed(pathloc->mt_entry, fat_fd);
36878: 05940010 ldreq r0, [r4, #16] <== NOT EXECUTED
3687c: 01a01006 moveq r1, r6 <== NOT EXECUTED
36880: 0bffba93 bleq 252d4 <fat_file_mark_removed> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36884: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36888: ebff5755 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return RC_OK;
}
3688c: e1a00007 mov r0, r7 <== NOT EXECUTED
36890: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = pathloc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36894: eb0031d5 bl 42ff0 <__errno> <== NOT EXECUTED
36898: e3a03005 mov r3, #5 <== NOT EXECUTED
3689c: e5803000 str r3, [r0] <== NOT EXECUTED
368a0: e3e07000 mvn r7, #0 <== NOT EXECUTED
368a4: eafffff8 b 3688c <msdos_file_rmnod+0x54> <== NOT EXECUTED
00036790 <msdos_file_stat>:
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
36790: e5902010 ldr r2, [r0, #16] <== NOT EXECUTED
int
msdos_file_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
36794: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
36798: e5925034 ldr r5, [r2, #52] ; 0x34 <== NOT EXECUTED
int
msdos_file_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
3679c: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
367a0: e3a01000 mov r1, #0 <== NOT EXECUTED
int
msdos_file_stat(
rtems_filesystem_location_info_t *loc,
struct stat *buf
)
{
367a4: e1a03000 mov r3, r0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
367a8: e1a02001 mov r2, r1 <== NOT EXECUTED
367ac: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
struct stat *buf
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
367b0: e5936000 ldr r6, [r3] <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
367b4: ebff5742 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
367b8: e2507000 subs r7, r0, #0 <== NOT EXECUTED
367bc: 1a000018 bne 36824 <msdos_file_stat+0x94> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
367c0: e596200c ldr r2, [r6, #12] <== NOT EXECUTED
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
367c4: e3a03c82 mov r3, #33280 ; 0x8200 <== NOT EXECUTED
367c8: e2433001 sub r3, r3, #1 <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
367cc: e5842008 str r2, [r4, #8] <== NOT EXECUTED
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
367d0: e584300c str r3, [r4, #12] <== NOT EXECUTED
buf->st_rdev = 0ll;
buf->st_size = fat_fd->fat_file_size;
367d4: e5963018 ldr r3, [r6, #24] <== NOT EXECUTED
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
buf->st_blksize = fs_info->fat.vol.bps;
367d8: e1d520b0 ldrh r2, [r5] <== NOT EXECUTED
buf->st_dev = fs_info->fat.vol.dev;
buf->st_ino = fat_fd->ino;
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
buf->st_rdev = 0ll;
buf->st_size = fat_fd->fat_file_size;
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
367dc: e1a014a3 lsr r1, r3, #9 <== NOT EXECUTED
367e0: e5841044 str r1, [r4, #68] ; 0x44 <== NOT EXECUTED
buf->st_blksize = fs_info->fat.vol.bps;
367e4: e5842040 str r2, [r4, #64] ; 0x40 <== NOT EXECUTED
buf->st_mtime = fat_fd->mtime;
367e8: e5962040 ldr r2, [r6, #64] ; 0x40 <== NOT EXECUTED
367ec: e5842030 str r2, [r4, #48] ; 0x30 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
buf->st_dev = fs_info->fat.vol.dev;
367f0: e2852054 add r2, r5, #84 ; 0x54 <== NOT EXECUTED
367f4: e8920006 ldm r2, {r1, r2} <== NOT EXECUTED
367f8: e8840006 stm r4, {r1, r2} <== NOT EXECUTED
buf->st_ino = fat_fd->ino;
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
buf->st_rdev = 0ll;
367fc: e3a01000 mov r1, #0 <== NOT EXECUTED
36800: e3a02000 mov r2, #0 <== NOT EXECUTED
36804: e5841018 str r1, [r4, #24] <== NOT EXECUTED
36808: e584201c str r2, [r4, #28] <== NOT EXECUTED
buf->st_size = fat_fd->fat_file_size;
3680c: e5843020 str r3, [r4, #32] <== NOT EXECUTED
36810: e5847024 str r7, [r4, #36] ; 0x24 <== NOT EXECUTED
buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
buf->st_blksize = fs_info->fat.vol.bps;
buf->st_mtime = fat_fd->mtime;
rtems_semaphore_release(fs_info->vol_sema);
36814: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36818: ebff5771 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
3681c: e1a00007 mov r0, r7 <== NOT EXECUTED
return RC_OK;
}
36820: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
fat_file_fd_t *fat_fd = loc->node_access;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36824: eb0031f1 bl 42ff0 <__errno> <== NOT EXECUTED
36828: e3a03005 mov r3, #5 <== NOT EXECUTED
3682c: e5803000 str r3, [r0] <== NOT EXECUTED
36830: e3e00000 mvn r0, #0 <== NOT EXECUTED
36834: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00036904 <msdos_file_sync>:
msdos_file_sync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36904: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_sync(rtems_libio_t *iop)
{
36908: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
3690c: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36910: e3a01000 mov r1, #0 <== NOT EXECUTED
* RETURNS:
* RC_OK on success, or -1 if error occured (errno set appropriately)
*/
int
msdos_file_sync(rtems_libio_t *iop)
{
36914: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36918: e1a02001 mov r2, r1 <== NOT EXECUTED
3691c: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
int
msdos_file_sync(rtems_libio_t *iop)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
fat_file_fd_t *fat_fd = iop->file_info;
36920: e5945038 ldr r5, [r4, #56] ; 0x38 <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36924: ebff56e6 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36928: e3500000 cmp r0, #0 <== NOT EXECUTED
3692c: 1a00001f bne 369b0 <msdos_file_sync+0xac> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
/* synchronize file data */
rc = fat_file_datasync(iop->pathinfo.mt_entry, fat_fd);
36930: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36934: e1a01005 mov r1, r5 <== NOT EXECUTED
36938: ebffba1d bl 251b4 <fat_file_datasync> <== NOT EXECUTED
if (rc != RC_OK)
3693c: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36940: 1a000016 bne 369a0 <msdos_file_sync+0x9c> <== NOT EXECUTED
/*
* if fat-file descriptor is not marked "removed" - synchronize file
* metadata
*/
if (!FAT_FILE_IS_REMOVED(fat_fd))
36944: e5d53030 ldrb r3, [r5, #48] ; 0x30 <== NOT EXECUTED
36948: e3130001 tst r3, #1 <== NOT EXECUTED
3694c: 1a00000e bne 3698c <msdos_file_sync+0x88> <== NOT EXECUTED
{
rc = msdos_set_first_cluster_num(iop->pathinfo.mt_entry, fat_fd);
36950: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36954: e1a01005 mov r1, r5 <== NOT EXECUTED
36958: eb000489 bl 37b84 <msdos_set_first_cluster_num> <== NOT EXECUTED
if (rc != RC_OK)
3695c: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36960: 1a00000e bne 369a0 <msdos_file_sync+0x9c> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
rc = msdos_set_file_size(iop->pathinfo.mt_entry, fat_fd);
36964: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36968: e1a01005 mov r1, r5 <== NOT EXECUTED
3696c: eb000464 bl 37b04 <msdos_set_file_size> <== NOT EXECUTED
if (rc != RC_OK)
36970: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36974: 1a000009 bne 369a0 <msdos_file_sync+0x9c> <== NOT EXECUTED
{
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
rc = msdos_set_dir_wrt_time_and_date(iop->pathinfo.mt_entry, fat_fd);
36978: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
3697c: e1a01005 mov r1, r5 <== NOT EXECUTED
36980: eb00050a bl 37db0 <msdos_set_dir_wrt_time_and_date> <== NOT EXECUTED
if (rc != RC_OK)
36984: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36988: 1a000004 bne 369a0 <msdos_file_sync+0x9c> <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
return rc;
}
}
rtems_semaphore_release(fs_info->vol_sema);
3698c: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36990: ebff5713 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
36994: e3a07000 mov r7, #0 <== NOT EXECUTED
return RC_OK;
}
36998: e1a00007 mov r0, r7 <== NOT EXECUTED
3699c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
return rc;
}
rc = msdos_set_dir_wrt_time_and_date(iop->pathinfo.mt_entry, fat_fd);
if (rc != RC_OK)
{
rtems_semaphore_release(fs_info->vol_sema);
369a0: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
369a4: ebff570e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
}
}
rtems_semaphore_release(fs_info->vol_sema);
return RC_OK;
}
369a8: e1a00007 mov r0, r7 <== NOT EXECUTED
369ac: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
369b0: eb00318e bl 42ff0 <__errno> <== NOT EXECUTED
369b4: e3a03005 mov r3, #5 <== NOT EXECUTED
369b8: e5803000 str r3, [r0] <== NOT EXECUTED
369bc: e3e07000 mvn r7, #0 <== NOT EXECUTED
369c0: eafffff4 b 36998 <msdos_file_sync+0x94> <== NOT EXECUTED
00036b44 <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)
{
36b44: e92d4df0 push {r4, r5, r6, r7, r8, sl, fp, lr} <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
36b48: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
36b4c: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
* 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)
{
36b50: e1a07001 mov r7, r1 <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36b54: e3a01000 mov r1, #0 <== NOT EXECUTED
* 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)
{
36b58: e1a04000 mov r4, r0 <== NOT EXECUTED
36b5c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
36b60: e1a0a002 mov sl, r2 <== NOT EXECUTED
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36b64: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36b68: e1a02001 mov r2, r1 <== NOT EXECUTED
msdos_file_write(rtems_libio_t *iop,const void *buffer, size_t count)
{
ssize_t ret = 0;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = iop->pathinfo.mt_entry->fs_info;
fat_file_fd_t *fat_fd = iop->file_info;
36b6c: e5945038 ldr r5, [r4, #56] ; 0x38 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36b70: ebff5653 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36b74: e2508000 subs r8, r0, #0 <== NOT EXECUTED
36b78: 1a00001b bne 36bec <msdos_file_write+0xa8> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
ret = fat_file_write(iop->pathinfo.mt_entry, fat_fd, iop->offset, count,
36b7c: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
36b80: e594200c ldr r2, [r4, #12] <== NOT EXECUTED
36b84: e1a0300a mov r3, sl <== NOT EXECUTED
36b88: e1a01005 mov r1, r5 <== NOT EXECUTED
36b8c: e58d7000 str r7, [sp] <== NOT EXECUTED
36b90: ebffbad7 bl 256f4 <fat_file_write> <== NOT EXECUTED
buffer);
if (ret < 0)
36b94: e2507000 subs r7, r0, #0 <== NOT EXECUTED
36b98: ba000018 blt 36c00 <msdos_file_write+0xbc> <== NOT EXECUTED
/*
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
if (iop->offset + ret > fat_fd->fat_file_size)
36b9c: e284200c add r2, r4, #12 <== NOT EXECUTED
36ba0: e8920006 ldm r2, {r1, r2} <== NOT EXECUTED
36ba4: e091a007 adds sl, r1, r7 <== NOT EXECUTED
36ba8: e0a2bfc7 adc fp, r2, r7, asr #31 <== NOT EXECUTED
36bac: e35b0000 cmp fp, #0 <== NOT EXECUTED
36bb0: e5953018 ldr r3, [r5, #24] <== NOT EXECUTED
36bb4: da000008 ble 36bdc <msdos_file_write+0x98> <== NOT EXECUTED
fat_fd->fat_file_size = iop->offset + ret;
36bb8: e0873001 add r3, r7, r1 <== NOT EXECUTED
36bbc: e5853018 str r3, [r5, #24] <== NOT EXECUTED
36bc0: e3a08000 mov r8, #0 <== NOT EXECUTED
iop->size = fat_fd->fat_file_size;
36bc4: e9840108 stmib r4, {r3, r8} <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36bc8: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36bcc: ebff5684 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return ret;
}
36bd0: e1a00007 mov r0, r7 <== NOT EXECUTED
36bd4: e28dd004 add sp, sp, #4 <== NOT EXECUTED
36bd8: e8bd8df0 pop {r4, r5, r6, r7, r8, sl, fp, pc} <== NOT EXECUTED
/*
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
if (iop->offset + ret > fat_fd->fat_file_size)
36bdc: 1afffff8 bne 36bc4 <msdos_file_write+0x80> <== NOT EXECUTED
36be0: e15a0003 cmp sl, r3 <== NOT EXECUTED
36be4: 9afffff6 bls 36bc4 <msdos_file_write+0x80> <== NOT EXECUTED
36be8: eafffff2 b 36bb8 <msdos_file_write+0x74> <== NOT EXECUTED
fat_file_fd_t *fat_fd = iop->file_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36bec: eb0030ff bl 42ff0 <__errno> <== NOT EXECUTED
36bf0: e3a03005 mov r3, #5 <== NOT EXECUTED
36bf4: e5803000 str r3, [r0] <== NOT EXECUTED
36bf8: e3e07000 mvn r7, #0 <== NOT EXECUTED
36bfc: eafffff3 b 36bd0 <msdos_file_write+0x8c> <== NOT EXECUTED
ret = fat_file_write(iop->pathinfo.mt_entry, fat_fd, iop->offset, count,
buffer);
if (ret < 0)
{
rtems_semaphore_release(fs_info->vol_sema);
36c00: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
36c04: ebff5676 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
36c08: e3e07000 mvn r7, #0 <== NOT EXECUTED
return -1;
36c0c: eaffffef b 36bd0 <msdos_file_write+0x8c> <== NOT EXECUTED
0004172c <msdos_filename_unix2dos>:
* Convert a unix filename to a DOS filename. Return -1 if wrong name is
* supplied.
*/
int
msdos_filename_unix2dos(const char *un, int unlen, char *dn)
{
4172c: e92d0030 push {r4, r5} <== NOT EXECUTED
41730: e3a03000 mov r3, #0 <== NOT EXECUTED
/*
* Fill the dos filename string with blanks. These are DOS's pad
* characters.
*/
for (i = 0; i <= 10; i++)
dn[i] = ' ';
41734: e3a0c020 mov ip, #32 <== NOT EXECUTED
41738: e7c2c003 strb ip, [r2, r3] <== NOT EXECUTED
/*
* Fill the dos filename string with blanks. These are DOS's pad
* characters.
*/
for (i = 0; i <= 10; i++)
4173c: e2833001 add r3, r3, #1 <== NOT EXECUTED
41740: e353000b cmp r3, #11 <== NOT EXECUTED
41744: 1afffffb bne 41738 <msdos_filename_unix2dos+0xc> <== NOT EXECUTED
/*
* The filenames "." and ".." are handled specially, since they
* don't follow dos filename rules.
*/
if (un[0] == '.' && unlen == 1) {
41748: e5d03000 ldrb r3, [r0] <== NOT EXECUTED
4174c: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
41750: 13a0c000 movne ip, #0 <== NOT EXECUTED
41754: 03a0c001 moveq ip, #1 <== NOT EXECUTED
41758: e3510001 cmp r1, #1 <== NOT EXECUTED
4175c: 0353002e cmpeq r3, #46 ; 0x2e <== NOT EXECUTED
dn[0] = '.';
41760: 03a0302e moveq r3, #46 ; 0x2e <== NOT EXECUTED
41764: 05c23000 strbeq r3, [r2] <== NOT EXECUTED
/*
* The filenames "." and ".." are handled specially, since they
* don't follow dos filename rules.
*/
if (un[0] == '.' && unlen == 1) {
41768: 0a000025 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
dn[0] = '.';
return 0;
}
if (un[0] == '.' && un[1] == '.' && unlen == 2) {
4176c: e35c0000 cmp ip, #0 <== NOT EXECUTED
41770: 1a00005c bne 418e8 <msdos_filename_unix2dos+0x1bc> <== NOT EXECUTED
}
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
41774: e3510000 cmp r1, #0 <== NOT EXECUTED
41778: 0a000021 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
4177c: e35c0000 cmp ip, #0 <== NOT EXECUTED
41780: 1a000025 bne 4181c <msdos_filename_unix2dos+0xf0> <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
41784: e3530000 cmp r3, #0 <== NOT EXECUTED
41788: 0a000028 beq 41830 <msdos_filename_unix2dos+0x104> <== NOT EXECUTED
4178c: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
41790: 0a000026 beq 41830 <msdos_filename_unix2dos+0x104> <== NOT EXECUTED
if (msdos_map[c] == 0)
41794: e59f416c ldr r4, [pc, #364] ; 41908 <msdos_filename_unix2dos+0x1dc><== NOT EXECUTED
41798: e7d4c003 ldrb ip, [r4, r3] <== NOT EXECUTED
4179c: e35c0000 cmp ip, #0 <== NOT EXECUTED
417a0: 11a05000 movne r5, r0 <== NOT EXECUTED
417a4: 13a03000 movne r3, #0 <== NOT EXECUTED
417a8: 1a000008 bne 417d0 <msdos_filename_unix2dos+0xa4> <== NOT EXECUTED
417ac: ea00001f b 41830 <msdos_filename_unix2dos+0x104> <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
417b0: e7d0c003 ldrb ip, [r0, r3] <== NOT EXECUTED
417b4: e35c0000 cmp ip, #0 <== NOT EXECUTED
417b8: 0a00001b beq 4182c <msdos_filename_unix2dos+0x100> <== NOT EXECUTED
417bc: e35c002e cmp ip, #46 ; 0x2e <== NOT EXECUTED
417c0: 0a000019 beq 4182c <msdos_filename_unix2dos+0x100> <== NOT EXECUTED
if (msdos_map[c] == 0)
417c4: e7d4c00c ldrb ip, [r4, ip] <== NOT EXECUTED
417c8: e35c0000 cmp ip, #0 <== NOT EXECUTED
417cc: 0a000016 beq 4182c <msdos_filename_unix2dos+0x100> <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
417d0: e2511001 subs r1, r1, #1 <== NOT EXECUTED
if (msdos_map[c] == 0)
break;
dn[i] = msdos_map[c];
417d4: e7c2c003 strb ip, [r2, r3] <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
417d8: 03a0c000 moveq ip, #0 <== NOT EXECUTED
417dc: 13a0c001 movne ip, #1 <== NOT EXECUTED
417e0: e2833001 add r3, r3, #1 <== NOT EXECUTED
417e4: e3530007 cmp r3, #7 <== NOT EXECUTED
417e8: c3a0c000 movgt ip, #0 <== NOT EXECUTED
417ec: d20cc001 andle ip, ip, #1 <== NOT EXECUTED
417f0: e35c0000 cmp ip, #0 <== NOT EXECUTED
if (msdos_map[c] == 0)
break;
dn[i] = msdos_map[c];
un++;
417f4: e2855001 add r5, r5, #1 <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
417f8: 1affffec bne 417b0 <msdos_filename_unix2dos+0x84> <== NOT EXECUTED
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
417fc: e3510000 cmp r1, #0 <== NOT EXECUTED
41800: 1a00000b bne 41834 <msdos_filename_unix2dos+0x108> <== NOT EXECUTED
dn[i] = msdos_map[c];
un++;
unlen--;
}
return 0;
}
41804: e3a00000 mov r0, #0 <== NOT EXECUTED
41808: e8bd0030 pop {r4, r5} <== NOT EXECUTED
4180c: e12fff1e bx lr <== NOT EXECUTED
}
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
41810: e5d03000 ldrb r3, [r0] <== NOT EXECUTED
41814: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
41818: 1affffd9 bne 41784 <msdos_filename_unix2dos+0x58> <== NOT EXECUTED
4181c: e2511001 subs r1, r1, #1 <== NOT EXECUTED
un++;
41820: e2800001 add r0, r0, #1 <== NOT EXECUTED
}
/*
* Remove any dots from the start of a file name.
*/
while (unlen && (*un == '.')) {
41824: 1afffff9 bne 41810 <msdos_filename_unix2dos+0xe4> <== NOT EXECUTED
41828: eafffff5 b 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
* Copy the unix filename into the dos filename string upto the end
* of string, a '.', or 8 characters. Whichever happens first stops
* us. This forms the name portion of the dos filename. Fold to
* upper case.
*/
for (i = 0; i <= 7 && unlen && (c = *un) && c != '.'; i++) {
4182c: e1a00005 mov r0, r5 <== NOT EXECUTED
41830: e1a05000 mov r5, r0 <== NOT EXECUTED
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
41834: e5d53000 ldrb r3, [r5] <== NOT EXECUTED
41838: e3530000 cmp r3, #0 <== NOT EXECUTED
4183c: 0afffff0 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
un++;
unlen--;
/* Make sure we've skipped over the dot before stopping. */
if (c == '.')
41840: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
un++;
41844: e285c001 add ip, r5, #1 <== NOT EXECUTED
unlen--;
41848: e2411001 sub r1, r1, #1 <== NOT EXECUTED
/* Make sure we've skipped over the dot before stopping. */
if (c == '.')
4184c: 0a000008 beq 41874 <msdos_filename_unix2dos+0x148> <== NOT EXECUTED
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
41850: e3510000 cmp r1, #0 <== NOT EXECUTED
41854: 0affffea beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
41858: e5dc3000 ldrb r3, [ip] <== NOT EXECUTED
4185c: e3530000 cmp r3, #0 <== NOT EXECUTED
41860: 0affffe7 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
un++;
unlen--;
/* Make sure we've skipped over the dot before stopping. */
if (c == '.')
41864: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
/*
* Strip any further characters up to a '.' or the end of the
* string.
*/
while (unlen && (c = *un)) {
un++;
41868: e28cc001 add ip, ip, #1 <== NOT EXECUTED
unlen--;
4186c: e2411001 sub r1, r1, #1 <== NOT EXECUTED
/* Make sure we've skipped over the dot before stopping. */
if (c == '.')
41870: 1afffff6 bne 41850 <msdos_filename_unix2dos+0x124> <== NOT EXECUTED
/*
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
41874: e3510000 cmp r1, #0 <== NOT EXECUTED
41878: 0affffe1 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
4187c: e5dc3000 ldrb r3, [ip] <== NOT EXECUTED
41880: e3530000 cmp r3, #0 <== NOT EXECUTED
41884: 0affffde beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
if (msdos_map[c] == 0)
41888: e59f4078 ldr r4, [pc, #120] ; 41908 <msdos_filename_unix2dos+0x1dc><== NOT EXECUTED
4188c: e7d40003 ldrb r0, [r4, r3] <== NOT EXECUTED
41890: e3500000 cmp r0, #0 <== NOT EXECUTED
41894: 13a03008 movne r3, #8 <== NOT EXECUTED
41898: 1a000007 bne 418bc <msdos_filename_unix2dos+0x190> <== NOT EXECUTED
4189c: eaffffd8 b 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
/*
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
418a0: e5dc0001 ldrb r0, [ip, #1] <== NOT EXECUTED
418a4: e3500000 cmp r0, #0 <== NOT EXECUTED
418a8: 0affffd5 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
if (msdos_map[c] == 0)
418ac: e7d40000 ldrb r0, [r4, r0] <== NOT EXECUTED
418b0: e3500000 cmp r0, #0 <== NOT EXECUTED
418b4: e28cc001 add ip, ip, #1 <== NOT EXECUTED
418b8: 0affffd1 beq 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
/*
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
418bc: e2511001 subs r1, r1, #1 <== NOT EXECUTED
if (msdos_map[c] == 0)
break;
dn[i] = msdos_map[c];
418c0: e7c20003 strb r0, [r2, r3] <== NOT EXECUTED
/*
* Copy in the extension part of the name, if any. Force to upper
* case. Note that the extension is allowed to contain '.'s.
* Filenames in this form are probably inaccessable under dos.
*/
for (i = 8; i <= 10 && unlen && (c = *un); i++) {
418c4: 03a00000 moveq r0, #0 <== NOT EXECUTED
418c8: 13a00001 movne r0, #1 <== NOT EXECUTED
418cc: e2833001 add r3, r3, #1 <== NOT EXECUTED
418d0: e353000a cmp r3, #10 <== NOT EXECUTED
418d4: c3a00000 movgt r0, #0 <== NOT EXECUTED
418d8: d2000001 andle r0, r0, #1 <== NOT EXECUTED
418dc: e3500000 cmp r0, #0 <== NOT EXECUTED
418e0: 1affffee bne 418a0 <msdos_filename_unix2dos+0x174> <== NOT EXECUTED
418e4: eaffffc6 b 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
*/
if (un[0] == '.' && unlen == 1) {
dn[0] = '.';
return 0;
}
if (un[0] == '.' && un[1] == '.' && unlen == 2) {
418e8: e5d04001 ldrb r4, [r0, #1] <== NOT EXECUTED
418ec: e354002e cmp r4, #46 ; 0x2e <== NOT EXECUTED
418f0: 03510002 cmpeq r1, #2 <== NOT EXECUTED
dn[0] = '.';
418f4: 03a0302e moveq r3, #46 ; 0x2e <== NOT EXECUTED
dn[1] = '.';
418f8: 05c23001 strbeq r3, [r2, #1] <== NOT EXECUTED
if (un[0] == '.' && unlen == 1) {
dn[0] = '.';
return 0;
}
if (un[0] == '.' && un[1] == '.' && unlen == 2) {
dn[0] = '.';
418fc: 05c23000 strbeq r3, [r2] <== NOT EXECUTED
*/
if (un[0] == '.' && unlen == 1) {
dn[0] = '.';
return 0;
}
if (un[0] == '.' && un[1] == '.' && unlen == 2) {
41900: 1affff9b bne 41774 <msdos_filename_unix2dos+0x48> <== NOT EXECUTED
41904: eaffffbe b 41804 <msdos_filename_unix2dos+0xd8> <== NOT EXECUTED
000384b8 <msdos_find_name>:
msdos_find_name(
rtems_filesystem_location_info_t *parent_loc,
const char *name,
int name_len
)
{
384b8: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
384bc: e24dd040 sub sp, sp, #64 ; 0x40 <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
384c0: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
384c4: e28d500c add r5, sp, #12 <== NOT EXECUTED
int name_len
)
{
int rc = RC_OK;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = NULL;
384c8: e3a04000 mov r4, #0 <== NOT EXECUTED
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
384cc: e285c008 add ip, r5, #8 <== NOT EXECUTED
const char *name,
int name_len
)
{
int rc = RC_OK;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
384d0: e593a034 ldr sl, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
384d4: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
384d8: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
384dc: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
384e0: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
384e4: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
msdos_find_name(
rtems_filesystem_location_info_t *parent_loc,
const char *name,
int name_len
)
{
384e8: e1a07001 mov r7, r1 <== NOT EXECUTED
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
384ec: e58c4000 str r4, [ip] <== NOT EXECUTED
name_type = msdos_long_to_short (name,
384f0: e1a01002 mov r1, r2 <== NOT EXECUTED
msdos_find_name(
rtems_filesystem_location_info_t *parent_loc,
const char *name,
int name_len
)
{
384f4: e1a06000 mov r6, r0 <== NOT EXECUTED
384f8: e1a08002 mov r8, r2 <== NOT EXECUTED
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
name_type = msdos_long_to_short (name,
384fc: e3a0300b mov r3, #11 <== NOT EXECUTED
38500: e1a02005 mov r2, r5 <== NOT EXECUTED
38504: e1a00007 mov r0, r7 <== NOT EXECUTED
int name_len
)
{
int rc = RC_OK;
msdos_fs_info_t *fs_info = parent_loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = NULL;
38508: e58d403c str r4, [sp, #60] ; 0x3c <== NOT EXECUTED
fat_dir_pos_t dir_pos;
unsigned short time_val = 0;
unsigned short date = 0;
char node_entry[MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE];
memset(node_entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
3850c: e58d400c str r4, [sp, #12] <== NOT EXECUTED
38510: e58d4010 str r4, [sp, #16] <== NOT EXECUTED
name_type = msdos_long_to_short (name,
38514: ebfffea6 bl 37fb4 <msdos_long_to_short> <== NOT EXECUTED
/*
* find the node which correspondes to the name in the directory pointed by
* 'parent_loc'
*/
rc = msdos_get_name_node(parent_loc, false, name, name_len, name_type,
38518: e1a01004 mov r1, r4 <== NOT EXECUTED
3851c: e58d0000 str r0, [sp] <== NOT EXECUTED
38520: e1a02007 mov r2, r7 <== NOT EXECUTED
38524: e1a03008 mov r3, r8 <== NOT EXECUTED
38528: e28d402c add r4, sp, #44 ; 0x2c <== NOT EXECUTED
3852c: e1a00006 mov r0, r6 <== NOT EXECUTED
38530: e98d0030 stmib sp, {r4, r5} <== NOT EXECUTED
38534: ebffffa7 bl 383d8 <msdos_get_name_node> <== NOT EXECUTED
&dir_pos, node_entry);
if (rc != RC_OK)
38538: e2507000 subs r7, r0, #0 <== NOT EXECUTED
3853c: 1a000019 bne 385a8 <msdos_find_name+0xf0> <== NOT EXECUTED
return rc;
if (((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_VOLUME_ID) ||
38540: e5dd3017 ldrb r3, [sp, #23] <== NOT EXECUTED
38544: e3130008 tst r3, #8 <== NOT EXECUTED
38548: 1a000019 bne 385b4 <msdos_find_name+0xfc> <== NOT EXECUTED
3854c: e203303f and r3, r3, #63 ; 0x3f <== NOT EXECUTED
38550: e353000f cmp r3, #15 <== NOT EXECUTED
38554: 0a000016 beq 385b4 <msdos_find_name+0xfc> <== NOT EXECUTED
((*MSDOS_DIR_ATTR(node_entry) & MSDOS_ATTR_LFN_MASK) == MSDOS_ATTR_LFN))
return MSDOS_NAME_NOT_FOUND_ERR;
/* open fat-file corresponded to the found node */
rc = fat_file_open(parent_loc->mt_entry, &dir_pos, &fat_fd);
38558: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
3855c: e1a01004 mov r1, r4 <== NOT EXECUTED
38560: e28d203c add r2, sp, #60 ; 0x3c <== NOT EXECUTED
38564: ebffb5a5 bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
38568: e2507000 subs r7, r0, #0 <== NOT EXECUTED
3856c: 1a00000d bne 385a8 <msdos_find_name+0xf0> <== NOT EXECUTED
return rc;
fat_fd->dir_pos = dir_pos;
38570: e59d703c ldr r7, [sp, #60] ; 0x3c <== NOT EXECUTED
* size and first cluster num to the disk after each write operation
* (even if one byte is written - that is TOO slow) because
* otherwise real values of these fields stored in fat-file descriptor
* may be accidentally rewritten with wrong values stored on the disk
*/
if (fat_fd->links_num == 1)
38574: e5978008 ldr r8, [r7, #8] <== NOT EXECUTED
/* open fat-file corresponded to the found node */
rc = fat_file_open(parent_loc->mt_entry, &dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
fat_fd->dir_pos = dir_pos;
38578: e894000f ldm r4, {r0, r1, r2, r3} <== NOT EXECUTED
3857c: e287c020 add ip, r7, #32 <== NOT EXECUTED
* size and first cluster num to the disk after each write operation
* (even if one byte is written - that is TOO slow) because
* otherwise real values of these fields stored in fat-file descriptor
* may be accidentally rewritten with wrong values stored on the disk
*/
if (fat_fd->links_num == 1)
38580: e3580001 cmp r8, #1 <== NOT EXECUTED
/* open fat-file corresponded to the found node */
rc = fat_file_open(parent_loc->mt_entry, &dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
fat_fd->dir_pos = dir_pos;
38584: e88c000f stm ip, {r0, r1, r2, r3} <== NOT EXECUTED
* size and first cluster num to the disk after each write operation
* (even if one byte is written - that is TOO slow) because
* otherwise real values of these fields stored in fat-file descriptor
* may be accidentally rewritten with wrong values stored on the disk
*/
if (fat_fd->links_num == 1)
38588: 0a00000c beq 385c0 <msdos_find_name+0x108> <== NOT EXECUTED
fat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
}
}
/* close fat-file corresponded to the node we searched in */
rc = fat_file_close(parent_loc->mt_entry, parent_loc->node_access);
3858c: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
38590: e5961000 ldr r1, [r6] <== NOT EXECUTED
38594: ebffb56f bl 25b58 <fat_file_close> <== NOT EXECUTED
if (rc != RC_OK)
38598: e2507000 subs r7, r0, #0 <== NOT EXECUTED
3859c: 1a000030 bne 38664 <msdos_find_name+0x1ac> <== NOT EXECUTED
fat_file_close(parent_loc->mt_entry, fat_fd);
return rc;
}
/* update node_info_ptr field */
parent_loc->node_access = fat_fd;
385a0: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
385a4: e5863000 str r3, [r6] <== NOT EXECUTED
return rc;
}
385a8: e1a00007 mov r0, r7 <== NOT EXECUTED
385ac: e28dd040 add sp, sp, #64 ; 0x40 <== NOT EXECUTED
385b0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
}
/* update node_info_ptr field */
parent_loc->node_access = fat_fd;
return rc;
385b4: e3a07c7d mov r7, #32000 ; 0x7d00 <== NOT EXECUTED
385b8: e2877001 add r7, r7, #1 <== NOT EXECUTED
385bc: eafffff9 b 385a8 <msdos_find_name+0xf0> <== NOT EXECUTED
* otherwise real values of these fields stored in fat-file descriptor
* may be accidentally rewritten with wrong values stored on the disk
*/
if (fat_fd->links_num == 1)
{
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(node_entry);
385c0: e1d521b4 ldrh r2, [r5, #20] <== NOT EXECUTED
385c4: e1d531ba ldrh r3, [r5, #26] <== NOT EXECUTED
385c8: e1833802 orr r3, r3, r2, lsl #16 <== NOT EXECUTED
385cc: e587301c str r3, [r7, #28] <== NOT EXECUTED
time_val = *MSDOS_DIR_WRITE_TIME(node_entry);
date = *MSDOS_DIR_WRITE_DATE(node_entry);
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
385d0: e1d501b8 ldrh r0, [r5, #24] <== NOT EXECUTED
385d4: e1d511b6 ldrh r1, [r5, #22] <== NOT EXECUTED
385d8: eb00240b bl 4160c <msdos_date_dos2unix> <== NOT EXECUTED
385dc: e5870040 str r0, [r7, #64] ; 0x40 <== NOT EXECUTED
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
385e0: e5dd3017 ldrb r3, [sp, #23] <== NOT EXECUTED
385e4: e3130010 tst r3, #16 <== NOT EXECUTED
385e8: 1a000014 bne 38640 <msdos_find_name+0x188> <== NOT EXECUTED
return rc;
}
}
else
{
fat_fd->fat_file_size = CF_LE_L(*MSDOS_DIR_FILE_SIZE(node_entry));
385ec: e595201c ldr r2, [r5, #28] <== NOT EXECUTED
385f0: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
385f4: e5832018 str r2, [r3, #24] <== NOT EXECUTED
fat_fd->fat_file_type = FAT_FILE;
385f8: e3a02005 mov r2, #5 <== NOT EXECUTED
385fc: e5832010 str r2, [r3, #16] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
38600: e3e02000 mvn r2, #0 <== NOT EXECUTED
38604: e5832014 str r2, [r3, #20] <== NOT EXECUTED
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
if ((fat_fd->fat_file_size != 0) &&
38608: e5932018 ldr r2, [r3, #24] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
}
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
3860c: e593101c ldr r1, [r3, #28] <== NOT EXECUTED
fat_fd->fat_file_type = FAT_FILE;
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
}
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
38610: e3a00000 mov r0, #0 <== NOT EXECUTED
fat_fd->map.disk_cln = fat_fd->cln;
if ((fat_fd->fat_file_size != 0) &&
38614: e3520000 cmp r2, #0 <== NOT EXECUTED
fat_fd->fat_file_type = FAT_FILE;
fat_fd->size_limit = MSDOS_MAX_FILE_SIZE;
}
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
38618: e5830034 str r0, [r3, #52] ; 0x34 <== NOT EXECUTED
fat_fd->map.disk_cln = fat_fd->cln;
3861c: e5831038 str r1, [r3, #56] ; 0x38 <== NOT EXECUTED
if ((fat_fd->fat_file_size != 0) &&
38620: 0a000003 beq 38634 <msdos_find_name+0x17c> <== NOT EXECUTED
(fat_fd->fat_file_size <= fs_info->fat.vol.bpc))
38624: e1da00b6 ldrh r0, [sl, #6] <== NOT EXECUTED
38628: e1520000 cmp r2, r0 <== NOT EXECUTED
{
fat_fd->map.last_cln = fat_fd->cln;
3862c: 9583103c strls r1, [r3, #60] ; 0x3c <== NOT EXECUTED
/* these data is not actual for zero-length fat-file */
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
if ((fat_fd->fat_file_size != 0) &&
(fat_fd->fat_file_size <= fs_info->fat.vol.bpc))
38630: 9affffd5 bls 3858c <msdos_find_name+0xd4> <== NOT EXECUTED
{
fat_fd->map.last_cln = fat_fd->cln;
}
else
{
fat_fd->map.last_cln = FAT_UNDEFINED_VALUE;
38634: e3e02000 mvn r2, #0 <== NOT EXECUTED
38638: e583203c str r2, [r3, #60] ; 0x3c <== NOT EXECUTED
3863c: eaffffd2 b 3858c <msdos_find_name+0xd4> <== NOT EXECUTED
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
{
fat_fd->fat_file_type = FAT_DIRECTORY;
38640: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
38644: e3a03602 mov r3, #2097152 ; 0x200000 <== NOT EXECUTED
38648: e5813014 str r3, [r1, #20] <== NOT EXECUTED
fat_fd->mtime = msdos_date_dos2unix(CF_LE_W(date), CF_LE_W(time_val));
if ((*MSDOS_DIR_ATTR(node_entry)) & MSDOS_ATTR_DIRECTORY)
{
fat_fd->fat_file_type = FAT_DIRECTORY;
3864c: e5818010 str r8, [r1, #16] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
rc = fat_file_size(parent_loc->mt_entry, fat_fd);
38650: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
38654: ebffb274 bl 2502c <fat_file_size> <== NOT EXECUTED
if (rc != RC_OK)
38658: e2507000 subs r7, r0, #0 <== NOT EXECUTED
3865c: 059d303c ldreq r3, [sp, #60] ; 0x3c <== NOT EXECUTED
38660: 0affffe8 beq 38608 <msdos_find_name+0x150> <== NOT EXECUTED
/* close fat-file corresponded to the node we searched in */
rc = fat_file_close(parent_loc->mt_entry, parent_loc->node_access);
if (rc != RC_OK)
{
fat_file_close(parent_loc->mt_entry, fat_fd);
38664: e5960010 ldr r0, [r6, #16] <== NOT EXECUTED
38668: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
3866c: ebffb539 bl 25b58 <fat_file_close> <== NOT EXECUTED
return rc;
38670: eaffffcc b 385a8 <msdos_find_name+0xf0> <== NOT EXECUTED
00036fd0 <msdos_find_name_in_fat_file>:
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
36fd0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
36fd4: e24dd060 sub sp, sp, #96 ; 0x60 <== NOT EXECUTED
36fd8: e58d0030 str r0, [sp, #48] ; 0x30 <== NOT EXECUTED
36fdc: e58d1028 str r1, [sp, #40] ; 0x28 <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
36fe0: e59d1030 ldr r1, [sp, #48] ; 0x30 <== NOT EXECUTED
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
assert(name_len > 0);
36fe4: e59d0084 ldr r0, [sp, #132] ; 0x84 <== NOT EXECUTED
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
36fe8: e5911034 ldr r1, [r1, #52] ; 0x34 <== NOT EXECUTED
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
36fec: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
assert(name_len > 0);
36ff0: e3500000 cmp r0, #0 <== NOT EXECUTED
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
36ff4: e58d3040 str r3, [sp, #64] ; 0x40 <== NOT EXECUTED
36ff8: e58d200c str r2, [sp, #12] <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
36ffc: e58d1024 str r1, [sp, #36] ; 0x24 <== NOT EXECUTED
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
assert(name_len > 0);
37000: da00025f ble 37984 <msdos_find_name_in_fat_file+0x9b4> <== NOT EXECUTED
* is short still check for possible long entries with the short name.
*
* In PR1491 we need to have a LFN for a short file name entry. To
* test this make this test always fail, ie add "0 &&".
*/
if (create_node && (name_type == MSDOS_NAME_SHORT))
37004: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
37008: e59dc08c ldr ip, [sp, #140] ; 0x8c <== NOT EXECUTED
static inline void
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
3700c: e3a03000 mov r3, #0 <== NOT EXECUTED
37010: e3520000 cmp r2, #0 <== NOT EXECUTED
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
37014: e3e02000 mvn r2, #0 <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
37018: e58c200c str r2, [ip, #12] <== NOT EXECUTED
static inline void
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
3701c: e58c3000 str r3, [ip] <== NOT EXECUTED
dir_pos->sname.ofs = 0;
37020: e58c3004 str r3, [ip, #4] <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
37024: e58c2008 str r2, [ip, #8] <== NOT EXECUTED
37028: 0a000002 beq 37038 <msdos_find_name_in_fat_file+0x68> <== NOT EXECUTED
3702c: e59d0088 ldr r0, [sp, #136] ; 0x88 <== NOT EXECUTED
37030: e3500001 cmp r0, #1 <== NOT EXECUTED
37034: 0a000005 beq 37050 <msdos_find_name_in_fat_file+0x80> <== NOT EXECUTED
lfn_entries = 0;
else
lfn_entries =
37038: e59d1084 ldr r1, [sp, #132] ; 0x84 <== NOT EXECUTED
3703c: e281300c add r3, r1, #12 <== NOT EXECUTED
37040: e59f1954 ldr r1, [pc, #2388] ; 3799c <msdos_find_name_in_fat_file+0x9cc><== NOT EXECUTED
37044: e0c2c391 smull ip, r2, r1, r3 <== NOT EXECUTED
37048: e1a03fc3 asr r3, r3, #31 <== NOT EXECUTED
3704c: e0633142 rsb r3, r3, r2, asr #2 <== NOT EXECUTED
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
37050: e59d0028 ldr r0, [sp, #40] ; 0x28 <== NOT EXECUTED
* test this make this test always fail, ie add "0 &&".
*/
if (create_node && (name_type == MSDOS_NAME_SHORT))
lfn_entries = 0;
else
lfn_entries =
37054: e58d3038 str r3, [sp, #56] ; 0x38 <== NOT EXECUTED
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
37058: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
3705c: e3530001 cmp r3, #1 <== NOT EXECUTED
37060: 0a00016f beq 37624 <msdos_find_name_in_fat_file+0x654> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
37064: e59d2024 ldr r2, [sp, #36] ; 0x24 <== NOT EXECUTED
37068: e1d290b6 ldrh r9, [r2, #6] <== NOT EXECUTED
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
3706c: e59d0038 ldr r0, [sp, #56] ; 0x38 <== NOT EXECUTED
assert(name_len > 0);
fat_dir_pos_init(dir_pos);
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
37070: e3a03000 mov r3, #0 <== NOT EXECUTED
37074: e59dc024 ldr ip, [sp, #36] ; 0x24 <== NOT EXECUTED
37078: e3a0a000 mov sl, #0 <== NOT EXECUTED
3707c: e58d301c str r3, [sp, #28] <== NOT EXECUTED
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
37080: e2800001 add r0, r0, #1 <== NOT EXECUTED
assert(name_len > 0);
fat_dir_pos_init(dir_pos);
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
37084: e3e03000 mvn r3, #0 <== NOT EXECUTED
37088: e58d3058 str r3, [sp, #88] ; 0x58 <== NOT EXECUTED
3708c: e58d3054 str r3, [sp, #84] ; 0x54 <== NOT EXECUTED
37090: e59cb098 ldr fp, [ip, #152] ; 0x98 <== NOT EXECUTED
37094: e58da014 str sl, [sp, #20] <== NOT EXECUTED
37098: e58da010 str sl, [sp, #16] <== NOT EXECUTED
3709c: e58da02c str sl, [sp, #44] ; 0x2c <== NOT EXECUTED
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
370a0: e58d0020 str r0, [sp, #32] <== NOT EXECUTED
370a4: e58da034 str sl, [sp, #52] ; 0x34 <== NOT EXECUTED
assert(name_len > 0);
fat_dir_pos_init(dir_pos);
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
370a8: e1a0700a mov r7, sl <== NOT EXECUTED
370ac: e1a0600a mov r6, sl <== NOT EXECUTED
370b0: e1a0800a mov r8, sl <== NOT EXECUTED
/*
* Scan the directory seeing if the file is present. While
* doing this see if a suitable location can be found to
* create the entry if the name is not found.
*/
while ((ret = fat_file_read(mt_entry, fat_fd, (dir_offset * bts2rd),
370b4: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
370b8: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
370bc: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
370c0: e1a03009 mov r3, r9 <== NOT EXECUTED
370c4: e58db000 str fp, [sp] <== NOT EXECUTED
370c8: ebffba1f bl 2594c <fat_file_read> <== NOT EXECUTED
370cc: e3500000 cmp r0, #0 <== NOT EXECUTED
370d0: 0a0001fa beq 378c0 <msdos_find_name_in_fat_file+0x8f0> <== NOT EXECUTED
bool remainder_empty = false;
#if MSDOS_FIND_PRINT
printf ("MSFS:[2] dir_offset:%li\n", dir_offset);
#endif
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
370d4: e350001f cmp r0, #31 <== NOT EXECUTED
370d8: da0001db ble 3784c <msdos_find_name_in_fat_file+0x87c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
370dc: e1500009 cmp r0, r9 <== NOT EXECUTED
370e0: 1a000221 bne 3796c <msdos_find_name_in_fat_file+0x99c> <== NOT EXECUTED
370e4: e59d1024 ldr r1, [sp, #36] ; 0x24 <== NOT EXECUTED
370e8: e591b098 ldr fp, [r1, #152] ; 0x98 <== NOT EXECUTED
370ec: e3a05000 mov r5, #0 <== NOT EXECUTED
370f0: e1a0400b mov r4, fp <== NOT EXECUTED
370f4: e59d1034 ldr r1, [sp, #52] ; 0x34 <== NOT EXECUTED
370f8: e59dc02c ldr ip, [sp, #44] ; 0x2c <== NOT EXECUTED
370fc: ea000018 b 37164 <msdos_find_name_in_fat_file+0x194> <== NOT EXECUTED
* A valid entry so handle it.
*
* If empty space has not been found we need to start the
* count again.
*/
if (create_node && !empty_space_found)
37100: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
37104: e3530000 cmp r3, #0 <== NOT EXECUTED
37108: 0a000002 beq 37118 <msdos_find_name_in_fat_file+0x148> <== NOT EXECUTED
3710c: e35a0000 cmp sl, #0 <== NOT EXECUTED
37110: 01a0600a moveq r6, sl <== NOT EXECUTED
37114: 01a0700a moveq r7, sl <== NOT EXECUTED
/*
* Check the attribute to see if the entry is for a long
* file name.
*/
if ((*MSDOS_DIR_ATTR(entry) & MSDOS_ATTR_LFN_MASK) ==
37118: e5d4300b ldrb r3, [r4, #11] <== NOT EXECUTED
3711c: e203303f and r3, r3, #63 ; 0x3f <== NOT EXECUTED
37120: e353000f cmp r3, #15 <== NOT EXECUTED
37124: 0a00005a beq 37294 <msdos_find_name_in_fat_file+0x2c4> <== NOT EXECUTED
* If a LFN has been found and it matched check the
* entries have all been found and the checksum is
* correct. If this is the case return the short file
* name entry.
*/
if (lfn_matched)
37128: e3510000 cmp r1, #0 <== NOT EXECUTED
3712c: 13a03000 movne r3, #0 <== NOT EXECUTED
37130: 11a01003 movne r1, r3 <== NOT EXECUTED
37134: 11a00003 movne r0, r3 <== NOT EXECUTED
37138: 1a000027 bne 371dc <msdos_find_name_in_fat_file+0x20c> <== NOT EXECUTED
* short and they match then we have the entry. We will not
* match a long file name against a short file name because
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
3713c: e59d3088 ldr r3, [sp, #136] ; 0x88 <== NOT EXECUTED
37140: e3530001 cmp r3, #1 <== NOT EXECUTED
37144: 0a00005e beq 372c4 <msdos_find_name_in_fat_file+0x2f4> <== NOT EXECUTED
memcpy(name_dir_entry, entry,
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
return RC_OK;
}
lfn_start.cln = FAT_FILE_SHORT_NAME;
37148: e3e02000 mvn r2, #0 <== NOT EXECUTED
3714c: e58d2054 str r2, [sp, #84] ; 0x54 <== NOT EXECUTED
37150: e3a01000 mov r1, #0 <== NOT EXECUTED
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
37154: e2855020 add r5, r5, #32 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
37158: e1590005 cmp r9, r5 <== NOT EXECUTED
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
3715c: e2844020 add r4, r4, #32 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
37160: 9a000012 bls 371b0 <msdos_find_name_in_fat_file+0x1e0> <== NOT EXECUTED
/*
* See if the entry is empty or the remainder of the directory is
* empty ? Localise to make the code read better.
*/
bool entry_empty = (*MSDOS_DIR_ENTRY_TYPE(entry) ==
37164: e7db2005 ldrb r2, [fp, r5] <== NOT EXECUTED
* to here and write the long file name if this is the start of
* a series of empty entries. If empty_space_count is 0 then
* we are currently not inside an empty series of entries. It
* is a count of empty entries.
*/
if (empty_space_count == 0)
37168: e3570000 cmp r7, #0 <== NOT EXECUTED
3716c: 01a0800c moveq r8, ip <== NOT EXECUTED
37170: 01a06005 moveq r6, r5 <== NOT EXECUTED
{
empty_space_entry = dir_entry;
empty_space_offset = dir_offset;
}
if (remainder_empty)
37174: e3520000 cmp r2, #0 <== NOT EXECUTED
37178: 0a00009a beq 373e8 <msdos_find_name_in_fat_file+0x418> <== NOT EXECUTED
printf ("MSFS:[3.2] esf:%i esc%i\n", empty_space_found, empty_space_count);
#endif
}
break;
}
else if (entry_empty)
3717c: e35200e5 cmp r2, #229 ; 0xe5 <== NOT EXECUTED
37180: 1affffde bne 37100 <msdos_find_name_in_fat_file+0x130> <== NOT EXECUTED
{
if (create_node)
37184: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
37188: e3530000 cmp r3, #0 <== NOT EXECUTED
3718c: 0afffff0 beq 37154 <msdos_find_name_in_fat_file+0x184> <== NOT EXECUTED
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
37190: e59d0020 ldr r0, [sp, #32] <== NOT EXECUTED
if (create_node)
{
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
37194: e2877001 add r7, r7, #1 <== NOT EXECUTED
if (empty_space_count == (lfn_entries + 1))
37198: e1500007 cmp r0, r7 <== NOT EXECUTED
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
3719c: e2855020 add r5, r5, #32 <== NOT EXECUTED
/*
* Remainder is not empty so is this entry empty ?
*/
empty_space_count++;
if (empty_space_count == (lfn_entries + 1))
371a0: 03a0a001 moveq sl, #1 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
371a4: e1590005 cmp r9, r5 <== NOT EXECUTED
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
371a8: e2844020 add r4, r4, #32 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
371ac: 8affffec bhi 37164 <msdos_find_name_in_fat_file+0x194> <== NOT EXECUTED
371b0: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
}
if (remainder_empty)
break;
dir_offset++;
371b4: e59dc02c ldr ip, [sp, #44] ; 0x2c <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
371b8: e0833009 add r3, r3, r9 <== NOT EXECUTED
}
if (remainder_empty)
break;
dir_offset++;
371bc: e28cc001 add ip, ip, #1 <== NOT EXECUTED
371c0: e58d1034 str r1, [sp, #52] ; 0x34 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
/* have to look at the DIR_NAME as "raw" 8-bit data */
for (dir_entry = 0;
371c4: e58d301c str r3, [sp, #28] <== NOT EXECUTED
}
if (remainder_empty)
break;
dir_offset++;
371c8: e58dc02c str ip, [sp, #44] ; 0x2c <== NOT EXECUTED
371cc: eaffffb8 b 370b4 <msdos_find_name_in_fat_file+0xe4> <== NOT EXECUTED
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
371d0: e2100001 ands r0, r0, #1 <== NOT EXECUTED
371d4: e7d42003 ldrb r2, [r4, r3] <== NOT EXECUTED
371d8: 13a00080 movne r0, #128 ; 0x80 <== NOT EXECUTED
371dc: e0820000 add r0, r2, r0 <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
371e0: e2833001 add r3, r3, #1 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
371e4: e08000a1 add r0, r0, r1, lsr #1 <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
371e8: e353000b cmp r3, #11 <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
371ec: e20010ff and r1, r0, #255 ; 0xff <== NOT EXECUTED
{
uint8_t cs = 0;
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(entry);
int i;
for (i = 0; i < MSDOS_SHORT_NAME_LEN; i++, p++)
371f0: 1afffff6 bne 371d0 <msdos_find_name_in_fat_file+0x200> <== NOT EXECUTED
cs = ((cs & 1) ? 0x80 : 0) + (cs >> 1) + *p;
if (lfn_entry || (lfn_checksum != cs))
371f4: e28d0010 add r0, sp, #16 <== NOT EXECUTED
371f8: e8900005 ldm r0, {r0, r2} <== NOT EXECUTED
371fc: e3520000 cmp r2, #0 <== NOT EXECUTED
37200: 01500001 cmpeq r0, r1 <== NOT EXECUTED
37204: 1affffcc bne 3713c <msdos_find_name_in_fat_file+0x16c> <== NOT EXECUTED
#endif
/*
* We get the entry we looked for - fill the position
* structure and the 32 bytes of the short entry
*/
int rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
37208: e59dc08c ldr ip, [sp, #140] ; 0x8c <== NOT EXECUTED
3720c: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
37210: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
37214: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
37218: e3a02001 mov r2, #1 <== NOT EXECUTED
3721c: e58dc000 str ip, [sp] <== NOT EXECUTED
37220: ebffb83f bl 25324 <fat_file_ioctl> <== NOT EXECUTED
dir_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
37224: e3500000 cmp r0, #0 <== NOT EXECUTED
37228: 1a000017 bne 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
return rc;
dir_pos->sname.ofs = dir_entry;
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
3722c: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
dir_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = dir_entry;
37230: e59d008c ldr r0, [sp, #140] ; 0x8c <== NOT EXECUTED
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
37234: e3730001 cmn r3, #1 <== NOT EXECUTED
dir_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = dir_entry;
37238: e5805004 str r5, [r0, #4] <== NOT EXECUTED
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
3723c: 0a000009 beq 37268 <msdos_find_name_in_fat_file+0x298> <== NOT EXECUTED
{
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
37240: e28dc054 add ip, sp, #84 ; 0x54 <== NOT EXECUTED
37244: e0030399 mul r3, r9, r3 <== NOT EXECUTED
37248: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
3724c: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
37250: e3a02001 mov r2, #1 <== NOT EXECUTED
37254: e58dc000 str ip, [sp] <== NOT EXECUTED
37258: ebffb831 bl 25324 <fat_file_ioctl> <== NOT EXECUTED
lfn_start.cln * bts2rd,
&lfn_start.cln);
if (rc != RC_OK)
3725c: e3500000 cmp r0, #0 <== NOT EXECUTED
37260: 1a000009 bne 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
37264: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
dir_pos->lname.ofs = lfn_start.ofs;
37268: e59d108c ldr r1, [sp, #140] ; 0x8c <== NOT EXECUTED
3726c: e59d2058 ldr r2, [sp, #88] ; 0x58 <== NOT EXECUTED
&lfn_start.cln);
if (rc != RC_OK)
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
37270: e5813008 str r3, [r1, #8] <== NOT EXECUTED
dir_pos->lname.ofs = lfn_start.ofs;
37274: e581200c str r2, [r1, #12] <== NOT EXECUTED
memcpy(name_dir_entry, entry,
37278: e59d0090 ldr r0, [sp, #144] ; 0x90 <== NOT EXECUTED
3727c: e1a01004 mov r1, r4 <== NOT EXECUTED
37280: e3a02020 mov r2, #32 <== NOT EXECUTED
37284: eb003c09 bl 462b0 <memcpy> <== NOT EXECUTED
37288: e3a00000 mov r0, #0 <== NOT EXECUTED
empty_space_entry = 0;
read_cluster = true;
}
return 0;
}
3728c: e28dd060 add sp, sp, #96 ; 0x60 <== NOT EXECUTED
37290: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
#endif
/*
* If we are not already processing a LFN see if this is
* the first entry of a LFN ?
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
37294: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
37298: e3730001 cmn r3, #1 <== NOT EXECUTED
3729c: 159d3010 ldrne r3, [sp, #16] <== NOT EXECUTED
372a0: 0a000013 beq 372f4 <msdos_find_name_in_fat_file+0x324> <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These
* could be orphaned entries depending on the history
* of the disk.
*/
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
372a4: e202003f and r0, r2, #63 ; 0x3f <== NOT EXECUTED
372a8: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
372ac: e1500002 cmp r0, r2 <== NOT EXECUTED
372b0: 0a000017 beq 37314 <msdos_find_name_in_fat_file+0x344> <== NOT EXECUTED
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
{
#if MSDOS_FIND_PRINT
printf ("MSFS:[4.4] no match\n");
#endif
lfn_start.cln = FAT_FILE_SHORT_NAME;
372b4: e3e00000 mvn r0, #0 <== NOT EXECUTED
372b8: e58d0054 str r0, [sp, #84] ; 0x54 <== NOT EXECUTED
372bc: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
continue;
372c0: eaffffa3 b 37154 <msdos_find_name_in_fat_file+0x184> <== NOT EXECUTED
* short and they match then we have the entry. We will not
* match a long file name against a short file name because
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
372c4: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
372c8: e3730001 cmn r3, #1 <== NOT EXECUTED
372cc: 1affff9d bne 37148 <msdos_find_name_in_fat_file+0x178> <== NOT EXECUTED
((name_type == MSDOS_NAME_SHORT) &&
(lfn_start.cln == FAT_FILE_SHORT_NAME) &&
(memcmp(MSDOS_DIR_NAME(entry),
372d0: e1a00004 mov r0, r4 <== NOT EXECUTED
372d4: e59d1090 ldr r1, [sp, #144] ; 0x90 <== NOT EXECUTED
372d8: e3a0200b mov r2, #11 <== NOT EXECUTED
372dc: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
372e0: eb003bc8 bl 46208 <memcmp> <== NOT EXECUTED
* short and they match then we have the entry. We will not
* match a long file name against a short file name because
* a long file name that generates a matching short file
* name is not a long file name.
*/
if (lfn_matched ||
372e4: e3500000 cmp r0, #0 <== NOT EXECUTED
372e8: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
372ec: 1affff95 bne 37148 <msdos_find_name_in_fat_file+0x178> <== NOT EXECUTED
372f0: eaffffc4 b 37208 <msdos_find_name_in_fat_file+0x238> <== NOT EXECUTED
/*
* The first entry must have the last long entry
* flag set.
*/
if ((*MSDOS_DIR_ENTRY_TYPE(entry) &
372f4: e3120040 tst r2, #64 ; 0x40 <== NOT EXECUTED
372f8: 0a000003 beq 3730c <msdos_find_name_in_fat_file+0x33c> <== NOT EXECUTED
* entry match the number we expect for this
* file name. Note we do not know the number of
* characters in the entry so this is check further
* on when the characters are checked.
*/
if (lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
372fc: e59d0038 ldr r0, [sp, #56] ; 0x38 <== NOT EXECUTED
37300: e202203f and r2, r2, #63 ; 0x3f <== NOT EXECUTED
37304: e1520000 cmp r2, r0 <== NOT EXECUTED
37308: 0a0000b2 beq 375d8 <msdos_find_name_in_fat_file+0x608> <== NOT EXECUTED
memcpy(name_dir_entry, entry,
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
return RC_OK;
}
lfn_start.cln = FAT_FILE_SHORT_NAME;
3730c: e3a01000 mov r1, #0 <== NOT EXECUTED
37310: eaffff8f b 37154 <msdos_find_name_in_fat_file+0x184> <== NOT EXECUTED
* could be orphaned entries depending on the history
* of the disk.
*/
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
MSDOS_LAST_LONG_ENTRY_MASK)) ||
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
37314: e5d4200d ldrb r2, [r4, #13] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These
* could be orphaned entries depending on the history
* of the disk.
*/
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
37318: e1520003 cmp r2, r3 <== NOT EXECUTED
MSDOS_LAST_LONG_ENTRY_MASK)) ||
(lfn_checksum != *MSDOS_DIR_LFN_CHECKSUM(entry)))
3731c: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
* If the entry number or the check sum do not match
* forget this series of long directory entries. These
* could be orphaned entries depending on the history
* of the disk.
*/
if ((lfn_entry != (*MSDOS_DIR_ENTRY_TYPE(entry) &
37320: 1affffe3 bne 372b4 <msdos_find_name_in_fat_file+0x2e4> <== NOT EXECUTED
#endif
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
37324: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
37328: e2411001 sub r1, r1, #1 <== NOT EXECUTED
o = lfn_entry * MSDOS_LFN_LEN_PER_ENTRY;
3732c: e0813081 add r3, r1, r1, lsl #1 <== NOT EXECUTED
37330: e0813103 add r3, r1, r3, lsl #2 <== NOT EXECUTED
37334: e58d3034 str r3, [sp, #52] ; 0x34 <== NOT EXECUTED
37338: e2842001 add r2, r4, #1 <== NOT EXECUTED
3733c: e58d203c str r2, [sp, #60] ; 0x3c <== NOT EXECUTED
#endif
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
37340: e58d1014 str r1, [sp, #20] <== NOT EXECUTED
((o + i) != name_len))
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
if (((o + i) >= name_len) || (*p != name[o + i]))
37344: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
37348: e59d1040 ldr r1, [sp, #64] ; 0x40 <== NOT EXECUTED
3734c: e0811002 add r1, r1, r2 <== NOT EXECUTED
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
o = lfn_entry * MSDOS_LFN_LEN_PER_ENTRY;
37350: e3a03001 mov r3, #1 <== NOT EXECUTED
((o + i) != name_len))
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
if (((o + i) >= name_len) || (*p != name[o + i]))
37354: e58d1004 str r1, [sp, #4] <== NOT EXECUTED
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
o = lfn_entry * MSDOS_LFN_LEN_PER_ENTRY;
37358: e58d3018 str r3, [sp, #24] <== NOT EXECUTED
3735c: e58d5044 str r5, [sp, #68] ; 0x44 <== NOT EXECUTED
37360: e58d0050 str r0, [sp, #80] ; 0x50 <== NOT EXECUTED
37364: e58db04c str fp, [sp, #76] ; 0x4c <== NOT EXECUTED
37368: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
3736c: e1a0b007 mov fp, r7 <== NOT EXECUTED
37370: e58da03c str sl, [sp, #60] ; 0x3c <== NOT EXECUTED
37374: e3a03000 mov r3, #0 <== NOT EXECUTED
37378: e58d4048 str r4, [sp, #72] ; 0x48 <== NOT EXECUTED
3737c: e3a00001 mov r0, #1 <== NOT EXECUTED
37380: e1a05002 mov r5, r2 <== NOT EXECUTED
37384: e59d7084 ldr r7, [sp, #132] ; 0x84 <== NOT EXECUTED
37388: e59da004 ldr sl, [sp, #4] <== NOT EXECUTED
3738c: ea000006 b 373ac <msdos_find_name_in_fat_file+0x3dc> <== NOT EXECUTED
{
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
switch (i)
37390: e353000a cmp r3, #10 <== NOT EXECUTED
37394: 0a000011 beq 373e0 <msdos_find_name_in_fat_file+0x410> <== NOT EXECUTED
p = entry + 1;
#if MSDOS_FIND_PRINT
printf ("MSFS:[5] lfne:%i\n", lfn_entry);
#endif
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
37398: e350000c cmp r0, #12 <== NOT EXECUTED
3739c: ca000094 bgt 375f4 <msdos_find_name_in_fat_file+0x624> <== NOT EXECUTED
break;
case 10:
p += 4;
break;
default:
p += 2;
373a0: e2811002 add r1, r1, #2 <== NOT EXECUTED
lfn_start.cln = FAT_FILE_SHORT_NAME;
continue;
}
lfn_entry--;
o = lfn_entry * MSDOS_LFN_LEN_PER_ENTRY;
373a4: e2833001 add r3, r3, #1 <== NOT EXECUTED
373a8: e2800001 add r0, r0, #1 <== NOT EXECUTED
{
#if MSDOS_FIND_PRINT > 1
printf ("MSFS:[6] o:%i i:%i *p:%c(%02x) name[o + i]:%c(%02x)\n",
o, i, *p, *p, name[o + i], name[o + i]);
#endif
if (*p == '\0')
373ac: e5d12000 ldrb r2, [r1] <== NOT EXECUTED
373b0: e3520000 cmp r2, #0 <== NOT EXECUTED
373b4: 0a000131 beq 37880 <msdos_find_name_in_fat_file+0x8b0> <== NOT EXECUTED
((o + i) != name_len))
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
if (((o + i) >= name_len) || (*p != name[o + i]))
373b8: e0834005 add r4, r3, r5 <== NOT EXECUTED
373bc: e1570004 cmp r7, r4 <== NOT EXECUTED
373c0: da0000a0 ble 37648 <msdos_find_name_in_fat_file+0x678> <== NOT EXECUTED
373c4: e7da4003 ldrb r4, [sl, r3] <== NOT EXECUTED
373c8: e1540002 cmp r4, r2 <== NOT EXECUTED
373cc: 1a00009d bne 37648 <msdos_find_name_in_fat_file+0x678> <== NOT EXECUTED
{
lfn_start.cln = FAT_FILE_SHORT_NAME;
break;
}
switch (i)
373d0: e3530004 cmp r3, #4 <== NOT EXECUTED
373d4: 1affffed bne 37390 <msdos_find_name_in_fat_file+0x3c0> <== NOT EXECUTED
{
case 4:
p += 5;
373d8: e2811005 add r1, r1, #5 <== NOT EXECUTED
break;
373dc: eafffff0 b 373a4 <msdos_find_name_in_fat_file+0x3d4> <== NOT EXECUTED
case 10:
p += 4;
373e0: e2811004 add r1, r1, #4 <== NOT EXECUTED
break;
373e4: eaffffee b 373a4 <msdos_find_name_in_fat_file+0x3d4> <== NOT EXECUTED
#endif
/*
* If just looking and there is no more entries in the
* directory - return name-not-found
*/
if (!create_node)
373e8: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
373ec: e3520000 cmp r2, #0 <== NOT EXECUTED
373f0: 0a000135 beq 378cc <msdos_find_name_in_fat_file+0x8fc> <== NOT EXECUTED
* Lets go and write the directory entries. If we have not found
* any available space add the remaining number of entries to any that
* we may have already found that are just before this entry. If more
* are needed FAT_EOF is returned by the read and we extend the file.
*/
if (!empty_space_found)
373f4: e35a0000 cmp sl, #0 <== NOT EXECUTED
{
empty_space_count +=
entries_per_block - (dir_entry / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
373f8: 008772a9 addeq r7, r7, r9, lsr #5 <== NOT EXECUTED
* we may have already found that are just before this entry. If more
* are needed FAT_EOF is returned by the read and we extend the file.
*/
if (!empty_space_found)
{
empty_space_count +=
373fc: 004772a5 subeq r7, r7, r5, lsr #5 <== NOT EXECUTED
* data to place in each long file name entry. First set the short
* file name to the slot of the SFN entry. This will mean no clashes
* in this directory.
*/
lfn_checksum = 0;
if (name_type == MSDOS_NAME_LONG)
37400: e59d1088 ldr r1, [sp, #136] ; 0x88 <== NOT EXECUTED
37404: e3510002 cmp r1, #2 <== NOT EXECUTED
37408: 0a000137 beq 378ec <msdos_find_name_in_fat_file+0x91c> <== NOT EXECUTED
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
msdos_short_name_hex(MSDOS_DIR_NAME(name_dir_entry), slot);
}
if (lfn_entries)
3740c: e59d2038 ldr r2, [sp, #56] ; 0x38 <== NOT EXECUTED
37410: e3520000 cmp r2, #0 <== NOT EXECUTED
37414: 0a00000f beq 37458 <msdos_find_name_in_fat_file+0x488> <== NOT EXECUTED
37418: e3a03000 mov r3, #0 <== NOT EXECUTED
3741c: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
37420: e1a01003 mov r1, r3 <== NOT EXECUTED
37424: e1a02003 mov r2, r3 <== NOT EXECUTED
37428: e59dc090 ldr ip, [sp, #144] ; 0x90 <== NOT EXECUTED
3742c: ea000001 b 37438 <msdos_find_name_in_fat_file+0x468> <== NOT EXECUTED
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
lfn_checksum =
37430: e2111001 ands r1, r1, #1 <== NOT EXECUTED
37434: 13a01080 movne r1, #128 ; 0x80 <== NOT EXECUTED
37438: e7dc0003 ldrb r0, [ip, r3] <== NOT EXECUTED
3743c: e1a02b82 lsl r2, r2, #23 <== NOT EXECUTED
37440: e0811000 add r1, r1, r0 <== NOT EXECUTED
if (lfn_entries)
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
37444: e2833001 add r3, r3, #1 <== NOT EXECUTED
lfn_checksum =
37448: e0811c22 add r1, r1, r2, lsr #24 <== NOT EXECUTED
if (lfn_entries)
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
3744c: e353000b cmp r3, #11 <== NOT EXECUTED
lfn_checksum =
37450: e20120ff and r2, r1, #255 ; 0xff <== NOT EXECUTED
if (lfn_entries)
{
uint8_t* p = (uint8_t*) MSDOS_DIR_NAME(name_dir_entry);
int i;
for (i = 0; i < 11; i++, p++)
37454: 1afffff5 bne 37430 <msdos_find_name_in_fat_file+0x460> <== NOT EXECUTED
* empty_space_count is a count of empty entries in the currently
* read cluster so if 0 there is no space. Note, dir_offset will
* be at the next cluster so we can just make empty_space_offset
* that value.
*/
if (empty_space_count == 0)
37458: e3570000 cmp r7, #0 <== NOT EXECUTED
3745c: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
37460: 01a06007 moveq r6, r7 <== NOT EXECUTED
37464: 03a03001 moveq r3, #1 <== NOT EXECUTED
37468: 0a00011b beq 378dc <msdos_find_name_in_fat_file+0x90c> <== NOT EXECUTED
}
/*
* Have we read past the empty block ? If so go back and read it again.
*/
if (dir_offset != empty_space_offset)
3746c: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
37470: e1580003 cmp r8, r3 <== NOT EXECUTED
37474: 13a03001 movne r3, #1 <== NOT EXECUTED
37478: 0a000116 beq 378d8 <msdos_find_name_in_fat_file+0x908> <== NOT EXECUTED
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
3747c: e59dc038 ldr ip, [sp, #56] ; 0x38 <== NOT EXECUTED
37480: e35c0000 cmp ip, #0 <== NOT EXECUTED
37484: ba000116 blt 378e4 <msdos_find_name_in_fat_file+0x914> <== NOT EXECUTED
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
{
/* get current cluster number */
int rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
37488: e0000899 mul r0, r9, r8 <== NOT EXECUTED
*/
while (lfn_entry < (lfn_entries + 1))
{
int length = 0;
if (read_cluster)
3748c: e3530000 cmp r3, #0 <== NOT EXECUTED
read_cluster = true;
/*
* Handle the entry writes.
*/
lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
37490: e3e03000 mvn r3, #0 <== NOT EXECUTED
37494: e58d3054 str r3, [sp, #84] ; 0x54 <== NOT EXECUTED
37498: e58d3058 str r3, [sp, #88] ; 0x58 <== NOT EXECUTED
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
{
/* get current cluster number */
int rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
3749c: e58d001c str r0, [sp, #28] <== NOT EXECUTED
374a0: e3a05000 mov r5, #0 <== NOT EXECUTED
*/
while (lfn_entry < (lfn_entries + 1))
{
int length = 0;
if (read_cluster)
374a4: 1a0000bf bne 377a8 <msdos_find_name_in_fat_file+0x7d8> <== NOT EXECUTED
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.4] clear write: %d\n", ret);
#endif
if (ret == -1)
return ret;
else if (ret != bts2rd)
374a8: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
374ac: e58d1020 str r1, [sp, #32] <== NOT EXECUTED
#if MSDOS_FIND_PRINT
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
374b0: e1590006 cmp r9, r6 <== NOT EXECUTED
374b4: 93a03000 movls r3, #0 <== NOT EXECUTED
374b8: 91a07005 movls r7, r5 <== NOT EXECUTED
374bc: 958d3018 strls r3, [sp, #24] <== NOT EXECUTED
374c0: 9a0000a1 bls 3774c <msdos_find_name_in_fat_file+0x77c> <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
374c4: e59d3038 ldr r3, [sp, #56] ; 0x38 <== NOT EXECUTED
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
374c8: e59d2024 ldr r2, [sp, #36] ; 0x24 <== NOT EXECUTED
char* p;
const char* n;
int i;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
lfn_entry++;
374cc: e2857001 add r7, r5, #1 <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
374d0: e2833001 add r3, r3, #1 <== NOT EXECUTED
374d4: e1530007 cmp r3, r7 <== NOT EXECUTED
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
374d8: e5924098 ldr r4, [r2, #152] ; 0x98 <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
374dc: 03a0c020 moveq ip, #32 <== NOT EXECUTED
374e0: e58d300c str r3, [sp, #12] <== NOT EXECUTED
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
374e4: e0844006 add r4, r4, r6 <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
374e8: 01a05006 moveq r5, r6 <== NOT EXECUTED
374ec: 058dc018 streq ip, [sp, #24] <== NOT EXECUTED
374f0: 0a000073 beq 376c4 <msdos_find_name_in_fat_file+0x6f4> <== NOT EXECUTED
dir_pos->lname.ofs = lfn_start.ofs;
/* write new node entry */
memcpy (entry, (uint8_t *) name_dir_entry,
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
break;
374f4: e59d2038 ldr r2, [sp, #56] ; 0x38 <== NOT EXECUTED
374f8: e1e03005 mvn r3, r5 <== NOT EXECUTED
374fc: e0833002 add r3, r3, r2 <== NOT EXECUTED
37500: e20210ff and r1, r2, #255 ; 0xff <== NOT EXECUTED
37504: e3a00020 mov r0, #32 <== NOT EXECUTED
37508: e2811001 add r1, r1, #1 <== NOT EXECUTED
3750c: e0832083 add r2, r3, r3, lsl #1 <== NOT EXECUTED
37510: e59dc040 ldr ip, [sp, #64] ; 0x40 <== NOT EXECUTED
37514: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
37518: e0671001 rsb r1, r7, r1 <== NOT EXECUTED
3751c: e1a05006 mov r5, r6 <== NOT EXECUTED
37520: e58d602c str r6, [sp, #44] ; 0x2c <== NOT EXECUTED
37524: e58d0018 str r0, [sp, #24] <== NOT EXECUTED
37528: e59d6024 ldr r6, [sp, #36] ; 0x24 <== NOT EXECUTED
3752c: e58d8014 str r8, [sp, #20] <== NOT EXECUTED
37530: e201a0ff and sl, r1, #255 ; 0xff <== NOT EXECUTED
37534: e08cb003 add fp, ip, r3 <== NOT EXECUTED
37538: e1a08000 mov r8, r0 <== NOT EXECUTED
* This is a long file name and we need to write
* a long file name entry. See if this is the
* first entry written and if so remember the
* the location of the long file name.
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
3753c: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
37540: e3730001 cmn r3, #1 <== NOT EXECUTED
{
lfn_start.cln = empty_space_offset;
37544: 059d1014 ldreq r1, [sp, #20] <== NOT EXECUTED
}
/*
* Clear the entry before loading the data.
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
37548: e3a02020 mov r2, #32 <== NOT EXECUTED
* first entry written and if so remember the
* the location of the long file name.
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
{
lfn_start.cln = empty_space_offset;
3754c: 058d1054 streq r1, [sp, #84] ; 0x54 <== NOT EXECUTED
}
/*
* Clear the entry before loading the data.
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
37550: e1a00004 mov r0, r4 <== NOT EXECUTED
37554: e3a01000 mov r1, #0 <== NOT EXECUTED
* the location of the long file name.
*/
if (lfn_start.cln == FAT_FILE_SHORT_NAME)
{
lfn_start.cln = empty_space_offset;
lfn_start.ofs = dir_entry;
37558: 058d5058 streq r5, [sp, #88] ; 0x58 <== NOT EXECUTED
}
/*
* Clear the entry before loading the data.
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
3755c: eb003bda bl 464cc <memset> <== NOT EXECUTED
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
37560: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
37564: e5c4200d strb r2, [r4, #13] <== NOT EXECUTED
p = entry + 1;
37568: e1a0200b mov r2, fp <== NOT EXECUTED
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
3756c: e5d20000 ldrb r0, [r2] <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
37570: e2841001 add r1, r4, #1 <== NOT EXECUTED
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
37574: e5c10000 strb r0, [r1] <== NOT EXECUTED
if (*n != 0)
37578: e5d20000 ldrb r0, [r2] <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
3757c: e3a03001 mov r3, #1 <== NOT EXECUTED
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
if (*n != 0)
37580: e3500000 cmp r0, #0 <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
37584: e2430001 sub r0, r3, #1 <== NOT EXECUTED
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
if (*n != 0)
n++;
37588: 12822001 addne r2, r2, #1 <== NOT EXECUTED
switch (i)
3758c: e3500004 cmp r0, #4 <== NOT EXECUTED
37590: 0a00000d beq 375cc <msdos_find_name_in_fat_file+0x5fc> <== NOT EXECUTED
37594: e350000a cmp r0, #10 <== NOT EXECUTED
37598: 0a0000b0 beq 37860 <msdos_find_name_in_fat_file+0x890> <== NOT EXECUTED
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
3759c: e353000c cmp r3, #12 <== NOT EXECUTED
375a0: ca000030 bgt 37668 <msdos_find_name_in_fat_file+0x698> <== NOT EXECUTED
break;
case 10:
p += 4;
break;
default:
p += 2;
375a4: e2811002 add r1, r1, #2 <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
375a8: e2833001 add r3, r3, #1 <== NOT EXECUTED
n = name + (lfn_entries - lfn_entry) * MSDOS_LFN_LEN_PER_ENTRY;
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
375ac: e5d20000 ldrb r0, [r2] <== NOT EXECUTED
375b0: e5c10000 strb r0, [r1] <== NOT EXECUTED
if (*n != 0)
375b4: e5d20000 ldrb r0, [r2] <== NOT EXECUTED
375b8: e3500000 cmp r0, #0 <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
375bc: e2430001 sub r0, r3, #1 <== NOT EXECUTED
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
*p = *n;
if (*n != 0)
n++;
375c0: 12822001 addne r2, r2, #1 <== NOT EXECUTED
switch (i)
375c4: e3500004 cmp r0, #4 <== NOT EXECUTED
375c8: 1afffff1 bne 37594 <msdos_find_name_in_fat_file+0x5c4> <== NOT EXECUTED
{
case 4:
p += 5;
375cc: e2811005 add r1, r1, #5 <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
375d0: e2833001 add r3, r3, #1 <== NOT EXECUTED
375d4: eafffff4 b 375ac <msdos_find_name_in_fat_file+0x5dc> <== NOT EXECUTED
continue;
/*
* Get the checksum of the short entry.
*/
lfn_start.cln = dir_offset;
375d8: e58dc054 str ip, [sp, #84] ; 0x54 <== NOT EXECUTED
lfn_start.ofs = dir_entry;
375dc: e58d5058 str r5, [sp, #88] ; 0x58 <== NOT EXECUTED
lfn_entry = lfn_entries;
lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
375e0: e3a01000 mov r1, #0 <== NOT EXECUTED
375e4: e5d4300d ldrb r3, [r4, #13] <== NOT EXECUTED
375e8: e7db2005 ldrb r2, [fp, r5] <== NOT EXECUTED
375ec: e58d0014 str r0, [sp, #20] <== NOT EXECUTED
375f0: eaffff2b b 372a4 <msdos_find_name_in_fat_file+0x2d4> <== NOT EXECUTED
375f4: e1a0700b mov r7, fp <== NOT EXECUTED
375f8: e59d5044 ldr r5, [sp, #68] ; 0x44 <== NOT EXECUTED
375fc: e59d4048 ldr r4, [sp, #72] ; 0x48 <== NOT EXECUTED
37600: e59da03c ldr sl, [sp, #60] ; 0x3c <== NOT EXECUTED
37604: e59db04c ldr fp, [sp, #76] ; 0x4c <== NOT EXECUTED
p += 2;
break;
}
}
lfn_matched = ((lfn_entry == 0) &&
37608: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
3760c: e3530000 cmp r3, #0 <== NOT EXECUTED
37610: 1affff3d bne 3730c <msdos_find_name_in_fat_file+0x33c> <== NOT EXECUTED
* RC_OK on success, or error code if error occured (errno set
* appropriately)
*
*/
#define MSDOS_FIND_PRINT 0
int msdos_find_name_in_fat_file(
37614: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
37618: e2911001 adds r1, r1, #1 <== NOT EXECUTED
3761c: 13a01001 movne r1, #1 <== NOT EXECUTED
37620: eafffecb b 37154 <msdos_find_name_in_fat_file+0x184> <== NOT EXECUTED
lfn_entries = 0;
else
lfn_entries =
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
37624: e5903024 ldr r3, [r0, #36] ; 0x24 <== NOT EXECUTED
37628: e3530000 cmp r3, #0 <== NOT EXECUTED
3762c: 1afffe8c bne 37064 <msdos_find_name_in_fat_file+0x94> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
37630: e59d1024 ldr r1, [sp, #36] ; 0x24 <== NOT EXECUTED
37634: e5d1300a ldrb r3, [r1, #10] <== NOT EXECUTED
37638: e3130003 tst r3, #3 <== NOT EXECUTED
bts2rd = fat_fd->fat_file_size;
3763c: 15909018 ldrne r9, [r0, #24] <== NOT EXECUTED
else
lfn_entries =
((name_len - 1) + MSDOS_LFN_LEN_PER_ENTRY) / MSDOS_LFN_LEN_PER_ENTRY;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
37640: 1afffe89 bne 3706c <msdos_find_name_in_fat_file+0x9c> <== NOT EXECUTED
37644: eafffe86 b 37064 <msdos_find_name_in_fat_file+0x94> <== NOT EXECUTED
break;
}
if (((o + i) >= name_len) || (*p != name[o + i]))
{
lfn_start.cln = FAT_FILE_SHORT_NAME;
37648: e3e02000 mvn r2, #0 <== NOT EXECUTED
3764c: e1a0700b mov r7, fp <== NOT EXECUTED
37650: e59d5044 ldr r5, [sp, #68] ; 0x44 <== NOT EXECUTED
37654: e59d4048 ldr r4, [sp, #72] ; 0x48 <== NOT EXECUTED
37658: e59da03c ldr sl, [sp, #60] ; 0x3c <== NOT EXECUTED
3765c: e59db04c ldr fp, [sp, #76] ; 0x4c <== NOT EXECUTED
37660: e58d2054 str r2, [sp, #84] ; 0x54 <== NOT EXECUTED
break;
37664: eaffffe7 b 37608 <msdos_find_name_in_fat_file+0x638> <== NOT EXECUTED
break;
}
}
*MSDOS_DIR_ENTRY_TYPE(entry) = (lfn_entries - lfn_entry) + 1;
if (lfn_entry == 1)
37668: e3570001 cmp r7, #1 <== NOT EXECUTED
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
3766c: 038a3040 orreq r3, sl, #64 ; 0x40 <== NOT EXECUTED
p += 2;
break;
}
}
*MSDOS_DIR_ENTRY_TYPE(entry) = (lfn_entries - lfn_entry) + 1;
37670: e5c4a000 strb sl, [r4] <== NOT EXECUTED
if (lfn_entry == 1)
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
37674: 05c43000 strbeq r3, [r4] <== NOT EXECUTED
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
37678: e5d4300b ldrb r3, [r4, #11] <== NOT EXECUTED
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
3767c: e2855020 add r5, r5, #32 <== NOT EXECUTED
}
*MSDOS_DIR_ENTRY_TYPE(entry) = (lfn_entries - lfn_entry) + 1;
if (lfn_entry == 1)
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
37680: e383300f orr r3, r3, #15 <== NOT EXECUTED
#if MSDOS_FIND_PRINT
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
37684: e1590005 cmp r9, r5 <== NOT EXECUTED
}
*MSDOS_DIR_ENTRY_TYPE(entry) = (lfn_entries - lfn_entry) + 1;
if (lfn_entry == 1)
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
37688: e5c4300b strb r3, [r4, #11] <== NOT EXECUTED
#if MSDOS_FIND_PRINT
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
3768c: 9a000076 bls 3786c <msdos_find_name_in_fat_file+0x89c> <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
37690: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
char* p;
const char* n;
int i;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
lfn_entry++;
37694: e2877001 add r7, r7, #1 <== NOT EXECUTED
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
37698: e5964098 ldr r4, [r6, #152] ; 0x98 <== NOT EXECUTED
char* p;
const char* n;
int i;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
lfn_entry++;
3769c: e24aa001 sub sl, sl, #1 <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
376a0: e1570000 cmp r7, r0 <== NOT EXECUTED
for (dir_entry = empty_space_entry;
dir_entry < bts2rd;
dir_entry += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + dir_entry;
376a4: e0844005 add r4, r4, r5 <== NOT EXECUTED
char* p;
const char* n;
int i;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
376a8: e2888020 add r8, r8, #32 <== NOT EXECUTED
lfn_entry++;
376ac: e20aa0ff and sl, sl, #255 ; 0xff <== NOT EXECUTED
376b0: e24bb00d sub fp, fp, #13 <== NOT EXECUTED
length, lfn_entry);
#endif
/*
* Time to write the short file name entry.
*/
if (lfn_entry == (lfn_entries + 1))
376b4: 1affffa0 bne 3753c <msdos_find_name_in_fat_file+0x56c> <== NOT EXECUTED
376b8: e58d8018 str r8, [sp, #24] <== NOT EXECUTED
376bc: e59d602c ldr r6, [sp, #44] ; 0x2c <== NOT EXECUTED
376c0: e59d8014 ldr r8, [sp, #20] <== NOT EXECUTED
{
/* get current cluster number */
int rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
376c4: e59dc08c ldr ip, [sp, #140] ; 0x8c <== NOT EXECUTED
376c8: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
376cc: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
376d0: e3a02001 mov r2, #1 <== NOT EXECUTED
376d4: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
376d8: e58dc000 str ip, [sp] <== NOT EXECUTED
376dc: ebffb710 bl 25324 <fat_file_ioctl> <== NOT EXECUTED
empty_space_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
376e0: e3500000 cmp r0, #0 <== NOT EXECUTED
376e4: 1afffee8 bne 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
return rc;
dir_pos->sname.ofs = dir_entry;
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
376e8: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
empty_space_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = dir_entry;
376ec: e59d008c ldr r0, [sp, #140] ; 0x8c <== NOT EXECUTED
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
376f0: e3730001 cmn r3, #1 <== NOT EXECUTED
empty_space_offset * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = dir_entry;
376f4: e5805004 str r5, [r0, #4] <== NOT EXECUTED
if (lfn_start.cln != FAT_FILE_SHORT_NAME)
376f8: 0a000009 beq 37724 <msdos_find_name_in_fat_file+0x754> <== NOT EXECUTED
{
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM,
376fc: e28dc054 add ip, sp, #84 ; 0x54 <== NOT EXECUTED
37700: e0030399 mul r3, r9, r3 <== NOT EXECUTED
37704: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
37708: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
3770c: e3a02001 mov r2, #1 <== NOT EXECUTED
37710: e58dc000 str ip, [sp] <== NOT EXECUTED
37714: ebffb702 bl 25324 <fat_file_ioctl> <== NOT EXECUTED
lfn_start.cln * bts2rd,
&lfn_start.cln);
if (rc != RC_OK)
37718: e3500000 cmp r0, #0 <== NOT EXECUTED
3771c: 1afffeda bne 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
37720: e59d3054 ldr r3, [sp, #84] ; 0x54 <== NOT EXECUTED
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
37724: e59d108c ldr r1, [sp, #140] ; 0x8c <== NOT EXECUTED
37728: e5813008 str r3, [r1, #8] <== NOT EXECUTED
dir_pos->lname.ofs = lfn_start.ofs;
3772c: e59d3058 ldr r3, [sp, #88] ; 0x58 <== NOT EXECUTED
/* write new node entry */
memcpy (entry, (uint8_t *) name_dir_entry,
37730: e1a00004 mov r0, r4 <== NOT EXECUTED
if (rc != RC_OK)
return rc;
}
dir_pos->lname.cln = lfn_start.cln;
dir_pos->lname.ofs = lfn_start.ofs;
37734: e581300c str r3, [r1, #12] <== NOT EXECUTED
/* write new node entry */
memcpy (entry, (uint8_t *) name_dir_entry,
37738: e3a02020 mov r2, #32 <== NOT EXECUTED
3773c: e59d1090 ldr r1, [sp, #144] ; 0x90 <== NOT EXECUTED
37740: eb003ada bl 462b0 <memcpy> <== NOT EXECUTED
37744: e59d700c ldr r7, [sp, #12] <== NOT EXECUTED
37748: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
if (lfn_entry == 1)
*MSDOS_DIR_ENTRY_TYPE(entry) |= MSDOS_LAST_LONG_ENTRY;
*MSDOS_DIR_ATTR(entry) |= MSDOS_ATTR_LFN;
}
ret = fat_file_write(mt_entry, fat_fd,
3774c: e28d0020 add r0, sp, #32 <== NOT EXECUTED
37750: e8901001 ldm r0, {r0, ip} <== NOT EXECUTED
37754: e59c1098 ldr r1, [ip, #152] ; 0x98 <== NOT EXECUTED
37758: e0802006 add r2, r0, r6 <== NOT EXECUTED
3775c: e0816006 add r6, r1, r6 <== NOT EXECUTED
37760: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
37764: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
37768: e58d6000 str r6, [sp] <== NOT EXECUTED
3776c: ebffb7e0 bl 256f4 <fat_file_write> <== NOT EXECUTED
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
37770: e3700001 cmn r0, #1 <== NOT EXECUTED
37774: 0a00007a beq 37964 <msdos_find_name_in_fat_file+0x994> <== NOT EXECUTED
return ret;
else if (ret != length)
37778: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
3777c: e1510000 cmp r1, r0 <== NOT EXECUTED
37780: 1a000031 bne 3784c <msdos_find_name_in_fat_file+0x87c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
37784: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
37788: e59d2038 ldr r2, [sp, #56] ; 0x38 <== NOT EXECUTED
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
3778c: e0833009 add r3, r3, r9 <== NOT EXECUTED
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
37790: e1520007 cmp r2, r7 <== NOT EXECUTED
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
37794: e58d301c str r3, [sp, #28] <== NOT EXECUTED
empty_space_offset++;
37798: a2888001 addge r8, r8, #1 <== NOT EXECUTED
3779c: a1a05007 movge r5, r7 <== NOT EXECUTED
377a0: a3a06000 movge r6, #0 <== NOT EXECUTED
#endif
/*
* The one more is the short entry.
*/
while (lfn_entry < (lfn_entries + 1))
377a4: ba00004e blt 378e4 <msdos_find_name_in_fat_file+0x914> <== NOT EXECUTED
{
uint32_t new_length;
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.1] eso:%li\n", empty_space_offset);
#endif
ret = fat_file_read(mt_entry, fat_fd,
377a8: e59d1024 ldr r1, [sp, #36] ; 0x24 <== NOT EXECUTED
377ac: e591c098 ldr ip, [r1, #152] ; 0x98 <== NOT EXECUTED
377b0: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
377b4: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
377b8: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
377bc: e1a03009 mov r3, r9 <== NOT EXECUTED
377c0: e58dc000 str ip, [sp] <== NOT EXECUTED
377c4: ebffb860 bl 2594c <fat_file_read> <== NOT EXECUTED
(empty_space_offset * bts2rd), bts2rd,
fs_info->cl_buf);
if (ret != bts2rd)
377c8: e1500009 cmp r0, r9 <== NOT EXECUTED
377cc: 0affff35 beq 374a8 <msdos_find_name_in_fat_file+0x4d8> <== NOT EXECUTED
{
if (ret != FAT_EOF)
377d0: e3500000 cmp r0, #0 <== NOT EXECUTED
377d4: 1a00001c bne 3784c <msdos_find_name_in_fat_file+0x87c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.2] extending file:%li\n", empty_space_offset);
#endif
ret = fat_file_extend (mt_entry, fat_fd, empty_space_offset * bts2rd,
377d8: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
377dc: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
377e0: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
377e4: e28d305c add r3, sp, #92 ; 0x5c <== NOT EXECUTED
377e8: ebffb749 bl 25514 <fat_file_extend> <== NOT EXECUTED
&new_length);
if (ret != RC_OK)
377ec: e2501000 subs r1, r0, #0 <== NOT EXECUTED
377f0: 11a00001 movne r0, r1 <== NOT EXECUTED
377f4: 1afffea4 bne 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
return ret;
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.3] extended: %d <-> %d\n", new_length, empty_space_offset * bts2rd);
#endif
if (new_length != (empty_space_offset * bts2rd))
377f8: e59d205c ldr r2, [sp, #92] ; 0x5c <== NOT EXECUTED
377fc: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
37800: e1520003 cmp r2, r3 <== NOT EXECUTED
37804: e58d2020 str r2, [sp, #32] <== NOT EXECUTED
37808: 1a00000f bne 3784c <msdos_find_name_in_fat_file+0x87c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
memset(fs_info->cl_buf, 0, bts2rd);
3780c: e59dc024 ldr ip, [sp, #36] ; 0x24 <== NOT EXECUTED
37810: e1a02009 mov r2, r9 <== NOT EXECUTED
37814: e59c0098 ldr r0, [ip, #152] ; 0x98 <== NOT EXECUTED
37818: eb003b2b bl 464cc <memset> <== NOT EXECUTED
ret = fat_file_write(mt_entry, fat_fd,
3781c: e59d0024 ldr r0, [sp, #36] ; 0x24 <== NOT EXECUTED
37820: e590c098 ldr ip, [r0, #152] ; 0x98 <== NOT EXECUTED
37824: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
37828: e59d0030 ldr r0, [sp, #48] ; 0x30 <== NOT EXECUTED
3782c: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
37830: e1a03009 mov r3, r9 <== NOT EXECUTED
37834: e58dc000 str ip, [sp] <== NOT EXECUTED
37838: ebffb7ad bl 256f4 <fat_file_write> <== NOT EXECUTED
empty_space_offset * bts2rd,
bts2rd, fs_info->cl_buf);
#if MSDOS_FIND_PRINT
printf ("MSFS:[9.4] clear write: %d\n", ret);
#endif
if (ret == -1)
3783c: e3700001 cmn r0, #1 <== NOT EXECUTED
37840: 0a000047 beq 37964 <msdos_find_name_in_fat_file+0x994> <== NOT EXECUTED
return ret;
else if (ret != bts2rd)
37844: e1500009 cmp r0, r9 <== NOT EXECUTED
37848: 0affff18 beq 374b0 <msdos_find_name_in_fat_file+0x4e0> <== NOT EXECUTED
(empty_space_offset * bts2rd) + empty_space_entry,
length, fs_info->cl_buf + empty_space_entry);
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
3784c: eb002de7 bl 42ff0 <__errno> <== NOT EXECUTED
37850: e3a03005 mov r3, #5 <== NOT EXECUTED
37854: e5803000 str r3, [r0] <== NOT EXECUTED
37858: e3e00000 mvn r0, #0 <== NOT EXECUTED
3785c: eafffe8a b 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
{
case 4:
p += 5;
break;
case 10:
p += 4;
37860: e2811004 add r1, r1, #4 <== NOT EXECUTED
*/
memset (entry, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
*MSDOS_DIR_LFN_CHECKSUM(entry) = lfn_checksum;
p = entry + 1;
37864: e2833001 add r3, r3, #1 <== NOT EXECUTED
37868: eaffff4f b 375ac <msdos_find_name_in_fat_file+0x5dc> <== NOT EXECUTED
3786c: e58d8018 str r8, [sp, #24] <== NOT EXECUTED
37870: e59d602c ldr r6, [sp, #44] ; 0x2c <== NOT EXECUTED
37874: e59d8014 ldr r8, [sp, #20] <== NOT EXECUTED
#if MSDOS_FIND_PRINT
printf ("MSFS:[10] eso:%li\n", empty_space_offset);
#endif
for (dir_entry = empty_space_entry;
37878: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
3787c: eaffffb2 b 3774c <msdos_find_name_in_fat_file+0x77c> <== NOT EXECUTED
37880: e59d0050 ldr r0, [sp, #80] ; 0x50 <== NOT EXECUTED
/*
* If this is the first entry, ie the last part of the
* long file name and the length does not match then
* the file names do not match.
*/
if (((lfn_entry + 1) == lfn_entries) &&
37884: e59d1038 ldr r1, [sp, #56] ; 0x38 <== NOT EXECUTED
37888: e1510000 cmp r1, r0 <== NOT EXECUTED
3788c: e1a0700b mov r7, fp <== NOT EXECUTED
37890: e59d5044 ldr r5, [sp, #68] ; 0x44 <== NOT EXECUTED
37894: e59d4048 ldr r4, [sp, #72] ; 0x48 <== NOT EXECUTED
37898: e59da03c ldr sl, [sp, #60] ; 0x3c <== NOT EXECUTED
3789c: e59db04c ldr fp, [sp, #76] ; 0x4c <== NOT EXECUTED
378a0: 1affff58 bne 37608 <msdos_find_name_in_fat_file+0x638> <== NOT EXECUTED
378a4: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
378a8: e59d0084 ldr r0, [sp, #132] ; 0x84 <== NOT EXECUTED
378ac: e0833002 add r3, r3, r2 <== NOT EXECUTED
378b0: e1530000 cmp r3, r0 <== NOT EXECUTED
((o + i) != name_len))
lfn_start.cln = FAT_FILE_SHORT_NAME;
378b4: 13e01000 mvnne r1, #0 <== NOT EXECUTED
378b8: 158d1054 strne r1, [sp, #84] ; 0x54 <== NOT EXECUTED
378bc: eaffff51 b 37608 <msdos_find_name_in_fat_file+0x638> <== NOT EXECUTED
}
/*
* If we are not to create the entry return a not found error.
*/
if (!create_node)
378c0: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
378c4: e3500000 cmp r0, #0 <== NOT EXECUTED
378c8: 1afffecc bne 37400 <msdos_find_name_in_fat_file+0x430> <== NOT EXECUTED
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
empty_space_offset++;
378cc: e3a00c7d mov r0, #32000 ; 0x7d00 <== NOT EXECUTED
378d0: e2800001 add r0, r0, #1 <== NOT EXECUTED
378d4: eafffe6c b 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
}
/*
* Have we read past the empty block ? If so go back and read it again.
*/
if (dir_offset != empty_space_offset)
378d8: e3a03000 mov r3, #0 <== NOT EXECUTED
378dc: e59d802c ldr r8, [sp, #44] ; 0x2c <== NOT EXECUTED
378e0: eafffee5 b 3747c <msdos_find_name_in_fat_file+0x4ac> <== NOT EXECUTED
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
empty_space_offset++;
378e4: e3a00000 mov r0, #0 <== NOT EXECUTED
378e8: eafffe67 b 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
*/
lfn_checksum = 0;
if (name_type == MSDOS_NAME_LONG)
{
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
378ec: e0226899 mla r2, r9, r8, r6 <== NOT EXECUTED
378f0: e59dc038 ldr ip, [sp, #56] ; 0x38 <== NOT EXECUTED
378f4: e28c3001 add r3, ip, #1 <== NOT EXECUTED
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 3; i++, c++)
if ((*c == ' ') || (*c == '.'))
*c = '~';
378f8: e59dc090 ldr ip, [sp, #144] ; 0x90 <== NOT EXECUTED
*/
lfn_checksum = 0;
if (name_type == MSDOS_NAME_LONG)
{
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
378fc: e08302a2 add r0, r3, r2, lsr #5 <== NOT EXECUTED
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 3; i++, c++)
if ((*c == ' ') || (*c == '.'))
*c = '~';
37900: e281107c add r1, r1, #124 ; 0x7c <== NOT EXECUTED
*/
lfn_checksum = 0;
if (name_type == MSDOS_NAME_LONG)
{
int slot = (((empty_space_offset * bts2rd) + empty_space_entry) /
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) + lfn_entries + 1;
37904: e3a03000 mov r3, #0 <== NOT EXECUTED
{
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 3; i++, c++)
if ((*c == ' ') || (*c == '.'))
37908: e7dc2003 ldrb r2, [ip, r3] <== NOT EXECUTED
3790c: e3520020 cmp r2, #32 <== NOT EXECUTED
37910: 1352002e cmpne r2, #46 ; 0x2e <== NOT EXECUTED
*c = '~';
37914: 07cc1003 strbeq r1, [ip, r3] <== NOT EXECUTED
msdos_short_name_hex(char* sfn, int num)
{
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
for (i = 0; i < 3; i++, c++)
37918: e2833001 add r3, r3, #1 <== NOT EXECUTED
3791c: e3530003 cmp r3, #3 <== NOT EXECUTED
37920: 1afffff8 bne 37908 <msdos_find_name_in_fat_file+0x938> <== NOT EXECUTED
if ((*c == ' ') || (*c == '.'))
*c = '~';
*c++ = '~';
37924: e59d1090 ldr r1, [sp, #144] ; 0x90 <== NOT EXECUTED
37928: e283307b add r3, r3, #123 ; 0x7b <== NOT EXECUTED
3792c: e5c13003 strb r3, [r1, #3] <== NOT EXECUTED
37930: e59f3068 ldr r3, [pc, #104] ; 379a0 <msdos_find_name_in_fat_file+0x9d0><== NOT EXECUTED
37934: e59d1090 ldr r1, [sp, #144] ; 0x90 <== NOT EXECUTED
37938: e593c048 ldr ip, [r3, #72] ; 0x48 <== NOT EXECUTED
3793c: e3a0300c mov r3, #12 <== NOT EXECUTED
for (i = 0; i < 4; i++, c++)
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
37940: e1a02350 asr r2, r0, r3 <== NOT EXECUTED
37944: e202200f and r2, r2, #15 <== NOT EXECUTED
37948: e7dc2002 ldrb r2, [ip, r2] <== NOT EXECUTED
3794c: e2433004 sub r3, r3, #4 <== NOT EXECUTED
int i;
for (i = 0; i < 3; i++, c++)
if ((*c == ' ') || (*c == '.'))
*c = '~';
*c++ = '~';
for (i = 0; i < 4; i++, c++)
37950: e3730004 cmn r3, #4 <== NOT EXECUTED
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
37954: e5c12004 strb r2, [r1, #4] <== NOT EXECUTED
37958: e2811001 add r1, r1, #1 <== NOT EXECUTED
int i;
for (i = 0; i < 3; i++, c++)
if ((*c == ' ') || (*c == '.'))
*c = '~';
*c++ = '~';
for (i = 0; i < 4; i++, c++)
3795c: 1afffff7 bne 37940 <msdos_find_name_in_fat_file+0x970> <== NOT EXECUTED
37960: eafffea9 b 3740c <msdos_find_name_in_fat_file+0x43c> <== NOT EXECUTED
if (ret == -1)
return ret;
else if (ret != length)
rtems_set_errno_and_return_minus_one(EIO);
empty_space_offset++;
37964: e3e00000 mvn r0, #0 <== NOT EXECUTED
37968: eafffe47 b 3728c <msdos_find_name_in_fat_file+0x2bc> <== NOT EXECUTED
#endif
if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
rtems_set_errno_and_return_minus_one(EIO);
assert(ret == bts2rd);
3796c: e3a01d11 mov r1, #1088 ; 0x440 <== NOT EXECUTED
37970: e2811009 add r1, r1, #9 <== NOT EXECUTED
37974: e59f0028 ldr r0, [pc, #40] ; 379a4 <msdos_find_name_in_fat_file+0x9d4><== NOT EXECUTED
37978: e59f2028 ldr r2, [pc, #40] ; 379a8 <msdos_find_name_in_fat_file+0x9d8><== NOT EXECUTED
3797c: e59f3028 ldr r3, [pc, #40] ; 379ac <msdos_find_name_in_fat_file+0x9dc><== NOT EXECUTED
37980: ebffc3e7 bl 28924 <__assert_func> <== NOT EXECUTED
uint32_t empty_space_count = 0;
bool empty_space_found = false;
uint32_t entries_per_block;
bool read_cluster = false;
assert(name_len > 0);
37984: e3a01e41 mov r1, #1040 ; 0x410 <== NOT EXECUTED
37988: e2811009 add r1, r1, #9 <== NOT EXECUTED
3798c: e59f0010 ldr r0, [pc, #16] ; 379a4 <msdos_find_name_in_fat_file+0x9d4><== NOT EXECUTED
37990: e59f2010 ldr r2, [pc, #16] ; 379a8 <msdos_find_name_in_fat_file+0x9d8><== NOT EXECUTED
37994: e59f3014 ldr r3, [pc, #20] ; 379b0 <msdos_find_name_in_fat_file+0x9e0><== NOT EXECUTED
37998: ebffc3e1 bl 28924 <__assert_func> <== NOT EXECUTED
00036e68 <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
)
{
36e68: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
36e6c: e1a08001 mov r8, r1 <== NOT EXECUTED
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) &&
36e70: e5911020 ldr r1, [r1, #32] <== NOT EXECUTED
fat_file_fd_t *fat_fd,
uint32_t cl4find,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
36e74: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
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) &&
36e78: e3510001 cmp r1, #1 <== NOT EXECUTED
fat_file_fd_t *fat_fd,
uint32_t cl4find,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
36e7c: e1a0b000 mov fp, r0 <== NOT EXECUTED
36e80: e1a07002 mov r7, r2 <== NOT EXECUTED
36e84: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
int rc = RC_OK;
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
36e88: e590a034 ldr sl, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t bts2rd = 0;
uint32_t i = 0, j = 0;
if (FAT_FD_OF_ROOT_DIR(fat_fd) &&
36e8c: 0a000026 beq 36f2c <msdos_find_node_by_cluster_num_in_fat_file+0xc4><== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
36e90: e1da60b6 ldrh r6, [sl, #6] <== NOT EXECUTED
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) &&
36e94: e59ac098 ldr ip, [sl, #152] ; 0x98 <== NOT EXECUTED
36e98: e3a09000 mov r9, #0 <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
while ((ret = fat_file_read(mt_entry, fat_fd, j * bts2rd, bts2rd,
36e9c: e1a0000b mov r0, fp <== NOT EXECUTED
36ea0: e1a01008 mov r1, r8 <== NOT EXECUTED
36ea4: e1a02009 mov r2, r9 <== NOT EXECUTED
36ea8: e1a03006 mov r3, r6 <== NOT EXECUTED
36eac: e58dc000 str ip, [sp] <== NOT EXECUTED
36eb0: ebffbaa5 bl 2594c <fat_file_read> <== NOT EXECUTED
36eb4: e3500000 cmp r0, #0 <== NOT EXECUTED
36eb8: 0a000016 beq 36f18 <msdos_find_node_by_cluster_num_in_fat_file+0xb0><== NOT EXECUTED
fs_info->cl_buf)) != FAT_EOF)
{
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
36ebc: e350001f cmp r0, #31 <== NOT EXECUTED
36ec0: da000034 ble 36f98 <msdos_find_node_by_cluster_num_in_fat_file+0x130><== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
assert(ret == bts2rd);
36ec4: e1500006 cmp r0, r6 <== NOT EXECUTED
36ec8: 1a000037 bne 36fac <msdos_find_node_by_cluster_num_in_fat_file+0x144><== NOT EXECUTED
36ecc: e59ac098 ldr ip, [sl, #152] ; 0x98 <== NOT EXECUTED
36ed0: e3a04000 mov r4, #0 <== NOT EXECUTED
36ed4: e1a0500c mov r5, ip <== NOT EXECUTED
for (i = 0; i < bts2rd; i += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE)
{
char* entry = (char*) fs_info->cl_buf + i;
/* if this and all rest entries are empty - return not-found */
if ((*MSDOS_DIR_ENTRY_TYPE(entry)) ==
36ed8: e7dc3004 ldrb r3, [ip, r4] <== NOT EXECUTED
36edc: e3530000 cmp r3, #0 <== NOT EXECUTED
36ee0: 0a00000c beq 36f18 <msdos_find_node_by_cluster_num_in_fat_file+0xb0><== NOT EXECUTED
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)) ==
36ee4: e35300e5 cmp r3, #229 ; 0xe5 <== NOT EXECUTED
36ee8: 0a000004 beq 36f00 <msdos_find_node_by_cluster_num_in_fat_file+0x98><== NOT EXECUTED
MSDOS_THIS_DIR_ENTRY_EMPTY)
continue;
/* if get a non-empty entry - compare clusters num */
if (MSDOS_EXTRACT_CLUSTER_NUM(entry) == cl4find)
36eec: e1d521b4 ldrh r2, [r5, #20] <== NOT EXECUTED
36ef0: e1d531ba ldrh r3, [r5, #26] <== NOT EXECUTED
36ef4: e1833802 orr r3, r3, r2, lsl #16 <== NOT EXECUTED
36ef8: e1530007 cmp r3, r7 <== NOT EXECUTED
36efc: 0a000012 beq 36f4c <msdos_find_node_by_cluster_num_in_fat_file+0xe4><== NOT EXECUTED
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)
36f00: e2844020 add r4, r4, #32 <== NOT EXECUTED
36f04: e1560004 cmp r6, r4 <== NOT EXECUTED
36f08: e2855020 add r5, r5, #32 <== NOT EXECUTED
36f0c: 8afffff1 bhi 36ed8 <msdos_find_node_by_cluster_num_in_fat_file+0x70><== NOT EXECUTED
36f10: e0899006 add r9, r9, r6 <== NOT EXECUTED
36f14: eaffffe0 b 36e9c <msdos_find_node_by_cluster_num_in_fat_file+0x34><== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
bts2rd = fat_fd->fat_file_size;
else
bts2rd = fs_info->fat.vol.bpc;
while ((ret = fat_file_read(mt_entry, fat_fd, j * bts2rd, bts2rd,
36f18: e3a06c7d mov r6, #32000 ; 0x7d00 <== NOT EXECUTED
36f1c: e2866001 add r6, r6, #1 <== NOT EXECUTED
}
}
j++;
}
return MSDOS_NAME_NOT_FOUND_ERR;
}
36f20: e1a00006 mov r0, r6 <== NOT EXECUTED
36f24: e28dd008 add sp, sp, #8 <== NOT EXECUTED
36f28: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
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) &&
36f2c: e5983024 ldr r3, [r8, #36] ; 0x24 <== NOT EXECUTED
36f30: e3530000 cmp r3, #0 <== NOT EXECUTED
36f34: 1affffd5 bne 36e90 <msdos_find_node_by_cluster_num_in_fat_file+0x28><== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
36f38: e5da300a ldrb r3, [sl, #10] <== NOT EXECUTED
36f3c: e3130003 tst r3, #3 <== NOT EXECUTED
36f40: 0affffd2 beq 36e90 <msdos_find_node_by_cluster_num_in_fat_file+0x28><== NOT EXECUTED
bts2rd = fat_fd->fat_file_size;
36f44: e5986018 ldr r6, [r8, #24] <== NOT EXECUTED
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) &&
36f48: eaffffd1 b 36e94 <msdos_find_node_by_cluster_num_in_fat_file+0x2c><== NOT EXECUTED
/* if get a non-empty entry - compare clusters num */
if (MSDOS_EXTRACT_CLUSTER_NUM(entry) == cl4find)
{
/* on success fill aux structure and copy all 32 bytes */
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM, j * bts2rd,
36f4c: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
36f50: e1a0000b mov r0, fp <== NOT EXECUTED
36f54: e1a01008 mov r1, r8 <== NOT EXECUTED
36f58: e1a03009 mov r3, r9 <== NOT EXECUTED
36f5c: e3a02001 mov r2, #1 <== NOT EXECUTED
36f60: e58dc000 str ip, [sp] <== NOT EXECUTED
36f64: ebffb8ee bl 25324 <fat_file_ioctl> <== NOT EXECUTED
&dir_pos->sname.cln);
if (rc != RC_OK)
36f68: e2506000 subs r6, r0, #0 <== NOT EXECUTED
36f6c: 1affffeb bne 36f20 <msdos_find_node_by_cluster_num_in_fat_file+0xb8><== NOT EXECUTED
return rc;
dir_pos->sname.ofs = i;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
36f70: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = i;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
36f74: e3e03000 mvn r3, #0 <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
36f78: e582300c str r3, [r2, #12] <== NOT EXECUTED
rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM, j * bts2rd,
&dir_pos->sname.cln);
if (rc != RC_OK)
return rc;
dir_pos->sname.ofs = i;
36f7c: e5824004 str r4, [r2, #4] <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
36f80: e5823008 str r3, [r2, #8] <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
memcpy(dir_entry, entry,
36f84: e59d002c ldr r0, [sp, #44] ; 0x2c <== NOT EXECUTED
36f88: e1a01005 mov r1, r5 <== NOT EXECUTED
36f8c: e3a02020 mov r2, #32 <== NOT EXECUTED
36f90: eb003cc6 bl 462b0 <memcpy> <== NOT EXECUTED
MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
return RC_OK;
36f94: eaffffe1 b 36f20 <msdos_find_node_by_cluster_num_in_fat_file+0xb8><== NOT EXECUTED
while ((ret = fat_file_read(mt_entry, fat_fd, j * bts2rd, bts2rd,
fs_info->cl_buf)) != FAT_EOF)
{
if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE )
rtems_set_errno_and_return_minus_one( EIO );
36f98: eb003014 bl 42ff0 <__errno> <== NOT EXECUTED
36f9c: e3a03005 mov r3, #5 <== NOT EXECUTED
36fa0: e5803000 str r3, [r0] <== NOT EXECUTED
36fa4: e3e06000 mvn r6, #0 <== NOT EXECUTED
36fa8: eaffffdc b 36f20 <msdos_find_node_by_cluster_num_in_fat_file+0xb8><== NOT EXECUTED
assert(ret == bts2rd);
36fac: e3a01e69 mov r1, #1680 ; 0x690 <== NOT EXECUTED
36fb0: e2811005 add r1, r1, #5 <== NOT EXECUTED
36fb4: e59f0008 ldr r0, [pc, #8] ; 36fc4 <msdos_find_node_by_cluster_num_in_fat_file+0x15c><== NOT EXECUTED
36fb8: e59f2008 ldr r2, [pc, #8] ; 36fc8 <msdos_find_node_by_cluster_num_in_fat_file+0x160><== NOT EXECUTED
36fbc: e59f3008 ldr r3, [pc, #8] ; 36fcc <msdos_find_node_by_cluster_num_in_fat_file+0x164><== NOT EXECUTED
36fc0: ebffc657 bl 28924 <__assert_func> <== NOT EXECUTED
0001f264 <msdos_format>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f264: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
1f268: e1a05001 mov r5, r1 <== NOT EXECUTED
1f26c: e24dde2d sub sp, sp, #720 ; 0x2d0 <== NOT EXECUTED
1f270: e1a06000 mov r6, r0 <== NOT EXECUTED
int ret_val = 0;
int fd = -1;
int i;
msdos_format_param_t fmt_params;
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
1f274: e1a03000 mov r3, r0 <== NOT EXECUTED
1f278: e59f2e00 ldr r2, [pc, #3584] ; 20080 <msdos_format+0xe1c> <== NOT EXECUTED
1f27c: e3a01001 mov r1, #1 <== NOT EXECUTED
1f280: e1a00005 mov r0, r5 <== NOT EXECUTED
1f284: ebffff69 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"formating: %s\n", devname);
/*
* sanity check on device
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f288: e1a00005 mov r0, r5 <== NOT EXECUTED
1f28c: e3a01002 mov r1, #2 <== NOT EXECUTED
1f290: e59f2dec ldr r2, [pc, #3564] ; 20084 <msdos_format+0xe20> <== NOT EXECUTED
1f294: e1a03006 mov r3, r6 <== NOT EXECUTED
1f298: ebffff64 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"stat check: %s\n", devname);
if (ret_val == 0) {
rc = stat(devname, &stat_buf);
1f29c: e1a00006 mov r0, r6 <== NOT EXECUTED
1f2a0: e28d1f9f add r1, sp, #636 ; 0x27c <== NOT EXECUTED
1f2a4: ebffa8e3 bl 9638 <stat> <== NOT EXECUTED
ret_val = rc;
}
/* rtems feature: no block devices, all are character devices */
if ((ret_val == 0) &&
1f2a8: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1f2ac: 1a000007 bne 1f2d0 <msdos_format+0x6c> <== NOT EXECUTED
(!S_ISBLK(stat_buf.st_mode))) {
1f2b0: e59d3288 ldr r3, [sp, #648] ; 0x288 <== NOT EXECUTED
1f2b4: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
1f2b8: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
1f2bc: 0a000010 beq 1f304 <msdos_format+0xa0> <== NOT EXECUTED
errno = ENOTTY;
1f2c0: eb008f4a bl 42ff0 <__errno> <== NOT EXECUTED
1f2c4: e3a03019 mov r3, #25 <== NOT EXECUTED
1f2c8: e5803000 str r3, [r0] <== NOT EXECUTED
1f2cc: e3e04000 mvn r4, #0 <== NOT EXECUTED
1f2d0: e3a07000 mov r7, #0 <== NOT EXECUTED
/* check that device is registered as block device and lock it */
if (ret_val == 0) {
dd = rtems_disk_obtain(stat_buf.st_rdev);
if (dd == NULL) {
errno = ENOTTY;
1f2d4: e3e06000 mvn r6, #0 <== NOT EXECUTED
0xe5);
}
/*
* create master boot record
*/
if (ret_val == 0) {
1f2d8: e3540000 cmp r4, #0 <== NOT EXECUTED
1f2dc: 0a00005b beq 1f450 <msdos_format+0x1ec> <== NOT EXECUTED
/*
* cleanup:
* sync and unlock disk
* free any data structures (not needed now)
*/
if (fd != -1) {
1f2e0: e3760001 cmn r6, #1 <== NOT EXECUTED
close(fd);
1f2e4: 11a00006 movne r0, r6 <== NOT EXECUTED
1f2e8: 1bffa16d blne 78a4 <close> <== NOT EXECUTED
}
if (dd != NULL) {
1f2ec: e3570000 cmp r7, #0 <== NOT EXECUTED
rtems_disk_release(dd);
1f2f0: 11a00007 movne r0, r7 <== NOT EXECUTED
1f2f4: 1bff9dcc blne 6a2c <rtems_disk_release> <== NOT EXECUTED
}
return ret_val;
}
1f2f8: e1a00004 mov r0, r4 <== NOT EXECUTED
1f2fc: e28dde2d add sp, sp, #720 ; 0x2d0 <== NOT EXECUTED
1f300: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
ret_val = -1;
}
/* check that device is registered as block device and lock it */
if (ret_val == 0) {
dd = rtems_disk_obtain(stat_buf.st_rdev);
1f304: e28d1fa5 add r1, sp, #660 ; 0x294 <== NOT EXECUTED
1f308: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
1f30c: ebff9d32 bl 67dc <rtems_disk_obtain> <== NOT EXECUTED
if (dd == NULL) {
1f310: e2507000 subs r7, r0, #0 <== NOT EXECUTED
1f314: 0a00034d beq 20050 <msdos_format+0xdec> <== NOT EXECUTED
/*
* open device for writing
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f318: e3a01002 mov r1, #2 <== NOT EXECUTED
1f31c: e59f2d64 ldr r2, [pc, #3428] ; 20088 <msdos_format+0xe24> <== NOT EXECUTED
1f320: e1a00005 mov r0, r5 <== NOT EXECUTED
1f324: ebffff41 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"open device\n");
fd = open(devname, O_RDWR);
1f328: e1a00006 mov r0, r6 <== NOT EXECUTED
1f32c: e3a01002 mov r1, #2 <== NOT EXECUTED
1f330: ebffa6f7 bl 8f14 <open> <== NOT EXECUTED
if (fd == -1)
1f334: e3700001 cmn r0, #1 <== NOT EXECUTED
* open device for writing
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"open device\n");
fd = open(devname, O_RDWR);
1f338: e1a06000 mov r6, r0 <== NOT EXECUTED
if (fd == -1)
1f33c: 01a04000 moveq r4, r0 <== NOT EXECUTED
1f340: 0affffe3 beq 1f2d4 <msdos_format+0x70> <== NOT EXECUTED
uint32_t fatdata_sect_cnt;
uint32_t onebit;
uint32_t sectors_per_cluster_adj = 0;
uint64_t total_size = 0;
memset(fmt_params,0,sizeof(*fmt_params));
1f344: e28dcf8b add ip, sp, #556 ; 0x22c <== NOT EXECUTED
1f348: e1a01004 mov r1, r4 <== NOT EXECUTED
1f34c: e3a02050 mov r2, #80 ; 0x50 <== NOT EXECUTED
1f350: e1a0000c mov r0, ip <== NOT EXECUTED
1f354: e58dc020 str ip, [sp, #32] <== NOT EXECUTED
1f358: eb009c5b bl 464cc <memset> <== NOT EXECUTED
/*
* this one is fixed in this implementation.
* At least one thing we don't have to magically guess...
*/
if (ret_val == 0) {
fmt_params->bytes_per_sector = dd->block_size;
1f35c: e5973020 ldr r3, [r7, #32] <== NOT EXECUTED
1f360: e58d322c str r3, [sp, #556] ; 0x22c <== NOT EXECUTED
fmt_params->totl_sector_cnt = dd->size;
1f364: e597c01c ldr ip, [r7, #28] <== NOT EXECUTED
total_size = dd->block_size * dd->size;
1f368: e0080c93 mul r8, r3, ip <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f36c: e1a00005 mov r0, r5 <== NOT EXECUTED
* At least one thing we don't have to magically guess...
*/
if (ret_val == 0) {
fmt_params->bytes_per_sector = dd->block_size;
fmt_params->totl_sector_cnt = dd->size;
total_size = dd->block_size * dd->size;
1f370: e3a09000 mov r9, #0 <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f374: e3a01002 mov r1, #2 <== NOT EXECUTED
1f378: e59f2d0c ldr r2, [pc, #3340] ; 2008c <msdos_format+0xe28> <== NOT EXECUTED
1f37c: e58dc000 str ip, [sp] <== NOT EXECUTED
* this one is fixed in this implementation.
* At least one thing we don't have to magically guess...
*/
if (ret_val == 0) {
fmt_params->bytes_per_sector = dd->block_size;
fmt_params->totl_sector_cnt = dd->size;
1f380: e58dc230 str ip, [sp, #560] ; 0x230 <== NOT EXECUTED
total_size = dd->block_size * dd->size;
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f384: e98d0300 stmib sp, {r8, r9} <== NOT EXECUTED
1f388: ebffff28 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
}
/*
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
1f38c: e3550000 cmp r5, #0 <== NOT EXECUTED
1f390: 0a00025d beq 1fd0c <msdos_format+0xaa8> <== NOT EXECUTED
(rqdata->fat_num == 0)) {
1f394: e595c00c ldr ip, [r5, #12] <== NOT EXECUTED
}
/*
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
1f398: e35c0000 cmp ip, #0 <== NOT EXECUTED
1f39c: 0a000133 beq 1f870 <msdos_format+0x60c> <== NOT EXECUTED
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
}
else if (rqdata->fat_num <= 6) {
1f3a0: e35c0006 cmp ip, #6 <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f3a4: 83a02016 movhi r2, #22 <== NOT EXECUTED
if (ret_val == 0) {
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
}
else if (rqdata->fat_num <= 6) {
1f3a8: 8a00023f bhi 1fcac <msdos_format+0xa48> <== NOT EXECUTED
fmt_params->fat_num = rqdata->fat_num;
1f3ac: e20cc0ff and ip, ip, #255 ; 0xff <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f3b0: e1a0300c mov r3, ip <== NOT EXECUTED
1f3b4: e1a00005 mov r0, r5 <== NOT EXECUTED
1f3b8: e3a01002 mov r1, #2 <== NOT EXECUTED
1f3bc: e59f2ccc ldr r2, [pc, #3276] ; 20090 <msdos_format+0xe2c> <== NOT EXECUTED
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
}
else if (rqdata->fat_num <= 6) {
fmt_params->fat_num = rqdata->fat_num;
1f3c0: e5cdc25c strb ip, [sp, #604] ; 0x25c <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f3c4: ebffff19 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
/*
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
1f3c8: e3a03001 mov r3, #1 <== NOT EXECUTED
1f3cc: e58d3238 str r3, [sp, #568] ; 0x238 <== NOT EXECUTED
if ((rqdata != NULL) &&
(rqdata->fattype == MSDOS_FMT_FAT12)) {
1f3d0: e5d53014 ldrb r3, [r5, #20] <== NOT EXECUTED
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
if ((rqdata != NULL) &&
1f3d4: e3530001 cmp r3, #1 <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT12)) {
fmt_params->fattype = FAT_FAT12;
1f3d8: 03a00000 moveq r0, #0 <== NOT EXECUTED
1f3dc: 05cd325e strbeq r3, [sp, #606] ; 0x25e <== NOT EXECUTED
1f3e0: 058d0014 streq r0, [sp, #20] <== NOT EXECUTED
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
if ((rqdata != NULL) &&
1f3e4: 0a00012f beq 1f8a8 <msdos_format+0x644> <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT12)) {
fmt_params->fattype = FAT_FAT12;
}
else if ((rqdata != NULL) &&
1f3e8: e3530002 cmp r3, #2 <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT16)) {
fmt_params->fattype = FAT_FAT16;
1f3ec: 03a01000 moveq r1, #0 <== NOT EXECUTED
1f3f0: 05cd325e strbeq r3, [sp, #606] ; 0x25e <== NOT EXECUTED
1f3f4: 058d1014 streq r1, [sp, #20] <== NOT EXECUTED
fmt_params->sectors_per_cluster = 1;
if ((rqdata != NULL) &&
(rqdata->fattype == MSDOS_FMT_FAT12)) {
fmt_params->fattype = FAT_FAT12;
}
else if ((rqdata != NULL) &&
1f3f8: 0a00012a beq 1f8a8 <msdos_format+0x644> <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT16)) {
fmt_params->fattype = FAT_FAT16;
}
else if ((rqdata != NULL) &&
1f3fc: e3530003 cmp r3, #3 <== NOT EXECUTED
1f400: 0a000124 beq 1f898 <msdos_format+0x634> <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT32)) {
fmt_params->fattype = FAT_FAT32;
}
else if ((rqdata != NULL) &&
1f404: e3530000 cmp r3, #0 <== NOT EXECUTED
1f408: 1a000256 bne 1fd68 <msdos_format+0xb04> <== NOT EXECUTED
/*
* limiting values for disk size, fat type, sectors per cluster
* NOTE: maximum sect_per_clust is arbitrarily choosen with values that
* are a compromise concerning capacity and efficency
*/
if (fmt_params->totl_sector_cnt
1f40c: e59d2230 ldr r2, [sp, #560] ; 0x230 <== NOT EXECUTED
1f410: e3a03c7f mov r3, #32512 ; 0x7f00 <== NOT EXECUTED
1f414: e28330a7 add r3, r3, #167 ; 0xa7 <== NOT EXECUTED
1f418: e1520003 cmp r2, r3 <== NOT EXECUTED
1f41c: 8a0002b2 bhi 1feec <msdos_format+0xc88> <== NOT EXECUTED
< ((uint32_t)FAT_FAT12_MAX_CLN)*8) {
fmt_params->fattype = FAT_FAT12;
1f420: e3a03001 mov r3, #1 <== NOT EXECUTED
1f424: e5cd325e strb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
1f428: e3a03002 mov r3, #2 <== NOT EXECUTED
1f42c: e58d3238 str r3, [sp, #568] ; 0x238 <== NOT EXECUTED
}
}
/*
* try to use user requested cluster size
*/
if ((rqdata != NULL) &&
1f430: e3550000 cmp r5, #0 <== NOT EXECUTED
1f434: 13a0c000 movne ip, #0 <== NOT EXECUTED
1f438: 158dc014 strne ip, [sp, #20] <== NOT EXECUTED
1f43c: 1a000119 bne 1f8a8 <msdos_format+0x644> <== NOT EXECUTED
1f440: e59d2238 ldr r2, [sp, #568] ; 0x238 <== NOT EXECUTED
1f444: e58d5014 str r5, [sp, #20] <== NOT EXECUTED
1f448: e1a03002 mov r3, r2 <== NOT EXECUTED
1f44c: ea00011a b 1f8bc <msdos_format+0x658> <== NOT EXECUTED
*/
if (ret_val == 0) {
/*
* Read the current MBR to obtain the partition table.
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f450: e1a00005 mov r0, r5 <== NOT EXECUTED
1f454: e3a01002 mov r1, #2 <== NOT EXECUTED
1f458: e59f2c34 ldr r2, [pc, #3124] ; 20094 <msdos_format+0xe30> <== NOT EXECUTED
1f45c: ebfffef3 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f460: e1a00006 mov r0, r6 <== NOT EXECUTED
1f464: e3a01000 mov r1, #0 <== NOT EXECUTED
1f468: e3a02000 mov r2, #0 <== NOT EXECUTED
1f46c: e3a03000 mov r3, #0 <== NOT EXECUTED
/*
* Read the current MBR to obtain the partition table.
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"read MRB sector\n");
ret_val = msdos_format_read_sec(fd,
1f470: e59d422c ldr r4, [sp, #556] ; 0x22c <== NOT EXECUTED
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f474: eb002a52 bl 29dc4 <lseek> <== NOT EXECUTED
1f478: e3510000 cmp r1, #0 <== NOT EXECUTED
1f47c: ba0000f9 blt 1f868 <msdos_format+0x604> <== NOT EXECUTED
ret_val = -1;
}
if (ret_val == 0) {
if (0 > read(fd,buffer,sector_size)) {
1f480: e1a02004 mov r2, r4 <== NOT EXECUTED
1f484: e1a00006 mov r0, r6 <== NOT EXECUTED
1f488: e28d102c add r1, sp, #44 ; 0x2c <== NOT EXECUTED
1f48c: ebffa754 bl 91e4 <read> <== NOT EXECUTED
1f490: e3500000 cmp r0, #0 <== NOT EXECUTED
1f494: ba0000f3 blt 1f868 <msdos_format+0x604> <== NOT EXECUTED
ret_val = msdos_format_read_sec(fd,
0,
fmt_params.bytes_per_sector,
tmp_sec);
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f498: e1a00005 mov r0, r5 <== NOT EXECUTED
1f49c: e3a01002 mov r1, #2 <== NOT EXECUTED
1f4a0: e59f2bf0 ldr r2, [pc, #3056] ; 20098 <msdos_format+0xe34> <== NOT EXECUTED
1f4a4: ebfffee1 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
{
uint32_t total_sectors_num16 = 0;
uint32_t total_sectors_num32 = 0;
/* store total sector count in either 16 or 32 bit field in mbr */
if (fmt_params->totl_sector_cnt < 0x10000) {
1f4a8: e59d3230 ldr r3, [sp, #560] ; 0x230 <== NOT EXECUTED
1f4ac: e3530801 cmp r3, #65536 ; 0x10000 <== NOT EXECUTED
1f4b0: 3a00021d bcc 1fd2c <msdos_format+0xac8> <== NOT EXECUTED
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
ret_val = -1;
}
if (ret_val == 0) {
if (0 > read(fd,buffer,sector_size)) {
1f4b4: e1a02803 lsl r2, r3, #16 <== NOT EXECUTED
1f4b8: e1a01823 lsr r1, r3, #16 <== NOT EXECUTED
1f4bc: e1a02822 lsr r2, r2, #16 <== NOT EXECUTED
1f4c0: e3a0c000 mov ip, #0 <== NOT EXECUTED
1f4c4: e1a02422 lsr r2, r2, #8 <== NOT EXECUTED
1f4c8: e20110ff and r1, r1, #255 ; 0xff <== NOT EXECUTED
1f4cc: e1a0ac23 lsr sl, r3, #24 <== NOT EXECUTED
1f4d0: e20330ff and r3, r3, #255 ; 0xff <== NOT EXECUTED
1f4d4: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
1f4d8: e58d2018 str r2, [sp, #24] <== NOT EXECUTED
1f4dc: e58d1014 str r1, [sp, #20] <== NOT EXECUTED
1f4e0: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
1f4e4: e58dc01c str ip, [sp, #28] <== NOT EXECUTED
* finally we are there: let's fill in the values into the MBR
* but first clear the MRB leaving the partition table.
*/
#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be
#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16)
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
1f4e8: e3a08000 mov r8, #0 <== NOT EXECUTED
1f4ec: e28d402c add r4, sp, #44 ; 0x2c <== NOT EXECUTED
1f4f0: e3a02f6f mov r2, #444 ; 0x1bc <== NOT EXECUTED
1f4f4: e2822002 add r2, r2, #2 <== NOT EXECUTED
1f4f8: e1a01008 mov r1, r8 <== NOT EXECUTED
1f4fc: e1a00004 mov r0, r4 <== NOT EXECUTED
1f500: eb009bf1 bl 464cc <memset> <== NOT EXECUTED
* with 0xEB,....
*/
/*
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
1f504: e28d0f8b add r0, sp, #556 ; 0x22c <== NOT EXECUTED
1f508: e58d0020 str r0, [sp, #32] <== NOT EXECUTED
1f50c: e59d2020 ldr r2, [sp, #32] <== NOT EXECUTED
* but first clear the MRB leaving the partition table.
*/
#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be
#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16)
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
1f510: e3a03f7f mov r3, #508 ; 0x1fc <== NOT EXECUTED
1f514: e2833002 add r3, r3, #2 <== NOT EXECUTED
* with 0xEB,....
*/
/*
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
1f518: e2821033 add r1, r2, #51 ; 0x33 <== NOT EXECUTED
* but first clear the MRB leaving the partition table.
*/
#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be
#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16)
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
1f51c: e18480b3 strh r8, [r4, r3] <== NOT EXECUTED
* with 0xEB,....
*/
/*
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
1f520: e3a02008 mov r2, #8 <== NOT EXECUTED
1f524: e2840003 add r0, r4, #3 <== NOT EXECUTED
1f528: eb009b60 bl 462b0 <memcpy> <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
1f52c: e59db244 ldr fp, [sp, #580] ; 0x244 <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
1f530: e5dd025d ldrb r0, [sp, #605] ; 0x25d <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
1f534: e1a0c42b lsr ip, fp, #8 <== NOT EXECUTED
1f538: e5cdc03e strb ip, [sp, #62] ; 0x3e <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
1f53c: e5cd0041 strb r0, [sp, #65] ; 0x41 <== NOT EXECUTED
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
1f540: e59dc01c ldr ip, [sp, #28] <== NOT EXECUTED
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
1f544: e3e00000 mvn r0, #0 <== NOT EXECUTED
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
1f548: e59d122c ldr r1, [sp, #556] ; 0x22c <== NOT EXECUTED
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
1f54c: e5cd0044 strb r0, [sp, #68] ; 0x44 <== NOT EXECUTED
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
1f550: e3a00006 mov r0, #6 <== NOT EXECUTED
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
1f554: e5cdc03f strb ip, [sp, #63] ; 0x3f <== NOT EXECUTED
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
1f558: e5cd0046 strb r0, [sp, #70] ; 0x46 <== NOT EXECUTED
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
1f55c: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
1f560: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
1f564: e59d2234 ldr r2, [sp, #564] ; 0x234 <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
1f568: e5dd325e ldrb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
1f56c: e1a09421 lsr r9, r1, #8 <== NOT EXECUTED
1f570: e5cd9038 strb r9, [sp, #56] ; 0x38 <== NOT EXECUTED
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
1f574: e5cdc040 strb ip, [sp, #64] ; 0x40 <== NOT EXECUTED
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
1f578: e59d9238 ldr r9, [sp, #568] ; 0x238 <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
1f57c: e5cd004c strb r0, [sp, #76] ; 0x4c <== NOT EXECUTED
1f580: e28d0014 add r0, sp, #20 <== NOT EXECUTED
1f584: e8901001 ldm r0, {r0, ip} <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
1f588: e1a0e422 lsr lr, r2, #8 <== NOT EXECUTED
* fill OEMName
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
1f58c: e5cd1037 strb r1, [sp, #55] ; 0x37 <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
1f590: e5cd203a strb r2, [sp, #58] ; 0x3a <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
1f594: e3530004 cmp r3, #4 <== NOT EXECUTED
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
1f598: e3a01002 mov r1, #2 <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
1f59c: e3a02001 mov r2, #1 <== NOT EXECUTED
*/
memcpy(FAT_GET_ADDR_BR_OEMNAME(mbr),
fmt_params->OEMName,
FAT_BR_OEMNAME_SIZE);
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
1f5a0: e5cd9039 strb r9, [sp, #57] ; 0x39 <== NOT EXECUTED
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
1f5a4: e5cde03b strb lr, [sp, #59] ; 0x3b <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
1f5a8: e5cdc04d strb ip, [sp, #77] ; 0x4d <== NOT EXECUTED
1f5ac: e5cd004e strb r0, [sp, #78] ; 0x4e <== NOT EXECUTED
1f5b0: e5cda04f strb sl, [sp, #79] ; 0x4f <== NOT EXECUTED
FAT_SET_BR_BYTES_PER_SECTOR(mbr , fmt_params->bytes_per_sector);
FAT_SET_BR_SECTORS_PER_CLUSTER(mbr , fmt_params->sectors_per_cluster);
FAT_SET_BR_RESERVED_SECTORS_NUM(mbr, fmt_params->rsvd_sector_cnt);
/* number of FATs on medium */
FAT_SET_BR_FAT_NUM(mbr , 2); /* standard/recommended value */
1f5b4: e5cd103c strb r1, [sp, #60] ; 0x3c <== NOT EXECUTED
FAT_SET_BR_FILES_PER_ROOT_DIR(mbr , fmt_params->files_per_root_dir);
1f5b8: e5cdb03d strb fp, [sp, #61] ; 0x3d <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
1f5bc: e5cd8045 strb r8, [sp, #69] ; 0x45 <== NOT EXECUTED
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
1f5c0: e5cd8047 strb r8, [sp, #71] ; 0x47 <== NOT EXECUTED
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
1f5c4: e5cd2048 strb r2, [sp, #72] ; 0x48 <== NOT EXECUTED
1f5c8: e5cd8049 strb r8, [sp, #73] ; 0x49 <== NOT EXECUTED
1f5cc: e5cd804a strb r8, [sp, #74] ; 0x4a <== NOT EXECUTED
* but first clear the MRB leaving the partition table.
*/
#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be
#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16)
memset(mbr,0,RTEMS_IDE_PARTITION_TABLE_OFFSET);
memset(mbr + RTEMS_IDE_PARTITION_TABLE_OFFSET + RTEMS_IDE_PARTITION_TABLE_SIZE,
1f5d0: e1a03008 mov r3, r8 <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM16(mbr , total_sectors_num16);
FAT_SET_BR_MEDIA(mbr , fmt_params->media_code);
FAT_SET_BR_SECTORS_PER_TRACK(mbr , 255); /* only needed for INT13... */
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
1f5d4: e5cd804b strb r8, [sp, #75] ; 0x4b <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
1f5d8: 0a00025d beq 1ff54 <msdos_format+0xcf0> <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
1f5dc: e59db23c ldr fp, [sp, #572] ; 0x23c <== NOT EXECUTED
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
1f5e0: e59dc278 ldr ip, [sp, #632] ; 0x278 <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
1f5e4: e59d0020 ldr r0, [sp, #32] <== NOT EXECUTED
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
1f5e8: e1a0e42b lsr lr, fp, #8 <== NOT EXECUTED
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
1f5ec: e280103c add r1, r0, #60 ; 0x3c <== NOT EXECUTED
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
1f5f0: e1a09c2c lsr r9, ip, #24 <== NOT EXECUTED
1f5f4: e1a0842c lsr r8, ip, #8 <== NOT EXECUTED
1f5f8: e1a0a82c lsr sl, ip, #16 <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
1f5fc: e3a0200b mov r2, #11 <== NOT EXECUTED
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
1f600: e5cde043 strb lr, [sp, #67] ; 0x43 <== NOT EXECUTED
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
1f604: e284002b add r0, r4, #43 ; 0x2b <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
1f608: e3a0e029 mov lr, #41 ; 0x29 <== NOT EXECUTED
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
1f60c: e5cd3051 strb r3, [sp, #81] ; 0x51 <== NOT EXECUTED
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
1f610: e5cd3050 strb r3, [sp, #80] ; 0x50 <== NOT EXECUTED
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
1f614: e5cde052 strb lr, [sp, #82] ; 0x52 <== NOT EXECUTED
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
1f618: e5cd8054 strb r8, [sp, #84] ; 0x54 <== NOT EXECUTED
1f61c: e5cda055 strb sl, [sp, #85] ; 0x55 <== NOT EXECUTED
1f620: e5cd9056 strb r9, [sp, #86] ; 0x56 <== NOT EXECUTED
FAT_SET_BR_NUMBER_OF_HEADS(mbr , 6); /* only needed for INT13... */
FAT_SET_BR_HIDDEN_SECTORS(mbr , 1); /* only needed for INT13... */
FAT_SET_BR_TOTAL_SECTORS_NUM32(mbr , total_sectors_num32);
if (fmt_params->fattype != FAT_FAT32) {
FAT_SET_BR_SECTORS_PER_FAT(mbr ,fmt_params->sectors_per_fat);
1f624: e5cdb042 strb fp, [sp, #66] ; 0x42 <== NOT EXECUTED
FAT_SET_BR_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_BOOTSIG(mbr , FAT_BR_BOOTSIG_VAL);
FAT_SET_BR_VOLID(mbr , fmt_params->vol_id); /* volume id */
1f628: e5cdc053 strb ip, [sp, #83] ; 0x53 <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_VOLLAB(mbr),
1f62c: eb009b1f bl 462b0 <memcpy> <== NOT EXECUTED
fmt_params->VolLabel,
FAT_BR_VOLLAB_SIZE);
memcpy(FAT_GET_ADDR_BR_FILSYSTYPE(mbr),
1f630: e5dd125e ldrb r1, [sp, #606] ; 0x25e <== NOT EXECUTED
1f634: e59f2a60 ldr r2, [pc, #2656] ; 2009c <msdos_format+0xe38> <== NOT EXECUTED
1f638: e59f3a60 ldr r3, [pc, #2656] ; 200a0 <msdos_format+0xe3c> <== NOT EXECUTED
1f63c: e3510001 cmp r1, #1 <== NOT EXECUTED
1f640: 01a01002 moveq r1, r2 <== NOT EXECUTED
1f644: 11a01003 movne r1, r3 <== NOT EXECUTED
1f648: e2840036 add r0, r4, #54 ; 0x36 <== NOT EXECUTED
1f64c: e3a02008 mov r2, #8 <== NOT EXECUTED
1f650: eb009b16 bl 462b0 <memcpy> <== NOT EXECUTED
FAT_BR_FILSYSTYPE_SIZE);
}
/*
* add boot record signature
*/
FAT_SET_BR_SIGNATURE(mbr, FAT_BR_SIGNATURE_VAL);
1f654: e3a03055 mov r3, #85 ; 0x55 <== NOT EXECUTED
1f658: e5cd322a strb r3, [sp, #554] ; 0x22a <== NOT EXECUTED
1f65c: e3e03055 mvn r3, #85 ; 0x55 <== NOT EXECUTED
1f660: e5cd322b strb r3, [sp, #555] ; 0x22b <== NOT EXECUTED
/*
* add jump to boot loader at start of sector
*/
FAT_SET_VAL8(mbr,0,0xeb);
1f664: e3e03014 mvn r3, #20 <== NOT EXECUTED
1f668: e5cd302c strb r3, [sp, #44] ; 0x2c <== NOT EXECUTED
FAT_SET_VAL8(mbr,1,0x3c);
1f66c: e3a0303c mov r3, #60 ; 0x3c <== NOT EXECUTED
/*
* 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,
1f670: e1a00005 mov r0, r5 <== NOT EXECUTED
1f674: e3a01002 mov r1, #2 <== NOT EXECUTED
1f678: e59f2a24 ldr r2, [pc, #2596] ; 200a4 <msdos_format+0xe40> <== NOT EXECUTED
/*
* add jump to boot loader at start of sector
*/
FAT_SET_VAL8(mbr,0,0xeb);
FAT_SET_VAL8(mbr,1,0x3c);
1f67c: e5cd302d strb r3, [sp, #45] ; 0x2d <== NOT EXECUTED
* also write copy of MBR to disk
*/
if (ret_val == 0) {
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
1f680: e28d802c add r8, sp, #44 ; 0x2c <== NOT EXECUTED
/*
* add jump to boot loader at start of sector
*/
FAT_SET_VAL8(mbr,0,0xeb);
FAT_SET_VAL8(mbr,1,0x3c);
FAT_SET_VAL8(mbr,2,0x90);
1f684: e3e0306f mvn r3, #111 ; 0x6f <== NOT EXECUTED
1f688: e5cd302e strb r3, [sp, #46] ; 0x2e <== NOT EXECUTED
/*
* 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,
1f68c: ebfffe67 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"write MRB sector\n");
ret_val = msdos_format_write_sec(fd,
1f690: e1a00006 mov r0, r6 <== NOT EXECUTED
1f694: e3a01000 mov r1, #0 <== NOT EXECUTED
1f698: e59d222c ldr r2, [sp, #556] ; 0x22c <== NOT EXECUTED
1f69c: e1a03008 mov r3, r8 <== NOT EXECUTED
1f6a0: ebfffe79 bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
0,
fmt_params.bytes_per_sector,
tmp_sec);
}
if ((ret_val == 0) &&
1f6a4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1f6a8: 1affff0c bne 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1f6ac: e59d3254 ldr r3, [sp, #596] ; 0x254 <== NOT EXECUTED
1f6b0: e3530000 cmp r3, #0 <== NOT EXECUTED
1f6b4: 1a0001d9 bne 1fe20 <msdos_format+0xbbc> <== NOT EXECUTED
}
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
1f6b8: e59d3258 ldr r3, [sp, #600] ; 0x258 <== NOT EXECUTED
1f6bc: e3530000 cmp r3, #0 <== NOT EXECUTED
1f6c0: 1a0001ae bne 1fd80 <msdos_format+0xb1c> <== NOT EXECUTED
/*
* write FAT as all empty
* -> write all FAT sectors as zero
*/
if (ret_val == 0) {
ret_val = msdos_format_fill_sectors
1f6c4: e59d223c ldr r2, [sp, #572] ; 0x23c <== NOT EXECUTED
1f6c8: e59dc22c ldr ip, [sp, #556] ; 0x22c <== NOT EXECUTED
1f6cc: e5dd325c ldrb r3, [sp, #604] ; 0x25c <== NOT EXECUTED
1f6d0: e58dc000 str ip, [sp] <== NOT EXECUTED
1f6d4: e0030392 mul r3, r2, r3 <== NOT EXECUTED
1f6d8: e3a0c000 mov ip, #0 <== NOT EXECUTED
1f6dc: e59d2234 ldr r2, [sp, #564] ; 0x234 <== NOT EXECUTED
1f6e0: e1a00005 mov r0, r5 <== NOT EXECUTED
1f6e4: e1a01006 mov r1, r6 <== NOT EXECUTED
1f6e8: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
1f6ec: ebfffe7a bl 1f0dc <msdos_format_fill_sectors> <== NOT EXECUTED
}
/*
* clear/init root directory
* -> write all directory sectors as 0x00
*/
if (ret_val == 0) {
1f6f0: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1f6f4: 1afffef9 bne 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
ret_val = msdos_format_fill_sectors
1f6f8: e59dc22c ldr ip, [sp, #556] ; 0x22c <== NOT EXECUTED
1f6fc: e1a00005 mov r0, r5 <== NOT EXECUTED
1f700: e28d2f93 add r2, sp, #588 ; 0x24c <== NOT EXECUTED
1f704: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
1f708: e1a01006 mov r1, r6 <== NOT EXECUTED
1f70c: e58d4004 str r4, [sp, #4] <== NOT EXECUTED
1f710: e58dc000 str ip, [sp] <== NOT EXECUTED
1f714: ebfffe70 bl 1f0dc <msdos_format_fill_sectors> <== NOT EXECUTED
0x00);
}
/*
* write volume label to first entry of directory
*/
if ((ret_val == 0) && fmt_params.VolLabel_present) {
1f718: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1f71c: 1afffeef bne 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1f720: e5dd3274 ldrb r3, [sp, #628] ; 0x274 <== NOT EXECUTED
1f724: e3530000 cmp r3, #0 <== NOT EXECUTED
1f728: 0afffeec beq 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
memset(tmp_sec,0,sizeof(tmp_sec));
1f72c: e28d502c add r5, sp, #44 ; 0x2c <== NOT EXECUTED
1f730: e1a01004 mov r1, r4 <== NOT EXECUTED
1f734: e3a02c02 mov r2, #512 ; 0x200 <== NOT EXECUTED
1f738: e1a00005 mov r0, r5 <== NOT EXECUTED
1f73c: eb009b62 bl 464cc <memset> <== NOT EXECUTED
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
1f740: e59d0020 ldr r0, [sp, #32] <== NOT EXECUTED
1f744: e280303c add r3, r0, #60 ; 0x3c <== NOT EXECUTED
1f748: e8930007 ldm r3, {r0, r1, r2} <== NOT EXECUTED
1f74c: e1a03005 mov r3, r5 <== NOT EXECUTED
1f750: e8a30003 stmia r3!, {r0, r1} <== NOT EXECUTED
1f754: e1a0c822 lsr ip, r2, #16 <== NOT EXECUTED
1f758: e1c320b0 strh r2, [r3] <== NOT EXECUTED
1f75c: e5c5c00a strb ip, [r5, #10] <== NOT EXECUTED
*MSDOS_DIR_ATTR(tmp_sec) = MSDOS_ATTR_VOLUME_ID;
ret_val = msdos_format_write_sec
1f760: e1a00006 mov r0, r6 <== NOT EXECUTED
* write volume label to first entry of directory
*/
if ((ret_val == 0) && fmt_params.VolLabel_present) {
memset(tmp_sec,0,sizeof(tmp_sec));
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
*MSDOS_DIR_ATTR(tmp_sec) = MSDOS_ATTR_VOLUME_ID;
1f764: e3a0c008 mov ip, #8 <== NOT EXECUTED
ret_val = msdos_format_write_sec
1f768: e59d124c ldr r1, [sp, #588] ; 0x24c <== NOT EXECUTED
1f76c: e59d222c ldr r2, [sp, #556] ; 0x22c <== NOT EXECUTED
1f770: e1a03005 mov r3, r5 <== NOT EXECUTED
* write volume label to first entry of directory
*/
if ((ret_val == 0) && fmt_params.VolLabel_present) {
memset(tmp_sec,0,sizeof(tmp_sec));
memcpy(MSDOS_DIR_NAME(tmp_sec),fmt_params.VolLabel,MSDOS_SHORT_NAME_LEN);
*MSDOS_DIR_ATTR(tmp_sec) = MSDOS_ATTR_VOLUME_ID;
1f774: e5cdc037 strb ip, [sp, #55] ; 0x37 <== NOT EXECUTED
ret_val = msdos_format_write_sec
1f778: ebfffe43 bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
/*
* write FAT entry 0 as (0xffffff00|Media_type)EOC,
* write FAT entry 1 as EOC
* allocate directory in a FAT32 FS
*/
if ((ret_val == 0) && fmt_params.VolLabel_present){
1f77c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1f780: 1afffed6 bne 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1f784: e5dd3274 ldrb r3, [sp, #628] ; 0x274 <== NOT EXECUTED
1f788: e3530000 cmp r3, #0 <== NOT EXECUTED
1f78c: 0afffed3 beq 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
/*
* empty sector: all clusters are free/do not link further on
*/
memset(tmp_sec,0,sizeof(tmp_sec));
1f790: e1a00005 mov r0, r5 <== NOT EXECUTED
1f794: e1a01004 mov r1, r4 <== NOT EXECUTED
1f798: e3a02c02 mov r2, #512 ; 0x200 <== NOT EXECUTED
1f79c: eb009b4a bl 464cc <memset> <== NOT EXECUTED
switch(fmt_params.fattype) {
1f7a0: e5dd325e ldrb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
1f7a4: e3530002 cmp r3, #2 <== NOT EXECUTED
1f7a8: 0a0001ba beq 1fe98 <msdos_format+0xc34> <== NOT EXECUTED
1f7ac: e3530004 cmp r3, #4 <== NOT EXECUTED
1f7b0: 0a0001a8 beq 1fe58 <msdos_format+0xbf4> <== NOT EXECUTED
1f7b4: e3530001 cmp r3, #1 <== NOT EXECUTED
1f7b8: 0a0001c1 beq 1fec4 <msdos_format+0xc60> <== NOT EXECUTED
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
break;
default:
ret_val = -1;
errno = EINVAL;
1f7bc: eb008e0b bl 42ff0 <__errno> <== NOT EXECUTED
1f7c0: e3a03016 mov r3, #22 <== NOT EXECUTED
1f7c4: e5803000 str r3, [r0] <== NOT EXECUTED
}
if (fmt_params.fattype == FAT_FAT32) {
1f7c8: e5dd325e ldrb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
1f7cc: e3530004 cmp r3, #4 <== NOT EXECUTED
1f7d0: 1a000024 bne 1f868 <msdos_format+0x604> <== NOT EXECUTED
1f7d4: e3e04000 mvn r4, #0 <== NOT EXECUTED
/*
* only first valid cluster (cluster number 2) belongs
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
1f7d8: e3e01007 mvn r1, #7 <== NOT EXECUTED
1f7dc: e5dd225c ldrb r2, [sp, #604] ; 0x25c <== NOT EXECUTED
1f7e0: e3e03000 mvn r3, #0 <== NOT EXECUTED
1f7e4: e5cd1034 strb r1, [sp, #52] ; 0x34 <== NOT EXECUTED
1f7e8: e3a0100f mov r1, #15 <== NOT EXECUTED
1f7ec: e5cd3036 strb r3, [sp, #54] ; 0x36 <== NOT EXECUTED
1f7f0: e5cd3035 strb r3, [sp, #53] ; 0x35 <== NOT EXECUTED
1f7f4: e5cd1037 strb r1, [sp, #55] ; 0x37 <== NOT EXECUTED
1f7f8: e2743001 rsbs r3, r4, #1 <== NOT EXECUTED
1f7fc: 33a03000 movcc r3, #0 <== NOT EXECUTED
1f800: e3520000 cmp r2, #0 <== NOT EXECUTED
1f804: 03a03000 moveq r3, #0 <== NOT EXECUTED
}
for (i = 0;
1f808: e3530000 cmp r3, #0 <== NOT EXECUTED
1f80c: 0afffeb3 beq 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1f810: e59d123c ldr r1, [sp, #572] ; 0x23c <== NOT EXECUTED
1f814: e3a05000 mov r5, #0 <== NOT EXECUTED
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
ret_val = msdos_format_write_sec
1f818: e28d802c add r8, sp, #44 ; 0x2c <== NOT EXECUTED
1f81c: ea000000 b 1f824 <msdos_format+0x5c0> <== NOT EXECUTED
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
1f820: e59d123c ldr r1, [sp, #572] ; 0x23c <== NOT EXECUTED
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
ret_val = msdos_format_write_sec
1f824: e59d3234 ldr r3, [sp, #564] ; 0x234 <== NOT EXECUTED
1f828: e59d222c ldr r2, [sp, #556] ; 0x22c <== NOT EXECUTED
1f82c: e0213195 mla r1, r5, r1, r3 <== NOT EXECUTED
1f830: e1a00006 mov r0, r6 <== NOT EXECUTED
1f834: e1a03008 mov r3, r8 <== NOT EXECUTED
1f838: ebfffe13 bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
1f83c: e5dd325c ldrb r3, [sp, #604] ; 0x25c <== NOT EXECUTED
(i < fmt_params.fat_num) && (ret_val == 0);
i++) {
1f840: e2855001 add r5, r5, #1 <== NOT EXECUTED
* to root directory, and is end of chain
* mark this in every copy of the FAT
*/
FAT_SET_VAL32(tmp_sec,8,FAT_FAT32_EOC);
}
for (i = 0;
1f844: e1530005 cmp r3, r5 <== NOT EXECUTED
1f848: d3a02000 movle r2, #0 <== NOT EXECUTED
1f84c: c3a02001 movgt r2, #1 <== NOT EXECUTED
1f850: e3500000 cmp r0, #0 <== NOT EXECUTED
1f854: 13a02000 movne r2, #0 <== NOT EXECUTED
1f858: e3520000 cmp r2, #0 <== NOT EXECUTED
1f85c: 1affffef bne 1f820 <msdos_format+0x5bc> <== NOT EXECUTED
1f860: e1a04000 mov r4, r0 <== NOT EXECUTED
1f864: eafffe9d b 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1f868: e3e04000 mvn r4, #0 <== NOT EXECUTED
1f86c: eafffe9b b 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
1f870: e3a0c002 mov ip, #2 <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f874: e1a0300c mov r3, ip <== NOT EXECUTED
1f878: e1a0100c mov r1, ip <== NOT EXECUTED
1f87c: e1a00005 mov r0, r5 <== NOT EXECUTED
1f880: e59f2808 ldr r2, [pc, #2056] ; 20090 <msdos_format+0xe2c> <== NOT EXECUTED
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
1f884: e5cdc25c strb ip, [sp, #604] ; 0x25c <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f888: ebfffde8 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
/*
* determine FAT type and sectors per cluster
* depends on
*/
if (ret_val == 0) {
fmt_params->sectors_per_cluster = 1;
1f88c: e3a03001 mov r3, #1 <== NOT EXECUTED
1f890: e58d3238 str r3, [sp, #568] ; 0x238 <== NOT EXECUTED
1f894: eafffecd b 1f3d0 <msdos_format+0x16c> <== NOT EXECUTED
(rqdata->fattype == MSDOS_FMT_FAT16)) {
fmt_params->fattype = FAT_FAT16;
}
else if ((rqdata != NULL) &&
(rqdata->fattype == MSDOS_FMT_FAT32)) {
fmt_params->fattype = FAT_FAT32;
1f898: e3a03004 mov r3, #4 <== NOT EXECUTED
1f89c: e3a02000 mov r2, #0 <== NOT EXECUTED
1f8a0: e5cd325e strb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
1f8a4: e58d2014 str r2, [sp, #20] <== NOT EXECUTED
}
/*
* try to use user requested cluster size
*/
if ((rqdata != NULL) &&
(rqdata->sectors_per_cluster > 0)) {
1f8a8: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
}
}
/*
* try to use user requested cluster size
*/
if ((rqdata != NULL) &&
1f8ac: e3530000 cmp r3, #0 <== NOT EXECUTED
1f8b0: 059d2238 ldreq r2, [sp, #568] ; 0x238 <== NOT EXECUTED
1f8b4: 11a02003 movne r2, r3 <== NOT EXECUTED
1f8b8: 01a03002 moveq r3, r2 <== NOT EXECUTED
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
<= 32768L/fmt_params->bytes_per_sector) {
1f8bc: e59da22c ldr sl, [sp, #556] ; 0x22c <== NOT EXECUTED
1f8c0: e3a04080 mov r4, #128 ; 0x80 <== NOT EXECUTED
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
1f8c4: e1540003 cmp r4, r3 <== NOT EXECUTED
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
<= 32768L/fmt_params->bytes_per_sector) {
1f8c8: e3a08000 mov r8, #0 <== NOT EXECUTED
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
1f8cc: e1a0100a mov r1, sl <== NOT EXECUTED
1f8d0: e3a00902 mov r0, #32768 ; 0x8000 <== NOT EXECUTED
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
1f8d4: 81a03002 movhi r3, r2 <== NOT EXECUTED
1f8d8: 8a000003 bhi 1f8ec <msdos_format+0x688> <== NOT EXECUTED
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
1f8dc: eb00ed81 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
1f8e0: e1500004 cmp r0, r4 <== NOT EXECUTED
1f8e4: 2a00000d bcs 1f920 <msdos_format+0x6bc> <== NOT EXECUTED
1f8e8: e1a03004 mov r3, r4 <== NOT EXECUTED
* check sectors per cluster.
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
1f8ec: e2888001 add r8, r8, #1 <== NOT EXECUTED
1f8f0: e3580008 cmp r8, #8 <== NOT EXECUTED
1f8f4: e1a040a4 lsr r4, r4, #1 <== NOT EXECUTED
1f8f8: 0a0001de beq 20078 <msdos_format+0xe14> <== NOT EXECUTED
1f8fc: e1a02003 mov r2, r3 <== NOT EXECUTED
if (fmt_params->sectors_per_cluster >= onebit) {
1f900: e1540003 cmp r4, r3 <== NOT EXECUTED
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
1f904: e1a0100a mov r1, sl <== NOT EXECUTED
1f908: e3a00902 mov r0, #32768 ; 0x8000 <== NOT EXECUTED
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
if (fmt_params->sectors_per_cluster >= onebit) {
1f90c: 81a03002 movhi r3, r2 <== NOT EXECUTED
1f910: 8afffff5 bhi 1f8ec <msdos_format+0x688> <== NOT EXECUTED
fmt_params->sectors_per_cluster = onebit;
if (fmt_params->sectors_per_cluster
1f914: eb00ed73 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
1f918: e1500004 cmp r0, r4 <== NOT EXECUTED
1f91c: 3afffff1 bcc 1f8e8 <msdos_format+0x684> <== NOT EXECUTED
* check sectors per cluster.
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
1f920: e58d4238 str r4, [sp, #568] ; 0x238 <== NOT EXECUTED
}
}
}
}
if (ret_val == 0) {
1f924: e59d0014 ldr r0, [sp, #20] <== NOT EXECUTED
1f928: e3500000 cmp r0, #0 <== NOT EXECUTED
1f92c: 1a0000f1 bne 1fcf8 <msdos_format+0xa94> <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f930: e1a00005 mov r0, r5 <== NOT EXECUTED
1f934: e3a01002 mov r1, #2 <== NOT EXECUTED
1f938: e59f2768 ldr r2, [pc, #1896] ; 200a8 <msdos_format+0xe44> <== NOT EXECUTED
1f93c: e59d3238 ldr r3, [sp, #568] ; 0x238 <== NOT EXECUTED
1f940: ebfffdba bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"sectors per cluster: %d\n", fmt_params->sectors_per_cluster);
if (fmt_params->fattype == FAT_FAT32) {
1f944: e5dda25e ldrb sl, [sp, #606] ; 0x25e <== NOT EXECUTED
1f948: e35a0004 cmp sl, #4 <== NOT EXECUTED
1f94c: 0a0001b4 beq 20024 <msdos_format+0xdc0> <== NOT EXECUTED
fmt_params->fsinfo_sec = 1;
}
else {
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
1f950: e3a03001 mov r3, #1 <== NOT EXECUTED
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
1f954: e3550000 cmp r5, #0 <== NOT EXECUTED
fmt_params->fsinfo_sec = 1;
}
else {
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
1f958: e58d3234 str r3, [sp, #564] ; 0x234 <== NOT EXECUTED
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
1f95c: 0a0000fc beq 1fd54 <msdos_format+0xaf0> <== NOT EXECUTED
(rqdata->files_per_root_dir > 0)) {
1f960: e5954010 ldr r4, [r5, #16] <== NOT EXECUTED
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
1f964: e3540000 cmp r4, #0 <== NOT EXECUTED
(rqdata->files_per_root_dir > 0)) {
fmt_params->files_per_root_dir = rqdata->files_per_root_dir;
1f968: 12444001 subne r4, r4, #1 <== NOT EXECUTED
/* recommended: for FAT12/FAT16, always set reserved sector count to 1 */
fmt_params->rsvd_sector_cnt = 1;
/* recommended: for FAT16, set files per root directory to 512 */
/* for FAT12/FAT16, set files per root directory */
/* must fill up an even count of sectors */
if ((rqdata != NULL) &&
1f96c: 0a0000f8 beq 1fd54 <msdos_format+0xaf0> <== NOT EXECUTED
}
else {
fmt_params->files_per_root_dir = 64;
}
}
fmt_params->files_per_root_dir = (fmt_params->files_per_root_dir +
1f970: e59d922c ldr r9, [sp, #556] ; 0x22c <== NOT EXECUTED
1f974: e1a01089 lsl r1, r9, #1 <== NOT EXECUTED
1f978: e1a012a1 lsr r1, r1, #5 <== NOT EXECUTED
1f97c: e0844001 add r4, r4, r1 <== NOT EXECUTED
(2*fmt_params->bytes_per_sector/
FAT_DIRENTRY_SIZE-1));
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
1f980: e1a00004 mov r0, r4 <== NOT EXECUTED
1f984: eb00edeb bl 5b138 <__umodsi3> <== NOT EXECUTED
1f988: e0600004 rsb r0, r0, r4 <== NOT EXECUTED
1f98c: e58d0244 str r0, [sp, #580] ; 0x244 <== NOT EXECUTED
1f990: e1a00280 lsl r0, r0, #5 <== NOT EXECUTED
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
1f994: e249c001 sub ip, r9, #1 <== NOT EXECUTED
1f998: e08c0000 add r0, ip, r0 <== NOT EXECUTED
1f99c: e1a01009 mov r1, r9 <== NOT EXECUTED
1f9a0: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
1f9a4: eb00ed4f bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
+ fmt_params->bytes_per_sector - 1)
/ fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
fatdata_sect_cnt = (fmt_params->totl_sector_cnt -
1f9a8: e59d2230 ldr r2, [sp, #560] ; 0x230 <== NOT EXECUTED
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
1f9ac: e1a03000 mov r3, r0 <== NOT EXECUTED
+ fmt_params->bytes_per_sector - 1)
/ fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
fatdata_sect_cnt = (fmt_params->totl_sector_cnt -
1f9b0: e59d0234 ldr r0, [sp, #564] ; 0x234 <== NOT EXECUTED
1f9b4: e0602002 rsb r2, r0, r2 <== NOT EXECUTED
1f9b8: e58d0028 str r0, [sp, #40] ; 0x28 <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9bc: e1a01009 mov r1, r9 <== NOT EXECUTED
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
+ fmt_params->bytes_per_sector - 1)
/ fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
fatdata_sect_cnt = (fmt_params->totl_sector_cnt -
1f9c0: e0632002 rsb r2, r3, r2 <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9c4: e3a00902 mov r0, #32768 ; 0x8000 <== NOT EXECUTED
(((fmt_params->files_per_root_dir * FAT_DIRENTRY_SIZE)
+ fmt_params->bytes_per_sector - 1)
/ fmt_params->bytes_per_sector);
}
if (ret_val == 0) {
fatdata_sect_cnt = (fmt_params->totl_sector_cnt -
1f9c8: e58d2024 str r2, [sp, #36] ; 0x24 <== NOT EXECUTED
FAT_DIRENTRY_SIZE-1));
fmt_params->files_per_root_dir -= (fmt_params->files_per_root_dir %
(2*fmt_params->bytes_per_sector
/FAT_DIRENTRY_SIZE));
}
fmt_params->root_dir_sectors =
1f9cc: e58d3248 str r3, [sp, #584] ; 0x248 <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9d0: eb00ed44 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
/*
* check values to get legal arrangement of FAT type and cluster count
*/
ret_val = msdos_format_eval_sectors_per_cluster
1f9d4: e59d4238 ldr r4, [sp, #568] ; 0x238 <== NOT EXECUTED
(fmt_params->fattype,
fmt_params->bytes_per_sector,
fatdata_sect_cnt,
fmt_params->fat_num,
1f9d8: e5dd125c ldrb r1, [sp, #604] ; 0x25c <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9dc: e1540000 cmp r4, r0 <== NOT EXECUTED
ret_val = msdos_format_eval_sectors_per_cluster
(fmt_params->fattype,
fmt_params->bytes_per_sector,
fatdata_sect_cnt,
fmt_params->fat_num,
1f9e0: e58d100c str r1, [sp, #12] <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9e4: 9a000002 bls 1f9f4 <msdos_format+0x790> <== NOT EXECUTED
sectors_per_cluster /= 2;
1f9e8: e1a040a4 lsr r4, r4, #1 <== NOT EXECUTED
uint32_t sectors_per_fat;
uint32_t data_cluster_cnt;
/*
* ensure, that maximum cluster size (32KByte) is not exceeded
*/
while (MS_BYTES_PER_CLUSTER_LIMIT / bytes_per_sector < sectors_per_cluster) {
1f9ec: e1540000 cmp r4, r0 <== NOT EXECUTED
1f9f0: 8afffffc bhi 1f9e8 <msdos_format+0x784> <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1f9f4: e3a00eff mov r0, #4080 ; 0xff0 <== NOT EXECUTED
1f9f8: e3a0b801 mov fp, #65536 ; 0x10000 <== NOT EXECUTED
1f9fc: e2800005 add r0, r0, #5 <== NOT EXECUTED
1fa00: e24bb00b sub fp, fp, #11 <== NOT EXECUTED
1fa04: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
1fa08: e58db01c str fp, [sp, #28] <== NOT EXECUTED
* compute number of data clusters for current data:
* - compute cluster count for data AND fat
* - compute storage size for FAT
* - subtract from total cluster count
*/
fatdata_cluster_cnt = fatdata_sec_cnt/sectors_per_cluster;
1fa0c: e59d0024 ldr r0, [sp, #36] ; 0x24 <== NOT EXECUTED
1fa10: e1a01004 mov r1, r4 <== NOT EXECUTED
1fa14: eb00ed33 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (fattype == FAT_FAT12) {
1fa18: e35a0001 cmp sl, #1 <== NOT EXECUTED
* compute number of data clusters for current data:
* - compute cluster count for data AND fat
* - compute storage size for FAT
* - subtract from total cluster count
*/
fatdata_cluster_cnt = fatdata_sec_cnt/sectors_per_cluster;
1fa1c: e1a08000 mov r8, r0 <== NOT EXECUTED
if (fattype == FAT_FAT12) {
1fa20: 0a000075 beq 1fbfc <msdos_format+0x998> <== NOT EXECUTED
fat_capacity = fatdata_cluster_cnt * 3 / 2;
}
else if (fattype == FAT_FAT16) {
1fa24: e35a0002 cmp sl, #2 <== NOT EXECUTED
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
1fa28: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
fatdata_cluster_cnt = fatdata_sec_cnt/sectors_per_cluster;
if (fattype == FAT_FAT12) {
fat_capacity = fatdata_cluster_cnt * 3 / 2;
}
else if (fattype == FAT_FAT16) {
fat_capacity = fatdata_cluster_cnt * 2;
1fa2c: 01a00080 lsleq r0, r0, #1 <== NOT EXECUTED
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
1fa30: 11a00108 lslne r0, r8, #2 <== NOT EXECUTED
}
sectors_per_fat = ((fat_capacity
1fa34: e0810000 add r0, r1, r0 <== NOT EXECUTED
1fa38: e1a01009 mov r1, r9 <== NOT EXECUTED
1fa3c: eb00ed29 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1fa40: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
1fa44: e1a0b000 mov fp, r0 <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1fa48: e2440001 sub r0, r4, #1 <== NOT EXECUTED
1fa4c: e0200b92 mla r0, r2, fp, r0 <== NOT EXECUTED
1fa50: e1a01004 mov r1, r4 <== NOT EXECUTED
1fa54: eb00ed23 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
1fa58: e59dc01c ldr ip, [sp, #28] <== NOT EXECUTED
1fa5c: e0600008 rsb r0, r0, r8 <== NOT EXECUTED
1fa60: e150000c cmp r0, ip <== NOT EXECUTED
1fa64: 93a03000 movls r3, #0 <== NOT EXECUTED
1fa68: 83a03001 movhi r3, #1 <== NOT EXECUTED
1fa6c: e35a0002 cmp sl, #2 <== NOT EXECUTED
1fa70: 13a03000 movne r3, #0 <== NOT EXECUTED
1fa74: e3530000 cmp r3, #0 <== NOT EXECUTED
1fa78: 0a00006e beq 1fc38 <msdos_format+0x9d4> <== NOT EXECUTED
((fattype == FAT_FAT16) && (data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
sectors_per_cluster *= 2;
1fa7c: e1a04084 lsl r4, r4, #1 <== NOT EXECUTED
finished = true;
}
/*
* when maximum cluster size is exceeded, we have invalid data, abort...
*/
if ((sectors_per_cluster * bytes_per_sector)
1fa80: e0030499 mul r3, r9, r4 <== NOT EXECUTED
1fa84: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
((fattype == FAT_FAT16) && (data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
sectors_per_cluster *= 2;
1fa88: e3a02000 mov r2, #0 <== NOT EXECUTED
finished = true;
}
/*
* when maximum cluster size is exceeded, we have invalid data, abort...
*/
if ((sectors_per_cluster * bytes_per_sector)
1fa8c: 9a00006d bls 1fc48 <msdos_format+0x9e4> <== NOT EXECUTED
finished = true;
}
} while (!finished);
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
1fa90: eb008d56 bl 42ff0 <__errno> <== NOT EXECUTED
1fa94: e3a03016 mov r3, #22 <== NOT EXECUTED
1fa98: e5803000 str r3, [r0] <== NOT EXECUTED
1fa9c: e59d0234 ldr r0, [sp, #564] ; 0x234 <== NOT EXECUTED
1faa0: e5dd125c ldrb r1, [sp, #604] ; 0x25c <== NOT EXECUTED
fatdata_sect_cnt,
fmt_params->fat_num,
fmt_params->sectors_per_cluster,
§ors_per_cluster_adj,
&(fmt_params->sectors_per_fat));
fmt_params->sectors_per_cluster = sectors_per_cluster_adj;
1faa4: e3a03000 mov r3, #0 <== NOT EXECUTED
1faa8: e3e0c000 mvn ip, #0 <== NOT EXECUTED
1faac: e58d3238 str r3, [sp, #568] ; 0x238 <== NOT EXECUTED
1fab0: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
1fab4: e58d0028 str r0, [sp, #40] ; 0x28 <== NOT EXECUTED
1fab8: e58d100c str r1, [sp, #12] <== NOT EXECUTED
}
/*
* determine location and size of root directory
* for formatting
*/
if (fmt_params->root_dir_sectors > 0) {
1fabc: e59d3248 ldr r3, [sp, #584] ; 0x248 <== NOT EXECUTED
1fac0: e3530000 cmp r3, #0 <== NOT EXECUTED
1fac4: 0a000083 beq 1fcd8 <msdos_format+0xa74> <== NOT EXECUTED
fmt_params->root_dir_start_sec =
1fac8: e59d123c ldr r1, [sp, #572] ; 0x23c <== NOT EXECUTED
1facc: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
1fad0: e59d0028 ldr r0, [sp, #40] ; 0x28 <== NOT EXECUTED
1fad4: e0220291 mla r2, r1, r2, r0 <== NOT EXECUTED
fmt_params->rsvd_sector_cnt
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
fmt_params->root_dir_fmt_sec_cnt = fmt_params->root_dir_sectors;
1fad8: e58d3250 str r3, [sp, #592] ; 0x250 <== NOT EXECUTED
/*
* determine location and size of root directory
* for formatting
*/
if (fmt_params->root_dir_sectors > 0) {
fmt_params->root_dir_start_sec =
1fadc: e58d224c str r2, [sp, #588] ; 0x24c <== NOT EXECUTED
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
}
/*
* determine usable OEMName
*/
if (ret_val == 0) {
1fae0: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
1fae4: e3520000 cmp r2, #0 <== NOT EXECUTED
1fae8: 1a000075 bne 1fcc4 <msdos_format+0xa60> <== NOT EXECUTED
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
1faec: e3550000 cmp r5, #0 <== NOT EXECUTED
1faf0: 059f15b4 ldreq r1, [pc, #1460] ; 200ac <msdos_format+0xe48><== NOT EXECUTED
1faf4: 0a000003 beq 1fb08 <msdos_format+0x8a4> <== NOT EXECUTED
(rqdata->OEMName != NULL)) {
1faf8: e5951000 ldr r1, [r5] <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
1fafc: e59f35a8 ldr r3, [pc, #1448] ; 200ac <msdos_format+0xe48> <== NOT EXECUTED
1fb00: e3510000 cmp r1, #0 <== NOT EXECUTED
1fb04: 01a01003 moveq r1, r3 <== NOT EXECUTED
1fb08: e59f35a0 ldr r3, [pc, #1440] ; 200b0 <msdos_format+0xe4c> <== NOT EXECUTED
1fb0c: e59dc020 ldr ip, [sp, #32] <== NOT EXECUTED
1fb10: e5930000 ldr r0, [r3] <== NOT EXECUTED
}
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int msdos_format
1fb14: e28c403c add r4, ip, #60 ; 0x3c <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->OEMName;
int cnt;
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
1fb18: e28c3034 add r3, ip, #52 ; 0x34 <== NOT EXECUTED
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
1fb1c: e3a08020 mov r8, #32 <== NOT EXECUTED
}
*to = '\0';
1fb20: e3a0e000 mov lr, #0 <== NOT EXECUTED
from = rqdata->OEMName;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->OEMName)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
1fb24: e5d12000 ldrb r2, [r1] <== NOT EXECUTED
1fb28: e080c002 add ip, r0, r2 <== NOT EXECUTED
1fb2c: e5dcc001 ldrb ip, [ip, #1] <== NOT EXECUTED
1fb30: e31c0097 tst ip, #151 ; 0x97 <== NOT EXECUTED
*to++ = *from++;
1fb34: 15432001 strbne r2, [r3, #-1] <== NOT EXECUTED
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
1fb38: 05438001 strbeq r8, [r3, #-1] <== NOT EXECUTED
}
*to = '\0';
1fb3c: e4c3e001 strb lr, [r3], #1 <== NOT EXECUTED
}
for (cnt = 0;
cnt < (sizeof(fmt_params->OEMName)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
*to++ = *from++;
1fb40: 12811001 addne r1, r1, #1 <== NOT EXECUTED
from = "RTEMS"; /* default: make "from" point to OS Name */
if ((rqdata != NULL) &&
(rqdata->OEMName != NULL)) {
from = rqdata->OEMName;
}
for (cnt = 0;
1fb44: e1530004 cmp r3, r4 <== NOT EXECUTED
1fb48: 1afffff5 bne 1fb24 <msdos_format+0x8c0> <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
1fb4c: e3550000 cmp r5, #0 <== NOT EXECUTED
1fb50: 0a0000be beq 1fe50 <msdos_format+0xbec> <== NOT EXECUTED
(rqdata->VolLabel != NULL)) {
1fb54: e5951004 ldr r1, [r5, #4] <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
1fb58: e3510000 cmp r1, #0 <== NOT EXECUTED
(rqdata->VolLabel != NULL)) {
from = rqdata->VolLabel;
fmt_params->VolLabel_present = true;
1fb5c: 13a03001 movne r3, #1 <== NOT EXECUTED
1fb60: 15cd3274 strbne r3, [sp, #628] ; 0x274 <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
1fb64: 0a0000b9 beq 1fe50 <msdos_format+0xbec> <== NOT EXECUTED
}
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int msdos_format
1fb68: e59d2020 ldr r2, [sp, #32] <== NOT EXECUTED
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
1fb6c: e3a08020 mov r8, #32 <== NOT EXECUTED
}
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int msdos_format
1fb70: e2824048 add r4, r2, #72 ; 0x48 <== NOT EXECUTED
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
(rqdata->VolLabel != NULL)) {
from = rqdata->VolLabel;
fmt_params->VolLabel_present = true;
1fb74: e282303d add r3, r2, #61 ; 0x3d <== NOT EXECUTED
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
}
*to = '\0';
1fb78: e3a0e000 mov lr, #0 <== NOT EXECUTED
fmt_params->VolLabel_present = true;
}
for (cnt = 0;
cnt < (sizeof(fmt_params->VolLabel)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
1fb7c: e5d12000 ldrb r2, [r1] <== NOT EXECUTED
1fb80: e080c002 add ip, r0, r2 <== NOT EXECUTED
1fb84: e5dcc001 ldrb ip, [ip, #1] <== NOT EXECUTED
1fb88: e31c0097 tst ip, #151 ; 0x97 <== NOT EXECUTED
*to++ = *from++;
1fb8c: 15432001 strbne r2, [r3, #-1] <== NOT EXECUTED
/*
* non-printable character in given name, so keep stuck
* at that character and replace all following characters
* with a ' '
*/
*to++=' ';
1fb90: 05438001 strbeq r8, [r3, #-1] <== NOT EXECUTED
}
*to = '\0';
1fb94: e4c3e001 strb lr, [r3], #1 <== NOT EXECUTED
}
for (cnt = 0;
cnt < (sizeof(fmt_params->VolLabel)-1);
cnt++) {
if (isprint((unsigned char)*from)) {
*to++ = *from++;
1fb98: 12811001 addne r1, r1, #1 <== NOT EXECUTED
if ((rqdata != NULL) &&
(rqdata->VolLabel != NULL)) {
from = rqdata->VolLabel;
fmt_params->VolLabel_present = true;
}
for (cnt = 0;
1fb9c: e1530004 cmp r3, r4 <== NOT EXECUTED
1fba0: 1afffff5 bne 1fb7c <msdos_format+0x918> <== NOT EXECUTED
{
int ret_val = 0;
int rc;
struct timeval time_value;
rc = rtems_clock_get_tod_timeval(&time_value);
1fba4: e28d0fb1 add r0, sp, #708 ; 0x2c4 <== NOT EXECUTED
1fba8: ebffb06e bl bd68 <rtems_clock_get_tod_timeval> <== NOT EXECUTED
if (rc == RTEMS_SUCCESSFUL) {
1fbac: e3500000 cmp r0, #0 <== NOT EXECUTED
1fbb0: 1a0000ca bne 1fee0 <msdos_format+0xc7c> <== NOT EXECUTED
*volid_ptr = time_value.tv_sec + time_value.tv_sec;
1fbb4: e59d32c4 ldr r3, [sp, #708] ; 0x2c4 <== NOT EXECUTED
1fbb8: e1a03083 lsl r3, r3, #1 <== NOT EXECUTED
1fbbc: e58d3278 str r3, [sp, #632] ; 0x278 <== NOT EXECUTED
ret_val = msdos_format_determine_fmt_params(dd,rqdata,&fmt_params);
}
/*
* if requested, write whole disk/partition with 0xe5
*/
if ((ret_val == 0) &&
1fbc0: e3550000 cmp r5, #0 <== NOT EXECUTED
1fbc4: 0afffe21 beq 1f450 <msdos_format+0x1ec> <== NOT EXECUTED
(rqdata != NULL) &&
!(rqdata->quick_format)) {
1fbc8: e5d52016 ldrb r2, [r5, #22] <== NOT EXECUTED
1fbcc: e3520000 cmp r2, #0 <== NOT EXECUTED
1fbd0: 1afffe1e bne 1f450 <msdos_format+0x1ec> <== NOT EXECUTED
ret_val = msdos_format_fill_sectors
1fbd4: e59dc22c ldr ip, [sp, #556] ; 0x22c <== NOT EXECUTED
1fbd8: e59d3230 ldr r3, [sp, #560] ; 0x230 <== NOT EXECUTED
1fbdc: e58dc000 str ip, [sp] <== NOT EXECUTED
1fbe0: e1a00005 mov r0, r5 <== NOT EXECUTED
1fbe4: e3a0c0e5 mov ip, #229 ; 0xe5 <== NOT EXECUTED
1fbe8: e1a01006 mov r1, r6 <== NOT EXECUTED
1fbec: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
1fbf0: ebfffd39 bl 1f0dc <msdos_format_fill_sectors> <== NOT EXECUTED
1fbf4: e1a04000 mov r4, r0 <== NOT EXECUTED
1fbf8: eafffdb6 b 1f2d8 <msdos_format+0x74> <== NOT EXECUTED
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
1fbfc: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
1fc00: e0800080 add r0, r0, r0, lsl #1 <== NOT EXECUTED
1fc04: e08100a0 add r0, r1, r0, lsr #1 <== NOT EXECUTED
1fc08: e1a01009 mov r1, r9 <== NOT EXECUTED
1fc0c: eb00ecb5 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1fc10: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
}
else { /* FAT32 */
fat_capacity = fatdata_cluster_cnt * 4;
}
sectors_per_fat = ((fat_capacity
1fc14: e1a0b000 mov fp, r0 <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1fc18: e2440001 sub r0, r4, #1 <== NOT EXECUTED
1fc1c: e0200b92 mla r0, r2, fp, r0 <== NOT EXECUTED
1fc20: e1a01004 mov r1, r4 <== NOT EXECUTED
1fc24: eb00ecaf bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
1fc28: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
1fc2c: e0600008 rsb r0, r0, r8 <== NOT EXECUTED
1fc30: e1500003 cmp r0, r3 <== NOT EXECUTED
1fc34: 8affff90 bhi 1fa7c <msdos_format+0x818> <== NOT EXECUTED
finished = true;
}
/*
* when maximum cluster size is exceeded, we have invalid data, abort...
*/
if ((sectors_per_cluster * bytes_per_sector)
1fc38: e0030499 mul r3, r9, r4 <== NOT EXECUTED
1fc3c: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
((fattype == FAT_FAT16) && (data_cluster_cnt > FAT_FAT16_MAX_CLN))) {
sectors_per_cluster *= 2;
1fc40: e3a02001 mov r2, #1 <== NOT EXECUTED
finished = true;
}
/*
* when maximum cluster size is exceeded, we have invalid data, abort...
*/
if ((sectors_per_cluster * bytes_per_sector)
1fc44: 8affff91 bhi 1fa90 <msdos_format+0x82c> <== NOT EXECUTED
> MS_BYTES_PER_CLUSTER_LIMIT) {
ret_val = EINVAL;
finished = true;
}
} while (!finished);
1fc48: e3520000 cmp r2, #0 <== NOT EXECUTED
1fc4c: 0affff6e beq 1fa0c <msdos_format+0x7a8> <== NOT EXECUTED
/*
* determine media code
*/
if (ret_val == 0) {
if ((rqdata != NULL) &&
1fc50: e3550000 cmp r5, #0 <== NOT EXECUTED
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
}
else {
*sectors_per_cluster_adj = sectors_per_cluster;
*sectors_per_fat_ptr = sectors_per_fat;
1fc54: e58db23c str fp, [sp, #572] ; 0x23c <== NOT EXECUTED
fatdata_sect_cnt,
fmt_params->fat_num,
fmt_params->sectors_per_cluster,
§ors_per_cluster_adj,
&(fmt_params->sectors_per_fat));
fmt_params->sectors_per_cluster = sectors_per_cluster_adj;
1fc58: e58d4238 str r4, [sp, #568] ; 0x238 <== NOT EXECUTED
/*
* determine media code
*/
if (ret_val == 0) {
if ((rqdata != NULL) &&
1fc5c: 0a000102 beq 2006c <msdos_format+0xe08> <== NOT EXECUTED
1fc60: e5d54015 ldrb r4, [r5, #21] <== NOT EXECUTED
1fc64: e3540000 cmp r4, #0 <== NOT EXECUTED
1fc68: 0a0000ff beq 2006c <msdos_format+0xe08> <== NOT EXECUTED
(rqdata->media != 0)) {
const char valid_media_codes[] =
{0xF0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
1fc6c: e59f3440 ldr r3, [pc, #1088] ; 200b4 <msdos_format+0xe50> <== NOT EXECUTED
1fc70: e8930007 ldm r3, {r0, r1, r2} <== NOT EXECUTED
1fc74: e28d3fb1 add r3, sp, #708 ; 0x2c4 <== NOT EXECUTED
1fc78: e8a30003 stmia r3!, {r0, r1} <== NOT EXECUTED
if (NULL==memchr(valid_media_codes,
1fc7c: e28d0fb1 add r0, sp, #708 ; 0x2c4 <== NOT EXECUTED
*/
if (ret_val == 0) {
if ((rqdata != NULL) &&
(rqdata->media != 0)) {
const char valid_media_codes[] =
{0xF0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
1fc80: e5c32000 strb r2, [r3] <== NOT EXECUTED
if (NULL==memchr(valid_media_codes,
1fc84: e1a01004 mov r1, r4 <== NOT EXECUTED
1fc88: e3a02009 mov r2, #9 <== NOT EXECUTED
1fc8c: eb009928 bl 46134 <memchr> <== NOT EXECUTED
1fc90: e3500000 cmp r0, #0 <== NOT EXECUTED
sizeof(valid_media_codes))) {
ret_val = -1;
errno = EINVAL;
}
else {
fmt_params->media_code = rqdata->media;
1fc94: 15cd425d strbne r4, [sp, #605] ; 0x25d <== NOT EXECUTED
if (ret_val == 0) {
if ((rqdata != NULL) &&
(rqdata->media != 0)) {
const char valid_media_codes[] =
{0xF0,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
if (NULL==memchr(valid_media_codes,
1fc98: 1affff87 bne 1fabc <msdos_format+0x858> <== NOT EXECUTED
rqdata->media,
sizeof(valid_media_codes))) {
ret_val = -1;
errno = EINVAL;
1fc9c: eb008cd3 bl 42ff0 <__errno> <== NOT EXECUTED
1fca0: e3a03016 mov r3, #22 <== NOT EXECUTED
1fca4: e5803000 str r3, [r0] <== NOT EXECUTED
1fca8: e3e02000 mvn r2, #0 <== NOT EXECUTED
1fcac: e59d3234 ldr r3, [sp, #564] ; 0x234 <== NOT EXECUTED
1fcb0: e5ddc25c ldrb ip, [sp, #604] ; 0x25c <== NOT EXECUTED
1fcb4: e58d2014 str r2, [sp, #20] <== NOT EXECUTED
1fcb8: e58d3028 str r3, [sp, #40] ; 0x28 <== NOT EXECUTED
1fcbc: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
1fcc0: eaffff7d b 1fabc <msdos_format+0x858> <== NOT EXECUTED
}
/*
* Phuuu.... That's it.
*/
if (ret_val != 0) {
rtems_set_errno_and_return_minus_one(ret_val);
1fcc4: eb008cc9 bl 42ff0 <__errno> <== NOT EXECUTED
1fcc8: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
1fccc: e3e04000 mvn r4, #0 <== NOT EXECUTED
1fcd0: e5803000 str r3, [r0] <== NOT EXECUTED
1fcd4: eafffd81 b 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
}
else {
/*
* for FAT32: root directory is in cluster 2
*/
fmt_params->root_dir_start_sec =
1fcd8: e59d223c ldr r2, [sp, #572] ; 0x23c <== NOT EXECUTED
1fcdc: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
1fce0: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
1fce4: e0231392 mla r3, r2, r3, r1 <== NOT EXECUTED
1fce8: e58d324c str r3, [sp, #588] ; 0x24c <== NOT EXECUTED
fmt_params->rsvd_sector_cnt
+ (fmt_params-> fat_num*fmt_params->sectors_per_fat);
fmt_params->root_dir_fmt_sec_cnt = fmt_params->sectors_per_cluster;
1fcec: e59d3238 ldr r3, [sp, #568] ; 0x238 <== NOT EXECUTED
1fcf0: e58d3250 str r3, [sp, #592] ; 0x250 <== NOT EXECUTED
1fcf4: eaffff79 b 1fae0 <msdos_format+0x87c> <== NOT EXECUTED
1fcf8: e59d1234 ldr r1, [sp, #564] ; 0x234 <== NOT EXECUTED
1fcfc: e5dd225c ldrb r2, [sp, #604] ; 0x25c <== NOT EXECUTED
1fd00: e58d1028 str r1, [sp, #40] ; 0x28 <== NOT EXECUTED
1fd04: e58d200c str r2, [sp, #12] <== NOT EXECUTED
1fd08: eaffff6b b 1fabc <msdos_format+0x858> <== NOT EXECUTED
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
1fd0c: e3a0c002 mov ip, #2 <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1fd10: e1a0100c mov r1, ip <== NOT EXECUTED
1fd14: e1a00005 mov r0, r5 <== NOT EXECUTED
1fd18: e59f2370 ldr r2, [pc, #880] ; 20090 <msdos_format+0xe2c> <== NOT EXECUTED
1fd1c: e1a0300c mov r3, ip <== NOT EXECUTED
* determine number of FATs
*/
if (ret_val == 0) {
if ((rqdata == NULL) ||
(rqdata->fat_num == 0)) {
fmt_params->fat_num = 2;
1fd20: e5cdc25c strb ip, [sp, #604] ; 0x25c <== NOT EXECUTED
ret_val = EINVAL;
}
}
if (ret_val == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1fd24: ebfffcc1 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
1fd28: eafffdb7 b 1f40c <msdos_format+0x1a8> <== NOT EXECUTED
{
uint32_t total_sectors_num16 = 0;
uint32_t total_sectors_num32 = 0;
/* store total sector count in either 16 or 32 bit field in mbr */
if (fmt_params->totl_sector_cnt < 0x10000) {
1fd2c: e1a02423 lsr r2, r3, #8 <== NOT EXECUTED
1fd30: e3a0a000 mov sl, #0 <== NOT EXECUTED
1fd34: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
1fd38: e20330ff and r3, r3, #255 ; 0xff <== NOT EXECUTED
1fd3c: e58d200c str r2, [sp, #12] <== NOT EXECUTED
1fd40: e58d301c str r3, [sp, #28] <== NOT EXECUTED
1fd44: e58da014 str sl, [sp, #20] <== NOT EXECUTED
1fd48: e58da018 str sl, [sp, #24] <== NOT EXECUTED
1fd4c: e58da010 str sl, [sp, #16] <== NOT EXECUTED
1fd50: eafffde4 b 1f4e8 <msdos_format+0x284> <== NOT EXECUTED
(rqdata->files_per_root_dir > 0)) {
fmt_params->files_per_root_dir = rqdata->files_per_root_dir;
}
else {
if (fmt_params->fattype == FAT_FAT16) {
fmt_params->files_per_root_dir = 512;
1fd54: e35a0002 cmp sl, #2 <== NOT EXECUTED
1fd58: e3a04f7f mov r4, #508 ; 0x1fc <== NOT EXECUTED
1fd5c: 02844003 addeq r4, r4, #3 <== NOT EXECUTED
1fd60: 13a0403f movne r4, #63 ; 0x3f <== NOT EXECUTED
1fd64: eaffff01 b 1f970 <msdos_format+0x70c> <== NOT EXECUTED
fmt_params->fattype = FAT_FAT32;
}
else if ((rqdata != NULL) &&
(rqdata->fattype != MSDOS_FMT_FATANY)) {
ret_val = -1;
errno = EINVAL;
1fd68: eb008ca0 bl 42ff0 <__errno> <== NOT EXECUTED
1fd6c: e3a03016 mov r3, #22 <== NOT EXECUTED
1fd70: e5803000 str r3, [r0] <== NOT EXECUTED
1fd74: e3e03000 mvn r3, #0 <== NOT EXECUTED
1fd78: e58d3014 str r3, [sp, #20] <== NOT EXECUTED
1fd7c: eafffec9 b 1f8a8 <msdos_format+0x644> <== NOT EXECUTED
\*=========================================================================*/
{
/*
* clear fsinfo sector data
*/
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
1fd80: e28d402c add r4, sp, #44 ; 0x2c <== NOT EXECUTED
1fd84: e3a01000 mov r1, #0 <== NOT EXECUTED
1fd88: e3a02c02 mov r2, #512 ; 0x200 <== NOT EXECUTED
1fd8c: e1a00004 mov r0, r4 <== NOT EXECUTED
1fd90: eb0099cd bl 464cc <memset> <== NOT EXECUTED
}
/*
* write fsinfo sector
*/
if ((ret_val == 0) &&
(fmt_params.fsinfo_sec != 0)) {
1fd94: e59d1258 ldr r1, [sp, #600] ; 0x258 <== NOT EXECUTED
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
1fd98: e3a08055 mov r8, #85 ; 0x55 <== NOT EXECUTED
/*
* write "empty" values for free cluster count and next cluster number
*/
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO,
1fd9c: e3e03000 mvn r3, #0 <== NOT EXECUTED
*/
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
1fda0: e3a0e052 mov lr, #82 ; 0x52 <== NOT EXECUTED
1fda4: e3a0c061 mov ip, #97 ; 0x61 <== NOT EXECUTED
1fda8: e3a00041 mov r0, #65 ; 0x41 <== NOT EXECUTED
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
1fdac: e3a02072 mov r2, #114 ; 0x72 <== NOT EXECUTED
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
1fdb0: e5cd822a strb r8, [sp, #554] ; 0x22a <== NOT EXECUTED
ret_val = msdos_format_gen_fsinfo(tmp_sec);
}
/*
* write fsinfo sector
*/
if ((ret_val == 0) &&
1fdb4: e3510000 cmp r1, #0 <== NOT EXECUTED
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
1fdb8: e3e08055 mvn r8, #85 ; 0x55 <== NOT EXECUTED
*/
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
1fdbc: e5cde02d strb lr, [sp, #45] ; 0x2d <== NOT EXECUTED
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
1fdc0: e5cd2211 strb r2, [sp, #529] ; 0x211 <== NOT EXECUTED
1fdc4: e5cd0212 strb r0, [sp, #530] ; 0x212 <== NOT EXECUTED
1fdc8: e5cdc213 strb ip, [sp, #531] ; 0x213 <== NOT EXECUTED
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
1fdcc: e5cd822b strb r8, [sp, #555] ; 0x22b <== NOT EXECUTED
/*
* write "empty" values for free cluster count and next cluster number
*/
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO,
0xffffffff);
FAT_SET_FSINFO_NEXT_FREE_CLUSTER (fsinfo+FAT_FSI_INFO,
1fdd0: e5cd321b strb r3, [sp, #539] ; 0x21b <== NOT EXECUTED
*/
memset(fsinfo,0,FAT_TOTAL_FSINFO_SIZE);
/*
* write LEADSIG, STRUCTSIG, TRAILSIG
*/
FAT_SET_FSINFO_LEAD_SIGNATURE (fsinfo,FAT_FSINFO_LEAD_SIGNATURE_VALUE );
1fdd4: e5cde02c strb lr, [sp, #44] ; 0x2c <== NOT EXECUTED
1fdd8: e5cdc02e strb ip, [sp, #46] ; 0x2e <== NOT EXECUTED
1fddc: e5cd002f strb r0, [sp, #47] ; 0x2f <== NOT EXECUTED
FAT_SET_FSINFO_STRUC_SIGNATURE(fsinfo,FAT_FSINFO_STRUC_SIGNATURE_VALUE);
1fde0: e5cd2210 strb r2, [sp, #528] ; 0x210 <== NOT EXECUTED
FAT_SET_FSINFO_TRAIL_SIGNATURE(fsinfo,FAT_FSINFO_TRAIL_SIGNATURE_VALUE);
/*
* write "empty" values for free cluster count and next cluster number
*/
FAT_SET_FSINFO_FREE_CLUSTER_COUNT(fsinfo+FAT_FSI_INFO,
1fde4: e5cd3214 strb r3, [sp, #532] ; 0x214 <== NOT EXECUTED
1fde8: e5cd3215 strb r3, [sp, #533] ; 0x215 <== NOT EXECUTED
1fdec: e5cd3216 strb r3, [sp, #534] ; 0x216 <== NOT EXECUTED
1fdf0: e5cd3217 strb r3, [sp, #535] ; 0x217 <== NOT EXECUTED
0xffffffff);
FAT_SET_FSINFO_NEXT_FREE_CLUSTER (fsinfo+FAT_FSI_INFO,
1fdf4: e5cd3218 strb r3, [sp, #536] ; 0x218 <== NOT EXECUTED
1fdf8: e5cd3219 strb r3, [sp, #537] ; 0x219 <== NOT EXECUTED
1fdfc: e5cd321a strb r3, [sp, #538] ; 0x21a <== NOT EXECUTED
ret_val = msdos_format_gen_fsinfo(tmp_sec);
}
/*
* write fsinfo sector
*/
if ((ret_val == 0) &&
1fe00: 0afffe2f beq 1f6c4 <msdos_format+0x460> <== NOT EXECUTED
(fmt_params.fsinfo_sec != 0)) {
ret_val = msdos_format_write_sec(fd,
1fe04: e1a03004 mov r3, r4 <== NOT EXECUTED
1fe08: e1a00006 mov r0, r6 <== NOT EXECUTED
1fe0c: e59d222c ldr r2, [sp, #556] ; 0x22c <== NOT EXECUTED
1fe10: ebfffc9d bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
}
/*
* write FAT as all empty
* -> write all FAT sectors as zero
*/
if (ret_val == 0) {
1fe14: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1fe18: 1afffd30 bne 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
1fe1c: eafffe28 b 1f6c4 <msdos_format+0x460> <== NOT EXECUTED
if ((ret_val == 0) &&
(fmt_params.mbr_copy_sec != 0)) {
/*
* write copy of MBR
*/
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1fe20: e3a01002 mov r1, #2 <== NOT EXECUTED
1fe24: e59f228c ldr r2, [pc, #652] ; 200b8 <msdos_format+0xe54> <== NOT EXECUTED
1fe28: e1a00005 mov r0, r5 <== NOT EXECUTED
1fe2c: ebfffc7f bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"write back up MRB sector\n");
ret_val = msdos_format_write_sec(fd,
1fe30: e1a00006 mov r0, r6 <== NOT EXECUTED
1fe34: e1a03008 mov r3, r8 <== NOT EXECUTED
1fe38: e59d1254 ldr r1, [sp, #596] ; 0x254 <== NOT EXECUTED
1fe3c: e59d222c ldr r2, [sp, #556] ; 0x22c <== NOT EXECUTED
1fe40: ebfffc91 bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
}
}
/*
* for FAT32: initialize info sector on disk
*/
if ((ret_val == 0) &&
1fe44: e2504000 subs r4, r0, #0 <== NOT EXECUTED
1fe48: 0afffe1a beq 1f6b8 <msdos_format+0x454> <== NOT EXECUTED
1fe4c: eafffd23 b 1f2e0 <msdos_format+0x7c> <== NOT EXECUTED
if (ret_val == 0) {
const char *from;
char *to = fmt_params->VolLabel;
int cnt;
from = ""; /* default: make "from" point to empty string */
if ((rqdata != NULL) &&
1fe50: e59f1264 ldr r1, [pc, #612] ; 200bc <msdos_format+0xe58> <== NOT EXECUTED
1fe54: eaffff43 b 1fb68 <msdos_format+0x904> <== NOT EXECUTED
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
break;
case FAT_FAT32:
/* FAT entry 0: 0xffffff00|media_type */
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
1fe58: e5dd225d ldrb r2, [sp, #605] ; 0x25d <== NOT EXECUTED
1fe5c: e1e02c02 mvn r2, r2, lsl #24 <== NOT EXECUTED
1fe60: e1e02c22 mvn r2, r2, lsr #24 <== NOT EXECUTED
1fe64: e1a01c22 lsr r1, r2, #24 <== NOT EXECUTED
1fe68: e5cd102d strb r1, [sp, #45] ; 0x2d <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
1fe6c: e3e01007 mvn r1, #7 <== NOT EXECUTED
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
break;
case FAT_FAT32:
/* FAT entry 0: 0xffffff00|media_type */
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
1fe70: e3e03000 mvn r3, #0 <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
1fe74: e5cd1030 strb r1, [sp, #48] ; 0x30 <== NOT EXECUTED
1fe78: e3a0100f mov r1, #15 <== NOT EXECUTED
1fe7c: e5cd3032 strb r3, [sp, #50] ; 0x32 <== NOT EXECUTED
1fe80: e5cd1033 strb r1, [sp, #51] ; 0x33 <== NOT EXECUTED
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
break;
case FAT_FAT32:
/* FAT entry 0: 0xffffff00|media_type */
FAT_SET_VAL32(tmp_sec,0,0xffffff00|fmt_params.media_code);
1fe84: e5cd202c strb r2, [sp, #44] ; 0x2c <== NOT EXECUTED
1fe88: e5cd302e strb r3, [sp, #46] ; 0x2e <== NOT EXECUTED
1fe8c: e5cd302f strb r3, [sp, #47] ; 0x2f <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL32(tmp_sec,4,FAT_FAT32_EOC);
1fe90: e5cd3031 strb r3, [sp, #49] ; 0x31 <== NOT EXECUTED
1fe94: eafffe4f b 1f7d8 <msdos_format+0x574> <== NOT EXECUTED
FAT_SET_VAL8(tmp_sec,2,(FAT_FAT12_EOC >> 4));
break;
case FAT_FAT16:
/* FAT entry 0: 0xff00|media_type */
FAT_SET_VAL16(tmp_sec,0,0xff00|fmt_params.media_code);
1fe98: e5dd225d ldrb r2, [sp, #605] ; 0x25d <== NOT EXECUTED
1fe9c: e3e03000 mvn r3, #0 <== NOT EXECUTED
1fea0: e5cd202c strb r2, [sp, #44] ; 0x2c <== NOT EXECUTED
/* FAT entry 1: EOC */
FAT_SET_VAL16(tmp_sec,2,FAT_FAT16_EOC);
1fea4: e3e02007 mvn r2, #7 <== NOT EXECUTED
1fea8: e5cd202e strb r2, [sp, #46] ; 0x2e <== NOT EXECUTED
1feac: e5cd302f strb r3, [sp, #47] ; 0x2f <== NOT EXECUTED
FAT_SET_VAL8(tmp_sec,2,(FAT_FAT12_EOC >> 4));
break;
case FAT_FAT16:
/* FAT entry 0: 0xff00|media_type */
FAT_SET_VAL16(tmp_sec,0,0xff00|fmt_params.media_code);
1feb0: e5cd302d strb r3, [sp, #45] ; 0x2d <== NOT EXECUTED
+ (sectors_per_cluster - 1))
/ sectors_per_cluster));
/*
* data cluster count too big? then make sectors bigger
*/
if (((fattype == FAT_FAT12) && (data_cluster_cnt > FAT_FAT12_MAX_CLN)) ||
1feb4: e5dd325c ldrb r3, [sp, #604] ; 0x25c <== NOT EXECUTED
1feb8: e2533000 subs r3, r3, #0 <== NOT EXECUTED
1febc: 13a03001 movne r3, #1 <== NOT EXECUTED
1fec0: eafffe50 b 1f808 <msdos_format+0x5a4> <== NOT EXECUTED
memset(tmp_sec,0,sizeof(tmp_sec));
switch(fmt_params.fattype) {
case FAT_FAT12:
/* LSBits of FAT entry 0: media_type */
FAT_SET_VAL8(tmp_sec,0,(fmt_params.media_code));
1fec4: e5dd325d ldrb r3, [sp, #605] ; 0x25d <== NOT EXECUTED
1fec8: e5cd302c strb r3, [sp, #44] ; 0x2c <== NOT EXECUTED
/* MSBits of FAT entry 0:0xf, LSBits of FAT entry 1: LSB of EOC */
FAT_SET_VAL8(tmp_sec,1,(0x0f | (FAT_FAT12_EOC << 4)));
1fecc: e3e03070 mvn r3, #112 ; 0x70 <== NOT EXECUTED
1fed0: e5cd302d strb r3, [sp, #45] ; 0x2d <== NOT EXECUTED
/* MSBits of FAT entry 1: MSBits of EOC */
FAT_SET_VAL8(tmp_sec,2,(FAT_FAT12_EOC >> 4));
1fed4: e3e03000 mvn r3, #0 <== NOT EXECUTED
1fed8: e5cd302e strb r3, [sp, #46] ; 0x2e <== NOT EXECUTED
break;
1fedc: eafffff4 b 1feb4 <msdos_format+0xc50> <== NOT EXECUTED
rc = rtems_clock_get_tod_timeval(&time_value);
if (rc == RTEMS_SUCCESSFUL) {
*volid_ptr = time_value.tv_sec + time_value.tv_sec;
}
else {
*volid_ptr = rand();
1fee0: eb00a0a4 bl 48178 <rand> <== NOT EXECUTED
1fee4: e58d0278 str r0, [sp, #632] ; 0x278 <== NOT EXECUTED
1fee8: eaffff34 b 1fbc0 <msdos_format+0x95c> <== NOT EXECUTED
< ((uint32_t)FAT_FAT12_MAX_CLN)*8) {
fmt_params->fattype = FAT_FAT12;
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
1feec: e3e034ff mvn r3, #-16777216 ; 0xff000000 <== NOT EXECUTED
1fef0: e243360e sub r3, r3, #14680064 ; 0xe00000 <== NOT EXECUTED
1fef4: e2433e16 sub r3, r3, #352 ; 0x160 <== NOT EXECUTED
1fef8: e1520003 cmp r2, r3 <== NOT EXECUTED
< ((uint32_t)FAT_FAT16_MAX_CLN)*32) {
fmt_params->fattype = FAT_FAT16;
1fefc: 93a03002 movls r3, #2 <== NOT EXECUTED
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
1ff00: 958d3238 strls r3, [sp, #568] ; 0x238 <== NOT EXECUTED
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
< ((uint32_t)FAT_FAT16_MAX_CLN)*32) {
fmt_params->fattype = FAT_FAT16;
1ff04: 95cd325e strbls r3, [sp, #606] ; 0x25e <== NOT EXECUTED
< ((uint32_t)FAT_FAT12_MAX_CLN)*8) {
fmt_params->fattype = FAT_FAT12;
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else if (fmt_params->totl_sector_cnt
1ff08: 9afffd48 bls 1f430 <msdos_format+0x1cc> <== NOT EXECUTED
/* start trying with small clusters */
fmt_params->sectors_per_cluster = 2;
}
else {
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
1ff0c: e3a03101 mov r3, #1073741824 ; 0x40000000 <== NOT EXECUTED
1ff10: e0933008 adds r3, r3, r8 <== NOT EXECUTED
1ff14: e3a04000 mov r4, #0 <== NOT EXECUTED
1ff18: e1a00f23 lsr r0, r3, #30 <== NOT EXECUTED
1ff1c: e0a44009 adc r4, r4, r9 <== NOT EXECUTED
1ff20: e1800104 orr r0, r0, r4, lsl #2 <== NOT EXECUTED
1ff24: e3a0301f mov r3, #31 <== NOT EXECUTED
int b;
fmt_params->fattype = FAT_FAT32;
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
if ((gigs & (1 << b)) != 0)
1ff28: e3a01001 mov r1, #1 <== NOT EXECUTED
1ff2c: ea000001 b 1ff38 <msdos_format+0xcd4> <== NOT EXECUTED
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
int b;
fmt_params->fattype = FAT_FAT32;
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
1ff30: e2533001 subs r3, r3, #1 <== NOT EXECUTED
1ff34: 0a00004a beq 20064 <msdos_format+0xe00> <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
1ff38: e1a02311 lsl r2, r1, r3 <== NOT EXECUTED
1ff3c: e1120000 tst r2, r0 <== NOT EXECUTED
1ff40: 0afffffa beq 1ff30 <msdos_format+0xccc> <== NOT EXECUTED
}
else {
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
int b;
fmt_params->fattype = FAT_FAT32;
1ff44: e3a03004 mov r3, #4 <== NOT EXECUTED
1ff48: e5cd325e strb r3, [sp, #606] ; 0x25e <== NOT EXECUTED
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
if ((gigs & (1 << b)) != 0)
break;
fmt_params->sectors_per_cluster = 1 << b;
1ff4c: e58d2238 str r2, [sp, #568] ; 0x238 <== NOT EXECUTED
1ff50: eafffd36 b 1f430 <msdos_format+0x1cc> <== NOT EXECUTED
? "FAT12 "
: "FAT16 ",
FAT_BR_FILSYSTYPE_SIZE);
}
else {
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
1ff54: e59de23c ldr lr, [sp, #572] ; 0x23c <== NOT EXECUTED
1ff58: e1a0c82e lsr ip, lr, #16 <== NOT EXECUTED
1ff5c: e5cdc052 strb ip, [sp, #82] ; 0x52 <== NOT EXECUTED
FAT_SET_BR_EXT_FLAGS(mbr , 0);
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
1ff60: e3a0c002 mov ip, #2 <== NOT EXECUTED
1ff64: e5cdc058 strb ip, [sp, #88] ; 0x58 <== NOT EXECUTED
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
1ff68: e3a0c001 mov ip, #1 <== NOT EXECUTED
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
1ff6c: e59d1254 ldr r1, [sp, #596] ; 0x254 <== NOT EXECUTED
else {
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_EXT_FLAGS(mbr , 0);
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
1ff70: e5cdc05c strb ip, [sp, #92] ; 0x5c <== NOT EXECUTED
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
FAT_SET_BR_FAT32_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_FAT32_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
1ff74: e3a0c029 mov ip, #41 ; 0x29 <== NOT EXECUTED
1ff78: e5cdc06e strb ip, [sp, #110] ; 0x6e <== NOT EXECUTED
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
FAT_SET_BR_EXT_FLAGS(mbr , 0);
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
1ff7c: e59dc254 ldr ip, [sp, #596] ; 0x254 <== NOT EXECUTED
1ff80: e1a0b421 lsr fp, r1, #8 <== NOT EXECUTED
? "FAT12 "
: "FAT16 ",
FAT_BR_FILSYSTYPE_SIZE);
}
else {
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
1ff84: e1a09c2e lsr r9, lr, #24 <== NOT EXECUTED
1ff88: e1a0a42e lsr sl, lr, #8 <== NOT EXECUTED
1ff8c: e5cda051 strb sl, [sp, #81] ; 0x51 <== NOT EXECUTED
1ff90: e5cd9053 strb r9, [sp, #83] ; 0x53 <== NOT EXECUTED
FAT_SET_BR_EXT_FLAGS(mbr , 0);
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
1ff94: e5cdb05f strb fp, [sp, #95] ; 0x5f <== NOT EXECUTED
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
1ff98: e584803c str r8, [r4, #60] ; 0x3c <== NOT EXECUTED
? "FAT12 "
: "FAT16 ",
FAT_BR_FILSYSTYPE_SIZE);
}
else {
FAT_SET_BR_SECTORS_PER_FAT32(mbr ,fmt_params->sectors_per_fat);
1ff9c: e5cde050 strb lr, [sp, #80] ; 0x50 <== NOT EXECUTED
FAT_SET_BR_EXT_FLAGS(mbr , 0);
1ffa0: e5cd8054 strb r8, [sp, #84] ; 0x54 <== NOT EXECUTED
1ffa4: e5cd8055 strb r8, [sp, #85] ; 0x55 <== NOT EXECUTED
FAT_SET_BR_FSVER(mbr , 0); /* FAT32 Version:0.0 */
1ffa8: e5cd8056 strb r8, [sp, #86] ; 0x56 <== NOT EXECUTED
1ffac: e5cd8057 strb r8, [sp, #87] ; 0x57 <== NOT EXECUTED
FAT_SET_BR_FAT32_ROOT_CLUSTER(mbr , 2); /* put root dir to cluster 2 */
1ffb0: e5cd8059 strb r8, [sp, #89] ; 0x59 <== NOT EXECUTED
1ffb4: e5cd805a strb r8, [sp, #90] ; 0x5a <== NOT EXECUTED
1ffb8: e5cd805b strb r8, [sp, #91] ; 0x5b <== NOT EXECUTED
FAT_SET_BR_FAT32_FS_INFO_SECTOR(mbr, 1); /* Put fsinfo to rsrvd sec 1*/
1ffbc: e5cd805d strb r8, [sp, #93] ; 0x5d <== NOT EXECUTED
FAT_SET_BR_FAT32_BK_BOOT_SECTOR(mbr, fmt_params->mbr_copy_sec ); /* Put MBR copy to rsrvd sec */
1ffc0: e5cdc05e strb ip, [sp, #94] ; 0x5e <== NOT EXECUTED
memset(FAT_GET_ADDR_BR_FAT32_RESERVED(mbr),0,FAT_BR_FAT32_RESERVED_SIZE);
1ffc4: e5848034 str r8, [r4, #52] ; 0x34 <== NOT EXECUTED
1ffc8: e5848038 str r8, [r4, #56] ; 0x38 <== NOT EXECUTED
FAT_SET_BR_FAT32_DRVNUM(mbr , 0); /* only needed for INT13... */
1ffcc: e5cd806c strb r8, [sp, #108] ; 0x6c <== NOT EXECUTED
FAT_SET_BR_FAT32_RSVD1(mbr , 0); /* fill with zero */
1ffd0: e5cd806d strb r8, [sp, #109] ; 0x6d <== NOT EXECUTED
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
FAT_SET_BR_FAT32_VOLID(mbr , 0); /* not set */
1ffd4: e5cd806f strb r8, [sp, #111] ; 0x6f <== NOT EXECUTED
1ffd8: e5cd8070 strb r8, [sp, #112] ; 0x70 <== NOT EXECUTED
1ffdc: e5cd8071 strb r8, [sp, #113] ; 0x71 <== NOT EXECUTED
1ffe0: e5cd8072 strb r8, [sp, #114] ; 0x72 <== NOT EXECUTED
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
1ffe4: e5c48047 strb r8, [r4, #71] ; 0x47 <== NOT EXECUTED
1ffe8: e5c48048 strb r8, [r4, #72] ; 0x48 <== NOT EXECUTED
1ffec: e5c48049 strb r8, [r4, #73] ; 0x49 <== NOT EXECUTED
1fff0: e5c4804a strb r8, [r4, #74] ; 0x4a <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
1fff4: e2840052 add r0, r4, #82 ; 0x52 <== NOT EXECUTED
FAT_SET_BR_FAT32_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_FAT32_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
FAT_SET_BR_FAT32_VOLID(mbr , 0); /* not set */
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
1fff8: e5c4804b strb r8, [r4, #75] ; 0x4b <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
1fffc: e59f10bc ldr r1, [pc, #188] ; 200c0 <msdos_format+0xe5c> <== NOT EXECUTED
20000: e3a02008 mov r2, #8 <== NOT EXECUTED
FAT_SET_BR_FAT32_DRVNUM(mbr , 0); /* only needed for INT13... */
FAT_SET_BR_FAT32_RSVD1(mbr , 0); /* fill with zero */
FAT_SET_BR_FAT32_BOOTSIG(mbr ,FAT_BR_FAT32_BOOTSIG_VAL);
FAT_SET_BR_FAT32_VOLID(mbr , 0); /* not set */
memset(FAT_GET_ADDR_BR_FAT32_VOLLAB(mbr) ,0,FAT_BR_VOLLAB_SIZE);
20004: e5c4804c strb r8, [r4, #76] ; 0x4c <== NOT EXECUTED
20008: e5c48051 strb r8, [r4, #81] ; 0x51 <== NOT EXECUTED
2000c: e5c4804d strb r8, [r4, #77] ; 0x4d <== NOT EXECUTED
20010: e5c4804e strb r8, [r4, #78] ; 0x4e <== NOT EXECUTED
20014: e5c4804f strb r8, [r4, #79] ; 0x4f <== NOT EXECUTED
20018: e5c48050 strb r8, [r4, #80] ; 0x50 <== NOT EXECUTED
memcpy(FAT_GET_ADDR_BR_FAT32_FILSYSTYPE(mbr),
2001c: eb0098a3 bl 462b0 <memcpy> <== NOT EXECUTED
20020: eafffd8b b 1f654 <msdos_format+0x3f0> <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"sectors per cluster: %d\n", fmt_params->sectors_per_cluster);
if (fmt_params->fattype == FAT_FAT32) {
/* recommended: for FAT32, always set reserved sector count to 32 */
fmt_params->rsvd_sector_cnt = 32;
20024: e3a03020 mov r3, #32 <== NOT EXECUTED
20028: e58d3234 str r3, [sp, #564] ; 0x234 <== NOT EXECUTED
/* for FAT32, always set files per root directory 0 */
fmt_params->files_per_root_dir = 0;
/* location of copy of MBR */
fmt_params->mbr_copy_sec = 6;
2002c: e3a03006 mov r3, #6 <== NOT EXECUTED
20030: e58d3254 str r3, [sp, #596] ; 0x254 <== NOT EXECUTED
/* location of fsinfo sector */
fmt_params->fsinfo_sec = 1;
20034: e3a03001 mov r3, #1 <== NOT EXECUTED
20038: e58d3258 str r3, [sp, #600] ; 0x258 <== NOT EXECUTED
if (fmt_params->fattype == FAT_FAT32) {
/* recommended: for FAT32, always set reserved sector count to 32 */
fmt_params->rsvd_sector_cnt = 32;
/* for FAT32, always set files per root directory 0 */
fmt_params->files_per_root_dir = 0;
2003c: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
20040: e59d922c ldr r9, [sp, #556] ; 0x22c <== NOT EXECUTED
20044: e58d3244 str r3, [sp, #580] ; 0x244 <== NOT EXECUTED
/* location of copy of MBR */
fmt_params->mbr_copy_sec = 6;
/* location of fsinfo sector */
fmt_params->fsinfo_sec = 1;
20048: e1a00003 mov r0, r3 <== NOT EXECUTED
2004c: eafffe50 b 1f994 <msdos_format+0x730> <== NOT EXECUTED
/* check that device is registered as block device and lock it */
if (ret_val == 0) {
dd = rtems_disk_obtain(stat_buf.st_rdev);
if (dd == NULL) {
errno = ENOTTY;
20050: eb008be6 bl 42ff0 <__errno> <== NOT EXECUTED
20054: e3a03019 mov r3, #25 <== NOT EXECUTED
20058: e5803000 str r3, [r0] <== NOT EXECUTED
2005c: e3e04000 mvn r4, #0 <== NOT EXECUTED
20060: eafffc9b b 1f2d4 <msdos_format+0x70> <== NOT EXECUTED
#define ONE_GB (1024L * 1024L * 1024L)
uint32_t gigs = (total_size + ONE_GB) / ONE_GB;
int b;
fmt_params->fattype = FAT_FAT32;
/* scale with the size of disk... */
for (b = 31; b > 0; b--)
20064: e3a02001 mov r2, #1 <== NOT EXECUTED
20068: eaffffb5 b 1ff44 <msdos_format+0xce0> <== NOT EXECUTED
else {
fmt_params->media_code = rqdata->media;
}
}
else {
fmt_params->media_code = FAT_BR_MEDIA_FIXED;
2006c: e3e03007 mvn r3, #7 <== NOT EXECUTED
20070: e5cd325d strb r3, [sp, #605] ; 0x25d <== NOT EXECUTED
20074: eafffe90 b 1fabc <msdos_format+0x858> <== NOT EXECUTED
* check sectors per cluster.
* must be power of 2
* must be smaller than or equal to 128
* sectors_per_cluster*bytes_per_sector must not be bigger than 32K
*/
for (onebit = 128;onebit >= 1;onebit = onebit>>1) {
20078: e58d3238 str r3, [sp, #568] ; 0x238 <== NOT EXECUTED
2007c: eafffe28 b 1f924 <msdos_format+0x6c0> <== NOT EXECUTED
0001f0dc <msdos_format_fill_sectors>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f0dc: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
1f0e0: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
1f0e4: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
/*
* allocate and fill buffer
*/
if (ret_val == 0) {
fill_buffer = malloc(sector_size);
1f0e8: e59d002c ldr r0, [sp, #44] ; 0x2c <== NOT EXECUTED
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f0ec: e58d1000 str r1, [sp] <== NOT EXECUTED
1f0f0: e1a05002 mov r5, r2 <== NOT EXECUTED
1f0f4: e1a0a003 mov sl, r3 <== NOT EXECUTED
1f0f8: e5dd4030 ldrb r4, [sp, #48] ; 0x30 <== NOT EXECUTED
/*
* allocate and fill buffer
*/
if (ret_val == 0) {
fill_buffer = malloc(sector_size);
1f0fc: ebffa4df bl 8480 <malloc> <== NOT EXECUTED
if (fill_buffer == NULL) {
1f100: e2509000 subs r9, r0, #0 <== NOT EXECUTED
1f104: 0a000039 beq 1f1f0 <msdos_format_fill_sectors+0x114> <== NOT EXECUTED
errno = ENOMEM;
ret_val = -1;
}
else {
memset(fill_buffer,fill_byte,sector_size);
1f108: e1a01004 mov r1, r4 <== NOT EXECUTED
1f10c: e59d202c ldr r2, [sp, #44] ; 0x2c <== NOT EXECUTED
1f110: eb009ced bl 464cc <memset> <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
1f114: e25a7000 subs r7, sl, #0 <== NOT EXECUTED
1f118: 13a07001 movne r7, #1 <== NOT EXECUTED
else {
memset(fill_buffer,fill_byte,sector_size);
}
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f11c: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f120: e3a01002 mov r1, #2 <== NOT EXECUTED
1f124: e59f2128 ldr r2, [pc, #296] ; 1f254 <msdos_format_fill_sectors+0x178><== NOT EXECUTED
1f128: ebffffc0 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
1f12c: e3570000 cmp r7, #0 <== NOT EXECUTED
1f130: 0a000042 beq 1f240 <msdos_format_fill_sectors+0x164> <== NOT EXECUTED
1f134: e08a610a add r6, sl, sl, lsl #2 <== NOT EXECUTED
1f138: e0866106 add r6, r6, r6, lsl #2 <== NOT EXECUTED
1f13c: e1a06106 lsl r6, r6, #2 <== NOT EXECUTED
1f140: e1a0800a mov r8, sl <== NOT EXECUTED
1f144: e3e0b000 mvn fp, #0 <== NOT EXECUTED
1f148: ea000010 b 1f190 <msdos_format_fill_sectors+0xb4> <== NOT EXECUTED
if (percent != last_percent) {
if ((percent & 1) == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, ".");
last_percent = percent;
}
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
1f14c: e1a01005 mov r1, r5 <== NOT EXECUTED
1f150: e1a03009 mov r3, r9 <== NOT EXECUTED
1f154: e59d0000 ldr r0, [sp] <== NOT EXECUTED
1f158: e59d202c ldr r2, [sp, #44] ; 0x2c <== NOT EXECUTED
1f15c: ebffffca bl 1f08c <msdos_format_write_sec> <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
1f160: e2588001 subs r8, r8, #1 <== NOT EXECUTED
1f164: 03a03000 moveq r3, #0 <== NOT EXECUTED
1f168: 13a03001 movne r3, #1 <== NOT EXECUTED
1f16c: e3500000 cmp r0, #0 <== NOT EXECUTED
1f170: 13a03000 movne r3, #0 <== NOT EXECUTED
1f174: 02033001 andeq r3, r3, #1 <== NOT EXECUTED
1f178: e3530000 cmp r3, #0 <== NOT EXECUTED
1f17c: e1a07000 mov r7, r0 <== NOT EXECUTED
if ((percent & 1) == 0)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, ".");
last_percent = percent;
}
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
start_sector++;
1f180: e2855001 add r5, r5, #1 <== NOT EXECUTED
sector_cnt--;
1f184: e2466064 sub r6, r6, #100 ; 0x64 <== NOT EXECUTED
1f188: e1a0b004 mov fp, r4 <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
"Filling : ");
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
1f18c: 0a00000c beq 1f1c4 <msdos_format_fill_sectors+0xe8> <== NOT EXECUTED
(sector_cnt > 0)) {
int percent = (sector_cnt * 100) / total_sectors;
1f190: e1a0100a mov r1, sl <== NOT EXECUTED
1f194: e1a00006 mov r0, r6 <== NOT EXECUTED
1f198: eb00ef52 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (percent != last_percent) {
1f19c: e150000b cmp r0, fp <== NOT EXECUTED
/*
* write to consecutive sectors
*/
while ((ret_val == 0) &&
(sector_cnt > 0)) {
int percent = (sector_cnt * 100) / total_sectors;
1f1a0: e1a04000 mov r4, r0 <== NOT EXECUTED
if (percent != last_percent) {
1f1a4: 0affffe8 beq 1f14c <msdos_format_fill_sectors+0x70> <== NOT EXECUTED
if ((percent & 1) == 0)
1f1a8: e3100001 tst r0, #1 <== NOT EXECUTED
1f1ac: 1affffe6 bne 1f14c <msdos_format_fill_sectors+0x70> <== NOT EXECUTED
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, ".");
1f1b0: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f1b4: e3a01002 mov r1, #2 <== NOT EXECUTED
1f1b8: e59f2098 ldr r2, [pc, #152] ; 1f258 <msdos_format_fill_sectors+0x17c><== NOT EXECUTED
1f1bc: ebffff9b bl 1f030 <msdos_format_printf> <== NOT EXECUTED
1f1c0: eaffffe1 b 1f14c <msdos_format_fill_sectors+0x70> <== NOT EXECUTED
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
start_sector++;
sector_cnt--;
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "\n");
1f1c4: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f1c8: e3a01002 mov r1, #2 <== NOT EXECUTED
1f1cc: e59f2088 ldr r2, [pc, #136] ; 1f25c <msdos_format_fill_sectors+0x180><== NOT EXECUTED
1f1d0: ebffff96 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
if (ret_val)
1f1d4: e3570000 cmp r7, #0 <== NOT EXECUTED
1f1d8: 1a000010 bne 1f220 <msdos_format_fill_sectors+0x144> <== NOT EXECUTED
/*
* cleanup
*/
if (fill_buffer != NULL) {
free(fill_buffer);
1f1dc: e1a00009 mov r0, r9 <== NOT EXECUTED
1f1e0: ebffa2e2 bl 7d70 <free> <== NOT EXECUTED
fill_buffer = NULL;
}
return ret_val;
}
1f1e4: e1a00007 mov r0, r7 <== NOT EXECUTED
1f1e8: e28dd008 add sp, sp, #8 <== NOT EXECUTED
1f1ec: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* allocate and fill buffer
*/
if (ret_val == 0) {
fill_buffer = malloc(sector_size);
if (fill_buffer == NULL) {
errno = ENOMEM;
1f1f0: eb008f7e bl 42ff0 <__errno> <== NOT EXECUTED
1f1f4: e3a0300c mov r3, #12 <== NOT EXECUTED
1f1f8: e5803000 str r3, [r0] <== NOT EXECUTED
else {
memset(fill_buffer,fill_byte,sector_size);
}
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL,
1f1fc: e3a01002 mov r1, #2 <== NOT EXECUTED
1f200: e59f204c ldr r2, [pc, #76] ; 1f254 <msdos_format_fill_sectors+0x178><== NOT EXECUTED
1f204: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f208: ebffff88 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
start_sector++;
sector_cnt--;
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "\n");
1f20c: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f210: e3a01002 mov r1, #2 <== NOT EXECUTED
1f214: e59f2040 ldr r2, [pc, #64] ; 1f25c <msdos_format_fill_sectors+0x180><== NOT EXECUTED
1f218: ebffff84 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
1f21c: e3e07000 mvn r7, #0 <== NOT EXECUTED
if (ret_val)
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_INFO,
1f220: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f224: e1a03005 mov r3, r5 <== NOT EXECUTED
1f228: e3a01001 mov r1, #1 <== NOT EXECUTED
1f22c: e59f202c ldr r2, [pc, #44] ; 1f260 <msdos_format_fill_sectors+0x184><== NOT EXECUTED
1f230: ebffff7e bl 1f030 <msdos_format_printf> <== NOT EXECUTED
"filling error on sector: %d\n", start_sector);
/*
* cleanup
*/
if (fill_buffer != NULL) {
1f234: e3590000 cmp r9, #0 <== NOT EXECUTED
1f238: 0affffe9 beq 1f1e4 <msdos_format_fill_sectors+0x108> <== NOT EXECUTED
1f23c: eaffffe6 b 1f1dc <msdos_format_fill_sectors+0x100> <== NOT EXECUTED
ret_val = msdos_format_write_sec(fd,start_sector,sector_size,fill_buffer);
start_sector++;
sector_cnt--;
}
msdos_format_printf (rqdata, MSDOS_FMT_INFO_LEVEL_DETAIL, "\n");
1f240: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
1f244: e3a01002 mov r1, #2 <== NOT EXECUTED
1f248: e59f200c ldr r2, [pc, #12] ; 1f25c <msdos_format_fill_sectors+0x180><== NOT EXECUTED
1f24c: ebffff77 bl 1f030 <msdos_format_printf> <== NOT EXECUTED
1f250: eaffffe1 b 1f1dc <msdos_format_fill_sectors+0x100> <== NOT EXECUTED
0001f030 <msdos_format_printf>:
*/
static void
msdos_format_printf (const msdos_format_request_param_t *rqdata,
int info_level,
const char *format, ...)
{
1f030: e92d000c push {r2, r3} <== NOT EXECUTED
1f034: e92d4010 push {r4, lr} <== NOT EXECUTED
1f038: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
va_list args;
va_start (args, format);
1f03c: e28d2010 add r2, sp, #16 <== NOT EXECUTED
if (rqdata != NULL && rqdata->info_level >= info_level)
1f040: e3500000 cmp r0, #0 <== NOT EXECUTED
msdos_format_printf (const msdos_format_request_param_t *rqdata,
int info_level,
const char *format, ...)
{
va_list args;
va_start (args, format);
1f044: e58d2000 str r2, [sp] <== NOT EXECUTED
if (rqdata != NULL && rqdata->info_level >= info_level)
1f048: 0a00000a beq 1f078 <msdos_format_printf+0x48> <== NOT EXECUTED
1f04c: e590301c ldr r3, [r0, #28] <== NOT EXECUTED
1f050: e1530001 cmp r3, r1 <== NOT EXECUTED
1f054: ba000007 blt 1f078 <msdos_format_printf+0x48> <== NOT EXECUTED
{
vfprintf (stdout, format, args);
1f058: e59f4028 ldr r4, [pc, #40] ; 1f088 <msdos_format_printf+0x58><== NOT EXECUTED
1f05c: e5943000 ldr r3, [r4] <== NOT EXECUTED
1f060: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
1f064: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
1f068: eb00cafd bl 51c64 <vfprintf> <== NOT EXECUTED
fflush (stdout);
1f06c: e5943000 ldr r3, [r4] <== NOT EXECUTED
1f070: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
1f074: eb0090d0 bl 433bc <fflush> <== NOT EXECUTED
}
va_end (args);
}
1f078: e28dd004 add sp, sp, #4 <== NOT EXECUTED
1f07c: e8bd4010 pop {r4, lr} <== NOT EXECUTED
1f080: e28dd008 add sp, sp, #8 <== NOT EXECUTED
1f084: e12fff1e bx lr <== NOT EXECUTED
0001f08c <msdos_format_write_sec>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f08c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f090: e0876192 umull r6, r7, r2, r1 <== NOT EXECUTED
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f094: e1a04002 mov r4, r2 <== NOT EXECUTED
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f098: e1a01006 mov r1, r6 <== NOT EXECUTED
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f09c: e1a05003 mov r5, r3 <== NOT EXECUTED
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f0a0: e1a02007 mov r2, r7 <== NOT EXECUTED
1f0a4: e3a03000 mov r3, #0 <== NOT EXECUTED
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
1f0a8: e1a06000 mov r6, r0 <== NOT EXECUTED
int ret_val = 0;
if (0 > lseek(fd,((off_t)start_sector)*sector_size,SEEK_SET)) {
1f0ac: eb002b44 bl 29dc4 <lseek> <== NOT EXECUTED
1f0b0: e3510000 cmp r1, #0 <== NOT EXECUTED
1f0b4: ba000006 blt 1f0d4 <msdos_format_write_sec+0x48> <== NOT EXECUTED
ret_val = -1;
}
if (ret_val == 0) {
if (0 > write(fd,buffer,sector_size)) {
1f0b8: e1a00006 mov r0, r6 <== NOT EXECUTED
1f0bc: e1a01005 mov r1, r5 <== NOT EXECUTED
1f0c0: e1a02004 mov r2, r4 <== NOT EXECUTED
1f0c4: ebffb285 bl bae0 <write> <== NOT EXECUTED
1f0c8: e3500000 cmp r0, #0 <== NOT EXECUTED
1f0cc: a3a00000 movge r0, #0 <== NOT EXECUTED
1f0d0: a8bd80f0 popge {r4, r5, r6, r7, pc} <== NOT EXECUTED
1f0d4: e3e00000 mvn r0, #0 <== NOT EXECUTED
ret_val = -1;
}
}
return ret_val;
}
1f0d8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00036dc0 <msdos_free_node_info>:
int
msdos_free_node_info(rtems_filesystem_location_info_t *pathloc)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
36dc0: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
* RC_OK on success, or -1 code if error occured
*
*/
int
msdos_free_node_info(rtems_filesystem_location_info_t *pathloc)
{
36dc4: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
36dc8: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36dcc: e3a01000 mov r1, #0 <== NOT EXECUTED
* RC_OK on success, or -1 code if error occured
*
*/
int
msdos_free_node_info(rtems_filesystem_location_info_t *pathloc)
{
36dd0: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
36dd4: e1a02001 mov r2, r1 <== NOT EXECUTED
36dd8: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36ddc: ebff55b8 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
36de0: e3500000 cmp r0, #0 <== NOT EXECUTED
36de4: 1a000007 bne 36e08 <msdos_free_node_info+0x48> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
rc = fat_file_close(pathloc->mt_entry, pathloc->node_access);
36de8: e5941000 ldr r1, [r4] <== NOT EXECUTED
36dec: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
36df0: ebffbb58 bl 25b58 <fat_file_close> <== NOT EXECUTED
36df4: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
36df8: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
36dfc: ebff55f8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
36e00: e1a00004 mov r0, r4 <== NOT EXECUTED
36e04: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
36e08: eb003078 bl 42ff0 <__errno> <== NOT EXECUTED
36e0c: e3a03005 mov r3, #5 <== NOT EXECUTED
36e10: e5803000 str r3, [r0] <== NOT EXECUTED
36e14: e3e04000 mvn r4, #0 <== NOT EXECUTED
36e18: eafffff8 b 36e00 <msdos_free_node_info+0x40> <== NOT EXECUTED
00038190 <msdos_get_dotdot_dir_info_cluster_num_and_offset>:
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
38190: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
38194: e24dd058 sub sp, sp, #88 ; 0x58 <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
fat_file_fd_t *fat_fd = NULL;
38198: e28d5058 add r5, sp, #88 ; 0x58 <== NOT EXECUTED
3819c: e3a0c000 mov ip, #0 <== NOT EXECUTED
381a0: e525c004 str ip, [r5, #-4]! <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
381a4: e1a07002 mov r7, r2 <== NOT EXECUTED
381a8: e1a08001 mov r8, r1 <== NOT EXECUTED
uint32_t cl4find = 0;
/*
* open fat-file corresponded to ".."
*/
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
381ac: e1a01002 mov r1, r2 <== NOT EXECUTED
381b0: e1a02005 mov r2, r5 <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln,
fat_dir_pos_t *dir_pos,
char *dir_entry
)
{
381b4: e1a06000 mov r6, r0 <== NOT EXECUTED
381b8: e1a09003 mov r9, r3 <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
381bc: e590b034 ldr fp, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t cl4find = 0;
/*
* open fat-file corresponded to ".."
*/
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
381c0: ebffb68e bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
381c4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
381c8: 0a000002 beq 381d8 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x48><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
rc = fat_file_close(mt_entry, fat_fd);
return rc;
}
381cc: e1a00004 mov r0, r4 <== NOT EXECUTED
381d0: e28dd058 add sp, sp, #88 ; 0x58 <== NOT EXECUTED
381d4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
*/
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
fat_fd->cln = cln;
381d8: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
381dc: e3a03602 mov r3, #2097152 ; 0x200000 <== NOT EXECUTED
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
fat_fd->cln = cln;
fat_fd->fat_file_type = FAT_DIRECTORY;
381e0: e3a0a001 mov sl, #1 <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
fat_fd->map.file_cln = 0;
381e4: e5814034 str r4, [r1, #52] ; 0x34 <== NOT EXECUTED
if (rc != RC_OK)
return rc;
fat_fd->cln = cln;
fat_fd->fat_file_type = FAT_DIRECTORY;
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
381e8: e5813014 str r3, [r1, #20] <== NOT EXECUTED
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
381ec: e5818038 str r8, [r1, #56] ; 0x38 <== NOT EXECUTED
*/
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
fat_fd->cln = cln;
381f0: e581801c str r8, [r1, #28] <== NOT EXECUTED
fat_fd->fat_file_type = FAT_DIRECTORY;
381f4: e581a010 str sl, [r1, #16] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
rc = fat_file_size(mt_entry, fat_fd);
381f8: e1a00006 mov r0, r6 <== NOT EXECUTED
381fc: ebffb38a bl 2502c <fat_file_size> <== NOT EXECUTED
if (rc != RC_OK)
38200: e2504000 subs r4, r0, #0 <== NOT EXECUTED
38204: 1a00006d bne 383c0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x230><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find "." node in opened directory */
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
38208: e28d8034 add r8, sp, #52 ; 0x34 <== NOT EXECUTED
3820c: e288c008 add ip, r8, #8 <== NOT EXECUTED
38210: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38214: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38218: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
3821c: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38220: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
msdos_long_to_short(".", 1, dot_node, MSDOS_SHORT_NAME_LEN);
38224: e1a0100a mov r1, sl <== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find "." node in opened directory */
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
38228: e58c4000 str r4, [ip] <== NOT EXECUTED
msdos_long_to_short(".", 1, dot_node, MSDOS_SHORT_NAME_LEN);
3822c: e1a02008 mov r2, r8 <== NOT EXECUTED
38230: e3a0300b mov r3, #11 <== NOT EXECUTED
38234: e59f0194 ldr r0, [pc, #404] ; 383d0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x240><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find "." node in opened directory */
memset(dot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
38238: e58d4034 str r4, [sp, #52] ; 0x34 <== NOT EXECUTED
3823c: e58d4038 str r4, [sp, #56] ; 0x38 <== NOT EXECUTED
msdos_long_to_short(".", 1, dot_node, MSDOS_SHORT_NAME_LEN);
38240: ebffff5b bl 37fb4 <msdos_long_to_short> <== NOT EXECUTED
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, ".", 1,
38244: e1a02004 mov r2, r4 <== NOT EXECUTED
38248: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
3824c: e1a00006 mov r0, r6 <== NOT EXECUTED
38250: e59f3178 ldr r3, [pc, #376] ; 383d0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x240><== NOT EXECUTED
38254: e58da000 str sl, [sp] <== NOT EXECUTED
38258: e58da004 str sl, [sp, #4] <== NOT EXECUTED
3825c: e58d7008 str r7, [sp, #8] <== NOT EXECUTED
38260: e58d800c str r8, [sp, #12] <== NOT EXECUTED
38264: ebfffb59 bl 36fd0 <msdos_find_name_in_fat_file> <== NOT EXECUTED
MSDOS_NAME_SHORT, dir_pos, dot_node);
if (rc != RC_OK)
38268: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3826c: 1a000053 bne 383c0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x230><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find ".." node in opened directory */
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
38270: e28d3014 add r3, sp, #20 <== NOT EXECUTED
38274: e283c008 add ip, r3, #8 <== NOT EXECUTED
38278: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
3827c: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38280: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38284: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
38288: e48c4004 str r4, [ip], #4 <== NOT EXECUTED
msdos_long_to_short("..", 2, dotdot_node, MSDOS_SHORT_NAME_LEN);
3828c: e1a02003 mov r2, r3 <== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find ".." node in opened directory */
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
38290: e58c4000 str r4, [ip] <== NOT EXECUTED
msdos_long_to_short("..", 2, dotdot_node, MSDOS_SHORT_NAME_LEN);
38294: e3a01002 mov r1, #2 <== NOT EXECUTED
38298: e3a0300b mov r3, #11 <== NOT EXECUTED
3829c: e59f0130 ldr r0, [pc, #304] ; 383d4 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x244><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* find ".." node in opened directory */
memset(dotdot_node, 0, MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE);
382a0: e58d4014 str r4, [sp, #20] <== NOT EXECUTED
382a4: e58d4018 str r4, [sp, #24] <== NOT EXECUTED
msdos_long_to_short("..", 2, dotdot_node, MSDOS_SHORT_NAME_LEN);
382a8: ebffff41 bl 37fb4 <msdos_long_to_short> <== NOT EXECUTED
rc = msdos_find_name_in_fat_file(mt_entry, fat_fd, false, "..", 2,
382ac: e3a0c002 mov ip, #2 <== NOT EXECUTED
382b0: e1a02004 mov r2, r4 <== NOT EXECUTED
382b4: e58dc000 str ip, [sp] <== NOT EXECUTED
382b8: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
382bc: e28dc014 add ip, sp, #20 <== NOT EXECUTED
382c0: e1a00006 mov r0, r6 <== NOT EXECUTED
382c4: e59f3108 ldr r3, [pc, #264] ; 383d4 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x244><== NOT EXECUTED
382c8: e58da004 str sl, [sp, #4] <== NOT EXECUTED
382cc: e58d7008 str r7, [sp, #8] <== NOT EXECUTED
382d0: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
382d4: ebfffb3d bl 36fd0 <msdos_find_name_in_fat_file> <== NOT EXECUTED
MSDOS_NAME_SHORT, dir_pos,
dotdot_node);
if (rc != RC_OK)
382d8: e2504000 subs r4, r0, #0 <== NOT EXECUTED
382dc: 1a000037 bne 383c0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x230><== NOT EXECUTED
{
fat_file_close(mt_entry, fat_fd);
return rc;
}
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
382e0: e1d831b4 ldrh r3, [r8, #20] <== NOT EXECUTED
/* close fat-file corresponded to ".." directory */
rc = fat_file_close(mt_entry, fat_fd);
382e4: e1a00006 mov r0, r6 <== NOT EXECUTED
382e8: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
{
fat_file_close(mt_entry, fat_fd);
return rc;
}
cl4find = MSDOS_EXTRACT_CLUSTER_NUM(dot_node);
382ec: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
382f0: e1d881ba ldrh r8, [r8, #26] <== NOT EXECUTED
/* close fat-file corresponded to ".." directory */
rc = fat_file_close(mt_entry, fat_fd);
382f4: ebffb617 bl 25b58 <fat_file_close> <== NOT EXECUTED
if ( rc != RC_OK )
382f8: e2504000 subs r4, r0, #0 <== NOT EXECUTED
382fc: 1affffb2 bne 381cc <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x3c><== NOT EXECUTED
return rc;
if ( (MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
38300: e1dd22b8 ldrh r2, [sp, #40] ; 0x28 <== NOT EXECUTED
38304: e1dd32be ldrh r3, [sp, #46] ; 0x2e <== NOT EXECUTED
38308: e1933802 orrs r3, r3, r2, lsl #16 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
3830c: 03e01000 mvneq r1, #0 <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
38310: 0587100c streq r1, [r7, #12] <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
38314: 05871008 streq r1, [r7, #8] <== NOT EXECUTED
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
38318: 05873004 streq r3, [r7, #4] <== NOT EXECUTED
/*
* we handle root dir for all FAT types in the same way with the
* ordinary directories ( through fat_file_* calls )
*/
fat_dir_pos_init(dir_pos);
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
3831c: 0587a000 streq sl, [r7] <== NOT EXECUTED
}
/* open fat-file corresponded to second ".." */
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
38320: e1a02005 mov r2, r5 <== NOT EXECUTED
38324: e1a00006 mov r0, r6 <== NOT EXECUTED
38328: e1a01007 mov r1, r7 <== NOT EXECUTED
3832c: ebffb633 bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
38330: e2504000 subs r4, r0, #0 <== NOT EXECUTED
38334: 1affffa4 bne 381cc <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x3c><== NOT EXECUTED
return rc;
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
38338: e1dd22b8 ldrh r2, [sp, #40] ; 0x28 <== NOT EXECUTED
3833c: e1dd32be ldrh r3, [sp, #46] ; 0x2e <== NOT EXECUTED
38340: e1933802 orrs r3, r3, r2, lsl #16 <== NOT EXECUTED
fat_fd->cln = fs_info->fat.vol.rdir_cl;
38344: 059d1054 ldreq r1, [sp, #84] ; 0x54 <== NOT EXECUTED
else
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
38348: 159d1054 ldrne r1, [sp, #84] ; 0x54 <== NOT EXECUTED
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
fat_fd->cln = fs_info->fat.vol.rdir_cl;
3834c: 059b3038 ldreq r3, [fp, #56] ; 0x38 <== NOT EXECUTED
else
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
38350: 1581301c strne r3, [r1, #28] <== NOT EXECUTED
rc = fat_file_open(mt_entry, dir_pos, &fat_fd);
if (rc != RC_OK)
return rc;
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
fat_fd->cln = fs_info->fat.vol.rdir_cl;
38354: 0581301c streq r3, [r1, #28] <== NOT EXECUTED
else
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
fat_fd->fat_file_type = FAT_DIRECTORY;
38358: e3a02001 mov r2, #1 <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
3835c: e591301c ldr r3, [r1, #28] <== NOT EXECUTED
if ((MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node)) == 0)
fat_fd->cln = fs_info->fat.vol.rdir_cl;
else
fat_fd->cln = MSDOS_EXTRACT_CLUSTER_NUM(dotdot_node);
fat_fd->fat_file_type = FAT_DIRECTORY;
38360: e5812010 str r2, [r1, #16] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
38364: e3a02602 mov r2, #2097152 ; 0x200000 <== NOT EXECUTED
38368: e5812014 str r2, [r1, #20] <== NOT EXECUTED
fat_fd->map.file_cln = 0;
3836c: e3a02000 mov r2, #0 <== NOT EXECUTED
38370: e5812034 str r2, [r1, #52] ; 0x34 <== NOT EXECUTED
fat_fd->map.disk_cln = fat_fd->cln;
38374: e5813038 str r3, [r1, #56] ; 0x38 <== NOT EXECUTED
rc = fat_file_size(mt_entry, fat_fd);
38378: e1a00006 mov r0, r6 <== NOT EXECUTED
3837c: ebffb32a bl 2502c <fat_file_size> <== NOT EXECUTED
if (rc != RC_OK)
38380: e2504000 subs r4, r0, #0 <== NOT EXECUTED
38384: 1a00000d bne 383c0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x230><== NOT EXECUTED
fat_file_close(mt_entry, fat_fd);
return rc;
}
/* in this directory find slot with specified cluster num */
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
38388: e59dc010 ldr ip, [sp, #16] <== NOT EXECUTED
3838c: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
38390: e188280c orr r2, r8, ip, lsl #16 <== NOT EXECUTED
38394: e1a03007 mov r3, r7 <== NOT EXECUTED
38398: e1a00006 mov r0, r6 <== NOT EXECUTED
3839c: e58d9000 str r9, [sp] <== NOT EXECUTED
383a0: ebfffab0 bl 36e68 <msdos_find_node_by_cluster_num_in_fat_file><== NOT EXECUTED
dir_pos, dir_entry);
if (rc != RC_OK)
383a4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
383a8: 1a000004 bne 383c0 <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x230><== NOT EXECUTED
{
fat_file_close(mt_entry, fat_fd);
return rc;
}
rc = fat_file_close(mt_entry, fat_fd);
383ac: e1a00006 mov r0, r6 <== NOT EXECUTED
383b0: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
383b4: ebffb5e7 bl 25b58 <fat_file_close> <== NOT EXECUTED
383b8: e1a04000 mov r4, r0 <== NOT EXECUTED
return rc;
383bc: eaffff82 b 381cc <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x3c><== NOT EXECUTED
/* in this directory find slot with specified cluster num */
rc = msdos_find_node_by_cluster_num_in_fat_file(mt_entry, fat_fd, cl4find,
dir_pos, dir_entry);
if (rc != RC_OK)
{
fat_file_close(mt_entry, fat_fd);
383c0: e1a00006 mov r0, r6 <== NOT EXECUTED
383c4: e59d1054 ldr r1, [sp, #84] ; 0x54 <== NOT EXECUTED
383c8: ebffb5e2 bl 25b58 <fat_file_close> <== NOT EXECUTED
return rc;
383cc: eaffff7e b 381cc <msdos_get_dotdot_dir_info_cluster_num_and_offset+0x3c><== NOT EXECUTED
000383d8 <msdos_get_name_node>:
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
383d8: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
383dc: e1a05001 mov r5, r1 <== NOT EXECUTED
383e0: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
383e4: e1a04000 mov r4, r0 <== NOT EXECUTED
383e8: e1a08002 mov r8, r2 <== NOT EXECUTED
383ec: e28d6030 add r6, sp, #48 ; 0x30 <== NOT EXECUTED
383f0: e89600c0 ldm r6, {r6, r7} <== NOT EXECUTED
int rc = RC_OK;
fat_file_fd_t *fat_fd = parent_loc->node_access;
uint32_t dotdot_cln = 0;
/* find name in fat-file which corresponds to the directory */
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
383f4: e59dc02c ldr ip, [sp, #44] ; 0x2c <== NOT EXECUTED
int name_len,
msdos_name_type_t name_type,
fat_dir_pos_t *dir_pos,
char *name_dir_entry
)
{
383f8: e20550ff and r5, r5, #255 ; 0xff <== NOT EXECUTED
int rc = RC_OK;
fat_file_fd_t *fat_fd = parent_loc->node_access;
uint32_t dotdot_cln = 0;
/* find name in fat-file which corresponds to the directory */
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
383fc: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
38400: e5941000 ldr r1, [r4] <== NOT EXECUTED
38404: e1a02005 mov r2, r5 <== NOT EXECUTED
38408: e58d3000 str r3, [sp] <== NOT EXECUTED
3840c: e1a03008 mov r3, r8 <== NOT EXECUTED
38410: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
38414: e58d6008 str r6, [sp, #8] <== NOT EXECUTED
38418: e58d700c str r7, [sp, #12] <== NOT EXECUTED
3841c: ebfffaeb bl 36fd0 <msdos_find_name_in_fat_file> <== NOT EXECUTED
create_node, name, name_len, name_type,
dir_pos, name_dir_entry);
if ((rc != RC_OK) && (rc != MSDOS_NAME_NOT_FOUND_ERR))
38420: e3a03c7d mov r3, #32000 ; 0x7d00 <== NOT EXECUTED
38424: e2833001 add r3, r3, #1 <== NOT EXECUTED
38428: e1500003 cmp r0, r3 <== NOT EXECUTED
3842c: 13500000 cmpne r0, #0 <== NOT EXECUTED
int rc = RC_OK;
fat_file_fd_t *fat_fd = parent_loc->node_access;
uint32_t dotdot_cln = 0;
/* find name in fat-file which corresponds to the directory */
rc = msdos_find_name_in_fat_file(parent_loc->mt_entry, fat_fd,
38430: e1a0a000 mov sl, r0 <== NOT EXECUTED
create_node, name, name_len, name_type,
dir_pos, name_dir_entry);
if ((rc != RC_OK) && (rc != MSDOS_NAME_NOT_FOUND_ERR))
38434: 1a000015 bne 38490 <msdos_get_name_node+0xb8> <== NOT EXECUTED
return rc;
if (!create_node)
38438: e3550000 cmp r5, #0 <== NOT EXECUTED
3843c: 1a000013 bne 38490 <msdos_get_name_node+0xb8> <== NOT EXECUTED
{
/* if we search for valid name and name not found -> return */
if (rc == MSDOS_NAME_NOT_FOUND_ERR)
38440: e1500003 cmp r0, r3 <== NOT EXECUTED
38444: 0a000011 beq 38490 <msdos_get_name_node+0xb8> <== NOT EXECUTED
* if we have deal with ".." - it is a special case :(((
*
* Really, we should return cluster num and offset not of ".." slot, but
* slot which correspondes to real directory name.
*/
if (rc == RC_OK)
38448: e3500000 cmp r0, #0 <== NOT EXECUTED
3844c: 1a00000f bne 38490 <msdos_get_name_node+0xb8> <== NOT EXECUTED
{
if (strncmp(name, "..", 2) == 0)
38450: e1a00008 mov r0, r8 <== NOT EXECUTED
38454: e59f1058 ldr r1, [pc, #88] ; 384b4 <msdos_get_name_node+0xdc><== NOT EXECUTED
38458: e3a02002 mov r2, #2 <== NOT EXECUTED
3845c: eb00462a bl 49d0c <strncmp> <== NOT EXECUTED
38460: e3500000 cmp r0, #0 <== NOT EXECUTED
38464: 1a000009 bne 38490 <msdos_get_name_node+0xb8> <== NOT EXECUTED
{
dotdot_cln = MSDOS_EXTRACT_CLUSTER_NUM((name_dir_entry));
38468: e1d711b4 ldrh r1, [r7, #20] <== NOT EXECUTED
3846c: e1d731ba ldrh r3, [r7, #26] <== NOT EXECUTED
/* are we right under root dir ? */
if (dotdot_cln == 0)
38470: e1931801 orrs r1, r3, r1, lsl #16 <== NOT EXECUTED
38474: 1a000008 bne 3849c <msdos_get_name_node+0xc4> <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
38478: e3e03000 mvn r3, #0 <== NOT EXECUTED
/*
* we can relax about first_char field - it never should be
* used for root dir
*/
fat_dir_pos_init(dir_pos);
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
3847c: e3a02001 mov r2, #1 <== NOT EXECUTED
38480: e5862000 str r2, [r6] <== NOT EXECUTED
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
38484: e586300c str r3, [r6, #12] <== NOT EXECUTED
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
38488: e586a004 str sl, [r6, #4] <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
3848c: e5863008 str r3, [r6, #8] <== NOT EXECUTED
}
}
}
}
return rc;
}
38490: e1a0000a mov r0, sl <== NOT EXECUTED
38494: e28dd010 add sp, sp, #16 <== NOT EXECUTED
38498: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
}
else
{
rc =
msdos_get_dotdot_dir_info_cluster_num_and_offset(parent_loc->mt_entry,
3849c: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
384a0: e1a02006 mov r2, r6 <== NOT EXECUTED
384a4: e1a03007 mov r3, r7 <== NOT EXECUTED
}
}
}
}
return rc;
}
384a8: e28dd010 add sp, sp, #16 <== NOT EXECUTED
384ac: e8bd45f0 pop {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
dir_pos->sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
}
else
{
rc =
msdos_get_dotdot_dir_info_cluster_num_and_offset(parent_loc->mt_entry,
384b0: eaffff36 b 38190 <msdos_get_dotdot_dir_info_cluster_num_and_offset><== NOT EXECUTED
00037ed8 <msdos_get_token>:
msdos_token_types_t
msdos_get_token(const char *path,
int pathlen,
const char **ret_token,
int *ret_token_len)
{
37ed8: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
msdos_token_types_t type = MSDOS_NAME;
int i = 0;
*ret_token = NULL;
37edc: e3a06000 mov r6, #0 <== NOT EXECUTED
*ret_token_len = 0;
if (pathlen == 0)
37ee0: e2518000 subs r8, r1, #0 <== NOT EXECUTED
msdos_token_types_t
msdos_get_token(const char *path,
int pathlen,
const char **ret_token,
int *ret_token_len)
{
37ee4: e1a07000 mov r7, r0 <== NOT EXECUTED
37ee8: e1a04002 mov r4, r2 <== NOT EXECUTED
37eec: e1a05003 mov r5, r3 <== NOT EXECUTED
msdos_token_types_t type = MSDOS_NAME;
int i = 0;
*ret_token = NULL;
37ef0: e5826000 str r6, [r2] <== NOT EXECUTED
*ret_token_len = 0;
37ef4: e5836000 str r6, [r3] <== NOT EXECUTED
if (pathlen == 0)
37ef8: 01a00008 moveq r0, r8 <== NOT EXECUTED
37efc: 1a000009 bne 37f28 <msdos_get_token+0x50> <== NOT EXECUTED
37f00: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
return MSDOS_NO_MORE_PATH;
/*
* Check for a separator.
*/
while (!msdos_is_separator(path[i]) && (i < pathlen))
37f04: e1560008 cmp r6, r8 <== NOT EXECUTED
37f08: aa00000a bge 37f38 <msdos_get_token+0x60> <== NOT EXECUTED
{
if ( !msdos_is_valid_name_char(path[i]) )
37f0c: e7d70006 ldrb r0, [r7, r6] <== NOT EXECUTED
37f10: ebffffd5 bl 37e6c <msdos_is_valid_name_char> <== NOT EXECUTED
37f14: e3500000 cmp r0, #0 <== NOT EXECUTED
return MSDOS_INVALID_TOKEN;
++i;
37f18: e2866001 add r6, r6, #1 <== NOT EXECUTED
/*
* Check for a separator.
*/
while (!msdos_is_separator(path[i]) && (i < pathlen))
{
if ( !msdos_is_valid_name_char(path[i]) )
37f1c: 0a00000f beq 37f60 <msdos_get_token+0x88> <== NOT EXECUTED
return MSDOS_INVALID_TOKEN;
++i;
if ( i == MSDOS_NAME_MAX_LFN_WITH_DOT )
37f20: e3560f41 cmp r6, #260 ; 0x104 <== NOT EXECUTED
37f24: 0a00000d beq 37f60 <msdos_get_token+0x88> <== NOT EXECUTED
return MSDOS_NO_MORE_PATH;
/*
* Check for a separator.
*/
while (!msdos_is_separator(path[i]) && (i < pathlen))
37f28: e7d70006 ldrb r0, [r7, r6] <== NOT EXECUTED
37f2c: ebff4619 bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
37f30: e3500000 cmp r0, #0 <== NOT EXECUTED
37f34: 0afffff2 beq 37f04 <msdos_get_token+0x2c> <== NOT EXECUTED
*ret_token = path;
/*
* If it is just a separator then it is the current dir.
*/
if ( i == 0 )
37f38: e2563000 subs r3, r6, #0 <== NOT EXECUTED
++i;
if ( i == MSDOS_NAME_MAX_LFN_WITH_DOT )
return MSDOS_INVALID_TOKEN;
}
*ret_token = path;
37f3c: e5847000 str r7, [r4] <== NOT EXECUTED
/*
* If it is just a separator then it is the current dir.
*/
if ( i == 0 )
37f40: 1a000008 bne 37f68 <msdos_get_token+0x90> <== NOT EXECUTED
{
if ( (*path != '\0') && pathlen )
37f44: e5d72000 ldrb r2, [r7] <== NOT EXECUTED
37f48: e3520000 cmp r2, #0 <== NOT EXECUTED
37f4c: 13a03001 movne r3, #1 <== NOT EXECUTED
37f50: 11a00003 movne r0, r3 <== NOT EXECUTED
{
type = MSDOS_UP_DIR;
return type;
}
if ((i == 1) && ((*ret_token)[0] == '.'))
37f54: 01a00003 moveq r0, r3 <== NOT EXECUTED
}
/*
* Set the token and token_len to the token start and length.
*/
*ret_token_len = i;
37f58: e5853000 str r3, [r5] <== NOT EXECUTED
37f5c: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
{
type = MSDOS_UP_DIR;
return type;
}
if ((i == 1) && ((*ret_token)[0] == '.'))
37f60: e3a00004 mov r0, #4 <== NOT EXECUTED
return type;
}
}
return type;
}
37f64: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
* If we copied something that was not a seperator see if
* it was a special name.
*/
if ( type == MSDOS_NAME )
{
if ((i == 2) && ((*ret_token)[0] == '.') && ((*ret_token)[1] == '.'))
37f68: e3560002 cmp r6, #2 <== NOT EXECUTED
}
/*
* Set the token and token_len to the token start and length.
*/
*ret_token_len = i;
37f6c: e5856000 str r6, [r5] <== NOT EXECUTED
* If we copied something that was not a seperator see if
* it was a special name.
*/
if ( type == MSDOS_NAME )
{
if ((i == 2) && ((*ret_token)[0] == '.') && ((*ret_token)[1] == '.'))
37f70: 0a000008 beq 37f98 <msdos_get_token+0xc0> <== NOT EXECUTED
{
type = MSDOS_UP_DIR;
return type;
}
if ((i == 1) && ((*ret_token)[0] == '.'))
37f74: e3560001 cmp r6, #1 <== NOT EXECUTED
37f78: 0a000001 beq 37f84 <msdos_get_token+0xac> <== NOT EXECUTED
37f7c: e3a00003 mov r0, #3 <== NOT EXECUTED
37f80: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
37f84: e5d73000 ldrb r3, [r7] <== NOT EXECUTED
37f88: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
37f8c: 1afffffa bne 37f7c <msdos_get_token+0xa4> <== NOT EXECUTED
37f90: e1a00006 mov r0, r6 <== NOT EXECUTED
37f94: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
* If we copied something that was not a seperator see if
* it was a special name.
*/
if ( type == MSDOS_NAME )
{
if ((i == 2) && ((*ret_token)[0] == '.') && ((*ret_token)[1] == '.'))
37f98: e5d73000 ldrb r3, [r7] <== NOT EXECUTED
37f9c: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
37fa0: 1afffff5 bne 37f7c <msdos_get_token+0xa4> <== NOT EXECUTED
37fa4: e5d73001 ldrb r3, [r7, #1] <== NOT EXECUTED
37fa8: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
37fac: 1afffff2 bne 37f7c <msdos_get_token+0xa4> <== NOT EXECUTED
37fb0: eafffff6 b 37f90 <msdos_get_token+0xb8> <== NOT EXECUTED
000200e0 <msdos_initialize_support>:
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *file_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers
)
{
200e0: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = NULL;
fat_file_fd_t *fat_fd = NULL;
200e4: e3a0c000 mov ip, #0 <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *file_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers
)
{
200e8: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
200ec: e1a05000 mov r5, r0 <== NOT EXECUTED
200f0: e1a09001 mov r9, r1 <== NOT EXECUTED
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));
200f4: e3a00001 mov r0, #1 <== NOT EXECUTED
200f8: e3a0109c mov r1, #156 ; 0x9c <== NOT EXECUTED
)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = NULL;
fat_file_fd_t *fat_fd = NULL;
200fc: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *temp_mt_entry,
const rtems_filesystem_operations_table *op_table,
const rtems_filesystem_file_handlers_r *file_handlers,
const rtems_filesystem_file_handlers_r *directory_handlers
)
{
20100: e1a0a002 mov sl, r2 <== NOT EXECUTED
20104: e1a06003 mov r6, r3 <== NOT EXECUTED
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));
20108: ebff9d94 bl 7760 <calloc> <== NOT EXECUTED
if (!fs_info)
2010c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
20110: 0a000050 beq 20258 <msdos_initialize_support+0x178> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
temp_mt_entry->fs_info = fs_info;
20114: e5854034 str r4, [r5, #52] ; 0x34 <== NOT EXECUTED
rc = fat_init_volume_info(temp_mt_entry);
20118: e1a00005 mov r0, r5 <== NOT EXECUTED
2011c: eb001970 bl 266e4 <fat_init_volume_info> <== NOT EXECUTED
if (rc != RC_OK)
20120: e2507000 subs r7, r0, #0 <== NOT EXECUTED
20124: 1a000032 bne 201f4 <msdos_initialize_support+0x114> <== NOT EXECUTED
/*
* 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;
20128: e28d1018 add r1, sp, #24 <== NOT EXECUTED
2012c: e3a08001 mov r8, #1 <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
20130: e3e03000 mvn r3, #0 <== NOT EXECUTED
20134: e5218014 str r8, [r1, #-20]! <== NOT EXECUTED
{
free(fs_info);
return rc;
}
fs_info->file_handlers = file_handlers;
20138: e584a090 str sl, [r4, #144] ; 0x90 <== NOT EXECUTED
fs_info->directory_handlers = directory_handlers;
2013c: e584608c str r6, [r4, #140] ; 0x8c <== NOT EXECUTED
* 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(temp_mt_entry, &root_pos, &fat_fd);
20140: e1a00005 mov r0, r5 <== NOT EXECUTED
20144: e28d2014 add r2, sp, #20 <== NOT EXECUTED
fat_dir_pos_init(
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
20148: e58d7008 str r7, [sp, #8] <== NOT EXECUTED
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
dir_pos->lname.ofs = FAT_FILE_SHORT_NAME;
2014c: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
fat_dir_pos_t *dir_pos
)
{
dir_pos->sname.cln = 0;
dir_pos->sname.ofs = 0;
dir_pos->lname.cln = FAT_FILE_SHORT_NAME;
20150: e58d300c str r3, [sp, #12] <== NOT EXECUTED
20154: eb0016a9 bl 25c00 <fat_file_open> <== NOT EXECUTED
if (rc != RC_OK)
20158: e2507000 subs r7, r0, #0 <== NOT EXECUTED
2015c: 1a000022 bne 201ec <msdos_initialize_support+0x10c> <== NOT EXECUTED
free(fs_info);
return rc;
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
20160: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
20164: e3a03602 mov r3, #2097152 ; 0x200000 <== NOT EXECUTED
20168: e5813014 str r3, [r1, #20] <== NOT EXECUTED
fat_fd->cln = fs_info->fat.vol.rdir_cl;
2016c: e5943038 ldr r3, [r4, #56] ; 0x38 <== NOT EXECUTED
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
20170: e3530000 cmp r3, #0 <== NOT EXECUTED
free(fs_info);
return rc;
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
20174: e5818010 str r8, [r1, #16] <== NOT EXECUTED
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
fat_fd->cln = fs_info->fat.vol.rdir_cl;
fat_fd->map.file_cln = 0;
20178: e5817034 str r7, [r1, #52] ; 0x34 <== NOT EXECUTED
}
/* again: unfortunately "fat-file" is just almost fat file :( */
fat_fd->fat_file_type = FAT_DIRECTORY;
fat_fd->size_limit = MSDOS_MAX_DIR_LENGHT;
fat_fd->cln = fs_info->fat.vol.rdir_cl;
2017c: e581301c str r3, [r1, #28] <== NOT EXECUTED
fat_fd->map.file_cln = 0;
fat_fd->map.disk_cln = fat_fd->cln;
20180: e5813038 str r3, [r1, #56] ; 0x38 <== NOT EXECUTED
/* if we have FAT12/16 */
if ( fat_fd->cln == 0 )
20184: 1a00001f bne 20208 <msdos_initialize_support+0x128> <== NOT EXECUTED
{
fat_fd->fat_file_size = fs_info->fat.vol.rdir_size;
20188: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
2018c: e5813018 str r3, [r1, #24] <== NOT EXECUTED
cl_buf_size = (fs_info->fat.vol.bpc > fs_info->fat.vol.rdir_size) ?
20190: e1d400b6 ldrh r0, [r4, #6] <== NOT EXECUTED
20194: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
20198: e1500003 cmp r0, r3 <== NOT EXECUTED
2019c: 31a00003 movcc r0, r3 <== NOT EXECUTED
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
201a0: e3a01001 mov r1, #1 <== NOT EXECUTED
201a4: ebff9d6d bl 7760 <calloc> <== NOT EXECUTED
if (fs_info->cl_buf == NULL)
201a8: e3500000 cmp r0, #0 <== NOT EXECUTED
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
201ac: e5840098 str r0, [r4, #152] ; 0x98 <== NOT EXECUTED
if (fs_info->cl_buf == NULL)
201b0: 0a000021 beq 2023c <msdos_initialize_support+0x15c> <== NOT EXECUTED
fat_shutdown_drive(temp_mt_entry);
free(fs_info);
rtems_set_errno_and_return_minus_one(ENOMEM);
}
sc = rtems_semaphore_create(3,
201b4: e284c094 add ip, r4, #148 ; 0x94 <== NOT EXECUTED
201b8: e3a00003 mov r0, #3 <== NOT EXECUTED
201bc: e3a01001 mov r1, #1 <== NOT EXECUTED
201c0: e3a02010 mov r2, #16 <== NOT EXECUTED
201c4: e3a03000 mov r3, #0 <== NOT EXECUTED
201c8: e58dc000 str ip, [sp] <== NOT EXECUTED
201cc: ebffb007 bl c1f0 <rtems_semaphore_create> <== NOT EXECUTED
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_FIFO,
0,
&fs_info->vol_sema);
if (sc != RTEMS_SUCCESSFUL)
201d0: e2507000 subs r7, r0, #0 <== NOT EXECUTED
201d4: 1a000024 bne 2026c <msdos_initialize_support+0x18c> <== NOT EXECUTED
free(fs_info->cl_buf);
free(fs_info);
rtems_set_errno_and_return_minus_one( EIO );
}
temp_mt_entry->mt_fs_root.node_access = fat_fd;
201d8: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
201dc: e5859028 str r9, [r5, #40] ; 0x28 <== NOT EXECUTED
free(fs_info->cl_buf);
free(fs_info);
rtems_set_errno_and_return_minus_one( EIO );
}
temp_mt_entry->mt_fs_root.node_access = fat_fd;
201e0: e585301c str r3, [r5, #28] <== NOT EXECUTED
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
201e4: e5856024 str r6, [r5, #36] ; 0x24 <== NOT EXECUTED
temp_mt_entry->mt_fs_root.ops = op_table;
return rc;
201e8: ea000003 b 201fc <msdos_initialize_support+0x11c> <== NOT EXECUTED
fat_dir_pos_init(&root_pos);
root_pos.sname.cln = FAT_ROOTDIR_CLUSTER_NUM;
rc = fat_file_open(temp_mt_entry, &root_pos, &fat_fd);
if (rc != RC_OK)
{
fat_shutdown_drive(temp_mt_entry);
201ec: e1a00005 mov r0, r5 <== NOT EXECUTED
201f0: eb001898 bl 26458 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
201f4: e1a00004 mov r0, r4 <== NOT EXECUTED
201f8: ebff9edc bl 7d70 <free> <== NOT EXECUTED
temp_mt_entry->mt_fs_root.node_access = fat_fd;
temp_mt_entry->mt_fs_root.handlers = directory_handlers;
temp_mt_entry->mt_fs_root.ops = op_table;
return rc;
}
201fc: e1a00007 mov r0, r7 <== NOT EXECUTED
20200: e28dd018 add sp, sp, #24 <== NOT EXECUTED
20204: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
fs_info->fat.vol.bpc :
fs_info->fat.vol.rdir_size;
}
else
{
rc = fat_file_size(temp_mt_entry, fat_fd);
20208: e1a00005 mov r0, r5 <== NOT EXECUTED
2020c: eb001386 bl 2502c <fat_file_size> <== NOT EXECUTED
if ( rc != RC_OK )
20210: e2507000 subs r7, r0, #0 <== NOT EXECUTED
fat_file_close(temp_mt_entry, fat_fd);
fat_shutdown_drive(temp_mt_entry);
free(fs_info);
return rc;
}
cl_buf_size = fs_info->fat.vol.bpc;
20214: 01d400b6 ldrheq r0, [r4, #6] <== NOT EXECUTED
fs_info->fat.vol.rdir_size;
}
else
{
rc = fat_file_size(temp_mt_entry, fat_fd);
if ( rc != RC_OK )
20218: 0affffe0 beq 201a0 <msdos_initialize_support+0xc0> <== NOT EXECUTED
{
fat_file_close(temp_mt_entry, fat_fd);
2021c: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
20220: e1a00005 mov r0, r5 <== NOT EXECUTED
20224: eb00164b bl 25b58 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(temp_mt_entry);
20228: e1a00005 mov r0, r5 <== NOT EXECUTED
2022c: eb001889 bl 26458 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
20230: e1a00004 mov r0, r4 <== NOT EXECUTED
20234: ebff9ecd bl 7d70 <free> <== NOT EXECUTED
return rc;
20238: eaffffef b 201fc <msdos_initialize_support+0x11c> <== NOT EXECUTED
}
fs_info->cl_buf = (uint8_t *)calloc(cl_buf_size, sizeof(char));
if (fs_info->cl_buf == NULL)
{
fat_file_close(temp_mt_entry, fat_fd);
2023c: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
20240: e1a00005 mov r0, r5 <== NOT EXECUTED
20244: eb001643 bl 25b58 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(temp_mt_entry);
20248: e1a00005 mov r0, r5 <== NOT EXECUTED
2024c: eb001881 bl 26458 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info);
20250: e1a00004 mov r0, r4 <== NOT EXECUTED
20254: ebff9ec5 bl 7d70 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENOMEM);
20258: eb008b64 bl 42ff0 <__errno> <== NOT EXECUTED
2025c: e3a0300c mov r3, #12 <== NOT EXECUTED
20260: e5803000 str r3, [r0] <== NOT EXECUTED
20264: e3e07000 mvn r7, #0 <== NOT EXECUTED
20268: eaffffe3 b 201fc <msdos_initialize_support+0x11c> <== NOT EXECUTED
RTEMS_BINARY_SEMAPHORE | RTEMS_FIFO,
0,
&fs_info->vol_sema);
if (sc != RTEMS_SUCCESSFUL)
{
fat_file_close(temp_mt_entry, fat_fd);
2026c: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
20270: e1a00005 mov r0, r5 <== NOT EXECUTED
20274: eb001637 bl 25b58 <fat_file_close> <== NOT EXECUTED
fat_shutdown_drive(temp_mt_entry);
20278: e1a00005 mov r0, r5 <== NOT EXECUTED
2027c: eb001875 bl 26458 <fat_shutdown_drive> <== NOT EXECUTED
free(fs_info->cl_buf);
20280: e5940098 ldr r0, [r4, #152] ; 0x98 <== NOT EXECUTED
20284: ebff9eb9 bl 7d70 <free> <== NOT EXECUTED
free(fs_info);
20288: e1a00004 mov r0, r4 <== NOT EXECUTED
2028c: ebff9eb7 bl 7d70 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EIO );
20290: eb008b56 bl 42ff0 <__errno> <== NOT EXECUTED
20294: e3a03005 mov r3, #5 <== NOT EXECUTED
20298: e5803000 str r3, [r0] <== NOT EXECUTED
2029c: e3e07000 mvn r7, #0 <== NOT EXECUTED
202a0: eaffffd5 b 201fc <msdos_initialize_support+0x11c> <== NOT EXECUTED
00037e6c <msdos_is_valid_name_char>:
* MSDOS_NAME_LONG - Valid in a long name only.
*
*/
static msdos_name_type_t
msdos_is_valid_name_char(const char ch)
{
37e6c: e92d4010 push {r4, lr} <== NOT EXECUTED
37e70: e20040ff and r4, r0, #255 ; 0xff <== NOT EXECUTED
if (strchr(" +,;=[]", ch) != NULL)
37e74: e1a01004 mov r1, r4 <== NOT EXECUTED
37e78: e59f004c ldr r0, [pc, #76] ; 37ecc <msdos_is_valid_name_char+0x60><== NOT EXECUTED
37e7c: eb004489 bl 490a8 <strchr> <== NOT EXECUTED
37e80: e3500000 cmp r0, #0 <== NOT EXECUTED
37e84: 13a00002 movne r0, #2 <== NOT EXECUTED
37e88: 18bd8010 popne {r4, pc} <== NOT EXECUTED
return MSDOS_NAME_LONG;
if ((ch == '.') || isalnum((unsigned char)ch) ||
37e8c: e354002e cmp r4, #46 ; 0x2e <== NOT EXECUTED
37e90: 0a00000b beq 37ec4 <msdos_is_valid_name_char+0x58> <== NOT EXECUTED
37e94: e59f3034 ldr r3, [pc, #52] ; 37ed0 <msdos_is_valid_name_char+0x64><== NOT EXECUTED
37e98: e5933000 ldr r3, [r3] <== NOT EXECUTED
37e9c: e0833004 add r3, r3, r4 <== NOT EXECUTED
37ea0: e5d33001 ldrb r3, [r3, #1] <== NOT EXECUTED
37ea4: e3130007 tst r3, #7 <== NOT EXECUTED
37ea8: 1a000005 bne 37ec4 <msdos_is_valid_name_char+0x58> <== NOT EXECUTED
(strchr("$%'-_@~`!(){}^#&", ch) != NULL))
37eac: e1a01004 mov r1, r4 <== NOT EXECUTED
37eb0: e59f001c ldr r0, [pc, #28] ; 37ed4 <msdos_is_valid_name_char+0x68><== NOT EXECUTED
37eb4: eb00447b bl 490a8 <strchr> <== NOT EXECUTED
37eb8: e2500000 subs r0, r0, #0 <== NOT EXECUTED
37ebc: 13a00001 movne r0, #1 <== NOT EXECUTED
37ec0: e8bd8010 pop {r4, pc} <== NOT EXECUTED
37ec4: e3a00001 mov r0, #1 <== NOT EXECUTED
return MSDOS_NAME_SHORT;
return MSDOS_NAME_INVALID;
}
37ec8: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00037fb4 <msdos_long_to_short>:
*
*/
#define MSDOS_L2S_PRINT 0
msdos_name_type_t
msdos_long_to_short(const char *lfn, int lfn_len, char* sfn, int sfn_len)
{
37fb4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
37fb8: e1a06002 mov r6, r2 <== NOT EXECUTED
37fbc: e1a05000 mov r5, r0 <== NOT EXECUTED
37fc0: e1a04001 mov r4, r1 <== NOT EXECUTED
int i;
/*
* Fill with spaces. This is how a short directory entry is padded.
*/
memset (sfn, ' ', sfn_len);
37fc4: e1a02003 mov r2, r3 <== NOT EXECUTED
*
*/
#define MSDOS_L2S_PRINT 0
msdos_name_type_t
msdos_long_to_short(const char *lfn, int lfn_len, char* sfn, int sfn_len)
{
37fc8: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
int i;
/*
* Fill with spaces. This is how a short directory entry is padded.
*/
memset (sfn, ' ', sfn_len);
37fcc: e1a00006 mov r0, r6 <== NOT EXECUTED
37fd0: e3a01020 mov r1, #32 <== NOT EXECUTED
37fd4: eb00393c bl 464cc <memset> <== NOT EXECUTED
/*
* Handle '.' and '..' specially.
*/
if ((lfn[0] == '.') && (lfn_len == 1))
37fd8: e5d58000 ldrb r8, [r5] <== NOT EXECUTED
37fdc: e358002e cmp r8, #46 ; 0x2e <== NOT EXECUTED
37fe0: 13a03000 movne r3, #0 <== NOT EXECUTED
37fe4: 03a03001 moveq r3, #1 <== NOT EXECUTED
37fe8: e3540001 cmp r4, #1 <== NOT EXECUTED
37fec: 0358002e cmpeq r8, #46 ; 0x2e <== NOT EXECUTED
{
sfn[0] = '.';
37ff0: 03a0302e moveq r3, #46 ; 0x2e <== NOT EXECUTED
37ff4: 05c63000 strbeq r3, [r6] <== NOT EXECUTED
37ff8: 03a07001 moveq r7, #1 <== NOT EXECUTED
memset (sfn, ' ', sfn_len);
/*
* Handle '.' and '..' specially.
*/
if ((lfn[0] == '.') && (lfn_len == 1))
37ffc: 0a000043 beq 38110 <msdos_long_to_short+0x15c> <== NOT EXECUTED
printf ("MSDOS_L2S: SHORT[1]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_SHORT;
}
if ((lfn[0] == '.') && (lfn[1] == '.') && (lfn_len == 2))
38000: e3530000 cmp r3, #0 <== NOT EXECUTED
38004: 1a000053 bne 38158 <msdos_long_to_short+0x1a4> <== NOT EXECUTED
}
/*
* Filenames with only blanks and dots are not allowed!
*/
for (i = 0; i < lfn_len; i++)
38008: e3540000 cmp r4, #0 <== NOT EXECUTED
3800c: d3a03000 movle r3, #0 <== NOT EXECUTED
38010: da000048 ble 38138 <msdos_long_to_short+0x184> <== NOT EXECUTED
if ((lfn[i] != ' ') && (lfn[i] != '.'))
38014: e3580020 cmp r8, #32 <== NOT EXECUTED
38018: 1358002e cmpne r8, #46 ; 0x2e <== NOT EXECUTED
3801c: 03a03000 moveq r3, #0 <== NOT EXECUTED
38020: 13a03001 movne r3, #1 <== NOT EXECUTED
38024: 0a000040 beq 3812c <msdos_long_to_short+0x178> <== NOT EXECUTED
bool lowercase = false;
bool uppercase = false;
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
38028: e3580000 cmp r8, #0 <== NOT EXECUTED
3802c: 13540000 cmpne r4, #0 <== NOT EXECUTED
38030: da000054 ble 38188 <msdos_long_to_short+0x1d4> <== NOT EXECUTED
38034: e3a03000 mov r3, #0 <== NOT EXECUTED
38038: e58d3000 str r3, [sp] <== NOT EXECUTED
3803c: e1a0b003 mov fp, r3 <== NOT EXECUTED
38040: e1a0a003 mov sl, r3 <== NOT EXECUTED
38044: e3e09000 mvn r9, #0 <== NOT EXECUTED
38048: ea000011 b 38094 <msdos_long_to_short+0xe0> <== NOT EXECUTED
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
return type;
if (dot_at >= 0)
{
if (is_dot || ((count - dot_at) > 3))
3804c: e3530000 cmp r3, #0 <== NOT EXECUTED
38050: 1a000029 bne 380fc <msdos_long_to_short+0x148> <== NOT EXECUTED
38054: e069300a rsb r3, r9, sl <== NOT EXECUTED
38058: e3530003 cmp r3, #3 <== NOT EXECUTED
3805c: ca000026 bgt 380fc <msdos_long_to_short+0x148> <== NOT EXECUTED
}
}
if (is_dot)
dot_at = count;
else if ((*name >= 'A') && (*name <= 'Z'))
38060: e2483041 sub r3, r8, #65 ; 0x41 <== NOT EXECUTED
38064: e3530019 cmp r3, #25 <== NOT EXECUTED
38068: 93a03001 movls r3, #1 <== NOT EXECUTED
3806c: 958d3000 strls r3, [sp] <== NOT EXECUTED
38070: 9a000002 bls 38080 <msdos_long_to_short+0xcc> <== NOT EXECUTED
uppercase = true;
else if ((*name >= 'a') && (*name <= 'z'))
38074: e2488061 sub r8, r8, #97 ; 0x61 <== NOT EXECUTED
38078: e3580019 cmp r8, #25 <== NOT EXECUTED
3807c: 93a0b001 movls fp, #1 <== NOT EXECUTED
lowercase = true;
count++;
38080: e28aa001 add sl, sl, #1 <== NOT EXECUTED
bool lowercase = false;
bool uppercase = false;
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
38084: e7d5800a ldrb r8, [r5, sl] <== NOT EXECUTED
38088: e3580000 cmp r8, #0 <== NOT EXECUTED
3808c: 1154000a cmpne r4, sl <== NOT EXECUTED
38090: da000014 ble 380e8 <msdos_long_to_short+0x134> <== NOT EXECUTED
{
bool is_dot = *name == '.';
msdos_name_type_t type = msdos_is_valid_name_char(*name);
38094: e1a00008 mov r0, r8 <== NOT EXECUTED
38098: ebffff73 bl 37e6c <msdos_is_valid_name_char> <== NOT EXECUTED
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: c:%02x type:%d\n", *name, type);
#endif
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
3809c: e3500000 cmp r0, #0 <== NOT EXECUTED
380a0: 13500002 cmpne r0, #2 <== NOT EXECUTED
int count = 0;
while (*name && (count < name_len))
{
bool is_dot = *name == '.';
msdos_name_type_t type = msdos_is_valid_name_char(*name);
380a4: e1a07000 mov r7, r0 <== NOT EXECUTED
#if MSDOS_NAME_TYPE_PRINT
printf ("MSDOS_NAME_TYPE: c:%02x type:%d\n", *name, type);
#endif
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
380a8: 0a000033 beq 3817c <msdos_long_to_short+0x1c8> <== NOT EXECUTED
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
{
bool is_dot = *name == '.';
380ac: e358002e cmp r8, #46 ; 0x2e <== NOT EXECUTED
380b0: 13a03000 movne r3, #0 <== NOT EXECUTED
380b4: 03a03001 moveq r3, #1 <== NOT EXECUTED
#endif
if ((type == MSDOS_NAME_INVALID) || (type == MSDOS_NAME_LONG))
return type;
if (dot_at >= 0)
380b8: e3790001 cmn r9, #1 <== NOT EXECUTED
380bc: 1affffe2 bne 3804c <msdos_long_to_short+0x98> <== NOT EXECUTED
return MSDOS_NAME_LONG;
}
}
else
{
if (count == 8 && !is_dot)
380c0: e35a0008 cmp sl, #8 <== NOT EXECUTED
380c4: 0a00001f beq 38148 <msdos_long_to_short+0x194> <== NOT EXECUTED
#endif
return MSDOS_NAME_LONG;
}
}
if (is_dot)
380c8: e3530000 cmp r3, #0 <== NOT EXECUTED
380cc: 0affffe3 beq 38060 <msdos_long_to_short+0xac> <== NOT EXECUTED
dot_at = count;
else if ((*name >= 'A') && (*name <= 'Z'))
uppercase = true;
else if ((*name >= 'a') && (*name <= 'z'))
380d0: e1a0900a mov r9, sl <== NOT EXECUTED
lowercase = true;
count++;
380d4: e28aa001 add sl, sl, #1 <== NOT EXECUTED
bool lowercase = false;
bool uppercase = false;
int dot_at = -1;
int count = 0;
while (*name && (count < name_len))
380d8: e7d5800a ldrb r8, [r5, sl] <== NOT EXECUTED
380dc: e3580000 cmp r8, #0 <== NOT EXECUTED
380e0: 1154000a cmpne r4, sl <== NOT EXECUTED
380e4: caffffea bgt 38094 <msdos_long_to_short+0xe0> <== NOT EXECUTED
count++;
name++;
}
if (lowercase && uppercase)
380e8: e35b0000 cmp fp, #0 <== NOT EXECUTED
380ec: 0a000025 beq 38188 <msdos_long_to_short+0x1d4> <== NOT EXECUTED
380f0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
380f4: e3530000 cmp r3, #0 <== NOT EXECUTED
380f8: 0a000022 beq 38188 <msdos_long_to_short+0x1d4> <== NOT EXECUTED
msdos_filename_unix2dos (lfn, lfn_len, sfn);
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: TYPE:%d lfn:'%s' SFN:'%s'\n", type, lfn, sfn);
#endif
return type;
380fc: e3a07002 mov r7, #2 <== NOT EXECUTED
printf ("MSDOS_L2S: INVALID[2]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_INVALID;
}
msdos_filename_unix2dos (lfn, lfn_len, sfn);
38100: e1a00005 mov r0, r5 <== NOT EXECUTED
38104: e1a01004 mov r1, r4 <== NOT EXECUTED
38108: e1a02006 mov r2, r6 <== NOT EXECUTED
3810c: eb002586 bl 4172c <msdos_filename_unix2dos> <== NOT EXECUTED
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: TYPE:%d lfn:'%s' SFN:'%s'\n", type, lfn, sfn);
#endif
return type;
}
38110: e1a00007 mov r0, r7 <== NOT EXECUTED
38114: e28dd004 add sp, sp, #4 <== NOT EXECUTED
38118: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/*
* Filenames with only blanks and dots are not allowed!
*/
for (i = 0; i < lfn_len; i++)
if ((lfn[i] != ' ') && (lfn[i] != '.'))
3811c: e7d52003 ldrb r2, [r5, r3] <== NOT EXECUTED
38120: e352002e cmp r2, #46 ; 0x2e <== NOT EXECUTED
38124: 13520020 cmpne r2, #32 <== NOT EXECUTED
38128: 1affffbe bne 38028 <msdos_long_to_short+0x74> <== NOT EXECUTED
}
/*
* Filenames with only blanks and dots are not allowed!
*/
for (i = 0; i < lfn_len; i++)
3812c: e2833001 add r3, r3, #1 <== NOT EXECUTED
38130: e1540003 cmp r4, r3 <== NOT EXECUTED
38134: cafffff8 bgt 3811c <msdos_long_to_short+0x168> <== NOT EXECUTED
if ((lfn[i] != ' ') && (lfn[i] != '.'))
break;
if (i == lfn_len)
38138: e1530004 cmp r3, r4 <== NOT EXECUTED
3813c: 03a07000 moveq r7, #0 <== NOT EXECUTED
38140: 1affffb8 bne 38028 <msdos_long_to_short+0x74> <== NOT EXECUTED
38144: eafffff1 b 38110 <msdos_long_to_short+0x15c> <== NOT EXECUTED
return MSDOS_NAME_LONG;
}
}
else
{
if (count == 8 && !is_dot)
38148: e3530000 cmp r3, #0 <== NOT EXECUTED
3814c: 0affffea beq 380fc <msdos_long_to_short+0x148> <== NOT EXECUTED
if (is_dot)
dot_at = count;
else if ((*name >= 'A') && (*name <= 'Z'))
uppercase = true;
else if ((*name >= 'a') && (*name <= 'z'))
38150: e1a0900a mov r9, sl <== NOT EXECUTED
38154: eaffffde b 380d4 <msdos_long_to_short+0x120> <== NOT EXECUTED
printf ("MSDOS_L2S: SHORT[1]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_SHORT;
}
if ((lfn[0] == '.') && (lfn[1] == '.') && (lfn_len == 2))
38158: e5d53001 ldrb r3, [r5, #1] <== NOT EXECUTED
3815c: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
38160: 03540002 cmpeq r4, #2 <== NOT EXECUTED
38164: 1affffa7 bne 38008 <msdos_long_to_short+0x54> <== NOT EXECUTED
{
sfn[0] = sfn[1] = '.';
38168: e3a0302e mov r3, #46 ; 0x2e <== NOT EXECUTED
3816c: e5c63000 strb r3, [r6] <== NOT EXECUTED
38170: e5c63001 strb r3, [r6, #1] <== NOT EXECUTED
38174: e3a07001 mov r7, #1 <== NOT EXECUTED
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: SHORT[2]: lfn:'%s' SFN:'%s'\n", lfn, sfn);
#endif
return MSDOS_NAME_SHORT;
38178: eaffffe4 b 38110 <msdos_long_to_short+0x15c> <== NOT EXECUTED
* Is this a short name ?
*/
type = msdos_name_type (lfn, lfn_len);
if (type == MSDOS_NAME_INVALID)
3817c: e3500000 cmp r0, #0 <== NOT EXECUTED
38180: 0affffe2 beq 38110 <msdos_long_to_short+0x15c> <== NOT EXECUTED
38184: eaffffdd b 38100 <msdos_long_to_short+0x14c> <== NOT EXECUTED
msdos_filename_unix2dos (lfn, lfn_len, sfn);
#if MSDOS_L2S_PRINT
printf ("MSDOS_L2S: TYPE:%d lfn:'%s' SFN:'%s'\n", type, lfn, sfn);
#endif
return type;
38188: e3a07001 mov r7, #1 <== NOT EXECUTED
3818c: eaffffdb b 38100 <msdos_long_to_short+0x14c> <== NOT EXECUTED
000202a4 <msdos_mknod>:
const char *name,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
202a4: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
202a8: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
202ac: e59d7024 ldr r7, [sp, #36] ; 0x24 <== NOT EXECUTED
msdos_token_types_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
202b0: e2013a0f and r3, r1, #61440 ; 0xf000 <== NOT EXECUTED
rtems_filesystem_location_info_t *pathloc
)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
202b4: e5972010 ldr r2, [r7, #16] <== NOT EXECUTED
msdos_token_types_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
202b8: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
const char *name,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc
)
{
202bc: e1a04001 mov r4, r1 <== NOT EXECUTED
202c0: e1a08000 mov r8, r0 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = pathloc->mt_entry->fs_info;
202c4: e5925034 ldr r5, [r2, #52] ; 0x34 <== NOT EXECUTED
msdos_token_types_t type = 0;
/*
* Figure out what type of msdos node this is.
*/
if (S_ISDIR(mode))
202c8: 0a000016 beq 20328 <msdos_mknod+0x84> <== NOT EXECUTED
{
type = MSDOS_DIRECTORY;
}
else if (S_ISREG(mode))
202cc: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
202d0: 03a0a005 moveq sl, #5 <== NOT EXECUTED
202d4: 1a00001a bne 20344 <msdos_mknod+0xa0> <== NOT EXECUTED
type = MSDOS_REGULAR_FILE;
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
202d8: e3a01000 mov r1, #0 <== NOT EXECUTED
202dc: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
202e0: e1a02001 mov r2, r1 <== NOT EXECUTED
202e4: ebffb076 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
202e8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
202ec: 1a00000f bne 20330 <msdos_mknod+0x8c> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(EIO);
/* Create an MSDOS node */
rc = msdos_creat_node(pathloc, type, name, strlen(name), mode, NULL);
202f0: e1a00008 mov r0, r8 <== NOT EXECUTED
202f4: eb00a63a bl 49be4 <strlen> <== NOT EXECUTED
202f8: e1a0100a mov r1, sl <== NOT EXECUTED
202fc: e1a03000 mov r3, r0 <== NOT EXECUTED
20300: e1a02008 mov r2, r8 <== NOT EXECUTED
20304: e1a00007 mov r0, r7 <== NOT EXECUTED
20308: e88d0050 stm sp, {r4, r6} <== NOT EXECUTED
2030c: eb0056ee bl 35ecc <msdos_creat_node> <== NOT EXECUTED
20310: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_semaphore_release(fs_info->vol_sema);
20314: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
20318: ebffb0b1 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
2031c: e1a00004 mov r0, r4 <== NOT EXECUTED
20320: e28dd008 add sp, sp, #8 <== NOT EXECUTED
20324: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
else if (S_ISREG(mode))
{
type = MSDOS_REGULAR_FILE;
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
20328: e3a0a001 mov sl, #1 <== NOT EXECUTED
2032c: eaffffe9 b 202d8 <msdos_mknod+0x34> <== NOT EXECUTED
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
20330: eb008b2e bl 42ff0 <__errno> <== NOT EXECUTED
20334: e3a03005 mov r3, #5 <== NOT EXECUTED
20338: e5803000 str r3, [r0] <== NOT EXECUTED
2033c: e3e04000 mvn r4, #0 <== NOT EXECUTED
20340: eafffff5 b 2031c <msdos_mknod+0x78> <== NOT EXECUTED
else if (S_ISREG(mode))
{
type = MSDOS_REGULAR_FILE;
}
else
rtems_set_errno_and_return_minus_one(EINVAL);
20344: eb008b29 bl 42ff0 <__errno> <== NOT EXECUTED
20348: e3a03016 mov r3, #22 <== NOT EXECUTED
2034c: e5803000 str r3, [r0] <== NOT EXECUTED
20350: e3e04000 mvn r4, #0 <== NOT EXECUTED
20354: eafffff0 b 2031c <msdos_mknod+0x78> <== NOT EXECUTED
00020358 <msdos_node_type>:
* node type
*
*/
rtems_filesystem_node_types_t
msdos_node_type(rtems_filesystem_location_info_t *pathloc)
{
20358: e5903000 ldr r3, [r0] <== NOT EXECUTED
* call
*/
fat_fd = pathloc->node_access;
return fat_fd->fat_file_type;
}
2035c: e5930010 ldr r0, [r3, #16] <== NOT EXECUTED
20360: e12fff1e bx lr <== NOT EXECUTED
00020364 <msdos_rename>:
int
msdos_rename(rtems_filesystem_location_info_t *old_parent_loc,
rtems_filesystem_location_info_t *old_loc,
rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name)
{
20364: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
20368: e1a04003 mov r4, r3 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = new_parent_loc->mt_entry->fs_info;
2036c: e5923010 ldr r3, [r2, #16] <== NOT EXECUTED
int
msdos_rename(rtems_filesystem_location_info_t *old_parent_loc,
rtems_filesystem_location_info_t *old_loc,
rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name)
{
20370: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
int len;
/*
* check spelling and format new node name
*/
if (MSDOS_NAME != msdos_get_token(new_name, strlen(new_name), &token, &len)) {
20374: e1a00004 mov r0, r4 <== NOT EXECUTED
int
msdos_rename(rtems_filesystem_location_info_t *old_parent_loc,
rtems_filesystem_location_info_t *old_loc,
rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name)
{
20378: e1a07001 mov r7, r1 <== NOT EXECUTED
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = new_parent_loc->mt_entry->fs_info;
2037c: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
int
msdos_rename(rtems_filesystem_location_info_t *old_parent_loc,
rtems_filesystem_location_info_t *old_loc,
rtems_filesystem_location_info_t *new_parent_loc,
const char *new_name)
{
20380: e1a05002 mov r5, r2 <== NOT EXECUTED
int len;
/*
* check spelling and format new node name
*/
if (MSDOS_NAME != msdos_get_token(new_name, strlen(new_name), &token, &len)) {
20384: eb00a616 bl 49be4 <strlen> <== NOT EXECUTED
20388: e28d200c add r2, sp, #12 <== NOT EXECUTED
2038c: e1a01000 mov r1, r0 <== NOT EXECUTED
20390: e28d3008 add r3, sp, #8 <== NOT EXECUTED
20394: e1a00004 mov r0, r4 <== NOT EXECUTED
const char *new_name)
{
int rc = RC_OK;
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = new_parent_loc->mt_entry->fs_info;
fat_file_fd_t *old_fat_fd = old_loc->node_access;
20398: e5978000 ldr r8, [r7] <== NOT EXECUTED
int len;
/*
* check spelling and format new node name
*/
if (MSDOS_NAME != msdos_get_token(new_name, strlen(new_name), &token, &len)) {
2039c: eb005ecd bl 37ed8 <msdos_get_token> <== NOT EXECUTED
203a0: e3500003 cmp r0, #3 <== NOT EXECUTED
203a4: e1a0a000 mov sl, r0 <== NOT EXECUTED
203a8: 1a000019 bne 20414 <msdos_rename+0xb0> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
}
/*
* lock volume
*/
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
203ac: e3a01000 mov r1, #0 <== NOT EXECUTED
203b0: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
203b4: e1a02001 mov r2, r1 <== NOT EXECUTED
203b8: ebffb041 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
203bc: e3500000 cmp r0, #0 <== NOT EXECUTED
203c0: 1a000018 bne 20428 <msdos_rename+0xc4> <== NOT EXECUTED
/*
* create new directory entry as "hard link", copying relevant info from
* existing file
*/
rc = msdos_creat_node(new_parent_loc,
203c4: e1a02004 mov r2, r4 <== NOT EXECUTED
203c8: e3a0c902 mov ip, #32768 ; 0x8000 <== NOT EXECUTED
203cc: e1a00005 mov r0, r5 <== NOT EXECUTED
203d0: e1a0100a mov r1, sl <== NOT EXECUTED
203d4: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
203d8: e58dc000 str ip, [sp] <== NOT EXECUTED
203dc: e58d8004 str r8, [sp, #4] <== NOT EXECUTED
203e0: eb0056b9 bl 35ecc <msdos_creat_node> <== NOT EXECUTED
MSDOS_HARD_LINK,new_name,len,S_IFREG,
old_fat_fd);
if (rc != RC_OK)
203e4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
203e8: 1a000004 bne 20400 <msdos_rename+0x9c> <== NOT EXECUTED
}
/*
* mark file removed
*/
rc = msdos_set_first_char4file_name(old_loc->mt_entry,
203ec: e5970010 ldr r0, [r7, #16] <== NOT EXECUTED
203f0: e2881020 add r1, r8, #32 <== NOT EXECUTED
203f4: e3a020e5 mov r2, #229 ; 0xe5 <== NOT EXECUTED
203f8: eb005e10 bl 37c40 <msdos_set_first_char4file_name> <== NOT EXECUTED
203fc: e1a04000 mov r4, r0 <== NOT EXECUTED
&old_fat_fd->dir_pos,
MSDOS_THIS_DIR_ENTRY_EMPTY);
rtems_semaphore_release(fs_info->vol_sema);
20400: e5960094 ldr r0, [r6, #148] ; 0x94 <== NOT EXECUTED
20404: ebffb076 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rc;
}
20408: e1a00004 mov r0, r4 <== NOT EXECUTED
2040c: e28dd010 add sp, sp, #16 <== NOT EXECUTED
20410: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
/*
* check spelling and format new node name
*/
if (MSDOS_NAME != msdos_get_token(new_name, strlen(new_name), &token, &len)) {
rtems_set_errno_and_return_minus_one(ENAMETOOLONG);
20414: eb008af5 bl 42ff0 <__errno> <== NOT EXECUTED
20418: e3a0305b mov r3, #91 ; 0x5b <== NOT EXECUTED
2041c: e5803000 str r3, [r0] <== NOT EXECUTED
20420: e3e04000 mvn r4, #0 <== NOT EXECUTED
20424: eafffff7 b 20408 <msdos_rename+0xa4> <== NOT EXECUTED
* lock volume
*/
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_set_errno_and_return_minus_one(EIO);
20428: eb008af0 bl 42ff0 <__errno> <== NOT EXECUTED
2042c: e3a03005 mov r3, #5 <== NOT EXECUTED
20430: e5803000 str r3, [r0] <== NOT EXECUTED
20434: e3e04000 mvn r4, #0 <== NOT EXECUTED
20438: eafffff2 b 20408 <msdos_rename+0xa4> <== NOT EXECUTED
00037db0 <msdos_set_dir_wrt_time_and_date>:
int
msdos_set_dir_wrt_time_and_date(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37db0: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
37db4: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
37db8: e1a05001 mov r5, r1 <== NOT EXECUTED
uint16_t time_val;
uint16_t date;
uint32_t sec = 0;
uint32_t byte = 0;
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
37dbc: e28d8004 add r8, sp, #4 <== NOT EXECUTED
37dc0: e28d7006 add r7, sp, #6 <== NOT EXECUTED
int
msdos_set_dir_wrt_time_and_date(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37dc4: e1a04000 mov r4, r0 <== NOT EXECUTED
uint16_t time_val;
uint16_t date;
uint32_t sec = 0;
uint32_t byte = 0;
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
37dc8: e1a02007 mov r2, r7 <== NOT EXECUTED
37dcc: e1a01008 mov r1, r8 <== NOT EXECUTED
37dd0: e5950040 ldr r0, [r5, #64] ; 0x40 <== NOT EXECUTED
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
ssize_t ret1 = 0, ret2 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
37dd4: e594a034 ldr sl, [r4, #52] ; 0x34 <== NOT EXECUTED
uint16_t time_val;
uint16_t date;
uint32_t sec = 0;
uint32_t byte = 0;
msdos_date_unix2dos(fat_fd->mtime, &date, &time_val);
37dd8: eb0025a9 bl 41484 <msdos_date_unix2dos> <== NOT EXECUTED
/*
* calculate input for _fat_block_write: convert (cluster num, offset) to
* (sector num, new offset)
*/
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
37ddc: e5952020 ldr r2, [r5, #32] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37de0: e3520000 cmp r2, #0 <== NOT EXECUTED
fat_cluster_num_to_sector_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
37de4: e5943034 ldr r3, [r4, #52] ; 0x34 <== NOT EXECUTED
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37de8: 1a000003 bne 37dfc <msdos_set_dir_wrt_time_and_date+0x4c> <== NOT EXECUTED
37dec: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
37df0: e3110003 tst r1, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
37df4: 1593201c ldrne r2, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37df8: 1a000003 bne 37e0c <msdos_set_dir_wrt_time_and_date+0x5c> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
37dfc: e5931030 ldr r1, [r3, #48] ; 0x30 <== NOT EXECUTED
37e00: e5d33005 ldrb r3, [r3, #5] <== NOT EXECUTED
37e04: e2422002 sub r2, r2, #2 <== NOT EXECUTED
37e08: e0812312 add r2, r1, r2, lsl r3 <== NOT EXECUTED
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
37e0c: e5953024 ldr r3, [r5, #36] ; 0x24 <== NOT EXECUTED
37e10: e5da6002 ldrb r6, [sl, #2] <== NOT EXECUTED
37e14: e0826633 add r6, r2, r3, lsr r6 <== NOT EXECUTED
/* byte points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
37e18: e1da50b0 ldrh r5, [sl] <== NOT EXECUTED
37e1c: e2455001 sub r5, r5, #1 <== NOT EXECUTED
37e20: e0055003 and r5, r5, r3 <== NOT EXECUTED
time_val = CT_LE_W(time_val);
ret1 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_WTIME_OFFSET,
37e24: e1a01006 mov r1, r6 <== NOT EXECUTED
37e28: e2852016 add r2, r5, #22 <== NOT EXECUTED
37e2c: e3a03002 mov r3, #2 <== NOT EXECUTED
37e30: e1a00004 mov r0, r4 <== NOT EXECUTED
37e34: e58d7000 str r7, [sp] <== NOT EXECUTED
37e38: ebffb935 bl 26314 <_fat_block_write> <== NOT EXECUTED
2, (char *)(&time_val));
date = CT_LE_W(date);
ret2 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_WDATE_OFFSET,
37e3c: e1a01006 mov r1, r6 <== NOT EXECUTED
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
time_val = CT_LE_W(time_val);
ret1 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_WTIME_OFFSET,
37e40: e1a07000 mov r7, r0 <== NOT EXECUTED
2, (char *)(&time_val));
date = CT_LE_W(date);
ret2 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_WDATE_OFFSET,
37e44: e2852018 add r2, r5, #24 <== NOT EXECUTED
37e48: e1a00004 mov r0, r4 <== NOT EXECUTED
37e4c: e3a03002 mov r3, #2 <== NOT EXECUTED
37e50: e58d8000 str r8, [sp] <== NOT EXECUTED
37e54: ebffb92e bl 26314 <_fat_block_write> <== NOT EXECUTED
2, (char *)(&date));
if ( (ret1 < 0) || (ret2 < 0) )
37e58: e1a07fa7 lsr r7, r7, #31 <== NOT EXECUTED
37e5c: e1970fa0 orrs r0, r7, r0, lsr #31 <== NOT EXECUTED
return -1;
return RC_OK;
}
37e60: 13e00000 mvnne r0, #0 <== NOT EXECUTED
37e64: e28dd008 add sp, sp, #8 <== NOT EXECUTED
37e68: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
00037b04 <msdos_set_file_size>:
int
msdos_set_file_size(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37b04: e92d4010 push {r4, lr} <== NOT EXECUTED
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t le_new_length = 0;
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
37b08: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37b0c: e3530000 cmp r3, #0 <== NOT EXECUTED
int
msdos_set_file_size(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37b10: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
ssize_t ret = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
37b14: e590c034 ldr ip, [r0, #52] ; 0x34 <== NOT EXECUTED
37b18: 1a000003 bne 37b2c <msdos_set_file_size+0x28> <== NOT EXECUTED
37b1c: e5dc200a ldrb r2, [ip, #10] <== NOT EXECUTED
37b20: e3120003 tst r2, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
37b24: 159c301c ldrne r3, [ip, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37b28: 1a000003 bne 37b3c <msdos_set_file_size+0x38> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
37b2c: e5dce005 ldrb lr, [ip, #5] <== NOT EXECUTED
37b30: e59c2030 ldr r2, [ip, #48] ; 0x30 <== NOT EXECUTED
37b34: e2433002 sub r3, r3, #2 <== NOT EXECUTED
37b38: e0823e13 add r3, r2, r3, lsl lr <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
37b3c: e1dc20b0 ldrh r2, [ip] <== NOT EXECUTED
uint32_t le_new_length = 0;
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
37b40: e591e024 ldr lr, [r1, #36] ; 0x24 <== NOT EXECUTED
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
le_new_length = CT_LE_L((fat_fd->fat_file_size));
37b44: e5914018 ldr r4, [r1, #24] <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
37b48: e2422001 sub r2, r2, #1 <== NOT EXECUTED
uint32_t le_new_length = 0;
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
37b4c: e5dc1002 ldrb r1, [ip, #2] <== NOT EXECUTED
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
le_new_length = CT_LE_L((fat_fd->fat_file_size));
37b50: e28dc008 add ip, sp, #8 <== NOT EXECUTED
37b54: e52c4004 str r4, [ip, #-4]! <== NOT EXECUTED
uint32_t sec = 0;
uint32_t byte = 0;
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
byte = (fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1));
37b58: e002200e and r2, r2, lr <== NOT EXECUTED
le_new_length = CT_LE_L((fat_fd->fat_file_size));
ret = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_SIZE_OFFSET, 4,
37b5c: e083113e add r1, r3, lr, lsr r1 <== NOT EXECUTED
37b60: e282201c add r2, r2, #28 <== NOT EXECUTED
37b64: e3a03004 mov r3, #4 <== NOT EXECUTED
37b68: e58dc000 str ip, [sp] <== NOT EXECUTED
37b6c: ebffb9e8 bl 26314 <_fat_block_write> <== NOT EXECUTED
(char *)(&le_new_length));
if ( ret < 0 )
37b70: e3500000 cmp r0, #0 <== NOT EXECUTED
return -1;
return RC_OK;
}
37b74: b3e00000 mvnlt r0, #0 <== NOT EXECUTED
37b78: a3a00000 movge r0, #0 <== NOT EXECUTED
37b7c: e28dd008 add sp, sp, #8 <== NOT EXECUTED
37b80: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00037c40 <msdos_set_first_char4file_name>:
msdos_set_first_char4file_name(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_dir_pos_t *dir_pos,
unsigned char fchar
)
{
37c40: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
ssize_t ret;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
37c44: e2814008 add r4, r1, #8 <== NOT EXECUTED
37c48: e8940018 ldm r4, {r3, r4} <== NOT EXECUTED
msdos_set_first_char4file_name(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_dir_pos_t *dir_pos,
unsigned char fchar
)
{
37c4c: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
37c50: e5cd2004 strb r2, [sp, #4] <== NOT EXECUTED
ssize_t ret;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
37c54: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
37c58: e58d400c str r4, [sp, #12] <== NOT EXECUTED
fat_dir_pos_t *dir_pos,
unsigned char fchar
)
{
ssize_t ret;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
37c5c: e5903034 ldr r3, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
fat_pos_t end = dir_pos->sname;
37c60: e5916000 ldr r6, [r1] <== NOT EXECUTED
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
37c64: e5932038 ldr r2, [r3, #56] ; 0x38 <== NOT EXECUTED
37c68: e1520006 cmp r2, r6 <== NOT EXECUTED
msdos_set_first_char4file_name(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_dir_pos_t *dir_pos,
unsigned char fchar
)
{
37c6c: e1a04000 mov r4, r0 <== NOT EXECUTED
ssize_t ret;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
37c70: e1a05003 mov r5, r3 <== NOT EXECUTED
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
fat_pos_t end = dir_pos->sname;
37c74: e591a004 ldr sl, [r1, #4] <== NOT EXECUTED
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
37c78: 0a000041 beq 37d84 <msdos_set_first_char4file_name+0x144> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
dir_block_size = fs_info->fat.vol.rdir_size;
else
dir_block_size = fs_info->fat.vol.bpc;
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
37c7c: e5912008 ldr r2, [r1, #8] <== NOT EXECUTED
37c80: e3720001 cmn r2, #1 <== NOT EXECUTED
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
dir_block_size = fs_info->fat.vol.rdir_size;
else
dir_block_size = fs_info->fat.vol.bpc;
37c84: e1d380b6 ldrh r8, [r3, #6] <== NOT EXECUTED
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
37c88: 0a000044 beq 37da0 <msdos_set_first_char4file_name+0x160> <== NOT EXECUTED
start = dir_pos->sname;
37c8c: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
37c90: e5d3c002 ldrb ip, [r3, #2] <== NOT EXECUTED
37c94: e1d320b0 ldrh r2, [r3] <== NOT EXECUTED
37c98: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
37c9c: e28d7004 add r7, sp, #4 <== NOT EXECUTED
{
int rc;
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
break;
rc = fat_get_fat_cluster(mt_entry, start.cln, &start.cln);
37ca0: e28d9008 add r9, sp, #8 <== NOT EXECUTED
37ca4: ea000006 b 37cc4 <msdos_set_first_char4file_name+0x84> <== NOT EXECUTED
return -1;
if ((start.cln == end.cln) && (start.ofs == end.ofs))
break;
start.ofs += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
37ca8: e2800020 add r0, r0, #32 <== NOT EXECUTED
if (start.ofs >= dir_block_size)
37cac: e1580000 cmp r8, r0 <== NOT EXECUTED
return -1;
if ((start.cln == end.cln) && (start.ofs == end.ofs))
break;
start.ofs += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
37cb0: e58d000c str r0, [sp, #12] <== NOT EXECUTED
if (start.ofs >= dir_block_size)
37cb4: 9a00001f bls 37d38 <msdos_set_first_char4file_name+0xf8> <== NOT EXECUTED
37cb8: e5943034 ldr r3, [r4, #52] ; 0x34 <== NOT EXECUTED
37cbc: e5d5c002 ldrb ip, [r5, #2] <== NOT EXECUTED
37cc0: e1d520b0 ldrh r2, [r5] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37cc4: e3510000 cmp r1, #0 <== NOT EXECUTED
37cc8: 1a000003 bne 37cdc <msdos_set_first_char4file_name+0x9c> <== NOT EXECUTED
37ccc: e5d3e00a ldrb lr, [r3, #10] <== NOT EXECUTED
37cd0: e31e0003 tst lr, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
37cd4: 1593101c ldrne r1, [r3, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37cd8: 1a000003 bne 37cec <msdos_set_first_char4file_name+0xac> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
37cdc: e593e030 ldr lr, [r3, #48] ; 0x30 <== NOT EXECUTED
37ce0: e5d33005 ldrb r3, [r3, #5] <== NOT EXECUTED
37ce4: e2411002 sub r1, r1, #2 <== NOT EXECUTED
37ce8: e08e1311 add r1, lr, r1, lsl r3 <== NOT EXECUTED
{
uint32_t sec = (fat_cluster_num_to_sector_num(mt_entry, start.cln) +
(start.ofs >> fs_info->fat.vol.sec_log2));
uint32_t byte = (start.ofs & (fs_info->fat.vol.bps - 1));;
ret = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_NAME_OFFSET, 1,
37cec: e2422001 sub r2, r2, #1 <== NOT EXECUTED
37cf0: e0811c30 add r1, r1, r0, lsr ip <== NOT EXECUTED
37cf4: e0022000 and r2, r2, r0 <== NOT EXECUTED
37cf8: e3a03001 mov r3, #1 <== NOT EXECUTED
37cfc: e1a00004 mov r0, r4 <== NOT EXECUTED
37d00: e58d7000 str r7, [sp] <== NOT EXECUTED
37d04: ebffb982 bl 26314 <_fat_block_write> <== NOT EXECUTED
&fchar);
if (ret < 0)
37d08: e3500000 cmp r0, #0 <== NOT EXECUTED
37d0c: ba00001a blt 37d7c <msdos_set_first_char4file_name+0x13c> <== NOT EXECUTED
return -1;
if ((start.cln == end.cln) && (start.ofs == end.ofs))
37d10: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
37d14: e1510006 cmp r1, r6 <== NOT EXECUTED
37d18: 159d000c ldrne r0, [sp, #12] <== NOT EXECUTED
37d1c: 1affffe1 bne 37ca8 <msdos_set_first_char4file_name+0x68> <== NOT EXECUTED
37d20: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
37d24: e150000a cmp r0, sl <== NOT EXECUTED
37d28: 1affffde bne 37ca8 <msdos_set_first_char4file_name+0x68> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
break;
rc = fat_get_fat_cluster(mt_entry, start.cln, &start.cln);
if ( rc != RC_OK )
return rc;
start.ofs = 0;
37d2c: e3a00000 mov r0, #0 <== NOT EXECUTED
}
}
return RC_OK;
}
37d30: e28dd010 add sp, sp, #16 <== NOT EXECUTED
37d34: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
start.ofs += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
if (start.ofs >= dir_block_size)
{
int rc;
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
37d38: e5953038 ldr r3, [r5, #56] ; 0x38 <== NOT EXECUTED
37d3c: e1530006 cmp r3, r6 <== NOT EXECUTED
37d40: 1a000002 bne 37d50 <msdos_set_first_char4file_name+0x110> <== NOT EXECUTED
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
37d44: e5d5300a ldrb r3, [r5, #10] <== NOT EXECUTED
37d48: e3130003 tst r3, #3 <== NOT EXECUTED
37d4c: 1afffff6 bne 37d2c <msdos_set_first_char4file_name+0xec> <== NOT EXECUTED
break;
rc = fat_get_fat_cluster(mt_entry, start.cln, &start.cln);
37d50: e1a00004 mov r0, r4 <== NOT EXECUTED
37d54: e1a02009 mov r2, r9 <== NOT EXECUTED
37d58: eb001c32 bl 3ee28 <fat_get_fat_cluster> <== NOT EXECUTED
if ( rc != RC_OK )
37d5c: e3500000 cmp r0, #0 <== NOT EXECUTED
37d60: 1afffff2 bne 37d30 <msdos_set_first_char4file_name+0xf0> <== NOT EXECUTED
return rc;
start.ofs = 0;
37d64: e58d000c str r0, [sp, #12] <== NOT EXECUTED
37d68: e5943034 ldr r3, [r4, #52] ; 0x34 <== NOT EXECUTED
37d6c: e5d5c002 ldrb ip, [r5, #2] <== NOT EXECUTED
37d70: e1d520b0 ldrh r2, [r5] <== NOT EXECUTED
37d74: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
37d78: eaffffd1 b 37cc4 <msdos_set_first_char4file_name+0x84> <== NOT EXECUTED
37d7c: e3e00000 mvn r0, #0 <== NOT EXECUTED
37d80: eaffffea b 37d30 <msdos_set_first_char4file_name+0xf0> <== NOT EXECUTED
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
fat_pos_t end = dir_pos->sname;
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
37d84: e5d3200a ldrb r2, [r3, #10] <== NOT EXECUTED
37d88: e3120003 tst r2, #3 <== NOT EXECUTED
dir_block_size = fs_info->fat.vol.rdir_size;
37d8c: 15938028 ldrne r8, [r3, #40] ; 0x28 <== NOT EXECUTED
uint32_t dir_block_size;
fat_pos_t start = dir_pos->lname;
fat_pos_t end = dir_pos->sname;
if ((end.cln == fs_info->fat.vol.rdir_cl) &&
(fs_info->fat.vol.type & (FAT_FAT12 | FAT_FAT16)))
37d90: 0affffb9 beq 37c7c <msdos_set_first_char4file_name+0x3c> <== NOT EXECUTED
dir_block_size = fs_info->fat.vol.rdir_size;
else
dir_block_size = fs_info->fat.vol.bpc;
if (dir_pos->lname.cln == FAT_FILE_SHORT_NAME)
37d94: e5912008 ldr r2, [r1, #8] <== NOT EXECUTED
37d98: e3720001 cmn r2, #1 <== NOT EXECUTED
37d9c: 1affffba bne 37c8c <msdos_set_first_char4file_name+0x4c> <== NOT EXECUTED
start = dir_pos->sname;
37da0: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
37da4: e58d1008 str r1, [sp, #8] <== NOT EXECUTED
37da8: e58d200c str r2, [sp, #12] <== NOT EXECUTED
37dac: eaffffb6 b 37c8c <msdos_set_first_char4file_name+0x4c> <== NOT EXECUTED
00037b84 <msdos_set_first_cluster_num>:
int
msdos_set_first_cluster_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37b84: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
/*
* calculate input for _fat_block_write: convert (cluster num, offset) to
* (sector num, new offset)
*/
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
37b88: e5913020 ldr r3, [r1, #32] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37b8c: e3530000 cmp r3, #0 <== NOT EXECUTED
int
msdos_set_first_cluster_num(
rtems_filesystem_mount_table_entry_t *mt_entry,
fat_file_fd_t *fat_fd
)
{
37b90: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
37b94: e1a04000 mov r4, r0 <== NOT EXECUTED
ssize_t ret1 = 0, ret2 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
37b98: e5902034 ldr r2, [r0, #52] ; 0x34 <== NOT EXECUTED
uint32_t new_cln = fat_fd->cln;
37b9c: e591701c ldr r7, [r1, #28] <== NOT EXECUTED
37ba0: 1a000003 bne 37bb4 <msdos_set_first_cluster_num+0x30> <== NOT EXECUTED
37ba4: e5d2000a ldrb r0, [r2, #10] <== NOT EXECUTED
37ba8: e3100003 tst r0, #3 <== NOT EXECUTED
return fs_info->vol.rdir_loc;
37bac: 1592301c ldrne r3, [r2, #28] <== NOT EXECUTED
uint32_t cln
)
{
register fat_fs_info_t *fs_info = mt_entry->fs_info;
if ( (cln == 0) && (fs_info->vol.type & (FAT_FAT12 | FAT_FAT16)) )
37bb0: 1a000003 bne 37bc4 <msdos_set_first_cluster_num+0x40> <== NOT EXECUTED
return fs_info->vol.rdir_loc;
return (((cln - FAT_RSRVD_CLN) << fs_info->vol.spc_log2) +
37bb4: e5d2c005 ldrb ip, [r2, #5] <== NOT EXECUTED
37bb8: e5920030 ldr r0, [r2, #48] ; 0x30 <== NOT EXECUTED
37bbc: e2433002 sub r3, r3, #2 <== NOT EXECUTED
37bc0: e0803c13 add r3, r0, r3, lsl ip <== NOT EXECUTED
/*
* calculate input for _fat_block_write: convert (cluster num, offset) to
* (sector num, new offset)
*/
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
37bc4: e5d26002 ldrb r6, [r2, #2] <== NOT EXECUTED
37bc8: e5911024 ldr r1, [r1, #36] ; 0x24 <== NOT EXECUTED
37bcc: e0836631 add r6, r3, r1, lsr r6 <== NOT EXECUTED
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
37bd0: e1d250b0 ldrh r5, [r2] <== NOT EXECUTED
37bd4: e2455001 sub r5, r5, #1 <== NOT EXECUTED
37bd8: e0055001 and r5, r5, r1 <== NOT EXECUTED
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(mt_entry, sec,
37bdc: e28dc006 add ip, sp, #6 <== NOT EXECUTED
37be0: e1a01006 mov r1, r6 <== NOT EXECUTED
37be4: e285201a add r2, r5, #26 <== NOT EXECUTED
37be8: e58dc000 str ip, [sp] <== NOT EXECUTED
37bec: e3a03002 mov r3, #2 <== NOT EXECUTED
{
ssize_t ret1 = 0, ret2 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t new_cln = fat_fd->cln;
uint16_t le_cl_low = 0;
uint16_t le_cl_hi = 0;
37bf0: e3a0c000 mov ip, #0 <== NOT EXECUTED
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(mt_entry, sec,
37bf4: e1a00004 mov r0, r4 <== NOT EXECUTED
sec = fat_cluster_num_to_sector_num(mt_entry, fat_fd->dir_pos.sname.cln);
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
37bf8: e1cd70b6 strh r7, [sp, #6] <== NOT EXECUTED
{
ssize_t ret1 = 0, ret2 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint32_t new_cln = fat_fd->cln;
uint16_t le_cl_low = 0;
uint16_t le_cl_hi = 0;
37bfc: e1cdc0b4 strh ip, [sp, #4] <== NOT EXECUTED
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(mt_entry, sec,
37c00: ebffb9c3 bl 26314 <_fat_block_write> <== NOT EXECUTED
byte + MSDOS_FIRST_CLUSTER_LOW_OFFSET, 2,
(char *)(&le_cl_low));
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
37c04: e1a07827 lsr r7, r7, #16 <== NOT EXECUTED
37c08: e28dc008 add ip, sp, #8 <== NOT EXECUTED
37c0c: e16c70b4 strh r7, [ip, #-4]! <== NOT EXECUTED
sec += (fat_fd->dir_pos.sname.ofs >> fs_info->fat.vol.sec_log2);
/* byte from points to start of 32bytes structure */
byte = fat_fd->dir_pos.sname.ofs & (fs_info->fat.vol.bps - 1);
le_cl_low = CT_LE_W((uint16_t )(new_cln & 0x0000FFFF));
ret1 = _fat_block_write(mt_entry, sec,
37c10: e1a08000 mov r8, r0 <== NOT EXECUTED
byte + MSDOS_FIRST_CLUSTER_LOW_OFFSET, 2,
(char *)(&le_cl_low));
le_cl_hi = CT_LE_W((uint16_t )((new_cln & 0xFFFF0000) >> 16));
ret2 = _fat_block_write(mt_entry, sec,
37c14: e1a01006 mov r1, r6 <== NOT EXECUTED
37c18: e1a00004 mov r0, r4 <== NOT EXECUTED
37c1c: e2852014 add r2, r5, #20 <== NOT EXECUTED
37c20: e3a03002 mov r3, #2 <== NOT EXECUTED
37c24: e58dc000 str ip, [sp] <== NOT EXECUTED
37c28: ebffb9b9 bl 26314 <_fat_block_write> <== NOT EXECUTED
byte + MSDOS_FIRST_CLUSTER_HI_OFFSET, 2,
(char *)(&le_cl_hi));
if ( (ret1 < 0) || (ret2 < 0) )
37c2c: e1a08fa8 lsr r8, r8, #31 <== NOT EXECUTED
37c30: e1980fa0 orrs r0, r8, r0, lsr #31 <== NOT EXECUTED
return -1;
return RC_OK;
}
37c34: 13e00000 mvnne r0, #0 <== NOT EXECUTED
37c38: e28dd008 add sp, sp, #8 <== NOT EXECUTED
37c3c: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00036e1c <msdos_shut_down>:
* RC_OK on success, or -1 if error occured (errno set apropriately).
*
*/
int
msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
{
36e1c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = temp_mt_entry->fs_info;
fat_file_fd_t *fat_fd = temp_mt_entry->mt_fs_root.node_access;
/* close fat-file which correspondes to root directory */
if (fat_file_close(temp_mt_entry, fat_fd) != RC_OK)
36e20: e590101c ldr r1, [r0, #28] <== NOT EXECUTED
* RC_OK on success, or -1 if error occured (errno set apropriately).
*
*/
int
msdos_shut_down(rtems_filesystem_mount_table_entry_t *temp_mt_entry)
{
36e24: e1a04000 mov r4, r0 <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = temp_mt_entry->fs_info;
36e28: e5905034 ldr r5, [r0, #52] ; 0x34 <== NOT EXECUTED
fat_file_fd_t *fat_fd = temp_mt_entry->mt_fs_root.node_access;
/* close fat-file which correspondes to root directory */
if (fat_file_close(temp_mt_entry, fat_fd) != RC_OK)
36e2c: ebffbb49 bl 25b58 <fat_file_close> <== NOT EXECUTED
36e30: e2506000 subs r6, r0, #0 <== NOT EXECUTED
{
/* no return - try to free as much as possible */
rc = -1;
}
if (fat_shutdown_drive(temp_mt_entry) != RC_OK)
36e34: e1a00004 mov r0, r4 <== NOT EXECUTED
int rc = RC_OK;
msdos_fs_info_t *fs_info = temp_mt_entry->fs_info;
fat_file_fd_t *fat_fd = temp_mt_entry->mt_fs_root.node_access;
/* close fat-file which correspondes to root directory */
if (fat_file_close(temp_mt_entry, fat_fd) != RC_OK)
36e38: 13e06000 mvnne r6, #0 <== NOT EXECUTED
{
/* no return - try to free as much as possible */
rc = -1;
}
if (fat_shutdown_drive(temp_mt_entry) != RC_OK)
36e3c: ebffbd85 bl 26458 <fat_shutdown_drive> <== NOT EXECUTED
36e40: e3500000 cmp r0, #0 <== NOT EXECUTED
{
/* no return - try to free as much as possible */
rc = -1;
}
rtems_semaphore_delete(fs_info->vol_sema);
36e44: e5950094 ldr r0, [r5, #148] ; 0x94 <== NOT EXECUTED
{
/* no return - try to free as much as possible */
rc = -1;
}
if (fat_shutdown_drive(temp_mt_entry) != RC_OK)
36e48: 13e06000 mvnne r6, #0 <== NOT EXECUTED
{
/* no return - try to free as much as possible */
rc = -1;
}
rtems_semaphore_delete(fs_info->vol_sema);
36e4c: ebff5559 bl c3b8 <rtems_semaphore_delete> <== NOT EXECUTED
free(fs_info->cl_buf);
36e50: e5950098 ldr r0, [r5, #152] ; 0x98 <== NOT EXECUTED
36e54: ebff43c5 bl 7d70 <free> <== NOT EXECUTED
free(temp_mt_entry->fs_info);
36e58: e5940034 ldr r0, [r4, #52] ; 0x34 <== NOT EXECUTED
36e5c: ebff43c3 bl 7d70 <free> <== NOT EXECUTED
return rc;
}
36e60: e1a00006 mov r0, r6 <== NOT EXECUTED
36e64: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00002a7c <newlib_free_buffers>:
*/
int newlib_free_buffers(
FILE *fp
)
{
2a7c: e92d4010 push {r4, lr}
2a80: e1a04000 mov r4, r0
switch ( fileno(fp) ) {
2a84: eb002f0c bl e6bc <fileno>
2a88: e3500002 cmp r0, #2
2a8c: 9a000003 bls 2aa0 <newlib_free_buffers+0x24>
fp->_flags &= ~__SMBF;
fp->_bf._base = fp->_p = (unsigned char *) NULL;
}
break;
default:
fclose(fp);
2a90: e1a00004 mov r0, r4 <== NOT EXECUTED
2a94: eb002e56 bl e3f4 <fclose> <== NOT EXECUTED
}
return 0;
}
2a98: e3a00000 mov r0, #0
2a9c: e8bd8010 pop {r4, pc}
{
switch ( fileno(fp) ) {
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
2aa0: e1d430bc ldrh r3, [r4, #12]
2aa4: e3130080 tst r3, #128 ; 0x80
2aa8: 0afffffa beq 2a98 <newlib_free_buffers+0x1c>
free( fp->_bf._base );
2aac: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
2ab0: ebfffd7c bl 20a8 <free> <== NOT EXECUTED
fp->_flags &= ~__SMBF;
2ab4: e1d420bc ldrh r2, [r4, #12] <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
2ab8: e3a03000 mov r3, #0 <== NOT EXECUTED
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
free( fp->_bf._base );
fp->_flags &= ~__SMBF;
2abc: e3c22080 bic r2, r2, #128 ; 0x80 <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
2ac0: e5843010 str r3, [r4, #16] <== NOT EXECUTED
case 0:
case 1:
case 2:
if (fp->_flags & __SMBF) {
free( fp->_bf._base );
fp->_flags &= ~__SMBF;
2ac4: e1c420bc strh r2, [r4, #12] <== NOT EXECUTED
fp->_bf._base = fp->_p = (unsigned char *) NULL;
2ac8: e5843000 str r3, [r4] <== NOT EXECUTED
break;
default:
fclose(fp);
}
return 0;
}
2acc: e3a00000 mov r0, #0 <== NOT EXECUTED
2ad0: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00002558 <null_initialize>:
rtems_device_driver null_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *pargp __attribute__((unused))
)
{
2558: e92d4010 push {r4, lr}
rtems_device_driver status;
if ( !initialized ) {
255c: e59f3044 ldr r3, [pc, #68] ; 25a8 <null_initialize+0x50>
2560: e5d32000 ldrb r2, [r3]
2564: e3520000 cmp r2, #0
rtems_device_driver null_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *pargp __attribute__((unused))
)
{
2568: e1a04000 mov r4, r0
rtems_device_driver status;
if ( !initialized ) {
256c: 0a000001 beq 2578 <null_initialize+0x20>
NULL_major = major;
}
return RTEMS_SUCCESSFUL;
}
2570: e3a00000 mov r0, #0
2574: e8bd8010 pop {r4, pc}
)
{
rtems_device_driver status;
if ( !initialized ) {
initialized = 1;
2578: e3a0c001 mov ip, #1
status = rtems_io_register_name(
257c: e59f0028 ldr r0, [pc, #40] ; 25ac <null_initialize+0x54>
2580: e1a01004 mov r1, r4
)
{
rtems_device_driver status;
if ( !initialized ) {
initialized = 1;
2584: e5c3c000 strb ip, [r3]
status = rtems_io_register_name(
2588: eb0001b7 bl 2c6c <rtems_io_register_name>
"/dev/null",
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
258c: e3500000 cmp r0, #0
2590: 1a000003 bne 25a4 <null_initialize+0x4c>
rtems_fatal_error_occurred(status);
NULL_major = major;
2594: e59f3014 ldr r3, [pc, #20] ; 25b0 <null_initialize+0x58>
}
return RTEMS_SUCCESSFUL;
}
2598: e3a00000 mov r0, #0
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
NULL_major = major;
259c: e5834000 str r4, [r3]
}
return RTEMS_SUCCESSFUL;
}
25a0: e8bd8010 pop {r4, pc}
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
25a4: eb001286 bl 6fc4 <rtems_fatal_error_occurred> <== NOT EXECUTED
00002d14 <open>:
int open(
const char *pathname,
int flags,
...
)
{
2d14: e92d000e push {r1, r2, r3}
2d18: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
2d1c: e24dd01c sub sp, sp, #28
2d20: e59d503c ldr r5, [sp, #60] ; 0x3c
/*
* Set the Evaluation flags
*/
eval_flags = 0;
status = flags + 1;
2d24: e2853001 add r3, r5, #1
if ( ( status & _FREAD ) == _FREAD )
2d28: e2138001 ands r8, r3, #1
2d2c: 13a08004 movne r8, #4
eval_flags |= RTEMS_LIBIO_PERMS_READ;
if ( ( status & _FWRITE ) == _FWRITE )
2d30: e3130002 tst r3, #2
eval_flags |= RTEMS_LIBIO_PERMS_WRITE;
va_start(ap, flags);
mode = va_arg( ap, int );
2d34: e28d3044 add r3, sp, #68 ; 0x44
int open(
const char *pathname,
int flags,
...
)
{
2d38: e1a06000 mov r6, r0
eval_flags = 0;
status = flags + 1;
if ( ( status & _FREAD ) == _FREAD )
eval_flags |= RTEMS_LIBIO_PERMS_READ;
if ( ( status & _FWRITE ) == _FWRITE )
eval_flags |= RTEMS_LIBIO_PERMS_WRITE;
2d3c: 13888002 orrne r8, r8, #2
va_start(ap, flags);
mode = va_arg( ap, int );
2d40: e58d3018 str r3, [sp, #24]
2d44: e59da040 ldr sl, [sp, #64] ; 0x40
* code does not require changes here since network file
* descriptors are obtained using socket(), not open().
*/
/* allocate a file control block */
iop = rtems_libio_allocate();
2d48: eb002073 bl af1c <rtems_libio_allocate>
if ( iop == 0 ) {
2d4c: e2504000 subs r4, r0, #0
2d50: 03a06017 moveq r6, #23
2d54: 0a00005d beq 2ed0 <open+0x1bc>
/*
* See if the file exists.
*/
status = rtems_filesystem_evaluate_path(
2d58: e1a00006 mov r0, r6
2d5c: eb00315c bl f2d4 <strlen>
2d60: e28d7004 add r7, sp, #4
2d64: e1a01000 mov r1, r0
2d68: e1a02008 mov r2, r8
2d6c: e1a00006 mov r0, r6
2d70: e3a08001 mov r8, #1
2d74: e1a03007 mov r3, r7
2d78: e58d8000 str r8, [sp]
2d7c: ebfffca7 bl 2020 <rtems_filesystem_evaluate_path>
pathname, strlen( pathname ), eval_flags, &loc, true );
if ( status == -1 ) {
2d80: e3700001 cmn r0, #1
2d84: 0a000055 beq 2ee0 <open+0x1cc>
if ( status != 0 ) { /* The file did not exist */
rc = EACCES;
goto done;
}
} else if ((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) {
2d88: e2053c0a and r3, r5, #2560 ; 0xa00
2d8c: e3530c0a cmp r3, #2560 ; 0xa00
2d90: 03a06011 moveq r6, #17
2d94: 0a000040 beq 2e9c <open+0x188>
/*
* Fill in the file control block based on the loc structure
* returned by successful path evaluation.
*/
iop->handlers = loc.handlers;
2d98: e59d300c ldr r3, [sp, #12]
2d9c: e584303c str r3, [r4, #60] ; 0x3c
iop->file_info = loc.node_access;
2da0: e59d3004 ldr r3, [sp, #4]
iop->flags |= rtems_libio_fcntl_flags( flags );
2da4: e1a00005 mov r0, r5
* Fill in the file control block based on the loc structure
* returned by successful path evaluation.
*/
iop->handlers = loc.handlers;
iop->file_info = loc.node_access;
2da8: e5843038 str r3, [r4, #56] ; 0x38
iop->flags |= rtems_libio_fcntl_flags( flags );
2dac: e5948014 ldr r8, [r4, #20]
2db0: eb002087 bl afd4 <rtems_libio_fcntl_flags>
iop->pathinfo = loc;
2db4: e1a0e007 mov lr, r7
* returned by successful path evaluation.
*/
iop->handlers = loc.handlers;
iop->file_info = loc.node_access;
iop->flags |= rtems_libio_fcntl_flags( flags );
2db8: e1808008 orr r8, r0, r8
iop->pathinfo = loc;
2dbc: e8be000f ldm lr!, {r0, r1, r2, r3}
2dc0: e284c018 add ip, r4, #24
2dc4: e8ac000f stmia ip!, {r0, r1, r2, r3}
if ( !iop->handlers || !iop->handlers->open_h ) {
2dc8: e594303c ldr r3, [r4, #60] ; 0x3c
*/
iop->handlers = loc.handlers;
iop->file_info = loc.node_access;
iop->flags |= rtems_libio_fcntl_flags( flags );
iop->pathinfo = loc;
2dcc: e59e2000 ldr r2, [lr]
if ( !iop->handlers || !iop->handlers->open_h ) {
2dd0: e3530000 cmp r3, #0
*/
iop->handlers = loc.handlers;
iop->file_info = loc.node_access;
iop->flags |= rtems_libio_fcntl_flags( flags );
iop->pathinfo = loc;
2dd4: e58c2000 str r2, [ip]
* returned by successful path evaluation.
*/
iop->handlers = loc.handlers;
iop->file_info = loc.node_access;
iop->flags |= rtems_libio_fcntl_flags( flags );
2dd8: e5848014 str r8, [r4, #20]
iop->pathinfo = loc;
if ( !iop->handlers || !iop->handlers->open_h ) {
2ddc: 0a00002d beq 2e98 <open+0x184>
2de0: e593c000 ldr ip, [r3]
2de4: e35c0000 cmp ip, #0
2de8: 0a00002a beq 2e98 <open+0x184>
rc = ENOTSUP;
goto done;
}
rc = (*iop->handlers->open_h)( iop, pathname, flags, mode );
2dec: e1a01006 mov r1, r6
2df0: e1a0300a mov r3, sl
2df4: e1a00004 mov r0, r4
2df8: e1a02005 mov r2, r5
2dfc: e1a0e00f mov lr, pc
2e00: e12fff1c bx ip
if ( rc ) {
2e04: e3500000 cmp r0, #0
2e08: 1a000009 bne 2e34 <open+0x120>
/*
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
2e0c: e3150b01 tst r5, #1024 ; 0x400
2e10: 1a00000c bne 2e48 <open+0x134>
2e14: e59f5150 ldr r5, [pc, #336] ; 2f6c <open+0x258>
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
rtems_set_errno_and_return_minus_one( rc );
}
return iop - rtems_libio_iops;
2e18: e5950000 ldr r0, [r5]
2e1c: e0604004 rsb r4, r0, r4
2e20: e1a00344 asr r0, r4, #6
}
2e24: e28dd01c add sp, sp, #28
2e28: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
2e2c: e28dd00c add sp, sp, #12
2e30: e12fff1e bx lr
goto done;
}
rc = (*iop->handlers->open_h)( iop, pathname, flags, mode );
if ( rc ) {
rc = errno;
2e34: eb002d21 bl e2c0 <__errno>
2e38: e5906000 ldr r6, [r0]
*/
done:
va_end(ap);
if ( rc ) {
2e3c: e3560000 cmp r6, #0
2e40: 0afffff3 beq 2e14 <open+0x100>
2e44: ea000014 b 2e9c <open+0x188>
/*
* Optionally truncate the file.
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
2e48: e59f511c ldr r5, [pc, #284] ; 2f6c <open+0x258>
2e4c: e5950000 ldr r0, [r5]
2e50: e0600004 rsb r0, r0, r4
2e54: e1a00340 asr r0, r0, #6
2e58: e3a01000 mov r1, #0
2e5c: e3a02000 mov r2, #0
2e60: eb001f77 bl ac44 <ftruncate>
if ( rc ) {
2e64: e2506000 subs r6, r0, #0
2e68: 0affffea beq 2e18 <open+0x104>
if(errno) rc = errno;
2e6c: eb002d13 bl e2c0 <__errno> <== NOT EXECUTED
2e70: e5903000 ldr r3, [r0] <== NOT EXECUTED
2e74: e3530000 cmp r3, #0 <== NOT EXECUTED
2e78: 1a000038 bne 2f60 <open+0x24c> <== NOT EXECUTED
close( iop - rtems_libio_iops );
2e7c: e5950000 ldr r0, [r5] <== NOT EXECUTED
2e80: e0600004 rsb r0, r0, r4 <== NOT EXECUTED
2e84: e1a00340 asr r0, r0, #6 <== NOT EXECUTED
2e88: e3a04000 mov r4, #0 <== NOT EXECUTED
2e8c: eb001f43 bl aba0 <close> <== NOT EXECUTED
2e90: e1a07004 mov r7, r4 <== NOT EXECUTED
2e94: eaffffe8 b 2e3c <open+0x128> <== NOT EXECUTED
if ( loc_to_free )
rtems_filesystem_freenode( loc_to_free );
rtems_set_errno_and_return_minus_one( rc );
}
return iop - rtems_libio_iops;
2e98: e3a06086 mov r6, #134 ; 0x86 <== NOT EXECUTED
done:
va_end(ap);
if ( rc ) {
if ( iop )
2e9c: e3540000 cmp r4, #0
rtems_libio_free( iop );
2ea0: 11a00004 movne r0, r4
2ea4: 1b002006 blne aec4 <rtems_libio_free>
if ( loc_to_free )
2ea8: e3570000 cmp r7, #0
2eac: 0a000007 beq 2ed0 <open+0x1bc>
rtems_filesystem_freenode( loc_to_free );
2eb0: e597300c ldr r3, [r7, #12]
2eb4: e3530000 cmp r3, #0
2eb8: 0a000004 beq 2ed0 <open+0x1bc>
2ebc: e593301c ldr r3, [r3, #28]
2ec0: e3530000 cmp r3, #0
2ec4: 11a00007 movne r0, r7
2ec8: 11a0e00f movne lr, pc
2ecc: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( rc );
2ed0: eb002cfa bl e2c0 <__errno>
2ed4: e5806000 str r6, [r0]
2ed8: e3e00000 mvn r0, #0
2edc: eaffffd0 b 2e24 <open+0x110>
status = rtems_filesystem_evaluate_path(
pathname, strlen( pathname ), eval_flags, &loc, true );
if ( status == -1 ) {
if ( errno != ENOENT ) {
2ee0: eb002cf6 bl e2c0 <__errno>
2ee4: e5903000 ldr r3, [r0]
2ee8: e3530002 cmp r3, #2
2eec: 0a000003 beq 2f00 <open+0x1ec>
}
/* Create the node for the new regular file */
rc = mknod( pathname, S_IFREG | mode, 0LL );
if ( rc ) {
rc = errno;
2ef0: eb002cf2 bl e2c0 <__errno>
2ef4: e3a07000 mov r7, #0
2ef8: e5906000 ldr r6, [r0]
goto done;
2efc: eaffffce b 2e3c <open+0x128>
rc = errno;
goto done;
}
/* If the file does not exist and we are not trying to create it--> error */
if ( !(flags & O_CREAT) ) {
2f00: e2159c02 ands r9, r5, #512 ; 0x200
2f04: 01a07009 moveq r7, r9
2f08: 01a06003 moveq r6, r3
2f0c: 0affffe2 beq 2e9c <open+0x188>
rc = ENOENT;
goto done;
}
/* Create the node for the new regular file */
rc = mknod( pathname, S_IFREG | mode, 0LL );
2f10: e1a00006 mov r0, r6
2f14: e38a1902 orr r1, sl, #32768 ; 0x8000
2f18: e3a02000 mov r2, #0
2f1c: e3a03000 mov r3, #0
2f20: ebfffd7c bl 2518 <mknod>
if ( rc ) {
2f24: e2509000 subs r9, r0, #0
2f28: 1afffff0 bne 2ef0 <open+0x1dc>
rc = errno;
goto done;
}
/* Sanity check to see if the file name exists after the mknod() */
status = rtems_filesystem_evaluate_path( pathname, strlen( pathname ), 0x0, &loc, true );
2f2c: e1a00006 mov r0, r6
2f30: eb0030e7 bl f2d4 <strlen>
2f34: e1a03007 mov r3, r7
2f38: e1a01000 mov r1, r0
2f3c: e1a02009 mov r2, r9
2f40: e1a00006 mov r0, r6
2f44: e58d8000 str r8, [sp]
2f48: ebfffc34 bl 2020 <rtems_filesystem_evaluate_path>
if ( status != 0 ) { /* The file did not exist */
2f4c: e3500000 cmp r0, #0
2f50: 11a07009 movne r7, r9
2f54: 13a0600d movne r6, #13
2f58: 1affffcf bne 2e9c <open+0x188>
2f5c: eaffff8d b 2d98 <open+0x84>
*/
if ( (flags & O_TRUNC) == O_TRUNC ) {
rc = ftruncate( iop - rtems_libio_iops, 0 );
if ( rc ) {
if(errno) rc = errno;
2f60: eb002cd6 bl e2c0 <__errno> <== NOT EXECUTED
2f64: e5906000 ldr r6, [r0] <== NOT EXECUTED
2f68: eaffffc3 b 2e7c <open+0x168> <== NOT EXECUTED
00002cac <open_dev_console>:
int stderr_fd;
/*
* Attempt to open /dev/console.
*/
if ((stdin_fd = open("/dev/console", O_RDONLY, 0)) == -1) {
2cac: e3a01000 mov r1, #0
/*
* This is a replaceable stub which opens the console, if present.
*/
void open_dev_console(void)
{
2cb0: e52de004 push {lr} ; (str lr, [sp, #-4]!)
int stderr_fd;
/*
* Attempt to open /dev/console.
*/
if ((stdin_fd = open("/dev/console", O_RDONLY, 0)) == -1) {
2cb4: e59f004c ldr r0, [pc, #76] ; 2d08 <open_dev_console+0x5c>
2cb8: e1a02001 mov r2, r1
2cbc: eb000014 bl 2d14 <open>
2cc0: e3700001 cmn r0, #1
2cc4: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
/*
* But if we find /dev/console once, we better find it twice more
* or something is REALLY wrong.
*/
if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1)
2cc8: e59f0038 ldr r0, [pc, #56] ; 2d08 <open_dev_console+0x5c>
2ccc: e3a01001 mov r1, #1
2cd0: e3a02000 mov r2, #0
2cd4: eb00000e bl 2d14 <open>
2cd8: e3700001 cmn r0, #1
2cdc: 0a000007 beq 2d00 <open_dev_console+0x54>
rtems_fatal_error_occurred( 0x55544431 ); /* error STD1 */
if ((stderr_fd = open("/dev/console", O_WRONLY, 0)) == -1)
2ce0: e59f0020 ldr r0, [pc, #32] ; 2d08 <open_dev_console+0x5c>
2ce4: e3a01001 mov r1, #1
2ce8: e3a02000 mov r2, #0
2cec: eb000008 bl 2d14 <open>
2cf0: e3700001 cmn r0, #1
2cf4: 149df004 popne {pc} ; (ldrne pc, [sp], #4)
rtems_fatal_error_occurred( 0x55544432 ); /* error STD2 */
2cf8: e59f000c ldr r0, [pc, #12] ; 2d0c <open_dev_console+0x60> <== NOT EXECUTED
2cfc: eb000c37 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
/*
* But if we find /dev/console once, we better find it twice more
* or something is REALLY wrong.
*/
if ((stdout_fd = open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( 0x55544431 ); /* error STD1 */
2d00: e59f0008 ldr r0, [pc, #8] ; 2d10 <open_dev_console+0x64> <== NOT EXECUTED
2d04: eb000c35 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000372c <oproc>:
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
372c: e92d4010 push {r4, lr}
int i;
if (tty->termios.c_oflag & OPOST) {
3730: e5913034 ldr r3, [r1, #52] ; 0x34
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
3734: e24dd004 sub sp, sp, #4
int i;
if (tty->termios.c_oflag & OPOST) {
3738: e3130001 tst r3, #1
/*
* Handle output processing
*/
static void
oproc (unsigned char c, struct rtems_termios_tty *tty)
{
373c: e1a04001 mov r4, r1
3740: e5cd0000 strb r0, [sp]
int i;
if (tty->termios.c_oflag & OPOST) {
3744: 0a000014 beq 379c <oproc+0x70>
switch (c) {
3748: e5dd1000 ldrb r1, [sp]
374c: e2412008 sub r2, r1, #8
3750: e3520005 cmp r2, #5
3754: 979ff102 ldrls pc, [pc, r2, lsl #2]
3758: ea000005 b 3774 <oproc+0x48>
375c: 0000380c .word 0x0000380c
3760: 000037e8 .word 0x000037e8
3764: 00003820 .word 0x00003820
3768: 00003774 .word 0x00003774
376c: 00003774 .word 0x00003774
3770: 000037b4 .word 0x000037b4
if (tty->column > 0)
tty->column--;
break;
default:
if (tty->termios.c_oflag & OLCUC)
3774: e3130002 tst r3, #2
3778: 1a000034 bne 3850 <oproc+0x124>
377c: e59f310c ldr r3, [pc, #268] ; 3890 <oproc+0x164>
3780: e5933000 ldr r3, [r3]
c = toupper(c);
if (!iscntrl(c))
3784: e0831001 add r1, r3, r1
3788: e5d13001 ldrb r3, [r1, #1]
378c: e3130020 tst r3, #32
tty->column++;
3790: 05943028 ldreq r3, [r4, #40] ; 0x28
3794: 02833001 addeq r3, r3, #1
3798: 05843028 streq r3, [r4, #40] ; 0x28
break;
}
}
rtems_termios_puts (&c, 1, tty);
379c: e1a02004 mov r2, r4
37a0: e1a0000d mov r0, sp
37a4: e3a01001 mov r1, #1
37a8: ebffff97 bl 360c <rtems_termios_puts>
}
37ac: e28dd004 add sp, sp, #4
37b0: e8bd8010 pop {r4, pc}
tty->column = 0;
}
break;
case '\r':
if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0))
37b4: e3130010 tst r3, #16 <== NOT EXECUTED
37b8: 0a000002 beq 37c8 <oproc+0x9c> <== NOT EXECUTED
37bc: e5942028 ldr r2, [r4, #40] ; 0x28 <== NOT EXECUTED
37c0: e3520000 cmp r2, #0 <== NOT EXECUTED
37c4: 0afffff8 beq 37ac <oproc+0x80> <== NOT EXECUTED
return;
if (tty->termios.c_oflag & OCRNL) {
37c8: e2132008 ands r2, r3, #8 <== NOT EXECUTED
37cc: 0a00000c beq 3804 <oproc+0xd8> <== NOT EXECUTED
c = '\n';
if (tty->termios.c_oflag & ONLRET)
37d0: e3130020 tst r3, #32 <== NOT EXECUTED
case '\r':
if ((tty->termios.c_oflag & ONOCR) && (tty->column == 0))
return;
if (tty->termios.c_oflag & OCRNL) {
c = '\n';
37d4: e3a0300a mov r3, #10 <== NOT EXECUTED
37d8: e5cd3000 strb r3, [sp] <== NOT EXECUTED
if (tty->termios.c_oflag & ONLRET)
tty->column = 0;
37dc: 13a03000 movne r3, #0 <== NOT EXECUTED
37e0: 15843028 strne r3, [r4, #40] ; 0x28 <== NOT EXECUTED
37e4: eaffffec b 379c <oproc+0x70> <== NOT EXECUTED
}
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
37e8: e5942028 ldr r2, [r4, #40] ; 0x28
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
37ec: e2033b06 and r3, r3, #6144 ; 0x1800
}
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
37f0: e2021007 and r1, r2, #7
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
37f4: e3530b06 cmp r3, #6144 ; 0x1800
}
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
37f8: e2611008 rsb r1, r1, #8
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
tty->column += i;
rtems_termios_puts ( " ", i, tty);
return;
}
tty->column += i;
37fc: 10812002 addne r2, r1, r2
tty->column = 0;
break;
case '\t':
i = 8 - (tty->column & 7);
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
3800: 0a00001c beq 3878 <oproc+0x14c>
tty->column += i;
rtems_termios_puts ( " ", i, tty);
return;
}
tty->column += i;
3804: e5842028 str r2, [r4, #40] ; 0x28 <== NOT EXECUTED
break;
3808: eaffffe3 b 379c <oproc+0x70> <== NOT EXECUTED
case '\b':
if (tty->column > 0)
380c: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3810: e3530000 cmp r3, #0 <== NOT EXECUTED
tty->column--;
3814: c2433001 subgt r3, r3, #1 <== NOT EXECUTED
3818: c5843028 strgt r3, [r4, #40] ; 0x28 <== NOT EXECUTED
381c: eaffffde b 379c <oproc+0x70> <== NOT EXECUTED
int i;
if (tty->termios.c_oflag & OPOST) {
switch (c) {
case '\n':
if (tty->termios.c_oflag & ONLRET)
3820: e3130020 tst r3, #32
tty->column = 0;
3824: 13a02000 movne r2, #0
3828: 15842028 strne r2, [r4, #40] ; 0x28
if (tty->termios.c_oflag & ONLCR) {
382c: e3130004 tst r3, #4
3830: 0affffd9 beq 379c <oproc+0x70>
rtems_termios_puts ("\r", 1, tty);
3834: e59f0058 ldr r0, [pc, #88] ; 3894 <oproc+0x168>
3838: e3a01001 mov r1, #1
383c: e1a02004 mov r2, r4
3840: ebffff71 bl 360c <rtems_termios_puts>
tty->column = 0;
3844: e3a03000 mov r3, #0
3848: e5843028 str r3, [r4, #40] ; 0x28
384c: eaffffd2 b 379c <oproc+0x70>
tty->column--;
break;
default:
if (tty->termios.c_oflag & OLCUC)
c = toupper(c);
3850: e59f3038 ldr r3, [pc, #56] ; 3890 <oproc+0x164> <== NOT EXECUTED
3854: e5933000 ldr r3, [r3] <== NOT EXECUTED
3858: e0832001 add r2, r3, r1 <== NOT EXECUTED
385c: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED
3860: e2022003 and r2, r2, #3 <== NOT EXECUTED
3864: e3520002 cmp r2, #2 <== NOT EXECUTED
3868: 02411020 subeq r1, r1, #32 <== NOT EXECUTED
386c: e20110ff and r1, r1, #255 ; 0xff <== NOT EXECUTED
3870: e5cd1000 strb r1, [sp] <== NOT EXECUTED
3874: eaffffc2 b 3784 <oproc+0x58> <== NOT EXECUTED
break;
case '\t':
i = 8 - (tty->column & 7);
if ((tty->termios.c_oflag & TABDLY) == XTABS) {
tty->column += i;
3878: e0812002 add r2, r1, r2
387c: e5842028 str r2, [r4, #40] ; 0x28
rtems_termios_puts ( " ", i, tty);
3880: e59f0010 ldr r0, [pc, #16] ; 3898 <oproc+0x16c>
3884: e1a02004 mov r2, r4
3888: ebffff5f bl 360c <rtems_termios_puts>
return;
388c: eaffffc6 b 37ac <oproc+0x80>
0000d330 <pipe_create>:
* Called by pipe() to create an anonymous pipe.
*/
int pipe_create(
int filsdes[2]
)
{
d330: e92d4070 push {r4, r5, r6, lr}
d334: e24dd028 sub sp, sp, #40 ; 0x28
rtems_filesystem_location_info_t loc;
rtems_libio_t *iop;
int err = 0;
/* Create /tmp if not exists */
if (rtems_filesystem_evaluate_path("/tmp", 3, RTEMS_LIBIO_PERMS_RWX, &loc, TRUE)
d338: e28d4004 add r4, sp, #4
d33c: e3a0c001 mov ip, #1
* Called by pipe() to create an anonymous pipe.
*/
int pipe_create(
int filsdes[2]
)
{
d340: e1a05000 mov r5, r0
rtems_filesystem_location_info_t loc;
rtems_libio_t *iop;
int err = 0;
/* Create /tmp if not exists */
if (rtems_filesystem_evaluate_path("/tmp", 3, RTEMS_LIBIO_PERMS_RWX, &loc, TRUE)
d344: e3a01003 mov r1, #3
d348: e59f0154 ldr r0, [pc, #340] ; d4a4 <pipe_create+0x174>
d34c: e3a02007 mov r2, #7
d350: e1a03004 mov r3, r4
d354: e58dc000 str ip, [sp]
d358: ebffd330 bl 2020 <rtems_filesystem_evaluate_path>
d35c: e3500000 cmp r0, #0
d360: 1a00003a bne d450 <pipe_create+0x120>
return -1;
if (mkdir("/tmp", S_IRWXU|S_IRWXG|S_IRWXO|S_ISVTX) != 0)
return -1;
}
else
rtems_filesystem_freenode(&loc);
d364: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
d368: e3530000 cmp r3, #0 <== NOT EXECUTED
d36c: 0a000004 beq d384 <pipe_create+0x54> <== NOT EXECUTED
d370: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
d374: e3530000 cmp r3, #0 <== NOT EXECUTED
d378: 11a00004 movne r0, r4 <== NOT EXECUTED
d37c: 11a0e00f movne lr, pc <== NOT EXECUTED
d380: 112fff13 bxne r3 <== NOT EXECUTED
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
d384: e59f311c ldr r3, [pc, #284] ; d4a8 <pipe_create+0x178>
d388: e28d4018 add r4, sp, #24
d38c: e8930007 ldm r3, {r0, r1, r2}
d390: e1a0c004 mov ip, r4
d394: e8ac0003 stmia ip!, {r0, r1}
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
d398: e59f310c ldr r3, [pc, #268] ; d4ac <pipe_create+0x17c>
else
rtems_filesystem_freenode(&loc);
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
d39c: e1a0100c mov r1, ip
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
d3a0: e1d3c0b0 ldrh ip, [r3]
else
rtems_filesystem_freenode(&loc);
/* /tmp/.fifoXXXX */
char fifopath[15];
memcpy(fifopath, "/tmp/.fifo", 10);
d3a4: e1c120b0 strh r2, [r1]
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
d3a8: e1a0200c mov r2, ip
d3ac: e28cc001 add ip, ip, #1
d3b0: e59f10f8 ldr r1, [pc, #248] ; d4b0 <pipe_create+0x180>
d3b4: e1c3c0b0 strh ip, [r3]
d3b8: e284000a add r0, r4, #10
d3bc: eb000673 bl ed90 <sprintf>
/* Try creating FIFO file until find an available file name */
while (mkfifo(fifopath, S_IRUSR|S_IWUSR) != 0) {
d3c0: e1a00004 mov r0, r4
d3c4: e3a01d06 mov r1, #384 ; 0x180
d3c8: eb0001d3 bl db1c <mkfifo>
d3cc: e2506000 subs r6, r0, #0
d3d0: 1a00001c bne d448 <pipe_create+0x118>
return -1;
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
}
/* Non-blocking open to avoid waiting for writers */
filsdes[0] = open(fifopath, O_RDONLY | O_NONBLOCK);
d3d4: e1a00004 mov r0, r4
d3d8: e3a01901 mov r1, #16384 ; 0x4000
d3dc: ebffd64c bl 2d14 <open>
if (filsdes[0] < 0) {
d3e0: e3500000 cmp r0, #0
return -1;
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
}
/* Non-blocking open to avoid waiting for writers */
filsdes[0] = open(fifopath, O_RDONLY | O_NONBLOCK);
d3e4: e5850000 str r0, [r5]
if (filsdes[0] < 0) {
d3e8: ba000023 blt d47c <pipe_create+0x14c>
the file node will be deleted after it is closed by all. */
unlink(fifopath);
}
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
d3ec: e59f30c0 ldr r3, [pc, #192] ; d4b4 <pipe_create+0x184> <== NOT EXECUTED
d3f0: e5933000 ldr r3, [r3] <== NOT EXECUTED
d3f4: e1500003 cmp r0, r3 <== NOT EXECUTED
d3f8: 359f30b8 ldrcc r3, [pc, #184] ; d4b8 <pipe_create+0x188> <== NOT EXECUTED
d3fc: 35936000 ldrcc r6, [r3] <== NOT EXECUTED
d400: 30866300 addcc r6, r6, r0, lsl #6 <== NOT EXECUTED
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
d404: e5963014 ldr r3, [r6, #20] <== NOT EXECUTED
d408: e3c33001 bic r3, r3, #1 <== NOT EXECUTED
d40c: e5863014 str r3, [r6, #20] <== NOT EXECUTED
filsdes[1] = open(fifopath, O_WRONLY);
d410: e1a00004 mov r0, r4 <== NOT EXECUTED
d414: e3a01001 mov r1, #1 <== NOT EXECUTED
d418: ebffd63d bl 2d14 <open> <== NOT EXECUTED
if (filsdes[1] < 0) {
d41c: e3500000 cmp r0, #0 <== NOT EXECUTED
else {
/* Reset open file to blocking mode */
iop = rtems_libio_iop(filsdes[0]);
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
filsdes[1] = open(fifopath, O_WRONLY);
d420: e5850004 str r0, [r5, #4] <== NOT EXECUTED
if (filsdes[1] < 0) {
d424: a3a06000 movge r6, #0 <== NOT EXECUTED
d428: ba000018 blt d490 <pipe_create+0x160> <== NOT EXECUTED
err = errno;
close(filsdes[0]);
}
unlink(fifopath);
d42c: e1a00004 mov r0, r4 <== NOT EXECUTED
d430: eb0001bd bl db2c <unlink> <== NOT EXECUTED
}
rtems_set_errno_and_return_minus_one(err);
d434: eb0003a1 bl e2c0 <__errno>
d438: e5806000 str r6, [r0]
}
d43c: e3e00000 mvn r0, #0
d440: e28dd028 add sp, sp, #40 ; 0x28
d444: e8bd8070 pop {r4, r5, r6, pc}
memcpy(fifopath, "/tmp/.fifo", 10);
sprintf(fifopath + 10, "%04x", rtems_pipe_no ++);
/* Try creating FIFO file until find an available file name */
while (mkfifo(fifopath, S_IRUSR|S_IWUSR) != 0) {
if (errno != EEXIST){
d448: eb00039c bl e2c0 <__errno> <== NOT EXECUTED
d44c: eafffffa b d43c <pipe_create+0x10c> <== NOT EXECUTED
rtems_libio_t *iop;
int err = 0;
/* Create /tmp if not exists */
if (rtems_filesystem_evaluate_path("/tmp", 3, RTEMS_LIBIO_PERMS_RWX, &loc, TRUE)
!= 0) {
if (errno != ENOENT)
d450: eb00039a bl e2c0 <__errno>
d454: e5903000 ldr r3, [r0]
d458: e3530002 cmp r3, #2
d45c: 1afffff6 bne d43c <pipe_create+0x10c>
return -1;
if (mkdir("/tmp", S_IRWXU|S_IRWXG|S_IRWXO|S_ISVTX) != 0)
d460: e3a01fff mov r1, #1020 ; 0x3fc
d464: e2811003 add r1, r1, #3
d468: e59f0034 ldr r0, [pc, #52] ; d4a4 <pipe_create+0x174>
d46c: ebffd425 bl 2508 <mkdir>
d470: e3500000 cmp r0, #0
d474: 0affffc2 beq d384 <pipe_create+0x54>
d478: eaffffef b d43c <pipe_create+0x10c> <== NOT EXECUTED
}
/* Non-blocking open to avoid waiting for writers */
filsdes[0] = open(fifopath, O_RDONLY | O_NONBLOCK);
if (filsdes[0] < 0) {
err = errno;
d47c: eb00038f bl e2c0 <__errno>
d480: e5906000 ldr r6, [r0]
/* Delete file at errors, or else if pipe is successfully created
the file node will be deleted after it is closed by all. */
unlink(fifopath);
d484: e1a00004 mov r0, r4
d488: eb0001a7 bl db2c <unlink>
d48c: eaffffe8 b d434 <pipe_create+0x104>
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
filsdes[1] = open(fifopath, O_WRONLY);
if (filsdes[1] < 0) {
err = errno;
d490: eb00038a bl e2c0 <__errno> <== NOT EXECUTED
d494: e5906000 ldr r6, [r0] <== NOT EXECUTED
close(filsdes[0]);
d498: e5950000 ldr r0, [r5] <== NOT EXECUTED
d49c: ebfff5bf bl aba0 <close> <== NOT EXECUTED
d4a0: eaffffe1 b d42c <pipe_create+0xfc> <== NOT EXECUTED
000090ec <pipe_ioctl>:
uint32_t cmd,
void *buffer,
rtems_libio_t *iop
)
{
if (cmd == FIONREAD) {
90ec: e3a03a46 mov r3, #286720 ; 0x46000 <== NOT EXECUTED
90f0: e2833e67 add r3, r3, #1648 ; 0x670 <== NOT EXECUTED
90f4: e283313d add r3, r3, #1073741839 ; 0x4000000f <== NOT EXECUTED
90f8: e1510003 cmp r1, r3 <== NOT EXECUTED
pipe_control_t *pipe,
uint32_t cmd,
void *buffer,
rtems_libio_t *iop
)
{
90fc: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
9100: e1a05000 mov r5, r0 <== NOT EXECUTED
9104: e1a04002 mov r4, r2 <== NOT EXECUTED
if (cmd == FIONREAD) {
9108: 13e00015 mvnne r0, #21 <== NOT EXECUTED
910c: 18bd8070 popne {r4, r5, r6, pc} <== NOT EXECUTED
if (buffer == NULL)
9110: e3520000 cmp r2, #0 <== NOT EXECUTED
9114: 03e0000d mvneq r0, #13 <== NOT EXECUTED
9118: 08bd8070 popeq {r4, r5, r6, pc} <== NOT EXECUTED
return -EFAULT;
if (! PIPE_LOCK(pipe))
911c: e3a01000 mov r1, #0 <== NOT EXECUTED
9120: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
9124: e1a02001 mov r2, r1 <== NOT EXECUTED
9128: ebfff19f bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
912c: e2506000 subs r6, r0, #0 <== NOT EXECUTED
9130: 13e00003 mvnne r0, #3 <== NOT EXECUTED
9134: 18bd8070 popne {r4, r5, r6, pc} <== NOT EXECUTED
return -EINTR;
/* Return length of pipe */
*(unsigned int *)buffer = pipe->Length;
9138: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
PIPE_UNLOCK(pipe);
913c: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
if (! PIPE_LOCK(pipe))
return -EINTR;
/* Return length of pipe */
*(unsigned int *)buffer = pipe->Length;
9140: e5843000 str r3, [r4] <== NOT EXECUTED
PIPE_UNLOCK(pipe);
9144: ebfff1e0 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
9148: e1a00006 mov r0, r6 <== NOT EXECUTED
return 0;
}
return -EINVAL;
}
914c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00009074 <pipe_lseek>:
rtems_libio_t *iop
)
{
/* Seek on pipe is not supported */
return -ESPIPE;
}
9074: e3e0001c mvn r0, #28 <== NOT EXECUTED
9078: e12fff1e bx lr <== NOT EXECUTED
00009350 <pipe_read>:
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
9350: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
9354: e1a09001 mov r9, r1 <== NOT EXECUTED
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
9358: e3a01000 mov r1, #0 <== NOT EXECUTED
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
935c: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
9360: e1a04000 mov r4, r0 <== NOT EXECUTED
9364: e1a05002 mov r5, r2 <== NOT EXECUTED
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
9368: e5900028 ldr r0, [r0, #40] ; 0x28 <== NOT EXECUTED
936c: e1a02001 mov r2, r1 <== NOT EXECUTED
pipe_control_t *pipe,
void *buffer,
size_t count,
rtems_libio_t *iop
)
{
9370: e1a08003 mov r8, r3 <== NOT EXECUTED
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
9374: ebfff10c bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
9378: e250a000 subs sl, r0, #0 <== NOT EXECUTED
937c: 13e07003 mvnne r7, #3 <== NOT EXECUTED
9380: 1a000027 bne 9424 <pipe_read+0xd4> <== NOT EXECUTED
return -EINTR;
while (read < count) {
9384: e3550000 cmp r5, #0 <== NOT EXECUTED
9388: 01a07005 moveq r7, r5 <== NOT EXECUTED
938c: 01a06007 moveq r6, r7 <== NOT EXECUTED
9390: 0a00001f beq 9414 <pipe_read+0xc4> <== NOT EXECUTED
/* WARN waitingReaders not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingReaders --;
if (ret != 0)
9394: e1a0700a mov r7, sl <== NOT EXECUTED
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
pipe->Start = 0;
if (pipe->waitingWriters > 0)
PIPE_WAKEUPWRITERS(pipe);
9398: e28db004 add fp, sp, #4 <== NOT EXECUTED
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
while (PIPE_EMPTY(pipe)) {
939c: e594200c ldr r2, [r4, #12] <== NOT EXECUTED
93a0: e3520000 cmp r2, #0 <== NOT EXECUTED
93a4: 1a000021 bne 9430 <pipe_read+0xe0> <== NOT EXECUTED
/* Not an error */
if (pipe->Writers == 0)
93a8: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
93ac: e3530000 cmp r3, #0 <== NOT EXECUTED
93b0: 0a00003d beq 94ac <pipe_read+0x15c> <== NOT EXECUTED
goto out_locked;
if (LIBIO_NODELAY(iop)) {
93b4: e5986014 ldr r6, [r8, #20] <== NOT EXECUTED
93b8: e2166001 ands r6, r6, #1 <== NOT EXECUTED
93bc: 1a00003c bne 94b4 <pipe_read+0x164> <== NOT EXECUTED
ret = -EAGAIN;
goto out_locked;
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
93c0: e5943018 ldr r3, [r4, #24] <== NOT EXECUTED
93c4: e2833001 add r3, r3, #1 <== NOT EXECUTED
93c8: e5843018 str r3, [r4, #24] <== NOT EXECUTED
PIPE_UNLOCK(pipe);
93cc: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
93d0: ebfff13d bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if (! PIPE_READWAIT(pipe))
93d4: e1a01006 mov r1, r6 <== NOT EXECUTED
93d8: e594002c ldr r0, [r4, #44] ; 0x2c <== NOT EXECUTED
93dc: eb000823 bl b470 <rtems_barrier_wait> <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
93e0: e1a01006 mov r1, r6 <== NOT EXECUTED
93e4: e1a02001 mov r2, r1 <== NOT EXECUTED
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
93e8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
93ec: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
}
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
93f0: 13e06003 mvnne r6, #3 <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
93f4: ebfff0ec bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
93f8: e3500000 cmp r0, #0 <== NOT EXECUTED
93fc: 1a00002e bne 94bc <pipe_read+0x16c> <== NOT EXECUTED
/* WARN waitingReaders not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingReaders --;
9400: e5943018 ldr r3, [r4, #24] <== NOT EXECUTED
if (ret != 0)
9404: e3560000 cmp r6, #0 <== NOT EXECUTED
if (! PIPE_LOCK(pipe)) {
/* WARN waitingReaders not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingReaders --;
9408: e2433001 sub r3, r3, #1 <== NOT EXECUTED
940c: e5843018 str r3, [r4, #24] <== NOT EXECUTED
if (ret != 0)
9410: 0affffe1 beq 939c <pipe_read+0x4c> <== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
}
out_locked:
PIPE_UNLOCK(pipe);
9414: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
9418: ebfff12b bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
out_nolock:
if (read > 0)
941c: e3570000 cmp r7, #0 <== NOT EXECUTED
9420: d1a07006 movle r7, r6 <== NOT EXECUTED
return read;
return ret;
}
9424: e1a00007 mov r0, r7 <== NOT EXECUTED
9428: e28dd008 add sp, sp, #8 <== NOT EXECUTED
942c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
goto out_locked;
}
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
chunk1 = pipe->Size - pipe->Start;
9430: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
9434: e5943004 ldr r3, [r4, #4] <== NOT EXECUTED
if (ret != 0)
goto out_locked;
}
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
9438: e06a6005 rsb r6, sl, r5 <== NOT EXECUTED
943c: e1520006 cmp r2, r6 <== NOT EXECUTED
9440: 31a06002 movcc r6, r2 <== NOT EXECUTED
chunk1 = pipe->Size - pipe->Start;
9444: e0613003 rsb r3, r1, r3 <== NOT EXECUTED
if (chunk > chunk1) {
9448: e1560003 cmp r6, r3 <== NOT EXECUTED
944c: ca00001c bgt 94c4 <pipe_read+0x174> <== NOT EXECUTED
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
9450: e5943000 ldr r3, [r4] <== NOT EXECUTED
9454: e089000a add r0, r9, sl <== NOT EXECUTED
9458: e0831001 add r1, r3, r1 <== NOT EXECUTED
945c: e1a02006 mov r2, r6 <== NOT EXECUTED
9460: eb0015a4 bl eaf8 <memcpy> <== NOT EXECUTED
pipe->Start += chunk;
9464: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
9468: e0860000 add r0, r6, r0 <== NOT EXECUTED
946c: e5840008 str r0, [r4, #8] <== NOT EXECUTED
pipe->Start %= pipe->Size;
9470: e5941004 ldr r1, [r4, #4] <== NOT EXECUTED
9474: eb00395f bl 179f8 <__umodsi3> <== NOT EXECUTED
pipe->Length -= chunk;
9478: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
947c: e0663003 rsb r3, r6, r3 <== NOT EXECUTED
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
9480: e3530000 cmp r3, #0 <== NOT EXECUTED
}
else
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk);
pipe->Start += chunk;
pipe->Start %= pipe->Size;
9484: e5840008 str r0, [r4, #8] <== NOT EXECUTED
pipe->Length -= chunk;
9488: e584300c str r3, [r4, #12] <== NOT EXECUTED
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
pipe->Start = 0;
948c: 05843008 streq r3, [r4, #8] <== NOT EXECUTED
if (pipe->waitingWriters > 0)
9490: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
9494: e3530000 cmp r3, #0 <== NOT EXECUTED
9498: 1a000016 bne 94f8 <pipe_read+0x1a8> <== NOT EXECUTED
PIPE_WAKEUPWRITERS(pipe);
read += chunk;
949c: e0877006 add r7, r7, r6 <== NOT EXECUTED
int chunk, chunk1, read = 0, ret = 0;
if (! PIPE_LOCK(pipe))
return -EINTR;
while (read < count) {
94a0: e1570005 cmp r7, r5 <== NOT EXECUTED
94a4: e1a0a007 mov sl, r7 <== NOT EXECUTED
94a8: 3affffbb bcc 939c <pipe_read+0x4c> <== NOT EXECUTED
94ac: e3a06000 mov r6, #0 <== NOT EXECUTED
94b0: eaffffd7 b 9414 <pipe_read+0xc4> <== NOT EXECUTED
while (PIPE_EMPTY(pipe)) {
/* Not an error */
if (pipe->Writers == 0)
goto out_locked;
if (LIBIO_NODELAY(iop)) {
94b4: e3e0600a mvn r6, #10 <== NOT EXECUTED
94b8: eaffffd5 b 9414 <pipe_read+0xc4> <== NOT EXECUTED
/* Wait until pipe is no more empty or no writer exists */
pipe->waitingReaders ++;
PIPE_UNLOCK(pipe);
if (! PIPE_READWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
94bc: e3e06003 mvn r6, #3 <== NOT EXECUTED
94c0: eaffffd5 b 941c <pipe_read+0xcc> <== NOT EXECUTED
/* Read chunk bytes */
chunk = MIN(count - read, pipe->Length);
chunk1 = pipe->Size - pipe->Start;
if (chunk > chunk1) {
memcpy(buffer + read, pipe->Buffer + pipe->Start, chunk1);
94c4: e5942000 ldr r2, [r4] <== NOT EXECUTED
94c8: e089000a add r0, r9, sl <== NOT EXECUTED
94cc: e0821001 add r1, r2, r1 <== NOT EXECUTED
94d0: e1a02003 mov r2, r3 <== NOT EXECUTED
94d4: e58d3000 str r3, [sp] <== NOT EXECUTED
94d8: eb001586 bl eaf8 <memcpy> <== NOT EXECUTED
memcpy(buffer + read + chunk1, pipe->Buffer, chunk - chunk1);
94dc: e59d3000 ldr r3, [sp] <== NOT EXECUTED
94e0: e08a0003 add r0, sl, r3 <== NOT EXECUTED
94e4: e0890000 add r0, r9, r0 <== NOT EXECUTED
94e8: e0632006 rsb r2, r3, r6 <== NOT EXECUTED
94ec: e5941000 ldr r1, [r4] <== NOT EXECUTED
94f0: eb001580 bl eaf8 <memcpy> <== NOT EXECUTED
94f4: eaffffda b 9464 <pipe_read+0x114> <== NOT EXECUTED
/* For buffering optimization */
if (PIPE_EMPTY(pipe))
pipe->Start = 0;
if (pipe->waitingWriters > 0)
PIPE_WAKEUPWRITERS(pipe);
94f8: e5940030 ldr r0, [r4, #48] ; 0x30 <== NOT EXECUTED
94fc: e1a0100b mov r1, fp <== NOT EXECUTED
9500: eb0007c1 bl b40c <rtems_barrier_release> <== NOT EXECUTED
9504: eaffffe4 b 949c <pipe_read+0x14c> <== NOT EXECUTED
00009508 <pipe_release>:
*/
int pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9508: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
pipe_control_t *pipe = *pipep;
950c: e5904000 ldr r4, [r0] <== NOT EXECUTED
*/
int pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9510: e1a05001 mov r5, r1 <== NOT EXECUTED
pipe_control_t *pipe = *pipep;
uint32_t mode;
rtems_status_code sc;
sc = rtems_semaphore_obtain(pipe->Semaphore,
9514: e3a01000 mov r1, #0 <== NOT EXECUTED
*/
int pipe_release(
pipe_control_t **pipep,
rtems_libio_t *iop
)
{
9518: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
951c: e1a07000 mov r7, r0 <== NOT EXECUTED
pipe_control_t *pipe = *pipep;
uint32_t mode;
rtems_status_code sc;
sc = rtems_semaphore_obtain(pipe->Semaphore,
9520: e1a02001 mov r2, r1 <== NOT EXECUTED
9524: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
9528: ebfff09f bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
/* WARN pipe not released! */
if(sc != RTEMS_SUCCESSFUL)
952c: e3500000 cmp r0, #0 <== NOT EXECUTED
9530: 1a000038 bne 9618 <pipe_release+0x110> <== NOT EXECUTED
rtems_fatal_error_occurred(sc);
mode = LIBIO_ACCMODE(iop);
9534: e5956014 ldr r6, [r5, #20] <== NOT EXECUTED
if (mode & LIBIO_FLAGS_READ)
9538: e3160002 tst r6, #2 <== NOT EXECUTED
pipe->Readers --;
953c: 15943010 ldrne r3, [r4, #16] <== NOT EXECUTED
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
/* WARN pipe not released! */
if(sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(sc);
mode = LIBIO_ACCMODE(iop);
9540: e2066006 and r6, r6, #6 <== NOT EXECUTED
if (mode & LIBIO_FLAGS_READ)
pipe->Readers --;
9544: 12433001 subne r3, r3, #1 <== NOT EXECUTED
9548: 15843010 strne r3, [r4, #16] <== NOT EXECUTED
if (mode & LIBIO_FLAGS_WRITE)
954c: e3160004 tst r6, #4 <== NOT EXECUTED
pipe->Writers --;
9550: 15943014 ldrne r3, [r4, #20] <== NOT EXECUTED
sc = rtems_semaphore_obtain(rtems_pipe_semaphore,
9554: e59f50c0 ldr r5, [pc, #192] ; 961c <pipe_release+0x114> <== NOT EXECUTED
mode = LIBIO_ACCMODE(iop);
if (mode & LIBIO_FLAGS_READ)
pipe->Readers --;
if (mode & LIBIO_FLAGS_WRITE)
pipe->Writers --;
9558: 12433001 subne r3, r3, #1 <== NOT EXECUTED
sc = rtems_semaphore_obtain(rtems_pipe_semaphore,
955c: e3a01000 mov r1, #0 <== NOT EXECUTED
mode = LIBIO_ACCMODE(iop);
if (mode & LIBIO_FLAGS_READ)
pipe->Readers --;
if (mode & LIBIO_FLAGS_WRITE)
pipe->Writers --;
9560: 15843014 strne r3, [r4, #20] <== NOT EXECUTED
sc = rtems_semaphore_obtain(rtems_pipe_semaphore,
9564: e5950000 ldr r0, [r5] <== NOT EXECUTED
9568: e1a02001 mov r2, r1 <== NOT EXECUTED
956c: ebfff08e bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
/* WARN pipe not freed and pipep not set to NULL! */
if(sc != RTEMS_SUCCESSFUL)
9570: e3500000 cmp r0, #0 <== NOT EXECUTED
9574: 1a000027 bne 9618 <pipe_release+0x110> <== NOT EXECUTED
rtems_fatal_error_occurred(sc);
PIPE_UNLOCK(pipe);
9578: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
957c: ebfff0d2 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if (pipe->Readers == 0 && pipe->Writers == 0) {
9580: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
9584: e3530000 cmp r3, #0 <== NOT EXECUTED
9588: 0a00000d beq 95c4 <pipe_release+0xbc> <== NOT EXECUTED
*pipep = NULL;
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
else if (pipe->Writers == 0 && mode != LIBIO_FLAGS_READ)
958c: e5942014 ldr r2, [r4, #20] <== NOT EXECUTED
9590: e2723001 rsbs r3, r2, #1 <== NOT EXECUTED
9594: 33a03000 movcc r3, #0 <== NOT EXECUTED
9598: e3560002 cmp r6, #2 <== NOT EXECUTED
959c: 03a03000 moveq r3, #0 <== NOT EXECUTED
95a0: e3530000 cmp r3, #0 <== NOT EXECUTED
PIPE_WAKEUPREADERS(pipe);
95a4: 1594002c ldrne r0, [r4, #44] ; 0x2c <== NOT EXECUTED
95a8: 11a0100d movne r1, sp <== NOT EXECUTED
95ac: 1b000796 blne b40c <rtems_barrier_release> <== NOT EXECUTED
rtems_semaphore_release(rtems_pipe_semaphore);
95b0: e5950000 ldr r0, [r5] <== NOT EXECUTED
95b4: ebfff0c4 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
return -errno;
#endif
return 0;
}
95b8: e3a00000 mov r0, #0 <== NOT EXECUTED
95bc: e28dd004 add sp, sp, #4 <== NOT EXECUTED
95c0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
if(sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(sc);
PIPE_UNLOCK(pipe);
if (pipe->Readers == 0 && pipe->Writers == 0) {
95c4: e5948014 ldr r8, [r4, #20] <== NOT EXECUTED
95c8: e3580000 cmp r8, #0 <== NOT EXECUTED
95cc: 0a000005 beq 95e8 <pipe_release+0xe0> <== NOT EXECUTED
delfile = TRUE;
#endif
pipe_free(pipe);
*pipep = NULL;
}
else if (pipe->Readers == 0 && mode != LIBIO_FLAGS_WRITE)
95d0: e3560004 cmp r6, #4 <== NOT EXECUTED
95d4: 0afffff5 beq 95b0 <pipe_release+0xa8> <== NOT EXECUTED
/* Notify waiting Writers that all their partners left */
PIPE_WAKEUPWRITERS(pipe);
95d8: e5940030 ldr r0, [r4, #48] ; 0x30 <== NOT EXECUTED
95dc: e1a0100d mov r1, sp <== NOT EXECUTED
95e0: eb000789 bl b40c <rtems_barrier_release> <== NOT EXECUTED
95e4: eafffff1 b 95b0 <pipe_release+0xa8> <== NOT EXECUTED
/* Called with rtems_pipe_semaphore held. */
static inline void pipe_free(
pipe_control_t *pipe
)
{
rtems_barrier_delete(pipe->readBarrier);
95e8: e594002c ldr r0, [r4, #44] ; 0x2c <== NOT EXECUTED
95ec: eb00076c bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
rtems_barrier_delete(pipe->writeBarrier);
95f0: e5940030 ldr r0, [r4, #48] ; 0x30 <== NOT EXECUTED
95f4: eb00076a bl b3a4 <rtems_barrier_delete> <== NOT EXECUTED
rtems_semaphore_delete(pipe->Semaphore);
95f8: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
95fc: ebfff041 bl 5708 <rtems_semaphore_delete> <== NOT EXECUTED
free(pipe->Buffer);
9600: e5940000 ldr r0, [r4] <== NOT EXECUTED
9604: ebffe2a7 bl 20a8 <free> <== NOT EXECUTED
free(pipe);
9608: e1a00004 mov r0, r4 <== NOT EXECUTED
960c: ebffe2a5 bl 20a8 <free> <== NOT EXECUTED
/* To delete an anonymous pipe file when all users closed it */
if (pipe->Anonymous)
delfile = TRUE;
#endif
pipe_free(pipe);
*pipep = NULL;
9610: e5878000 str r8, [r7] <== NOT EXECUTED
if(sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(sc);
PIPE_UNLOCK(pipe);
if (pipe->Readers == 0 && pipe->Writers == 0) {
9614: eaffffe5 b 95b0 <pipe_release+0xa8> <== NOT EXECUTED
sc = rtems_semaphore_obtain(rtems_pipe_semaphore,
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
/* WARN pipe not freed and pipep not set to NULL! */
if(sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(sc);
9618: ebfff1f0 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00009150 <pipe_write>:
pipe_control_t *pipe,
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
9150: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
9154: e2524000 subs r4, r2, #0 <== NOT EXECUTED
pipe_control_t *pipe,
const void *buffer,
size_t count,
rtems_libio_t *iop
)
{
9158: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
915c: e1a05000 mov r5, r0 <== NOT EXECUTED
9160: e1a06001 mov r6, r1 <== NOT EXECUTED
int chunk, chunk1, written = 0, ret = 0;
/* Write nothing */
if (count == 0)
9164: 01a07004 moveq r7, r4 <== NOT EXECUTED
9168: 1a000002 bne 9178 <pipe_write+0x28> <== NOT EXECUTED
#endif
if (written > 0)
return written;
return ret;
}
916c: e1a00007 mov r0, r7 <== NOT EXECUTED
9170: e28dd008 add sp, sp, #8 <== NOT EXECUTED
9174: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/* Write nothing */
if (count == 0)
return 0;
if (! PIPE_LOCK(pipe))
9178: e3a01000 mov r1, #0 <== NOT EXECUTED
917c: e5900028 ldr r0, [r0, #40] ; 0x28 <== NOT EXECUTED
9180: e1a02001 mov r2, r1 <== NOT EXECUTED
9184: e58d3000 str r3, [sp] <== NOT EXECUTED
9188: ebfff187 bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
918c: e2509000 subs r9, r0, #0 <== NOT EXECUTED
9190: e59d3000 ldr r3, [sp] <== NOT EXECUTED
9194: 13e07003 mvnne r7, #3 <== NOT EXECUTED
9198: 1afffff3 bne 916c <pipe_write+0x1c> <== NOT EXECUTED
return -EINTR;
if (pipe->Readers == 0) {
919c: e5957010 ldr r7, [r5, #16] <== NOT EXECUTED
91a0: e3570000 cmp r7, #0 <== NOT EXECUTED
91a4: 0a00004f beq 92e8 <pipe_write+0x198> <== NOT EXECUTED
ret = -EPIPE;
goto out_locked;
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
91a8: e5958004 ldr r8, [r5, #4] <== NOT EXECUTED
91ac: e1540008 cmp r4, r8 <== NOT EXECUTED
91b0: 91a0a004 movls sl, r4 <== NOT EXECUTED
91b4: 83a0a001 movhi sl, #1 <== NOT EXECUTED
}
pipe->waitingWriters --;
if (ret != 0)
goto out_locked;
if (pipe->Readers == 0) {
91b8: e1a07009 mov r7, r9 <== NOT EXECUTED
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
if (pipe->waitingReaders > 0)
PIPE_WAKEUPREADERS(pipe);
91bc: e28db004 add fp, sp, #4 <== NOT EXECUTED
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
91c0: e595100c ldr r1, [r5, #12] <== NOT EXECUTED
91c4: e0612008 rsb r2, r1, r8 <== NOT EXECUTED
91c8: e152000a cmp r2, sl <== NOT EXECUTED
91cc: 2a000021 bcs 9258 <pipe_write+0x108> <== NOT EXECUTED
if (LIBIO_NODELAY(iop)) {
91d0: e5938014 ldr r8, [r3, #20] <== NOT EXECUTED
91d4: e2188001 ands r8, r8, #1 <== NOT EXECUTED
91d8: 1a00004a bne 9308 <pipe_write+0x1b8> <== NOT EXECUTED
ret = -EAGAIN;
goto out_locked;
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
91dc: e595201c ldr r2, [r5, #28] <== NOT EXECUTED
91e0: e2822001 add r2, r2, #1 <== NOT EXECUTED
91e4: e585201c str r2, [r5, #28] <== NOT EXECUTED
PIPE_UNLOCK(pipe);
91e8: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
91ec: e58d3000 str r3, [sp] <== NOT EXECUTED
91f0: ebfff1b5 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
if (! PIPE_WRITEWAIT(pipe))
91f4: e1a01008 mov r1, r8 <== NOT EXECUTED
91f8: e5950030 ldr r0, [r5, #48] ; 0x30 <== NOT EXECUTED
91fc: eb00089b bl b470 <rtems_barrier_wait> <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
9200: e1a01008 mov r1, r8 <== NOT EXECUTED
9204: e1a02001 mov r2, r1 <== NOT EXECUTED
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
9208: e2508000 subs r8, r0, #0 <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
920c: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
}
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
9210: 13e08003 mvnne r8, #3 <== NOT EXECUTED
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
9214: ebfff164 bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
9218: e3500000 cmp r0, #0 <== NOT EXECUTED
921c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
9220: 1a000036 bne 9300 <pipe_write+0x1b0> <== NOT EXECUTED
/* WARN waitingWriters not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingWriters --;
9224: e595201c ldr r2, [r5, #28] <== NOT EXECUTED
if (ret != 0)
9228: e3580000 cmp r8, #0 <== NOT EXECUTED
if (! PIPE_LOCK(pipe)) {
/* WARN waitingWriters not restored! */
ret = -EINTR;
goto out_nolock;
}
pipe->waitingWriters --;
922c: e2422001 sub r2, r2, #1 <== NOT EXECUTED
9230: e585201c str r2, [r5, #28] <== NOT EXECUTED
if (ret != 0)
9234: 1a00002c bne 92ec <pipe_write+0x19c> <== NOT EXECUTED
goto out_locked;
if (pipe->Readers == 0) {
9238: e5952010 ldr r2, [r5, #16] <== NOT EXECUTED
923c: e3520000 cmp r2, #0 <== NOT EXECUTED
9240: 0a000028 beq 92e8 <pipe_write+0x198> <== NOT EXECUTED
9244: e5958004 ldr r8, [r5, #4] <== NOT EXECUTED
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
9248: e595100c ldr r1, [r5, #12] <== NOT EXECUTED
924c: e0612008 rsb r2, r1, r8 <== NOT EXECUTED
9250: e152000a cmp r2, sl <== NOT EXECUTED
9254: 3affffdd bcc 91d0 <pipe_write+0x80> <== NOT EXECUTED
goto out_locked;
}
}
chunk = MIN(count - written, PIPE_SPACE(pipe));
chunk1 = pipe->Size - PIPE_WSTART(pipe);
9258: e5950008 ldr r0, [r5, #8] <== NOT EXECUTED
ret = -EPIPE;
goto out_locked;
}
}
chunk = MIN(count - written, PIPE_SPACE(pipe));
925c: e069a004 rsb sl, r9, r4 <== NOT EXECUTED
chunk1 = pipe->Size - PIPE_WSTART(pipe);
9260: e0810000 add r0, r1, r0 <== NOT EXECUTED
9264: e1a01008 mov r1, r8 <== NOT EXECUTED
ret = -EPIPE;
goto out_locked;
}
}
chunk = MIN(count - written, PIPE_SPACE(pipe));
9268: e152000a cmp r2, sl <== NOT EXECUTED
926c: 31a0a002 movcc sl, r2 <== NOT EXECUTED
chunk1 = pipe->Size - PIPE_WSTART(pipe);
9270: e58d3000 str r3, [sp] <== NOT EXECUTED
9274: eb0039df bl 179f8 <__umodsi3> <== NOT EXECUTED
9278: e0608008 rsb r8, r0, r8 <== NOT EXECUTED
if (chunk > chunk1) {
927c: e15a0008 cmp sl, r8 <== NOT EXECUTED
9280: e59d3000 ldr r3, [sp] <== NOT EXECUTED
9284: da000021 ble 9310 <pipe_write+0x1c0> <== NOT EXECUTED
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
9288: e5952000 ldr r2, [r5] <== NOT EXECUTED
928c: e0861009 add r1, r6, r9 <== NOT EXECUTED
9290: e0820000 add r0, r2, r0 <== NOT EXECUTED
9294: e1a02008 mov r2, r8 <== NOT EXECUTED
9298: eb001616 bl eaf8 <memcpy> <== NOT EXECUTED
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
929c: e0881009 add r1, r8, r9 <== NOT EXECUTED
92a0: e0861001 add r1, r6, r1 <== NOT EXECUTED
92a4: e068200a rsb r2, r8, sl <== NOT EXECUTED
92a8: e5950000 ldr r0, [r5] <== NOT EXECUTED
92ac: eb001611 bl eaf8 <memcpy> <== NOT EXECUTED
92b0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
92b4: e595200c ldr r2, [r5, #12] <== NOT EXECUTED
if (pipe->waitingReaders > 0)
92b8: e5951018 ldr r1, [r5, #24] <== NOT EXECUTED
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
92bc: e082200a add r2, r2, sl <== NOT EXECUTED
if (pipe->waitingReaders > 0)
92c0: e3510000 cmp r1, #0 <== NOT EXECUTED
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
pipe->Length += chunk;
92c4: e585200c str r2, [r5, #12] <== NOT EXECUTED
if (pipe->waitingReaders > 0)
92c8: 1a000018 bne 9330 <pipe_write+0x1e0> <== NOT EXECUTED
PIPE_WAKEUPREADERS(pipe);
written += chunk;
92cc: e087700a add r7, r7, sl <== NOT EXECUTED
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
92d0: e1540007 cmp r4, r7 <== NOT EXECUTED
92d4: e1a09007 mov r9, r7 <== NOT EXECUTED
92d8: 9a00001a bls 9348 <pipe_write+0x1f8> <== NOT EXECUTED
92dc: e5958004 ldr r8, [r5, #4] <== NOT EXECUTED
92e0: e3a0a001 mov sl, #1 <== NOT EXECUTED
92e4: eaffffb5 b 91c0 <pipe_write+0x70> <== NOT EXECUTED
92e8: e3e0801f mvn r8, #31 <== NOT EXECUTED
/* Write of more than PIPE_BUF bytes can be interleaved */
chunk = 1;
}
out_locked:
PIPE_UNLOCK(pipe);
92ec: e5950028 ldr r0, [r5, #40] ; 0x28 <== NOT EXECUTED
92f0: ebfff175 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
/* Signal SIGPIPE */
if (ret == -EPIPE)
kill(getpid(), SIGPIPE);
#endif
if (written > 0)
92f4: e3570000 cmp r7, #0 <== NOT EXECUTED
92f8: d1a07008 movle r7, r8 <== NOT EXECUTED
92fc: eaffff9a b 916c <pipe_write+0x1c> <== NOT EXECUTED
/* Wait until there is chunk bytes space or no reader exists */
pipe->waitingWriters ++;
PIPE_UNLOCK(pipe);
if (! PIPE_WRITEWAIT(pipe))
ret = -EINTR;
if (! PIPE_LOCK(pipe)) {
9300: e3e08003 mvn r8, #3 <== NOT EXECUTED
9304: eafffffa b 92f4 <pipe_write+0x1a4> <== NOT EXECUTED
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
while (PIPE_SPACE(pipe) < chunk) {
if (LIBIO_NODELAY(iop)) {
9308: e3e0800a mvn r8, #10 <== NOT EXECUTED
930c: eafffff6 b 92ec <pipe_write+0x19c> <== NOT EXECUTED
if (chunk > chunk1) {
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk1);
memcpy(pipe->Buffer, buffer + written + chunk1, chunk - chunk1);
}
else
memcpy(pipe->Buffer + PIPE_WSTART(pipe), buffer + written, chunk);
9310: e5952000 ldr r2, [r5] <== NOT EXECUTED
9314: e0861009 add r1, r6, r9 <== NOT EXECUTED
9318: e0820000 add r0, r2, r0 <== NOT EXECUTED
931c: e1a0200a mov r2, sl <== NOT EXECUTED
9320: e58d3000 str r3, [sp] <== NOT EXECUTED
9324: eb0015f3 bl eaf8 <memcpy> <== NOT EXECUTED
9328: e59d3000 ldr r3, [sp] <== NOT EXECUTED
932c: eaffffe0 b 92b4 <pipe_write+0x164> <== NOT EXECUTED
pipe->Length += chunk;
if (pipe->waitingReaders > 0)
PIPE_WAKEUPREADERS(pipe);
9330: e595002c ldr r0, [r5, #44] ; 0x2c <== NOT EXECUTED
9334: e1a0100b mov r1, fp <== NOT EXECUTED
9338: e58d3000 str r3, [sp] <== NOT EXECUTED
933c: eb000832 bl b40c <rtems_barrier_release> <== NOT EXECUTED
9340: e59d3000 ldr r3, [sp] <== NOT EXECUTED
9344: eaffffe0 b 92cc <pipe_write+0x17c> <== NOT EXECUTED
}
/* Write of PIPE_BUF bytes or less shall not be interleaved */
chunk = count <= pipe->Size ? count : 1;
while (written < count) {
9348: e3a08000 mov r8, #0 <== NOT EXECUTED
934c: eaffffe6 b 92ec <pipe_write+0x19c> <== NOT EXECUTED
0000a520 <ramdisk_allocate>:
void *area_begin,
uint32_t block_size,
rtems_blkdev_bnum block_count,
bool trace
)
{
a520: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
a524: e1a04000 mov r4, r0
struct ramdisk *rd = malloc(sizeof(struct ramdisk));
a528: e3a00010 mov r0, #16
void *area_begin,
uint32_t block_size,
rtems_blkdev_bnum block_count,
bool trace
)
{
a52c: e1a05001 mov r5, r1
a530: e1a08002 mov r8, r2
a534: e203a0ff and sl, r3, #255 ; 0xff
struct ramdisk *rd = malloc(sizeof(struct ramdisk));
a538: ebffe3c9 bl 3464 <malloc>
if (rd == NULL) {
a53c: e3500000 cmp r0, #0
uint32_t block_size,
rtems_blkdev_bnum block_count,
bool trace
)
{
struct ramdisk *rd = malloc(sizeof(struct ramdisk));
a540: e1a07000 mov r7, r0
a544: e1a06000 mov r6, r0
if (rd == NULL) {
a548: 0a000008 beq a570 <ramdisk_allocate+0x50>
return NULL;
}
if (area_begin == NULL) {
a54c: e3540000 cmp r4, #0
return NULL;
}
rd->malloced = true;
} else {
rd->malloced = false;
a550: 13a03000 movne r3, #0
a554: 15c0300d strbne r3, [r0, #13]
if (rd == NULL) {
return NULL;
}
if (area_begin == NULL) {
a558: 0a000006 beq a578 <ramdisk_allocate+0x58>
}
rd->block_size = block_size;
rd->block_num = block_count;
rd->area = area_begin;
rd->trace = trace;
rd->initialized = true;
a55c: e3a03001 mov r3, #1
a560: e5c6300c strb r3, [r6, #12]
}
rd->malloced = true;
} else {
rd->malloced = false;
}
rd->block_size = block_size;
a564: e8860120 stm r6, {r5, r8}
rd->block_num = block_count;
rd->area = area_begin;
a568: e5864008 str r4, [r6, #8]
rd->trace = trace;
a56c: e5c6a00e strb sl, [r6, #14]
rd->initialized = true;
return rd;
}
a570: e1a00007 mov r0, r7
a574: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
if (rd == NULL) {
return NULL;
}
if (area_begin == NULL) {
area_begin = calloc(block_count, block_size);
a578: e1a00008 mov r0, r8
a57c: e1a01005 mov r1, r5
a580: ebffe248 bl 2ea8 <calloc>
if (area_begin == NULL) {
a584: e2504000 subs r4, r0, #0
free(rd);
return NULL;
}
rd->malloced = true;
a588: 13a03001 movne r3, #1
a58c: 15c7300d strbne r3, [r7, #13]
return NULL;
}
if (area_begin == NULL) {
area_begin = calloc(block_count, block_size);
if (area_begin == NULL) {
a590: 1afffff1 bne a55c <ramdisk_allocate+0x3c>
free(rd);
a594: e1a00007 mov r0, r7 <== NOT EXECUTED
a598: ebffe2d8 bl 3100 <free> <== NOT EXECUTED
a59c: e1a07004 mov r7, r4 <== NOT EXECUTED
return NULL;
a5a0: eafffff2 b a570 <ramdisk_allocate+0x50> <== NOT EXECUTED
00020ebc <ramdisk_initialize>:
rtems_device_driver
ramdisk_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor __attribute__((unused)),
void *arg __attribute__((unused)))
{
20ebc: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
20ec0: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
20ec4: e1a09000 mov r9, r0 <== NOT EXECUTED
rtems_device_minor_number i;
rtems_ramdisk_config *c = rtems_ramdisk_configuration;
struct ramdisk *r;
rtems_status_code rc;
rc = rtems_disk_io_initialize();
20ec8: ebff95c4 bl 65e0 <rtems_disk_io_initialize> <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
20ecc: e3500000 cmp r0, #0 <== NOT EXECUTED
20ed0: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
20ed4: 0a000002 beq 20ee4 <ramdisk_initialize+0x28> <== NOT EXECUTED
}
r->initialized = false;
}
}
return RTEMS_SUCCESSFUL;
}
20ed8: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
20edc: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
20ee0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* This is allocating memory for a RAM disk which will persist for
* the life of the system. RTEMS has no "de-initialize" driver call
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
20ee4: e59f7114 ldr r7, [pc, #276] ; 21000 <ramdisk_initialize+0x144><== NOT EXECUTED
20ee8: e3a01010 mov r1, #16 <== NOT EXECUTED
20eec: e5970000 ldr r0, [r7] <== NOT EXECUTED
20ef0: ebff9a1a bl 7760 <calloc> <== NOT EXECUTED
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
20ef4: e5973000 ldr r3, [r7] <== NOT EXECUTED
* the life of the system. RTEMS has no "de-initialize" driver call
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
20ef8: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
20efc: e3530000 cmp r3, #0 <== NOT EXECUTED
* This is allocating memory for a RAM disk which will persist for
* the life of the system. RTEMS has no "de-initialize" driver call
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
20f00: e1a04000 mov r4, r0 <== NOT EXECUTED
r->trace = false;
20f04: e5c0100e strb r1, [r0, #14] <== NOT EXECUTED
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
20f08: 0afffff2 beq 20ed8 <ramdisk_initialize+0x1c> <== NOT EXECUTED
20f0c: e59f60f0 ldr r6, [pc, #240] ; 21004 <ramdisk_initialize+0x148><== NOT EXECUTED
20f10: e1a05001 mov r5, r1 <== NOT EXECUTED
20f14: e28d8014 add r8, sp, #20 <== NOT EXECUTED
{
if (r->malloced)
{
free(r->area);
}
r->initialized = false;
20f18: e1a0a001 mov sl, r1 <== NOT EXECUTED
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
20f1c: e59f30e4 ldr r3, [pc, #228] ; 21008 <ramdisk_initialize+0x14c><== NOT EXECUTED
20f20: e8930007 ldm r3, {r0, r1, r2} <== NOT EXECUTED
20f24: e1a0c008 mov ip, r8 <== NOT EXECUTED
20f28: e8ac0003 stmia ip!, {r0, r1} <== NOT EXECUTED
20f2c: e5cc2000 strb r2, [ip] <== NOT EXECUTED
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
20f30: e5dd001c ldrb r0, [sp, #28] <== NOT EXECUTED
r->block_size = c->block_size;
r->block_num = c->block_num;
if (c->location == NULL)
20f34: e5961008 ldr r1, [r6, #8] <== NOT EXECUTED
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
r->block_size = c->block_size;
20f38: e896000c ldm r6, {r2, r3} <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
20f3c: e58d9020 str r9, [sp, #32] <== NOT EXECUTED
temp.__overlay.minor = _minor;
20f40: e58d5024 str r5, [sp, #36] ; 0x24 <== NOT EXECUTED
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
20f44: e0800005 add r0, r0, r5 <== NOT EXECUTED
r->block_size = c->block_size;
r->block_num = c->block_num;
if (c->location == NULL)
20f48: e3510000 cmp r1, #0 <== NOT EXECUTED
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
{
dev_t dev = rtems_filesystem_make_dev_t(major, i);
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
20f4c: e5cd001c strb r0, [sp, #28] <== NOT EXECUTED
r->block_size = c->block_size;
20f50: e884000c stm r4, {r2, r3} <== NOT EXECUTED
return temp.device;
20f54: e28dc020 add ip, sp, #32 <== NOT EXECUTED
20f58: e89c1800 ldm ip, {fp, ip} <== NOT EXECUTED
r->block_num = c->block_num;
if (c->location == NULL)
20f5c: 0a000019 beq 20fc8 <ramdisk_initialize+0x10c> <== NOT EXECUTED
}
else
{
r->malloced = false;
r->initialized = true;
r->area = c->location;
20f60: e5841008 str r1, [r4, #8] <== NOT EXECUTED
}
}
else
{
r->malloced = false;
r->initialized = true;
20f64: e3a01001 mov r1, #1 <== NOT EXECUTED
r->initialized = true;
}
}
else
{
r->malloced = false;
20f68: e5c4a00d strb sl, [r4, #13] <== NOT EXECUTED
r->initialized = true;
20f6c: e5c4100c strb r1, [r4, #12] <== NOT EXECUTED
r->area = c->location;
}
rc = rtems_disk_create_phys(dev, c->block_size, c->block_num,
20f70: e1a0100c mov r1, ip <== NOT EXECUTED
20f74: e59fc090 ldr ip, [pc, #144] ; 2100c <ramdisk_initialize+0x150><== NOT EXECUTED
20f78: e1a0000b mov r0, fp <== NOT EXECUTED
20f7c: e58dc000 str ip, [sp] <== NOT EXECUTED
20f80: e98d0110 stmib sp, {r4, r8} <== NOT EXECUTED
20f84: ebff9767 bl 6d28 <rtems_disk_create_phys> <== NOT EXECUTED
ramdisk_ioctl, r, name);
if (rc != RTEMS_SUCCESSFUL)
20f88: e3500000 cmp r0, #0 <== NOT EXECUTED
20f8c: 0a000003 beq 20fa0 <ramdisk_initialize+0xe4> <== NOT EXECUTED
{
if (r->malloced)
20f90: e5d4300d ldrb r3, [r4, #13] <== NOT EXECUTED
20f94: e3530000 cmp r3, #0 <== NOT EXECUTED
20f98: 1a000007 bne 20fbc <ramdisk_initialize+0x100> <== NOT EXECUTED
{
free(r->area);
}
r->initialized = false;
20f9c: e5c4a00c strb sl, [r4, #12] <== NOT EXECUTED
* so there is no corresponding free(r). Coverity is correct that
* it is never freed but this is not a problem.
*/
r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk));
r->trace = false;
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
20fa0: e5973000 ldr r3, [r7] <== NOT EXECUTED
20fa4: e2855001 add r5, r5, #1 <== NOT EXECUTED
20fa8: e1530005 cmp r3, r5 <== NOT EXECUTED
20fac: 9affffc9 bls 20ed8 <ramdisk_initialize+0x1c> <== NOT EXECUTED
20fb0: e286600c add r6, r6, #12 <== NOT EXECUTED
20fb4: e2844010 add r4, r4, #16 <== NOT EXECUTED
20fb8: eaffffd7 b 20f1c <ramdisk_initialize+0x60> <== NOT EXECUTED
ramdisk_ioctl, r, name);
if (rc != RTEMS_SUCCESSFUL)
{
if (r->malloced)
{
free(r->area);
20fbc: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
20fc0: ebff9b6a bl 7d70 <free> <== NOT EXECUTED
20fc4: eafffff4 b 20f9c <ramdisk_initialize+0xe0> <== NOT EXECUTED
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
r->block_size = c->block_size;
r->block_num = c->block_num;
if (c->location == NULL)
{
r->malloced = true;
20fc8: e3a01001 mov r1, #1 <== NOT EXECUTED
r->area = malloc(r->block_size * r->block_num);
20fcc: e0000392 mul r0, r2, r3 <== NOT EXECUTED
20fd0: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
r->block_size = c->block_size;
r->block_num = c->block_num;
if (c->location == NULL)
{
r->malloced = true;
20fd4: e5c4100d strb r1, [r4, #13] <== NOT EXECUTED
r->area = malloc(r->block_size * r->block_num);
20fd8: ebff9d28 bl 8480 <malloc> <== NOT EXECUTED
if (r->area == NULL) /* No enough memory for this disk */
20fdc: e3500000 cmp r0, #0 <== NOT EXECUTED
r->block_size = c->block_size;
r->block_num = c->block_num;
if (c->location == NULL)
{
r->malloced = true;
r->area = malloc(r->block_size * r->block_num);
20fe0: e5840008 str r0, [r4, #8] <== NOT EXECUTED
if (r->area == NULL) /* No enough memory for this disk */
20fe4: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
{
r->initialized = false;
20fe8: 05c4000c strbeq r0, [r4, #12] <== NOT EXECUTED
r->block_num = c->block_num;
if (c->location == NULL)
{
r->malloced = true;
r->area = malloc(r->block_size * r->block_num);
if (r->area == NULL) /* No enough memory for this disk */
20fec: 0affffeb beq 20fa0 <ramdisk_initialize+0xe4> <== NOT EXECUTED
r->initialized = false;
continue;
}
else
{
r->initialized = true;
20ff0: e3a03001 mov r3, #1 <== NOT EXECUTED
20ff4: e5c4300c strb r3, [r4, #12] <== NOT EXECUTED
20ff8: e896000c ldm r6, {r2, r3} <== NOT EXECUTED
20ffc: eaffffdb b 20f70 <ramdisk_initialize+0xb4> <== NOT EXECUTED
0000a3f8 <ramdisk_ioctl>:
}
int
ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
switch (req)
a3f8: e3a03961 mov r3, #1589248 ; 0x184000
a3fc: e2833c02 add r3, r3, #512 ; 0x200
a400: e2833107 add r3, r3, #-1073741823 ; 0xc0000001
a404: e1510003 cmp r1, r3
return 0;
}
int
ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
a408: e92d41f0 push {r4, r5, r6, r7, r8, lr}
a40c: e1a05002 mov r5, r2
switch (req)
a410: 0a000001 beq a41c <ramdisk_ioctl+0x24>
break;
}
errno = EINVAL;
return -1;
}
a414: e8bd41f0 pop {r4, r5, r6, r7, r8, lr}
}
break;
}
default:
return rtems_blkdev_ioctl (dd, req, argp);
a418: ea0009d5 b cb74 <rtems_blkdev_ioctl>
case RTEMS_BLKIO_REQUEST:
{
rtems_blkdev_request *r = argp;
struct ramdisk *rd = rtems_disk_get_driver_data(dd);
switch (r->req)
a41c: e5926000 ldr r6, [r2]
a420: e3560000 cmp r6, #0
switch (req)
{
case RTEMS_BLKIO_REQUEST:
{
rtems_blkdev_request *r = argp;
struct ramdisk *rd = rtems_disk_get_driver_data(dd);
a424: e590702c ldr r7, [r0, #44] ; 0x2c
switch (r->req)
a428: 1a000017 bne a48c <ramdisk_ioctl+0x94>
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a42c: e5923010 ldr r3, [r2, #16] <== NOT EXECUTED
a430: e3530000 cmp r3, #0 <== NOT EXECUTED
#endif
static int
ramdisk_read(struct ramdisk *rd, rtems_blkdev_request *req)
{
uint8_t *from = rd->area;
a434: e5978008 ldr r8, [r7, #8] <== NOT EXECUTED
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a438: 0a00000b beq a46c <ramdisk_ioctl+0x74> <== NOT EXECUTED
a43c: e2824018 add r4, r2, #24 <== NOT EXECUTED
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: buf=%d block=%d length=%d off=%d addr=%p",
i, sg->block, sg->length, sg->block * rd->block_size,
from + (sg->block * rd->block_size));
#endif
memcpy(sg->buffer, from + (sg->block * rd->block_size), sg->length);
a440: e5941000 ldr r1, [r4] <== NOT EXECUTED
a444: e5973000 ldr r3, [r7] <== NOT EXECUTED
a448: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
a44c: e0218193 mla r1, r3, r1, r8 <== NOT EXECUTED
a450: e5942004 ldr r2, [r4, #4] <== NOT EXECUTED
a454: eb002172 bl 12a24 <memcpy> <== NOT EXECUTED
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a458: e5953010 ldr r3, [r5, #16] <== NOT EXECUTED
a45c: e2866001 add r6, r6, #1 <== NOT EXECUTED
a460: e1560003 cmp r6, r3 <== NOT EXECUTED
a464: e2844010 add r4, r4, #16 <== NOT EXECUTED
a468: 3afffff4 bcc a440 <ramdisk_ioctl+0x48> <== NOT EXECUTED
i, sg->block, sg->length, sg->block * rd->block_size,
to + (sg->block * rd->block_size));
#endif
memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
}
req->status = RTEMS_SUCCESSFUL;
a46c: e3a04000 mov r4, #0
req->req_done(req->done_arg, RTEMS_SUCCESSFUL);
a470: e5950008 ldr r0, [r5, #8]
i, sg->block, sg->length, sg->block * rd->block_size,
to + (sg->block * rd->block_size));
#endif
memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
}
req->status = RTEMS_SUCCESSFUL;
a474: e585400c str r4, [r5, #12]
req->req_done(req->done_arg, RTEMS_SUCCESSFUL);
a478: e1a01004 mov r1, r4
a47c: e1a0e00f mov lr, pc
a480: e595f004 ldr pc, [r5, #4]
a484: e1a00004 mov r0, r4
{
case RTEMS_BLKDEV_REQ_READ:
return ramdisk_read(rd, r);
case RTEMS_BLKDEV_REQ_WRITE:
return ramdisk_write(rd, r);
a488: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
case RTEMS_BLKIO_REQUEST:
{
rtems_blkdev_request *r = argp;
struct ramdisk *rd = rtems_disk_get_driver_data(dd);
switch (r->req)
a48c: e3560001 cmp r6, #1
a490: 0a000004 beq a4a8 <ramdisk_ioctl+0xb0>
case RTEMS_BLKDEV_REQ_WRITE:
return ramdisk_write(rd, r);
default:
errno = EINVAL;
a494: eb001f54 bl 121ec <__errno> <== NOT EXECUTED
a498: e3a03016 mov r3, #22 <== NOT EXECUTED
a49c: e5803000 str r3, [r0] <== NOT EXECUTED
a4a0: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
a4a4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a4a8: e5923010 ldr r3, [r2, #16]
a4ac: e3530000 cmp r3, #0
}
static int
ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req)
{
uint8_t *to = rd->area;
a4b0: e5978008 ldr r8, [r7, #8]
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a4b4: 0affffec beq a46c <ramdisk_ioctl+0x74>
a4b8: e2824018 add r4, r2, #24
a4bc: e3a06000 mov r6, #0
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: buf=%d block=%d length=%d off=%d addr=%p",
i, sg->block, sg->length, sg->block * rd->block_size,
to + (sg->block * rd->block_size));
#endif
memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
a4c0: e5940000 ldr r0, [r4]
a4c4: e5973000 ldr r3, [r7]
a4c8: e5941008 ldr r1, [r4, #8]
a4cc: e0208093 mla r0, r3, r0, r8
a4d0: e5942004 ldr r2, [r4, #4]
a4d4: eb002152 bl 12a24 <memcpy>
#if RTEMS_RAMDISK_TRACE
rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
req->bufs[0].block, req->bufnum);
#endif
for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
a4d8: e5953010 ldr r3, [r5, #16]
a4dc: e2866001 add r6, r6, #1
a4e0: e1560003 cmp r6, r3
a4e4: e2844010 add r4, r4, #16
a4e8: 3afffff4 bcc a4c0 <ramdisk_ioctl+0xc8>
a4ec: eaffffde b a46c <ramdisk_ioctl+0x74>
0000a5a4 <ramdisk_register>:
rtems_blkdev_bnum block_count,
bool trace,
const char *disk,
dev_t *dev_ptr
)
{
a5a4: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
a5a8: e24dd010 sub sp, sp, #16
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
a5ac: e3a0e000 mov lr, #0
a5b0: e28dc010 add ip, sp, #16
a5b4: e52ce004 str lr, [ip, #-4]!
rtems_blkdev_bnum block_count,
bool trace,
const char *disk,
dev_t *dev_ptr
)
{
a5b8: e1a07002 mov r7, r2
a5bc: e1a05000 mov r5, r0
a5c0: e1a04001 mov r4, r1
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
ramdisk *rd = NULL;
dev_t dev = 0;
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
a5c4: e1a0000e mov r0, lr
a5c8: e1a0200c mov r2, ip
a5cc: e59f1094 ldr r1, [pc, #148] ; a668 <ramdisk_register+0xc4>
rtems_blkdev_bnum block_count,
bool trace,
const char *disk,
dev_t *dev_ptr
)
{
a5d0: e1a06003 mov r6, r3
a5d4: e59d9030 ldr r9, [sp, #48] ; 0x30
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
ramdisk *rd = NULL;
dev_t dev = 0;
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
a5d8: ebfff304 bl 71f0 <rtems_io_register_driver>
rtems_blkdev_bnum block_count,
bool trace,
const char *disk,
dev_t *dev_ptr
)
{
a5dc: e20780ff and r8, r7, #255 ; 0xff
rtems_device_major_number major = 0;
ramdisk *rd = NULL;
dev_t dev = 0;
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
if (sc != RTEMS_SUCCESSFUL) {
a5e0: e2507000 subs r7, r0, #0
a5e4: 0a000002 beq a5f4 <ramdisk_register+0x50>
return RTEMS_UNSATISFIED;
}
rd = ramdisk_allocate(NULL, block_size, block_count, trace);
if (rd == NULL) {
rtems_io_unregister_driver(major);
a5e8: e3a0000d mov r0, #13 <== NOT EXECUTED
}
*dev_ptr = dev;
return RTEMS_SUCCESSFUL;
}
a5ec: e28dd010 add sp, sp, #16
a5f0: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
if (sc != RTEMS_SUCCESSFUL) {
return RTEMS_UNSATISFIED;
}
rd = ramdisk_allocate(NULL, block_size, block_count, trace);
a5f4: e1a03008 mov r3, r8
a5f8: e1a01005 mov r1, r5
a5fc: e1a02004 mov r2, r4
a600: ebffffc6 bl a520 <ramdisk_allocate>
if (rd == NULL) {
a604: e2508000 subs r8, r0, #0
a608: 0a000013 beq a65c <ramdisk_register+0xb8>
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
a60c: e59da00c ldr sl, [sp, #12]
return RTEMS_UNSATISFIED;
}
dev = rtems_filesystem_make_dev_t(major, 0);
sc = rtems_disk_create_phys(
a610: e59fc054 ldr ip, [pc, #84] ; a66c <ramdisk_register+0xc8>
a614: e1a01007 mov r1, r7
a618: e1a02005 mov r2, r5
a61c: e1a03004 mov r3, r4
a620: e1a0000a mov r0, sl
a624: e58dc000 str ip, [sp]
a628: e58d6008 str r6, [sp, #8]
a62c: e58d8004 str r8, [sp, #4]
a630: ebffdfe9 bl 25dc <rtems_disk_create_phys>
block_count,
ramdisk_ioctl,
rd,
disk
);
if (sc != RTEMS_SUCCESSFUL) {
a634: e3500000 cmp r0, #0
rtems_io_unregister_driver(major);
return RTEMS_UNSATISFIED;
}
*dev_ptr = dev;
a638: 0589a000 streq sl, [r9]
a63c: 05890004 streq r0, [r9, #4]
block_count,
ramdisk_ioctl,
rd,
disk
);
if (sc != RTEMS_SUCCESSFUL) {
a640: 0affffe9 beq a5ec <ramdisk_register+0x48>
ramdisk_free(rd);
a644: e1a00008 mov r0, r8 <== NOT EXECUTED
a648: ebffffa8 bl a4f0 <ramdisk_free> <== NOT EXECUTED
rtems_io_unregister_driver(major);
a64c: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
a650: ebfff33e bl 7350 <rtems_io_unregister_driver> <== NOT EXECUTED
a654: e3a0000d mov r0, #13 <== NOT EXECUTED
return RTEMS_UNSATISFIED;
a658: eaffffe3 b a5ec <ramdisk_register+0x48> <== NOT EXECUTED
return RTEMS_UNSATISFIED;
}
rd = ramdisk_allocate(NULL, block_size, block_count, trace);
if (rd == NULL) {
rtems_io_unregister_driver(major);
a65c: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
a660: ebfff33a bl 7350 <rtems_io_unregister_driver> <== NOT EXECUTED
a664: eaffffdf b a5e8 <ramdisk_register+0x44> <== NOT EXECUTED
00019d94 <read>:
)
{
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
19d94: e59f30bc ldr r3, [pc, #188] ; 19e58 <read+0xc4>
19d98: e5933000 ldr r3, [r3]
19d9c: e1500003 cmp r0, r3
ssize_t read(
int fd,
void *buffer,
size_t count
)
{
19da0: e92d4810 push {r4, fp, lr}
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
19da4: 2a00001c bcs 19e1c <read+0x88>
iop = rtems_libio_iop( fd );
19da8: e59f40ac ldr r4, [pc, #172] ; 19e5c <read+0xc8>
19dac: e5944000 ldr r4, [r4]
19db0: e0844300 add r4, r4, r0, lsl #6
rtems_libio_check_is_open( iop );
19db4: e5940014 ldr r0, [r4, #20]
19db8: e3100c01 tst r0, #256 ; 0x100
19dbc: 0a000016 beq 19e1c <read+0x88>
rtems_libio_check_buffer( buffer );
19dc0: e3510000 cmp r1, #0
19dc4: 0a00001e beq 19e44 <read+0xb0>
rtems_libio_check_count( count );
19dc8: e3520000 cmp r2, #0
19dcc: 01a00002 moveq r0, r2
19dd0: 08bd8810 popeq {r4, fp, pc}
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
19dd4: e3100002 tst r0, #2
19dd8: 0a00000f beq 19e1c <read+0x88>
/*
* Now process the read().
*/
if ( !iop->handlers->read_h )
19ddc: e594303c ldr r3, [r4, #60] ; 0x3c
19de0: e5933008 ldr r3, [r3, #8]
19de4: e3530000 cmp r3, #0
19de8: 0a000010 beq 19e30 <read+0x9c>
rtems_set_errno_and_return_minus_one( ENOTSUP );
rc = (*iop->handlers->read_h)( iop, buffer, count );
19dec: e1a00004 mov r0, r4
19df0: e1a0e00f mov lr, pc
19df4: e12fff13 bx r3
if ( rc > 0 )
19df8: e3500000 cmp r0, #0
19dfc: d8bd8810 pople {r4, fp, pc}
iop->offset += rc;
19e00: e284c00c add ip, r4, #12
19e04: e89c1800 ldm ip, {fp, ip}
19e08: e09b2000 adds r2, fp, r0
19e0c: e0ac3fc0 adc r3, ip, r0, asr #31
19e10: e584200c str r2, [r4, #12]
19e14: e5843010 str r3, [r4, #16]
return rc;
}
19e18: e8bd8810 pop {r4, fp, pc}
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
rtems_libio_check_count( count );
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
19e1c: ebffd127 bl e2c0 <__errno>
19e20: e3a03009 mov r3, #9
19e24: e5803000 str r3, [r0]
19e28: e3e00000 mvn r0, #0
19e2c: e8bd8810 pop {r4, fp, pc}
/*
* Now process the read().
*/
if ( !iop->handlers->read_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
19e30: ebffd122 bl e2c0 <__errno> <== NOT EXECUTED
19e34: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
19e38: e5803000 str r3, [r0] <== NOT EXECUTED
19e3c: e3e00000 mvn r0, #0 <== NOT EXECUTED
19e40: e8bd8810 pop {r4, fp, pc} <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
19e44: ebffd11d bl e2c0 <__errno> <== NOT EXECUTED
19e48: e3a03016 mov r3, #22 <== NOT EXECUTED
19e4c: e5803000 str r3, [r0] <== NOT EXECUTED
19e50: e3e00000 mvn r0, #0 <== NOT EXECUTED
19e54: e8bd8810 pop {r4, fp, pc} <== NOT EXECUTED
0002a5ec <readlink>:
ssize_t readlink(
const char *pathname,
char *buf,
size_t bufsize
)
{
2a5ec: e92d40f0 push {r4, r5, r6, r7, lr}
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
2a5f0: e2516000 subs r6, r1, #0
ssize_t readlink(
const char *pathname,
char *buf,
size_t bufsize
)
{
2a5f4: e24dd018 sub sp, sp, #24
2a5f8: e1a05002 mov r5, r2
2a5fc: e1a07000 mov r7, r0
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
2a600: 0a000032 beq 2a6d0 <readlink+0xe4>
rtems_set_errno_and_return_minus_one( EFAULT );
result = rtems_filesystem_evaluate_path( pathname, strlen( pathname ),
2a604: eb007d76 bl 49be4 <strlen>
2a608: e28d4004 add r4, sp, #4
2a60c: e3a0c000 mov ip, #0
2a610: e1a01000 mov r1, r0
2a614: e1a0200c mov r2, ip
2a618: e1a00007 mov r0, r7
2a61c: e1a03004 mov r3, r4
2a620: e58dc000 str ip, [sp]
2a624: ebff75af bl 7ce8 <rtems_filesystem_evaluate_path>
0, &loc, false );
if ( result != 0 )
2a628: e3500000 cmp r0, #0
2a62c: 1a000025 bne 2a6c8 <readlink+0xdc>
return -1;
if ( !loc.ops->node_type_h ){
2a630: e59d2010 ldr r2, [sp, #16]
2a634: e5923010 ldr r3, [r2, #16]
2a638: e3530000 cmp r3, #0
2a63c: 0a000019 beq 2a6a8 <readlink+0xbc>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
2a640: e1a00004 mov r0, r4
2a644: e1a0e00f mov lr, pc
2a648: e12fff13 bx r3
2a64c: e3500004 cmp r0, #4
2a650: 1a000023 bne 2a6e4 <readlink+0xf8>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( !loc.ops->readlink_h ){
2a654: e59d2010 ldr r2, [sp, #16]
2a658: e592303c ldr r3, [r2, #60] ; 0x3c
2a65c: e3530000 cmp r3, #0
2a660: 0a00002c beq 2a718 <readlink+0x12c>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
2a664: e1a02005 mov r2, r5
2a668: e1a01006 mov r1, r6
2a66c: e1a00004 mov r0, r4
2a670: e1a0e00f mov lr, pc
2a674: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
2a678: e59d3010 ldr r3, [sp, #16]
2a67c: e3530000 cmp r3, #0
if ( !loc.ops->readlink_h ){
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->readlink_h)( &loc, buf, bufsize );
2a680: e1a05000 mov r5, r0
rtems_filesystem_freenode( &loc );
2a684: 0a000004 beq 2a69c <readlink+0xb0>
2a688: e593301c ldr r3, [r3, #28]
2a68c: e3530000 cmp r3, #0
2a690: 11a00004 movne r0, r4
2a694: 11a0e00f movne lr, pc
2a698: 112fff13 bxne r3
return result;
}
2a69c: e1a00005 mov r0, r5
2a6a0: e28dd018 add sp, sp, #24
2a6a4: e8bd80f0 pop {r4, r5, r6, r7, pc}
0, &loc, false );
if ( result != 0 )
return -1;
if ( !loc.ops->node_type_h ){
rtems_filesystem_freenode( &loc );
2a6a8: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
2a6ac: e3530000 cmp r3, #0 <== NOT EXECUTED
2a6b0: 11a00004 movne r0, r4 <== NOT EXECUTED
2a6b4: 11a0e00f movne lr, pc <== NOT EXECUTED
2a6b8: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2a6bc: eb00624b bl 42ff0 <__errno> <== NOT EXECUTED
2a6c0: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2a6c4: e5803000 str r3, [r0] <== NOT EXECUTED
2a6c8: e3e05000 mvn r5, #0 <== NOT EXECUTED
2a6cc: eafffff2 b 2a69c <readlink+0xb0> <== NOT EXECUTED
{
rtems_filesystem_location_info_t loc;
int result;
if (!buf)
rtems_set_errno_and_return_minus_one( EFAULT );
2a6d0: eb006246 bl 42ff0 <__errno> <== NOT EXECUTED
2a6d4: e3a0300e mov r3, #14 <== NOT EXECUTED
2a6d8: e5803000 str r3, [r0] <== NOT EXECUTED
2a6dc: e3e05000 mvn r5, #0 <== NOT EXECUTED
2a6e0: eaffffed b 2a69c <readlink+0xb0> <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
rtems_filesystem_freenode( &loc );
2a6e4: e59d3010 ldr r3, [sp, #16]
2a6e8: e3530000 cmp r3, #0
2a6ec: 0a000004 beq 2a704 <readlink+0x118>
2a6f0: e593301c ldr r3, [r3, #28]
2a6f4: e3530000 cmp r3, #0
2a6f8: 11a00004 movne r0, r4
2a6fc: 11a0e00f movne lr, pc
2a700: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( EINVAL );
2a704: eb006239 bl 42ff0 <__errno>
2a708: e3a03016 mov r3, #22
2a70c: e5803000 str r3, [r0]
2a710: e3e05000 mvn r5, #0
2a714: eaffffe0 b 2a69c <readlink+0xb0>
}
if ( !loc.ops->readlink_h ){
rtems_filesystem_freenode( &loc );
2a718: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
2a71c: e3530000 cmp r3, #0 <== NOT EXECUTED
2a720: 11a00004 movne r0, r4 <== NOT EXECUTED
2a724: 11a0e00f movne lr, pc <== NOT EXECUTED
2a728: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2a72c: eb00622f bl 42ff0 <__errno> <== NOT EXECUTED
2a730: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2a734: e5803000 str r3, [r0] <== NOT EXECUTED
2a738: e3e05000 mvn r5, #0 <== NOT EXECUTED
2a73c: eaffffd6 b 2a69c <readlink+0xb0> <== NOT EXECUTED
00003cfc <readv>:
int v;
int bytes;
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
3cfc: e59f3160 ldr r3, [pc, #352] ; 3e64 <readv+0x168>
3d00: e5933000 ldr r3, [r3]
3d04: e1500003 cmp r0, r3
ssize_t readv(
int fd,
const struct iovec *iov,
int iovcnt
)
{
3d08: e92d49f0 push {r4, r5, r6, r7, r8, fp, lr}
3d0c: e1a04002 mov r4, r2
int v;
int bytes;
rtems_libio_t *iop;
bool all_zeros;
rtems_libio_check_fd( fd );
3d10: 2a000049 bcs 3e3c <readv+0x140>
iop = rtems_libio_iop( fd );
3d14: e59f314c ldr r3, [pc, #332] ; 3e68 <readv+0x16c>
3d18: e5936000 ldr r6, [r3]
3d1c: e0866300 add r6, r6, r0, lsl #6
rtems_libio_check_is_open( iop );
3d20: e5963014 ldr r3, [r6, #20]
3d24: e3130c01 tst r3, #256 ; 0x100
3d28: 0a000043 beq 3e3c <readv+0x140>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
3d2c: e3130002 tst r3, #2
3d30: 0a000041 beq 3e3c <readv+0x140>
/*
* Argument validation on IO vector
*/
if ( !iov )
3d34: e3510000 cmp r1, #0
3d38: 0a000039 beq 3e24 <readv+0x128>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
3d3c: e3520000 cmp r2, #0
3d40: da000037 ble 3e24 <readv+0x128>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
3d44: e3520b01 cmp r2, #1024 ; 0x400
3d48: ca000035 bgt 3e24 <readv+0x128>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !iop->handlers->read_h )
3d4c: e596303c ldr r3, [r6, #60] ; 0x3c
3d50: e5933008 ldr r3, [r3, #8]
3d54: e3530000 cmp r3, #0
3d58: 0a00003c beq 3e50 <readv+0x154>
rtems_set_errno_and_return_minus_one( ENOTSUP );
3d5c: e1a05001 mov r5, r1
3d60: e3a01000 mov r1, #0
3d64: e1a02005 mov r2, r5
3d68: e3a07001 mov r7, #1
3d6c: e1a00001 mov r0, r1
3d70: ea000000 b 3d78 <readv+0x7c>
* are obvious errors in the iovec. So this extra loop ensures
* that we do not do anything if there is an argument error.
*/
all_zeros = true;
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3d74: e1a00008 mov r0, r8
ssize_t old;
if ( !iov[v].iov_base )
3d78: e592c000 ldr ip, [r2]
3d7c: e35c0000 cmp ip, #0
* are obvious errors in the iovec. So this extra loop ensures
* that we do not do anything if there is an argument error.
*/
all_zeros = true;
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3d80: e2811001 add r1, r1, #1
ssize_t old;
if ( !iov[v].iov_base )
3d84: 0a000026 beq 3e24 <readv+0x128>
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
/* check for wrap */
old = total;
total += iov[v].iov_len;
3d88: e592c004 ldr ip, [r2, #4]
3d8c: e080800c add r8, r0, ip
if ( total < old )
3d90: e1580000 cmp r8, r0
3d94: ba000022 blt 3e24 <readv+0x128>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
3d98: e35c0000 cmp ip, #0
3d9c: 13a07000 movne r7, #0
* are obvious errors in the iovec. So this extra loop ensures
* that we do not do anything if there is an argument error.
*/
all_zeros = true;
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3da0: e1540001 cmp r4, r1
3da4: e2822008 add r2, r2, #8
3da8: cafffff1 bgt 3d74 <readv+0x78>
/*
* A readv with all zeros logically has no effect. Even though
* OpenGroup didn't address this case as they did with writev(),
* we will handle it the same way for symmetry.
*/
if ( all_zeros == true ) {
3dac: e3570000 cmp r7, #0
3db0: 13a08000 movne r8, #0
3db4: 1a00001e bne 3e34 <readv+0x138>
3db8: e1a08007 mov r8, r7
3dbc: ea00000f b 3e00 <readv+0x104>
bytes = (*iop->handlers->read_h)( iop, iov[v].iov_base, iov[v].iov_len );
if ( bytes < 0 )
return -1;
if ( bytes > 0 ) {
3dc0: 0a000006 beq 3de0 <readv+0xe4>
iop->offset += bytes;
3dc4: e286c00c add ip, r6, #12
3dc8: e89c1800 ldm ip, {fp, ip}
3dcc: e09b2000 adds r2, fp, r0
3dd0: e0ac3fc0 adc r3, ip, r0, asr #31
3dd4: e586200c str r2, [r6, #12]
3dd8: e5863010 str r3, [r6, #16]
total += bytes;
3ddc: e0888000 add r8, r8, r0
}
if (bytes != iov[ v ].iov_len)
3de0: e5953004 ldr r3, [r5, #4]
3de4: e1500003 cmp r0, r3
3de8: 1a000011 bne 3e34 <readv+0x138>
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3dec: e1540007 cmp r4, r7
3df0: e2855008 add r5, r5, #8
3df4: da00000e ble 3e34 <readv+0x138>
3df8: e596303c ldr r3, [r6, #60] ; 0x3c
3dfc: e5933008 ldr r3, [r3, #8]
bytes = (*iop->handlers->read_h)( iop, iov[v].iov_base, iov[v].iov_len );
3e00: e8950006 ldm r5, {r1, r2}
3e04: e1a00006 mov r0, r6
3e08: e1a0e00f mov lr, pc
3e0c: e12fff13 bx r3
if ( bytes < 0 )
3e10: e3500000 cmp r0, #0
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3e14: e2877001 add r7, r7, #1
bytes = (*iop->handlers->read_h)( iop, iov[v].iov_base, iov[v].iov_len );
if ( bytes < 0 )
3e18: aaffffe8 bge 3dc0 <readv+0xc4>
}
/*
* Now process the readv().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
3e1c: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e20: ea000003 b 3e34 <readv+0x138> <== NOT EXECUTED
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old )
rtems_set_errno_and_return_minus_one( EINVAL );
3e24: eb002d96 bl f484 <__errno>
3e28: e3a03016 mov r3, #22
3e2c: e5803000 str r3, [r0]
3e30: e3e08000 mvn r8, #0
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
3e34: e1a00008 mov r0, r8
3e38: e8bd89f0 pop {r4, r5, r6, r7, r8, fp, pc}
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_READ, EBADF );
3e3c: eb002d90 bl f484 <__errno> <== NOT EXECUTED
3e40: e3a03009 mov r3, #9 <== NOT EXECUTED
3e44: e5803000 str r3, [r0] <== NOT EXECUTED
3e48: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e4c: eafffff8 b 3e34 <readv+0x138> <== NOT EXECUTED
if ( iovcnt > IOV_MAX )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !iop->handlers->read_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
3e50: eb002d8b bl f484 <__errno> <== NOT EXECUTED
3e54: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
3e58: e5803000 str r3, [r0] <== NOT EXECUTED
3e5c: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e60: eafffff3 b 3e34 <readv+0x138> <== NOT EXECUTED
00019eb8 <realloc>:
{
uintptr_t old_size;
char *new_area;
uintptr_t resize;
MSBUMP(realloc_calls, 1);
19eb8: e92d41f0 push {r4, r5, r6, r7, r8, lr}
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
19ebc: e59f3118 ldr r3, [pc, #280] ; 19fdc <realloc+0x124>
{
uintptr_t old_size;
char *new_area;
uintptr_t resize;
MSBUMP(realloc_calls, 1);
19ec0: e59f5118 ldr r5, [pc, #280] ; 19fe0 <realloc+0x128>
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
19ec4: e5932000 ldr r2, [r3]
{
uintptr_t old_size;
char *new_area;
uintptr_t resize;
MSBUMP(realloc_calls, 1);
19ec8: e5953010 ldr r3, [r5, #16]
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
19ecc: e3520003 cmp r2, #3
{
uintptr_t old_size;
char *new_area;
uintptr_t resize;
MSBUMP(realloc_calls, 1);
19ed0: e2833001 add r3, r3, #1
19ed4: e24dd004 sub sp, sp, #4
19ed8: e5853010 str r3, [r5, #16]
19edc: e1a04000 mov r4, r0
19ee0: e1a06001 mov r6, r1
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
19ee4: 0a000020 beq 19f6c <realloc+0xb4>
}
/*
* Continue with realloc().
*/
if ( !ptr )
19ee8: e3540000 cmp r4, #0
19eec: 0a00001a beq 19f5c <realloc+0xa4>
return malloc( size );
if ( !size ) {
19ef0: e3560000 cmp r6, #0
19ef4: 0a00000f beq 19f38 <realloc+0x80>
free( ptr );
return (void *) 0;
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
19ef8: e59f70e4 ldr r7, [pc, #228] ; 19fe4 <realloc+0x12c>
19efc: e1a01004 mov r1, r4
19f00: e5970000 ldr r0, [r7]
19f04: e1a0200d mov r2, sp
19f08: eb00006b bl 1a0bc <_Protected_heap_Get_block_size>
19f0c: e2508000 subs r8, r0, #0
19f10: 0a00000c beq 19f48 <realloc+0x90>
#if defined(RTEMS_MALLOC_BOUNDARY_HELPERS)
if (rtems_malloc_boundary_helpers)
resize += (*rtems_malloc_boundary_helpers->overhead)();
#endif
if ( _Protected_heap_Resize_block( RTEMS_Malloc_Heap, ptr, resize ) ) {
19f14: e5970000 ldr r0, [r7]
19f18: e1a01004 mov r1, r4
19f1c: e1a02006 mov r2, r6
19f20: eb000076 bl 1a100 <_Protected_heap_Resize_block>
19f24: e3500000 cmp r0, #0
19f28: 0a00001b beq 19f9c <realloc+0xe4>
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
}
19f2c: e1a00004 mov r0, r4
19f30: e28dd004 add sp, sp, #4
19f34: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
*/
if ( !ptr )
return malloc( size );
if ( !size ) {
free( ptr );
19f38: e1a00004 mov r0, r4 <== NOT EXECUTED
19f3c: ebffa059 bl 20a8 <free> <== NOT EXECUTED
19f40: e1a04006 mov r4, r6 <== NOT EXECUTED
return (void *) 0;
19f44: eafffff8 b 19f2c <realloc+0x74> <== NOT EXECUTED
}
if ( !_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, ptr, &old_size) ) {
errno = EINVAL;
19f48: ebffd0dc bl e2c0 <__errno>
19f4c: e3a03016 mov r3, #22
19f50: e5803000 str r3, [r0]
19f54: e1a04008 mov r4, r8
return (void *) 0;
19f58: eafffff3 b 19f2c <realloc+0x74>
/*
* Continue with realloc().
*/
if ( !ptr )
return malloc( size );
19f5c: e1a00006 mov r0, r6
19f60: ebffa129 bl 240c <malloc>
19f64: e1a04000 mov r4, r0
19f68: eaffffef b 19f2c <realloc+0x74>
/*
* Do not attempt to allocate memory if in a critical section or ISR.
*/
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_disable_level > 0)
19f6c: e59f3074 ldr r3, [pc, #116] ; 19fe8 <realloc+0x130>
19f70: e5933000 ldr r3, [r3]
19f74: e3530000 cmp r3, #0
19f78: 0a000001 beq 19f84 <realloc+0xcc>
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
19f7c: e3a04000 mov r4, #0
19f80: eaffffe9 b 19f2c <realloc+0x74>
if (_System_state_Is_up(_System_state_Get())) {
if (_Thread_Dispatch_disable_level > 0)
return (void *) 0;
if (_ISR_Nest_level > 0)
19f84: e59f3060 ldr r3, [pc, #96] ; 19fec <realloc+0x134>
19f88: e5933000 ldr r3, [r3]
19f8c: e3530000 cmp r3, #0
19f90: 0affffd4 beq 19ee8 <realloc+0x30>
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
free( ptr );
return new_area;
19f94: e3a04000 mov r4, #0 <== NOT EXECUTED
19f98: eaffffe3 b 19f2c <realloc+0x74> <== NOT EXECUTED
* There used to be a free on this error case but it is wrong to
* free the memory per OpenGroup Single UNIX Specification V2
* and the C Standard.
*/
new_area = malloc( size );
19f9c: e1a00006 mov r0, r6
19fa0: ebffa119 bl 240c <malloc>
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
19fa4: e5953004 ldr r3, [r5, #4]
if ( !new_area ) {
19fa8: e2507000 subs r7, r0, #0
* and the C Standard.
*/
new_area = malloc( size );
MSBUMP(malloc_calls, (uint32_t) -1); /* subtract off the malloc */
19fac: e2433001 sub r3, r3, #1
19fb0: e5853004 str r3, [r5, #4]
if ( !new_area ) {
19fb4: 0afffff0 beq 19f7c <realloc+0xc4>
return (void *) 0;
}
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
19fb8: e59d2000 ldr r2, [sp]
19fbc: e1a01004 mov r1, r4
19fc0: e1560002 cmp r6, r2
19fc4: 31a02006 movcc r2, r6
19fc8: ebffd2ca bl eaf8 <memcpy>
free( ptr );
19fcc: e1a00004 mov r0, r4
19fd0: ebffa034 bl 20a8 <free>
19fd4: e1a04007 mov r4, r7
return new_area;
19fd8: eaffffd3 b 19f2c <realloc+0x74>
0002a740 <rmdir>:
#include <rtems/seterr.h>
int rmdir(
const char *pathname
)
{
2a740: e92d40f0 push {r4, r5, r6, r7, lr}
2a744: e24dd030 sub sp, sp, #48 ; 0x30
2a748: e1a07000 mov r7, r0
/*
* Get the parent node of the node we wish to remove. Find the parent path.
*/
parentpathlen = rtems_filesystem_dirname ( pathname );
2a74c: ebff7518 bl 7bb4 <rtems_filesystem_dirname>
if ( parentpathlen == 0 )
2a750: e2505000 subs r5, r0, #0
2a754: 1a00005c bne 2a8cc <rmdir+0x18c>
rtems_filesystem_get_start_loc( pathname, &i, &parentloc );
2a758: e28d4018 add r4, sp, #24
2a75c: e1a00007 mov r0, r7
2a760: e28d102c add r1, sp, #44 ; 0x2c
2a764: e1a02004 mov r2, r4
2a768: ebff7bef bl 972c <rtems_filesystem_get_start_loc>
2a76c: e1a06005 mov r6, r5
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
2a770: e1a0e004 mov lr, r4
2a774: e8be000f ldm lr!, {r0, r1, r2, r3}
2a778: e28dc004 add ip, sp, #4
2a77c: e8ac000f stmia ip!, {r0, r1, r2, r3}
2a780: e59e3000 ldr r3, [lr]
name = pathname + parentpathlen;
2a784: e0875005 add r5, r7, r5
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
2a788: e58c3000 str r3, [ip]
name = pathname + parentpathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
2a78c: e1a00005 mov r0, r5
2a790: eb007d13 bl 49be4 <strlen>
2a794: e1a01000 mov r1, r0
2a798: e1a00005 mov r0, r5
2a79c: ebff74ef bl 7b60 <rtems_filesystem_prefix_separators>
2a7a0: e0857000 add r7, r5, r0
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
2a7a4: e1a00007 mov r0, r7
2a7a8: eb007d0d bl 49be4 <strlen>
2a7ac: e28d5004 add r5, sp, #4
2a7b0: e3a0c000 mov ip, #0
2a7b4: e1a01000 mov r1, r0
2a7b8: e1a0200c mov r2, ip
2a7bc: e1a00007 mov r0, r7
2a7c0: e1a03005 mov r3, r5
2a7c4: e58dc000 str ip, [sp]
2a7c8: ebff750a bl 7bf8 <rtems_filesystem_evaluate_relative_path>
0, &loc, false );
if ( result != 0 ) {
2a7cc: e3500000 cmp r0, #0
2a7d0: 1a00004a bne 2a900 <rmdir+0x1c0>
/*
* Verify you can remove this node as a directory.
*/
if ( !loc.ops->node_type_h ){
2a7d4: e59d2010 ldr r2, [sp, #16]
2a7d8: e5923010 ldr r3, [r2, #16]
2a7dc: e3530000 cmp r3, #0
2a7e0: 0a00006b beq 2a994 <rmdir+0x254>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
2a7e4: e1a00005 mov r0, r5
2a7e8: e1a0e00f mov lr, pc
2a7ec: e12fff13 bx r3
2a7f0: e3500001 cmp r0, #1
2a7f4: 1a00001d bne 2a870 <rmdir+0x130>
/*
* Use the filesystems rmnod to remove the node.
*/
if ( !loc.handlers->rmnod_h ){
2a7f8: e59d300c ldr r3, [sp, #12]
2a7fc: e5933034 ldr r3, [r3, #52] ; 0x34
2a800: e3530000 cmp r3, #0
2a804: 0a00004a beq 2a934 <rmdir+0x1f4>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
2a808: e1a00004 mov r0, r4
2a80c: e1a01005 mov r1, r5
2a810: e1a0e00f mov lr, pc
2a814: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
2a818: e59d3010 ldr r3, [sp, #16]
2a81c: e3530000 cmp r3, #0
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
2a820: e1a07000 mov r7, r0
rtems_filesystem_freenode( &loc );
2a824: 0a000004 beq 2a83c <rmdir+0xfc>
2a828: e593301c ldr r3, [r3, #28]
2a82c: e3530000 cmp r3, #0
2a830: 11a00005 movne r0, r5
2a834: 11a0e00f movne lr, pc
2a838: 112fff13 bxne r3
if ( free_parentloc )
2a83c: e3560000 cmp r6, #0
2a840: 0a000007 beq 2a864 <rmdir+0x124>
rtems_filesystem_freenode( &parentloc );
2a844: e59d3024 ldr r3, [sp, #36] ; 0x24
2a848: e3530000 cmp r3, #0
2a84c: 0a000004 beq 2a864 <rmdir+0x124>
2a850: e593301c ldr r3, [r3, #28]
2a854: e3530000 cmp r3, #0
2a858: 11a00004 movne r0, r4
2a85c: 11a0e00f movne lr, pc
2a860: 112fff13 bxne r3
return result;
}
2a864: e1a00007 mov r0, r7
2a868: e28dd030 add sp, sp, #48 ; 0x30
2a86c: e8bd80f0 pop {r4, r5, r6, r7, pc}
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
rtems_filesystem_freenode( &loc );
2a870: e59d3010 ldr r3, [sp, #16]
2a874: e3530000 cmp r3, #0
2a878: 0a000004 beq 2a890 <rmdir+0x150>
2a87c: e593301c ldr r3, [r3, #28]
2a880: e3530000 cmp r3, #0
2a884: 11a00005 movne r0, r5
2a888: 11a0e00f movne lr, pc
2a88c: 112fff13 bxne r3
if ( free_parentloc )
2a890: e3560000 cmp r6, #0
2a894: 0a000007 beq 2a8b8 <rmdir+0x178>
rtems_filesystem_freenode( &parentloc );
2a898: e59d3024 ldr r3, [sp, #36] ; 0x24
2a89c: e3530000 cmp r3, #0
2a8a0: 0a000004 beq 2a8b8 <rmdir+0x178>
2a8a4: e593301c ldr r3, [r3, #28]
2a8a8: e3530000 cmp r3, #0
2a8ac: 11a00004 movne r0, r4
2a8b0: 11a0e00f movne lr, pc
2a8b4: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( ENOTDIR );
2a8b8: eb0061cc bl 42ff0 <__errno>
2a8bc: e3a03014 mov r3, #20
2a8c0: e5803000 str r3, [r0]
2a8c4: e3e07000 mvn r7, #0
2a8c8: eaffffe5 b 2a864 <rmdir+0x124>
parentpathlen = rtems_filesystem_dirname ( pathname );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( pathname, &i, &parentloc );
else {
result = rtems_filesystem_evaluate_path(pathname, parentpathlen,
2a8cc: e28d4018 add r4, sp, #24
2a8d0: e3a0c000 mov ip, #0
2a8d4: e1a00007 mov r0, r7
2a8d8: e1a01005 mov r1, r5
2a8dc: e3a02002 mov r2, #2
2a8e0: e1a03004 mov r3, r4
2a8e4: e58dc000 str ip, [sp]
2a8e8: ebff74fe bl 7ce8 <rtems_filesystem_evaluate_path>
RTEMS_LIBIO_PERMS_WRITE,
&parentloc,
false );
if ( result != 0 )
2a8ec: e3500000 cmp r0, #0
2a8f0: 03a06001 moveq r6, #1
2a8f4: 0affff9d beq 2a770 <rmdir+0x30>
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
2a8f8: e3e07000 mvn r7, #0
2a8fc: eaffffd8 b 2a864 <rmdir+0x124>
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
2a900: e3560000 cmp r6, #0
2a904: 0afffffb beq 2a8f8 <rmdir+0x1b8>
rtems_filesystem_freenode( &parentloc );
2a908: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
2a90c: e3530000 cmp r3, #0 <== NOT EXECUTED
2a910: 0afffff8 beq 2a8f8 <rmdir+0x1b8> <== NOT EXECUTED
2a914: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2a918: e3530000 cmp r3, #0 <== NOT EXECUTED
2a91c: 0afffff5 beq 2a8f8 <rmdir+0x1b8> <== NOT EXECUTED
2a920: e1a00004 mov r0, r4 <== NOT EXECUTED
2a924: e1a0e00f mov lr, pc <== NOT EXECUTED
2a928: e12fff13 bx r3 <== NOT EXECUTED
2a92c: e3e07000 mvn r7, #0 <== NOT EXECUTED
2a930: eaffffcb b 2a864 <rmdir+0x124> <== NOT EXECUTED
/*
* Use the filesystems rmnod to remove the node.
*/
if ( !loc.handlers->rmnod_h ){
rtems_filesystem_freenode( &loc );
2a934: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
2a938: e3530000 cmp r3, #0 <== NOT EXECUTED
2a93c: 0a000005 beq 2a958 <rmdir+0x218> <== NOT EXECUTED
2a940: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2a944: e3530000 cmp r3, #0 <== NOT EXECUTED
2a948: 0a000002 beq 2a958 <rmdir+0x218> <== NOT EXECUTED
2a94c: e1a00005 mov r0, r5 <== NOT EXECUTED
2a950: e1a0e00f mov lr, pc <== NOT EXECUTED
2a954: e12fff13 bx r3 <== NOT EXECUTED
if ( free_parentloc )
2a958: e3560000 cmp r6, #0 <== NOT EXECUTED
2a95c: 0a000007 beq 2a980 <rmdir+0x240> <== NOT EXECUTED
rtems_filesystem_freenode( &parentloc );
2a960: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
2a964: e3530000 cmp r3, #0 <== NOT EXECUTED
2a968: 0a000004 beq 2a980 <rmdir+0x240> <== NOT EXECUTED
2a96c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2a970: e3530000 cmp r3, #0 <== NOT EXECUTED
2a974: 11a00004 movne r0, r4 <== NOT EXECUTED
2a978: 11a0e00f movne lr, pc <== NOT EXECUTED
2a97c: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2a980: eb00619a bl 42ff0 <__errno> <== NOT EXECUTED
2a984: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2a988: e5803000 str r3, [r0] <== NOT EXECUTED
2a98c: e3e07000 mvn r7, #0 <== NOT EXECUTED
2a990: eaffffb3 b 2a864 <rmdir+0x124> <== NOT EXECUTED
/*
* Verify you can remove this node as a directory.
*/
if ( !loc.ops->node_type_h ){
rtems_filesystem_freenode( &loc );
2a994: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
2a998: e3530000 cmp r3, #0 <== NOT EXECUTED
2a99c: 1affffea bne 2a94c <rmdir+0x20c> <== NOT EXECUTED
2a9a0: eaffffec b 2a958 <rmdir+0x218> <== NOT EXECUTED
000134f8 <rtems_assoc_name_bad>:
sprintf(bad_buffer, "< %" PRId32 "[0x%" PRIx32 " ] >", bad_value, bad_value);
#else
static char bad_buffer[40] = "<assocnamebad.c: : BAD NAME>";
#endif
return bad_buffer;
}
134f8: e59f0000 ldr r0, [pc, #0] ; 13500 <rtems_assoc_name_bad+0x8><== NOT EXECUTED
134fc: e12fff1e bx lr <== NOT EXECUTED
00010398 <rtems_assoc_name_by_local>:
const char *rtems_assoc_name_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
10398: e92d4010 push {r4, lr}
1039c: e1a04001 mov r4, r1
const rtems_assoc_t *nap;
nap = rtems_assoc_ptr_by_local(ap, local_value);
103a0: eb000006 bl 103c0 <rtems_assoc_ptr_by_local>
if (nap)
103a4: e3500000 cmp r0, #0
103a8: 0a000001 beq 103b4 <rtems_assoc_name_by_local+0x1c>
return nap->name;
return rtems_assoc_name_bad(local_value);
}
103ac: e5900000 ldr r0, [r0]
103b0: e8bd8010 pop {r4, pc}
nap = rtems_assoc_ptr_by_local(ap, local_value);
if (nap)
return nap->name;
return rtems_assoc_name_bad(local_value);
103b4: e1a00004 mov r0, r4 <== NOT EXECUTED
}
103b8: e8bd4010 pop {r4, lr} <== NOT EXECUTED
nap = rtems_assoc_ptr_by_local(ap, local_value);
if (nap)
return nap->name;
return rtems_assoc_name_bad(local_value);
103bc: ea000c4d b 134f8 <rtems_assoc_name_bad> <== NOT EXECUTED
0000e228 <rtems_assoc_ptr_by_local>:
const rtems_assoc_t *rtems_assoc_ptr_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
e228: e92d4030 push {r4, r5, lr}
e22c: e1a04000 mov r4, r0
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
e230: e5900000 ldr r0, [r0]
e234: e3500000 cmp r0, #0
const rtems_assoc_t *rtems_assoc_ptr_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
e238: e1a05001 mov r5, r1
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
e23c: 01a04000 moveq r4, r0
e240: 0a000013 beq e294 <rtems_assoc_ptr_by_local+0x6c>
e244: e59f105c ldr r1, [pc, #92] ; e2a8 <rtems_assoc_ptr_by_local+0x80>
e248: eb000345 bl ef64 <strcmp>
e24c: e3500000 cmp r0, #0
e250: 13a02000 movne r2, #0
e254: 1a00000b bne e288 <rtems_assoc_ptr_by_local+0x60>
default_ap = ap++;
for ( ; ap->name; ap++)
e258: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
e25c: e3530000 cmp r3, #0 <== NOT EXECUTED
)
{
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
e260: e284300c add r3, r4, #12 <== NOT EXECUTED
for ( ; ap->name; ap++)
e264: 0a00000a beq e294 <rtems_assoc_ptr_by_local+0x6c> <== NOT EXECUTED
e268: e1a02004 mov r2, r4 <== NOT EXECUTED
e26c: e1a04003 mov r4, r3 <== NOT EXECUTED
if (ap->local_value == local_value)
e270: e5943004 ldr r3, [r4, #4] <== NOT EXECUTED
e274: e1530005 cmp r3, r5 <== NOT EXECUTED
e278: 0a000005 beq e294 <rtems_assoc_ptr_by_local+0x6c> <== NOT EXECUTED
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
e27c: e5b4300c ldr r3, [r4, #12]!
e280: e3530000 cmp r3, #0
e284: 0a000004 beq e29c <rtems_assoc_ptr_by_local+0x74>
if (ap->local_value == local_value)
e288: e5943004 ldr r3, [r4, #4]
e28c: e1530005 cmp r3, r5
e290: 1afffff9 bne e27c <rtems_assoc_ptr_by_local+0x54>
return ap;
return default_ap;
}
e294: e1a00004 mov r0, r4
e298: e8bd8030 pop {r4, r5, pc}
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
e29c: e1a04002 mov r4, r2
if (ap->local_value == local_value)
return ap;
return default_ap;
}
e2a0: e1a00004 mov r0, r4
e2a4: e8bd8030 pop {r4, r5, pc}
0000da98 <rtems_assoc_ptr_by_remote>:
const rtems_assoc_t *rtems_assoc_ptr_by_remote(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
da98: e92d4030 push {r4, r5, lr}
da9c: e1a04000 mov r4, r0
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
daa0: e5900000 ldr r0, [r0]
daa4: e3500000 cmp r0, #0
const rtems_assoc_t *rtems_assoc_ptr_by_remote(
const rtems_assoc_t *ap,
uint32_t remote_value
)
{
daa8: e1a05001 mov r5, r1
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
daac: 01a04000 moveq r4, r0
dab0: 0a000013 beq db04 <rtems_assoc_ptr_by_remote+0x6c>
dab4: e59f105c ldr r1, [pc, #92] ; db18 <rtems_assoc_ptr_by_remote+0x80>
dab8: eb000529 bl ef64 <strcmp>
dabc: e3500000 cmp r0, #0
dac0: 13a02000 movne r2, #0
dac4: 1a00000b bne daf8 <rtems_assoc_ptr_by_remote+0x60>
default_ap = ap++;
for ( ; ap->name; ap++)
dac8: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
dacc: e3530000 cmp r3, #0 <== NOT EXECUTED
)
{
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
dad0: e284300c add r3, r4, #12 <== NOT EXECUTED
for ( ; ap->name; ap++)
dad4: 0a00000a beq db04 <rtems_assoc_ptr_by_remote+0x6c> <== NOT EXECUTED
dad8: e1a02004 mov r2, r4 <== NOT EXECUTED
dadc: e1a04003 mov r4, r3 <== NOT EXECUTED
if (ap->remote_value == remote_value)
dae0: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
dae4: e1530005 cmp r3, r5 <== NOT EXECUTED
dae8: 0a000005 beq db04 <rtems_assoc_ptr_by_remote+0x6c> <== NOT EXECUTED
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
daec: e5b4300c ldr r3, [r4, #12]!
daf0: e3530000 cmp r3, #0
daf4: 0a000004 beq db0c <rtems_assoc_ptr_by_remote+0x74>
if (ap->remote_value == remote_value)
daf8: e5943008 ldr r3, [r4, #8]
dafc: e1530005 cmp r3, r5
db00: 1afffff9 bne daec <rtems_assoc_ptr_by_remote+0x54>
return ap;
return default_ap;
}
db04: e1a00004 mov r0, r4
db08: e8bd8030 pop {r4, r5, pc}
const rtems_assoc_t *default_ap = 0;
if (rtems_assoc_is_default(ap))
default_ap = ap++;
for ( ; ap->name; ap++)
db0c: e1a04002 mov r4, r2
if (ap->remote_value == remote_value)
return ap;
return default_ap;
}
db10: e1a00004 mov r0, r4
db14: e8bd8030 pop {r4, r5, pc}
0000e214 <rtems_assoc_remote_by_local>:
uint32_t rtems_assoc_remote_by_local(
const rtems_assoc_t *ap,
uint32_t local_value
)
{
e214: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
const rtems_assoc_t *nap;
nap = rtems_assoc_ptr_by_local(ap, local_value);
e218: eb000002 bl e228 <rtems_assoc_ptr_by_local> <== NOT EXECUTED
if (nap)
e21c: e3500000 cmp r0, #0 <== NOT EXECUTED
return nap->remote_value;
e220: 15900008 ldrne r0, [r0, #8] <== NOT EXECUTED
return 0;
}
e224: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
0000aa4c <rtems_bdbuf_add_to_modified_list_after_access>:
}
}
static void
rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd)
{
aa4c: e92d4030 push {r4, r5, lr}
if (bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dev)
aa50: e59f50b8 ldr r5, [pc, #184] ; ab10 <rtems_bdbuf_add_to_modified_list_after_access+0xc4>
aa54: e5d53030 ldrb r3, [r5, #48] ; 0x30
aa58: e3530000 cmp r3, #0
}
}
static void
rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd)
{
aa5c: e1a04000 mov r4, r0
if (bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dev)
aa60: 0a000004 beq aa78 <rtems_bdbuf_add_to_modified_list_after_access+0x2c>
aa64: e2853038 add r3, r5, #56 ; 0x38 <== NOT EXECUTED
aa68: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
aa6c: e5901014 ldr r1, [r0, #20] <== NOT EXECUTED
aa70: e1510002 cmp r1, r2 <== NOT EXECUTED
aa74: 0a00001a beq aae4 <rtems_bdbuf_add_to_modified_list_after_access+0x98><== NOT EXECUTED
* nothing being written? We have tended to think we should hold changes for
* only a specific period of time even if still changing and get onto disk
* and letting the file system try and recover this position if it can.
*/
if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED
|| bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY)
aa78: e5943024 ldr r3, [r4, #36] ; 0x24
* difficult question. Is a snapshot of a block that is changing better than
* nothing being written? We have tended to think we should hold changes for
* only a specific period of time even if still changing and get onto disk
* and letting the file system try and recover this position if it can.
*/
if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED
aa7c: e3530003 cmp r3, #3
aa80: 0a000010 beq aac8 <rtems_bdbuf_add_to_modified_list_after_access+0x7c>
|| bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY)
aa84: e5943024 ldr r3, [r4, #36] ; 0x24
* difficult question. Is a snapshot of a block that is changing better than
* nothing being written? We have tended to think we should hold changes for
* only a specific period of time even if still changing and get onto disk
* and letting the file system try and recover this position if it can.
*/
if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED
aa88: e3530005 cmp r3, #5
aa8c: 0a00000d beq aac8 <rtems_bdbuf_add_to_modified_list_after_access+0x7c>
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
aa90: e59f5078 ldr r5, [pc, #120] ; ab10 <rtems_bdbuf_add_to_modified_list_after_access+0xc4>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
aa94: e3a03007 mov r3, #7
aa98: e5843024 str r3, [r4, #36] ; 0x24
aa9c: e2850050 add r0, r5, #80 ; 0x50
aaa0: e1a01004 mov r1, r4
aaa4: ebfff2bf bl 75a8 <_Chain_Append>
bd->hold_timer = bdbuf_config.swap_block_hold;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
aaa8: e5943028 ldr r3, [r4, #40] ; 0x28
aaac: e3530000 cmp r3, #0
aab0: 1a000008 bne aad8 <rtems_bdbuf_add_to_modified_list_after_access+0x8c>
}
static bool
rtems_bdbuf_has_buffer_waiters (void)
{
return bdbuf_cache.buffer_waiters.count;
aab4: e5953078 ldr r3, [r5, #120] ; 0x78
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
else if (rtems_bdbuf_has_buffer_waiters ())
aab8: e3530000 cmp r3, #0
aabc: 08bd8030 popeq {r4, r5, pc}
rtems_bdbuf_wake_swapper ();
}
aac0: e8bd4030 pop {r4, r5, lr}
rtems_chain_append (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
else if (rtems_bdbuf_has_buffer_waiters ())
rtems_bdbuf_wake_swapper ();
aac4: eaffffd5 b aa20 <rtems_bdbuf_wake_swapper>
* only a specific period of time even if still changing and get onto disk
* and letting the file system try and recover this position if it can.
*/
if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED
|| bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY)
bd->hold_timer = bdbuf_config.swap_block_hold;
aac8: e59f3044 ldr r3, [pc, #68] ; ab14 <rtems_bdbuf_add_to_modified_list_after_access+0xc8>
aacc: e5933010 ldr r3, [r3, #16]
aad0: e5843030 str r3, [r4, #48] ; 0x30
aad4: eaffffed b aa90 <rtems_bdbuf_add_to_modified_list_after_access+0x44>
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
aad8: e2850068 add r0, r5, #104 ; 0x68
else if (rtems_bdbuf_has_buffer_waiters ())
rtems_bdbuf_wake_swapper ();
}
aadc: e8bd4030 pop {r4, r5, lr}
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED);
rtems_chain_append (&bdbuf_cache.modified, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
aae0: eaffff00 b a6e8 <rtems_bdbuf_wake>
}
static void
rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd)
{
if (bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dev)
aae4: e5901018 ldr r1, [r0, #24] <== NOT EXECUTED
aae8: e1510003 cmp r1, r3 <== NOT EXECUTED
aaec: 1affffe1 bne aa78 <rtems_bdbuf_add_to_modified_list_after_access+0x2c><== NOT EXECUTED
{
rtems_bdbuf_unlock_cache ();
aaf0: ebffff71 bl a8bc <rtems_bdbuf_unlock_cache> <== NOT EXECUTED
* Lock the cache's sync. A single task can nest calls.
*/
static void
rtems_bdbuf_lock_sync (void)
{
rtems_bdbuf_lock (bdbuf_cache.sync_lock, RTEMS_BLKDEV_FATAL_BDBUF_SYNC_LOCK);
aaf4: e3a01442 mov r1, #1107296256 ; 0x42000000 <== NOT EXECUTED
aaf8: e595002c ldr r0, [r5, #44] ; 0x2c <== NOT EXECUTED
aafc: e281100b add r1, r1, #11 <== NOT EXECUTED
ab00: ebfffee9 bl a6ac <rtems_bdbuf_lock> <== NOT EXECUTED
/*
* Wait for the sync lock.
*/
rtems_bdbuf_lock_sync ();
rtems_bdbuf_unlock_sync ();
ab04: ebffff76 bl a8e4 <rtems_bdbuf_unlock_sync> <== NOT EXECUTED
rtems_bdbuf_lock_cache ();
ab08: ebfffef0 bl a6d0 <rtems_bdbuf_lock_cache> <== NOT EXECUTED
ab0c: eaffffd9 b aa78 <rtems_bdbuf_add_to_modified_list_after_access+0x2c><== NOT EXECUTED
0000ac84 <rtems_bdbuf_anonymous_wait>:
rtems_mode prev_mode;
/*
* Indicate we are waiting.
*/
++waiters->count;
ac84: e5903000 ldr r3, [r0]
ac88: e2833001 add r3, r3, #1
* The function assumes the cache is locked on entry and it will be locked on
* exit.
*/
static void
rtems_bdbuf_anonymous_wait (rtems_bdbuf_waiters *waiters)
{
ac8c: e92d4030 push {r4, r5, lr}
rtems_mode prev_mode;
/*
* Indicate we are waiting.
*/
++waiters->count;
ac90: e5803000 str r3, [r0]
* The function assumes the cache is locked on entry and it will be locked on
* exit.
*/
static void
rtems_bdbuf_anonymous_wait (rtems_bdbuf_waiters *waiters)
{
ac94: e1a04000 mov r4, r0
* blocking or just hits that window, and before this task has blocked on the
* semaphore. If the preempting task flushes the queue this task will not see
* the flush and may block for ever or until another transaction flushes this
* semaphore.
*/
prev_mode = rtems_bdbuf_disable_preemption ();
ac98: ebffffd9 bl ac04 <rtems_bdbuf_disable_preemption>
ac9c: e1a05000 mov r5, r0
/*
* Unlock the cache, wait, and lock the cache when we return.
*/
rtems_bdbuf_unlock_cache ();
aca0: ebffff05 bl a8bc <rtems_bdbuf_unlock_cache>
sc = rtems_semaphore_obtain (waiters->sema, RTEMS_WAIT, RTEMS_BDBUF_WAIT_TIMEOUT);
aca4: e3a01000 mov r1, #0
aca8: e5940004 ldr r0, [r4, #4]
acac: e1a02001 mov r2, r1
acb0: ebffef98 bl 6b18 <rtems_semaphore_obtain>
if (sc == RTEMS_TIMEOUT)
acb4: e3500006 cmp r0, #6
acb8: 0a000008 beq ace0 <rtems_bdbuf_anonymous_wait+0x5c>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_TO);
if (sc != RTEMS_UNSATISFIED)
acbc: e350000d cmp r0, #13
acc0: 1a000009 bne acec <rtems_bdbuf_anonymous_wait+0x68>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_2);
rtems_bdbuf_lock_cache ();
acc4: ebfffe81 bl a6d0 <rtems_bdbuf_lock_cache>
rtems_bdbuf_restore_preemption (prev_mode);
acc8: e1a00005 mov r0, r5
accc: ebffffdd bl ac48 <rtems_bdbuf_restore_preemption>
--waiters->count;
acd0: e5943000 ldr r3, [r4]
acd4: e2433001 sub r3, r3, #1
acd8: e5843000 str r3, [r4]
}
acdc: e8bd8030 pop {r4, r5, pc}
rtems_bdbuf_unlock_cache ();
sc = rtems_semaphore_obtain (waiters->sema, RTEMS_WAIT, RTEMS_BDBUF_WAIT_TIMEOUT);
if (sc == RTEMS_TIMEOUT)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_TO);
ace0: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
ace4: e2800012 add r0, r0, #18 <== NOT EXECUTED
ace8: ebfff102 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
if (sc != RTEMS_UNSATISFIED)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAIT_2);
acec: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
acf0: e2800010 add r0, r0, #16 <== NOT EXECUTED
acf4: ebfff0ff bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000ac04 <rtems_bdbuf_disable_preemption>:
--bd->group->users;
}
static rtems_mode
rtems_bdbuf_disable_preemption (void)
{
ac04: e52de004 push {lr} ; (str lr, [sp, #-4]!)
ac08: e24dd004 sub sp, sp, #4
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_mode prev_mode = 0;
ac0c: e28d2004 add r2, sp, #4
ac10: e3a03000 mov r3, #0
sc = rtems_task_mode (RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &prev_mode);
ac14: e3a00c01 mov r0, #256 ; 0x100
static rtems_mode
rtems_bdbuf_disable_preemption (void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_mode prev_mode = 0;
ac18: e5223004 str r3, [r2, #-4]!
sc = rtems_task_mode (RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &prev_mode);
ac1c: e1a01000 mov r1, r0
ac20: e1a0200d mov r2, sp
ac24: eb00124d bl f560 <rtems_task_mode>
if (sc != RTEMS_SUCCESSFUL)
ac28: e3500000 cmp r0, #0
ac2c: 1a000002 bne ac3c <rtems_bdbuf_disable_preemption+0x38>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_DIS);
return prev_mode;
}
ac30: e59d0000 ldr r0, [sp]
ac34: e28dd004 add sp, sp, #4
ac38: e8bd8000 pop {pc}
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_mode prev_mode = 0;
sc = rtems_task_mode (RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &prev_mode);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_DIS);
ac3c: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
ac40: e280000f add r0, r0, #15 <== NOT EXECUTED
ac44: ebfff12b bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000c78c <rtems_bdbuf_get>:
rtems_status_code
rtems_bdbuf_get (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c78c: e92d40f0 push {r4, r5, r6, r7, lr}
c790: e24dd014 sub sp, sp, #20
rtems_disk_device *dd = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c794: e28de00c add lr, sp, #12
rtems_bdbuf_get (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
c798: e3a0c000 mov ip, #0
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c79c: e58de000 str lr, [sp]
rtems_status_code
rtems_bdbuf_get (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c7a0: e1a07003 mov r7, r3
rtems_disk_device *dd = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c7a4: e28de008 add lr, sp, #8
c7a8: e28d3010 add r3, sp, #16
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
c7ac: e58dc008 str ip, [sp, #8]
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c7b0: e58de004 str lr, [sp, #4]
rtems_bdbuf_get (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
c7b4: e58dc010 str ip, [sp, #16]
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
c7b8: e58dc00c str ip, [sp, #12]
rtems_status_code
rtems_bdbuf_get (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c7bc: e1a05000 mov r5, r0
c7c0: e1a06001 mov r6, r1
rtems_disk_device *dd = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c7c4: ebfff850 bl a90c <rtems_bdbuf_obtain_disk>
if (sc != RTEMS_SUCCESSFUL)
c7c8: e2504000 subs r4, r0, #0
c7cc: 0a000002 beq c7dc <rtems_bdbuf_get+0x50>
rtems_bdbuf_release_disk (dd);
*bd_ptr = bd;
return RTEMS_SUCCESSFUL;
}
c7d0: e1a00004 mov r0, r4
c7d4: e28dd014 add sp, sp, #20
c7d8: e8bd80f0 pop {r4, r5, r6, r7, pc}
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
if (sc != RTEMS_SUCCESSFUL)
return sc;
rtems_bdbuf_lock_cache ();
c7dc: ebfff7bb bl a6d0 <rtems_bdbuf_lock_cache>
*/
if (rtems_bdbuf_tracer)
printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block, block, (unsigned) dev);
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c7e0: e1a00005 mov r0, r5
c7e4: e59d3008 ldr r3, [sp, #8]
c7e8: e1a01006 mov r1, r6
c7ec: e59d200c ldr r2, [sp, #12]
c7f0: ebffff53 bl c544 <rtems_bdbuf_get_buffer_for_access>
switch (bd->state)
c7f4: e5903024 ldr r3, [r0, #36] ; 0x24
c7f8: e3530002 cmp r3, #2
*/
if (rtems_bdbuf_tracer)
printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block, block, (unsigned) dev);
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c7fc: e1a05000 mov r5, r0
switch (bd->state)
c800: 0a00000f beq c844 <rtems_bdbuf_get+0xb8>
c804: e3530007 cmp r3, #7
c808: 0a000006 beq c828 <rtems_bdbuf_get+0x9c>
c80c: e3530001 cmp r3, #1
c810: 0a00000e beq c850 <rtems_bdbuf_get+0xc4>
* so just gets the block to fill.
*/
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_2);
c814: e5900024 ldr r0, [r0, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c818: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c81c: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c820: e380001e orr r0, r0, #30 <== NOT EXECUTED
c824: ebffea33 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c828: e3a03004 mov r3, #4
c82c: e5803024 str r3, [r0, #36] ; 0x24
{
rtems_bdbuf_show_users ("get", bd);
rtems_bdbuf_show_usage ();
}
rtems_bdbuf_unlock_cache ();
c830: ebfff821 bl a8bc <rtems_bdbuf_unlock_cache>
rtems_bdbuf_release_disk (dd);
c834: e59d0010 ldr r0, [sp, #16]
c838: ebfff871 bl aa04 <rtems_bdbuf_release_disk>
*bd_ptr = bd;
c83c: e5875000 str r5, [r7]
return RTEMS_SUCCESSFUL;
c840: eaffffe2 b c7d0 <rtems_bdbuf_get+0x44>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c844: e3a03003 mov r3, #3
c848: e5803024 str r3, [r0, #36] ; 0x24
switch (bd->state)
{
case RTEMS_BDBUF_STATE_CACHED:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED);
break;
c84c: eafffff7 b c830 <rtems_bdbuf_get+0xa4>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c850: e3a03005 mov r3, #5
c854: e5803024 str r3, [r0, #36] ; 0x24
case RTEMS_BDBUF_STATE_CACHED:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED);
break;
case RTEMS_BDBUF_STATE_EMPTY:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_EMPTY);
break;
c858: eafffff4 b c830 <rtems_bdbuf_get+0xa4>
0000c544 <rtems_bdbuf_get_buffer_for_access>:
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_for_access (dev_t dev,
rtems_blkdev_bnum block,
size_t bds_per_group)
{
c544: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
c548: e59f7220 ldr r7, [pc, #544] ; c770 <rtems_bdbuf_get_buffer_for_access+0x22c>
c54c: e1a04000 mov r4, r0
c550: e1a05001 mov r5, r1
c554: e1a06002 mov r6, r2
c558: e1a08003 mov r8, r3
static rtems_bdbuf_buffer *
rtems_bdbuf_avl_search (rtems_bdbuf_buffer** root,
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
c55c: e597a040 ldr sl, [r7, #64] ; 0x40
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c560: e35a0000 cmp sl, #0
c564: 0a000008 beq c58c <rtems_bdbuf_get_buffer_for_access+0x48>
c568: e59a3014 ldr r3, [sl, #20]
c56c: e1540003 cmp r4, r3
c570: e59a2018 ldr r2, [sl, #24]
c574: 0a000017 beq c5d8 <rtems_bdbuf_get_buffer_for_access+0x94>
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c578: e1550002 cmp r5, r2
c57c: 9a000010 bls c5c4 <rtems_bdbuf_get_buffer_for_access+0x80>
{
p = p->avl.right;
c580: e59aa00c ldr sl, [sl, #12]
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c584: e35a0000 cmp sl, #0
c588: 1afffff6 bne c568 <rtems_bdbuf_get_buffer_for_access+0x24>
bd = NULL;
}
}
else
{
bd = rtems_bdbuf_get_buffer_from_lru_list (dev, block, bds_per_group);
c58c: e1a00004 mov r0, r4
c590: e1a01005 mov r1, r5
c594: e1a02006 mov r2, r6
c598: e1a03008 mov r3, r8
c59c: ebfffeee bl c15c <rtems_bdbuf_get_buffer_from_lru_list>
if (bd == NULL)
c5a0: e250a000 subs sl, r0, #0
c5a4: 1a000017 bne c608 <rtems_bdbuf_get_buffer_for_access+0xc4>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
c5a8: e5972050 ldr r2, [r7, #80] ; 0x50
c5ac: e59f31c0 ldr r3, [pc, #448] ; c774 <rtems_bdbuf_get_buffer_for_access+0x230>
c5b0: e1520003 cmp r2, r3
static void
rtems_bdbuf_wait_for_buffer (void)
{
if (!rtems_chain_is_empty (&bdbuf_cache.modified))
rtems_bdbuf_wake_swapper ();
c5b4: 1bfff919 blne aa20 <rtems_bdbuf_wake_swapper>
rtems_bdbuf_anonymous_wait (&bdbuf_cache.buffer_waiters);
c5b8: e59f01b8 ldr r0, [pc, #440] ; c778 <rtems_bdbuf_get_buffer_for_access+0x234>
c5bc: ebfff9b0 bl ac84 <rtems_bdbuf_anonymous_wait>
c5c0: eaffffe5 b c55c <rtems_bdbuf_get_buffer_for_access+0x18>
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c5c4: 1a000001 bne c5d0 <rtems_bdbuf_get_buffer_for_access+0x8c>
c5c8: e1540003 cmp r4, r3
c5cc: 8affffeb bhi c580 <rtems_bdbuf_get_buffer_for_access+0x3c>
{
p = p->avl.right;
}
else
{
p = p->avl.left;
c5d0: e59aa008 ldr sl, [sl, #8]
c5d4: eaffffea b c584 <rtems_bdbuf_get_buffer_for_access+0x40>
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c5d8: e1550002 cmp r5, r2
c5dc: 1affffe5 bne c578 <rtems_bdbuf_get_buffer_for_access+0x34>
c5e0: e59a301c ldr r3, [sl, #28]
c5e4: e1560003 cmp r6, r3
c5e8: 0a000002 beq c5f8 <rtems_bdbuf_get_buffer_for_access+0xb4>
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c5ec: 8affffe3 bhi c580 <rtems_bdbuf_get_buffer_for_access+0x3c>
{
p = p->avl.right;
}
else
{
p = p->avl.left;
c5f0: e59aa008 ldr sl, [sl, #8]
c5f4: eaffffe2 b c584 <rtems_bdbuf_get_buffer_for_access+0x40>
{
bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dev, block);
if (bd != NULL)
{
if (bd->group->bds_per_group != bds_per_group)
c5f8: e59a302c ldr r3, [sl, #44] ; 0x2c
c5fc: e5933008 ldr r3, [r3, #8]
c600: e1530008 cmp r3, r8
c604: 1a000027 bne c6a8 <rtems_bdbuf_get_buffer_for_access+0x164>
static void
rtems_bdbuf_wait_for_access (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
c608: e59a3024 ldr r3, [sl, #36] ; 0x24
c60c: e2433001 sub r3, r3, #1
c610: e3530009 cmp r3, #9
c614: 979ff103 ldrls pc, [pc, r3, lsl #2]
c618: ea00001d b c694 <rtems_bdbuf_get_buffer_for_access+0x150> <== NOT EXECUTED
c61c: 0000c65c .word 0x0000c65c <== NOT EXECUTED
c620: 0000c654 .word 0x0000c654 <== NOT EXECUTED
c624: 0000c674 .word 0x0000c674 <== NOT EXECUTED
c628: 0000c674 .word 0x0000c674 <== NOT EXECUTED
c62c: 0000c674 .word 0x0000c674 <== NOT EXECUTED
c630: 0000c674 .word 0x0000c674 <== NOT EXECUTED
c634: 0000c644 .word 0x0000c644 <== NOT EXECUTED
c638: 0000c684 .word 0x0000c684 <== NOT EXECUTED
c63c: 0000c684 .word 0x0000c684 <== NOT EXECUTED
c640: 0000c684 .word 0x0000c684 <== NOT EXECUTED
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
c644: e59a302c ldr r3, [sl, #44] ; 0x2c
c648: e593200c ldr r2, [r3, #12]
c64c: e2422001 sub r2, r2, #1
c650: e583200c str r2, [r3, #12]
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
c654: e1a0000a mov r0, sl
c658: ebffebdd bl 75d4 <_Chain_Extract>
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
c65c: e59a302c ldr r3, [sl, #44] ; 0x2c
c660: e593200c ldr r2, [r3, #12]
c664: e2822001 add r2, r2, #1
c668: e583200c str r2, [r3, #12]
rtems_bdbuf_wait_for_access (bd);
rtems_bdbuf_group_obtain (bd);
return bd;
}
c66c: e1a0000a mov r0, sl
c670: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
return;
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters);
c674: e1a0000a mov r0, sl
c678: e59f10fc ldr r1, [pc, #252] ; c77c <rtems_bdbuf_get_buffer_for_access+0x238>
c67c: ebfff99d bl acf8 <rtems_bdbuf_wait>
c680: eaffffe0 b c608 <rtems_bdbuf_get_buffer_for_access+0xc4>
break;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
c684: e1a0000a mov r0, sl
c688: e59f10f0 ldr r1, [pc, #240] ; c780 <rtems_bdbuf_get_buffer_for_access+0x23c>
c68c: ebfff999 bl acf8 <rtems_bdbuf_wait>
c690: eaffffdc b c608 <rtems_bdbuf_get_buffer_for_access+0xc4>
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_7);
c694: e59a0024 ldr r0, [sl, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c698: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c69c: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c6a0: e3800005 orr r0, r0, #5 <== NOT EXECUTED
c6a4: ebffea93 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c6a8: e3a09008 mov r9, #8
static bool
rtems_bdbuf_wait_for_recycle (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
c6ac: e59a3024 ldr r3, [sl, #36] ; 0x24
c6b0: e353000a cmp r3, #10
c6b4: 979ff103 ldrls pc, [pc, r3, lsl #2]
c6b8: ea000027 b c75c <rtems_bdbuf_get_buffer_for_access+0x218> <== NOT EXECUTED
c6bc: 0000c734 .word 0x0000c734 <== NOT EXECUTED
c6c0: 0000c728 .word 0x0000c728 <== NOT EXECUTED
c6c4: 0000c728 .word 0x0000c728 <== NOT EXECUTED
c6c8: 0000c718 .word 0x0000c718 <== NOT EXECUTED
c6cc: 0000c718 .word 0x0000c718 <== NOT EXECUTED
c6d0: 0000c718 .word 0x0000c718 <== NOT EXECUTED
c6d4: 0000c718 .word 0x0000c718 <== NOT EXECUTED
c6d8: 0000c6f8 .word 0x0000c6f8 <== NOT EXECUTED
c6dc: 0000c6e8 .word 0x0000c6e8 <== NOT EXECUTED
c6e0: 0000c6e8 .word 0x0000c6e8 <== NOT EXECUTED
c6e4: 0000c6e8 .word 0x0000c6e8 <== NOT EXECUTED
rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters);
break;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
c6e8: e1a0000a mov r0, sl <== NOT EXECUTED
c6ec: e59f108c ldr r1, [pc, #140] ; c780 <rtems_bdbuf_get_buffer_for_access+0x23c><== NOT EXECUTED
c6f0: ebfff980 bl acf8 <rtems_bdbuf_wait> <== NOT EXECUTED
c6f4: eaffffec b c6ac <rtems_bdbuf_get_buffer_for_access+0x168> <== NOT EXECUTED
c6f8: e1a0000a mov r0, sl <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c6fc: e58a9024 str r9, [sl, #36] ; 0x24 <== NOT EXECUTED
c700: ebffebb3 bl 75d4 <_Chain_Extract> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
c704: e59f0078 ldr r0, [pc, #120] ; c784 <rtems_bdbuf_get_buffer_for_access+0x240><== NOT EXECUTED
c708: e1a0100a mov r1, sl <== NOT EXECUTED
c70c: ebffeba5 bl 75a8 <_Chain_Append> <== NOT EXECUTED
rtems_bdbuf_request_sync_for_modified_buffer (rtems_bdbuf_buffer *bd)
{
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC);
rtems_chain_extract (&bd->link);
rtems_chain_append (&bdbuf_cache.sync, &bd->link);
rtems_bdbuf_wake_swapper ();
c710: ebfff8c2 bl aa20 <rtems_bdbuf_wake_swapper> <== NOT EXECUTED
c714: eaffffe4 b c6ac <rtems_bdbuf_get_buffer_for_access+0x168> <== NOT EXECUTED
}
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters);
c718: e1a0000a mov r0, sl
c71c: e59f1058 ldr r1, [pc, #88] ; c77c <rtems_bdbuf_get_buffer_for_access+0x238>
c720: ebfff974 bl acf8 <rtems_bdbuf_wait>
c724: eaffffe0 b c6ac <rtems_bdbuf_get_buffer_for_access+0x168>
case RTEMS_BDBUF_STATE_MODIFIED:
rtems_bdbuf_request_sync_for_modified_buffer (bd);
break;
case RTEMS_BDBUF_STATE_CACHED:
case RTEMS_BDBUF_STATE_EMPTY:
if (bd->waiters == 0)
c728: e59a3028 ldr r3, [sl, #40] ; 0x28
c72c: e3530000 cmp r3, #0
c730: 1affffa0 bne c5b8 <rtems_bdbuf_get_buffer_for_access+0x74>
{
if (bd->group->bds_per_group != bds_per_group)
{
if (rtems_bdbuf_wait_for_recycle (bd))
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
c734: e1a0000a mov r0, sl <== NOT EXECUTED
c738: ebfffb64 bl b4d0 <rtems_bdbuf_remove_from_tree_and_lru_list><== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c73c: e3a03000 mov r3, #0 <== NOT EXECUTED
c740: e58a3024 str r3, [sl, #36] ; 0x24 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
c744: e1a0100a mov r1, sl <== NOT EXECUTED
c748: e59f0038 ldr r0, [pc, #56] ; c788 <rtems_bdbuf_get_buffer_for_access+0x244><== NOT EXECUTED
c74c: eb000cb1 bl fa18 <_Chain_Insert> <== NOT EXECUTED
{
if (rtems_bdbuf_wait_for_recycle (bd))
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
c750: e59f0020 ldr r0, [pc, #32] ; c778 <rtems_bdbuf_get_buffer_for_access+0x234><== NOT EXECUTED
c754: ebfff7e3 bl a6e8 <rtems_bdbuf_wake> <== NOT EXECUTED
c758: eaffff7f b c55c <rtems_bdbuf_get_buffer_for_access+0x18> <== NOT EXECUTED
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_8);
c75c: e59a0024 ldr r0, [sl, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c760: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c764: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c768: e3800006 orr r0, r0, #6 <== NOT EXECUTED
c76c: ebffea61 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000c15c <rtems_bdbuf_get_buffer_from_lru_list>:
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_from_lru_list (dev_t dev,
rtems_blkdev_bnum block,
size_t bds_per_group)
{
c15c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
c160: e59fc3cc ldr ip, [pc, #972] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
c164: e59c4044 ldr r4, [ip, #68] ; 0x44
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
c168: e59fc3c8 ldr ip, [pc, #968] ; c538 <rtems_bdbuf_get_buffer_from_lru_list+0x3dc>
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_from_lru_list (dev_t dev,
rtems_blkdev_bnum block,
size_t bds_per_group)
{
c16c: e24dd088 sub sp, sp, #136 ; 0x88
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
c170: e154000c cmp r4, ip
static rtems_bdbuf_buffer *
rtems_bdbuf_get_buffer_from_lru_list (dev_t dev,
rtems_blkdev_bnum block,
size_t bds_per_group)
{
c174: e58d0004 str r0, [sp, #4]
c178: e1a05001 mov r5, r1
c17c: e58d2000 str r2, [sp]
c180: e1a0b003 mov fp, r3
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
c184: 0a00003a beq c274 <rtems_bdbuf_get_buffer_from_lru_list+0x118>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c188: e3a09000 mov r9, #0
bd->group->bds_per_group, bds_per_group);
/*
* If nobody waits for this BD, we may recycle it.
*/
if (bd->waiters == 0)
c18c: e5943028 ldr r3, [r4, #40] ; 0x28
c190: e3530000 cmp r3, #0
c194: 1a000032 bne c264 <rtems_bdbuf_get_buffer_from_lru_list+0x108>
{
if (bd->group->bds_per_group == bds_per_group)
c198: e594802c ldr r8, [r4, #44] ; 0x2c
c19c: e5981008 ldr r1, [r8, #8]
c1a0: e151000b cmp r1, fp
c1a4: 0a000036 beq c284 <rtems_bdbuf_get_buffer_from_lru_list+0x128>
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
empty_bd = bd;
}
else if (bd->group->users == 0)
c1a8: e598a00c ldr sl, [r8, #12]
c1ac: e35a0000 cmp sl, #0
c1b0: 1a00002b bne c264 <rtems_bdbuf_get_buffer_from_lru_list+0x108>
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
c1b4: e5987010 ldr r7, [r8, #16]
if (rtems_bdbuf_tracer)
printf ("bdbuf:realloc: %tu: %zd -> %zd\n",
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
c1b8: e59f3374 ldr r3, [pc, #884] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
for (b = 0, bd = group->bdbuf;
c1bc: e3510000 cmp r1, #0
if (rtems_bdbuf_tracer)
printf ("bdbuf:realloc: %tu: %zd -> %zd\n",
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
c1c0: e5930020 ldr r0, [r3, #32]
for (b = 0, bd = group->bdbuf;
c1c4: e1a06007 mov r6, r7
c1c8: 0a00000c beq c200 <rtems_bdbuf_get_buffer_from_lru_list+0xa4>
c1cc: eb003d26 bl 1b66c <__aeabi_uidiv>
c1d0: e1a06100 lsl r6, r0, #2
c1d4: e0666300 rsb r6, r6, r0, lsl #6
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
c1d8: e1a00007 mov r0, r7
c1dc: ebfffcbb bl b4d0 <rtems_bdbuf_remove_from_tree_and_lru_list>
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
c1e0: e5983008 ldr r3, [r8, #8]
b < group->bds_per_group;
b++, bd += bufs_per_bd)
c1e4: e28aa001 add sl, sl, #1
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
c1e8: e15a0003 cmp sl, r3
b < group->bds_per_group;
b++, bd += bufs_per_bd)
c1ec: e0877006 add r7, r7, r6
group - bdbuf_cache.groups, group->bds_per_group,
new_bds_per_group);
bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group;
for (b = 0, bd = group->bdbuf;
c1f0: 3afffff8 bcc c1d8 <rtems_bdbuf_get_buffer_from_lru_list+0x7c>
c1f4: e59fc338 ldr ip, [pc, #824] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
c1f8: e5986010 ldr r6, [r8, #16]
c1fc: e59c0020 ldr r0, [ip, #32]
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
c200: e35b0001 cmp fp, #1
for (b = 0, bd = group->bdbuf;
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
c204: e588b008 str fp, [r8, #8]
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
c208: e1a02006 mov r2, r6
c20c: 9a000012 bls c25c <rtems_bdbuf_get_buffer_from_lru_list+0x100>
c210: e1a0100b mov r1, fp
c214: eb003d14 bl 1b66c <__aeabi_uidiv>
c218: e1a0a100 lsl sl, r0, #2
c21c: e06aa300 rsb sl, sl, r0, lsl #6
c220: e086600a add r6, r6, sl
c224: e3a07001 mov r7, #1
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c228: e5869024 str r9, [r6, #36] ; 0x24
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
c22c: e1a01006 mov r1, r6
c230: e59f0304 ldr r0, [pc, #772] ; c53c <rtems_bdbuf_get_buffer_from_lru_list+0x3e0>
c234: eb000df7 bl fa18 <_Chain_Insert>
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
c238: e5983008 ldr r3, [r8, #8]
b < group->bds_per_group;
b++, bd += bufs_per_bd)
c23c: e2877001 add r7, r7, #1
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
c240: e1570003 cmp r7, r3
b < group->bds_per_group;
b++, bd += bufs_per_bd)
c244: e086600a add r6, r6, sl
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
group->bds_per_group = new_bds_per_group;
bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group;
for (b = 1, bd = group->bdbuf + bufs_per_bd;
c248: 3afffff6 bcc c228 <rtems_bdbuf_get_buffer_from_lru_list+0xcc>
b < group->bds_per_group;
b++, bd += bufs_per_bd)
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
if (b > 1)
c24c: e3570001 cmp r7, #1
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
c250: 859f02e8 ldrhi r0, [pc, #744] ; c540 <rtems_bdbuf_get_buffer_from_lru_list+0x3e4>
c254: 8bfff923 blhi a6e8 <rtems_bdbuf_wake>
c258: e5982010 ldr r2, [r8, #16]
}
else if (bd->group->users == 0)
empty_bd = rtems_bdbuf_group_realloc (bd->group, bds_per_group);
}
if (empty_bd != NULL)
c25c: e3520000 cmp r2, #0
c260: 1a00000c bne c298 <rtems_bdbuf_get_buffer_from_lru_list+0x13c>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
c264: e5944000 ldr r4, [r4]
rtems_blkdev_bnum block,
size_t bds_per_group)
{
rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru);
while (!rtems_chain_is_tail (&bdbuf_cache.lru, node))
c268: e59f12c8 ldr r1, [pc, #712] ; c538 <rtems_bdbuf_get_buffer_from_lru_list+0x3dc>
c26c: e1540001 cmp r4, r1
c270: 1affffc5 bne c18c <rtems_bdbuf_get_buffer_from_lru_list+0x30>
c274: e3a02000 mov r2, #0
node = rtems_chain_next (node);
}
return NULL;
}
c278: e1a00002 mov r0, r2
c27c: e28dd088 add sp, sp, #136 ; 0x88
c280: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
*/
if (bd->waiters == 0)
{
if (bd->group->bds_per_group == bds_per_group)
{
rtems_bdbuf_remove_from_tree_and_lru_list (bd);
c284: e1a00004 mov r0, r4
c288: ebfffc90 bl b4d0 <rtems_bdbuf_remove_from_tree_and_lru_list>
c28c: e1a02004 mov r2, r4
}
else if (bd->group->users == 0)
empty_bd = rtems_bdbuf_group_realloc (bd->group, bds_per_group);
}
if (empty_bd != NULL)
c290: e3520000 cmp r2, #0
c294: 0afffff2 beq c264 <rtems_bdbuf_get_buffer_from_lru_list+0x108>
dev_t dev,
rtems_blkdev_bnum block)
{
bd->dev = dev;
bd->block = block;
bd->avl.left = NULL;
c298: e3a01000 mov r1, #0
c29c: e5821008 str r1, [r2, #8]
bd->avl.right = NULL;
c2a0: e582100c str r1, [r2, #12]
rtems_bdbuf_buffer* node)
{
dev_t dev = node->dev;
rtems_blkdev_bnum block = node->block;
rtems_bdbuf_buffer* p = *root;
c2a4: e59f0288 ldr r0, [pc, #648] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
c2a8: e5903040 ldr r3, [r0, #64] ; 0x40
{
bd->dev = dev;
bd->block = block;
bd->avl.left = NULL;
bd->avl.right = NULL;
bd->waiters = 0;
c2ac: e5821028 str r1, [r2, #40] ; 0x28
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
if (p == NULL)
c2b0: e1530001 cmp r3, r1
rtems_bdbuf_setup_empty_buffer (rtems_bdbuf_buffer *bd,
dev_t dev,
rtems_blkdev_bnum block)
{
bd->dev = dev;
bd->block = block;
c2b4: e59dc000 ldr ip, [sp]
static void
rtems_bdbuf_setup_empty_buffer (rtems_bdbuf_buffer *bd,
dev_t dev,
rtems_blkdev_bnum block)
{
bd->dev = dev;
c2b8: e59d1004 ldr r1, [sp, #4]
c2bc: e5825018 str r5, [r2, #24]
c2c0: e5821014 str r1, [r2, #20]
bd->block = block;
c2c4: e582c01c str ip, [r2, #28]
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
if (p == NULL)
c2c8: 0a000093 beq c51c <rtems_bdbuf_get_buffer_from_lru_list+0x3c0>
c2cc: e28d7008 add r7, sp, #8
c2d0: e1a0c007 mov ip, r7
break;
}
}
else if ((p->dev != dev) || (p->block != block))
{
p->avl.cache = -1;
c2d4: e3e08000 mvn r8, #0
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
{
p->avl.cache = 1;
c2d8: e3a06001 mov r6, #1
c2dc: e59da000 ldr sl, [sp]
c2e0: e1a04001 mov r4, r1
c2e4: ea00000a b c314 <rtems_bdbuf_get_buffer_from_lru_list+0x1b8>
while (p != NULL)
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c2e8: 1a000001 bne c2f4 <rtems_bdbuf_get_buffer_from_lru_list+0x198>
c2ec: e1540009 cmp r4, r9
c2f0: 8a00000d bhi c32c <rtems_bdbuf_get_buffer_from_lru_list+0x1d0>
c2f4: e1540009 cmp r4, r9
c2f8: 0a000059 beq c464 <rtems_bdbuf_get_buffer_from_lru_list+0x308>
}
}
else if ((p->dev != dev) || (p->block != block))
{
p->avl.cache = -1;
q = p->avl.left;
c2fc: e5930008 ldr r0, [r3, #8]
if (q == NULL)
c300: e3500000 cmp r0, #0
break;
}
}
else if ((p->dev != dev) || (p->block != block))
{
p->avl.cache = -1;
c304: e5c38010 strb r8, [r3, #16]
q = p->avl.left;
if (q == NULL)
c308: 0a000081 beq c514 <rtems_bdbuf_get_buffer_from_lru_list+0x3b8>
{
q = node;
p->avl.left = q;
c30c: e1a03000 mov r3, r0 <== NOT EXECUTED
c310: e1a0c001 mov ip, r1 <== NOT EXECUTED
while (p != NULL)
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c314: e5930018 ldr r0, [r3, #24]
return 0;
}
while (p != NULL)
{
*buf_prev++ = p;
c318: e1a0100c mov r1, ip
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c31c: e1550000 cmp r5, r0
return 0;
}
while (p != NULL)
{
*buf_prev++ = p;
c320: e4813004 str r3, [r1], #4
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c324: e5939014 ldr r9, [r3, #20]
c328: 9affffee bls c2e8 <rtems_bdbuf_get_buffer_from_lru_list+0x18c>
{
p->avl.cache = 1;
q = p->avl.right;
c32c: e593000c ldr r0, [r3, #12]
if (q == NULL)
c330: e3500000 cmp r0, #0
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
{
p->avl.cache = 1;
c334: e5c36010 strb r6, [r3, #16]
q = p->avl.right;
if (q == NULL)
c338: 1afffff3 bne c30c <rtems_bdbuf_get_buffer_from_lru_list+0x1b0>
{
q = node;
p->avl.right = q = node;
c33c: e583200c str r2, [r3, #12]
}
p = q;
}
q->avl.left = q->avl.right = NULL;
c340: e3a05000 mov r5, #0
c344: e582500c str r5, [r2, #12]
c348: e5825008 str r5, [r2, #8]
q->avl.bal = 0;
c34c: e5c25011 strb r5, [r2, #17]
c350: e1d301d0 ldrsb r0, [r3, #16]
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
p = p2;
}
p->avl.bal = 0;
c354: e3a06001 mov r6, #1
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
c358: e3e08000 mvn r8, #0
c35c: ea000015 b c3b8 <rtems_bdbuf_get_buffer_from_lru_list+0x25c>
break;
}
}
else
{
switch (p->avl.bal)
c360: e1d311d1 ldrsb r1, [r3, #17]
c364: e3510000 cmp r1, #0
p->avl.bal = 0;
modified = false;
break;
case 0:
p->avl.bal = 1;
c368: 05c36011 strbeq r6, [r3, #17]
c36c: 01a01003 moveq r1, r3
c370: 03a04001 moveq r4, #1
break;
}
}
else
{
switch (p->avl.bal)
c374: 0a000005 beq c390 <rtems_bdbuf_get_buffer_from_lru_list+0x234>
c378: e3510001 cmp r1, #1 <== NOT EXECUTED
c37c: 0a000045 beq c498 <rtems_bdbuf_get_buffer_from_lru_list+0x33c><== NOT EXECUTED
c380: e3710001 cmn r1, #1 <== NOT EXECUTED
c384: 0a00003f beq c488 <rtems_bdbuf_get_buffer_from_lru_list+0x32c><== NOT EXECUTED
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
p = p2;
}
p->avl.bal = 0;
c388: e1a01003 mov r1, r3 <== NOT EXECUTED
c38c: e3a04001 mov r4, #1 <== NOT EXECUTED
default:
break;
}
}
q = p;
if (buf_prev > buf_stack)
c390: e157000c cmp r7, ip
c394: 2a00002d bcs c450 <rtems_bdbuf_get_buffer_from_lru_list+0x2f4>
{
p = *--buf_prev;
c398: e51c3004 ldr r3, [ip, #-4] <== NOT EXECUTED
if (p->avl.cache == -1)
c39c: e1d301d0 ldrsb r0, [r3, #16] <== NOT EXECUTED
c3a0: e3700001 cmn r0, #1 <== NOT EXECUTED
{
p->avl.left = q;
c3a4: 05831008 streq r1, [r3, #8] <== NOT EXECUTED
}
else
{
p->avl.right = q;
c3a8: 1583100c strne r1, [r3, #12] <== NOT EXECUTED
q->avl.left = q->avl.right = NULL;
q->avl.bal = 0;
modified = true;
buf_prev--;
while (modified)
c3ac: e3540000 cmp r4, #0 <== NOT EXECUTED
p->avl.right = q;
}
}
else
{
*root = p;
c3b0: e24cc004 sub ip, ip, #4 <== NOT EXECUTED
q->avl.left = q->avl.right = NULL;
q->avl.bal = 0;
modified = true;
buf_prev--;
while (modified)
c3b4: 0a000027 beq c458 <rtems_bdbuf_get_buffer_from_lru_list+0x2fc><== NOT EXECUTED
{
if (p->avl.cache == -1)
c3b8: e3700001 cmn r0, #1
c3bc: 1affffe7 bne c360 <rtems_bdbuf_get_buffer_from_lru_list+0x204>
{
switch (p->avl.bal)
c3c0: e1d311d1 ldrsb r1, [r3, #17]
c3c4: e3510000 cmp r1, #0
p->avl.bal = 0;
modified = false;
break;
case 0:
p->avl.bal = -1;
c3c8: 05c30011 strbeq r0, [r3, #17]
c3cc: 01a01003 moveq r1, r3
c3d0: 03a04001 moveq r4, #1
while (modified)
{
if (p->avl.cache == -1)
{
switch (p->avl.bal)
c3d4: 0affffed beq c390 <rtems_bdbuf_get_buffer_from_lru_list+0x234>
c3d8: e3510001 cmp r1, #1 <== NOT EXECUTED
c3dc: 0a000029 beq c488 <rtems_bdbuf_get_buffer_from_lru_list+0x32c><== NOT EXECUTED
c3e0: e3710001 cmn r1, #1 <== NOT EXECUTED
c3e4: 1affffe7 bne c388 <rtems_bdbuf_get_buffer_from_lru_list+0x22c><== NOT EXECUTED
case 0:
p->avl.bal = -1;
break;
case -1:
p1 = p->avl.left;
c3e8: e5931008 ldr r1, [r3, #8] <== NOT EXECUTED
if (p1->avl.bal == -1) /* simple LL-turn */
c3ec: e1d101d1 ldrsb r0, [r1, #17] <== NOT EXECUTED
c3f0: e3700001 cmn r0, #1 <== NOT EXECUTED
c3f4: 0a000041 beq c500 <rtems_bdbuf_get_buffer_from_lru_list+0x3a4><== NOT EXECUTED
p->avl.bal = 0;
p = p1;
}
else /* double LR-turn */
{
p2 = p1->avl.right;
c3f8: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
p1->avl.right = p2->avl.left;
c3fc: e5904008 ldr r4, [r0, #8] <== NOT EXECUTED
p2->avl.left = p1;
p->avl.left = p2->avl.right;
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = +1; else p->avl.bal = 0;
c400: e1d0a1d1 ldrsb sl, [r0, #17] <== NOT EXECUTED
p = p1;
}
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
c404: e581400c str r4, [r1, #12] <== NOT EXECUTED
p2->avl.left = p1;
p->avl.left = p2->avl.right;
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = +1; else p->avl.bal = 0;
c408: e37a0001 cmn sl, #1 <== NOT EXECUTED
c40c: 05c36011 strbeq r6, [r3, #17] <== NOT EXECUTED
c410: 15c35011 strbne r5, [r3, #17] <== NOT EXECUTED
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
p->avl.left = p2->avl.right;
c414: e590400c ldr r4, [r0, #12] <== NOT EXECUTED
}
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
c418: e5801008 str r1, [r0, #8] <== NOT EXECUTED
p->avl.left = p2->avl.right;
p2->avl.right = p;
c41c: e580300c str r3, [r0, #12] <== NOT EXECUTED
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
p->avl.left = p2->avl.right;
c420: e5834008 str r4, [r3, #8] <== NOT EXECUTED
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = +1; else p->avl.bal = 0;
if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0;
c424: e1d031d1 ldrsb r3, [r0, #17] <== NOT EXECUTED
c428: e3530001 cmp r3, #1 <== NOT EXECUTED
c42c: 05c18011 strbeq r8, [r1, #17] <== NOT EXECUTED
c430: 01a01000 moveq r1, r0 <== NOT EXECUTED
c434: 0a000001 beq c440 <rtems_bdbuf_get_buffer_from_lru_list+0x2e4><== NOT EXECUTED
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
c438: e5c15011 strb r5, [r1, #17] <== NOT EXECUTED
c43c: e1a01000 mov r1, r0 <== NOT EXECUTED
default:
break;
}
}
q = p;
if (buf_prev > buf_stack)
c440: e157000c cmp r7, ip <== NOT EXECUTED
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
p = p2;
}
p->avl.bal = 0;
c444: e5c15011 strb r5, [r1, #17] <== NOT EXECUTED
c448: e3a04000 mov r4, #0 <== NOT EXECUTED
default:
break;
}
}
q = p;
if (buf_prev > buf_stack)
c44c: 3affffd1 bcc c398 <rtems_bdbuf_get_buffer_from_lru_list+0x23c><== NOT EXECUTED
p->avl.right = q;
}
}
else
{
*root = p;
c450: e59f00dc ldr r0, [pc, #220] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
c454: e5801040 str r1, [r0, #64] ; 0x40
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c458: e3a03001 mov r3, #1
c45c: e5823024 str r3, [r2, #36] ; 0x24
if (empty_bd != NULL)
{
rtems_bdbuf_setup_empty_buffer (empty_bd, dev, block);
return empty_bd;
c460: eaffff84 b c278 <rtems_bdbuf_get_buffer_from_lru_list+0x11c>
while (p != NULL)
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c464: e1550000 cmp r5, r0
c468: 1affffa3 bne c2fc <rtems_bdbuf_get_buffer_from_lru_list+0x1a0>
c46c: e593001c ldr r0, [r3, #28]
c470: e15a0000 cmp sl, r0
c474: 8affffac bhi c32c <rtems_bdbuf_get_buffer_from_lru_list+0x1d0>
q = node;
p->avl.right = q = node;
break;
}
}
else if ((p->dev != dev) || (p->block != block))
c478: 1affff9f bne c2fc <rtems_bdbuf_get_buffer_from_lru_list+0x1a0>
bd->avl.left = NULL;
bd->avl.right = NULL;
bd->waiters = 0;
if (rtems_bdbuf_avl_insert (&bdbuf_cache.tree, bd) != 0)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RECYCLE);
c47c: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c480: e280001b add r0, r0, #27 <== NOT EXECUTED
c484: ebffeb1b bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
else
{
switch (p->avl.bal)
{
case -1:
p->avl.bal = 0;
c488: e5c35011 strb r5, [r3, #17] <== NOT EXECUTED
c48c: e1a01003 mov r1, r3 <== NOT EXECUTED
c490: e3a04000 mov r4, #0 <== NOT EXECUTED
c494: eaffffbd b c390 <rtems_bdbuf_get_buffer_from_lru_list+0x234><== NOT EXECUTED
case 0:
p->avl.bal = 1;
break;
case 1:
p1 = p->avl.right;
c498: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
if (p1->avl.bal == 1) /* simple RR-turn */
c49c: e1d101d1 ldrsb r0, [r1, #17] <== NOT EXECUTED
c4a0: e3500001 cmp r0, #1 <== NOT EXECUTED
c4a4: 0a000010 beq c4ec <rtems_bdbuf_get_buffer_from_lru_list+0x390><== NOT EXECUTED
p->avl.bal = 0;
p = p1;
}
else /* double RL-turn */
{
p2 = p1->avl.left;
c4a8: e5910008 ldr r0, [r1, #8] <== NOT EXECUTED
p1->avl.left = p2->avl.right;
c4ac: e590400c ldr r4, [r0, #12] <== NOT EXECUTED
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
c4b0: e1d0a1d1 ldrsb sl, [r0, #17] <== NOT EXECUTED
p = p1;
}
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
c4b4: e5814008 str r4, [r1, #8] <== NOT EXECUTED
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
c4b8: e35a0001 cmp sl, #1 <== NOT EXECUTED
c4bc: 05c38011 strbeq r8, [r3, #17] <== NOT EXECUTED
c4c0: 15c35011 strbne r5, [r3, #17] <== NOT EXECUTED
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
c4c4: e5904008 ldr r4, [r0, #8] <== NOT EXECUTED
}
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
c4c8: e580100c str r1, [r0, #12] <== NOT EXECUTED
p->avl.right = p2->avl.left;
p2->avl.left = p;
c4cc: e5803008 str r3, [r0, #8] <== NOT EXECUTED
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
c4d0: e583400c str r4, [r3, #12] <== NOT EXECUTED
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0;
c4d4: e1d031d1 ldrsb r3, [r0, #17] <== NOT EXECUTED
c4d8: e3730001 cmn r3, #1 <== NOT EXECUTED
c4dc: 05c16011 strbeq r6, [r1, #17] <== NOT EXECUTED
c4e0: 01a01000 moveq r1, r0 <== NOT EXECUTED
c4e4: 1affffd3 bne c438 <rtems_bdbuf_get_buffer_from_lru_list+0x2dc><== NOT EXECUTED
c4e8: eaffffd4 b c440 <rtems_bdbuf_get_buffer_from_lru_list+0x2e4><== NOT EXECUTED
case 1:
p1 = p->avl.right;
if (p1->avl.bal == 1) /* simple RR-turn */
{
p->avl.right = p1->avl.left;
c4ec: e5910008 ldr r0, [r1, #8] <== NOT EXECUTED
p1->avl.left = p;
p->avl.bal = 0;
c4f0: e5c35011 strb r5, [r3, #17] <== NOT EXECUTED
case 1:
p1 = p->avl.right;
if (p1->avl.bal == 1) /* simple RR-turn */
{
p->avl.right = p1->avl.left;
c4f4: e583000c str r0, [r3, #12] <== NOT EXECUTED
p1->avl.left = p;
c4f8: e5813008 str r3, [r1, #8] <== NOT EXECUTED
c4fc: eaffffcf b c440 <rtems_bdbuf_get_buffer_from_lru_list+0x2e4><== NOT EXECUTED
case -1:
p1 = p->avl.left;
if (p1->avl.bal == -1) /* simple LL-turn */
{
p->avl.left = p1->avl.right;
c500: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
p1->avl.right = p;
p->avl.bal = 0;
c504: e5c35011 strb r5, [r3, #17] <== NOT EXECUTED
case -1:
p1 = p->avl.left;
if (p1->avl.bal == -1) /* simple LL-turn */
{
p->avl.left = p1->avl.right;
c508: e5830008 str r0, [r3, #8] <== NOT EXECUTED
p1->avl.right = p;
c50c: e581300c str r3, [r1, #12] <== NOT EXECUTED
c510: eaffffca b c440 <rtems_bdbuf_get_buffer_from_lru_list+0x2e4><== NOT EXECUTED
p->avl.cache = -1;
q = p->avl.left;
if (q == NULL)
{
q = node;
p->avl.left = q;
c514: e5832008 str r2, [r3, #8]
c518: eaffff88 b c340 <rtems_bdbuf_get_buffer_from_lru_list+0x1e4>
bool modified = false;
if (p == NULL)
{
*root = node;
c51c: e59f1010 ldr r1, [pc, #16] ; c534 <rtems_bdbuf_get_buffer_from_lru_list+0x3d8>
c520: e5812040 str r2, [r1, #64] ; 0x40
node->avl.left = NULL;
node->avl.right = NULL;
node->avl.bal = 0;
c524: e5c23011 strb r3, [r2, #17]
bool modified = false;
if (p == NULL)
{
*root = node;
node->avl.left = NULL;
c528: e5823008 str r3, [r2, #8]
node->avl.right = NULL;
c52c: e582300c str r3, [r2, #12]
c530: eaffffc8 b c458 <rtems_bdbuf_get_buffer_from_lru_list+0x2fc>
0000ad44 <rtems_bdbuf_init>:
*
* @return rtems_status_code The initialisation status.
*/
rtems_status_code
rtems_bdbuf_init (void)
{
ad44: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
rtems_mode prev_mode;
if (rtems_bdbuf_tracer)
printf ("bdbuf:init\n");
if (rtems_interrupt_is_in_progress())
ad48: e59f339c ldr r3, [pc, #924] ; b0ec <rtems_bdbuf_init+0x3a8>
ad4c: e5933000 ldr r3, [r3]
ad50: e3530000 cmp r3, #0
*
* @return rtems_status_code The initialisation status.
*/
rtems_status_code
rtems_bdbuf_init (void)
{
ad54: e24dd008 sub sp, sp, #8
rtems_mode prev_mode;
if (rtems_bdbuf_tracer)
printf ("bdbuf:init\n");
if (rtems_interrupt_is_in_progress())
ad58: 13a00012 movne r0, #18
ad5c: 1a000008 bne ad84 <rtems_bdbuf_init+0x40>
return RTEMS_CALLED_FROM_ISR;
/*
* Check the configuration table values.
*/
if ((bdbuf_config.buffer_max % bdbuf_config.buffer_min) != 0)
ad60: e59f5388 ldr r5, [pc, #904] ; b0f0 <rtems_bdbuf_init+0x3ac>
ad64: e2856020 add r6, r5, #32
ad68: e8960140 ldm r6, {r6, r8}
ad6c: e1a00008 mov r0, r8
ad70: e1a01006 mov r1, r6
ad74: eb004280 bl 1b77c <__umodsi3>
ad78: e3500000 cmp r0, #0
ad7c: 13a0000a movne r0, #10
ad80: 0a000001 beq ad8c <rtems_bdbuf_init+0x48>
}
bdbuf_cache.initialised = false;
return RTEMS_UNSATISFIED;
}
ad84: e28dd008 add sp, sp, #8
ad88: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
/*
* We use a special variable to manage the initialisation incase we have
* completing threads doing this. You may get errors if the another thread
* makes a call and we have not finished initialisation.
*/
prev_mode = rtems_bdbuf_disable_preemption ();
ad8c: ebffff9c bl ac04 <rtems_bdbuf_disable_preemption>
if (bdbuf_cache.initialised)
ad90: e59f435c ldr r4, [pc, #860] ; b0f4 <rtems_bdbuf_init+0x3b0>
ad94: e5d47088 ldrb r7, [r4, #136] ; 0x88
ad98: e3570000 cmp r7, #0
/*
* We use a special variable to manage the initialisation incase we have
* completing threads doing this. You may get errors if the another thread
* makes a call and we have not finished initialisation.
*/
prev_mode = rtems_bdbuf_disable_preemption ();
ad9c: e1a0a000 mov sl, r0
if (bdbuf_cache.initialised)
ada0: 0a000002 beq adb0 <rtems_bdbuf_init+0x6c>
{
rtems_bdbuf_restore_preemption (prev_mode);
ada4: ebffffa7 bl ac48 <rtems_bdbuf_restore_preemption> <== NOT EXECUTED
ada8: e3a0000c mov r0, #12 <== NOT EXECUTED
return RTEMS_RESOURCE_IN_USE;
adac: eafffff4 b ad84 <rtems_bdbuf_init+0x40> <== NOT EXECUTED
}
memset(&bdbuf_cache, 0, sizeof(bdbuf_cache));
adb0: e1a01007 mov r1, r7
adb4: e3a0208c mov r2, #140 ; 0x8c
adb8: e1a00004 mov r0, r4
adbc: eb001f54 bl 12b14 <memset>
bdbuf_cache.initialised = true;
rtems_bdbuf_restore_preemption (prev_mode);
adc0: e1a0000a mov r0, sl
rtems_bdbuf_restore_preemption (prev_mode);
return RTEMS_RESOURCE_IN_USE;
}
memset(&bdbuf_cache, 0, sizeof(bdbuf_cache));
bdbuf_cache.initialised = true;
adc4: e3a0a001 mov sl, #1
*/
cache_aligment = 32; /* FIXME rtems_cache_get_data_line_size() */
if (cache_aligment <= 0)
cache_aligment = CPU_ALIGNMENT;
bdbuf_cache.sync_device = BDBUF_INVALID_DEV;
adc8: e3e0b000 mvn fp, #0
rtems_bdbuf_restore_preemption (prev_mode);
return RTEMS_RESOURCE_IN_USE;
}
memset(&bdbuf_cache, 0, sizeof(bdbuf_cache));
bdbuf_cache.initialised = true;
adcc: e5c4a088 strb sl, [r4, #136] ; 0x88
rtems_bdbuf_restore_preemption (prev_mode);
add0: ebffff9c bl ac48 <rtems_bdbuf_restore_preemption>
*/
cache_aligment = 32; /* FIXME rtems_cache_get_data_line_size() */
if (cache_aligment <= 0)
cache_aligment = CPU_ALIGNMENT;
bdbuf_cache.sync_device = BDBUF_INVALID_DEV;
add4: e3e0c000 mvn ip, #0
add8: e584b038 str fp, [r4, #56] ; 0x38
addc: e584c03c str ip, [r4, #60] ; 0x3c
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
ade0: e59fc310 ldr ip, [pc, #784] ; b0f8 <rtems_bdbuf_init+0x3b4>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
ade4: e59fb310 ldr fp, [pc, #784] ; b0fc <rtems_bdbuf_init+0x3b8>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
ade8: e584c008 str ip, [r4, #8]
adec: e59fc30c ldr ip, [pc, #780] ; b100 <rtems_bdbuf_init+0x3bc>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
adf0: e584b04c str fp, [r4, #76] ; 0x4c
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
adf4: e584c050 str ip, [r4, #80] ; 0x50
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
adf8: e59fb304 ldr fp, [pc, #772] ; b104 <rtems_bdbuf_init+0x3c0>
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
adfc: e59fc304 ldr ip, [pc, #772] ; b108 <rtems_bdbuf_init+0x3c4>
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
ae00: e584b058 str fp, [r4, #88] ; 0x58
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
ae04: e584c05c str ip, [r4, #92] ; 0x5c
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
ae08: e59fb2fc ldr fp, [pc, #764] ; b10c <rtems_bdbuf_init+0x3c8>
rtems_chain_initialize_empty (&bdbuf_cache.sync);
/*
* Create the locks for the cache.
*/
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'l'),
ae0c: e59fc2fc ldr ip, [pc, #764] ; b110 <rtems_bdbuf_init+0x3cc>
ae10: e1a03007 mov r3, r7
ae14: e284e008 add lr, r4, #8
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
ae18: e2849048 add r9, r4, #72 ; 0x48
ae1c: e59f02f0 ldr r0, [pc, #752] ; b114 <rtems_bdbuf_init+0x3d0>
ae20: e1a0100a mov r1, sl
ae24: e3a02054 mov r2, #84 ; 0x54
the_chain->permanent_null = NULL;
ae28: e584700c str r7, [r4, #12]
ae2c: e5847048 str r7, [r4, #72] ; 0x48
ae30: e5847054 str r7, [r4, #84] ; 0x54
ae34: e5847060 str r7, [r4, #96] ; 0x60
the_chain->last = _Chain_Head(the_chain);
ae38: e584e010 str lr, [r4, #16]
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
ae3c: e5849044 str r9, [r4, #68] ; 0x44
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
ae40: e584b064 str fp, [r4, #100] ; 0x64
ae44: e58dc000 str ip, [sp]
ae48: ebffee97 bl 68ac <rtems_semaphore_create>
1, RTEMS_BDBUF_CACHE_LOCK_ATTRIBS, 0,
&bdbuf_cache.lock);
if (sc != RTEMS_SUCCESSFUL)
ae4c: e2507000 subs r7, r0, #0
ae50: 0a00001e beq aed0 <rtems_bdbuf_init+0x18c>
return RTEMS_SUCCESSFUL;
error:
if (bdbuf_cache.swapout != 0)
ae54: e5940000 ldr r0, [r4] <== NOT EXECUTED
ae58: e3500000 cmp r0, #0 <== NOT EXECUTED
ae5c: 1a000014 bne aeb4 <rtems_bdbuf_init+0x170> <== NOT EXECUTED
rtems_task_delete (bdbuf_cache.swapout);
free (bdbuf_cache.buffers);
ae60: e5940018 ldr r0, [r4, #24] <== NOT EXECUTED
ae64: ebffe0a5 bl 3100 <free> <== NOT EXECUTED
free (bdbuf_cache.groups);
ae68: e5940084 ldr r0, [r4, #132] ; 0x84 <== NOT EXECUTED
ae6c: ebffe0a3 bl 3100 <free> <== NOT EXECUTED
free (bdbuf_cache.bds);
ae70: e5940014 ldr r0, [r4, #20] <== NOT EXECUTED
ae74: ebffe0a1 bl 3100 <free> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.buffer_waiters.sema);
ae78: e594007c ldr r0, [r4, #124] ; 0x7c <== NOT EXECUTED
ae7c: ebffeefc bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.access_waiters.sema);
ae80: e594006c ldr r0, [r4, #108] ; 0x6c <== NOT EXECUTED
ae84: ebffeefa bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.transfer_waiters.sema);
ae88: e5940074 ldr r0, [r4, #116] ; 0x74 <== NOT EXECUTED
ae8c: ebffeef8 bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.sync_lock);
ae90: e594002c ldr r0, [r4, #44] ; 0x2c <== NOT EXECUTED
ae94: ebffeef6 bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
if (bdbuf_cache.lock != 0)
ae98: e5943028 ldr r3, [r4, #40] ; 0x28 <== NOT EXECUTED
ae9c: e3530000 cmp r3, #0 <== NOT EXECUTED
aea0: 1a000005 bne aebc <rtems_bdbuf_init+0x178> <== NOT EXECUTED
{
rtems_bdbuf_unlock_cache ();
rtems_semaphore_delete (bdbuf_cache.lock);
}
bdbuf_cache.initialised = false;
aea4: e3a03000 mov r3, #0 <== NOT EXECUTED
aea8: e5c43088 strb r3, [r4, #136] ; 0x88 <== NOT EXECUTED
aeac: e3a0000d mov r0, #13 <== NOT EXECUTED
return RTEMS_UNSATISFIED;
aeb0: eaffffb3 b ad84 <rtems_bdbuf_init+0x40> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
error:
if (bdbuf_cache.swapout != 0)
rtems_task_delete (bdbuf_cache.swapout);
aeb4: ebffefd7 bl 6e18 <rtems_task_delete> <== NOT EXECUTED
aeb8: eaffffe8 b ae60 <rtems_bdbuf_init+0x11c> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.transfer_waiters.sema);
rtems_semaphore_delete (bdbuf_cache.sync_lock);
if (bdbuf_cache.lock != 0)
{
rtems_bdbuf_unlock_cache ();
aebc: ebfffe7e bl a8bc <rtems_bdbuf_unlock_cache> <== NOT EXECUTED
rtems_semaphore_delete (bdbuf_cache.lock);
aec0: e59f322c ldr r3, [pc, #556] ; b0f4 <rtems_bdbuf_init+0x3b0><== NOT EXECUTED
aec4: e5930028 ldr r0, [r3, #40] ; 0x28 <== NOT EXECUTED
aec8: ebffeee9 bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
aecc: eafffff4 b aea4 <rtems_bdbuf_init+0x160> <== NOT EXECUTED
1, RTEMS_BDBUF_CACHE_LOCK_ATTRIBS, 0,
&bdbuf_cache.lock);
if (sc != RTEMS_SUCCESSFUL)
goto error;
rtems_bdbuf_lock_cache ();
aed0: ebfffdfe bl a6d0 <rtems_bdbuf_lock_cache>
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 's'),
aed4: e1a0100a mov r1, sl
aed8: e284c02c add ip, r4, #44 ; 0x2c
aedc: e1a03007 mov r3, r7
aee0: e59f0230 ldr r0, [pc, #560] ; b118 <rtems_bdbuf_init+0x3d4>
aee4: e3a02054 mov r2, #84 ; 0x54
aee8: e58dc000 str ip, [sp]
aeec: ebffee6e bl 68ac <rtems_semaphore_create>
1, RTEMS_BDBUF_CACHE_LOCK_ATTRIBS, 0,
&bdbuf_cache.sync_lock);
if (sc != RTEMS_SUCCESSFUL)
aef0: e2501000 subs r1, r0, #0
aef4: 1affffd6 bne ae54 <rtems_bdbuf_init+0x110>
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'a'),
aef8: e284c06c add ip, r4, #108 ; 0x6c
aefc: e1a03001 mov r3, r1
af00: e59f0214 ldr r0, [pc, #532] ; b11c <rtems_bdbuf_init+0x3d8>
af04: e3a02024 mov r2, #36 ; 0x24
af08: e58dc000 str ip, [sp]
af0c: ebffee66 bl 68ac <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.access_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
af10: e2501000 subs r1, r0, #0
af14: 1affffce bne ae54 <rtems_bdbuf_init+0x110>
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 't'),
af18: e284c074 add ip, r4, #116 ; 0x74
af1c: e1a03001 mov r3, r1
af20: e59f01f8 ldr r0, [pc, #504] ; b120 <rtems_bdbuf_init+0x3dc>
af24: e3a02024 mov r2, #36 ; 0x24
af28: e58dc000 str ip, [sp]
af2c: ebffee5e bl 68ac <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.transfer_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
af30: e2501000 subs r1, r0, #0
af34: 1affffc6 bne ae54 <rtems_bdbuf_init+0x110>
goto error;
sc = rtems_semaphore_create (rtems_build_name ('B', 'D', 'C', 'b'),
af38: e284c07c add ip, r4, #124 ; 0x7c
af3c: e59f01e0 ldr r0, [pc, #480] ; b124 <rtems_bdbuf_init+0x3e0>
af40: e3a02024 mov r2, #36 ; 0x24
af44: e1a03001 mov r3, r1
af48: e58dc000 str ip, [sp]
af4c: ebffee56 bl 68ac <rtems_semaphore_create>
0, RTEMS_BDBUF_CACHE_WAITER_ATTRIBS, 0,
&bdbuf_cache.buffer_waiters.sema);
if (sc != RTEMS_SUCCESSFUL)
af50: e3500000 cmp r0, #0
af54: 1affffbe bne ae54 <rtems_bdbuf_init+0x110>
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
af58: e595001c ldr r0, [r5, #28]
af5c: e1a01006 mov r1, r6
af60: eb0041c1 bl 1b66c <__aeabi_uidiv>
bdbuf_cache.max_bds_per_group =
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
af64: e1a01006 mov r1, r6
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
af68: e1a07000 mov r7, r0
bdbuf_cache.max_bds_per_group =
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
af6c: e1a00008 mov r0, r8
goto error;
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
af70: e584701c str r7, [r4, #28]
bdbuf_config.size / bdbuf_config.buffer_min;
bdbuf_cache.max_bds_per_group =
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
af74: eb0041bc bl 1b66c <__aeabi_uidiv>
af78: e1a03000 mov r3, r0
bdbuf_cache.group_count =
af7c: e1a01000 mov r1, r0
af80: e1a00007 mov r0, r7
/*
* Compute the various number of elements in the cache.
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
bdbuf_cache.max_bds_per_group =
af84: e5843020 str r3, [r4, #32]
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
bdbuf_cache.group_count =
af88: eb0041b7 bl 1b66c <__aeabi_uidiv>
bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.bds = calloc (sizeof (rtems_bdbuf_buffer),
af8c: e1a01007 mov r1, r7
*/
bdbuf_cache.buffer_min_count =
bdbuf_config.size / bdbuf_config.buffer_min;
bdbuf_cache.max_bds_per_group =
bdbuf_config.buffer_max / bdbuf_config.buffer_min;
bdbuf_cache.group_count =
af90: e5840080 str r0, [r4, #128] ; 0x80
bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.bds = calloc (sizeof (rtems_bdbuf_buffer),
af94: e3a0003c mov r0, #60 ; 0x3c
af98: ebffdfc2 bl 2ea8 <calloc>
bdbuf_cache.buffer_min_count);
if (!bdbuf_cache.bds)
af9c: e3500000 cmp r0, #0
bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.bds = calloc (sizeof (rtems_bdbuf_buffer),
afa0: e5840014 str r0, [r4, #20]
bdbuf_cache.buffer_min_count);
if (!bdbuf_cache.bds)
afa4: 0affffaa beq ae54 <rtems_bdbuf_init+0x110>
goto error;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.groups = calloc (sizeof (rtems_bdbuf_group),
afa8: e3a00014 mov r0, #20
afac: e5941080 ldr r1, [r4, #128] ; 0x80
afb0: ebffdfbc bl 2ea8 <calloc>
bdbuf_cache.group_count);
if (!bdbuf_cache.groups)
afb4: e3500000 cmp r0, #0
goto error;
/*
* Allocate the memory for the buffer descriptors.
*/
bdbuf_cache.groups = calloc (sizeof (rtems_bdbuf_group),
afb8: e5840084 str r0, [r4, #132] ; 0x84
bdbuf_cache.group_count);
if (!bdbuf_cache.groups)
afbc: 0affffa4 beq ae54 <rtems_bdbuf_init+0x110>
* aligned. It is possible to free the memory allocated by rtems_memalign()
* with free(). Return 0 if allocated.
*
* The memory allocate allows a
*/
if (rtems_memalign ((void **) &bdbuf_cache.buffers,
afc0: e594201c ldr r2, [r4, #28]
afc4: e59f7128 ldr r7, [pc, #296] ; b0f4 <rtems_bdbuf_init+0x3b0>
afc8: e0020296 mul r2, r6, r2
afcc: e2870018 add r0, r7, #24
afd0: e3a01020 mov r1, #32
afd4: eb001078 bl f1bc <rtems_memalign>
afd8: e3500000 cmp r0, #0
afdc: 1affff9c bne ae54 <rtems_bdbuf_init+0x110>
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
afe0: e5979084 ldr r9, [r7, #132] ; 0x84
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
afe4: e5978014 ldr r8, [r7, #20]
afe8: e5977018 ldr r7, [r7, #24]
afec: e1a0a000 mov sl, r0
/*
* The cache is empty after opening so we need to add all the buffers to it
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
aff0: e594301c ldr r3, [r4, #28]
aff4: e15a0003 cmp sl, r3
aff8: e59f30f4 ldr r3, [pc, #244] ; b0f4 <rtems_bdbuf_init+0x3b0>
affc: e1a01008 mov r1, r8
b000: e2830044 add r0, r3, #68 ; 0x44
b004: 2a000012 bcs b054 <rtems_bdbuf_init+0x310>
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
b < bdbuf_cache.buffer_min_count;
b++, bd++, buffer += bdbuf_config.buffer_min)
{
bd->dev = BDBUF_INVALID_DEV;
b008: e3e02000 mvn r2, #0
b00c: e3e03000 mvn r3, #0
b010: e5882014 str r2, [r8, #20]
b014: e5883018 str r3, [r8, #24]
bd->group = group;
b018: e588902c str r9, [r8, #44] ; 0x2c
bd->buffer = buffer;
b01c: e5887020 str r7, [r8, #32]
b020: ebfff160 bl 75a8 <_Chain_Append>
rtems_chain_append (&bdbuf_cache.lru, &bd->link);
if ((b % bdbuf_cache.max_bds_per_group) ==
b024: e59f30c8 ldr r3, [pc, #200] ; b0f4 <rtems_bdbuf_init+0x3b0>
b028: e593b020 ldr fp, [r3, #32]
b02c: e1a0000a mov r0, sl
b030: e1a0100b mov r1, fp
b034: eb0041d0 bl 1b77c <__umodsi3>
b038: e24bb001 sub fp, fp, #1
b03c: e150000b cmp r0, fp
(bdbuf_cache.max_bds_per_group - 1))
group++;
b040: 02899014 addeq r9, r9, #20
* and initialise the groups.
*/
for (b = 0, group = bdbuf_cache.groups,
bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers;
b < bdbuf_cache.buffer_min_count;
b++, bd++, buffer += bdbuf_config.buffer_min)
b044: e28aa001 add sl, sl, #1
b048: e288803c add r8, r8, #60 ; 0x3c
b04c: e0877006 add r7, r7, r6
b050: eaffffe6 b aff0 <rtems_bdbuf_init+0x2ac>
b < bdbuf_cache.group_count;
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
{
group->bds_per_group = bdbuf_cache.max_bds_per_group;
b054: e5930020 ldr r0, [r3, #32]
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b < bdbuf_cache.group_count;
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
b058: e3a0203c mov r2, #60 ; 0x3c
b05c: e00e0092 mul lr, r2, r0
group++;
}
for (b = 0,
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b060: e5931014 ldr r1, [r3, #20]
(bdbuf_cache.max_bds_per_group - 1))
group++;
}
for (b = 0,
group = bdbuf_cache.groups,
b064: e5932084 ldr r2, [r3, #132] ; 0x84
bd = bdbuf_cache.bds;
b068: e593c080 ldr ip, [r3, #128] ; 0x80
b < bdbuf_cache.group_count;
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
b06c: e3a03000 mov r3, #0
if ((b % bdbuf_cache.max_bds_per_group) ==
(bdbuf_cache.max_bds_per_group - 1))
group++;
}
for (b = 0,
b070: e153000c cmp r3, ip
b074: 2a000005 bcs b090 <rtems_bdbuf_init+0x34c>
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
{
group->bds_per_group = bdbuf_cache.max_bds_per_group;
group->bdbuf = bd;
b078: e5821010 str r1, [r2, #16]
b < bdbuf_cache.group_count;
b++,
group++,
bd += bdbuf_cache.max_bds_per_group)
{
group->bds_per_group = bdbuf_cache.max_bds_per_group;
b07c: e5820008 str r0, [r2, #8]
for (b = 0,
group = bdbuf_cache.groups,
bd = bdbuf_cache.bds;
b < bdbuf_cache.group_count;
b++,
b080: e2833001 add r3, r3, #1
group++,
b084: e2822014 add r2, r2, #20
bd += bdbuf_cache.max_bds_per_group)
b088: e081100e add r1, r1, lr
b08c: eafffff7 b b070 <rtems_bdbuf_init+0x32c>
* threads.
*/
bdbuf_cache.swapout_enabled = true;
sc = rtems_task_create (rtems_build_name('B', 'S', 'W', 'P'),
bdbuf_config.swapout_priority ?
b090: e5951008 ldr r1, [r5, #8]
/*
* Create and start swapout task. This task will create and manage the worker
* threads.
*/
bdbuf_cache.swapout_enabled = true;
b094: e3a0c001 mov ip, #1
sc = rtems_task_create (rtems_build_name('B', 'S', 'W', 'P'),
b098: e3510000 cmp r1, #0
b09c: 03a0100f moveq r1, #15
/*
* Create and start swapout task. This task will create and manage the worker
* threads.
*/
bdbuf_cache.swapout_enabled = true;
b0a0: e5c4c004 strb ip, [r4, #4]
sc = rtems_task_create (rtems_build_name('B', 'S', 'W', 'P'),
b0a4: e59f007c ldr r0, [pc, #124] ; b128 <rtems_bdbuf_init+0x3e4>
b0a8: e3a0c000 mov ip, #0
b0ac: e3a02a02 mov r2, #8192 ; 0x2000
b0b0: e3a03b01 mov r3, #1024 ; 0x400
b0b4: e58dc000 str ip, [sp]
b0b8: e58d4004 str r4, [sp, #4]
b0bc: ebffef07 bl 6ce0 <rtems_task_create>
RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT,
SWAPOUT_TASK_STACK_SIZE,
RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR,
RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT,
&bdbuf_cache.swapout);
if (sc != RTEMS_SUCCESSFUL)
b0c0: e3500000 cmp r0, #0
b0c4: 1affff62 bne ae54 <rtems_bdbuf_init+0x110>
goto error;
sc = rtems_task_start (bdbuf_cache.swapout,
b0c8: e5940000 ldr r0, [r4]
b0cc: e59f1058 ldr r1, [pc, #88] ; b12c <rtems_bdbuf_init+0x3e8>
b0d0: e1a02004 mov r2, r4
b0d4: ebffef93 bl 6f28 <rtems_task_start>
rtems_bdbuf_swapout_task,
(rtems_task_argument) &bdbuf_cache);
if (sc != RTEMS_SUCCESSFUL)
b0d8: e2505000 subs r5, r0, #0
b0dc: 1affff5c bne ae54 <rtems_bdbuf_init+0x110>
goto error;
rtems_bdbuf_unlock_cache ();
b0e0: ebfffdf5 bl a8bc <rtems_bdbuf_unlock_cache>
b0e4: e1a00005 mov r0, r5
return RTEMS_SUCCESSFUL;
b0e8: eaffff25 b ad84 <rtems_bdbuf_init+0x40>
0000a6ac <rtems_bdbuf_lock>:
* @param lock The mutex to lock.
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_lock (rtems_id lock, uint32_t fatal_error_code)
{
a6ac: e92d4010 push {r4, lr}
a6b0: e1a04001 mov r4, r1
rtems_status_code sc = rtems_semaphore_obtain (lock,
a6b4: e3a01000 mov r1, #0
a6b8: e1a02001 mov r2, r1
a6bc: ebfff115 bl 6b18 <rtems_semaphore_obtain>
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
a6c0: e3500000 cmp r0, #0
a6c4: 08bd8010 popeq {r4, pc}
rtems_fatal_error_occurred (fatal_error_code);
a6c8: e1a00004 mov r0, r4 <== NOT EXECUTED
a6cc: ebfff289 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000a90c <rtems_bdbuf_obtain_disk>:
rtems_bdbuf_obtain_disk (dev_t dev,
rtems_blkdev_bnum block,
rtems_disk_device **dd_ptr,
rtems_blkdev_bnum *media_block_ptr,
size_t *bds_per_group_ptr)
{
a90c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
rtems_disk_device *dd = NULL;
if (!bdbuf_cache.initialised)
a910: e59f50e4 ldr r5, [pc, #228] ; a9fc <rtems_bdbuf_obtain_disk+0xf0>
a914: e5d5c088 ldrb ip, [r5, #136] ; 0x88
a918: e35c0000 cmp ip, #0
rtems_bdbuf_obtain_disk (dev_t dev,
rtems_blkdev_bnum block,
rtems_disk_device **dd_ptr,
rtems_blkdev_bnum *media_block_ptr,
size_t *bds_per_group_ptr)
{
a91c: e1a08002 mov r8, r2
a920: e1a0a003 mov sl, r3
a924: e28d601c add r6, sp, #28
a928: e89600c0 ldm r6, {r6, r7}
rtems_disk_device *dd = NULL;
if (!bdbuf_cache.initialised)
a92c: 03a00016 moveq r0, #22
a930: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc}
return RTEMS_NOT_CONFIGURED;
/*
* Do not hold the cache lock when obtaining the disk table.
*/
dd = rtems_disk_obtain (dev);
a934: ebffddd5 bl 2090 <rtems_disk_obtain>
if (dd == NULL)
a938: e2504000 subs r4, r0, #0
a93c: 03a00004 moveq r0, #4
a940: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc}
return RTEMS_INVALID_ID;
*dd_ptr = dd;
if (media_block_ptr != NULL)
a944: e3560000 cmp r6, #0
*/
dd = rtems_disk_obtain (dev);
if (dd == NULL)
return RTEMS_INVALID_ID;
*dd_ptr = dd;
a948: e58a4000 str r4, [sl]
if (media_block_ptr != NULL)
a94c: 0a00000c beq a984 <rtems_bdbuf_obtain_disk+0x78>
static rtems_blkdev_bnum
rtems_bdbuf_media_block (rtems_blkdev_bnum block,
size_t block_size,
size_t media_block_size)
{
return (rtems_blkdev_bnum)
a950: e5940020 ldr r0, [r4, #32]
a954: e0832098 umull r2, r3, r8, r0
a958: e1a00002 mov r0, r2
a95c: e1a01003 mov r1, r3
a960: e5942024 ldr r2, [r4, #36] ; 0x24
a964: e3a03000 mov r3, #0
a968: eb00489c bl 1cbe0 <__udivdi3>
* the user.
*/
rtems_blkdev_bnum mb = rtems_bdbuf_media_block (block,
dd->block_size,
dd->media_block_size);
if (mb >= dd->size)
a96c: e594301c ldr r3, [r4, #28]
a970: e1530000 cmp r3, r0
a974: 9a00001c bls a9ec <rtems_bdbuf_obtain_disk+0xe0>
{
rtems_disk_release(dd);
return RTEMS_INVALID_NUMBER;
}
*media_block_ptr = mb + dd->start;
a978: e5943018 ldr r3, [r4, #24]
a97c: e0800003 add r0, r0, r3
a980: e5860000 str r0, [r6]
}
if (bds_per_group_ptr != NULL)
a984: e3570000 cmp r7, #0
a988: 01a00007 moveq r0, r7
a98c: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc}
rtems_bdbuf_bds_per_group (size_t size)
{
size_t bufs_per_size;
size_t bds_per_size;
if (size > bdbuf_config.buffer_max)
a990: e59f3068 ldr r3, [pc, #104] ; aa00 <rtems_bdbuf_obtain_disk+0xf4>
*media_block_ptr = mb + dd->start;
}
if (bds_per_group_ptr != NULL)
{
size_t bds_per_group = rtems_bdbuf_bds_per_group (dd->block_size);
a994: e5940020 ldr r0, [r4, #32]
rtems_bdbuf_bds_per_group (size_t size)
{
size_t bufs_per_size;
size_t bds_per_size;
if (size > bdbuf_config.buffer_max)
a998: e5932024 ldr r2, [r3, #36] ; 0x24
a99c: e1500002 cmp r0, r2
a9a0: 8a000011 bhi a9ec <rtems_bdbuf_obtain_disk+0xe0>
return 0;
bufs_per_size = ((size - 1) / bdbuf_config.buffer_min) + 1;
a9a4: e5931020 ldr r1, [r3, #32]
a9a8: e2400001 sub r0, r0, #1
a9ac: eb00432e bl 1b66c <__aeabi_uidiv>
a9b0: e2800001 add r0, r0, #1
for (bds_per_size = 1;
a9b4: e3500001 cmp r0, #1
a9b8: 93a01001 movls r1, #1
a9bc: 9a000003 bls a9d0 <rtems_bdbuf_obtain_disk+0xc4>
a9c0: e3a01001 mov r1, #1
bds_per_size < bufs_per_size;
bds_per_size <<= 1)
a9c4: e1a01081 lsl r1, r1, #1
if (size > bdbuf_config.buffer_max)
return 0;
bufs_per_size = ((size - 1) / bdbuf_config.buffer_min) + 1;
for (bds_per_size = 1;
a9c8: e1500001 cmp r0, r1
a9cc: 8afffffc bhi a9c4 <rtems_bdbuf_obtain_disk+0xb8>
bds_per_size < bufs_per_size;
bds_per_size <<= 1)
;
return bdbuf_cache.max_bds_per_group / bds_per_size;
a9d0: e5950020 ldr r0, [r5, #32]
a9d4: eb004324 bl 1b66c <__aeabi_uidiv>
if (bds_per_group_ptr != NULL)
{
size_t bds_per_group = rtems_bdbuf_bds_per_group (dd->block_size);
if (bds_per_group == 0)
a9d8: e3500000 cmp r0, #0
a9dc: 0a000002 beq a9ec <rtems_bdbuf_obtain_disk+0xe0>
{
rtems_disk_release (dd);
return RTEMS_INVALID_NUMBER;
}
*bds_per_group_ptr = bds_per_group;
a9e0: e5870000 str r0, [r7]
a9e4: e3a00000 mov r0, #0
}
return RTEMS_SUCCESSFUL;
}
a9e8: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
{
size_t bds_per_group = rtems_bdbuf_bds_per_group (dd->block_size);
if (bds_per_group == 0)
{
rtems_disk_release (dd);
a9ec: e1a00004 mov r0, r4 <== NOT EXECUTED
a9f0: ebffde3a bl 22e0 <rtems_disk_release> <== NOT EXECUTED
a9f4: e3a0000a mov r0, #10 <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
a9f8: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
0000b6fc <rtems_bdbuf_purge>:
}
}
static void
rtems_bdbuf_purge (rtems_bdbuf_purge_compare compare, dev_t dev)
{
b6fc: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
b700: e24dd08c sub sp, sp, #140 ; 0x8c
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
b704: e28d7080 add r7, sp, #128 ; 0x80
the_chain->permanent_null = NULL;
b708: e3a05000 mov r5, #0
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
b70c: e2873004 add r3, r7, #4
b710: e58d3080 str r3, [sp, #128] ; 0x80
b714: e1a06000 mov r6, r0
the_chain->permanent_null = NULL;
b718: e58d5084 str r5, [sp, #132] ; 0x84
the_chain->last = _Chain_Head(the_chain);
b71c: e58d7088 str r7, [sp, #136] ; 0x88
b720: e1a08001 mov r8, r1
b724: e1a09002 mov r9, r2
rtems_chain_control purge_list;
rtems_chain_initialize_empty (&purge_list);
rtems_bdbuf_lock_cache ();
b728: ebfffbe8 bl a6d0 <rtems_bdbuf_lock_cache>
rtems_bdbuf_purge_compare compare,
dev_t dev)
{
rtems_bdbuf_buffer *stack [RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
b72c: e59f3180 ldr r3, [pc, #384] ; b8b4 <rtems_bdbuf_purge+0x1b8>
b730: e5934040 ldr r4, [r3, #64] ; 0x40
*prev = NULL;
while (cur != NULL)
b734: e1540005 cmp r4, r5
{
rtems_bdbuf_buffer *stack [RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
*prev = NULL;
b738: e58d5000 str r5, [sp]
while (cur != NULL)
b73c: 0a000038 beq b824 <rtems_bdbuf_purge+0x128>
b740: e1a0500d mov r5, sp
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
b744: e3a0a006 mov sl, #6
b748: e3a0b00a mov fp, #10
*prev = NULL;
while (cur != NULL)
{
if ((*compare) (cur->dev, dev))
b74c: e2841014 add r1, r4, #20
b750: e8910003 ldm r1, {r0, r1}
b754: e1a02008 mov r2, r8
b758: e1a03009 mov r3, r9
b75c: e1a0e00f mov lr, pc
b760: e12fff16 bx r6
b764: e3500000 cmp r0, #0
b768: 0a00000f beq b7ac <rtems_bdbuf_purge+0xb0>
{
switch (cur->state)
b76c: e5943024 ldr r3, [r4, #36] ; 0x24
b770: e353000a cmp r3, #10
b774: 979ff103 ldrls pc, [pc, r3, lsl #2]
b778: ea00003b b b86c <rtems_bdbuf_purge+0x170> <== NOT EXECUTED
b77c: 0000b7ac .word 0x0000b7ac <== NOT EXECUTED
b780: 0000b7ac .word 0x0000b7ac <== NOT EXECUTED
b784: 0000b7e8 .word 0x0000b7e8 <== NOT EXECUTED
b788: 0000b864 .word 0x0000b864 <== NOT EXECUTED
b78c: 0000b864 .word 0x0000b864 <== NOT EXECUTED
b790: 0000b864 .word 0x0000b864 <== NOT EXECUTED
b794: 0000b7ac .word 0x0000b7ac <== NOT EXECUTED
b798: 0000b7d8 .word 0x0000b7d8 <== NOT EXECUTED
b79c: 0000b7d0 .word 0x0000b7d0 <== NOT EXECUTED
b7a0: 0000b7a8 .word 0x0000b7a8 <== NOT EXECUTED
b7a4: 0000b7ac .word 0x0000b7ac <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
b7a8: e584b024 str fp, [r4, #36] ; 0x24
default:
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_STATE_11);
}
}
if (cur->avl.left != NULL)
b7ac: e5943008 ldr r3, [r4, #8]
b7b0: e3530000 cmp r3, #0
b7b4: 0a000013 beq b808 <rtems_bdbuf_purge+0x10c>
{
/* Left */
++prev;
*prev = cur;
b7b8: e5a54004 str r4, [r5, #4]! <== NOT EXECUTED
cur = cur->avl.left;
b7bc: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
*prev = NULL;
while (cur != NULL)
b7c0: e3530000 cmp r3, #0 <== NOT EXECUTED
b7c4: 0a000016 beq b824 <rtems_bdbuf_purge+0x128> <== NOT EXECUTED
b7c8: e1a04003 mov r4, r3 <== NOT EXECUTED
b7cc: eaffffde b b74c <rtems_bdbuf_purge+0x50> <== NOT EXECUTED
case RTEMS_BDBUF_STATE_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
break;
case RTEMS_BDBUF_STATE_SYNC:
rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters);
b7d0: e59f00e0 ldr r0, [pc, #224] ; b8b8 <rtems_bdbuf_purge+0x1bc>
b7d4: ebfffbc3 bl a6e8 <rtems_bdbuf_wake>
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
b7d8: e594302c ldr r3, [r4, #44] ; 0x2c
b7dc: e593200c ldr r2, [r3, #12]
b7e0: e2422001 sub r2, r2, #1
b7e4: e583200c str r2, [r3, #12]
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
b7e8: e1a00004 mov r0, r4
b7ec: ebffef78 bl 75d4 <_Chain_Extract>
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
b7f0: e1a00007 mov r0, r7
b7f4: e1a01004 mov r1, r4
b7f8: ebffef6a bl 75a8 <_Chain_Append>
default:
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_STATE_11);
}
}
if (cur->avl.left != NULL)
b7fc: e5943008 ldr r3, [r4, #8]
b800: e3530000 cmp r3, #0
b804: 1affffeb bne b7b8 <rtems_bdbuf_purge+0xbc>
/* Left */
++prev;
*prev = cur;
cur = cur->avl.left;
}
else if (cur->avl.right != NULL)
b808: e594300c ldr r3, [r4, #12]
b80c: e3530000 cmp r3, #0
b810: 0a000018 beq b878 <rtems_bdbuf_purge+0x17c>
{
/* Right */
++prev;
*prev = cur;
b814: e5a54004 str r4, [r5, #4]! <== NOT EXECUTED
cur = cur->avl.right;
b818: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
rtems_bdbuf_buffer **prev = stack;
rtems_bdbuf_buffer *cur = bdbuf_cache.tree;
*prev = NULL;
while (cur != NULL)
b81c: e3530000 cmp r3, #0 <== NOT EXECUTED
b820: 1affffe8 bne b7c8 <rtems_bdbuf_purge+0xcc> <== NOT EXECUTED
b824: e3a04000 mov r4, #0
b828: ea000003 b b83c <rtems_bdbuf_purge+0x140>
while ((node = rtems_chain_get (purge_list)) != NULL)
{
rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node;
if (bd->waiters == 0)
b82c: e5933028 ldr r3, [r3, #40] ; 0x28
b830: e3530000 cmp r3, #0
b834: 03a04001 moveq r4, #1
wake_buffer_waiters = true;
rtems_bdbuf_discard_buffer (bd);
b838: ebffff34 bl b510 <rtems_bdbuf_discard_buffer>
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
b83c: e1a00007 mov r0, r7
b840: ebffef6c bl 75f8 <_Chain_Get>
rtems_bdbuf_purge_list (rtems_chain_control *purge_list)
{
bool wake_buffer_waiters = false;
rtems_chain_node *node = NULL;
while ((node = rtems_chain_get (purge_list)) != NULL)
b844: e2503000 subs r3, r0, #0
b848: 1afffff7 bne b82c <rtems_bdbuf_purge+0x130>
wake_buffer_waiters = true;
rtems_bdbuf_discard_buffer (bd);
}
if (wake_buffer_waiters)
b84c: e3540000 cmp r4, #0
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
b850: 159f0064 ldrne r0, [pc, #100] ; b8bc <rtems_bdbuf_purge+0x1c0>
b854: 1bfffba3 blne a6e8 <rtems_bdbuf_wake>
rtems_chain_initialize_empty (&purge_list);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_gather_for_purge (&purge_list, compare, dev);
rtems_bdbuf_purge_list (&purge_list);
rtems_bdbuf_unlock_cache ();
b858: ebfffc17 bl a8bc <rtems_bdbuf_unlock_cache>
}
b85c: e28dd08c add sp, sp, #140 ; 0x8c
b860: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
b864: e584a024 str sl, [r4, #36] ; 0x24
b868: eaffffcf b b7ac <rtems_bdbuf_purge+0xb0>
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_set_state (cur, RTEMS_BDBUF_STATE_ACCESS_PURGED);
break;
default:
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_STATE_11);
b86c: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b870: e2800001 add r0, r0, #1 <== NOT EXECUTED
b874: ebffee1f bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
*prev = cur;
cur = cur->avl.right;
}
else
{
while (*prev != NULL && cur == (*prev)->avl.right)
b878: e5951000 ldr r1, [r5]
b87c: e3510000 cmp r1, #0
b880: 0affffe7 beq b824 <rtems_bdbuf_purge+0x128>
b884: e591300c ldr r3, [r1, #12] <== NOT EXECUTED
b888: e1540003 cmp r4, r3 <== NOT EXECUTED
b88c: 0a000004 beq b8a4 <rtems_bdbuf_purge+0x1a8> <== NOT EXECUTED
b890: eaffffca b b7c0 <rtems_bdbuf_purge+0xc4> <== NOT EXECUTED
b894: e592300c ldr r3, [r2, #12] <== NOT EXECUTED
b898: e1530001 cmp r3, r1 <== NOT EXECUTED
b89c: 1affffc7 bne b7c0 <rtems_bdbuf_purge+0xc4> <== NOT EXECUTED
else if (cur->avl.right != NULL)
{
/* Right */
++prev;
*prev = cur;
cur = cur->avl.right;
b8a0: e1a01002 mov r1, r2 <== NOT EXECUTED
}
else
{
while (*prev != NULL && cur == (*prev)->avl.right)
b8a4: e5352004 ldr r2, [r5, #-4]! <== NOT EXECUTED
b8a8: e3520000 cmp r2, #0 <== NOT EXECUTED
b8ac: 1afffff8 bne b894 <rtems_bdbuf_purge+0x198> <== NOT EXECUTED
b8b0: eaffffdb b b824 <rtems_bdbuf_purge+0x128> <== NOT EXECUTED
0000a678 <rtems_bdbuf_purge_compare_dev>:
rtems_bdbuf_unlock_cache ();
}
static bool
rtems_bdbuf_purge_compare_dev (dev_t a, dev_t b)
{
a678: e1500002 cmp r0, r2
a67c: e3a00000 mov r0, #0
a680: 0a000001 beq a68c <rtems_bdbuf_purge_compare_dev+0x14>
return a == b;
}
a684: e2000001 and r0, r0, #1 <== NOT EXECUTED
a688: e12fff1e bx lr <== NOT EXECUTED
rtems_bdbuf_unlock_cache ();
}
static bool
rtems_bdbuf_purge_compare_dev (dev_t a, dev_t b)
{
a68c: e1510003 cmp r1, r3
a690: 03a00001 moveq r0, #1
return a == b;
}
a694: e2000001 and r0, r0, #1
a698: e12fff1e bx lr
0000a69c <rtems_bdbuf_purge_compare_major>:
static bool
rtems_bdbuf_purge_compare_major (dev_t a, dev_t b)
{
return rtems_filesystem_dev_major_t (a) == rtems_filesystem_dev_major_t (b);
}
a69c: e1500002 cmp r0, r2 <== NOT EXECUTED
a6a0: 13a00000 movne r0, #0 <== NOT EXECUTED
a6a4: 03a00001 moveq r0, #1 <== NOT EXECUTED
a6a8: e12fff1e bx lr <== NOT EXECUTED
0000b8c0 <rtems_bdbuf_purge_major>:
return rtems_filesystem_dev_major_t (a) == rtems_filesystem_dev_major_t (b);
}
void
rtems_bdbuf_purge_major (rtems_device_major_number major)
{
b8c0: e1a01000 mov r1, r0 <== NOT EXECUTED
dev_t dev = rtems_filesystem_make_dev_t (major, 0);
rtems_bdbuf_purge (rtems_bdbuf_purge_compare_major, dev);
b8c4: e59f0004 ldr r0, [pc, #4] ; b8d0 <rtems_bdbuf_purge_major+0x10><== NOT EXECUTED
b8c8: e3a02000 mov r2, #0 <== NOT EXECUTED
b8cc: eaffff8a b b6fc <rtems_bdbuf_purge> <== NOT EXECUTED
0000c85c <rtems_bdbuf_read>:
rtems_status_code
rtems_bdbuf_read (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c85c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
c860: e28db020 add fp, sp, #32
rtems_blkdev_request *req = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c864: e24be028 sub lr, fp, #40 ; 0x28
rtems_status_code
rtems_bdbuf_read (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c868: e24dd02c sub sp, sp, #44 ; 0x2c
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
c86c: e3a0c000 mov ip, #0
rtems_status_code
rtems_bdbuf_read (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
c870: e50b3034 str r3, [fp, #-52] ; 0x34
rtems_blkdev_request *req = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c874: e58de000 str lr, [sp]
c878: e24b3024 sub r3, fp, #36 ; 0x24
c87c: e24be02c sub lr, fp, #44 ; 0x2c
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
rtems_blkdev_request *req = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
size_t bds_per_group = 0;
c880: e50bc02c str ip, [fp, #-44] ; 0x2c
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c884: e58de004 str lr, [sp, #4]
rtems_bdbuf_read (dev_t dev,
rtems_blkdev_bnum block,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
c888: e50bc024 str ip, [fp, #-36] ; 0x24
rtems_blkdev_request *req = NULL;
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block = 0;
c88c: e50bc028 str ip, [fp, #-40] ; 0x28
size_t bds_per_group = 0;
sc = rtems_bdbuf_obtain_disk (dev, block, &dd, &media_block, &bds_per_group);
c890: ebfff81d bl a90c <rtems_bdbuf_obtain_disk>
if (sc != RTEMS_SUCCESSFUL)
c894: e2508000 subs r8, r0, #0
c898: 11a04008 movne r4, r8
c89c: 0a000002 beq c8ac <rtems_bdbuf_read+0x50>
rtems_bdbuf_unlock_cache ();
rtems_bdbuf_release_disk (dd);
return sc;
}
c8a0: e1a00004 mov r0, r4
c8a4: e24bd020 sub sp, fp, #32
c8a8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
/*
* TODO: This type of request structure is wrong and should be removed.
*/
#define bdbuf_alloc(size) __builtin_alloca (size)
req = bdbuf_alloc (sizeof (rtems_blkdev_request) +
c8ac: e59f32b4 ldr r3, [pc, #692] ; cb68 <rtems_bdbuf_read+0x30c>
c8b0: e5933000 ldr r3, [r3]
c8b4: e2833001 add r3, r3, #1
c8b8: e50b3030 str r3, [fp, #-48] ; 0x30
c8bc: e1a03203 lsl r3, r3, #4
c8c0: e283301c add r3, r3, #28
c8c4: e04dd003 sub sp, sp, r3
if (rtems_bdbuf_tracer)
printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block + dd->start, block, (unsigned) dev);
rtems_bdbuf_lock_cache ();
c8c8: ebfff780 bl a6d0 <rtems_bdbuf_lock_cache>
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
c8cc: e51b9024 ldr r9, [fp, #-36] ; 0x24
rtems_blkdev_request *req,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
rtems_blkdev_bnum media_block_count = dd->block_size / dd->media_block_size;
c8d0: e599c020 ldr ip, [r9, #32]
c8d4: e5991024 ldr r1, [r9, #36] ; 0x24
c8d8: e1a0000c mov r0, ip
c8dc: e50bc044 str ip, [fp, #-68] ; 0x44
c8e0: eb003b61 bl 1b66c <__aeabi_uidiv>
size_t bds_per_group,
rtems_blkdev_request *req,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
c8e4: e5992018 ldr r2, [r9, #24]
if (media_block_end - media_block < transfer_count)
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
c8e8: e59f327c ldr r3, [pc, #636] ; cb6c <rtems_bdbuf_read+0x310>
if (rtems_bdbuf_tracer)
printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block + dd->start, block, (unsigned) dev);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
c8ec: e51b102c ldr r1, [fp, #-44] ; 0x2c
/*
* TODO: This type of request structure is wrong and should be removed.
*/
#define bdbuf_alloc(size) __builtin_alloca (size)
req = bdbuf_alloc (sizeof (rtems_blkdev_request) +
c8f0: e28d7008 add r7, sp, #8
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
rtems_blkdev_bnum media_block_count = dd->block_size / dd->media_block_size;
dev_t dev = dd->dev;
c8f4: e5995004 ldr r5, [r9, #4]
if (rtems_bdbuf_tracer)
printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block + dd->start, block, (unsigned) dev);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
c8f8: e51b6028 ldr r6, [fp, #-40] ; 0x28
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
rtems_blkdev_bnum media_block_count = dd->block_size / dd->media_block_size;
dev_t dev = dd->dev;
c8fc: e5994000 ldr r4, [r9]
if (media_block_end - media_block < transfer_count)
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
c900: e5873004 str r3, [r7, #4]
uint32_t transfer_count = bdbuf_config.max_read_ahead_blocks + 1;
if (media_block_end - media_block < transfer_count)
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
c904: e5878000 str r8, [r7]
if (rtems_bdbuf_tracer)
printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",
media_block + dd->start, block, (unsigned) dev);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
c908: e50b103c str r1, [fp, #-60] ; 0x3c
size_t bds_per_group,
rtems_blkdev_request *req,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
c90c: e50b2038 str r2, [fp, #-56] ; 0x38
rtems_blkdev_bnum media_block_count = dd->block_size / dd->media_block_size;
c910: e1a0a000 mov sl, r0
if (media_block_end - media_block < transfer_count)
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
c914: e5877008 str r7, [r7, #8]
size_t bds_per_group,
rtems_blkdev_request *req,
rtems_bdbuf_buffer **bd_ptr)
{
rtems_bdbuf_buffer *bd = NULL;
rtems_blkdev_bnum media_block_end = dd->start + dd->size;
c918: e599901c ldr r9, [r9, #28]
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
req->io_task = rtems_task_self ();
c91c: eb000b68 bl f6c4 <rtems_task_self>
req->status = RTEMS_RESOURCE_IN_USE;
req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c920: e1a02006 mov r2, r6
transfer_count = media_block_end - media_block;
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
req->io_task = rtems_task_self ();
c924: e5870014 str r0, [r7, #20]
req->status = RTEMS_RESOURCE_IN_USE;
req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c928: e51b303c ldr r3, [fp, #-60] ; 0x3c
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
req->io_task = rtems_task_self ();
req->status = RTEMS_RESOURCE_IN_USE;
c92c: e3a0e00c mov lr, #12
req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c930: e1a00004 mov r0, r4
c934: e1a01005 mov r1, r5
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
req->io_task = rtems_task_self ();
req->status = RTEMS_RESOURCE_IN_USE;
req->bufnum = 0;
c938: e5878010 str r8, [r7, #16]
req->req = RTEMS_BLKDEV_REQ_READ;
req->req_done = rtems_bdbuf_transfer_done;
req->done_arg = req;
req->io_task = rtems_task_self ();
req->status = RTEMS_RESOURCE_IN_USE;
c93c: e587e00c str lr, [r7, #12]
req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c940: ebfffeff bl c544 <rtems_bdbuf_get_buffer_for_access>
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
c944: e5903024 ldr r3, [r0, #36] ; 0x24
*bd_ptr = bd;
req->bufs [0].user = bd;
req->bufs [0].block = media_block;
req->bufs [0].length = block_size;
req->bufs [0].buffer = bd->buffer;
c948: e5902020 ldr r2, [r0, #32]
*bd_ptr = bd;
req->bufs [0].user = bd;
req->bufs [0].block = media_block;
req->bufs [0].length = block_size;
c94c: e51bc044 ldr ip, [fp, #-68] ; 0x44
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
c950: e3530002 cmp r3, #2
req->done_arg = req;
req->io_task = rtems_task_self ();
req->status = RTEMS_RESOURCE_IN_USE;
req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
c954: e1a08000 mov r8, r0
*bd_ptr = bd;
req->bufs [0].user = bd;
req->bufs [0].block = media_block;
req->bufs [0].length = block_size;
req->bufs [0].buffer = bd->buffer;
c958: e5872020 str r2, [r7, #32]
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
*bd_ptr = bd;
req->bufs [0].user = bd;
c95c: e5870024 str r0, [r7, #36] ; 0x24
req->bufs [0].block = media_block;
c960: e5876018 str r6, [r7, #24]
req->bufs [0].length = block_size;
c964: e587c01c str ip, [r7, #28]
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
c968: 0a00005e beq cae8 <rtems_bdbuf_read+0x28c>
c96c: e3530007 cmp r3, #7
c970: 0a00005c beq cae8 <rtems_bdbuf_read+0x28c>
c974: e3530001 cmp r3, #1
c978: 0a000004 beq c990 <rtems_bdbuf_read+0x134>
return;
case RTEMS_BDBUF_STATE_EMPTY:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
c97c: e5900024 ldr r0, [r0, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c980: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c984: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c988: e380001d orr r0, r0, #29 <== NOT EXECUTED
c98c: ebffe9d9 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
c990: e51be038 ldr lr, [fp, #-56] ; 0x38
c994: e089900e add r9, r9, lr
c998: e51b2030 ldr r2, [fp, #-48] ; 0x30
c99c: e0669009 rsb r9, r6, r9
c9a0: e1a01009 mov r1, r9
c9a4: e1510002 cmp r1, r2
c9a8: 21a01002 movcs r1, r2
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
break;
}
while (transfer_index < transfer_count)
c9ac: e3510001 cmp r1, #1
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c9b0: e3a02009 mov r2, #9
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
c9b4: e50b1040 str r1, [fp, #-64] ; 0x40
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c9b8: e5802024 str r2, [r0, #36] ; 0x24
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
break;
}
while (transfer_index < transfer_count)
c9bc: 950b3030 strls r3, [fp, #-48] ; 0x30
c9c0: 9a00002c bls ca78 <rtems_bdbuf_read+0x21c>
c9c4: e59f91a4 ldr r9, [pc, #420] ; cb70 <rtems_bdbuf_read+0x314>
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c9c8: e50b3030 str r3, [fp, #-48] ; 0x30
c9cc: e50b7038 str r7, [fp, #-56] ; 0x38
static rtems_bdbuf_buffer *
rtems_bdbuf_avl_search (rtems_bdbuf_buffer** root,
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
c9d0: e5993040 ldr r3, [r9, #64] ; 0x40
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c9d4: e3530000 cmp r3, #0
break;
}
while (transfer_index < transfer_count)
{
media_block += media_block_count;
c9d8: e086600a add r6, r6, sl
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c9dc: 0a000008 beq ca04 <rtems_bdbuf_read+0x1a8>
c9e0: e5932014 ldr r2, [r3, #20]
c9e4: e1540002 cmp r4, r2
c9e8: e5931018 ldr r1, [r3, #24]
c9ec: 0a000035 beq cac8 <rtems_bdbuf_read+0x26c>
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
c9f0: e1550001 cmp r5, r1 <== NOT EXECUTED
c9f4: 9a00002e bls cab4 <rtems_bdbuf_read+0x258> <== NOT EXECUTED
{
p = p->avl.right;
c9f8: e593300c ldr r3, [r3, #12]
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
c9fc: e3530000 cmp r3, #0
ca00: 1afffff6 bne c9e0 <rtems_bdbuf_read+0x184>
bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dev, block);
if (bd == NULL)
{
bd = rtems_bdbuf_get_buffer_from_lru_list (dev, block, bds_per_group);
ca04: e1a00004 mov r0, r4
ca08: e1a01005 mov r1, r5
ca0c: e1a02006 mov r2, r6
ca10: e51b303c ldr r3, [fp, #-60] ; 0x3c
ca14: e50bc044 str ip, [fp, #-68] ; 0x44
ca18: ebfffdcf bl c15c <rtems_bdbuf_get_buffer_from_lru_list>
if (bd != NULL)
ca1c: e3500000 cmp r0, #0
ca20: e51bc044 ldr ip, [fp, #-68] ; 0x44
ca24: 0a000013 beq ca78 <rtems_bdbuf_read+0x21c>
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
ca28: e590302c ldr r3, [r0, #44] ; 0x2c <== NOT EXECUTED
req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
ca2c: e51be030 ldr lr, [fp, #-48] ; 0x30 <== NOT EXECUTED
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
ca30: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
break;
}
while (transfer_index < transfer_count)
ca34: e51b2040 ldr r2, [fp, #-64] ; 0x40 <== NOT EXECUTED
req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
ca38: e28ee001 add lr, lr, #1 <== NOT EXECUTED
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
ca3c: e2811001 add r1, r1, #1 <== NOT EXECUTED
ca40: e583100c str r1, [r3, #12] <== NOT EXECUTED
req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
ca44: e50be030 str lr, [fp, #-48] ; 0x30 <== NOT EXECUTED
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
break;
}
while (transfer_index < transfer_count)
ca48: e15e0002 cmp lr, r2 <== NOT EXECUTED
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [transfer_index].user = bd;
req->bufs [transfer_index].block = media_block;
req->bufs [transfer_index].length = block_size;
req->bufs [transfer_index].buffer = bd->buffer;
ca4c: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
ca50: e51be038 ldr lr, [fp, #-56] ; 0x38 <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
ca54: e3a01009 mov r1, #9 <== NOT EXECUTED
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [transfer_index].user = bd;
req->bufs [transfer_index].block = media_block;
req->bufs [transfer_index].length = block_size;
req->bufs [transfer_index].buffer = bd->buffer;
ca58: e58e3030 str r3, [lr, #48] ; 0x30 <== NOT EXECUTED
if (bd == NULL)
break;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [transfer_index].user = bd;
ca5c: e58e0034 str r0, [lr, #52] ; 0x34 <== NOT EXECUTED
req->bufs [transfer_index].block = media_block;
ca60: e58e6028 str r6, [lr, #40] ; 0x28 <== NOT EXECUTED
req->bufs [transfer_index].length = block_size;
ca64: e58ec02c str ip, [lr, #44] ; 0x2c <== NOT EXECUTED
req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
ca68: e28ee010 add lr, lr, #16 <== NOT EXECUTED
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
ca6c: e5801024 str r1, [r0, #36] ; 0x24 <== NOT EXECUTED
req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
ca70: e50be038 str lr, [fp, #-56] ; 0x38 <== NOT EXECUTED
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
break;
}
while (transfer_index < transfer_count)
ca74: 3affffd5 bcc c9d0 <rtems_bdbuf_read+0x174> <== NOT EXECUTED
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index;
}
req->bufnum = transfer_index;
ca78: e51b2030 ldr r2, [fp, #-48] ; 0x30
ca7c: e5872010 str r2, [r7, #16]
media_block + dd->start, block, (unsigned) dev);
rtems_bdbuf_lock_cache ();
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
if (req->bufnum > 0)
ca80: e51b3030 ldr r3, [fp, #-48] ; 0x30
ca84: e3530000 cmp r3, #0
ca88: 1a000019 bne caf4 <rtems_bdbuf_read+0x298>
}
}
if (sc == RTEMS_SUCCESSFUL)
{
switch (bd->state)
ca8c: e5983024 ldr r3, [r8, #36] ; 0x24
ca90: e3530002 cmp r3, #2
ca94: 0a000029 beq cb40 <rtems_bdbuf_read+0x2e4>
ca98: e3530007 cmp r3, #7
ca9c: 0a000021 beq cb28 <rtems_bdbuf_read+0x2cc>
break;
case RTEMS_BDBUF_STATE_MODIFIED:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4);
caa0: e5980024 ldr r0, [r8, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
caa4: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
caa8: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
caac: e3800002 orr r0, r0, #2 <== NOT EXECUTED
cab0: ebffe990 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
cab4: 1a000001 bne cac0 <rtems_bdbuf_read+0x264> <== NOT EXECUTED
cab8: e1540002 cmp r4, r2 <== NOT EXECUTED
cabc: 8affffcd bhi c9f8 <rtems_bdbuf_read+0x19c> <== NOT EXECUTED
{
p = p->avl.right;
}
else
{
p = p->avl.left;
cac0: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED
cac4: eaffffcc b c9fc <rtems_bdbuf_read+0x1a0> <== NOT EXECUTED
dev_t dev,
rtems_blkdev_bnum block)
{
rtems_bdbuf_buffer* p = *root;
while ((p != NULL) && ((p->dev != dev) || (p->block != block)))
cac8: e1550001 cmp r5, r1
cacc: 1affffc7 bne c9f0 <rtems_bdbuf_read+0x194>
cad0: e593201c ldr r2, [r3, #28]
cad4: e1560002 cmp r6, r2
cad8: 0affffe6 beq ca78 <rtems_bdbuf_read+0x21c>
{
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
cadc: 8affffc5 bhi c9f8 <rtems_bdbuf_read+0x19c>
{
p = p->avl.right;
}
else
{
p = p->avl.left;
cae0: e5933008 ldr r3, [r3, #8] <== NOT EXECUTED
cae4: eaffffc4 b c9fc <rtems_bdbuf_read+0x1a0> <== NOT EXECUTED
req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state)
cae8: e5973010 ldr r3, [r7, #16]
caec: e50b3030 str r3, [fp, #-48] ; 0x30
caf0: eaffffe2 b ca80 <rtems_bdbuf_read+0x224>
rtems_bdbuf_lock_cache ();
rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);
if (req->bufnum > 0)
{
sc = rtems_bdbuf_execute_transfer_request (dd, req, true);
caf4: e1a01007 mov r1, r7
caf8: e51b0024 ldr r0, [fp, #-36] ; 0x24
cafc: e3a02001 mov r2, #1
cb00: ebfffb78 bl b8e8 <rtems_bdbuf_execute_transfer_request>
if (sc == RTEMS_SUCCESSFUL)
cb04: e2504000 subs r4, r0, #0
cb08: 0a00000f beq cb4c <rtems_bdbuf_read+0x2f0>
}
*bd_ptr = bd;
}
else
*bd_ptr = NULL;
cb0c: e51b1034 ldr r1, [fp, #-52] ; 0x34
cb10: e3a03000 mov r3, #0
cb14: e5813000 str r3, [r1]
rtems_bdbuf_unlock_cache ();
cb18: ebfff767 bl a8bc <rtems_bdbuf_unlock_cache>
rtems_bdbuf_release_disk (dd);
cb1c: e51b0024 ldr r0, [fp, #-36] ; 0x24
cb20: ebfff7b7 bl aa04 <rtems_bdbuf_release_disk>
return sc;
cb24: eaffff5d b c8a0 <rtems_bdbuf_read+0x44>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
cb28: e3a03004 mov r3, #4
cb2c: e5883024 str r3, [r8, #36] ; 0x24
{
rtems_bdbuf_show_users ("read", bd);
rtems_bdbuf_show_usage ();
}
*bd_ptr = bd;
cb30: e51be034 ldr lr, [fp, #-52] ; 0x34
cb34: e3a04000 mov r4, #0
cb38: e58e8000 str r8, [lr]
cb3c: eafffff5 b cb18 <rtems_bdbuf_read+0x2bc>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
cb40: e3a03003 mov r3, #3
cb44: e5883024 str r3, [r8, #36] ; 0x24
cb48: eafffff8 b cb30 <rtems_bdbuf_read+0x2d4>
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
cb4c: e1a00008 mov r0, r8
cb50: ebffea9f bl 75d4 <_Chain_Extract>
}
static void
rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd)
{
++bd->group->users;
cb54: e598302c ldr r3, [r8, #44] ; 0x2c
cb58: e593200c ldr r2, [r3, #12]
cb5c: e2822001 add r2, r2, #1
cb60: e583200c str r2, [r3, #12]
cb64: eaffffc8 b ca8c <rtems_bdbuf_read+0x230>
0000b618 <rtems_bdbuf_release>:
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
b618: e59f30cc ldr r3, [pc, #204] ; b6ec <rtems_bdbuf_release+0xd4>
b61c: e5d33088 ldrb r3, [r3, #136] ; 0x88
b620: e3530000 cmp r3, #0
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_bdbuf_release (rtems_bdbuf_buffer *bd)
{
b624: e92d4010 push {r4, lr}
b628: e1a04000 mov r4, r0
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
b62c: 03a00016 moveq r0, #22
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
b630: 08bd8010 popeq {r4, pc}
return RTEMS_NOT_CONFIGURED;
if (bd == NULL)
b634: e3540000 cmp r4, #0
b638: 03a00009 moveq r0, #9
b63c: 08bd8010 popeq {r4, pc}
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
b640: ebfffc22 bl a6d0 <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
b644: e5943024 ldr r3, [r4, #36] ; 0x24
b648: e2433003 sub r3, r3, #3
b64c: e3530003 cmp r3, #3
b650: 979ff103 ldrls pc, [pc, r3, lsl #2]
b654: ea00001c b b6cc <rtems_bdbuf_release+0xb4> <== NOT EXECUTED
b658: 0000b690 .word 0x0000b690 <== NOT EXECUTED
b65c: 0000b67c .word 0x0000b67c <== NOT EXECUTED
b660: 0000b668 .word 0x0000b668 <== NOT EXECUTED
b664: 0000b668 .word 0x0000b668 <== NOT EXECUTED
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
rtems_bdbuf_add_to_lru_list_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
b668: e1a00004 mov r0, r4
b66c: ebffffb5 bl b548 <rtems_bdbuf_discard_buffer_after_access>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
b670: ebfffc91 bl a8bc <rtems_bdbuf_unlock_cache>
b674: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
b678: e8bd8010 pop {r4, pc}
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
b67c: e1a00004 mov r0, r4
b680: ebfffcf1 bl aa4c <rtems_bdbuf_add_to_modified_list_after_access>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
b684: ebfffc8c bl a8bc <rtems_bdbuf_unlock_cache>
b688: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
b68c: e8bd8010 pop {r4, pc}
}
static void
rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd)
{
--bd->group->users;
b690: e594302c ldr r3, [r4, #44] ; 0x2c
b694: e593200c ldr r2, [r3, #12]
b698: e2422001 sub r2, r2, #1
b69c: e583200c str r2, [r3, #12]
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
b6a0: e3a03002 mov r3, #2
b6a4: e5843024 str r3, [r4, #36] ; 0x24
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
b6a8: e59f0040 ldr r0, [pc, #64] ; b6f0 <rtems_bdbuf_release+0xd8>
b6ac: e1a01004 mov r1, r4
b6b0: ebffefbc bl 75a8 <_Chain_Append>
rtems_bdbuf_add_to_lru_list_after_access (rtems_bdbuf_buffer *bd)
{
rtems_bdbuf_group_release (bd);
rtems_bdbuf_make_cached_and_add_to_lru_list (bd);
if (bd->waiters)
b6b4: e5943028 ldr r3, [r4, #40] ; 0x28
b6b8: e3530000 cmp r3, #0
b6bc: 0a000007 beq b6e0 <rtems_bdbuf_release+0xc8>
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
b6c0: e59f002c ldr r0, [pc, #44] ; b6f4 <rtems_bdbuf_release+0xdc>
b6c4: ebfffc07 bl a6e8 <rtems_bdbuf_wake>
b6c8: eaffffe8 b b670 <rtems_bdbuf_release+0x58>
break;
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_0);
b6cc: e5940024 ldr r0, [r4, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
b6d0: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
b6d4: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b6d8: e380001c orr r0, r0, #28 <== NOT EXECUTED
b6dc: ebffee85 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
rtems_bdbuf_make_cached_and_add_to_lru_list (bd);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
else
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
b6e0: e59f0010 ldr r0, [pc, #16] ; b6f8 <rtems_bdbuf_release+0xe0>
b6e4: ebfffbff bl a6e8 <rtems_bdbuf_wake>
b6e8: eaffffe0 b b670 <rtems_bdbuf_release+0x58>
0000aa04 <rtems_bdbuf_release_disk>:
return RTEMS_SUCCESSFUL;
}
static void
rtems_bdbuf_release_disk (rtems_disk_device *dd)
{
aa04: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_disk_release (dd);
aa08: ebffde34 bl 22e0 <rtems_disk_release>
if (sc != RTEMS_SUCCESSFUL)
aa0c: e3500000 cmp r0, #0
aa10: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_DISK_REL);
aa14: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
aa18: e280001f add r0, r0, #31 <== NOT EXECUTED
aa1c: ebfff1b5 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000b590 <rtems_bdbuf_release_modified>:
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
b590: e59f307c ldr r3, [pc, #124] ; b614 <rtems_bdbuf_release_modified+0x84>
b594: e5d33088 ldrb r3, [r3, #136] ; 0x88
b598: e3530000 cmp r3, #0
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_bdbuf_release_modified (rtems_bdbuf_buffer *bd)
{
b59c: e92d4010 push {r4, lr}
b5a0: e1a04000 mov r4, r0
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release modified");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
b5a4: 03a00016 moveq r0, #22
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
b5a8: 08bd8010 popeq {r4, pc}
return RTEMS_NOT_CONFIGURED;
if (bd == NULL)
b5ac: e3540000 cmp r4, #0
b5b0: 03a00009 moveq r0, #9
b5b4: 08bd8010 popeq {r4, pc}
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
b5b8: ebfffc44 bl a6d0 <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release modified");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
b5bc: e5943024 ldr r3, [r4, #36] ; 0x24
b5c0: e3530003 cmp r3, #3
b5c4: 3a000003 bcc b5d8 <rtems_bdbuf_release_modified+0x48>
b5c8: e3530005 cmp r3, #5
b5cc: 9a00000b bls b600 <rtems_bdbuf_release_modified+0x70>
b5d0: e3530006 cmp r3, #6
b5d4: 0a000004 beq b5ec <rtems_bdbuf_release_modified+0x5c>
break;
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_6);
b5d8: e5940024 ldr r0, [r4, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
b5dc: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
b5e0: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b5e4: e3800004 orr r0, r0, #4 <== NOT EXECUTED
b5e8: ebffeec2 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
b5ec: e1a00004 mov r0, r4
b5f0: ebffffd4 bl b548 <rtems_bdbuf_discard_buffer_after_access>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
b5f4: ebfffcb0 bl a8bc <rtems_bdbuf_unlock_cache>
b5f8: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
b5fc: e8bd8010 pop {r4, pc}
switch (bd->state)
{
case RTEMS_BDBUF_STATE_ACCESS_CACHED:
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_add_to_modified_list_after_access (bd);
b600: e1a00004 mov r0, r4
b604: ebfffd10 bl aa4c <rtems_bdbuf_add_to_modified_list_after_access>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
b608: ebfffcab bl a8bc <rtems_bdbuf_unlock_cache>
b60c: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
b610: e8bd8010 pop {r4, pc}
0000b184 <rtems_bdbuf_remove_from_tree>:
return bdbuf_cache.buffer_waiters.count;
}
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
b184: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
const rtems_bdbuf_buffer* node)
{
dev_t dev = node->dev;
rtems_blkdev_bnum block = node->block;
rtems_bdbuf_buffer* p = *root;
b188: e59fb33c ldr fp, [pc, #828] ; b4cc <rtems_bdbuf_remove_from_tree+0x348>
return bdbuf_cache.buffer_waiters.count;
}
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
b18c: e24dd080 sub sp, sp, #128 ; 0x80
const rtems_bdbuf_buffer* node)
{
dev_t dev = node->dev;
rtems_blkdev_bnum block = node->block;
rtems_bdbuf_buffer* p = *root;
b190: e59b4040 ldr r4, [fp, #64] ; 0x40
return bdbuf_cache.buffer_waiters.count;
}
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
b194: e1a08000 mov r8, r0
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
b198: e3a01000 mov r1, #0
b19c: e1a0000d mov r0, sp
b1a0: e3a02080 mov r2, #128 ; 0x80
*/
static int
rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root,
const rtems_bdbuf_buffer* node)
{
dev_t dev = node->dev;
b1a4: e5986014 ldr r6, [r8, #20]
b1a8: e2885018 add r5, r8, #24
b1ac: e8950420 ldm r5, {r5, sl}
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
b1b0: eb001e57 bl 12b14 <memset>
while (p != NULL)
b1b4: e3540000 cmp r4, #0
rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT];
rtems_bdbuf_buffer** buf_prev = buf_stack;
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
b1b8: e1a0700d mov r7, sp
while (p != NULL)
b1bc: 0a000017 beq b220 <rtems_bdbuf_remove_from_tree+0x9c>
b1c0: e1a0100d mov r1, sp
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
{
p->avl.cache = 1;
b1c4: e3a0c001 mov ip, #1
p = p->avl.right;
}
else if ((p->dev != dev) || (p->block != block))
{
p->avl.cache = -1;
b1c8: e3e09000 mvn r9, #0
b1cc: ea000009 b b1f8 <rtems_bdbuf_remove_from_tree+0x74>
while (p != NULL)
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
b1d0: 1a000001 bne b1dc <rtems_bdbuf_remove_from_tree+0x58>
b1d4: e1560000 cmp r6, r0
b1d8: 8a00000c bhi b210 <rtems_bdbuf_remove_from_tree+0x8c>
b1dc: e1560000 cmp r6, r0
b1e0: 0a000013 beq b234 <rtems_bdbuf_remove_from_tree+0xb0>
p->avl.cache = 1;
p = p->avl.right;
}
else if ((p->dev != dev) || (p->block != block))
{
p->avl.cache = -1;
b1e4: e5c49010 strb r9, [r4, #16]
p = p->avl.left;
b1e8: e5944008 ldr r4, [r4, #8]
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
b1ec: e3540000 cmp r4, #0
b1f0: 0a00000a beq b220 <rtems_bdbuf_remove_from_tree+0x9c>
b1f4: e1a01003 mov r1, r3
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
b1f8: e5942018 ldr r2, [r4, #24]
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
{
*buf_prev++ = p;
b1fc: e1a03001 mov r3, r1
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
b200: e1550002 cmp r5, r2
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
{
*buf_prev++ = p;
b204: e4834004 str r4, [r3], #4
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
b208: e5940014 ldr r0, [r4, #20]
b20c: 9affffef bls b1d0 <rtems_bdbuf_remove_from_tree+0x4c>
{
p->avl.cache = 1;
b210: e5c4c010 strb ip, [r4, #16]
p = p->avl.right;
b214: e594400c ldr r4, [r4, #12]
bool modified = false;
memset (buf_stack, 0, sizeof(buf_stack));
while (p != NULL)
b218: e3540000 cmp r4, #0
b21c: 1afffff4 bne b1f4 <rtems_bdbuf_remove_from_tree+0x70>
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
if (rtems_bdbuf_avl_remove (&bdbuf_cache.tree, bd) != 0)
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
b220: e5980024 ldr r0, [r8, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
b224: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
b228: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b22c: e3800009 orr r0, r0, #9 <== NOT EXECUTED
b230: ebffefb0 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
while (p != NULL)
{
*buf_prev++ = p;
if ((p->dev < dev) || ((p->dev == dev) && (p->block < block)))
b234: e1550002 cmp r5, r2
b238: 1affffe9 bne b1e4 <rtems_bdbuf_remove_from_tree+0x60>
b23c: e594201c ldr r2, [r4, #28]
b240: e15a0002 cmp sl, r2
b244: 8afffff1 bhi b210 <rtems_bdbuf_remove_from_tree+0x8c>
{
p->avl.cache = 1;
p = p->avl.right;
}
else if ((p->dev != dev) || (p->block != block))
b248: 1affffe5 bne b1e4 <rtems_bdbuf_remove_from_tree+0x60>
{
p = NULL;
}
/* at this moment q - is a node to delete, p is q's parent */
if (q->avl.right == NULL)
b24c: e594200c ldr r2, [r4, #12]
}
q = p;
buf_prev--;
if (buf_prev > buf_stack)
b250: e1510007 cmp r1, r7
b254: 93a06000 movls r6, #0
{
p = *(buf_prev - 1);
b258: 85116004 ldrhi r6, [r1, #-4]
{
p = NULL;
}
/* at this moment q - is a node to delete, p is q's parent */
if (q->avl.right == NULL)
b25c: e3520000 cmp r2, #0
b260: 0a00008b beq b494 <rtems_bdbuf_remove_from_tree+0x310>
{
rtems_bdbuf_buffer **t;
r = q->avl.right;
if (r->avl.left == NULL)
b264: e5920008 ldr r0, [r2, #8]
b268: e3500000 cmp r0, #0
while (s->avl.left != NULL)
{
*buf_prev++ = r = s;
s = r->avl.left;
r->avl.cache = -1;
b26c: 13e05000 mvnne r5, #0
{
rtems_bdbuf_buffer **t;
r = q->avl.right;
if (r->avl.left == NULL)
b270: 0a00008d beq b4ac <rtems_bdbuf_remove_from_tree+0x328>
t = buf_prev++;
s = r;
while (s->avl.left != NULL)
{
*buf_prev++ = r = s;
b274: e4832004 str r2, [r3], #4 <== NOT EXECUTED
if (r->avl.left == NULL)
{
r->avl.left = q->avl.left;
r->avl.bal = q->avl.bal;
r->avl.cache = 1;
*buf_prev++ = q = r;
b278: e1a00002 mov r0, r2 <== NOT EXECUTED
s = r;
while (s->avl.left != NULL)
{
*buf_prev++ = r = s;
s = r->avl.left;
b27c: e5922008 ldr r2, [r2, #8] <== NOT EXECUTED
else
{
t = buf_prev++;
s = r;
while (s->avl.left != NULL)
b280: e592c008 ldr ip, [r2, #8] <== NOT EXECUTED
b284: e35c0000 cmp ip, #0 <== NOT EXECUTED
{
*buf_prev++ = r = s;
s = r->avl.left;
r->avl.cache = -1;
b288: e5c05010 strb r5, [r0, #16] <== NOT EXECUTED
else
{
t = buf_prev++;
s = r;
while (s->avl.left != NULL)
b28c: 1afffff8 bne b274 <rtems_bdbuf_remove_from_tree+0xf0> <== NOT EXECUTED
*buf_prev++ = r = s;
s = r->avl.left;
r->avl.cache = -1;
}
s->avl.left = q->avl.left;
b290: e5948008 ldr r8, [r4, #8] <== NOT EXECUTED
r->avl.left = s->avl.right;
b294: e592500c ldr r5, [r2, #12] <== NOT EXECUTED
s->avl.right = q->avl.right;
s->avl.bal = q->avl.bal;
b298: e5d4c011 ldrb ip, [r4, #17] <== NOT EXECUTED
r->avl.cache = -1;
}
s->avl.left = q->avl.left;
r->avl.left = s->avl.right;
s->avl.right = q->avl.right;
b29c: e594400c ldr r4, [r4, #12] <== NOT EXECUTED
*buf_prev++ = r = s;
s = r->avl.left;
r->avl.cache = -1;
}
s->avl.left = q->avl.left;
b2a0: e5828008 str r8, [r2, #8] <== NOT EXECUTED
r->avl.left = s->avl.right;
b2a4: e5805008 str r5, [r0, #8] <== NOT EXECUTED
s->avl.right = q->avl.right;
s->avl.bal = q->avl.bal;
s->avl.cache = 1;
b2a8: e3a00001 mov r0, #1 <== NOT EXECUTED
r->avl.cache = -1;
}
s->avl.left = q->avl.left;
r->avl.left = s->avl.right;
s->avl.right = q->avl.right;
b2ac: e582400c str r4, [r2, #12] <== NOT EXECUTED
s->avl.bal = q->avl.bal;
b2b0: e5c2c011 strb ip, [r2, #17] <== NOT EXECUTED
s->avl.cache = 1;
b2b4: e5c20010 strb r0, [r2, #16] <== NOT EXECUTED
*t = q = s;
b2b8: e5812000 str r2, [r1] <== NOT EXECUTED
}
}
if (p != NULL)
b2bc: e3560000 cmp r6, #0
p->avl.right = q;
}
}
else
{
*root = q;
b2c0: 058b2040 streq r2, [fp, #64] ; 0x40
*t = q = s;
}
}
if (p != NULL)
b2c4: 0a000003 beq b2d8 <rtems_bdbuf_remove_from_tree+0x154>
{
if (p->avl.cache == -1)
b2c8: e1d611d0 ldrsb r1, [r6, #16]
b2cc: e3710001 cmn r1, #1
{
p->avl.left = q;
b2d0: 05862008 streq r2, [r6, #8]
}
else
{
p->avl.right = q;
b2d4: 1586200c strne r2, [r6, #12]
modified = true;
while (modified)
{
if (buf_prev > buf_stack)
b2d8: e1530007 cmp r3, r7
{
case -1:
p->avl.bal = 0;
break;
case 0:
p->avl.bal = 1;
b2dc: 83a06001 movhi r6, #1
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = 1; else p1->avl.bal = 0;
p = p2;
p2->avl.bal = 0;
b2e0: 83a04000 movhi r4, #0
case +1:
p->avl.bal = 0;
break;
case 0:
p->avl.bal = -1;
b2e4: 83e05000 mvnhi r5, #0
modified = true;
while (modified)
{
if (buf_prev > buf_stack)
b2e8: 8a000016 bhi b348 <rtems_bdbuf_remove_from_tree+0x1c4>
b2ec: ea000028 b b394 <rtems_bdbuf_remove_from_tree+0x210>
}
}
else
{
/* rebalance right branch */
switch (p->avl.bal)
b2f0: e1d201d1 ldrsb r0, [r2, #17]
b2f4: e3500000 cmp r0, #0
case +1:
p->avl.bal = 0;
break;
case 0:
p->avl.bal = -1;
b2f8: 05c25011 strbeq r5, [r2, #17]
b2fc: 01a01002 moveq r1, r2
}
}
else
{
/* rebalance right branch */
switch (p->avl.bal)
b300: 0a000007 beq b324 <rtems_bdbuf_remove_from_tree+0x1a0>
b304: e3500001 cmp r0, #1
{
case +1:
p->avl.bal = 0;
b308: 05c24011 strbeq r4, [r2, #17]
b30c: 01a01002 moveq r1, r2
}
}
else
{
/* rebalance right branch */
switch (p->avl.bal)
b310: 0a000003 beq b324 <rtems_bdbuf_remove_from_tree+0x1a0>
b314: e3700001 cmn r0, #1 <== NOT EXECUTED
b318: 0a00001f beq b39c <rtems_bdbuf_remove_from_tree+0x218> <== NOT EXECUTED
if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0;
if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0;
p = p2;
p2->avl.bal = 0;
b31c: e1a01002 mov r1, r2 <== NOT EXECUTED
b320: e3a00001 mov r0, #1 <== NOT EXECUTED
default:
break;
}
}
if (buf_prev > buf_stack)
b324: e1530007 cmp r3, r7
b328: 9a000018 bls b390 <rtems_bdbuf_remove_from_tree+0x20c>
{
q = *(buf_prev - 1);
b32c: e5132004 ldr r2, [r3, #-4] <== NOT EXECUTED
if (q->avl.cache == -1)
b330: e1d2c1d0 ldrsb ip, [r2, #16] <== NOT EXECUTED
b334: e37c0001 cmn ip, #1 <== NOT EXECUTED
{
q->avl.left = p;
b338: 05821008 streq r1, [r2, #8] <== NOT EXECUTED
}
else
{
q->avl.right = p;
b33c: 1582100c strne r1, [r2, #12] <== NOT EXECUTED
*root = q;
}
modified = true;
while (modified)
b340: e3500000 cmp r0, #0 <== NOT EXECUTED
b344: 0a000012 beq b394 <rtems_bdbuf_remove_from_tree+0x210> <== NOT EXECUTED
{
if (buf_prev > buf_stack)
{
p = *--buf_prev;
b348: e5332004 ldr r2, [r3, #-4]!
else
{
break;
}
if (p->avl.cache == -1)
b34c: e1d2c1d0 ldrsb ip, [r2, #16]
b350: e37c0001 cmn ip, #1
b354: 1affffe5 bne b2f0 <rtems_bdbuf_remove_from_tree+0x16c>
{
/* rebalance left branch */
switch (p->avl.bal)
b358: e1d201d1 ldrsb r0, [r2, #17]
b35c: e3500000 cmp r0, #0
{
case -1:
p->avl.bal = 0;
break;
case 0:
p->avl.bal = 1;
b360: 05c26011 strbeq r6, [r2, #17]
b364: 01a01002 moveq r1, r2
}
if (p->avl.cache == -1)
{
/* rebalance left branch */
switch (p->avl.bal)
b368: 0affffed beq b324 <rtems_bdbuf_remove_from_tree+0x1a0>
b36c: e3500001 cmp r0, #1
b370: 0a000020 beq b3f8 <rtems_bdbuf_remove_from_tree+0x274>
b374: e3700001 cmn r0, #1
{
case -1:
p->avl.bal = 0;
b378: 05c24011 strbeq r4, [r2, #17]
b37c: 01a01002 moveq r1, r2
b380: 03a00001 moveq r0, #1
}
if (p->avl.cache == -1)
{
/* rebalance left branch */
switch (p->avl.bal)
b384: 1affffe4 bne b31c <rtems_bdbuf_remove_from_tree+0x198>
default:
break;
}
}
if (buf_prev > buf_stack)
b388: e1530007 cmp r3, r7
b38c: 8affffe6 bhi b32c <rtems_bdbuf_remove_from_tree+0x1a8>
q->avl.right = p;
}
}
else
{
*root = p;
b390: e58b1040 str r1, [fp, #64] ; 0x40
static void
rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd)
{
if (rtems_bdbuf_avl_remove (&bdbuf_cache.tree, bd) != 0)
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
}
b394: e28dd080 add sp, sp, #128 ; 0x80
b398: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
p->avl.bal = -1;
modified = false;
break;
case -1:
p1 = p->avl.left;
b39c: e5921008 ldr r1, [r2, #8] <== NOT EXECUTED
if (p1->avl.bal <= 0) /* simple LL-turn */
b3a0: e1d101d1 ldrsb r0, [r1, #17] <== NOT EXECUTED
b3a4: e3500000 cmp r0, #0 <== NOT EXECUTED
b3a8: da000020 ble b430 <rtems_bdbuf_remove_from_tree+0x2ac> <== NOT EXECUTED
}
p = p1;
}
else /* double LR-turn */
{
p2 = p1->avl.right;
b3ac: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
p1->avl.right = p2->avl.left;
b3b0: e590c008 ldr ip, [r0, #8] <== NOT EXECUTED
p2->avl.left = p1;
p->avl.left = p2->avl.right;
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0;
b3b4: e1d081d1 ldrsb r8, [r0, #17] <== NOT EXECUTED
}
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
b3b8: e581c00c str ip, [r1, #12] <== NOT EXECUTED
p2->avl.left = p1;
p->avl.left = p2->avl.right;
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0;
b3bc: e3780001 cmn r8, #1 <== NOT EXECUTED
b3c0: 05c26011 strbeq r6, [r2, #17] <== NOT EXECUTED
b3c4: 15c24011 strbne r4, [r2, #17] <== NOT EXECUTED
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
p->avl.left = p2->avl.right;
b3c8: e590c00c ldr ip, [r0, #12] <== NOT EXECUTED
else /* double LR-turn */
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
b3cc: e5801008 str r1, [r0, #8] <== NOT EXECUTED
p->avl.left = p2->avl.right;
p2->avl.right = p;
b3d0: e580200c str r2, [r0, #12] <== NOT EXECUTED
{
p2 = p1->avl.right;
p1->avl.right = p2->avl.left;
p2->avl.left = p1;
p->avl.left = p2->avl.right;
b3d4: e582c008 str ip, [r2, #8] <== NOT EXECUTED
p2->avl.right = p;
if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0;
if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0;
b3d8: e1d021d1 ldrsb r2, [r0, #17] <== NOT EXECUTED
b3dc: e3520001 cmp r2, #1 <== NOT EXECUTED
b3e0: 05c15011 strbeq r5, [r1, #17] <== NOT EXECUTED
b3e4: 15c14011 strbne r4, [r1, #17] <== NOT EXECUTED
p = p2;
p2->avl.bal = 0;
b3e8: e5c04011 strb r4, [r0, #17] <== NOT EXECUTED
b3ec: e1a01000 mov r1, r0 <== NOT EXECUTED
b3f0: e3a00001 mov r0, #1 <== NOT EXECUTED
b3f4: eaffffca b b324 <rtems_bdbuf_remove_from_tree+0x1a0> <== NOT EXECUTED
p->avl.bal = 1;
modified = false;
break;
case +1:
p1 = p->avl.right;
b3f8: e592800c ldr r8, [r2, #12] <== NOT EXECUTED
if (p1->avl.bal >= 0) /* simple RR-turn */
b3fc: e1d8a1d1 ldrsb sl, [r8, #17] <== NOT EXECUTED
b400: e35a0000 cmp sl, #0 <== NOT EXECUTED
b404: ba000012 blt b454 <rtems_bdbuf_remove_from_tree+0x2d0> <== NOT EXECUTED
{
p->avl.right = p1->avl.left;
b408: e5981008 ldr r1, [r8, #8] <== NOT EXECUTED
p1->avl.bal = -1;
modified = false;
}
else
{
p->avl.bal = 0;
b40c: 15c24011 strbne r4, [r2, #17] <== NOT EXECUTED
case +1:
p1 = p->avl.right;
if (p1->avl.bal >= 0) /* simple RR-turn */
{
p->avl.right = p1->avl.left;
b410: e582100c str r1, [r2, #12] <== NOT EXECUTED
p1->avl.left = p;
b414: e5882008 str r2, [r8, #8] <== NOT EXECUTED
if (p1->avl.bal == 0)
{
p1->avl.bal = -1;
b418: 05c8c011 strbeq ip, [r8, #17] <== NOT EXECUTED
b41c: 01a01008 moveq r1, r8 <== NOT EXECUTED
b420: 01a0000a moveq r0, sl <== NOT EXECUTED
modified = false;
}
else
{
p->avl.bal = 0;
p1->avl.bal = 0;
b424: 11a01008 movne r1, r8 <== NOT EXECUTED
b428: 15c84011 strbne r4, [r8, #17] <== NOT EXECUTED
b42c: eaffffbc b b324 <rtems_bdbuf_remove_from_tree+0x1a0> <== NOT EXECUTED
case -1:
p1 = p->avl.left;
if (p1->avl.bal <= 0) /* simple LL-turn */
{
p->avl.left = p1->avl.right;
b430: e591c00c ldr ip, [r1, #12] <== NOT EXECUTED
p1->avl.right = p;
if (p1->avl.bal == 0)
{
p1->avl.bal = 1;
b434: 05c16011 strbeq r6, [r1, #17] <== NOT EXECUTED
case -1:
p1 = p->avl.left;
if (p1->avl.bal <= 0) /* simple LL-turn */
{
p->avl.left = p1->avl.right;
b438: e582c008 str ip, [r2, #8] <== NOT EXECUTED
p1->avl.right = p;
b43c: e581200c str r2, [r1, #12] <== NOT EXECUTED
if (p1->avl.bal == 0)
b440: 0affffb7 beq b324 <rtems_bdbuf_remove_from_tree+0x1a0> <== NOT EXECUTED
p1->avl.bal = 1;
modified = false;
}
else
{
p->avl.bal = 0;
b444: e5c24011 strb r4, [r2, #17] <== NOT EXECUTED
p1->avl.bal = 0;
b448: e5c14011 strb r4, [r1, #17] <== NOT EXECUTED
b44c: e3a00001 mov r0, #1 <== NOT EXECUTED
b450: eaffffb3 b b324 <rtems_bdbuf_remove_from_tree+0x1a0> <== NOT EXECUTED
}
p = p1;
}
else /* double RL-turn */
{
p2 = p1->avl.left;
b454: e5981008 ldr r1, [r8, #8] <== NOT EXECUTED
p1->avl.left = p2->avl.right;
b458: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
b45c: e1d1a1d1 ldrsb sl, [r1, #17] <== NOT EXECUTED
}
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
b460: e5880008 str r0, [r8, #8] <== NOT EXECUTED
p2->avl.right = p1;
p->avl.right = p2->avl.left;
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
b464: e35a0001 cmp sl, #1 <== NOT EXECUTED
b468: 05c2c011 strbeq ip, [r2, #17] <== NOT EXECUTED
b46c: 15c24011 strbne r4, [r2, #17] <== NOT EXECUTED
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
b470: e5910008 ldr r0, [r1, #8] <== NOT EXECUTED
else /* double RL-turn */
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
b474: e581800c str r8, [r1, #12] <== NOT EXECUTED
p->avl.right = p2->avl.left;
p2->avl.left = p;
b478: e5812008 str r2, [r1, #8] <== NOT EXECUTED
{
p2 = p1->avl.left;
p1->avl.left = p2->avl.right;
p2->avl.right = p1;
p->avl.right = p2->avl.left;
b47c: e582000c str r0, [r2, #12] <== NOT EXECUTED
p2->avl.left = p;
if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0;
if (p2->avl.bal == -1) p1->avl.bal = 1; else p1->avl.bal = 0;
b480: e1d121d1 ldrsb r2, [r1, #17] <== NOT EXECUTED
b484: e3720001 cmn r2, #1 <== NOT EXECUTED
b488: 05c86011 strbeq r6, [r8, #17] <== NOT EXECUTED
b48c: 15c84011 strbne r4, [r8, #17] <== NOT EXECUTED
b490: eaffffec b b448 <rtems_bdbuf_remove_from_tree+0x2c4> <== NOT EXECUTED
}
/* at this moment q - is a node to delete, p is q's parent */
if (q->avl.right == NULL)
{
r = q->avl.left;
b494: e5942008 ldr r2, [r4, #8]
if (r != NULL)
b498: e3520000 cmp r2, #0
{
r->avl.bal = 0;
b49c: 13a03000 movne r3, #0
b4a0: 15c23011 strbne r3, [r2, #17]
b4a4: e1a03001 mov r3, r1
b4a8: eaffff83 b b2bc <rtems_bdbuf_remove_from_tree+0x138>
r = q->avl.right;
if (r->avl.left == NULL)
{
r->avl.left = q->avl.left;
r->avl.bal = q->avl.bal;
b4ac: e5d40011 ldrb r0, [r4, #17]
r = q->avl.right;
if (r->avl.left == NULL)
{
r->avl.left = q->avl.left;
b4b0: e594c008 ldr ip, [r4, #8]
r->avl.bal = q->avl.bal;
b4b4: e5c20011 strb r0, [r2, #17]
r->avl.cache = 1;
b4b8: e3a00001 mov r0, #1
r = q->avl.right;
if (r->avl.left == NULL)
{
r->avl.left = q->avl.left;
b4bc: e582c008 str ip, [r2, #8]
r->avl.bal = q->avl.bal;
r->avl.cache = 1;
b4c0: e5c20010 strb r0, [r2, #16]
*buf_prev++ = q = r;
b4c4: e5812000 str r2, [r1]
b4c8: eaffff7b b b2bc <rtems_bdbuf_remove_from_tree+0x138>
0000b4d0 <rtems_bdbuf_remove_from_tree_and_lru_list>:
}
static void
rtems_bdbuf_remove_from_tree_and_lru_list (rtems_bdbuf_buffer *bd)
{
switch (bd->state)
b4d0: e5903024 ldr r3, [r0, #36] ; 0x24
b4d4: e3530000 cmp r3, #0
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_TREE_RM);
}
static void
rtems_bdbuf_remove_from_tree_and_lru_list (rtems_bdbuf_buffer *bd)
{
b4d8: e92d4010 push {r4, lr}
b4dc: e1a04000 mov r4, r0
switch (bd->state)
b4e0: 0a000007 beq b504 <rtems_bdbuf_remove_from_tree_and_lru_list+0x34>
b4e4: e3530002 cmp r3, #2
b4e8: 0a000004 beq b500 <rtems_bdbuf_remove_from_tree_and_lru_list+0x30>
break;
case RTEMS_BDBUF_STATE_CACHED:
rtems_bdbuf_remove_from_tree (bd);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_10);
b4ec: e5900024 ldr r0, [r0, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
b4f0: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
b4f4: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b4f8: e3800008 orr r0, r0, #8 <== NOT EXECUTED
b4fc: ebffeefd bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
switch (bd->state)
{
case RTEMS_BDBUF_STATE_FREE:
break;
case RTEMS_BDBUF_STATE_CACHED:
rtems_bdbuf_remove_from_tree (bd);
b500: ebffff1f bl b184 <rtems_bdbuf_remove_from_tree>
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
b504: e1a00004 mov r0, r4
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_10);
}
rtems_chain_extract (&bd->link);
}
b508: e8bd4010 pop {r4, lr}
b50c: eafff030 b 75d4 <_Chain_Extract>
0000ac48 <rtems_bdbuf_restore_preemption>:
return prev_mode;
}
static void
rtems_bdbuf_restore_preemption (rtems_mode prev_mode)
{
ac48: e52de004 push {lr} ; (str lr, [sp, #-4]!)
ac4c: e24dd004 sub sp, sp, #4
ac50: e28d2004 add r2, sp, #4
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_task_mode (prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode);
ac54: e3a01801 mov r1, #65536 ; 0x10000
return prev_mode;
}
static void
rtems_bdbuf_restore_preemption (rtems_mode prev_mode)
{
ac58: e5220004 str r0, [r2, #-4]!
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_task_mode (prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode);
ac5c: e2411001 sub r1, r1, #1
ac60: e1a0200d mov r2, sp
ac64: eb00123d bl f560 <rtems_task_mode>
if (sc != RTEMS_SUCCESSFUL)
ac68: e3500000 cmp r0, #0
ac6c: 1a000001 bne ac78 <rtems_bdbuf_restore_preemption+0x30>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_RST);
}
ac70: e28dd004 add sp, sp, #4
ac74: e8bd8000 pop {pc}
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
sc = rtems_task_mode (prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_PREEMPT_RST);
ac78: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
ac7c: e2800011 add r0, r0, #17 <== NOT EXECUTED
ac80: ebfff11c bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000bbe8 <rtems_bdbuf_swapout_task>:
* not this.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_task (rtems_task_argument arg)
{
bbe8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
rtems_bdbuf_swapout_transfer transfer;
uint32_t period_in_ticks;
const uint32_t period_in_msecs = bdbuf_config.swapout_period;;
bbec: e59f4354 ldr r4, [pc, #852] ; bf48 <rtems_bdbuf_swapout_task+0x360>
* not this.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_task (rtems_task_argument arg)
{
bbf0: e24dd038 sub sp, sp, #56 ; 0x38
rtems_bdbuf_swapout_transfer transfer;
uint32_t period_in_ticks;
const uint32_t period_in_msecs = bdbuf_config.swapout_period;;
bbf4: e594900c ldr r9, [r4, #12]
uint32_t timer_delta;
transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
bbf8: ebfffd4c bl b130 <rtems_bdbuf_swapout_writereq_alloc>
transfer.syncing = false;
/*
* Localise the period.
*/
period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS (period_in_msecs * 1000);
bbfc: e59f2348 ldr r2, [pc, #840] ; bf4c <rtems_bdbuf_swapout_task+0x364>
bc00: e0893109 add r3, r9, r9, lsl #2
bc04: e0833103 add r3, r3, r3, lsl #2
bc08: e592100c ldr r1, [r2, #12]
bc0c: e0833103 add r3, r3, r3, lsl #2
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bc10: e28d2014 add r2, sp, #20
the_chain->permanent_null = NULL;
bc14: e3a06000 mov r6, #0
rtems_bdbuf_swapout_transfer transfer;
uint32_t period_in_ticks;
const uint32_t period_in_msecs = bdbuf_config.swapout_period;;
uint32_t timer_delta;
transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
bc18: e58d002c str r0, [sp, #44] ; 0x2c
rtems_chain_initialize_empty (&transfer.bds);
transfer.dev = BDBUF_INVALID_DEV;
bc1c: e3e07000 mvn r7, #0
transfer.syncing = false;
/*
* Localise the period.
*/
period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS (period_in_msecs * 1000);
bc20: e1a00183 lsl r0, r3, #3
const uint32_t period_in_msecs = bdbuf_config.swapout_period;;
uint32_t timer_delta;
transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&transfer.bds);
transfer.dev = BDBUF_INVALID_DEV;
bc24: e3e08000 mvn r8, #0
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bc28: e2823004 add r3, r2, #4
bc2c: e58d3014 str r3, [sp, #20]
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
bc30: e58d201c str r2, [sp, #28]
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
bc34: e58d6018 str r6, [sp, #24]
bc38: e58d7020 str r7, [sp, #32]
bc3c: e58d8024 str r8, [sp, #36] ; 0x24
transfer.syncing = false;
bc40: e5cd6028 strb r6, [sp, #40] ; 0x28
/*
* Localise the period.
*/
period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS (period_in_msecs * 1000);
bc44: eb003e88 bl 1b66c <__aeabi_uidiv>
bc48: e58d000c str r0, [sp, #12]
rtems_bdbuf_swapout_workers_open (void)
{
rtems_status_code sc;
size_t w;
rtems_bdbuf_lock_cache ();
bc4c: ebfffa9f bl a6d0 <rtems_bdbuf_lock_cache>
for (w = 0; w < bdbuf_config.swapout_workers; w++)
bc50: e5943014 ldr r3, [r4, #20]
bc54: e1530006 cmp r3, r6
bc58: e58d3008 str r3, [sp, #8]
bc5c: 059f52ec ldreq r5, [pc, #748] ; bf50 <rtems_bdbuf_swapout_task+0x368>
bc60: 0a000032 beq bd30 <rtems_bdbuf_swapout_task+0x148>
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bc64: e1a02007 mov r2, r7 <== NOT EXECUTED
bc68: e1a03008 mov r3, r8 <== NOT EXECUTED
sc = rtems_task_create (rtems_build_name('B', 'D', 'o', 'a' + w),
(bdbuf_config.swapout_priority ?
bc6c: e5948008 ldr r8, [r4, #8] <== NOT EXECUTED
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bc70: e58d9010 str r9, [sp, #16] <== NOT EXECUTED
bc74: e1a0a003 mov sl, r3 <== NOT EXECUTED
worker = malloc (sizeof (rtems_bdbuf_swapout_worker));
if (!worker)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
bc78: e3a0b001 mov fp, #1 <== NOT EXECUTED
bc7c: e1a07006 mov r7, r6 <== NOT EXECUTED
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bc80: e1a09002 mov r9, r2 <== NOT EXECUTED
for (w = 0; w < bdbuf_config.swapout_workers; w++)
{
rtems_bdbuf_swapout_worker* worker;
worker = malloc (sizeof (rtems_bdbuf_swapout_worker));
bc84: e3a00030 mov r0, #48 ; 0x30 <== NOT EXECUTED
bc88: ebffddf5 bl 3464 <malloc> <== NOT EXECUTED
if (!worker)
bc8c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
bc90: 0a0000a9 beq bf3c <rtems_bdbuf_swapout_task+0x354> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
bc94: e59f52b4 ldr r5, [pc, #692] ; bf50 <rtems_bdbuf_swapout_task+0x368><== NOT EXECUTED
bc98: e1a01004 mov r1, r4 <== NOT EXECUTED
bc9c: e2850008 add r0, r5, #8 <== NOT EXECUTED
bca0: ebffee40 bl 75a8 <_Chain_Append> <== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
bca4: e5c4b00c strb fp, [r4, #12] <== NOT EXECUTED
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
bca8: ebfffd20 bl b130 <rtems_bdbuf_swapout_writereq_alloc> <== NOT EXECUTED
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
sc = rtems_task_create (rtems_build_name('B', 'D', 'o', 'a' + w),
bcac: e2863061 add r3, r6, #97 ; 0x61 <== NOT EXECUTED
if (!worker)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
bcb0: e5840028 str r0, [r4, #40] ; 0x28 <== NOT EXECUTED
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
sc = rtems_task_create (rtems_build_name('B', 'D', 'o', 'a' + w),
bcb4: e3830442 orr r0, r3, #1107296256 ; 0x42000000 <== NOT EXECUTED
bcb8: e3580000 cmp r8, #0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bcbc: e2842014 add r2, r4, #20 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
bcc0: e2843010 add r3, r4, #16 <== NOT EXECUTED
bcc4: e3800711 orr r0, r0, #4456448 ; 0x440000 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bcc8: e5842010 str r2, [r4, #16] <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
bccc: e5843018 str r3, [r4, #24] <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
bcd0: e5847014 str r7, [r4, #20] <== NOT EXECUTED
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
worker->enabled = true;
worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bcd4: e584901c str r9, [r4, #28] <== NOT EXECUTED
bcd8: e584a020 str sl, [r4, #32] <== NOT EXECUTED
sc = rtems_task_create (rtems_build_name('B', 'D', 'o', 'a' + w),
bcdc: 11a01008 movne r1, r8 <== NOT EXECUTED
bce0: 03a0100f moveq r1, #15 <== NOT EXECUTED
bce4: e284c008 add ip, r4, #8 <== NOT EXECUTED
bce8: e3800c6f orr r0, r0, #28416 ; 0x6f00 <== NOT EXECUTED
bcec: e3a02a02 mov r2, #8192 ; 0x2000 <== NOT EXECUTED
bcf0: e3a03b01 mov r3, #1024 ; 0x400 <== NOT EXECUTED
bcf4: e88d1080 stm sp, {r7, ip} <== NOT EXECUTED
bcf8: ebffebf8 bl 6ce0 <rtems_task_create> <== NOT EXECUTED
RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT),
SWAPOUT_TASK_STACK_SIZE,
RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR,
RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT,
&worker->id);
if (sc != RTEMS_SUCCESSFUL)
bcfc: e3500000 cmp r0, #0 <== NOT EXECUTED
bd00: 1a00008a bne bf30 <rtems_bdbuf_swapout_task+0x348> <== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_CREATE);
sc = rtems_task_start (worker->id,
bd04: e1a02004 mov r2, r4 <== NOT EXECUTED
bd08: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
bd0c: e59f1240 ldr r1, [pc, #576] ; bf54 <rtems_bdbuf_swapout_task+0x36c><== NOT EXECUTED
bd10: ebffec84 bl 6f28 <rtems_task_start> <== NOT EXECUTED
rtems_bdbuf_swapout_worker_task,
(rtems_task_argument) worker);
if (sc != RTEMS_SUCCESSFUL)
bd14: e3500000 cmp r0, #0 <== NOT EXECUTED
bd18: 1a000081 bne bf24 <rtems_bdbuf_swapout_task+0x33c> <== NOT EXECUTED
rtems_status_code sc;
size_t w;
rtems_bdbuf_lock_cache ();
for (w = 0; w < bdbuf_config.swapout_workers; w++)
bd1c: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
bd20: e2866001 add r6, r6, #1 <== NOT EXECUTED
bd24: e1560002 cmp r6, r2 <== NOT EXECUTED
bd28: 3affffd5 bcc bc84 <rtems_bdbuf_swapout_task+0x9c> <== NOT EXECUTED
bd2c: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
(rtems_task_argument) worker);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_START);
}
rtems_bdbuf_unlock_cache ();
bd30: ebfffae1 bl a8bc <rtems_bdbuf_unlock_cache>
* here. We do not know the worker is the last in a sequence of sync writes
* until after we have it running so we do not know to tell it to release the
* lock. The simplest solution is to get the main swap out task perform all
* sync operations.
*/
if (bdbuf_cache.sync_active)
bd34: e3a0b000 mov fp, #0
/*
* Create the worker threads.
*/
rtems_bdbuf_swapout_workers_open ();
while (bdbuf_cache.swapout_enabled)
bd38: e5d53004 ldrb r3, [r5, #4]
bd3c: e21330ff ands r3, r3, #255 ; 0xff
bd40: e59f4208 ldr r4, [pc, #520] ; bf50 <rtems_bdbuf_swapout_task+0x368>
bd44: 0a00005f beq bec8 <rtems_bdbuf_swapout_task+0x2e0>
bd48: e3a0a001 mov sl, #1
rtems_bdbuf_swapout_transfer* transfer)
{
rtems_bdbuf_swapout_worker* worker;
bool transfered_buffers = false;
rtems_bdbuf_lock_cache ();
bd4c: ebfffa5f bl a6d0 <rtems_bdbuf_lock_cache>
* here. We do not know the worker is the last in a sequence of sync writes
* until after we have it running so we do not know to tell it to release the
* lock. The simplest solution is to get the main swap out task perform all
* sync operations.
*/
if (bdbuf_cache.sync_active)
bd50: e5d53030 ldrb r3, [r5, #48] ; 0x30
bd54: e3530000 cmp r3, #0
bd58: 13a08000 movne r8, #0
bd5c: 128d4014 addne r4, sp, #20
bd60: 0a00004f beq bea4 <rtems_bdbuf_swapout_task+0x2bc>
transfer = &worker->transfer;
}
rtems_chain_initialize_empty (&transfer->bds);
transfer->dev = BDBUF_INVALID_DEV;
transfer->syncing = bdbuf_cache.sync_active;
bd64: e5d53030 ldrb r3, [r5, #48] ; 0x30
bd68: e5c43014 strb r3, [r4, #20]
/*
* When the sync is for a device limit the sync to that device. If the sync
* is for a buffer handle process the devices in the order on the sync
* list. This means the dev is BDBUF_INVALID_DEV.
*/
if (bdbuf_cache.sync_active)
bd6c: e5d53030 ldrb r3, [r5, #48] ; 0x30
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
bd70: e2847004 add r7, r4, #4
bd74: e3530000 cmp r3, #0
if (worker)
transfer = &worker->transfer;
}
rtems_chain_initialize_empty (&transfer->bds);
transfer->dev = BDBUF_INVALID_DEV;
bd78: e3e01000 mvn r1, #0
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
bd7c: e3a03000 mov r3, #0
bd80: e3e02000 mvn r2, #0
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bd84: e5847000 str r7, [r4]
the_chain->permanent_null = NULL;
bd88: e9840018 stmib r4, {r3, r4}
bd8c: e584100c str r1, [r4, #12]
bd90: e5842010 str r2, [r4, #16]
* When the sync is for a device limit the sync to that device. If the sync
* is for a buffer handle process the devices in the order on the sync
* list. This means the dev is BDBUF_INVALID_DEV.
*/
if (bdbuf_cache.sync_active)
transfer->dev = bdbuf_cache.sync_device;
bd94: 159f11b4 ldrne r1, [pc, #436] ; bf50 <rtems_bdbuf_swapout_task+0x368>
bd98: 12813038 addne r3, r1, #56 ; 0x38
bd9c: 1893000c ldmne r3, {r2, r3}
bda0: 1584200c strne r2, [r4, #12]
bda4: 15843010 strne r3, [r4, #16]
/*
* If we have any buffers in the sync queue move them to the modified
* list. The first sync buffer will select the device we use.
*/
rtems_bdbuf_swapout_modified_processing (&transfer->dev,
bda8: e284600c add r6, r4, #12
bdac: e1a02004 mov r2, r4
bdb0: e1a00006 mov r0, r6
bdb4: e59f119c ldr r1, [pc, #412] ; bf58 <rtems_bdbuf_swapout_task+0x370>
bdb8: e3a03001 mov r3, #1
bdbc: e58db000 str fp, [sp]
bdc0: e58d9004 str r9, [sp, #4]
bdc4: ebfffa52 bl a714 <rtems_bdbuf_swapout_modified_processing>
* Process the cache's modified list.
*/
rtems_bdbuf_swapout_modified_processing (&transfer->dev,
&bdbuf_cache.modified,
&transfer->bds,
bdbuf_cache.sync_active,
bdc8: e5d53030 ldrb r3, [r5, #48] ; 0x30
timer_delta);
/*
* Process the cache's modified list.
*/
rtems_bdbuf_swapout_modified_processing (&transfer->dev,
bdcc: e1a02004 mov r2, r4
bdd0: e1a00006 mov r0, r6
bdd4: e59f1180 ldr r1, [pc, #384] ; bf5c <rtems_bdbuf_swapout_task+0x374>
bdd8: e58da000 str sl, [sp]
bddc: e58d9004 str r9, [sp, #4]
bde0: ebfffa4b bl a714 <rtems_bdbuf_swapout_modified_processing>
/*
* We have all the buffers that have been modified for this device so the
* cache can be unlocked because the state of each buffer has been set to
* TRANSFER.
*/
rtems_bdbuf_unlock_cache ();
bde4: ebfffab4 bl a8bc <rtems_bdbuf_unlock_cache>
/*
* If there are buffers to transfer to the media transfer them.
*/
if (!rtems_chain_is_empty (&transfer->bds))
bde8: e5943000 ldr r3, [r4]
bdec: e1570003 cmp r7, r3
bdf0: 01a0400b moveq r4, fp
bdf4: 0a000007 beq be18 <rtems_bdbuf_swapout_task+0x230>
{
if (worker)
bdf8: e3580000 cmp r8, #0
bdfc: 0a00002e beq bebc <rtems_bdbuf_swapout_task+0x2d4>
{
rtems_status_code sc = rtems_event_send (worker->id,
be00: e5980008 ldr r0, [r8, #8] <== NOT EXECUTED
be04: e3a01004 mov r1, #4 <== NOT EXECUTED
be08: ebffea1c bl 6680 <rtems_event_send> <== NOT EXECUTED
RTEMS_BDBUF_SWAPOUT_SYNC);
if (sc != RTEMS_SUCCESSFUL)
be0c: e3500000 cmp r0, #0 <== NOT EXECUTED
be10: 1a000040 bne bf18 <rtems_bdbuf_swapout_task+0x330> <== NOT EXECUTED
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
}
else
{
rtems_bdbuf_swapout_write (transfer);
be14: e3a04001 mov r4, #1
}
transfered_buffers = true;
}
if (bdbuf_cache.sync_active && !transfered_buffers)
be18: e5d5a030 ldrb sl, [r5, #48] ; 0x30
be1c: e21aa0ff ands sl, sl, #255 ; 0xff
be20: 0a000017 beq be84 <rtems_bdbuf_swapout_task+0x29c>
be24: e3540000 cmp r4, #0
be28: e3a0a000 mov sl, #0
be2c: 1affffc6 bne bd4c <rtems_bdbuf_swapout_task+0x164>
{
rtems_id sync_requester;
rtems_bdbuf_lock_cache ();
be30: ebfffa26 bl a6d0 <rtems_bdbuf_lock_cache>
sync_requester = bdbuf_cache.sync_requester;
be34: e59f2114 ldr r2, [pc, #276] ; bf50 <rtems_bdbuf_swapout_task+0x368>
be38: e5926034 ldr r6, [r2, #52] ; 0x34
bdbuf_cache.sync_active = false;
be3c: e5c24030 strb r4, [r2, #48] ; 0x30
bdbuf_cache.sync_requester = 0;
be40: e5824034 str r4, [r2, #52] ; 0x34
rtems_bdbuf_unlock_cache ();
be44: ebfffa9c bl a8bc <rtems_bdbuf_unlock_cache>
if (sync_requester)
be48: e156000a cmp r6, sl
rtems_event_send (sync_requester, RTEMS_BDBUF_TRANSFER_SYNC);
be4c: 11a00006 movne r0, r6
be50: 13a01002 movne r1, #2
be54: 1bffea09 blne 6680 <rtems_event_send>
*/
update_timers = false;
}
while (transfered_buffers);
sc = rtems_event_receive (RTEMS_BDBUF_SWAPOUT_SYNC,
be58: e3a00004 mov r0, #4
be5c: e3a01000 mov r1, #0
be60: e59d200c ldr r2, [sp, #12]
be64: e28d3034 add r3, sp, #52 ; 0x34
be68: ebffe9a6 bl 6508 <rtems_event_receive>
RTEMS_EVENT_ALL | RTEMS_WAIT,
period_in_ticks,
&out);
if ((sc != RTEMS_SUCCESSFUL) && (sc != RTEMS_TIMEOUT))
be6c: e3500006 cmp r0, #6
be70: 13500000 cmpne r0, #0
be74: 0affffaf beq bd38 <rtems_bdbuf_swapout_task+0x150>
rtems_fatal_error_occurred (BLKDEV_FATAL_BDBUF_SWAPOUT_RE);
be78: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
be7c: e2800018 add r0, r0, #24 <== NOT EXECUTED
be80: ebffec9c bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
/*
* Extact all the buffers we find for a specific device. The device is
* the first one we find on a modified list. Process the sync queue of
* buffers first.
*/
if (rtems_bdbuf_swapout_processing (timer_delta,
be84: e3540000 cmp r4, #0
be88: 0afffff2 beq be58 <rtems_bdbuf_swapout_task+0x270>
rtems_bdbuf_swapout_transfer* transfer)
{
rtems_bdbuf_swapout_worker* worker;
bool transfered_buffers = false;
rtems_bdbuf_lock_cache ();
be8c: ebfffa0f bl a6d0 <rtems_bdbuf_lock_cache>
* here. We do not know the worker is the last in a sequence of sync writes
* until after we have it running so we do not know to tell it to release the
* lock. The simplest solution is to get the main swap out task perform all
* sync operations.
*/
if (bdbuf_cache.sync_active)
be90: e5d53030 ldrb r3, [r5, #48] ; 0x30
be94: e3530000 cmp r3, #0
be98: 13a08000 movne r8, #0
be9c: 128d4014 addne r4, sp, #20
bea0: 1affffaf bne bd64 <rtems_bdbuf_swapout_task+0x17c>
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
bea4: e59f00b4 ldr r0, [pc, #180] ; bf60 <rtems_bdbuf_swapout_task+0x378>
bea8: ebffedd2 bl 75f8 <_Chain_Get>
worker = NULL;
else
{
worker = (rtems_bdbuf_swapout_worker*)
rtems_chain_get (&bdbuf_cache.swapout_workers);
if (worker)
beac: e2508000 subs r8, r0, #0
beb0: 028d4014 addeq r4, sp, #20
transfer = &worker->transfer;
beb4: 12884010 addne r4, r8, #16
beb8: eaffffa9 b bd64 <rtems_bdbuf_swapout_task+0x17c>
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
}
else
{
rtems_bdbuf_swapout_write (transfer);
bebc: e1a00004 mov r0, r4
bec0: ebfffedd bl ba3c <rtems_bdbuf_swapout_write>
bec4: eaffffd2 b be14 <rtems_bdbuf_swapout_task+0x22c>
bec8: e1a06003 mov r6, r3 <== NOT EXECUTED
static void
rtems_bdbuf_swapout_workers_close (void)
{
rtems_chain_node* node;
rtems_bdbuf_lock_cache ();
becc: ebfff9ff bl a6d0 <rtems_bdbuf_lock_cache> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
bed0: e5945008 ldr r5, [r4, #8] <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
bed4: e284400c add r4, r4, #12 <== NOT EXECUTED
node = rtems_chain_first (&bdbuf_cache.swapout_workers);
while (!rtems_chain_is_tail (&bdbuf_cache.swapout_workers, node))
bed8: e1550004 cmp r5, r4 <== NOT EXECUTED
bedc: 0a000006 beq befc <rtems_bdbuf_swapout_task+0x314> <== NOT EXECUTED
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) node;
worker->enabled = false;
bee0: e5c5600c strb r6, [r5, #12] <== NOT EXECUTED
rtems_event_send (worker->id, RTEMS_BDBUF_SWAPOUT_SYNC);
bee4: e5950008 ldr r0, [r5, #8] <== NOT EXECUTED
bee8: e3a01004 mov r1, #4 <== NOT EXECUTED
beec: ebffe9e3 bl 6680 <rtems_event_send> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
bef0: e5955000 ldr r5, [r5] <== NOT EXECUTED
rtems_chain_node* node;
rtems_bdbuf_lock_cache ();
node = rtems_chain_first (&bdbuf_cache.swapout_workers);
while (!rtems_chain_is_tail (&bdbuf_cache.swapout_workers, node))
bef4: e1550004 cmp r5, r4 <== NOT EXECUTED
bef8: 1afffff8 bne bee0 <rtems_bdbuf_swapout_task+0x2f8> <== NOT EXECUTED
worker->enabled = false;
rtems_event_send (worker->id, RTEMS_BDBUF_SWAPOUT_SYNC);
node = rtems_chain_next (node);
}
rtems_bdbuf_unlock_cache ();
befc: ebfffa6e bl a8bc <rtems_bdbuf_unlock_cache> <== NOT EXECUTED
rtems_fatal_error_occurred (BLKDEV_FATAL_BDBUF_SWAPOUT_RE);
}
rtems_bdbuf_swapout_workers_close ();
free (transfer.write_req);
bf00: e59d002c ldr r0, [sp, #44] ; 0x2c <== NOT EXECUTED
bf04: ebffdc7d bl 3100 <free> <== NOT EXECUTED
rtems_task_delete (RTEMS_SELF);
bf08: e3a00000 mov r0, #0 <== NOT EXECUTED
bf0c: ebffebc1 bl 6e18 <rtems_task_delete> <== NOT EXECUTED
}
bf10: e28dd038 add sp, sp, #56 ; 0x38 <== NOT EXECUTED
bf14: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if (worker)
{
rtems_status_code sc = rtems_event_send (worker->id,
RTEMS_BDBUF_SWAPOUT_SYNC);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
bf18: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
bf1c: e2800014 add r0, r0, #20 <== NOT EXECUTED
bf20: ebffec74 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
sc = rtems_task_start (worker->id,
rtems_bdbuf_swapout_worker_task,
(rtems_task_argument) worker);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_START);
bf24: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
bf28: e2800017 add r0, r0, #23 <== NOT EXECUTED
bf2c: ebffec71 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
SWAPOUT_TASK_STACK_SIZE,
RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR,
RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT,
&worker->id);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WK_CREATE);
bf30: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
bf34: e2800016 add r0, r0, #22 <== NOT EXECUTED
bf38: ebffec6e bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
{
rtems_bdbuf_swapout_worker* worker;
worker = malloc (sizeof (rtems_bdbuf_swapout_worker));
if (!worker)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
bf3c: e2800442 add r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
bf40: e2800015 add r0, r0, #21 <== NOT EXECUTED
bf44: ebffec6b bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000bf64 <rtems_bdbuf_swapout_worker_task>:
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
bf64: e5d0300c ldrb r3, [r0, #12] <== NOT EXECUTED
bf68: e3530000 cmp r3, #0 <== NOT EXECUTED
* @param arg A pointer to the worker thread's private data.
* @return rtems_task Not used.
*/
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
bf6c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
bf70: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
bf74: 0a000015 beq bfd0 <rtems_bdbuf_swapout_worker_task+0x6c> <== NOT EXECUTED
{
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_SWAPOUT_SYNC);
rtems_bdbuf_swapout_write (&worker->transfer);
bf78: e2805010 add r5, r0, #16 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
bf7c: e280a014 add sl, r0, #20 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
bf80: e3a08000 mov r8, #0 <== NOT EXECUTED
rtems_bdbuf_lock_cache ();
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bf84: e3e06000 mvn r6, #0 <== NOT EXECUTED
bf88: e3e07000 mvn r7, #0 <== NOT EXECUTED
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
{
rtems_bdbuf_wait_for_event (RTEMS_BDBUF_SWAPOUT_SYNC);
bf8c: e3a00004 mov r0, #4 <== NOT EXECUTED
bf90: ebfffae4 bl ab28 <rtems_bdbuf_wait_for_event> <== NOT EXECUTED
rtems_bdbuf_swapout_write (&worker->transfer);
bf94: e1a00005 mov r0, r5 <== NOT EXECUTED
bf98: ebfffea7 bl ba3c <rtems_bdbuf_swapout_write> <== NOT EXECUTED
rtems_bdbuf_lock_cache ();
bf9c: ebfff9cb bl a6d0 <rtems_bdbuf_lock_cache> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
bfa0: e59f0044 ldr r0, [pc, #68] ; bfec <rtems_bdbuf_swapout_worker_task+0x88><== NOT EXECUTED
bfa4: e1a01004 mov r1, r4 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
bfa8: e584a010 str sl, [r4, #16] <== NOT EXECUTED
the_chain->permanent_null = NULL;
bfac: e5848014 str r8, [r4, #20] <== NOT EXECUTED
the_chain->last = _Chain_Head(the_chain);
bfb0: e5845018 str r5, [r4, #24] <== NOT EXECUTED
rtems_chain_initialize_empty (&worker->transfer.bds);
worker->transfer.dev = BDBUF_INVALID_DEV;
bfb4: e584601c str r6, [r4, #28] <== NOT EXECUTED
bfb8: e5847020 str r7, [r4, #32] <== NOT EXECUTED
bfbc: ebffed79 bl 75a8 <_Chain_Append> <== NOT EXECUTED
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
rtems_bdbuf_unlock_cache ();
bfc0: ebfffa3d bl a8bc <rtems_bdbuf_unlock_cache> <== NOT EXECUTED
static rtems_task
rtems_bdbuf_swapout_worker_task (rtems_task_argument arg)
{
rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg;
while (worker->enabled)
bfc4: e5d4300c ldrb r3, [r4, #12] <== NOT EXECUTED
bfc8: e3530000 cmp r3, #0 <== NOT EXECUTED
bfcc: 1affffee bne bf8c <rtems_bdbuf_swapout_worker_task+0x28> <== NOT EXECUTED
rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);
rtems_bdbuf_unlock_cache ();
}
free (worker->transfer.write_req);
bfd0: e5940028 ldr r0, [r4, #40] ; 0x28 <== NOT EXECUTED
bfd4: ebffdc49 bl 3100 <free> <== NOT EXECUTED
free (worker);
bfd8: e1a00004 mov r0, r4 <== NOT EXECUTED
bfdc: ebffdc47 bl 3100 <free> <== NOT EXECUTED
rtems_task_delete (RTEMS_SELF);
bfe0: e3a00000 mov r0, #0 <== NOT EXECUTED
}
bfe4: e8bd45f0 pop {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
}
free (worker->transfer.write_req);
free (worker);
rtems_task_delete (RTEMS_SELF);
bfe8: eaffeb8a b 6e18 <rtems_task_delete> <== NOT EXECUTED
0000ba3c <rtems_bdbuf_swapout_write>:
*
* @param transfer The transfer transaction.
*/
static void
rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer)
{
ba3c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
printf ("bdbuf:swapout transfer: %08x\n", (unsigned) transfer->dev);
/*
* If there are buffers to transfer to the media transfer them.
*/
if (!rtems_chain_is_empty (&transfer->bds))
ba40: e5903000 ldr r3, [r0]
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
ba44: e2807004 add r7, r0, #4
ba48: e1530007 cmp r3, r7
*
* @param transfer The transfer transaction.
*/
static void
rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer)
{
ba4c: e24dd004 sub sp, sp, #4
ba50: e1a04000 mov r4, r0
printf ("bdbuf:swapout transfer: %08x\n", (unsigned) transfer->dev);
/*
* If there are buffers to transfer to the media transfer them.
*/
if (!rtems_chain_is_empty (&transfer->bds))
ba54: 0a00005b beq bbc8 <rtems_bdbuf_swapout_write+0x18c>
/*
* Obtain the disk device. The cache's mutex has been released to avoid a
* dead lock.
*/
rtems_disk_device *dd = rtems_disk_obtain (transfer->dev);
ba58: e280100c add r1, r0, #12
ba5c: e8910003 ldm r1, {r0, r1}
ba60: ebffd98a bl 2090 <rtems_disk_obtain>
if (dd == NULL)
ba64: e2505000 subs r5, r0, #0
ba68: 059f3170 ldreq r3, [pc, #368] ; bbe0 <rtems_bdbuf_swapout_write+0x1a4>
dd = &null_disk;
bufs_per_bd = dd->block_size / bdbuf_config.buffer_min;
ba6c: e59f8170 ldr r8, [pc, #368] ; bbe4 <rtems_bdbuf_swapout_write+0x1a8>
ba70: 159f3168 ldrne r3, [pc, #360] ; bbe0 <rtems_bdbuf_swapout_write+0x1a4>
* Obtain the disk device. The cache's mutex has been released to avoid a
* dead lock.
*/
rtems_disk_device *dd = rtems_disk_obtain (transfer->dev);
if (dd == NULL)
ba74: 01a05003 moveq r5, r3
dd = &null_disk;
bufs_per_bd = dd->block_size / bdbuf_config.buffer_min;
ba78: e5950020 ldr r0, [r5, #32]
ba7c: e5981020 ldr r1, [r8, #32]
ba80: 158d3000 strne r3, [sp]
* Obtain the disk device. The cache's mutex has been released to avoid a
* dead lock.
*/
rtems_disk_device *dd = rtems_disk_obtain (transfer->dev);
if (dd == NULL)
ba84: 058d3000 streq r3, [sp]
dd = &null_disk;
bufs_per_bd = dd->block_size / bdbuf_config.buffer_min;
ba88: eb003ef7 bl 1b66c <__aeabi_uidiv>
* should be possible to make this change with little effect in this
* code. The array that is passed is broken in design and should be
* removed. Merging members of a struct into the first member is
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
ba8c: e5943018 ldr r3, [r4, #24]
transfer->write_req->bufnum = 0;
ba90: e3a02000 mov r2, #0
* should be possible to make this change with little effect in this
* code. The array that is passed is broken in design and should be
* removed. Merging members of a struct into the first member is
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
ba94: e3a0a00c mov sl, #12
transfer->write_req->bufnum = 0;
ba98: e5832010 str r2, [r3, #16]
* should be possible to make this change with little effect in this
* code. The array that is passed is broken in design and should be
* removed. Merging members of a struct into the first member is
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
ba9c: e583a00c str sl, [r3, #12]
* Perform the transfer if there are no more buffers, or the transfer
* size has reached the configured max. value.
*/
if (rtems_chain_is_empty (&transfer->bds) ||
(transfer->write_req->bufnum >= bdbuf_config.max_write_blocks))
baa0: e5988004 ldr r8, [r8, #4]
rtems_disk_device *dd = rtems_disk_obtain (transfer->dev);
if (dd == NULL)
dd = &null_disk;
bufs_per_bd = dd->block_size / bdbuf_config.buffer_min;
baa4: e1a0b000 mov fp, r0
* Perform the transfer if there are no more buffers, or the transfer
* size has reached the configured max. value.
*/
if (rtems_chain_is_empty (&transfer->bds) ||
(transfer->write_req->bufnum >= bdbuf_config.max_write_blocks))
baa8: e1a06002 mov r6, r2
transfer->write_req->bufnum++;
buf->user = bd;
buf->block = bd->block;
buf->length = dd->block_size;
buf->buffer = bd->buffer;
last_block = bd->block;
baac: e1a09002 mov r9, r2
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
bab0: e1a00004 mov r0, r4
bab4: ebffeecf bl 75f8 <_Chain_Get>
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
transfer->write_req->bufnum = 0;
while ((node = rtems_chain_get(&transfer->bds)) != NULL)
bab8: e2502000 subs r2, r0, #0
babc: 0a000020 beq bb44 <rtems_bdbuf_swapout_write+0x108>
printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n",
bd->block, transfer->write_req->bufnum,
dd->phys_dev->capabilities &
RTEMS_BLKDEV_CAP_MULTISECTOR_CONT ? "MULIT" : "SCAT");
if ((dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) &&
bac0: e5953008 ldr r3, [r5, #8]
bac4: e593300c ldr r3, [r3, #12]
bac8: e3130001 tst r3, #1
bacc: 0a00002a beq bb7c <rtems_bdbuf_swapout_write+0x140>
transfer->write_req->bufnum &&
bad0: e5941018 ldr r1, [r4, #24] <== NOT EXECUTED
bad4: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n",
bd->block, transfer->write_req->bufnum,
dd->phys_dev->capabilities &
RTEMS_BLKDEV_CAP_MULTISECTOR_CONT ? "MULIT" : "SCAT");
if ((dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) &&
bad8: e3530000 cmp r3, #0 <== NOT EXECUTED
badc: 0a000028 beq bb84 <rtems_bdbuf_swapout_write+0x148> <== NOT EXECUTED
transfer->write_req->bufnum &&
(bd->block != (last_block + bufs_per_bd)))
bae0: e592c01c ldr ip, [r2, #28] <== NOT EXECUTED
bae4: e086000b add r0, r6, fp <== NOT EXECUTED
bae8: e15c0000 cmp ip, r0 <== NOT EXECUTED
baec: 0a000024 beq bb84 <rtems_bdbuf_swapout_write+0x148> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
baf0: e1a01002 mov r1, r2 <== NOT EXECUTED
baf4: e1a00004 mov r0, r4 <== NOT EXECUTED
baf8: eb000fc6 bl fa18 <_Chain_Insert> <== NOT EXECUTED
bafc: e5941018 ldr r1, [r4, #24] <== NOT EXECUTED
bb00: e3a02001 mov r2, #1 <== NOT EXECUTED
/*
* Perform the transfer if there are no more buffers, or the transfer
* size has reached the configured max. value.
*/
if (rtems_chain_is_empty (&transfer->bds) ||
bb04: e5943000 ldr r3, [r4]
bb08: e1570003 cmp r7, r3
bb0c: 0a000002 beq bb1c <rtems_bdbuf_swapout_write+0xe0>
bb10: e5913010 ldr r3, [r1, #16]
bb14: e1530008 cmp r3, r8
bb18: 3a000027 bcc bbbc <rtems_bdbuf_swapout_write+0x180>
(transfer->write_req->bufnum >= bdbuf_config.max_write_blocks))
write = true;
if (write)
{
rtems_bdbuf_execute_transfer_request (dd, transfer->write_req, false);
bb1c: e3a02000 mov r2, #0
bb20: e1a00005 mov r0, r5
bb24: ebffff6f bl b8e8 <rtems_bdbuf_execute_transfer_request>
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
bb28: e5943018 ldr r3, [r4, #24]
bb2c: e1a00004 mov r0, r4
transfer->write_req->bufnum = 0;
bb30: e5839010 str r9, [r3, #16]
if (write)
{
rtems_bdbuf_execute_transfer_request (dd, transfer->write_req, false);
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
bb34: e583a00c str sl, [r3, #12]
bb38: ebffeeae bl 75f8 <_Chain_Get>
* trouble waiting to happen.
*/
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
transfer->write_req->bufnum = 0;
while ((node = rtems_chain_get(&transfer->bds)) != NULL)
bb3c: e2502000 subs r2, r0, #0
bb40: 1affffde bne bac0 <rtems_bdbuf_swapout_write+0x84>
transfer->write_req->status = RTEMS_RESOURCE_IN_USE;
transfer->write_req->bufnum = 0;
}
}
if (dd != &null_disk)
bb44: e59d3000 ldr r3, [sp]
bb48: e1550003 cmp r5, r3
bb4c: 0a00001d beq bbc8 <rtems_bdbuf_swapout_write+0x18c>
{
/*
* If sync'ing and the deivce is capability of handling a sync IO control
* call perform the call.
*/
if (transfer->syncing &&
bb50: e5d43014 ldrb r3, [r4, #20]
bb54: e3530000 cmp r3, #0
bb58: 0a000003 beq bb6c <rtems_bdbuf_swapout_write+0x130>
(dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC))
bb5c: e5950008 ldr r0, [r5, #8]
{
/*
* If sync'ing and the deivce is capability of handling a sync IO control
* call perform the call.
*/
if (transfer->syncing &&
bb60: e590300c ldr r3, [r0, #12]
bb64: e3130002 tst r3, #2
bb68: 1a000018 bne bbd0 <rtems_bdbuf_swapout_write+0x194>
{
/* int result = */ dd->ioctl (dd->phys_dev, RTEMS_BLKDEV_REQ_SYNC, NULL);
/* How should the error be handled ? */
}
rtems_disk_release (dd);
bb6c: e1a00005 mov r0, r5
}
}
}
bb70: e28dd004 add sp, sp, #4
bb74: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr}
{
/* int result = */ dd->ioctl (dd->phys_dev, RTEMS_BLKDEV_REQ_SYNC, NULL);
/* How should the error be handled ? */
}
rtems_disk_release (dd);
bb78: eaffd9d8 b 22e0 <rtems_disk_release>
printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n",
bd->block, transfer->write_req->bufnum,
dd->phys_dev->capabilities &
RTEMS_BLKDEV_CAP_MULTISECTOR_CONT ? "MULIT" : "SCAT");
if ((dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) &&
bb7c: e5941018 ldr r1, [r4, #24]
bb80: e5913010 ldr r3, [r1, #16]
}
else
{
rtems_blkdev_sg_buffer* buf;
buf = &transfer->write_req->bufs[transfer->write_req->bufnum];
transfer->write_req->bufnum++;
bb84: e2830001 add r0, r3, #1
bb88: e5810010 str r0, [r1, #16]
buf->user = bd;
buf->block = bd->block;
bb8c: e592c01c ldr ip, [r2, #28]
else
{
rtems_blkdev_sg_buffer* buf;
buf = &transfer->write_req->bufs[transfer->write_req->bufnum];
transfer->write_req->bufnum++;
buf->user = bd;
bb90: e0810203 add r0, r1, r3, lsl #4
buf->block = bd->block;
bb94: e580c018 str ip, [r0, #24]
buf->length = dd->block_size;
bb98: e595c020 ldr ip, [r5, #32]
bb9c: e580c01c str ip, [r0, #28]
buf->buffer = bd->buffer;
bba0: e592c020 ldr ip, [r2, #32]
bba4: e2833002 add r3, r3, #2
else
{
rtems_blkdev_sg_buffer* buf;
buf = &transfer->write_req->bufs[transfer->write_req->bufnum];
transfer->write_req->bufnum++;
buf->user = bd;
bba8: e5802024 str r2, [r0, #36] ; 0x24
buf->block = bd->block;
buf->length = dd->block_size;
buf->buffer = bd->buffer;
last_block = bd->block;
bbac: e592601c ldr r6, [r2, #28]
buf = &transfer->write_req->bufs[transfer->write_req->bufnum];
transfer->write_req->bufnum++;
buf->user = bd;
buf->block = bd->block;
buf->length = dd->block_size;
buf->buffer = bd->buffer;
bbb0: e781c203 str ip, [r1, r3, lsl #4]
last_block = bd->block;
bbb4: e3a02000 mov r2, #0
bbb8: eaffffd1 b bb04 <rtems_bdbuf_swapout_write+0xc8>
if (rtems_chain_is_empty (&transfer->bds) ||
(transfer->write_req->bufnum >= bdbuf_config.max_write_blocks))
write = true;
if (write)
bbbc: e3520000 cmp r2, #0
bbc0: 0affffba beq bab0 <rtems_bdbuf_swapout_write+0x74>
bbc4: eaffffd4 b bb1c <rtems_bdbuf_swapout_write+0xe0> <== NOT EXECUTED
}
rtems_disk_release (dd);
}
}
}
bbc8: e28dd004 add sp, sp, #4 <== NOT EXECUTED
bbcc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* call perform the call.
*/
if (transfer->syncing &&
(dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC))
{
/* int result = */ dd->ioctl (dd->phys_dev, RTEMS_BLKDEV_REQ_SYNC, NULL);
bbd0: e3a01002 mov r1, #2 <== NOT EXECUTED
bbd4: e1a0e00f mov lr, pc <== NOT EXECUTED
bbd8: e595f028 ldr pc, [r5, #40] ; 0x28 <== NOT EXECUTED
bbdc: eaffffe2 b bb6c <rtems_bdbuf_swapout_write+0x130> <== NOT EXECUTED
0000b130 <rtems_bdbuf_swapout_writereq_alloc>:
* I am disappointment at finding code like this in RTEMS. The request should
* have been a rtems_chain_control. Simple, fast and less storage as the node
* is already part of the buffer structure.
*/
rtems_blkdev_request* write_req =
malloc (sizeof (rtems_blkdev_request) +
b130: e59f3044 ldr r3, [pc, #68] ; b17c <rtems_bdbuf_swapout_writereq_alloc+0x4c>
b134: e5930004 ldr r0, [r3, #4]
b138: e1a00200 lsl r0, r0, #4
*
* @return rtems_blkdev_request* The write reference memory.
*/
static rtems_blkdev_request*
rtems_bdbuf_swapout_writereq_alloc (void)
{
b13c: e92d4010 push {r4, lr}
* I am disappointment at finding code like this in RTEMS. The request should
* have been a rtems_chain_control. Simple, fast and less storage as the node
* is already part of the buffer structure.
*/
rtems_blkdev_request* write_req =
malloc (sizeof (rtems_blkdev_request) +
b140: e2800018 add r0, r0, #24
b144: ebffe0c6 bl 3464 <malloc>
(bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)));
if (!write_req)
b148: e2504000 subs r4, r0, #0
b14c: 0a000007 beq b170 <rtems_bdbuf_swapout_writereq_alloc+0x40>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
write_req->req = RTEMS_BLKDEV_REQ_WRITE;
b150: e3a03001 mov r3, #1
b154: e5843000 str r3, [r4]
write_req->req_done = rtems_bdbuf_transfer_done;
b158: e59f3020 ldr r3, [pc, #32] ; b180 <rtems_bdbuf_swapout_writereq_alloc+0x50>
write_req->done_arg = write_req;
b15c: e9840018 stmib r4, {r3, r4}
write_req->io_task = rtems_task_self ();
b160: eb001157 bl f6c4 <rtems_task_self>
b164: e5840014 str r0, [r4, #20]
return write_req;
}
b168: e1a00004 mov r0, r4
b16c: e8bd8010 pop {r4, pc}
rtems_blkdev_request* write_req =
malloc (sizeof (rtems_blkdev_request) +
(bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)));
if (!write_req)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM);
b170: e2800442 add r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
b174: e2800015 add r0, r0, #21 <== NOT EXECUTED
b178: ebffefde bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000bff0 <rtems_bdbuf_sync>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_bdbuf_sync (rtems_bdbuf_buffer *bd)
{
bff0: e92d4030 push {r4, r5, lr}
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
bff4: e59f5150 ldr r5, [pc, #336] ; c14c <rtems_bdbuf_sync+0x15c>
bff8: e5d53088 ldrb r3, [r5, #136] ; 0x88
bffc: e3530000 cmp r3, #0
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_bdbuf_sync (rtems_bdbuf_buffer *bd)
{
c000: e1a04000 mov r4, r0
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "sync");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
c004: 03a00016 moveq r0, #22
}
static rtems_status_code
rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind)
{
if (!bdbuf_cache.initialised)
c008: 08bd8030 popeq {r4, r5, pc}
return RTEMS_NOT_CONFIGURED;
if (bd == NULL)
c00c: e3540000 cmp r4, #0
c010: 03a00009 moveq r0, #9
c014: 08bd8030 popeq {r4, r5, pc}
if (rtems_bdbuf_tracer)
{
printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block);
rtems_bdbuf_show_users (kind, bd);
}
rtems_bdbuf_lock_cache();
c018: ebfff9ac bl a6d0 <rtems_bdbuf_lock_cache>
sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "sync");
if (sc != RTEMS_SUCCESSFUL)
return sc;
switch (bd->state)
c01c: e5943024 ldr r3, [r4, #36] ; 0x24
c020: e3530003 cmp r3, #3
c024: 3a000003 bcc c038 <rtems_bdbuf_sync+0x48>
c028: e3530005 cmp r3, #5
c02c: 9a00000b bls c060 <rtems_bdbuf_sync+0x70>
c030: e3530006 cmp r3, #6
c034: 0a000004 beq c04c <rtems_bdbuf_sync+0x5c>
break;
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_5);
c038: e5940024 ldr r0, [r4, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c03c: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c040: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c044: e3800003 orr r0, r0, #3 <== NOT EXECUTED
c048: ebffec2a bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
case RTEMS_BDBUF_STATE_ACCESS_EMPTY:
case RTEMS_BDBUF_STATE_ACCESS_MODIFIED:
rtems_bdbuf_sync_after_access (bd);
break;
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
rtems_bdbuf_discard_buffer_after_access (bd);
c04c: e1a00004 mov r0, r4
c050: ebfffd3c bl b548 <rtems_bdbuf_discard_buffer_after_access>
}
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_usage ();
rtems_bdbuf_unlock_cache ();
c054: ebfffa18 bl a8bc <rtems_bdbuf_unlock_cache>
c058: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
c05c: e8bd8030 pop {r4, r5, pc}
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c060: e3a03008 mov r3, #8
c064: e5843024 str r3, [r4, #36] ; 0x24
c068: e285005c add r0, r5, #92 ; 0x5c
c06c: e1a01004 mov r1, r4
c070: ebffed4c bl 75a8 <_Chain_Append>
{
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC);
rtems_chain_append (&bdbuf_cache.sync, &bd->link);
if (bd->waiters)
c074: e5943028 ldr r3, [r4, #40] ; 0x28
c078: e3530000 cmp r3, #0
c07c: 1a000027 bne c120 <rtems_bdbuf_sync+0x130>
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
rtems_bdbuf_wake_swapper ();
c080: ebfffa66 bl aa20 <rtems_bdbuf_wake_swapper>
static void
rtems_bdbuf_wait_for_sync_done (rtems_bdbuf_buffer *bd)
{
while (true)
{
switch (bd->state)
c084: e5943024 ldr r3, [r4, #36] ; 0x24
c088: e2433001 sub r3, r3, #1
c08c: e3530009 cmp r3, #9
c090: 979ff103 ldrls pc, [pc, r3, lsl #2]
c094: ea00001c b c10c <rtems_bdbuf_sync+0x11c> <== NOT EXECUTED
c098: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c09c: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0a0: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0a4: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0a8: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0ac: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0b0: 0000c0d0 .word 0x0000c0d0 <== NOT EXECUTED
c0b4: 0000c0c0 .word 0x0000c0c0 <== NOT EXECUTED
c0b8: 0000c0c0 .word 0x0000c0c0 <== NOT EXECUTED
c0bc: 0000c0c0 .word 0x0000c0c0 <== NOT EXECUTED
case RTEMS_BDBUF_STATE_ACCESS_PURGED:
return;
case RTEMS_BDBUF_STATE_SYNC:
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
c0c0: e1a00004 mov r0, r4
c0c4: e59f1084 ldr r1, [pc, #132] ; c150 <rtems_bdbuf_sync+0x160>
c0c8: ebfffb0a bl acf8 <rtems_bdbuf_wait>
c0cc: eaffffec b c084 <rtems_bdbuf_sync+0x94>
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
c0d0: e5943028 ldr r3, [r4, #40] ; 0x28
rtems_bdbuf_wait_for_sync_done (bd);
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
c0d4: e3530000 cmp r3, #0
c0d8: 1affffdd bne c054 <rtems_bdbuf_sync+0x64>
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
c0dc: e5943024 ldr r3, [r4, #36] ; 0x24
rtems_bdbuf_wait_for_sync_done (bd);
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
c0e0: e3530002 cmp r3, #2
c0e4: 0a000002 beq c0f4 <rtems_bdbuf_sync+0x104>
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
c0e8: e5943024 ldr r3, [r4, #36] ; 0x24
rtems_bdbuf_wait_for_sync_done (bd);
/*
* We may have created a cached or empty buffer which may be recycled.
*/
if (bd->waiters == 0
c0ec: e3530001 cmp r3, #1
c0f0: 1affffd7 bne c054 <rtems_bdbuf_sync+0x64>
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
{
if (bd->state == RTEMS_BDBUF_STATE_EMPTY)
c0f4: e5943024 ldr r3, [r4, #36] ; 0x24
c0f8: e3530001 cmp r3, #1
c0fc: 0a00000a beq c12c <rtems_bdbuf_sync+0x13c>
{
rtems_bdbuf_remove_from_tree (bd);
rtems_bdbuf_make_free_and_add_to_lru_list (bd);
}
rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters);
c100: e59f004c ldr r0, [pc, #76] ; c154 <rtems_bdbuf_sync+0x164>
c104: ebfff977 bl a6e8 <rtems_bdbuf_wake>
c108: eaffffd1 b c054 <rtems_bdbuf_sync+0x64>
case RTEMS_BDBUF_STATE_TRANSFER:
case RTEMS_BDBUF_STATE_TRANSFER_PURGED:
rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters);
break;
default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_9);
c10c: e5940024 ldr r0, [r4, #36] ; 0x24 <== NOT EXECUTED
#endif
static void
rtems_bdbuf_fatal (rtems_bdbuf_buf_state state, uint32_t error)
{
rtems_fatal_error_occurred ((((uint32_t) state) << 16) | error);
c110: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
c114: e3800442 orr r0, r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
c118: e3800007 orr r0, r0, #7 <== NOT EXECUTED
c11c: ebffebf5 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC);
rtems_chain_append (&bdbuf_cache.sync, &bd->link);
if (bd->waiters)
rtems_bdbuf_wake (&bdbuf_cache.access_waiters);
c120: e2850068 add r0, r5, #104 ; 0x68
c124: ebfff96f bl a6e8 <rtems_bdbuf_wake>
c128: eaffffd4 b c080 <rtems_bdbuf_sync+0x90>
&& (bd->state == RTEMS_BDBUF_STATE_CACHED
|| bd->state == RTEMS_BDBUF_STATE_EMPTY))
{
if (bd->state == RTEMS_BDBUF_STATE_EMPTY)
{
rtems_bdbuf_remove_from_tree (bd);
c12c: e1a00004 mov r0, r4
c130: ebfffc13 bl b184 <rtems_bdbuf_remove_from_tree>
}
static void
rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state)
{
bd->state = state;
c134: e3a03000 mov r3, #0
c138: e5843024 str r3, [r4, #36] ; 0x24
RTEMS_INLINE_ROUTINE void _Chain_Prepend(
Chain_Control *the_chain,
Chain_Node *the_node
)
{
_Chain_Insert(_Chain_Head(the_chain), the_node);
c13c: e1a01004 mov r1, r4
c140: e59f0010 ldr r0, [pc, #16] ; c158 <rtems_bdbuf_sync+0x168>
c144: eb000e33 bl fa18 <_Chain_Insert>
c148: eaffffec b c100 <rtems_bdbuf_sync+0x110>
0000a8bc <rtems_bdbuf_unlock_cache>:
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_unlock (rtems_id lock, uint32_t fatal_error_code)
{
rtems_status_code sc = rtems_semaphore_release (lock);
a8bc: e59f301c ldr r3, [pc, #28] ; a8e0 <rtems_bdbuf_unlock_cache+0x24>
/**
* Unlock the cache.
*/
static void
rtems_bdbuf_unlock_cache (void)
{
a8c0: e52de004 push {lr} ; (str lr, [sp, #-4]!)
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_unlock (rtems_id lock, uint32_t fatal_error_code)
{
rtems_status_code sc = rtems_semaphore_release (lock);
a8c4: e5930028 ldr r0, [r3, #40] ; 0x28
a8c8: ebfff0da bl 6c38 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL)
a8cc: e3500000 cmp r0, #0
a8d0: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
rtems_fatal_error_occurred (fatal_error_code);
a8d4: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
a8d8: e280000e add r0, r0, #14 <== NOT EXECUTED
a8dc: ebfff205 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000a8e4 <rtems_bdbuf_unlock_sync>:
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_unlock (rtems_id lock, uint32_t fatal_error_code)
{
rtems_status_code sc = rtems_semaphore_release (lock);
a8e4: e59f301c ldr r3, [pc, #28] ; a908 <rtems_bdbuf_unlock_sync+0x24>
/**
* Unlock the cache's sync lock. Any blocked writers are woken.
*/
static void
rtems_bdbuf_unlock_sync (void)
{
a8e8: e52de004 push {lr} ; (str lr, [sp, #-4]!)
* @param fatal_error_code The error code if the call fails.
*/
static void
rtems_bdbuf_unlock (rtems_id lock, uint32_t fatal_error_code)
{
rtems_status_code sc = rtems_semaphore_release (lock);
a8ec: e593002c ldr r0, [r3, #44] ; 0x2c
a8f0: ebfff0d0 bl 6c38 <rtems_semaphore_release>
if (sc != RTEMS_SUCCESSFUL)
a8f4: e3500000 cmp r0, #0
a8f8: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
rtems_fatal_error_occurred (fatal_error_code);
a8fc: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
a900: e280000c add r0, r0, #12 <== NOT EXECUTED
a904: ebfff1fb bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000ab28 <rtems_bdbuf_wait_for_event>:
return RTEMS_UNSATISFIED;
}
static void
rtems_bdbuf_wait_for_event (rtems_event_set event)
{
ab28: e92d4010 push {r4, lr}
ab2c: e24dd004 sub sp, sp, #4
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_event_set out = 0;
ab30: e3a01000 mov r1, #0
ab34: e28d3004 add r3, sp, #4
ab38: e5231004 str r1, [r3, #-4]!
sc = rtems_event_receive (event,
ab3c: e1a02001 mov r2, r1
ab40: e1a0300d mov r3, sp
return RTEMS_UNSATISFIED;
}
static void
rtems_bdbuf_wait_for_event (rtems_event_set event)
{
ab44: e1a04000 mov r4, r0
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_event_set out = 0;
sc = rtems_event_receive (event,
ab48: ebffee6e bl 6508 <rtems_event_receive>
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&out);
if (sc != RTEMS_SUCCESSFUL || out != event)
ab4c: e3500000 cmp r0, #0
ab50: 1a000004 bne ab68 <rtems_bdbuf_wait_for_event+0x40>
ab54: e59d3000 ldr r3, [sp]
ab58: e1530004 cmp r3, r4
ab5c: 1a000001 bne ab68 <rtems_bdbuf_wait_for_event+0x40>
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_WAIT_EVNT);
}
ab60: e28dd004 add sp, sp, #4
ab64: e8bd8010 pop {r4, pc}
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&out);
if (sc != RTEMS_SUCCESSFUL || out != event)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_WAIT_EVNT);
ab68: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
ab6c: e280001a add r0, r0, #26 <== NOT EXECUTED
ab70: ebfff160 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000a6e8 <rtems_bdbuf_wake>:
static void
rtems_bdbuf_wake (const rtems_bdbuf_waiters *waiters)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (waiters->count > 0)
a6e8: e5903000 ldr r3, [r0]
a6ec: e3530000 cmp r3, #0
* Wake a blocked resource. The resource has a counter that lets us know if
* there are any waiters.
*/
static void
rtems_bdbuf_wake (const rtems_bdbuf_waiters *waiters)
{
a6f0: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_status_code sc = RTEMS_SUCCESSFUL;
if (waiters->count > 0)
a6f4: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
{
sc = rtems_semaphore_flush (waiters->sema);
a6f8: e5900004 ldr r0, [r0, #4]
a6fc: eb00136b bl f4b0 <rtems_semaphore_flush>
if (sc != RTEMS_SUCCESSFUL)
a700: e3500000 cmp r0, #0
a704: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_CACHE_WAKE);
a708: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
a70c: e2800013 add r0, r0, #19 <== NOT EXECUTED
a710: ebfff278 bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000aa20 <rtems_bdbuf_wake_swapper>:
}
static void
rtems_bdbuf_wake_swapper (void)
{
rtems_status_code sc = rtems_event_send (bdbuf_cache.swapout,
aa20: e59f3020 ldr r3, [pc, #32] ; aa48 <rtems_bdbuf_wake_swapper+0x28>
}
}
static void
rtems_bdbuf_wake_swapper (void)
{
aa24: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_status_code sc = rtems_event_send (bdbuf_cache.swapout,
aa28: e5930000 ldr r0, [r3]
aa2c: e3a01004 mov r1, #4
aa30: ebffef12 bl 6680 <rtems_event_send>
RTEMS_BDBUF_SWAPOUT_SYNC);
if (sc != RTEMS_SUCCESSFUL)
aa34: e3500000 cmp r0, #0
aa38: 049df004 popeq {pc} ; (ldreq pc, [sp], #4)
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_WAKE);
aa3c: e3a00442 mov r0, #1107296256 ; 0x42000000 <== NOT EXECUTED
aa40: e2800014 add r0, r0, #20 <== NOT EXECUTED
aa44: ebfff1ab bl 70f8 <rtems_fatal_error_occurred> <== NOT EXECUTED
00023cf0 <rtems_bdpart_create>:
const rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
const unsigned *dist,
size_t count
)
{
23cf0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
23cf4: e2514000 subs r4, r1, #0 <== NOT EXECUTED
const rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
const unsigned *dist,
size_t count
)
{
23cf8: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
23cfc: e1a05002 mov r5, r2 <== NOT EXECUTED
23d00: e1a07003 mov r7, r3 <== NOT EXECUTED
23d04: e59d604c ldr r6, [sp, #76] ; 0x4c <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
23d08: 0a000002 beq 23d18 <rtems_bdpart_create+0x28> <== NOT EXECUTED
&& format->type == RTEMS_BDPART_FORMAT_MBR
23d0c: e5943000 ldr r3, [r4] <== NOT EXECUTED
23d10: e3530000 cmp r3, #0 <== NOT EXECUTED
23d14: 0a000073 beq 23ee8 <rtems_bdpart_create+0x1f8> <== NOT EXECUTED
&& format->mbr.dos_compatibility;
rtems_blkdev_bnum disk_end = 0;
23d18: e3a0b000 mov fp, #0 <== NOT EXECUTED
23d1c: e58db024 str fp, [sp, #36] ; 0x24 <== NOT EXECUTED
23d20: e3a08001 mov r8, #1 <== NOT EXECUTED
rtems_blkdev_bnum free_space = 0;
dev_t disk = 0;
size_t i = 0;
/* Check if we have something to do */
if (count == 0) {
23d24: e3560000 cmp r6, #0 <== NOT EXECUTED
23d28: 01a09006 moveq r9, r6 <== NOT EXECUTED
23d2c: 0a00006a beq 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
/* Nothing to do */
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL || dist == NULL) {
23d30: e3540000 cmp r4, #0 <== NOT EXECUTED
23d34: 13550000 cmpne r5, #0 <== NOT EXECUTED
23d38: 0a000071 beq 23f04 <rtems_bdpart_create+0x214> <== NOT EXECUTED
23d3c: e3570000 cmp r7, #0 <== NOT EXECUTED
23d40: 0a00006f beq 23f04 <rtems_bdpart_create+0x214> <== NOT EXECUTED
rtems_blkdev_bnum dist_sum = 0;
rtems_blkdev_bnum record_space =
dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1;
rtems_blkdev_bnum overhead = 0;
rtems_blkdev_bnum free_space = 0;
dev_t disk = 0;
23d44: e3a09000 mov r9, #0 <== NOT EXECUTED
if (format == NULL || pt == NULL || dist == NULL) {
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
23d48: e28d101c add r1, sp, #28 <== NOT EXECUTED
23d4c: e28d2024 add r2, sp, #36 ; 0x24 <== NOT EXECUTED
rtems_blkdev_bnum dist_sum = 0;
rtems_blkdev_bnum record_space =
dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1;
rtems_blkdev_bnum overhead = 0;
rtems_blkdev_bnum free_space = 0;
dev_t disk = 0;
23d50: e3a0a000 mov sl, #0 <== NOT EXECUTED
23d54: e58d901c str r9, [sp, #28] <== NOT EXECUTED
23d58: e58da020 str sl, [sp, #32] <== NOT EXECUTED
if (format == NULL || pt == NULL || dist == NULL) {
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
23d5c: eb00019c bl 243d4 <rtems_bdpart_get_disk_data> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
23d60: e2509000 subs r9, r0, #0 <== NOT EXECUTED
23d64: 1a00005c bne 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
unsigned prev_sum = dist_sum;
dist_sum += dist [i];
23d68: e5973000 ldr r3, [r7] <== NOT EXECUTED
if (dist_sum < prev_sum) {
return RTEMS_INVALID_NUMBER;
}
if (dist [i] == 0) {
23d6c: e3530000 cmp r3, #0 <== NOT EXECUTED
23d70: 11a0a003 movne sl, r3 <== NOT EXECUTED
23d74: 11a02009 movne r2, r9 <== NOT EXECUTED
23d78: 1a000005 bne 23d94 <rtems_bdpart_create+0xa4> <== NOT EXECUTED
23d7c: ea000062 b 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
unsigned prev_sum = dist_sum;
dist_sum += dist [i];
23d80: e7971102 ldr r1, [r7, r2, lsl #2] <== NOT EXECUTED
if (dist_sum < prev_sum) {
23d84: e09aa001 adds sl, sl, r1 <== NOT EXECUTED
23d88: 2a00005f bcs 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
}
if (dist [i] == 0) {
23d8c: e3510000 cmp r1, #0 <== NOT EXECUTED
23d90: 0a00005d beq 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Get distribution sum and check for overflow */
for (i = 0; i < count; ++i) {
23d94: e2822001 add r2, r2, #1 <== NOT EXECUTED
23d98: e1560002 cmp r6, r2 <== NOT EXECUTED
23d9c: 8afffff7 bhi 23d80 <rtems_bdpart_create+0x90> <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
23da0: e5942000 ldr r2, [r4] <== NOT EXECUTED
23da4: e3520000 cmp r2, #0 <== NOT EXECUTED
23da8: 13a09018 movne r9, #24 <== NOT EXECUTED
23dac: 1a00004a bne 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
return RTEMS_NOT_IMPLEMENTED;
}
/* Align end of disk on cylinder boundary if necessary */
if (dos_compatibility) {
23db0: e35b0000 cmp fp, #0 <== NOT EXECUTED
23db4: 1a000056 bne 23f14 <rtems_bdpart_create+0x224> <== NOT EXECUTED
23db8: e59d0024 ldr r0, [sp, #36] ; 0x24 <== NOT EXECUTED
23dbc: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
/*
* In case we need an extended partition and logical partitions we have to
* account for the space of each EBR.
*/
if (count > 4) {
23dc0: e3560004 cmp r6, #4 <== NOT EXECUTED
overhead += (count - 3) * record_space;
23dc4: 82461003 subhi r1, r6, #3 <== NOT EXECUTED
23dc8: 80228891 mlahi r2, r1, r8, r8 <== NOT EXECUTED
/*
* In case we need an extended partition and logical partitions we have to
* account for the space of each EBR.
*/
if (count > 4) {
23dcc: 91a02008 movls r2, r8 <== NOT EXECUTED
/*
* Account space to align every partition on cylinder boundaries if
* necessary.
*/
if (dos_compatibility) {
23dd0: e35b0000 cmp fp, #0 <== NOT EXECUTED
overhead += (count - 1) * record_space;
23dd4: 12461001 subne r1, r6, #1 <== NOT EXECUTED
23dd8: 10222891 mlane r2, r1, r8, r2 <== NOT EXECUTED
}
/* Check disk space */
if ((overhead + count) > disk_end) {
23ddc: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
23de0: e0821006 add r1, r2, r6 <== NOT EXECUTED
23de4: e1510000 cmp r1, r0 <== NOT EXECUTED
23de8: 83a0901b movhi r9, #27 <== NOT EXECUTED
23dec: 8a00003a bhi 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
/* Begin of first primary partition */
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
23df0: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
23df4: e0621000 rsb r1, r2, r0 <== NOT EXECUTED
for (i = 0; i < count; ++i) {
rtems_bdpart_partition *p = pt + i;
/* Partition size */
rtems_blkdev_bnum s = free_space * dist [i];
23df8: e0000193 mul r0, r3, r1 <== NOT EXECUTED
if (s < free_space || s < dist [i]) {
23dfc: e1510000 cmp r1, r0 <== NOT EXECUTED
23e00: 8a000041 bhi 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
23e04: e1500003 cmp r0, r3 <== NOT EXECUTED
23e08: 3a00003f bcc 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
23e0c: e3560004 cmp r6, #4 <== NOT EXECUTED
23e10: 93a02000 movls r2, #0 <== NOT EXECUTED
23e14: 83a02001 movhi r2, #1 <== NOT EXECUTED
23e18: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
23e1c: e1a02005 mov r2, r5 <== NOT EXECUTED
23e20: e58d9014 str r9, [sp, #20] <== NOT EXECUTED
23e24: e58d700c str r7, [sp, #12] <== NOT EXECUTED
23e28: e1a0b008 mov fp, r8 <== NOT EXECUTED
23e2c: e3a04000 mov r4, #0 <== NOT EXECUTED
23e30: e58da008 str sl, [sp, #8] <== NOT EXECUTED
23e34: e1a09001 mov r9, r1 <== NOT EXECUTED
23e38: e58d5018 str r5, [sp, #24] <== NOT EXECUTED
23e3c: e1a07002 mov r7, r2 <== NOT EXECUTED
23e40: ea000008 b 23e68 <rtems_bdpart_create+0x178> <== NOT EXECUTED
for (i = 0; i < count; ++i) {
rtems_bdpart_partition *p = pt + i;
/* Partition size */
rtems_blkdev_bnum s = free_space * dist [i];
23e44: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
23e48: e7903104 ldr r3, [r0, r4, lsl #2] <== NOT EXECUTED
23e4c: e0000993 mul r0, r3, r9 <== NOT EXECUTED
if (s < free_space || s < dist [i]) {
23e50: e1590000 cmp r9, r0 <== NOT EXECUTED
23e54: 8a00002c bhi 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
23e58: e1530000 cmp r3, r0 <== NOT EXECUTED
23e5c: e2877030 add r7, r7, #48 ; 0x30 <== NOT EXECUTED
23e60: 8a000029 bhi 23f0c <rtems_bdpart_create+0x21c> <== NOT EXECUTED
23e64: e1a05007 mov r5, r7 <== NOT EXECUTED
/* TODO: Calculate without overflow */
return RTEMS_INVALID_NUMBER;
}
s /= dist_sum;
23e68: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
23e6c: eb00dc1d bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
/* Ensure that the partition is not empty */
if (s == 0) {
23e70: e3500000 cmp r0, #0 <== NOT EXECUTED
23e74: 11a03000 movne r3, r0 <== NOT EXECUTED
23e78: 03a03001 moveq r3, #1 <== NOT EXECUTED
/* Align partition upwards */
s += record_space - (s % record_space);
/* Partition begin and end */
p->begin = pos;
23e7c: e585b000 str fp, [r5] <== NOT EXECUTED
if (s == 0) {
s = 1;
}
/* Align partition upwards */
s += record_space - (s % record_space);
23e80: e08ba008 add sl, fp, r8 <== NOT EXECUTED
/* Partition begin and end */
p->begin = pos;
pos += s;
23e84: e1a00003 mov r0, r3 <== NOT EXECUTED
23e88: e1a01008 mov r1, r8 <== NOT EXECUTED
23e8c: e083b00a add fp, r3, sl <== NOT EXECUTED
23e90: eb00dca8 bl 5b138 <__umodsi3> <== NOT EXECUTED
p->end = pos;
/* Reserve space for the EBR if necessary */
if (count > 4 && i > 2) {
23e94: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
23e98: e3540002 cmp r4, #2 <== NOT EXECUTED
23e9c: 93a03000 movls r3, #0 <== NOT EXECUTED
23ea0: 82033001 andhi r3, r3, #1 <== NOT EXECUTED
23ea4: e3530000 cmp r3, #0 <== NOT EXECUTED
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
for (i = 0; i < count; ++i) {
23ea8: e2844001 add r4, r4, #1 <== NOT EXECUTED
/* Align partition upwards */
s += record_space - (s % record_space);
/* Partition begin and end */
p->begin = pos;
pos += s;
23eac: e060b00b rsb fp, r0, fp <== NOT EXECUTED
p->end = pos;
/* Reserve space for the EBR if necessary */
if (count > 4 && i > 2) {
p->begin += record_space;
23eb0: 1585a000 strne sl, [r5] <== NOT EXECUTED
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
for (i = 0; i < count; ++i) {
23eb4: e1560004 cmp r6, r4 <== NOT EXECUTED
s += record_space - (s % record_space);
/* Partition begin and end */
p->begin = pos;
pos += s;
p->end = pos;
23eb8: e585b004 str fp, [r5, #4] <== NOT EXECUTED
pos = record_space;
/* Space for partitions */
free_space = disk_end - overhead;
for (i = 0; i < count; ++i) {
23ebc: 8affffe0 bhi 23e44 <rtems_bdpart_create+0x154> <== NOT EXECUTED
23ec0: e59d5018 ldr r5, [sp, #24] <== NOT EXECUTED
p->begin += record_space;
}
}
/* Expand the last partition to the disk end */
pt [count - 1].end = disk_end;
23ec4: e2466001 sub r6, r6, #1 <== NOT EXECUTED
23ec8: e0866086 add r6, r6, r6, lsl #1 <== NOT EXECUTED
23ecc: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
23ed0: e0855206 add r5, r5, r6, lsl #4 <== NOT EXECUTED
23ed4: e59d9014 ldr r9, [sp, #20] <== NOT EXECUTED
23ed8: e5852004 str r2, [r5, #4] <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
23edc: e1a00009 mov r0, r9 <== NOT EXECUTED
23ee0: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
23ee4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
23ee8: e5d42008 ldrb r2, [r4, #8] <== NOT EXECUTED
23eec: e3520000 cmp r2, #0 <== NOT EXECUTED
23ef0: 0affff88 beq 23d18 <rtems_bdpart_create+0x28> <== NOT EXECUTED
rtems_blkdev_bnum disk_end = 0;
23ef4: e58d3024 str r3, [sp, #36] ; 0x24 <== NOT EXECUTED
23ef8: e3a0b001 mov fp, #1 <== NOT EXECUTED
23efc: e3a0803f mov r8, #63 ; 0x3f <== NOT EXECUTED
23f00: eaffff87 b 23d24 <rtems_bdpart_create+0x34> <== NOT EXECUTED
}
/* Expand the last partition to the disk end */
pt [count - 1].end = disk_end;
return RTEMS_SUCCESSFUL;
23f04: e3a09009 mov r9, #9 <== NOT EXECUTED
23f08: eafffff3 b 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
23f0c: e3a0900a mov r9, #10 <== NOT EXECUTED
23f10: eafffff1 b 23edc <rtems_bdpart_create+0x1ec> <== NOT EXECUTED
return RTEMS_NOT_IMPLEMENTED;
}
/* Align end of disk on cylinder boundary if necessary */
if (dos_compatibility) {
disk_end -= (disk_end % record_space);
23f14: e59d4024 ldr r4, [sp, #36] ; 0x24 <== NOT EXECUTED
23f18: e1a01008 mov r1, r8 <== NOT EXECUTED
23f1c: e1a00004 mov r0, r4 <== NOT EXECUTED
23f20: e58d3000 str r3, [sp] <== NOT EXECUTED
23f24: eb00dc83 bl 5b138 <__umodsi3> <== NOT EXECUTED
23f28: e0604004 rsb r4, r0, r4 <== NOT EXECUTED
23f2c: e58d4010 str r4, [sp, #16] <== NOT EXECUTED
23f30: e59d3000 ldr r3, [sp] <== NOT EXECUTED
23f34: eaffffa1 b 23dc0 <rtems_bdpart_create+0xd0> <== NOT EXECUTED
00023f38 <rtems_bdpart_dump>:
{
uuid_unparse_lower( type, str);
}
void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count)
{
23f38: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
23f3c: e1a06001 mov r6, r1 <== NOT EXECUTED
23f40: e24dd038 sub sp, sp, #56 ; 0x38 <== NOT EXECUTED
23f44: e1a04000 mov r4, r0 <== NOT EXECUTED
size_t i = 0;
printf(
23f48: e59f00fc ldr r0, [pc, #252] ; 2404c <rtems_bdpart_dump+0x114><== NOT EXECUTED
23f4c: eb008e2a bl 477fc <puts> <== NOT EXECUTED
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
23f50: e3560000 cmp r6, #0 <== NOT EXECUTED
23f54: 0a00002c beq 2400c <rtems_bdpart_dump+0xd4> <== NOT EXECUTED
23f58: e3a05000 mov r5, #0 <== NOT EXECUTED
23f5c: e28d7037 add r7, sp, #55 ; 0x37 <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
23f60: e1a08005 mov r8, r5 <== NOT EXECUTED
static void rtems_bdpart_type_to_string(
const uuid_t type,
char str [37]
)
{
uuid_unparse_lower( type, str);
23f64: e1a0a00d mov sl, sp <== NOT EXECUTED
23f68: ea000015 b 23fc4 <rtems_bdpart_dump+0x8c> <== NOT EXECUTED
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
switch (type_mbr) {
23f6c: e5dd3037 ldrb r3, [sp, #55] ; 0x37 <== NOT EXECUTED
23f70: e353000b cmp r3, #11 <== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_16:
type = "FAT 16";
break;
case RTEMS_BDPART_MBR_FAT_16_LBA:
type = "FAT 16 LBA";
break;
23f74: 059f30d4 ldreq r3, [pc, #212] ; 24050 <rtems_bdpart_dump+0x118><== NOT EXECUTED
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
switch (type_mbr) {
23f78: 0a00000a beq 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
23f7c: 8a000026 bhi 2401c <rtems_bdpart_dump+0xe4> <== NOT EXECUTED
23f80: e3530001 cmp r3, #1 <== NOT EXECUTED
23f84: 059f30c8 ldreq r3, [pc, #200] ; 24054 <rtems_bdpart_dump+0x11c><== NOT EXECUTED
23f88: 0a000006 beq 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
23f8c: e3530004 cmp r3, #4 <== NOT EXECUTED
23f90: 0a00002b beq 24044 <rtems_bdpart_dump+0x10c> <== NOT EXECUTED
break;
case RTEMS_BDPART_MBR_DATA:
type = "DATA";
break;
default:
snprintf( type_buffer, sizeof( type_buffer), "0x%02" PRIx8, type_mbr);
23f94: e1a0000d mov r0, sp <== NOT EXECUTED
23f98: e3a01034 mov r1, #52 ; 0x34 <== NOT EXECUTED
23f9c: e59f20b4 ldr r2, [pc, #180] ; 24058 <rtems_bdpart_dump+0x120><== NOT EXECUTED
23fa0: eb0092fd bl 48b9c <snprintf> <== NOT EXECUTED
23fa4: e1a0300d mov r3, sp <== NOT EXECUTED
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
}
printf(
23fa8: e8940006 ldm r4, {r1, r2} <== NOT EXECUTED
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
23fac: e2855001 add r5, r5, #1 <== NOT EXECUTED
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
}
printf(
23fb0: e59f00a4 ldr r0, [pc, #164] ; 2405c <rtems_bdpart_dump+0x124><== NOT EXECUTED
23fb4: eb008d6b bl 47568 <printf> <== NOT EXECUTED
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
23fb8: e1560005 cmp r6, r5 <== NOT EXECUTED
23fbc: e2844030 add r4, r4, #48 ; 0x30 <== NOT EXECUTED
23fc0: 9a000011 bls 2400c <rtems_bdpart_dump+0xd4> <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
23fc4: e2849008 add r9, r4, #8 <== NOT EXECUTED
23fc8: e1a00009 mov r0, r9 <== NOT EXECUTED
23fcc: e1a01007 mov r1, r7 <== NOT EXECUTED
for (i = 0; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
23fd0: e5cd8037 strb r8, [sp, #55] ; 0x37 <== NOT EXECUTED
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
23fd4: eb00011c bl 2444c <rtems_bdpart_to_mbr_partition_type> <== NOT EXECUTED
23fd8: e3500000 cmp r0, #0 <== NOT EXECUTED
23fdc: 1affffe2 bne 23f6c <rtems_bdpart_dump+0x34> <== NOT EXECUTED
static void rtems_bdpart_type_to_string(
const uuid_t type,
char str [37]
)
{
uuid_unparse_lower( type, str);
23fe0: e1a00009 mov r0, r9 <== NOT EXECUTED
23fe4: e1a0100d mov r1, sp <== NOT EXECUTED
23fe8: eb006a7c bl 3e9e0 <uuid_unparse_lower> <== NOT EXECUTED
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
23fec: e2855001 add r5, r5, #1 <== NOT EXECUTED
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
}
printf(
23ff0: e8940006 ldm r4, {r1, r2} <== NOT EXECUTED
static void rtems_bdpart_type_to_string(
const uuid_t type,
char str [37]
)
{
uuid_unparse_lower( type, str);
23ff4: e1a0300d mov r3, sp <== NOT EXECUTED
} else {
rtems_bdpart_type_to_string( p->type, type_buffer);
type = type_buffer;
}
printf(
23ff8: e59f005c ldr r0, [pc, #92] ; 2405c <rtems_bdpart_dump+0x124><== NOT EXECUTED
23ffc: eb008d59 bl 47568 <printf> <== NOT EXECUTED
"------------+------------+-----------------------------------------------------\n"
" BEGIN | END | TYPE\n"
"------------+------------+-----------------------------------------------------\n"
);
for (i = 0; i < count; ++i) {
24000: e1560005 cmp r6, r5 <== NOT EXECUTED
24004: e2844030 add r4, r4, #48 ; 0x30 <== NOT EXECUTED
24008: 8affffed bhi 23fc4 <rtems_bdpart_dump+0x8c> <== NOT EXECUTED
p->end,
type
);
}
puts( "------------+------------+-----------------------------------------------------");
2400c: e59f004c ldr r0, [pc, #76] ; 24060 <rtems_bdpart_dump+0x128><== NOT EXECUTED
24010: eb008df9 bl 477fc <puts> <== NOT EXECUTED
}
24014: e28dd038 add sp, sp, #56 ; 0x38 <== NOT EXECUTED
24018: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
switch (type_mbr) {
2401c: e353000e cmp r3, #14 <== NOT EXECUTED
24020: 059f303c ldreq r3, [pc, #60] ; 24064 <rtems_bdpart_dump+0x12c><== NOT EXECUTED
24024: 0affffdf beq 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
24028: e35300da cmp r3, #218 ; 0xda <== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_32:
type = "FAT 32";
break;
case RTEMS_BDPART_MBR_FAT_32_LBA:
type = "FAT 32 LBA";
break;
2402c: 059f3034 ldreq r3, [pc, #52] ; 24068 <rtems_bdpart_dump+0x130><== NOT EXECUTED
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
switch (type_mbr) {
24030: 0affffdc beq 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
24034: e353000c cmp r3, #12 <== NOT EXECUTED
24038: 1affffd5 bne 23f94 <rtems_bdpart_dump+0x5c> <== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_16_LBA:
type = "FAT 16 LBA";
break;
case RTEMS_BDPART_MBR_FAT_32:
type = "FAT 32";
break;
2403c: e59f3028 ldr r3, [pc, #40] ; 2406c <rtems_bdpart_dump+0x134><== NOT EXECUTED
case RTEMS_BDPART_MBR_FAT_32_LBA:
type = "FAT 32 LBA";
break;
24040: eaffffd8 b 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
const char *type = NULL;
char type_buffer [52];
uint8_t type_mbr = 0;
if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) {
switch (type_mbr) {
24044: e59f3024 ldr r3, [pc, #36] ; 24070 <rtems_bdpart_dump+0x138><== NOT EXECUTED
24048: eaffffd6 b 23fa8 <rtems_bdpart_dump+0x70> <== NOT EXECUTED
000243d4 <rtems_bdpart_get_disk_data>:
rtems_status_code rtems_bdpart_get_disk_data(
const char *disk_name,
dev_t *disk,
rtems_blkdev_bnum *disk_end
)
{
243d4: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
243d8: e24dd048 sub sp, sp, #72 ; 0x48 <== NOT EXECUTED
243dc: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_blkdev_bnum block_size = 0;
rtems_disk_device *dd = NULL;
struct stat st;
/* Get disk handle */
rv = stat( disk_name, &st);
243e0: e1a0100d mov r1, sp <== NOT EXECUTED
rtems_status_code rtems_bdpart_get_disk_data(
const char *disk_name,
dev_t *disk,
rtems_blkdev_bnum *disk_end
)
{
243e4: e1a05002 mov r5, r2 <== NOT EXECUTED
rtems_blkdev_bnum block_size = 0;
rtems_disk_device *dd = NULL;
struct stat st;
/* Get disk handle */
rv = stat( disk_name, &st);
243e8: ebff9492 bl 9638 <stat> <== NOT EXECUTED
if (rv != 0) {
243ec: e3500000 cmp r0, #0 <== NOT EXECUTED
243f0: 0a000002 beq 24400 <rtems_bdpart_get_disk_data+0x2c> <== NOT EXECUTED
if (block_size < RTEMS_BDPART_BLOCK_SIZE) {
return RTEMS_IO_ERROR;
}
/* Check that we have do not have a logical disk */
if (disk_begin != 0) {
243f4: e3a00003 mov r0, #3 <== NOT EXECUTED
return RTEMS_IO_ERROR;
}
return RTEMS_SUCCESSFUL;
}
243f8: e28dd048 add sp, sp, #72 ; 0x48 <== NOT EXECUTED
243fc: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
/* Get disk handle */
rv = stat( disk_name, &st);
if (rv != 0) {
return RTEMS_INVALID_NAME;
}
*disk = st.st_rdev;
24400: e28d1018 add r1, sp, #24 <== NOT EXECUTED
24404: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
24408: e8840003 stm r4, {r0, r1} <== NOT EXECUTED
/* Get disk begin, end and block size */
dd = rtems_disk_obtain( *disk);
2440c: ebff88f2 bl 67dc <rtems_disk_obtain> <== NOT EXECUTED
if (dd == NULL) {
24410: e2503000 subs r3, r0, #0 <== NOT EXECUTED
24414: 0afffff6 beq 243f4 <rtems_bdpart_get_disk_data+0x20> <== NOT EXECUTED
return RTEMS_INVALID_NAME;
}
disk_begin = dd->start;
*disk_end = dd->size;
24418: e593201c ldr r2, [r3, #28] <== NOT EXECUTED
/* Get disk begin, end and block size */
dd = rtems_disk_obtain( *disk);
if (dd == NULL) {
return RTEMS_INVALID_NAME;
}
disk_begin = dd->start;
2441c: e5936018 ldr r6, [r3, #24] <== NOT EXECUTED
*disk_end = dd->size;
24420: e5852000 str r2, [r5] <== NOT EXECUTED
block_size = dd->block_size;
24424: e5934020 ldr r4, [r3, #32] <== NOT EXECUTED
sc = rtems_disk_release( dd);
24428: ebff897f bl 6a2c <rtems_disk_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
2442c: e3500000 cmp r0, #0 <== NOT EXECUTED
24430: 1afffff0 bne 243f8 <rtems_bdpart_get_disk_data+0x24> <== NOT EXECUTED
return sc;
}
/* Check block size */
if (block_size < RTEMS_BDPART_BLOCK_SIZE) {
24434: e3540c02 cmp r4, #512 ; 0x200 <== NOT EXECUTED
24438: 3a000001 bcc 24444 <rtems_bdpart_get_disk_data+0x70> <== NOT EXECUTED
return RTEMS_IO_ERROR;
}
/* Check that we have do not have a logical disk */
if (disk_begin != 0) {
2443c: e3560000 cmp r6, #0 <== NOT EXECUTED
24440: 0affffec beq 243f8 <rtems_bdpart_get_disk_data+0x24> <== NOT EXECUTED
24444: e3a0001b mov r0, #27 <== NOT EXECUTED
24448: eaffffea b 243f8 <rtems_bdpart_get_disk_data+0x24> <== NOT EXECUTED
000241a0 <rtems_bdpart_mount>:
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
241a0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
241a4: e3a0102f mov r1, #47 ; 0x2f <== NOT EXECUTED
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
241a8: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
241ac: e1a09003 mov r9, r3 <== NOT EXECUTED
241b0: e1a08002 mov r8, r2 <== NOT EXECUTED
241b4: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
241b8: eb0099d5 bl 4a914 <strrchr> <== NOT EXECUTED
241bc: e1a05000 mov r5, r0 <== NOT EXECUTED
char *logical_disk_name = NULL;
char *logical_disk_marker = NULL;
char *mount_point = NULL;
char *mount_marker = NULL;
size_t disk_file_name_size = 0;
size_t disk_name_size = strlen( disk_name);
241c0: e1a00004 mov r0, r4 <== NOT EXECUTED
241c4: eb009686 bl 49be4 <strlen> <== NOT EXECUTED
241c8: e1a06000 mov r6, r0 <== NOT EXECUTED
size_t mount_base_size = strlen( mount_base);
241cc: e1a00009 mov r0, r9 <== NOT EXECUTED
241d0: eb009683 bl 49be4 <strlen> <== NOT EXECUTED
241d4: e1a0a000 mov sl, r0 <== NOT EXECUTED
size_t i = 0;
/* Create logical disk name base */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
241d8: e2860004 add r0, r6, #4 <== NOT EXECUTED
241dc: ebff90a7 bl 8480 <malloc> <== NOT EXECUTED
if (logical_disk_name == NULL) {
241e0: e2507000 subs r7, r0, #0 <== NOT EXECUTED
241e4: 03a0401a moveq r4, #26 <== NOT EXECUTED
241e8: 0a000047 beq 2430c <rtems_bdpart_mount+0x16c> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
}
strncpy( logical_disk_name, disk_name, disk_name_size);
241ec: e1a01004 mov r1, r4 <== NOT EXECUTED
241f0: e1a02006 mov r2, r6 <== NOT EXECUTED
241f4: eb00971a bl 49e64 <strncpy> <== NOT EXECUTED
/* Get disk file name */
if (disk_file_name != NULL) {
241f8: e3550000 cmp r5, #0 <== NOT EXECUTED
241fc: 058d4004 streq r4, [sp, #4] <== NOT EXECUTED
24200: 01a0b006 moveq fp, r6 <== NOT EXECUTED
24204: 0a000004 beq 2421c <rtems_bdpart_mount+0x7c> <== NOT EXECUTED
disk_file_name += 1;
24208: e2855001 add r5, r5, #1 <== NOT EXECUTED
disk_file_name_size = strlen( disk_file_name);
2420c: e1a00005 mov r0, r5 <== NOT EXECUTED
}
strncpy( logical_disk_name, disk_name, disk_name_size);
/* Get disk file name */
if (disk_file_name != NULL) {
disk_file_name += 1;
24210: e58d5004 str r5, [sp, #4] <== NOT EXECUTED
disk_file_name_size = strlen( disk_file_name);
24214: eb009672 bl 49be4 <strlen> <== NOT EXECUTED
24218: e1a0b000 mov fp, r0 <== NOT EXECUTED
disk_file_name = disk_name;
disk_file_name_size = disk_name_size;
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
2421c: e08b400a add r4, fp, sl <== NOT EXECUTED
24220: e2840005 add r0, r4, #5 <== NOT EXECUTED
24224: ebff9095 bl 8480 <malloc> <== NOT EXECUTED
if (mount_point == NULL) {
24228: e2505000 subs r5, r0, #0 <== NOT EXECUTED
2422c: 03a0401a moveq r4, #26 <== NOT EXECUTED
24230: 0a000031 beq 242fc <rtems_bdpart_mount+0x15c> <== NOT EXECUTED
esc = RTEMS_NO_MEMORY;
goto cleanup;
}
strncpy( mount_point, mount_base, mount_base_size);
24234: e1a0200a mov r2, sl <== NOT EXECUTED
24238: e1a01009 mov r1, r9 <== NOT EXECUTED
2423c: eb009708 bl 49e64 <strncpy> <== NOT EXECUTED
mount_point [mount_base_size] = '/';
24240: e3a0302f mov r3, #47 ; 0x2f <== NOT EXECUTED
24244: e7c5300a strb r3, [r5, sl] <== NOT EXECUTED
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
24248: e28a0001 add r0, sl, #1 <== NOT EXECUTED
2424c: e0850000 add r0, r5, r0 <== NOT EXECUTED
24250: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
24254: e1a0200b mov r2, fp <== NOT EXECUTED
24258: eb009701 bl 49e64 <strncpy> <== NOT EXECUTED
/* Markers */
logical_disk_marker = logical_disk_name + disk_name_size;
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
2425c: e284a001 add sl, r4, #1 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
24260: e3580000 cmp r8, #0 <== NOT EXECUTED
strncpy( mount_point, mount_base, mount_base_size);
mount_point [mount_base_size] = '/';
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
/* Markers */
logical_disk_marker = logical_disk_name + disk_name_size;
24264: e0876006 add r6, r7, r6 <== NOT EXECUTED
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
24268: e085a00a add sl, r5, sl <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
2426c: 0a000021 beq 242f8 <rtems_bdpart_mount+0x158> <== NOT EXECUTED
24270: e3a04000 mov r4, #0 <== NOT EXECUTED
24274: ea000001 b 24280 <rtems_bdpart_mount+0xe0> <== NOT EXECUTED
24278: e1580004 cmp r8, r4 <== NOT EXECUTED
2427c: 9a00001d bls 242f8 <rtems_bdpart_mount+0x158> <== NOT EXECUTED
/* Create logical disk name */
int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
24280: e2844001 add r4, r4, #1 <== NOT EXECUTED
24284: e3a01004 mov r1, #4 <== NOT EXECUTED
24288: e59f20b8 ldr r2, [pc, #184] ; 24348 <rtems_bdpart_mount+0x1a8><== NOT EXECUTED
2428c: e1a03004 mov r3, r4 <== NOT EXECUTED
24290: e1a00006 mov r0, r6 <== NOT EXECUTED
24294: eb009240 bl 48b9c <snprintf> <== NOT EXECUTED
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
24298: e3500003 cmp r0, #3 <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
2429c: e3a02004 mov r2, #4 <== NOT EXECUTED
242a0: e1a01006 mov r1, r6 <== NOT EXECUTED
242a4: e1a0000a mov r0, sl <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create logical disk name */
int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
242a8: ca00001a bgt 24318 <rtems_bdpart_mount+0x178> <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
242ac: eb0096ec bl 49e64 <strncpy> <== NOT EXECUTED
rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
242b0: e3a01f7f mov r1, #508 ; 0x1fc <== NOT EXECUTED
242b4: e2811003 add r1, r1, #3 <== NOT EXECUTED
242b8: e1a00005 mov r0, r5 <== NOT EXECUTED
242bc: ebff9473 bl 9490 <rtems_mkdir> <== NOT EXECUTED
if (rv != 0) {
242c0: e250c000 subs ip, r0, #0 <== NOT EXECUTED
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Mount */
rv = mount(
242c4: e1a01005 mov r1, r5 <== NOT EXECUTED
242c8: e59f207c ldr r2, [pc, #124] ; 2434c <rtems_bdpart_mount+0x1ac><== NOT EXECUTED
242cc: e1a0300c mov r3, ip <== NOT EXECUTED
242d0: e1a00007 mov r0, r7 <== NOT EXECUTED
}
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv != 0) {
242d4: 1a000015 bne 24330 <rtems_bdpart_mount+0x190> <== NOT EXECUTED
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Mount */
rv = mount(
242d8: e58dc000 str ip, [sp] <== NOT EXECUTED
242dc: ebff9158 bl 8844 <mount> <== NOT EXECUTED
mount_point,
"msdos",
0,
NULL
);
if (rv != 0) {
242e0: e3500000 cmp r0, #0 <== NOT EXECUTED
242e4: 0affffe3 beq 24278 <rtems_bdpart_mount+0xd8> <== NOT EXECUTED
rmdir( mount_point);
242e8: e1a00005 mov r0, r5 <== NOT EXECUTED
242ec: eb001913 bl 2a740 <rmdir> <== NOT EXECUTED
/* Markers */
logical_disk_marker = logical_disk_name + disk_name_size;
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
242f0: e1580004 cmp r8, r4 <== NOT EXECUTED
242f4: 8affffe1 bhi 24280 <rtems_bdpart_mount+0xe0> <== NOT EXECUTED
242f8: e3a04000 mov r4, #0 <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
242fc: e1a00007 mov r0, r7 <== NOT EXECUTED
24300: ebff8e9a bl 7d70 <free> <== NOT EXECUTED
free( mount_point);
24304: e1a00005 mov r0, r5 <== NOT EXECUTED
24308: ebff8e98 bl 7d70 <free> <== NOT EXECUTED
return esc;
}
2430c: e1a00004 mov r0, r4 <== NOT EXECUTED
24310: e28dd008 add sp, sp, #8 <== NOT EXECUTED
24314: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
24318: e1a00007 mov r0, r7 <== NOT EXECUTED
2431c: ebff8e93 bl 7d70 <free> <== NOT EXECUTED
free( mount_point);
24320: e1a00005 mov r0, r5 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create logical disk name */
int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
24324: e3a04003 mov r4, #3 <== NOT EXECUTED
}
cleanup:
free( logical_disk_name);
free( mount_point);
24328: ebff8e90 bl 7d70 <free> <== NOT EXECUTED
2432c: eafffff6 b 2430c <rtems_bdpart_mount+0x16c> <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
24330: e1a00007 mov r0, r7 <== NOT EXECUTED
24334: ebff8e8d bl 7d70 <free> <== NOT EXECUTED
free( mount_point);
24338: e1a00005 mov r0, r5 <== NOT EXECUTED
}
/* Create mount point */
strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
if (rv != 0) {
2433c: e3a0401b mov r4, #27 <== NOT EXECUTED
}
cleanup:
free( logical_disk_name);
free( mount_point);
24340: ebff8e8a bl 7d70 <free> <== NOT EXECUTED
24344: eafffff0 b 2430c <rtems_bdpart_mount+0x16c> <== NOT EXECUTED
00024824 <rtems_bdpart_new_record>:
static rtems_status_code rtems_bdpart_new_record(
dev_t disk,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
24824: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
24828: e1a04003 mov r4, r3 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Synchronize previous block if necessary */
if (*block != NULL) {
2482c: e5933000 ldr r3, [r3] <== NOT EXECUTED
24830: e3530000 cmp r3, #0 <== NOT EXECUTED
static rtems_status_code rtems_bdpart_new_record(
dev_t disk,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
24834: e1a06002 mov r6, r2 <== NOT EXECUTED
24838: e1a07000 mov r7, r0 <== NOT EXECUTED
2483c: e1a08001 mov r8, r1 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Synchronize previous block if necessary */
if (*block != NULL) {
24840: 0a000003 beq 24854 <rtems_bdpart_new_record+0x30> <== NOT EXECUTED
sc = rtems_bdbuf_sync( *block);
24844: e1a00003 mov r0, r3 <== NOT EXECUTED
24848: ebff818f bl 4e8c <rtems_bdbuf_sync> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
2484c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
24850: 1a000016 bne 248b0 <rtems_bdpart_new_record+0x8c> <== NOT EXECUTED
return sc;
}
}
/* Read the new record block (this accounts for disk block sizes > 512) */
sc = rtems_bdbuf_read( disk, index, block);
24854: e1a00007 mov r0, r7 <== NOT EXECUTED
24858: e1a01008 mov r1, r8 <== NOT EXECUTED
2485c: e1a02006 mov r2, r6 <== NOT EXECUTED
24860: e1a03004 mov r3, r4 <== NOT EXECUTED
24864: ebff83a3 bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24868: e2505000 subs r5, r0, #0 <== NOT EXECUTED
2486c: 1a00000f bne 248b0 <rtems_bdpart_new_record+0x8c> <== NOT EXECUTED
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
24870: e5943000 ldr r3, [r4] <== NOT EXECUTED
24874: e3530000 cmp r3, #0 <== NOT EXECUTED
24878: 03a05009 moveq r5, #9 <== NOT EXECUTED
2487c: 0a00000b beq 248b0 <rtems_bdpart_new_record+0x8c> <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
}
/* Clear record */
memset( (*block)->buffer, 0, RTEMS_BDPART_BLOCK_SIZE);
24880: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
24884: e3a02c02 mov r2, #512 ; 0x200 <== NOT EXECUTED
24888: e1a01005 mov r1, r5 <== NOT EXECUTED
2488c: eb00870e bl 464cc <memset> <== NOT EXECUTED
/* Write signature */
(*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0] =
24890: e5943000 ldr r3, [r4] <== NOT EXECUTED
24894: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
24898: e3a02055 mov r2, #85 ; 0x55 <== NOT EXECUTED
2489c: e5c321fe strb r2, [r3, #510] ; 0x1fe <== NOT EXECUTED
RTEMS_BDPART_MBR_SIGNATURE_0;
(*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1] =
248a0: e5943000 ldr r3, [r4] <== NOT EXECUTED
248a4: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
248a8: e3e02055 mvn r2, #85 ; 0x55 <== NOT EXECUTED
248ac: e5c321ff strb r2, [r3, #511] ; 0x1ff <== NOT EXECUTED
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
248b0: e1a00005 mov r0, r5 <== NOT EXECUTED
248b4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00024590 <rtems_bdpart_read>:
const char *disk_name,
rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
size_t *count
)
{
24590: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
24594: e2535000 subs r5, r3, #0 <== NOT EXECUTED
24598: 15957000 ldrne r7, [r5] <== NOT EXECUTED
2459c: 10877087 addne r7, r7, r7, lsl #1 <== NOT EXECUTED
245a0: 01a07005 moveq r7, r5 <== NOT EXECUTED
245a4: 11a07207 lslne r7, r7, #4 <== NOT EXECUTED
dev_t disk = 0;
size_t i = 0;
const uint8_t *data = NULL;
/* Check parameter */
if (format == NULL || pt == NULL || count == NULL) {
245a8: e3510000 cmp r1, #0 <== NOT EXECUTED
245ac: 13520000 cmpne r2, #0 <== NOT EXECUTED
const char *disk_name,
rtems_bdpart_format *format,
rtems_bdpart_partition *pt,
size_t *count
)
{
245b0: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
245b4: e1a06001 mov r6, r1 <== NOT EXECUTED
245b8: e1a04002 mov r4, r2 <== NOT EXECUTED
dev_t disk = 0;
size_t i = 0;
const uint8_t *data = NULL;
/* Check parameter */
if (format == NULL || pt == NULL || count == NULL) {
245bc: 13a03000 movne r3, #0 <== NOT EXECUTED
245c0: 03a03001 moveq r3, #1 <== NOT EXECUTED
245c4: 0a00001e beq 24644 <rtems_bdpart_read+0xb4> <== NOT EXECUTED
245c8: e3550000 cmp r5, #0 <== NOT EXECUTED
245cc: 0a00001c beq 24644 <rtems_bdpart_read+0xb4> <== NOT EXECUTED
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
245d0: e242c030 sub ip, r2, #48 ; 0x30 <== NOT EXECUTED
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
rtems_blkdev_bnum disk_end = 0;
245d4: e58d300c str r3, [sp, #12] <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */
245d8: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
/* Set count to a save value */
*count = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
245dc: e28d1004 add r1, sp, #4 <== NOT EXECUTED
if (format == NULL || pt == NULL || count == NULL) {
return RTEMS_INVALID_ADDRESS;
}
/* Set count to a save value */
*count = 0;
245e0: e5853000 str r3, [r5] <== NOT EXECUTED
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
245e4: e28d200c add r2, sp, #12 <== NOT EXECUTED
rtems_bdpart_partition *p = pt - 1;
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
rtems_blkdev_bnum disk_end = 0;
dev_t disk = 0;
245e8: e3a08000 mov r8, #0 <== NOT EXECUTED
245ec: e3a09000 mov r9, #0 <== NOT EXECUTED
245f0: e98d0300 stmib sp, {r8, r9} <== NOT EXECUTED
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
245f4: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
size_t *count
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
245f8: e58d3018 str r3, [sp, #24] <== NOT EXECUTED
/* Set count to a save value */
*count = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
245fc: ebffff74 bl 243d4 <rtems_bdpart_get_disk_data> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24600: e3500000 cmp r0, #0 <== NOT EXECUTED
24604: 0a000001 beq 24610 <rtems_bdpart_read+0x80> <== NOT EXECUTED
if (block != NULL) {
rtems_bdbuf_release( block);
}
return esc;
}
24608: e28dd01c add sp, sp, #28 <== NOT EXECUTED
2460c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Read MBR */
sc = rtems_bdpart_read_record( disk, 0, &block);
24610: e28d8018 add r8, sp, #24 <== NOT EXECUTED
24614: e1a02000 mov r2, r0 <== NOT EXECUTED
24618: e1a03008 mov r3, r8 <== NOT EXECUTED
2461c: e99d0003 ldmib sp, {r0, r1} <== NOT EXECUTED
24620: ebffff4a bl 24350 <rtems_bdpart_read_record> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24624: e3500000 cmp r0, #0 <== NOT EXECUTED
24628: 0a000007 beq 2464c <rtems_bdpart_read+0xbc> <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
&p,
p_end,
NULL
);
if (sc != RTEMS_SUCCESSFUL) {
2462c: e1a04000 mov r4, r0 <== NOT EXECUTED
24630: e59d0018 ldr r0, [sp, #24] <== NOT EXECUTED
/* Return partition count */
*count = (size_t) (p - pt + 1);
cleanup:
if (block != NULL) {
24634: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_bdbuf_release( block);
24638: 1bff7f9d blne 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
2463c: e1a00004 mov r0, r4 <== NOT EXECUTED
24640: eafffff0 b 24608 <rtems_bdpart_read+0x78> <== NOT EXECUTED
24644: e3a00009 mov r0, #9 <== NOT EXECUTED
24648: eaffffee b 24608 <rtems_bdpart_read+0x78> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Read the first partition entry */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
2464c: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
24650: e593c020 ldr ip, [r3, #32] <== NOT EXECUTED
24654: e28caf6f add sl, ip, #444 ; 0x1bc <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_bdbuf_buffer *block = NULL;
rtems_bdpart_partition *p = pt - 1;
const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0);
24658: e0849007 add r9, r4, r7 <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Read the first partition entry */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
2465c: e28aa002 add sl, sl, #2 <== NOT EXECUTED
sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin);
24660: e28d7014 add r7, sp, #20 <== NOT EXECUTED
24664: e28db010 add fp, sp, #16 <== NOT EXECUTED
24668: e1a0000a mov r0, sl <== NOT EXECUTED
2466c: e1a01007 mov r1, r7 <== NOT EXECUTED
24670: e1a02009 mov r2, r9 <== NOT EXECUTED
24674: e1a0300b mov r3, fp <== NOT EXECUTED
24678: e58dc000 str ip, [sp] <== NOT EXECUTED
2467c: ebffff82 bl 2448c <rtems_bdpart_read_mbr_partition> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24680: e3500000 cmp r0, #0 <== NOT EXECUTED
24684: e59dc000 ldr ip, [sp] <== NOT EXECUTED
24688: 1affffe7 bne 2462c <rtems_bdpart_read+0x9c> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Determine if we have a MBR or GPT format */
if (rtems_bdpart_mbr_partition_type( p->type) == RTEMS_BDPART_MBR_GPT) {
2468c: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
24690: e5d33008 ldrb r3, [r3, #8] <== NOT EXECUTED
24694: e35300ee cmp r3, #238 ; 0xee <== NOT EXECUTED
24698: 0a00005b beq 2480c <rtems_bdpart_read+0x27c> <== NOT EXECUTED
goto cleanup;
}
/* Set format */
format->type = RTEMS_BDPART_FORMAT_MBR;
format->mbr.disk_id = rtems_uint32_from_little_endian(
2469c: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
esc = RTEMS_NOT_IMPLEMENTED;
goto cleanup;
}
/* Set format */
format->type = RTEMS_BDPART_FORMAT_MBR;
246a0: e5860000 str r0, [r6] <== NOT EXECUTED
format->mbr.disk_id = rtems_uint32_from_little_endian(
246a4: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
246a8: e5d321ba ldrb r2, [r3, #442] ; 0x1ba <== NOT EXECUTED
246ac: e5d301bb ldrb r0, [r3, #443] ; 0x1bb <== NOT EXECUTED
246b0: e5d311b9 ldrb r1, [r3, #441] ; 0x1b9 <== NOT EXECUTED
246b4: e0820400 add r0, r2, r0, lsl #8 <== NOT EXECUTED
246b8: e5d321b8 ldrb r2, [r3, #440] ; 0x1b8 <== NOT EXECUTED
246bc: e0813400 add r3, r1, r0, lsl #8 <== NOT EXECUTED
246c0: e0823403 add r3, r2, r3, lsl #8 <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
format->mbr.dos_compatibility = true;
246c4: e3a02001 mov r2, #1 <== NOT EXECUTED
246c8: e5c62008 strb r2, [r6, #8] <== NOT EXECUTED
goto cleanup;
}
/* Set format */
format->type = RTEMS_BDPART_FORMAT_MBR;
format->mbr.disk_id = rtems_uint32_from_little_endian(
246cc: e5863004 str r3, [r6, #4] <== NOT EXECUTED
}
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_read(
246d0: e28c6f7b add r6, ip, #492 ; 0x1ec <== NOT EXECUTED
246d4: e2866002 add r6, r6, #2 <== NOT EXECUTED
);
format->mbr.dos_compatibility = true;
/* Iterate through the rest of the primary partition table */
for (i = 1; i < 4; ++i) {
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
246d8: e28aa010 add sl, sl, #16 <== NOT EXECUTED
sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin);
246dc: e1a0000a mov r0, sl <== NOT EXECUTED
246e0: e1a01007 mov r1, r7 <== NOT EXECUTED
246e4: e1a02009 mov r2, r9 <== NOT EXECUTED
246e8: e1a0300b mov r3, fp <== NOT EXECUTED
246ec: ebffff66 bl 2448c <rtems_bdpart_read_mbr_partition> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
246f0: e3500000 cmp r0, #0 <== NOT EXECUTED
246f4: 1affffcc bne 2462c <rtems_bdpart_read+0x9c> <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
format->mbr.dos_compatibility = true;
/* Iterate through the rest of the primary partition table */
for (i = 1; i < 4; ++i) {
246f8: e15a0006 cmp sl, r6 <== NOT EXECUTED
246fc: 1afffff5 bne 246d8 <rtems_bdpart_read+0x148> <== NOT EXECUTED
goto cleanup;
}
}
/* Iterate through the logical partitions within the extended partition */
ebr = ep_begin;
24700: e59d6010 ldr r6, [sp, #16] <== NOT EXECUTED
while (ebr != 0) {
24704: e3560000 cmp r6, #0 <== NOT EXECUTED
24708: 059d2014 ldreq r2, [sp, #20] <== NOT EXECUTED
2470c: 059d3018 ldreq r3, [sp, #24] <== NOT EXECUTED
24710: 0a000029 beq 247bc <rtems_bdpart_read+0x22c> <== NOT EXECUTED
rtems_blkdev_bnum tmp = 0;
/* Read EBR */
sc = rtems_bdpart_read_record( disk, ebr, &block);
24714: e1a02006 mov r2, r6 <== NOT EXECUTED
24718: e99d0003 ldmib sp, {r0, r1} <== NOT EXECUTED
2471c: e1a03008 mov r3, r8 <== NOT EXECUTED
24720: ebffff0a bl 24350 <rtems_bdpart_read_record> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24724: e3500000 cmp r0, #0 <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Read first partition entry */
sc = rtems_bdpart_read_mbr_partition(
24728: e1a01007 mov r1, r7 <== NOT EXECUTED
2472c: e1a02009 mov r2, r9 <== NOT EXECUTED
24730: e1a03000 mov r3, r0 <== NOT EXECUTED
while (ebr != 0) {
rtems_blkdev_bnum tmp = 0;
/* Read EBR */
sc = rtems_bdpart_read_record( disk, ebr, &block);
if (sc != RTEMS_SUCCESSFUL) {
24734: 1affffbc bne 2462c <rtems_bdpart_read+0x9c> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Read first partition entry */
sc = rtems_bdpart_read_mbr_partition(
24738: e59d0018 ldr r0, [sp, #24] <== NOT EXECUTED
2473c: e5900020 ldr r0, [r0, #32] <== NOT EXECUTED
24740: e2800f6f add r0, r0, #444 ; 0x1bc <== NOT EXECUTED
24744: e2800002 add r0, r0, #2 <== NOT EXECUTED
24748: ebffff4f bl 2448c <rtems_bdpart_read_mbr_partition> <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
&p,
p_end,
NULL
);
if (sc != RTEMS_SUCCESSFUL) {
2474c: e3500000 cmp r0, #0 <== NOT EXECUTED
24750: 1affffb5 bne 2462c <rtems_bdpart_read+0x9c> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Adjust partition begin */
tmp = p->begin + ebr;
24754: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
24758: e5923000 ldr r3, [r2] <== NOT EXECUTED
2475c: e0861003 add r1, r6, r3 <== NOT EXECUTED
if (tmp > p->begin) {
24760: e1530001 cmp r3, r1 <== NOT EXECUTED
24764: 2a00002b bcs 24818 <rtems_bdpart_read+0x288> <== NOT EXECUTED
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Adjust partition end */
tmp = p->end + ebr;
24768: e5923004 ldr r3, [r2, #4] <== NOT EXECUTED
2476c: e0866003 add r6, r6, r3 <== NOT EXECUTED
if (tmp > p->end) {
24770: e1530006 cmp r3, r6 <== NOT EXECUTED
}
/* Adjust partition begin */
tmp = p->begin + ebr;
if (tmp > p->begin) {
p->begin = tmp;
24774: e5821000 str r1, [r2] <== NOT EXECUTED
goto cleanup;
}
/* Adjust partition end */
tmp = p->end + ebr;
if (tmp > p->end) {
24778: 2a000026 bcs 24818 <rtems_bdpart_read+0x288> <== NOT EXECUTED
goto cleanup;
}
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1
2477c: e59d0018 ldr r0, [sp, #24] <== NOT EXECUTED
esc = RTEMS_IO_ERROR;
goto cleanup;
}
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
24780: e5901020 ldr r1, [r0, #32] <== NOT EXECUTED
}
/* Adjust partition end */
tmp = p->end + ebr;
if (tmp > p->end) {
p->end = tmp;
24784: e5826004 str r6, [r2, #4] <== NOT EXECUTED
}
static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data)
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
24788: e2813f75 add r3, r1, #468 ; 0x1d4 <== NOT EXECUTED
2478c: e2833002 add r3, r3, #2 <== NOT EXECUTED
24790: e5d36003 ldrb r6, [r3, #3] <== NOT EXECUTED
24794: e5d3c002 ldrb ip, [r3, #2] <== NOT EXECUTED
24798: e5d3a001 ldrb sl, [r3, #1] <== NOT EXECUTED
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EXTENDED) {
2479c: e5d131d2 ldrb r3, [r1, #466] ; 0x1d2 <== NOT EXECUTED
247a0: e08cc406 add ip, ip, r6, lsl #8 <== NOT EXECUTED
247a4: e5d111d6 ldrb r1, [r1, #470] ; 0x1d6 <== NOT EXECUTED
247a8: e08aa40c add sl, sl, ip, lsl #8 <== NOT EXECUTED
247ac: e3530005 cmp r3, #5 <== NOT EXECUTED
247b0: e081a40a add sl, r1, sl, lsl #8 <== NOT EXECUTED
goto cleanup;
}
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1
247b4: e1a03000 mov r3, r0 <== NOT EXECUTED
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EXTENDED) {
247b8: 0a00000b beq 247ec <rtems_bdpart_read+0x25c> <== NOT EXECUTED
}
}
}
/* Return partition count */
*count = (size_t) (p - pt + 1);
247bc: e0642002 rsb r2, r4, r2 <== NOT EXECUTED
247c0: e1a02242 asr r2, r2, #4 <== NOT EXECUTED
247c4: e0821102 add r1, r2, r2, lsl #2 <== NOT EXECUTED
247c8: e0811201 add r1, r1, r1, lsl #4 <== NOT EXECUTED
247cc: e0811401 add r1, r1, r1, lsl #8 <== NOT EXECUTED
247d0: e0811801 add r1, r1, r1, lsl #16 <== NOT EXECUTED
247d4: e0822081 add r2, r2, r1, lsl #1 <== NOT EXECUTED
247d8: e2822001 add r2, r2, #1 <== NOT EXECUTED
247dc: e5852000 str r2, [r5] <== NOT EXECUTED
247e0: e1a00003 mov r0, r3 <== NOT EXECUTED
247e4: e3a04000 mov r4, #0 <== NOT EXECUTED
247e8: eaffff91 b 24634 <rtems_bdpart_read+0xa4> <== NOT EXECUTED
/* Read second partition entry for next EBR block */
ebr = rtems_bdpart_next_ebr(
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1
);
if (ebr != 0) {
247ec: e35a0000 cmp sl, #0 <== NOT EXECUTED
247f0: 0afffff1 beq 247bc <rtems_bdpart_read+0x22c> <== NOT EXECUTED
/* Adjust partition EBR block index */
tmp = ebr + ep_begin;
247f4: e59d6010 ldr r6, [sp, #16] <== NOT EXECUTED
247f8: e08a6006 add r6, sl, r6 <== NOT EXECUTED
if (tmp > ebr) {
247fc: e156000a cmp r6, sl <== NOT EXECUTED
24800: 8affffc3 bhi 24714 <rtems_bdpart_read+0x184> <== NOT EXECUTED
24804: e3a0401b mov r4, #27 <== NOT EXECUTED
24808: eaffff89 b 24634 <rtems_bdpart_read+0xa4> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Determine if we have a MBR or GPT format */
if (rtems_bdpart_mbr_partition_type( p->type) == RTEMS_BDPART_MBR_GPT) {
2480c: e59d0018 ldr r0, [sp, #24] <== NOT EXECUTED
24810: e3a04018 mov r4, #24 <== NOT EXECUTED
24814: eaffff86 b 24634 <rtems_bdpart_read+0xa4> <== NOT EXECUTED
goto cleanup;
}
/* Adjust partition end */
tmp = p->end + ebr;
if (tmp > p->end) {
24818: e59d0018 ldr r0, [sp, #24] <== NOT EXECUTED
2481c: e3a0401b mov r4, #27 <== NOT EXECUTED
24820: eaffff83 b 24634 <rtems_bdpart_read+0xa4> <== NOT EXECUTED
0002448c <rtems_bdpart_read_mbr_partition>:
const uint8_t *data,
rtems_bdpart_partition **p,
const rtems_bdpart_partition *p_end,
rtems_blkdev_bnum *ep_begin
)
{
2448c: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
24490: e280c008 add ip, r0, #8 <== NOT EXECUTED
const uint8_t *data,
rtems_bdpart_partition **p,
const rtems_bdpart_partition *p_end,
rtems_blkdev_bnum *ep_begin
)
{
24494: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_blkdev_bnum size =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
24498: e280000c add r0, r0, #12 <== NOT EXECUTED
{
uint32_t value = 0;
ssize_t i = 0;
for (i = 3; i >= 0; --i) {
value = (value << 8) + data [i];
2449c: e5dc7003 ldrb r7, [ip, #3] <== NOT EXECUTED
244a0: e5d08002 ldrb r8, [r0, #2] <== NOT EXECUTED
244a4: e5dc6002 ldrb r6, [ip, #2] <== NOT EXECUTED
244a8: e5d05003 ldrb r5, [r0, #3] <== NOT EXECUTED
244ac: e5dca001 ldrb sl, [ip, #1] <== NOT EXECUTED
244b0: e5d09001 ldrb r9, [r0, #1] <== NOT EXECUTED
rtems_blkdev_bnum end = begin + size;
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
244b4: e5d40004 ldrb r0, [r4, #4] <== NOT EXECUTED
244b8: e0866407 add r6, r6, r7, lsl #8 <== NOT EXECUTED
244bc: e0885405 add r5, r8, r5, lsl #8 <== NOT EXECUTED
244c0: e5d47008 ldrb r7, [r4, #8] <== NOT EXECUTED
244c4: e5d4c00c ldrb ip, [r4, #12] <== NOT EXECUTED
244c8: e08a6406 add r6, sl, r6, lsl #8 <== NOT EXECUTED
244cc: e0895405 add r5, r9, r5, lsl #8 <== NOT EXECUTED
if (type == RTEMS_BDPART_MBR_EMPTY) {
244d0: e3500000 cmp r0, #0 <== NOT EXECUTED
244d4: e0876406 add r6, r7, r6, lsl #8 <== NOT EXECUTED
244d8: e08c5405 add r5, ip, r5, lsl #8 <== NOT EXECUTED
const uint8_t *data,
rtems_bdpart_partition **p,
const rtems_bdpart_partition *p_end,
rtems_blkdev_bnum *ep_begin
)
{
244dc: e1a08001 mov r8, r1 <== NOT EXECUTED
rtems_blkdev_bnum size =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
rtems_blkdev_bnum end = begin + size;
uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE];
if (type == RTEMS_BDPART_MBR_EMPTY) {
244e0: 0a000028 beq 24588 <rtems_bdpart_read_mbr_partition+0xfc> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
244e4: e5911000 ldr r1, [r1] <== NOT EXECUTED
244e8: e1510002 cmp r1, r2 <== NOT EXECUTED
244ec: 03a00005 moveq r0, #5 <== NOT EXECUTED
244f0: 08bd87f0 popeq {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
{
rtems_blkdev_bnum begin =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_blkdev_bnum size =
rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE);
rtems_blkdev_bnum end = begin + size;
244f4: e0865005 add r5, r6, r5 <== NOT EXECUTED
if (type == RTEMS_BDPART_MBR_EMPTY) {
return RTEMS_SUCCESSFUL;
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
} else if (begin >= end) {
244f8: e1550006 cmp r5, r6 <== NOT EXECUTED
244fc: 93a0001b movls r0, #27 <== NOT EXECUTED
24500: 98bd87f0 popls {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
return RTEMS_IO_ERROR;
} else if (type == RTEMS_BDPART_MBR_EXTENDED) {
24504: e3500005 cmp r0, #5 <== NOT EXECUTED
24508: 0a00001a beq 24578 <rtems_bdpart_read_mbr_partition+0xec> <== NOT EXECUTED
} else {
/* Increment partition index */
++(*p);
/* Clear partition */
memset( *p, 0, sizeof( rtems_bdpart_partition));
2450c: e3a07000 mov r7, #0 <== NOT EXECUTED
if (ep_begin != NULL) {
*ep_begin = begin;
}
} else {
/* Increment partition index */
++(*p);
24510: e2813030 add r3, r1, #48 ; 0x30 <== NOT EXECUTED
24514: e5883000 str r3, [r8] <== NOT EXECUTED
/* Clear partition */
memset( *p, 0, sizeof( rtems_bdpart_partition));
24518: e581705c str r7, [r1, #92] ; 0x5c <== NOT EXECUTED
2451c: e5817030 str r7, [r1, #48] ; 0x30 <== NOT EXECUTED
24520: e5817034 str r7, [r1, #52] ; 0x34 <== NOT EXECUTED
24524: e5817038 str r7, [r1, #56] ; 0x38 <== NOT EXECUTED
24528: e581703c str r7, [r1, #60] ; 0x3c <== NOT EXECUTED
2452c: e5817040 str r7, [r1, #64] ; 0x40 <== NOT EXECUTED
24530: e5817044 str r7, [r1, #68] ; 0x44 <== NOT EXECUTED
24534: e5817048 str r7, [r1, #72] ; 0x48 <== NOT EXECUTED
24538: e581704c str r7, [r1, #76] ; 0x4c <== NOT EXECUTED
2453c: e5817050 str r7, [r1, #80] ; 0x50 <== NOT EXECUTED
24540: e5817054 str r7, [r1, #84] ; 0x54 <== NOT EXECUTED
24544: e5817058 str r7, [r1, #88] ; 0x58 <== NOT EXECUTED
/* Set values */
(*p)->begin = begin;
24548: e5981000 ldr r1, [r8] <== NOT EXECUTED
2454c: e5816000 str r6, [r1] <== NOT EXECUTED
(*p)->end = end;
24550: e5815004 str r5, [r1, #4] <== NOT EXECUTED
rtems_bdpart_to_partition_type( type, (*p)->type);
24554: e2811008 add r1, r1, #8 <== NOT EXECUTED
24558: ebffffc5 bl 24474 <rtems_bdpart_to_partition_type> <== NOT EXECUTED
(*p)->flags = data [RTEMS_BDPART_MBR_OFFSET_FLAGS];
2455c: e5983000 ldr r3, [r8] <== NOT EXECUTED
24560: e5d41000 ldrb r1, [r4] <== NOT EXECUTED
24564: e3a02000 mov r2, #0 <== NOT EXECUTED
24568: e1a00007 mov r0, r7 <== NOT EXECUTED
2456c: e5831028 str r1, [r3, #40] ; 0x28 <== NOT EXECUTED
24570: e583202c str r2, [r3, #44] ; 0x2c <== NOT EXECUTED
24574: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
} else if (begin >= end) {
return RTEMS_IO_ERROR;
} else if (type == RTEMS_BDPART_MBR_EXTENDED) {
if (ep_begin != NULL) {
24578: e3530000 cmp r3, #0 <== NOT EXECUTED
*ep_begin = begin;
2457c: 15836000 strne r6, [r3] <== NOT EXECUTED
24580: 13a00000 movne r0, #0 <== NOT EXECUTED
} else if (*p == p_end) {
return RTEMS_TOO_MANY;
} else if (begin >= end) {
return RTEMS_IO_ERROR;
} else if (type == RTEMS_BDPART_MBR_EXTENDED) {
if (ep_begin != NULL) {
24584: 18bd87f0 popne {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
/* Set values */
(*p)->begin = begin;
(*p)->end = end;
rtems_bdpart_to_partition_type( type, (*p)->type);
(*p)->flags = data [RTEMS_BDPART_MBR_OFFSET_FLAGS];
24588: e3a00000 mov r0, #0 <== NOT EXECUTED
}
return RTEMS_SUCCESSFUL;
}
2458c: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
00024350 <rtems_bdpart_read_record>:
static rtems_status_code rtems_bdpart_read_record(
dev_t disk,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
24350: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
24354: e1a04003 mov r4, r3 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Release previous block if necessary */
if (*block != NULL) {
24358: e5933000 ldr r3, [r3] <== NOT EXECUTED
2435c: e3530000 cmp r3, #0 <== NOT EXECUTED
static rtems_status_code rtems_bdpart_read_record(
dev_t disk,
rtems_blkdev_bnum index,
rtems_bdbuf_buffer **block
)
{
24360: e1a05002 mov r5, r2 <== NOT EXECUTED
24364: e1a06000 mov r6, r0 <== NOT EXECUTED
24368: e1a07001 mov r7, r1 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
/* Release previous block if necessary */
if (*block != NULL) {
2436c: 0a000003 beq 24380 <rtems_bdpart_read_record+0x30> <== NOT EXECUTED
sc = rtems_bdbuf_release( *block);
24370: e1a00003 mov r0, r3 <== NOT EXECUTED
24374: ebff804e bl 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24378: e3500000 cmp r0, #0 <== NOT EXECUTED
2437c: 18bd80f0 popne {r4, r5, r6, r7, pc} <== NOT EXECUTED
return sc;
}
}
/* Read the record block */
sc = rtems_bdbuf_read( disk, index, block);
24380: e1a00006 mov r0, r6 <== NOT EXECUTED
24384: e1a01007 mov r1, r7 <== NOT EXECUTED
24388: e1a02005 mov r2, r5 <== NOT EXECUTED
2438c: e1a03004 mov r3, r4 <== NOT EXECUTED
24390: ebff84d8 bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24394: e3500000 cmp r0, #0 <== NOT EXECUTED
24398: 18bd80f0 popne {r4, r5, r6, r7, pc} <== NOT EXECUTED
return sc;
}
/* just in case block did not get filled in */
if ( *block == NULL ) {
2439c: e5943000 ldr r3, [r4] <== NOT EXECUTED
243a0: e3530000 cmp r3, #0 <== NOT EXECUTED
243a4: 03a00009 moveq r0, #9 <== NOT EXECUTED
243a8: 08bd80f0 popeq {r4, r5, r6, r7, pc} <== NOT EXECUTED
return RTEMS_INVALID_ADDRESS;
}
/* Check MBR signature */
if (!rtems_bdpart_is_valid_record( (*block)->buffer)) {
243ac: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
static bool rtems_bdpart_is_valid_record( const uint8_t *data)
{
return data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0]
243b0: e5d321fe ldrb r2, [r3, #510] ; 0x1fe <== NOT EXECUTED
243b4: e3520055 cmp r2, #85 ; 0x55 <== NOT EXECUTED
243b8: 0a000001 beq 243c4 <rtems_bdpart_read_record+0x74> <== NOT EXECUTED
243bc: e3a0001b mov r0, #27 <== NOT EXECUTED
if (!rtems_bdpart_is_valid_record( (*block)->buffer)) {
return RTEMS_IO_ERROR;
}
return RTEMS_SUCCESSFUL;
}
243c0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
}
static bool rtems_bdpart_is_valid_record( const uint8_t *data)
{
return data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0]
243c4: e5d331ff ldrb r3, [r3, #511] ; 0x1ff <== NOT EXECUTED
243c8: e35300aa cmp r3, #170 ; 0xaa <== NOT EXECUTED
243cc: 1afffffa bne 243bc <rtems_bdpart_read_record+0x6c> <== NOT EXECUTED
243d0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00005a90 <rtems_bdpart_register>:
rtems_status_code rtems_bdpart_register(
const char *disk_name,
const rtems_bdpart_partition *pt,
size_t count
)
{
5a90: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
5a94: e3a03000 mov r3, #0 <== NOT EXECUTED
rtems_status_code rtems_bdpart_register(
const char *disk_name,
const rtems_bdpart_partition *pt,
size_t count
)
{
5a98: e24dd024 sub sp, sp, #36 ; 0x24 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
5a9c: e58d3020 str r3, [sp, #32] <== NOT EXECUTED
dev_t disk = 0;
5aa0: e3a04000 mov r4, #0 <== NOT EXECUTED
5aa4: e3a03000 mov r3, #0 <== NOT EXECUTED
5aa8: e58d3018 str r3, [sp, #24] <== NOT EXECUTED
5aac: e58d401c str r4, [sp, #28] <== NOT EXECUTED
rtems_status_code rtems_bdpart_register(
const char *disk_name,
const rtems_bdpart_partition *pt,
size_t count
)
{
5ab0: e1a05000 mov r5, r0 <== NOT EXECUTED
5ab4: e1a0b001 mov fp, r1 <== NOT EXECUTED
5ab8: e1a07002 mov r7, r2 <== NOT EXECUTED
rtems_blkdev_bnum disk_end = 0;
dev_t disk = 0;
dev_t logical_disk = 0;
char *logical_disk_name = NULL;
char *logical_disk_marker = NULL;
size_t disk_name_size = strlen( disk_name);
5abc: eb011048 bl 49be4 <strlen> <== NOT EXECUTED
size_t i = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
5ac0: e28d1018 add r1, sp, #24 <== NOT EXECUTED
rtems_blkdev_bnum disk_end = 0;
dev_t disk = 0;
dev_t logical_disk = 0;
char *logical_disk_name = NULL;
char *logical_disk_marker = NULL;
size_t disk_name_size = strlen( disk_name);
5ac4: e1a0a000 mov sl, r0 <== NOT EXECUTED
size_t i = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
5ac8: e28d2020 add r2, sp, #32 <== NOT EXECUTED
5acc: e1a00005 mov r0, r5 <== NOT EXECUTED
5ad0: eb007a3f bl 243d4 <rtems_bdpart_get_disk_data> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
5ad4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
5ad8: 0a000002 beq 5ae8 <rtems_bdpart_register+0x58> <== NOT EXECUTED
cleanup:
free( logical_disk_name);
return esc;
}
5adc: e1a00004 mov r0, r4 <== NOT EXECUTED
5ae0: e28dd024 add sp, sp, #36 ; 0x24 <== NOT EXECUTED
5ae4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create logical disk name */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
5ae8: e28a0004 add r0, sl, #4 <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
5aec: e59d9018 ldr r9, [sp, #24] <== NOT EXECUTED
5af0: e59d601c ldr r6, [sp, #28] <== NOT EXECUTED
/* Create logical disk name */
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
5af4: eb000a61 bl 8480 <malloc> <== NOT EXECUTED
if (logical_disk_name == NULL) {
5af8: e2508000 subs r8, r0, #0 <== NOT EXECUTED
5afc: 03a0401a moveq r4, #26 <== NOT EXECUTED
5b00: 0afffff5 beq 5adc <rtems_bdpart_register+0x4c> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
}
strncpy( logical_disk_name, disk_name, disk_name_size);
5b04: e1a0200a mov r2, sl <== NOT EXECUTED
5b08: e1a01005 mov r1, r5 <== NOT EXECUTED
5b0c: eb0110d4 bl 49e64 <strncpy> <== NOT EXECUTED
logical_disk_marker = logical_disk_name + disk_name_size;
5b10: e088a00a add sl, r8, sl <== NOT EXECUTED
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5b14: e3570000 cmp r7, #0 <== NOT EXECUTED
logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
if (logical_disk_name == NULL) {
return RTEMS_NO_MEMORY;
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
5b18: e58da00c str sl, [sp, #12] <== NOT EXECUTED
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5b1c: 0a000022 beq 5bac <rtems_bdpart_register+0x11c> <== NOT EXECUTED
5b20: e1a0500b mov r5, fp <== NOT EXECUTED
5b24: ea00000d b 5b60 <rtems_bdpart_register+0xd0> <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create logical disk */
sc = rtems_disk_create_log(
5b28: e5953000 ldr r3, [r5] <== NOT EXECUTED
5b2c: e58d3000 str r3, [sp] <== NOT EXECUTED
5b30: e595c004 ldr ip, [r5, #4] <== NOT EXECUTED
5b34: e063c00c rsb ip, r3, ip <== NOT EXECUTED
5b38: e28d3018 add r3, sp, #24 <== NOT EXECUTED
5b3c: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
5b40: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
5b44: e58d8008 str r8, [sp, #8] <== NOT EXECUTED
5b48: eb000438 bl 6c30 <rtems_disk_create_log> <== NOT EXECUTED
disk,
p->begin,
p->end - p->begin,
logical_disk_name
);
if (sc != RTEMS_SUCCESSFUL) {
5b4c: e3500000 cmp r0, #0 <== NOT EXECUTED
5b50: 1a000017 bne 5bb4 <rtems_bdpart_register+0x124> <== NOT EXECUTED
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5b54: e1570004 cmp r7, r4 <== NOT EXECUTED
disk,
p->begin,
p->end - p->begin,
logical_disk_name
);
if (sc != RTEMS_SUCCESSFUL) {
5b58: e2855030 add r5, r5, #48 ; 0x30 <== NOT EXECUTED
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5b5c: 9a000012 bls 5bac <rtems_bdpart_register+0x11c> <== NOT EXECUTED
/* Create a new device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Set partition number for logical disk name */
rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
5b60: e2844001 add r4, r4, #1 <== NOT EXECUTED
for (i = 0; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
int rv = 0;
/* New minor number */
++minor;
5b64: e2866001 add r6, r6, #1 <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
5b68: e58d9010 str r9, [sp, #16] <== NOT EXECUTED
temp.__overlay.minor = _minor;
5b6c: e58d6014 str r6, [sp, #20] <== NOT EXECUTED
/* Create a new device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Set partition number for logical disk name */
rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
5b70: e3a01004 mov r1, #4 <== NOT EXECUTED
5b74: e59f2040 ldr r2, [pc, #64] ; 5bbc <rtems_bdpart_register+0x12c><== NOT EXECUTED
5b78: e1a03004 mov r3, r4 <== NOT EXECUTED
5b7c: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
return temp.device;
5b80: e28db010 add fp, sp, #16 <== NOT EXECUTED
5b84: e89b0c00 ldm fp, {sl, fp} <== NOT EXECUTED
5b88: eb010c03 bl 48b9c <snprintf> <== NOT EXECUTED
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
5b8c: e3500003 cmp r0, #3 <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Create logical disk */
sc = rtems_disk_create_log(
5b90: e1a0100b mov r1, fp <== NOT EXECUTED
5b94: e1a0000a mov r0, sl <== NOT EXECUTED
/* Create a new device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Set partition number for logical disk name */
rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
5b98: daffffe2 ble 5b28 <rtems_bdpart_register+0x98> <== NOT EXECUTED
5b9c: e3a04003 mov r4, #3 <== NOT EXECUTED
}
}
cleanup:
free( logical_disk_name);
5ba0: e1a00008 mov r0, r8 <== NOT EXECUTED
5ba4: eb000871 bl 7d70 <free> <== NOT EXECUTED
return esc;
5ba8: eaffffcb b 5adc <rtems_bdpart_register+0x4c> <== NOT EXECUTED
}
strncpy( logical_disk_name, disk_name, disk_name_size);
logical_disk_marker = logical_disk_name + disk_name_size;
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5bac: e3a04000 mov r4, #0 <== NOT EXECUTED
5bb0: eafffffa b 5ba0 <rtems_bdpart_register+0x110> <== NOT EXECUTED
disk,
p->begin,
p->end - p->begin,
logical_disk_name
);
if (sc != RTEMS_SUCCESSFUL) {
5bb4: e1a04000 mov r4, r0 <== NOT EXECUTED
5bb8: eafffff8 b 5ba0 <rtems_bdpart_register+0x110> <== NOT EXECUTED
00005bc0 <rtems_bdpart_register_from_disk>:
return esc;
}
rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name)
{
5bc0: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
5bc4: e24ddfc6 sub sp, sp, #792 ; 0x318 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdpart_format format;
rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT];
size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT;
5bc8: e3a0c010 mov ip, #16 <== NOT EXECUTED
/* Read partitions */
sc = rtems_bdpart_read( disk_name, &format, pt, &count);
5bcc: e28d1c03 add r1, sp, #768 ; 0x300 <== NOT EXECUTED
5bd0: e1a0200d mov r2, sp <== NOT EXECUTED
5bd4: e28d3fc5 add r3, sp, #788 ; 0x314 <== NOT EXECUTED
rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_bdpart_format format;
rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT];
size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT;
5bd8: e58dc314 str ip, [sp, #788] ; 0x314 <== NOT EXECUTED
return esc;
}
rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name)
{
5bdc: e1a05000 mov r5, r0 <== NOT EXECUTED
rtems_bdpart_format format;
rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT];
size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT;
/* Read partitions */
sc = rtems_bdpart_read( disk_name, &format, pt, &count);
5be0: eb007a6a bl 24590 <rtems_bdpart_read> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
5be4: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_bdpart_format format;
rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT];
size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT;
/* Read partitions */
sc = rtems_bdpart_read( disk_name, &format, pt, &count);
5be8: e1a0400d mov r4, sp <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Register partitions */
return rtems_bdpart_register( disk_name, pt, count);
5bec: 01a00005 moveq r0, r5 <== NOT EXECUTED
5bf0: 01a0100d moveq r1, sp <== NOT EXECUTED
5bf4: 059d2314 ldreq r2, [sp, #788] ; 0x314 <== NOT EXECUTED
5bf8: 0bffffa4 bleq 5a90 <rtems_bdpart_register> <== NOT EXECUTED
}
5bfc: e28ddfc6 add sp, sp, #792 ; 0x318 <== NOT EXECUTED
5c00: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
0002444c <rtems_bdpart_to_mbr_partition_type>:
bool rtems_bdpart_to_mbr_partition_type(
const uuid_t type,
uint8_t *mbr_type
)
{
2444c: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
*mbr_type = rtems_bdpart_mbr_partition_type( type);
24450: e4d03001 ldrb r3, [r0], #1 <== NOT EXECUTED
return memcmp(
24454: e3a0200f mov r2, #15 <== NOT EXECUTED
bool rtems_bdpart_to_mbr_partition_type(
const uuid_t type,
uint8_t *mbr_type
)
{
*mbr_type = rtems_bdpart_mbr_partition_type( type);
24458: e5c13000 strb r3, [r1] <== NOT EXECUTED
return memcmp(
2445c: e59f100c ldr r1, [pc, #12] ; 24470 <rtems_bdpart_to_mbr_partition_type+0x24><== NOT EXECUTED
24460: eb008768 bl 46208 <memcmp> <== NOT EXECUTED
type + 1,
RTEMS_BDPART_MBR_MASTER_TYPE + 1,
sizeof( uuid_t) - 1
) == 0;
}
24464: e2700001 rsbs r0, r0, #1 <== NOT EXECUTED
24468: 33a00000 movcc r0, #0 <== NOT EXECUTED
2446c: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00024474 <rtems_bdpart_to_partition_type>:
static const uuid_t RTEMS_BDPART_MBR_MASTER_TYPE =
RTEMS_BDPART_MBR_PARTITION_TYPE( RTEMS_BDPART_MBR_EMPTY);
void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type)
{
type [0] = mbr_type;
24474: e4c10001 strb r0, [r1], #1 <== NOT EXECUTED
memcpy( type + 1, RTEMS_BDPART_MBR_MASTER_TYPE + 1, sizeof( uuid_t) - 1);
24478: e1a00001 mov r0, r1 <== NOT EXECUTED
2447c: e59f1004 ldr r1, [pc, #4] ; 24488 <rtems_bdpart_to_partition_type+0x14><== NOT EXECUTED
24480: e3a0200f mov r2, #15 <== NOT EXECUTED
24484: ea008789 b 462b0 <memcpy> <== NOT EXECUTED
00024074 <rtems_bdpart_unmount>:
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
24074: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
24078: e3a0102f mov r1, #47 ; 0x2f <== NOT EXECUTED
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count,
const char *mount_base
)
{
2407c: e1a09003 mov r9, r3 <== NOT EXECUTED
24080: e1a06002 mov r6, r2 <== NOT EXECUTED
24084: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
const char *disk_file_name = strrchr( disk_name, '/');
24088: eb009a21 bl 4a914 <strrchr> <== NOT EXECUTED
2408c: e1a05000 mov r5, r0 <== NOT EXECUTED
char *mount_point = NULL;
char *mount_marker = NULL;
size_t disk_file_name_size = 0;
size_t disk_name_size = strlen( disk_name);
24090: e1a00004 mov r0, r4 <== NOT EXECUTED
24094: eb0096d2 bl 49be4 <strlen> <== NOT EXECUTED
24098: e1a0a000 mov sl, r0 <== NOT EXECUTED
size_t mount_base_size = strlen( mount_base);
2409c: e1a00009 mov r0, r9 <== NOT EXECUTED
240a0: eb0096cf bl 49be4 <strlen> <== NOT EXECUTED
size_t i = 0;
/* Get disk file name */
if (disk_file_name != NULL) {
240a4: e3550000 cmp r5, #0 <== NOT EXECUTED
const char *disk_file_name = strrchr( disk_name, '/');
char *mount_point = NULL;
char *mount_marker = NULL;
size_t disk_file_name_size = 0;
size_t disk_name_size = strlen( disk_name);
size_t mount_base_size = strlen( mount_base);
240a8: e1a07000 mov r7, r0 <== NOT EXECUTED
size_t i = 0;
/* Get disk file name */
if (disk_file_name != NULL) {
240ac: 0a000003 beq 240c0 <rtems_bdpart_unmount+0x4c> <== NOT EXECUTED
disk_file_name += 1;
240b0: e2854001 add r4, r5, #1 <== NOT EXECUTED
disk_file_name_size = strlen( disk_file_name);
240b4: e1a00004 mov r0, r4 <== NOT EXECUTED
240b8: eb0096c9 bl 49be4 <strlen> <== NOT EXECUTED
240bc: e1a0a000 mov sl, r0 <== NOT EXECUTED
disk_file_name = disk_name;
disk_file_name_size = disk_name_size;
}
/* Create mount point base */
mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
240c0: e08a8007 add r8, sl, r7 <== NOT EXECUTED
240c4: e2880005 add r0, r8, #5 <== NOT EXECUTED
240c8: ebff90ec bl 8480 <malloc> <== NOT EXECUTED
if (mount_point == NULL) {
240cc: e2505000 subs r5, r0, #0 <== NOT EXECUTED
240d0: 03a0401a moveq r4, #26 <== NOT EXECUTED
240d4: 0a000022 beq 24164 <rtems_bdpart_unmount+0xf0> <== NOT EXECUTED
esc = RTEMS_NO_MEMORY;
goto cleanup;
}
strncpy( mount_point, mount_base, mount_base_size);
240d8: e1a02007 mov r2, r7 <== NOT EXECUTED
240dc: e1a01009 mov r1, r9 <== NOT EXECUTED
240e0: eb00975f bl 49e64 <strncpy> <== NOT EXECUTED
mount_point [mount_base_size] = '/';
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
240e4: e2870001 add r0, r7, #1 <== NOT EXECUTED
if (mount_point == NULL) {
esc = RTEMS_NO_MEMORY;
goto cleanup;
}
strncpy( mount_point, mount_base, mount_base_size);
mount_point [mount_base_size] = '/';
240e8: e3a0302f mov r3, #47 ; 0x2f <== NOT EXECUTED
240ec: e7c53007 strb r3, [r5, r7] <== NOT EXECUTED
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
240f0: e0850000 add r0, r5, r0 <== NOT EXECUTED
240f4: e1a01004 mov r1, r4 <== NOT EXECUTED
240f8: e1a0200a mov r2, sl <== NOT EXECUTED
240fc: eb009758 bl 49e64 <strncpy> <== NOT EXECUTED
/* Marker */
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
24100: e2887001 add r7, r8, #1 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
24104: e3560000 cmp r6, #0 <== NOT EXECUTED
strncpy( mount_point, mount_base, mount_base_size);
mount_point [mount_base_size] = '/';
strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
/* Marker */
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
24108: e0857007 add r7, r5, r7 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
2410c: 0a000018 beq 24174 <rtems_bdpart_unmount+0x100> <== NOT EXECUTED
24110: e3a04000 mov r4, #0 <== NOT EXECUTED
24114: ea000001 b 24120 <rtems_bdpart_unmount+0xac> <== NOT EXECUTED
24118: e1560004 cmp r6, r4 <== NOT EXECUTED
2411c: 9a000014 bls 24174 <rtems_bdpart_unmount+0x100> <== NOT EXECUTED
/* Create mount point */
int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
24120: e2844001 add r4, r4, #1 <== NOT EXECUTED
24124: e3a01004 mov r1, #4 <== NOT EXECUTED
24128: e59f206c ldr r2, [pc, #108] ; 2419c <rtems_bdpart_unmount+0x128><== NOT EXECUTED
2412c: e1a03004 mov r3, r4 <== NOT EXECUTED
24130: e1a00007 mov r0, r7 <== NOT EXECUTED
24134: eb009298 bl 48b9c <snprintf> <== NOT EXECUTED
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
24138: e3500003 cmp r0, #3 <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Unmount */
rv = unmount( mount_point);
2413c: e1a00005 mov r0, r5 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create mount point */
int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
24140: ca000010 bgt 24188 <rtems_bdpart_unmount+0x114> <== NOT EXECUTED
esc = RTEMS_INVALID_NAME;
goto cleanup;
}
/* Unmount */
rv = unmount( mount_point);
24144: eb001ab8 bl 2ac2c <unmount> <== NOT EXECUTED
if (rv == 0) {
24148: e3500000 cmp r0, #0 <== NOT EXECUTED
/* Remove mount point */
rv = rmdir( mount_point);
2414c: e1a00005 mov r0, r5 <== NOT EXECUTED
goto cleanup;
}
/* Unmount */
rv = unmount( mount_point);
if (rv == 0) {
24150: 1afffff0 bne 24118 <rtems_bdpart_unmount+0xa4> <== NOT EXECUTED
/* Remove mount point */
rv = rmdir( mount_point);
24154: eb001979 bl 2a740 <rmdir> <== NOT EXECUTED
if (rv != 0) {
24158: e3500000 cmp r0, #0 <== NOT EXECUTED
2415c: 0affffed beq 24118 <rtems_bdpart_unmount+0xa4> <== NOT EXECUTED
24160: e3a0401b mov r4, #27 <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
24164: e1a00005 mov r0, r5 <== NOT EXECUTED
24168: ebff8f00 bl 7d70 <free> <== NOT EXECUTED
return esc;
}
2416c: e1a00004 mov r0, r4 <== NOT EXECUTED
24170: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
24174: e1a00005 mov r0, r5 <== NOT EXECUTED
/* Marker */
mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
24178: e3a04000 mov r4, #0 <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
2417c: ebff8efb bl 7d70 <free> <== NOT EXECUTED
return esc;
}
24180: e1a00004 mov r0, r4 <== NOT EXECUTED
24184: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
24188: e1a00005 mov r0, r5 <== NOT EXECUTED
/* Mount supported file systems for each partition */
for (i = 0; i < count; ++i) {
/* Create mount point */
int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
2418c: e3a04003 mov r4, #3 <== NOT EXECUTED
}
}
cleanup:
free( mount_point);
24190: ebff8ef6 bl 7d70 <free> <== NOT EXECUTED
return esc;
}
24194: e1a00004 mov r0, r4 <== NOT EXECUTED
24198: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
00005a10 <rtems_bdpart_unregister>:
rtems_status_code rtems_bdpart_unregister(
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count
)
{
5a10: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
5a14: e24dd014 sub sp, sp, #20 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
5a18: e3a03000 mov r3, #0 <== NOT EXECUTED
rtems_status_code rtems_bdpart_unregister(
const char *disk_name,
const rtems_bdpart_partition *pt __attribute__((unused)),
size_t count
)
{
5a1c: e1a04002 mov r4, r2 <== NOT EXECUTED
dev_t disk = 0;
dev_t logical_disk = 0;
size_t i = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
5a20: e28d1008 add r1, sp, #8 <== NOT EXECUTED
5a24: e28d2010 add r2, sp, #16 <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
dev_t disk = 0;
5a28: e3a05000 mov r5, #0 <== NOT EXECUTED
5a2c: e3a06000 mov r6, #0 <== NOT EXECUTED
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
rtems_blkdev_bnum disk_end = 0;
5a30: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
dev_t disk = 0;
5a34: e58d5008 str r5, [sp, #8] <== NOT EXECUTED
5a38: e58d600c str r6, [sp, #12] <== NOT EXECUTED
dev_t logical_disk = 0;
size_t i = 0;
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
5a3c: eb007a64 bl 243d4 <rtems_bdpart_get_disk_data> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
5a40: e3500000 cmp r0, #0 <== NOT EXECUTED
5a44: 1a00000f bne 5a88 <rtems_bdpart_unregister+0x78> <== NOT EXECUTED
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5a48: e3540000 cmp r4, #0 <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
5a4c: e59d7008 ldr r7, [sp, #8] <== NOT EXECUTED
5a50: e59d500c ldr r5, [sp, #12] <== NOT EXECUTED
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5a54: 0a00000b beq 5a88 <rtems_bdpart_unregister+0x78> <== NOT EXECUTED
5a58: e1a06000 mov r6, r0 <== NOT EXECUTED
5a5c: ea000001 b 5a68 <rtems_bdpart_unregister+0x58> <== NOT EXECUTED
5a60: e1540006 cmp r4, r6 <== NOT EXECUTED
5a64: 9a000007 bls 5a88 <rtems_bdpart_unregister+0x78> <== NOT EXECUTED
/* New minor number */
++minor;
5a68: e2855001 add r5, r5, #1 <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
5a6c: e58d7000 str r7, [sp] <== NOT EXECUTED
temp.__overlay.minor = _minor;
5a70: e58d5004 str r5, [sp, #4] <== NOT EXECUTED
/* Get the device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Delete logical disk */
sc = rtems_disk_delete( logical_disk);
5a74: e89d0003 ldm sp, {r0, r1} <== NOT EXECUTED
5a78: eb000373 bl 684c <rtems_disk_delete> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
5a7c: e3500000 cmp r0, #0 <== NOT EXECUTED
/* Get the disk device identifier */
rtems_filesystem_split_dev_t( disk, major, minor);
/* Create a logical disk for each partition */
for (i = 0; i < count; ++i) {
5a80: e2866001 add r6, r6, #1 <== NOT EXECUTED
/* Get the device identifier */
logical_disk = rtems_filesystem_make_dev_t( major, minor);
/* Delete logical disk */
sc = rtems_disk_delete( logical_disk);
if (sc != RTEMS_SUCCESSFUL) {
5a84: 0afffff5 beq 5a60 <rtems_bdpart_unregister+0x50> <== NOT EXECUTED
return sc;
}
}
return RTEMS_SUCCESSFUL;
}
5a88: e28dd014 add sp, sp, #20 <== NOT EXECUTED
5a8c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
000248b8 <rtems_bdpart_write>:
const char *disk_name,
const rtems_bdpart_format *format,
const rtems_bdpart_partition *pt,
size_t count
)
{
248b8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
248bc: e2515000 subs r5, r1, #0 <== NOT EXECUTED
const char *disk_name,
const rtems_bdpart_format *format,
const rtems_bdpart_partition *pt,
size_t count
)
{
248c0: e24dd034 sub sp, sp, #52 ; 0x34 <== NOT EXECUTED
248c4: e1a06002 mov r6, r2 <== NOT EXECUTED
248c8: e1a04003 mov r4, r3 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
248cc: 0a000002 beq 248dc <rtems_bdpart_write+0x24> <== NOT EXECUTED
&& format->type == RTEMS_BDPART_FORMAT_MBR
248d0: e5953000 ldr r3, [r5] <== NOT EXECUTED
248d4: e3530000 cmp r3, #0 <== NOT EXECUTED
248d8: 0a00000b beq 2490c <rtems_bdpart_write+0x54> <== NOT EXECUTED
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
248dc: e3a0a000 mov sl, #0 <== NOT EXECUTED
size_t ppc = 0; /* Primary partition count */
size_t i = 0;
uint8_t *data = NULL;
/* Check if we have something to do */
if (count == 0) {
248e0: e3540000 cmp r4, #0 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
248e4: e58da02c str sl, [sp, #44] ; 0x2c <== NOT EXECUTED
rtems_blkdev_bnum disk_end = 0;
248e8: e58da028 str sl, [sp, #40] ; 0x28 <== NOT EXECUTED
248ec: e3a07001 mov r7, #1 <== NOT EXECUTED
size_t ppc = 0; /* Primary partition count */
size_t i = 0;
uint8_t *data = NULL;
/* Check if we have something to do */
if (count == 0) {
248f0: 0a00000e beq 24930 <rtems_bdpart_write+0x78> <== NOT EXECUTED
/* Nothing to do */
return RTEMS_SUCCESSFUL;
}
/* Check parameter */
if (format == NULL || pt == NULL) {
248f4: e3550000 cmp r5, #0 <== NOT EXECUTED
248f8: 13560000 cmpne r6, #0 <== NOT EXECUTED
248fc: 03a00009 moveq r0, #9 <== NOT EXECUTED
24900: 1a00000c bne 24938 <rtems_bdpart_write+0x80> <== NOT EXECUTED
if (block != NULL) {
rtems_bdbuf_sync( block);
}
return esc;
}
24904: e28dd034 add sp, sp, #52 ; 0x34 <== NOT EXECUTED
24908: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
2490c: e5d52008 ldrb r2, [r5, #8] <== NOT EXECUTED
24910: e3520000 cmp r2, #0 <== NOT EXECUTED
24914: 0afffff0 beq 248dc <rtems_bdpart_write+0x24> <== NOT EXECUTED
size_t ppc = 0; /* Primary partition count */
size_t i = 0;
uint8_t *data = NULL;
/* Check if we have something to do */
if (count == 0) {
24918: e3540000 cmp r4, #0 <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
rtems_blkdev_bnum disk_end = 0;
2491c: e58d3028 str r3, [sp, #40] ; 0x28 <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
24920: e58d302c str r3, [sp, #44] ; 0x2c <== NOT EXECUTED
rtems_blkdev_bnum disk_end = 0;
24924: e3a0a001 mov sl, #1 <== NOT EXECUTED
24928: e3a0703f mov r7, #63 ; 0x3f <== NOT EXECUTED
size_t ppc = 0; /* Primary partition count */
size_t i = 0;
uint8_t *data = NULL;
/* Check if we have something to do */
if (count == 0) {
2492c: 1afffff0 bne 248f4 <rtems_bdpart_write+0x3c> <== NOT EXECUTED
}
cleanup:
if (block != NULL) {
rtems_bdbuf_sync( block);
24930: e1a00004 mov r0, r4 <== NOT EXECUTED
24934: eafffff2 b 24904 <rtems_bdpart_write+0x4c> <== NOT EXECUTED
if (format == NULL || pt == NULL) {
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
24938: e28d1020 add r1, sp, #32 <== NOT EXECUTED
2493c: e28d2028 add r2, sp, #40 ; 0x28 <== NOT EXECUTED
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
rtems_blkdev_bnum disk_end = 0;
rtems_blkdev_bnum record_space =
dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1;
dev_t disk = 0;
24940: e3a08000 mov r8, #0 <== NOT EXECUTED
24944: e3a09000 mov r9, #0 <== NOT EXECUTED
24948: e58d8020 str r8, [sp, #32] <== NOT EXECUTED
2494c: e58d9024 str r9, [sp, #36] ; 0x24 <== NOT EXECUTED
if (format == NULL || pt == NULL) {
return RTEMS_INVALID_ADDRESS;
}
/* Get disk data */
sc = rtems_bdpart_get_disk_data( disk_name, &disk, &disk_end);
24950: ebfffe9f bl 243d4 <rtems_bdpart_get_disk_data> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24954: e3500000 cmp r0, #0 <== NOT EXECUTED
24958: 1affffe9 bne 24904 <rtems_bdpart_write+0x4c> <== NOT EXECUTED
return sc;
}
/* Align end of disk on cylinder boundary if necessary */
if (dos_compatibility) {
2495c: e35a0000 cmp sl, #0 <== NOT EXECUTED
24960: 059d0028 ldreq r0, [sp, #40] ; 0x28 <== NOT EXECUTED
24964: 0a000005 beq 24980 <rtems_bdpart_write+0xc8> <== NOT EXECUTED
disk_end -= (disk_end % record_space);
24968: e59d8028 ldr r8, [sp, #40] ; 0x28 <== NOT EXECUTED
2496c: e1a01007 mov r1, r7 <== NOT EXECUTED
24970: e1a00008 mov r0, r8 <== NOT EXECUTED
24974: eb00d9ef bl 5b138 <__umodsi3> <== NOT EXECUTED
24978: e0600008 rsb r0, r0, r8 <== NOT EXECUTED
2497c: e58d0028 str r0, [sp, #40] ; 0x28 <== NOT EXECUTED
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Check that begin and end are proper within the disk */
if (p->begin >= disk_end || p->end > disk_end) {
24980: e596b000 ldr fp, [r6] <== NOT EXECUTED
24984: e15b0000 cmp fp, r0 <== NOT EXECUTED
24988: 2a000053 bcs 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
2498c: e5963004 ldr r3, [r6, #4] <== NOT EXECUTED
24990: e1530000 cmp r3, r0 <== NOT EXECUTED
24994: 8a000050 bhi 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
esc = RTEMS_INVALID_NUMBER;
goto cleanup;
}
/* Check that begin and end are valid */
if (p->begin >= p->end) {
24998: e153000b cmp r3, fp <== NOT EXECUTED
2499c: 81a08006 movhi r8, r6 <== NOT EXECUTED
249a0: 81a03006 movhi r3, r6 <== NOT EXECUTED
249a4: 83a01000 movhi r1, #0 <== NOT EXECUTED
249a8: 8a00000c bhi 249e0 <rtems_bdpart_write+0x128> <== NOT EXECUTED
249ac: ea00004a b 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Check that begin and end are proper within the disk */
if (p->begin >= disk_end || p->end > disk_end) {
249b0: e5932030 ldr r2, [r3, #48] ; 0x30 <== NOT EXECUTED
249b4: e1520000 cmp r2, r0 <== NOT EXECUTED
249b8: 2a000047 bcs 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
249bc: e593c034 ldr ip, [r3, #52] ; 0x34 <== NOT EXECUTED
249c0: e15c0000 cmp ip, r0 <== NOT EXECUTED
249c4: 8a000044 bhi 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
esc = RTEMS_INVALID_NUMBER;
goto cleanup;
}
/* Check that begin and end are valid */
if (p->begin >= p->end) {
249c8: e152000c cmp r2, ip <== NOT EXECUTED
249cc: 2a000042 bcs 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
esc = RTEMS_INVALID_NUMBER;
goto cleanup;
}
/* Check that partitions do not overlap */
if (i > 0 && pt [i - 1].end > p->begin) {
249d0: e593c004 ldr ip, [r3, #4] <== NOT EXECUTED
249d4: e152000c cmp r2, ip <== NOT EXECUTED
249d8: 3a00003f bcc 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
249dc: e2833030 add r3, r3, #48 ; 0x30 <== NOT EXECUTED
if (dos_compatibility) {
disk_end -= (disk_end % record_space);
}
/* Check that we have a consistent partition table */
for (i = 0; i < count; ++i) {
249e0: e2811001 add r1, r1, #1 <== NOT EXECUTED
249e4: e1540001 cmp r4, r1 <== NOT EXECUTED
249e8: 8afffff0 bhi 249b0 <rtems_bdpart_write+0xf8> <== NOT EXECUTED
goto cleanup;
}
}
/* Check format */
if (format->type != RTEMS_BDPART_FORMAT_MBR) {
249ec: e5953000 ldr r3, [r5] <== NOT EXECUTED
249f0: e3530000 cmp r3, #0 <== NOT EXECUTED
249f4: 13a04018 movne r4, #24 <== NOT EXECUTED
249f8: 1a000038 bne 24ae0 <rtems_bdpart_write+0x228> <== NOT EXECUTED
* Set primary partition count. If we have more than four partitions we need
* an extended partition which will contain the partitions of number four and
* above as logical partitions. If we have four or less partitions we can
* use the primary partition table.
*/
ppc = count <= 4 ? count : 3;
249fc: e3540004 cmp r4, #4 <== NOT EXECUTED
24a00: 91a09004 movls r9, r4 <== NOT EXECUTED
24a04: 83a09003 movhi r9, #3 <== NOT EXECUTED
/*
* Check that the first primary partition starts at head one and sector one
* under the virtual one head and 63 sectors geometry if necessary.
*/
if (dos_compatibility && pt [0].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE) {
24a08: e35a0000 cmp sl, #0 <== NOT EXECUTED
24a0c: 0a000001 beq 24a18 <rtems_bdpart_write+0x160> <== NOT EXECUTED
24a10: e35b003f cmp fp, #63 ; 0x3f <== NOT EXECUTED
24a14: 1a000030 bne 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
* Each logical partition is described via one EBR preceding the partition.
* The space for the EBR and maybe some space which is needed for DOS
* compatibility resides between the partitions. So there have to be gaps of
* the appropriate size between the partitions.
*/
for (i = ppc; i < count; ++i) {
24a18: e1590004 cmp r9, r4 <== NOT EXECUTED
24a1c: 2a000018 bcs 24a84 <rtems_bdpart_write+0x1cc> <== NOT EXECUTED
if ((pt [i].begin - pt [i - 1].end) < record_space) {
24a20: e2493001 sub r3, r9, #1 <== NOT EXECUTED
24a24: e0832083 add r2, r3, r3, lsl #1 <== NOT EXECUTED
24a28: e0893089 add r3, r9, r9, lsl #1 <== NOT EXECUTED
24a2c: e1a03203 lsl r3, r3, #4 <== NOT EXECUTED
24a30: e0862202 add r2, r6, r2, lsl #4 <== NOT EXECUTED
24a34: e7961003 ldr r1, [r6, r3] <== NOT EXECUTED
24a38: e5922004 ldr r2, [r2, #4] <== NOT EXECUTED
24a3c: e0622001 rsb r2, r2, r1 <== NOT EXECUTED
24a40: e1570002 cmp r7, r2 <== NOT EXECUTED
24a44: e0862003 add r2, r6, r3 <== NOT EXECUTED
24a48: 8a000023 bhi 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
24a4c: e2891001 add r1, r9, #1 <== NOT EXECUTED
24a50: e0811081 add r1, r1, r1, lsl #1 <== NOT EXECUTED
24a54: e0861201 add r1, r6, r1, lsl #4 <== NOT EXECUTED
24a58: e1a03009 mov r3, r9 <== NOT EXECUTED
24a5c: ea000005 b 24a78 <rtems_bdpart_write+0x1c0> <== NOT EXECUTED
24a60: e5920004 ldr r0, [r2, #4] <== NOT EXECUTED
24a64: e491c030 ldr ip, [r1], #48 ; 0x30 <== NOT EXECUTED
24a68: e060000c rsb r0, r0, ip <== NOT EXECUTED
24a6c: e1570000 cmp r7, r0 <== NOT EXECUTED
24a70: e2822030 add r2, r2, #48 ; 0x30 <== NOT EXECUTED
24a74: 8a000018 bhi 24adc <rtems_bdpart_write+0x224> <== NOT EXECUTED
* Each logical partition is described via one EBR preceding the partition.
* The space for the EBR and maybe some space which is needed for DOS
* compatibility resides between the partitions. So there have to be gaps of
* the appropriate size between the partitions.
*/
for (i = ppc; i < count; ++i) {
24a78: e2833001 add r3, r3, #1 <== NOT EXECUTED
24a7c: e1540003 cmp r4, r3 <== NOT EXECUTED
24a80: 8afffff6 bhi 24a60 <rtems_bdpart_write+0x1a8> <== NOT EXECUTED
24a84: e3a0b000 mov fp, #0 <== NOT EXECUTED
24a88: e1a0a006 mov sl, r6 <== NOT EXECUTED
24a8c: ea000008 b 24ab4 <rtems_bdpart_write+0x1fc> <== NOT EXECUTED
esc = RTEMS_INVALID_ID;
goto cleanup;
}
/* Check flags */
if (p->flags > 0xffU) {
24a90: e59a202c ldr r2, [sl, #44] ; 0x2c <== NOT EXECUTED
24a94: e3520000 cmp r2, #0 <== NOT EXECUTED
24a98: 1a00000d bne 24ad4 <rtems_bdpart_write+0x21c> <== NOT EXECUTED
24a9c: e59a3028 ldr r3, [sl, #40] ; 0x28 <== NOT EXECUTED
24aa0: e35300ff cmp r3, #255 ; 0xff <== NOT EXECUTED
24aa4: 8a00000a bhi 24ad4 <rtems_bdpart_write+0x21c> <== NOT EXECUTED
goto cleanup;
}
}
/* Check that we can convert the parition descriptions to the MBR format */
for (i = 0; i < count; ++i) {
24aa8: e154000b cmp r4, fp <== NOT EXECUTED
24aac: e28aa030 add sl, sl, #48 ; 0x30 <== NOT EXECUTED
24ab0: 9a000010 bls 24af8 <rtems_bdpart_write+0x240> <== NOT EXECUTED
uint8_t type = 0;
24ab4: e3a02000 mov r2, #0 <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
/* Check type */
if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) {
24ab8: e28a0008 add r0, sl, #8 <== NOT EXECUTED
24abc: e28d1033 add r1, sp, #51 ; 0x33 <== NOT EXECUTED
}
}
/* Check that we can convert the parition descriptions to the MBR format */
for (i = 0; i < count; ++i) {
uint8_t type = 0;
24ac0: e5cd2033 strb r2, [sp, #51] ; 0x33 <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
/* Check type */
if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) {
24ac4: ebfffe60 bl 2444c <rtems_bdpart_to_mbr_partition_type> <== NOT EXECUTED
24ac8: e3500000 cmp r0, #0 <== NOT EXECUTED
goto cleanup;
}
}
/* Check that we can convert the parition descriptions to the MBR format */
for (i = 0; i < count; ++i) {
24acc: e28bb001 add fp, fp, #1 <== NOT EXECUTED
uint8_t type = 0;
const rtems_bdpart_partition *p = pt + i;
/* Check type */
if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) {
24ad0: 1affffee bne 24a90 <rtems_bdpart_write+0x1d8> <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24ad4: e3a04004 mov r4, #4 <== NOT EXECUTED
24ad8: ea000000 b 24ae0 <rtems_bdpart_write+0x228> <== NOT EXECUTED
24adc: e3a0400a mov r4, #10 <== NOT EXECUTED
}
}
cleanup:
if (block != NULL) {
24ae0: e59d002c ldr r0, [sp, #44] ; 0x2c <== NOT EXECUTED
24ae4: e3500000 cmp r0, #0 <== NOT EXECUTED
24ae8: 0affff90 beq 24930 <rtems_bdpart_write+0x78> <== NOT EXECUTED
rtems_bdbuf_sync( block);
24aec: ebff80e6 bl 4e8c <rtems_bdbuf_sync> <== NOT EXECUTED
24af0: e1a00004 mov r0, r4 <== NOT EXECUTED
24af4: eaffff82 b 24904 <rtems_bdpart_write+0x4c> <== NOT EXECUTED
/* Check ID */
/* TODO */
}
/* New MBR */
sc = rtems_bdpart_new_record( disk, 0, &block);
24af8: e28d1020 add r1, sp, #32 <== NOT EXECUTED
24afc: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
24b00: e28d302c add r3, sp, #44 ; 0x2c <== NOT EXECUTED
24b04: ebffff46 bl 24824 <rtems_bdpart_new_record> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24b08: e3500000 cmp r0, #0 <== NOT EXECUTED
24b0c: 1a0000b8 bne 24df4 <rtems_bdpart_write+0x53c> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Write disk ID */
rtems_uint32_to_little_endian(
24b10: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
24b14: e5952004 ldr r2, [r5, #4] <== NOT EXECUTED
24b18: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24b1c: e1a05c22 lsr r5, r2, #24 <== NOT EXECUTED
value >>= 8;
24b20: e1a0c422 lsr ip, r2, #8 <== NOT EXECUTED
24b24: e1a01822 lsr r1, r2, #16 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24b28: e5c351bb strb r5, [r3, #443] ; 0x1bb <== NOT EXECUTED
24b2c: e5c3c1b9 strb ip, [r3, #441] ; 0x1b9 <== NOT EXECUTED
24b30: e5c311ba strb r1, [r3, #442] ; 0x1ba <== NOT EXECUTED
24b34: e5c321b8 strb r2, [r3, #440] ; 0x1b8 <== NOT EXECUTED
format->mbr.disk_id,
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
24b38: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
24b3c: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
24b40: e2835f6f add r5, r3, #444 ; 0x1bc <== NOT EXECUTED
24b44: e2855002 add r5, r5, #2 <== NOT EXECUTED
24b48: e58d5008 str r5, [sp, #8] <== NOT EXECUTED
24b4c: e58d9004 str r9, [sp, #4] <== NOT EXECUTED
24b50: e58d700c str r7, [sp, #12] <== NOT EXECUTED
24b54: e58d6010 str r6, [sp, #16] <== NOT EXECUTED
24b58: e58d4014 str r4, [sp, #20] <== NOT EXECUTED
for (i = 0; i < ppc; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Write partition entry */
rtems_bdpart_write_mbr_partition(
24b5c: e5982000 ldr r2, [r8] <== NOT EXECUTED
24b60: e5981004 ldr r1, [r8, #4] <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
24b64: e59da004 ldr sl, [sp, #4] <== NOT EXECUTED
static inline uint8_t rtems_bdpart_mbr_partition_type(
const uuid_t type
)
{
return type [0];
24b68: e5d8c008 ldrb ip, [r8, #8] <== NOT EXECUTED
rtems_bdpart_write_mbr_partition(
data,
p->begin,
p->end - p->begin,
rtems_bdpart_mbr_partition_type( p->type),
(uint8_t) p->flags
24b6c: e598b028 ldr fp, [r8, #40] ; 0x28 <== NOT EXECUTED
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Write partition entry */
rtems_bdpart_write_mbr_partition(
24b70: e0621001 rsb r1, r2, r1 <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
24b74: e2800001 add r0, r0, #1 <== NOT EXECUTED
24b78: e1a04c21 lsr r4, r1, #24 <== NOT EXECUTED
24b7c: e15a0000 cmp sl, r0 <== NOT EXECUTED
value >>= 8;
24b80: e1a09422 lsr r9, r2, #8 <== NOT EXECUTED
24b84: e1a0a822 lsr sl, r2, #16 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24b88: e1a07c22 lsr r7, r2, #24 <== NOT EXECUTED
value >>= 8;
24b8c: e1a06421 lsr r6, r1, #8 <== NOT EXECUTED
24b90: e1a05821 lsr r5, r1, #16 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24b94: e5c391c7 strb r9, [r3, #455] ; 0x1c7 <== NOT EXECUTED
24b98: e5c3a1c8 strb sl, [r3, #456] ; 0x1c8 <== NOT EXECUTED
24b9c: e5c371c9 strb r7, [r3, #457] ; 0x1c9 <== NOT EXECUTED
24ba0: e5c361cb strb r6, [r3, #459] ; 0x1cb <== NOT EXECUTED
24ba4: e5c351cc strb r5, [r3, #460] ; 0x1cc <== NOT EXECUTED
24ba8: e5c341cd strb r4, [r3, #461] ; 0x1cd <== NOT EXECUTED
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24bac: e5c3c1c2 strb ip, [r3, #450] ; 0x1c2 <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24bb0: e5c3b1be strb fp, [r3, #446] ; 0x1be <== NOT EXECUTED
24bb4: e5c321c6 strb r2, [r3, #454] ; 0x1c6 <== NOT EXECUTED
24bb8: e5c311ca strb r1, [r3, #458] ; 0x1ca <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
24bbc: e2888030 add r8, r8, #48 ; 0x30 <== NOT EXECUTED
24bc0: e2833010 add r3, r3, #16 <== NOT EXECUTED
24bc4: 8affffe4 bhi 24b5c <rtems_bdpart_write+0x2a4> <== NOT EXECUTED
24bc8: e59d9004 ldr r9, [sp, #4] <== NOT EXECUTED
24bcc: e59d4014 ldr r4, [sp, #20] <== NOT EXECUTED
24bd0: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
}
/* Write extended partition with logical partitions if necessary */
if (ppc != count) {
24bd4: e1590004 cmp r9, r4 <== NOT EXECUTED
24bd8: e59d700c ldr r7, [sp, #12] <== NOT EXECUTED
24bdc: e59d6010 ldr r6, [sp, #16] <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_DISK_ID
);
/* Write primary partition table */
data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0;
for (i = 0; i < ppc; ++i) {
24be0: e0803209 add r3, r0, r9, lsl #4 <== NOT EXECUTED
data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE;
}
/* Write extended partition with logical partitions if necessary */
if (ppc != count) {
24be4: 0a000084 beq 24dfc <rtems_bdpart_write+0x544> <== NOT EXECUTED
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
/* Begin of extended partition */
rtems_blkdev_bnum ep_begin = pt [ppc].begin - record_space;
24be8: e3a00030 mov r0, #48 ; 0x30 <== NOT EXECUTED
24bec: e0050990 mul r5, r0, r9 <== NOT EXECUTED
24bf0: e7962005 ldr r2, [r6, r5] <== NOT EXECUTED
24bf4: e0672002 rsb r2, r7, r2 <== NOT EXECUTED
24bf8: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
/* Write extended partition */
rtems_bdpart_write_mbr_partition(
24bfc: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
24c00: e59d2028 ldr r2, [sp, #40] ; 0x28 <== NOT EXECUTED
24c04: e0612002 rsb r2, r1, r2 <== NOT EXECUTED
value >>= 8;
24c08: e59da004 ldr sl, [sp, #4] <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24c0c: e1a08c22 lsr r8, r2, #24 <== NOT EXECUTED
24c10: e58d801c str r8, [sp, #28] <== NOT EXECUTED
value >>= 8;
24c14: e59d8004 ldr r8, [sp, #4] <== NOT EXECUTED
24c18: e1a0a42a lsr sl, sl, #8 <== NOT EXECUTED
24c1c: e58da018 str sl, [sp, #24] <== NOT EXECUTED
24c20: e1a08828 lsr r8, r8, #16 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24c24: e59da004 ldr sl, [sp, #4] <== NOT EXECUTED
value >>= 8;
24c28: e58d8014 str r8, [sp, #20] <== NOT EXECUTED
24c2c: e1a08422 lsr r8, r2, #8 <== NOT EXECUTED
24c30: e58d8010 str r8, [sp, #16] <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24c34: e1a0ac2a lsr sl, sl, #24 <== NOT EXECUTED
24c38: e59d8004 ldr r8, [sp, #4] <== NOT EXECUTED
24c3c: e58da000 str sl, [sp] <== NOT EXECUTED
value >>= 8;
24c40: e1a0a822 lsr sl, r2, #16 <== NOT EXECUTED
24c44: e58da00c str sl, [sp, #12] <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24c48: e5c38008 strb r8, [r3, #8] <== NOT EXECUTED
24c4c: e59d8000 ldr r8, [sp] <== NOT EXECUTED
uint32_t size,
uint8_t type,
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
24c50: e283c008 add ip, r3, #8 <== NOT EXECUTED
24c54: e5cc8003 strb r8, [ip, #3] <== NOT EXECUTED
24c58: e59d8018 ldr r8, [sp, #24] <== NOT EXECUTED
24c5c: e5cc8001 strb r8, [ip, #1] <== NOT EXECUTED
24c60: e59d8014 ldr r8, [sp, #20] <== NOT EXECUTED
24c64: e5cc8002 strb r8, [ip, #2] <== NOT EXECUTED
24c68: e5c3200c strb r2, [r3, #12] <== NOT EXECUTED
24c6c: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
24c70: e283100c add r1, r3, #12 <== NOT EXECUTED
24c74: e5c12003 strb r2, [r1, #3] <== NOT EXECUTED
24c78: e59d8010 ldr r8, [sp, #16] <== NOT EXECUTED
24c7c: e5c18001 strb r8, [r1, #1] <== NOT EXECUTED
24c80: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24c84: e3a0b005 mov fp, #5 <== NOT EXECUTED
24c88: e5c12002 strb r2, [r1, #2] <== NOT EXECUTED
24c8c: e5c3b004 strb fp, [r3, #4] <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24c90: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
24c94: e3a0a000 mov sl, #0 <== NOT EXECUTED
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24c98: e1a0800b mov r8, fp <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24c9c: e7c1a209 strb sl, [r1, r9, lsl #4] <== NOT EXECUTED
/* Write extended partition with logical partitions if necessary */
if (ppc != count) {
rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */
/* Begin of extended partition */
rtems_blkdev_bnum ep_begin = pt [ppc].begin - record_space;
24ca0: e0865005 add r5, r6, r5 <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24ca4: 2a000054 bcs 24dfc <rtems_bdpart_write+0x544> <== NOT EXECUTED
rtems_status_code esc = RTEMS_SUCCESSFUL;
bool dos_compatibility = format != NULL
&& format->type == RTEMS_BDPART_FORMAT_MBR
&& format->mbr.dos_compatibility;
rtems_bdbuf_buffer *block = NULL;
rtems_blkdev_bnum disk_end = 0;
24ca8: e2893001 add r3, r9, #1 <== NOT EXECUTED
24cac: e58d9008 str r9, [sp, #8] <== NOT EXECUTED
24cb0: e0286390 mla r8, r0, r3, r6 <== NOT EXECUTED
24cb4: e1a0b004 mov fp, r4 <== NOT EXECUTED
24cb8: e1a06009 mov r6, r9 <== NOT EXECUTED
);
}
/* New EBR */
ebr = p->begin - record_space;
sc = rtems_bdpart_new_record( disk, ebr, &block);
24cbc: e5952000 ldr r2, [r5] <== NOT EXECUTED
24cc0: e28d1020 add r1, sp, #32 <== NOT EXECUTED
24cc4: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
24cc8: e0672002 rsb r2, r7, r2 <== NOT EXECUTED
24ccc: e28d302c add r3, sp, #44 ; 0x2c <== NOT EXECUTED
24cd0: ebfffed3 bl 24824 <rtems_bdpart_new_record> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) {
24cd4: e3500000 cmp r0, #0 <== NOT EXECUTED
24cd8: 1a000045 bne 24df4 <rtems_bdpart_write+0x53c> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
24cdc: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
24ce0: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
record_space,
p->end - p->begin,
rtems_bdpart_mbr_partition_type( p->type),
(uint8_t) p->flags
24ce4: e5954028 ldr r4, [r5, #40] ; 0x28 <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
24ce8: e281cf6f add ip, r1, #444 ; 0x1bc <== NOT EXECUTED
24cec: e5959004 ldr r9, [r5, #4] <== NOT EXECUTED
24cf0: e595a000 ldr sl, [r5] <== NOT EXECUTED
24cf4: e5d55008 ldrb r5, [r5, #8] <== NOT EXECUTED
block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0,
record_space,
p->end - p->begin,
rtems_bdpart_mbr_partition_type( p->type),
(uint8_t) p->flags
24cf8: e1a03001 mov r3, r1 <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
24cfc: e28cc002 add ip, ip, #2 <== NOT EXECUTED
RTEMS_BDPART_MBR_SIGNATURE_1;
return RTEMS_SUCCESSFUL;
}
rtems_status_code rtems_bdpart_write(
24d00: e2810004 add r0, r1, #4 <== NOT EXECUTED
24d04: e1a02007 mov r2, r7 <== NOT EXECUTED
24d08: e5c321c6 strb r2, [r3, #454] ; 0x1c6 <== NOT EXECUTED
24d0c: e2833001 add r3, r3, #1 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
24d10: e1530000 cmp r3, r0 <== NOT EXECUTED
data [i] = (uint8_t) value;
24d14: e3a02000 mov r2, #0 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
24d18: 1afffffa bne 24d08 <rtems_bdpart_write+0x450> <== NOT EXECUTED
esc = sc;
goto cleanup;
}
/* Write first partition entry */
rtems_bdpart_write_mbr_partition(
24d1c: e06aa009 rsb sl, sl, r9 <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24d20: e2866001 add r6, r6, #1 <== NOT EXECUTED
uint8_t type,
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
24d24: e28cc00c add ip, ip, #12 <== NOT EXECUTED
data [i] = (uint8_t) value;
24d28: e1a00c2a lsr r0, sl, #24 <== NOT EXECUTED
value >>= 8;
24d2c: e1a0242a lsr r2, sl, #8 <== NOT EXECUTED
24d30: e1a0382a lsr r3, sl, #16 <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24d34: e15b0006 cmp fp, r6 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24d38: e5c1a1ca strb sl, [r1, #458] ; 0x1ca <== NOT EXECUTED
24d3c: e5cc0003 strb r0, [ip, #3] <== NOT EXECUTED
24d40: e5cc2001 strb r2, [ip, #1] <== NOT EXECUTED
24d44: e5cc3002 strb r3, [ip, #2] <== NOT EXECUTED
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24d48: e5c141be strb r4, [r1, #446] ; 0x1be <== NOT EXECUTED
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24d4c: e5c151c2 strb r5, [r1, #450] ; 0x1c2 <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24d50: 9a000029 bls 24dfc <rtems_bdpart_write+0x544> <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
/* Write second partition entry */
if (i > ppc) {
24d54: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
24d58: e1520006 cmp r2, r6 <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24d5c: e1a05008 mov r5, r8 <== NOT EXECUTED
const rtems_bdpart_partition *p = pt + i;
/* Write second partition entry */
if (i > ppc) {
24d60: 2a000021 bcs 24dec <rtems_bdpart_write+0x534> <== NOT EXECUTED
rtems_blkdev_bnum begin = p->begin - record_space;
rtems_bdpart_write_mbr_partition(
24d64: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
for (i = ppc; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Write second partition entry */
if (i > ppc) {
rtems_blkdev_bnum begin = p->begin - record_space;
24d68: e5981000 ldr r1, [r8] <== NOT EXECUTED
rtems_bdpart_write_mbr_partition(
24d6c: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
24d70: e59d2028 ldr r2, [sp, #40] ; 0x28 <== NOT EXECUTED
24d74: e59da004 ldr sl, [sp, #4] <== NOT EXECUTED
for (i = ppc; i < count; ++i) {
const rtems_bdpart_partition *p = pt + i;
/* Write second partition entry */
if (i > ppc) {
rtems_blkdev_bnum begin = p->begin - record_space;
24d78: e0671001 rsb r1, r7, r1 <== NOT EXECUTED
rtems_bdpart_write_mbr_partition(
24d7c: e0612002 rsb r2, r1, r2 <== NOT EXECUTED
24d80: e283cf73 add ip, r3, #460 ; 0x1cc <== NOT EXECUTED
24d84: e06a1001 rsb r1, sl, r1 <== NOT EXECUTED
24d88: e1a0ec22 lsr lr, r2, #24 <== NOT EXECUTED
24d8c: e28cc002 add ip, ip, #2 <== NOT EXECUTED
24d90: e58de010 str lr, [sp, #16] <== NOT EXECUTED
uint8_t type,
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
24d94: e28c000c add r0, ip, #12 <== NOT EXECUTED
24d98: e1a0ac21 lsr sl, r1, #24 <== NOT EXECUTED
uint32_t size,
uint8_t type,
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
24d9c: e28cc008 add ip, ip, #8 <== NOT EXECUTED
value >>= 8;
24da0: e1a0e422 lsr lr, r2, #8 <== NOT EXECUTED
24da4: e1a04421 lsr r4, r1, #8 <== NOT EXECUTED
24da8: e1a09821 lsr r9, r1, #16 <== NOT EXECUTED
24dac: e58de00c str lr, [sp, #12] <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24db0: e5c311d6 strb r1, [r3, #470] ; 0x1d6 <== NOT EXECUTED
24db4: e5cca003 strb sl, [ip, #3] <== NOT EXECUTED
24db8: e5cc4001 strb r4, [ip, #1] <== NOT EXECUTED
24dbc: e5cc9002 strb r9, [ip, #2] <== NOT EXECUTED
24dc0: e5c321da strb r2, [r3, #474] ; 0x1da <== NOT EXECUTED
24dc4: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
24dc8: e5c01003 strb r1, [r0, #3] <== NOT EXECUTED
value >>= 8;
24dcc: e1a0e822 lsr lr, r2, #16 <== NOT EXECUTED
static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
{
size_t i = 0;
for (i = 0; i < 4; ++i) {
data [i] = (uint8_t) value;
24dd0: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24dd4: e3a0a000 mov sl, #0 <== NOT EXECUTED
24dd8: e5c0e002 strb lr, [r0, #2] <== NOT EXECUTED
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24ddc: e3a0e005 mov lr, #5 <== NOT EXECUTED
24de0: e5c02001 strb r2, [r0, #1] <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24de4: e5c3a1ce strb sl, [r3, #462] ; 0x1ce <== NOT EXECUTED
uint8_t flags
)
{
rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN);
rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE);
data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type;
24de8: e5c3e1d2 strb lr, [r3, #466] ; 0x1d2 <== NOT EXECUTED
data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags;
24dec: e2888030 add r8, r8, #48 ; 0x30 <== NOT EXECUTED
24df0: eaffffb1 b 24cbc <rtems_bdpart_write+0x404> <== NOT EXECUTED
}
/* New EBR */
ebr = p->begin - record_space;
sc = rtems_bdpart_new_record( disk, ebr, &block);
if (sc != RTEMS_SUCCESSFUL) {
24df4: e1a04000 mov r4, r0 <== NOT EXECUTED
24df8: eaffff38 b 24ae0 <rtems_bdpart_write+0x228> <== NOT EXECUTED
RTEMS_BDPART_MBR_EXTENDED,
0
);
/* Write logical partitions */
for (i = ppc; i < count; ++i) {
24dfc: e3a04000 mov r4, #0 <== NOT EXECUTED
24e00: eaffff36 b 24ae0 <rtems_bdpart_write+0x228> <== NOT EXECUTED
0000cc20 <rtems_blkdev_generic_ioctl>:
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
int rc;
switch (args->command)
cc20: e3a03911 mov r3, #278528 ; 0x44000
cc24: e5921004 ldr r1, [r2, #4]
cc28: e2833c02 add r3, r3, #512 ; 0x200
cc2c: e283310d add r3, r3, #1073741827 ; 0x40000003
rtems_device_driver
rtems_blkdev_generic_ioctl(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cc30: e92d4010 push {r4, lr}
cc34: e1a04002 mov r4, r2
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
cc38: e5922000 ldr r2, [r2]
int rc;
switch (args->command)
cc3c: e1510003 cmp r1, r3
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
cc40: e5923034 ldr r3, [r2, #52] ; 0x34
int rc;
switch (args->command)
cc44: 0a00003d beq cd40 <rtems_blkdev_generic_ioctl+0x120>
cc48: 9a000017 bls ccac <rtems_blkdev_generic_ioctl+0x8c>
cc4c: e3a02102 mov r2, #-2147483648 ; 0x80000000
cc50: e2822911 add r2, r2, #278528 ; 0x44000
cc54: e2822f81 add r2, r2, #516 ; 0x204
cc58: e1510002 cmp r1, r2
cc5c: 0a000022 beq ccec <rtems_blkdev_generic_ioctl+0xcc>
cc60: e3a02961 mov r2, #1589248 ; 0x184000 <== NOT EXECUTED
cc64: e2822c02 add r2, r2, #512 ; 0x200 <== NOT EXECUTED
cc68: e2822107 add r2, r2, #-1073741823 ; 0xc0000001 <== NOT EXECUTED
cc6c: e1510002 cmp r1, r2 <== NOT EXECUTED
case RTEMS_BLKIO_REQUEST:
/*
* It is not allowed to directly access the driver circumventing
* the cache.
*/
args->ioctl_return = (uint32_t) -1;
cc70: 03e03000 mvneq r3, #0 <== NOT EXECUTED
cc74: 0584300c streq r3, [r4, #12] <== NOT EXECUTED
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
int rc;
switch (args->command)
cc78: 0a000009 beq cca4 <rtems_blkdev_generic_ioctl+0x84> <== NOT EXECUTED
cc7c: e3a02911 mov r2, #278528 ; 0x44000 <== NOT EXECUTED
cc80: e2822f81 add r2, r2, #516 ; 0x204 <== NOT EXECUTED
cc84: e2822105 add r2, r2, #1073741825 ; 0x40000001 <== NOT EXECUTED
cc88: e1510002 cmp r1, r2 <== NOT EXECUTED
cc8c: 0a00001d beq cd08 <rtems_blkdev_generic_ioctl+0xe8> <== NOT EXECUTED
*/
args->ioctl_return = (uint32_t) -1;
break;
default:
args->ioctl_return = (uint32_t) dd->ioctl(dd->phys_dev,
cc90: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
cc94: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
cc98: e1a0e00f mov lr, pc <== NOT EXECUTED
cc9c: e593f028 ldr pc, [r3, #40] ; 0x28 <== NOT EXECUTED
cca0: e584000c str r0, [r4, #12] <== NOT EXECUTED
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cca4: e3a00000 mov r0, #0 <== NOT EXECUTED
cca8: e8bd8010 pop {r4, pc} <== NOT EXECUTED
rtems_libio_ioctl_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
int rc;
switch (args->command)
ccac: e3a02c42 mov r2, #16896 ; 0x4200 <== NOT EXECUTED
ccb0: e2822262 add r2, r2, #536870918 ; 0x20000006 <== NOT EXECUTED
ccb4: e1510002 cmp r1, r2 <== NOT EXECUTED
ccb8: 0a000019 beq cd24 <rtems_blkdev_generic_ioctl+0x104> <== NOT EXECUTED
ccbc: e3a02911 mov r2, #278528 ; 0x44000 <== NOT EXECUTED
ccc0: e2822c02 add r2, r2, #512 ; 0x200 <== NOT EXECUTED
ccc4: e2822109 add r2, r2, #1073741826 ; 0x40000002 <== NOT EXECUTED
ccc8: e1510002 cmp r1, r2 <== NOT EXECUTED
cccc: 1affffef bne cc90 <rtems_blkdev_generic_ioctl+0x70> <== NOT EXECUTED
{
case RTEMS_BLKIO_GETMEDIABLKSIZE:
*((uint32_t *) args->buffer) = dd->media_block_size;
ccd0: e5932024 ldr r2, [r3, #36] ; 0x24 <== NOT EXECUTED
ccd4: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
ccd8: e5832000 str r2, [r3] <== NOT EXECUTED
args->ioctl_return = 0;
ccdc: e3a03000 mov r3, #0 <== NOT EXECUTED
cce0: e584300c str r3, [r4, #12] <== NOT EXECUTED
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cce4: e3a00000 mov r0, #0 <== NOT EXECUTED
cce8: e8bd8010 pop {r4, pc} <== NOT EXECUTED
*((uint32_t *) args->buffer) = dd->block_size;
args->ioctl_return = 0;
break;
case RTEMS_BLKIO_SETBLKSIZE:
dd->block_size = *((uint32_t *) args->buffer);
ccec: e5942008 ldr r2, [r4, #8]
ccf0: e5922000 ldr r2, [r2]
ccf4: e5832020 str r2, [r3, #32]
args->ioctl_return = 0;
ccf8: e3a03000 mov r3, #0
ccfc: e584300c str r3, [r4, #12]
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cd00: e3a00000 mov r0, #0
cd04: e8bd8010 pop {r4, pc}
dd->block_size = *((uint32_t *) args->buffer);
args->ioctl_return = 0;
break;
case RTEMS_BLKIO_GETSIZE:
*((rtems_blkdev_bnum *) args->buffer) = dd->size;
cd08: e593201c ldr r2, [r3, #28] <== NOT EXECUTED
cd0c: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
cd10: e5832000 str r2, [r3] <== NOT EXECUTED
args->ioctl_return = 0;
cd14: e3a03000 mov r3, #0 <== NOT EXECUTED
cd18: e584300c str r3, [r4, #12] <== NOT EXECUTED
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cd1c: e3a00000 mov r0, #0 <== NOT EXECUTED
cd20: e8bd8010 pop {r4, pc} <== NOT EXECUTED
*((rtems_blkdev_bnum *) args->buffer) = dd->size;
args->ioctl_return = 0;
break;
case RTEMS_BLKIO_SYNCDEV:
rc = rtems_bdbuf_syncdev(dd->dev);
cd24: e8930003 ldm r3, {r0, r1} <== NOT EXECUTED
cd28: ebfff791 bl ab74 <rtems_bdbuf_syncdev> <== NOT EXECUTED
args->ioctl_return = (uint32_t) (rc == RTEMS_SUCCESSFUL ? 0 : -1);
cd2c: e2503000 subs r3, r0, #0 <== NOT EXECUTED
cd30: 13e03000 mvnne r3, #0 <== NOT EXECUTED
cd34: e584300c str r3, [r4, #12] <== NOT EXECUTED
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cd38: e3a00000 mov r0, #0 <== NOT EXECUTED
cd3c: e8bd8010 pop {r4, pc} <== NOT EXECUTED
*((uint32_t *) args->buffer) = dd->media_block_size;
args->ioctl_return = 0;
break;
case RTEMS_BLKIO_GETBLKSIZE:
*((uint32_t *) args->buffer) = dd->block_size;
cd40: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
cd44: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
cd48: e5832000 str r2, [r3] <== NOT EXECUTED
args->ioctl_return = 0;
cd4c: e3a03000 mov r3, #0 <== NOT EXECUTED
cd50: e584300c str r3, [r4, #12] <== NOT EXECUTED
args->buffer);
break;
}
return RTEMS_SUCCESSFUL;
}
cd54: e3a00000 mov r0, #0 <== NOT EXECUTED
cd58: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0000ceac <rtems_blkdev_generic_read>:
rtems_device_driver
rtems_blkdev_generic_read(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
ceac: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
ceb0: e5923000 ldr r3, [r2] <== NOT EXECUTED
ceb4: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
ceb8: e5924010 ldr r4, [r2, #16] <== NOT EXECUTED
rtems_device_driver
rtems_blkdev_generic_read(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cebc: e1a07002 mov r7, r2 <== NOT EXECUTED
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
cec0: e8930006 ldm r3, {r1, r2} <== NOT EXECUTED
rtems_device_driver
rtems_blkdev_generic_read(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cec4: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
cec8: e3540000 cmp r4, #0 <== NOT EXECUTED
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
cecc: e3a05000 mov r5, #0 <== NOT EXECUTED
{
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
ced0: e5939020 ldr r9, [r3, #32] <== NOT EXECUTED
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
ced4: e88d0006 stm sp, {r1, r2} <== NOT EXECUTED
args->bytes_moved = 0;
ced8: e5875018 str r5, [r7, #24] <== NOT EXECUTED
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
cedc: e597600c ldr r6, [r7, #12] <== NOT EXECUTED
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
cee0: e9970c00 ldmib r7, {sl, fp} <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
break;
count -= copy;
buf += copy;
blkofs = 0;
block++;
cee4: 01a03004 moveq r3, r4 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
cee8: 0a000028 beq cf90 <rtems_blkdev_generic_read+0xe4> <== NOT EXECUTED
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
ceec: e1a03005 mov r3, r5 <== NOT EXECUTED
cef0: e1a0100b mov r1, fp <== NOT EXECUTED
cef4: e1a02009 mov r2, r9 <== NOT EXECUTED
cef8: e1a0000a mov r0, sl <== NOT EXECUTED
cefc: eb003ccb bl 1c230 <__divdi3> <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
cf00: e1a0100b mov r1, fp <== NOT EXECUTED
cf04: e1a03005 mov r3, r5 <== NOT EXECUTED
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
cf08: e1a08000 mov r8, r0 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
cf0c: e1a02009 mov r2, r9 <== NOT EXECUTED
cf10: e1a0000a mov r0, sl <== NOT EXECUTED
cf14: eb003def bl 1c6d8 <__moddi3> <== NOT EXECUTED
cf18: e28db008 add fp, sp, #8 <== NOT EXECUTED
cf1c: e1a05000 mov r5, r0 <== NOT EXECUTED
cf20: ea000012 b cf70 <rtems_blkdev_generic_read+0xc4> <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
break;
copy = block_size - blkofs;
if (copy > count)
copy = count;
memcpy(buf, (char *)diskbuf->buffer + blkofs, copy);
cf24: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
cf28: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
uint32_t copy;
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
break;
copy = block_size - blkofs;
cf2c: e15a0004 cmp sl, r4 <== NOT EXECUTED
cf30: 21a0a004 movcs sl, r4 <== NOT EXECUTED
if (copy > count)
copy = count;
memcpy(buf, (char *)diskbuf->buffer + blkofs, copy);
cf34: e1a0200a mov r2, sl <== NOT EXECUTED
cf38: e0811005 add r1, r1, r5 <== NOT EXECUTED
cf3c: eb0016b8 bl 12a24 <memcpy> <== NOT EXECUTED
rc = rtems_bdbuf_release(diskbuf);
cf40: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
cf44: ebfff9b3 bl b618 <rtems_bdbuf_release> <== NOT EXECUTED
args->bytes_moved += copy;
cf48: e5972018 ldr r2, [r7, #24] <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
cf4c: e2503000 subs r3, r0, #0 <== NOT EXECUTED
copy = block_size - blkofs;
if (copy > count)
copy = count;
memcpy(buf, (char *)diskbuf->buffer + blkofs, copy);
rc = rtems_bdbuf_release(diskbuf);
args->bytes_moved += copy;
cf50: e082200a add r2, r2, sl <== NOT EXECUTED
cf54: e5872018 str r2, [r7, #24] <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
cf58: 1a00000c bne cf90 <rtems_blkdev_generic_read+0xe4> <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
cf5c: e054400a subs r4, r4, sl <== NOT EXECUTED
cf60: 0a00000a beq cf90 <rtems_blkdev_generic_read+0xe4> <== NOT EXECUTED
rc = rtems_bdbuf_release(diskbuf);
args->bytes_moved += copy;
if (rc != RTEMS_SUCCESSFUL)
break;
count -= copy;
buf += copy;
cf64: e086600a add r6, r6, sl <== NOT EXECUTED
blkofs = 0;
block++;
cf68: e2888001 add r8, r8, #1 <== NOT EXECUTED
cf6c: e1a05003 mov r5, r3 <== NOT EXECUTED
while (count > 0)
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
rc = rtems_bdbuf_read(dev, block, &diskbuf);
cf70: e1a0300b mov r3, fp <== NOT EXECUTED
cf74: e89d0003 ldm sp, {r0, r1} <== NOT EXECUTED
cf78: e1a02008 mov r2, r8 <== NOT EXECUTED
cf7c: ebfffe36 bl c85c <rtems_bdbuf_read> <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
cf80: e2503000 subs r3, r0, #0 <== NOT EXECUTED
break;
copy = block_size - blkofs;
cf84: e065a009 rsb sl, r5, r9 <== NOT EXECUTED
if (copy > count)
copy = count;
memcpy(buf, (char *)diskbuf->buffer + blkofs, copy);
cf88: e1a00006 mov r0, r6 <== NOT EXECUTED
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
cf8c: 0affffe4 beq cf24 <rtems_blkdev_generic_read+0x78> <== NOT EXECUTED
blkofs = 0;
block++;
}
return rc;
}
cf90: e1a00003 mov r0, r3 <== NOT EXECUTED
cf94: e28dd00c add sp, sp, #12 <== NOT EXECUTED
cf98: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0000cd94 <rtems_blkdev_generic_write>:
rtems_device_driver
rtems_blkdev_generic_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cd94: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
cd98: e5923000 ldr r3, [r2] <== NOT EXECUTED
cd9c: e5933034 ldr r3, [r3, #52] ; 0x34 <== NOT EXECUTED
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
cda0: e5924010 ldr r4, [r2, #16] <== NOT EXECUTED
rtems_device_driver
rtems_blkdev_generic_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cda4: e1a07002 mov r7, r2 <== NOT EXECUTED
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
cda8: e8930006 ldm r3, {r1, r2} <== NOT EXECUTED
rtems_device_driver
rtems_blkdev_generic_write(
rtems_device_major_number major __attribute__((unused)),
rtems_device_minor_number minor __attribute__((unused)),
void * arg)
{
cdac: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
cdb0: e3540000 cmp r4, #0 <== NOT EXECUTED
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
cdb4: e3a05000 mov r5, #0 <== NOT EXECUTED
{
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
cdb8: e5939020 ldr r9, [r3, #32] <== NOT EXECUTED
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
cdbc: e88d0006 stm sp, {r1, r2} <== NOT EXECUTED
args->bytes_moved = 0;
cdc0: e5875018 str r5, [r7, #24] <== NOT EXECUTED
rtems_status_code rc = RTEMS_SUCCESSFUL;
rtems_libio_rw_args_t *args = arg;
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
cdc4: e597600c ldr r6, [r7, #12] <== NOT EXECUTED
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
cdc8: e9970c00 ldmib r7, {sl, fp} <== NOT EXECUTED
break;
count -= copy;
buf += copy;
blkofs = 0;
block++;
cdcc: 01a00004 moveq r0, r4 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
cdd0: 0a000033 beq cea4 <rtems_blkdev_generic_write+0x110> <== NOT EXECUTED
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
cdd4: e1a03005 mov r3, r5 <== NOT EXECUTED
cdd8: e1a0100b mov r1, fp <== NOT EXECUTED
cddc: e1a02009 mov r2, r9 <== NOT EXECUTED
cde0: e1a0000a mov r0, sl <== NOT EXECUTED
cde4: eb003d11 bl 1c230 <__divdi3> <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
cde8: e1a0100b mov r1, fp <== NOT EXECUTED
cdec: e1a03005 mov r3, r5 <== NOT EXECUTED
rtems_libio_t *iop = args->iop;
rtems_disk_device *dd = iop->data1;
uint32_t block_size = dd->block_size;
char *buf = args->buffer;
uint32_t count = args->count;
rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size);
cdf0: e1a08000 mov r8, r0 <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
cdf4: e1a02009 mov r2, r9 <== NOT EXECUTED
cdf8: e1a0000a mov r0, sl <== NOT EXECUTED
cdfc: eb003e35 bl 1c6d8 <__moddi3> <== NOT EXECUTED
ce00: e28db008 add fp, sp, #8 <== NOT EXECUTED
ce04: e1a05000 mov r5, r0 <== NOT EXECUTED
ce08: ea00001a b ce78 <rtems_blkdev_generic_write+0xe4> <== NOT EXECUTED
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
if ((blkofs == 0) && (count >= block_size))
rc = rtems_bdbuf_get(dev, block, &diskbuf);
ce0c: e89d0003 ldm sp, {r0, r1} <== NOT EXECUTED
ce10: e1a02008 mov r2, r8 <== NOT EXECUTED
ce14: e1a0300b mov r3, fp <== NOT EXECUTED
ce18: ebfffe5b bl c78c <rtems_bdbuf_get> <== NOT EXECUTED
else
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
ce1c: e3500000 cmp r0, #0 <== NOT EXECUTED
break;
copy = block_size - blkofs;
ce20: e065a009 rsb sl, r5, r9 <== NOT EXECUTED
if (copy > count)
copy = count;
memcpy((char *)diskbuf->buffer + blkofs, buf, copy);
ce24: e1a01006 mov r1, r6 <== NOT EXECUTED
if ((blkofs == 0) && (count >= block_size))
rc = rtems_bdbuf_get(dev, block, &diskbuf);
else
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
ce28: 1a00001d bne cea4 <rtems_blkdev_generic_write+0x110> <== NOT EXECUTED
break;
copy = block_size - blkofs;
if (copy > count)
copy = count;
memcpy((char *)diskbuf->buffer + blkofs, buf, copy);
ce2c: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
ce30: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
else
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
break;
copy = block_size - blkofs;
ce34: e15a0004 cmp sl, r4 <== NOT EXECUTED
ce38: 21a0a004 movcs sl, r4 <== NOT EXECUTED
if (copy > count)
copy = count;
memcpy((char *)diskbuf->buffer + blkofs, buf, copy);
ce3c: e1a0200a mov r2, sl <== NOT EXECUTED
ce40: e0800005 add r0, r0, r5 <== NOT EXECUTED
ce44: eb0016f6 bl 12a24 <memcpy> <== NOT EXECUTED
args->bytes_moved += copy;
ce48: e5973018 ldr r3, [r7, #24] <== NOT EXECUTED
ce4c: e083300a add r3, r3, sl <== NOT EXECUTED
ce50: e5873018 str r3, [r7, #24] <== NOT EXECUTED
rc = rtems_bdbuf_release_modified(diskbuf);
ce54: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
ce58: ebfff9cc bl b590 <rtems_bdbuf_release_modified> <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
ce5c: e3500000 cmp r0, #0 <== NOT EXECUTED
ce60: 1a00000f bne cea4 <rtems_blkdev_generic_write+0x110> <== NOT EXECUTED
uint32_t blkofs = (uint32_t) (args->offset % block_size);
dev_t dev = dd->dev;
args->bytes_moved = 0;
while (count > 0)
ce64: e054400a subs r4, r4, sl <== NOT EXECUTED
ce68: 0a00000d beq cea4 <rtems_blkdev_generic_write+0x110> <== NOT EXECUTED
rc = rtems_bdbuf_release_modified(diskbuf);
if (rc != RTEMS_SUCCESSFUL)
break;
count -= copy;
buf += copy;
ce6c: e086600a add r6, r6, sl <== NOT EXECUTED
blkofs = 0;
block++;
ce70: e2888001 add r8, r8, #1 <== NOT EXECUTED
ce74: e1a05000 mov r5, r0 <== NOT EXECUTED
while (count > 0)
{
rtems_bdbuf_buffer *diskbuf;
uint32_t copy;
if ((blkofs == 0) && (count >= block_size))
ce78: e1540009 cmp r4, r9 <== NOT EXECUTED
ce7c: 23550000 cmpcs r5, #0 <== NOT EXECUTED
ce80: 0affffe1 beq ce0c <rtems_blkdev_generic_write+0x78> <== NOT EXECUTED
rc = rtems_bdbuf_get(dev, block, &diskbuf);
else
rc = rtems_bdbuf_read(dev, block, &diskbuf);
ce84: e89d0003 ldm sp, {r0, r1} <== NOT EXECUTED
ce88: e1a0300b mov r3, fp <== NOT EXECUTED
ce8c: e1a02008 mov r2, r8 <== NOT EXECUTED
ce90: ebfffe71 bl c85c <rtems_bdbuf_read> <== NOT EXECUTED
if (rc != RTEMS_SUCCESSFUL)
ce94: e3500000 cmp r0, #0 <== NOT EXECUTED
break;
copy = block_size - blkofs;
ce98: e065a009 rsb sl, r5, r9 <== NOT EXECUTED
if (copy > count)
copy = count;
memcpy((char *)diskbuf->buffer + blkofs, buf, copy);
ce9c: e1a01006 mov r1, r6 <== NOT EXECUTED
if ((blkofs == 0) && (count >= block_size))
rc = rtems_bdbuf_get(dev, block, &diskbuf);
else
rc = rtems_bdbuf_read(dev, block, &diskbuf);
if (rc != RTEMS_SUCCESSFUL)
cea0: 0affffe1 beq ce2c <rtems_blkdev_generic_write+0x98> <== NOT EXECUTED
blkofs = 0;
block++;
}
return rc;
}
cea4: e28dd00c add sp, sp, #12 <== NOT EXECUTED
cea8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0000cb74 <rtems_blkdev_ioctl>:
rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
size_t *arg_size = argp;
int rc = 0;
switch (req)
cb74: e3a03911 mov r3, #278528 ; 0x44000
cb78: e2833c02 add r3, r3, #512 ; 0x200
cb7c: e283310d add r3, r3, #1073741827 ; 0x40000003
cb80: e1510003 cmp r1, r3
return RTEMS_SUCCESSFUL;
}
int
rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
cb84: e52de004 push {lr} ; (str lr, [sp, #-4]!)
size_t *arg_size = argp;
int rc = 0;
switch (req)
cb88: 0a00001c beq cc00 <rtems_blkdev_ioctl+0x8c>
cb8c: 9a00000d bls cbc8 <rtems_blkdev_ioctl+0x54>
cb90: e3a03911 mov r3, #278528 ; 0x44000 <== NOT EXECUTED
cb94: e2833f81 add r3, r3, #516 ; 0x204 <== NOT EXECUTED
cb98: e2833105 add r3, r3, #1073741825 ; 0x40000001 <== NOT EXECUTED
cb9c: e1510003 cmp r1, r3 <== NOT EXECUTED
cba0: 0a000012 beq cbf0 <rtems_blkdev_ioctl+0x7c> <== NOT EXECUTED
cba4: e3a03102 mov r3, #-2147483648 ; 0x80000000 <== NOT EXECUTED
cba8: e2833911 add r3, r3, #278528 ; 0x44000 <== NOT EXECUTED
cbac: e2833f81 add r3, r3, #516 ; 0x204 <== NOT EXECUTED
cbb0: e1510003 cmp r1, r3 <== NOT EXECUTED
cbb4: 1a000008 bne cbdc <rtems_blkdev_ioctl+0x68> <== NOT EXECUTED
case RTEMS_BLKIO_GETBLKSIZE:
*arg_size = dd->block_size;
break;
case RTEMS_BLKIO_SETBLKSIZE:
dd->block_size = *arg_size;
cbb8: e5923000 ldr r3, [r2] <== NOT EXECUTED
cbbc: e5803020 str r3, [r0, #32] <== NOT EXECUTED
cbc0: e3a00000 mov r0, #0 <== NOT EXECUTED
break;
cbc4: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
{
size_t *arg_size = argp;
int rc = 0;
switch (req)
cbc8: e3a03911 mov r3, #278528 ; 0x44000
cbcc: e2833c02 add r3, r3, #512 ; 0x200
cbd0: e2833109 add r3, r3, #1073741826 ; 0x40000002
cbd4: e1510003 cmp r1, r3
cbd8: 0a00000c beq cc10 <rtems_blkdev_ioctl+0x9c>
case RTEMS_BLKIO_GETSIZE:
*arg_size = dd->size;
break;
default:
errno = EINVAL;
cbdc: eb001582 bl 121ec <__errno>
cbe0: e3a03016 mov r3, #22
cbe4: e5803000 str r3, [r0]
cbe8: e3e00000 mvn r0, #0
rc = -1;
break;
}
return rc;
}
cbec: e49df004 pop {pc} ; (ldr pc, [sp], #4)
case RTEMS_BLKIO_SETBLKSIZE:
dd->block_size = *arg_size;
break;
case RTEMS_BLKIO_GETSIZE:
*arg_size = dd->size;
cbf0: e590301c ldr r3, [r0, #28] <== NOT EXECUTED
cbf4: e3a00000 mov r0, #0 <== NOT EXECUTED
cbf8: e5823000 str r3, [r2] <== NOT EXECUTED
break;
cbfc: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
case RTEMS_BLKIO_GETMEDIABLKSIZE:
*arg_size = dd->media_block_size;
break;
case RTEMS_BLKIO_GETBLKSIZE:
*arg_size = dd->block_size;
cc00: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
cc04: e3a00000 mov r0, #0 <== NOT EXECUTED
cc08: e5823000 str r3, [r2] <== NOT EXECUTED
break;
cc0c: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
int rc = 0;
switch (req)
{
case RTEMS_BLKIO_GETMEDIABLKSIZE:
*arg_size = dd->media_block_size;
cc10: e5903024 ldr r3, [r0, #36] ; 0x24 <== NOT EXECUTED
cc14: e3a00000 mov r0, #0 <== NOT EXECUTED
cc18: e5823000 str r3, [r2] <== NOT EXECUTED
break;
cc1c: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
0000e1e8 <rtems_deviceio_errno>:
{ 0, 0, 0 },
};
int
rtems_deviceio_errno(rtems_status_code code)
{
e1e8: e92d4010 push {r4, lr} <== NOT EXECUTED
e1ec: e1a01000 mov r1, r0 <== NOT EXECUTED
int rc;
if ((rc = rtems_assoc_remote_by_local(errno_assoc, (uint32_t ) code)))
e1f0: e59f0018 ldr r0, [pc, #24] ; e210 <rtems_deviceio_errno+0x28><== NOT EXECUTED
e1f4: eb000006 bl e214 <rtems_assoc_remote_by_local> <== NOT EXECUTED
e1f8: e2504000 subs r4, r0, #0 <== NOT EXECUTED
e1fc: 0a000001 beq e208 <rtems_deviceio_errno+0x20> <== NOT EXECUTED
{
errno = rc;
e200: eb00002e bl e2c0 <__errno> <== NOT EXECUTED
e204: e5804000 str r4, [r0] <== NOT EXECUTED
return -1;
}
return -1;
}
e208: e3e00000 mvn r0, #0 <== NOT EXECUTED
e20c: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00002100 <rtems_disk_delete>:
}
}
rtems_status_code
rtems_disk_delete(dev_t dev)
{
2100: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
2104: e24dd010 sub sp, sp, #16
2108: e1a04000 mov r4, r0
210c: e1a05001 mov r5, r1
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
sc = disk_lock();
2110: ebffff89 bl 1f3c <disk_lock>
if (sc != RTEMS_SUCCESSFUL) {
2114: e3500000 cmp r0, #0
2118: e58d000c str r0, [sp, #12]
211c: 0a000002 beq 212c <rtems_disk_delete+0x2c>
rtems_disk_cleanup(dd);
disk_unlock();
return RTEMS_SUCCESSFUL;
}
2120: e59d000c ldr r0, [sp, #12]
2124: e28dd010 add sp, sp, #16
2128: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
sc = disk_lock();
if (sc != RTEMS_SUCCESSFUL) {
return sc;
}
dd = get_disk_entry(dev, true);
212c: e1a00004 mov r0, r4
2130: e1a01005 mov r1, r5
2134: e3a02001 mov r2, #1
2138: ebfffefd bl 1d34 <get_disk_entry>
if (dd == NULL) {
213c: e2503000 subs r3, r0, #0
2140: 0a000061 beq 22cc <rtems_disk_delete+0x1cc>
disk_unlock();
return RTEMS_INVALID_ID;
}
dd->deleted = true;
2144: e3a0a001 mov sl, #1
2148: e5c3a030 strb sl, [r3, #48] ; 0x30
}
static void
rtems_disk_cleanup(rtems_disk_device *disk_to_remove)
{
rtems_disk_device *const physical_disk = disk_to_remove->phys_dev;
214c: e5936008 ldr r6, [r3, #8]
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (physical_disk->deleted) {
2150: e5d62030 ldrb r2, [r6, #48] ; 0x30
2154: e3520000 cmp r2, #0
2158: 0a00002c beq 2210 <rtems_disk_delete+0x110>
dev_t dev = physical_disk->dev;
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
215c: e59f9178 ldr r9, [pc, #376] ; 22dc <rtems_disk_delete+0x1dc>
2160: e5993000 ldr r3, [r9]
2164: e3530000 cmp r3, #0
rtems_disk_device *const physical_disk = disk_to_remove->phys_dev;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (physical_disk->deleted) {
dev_t dev = physical_disk->dev;
2168: e5962004 ldr r2, [r6, #4]
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
216c: 059d300c ldreq r3, [sp, #12]
rtems_disk_device *const physical_disk = disk_to_remove->phys_dev;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (physical_disk->deleted) {
dev_t dev = physical_disk->dev;
2170: e5967000 ldr r7, [r6]
2174: e58d2008 str r2, [sp, #8]
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
2178: 058d3004 streq r3, [sp, #4]
217c: 0a000043 beq 2290 <rtems_disk_delete+0x190>
2180: e59d800c ldr r8, [sp, #12]
2184: e58d8004 str r8, [sp, #4]
rtems_disk_device_table *dtab = disktab + major;
2188: e5995004 ldr r5, [r9, #4]
218c: e0855188 add r5, r5, r8, lsl #3
for (minor = 0; minor < dtab->size; ++minor) {
2190: e595e004 ldr lr, [r5, #4]
2194: e35e0000 cmp lr, #0
2198: 0a000038 beq 2280 <rtems_disk_delete+0x180>
219c: e3a04000 mov r4, #0
21a0: e58d8000 str r8, [sp]
21a4: ea000008 b 21cc <rtems_disk_delete+0xcc>
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
21a8: e11c0001 tst ip, r1
21ac: 0a000003 beq 21c0 <rtems_disk_delete+0xc0>
if (dd->uses == 0) {
21b0: e5902014 ldr r2, [r0, #20]
21b4: e3520000 cmp r2, #0
++deleted_count;
dtab->minor [minor] = NULL;
free_disk_device(dd);
} else {
dd->deleted = true;
21b8: 15c0a030 strbne sl, [r0, #48] ; 0x30
for (minor = 0; minor < dtab->size; ++minor) {
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
if (dd->uses == 0) {
21bc: 0a000025 beq 2258 <rtems_disk_delete+0x158>
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
21c0: e2844001 add r4, r4, #1
21c4: e154000e cmp r4, lr
21c8: 2a00002b bcs 227c <rtems_disk_delete+0x17c>
rtems_disk_device *dd = dtab->minor [minor];
21cc: e5953000 ldr r3, [r5]
21d0: e7930104 ldr r0, [r3, r4, lsl #2]
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
21d4: e3500000 cmp r0, #0
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
rtems_disk_device *dd = dtab->minor [minor];
21d8: e1a0b104 lsl fp, r4, #2
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
21dc: 0afffff7 beq 21c0 <rtems_disk_delete+0xc0>
21e0: e5902008 ldr r2, [r0, #8]
21e4: e5921000 ldr r1, [r2]
21e8: e056c000 subs ip, r6, r0
21ec: 13a0c001 movne ip, #1
21f0: e1510007 cmp r1, r7
21f4: e3a01000 mov r1, #0
21f8: 1affffea bne 21a8 <rtems_disk_delete+0xa8>
21fc: e5922004 ldr r2, [r2, #4]
2200: e59d8008 ldr r8, [sp, #8]
2204: e1520008 cmp r2, r8
2208: 03a01001 moveq r1, #1
220c: eaffffe5 b 21a8 <rtems_disk_delete+0xa8>
rtems_filesystem_split_dev_t(physical_disk->dev, major, minor);
disktab [major].minor [minor] = NULL;
free_disk_device(physical_disk);
}
} else {
if (disk_to_remove->uses == 0) {
2210: e5932014 ldr r2, [r3, #20]
2214: e3520000 cmp r2, #0
2218: 0a000001 beq 2224 <rtems_disk_delete+0x124>
}
dd->deleted = true;
rtems_disk_cleanup(dd);
disk_unlock();
221c: ebffff52 bl 1f6c <disk_unlock>
return RTEMS_SUCCESSFUL;
2220: eaffffbe b 2120 <rtems_disk_delete+0x20>
}
} else {
if (disk_to_remove->uses == 0) {
--physical_disk->uses;
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
disktab [major].minor [minor] = NULL;
2224: e59f20b0 ldr r2, [pc, #176] ; 22dc <rtems_disk_delete+0x1dc>
free_disk_device(physical_disk);
}
} else {
if (disk_to_remove->uses == 0) {
--physical_disk->uses;
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
2228: e593c000 ldr ip, [r3]
disktab [major].minor [minor] = NULL;
222c: e5922004 ldr r2, [r2, #4]
disktab [major].minor [minor] = NULL;
free_disk_device(physical_disk);
}
} else {
if (disk_to_remove->uses == 0) {
--physical_disk->uses;
2230: e5961014 ldr r1, [r6, #20]
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
disktab [major].minor [minor] = NULL;
2234: e792218c ldr r2, [r2, ip, lsl #3]
free_disk_device(physical_disk);
}
} else {
if (disk_to_remove->uses == 0) {
--physical_disk->uses;
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
2238: e5933004 ldr r3, [r3, #4]
disktab [major].minor [minor] = NULL;
223c: e59d800c ldr r8, [sp, #12]
disktab [major].minor [minor] = NULL;
free_disk_device(physical_disk);
}
} else {
if (disk_to_remove->uses == 0) {
--physical_disk->uses;
2240: e2411001 sub r1, r1, #1
2244: e5861014 str r1, [r6, #20]
rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor);
disktab [major].minor [minor] = NULL;
2248: e7828103 str r8, [r2, r3, lsl #2]
free_disk_device(disk_to_remove);
224c: ebfffed6 bl 1dac <free_disk_device>
}
dd->deleted = true;
rtems_disk_cleanup(dd);
disk_unlock();
2250: ebffff45 bl 1f6c <disk_unlock>
2254: eaffffb1 b 2120 <rtems_disk_delete+0x20>
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
if (dd->uses == 0) {
++deleted_count;
dtab->minor [minor] = NULL;
2258: e783200b str r2, [r3, fp]
free_disk_device(dd);
225c: ebfffed2 bl 1dac <free_disk_device>
for (minor = 0; minor < dtab->size; ++minor) {
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
if (dd->uses == 0) {
++deleted_count;
2260: e59d1004 ldr r1, [sp, #4]
2264: e595e004 ldr lr, [r5, #4]
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
2268: e2844001 add r4, r4, #1
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
if (dd->uses == 0) {
++deleted_count;
226c: e2811001 add r1, r1, #1
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
2270: e154000e cmp r4, lr
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) {
if (dd->uses == 0) {
++deleted_count;
2274: e58d1004 str r1, [sp, #4]
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
2278: 3affffd3 bcc 21cc <rtems_disk_delete+0xcc>
227c: e59d8000 ldr r8, [sp]
if (physical_disk->deleted) {
dev_t dev = physical_disk->dev;
unsigned deleted_count = 0;
for (major = 0; major < disktab_size; ++major) {
2280: e5993000 ldr r3, [r9]
2284: e2888001 add r8, r8, #1
2288: e1580003 cmp r8, r3
228c: 3affffbd bcc 2188 <rtems_disk_delete+0x88>
}
}
}
}
physical_disk->uses -= deleted_count;
2290: e5963014 ldr r3, [r6, #20]
2294: e59d2004 ldr r2, [sp, #4]
2298: e0623003 rsb r3, r2, r3
if (physical_disk->uses == 0) {
229c: e3530000 cmp r3, #0
}
}
}
}
physical_disk->uses -= deleted_count;
22a0: e5863014 str r3, [r6, #20]
if (physical_disk->uses == 0) {
22a4: 1affffdc bne 221c <rtems_disk_delete+0x11c>
rtems_filesystem_split_dev_t(physical_disk->dev, major, minor);
22a8: e5961000 ldr r1, [r6]
disktab [major].minor [minor] = NULL;
22ac: e5992004 ldr r2, [r9, #4]
22b0: e7922181 ldr r2, [r2, r1, lsl #3]
}
}
physical_disk->uses -= deleted_count;
if (physical_disk->uses == 0) {
rtems_filesystem_split_dev_t(physical_disk->dev, major, minor);
22b4: e5961004 ldr r1, [r6, #4]
disktab [major].minor [minor] = NULL;
free_disk_device(physical_disk);
22b8: e1a00006 mov r0, r6
}
physical_disk->uses -= deleted_count;
if (physical_disk->uses == 0) {
rtems_filesystem_split_dev_t(physical_disk->dev, major, minor);
disktab [major].minor [minor] = NULL;
22bc: e7823101 str r3, [r2, r1, lsl #2]
free_disk_device(physical_disk);
22c0: ebfffeb9 bl 1dac <free_disk_device>
}
dd->deleted = true;
rtems_disk_cleanup(dd);
disk_unlock();
22c4: ebffff28 bl 1f6c <disk_unlock>
22c8: eaffff94 b 2120 <rtems_disk_delete+0x20>
return sc;
}
dd = get_disk_entry(dev, true);
if (dd == NULL) {
disk_unlock();
22cc: ebffff26 bl 1f6c <disk_unlock> <== NOT EXECUTED
22d0: e3a01004 mov r1, #4 <== NOT EXECUTED
22d4: e58d100c str r1, [sp, #12] <== NOT EXECUTED
return RTEMS_INVALID_ID;
22d8: eaffff90 b 2120 <rtems_disk_delete+0x20> <== NOT EXECUTED
00001dfc <rtems_disk_io_done>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_disk_io_done(void)
{
1dfc: e92d40f0 push {r4, r5, r6, r7, lr}
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
for (major = 0; major < disktab_size; ++major) {
1e00: e59f7088 ldr r7, [pc, #136] ; 1e90 <rtems_disk_io_done+0x94>
1e04: e5973000 ldr r3, [r7]
1e08: e3530000 cmp r3, #0
1e0c: 0a000016 beq 1e6c <rtems_disk_io_done+0x70>
1e10: e3a06000 mov r6, #0
rtems_disk_device_table *dtab = disktab + major;
1e14: e5972004 ldr r2, [r7, #4]
1e18: e0825186 add r5, r2, r6, lsl #3
for (minor = 0; minor < dtab->size; ++minor) {
1e1c: e5953004 ldr r3, [r5, #4]
1e20: e3530000 cmp r3, #0
1e24: 07922186 ldreq r2, [r2, r6, lsl #3]
1e28: 0a000009 beq 1e54 <rtems_disk_io_done+0x58>
1e2c: e7922186 ldr r2, [r2, r6, lsl #3]
1e30: e3a04000 mov r4, #0
rtems_disk_device *dd = dtab->minor [minor];
1e34: e7920104 ldr r0, [r2, r4, lsl #2]
if (dd != NULL) {
1e38: e3500000 cmp r0, #0
rtems_device_minor_number minor = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
1e3c: e2844001 add r4, r4, #1
rtems_disk_device *dd = dtab->minor [minor];
if (dd != NULL) {
1e40: 0a000001 beq 1e4c <rtems_disk_io_done+0x50>
free_disk_device(dd);
1e44: ebffffd8 bl 1dac <free_disk_device> <== NOT EXECUTED
1e48: e895000c ldm r5, {r2, r3} <== NOT EXECUTED
rtems_device_minor_number minor = 0;
for (major = 0; major < disktab_size; ++major) {
rtems_disk_device_table *dtab = disktab + major;
for (minor = 0; minor < dtab->size; ++minor) {
1e4c: e1530004 cmp r3, r4
1e50: 8afffff7 bhi 1e34 <rtems_disk_io_done+0x38>
if (dd != NULL) {
free_disk_device(dd);
}
}
free(dtab->minor);
1e54: e1a00002 mov r0, r2
1e58: eb0004a8 bl 3100 <free>
rtems_disk_io_done(void)
{
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
for (major = 0; major < disktab_size; ++major) {
1e5c: e5973000 ldr r3, [r7]
1e60: e2866001 add r6, r6, #1
1e64: e1530006 cmp r3, r6
1e68: 8affffe9 bhi 1e14 <rtems_disk_io_done+0x18>
free_disk_device(dd);
}
}
free(dtab->minor);
}
free(disktab);
1e6c: e5970004 ldr r0, [r7, #4]
1e70: eb0004a2 bl 3100 <free>
rtems_semaphore_delete(diskdevs_mutex);
1e74: e5970008 ldr r0, [r7, #8]
1e78: eb0012fd bl 6a74 <rtems_semaphore_delete>
diskdevs_mutex = RTEMS_ID_NONE;
1e7c: e3a00000 mov r0, #0
disktab = NULL;
disktab_size = 0;
1e80: e5870000 str r0, [r7]
}
free(disktab);
rtems_semaphore_delete(diskdevs_mutex);
diskdevs_mutex = RTEMS_ID_NONE;
1e84: e5870008 str r0, [r7, #8]
disktab = NULL;
1e88: e5870004 str r0, [r7, #4]
disktab_size = 0;
return RTEMS_SUCCESSFUL;
}
1e8c: e8bd80f0 pop {r4, r5, r6, r7, pc}
00001e94 <rtems_disk_io_initialize>:
}
}
rtems_status_code
rtems_disk_io_initialize(void)
{
1e94: e92d4030 push {r4, r5, lr}
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number size = DISKTAB_INITIAL_SIZE;
if (disktab_size > 0) {
1e98: e59f4094 ldr r4, [pc, #148] ; 1f34 <rtems_disk_io_initialize+0xa0>
1e9c: e5945000 ldr r5, [r4]
1ea0: e3550000 cmp r5, #0
}
}
rtems_status_code
rtems_disk_io_initialize(void)
{
1ea4: e24dd004 sub sp, sp, #4
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_device_major_number size = DISKTAB_INITIAL_SIZE;
if (disktab_size > 0) {
1ea8: 13a00000 movne r0, #0
1eac: 0a000001 beq 1eb8 <rtems_disk_io_initialize+0x24>
}
disktab_size = size;
return RTEMS_SUCCESSFUL;
}
1eb0: e28dd004 add sp, sp, #4
1eb4: e8bd8030 pop {r4, r5, pc}
if (disktab_size > 0) {
return RTEMS_SUCCESSFUL;
}
disktab = calloc(size, sizeof(rtems_disk_device_table));
1eb8: e3a00008 mov r0, #8
1ebc: e1a01000 mov r1, r0
1ec0: eb0003f8 bl 2ea8 <calloc>
if (disktab == NULL) {
1ec4: e3500000 cmp r0, #0
if (disktab_size > 0) {
return RTEMS_SUCCESSFUL;
}
disktab = calloc(size, sizeof(rtems_disk_device_table));
1ec8: e5840004 str r0, [r4, #4]
if (disktab == NULL) {
1ecc: 0a00000b beq 1f00 <rtems_disk_io_initialize+0x6c>
return RTEMS_NO_MEMORY;
}
diskdevs_protected = false;
sc = rtems_semaphore_create(
1ed0: e284c008 add ip, r4, #8
1ed4: e1a03005 mov r3, r5
1ed8: e59f0058 ldr r0, [pc, #88] ; 1f38 <rtems_disk_io_initialize+0xa4>
1edc: e3a01001 mov r1, #1
1ee0: e3a02010 mov r2, #16
1ee4: e58dc000 str ip, [sp]
disktab = calloc(size, sizeof(rtems_disk_device_table));
if (disktab == NULL) {
return RTEMS_NO_MEMORY;
}
diskdevs_protected = false;
1ee8: e5c4500c strb r5, [r4, #12]
sc = rtems_semaphore_create(
1eec: eb00126e bl 68ac <rtems_semaphore_create>
RTEMS_FIFO | RTEMS_BINARY_SEMAPHORE | RTEMS_NO_INHERIT_PRIORITY
| RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL,
0,
&diskdevs_mutex
);
if (sc != RTEMS_SUCCESSFUL) {
1ef0: e3500000 cmp r0, #0
1ef4: 0a000003 beq 1f08 <rtems_disk_io_initialize+0x74>
free(disktab);
1ef8: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
1efc: eb00047f bl 3100 <free> <== NOT EXECUTED
1f00: e3a0001a mov r0, #26 <== NOT EXECUTED
return RTEMS_NO_MEMORY;
1f04: eaffffe9 b 1eb0 <rtems_disk_io_initialize+0x1c> <== NOT EXECUTED
}
sc = rtems_bdbuf_init();
1f08: eb00238d bl ad44 <rtems_bdbuf_init>
if (sc != RTEMS_SUCCESSFUL) {
1f0c: e3500000 cmp r0, #0
free(disktab);
return RTEMS_UNSATISFIED;
}
disktab_size = size;
1f10: 03a03008 moveq r3, #8
1f14: 05843000 streq r3, [r4]
return RTEMS_NO_MEMORY;
}
sc = rtems_bdbuf_init();
if (sc != RTEMS_SUCCESSFUL) {
1f18: 0affffe4 beq 1eb0 <rtems_disk_io_initialize+0x1c>
rtems_semaphore_delete(diskdevs_mutex);
1f1c: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
1f20: eb0012d3 bl 6a74 <rtems_semaphore_delete> <== NOT EXECUTED
free(disktab);
1f24: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
1f28: eb000474 bl 3100 <free> <== NOT EXECUTED
1f2c: e3a0000d mov r0, #13 <== NOT EXECUTED
return RTEMS_UNSATISFIED;
1f30: eaffffde b 1eb0 <rtems_disk_io_initialize+0x1c> <== NOT EXECUTED
00001fa0 <rtems_disk_next>:
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (dev != (dev_t) -1) {
1fa0: e3700001 cmn r0, #1
return RTEMS_SUCCESSFUL;
}
rtems_disk_device *
rtems_disk_next(dev_t dev)
{
1fa4: e92d40f0 push {r4, r5, r6, r7, lr}
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (dev != (dev_t) -1) {
1fa8: 0a00002f beq 206c <rtems_disk_next+0xcc>
rtems_filesystem_split_dev_t(dev, major, minor);
/* If minor wraps around */
if ((minor + 1) < minor) {
1fac: e2914001 adds r4, r1, #1
1fb0: 31a05000 movcc r5, r0
1fb4: 2a00001c bcs 202c <rtems_disk_next+0x8c>
} else {
++minor;
}
}
sc = disk_lock();
1fb8: ebffffdf bl 1f3c <disk_lock>
if (sc != RTEMS_SUCCESSFUL) {
1fbc: e2506000 subs r6, r0, #0
1fc0: 1a00001b bne 2034 <rtems_disk_next+0x94>
return NULL;
}
if (major >= disktab_size) {
1fc4: e59f30c0 ldr r3, [pc, #192] ; 208c <rtems_disk_next+0xec>
1fc8: e5930000 ldr r0, [r3]
1fcc: e1550000 cmp r5, r0
1fd0: 2a00002a bcs 2080 <rtems_disk_next+0xe0>
disk_unlock();
return NULL;
}
dtab = disktab + major;
1fd4: e5931004 ldr r1, [r3, #4]
1fd8: e7913185 ldr r3, [r1, r5, lsl #3]
1fdc: e0816185 add r6, r1, r5, lsl #3
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
1fe0: e3530000 cmp r3, #0
1fe4: 0a000009 beq 2010 <rtems_disk_next+0x70>
1fe8: e5962004 ldr r2, [r6, #4]
1fec: e1540002 cmp r4, r2
1ff0: 2a000006 bcs 2010 <rtems_disk_next+0x70>
disk_unlock();
return NULL;
}
dtab = disktab + major;
} else if (dtab->minor [minor] == NULL) {
1ff4: e7932104 ldr r2, [r3, r4, lsl #2]
1ff8: e3520000 cmp r2, #0
1ffc: e1a07104 lsl r7, r4, #2
2000: 1a000010 bne 2048 <rtems_disk_next+0xa8>
return NULL;
}
dtab = disktab + major;
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
2004: e3530000 cmp r3, #0
return NULL;
}
dtab = disktab + major;
} else if (dtab->minor [minor] == NULL) {
++minor;
2008: e2844001 add r4, r4, #1
return NULL;
}
dtab = disktab + major;
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
200c: 1afffff5 bne 1fe8 <rtems_disk_next+0x48>
minor = 0;
++major;
2010: e2855001 add r5, r5, #1
if (major >= disktab_size) {
2014: e1500005 cmp r0, r5
2018: 9a000007 bls 203c <rtems_disk_next+0x9c>
disk_unlock();
return NULL;
}
dtab = disktab + major;
201c: e0816185 add r6, r1, r5, lsl #3
2020: e7913185 ldr r3, [r1, r5, lsl #3]
2024: e3a04000 mov r4, #0
return NULL;
}
dtab = disktab + major;
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
2028: eaffffec b 1fe0 <rtems_disk_next+0x40>
rtems_filesystem_split_dev_t(dev, major, minor);
/* If minor wraps around */
if ((minor + 1) < minor) {
/* If major wraps around */
if ((major + 1) < major) {
202c: e2905001 adds r5, r0, #1 <== NOT EXECUTED
2030: 3a00000b bcc 2064 <rtems_disk_next+0xc4> <== NOT EXECUTED
++minor;
} else {
++dtab->minor [minor]->uses;
disk_unlock();
return dtab->minor [minor];
2034: e3a00000 mov r0, #0 <== NOT EXECUTED
}
}
}
2038: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
while (true) {
if (dtab->minor == NULL || minor >= dtab->size) {
minor = 0;
++major;
if (major >= disktab_size) {
disk_unlock();
203c: ebffffca bl 1f6c <disk_unlock>
2040: e3a00000 mov r0, #0
return NULL;
2044: e8bd80f0 pop {r4, r5, r6, r7, pc}
}
dtab = disktab + major;
} else if (dtab->minor [minor] == NULL) {
++minor;
} else {
++dtab->minor [minor]->uses;
2048: e5923014 ldr r3, [r2, #20]
204c: e2833001 add r3, r3, #1
2050: e5823014 str r3, [r2, #20]
disk_unlock();
2054: ebffffc4 bl 1f6c <disk_unlock>
return dtab->minor [minor];
2058: e5963000 ldr r3, [r6]
205c: e7930007 ldr r0, [r3, r7]
2060: e8bd80f0 pop {r4, r5, r6, r7, pc}
rtems_filesystem_split_dev_t(dev, major, minor);
/* If minor wraps around */
if ((minor + 1) < minor) {
/* If major wraps around */
if ((major + 1) < major) {
2064: e3a04000 mov r4, #0 <== NOT EXECUTED
2068: eaffffd2 b 1fb8 <rtems_disk_next+0x18> <== NOT EXECUTED
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device_table *dtab = NULL;
rtems_device_major_number major = 0;
rtems_device_minor_number minor = 0;
if (dev != (dev_t) -1) {
206c: e3710001 cmn r1, #1
2070: 03a04000 moveq r4, #0
2074: 01a05004 moveq r5, r4
2078: 1affffcb bne 1fac <rtems_disk_next+0xc>
207c: eaffffcd b 1fb8 <rtems_disk_next+0x18>
if (sc != RTEMS_SUCCESSFUL) {
return NULL;
}
if (major >= disktab_size) {
disk_unlock();
2080: ebffffb9 bl 1f6c <disk_unlock> <== NOT EXECUTED
2084: e1a00006 mov r0, r6 <== NOT EXECUTED
return NULL;
2088: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00002090 <rtems_disk_obtain>:
return RTEMS_SUCCESSFUL;
}
rtems_disk_device *
rtems_disk_obtain(dev_t dev)
{
2090: e92d4070 push {r4, r5, r6, lr}
2094: e1a05000 mov r5, r0
2098: e24dd004 sub sp, sp, #4
209c: e1a06001 mov r6, r1
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
20a0: e10f4000 mrs r4, CPSR
20a4: e3843080 orr r3, r4, #128 ; 0x80
20a8: e129f003 msr CPSR_fc, r3
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_disk_device *dd = NULL;
rtems_interrupt_level level;
rtems_interrupt_disable(level);
if (!diskdevs_protected) {
20ac: e59f3048 ldr r3, [pc, #72] ; 20fc <rtems_disk_obtain+0x6c>
20b0: e5d3200c ldrb r2, [r3, #12]
20b4: e21220ff ands r2, r2, #255 ; 0xff
20b8: 1a000003 bne 20cc <rtems_disk_obtain+0x3c>
/* Frequent and quickest case */
dd = get_disk_entry(dev, false);
20bc: ebffff1c bl 1d34 <get_disk_entry>
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
20c0: e129f004 msr CPSR_fc, r4
disk_unlock();
}
}
return dd;
}
20c4: e28dd004 add sp, sp, #4
20c8: e8bd8070 pop {r4, r5, r6, pc}
20cc: e129f004 msr CPSR_fc, r4 <== NOT EXECUTED
dd = get_disk_entry(dev, false);
rtems_interrupt_enable(level);
} else {
rtems_interrupt_enable(level);
sc = disk_lock();
20d0: ebffff99 bl 1f3c <disk_lock> <== NOT EXECUTED
if (sc == RTEMS_SUCCESSFUL) {
20d4: e2502000 subs r2, r0, #0 <== NOT EXECUTED
20d8: 13a00000 movne r0, #0 <== NOT EXECUTED
20dc: 1afffff8 bne 20c4 <rtems_disk_obtain+0x34> <== NOT EXECUTED
dd = get_disk_entry(dev, false);
20e0: e1a01006 mov r1, r6 <== NOT EXECUTED
20e4: e1a00005 mov r0, r5 <== NOT EXECUTED
20e8: ebffff11 bl 1d34 <get_disk_entry> <== NOT EXECUTED
disk_unlock();
20ec: e58d0000 str r0, [sp] <== NOT EXECUTED
20f0: ebffff9d bl 1f6c <disk_unlock> <== NOT EXECUTED
20f4: e59d0000 ldr r0, [sp] <== NOT EXECUTED
20f8: eafffff1 b 20c4 <rtems_disk_obtain+0x34> <== NOT EXECUTED
000200c4 <rtems_dosfs_initialize>:
int rtems_dosfs_initialize(rtems_filesystem_mount_table_entry_t *mt_entry,
const void *data)
{
int rc;
rc = msdos_initialize_support(mt_entry,
200c4: e59f1008 ldr r1, [pc, #8] ; 200d4 <rtems_dosfs_initialize+0x10><== NOT EXECUTED
200c8: e59f2008 ldr r2, [pc, #8] ; 200d8 <rtems_dosfs_initialize+0x14><== NOT EXECUTED
200cc: e59f3008 ldr r3, [pc, #8] ; 200dc <rtems_dosfs_initialize+0x18><== NOT EXECUTED
200d0: ea000002 b 200e0 <msdos_initialize_support> <== NOT EXECUTED
00006d40 <rtems_error>:
int rtems_error(
rtems_error_code_t error_flag,
const char *printf_format,
...
)
{
6d40: e92d000e push {r1, r2, r3} <== NOT EXECUTED
6d44: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
6d48: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
va_list arglist;
int chars_written;
va_start(arglist, printf_format);
6d4c: e28d300c add r3, sp, #12 <== NOT EXECUTED
chars_written = rtems_verror(error_flag, printf_format, arglist);
6d50: e1a02003 mov r2, r3 <== NOT EXECUTED
6d54: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
)
{
va_list arglist;
int chars_written;
va_start(arglist, printf_format);
6d58: e58d3000 str r3, [sp] <== NOT EXECUTED
chars_written = rtems_verror(error_flag, printf_format, arglist);
6d5c: ebffff81 bl 6b68 <rtems_verror> <== NOT EXECUTED
va_end(arglist);
return chars_written;
}
6d60: e28dd004 add sp, sp, #4 <== NOT EXECUTED
6d64: e49de004 pop {lr} ; (ldr lr, [sp], #4) <== NOT EXECUTED
6d68: e28dd00c add sp, sp, #12 <== NOT EXECUTED
6d6c: e12fff1e bx lr <== NOT EXECUTED
00002020 <rtems_filesystem_evaluate_path>:
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
2020: e92d40f0 push {r4, r5, r6, r7, lr}
int i = 0;
2024: e3a0c000 mov ip, #0
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
2028: e24dd008 sub sp, sp, #8
/*
* Verify Input parameters.
*/
if ( !pathname )
202c: e2505000 subs r5, r0, #0
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
int i = 0;
2030: e58dc004 str ip, [sp, #4]
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
2034: e1a06001 mov r6, r1
2038: e1a04002 mov r4, r2
203c: e1a07003 mov r7, r3
/*
* Verify Input parameters.
*/
if ( !pathname )
2040: 0a000013 beq 2094 <rtems_filesystem_evaluate_path+0x74>
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
2044: e3530000 cmp r3, #0
2048: 0a00000c beq 2080 <rtems_filesystem_evaluate_path+0x60>
/*
* Evaluate the path using the optable evalpath.
*/
rtems_filesystem_get_start_loc( pathname, &i, pathloc );
204c: e1a02003 mov r2, r3
2050: e28d1004 add r1, sp, #4
2054: eb0003d5 bl 2fb0 <rtems_filesystem_get_start_loc>
/*
* We evaluation the path relative to the start location we get got.
*/
return rtems_filesystem_evaluate_relative_path( &pathname[i],
2058: e59d0004 ldr r0, [sp, #4]
205c: e59dc01c ldr ip, [sp, #28]
2060: e0601006 rsb r1, r0, r6
2064: e1a02004 mov r2, r4
2068: e0850000 add r0, r5, r0
206c: e1a03007 mov r3, r7
2070: e58dc000 str ip, [sp]
2074: ebffffad bl 1f30 <rtems_filesystem_evaluate_relative_path>
pathnamelen - i,
flags,
pathloc,
follow_link );
}
2078: e28dd008 add sp, sp, #8
207c: e8bd80f0 pop {r4, r5, r6, r7, pc}
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
2080: eb00308e bl e2c0 <__errno> <== NOT EXECUTED
2084: e3a03005 mov r3, #5 <== NOT EXECUTED
2088: e5803000 str r3, [r0] <== NOT EXECUTED
208c: e3e00000 mvn r0, #0 <== NOT EXECUTED
2090: eafffff8 b 2078 <rtems_filesystem_evaluate_path+0x58> <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
2094: eb003089 bl e2c0 <__errno> <== NOT EXECUTED
2098: e3a0300e mov r3, #14 <== NOT EXECUTED
209c: e5803000 str r3, [r0] <== NOT EXECUTED
20a0: e3e00000 mvn r0, #0 <== NOT EXECUTED
20a4: eafffff3 b 2078 <rtems_filesystem_evaluate_path+0x58> <== NOT EXECUTED
00001f30 <rtems_filesystem_evaluate_relative_path>:
/*
* Verify Input parameters.
*/
if ( !pathname )
1f30: e3500000 cmp r0, #0
size_t pathnamelen,
int flags,
rtems_filesystem_location_info_t *pathloc,
int follow_link
)
{
1f34: e92d4030 push {r4, r5, lr}
1f38: e1a05002 mov r5, r2
1f3c: e1a04003 mov r4, r3
/*
* Verify Input parameters.
*/
if ( !pathname )
1f40: 0a00002c beq 1ff8 <rtems_filesystem_evaluate_relative_path+0xc8>
rtems_set_errno_and_return_minus_one( EFAULT );
if ( !pathloc )
1f44: e3530000 cmp r3, #0
1f48: 0a00002f beq 200c <rtems_filesystem_evaluate_relative_path+0xdc>
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
if ( !pathloc->ops->evalpath_h )
1f4c: e593c00c ldr ip, [r3, #12]
1f50: e59cc000 ldr ip, [ip]
1f54: e35c0000 cmp ip, #0
1f58: 0a000021 beq 1fe4 <rtems_filesystem_evaluate_relative_path+0xb4>
rtems_set_errno_and_return_minus_one( ENOTSUP );
result = (*pathloc->ops->evalpath_h)( pathname, pathnamelen, flags, pathloc );
1f5c: e1a0e00f mov lr, pc
1f60: e12fff1c bx ip
/*
* Get the Node type and determine if you need to follow the link or
* not.
*/
if ( (result == 0) && follow_link ) {
1f64: e59d200c ldr r2, [sp, #12]
1f68: e2703001 rsbs r3, r0, #1
1f6c: 33a03000 movcc r3, #0
1f70: e3520000 cmp r2, #0
1f74: 03a03000 moveq r3, #0
1f78: e3530000 cmp r3, #0
1f7c: 08bd8030 popeq {r4, r5, pc}
if ( !pathloc->ops->node_type_h ){
1f80: e594200c ldr r2, [r4, #12]
1f84: e5923010 ldr r3, [r2, #16]
1f88: e3530000 cmp r3, #0
1f8c: 0a00000f beq 1fd0 <rtems_filesystem_evaluate_relative_path+0xa0>
rtems_filesystem_freenode( pathloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
type = (*pathloc->ops->node_type_h)( pathloc );
1f90: e1a00004 mov r0, r4
1f94: e1a0e00f mov lr, pc
1f98: e12fff13 bx r3
if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) ||
1f9c: e2400003 sub r0, r0, #3
1fa0: e3500001 cmp r0, #1
1fa4: 83a00000 movhi r0, #0
1fa8: 88bd8030 pophi {r4, r5, pc}
( type == RTEMS_FILESYSTEM_SYM_LINK ) ) {
if ( !pathloc->ops->eval_link_h ){
1fac: e594200c ldr r2, [r4, #12]
1fb0: e5923034 ldr r3, [r2, #52] ; 0x34
1fb4: e3530000 cmp r3, #0
1fb8: 0a000004 beq 1fd0 <rtems_filesystem_evaluate_relative_path+0xa0>
* pathloc will be passed up (and eventually released).
* Hence, the (valid) originial node that we submit to
* eval_link_h() should be released by the handler.
*/
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
1fbc: e1a00004 mov r0, r4
1fc0: e1a01005 mov r1, r5
1fc4: e1a0e00f mov lr, pc
1fc8: e12fff13 bx r3
}
}
return result;
}
1fcc: e8bd8030 pop {r4, r5, pc}
if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) ||
( type == RTEMS_FILESYSTEM_SYM_LINK ) ) {
if ( !pathloc->ops->eval_link_h ){
rtems_filesystem_freenode( pathloc );
1fd0: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
1fd4: e3530000 cmp r3, #0 <== NOT EXECUTED
1fd8: 11a00004 movne r0, r4 <== NOT EXECUTED
1fdc: 11a0e00f movne lr, pc <== NOT EXECUTED
1fe0: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
1fe4: eb0030b5 bl e2c0 <__errno> <== NOT EXECUTED
1fe8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
1fec: e5803000 str r3, [r0] <== NOT EXECUTED
1ff0: e3e00000 mvn r0, #0 <== NOT EXECUTED
1ff4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
/*
* Verify Input parameters.
*/
if ( !pathname )
rtems_set_errno_and_return_minus_one( EFAULT );
1ff8: eb0030b0 bl e2c0 <__errno> <== NOT EXECUTED
1ffc: e3a0300e mov r3, #14 <== NOT EXECUTED
2000: e5803000 str r3, [r0] <== NOT EXECUTED
2004: e3e00000 mvn r0, #0 <== NOT EXECUTED
2008: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
if ( !pathloc )
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
200c: eb0030ab bl e2c0 <__errno> <== NOT EXECUTED
2010: e3a03005 mov r3, #5 <== NOT EXECUTED
2014: e5803000 str r3, [r0] <== NOT EXECUTED
2018: e3e00000 mvn r0, #0 <== NOT EXECUTED
201c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
00001d28 <rtems_filesystem_initialize>:
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
1d28: e92d40f0 push {r4, r5, r6, r7, lr}
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
1d2c: e59f2108 ldr r2, [pc, #264] ; 1e3c <rtems_filesystem_initialize+0x114>
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
1d30: e59f6108 ldr r6, [pc, #264] ; 1e40 <rtems_filesystem_initialize+0x118>
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
1d34: e5922000 ldr r2, [r2]
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
1d38: e5963000 ldr r3, [r6]
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
1d3c: e3520000 cmp r2, #0
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
1d40: e3a02012 mov r2, #18
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
1d44: e24dd018 sub sp, sp, #24
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
1d48: e583202c str r2, [r3, #44] ; 0x2c
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
1d4c: 0a00002e beq 1e0c <rtems_filesystem_initialize+0xe4>
rtems_fatal_error_occurred( 0xABCD0001 );
mt = &rtems_filesystem_mount_table[0];
1d50: e59f30ec ldr r3, [pc, #236] ; 1e44 <rtems_filesystem_initialize+0x11c>
1d54: e5932000 ldr r2, [r3]
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
1d58: e3a05000 mov r5, #0
1d5c: e5923004 ldr r3, [r2, #4]
1d60: e2820008 add r0, r2, #8
1d64: e8900003 ldm r0, {r0, r1}
1d68: e5922000 ldr r2, [r2]
1d6c: e58d5000 str r5, [sp]
1d70: eb000254 bl 26c8 <mount>
if ( status == -1 )
1d74: e3700001 cmn r0, #1
1d78: 0a00002b beq 1e2c <rtems_filesystem_initialize+0x104>
rtems_fatal_error_occurred( 0xABCD0002 );
rtems_filesystem_link_counts = 0;
1d7c: e5963000 ldr r3, [r6]
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
1d80: e28d4004 add r4, sp, #4
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
if ( status == -1 )
rtems_fatal_error_occurred( 0xABCD0002 );
rtems_filesystem_link_counts = 0;
1d84: e1c353b0 strh r5, [r3, #48] ; 0x30
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
1d88: e3a01001 mov r1, #1
1d8c: e1a03004 mov r3, r4
1d90: e1a02005 mov r2, r5
1d94: e59f00ac ldr r0, [pc, #172] ; 1e48 <rtems_filesystem_initialize+0x120>
rtems_filesystem_root = loc;
1d98: e1a07004 mov r7, r4
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
1d9c: e58d5000 str r5, [sp]
1da0: eb00009e bl 2020 <rtems_filesystem_evaluate_path>
rtems_filesystem_root = loc;
1da4: e596c000 ldr ip, [r6]
1da8: e8b7000f ldm r7!, {r0, r1, r2, r3}
1dac: e28cc018 add ip, ip, #24
1db0: e8ac000f stmia ip!, {r0, r1, r2, r3}
1db4: e5973000 ldr r3, [r7]
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
1db8: e1a02005 mov r2, r5
*
* Till Straumann, 10/25/2002
*/
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
1dbc: e58c3000 str r3, [ip]
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
1dc0: e3a01001 mov r1, #1
1dc4: e1a03004 mov r3, r4
1dc8: e59f0078 ldr r0, [pc, #120] ; 1e48 <rtems_filesystem_initialize+0x120>
1dcc: e58d5000 str r5, [sp]
1dd0: eb000092 bl 2020 <rtems_filesystem_evaluate_path>
rtems_filesystem_current = loc;
1dd4: e596c000 ldr ip, [r6]
1dd8: e8b4000f ldm r4!, {r0, r1, r2, r3}
1ddc: e28cc004 add ip, ip, #4
1de0: e8ac000f stmia ip!, {r0, r1, r2, r3}
1de4: e5973000 ldr r3, [r7]
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
1de8: e3a01f7f mov r1, #508 ; 0x1fc
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_current = loc;
1dec: e58c3000 str r3, [ip]
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
1df0: e2811003 add r1, r1, #3
1df4: e59f0050 ldr r0, [pc, #80] ; 1e4c <rtems_filesystem_initialize+0x124>
1df8: eb0001c2 bl 2508 <mkdir>
if ( status != 0 )
1dfc: e3500000 cmp r0, #0
1e00: 1a000005 bne 1e1c <rtems_filesystem_initialize+0xf4>
* it will be mounted onto is created. Moreover, if it is going to
* use a device, then it is REALLY unfair to attempt this
* before device drivers are initialized. So we return via a base
* filesystem image and nothing auto-mounted at this point.
*/
}
1e04: e28dd018 add sp, sp, #24
1e08: e8bd80f0 pop {r4, r5, r6, r7, pc}
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
rtems_fatal_error_occurred( 0xABCD0001 );
1e0c: e3a004ab mov r0, #-1426063360 ; 0xab000000 <== NOT EXECUTED
1e10: e28008cd add r0, r0, #13434880 ; 0xcd0000 <== NOT EXECUTED
1e14: e2800001 add r0, r0, #1 <== NOT EXECUTED
1e18: eb000ff0 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
if ( status != 0 )
rtems_fatal_error_occurred( 0xABCD0003 );
1e1c: e3a004ab mov r0, #-1426063360 ; 0xab000000 <== NOT EXECUTED
1e20: e28008cd add r0, r0, #13434880 ; 0xcd0000 <== NOT EXECUTED
1e24: e2800003 add r0, r0, #3 <== NOT EXECUTED
1e28: eb000fec bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
mt = &rtems_filesystem_mount_table[0];
status = mount( mt->device, mt->mount_point, mt->type, mt->fsoptions, NULL );
if ( status == -1 )
rtems_fatal_error_occurred( 0xABCD0002 );
1e2c: e3a004ab mov r0, #-1426063360 ; 0xab000000 <== NOT EXECUTED
1e30: e28008cd add r0, r0, #13434880 ; 0xcd0000 <== NOT EXECUTED
1e34: e2800002 add r0, r0, #2 <== NOT EXECUTED
1e38: eb000fe8 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
0000b0e4 <rtems_filesystem_iterate>:
bool rtems_filesystem_iterate(
rtems_per_filesystem_routine routine,
void *routine_arg
)
{
b0e4: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
b0e8: e59f60ac ldr r6, [pc, #172] ; b19c <rtems_filesystem_iterate+0xb8>
b0ec: e5963000 ldr r3, [r6]
b0f0: e3530000 cmp r3, #0
bool rtems_filesystem_iterate(
rtems_per_filesystem_routine routine,
void *routine_arg
)
{
b0f4: e1a04000 mov r4, r0
b0f8: e1a05001 mov r5, r1
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
b0fc: 1a000003 bne b110 <rtems_filesystem_iterate+0x2c>
b100: ea00000c b b138 <rtems_filesystem_iterate+0x54> <== NOT EXECUTED
b104: e3500000 cmp r0, #0
b108: e2866008 add r6, r6, #8
b10c: 1a000020 bne b194 <rtems_filesystem_iterate+0xb0>
stop = (*routine)( table_entry, routine_arg );
b110: e1a00006 mov r0, r6
b114: e1a01005 mov r1, r5
b118: e1a0e00f mov lr, pc
b11c: e12fff14 bx r4
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
b120: e5963008 ldr r3, [r6, #8]
b124: e3530000 cmp r3, #0
stop = (*routine)( table_entry, routine_arg );
b128: e1a0a000 mov sl, r0
{
const rtems_filesystem_table_t *table_entry = &rtems_filesystem_table [0];
rtems_chain_node *node = NULL;
bool stop = false;
while ( table_entry->type && !stop ) {
b12c: 1afffff4 bne b104 <rtems_filesystem_iterate+0x20>
stop = (*routine)( table_entry, routine_arg );
++table_entry;
}
if ( !stop ) {
b130: e3500000 cmp r0, #0
b134: 1a000016 bne b194 <rtems_filesystem_iterate+0xb0>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
b138: e59f7060 ldr r7, [pc, #96] ; b1a0 <rtems_filesystem_iterate+0xbc>
b13c: e3a01000 mov r1, #0
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
b140: e59f605c ldr r6, [pc, #92] ; b1a4 <rtems_filesystem_iterate+0xc0>
b144: e5970000 ldr r0, [r7]
b148: e1a02001 mov r2, r1
b14c: ebffe996 bl 57ac <rtems_semaphore_obtain>
b150: e4968004 ldr r8, [r6], #4
rtems_libio_lock();
for (
b154: e1580006 cmp r8, r6
b158: 03a0a000 moveq sl, #0
b15c: 1a000002 bne b16c <rtems_filesystem_iterate+0x88>
b160: ea000009 b b18c <rtems_filesystem_iterate+0xa8>
b164: e3500000 cmp r0, #0
b168: 1a000007 bne b18c <rtems_filesystem_iterate+0xa8>
!rtems_chain_is_tail( &filesystem_chain, node ) && !stop;
node = rtems_chain_next( node )
) {
const filesystem_node *fsn = (filesystem_node *) node;
stop = (*routine)( &fsn->entry, routine_arg );
b16c: e2880008 add r0, r8, #8
b170: e1a01005 mov r1, r5
b174: e1a0e00f mov lr, pc
b178: e12fff14 bx r4
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
b17c: e5988000 ldr r8, [r8]
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
b180: e1580006 cmp r8, r6
!rtems_chain_is_tail( &filesystem_chain, node ) && !stop;
node = rtems_chain_next( node )
) {
const filesystem_node *fsn = (filesystem_node *) node;
stop = (*routine)( &fsn->entry, routine_arg );
b184: e1a0a000 mov sl, r0
++table_entry;
}
if ( !stop ) {
rtems_libio_lock();
for (
b188: 1afffff5 bne b164 <rtems_filesystem_iterate+0x80>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
b18c: e5970000 ldr r0, [r7]
b190: ebffe9cd bl 58cc <rtems_semaphore_release>
}
rtems_libio_unlock();
}
return stop;
}
b194: e1a0000a mov r0, sl
b198: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
00002650 <rtems_filesystem_mount_iterate>:
bool rtems_filesystem_mount_iterate(
rtems_per_filesystem_mount_routine routine,
void *routine_arg
)
{
2650: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
2654: e59f7064 ldr r7, [pc, #100] ; 26c0 <rtems_filesystem_mount_iterate+0x70>
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
2658: e59f4064 ldr r4, [pc, #100] ; 26c4 <rtems_filesystem_mount_iterate+0x74>
265c: e1a06001 mov r6, r1
2660: e3a01000 mov r1, #0
2664: e1a05000 mov r5, r0
2668: e1a02001 mov r2, r1
266c: e5970000 ldr r0, [r7]
2670: eb000c4d bl 57ac <rtems_semaphore_obtain>
2674: e4948004 ldr r8, [r4], #4
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
2678: e1580004 cmp r8, r4
267c: 03a0a000 moveq sl, #0
2680: 1a000002 bne 2690 <rtems_filesystem_mount_iterate+0x40>
2684: ea000009 b 26b0 <rtems_filesystem_mount_iterate+0x60> <== NOT EXECUTED
2688: e3500000 cmp r0, #0
268c: 1a000007 bne 26b0 <rtems_filesystem_mount_iterate+0x60>
node = rtems_chain_next( node )
) {
const rtems_filesystem_mount_table_entry_t *mt_entry =
(rtems_filesystem_mount_table_entry_t *) node;
stop = (*routine)( mt_entry, routine_arg );
2690: e1a00008 mov r0, r8
2694: e1a01006 mov r1, r6
2698: e1a0e00f mov lr, pc
269c: e12fff15 bx r5
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
26a0: e5988000 ldr r8, [r8]
{
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
26a4: e1580004 cmp r8, r4
node = rtems_chain_next( node )
) {
const rtems_filesystem_mount_table_entry_t *mt_entry =
(rtems_filesystem_mount_table_entry_t *) node;
stop = (*routine)( mt_entry, routine_arg );
26a8: e1a0a000 mov sl, r0
{
rtems_chain_node *node = NULL;
bool stop = false;
rtems_libio_lock();
for (
26ac: 1afffff5 bne 2688 <rtems_filesystem_mount_iterate+0x38>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
26b0: e5970000 ldr r0, [r7]
26b4: eb000c84 bl 58cc <rtems_semaphore_release>
stop = (*routine)( mt_entry, routine_arg );
}
rtems_libio_unlock();
return stop;
}
26b8: e1a0000a mov r0, sl
26bc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
00001e98 <rtems_filesystem_prefix_separators>:
int rtems_filesystem_prefix_separators(
const char *pathname,
int pathnamelen
)
{
1e98: e92d4070 push {r4, r5, r6, lr}
1e9c: e1a04000 mov r4, r0
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
1ea0: e5d00000 ldrb r0, [r0]
1ea4: e3510000 cmp r1, #0
1ea8: 13500000 cmpne r0, #0
1eac: 03a05000 moveq r5, #0
1eb0: 13a05001 movne r5, #1
1eb4: e1a06001 mov r6, r1
1eb8: 13a05000 movne r5, #0
1ebc: 1a000005 bne 1ed8 <rtems_filesystem_prefix_separators+0x40>
1ec0: ea000007 b 1ee4 <rtems_filesystem_prefix_separators+0x4c> <== NOT EXECUTED
{
pathname++;
pathnamelen--;
stripped++;
1ec4: e2855001 add r5, r5, #1
{
/*
* Eat any separators at start of the path.
*/
int stripped = 0;
while ( *pathname && pathnamelen && rtems_filesystem_is_separator( *pathname ) )
1ec8: e7d40005 ldrb r0, [r4, r5]
1ecc: e1560005 cmp r6, r5
1ed0: 13500000 cmpne r0, #0
1ed4: 0a000002 beq 1ee4 <rtems_filesystem_prefix_separators+0x4c>
1ed8: eb00044f bl 301c <rtems_filesystem_is_separator>
1edc: e3500000 cmp r0, #0
1ee0: 1afffff7 bne 1ec4 <rtems_filesystem_prefix_separators+0x2c>
pathname++;
pathnamelen--;
stripped++;
}
return stripped;
}
1ee4: e1a00005 mov r0, r5
1ee8: e8bd8070 pop {r4, r5, r6, pc}
0000b1dc <rtems_filesystem_register>:
int
rtems_filesystem_register(
const char *type,
rtems_filesystem_fsmount_me_t mount_h
)
{
b1dc: e92d41f0 push {r4, r5, r6, r7, r8, lr}
b1e0: e1a08001 mov r8, r1
b1e4: e1a05000 mov r5, r0
size_t fsn_size = sizeof( filesystem_node ) + strlen(type) + 1;
b1e8: eb001039 bl f2d4 <strlen>
filesystem_node *fsn = malloc( fsn_size );
b1ec: e2800011 add r0, r0, #17
b1f0: ebffdc85 bl 240c <malloc>
char *type_storage = (char *) fsn + sizeof( filesystem_node );
if ( fsn == NULL )
b1f4: e2504000 subs r4, r0, #0
b1f8: 0a00001e beq b278 <rtems_filesystem_register+0x9c>
rtems_filesystem_fsmount_me_t mount_h
)
{
size_t fsn_size = sizeof( filesystem_node ) + strlen(type) + 1;
filesystem_node *fsn = malloc( fsn_size );
char *type_storage = (char *) fsn + sizeof( filesystem_node );
b1fc: e2847010 add r7, r4, #16
if ( fsn == NULL )
rtems_set_errno_and_return_minus_one( ENOMEM );
strcpy(type_storage, type);
b200: e1a01005 mov r1, r5
b204: e1a00007 mov r0, r7
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
b208: e59f607c ldr r6, [pc, #124] ; b28c <rtems_filesystem_register+0xb0>
b20c: eb000fe0 bl f194 <strcpy>
b210: e3a01000 mov r1, #0
b214: e1a02001 mov r2, r1
fsn->entry.type = type_storage;
b218: e5847008 str r7, [r4, #8]
fsn->entry.mount_h = mount_h;
b21c: e584800c str r8, [r4, #12]
b220: e5960000 ldr r0, [r6]
b224: ebffe960 bl 57ac <rtems_semaphore_obtain>
rtems_libio_lock();
if ( rtems_filesystem_get_mount_handler( type ) == NULL ) {
b228: e1a00005 mov r0, r5
b22c: ebffffdd bl b1a8 <rtems_filesystem_get_mount_handler>
b230: e2505000 subs r5, r0, #0
b234: 1a000006 bne b254 <rtems_filesystem_register+0x78>
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
b238: e1a01004 mov r1, r4
b23c: e59f004c ldr r0, [pc, #76] ; b290 <rtems_filesystem_register+0xb4>
b240: ebffeb9d bl 60bc <_Chain_Append>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
b244: e5960000 ldr r0, [r6]
b248: ebffe99f bl 58cc <rtems_semaphore_release>
b24c: e1a00005 mov r0, r5
rtems_set_errno_and_return_minus_one( EINVAL );
}
rtems_libio_unlock();
return 0;
b250: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
b254: e5960000 ldr r0, [r6] <== NOT EXECUTED
b258: ebffe99b bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
rtems_libio_lock();
if ( rtems_filesystem_get_mount_handler( type ) == NULL ) {
rtems_chain_append( &filesystem_chain, &fsn->node );
} else {
rtems_libio_unlock();
free( fsn );
b25c: e1a00004 mov r0, r4 <== NOT EXECUTED
b260: ebffdb90 bl 20a8 <free> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
b264: eb000c15 bl e2c0 <__errno> <== NOT EXECUTED
b268: e3a03016 mov r3, #22 <== NOT EXECUTED
b26c: e5803000 str r3, [r0] <== NOT EXECUTED
b270: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_libio_unlock();
return 0;
}
b274: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
size_t fsn_size = sizeof( filesystem_node ) + strlen(type) + 1;
filesystem_node *fsn = malloc( fsn_size );
char *type_storage = (char *) fsn + sizeof( filesystem_node );
if ( fsn == NULL )
rtems_set_errno_and_return_minus_one( ENOMEM );
b278: eb000c10 bl e2c0 <__errno> <== NOT EXECUTED
b27c: e3a0300c mov r3, #12 <== NOT EXECUTED
b280: e5803000 str r3, [r0] <== NOT EXECUTED
b284: e3e00000 mvn r0, #0 <== NOT EXECUTED
b288: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
0000b038 <rtems_filesystem_unregister>:
int
rtems_filesystem_unregister(
const char *type
)
{
b038: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
rtems_chain_node *node = NULL;
if ( type == NULL ) {
b03c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
b040: 0a000020 beq b0c8 <rtems_filesystem_unregister+0x90> <== NOT EXECUTED
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
b044: e59f6090 ldr r6, [pc, #144] ; b0dc <rtems_filesystem_unregister+0xa4><== NOT EXECUTED
b048: e3a01000 mov r1, #0 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
b04c: e59f408c ldr r4, [pc, #140] ; b0e0 <rtems_filesystem_unregister+0xa8><== NOT EXECUTED
b050: e5960000 ldr r0, [r6] <== NOT EXECUTED
b054: e1a02001 mov r2, r1 <== NOT EXECUTED
b058: ebffe9d3 bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
b05c: e4947004 ldr r7, [r4], #4 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EINVAL );
}
rtems_libio_lock();
for (
b060: e1570004 cmp r7, r4 <== NOT EXECUTED
b064: 1a000003 bne b078 <rtems_filesystem_unregister+0x40> <== NOT EXECUTED
b068: ea00000f b b0ac <rtems_filesystem_unregister+0x74> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
b06c: e5977000 ldr r7, [r7] <== NOT EXECUTED
b070: e1570004 cmp r7, r4 <== NOT EXECUTED
b074: 0a00000c beq b0ac <rtems_filesystem_unregister+0x74> <== NOT EXECUTED
!rtems_chain_is_tail( &filesystem_chain, node );
node = rtems_chain_next( node )
) {
filesystem_node *fsn = (filesystem_node *) node;
if ( strcmp( fsn->entry.type, type ) == 0 ) {
b078: e5970008 ldr r0, [r7, #8] <== NOT EXECUTED
b07c: e1a01005 mov r1, r5 <== NOT EXECUTED
b080: eb000fb7 bl ef64 <strcmp> <== NOT EXECUTED
b084: e2508000 subs r8, r0, #0 <== NOT EXECUTED
b088: 1afffff7 bne b06c <rtems_filesystem_unregister+0x34> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
b08c: e1a00007 mov r0, r7 <== NOT EXECUTED
b090: ebffec14 bl 60e8 <_Chain_Extract> <== NOT EXECUTED
rtems_chain_extract( node );
free( fsn );
b094: e1a00007 mov r0, r7 <== NOT EXECUTED
b098: ebffdc02 bl 20a8 <free> <== NOT EXECUTED
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
b09c: e5960000 ldr r0, [r6] <== NOT EXECUTED
b0a0: ebffea09 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
b0a4: e1a00008 mov r0, r8 <== NOT EXECUTED
rtems_libio_unlock();
return 0;
b0a8: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
b0ac: e5960000 ldr r0, [r6] <== NOT EXECUTED
b0b0: ebffea05 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
}
}
rtems_libio_unlock();
rtems_set_errno_and_return_minus_one( ENOENT );
b0b4: eb000c81 bl e2c0 <__errno> <== NOT EXECUTED
b0b8: e3a03002 mov r3, #2 <== NOT EXECUTED
b0bc: e5803000 str r3, [r0] <== NOT EXECUTED
b0c0: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
b0c4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
)
{
rtems_chain_node *node = NULL;
if ( type == NULL ) {
rtems_set_errno_and_return_minus_one( EINVAL );
b0c8: eb000c7c bl e2c0 <__errno> <== NOT EXECUTED
b0cc: e3a03016 mov r3, #22 <== NOT EXECUTED
b0d0: e5803000 str r3, [r0] <== NOT EXECUTED
b0d4: e3e00000 mvn r0, #0 <== NOT EXECUTED
b0d8: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00006de8 <rtems_fsmount>:
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
6de8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6dec: e2517000 subs r7, r1, #0 <== NOT EXECUTED
6df0: 01a06007 moveq r6, r7 <== NOT EXECUTED
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0, if success, -1 and errno if failed |
\*=========================================================================*/
{
6df4: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
6df8: e1a0a002 mov sl, r2 <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6dfc: 01a05006 moveq r5, r6 <== NOT EXECUTED
6e00: 0a00000e beq 6e40 <rtems_fsmount+0x58> <== NOT EXECUTED
rc = tmp_rc;
}
}
else {
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_OK)) {
fprintf(stdout,"fsmount: mounting of \"%s\" to"
6e04: e59f8138 ldr r8, [pc, #312] ; 6f44 <rtems_fsmount+0x15c> <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6e08: e2804014 add r4, r0, #20 <== NOT EXECUTED
6e0c: e3a06000 mov r6, #0 <== NOT EXECUTED
tmp_rc = 0;
/*
* create mount point
*/
if (tmp_rc == 0) {
tmp_rc = rtems_mkdir(fstab_ptr->target, S_IRWXU | S_IRWXG | S_IRWXO);
6e10: e3a01f7f mov r1, #508 ; 0x1fc <== NOT EXECUTED
6e14: e2811003 add r1, r1, #3 <== NOT EXECUTED
6e18: e5140010 ldr r0, [r4, #-16] <== NOT EXECUTED
6e1c: eb00099b bl 9490 <rtems_mkdir> <== NOT EXECUTED
if (tmp_rc != 0) {
6e20: e2505000 subs r5, r0, #0 <== NOT EXECUTED
6e24: 0a00000a beq 6e54 <rtems_fsmount+0x6c> <== NOT EXECUTED
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNTPNT_CRTERR)) {
6e28: e15430b4 ldrh r3, [r4, #-4] <== NOT EXECUTED
6e2c: e3130002 tst r3, #2 <== NOT EXECUTED
6e30: 1a000019 bne 6e9c <rtems_fsmount+0xb4> <== NOT EXECUTED
fprintf(stdout,"fsmount: creation of mount point \"%s\" failed: %s\n",
fstab_ptr->target,
strerror(errno));
}
if (0 != (fstab_ptr->abort_reasons & FSMOUNT_MNTPNT_CRTERR)) {
6e34: e15430b2 ldrh r3, [r4, #-2] <== NOT EXECUTED
6e38: e3130002 tst r3, #2 <== NOT EXECUTED
6e3c: 0a000010 beq 6e84 <rtems_fsmount+0x9c> <== NOT EXECUTED
if (!terminate) {
fstab_ptr++;
fstab_idx++;
}
}
if (fail_idx != NULL) {
6e40: e35a0000 cmp sl, #0 <== NOT EXECUTED
*fail_idx = fstab_idx;
6e44: 158a6000 strne r6, [sl] <== NOT EXECUTED
}
return rc;
}
6e48: e1a00005 mov r0, r5 <== NOT EXECUTED
6e4c: e28dd008 add sp, sp, #8 <== NOT EXECUTED
6e50: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
/*
* mount device to given mount point
*/
if (tmp_rc == 0) {
tmp_rc = mount(fstab_ptr->source,
6e54: e2440014 sub r0, r4, #20 <== NOT EXECUTED
6e58: e890000f ldm r0, {r0, r1, r2, r3} <== NOT EXECUTED
6e5c: e58d5000 str r5, [sp] <== NOT EXECUTED
6e60: eb000677 bl 8844 <mount> <== NOT EXECUTED
fstab_ptr->target,
fstab_ptr->type,
fstab_ptr->options,
NULL);
if (tmp_rc != 0) {
6e64: e2505000 subs r5, r0, #0 <== NOT EXECUTED
6e68: 0a000017 beq 6ecc <rtems_fsmount+0xe4> <== NOT EXECUTED
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_FAILED)) {
6e6c: e15430b4 ldrh r3, [r4, #-4] <== NOT EXECUTED
6e70: e3130004 tst r3, #4 <== NOT EXECUTED
6e74: 1a00001c bne 6eec <rtems_fsmount+0x104> <== NOT EXECUTED
" \"%s\" failed: %s\n",
fstab_ptr->source,
fstab_ptr->target,
strerror(errno));
}
if (0 != (fstab_ptr->abort_reasons & FSMOUNT_MNT_FAILED)) {
6e78: e15430b2 ldrh r3, [r4, #-2] <== NOT EXECUTED
6e7c: e3130004 tst r3, #4 <== NOT EXECUTED
6e80: 1affffee bne 6e40 <rtems_fsmount+0x58> <== NOT EXECUTED
/*
* proceed to next entry
*/
if (!terminate) {
fstab_ptr++;
fstab_idx++;
6e84: e2866001 add r6, r6, #1 <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6e88: e1570006 cmp r7, r6 <== NOT EXECUTED
/*
* proceed to next entry
*/
if (!terminate) {
fstab_ptr++;
fstab_idx++;
6e8c: e2844014 add r4, r4, #20 <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6e90: 8affffde bhi 6e10 <rtems_fsmount+0x28> <== NOT EXECUTED
6e94: e3a05000 mov r5, #0 <== NOT EXECUTED
6e98: eaffffe8 b 6e40 <rtems_fsmount+0x58> <== NOT EXECUTED
*/
if (tmp_rc == 0) {
tmp_rc = rtems_mkdir(fstab_ptr->target, S_IRWXU | S_IRWXG | S_IRWXO);
if (tmp_rc != 0) {
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNTPNT_CRTERR)) {
fprintf(stdout,"fsmount: creation of mount point \"%s\" failed: %s\n",
6e9c: e5983000 ldr r3, [r8] <== NOT EXECUTED
6ea0: e5149010 ldr r9, [r4, #-16] <== NOT EXECUTED
6ea4: e593b008 ldr fp, [r3, #8] <== NOT EXECUTED
6ea8: eb00f050 bl 42ff0 <__errno> <== NOT EXECUTED
6eac: e5900000 ldr r0, [r0] <== NOT EXECUTED
6eb0: eb0109bf bl 495b4 <strerror> <== NOT EXECUTED
6eb4: e1a02009 mov r2, r9 <== NOT EXECUTED
6eb8: e1a03000 mov r3, r0 <== NOT EXECUTED
6ebc: e59f1084 ldr r1, [pc, #132] ; 6f48 <rtems_fsmount+0x160> <== NOT EXECUTED
6ec0: e1a0000b mov r0, fp <== NOT EXECUTED
6ec4: eb00f2c0 bl 439cc <fprintf> <== NOT EXECUTED
6ec8: eaffffd9 b 6e34 <rtems_fsmount+0x4c> <== NOT EXECUTED
terminate = true;
rc = tmp_rc;
}
}
else {
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_OK)) {
6ecc: e15430b4 ldrh r3, [r4, #-4] <== NOT EXECUTED
6ed0: e3130001 tst r3, #1 <== NOT EXECUTED
6ed4: 1a000013 bne 6f28 <rtems_fsmount+0x140> <== NOT EXECUTED
fprintf(stdout,"fsmount: mounting of \"%s\" to"
" \"%s\" succeeded\n",
fstab_ptr->source,
fstab_ptr->target);
}
if (0 != (fstab_ptr->abort_reasons & FSMOUNT_MNT_OK)) {
6ed8: e15430b2 ldrh r3, [r4, #-2] <== NOT EXECUTED
6edc: e3130001 tst r3, #1 <== NOT EXECUTED
6ee0: 0affffe7 beq 6e84 <rtems_fsmount+0x9c> <== NOT EXECUTED
bool terminate = false;
/*
* scan through all fstab entries;
*/
while (!terminate &&
6ee4: e3a05000 mov r5, #0 <== NOT EXECUTED
6ee8: eaffffd4 b 6e40 <rtems_fsmount+0x58> <== NOT EXECUTED
fstab_ptr->type,
fstab_ptr->options,
NULL);
if (tmp_rc != 0) {
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_FAILED)) {
fprintf(stdout,"fsmount: mounting of \"%s\" to"
6eec: e5983000 ldr r3, [r8] <== NOT EXECUTED
6ef0: e5142014 ldr r2, [r4, #-20] <== NOT EXECUTED
6ef4: e593b008 ldr fp, [r3, #8] <== NOT EXECUTED
6ef8: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
6efc: e5149010 ldr r9, [r4, #-16] <== NOT EXECUTED
6f00: eb00f03a bl 42ff0 <__errno> <== NOT EXECUTED
6f04: e5900000 ldr r0, [r0] <== NOT EXECUTED
6f08: eb0109a9 bl 495b4 <strerror> <== NOT EXECUTED
6f0c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
6f10: e58d0000 str r0, [sp] <== NOT EXECUTED
6f14: e1a03009 mov r3, r9 <== NOT EXECUTED
6f18: e1a0000b mov r0, fp <== NOT EXECUTED
6f1c: e59f1028 ldr r1, [pc, #40] ; 6f4c <rtems_fsmount+0x164> <== NOT EXECUTED
6f20: eb00f2a9 bl 439cc <fprintf> <== NOT EXECUTED
6f24: eaffffd3 b 6e78 <rtems_fsmount+0x90> <== NOT EXECUTED
rc = tmp_rc;
}
}
else {
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_OK)) {
fprintf(stdout,"fsmount: mounting of \"%s\" to"
6f28: e5983000 ldr r3, [r8] <== NOT EXECUTED
6f2c: e59f101c ldr r1, [pc, #28] ; 6f50 <rtems_fsmount+0x168> <== NOT EXECUTED
6f30: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
6f34: e2442014 sub r2, r4, #20 <== NOT EXECUTED
6f38: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
6f3c: eb00f2a2 bl 439cc <fprintf> <== NOT EXECUTED
6f40: eaffffe4 b 6ed8 <rtems_fsmount+0xf0> <== NOT EXECUTED
00001bdc <rtems_io_lookup_name>:
rtems_status_code rtems_io_lookup_name(
const char *name,
rtems_driver_name_t *device_info
)
{
1bdc: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
1be0: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
1be4: e1a06001 mov r6, r1 <== NOT EXECUTED
1be8: e1a05000 mov r5, r0 <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
rtems_filesystem_location_info_t loc;
int result;
rtems_filesystem_node_types_t node_type;
result = rtems_filesystem_evaluate_path( name, strlen( name ), 0x00, &loc, true );
1bec: eb0035b8 bl f2d4 <strlen> <== NOT EXECUTED
1bf0: e28d4004 add r4, sp, #4 <== NOT EXECUTED
1bf4: e1a01000 mov r1, r0 <== NOT EXECUTED
1bf8: e3a02000 mov r2, #0 <== NOT EXECUTED
1bfc: e1a03004 mov r3, r4 <== NOT EXECUTED
1c00: e3a0c001 mov ip, #1 <== NOT EXECUTED
1c04: e1a00005 mov r0, r5 <== NOT EXECUTED
1c08: e58dc000 str ip, [sp] <== NOT EXECUTED
1c0c: eb000103 bl 2020 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
the_jnode = loc.node_access;
if ( !loc.ops->node_type_h ) {
1c10: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
1c14: e5923010 ldr r3, [r2, #16] <== NOT EXECUTED
1c18: e3530000 cmp r3, #0 <== NOT EXECUTED
IMFS_jnode_t *the_jnode;
rtems_filesystem_location_info_t loc;
int result;
rtems_filesystem_node_types_t node_type;
result = rtems_filesystem_evaluate_path( name, strlen( name ), 0x00, &loc, true );
1c1c: e1a07000 mov r7, r0 <== NOT EXECUTED
the_jnode = loc.node_access;
1c20: e59d8004 ldr r8, [sp, #4] <== NOT EXECUTED
if ( !loc.ops->node_type_h ) {
1c24: 0a000013 beq 1c78 <rtems_io_lookup_name+0x9c> <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
node_type = (*loc.ops->node_type_h)( &loc );
1c28: e1a00004 mov r0, r4 <== NOT EXECUTED
1c2c: e1a0e00f mov lr, pc <== NOT EXECUTED
1c30: e12fff13 bx r3 <== NOT EXECUTED
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
1c34: e3570000 cmp r7, #0 <== NOT EXECUTED
1c38: 03500002 cmpeq r0, #2 <== NOT EXECUTED
1c3c: 03a07000 moveq r7, #0 <== NOT EXECUTED
1c40: 13a07001 movne r7, #1 <== NOT EXECUTED
1c44: 0a000015 beq 1ca0 <rtems_io_lookup_name+0xc4> <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
1c48: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
1c4c: e3530000 cmp r3, #0 <== NOT EXECUTED
1c50: 0a000025 beq 1cec <rtems_io_lookup_name+0x110> <== NOT EXECUTED
1c54: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
1c58: e3530000 cmp r3, #0 <== NOT EXECUTED
1c5c: 0a000022 beq 1cec <rtems_io_lookup_name+0x110> <== NOT EXECUTED
1c60: e1a00004 mov r0, r4 <== NOT EXECUTED
1c64: e1a0e00f mov lr, pc <== NOT EXECUTED
1c68: e12fff13 bx r3 <== NOT EXECUTED
1c6c: e3a0000d mov r0, #13 <== NOT EXECUTED
device_info->minor = the_jnode->info.device.minor;
rtems_filesystem_freenode( &loc );
return RTEMS_SUCCESSFUL;
}
1c70: e28dd018 add sp, sp, #24 <== NOT EXECUTED
1c74: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
result = rtems_filesystem_evaluate_path( name, strlen( name ), 0x00, &loc, true );
the_jnode = loc.node_access;
if ( !loc.ops->node_type_h ) {
rtems_filesystem_freenode( &loc );
1c78: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
1c7c: e3530000 cmp r3, #0 <== NOT EXECUTED
1c80: 11a00004 movne r0, r4 <== NOT EXECUTED
1c84: 11a0e00f movne lr, pc <== NOT EXECUTED
1c88: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
1c8c: eb00318b bl e2c0 <__errno> <== NOT EXECUTED
1c90: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
1c94: e5803000 str r3, [r0] <== NOT EXECUTED
1c98: e3e00000 mvn r0, #0 <== NOT EXECUTED
1c9c: eafffff3 b 1c70 <rtems_io_lookup_name+0x94> <== NOT EXECUTED
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
rtems_filesystem_freenode( &loc );
return RTEMS_UNSATISFIED;
}
device_info->device_name = (char *) name;
1ca0: e5865000 str r5, [r6] <== NOT EXECUTED
device_info->device_name_length = strlen( name );
1ca4: e1a00005 mov r0, r5 <== NOT EXECUTED
1ca8: eb003589 bl f2d4 <strlen> <== NOT EXECUTED
1cac: e5860004 str r0, [r6, #4] <== NOT EXECUTED
device_info->major = the_jnode->info.device.major;
1cb0: e5983050 ldr r3, [r8, #80] ; 0x50 <== NOT EXECUTED
1cb4: e5863008 str r3, [r6, #8] <== NOT EXECUTED
device_info->minor = the_jnode->info.device.minor;
rtems_filesystem_freenode( &loc );
1cb8: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
}
device_info->device_name = (char *) name;
device_info->device_name_length = strlen( name );
device_info->major = the_jnode->info.device.major;
device_info->minor = the_jnode->info.device.minor;
1cbc: e5982054 ldr r2, [r8, #84] ; 0x54 <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
1cc0: e3530000 cmp r3, #0 <== NOT EXECUTED
}
device_info->device_name = (char *) name;
device_info->device_name_length = strlen( name );
device_info->major = the_jnode->info.device.major;
device_info->minor = the_jnode->info.device.minor;
1cc4: e586200c str r2, [r6, #12] <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
1cc8: 0a000009 beq 1cf4 <rtems_io_lookup_name+0x118> <== NOT EXECUTED
1ccc: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
1cd0: e3530000 cmp r3, #0 <== NOT EXECUTED
1cd4: 0a000006 beq 1cf4 <rtems_io_lookup_name+0x118> <== NOT EXECUTED
1cd8: e1a00004 mov r0, r4 <== NOT EXECUTED
1cdc: e1a0e00f mov lr, pc <== NOT EXECUTED
1ce0: e12fff13 bx r3 <== NOT EXECUTED
1ce4: e1a00007 mov r0, r7 <== NOT EXECUTED
1ce8: eaffffe0 b 1c70 <rtems_io_lookup_name+0x94> <== NOT EXECUTED
1cec: e3a0000d mov r0, #13 <== NOT EXECUTED
1cf0: eaffffde b 1c70 <rtems_io_lookup_name+0x94> <== NOT EXECUTED
1cf4: e3a00000 mov r0, #0 <== NOT EXECUTED
1cf8: eaffffdc b 1c70 <rtems_io_lookup_name+0x94> <== NOT EXECUTED
000071f0 <rtems_io_register_driver>:
rtems_device_major_number *registered_major
)
{
rtems_device_major_number major_limit = _IO_Number_of_drivers;
if ( rtems_interrupt_is_in_progress() )
71f0: e59f3148 ldr r3, [pc, #328] ; 7340 <rtems_io_register_driver+0x150>
71f4: e593c000 ldr ip, [r3]
rtems_device_major_number major,
const rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
)
{
rtems_device_major_number major_limit = _IO_Number_of_drivers;
71f8: e59f3144 ldr r3, [pc, #324] ; 7344 <rtems_io_register_driver+0x154>
if ( rtems_interrupt_is_in_progress() )
71fc: e35c0000 cmp ip, #0
rtems_status_code rtems_io_register_driver(
rtems_device_major_number major,
const rtems_driver_address_table *driver_table,
rtems_device_major_number *registered_major
)
{
7200: e92d4010 push {r4, lr}
7204: e1a04000 mov r4, r0
rtems_device_major_number major_limit = _IO_Number_of_drivers;
7208: e5930000 ldr r0, [r3]
if ( rtems_interrupt_is_in_progress() )
720c: 13a00012 movne r0, #18
7210: 18bd8010 popne {r4, pc}
return RTEMS_CALLED_FROM_ISR;
if ( registered_major == NULL )
7214: e3520000 cmp r2, #0
7218: 0a00003d beq 7314 <rtems_io_register_driver+0x124>
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
if ( driver_table == NULL )
721c: e3510000 cmp r1, #0
if ( registered_major == NULL )
return RTEMS_INVALID_ADDRESS;
/* Set it to an invalid value */
*registered_major = major_limit;
7220: e5820000 str r0, [r2]
if ( driver_table == NULL )
7224: 0a00003a beq 7314 <rtems_io_register_driver+0x124>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
7228: e591c000 ldr ip, [r1]
722c: e35c0000 cmp ip, #0
7230: 0a000034 beq 7308 <rtems_io_register_driver+0x118>
return RTEMS_INVALID_ADDRESS;
if ( rtems_io_is_empty_table( driver_table ) )
return RTEMS_INVALID_ADDRESS;
if ( major >= major_limit )
7234: e1500004 cmp r0, r4
7238: 93a0000a movls r0, #10
723c: 98bd8010 popls {r4, pc}
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
7240: e59f0100 ldr r0, [pc, #256] ; 7348 <rtems_io_register_driver+0x158>
7244: e590c000 ldr ip, [r0]
7248: e28cc001 add ip, ip, #1
724c: e580c000 str ip, [r0]
return RTEMS_INVALID_NUMBER;
_Thread_Disable_dispatch();
if ( major == 0 ) {
7250: e3540000 cmp r4, #0
7254: 1a000020 bne 72dc <rtems_io_register_driver+0xec>
static rtems_status_code rtems_io_obtain_major_number(
rtems_device_major_number *major
)
{
rtems_device_major_number n = _IO_Number_of_drivers;
7258: e593e000 ldr lr, [r3]
rtems_device_major_number m = 0;
/* major is error checked by caller */
for ( m = 0; m < n; ++m ) {
725c: e35e0000 cmp lr, #0
7260: 0a00002d beq 731c <rtems_io_register_driver+0x12c>
7264: e59f30e0 ldr r3, [pc, #224] ; 734c <rtems_io_register_driver+0x15c>
7268: e593c000 ldr ip, [r3]
726c: e1a0300c mov r3, ip
7270: ea000003 b 7284 <rtems_io_register_driver+0x94>
7274: e2844001 add r4, r4, #1
7278: e15e0004 cmp lr, r4
727c: e2833018 add r3, r3, #24
7280: 9a000005 bls 729c <rtems_io_register_driver+0xac>
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
7284: e5930000 ldr r0, [r3]
7288: e3500000 cmp r0, #0
728c: 1afffff8 bne 7274 <rtems_io_register_driver+0x84>
7290: e5930004 ldr r0, [r3, #4]
7294: e3500000 cmp r0, #0
7298: 1afffff5 bne 7274 <rtems_io_register_driver+0x84>
}
/* Assigns invalid value in case of failure */
*major = m;
if ( m != n )
729c: e15e0004 cmp lr, r4
72a0: 10843084 addne r3, r4, r4, lsl #1
if ( rtems_io_is_empty_table( table ) )
break;
}
/* Assigns invalid value in case of failure */
*major = m;
72a4: e5824000 str r4, [r2]
if ( m != n )
72a8: 108cc183 addne ip, ip, r3, lsl #3
72ac: 0a00001b beq 7320 <rtems_io_register_driver+0x130>
}
*registered_major = major;
}
_IO_Driver_address_table [major] = *driver_table;
72b0: e1a0e001 mov lr, r1
72b4: e8be000f ldm lr!, {r0, r1, r2, r3}
72b8: e8ac000f stmia ip!, {r0, r1, r2, r3}
72bc: e89e0003 ldm lr, {r0, r1}
72c0: e88c0003 stm ip, {r0, r1}
_Thread_Enable_dispatch();
72c4: eb000680 bl 8ccc <_Thread_Enable_dispatch>
return rtems_io_initialize( major, 0, NULL );
72c8: e3a01000 mov r1, #0
72cc: e1a00004 mov r0, r4
72d0: e1a02001 mov r2, r1
}
72d4: e8bd4010 pop {r4, lr}
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
72d8: ea0021bb b f9cc <rtems_io_initialize>
_Thread_Enable_dispatch();
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
72dc: e59f3068 ldr r3, [pc, #104] ; 734c <rtems_io_register_driver+0x15c>
72e0: e084c084 add ip, r4, r4, lsl #1
72e4: e5933000 ldr r3, [r3]
72e8: e1a0c18c lsl ip, ip, #3
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
72ec: e793000c ldr r0, [r3, ip]
72f0: e3500000 cmp r0, #0
_Thread_Enable_dispatch();
return sc;
}
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
72f4: e083c00c add ip, r3, ip
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
72f8: 0a00000b beq 732c <rtems_io_register_driver+0x13c>
major = *registered_major;
} else {
rtems_driver_address_table *const table = _IO_Driver_address_table + major;
if ( !rtems_io_is_empty_table( table ) ) {
_Thread_Enable_dispatch();
72fc: eb000672 bl 8ccc <_Thread_Enable_dispatch>
7300: e3a0000c mov r0, #12
return RTEMS_RESOURCE_IN_USE;
7304: e8bd8010 pop {r4, pc}
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
7308: e591c004 ldr ip, [r1, #4]
730c: e35c0000 cmp ip, #0
7310: 1affffc7 bne 7234 <rtems_io_register_driver+0x44>
_IO_Driver_address_table [major] = *driver_table;
_Thread_Enable_dispatch();
return rtems_io_initialize( major, 0, NULL );
7314: e3a00009 mov r0, #9
}
7318: e8bd8010 pop {r4, pc}
if ( rtems_io_is_empty_table( table ) )
break;
}
/* Assigns invalid value in case of failure */
*major = m;
731c: e5824000 str r4, [r2] <== NOT EXECUTED
if ( major == 0 ) {
rtems_status_code sc = rtems_io_obtain_major_number( registered_major );
if ( sc != RTEMS_SUCCESSFUL ) {
_Thread_Enable_dispatch();
7320: eb000669 bl 8ccc <_Thread_Enable_dispatch>
7324: e3a00005 mov r0, #5
return sc;
7328: e8bd8010 pop {r4, pc}
static inline bool rtems_io_is_empty_table(
const rtems_driver_address_table *table
)
{
return table->initialization_entry == NULL && table->open_entry == NULL;
732c: e59c3004 ldr r3, [ip, #4]
7330: e3530000 cmp r3, #0
7334: 1afffff0 bne 72fc <rtems_io_register_driver+0x10c>
if ( !rtems_io_is_empty_table( table ) ) {
_Thread_Enable_dispatch();
return RTEMS_RESOURCE_IN_USE;
}
*registered_major = major;
7338: e5824000 str r4, [r2]
733c: eaffffdb b 72b0 <rtems_io_register_driver+0xc0>
000021c4 <rtems_libio_init>:
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
{
21c4: e92d4010 push {r4, lr}
rtems_status_code rc;
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
21c8: e59f40b4 ldr r4, [pc, #180] ; 2284 <rtems_libio_init+0xc0>
21cc: e5940000 ldr r0, [r4]
21d0: e3500000 cmp r0, #0
*
* Called by BSP startup code to initialize the libio subsystem.
*/
void rtems_libio_init( void )
{
21d4: e24dd004 sub sp, sp, #4
rtems_status_code rc;
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
21d8: 0a000016 beq 2238 <rtems_libio_init+0x74>
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
21dc: e3a01040 mov r1, #64 ; 0x40
21e0: ebffff1a bl 1e50 <calloc>
21e4: e59f309c ldr r3, [pc, #156] ; 2288 <rtems_libio_init+0xc4>
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
21e8: e3500000 cmp r0, #0
uint32_t i;
rtems_libio_t *iop;
if (rtems_libio_number_iops > 0)
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
21ec: e5830000 str r0, [r3]
21f0: e1a02000 mov r2, r0
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
21f4: 0a000020 beq 227c <rtems_libio_init+0xb8>
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
21f8: e5941000 ldr r1, [r4]
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
21fc: e59f3088 ldr r3, [pc, #136] ; 228c <rtems_libio_init+0xc8>
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
2200: e3510001 cmp r1, #1
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
2204: e5830000 str r0, [r3]
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
2208: 9a000008 bls 2230 <rtems_libio_init+0x6c>
220c: e2803040 add r3, r0, #64 ; 0x40
2210: e3a02001 mov r2, #1
iop->data1 = iop + 1;
2214: e2822001 add r2, r2, #1
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
2218: e1520001 cmp r2, r1
iop->data1 = iop + 1;
221c: e503300c str r3, [r3, #-12]
2220: e2833040 add r3, r3, #64 ; 0x40
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
iop = rtems_libio_iop_freelist = rtems_libio_iops;
for (i = 0 ; (i + 1) < rtems_libio_number_iops ; i++, iop++)
2224: 1afffffa bne 2214 <rtems_libio_init+0x50>
2228: e2422001 sub r2, r2, #1
222c: e0802302 add r2, r0, r2, lsl #6
iop->data1 = iop + 1;
iop->data1 = NULL;
2230: e3a03000 mov r3, #0
2234: e5823034 str r3, [r2, #52] ; 0x34
/*
* Create the binary semaphore used to provide mutual exclusion
* on the IOP Table.
*/
rc = rtems_semaphore_create(
2238: e59fc050 ldr ip, [pc, #80] ; 2290 <rtems_libio_init+0xcc>
223c: e59f0050 ldr r0, [pc, #80] ; 2294 <rtems_libio_init+0xd0>
2240: e3a01001 mov r1, #1
2244: e3a02054 mov r2, #84 ; 0x54
2248: e3a03000 mov r3, #0
224c: e58dc000 str ip, [sp]
2250: eb000cba bl 5540 <rtems_semaphore_create>
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_libio_semaphore
);
if ( rc != RTEMS_SUCCESSFUL )
2254: e3500000 cmp r0, #0
2258: 1a000006 bne 2278 <rtems_libio_init+0xb4>
/*
* Initialize the base file system infrastructure.
*/
if (rtems_fs_init_helper)
225c: e59f3034 ldr r3, [pc, #52] ; 2298 <rtems_libio_init+0xd4>
2260: e5933000 ldr r3, [r3]
2264: e3530000 cmp r3, #0
(* rtems_fs_init_helper)();
2268: 11a0e00f movne lr, pc
226c: 112fff13 bxne r3
}
2270: e28dd004 add sp, sp, #4
2274: e8bd8010 pop {r4, pc}
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_libio_semaphore
);
if ( rc != RTEMS_SUCCESSFUL )
rtems_fatal_error_occurred( rc );
2278: eb000ed8 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
if (rtems_libio_number_iops > 0)
{
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
sizeof(rtems_libio_t));
if (rtems_libio_iops == NULL)
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
227c: e280001a add r0, r0, #26 <== NOT EXECUTED
2280: eb000ed6 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
0002a4dc <rtems_libio_set_private_env>:
rtems_filesystem_freenode( &env->root_directory);
free(env);
}
}
rtems_status_code rtems_libio_set_private_env(void) {
2a4dc: e92d40f0 push {r4, r5, r6, r7, lr}
rtems_status_code sc;
rtems_id task_id;
rtems_filesystem_location_info_t loc;
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
2a4e0: e3a00000 mov r0, #0
rtems_filesystem_freenode( &env->root_directory);
free(env);
}
}
rtems_status_code rtems_libio_set_private_env(void) {
2a4e4: e24dd01c sub sp, sp, #28
rtems_status_code sc;
rtems_id task_id;
rtems_filesystem_location_info_t loc;
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
2a4e8: e1a01000 mov r1, r0
2a4ec: e28d2018 add r2, sp, #24
2a4f0: eb0004d0 bl 2b838 <rtems_task_ident>
if (sc != RTEMS_SUCCESSFUL) return sc;
2a4f4: e2505000 subs r5, r0, #0
2a4f8: 1a000025 bne 2a594 <rtems_libio_set_private_env+0xb8>
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
2a4fc: e59f70d8 ldr r7, [pc, #216] ; 2a5dc <rtems_libio_set_private_env+0x100>
2a500: e59f30d8 ldr r3, [pc, #216] ; 2a5e0 <rtems_libio_set_private_env+0x104>
2a504: e5976000 ldr r6, [r7]
2a508: e1560003 cmp r6, r3
2a50c: 0a000023 beq 2a5a0 <rtems_libio_set_private_env+0xc4>
return sc;
}
rtems_current_user_env = tmp;
};
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
2a510: e59f10c8 ldr r1, [pc, #200] ; 2a5e0 <rtems_libio_set_private_env+0x104>
2a514: e3a02048 mov r2, #72 ; 0x48
2a518: e1a00006 mov r0, r6
2a51c: eb006f63 bl 462b0 <memcpy>
rtems_current_user_env->task_id=task_id; /* mark the local values*/
2a520: e59d3018 ldr r3, [sp, #24]
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
2a524: e3a05000 mov r5, #0
2a528: e28d4004 add r4, sp, #4
}
rtems_current_user_env = tmp;
};
*rtems_current_user_env = rtems_global_user_env; /* get the global values*/
rtems_current_user_env->task_id=task_id; /* mark the local values*/
2a52c: e5863000 str r3, [r6]
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
2a530: e3a01001 mov r1, #1
2a534: e1a03004 mov r3, r4
2a538: e1a02005 mov r2, r5
2a53c: e59f00a0 ldr r0, [pc, #160] ; 2a5e4 <rtems_libio_set_private_env+0x108>
rtems_filesystem_root = loc;
2a540: e1a06004 mov r6, r4
* what we are trying to do here is forking off
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
2a544: e58d5000 str r5, [sp]
2a548: ebff75e6 bl 7ce8 <rtems_filesystem_evaluate_path>
rtems_filesystem_root = loc;
2a54c: e597c000 ldr ip, [r7]
2a550: e8b6000f ldm r6!, {r0, r1, r2, r3}
2a554: e28cc018 add ip, ip, #24
2a558: e8ac000f stmia ip!, {r0, r1, r2, r3}
2a55c: e5963000 ldr r3, [r6]
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
2a560: e3a01001 mov r1, #1
* clones. The reason is a pathloc can be allocated by the
* file system and needs to be freed when deleting the environment.
*/
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
rtems_filesystem_root = loc;
2a564: e58c3000 str r3, [ip]
rtems_filesystem_evaluate_path("/", 1, 0, &loc, 0);
2a568: e1a02005 mov r2, r5
2a56c: e1a03004 mov r3, r4
2a570: e59f006c ldr r0, [pc, #108] ; 2a5e4 <rtems_libio_set_private_env+0x108>
2a574: e58d5000 str r5, [sp]
2a578: ebff75da bl 7ce8 <rtems_filesystem_evaluate_path>
rtems_filesystem_current = loc;
2a57c: e597c000 ldr ip, [r7]
2a580: e8b4000f ldm r4!, {r0, r1, r2, r3}
2a584: e28cc004 add ip, ip, #4
2a588: e8ac000f stmia ip!, {r0, r1, r2, r3}
2a58c: e5963000 ldr r3, [r6]
2a590: e58c3000 str r3, [ip]
return RTEMS_SUCCESSFUL;
}
2a594: e1a00005 mov r0, r5
2a598: e28dd01c add sp, sp, #28
2a59c: e8bd80f0 pop {r4, r5, r6, r7, pc}
sc=rtems_task_ident(RTEMS_SELF,0,&task_id);
if (sc != RTEMS_SUCCESSFUL) return sc;
/* Only for the first time a malloc is necesary */
if (rtems_current_user_env==&rtems_global_user_env) {
rtems_user_env_t *tmp = malloc(sizeof(rtems_user_env_t));
2a5a0: e3a00048 mov r0, #72 ; 0x48
2a5a4: ebff77b5 bl 8480 <malloc>
if (!tmp)
2a5a8: e2506000 subs r6, r0, #0
2a5ac: 03a0501a moveq r5, #26
2a5b0: 0afffff7 beq 2a594 <rtems_libio_set_private_env+0xb8>
#ifdef HAVE_USERENV_REFCNT
tmp->refcnt = 1;
#endif
sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env);
2a5b4: e1a00005 mov r0, r5
2a5b8: e1a01007 mov r1, r7
2a5bc: e59f2024 ldr r2, [pc, #36] ; 2a5e8 <rtems_libio_set_private_env+0x10c>
2a5c0: eb000544 bl 2bad8 <rtems_task_variable_add>
if (sc != RTEMS_SUCCESSFUL) {
2a5c4: e2505000 subs r5, r0, #0
* not initialized yet
*/
free(tmp);
return sc;
}
rtems_current_user_env = tmp;
2a5c8: 05876000 streq r6, [r7]
#ifdef HAVE_USERENV_REFCNT
tmp->refcnt = 1;
#endif
sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,(void(*)(void *))free_user_env);
if (sc != RTEMS_SUCCESSFUL) {
2a5cc: 0affffcf beq 2a510 <rtems_libio_set_private_env+0x34>
/* don't use free_user_env because the pathlocs are
* not initialized yet
*/
free(tmp);
2a5d0: e1a00006 mov r0, r6 <== NOT EXECUTED
2a5d4: ebff75e5 bl 7d70 <free> <== NOT EXECUTED
return sc;
2a5d8: eaffffed b 2a594 <rtems_libio_set_private_env+0xb8> <== NOT EXECUTED
0002a42c <rtems_libio_share_private_env>:
* b) mutex access to rtems_filesystem_current, rtems_filesytem_root
* while changing any of those (chdir(), chroot()).
*/
#ifndef HAVE_USERENV_REFCNT
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) {
2a42c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
2a430: e1a05000 mov r5, r0 <== NOT EXECUTED
2a434: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
rtems_status_code sc;
rtems_user_env_t * shared_user_env;
rtems_id current_task_id;
sc=rtems_task_ident(RTEMS_SELF,0,¤t_task_id);
2a438: e3a00000 mov r0, #0 <== NOT EXECUTED
2a43c: e1a01000 mov r1, r0 <== NOT EXECUTED
2a440: e1a0200d mov r2, sp <== NOT EXECUTED
2a444: eb0004fb bl 2b838 <rtems_task_ident> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
2a448: e2503000 subs r3, r0, #0 <== NOT EXECUTED
2a44c: 1a00000d bne 2a488 <rtems_libio_share_private_env+0x5c> <== NOT EXECUTED
if (rtems_current_user_env->task_id==current_task_id) {
2a450: e59f4078 ldr r4, [pc, #120] ; 2a4d0 <rtems_libio_share_private_env+0xa4><== NOT EXECUTED
2a454: e5946000 ldr r6, [r4] <== NOT EXECUTED
2a458: e59d3000 ldr r3, [sp] <== NOT EXECUTED
2a45c: e5962000 ldr r2, [r6] <== NOT EXECUTED
2a460: e1520003 cmp r2, r3 <== NOT EXECUTED
2a464: 0a00000a beq 2a494 <rtems_libio_share_private_env+0x68> <== NOT EXECUTED
free_user_env(tmp);
};
/* AT THIS POINT, rtems_current_user_env is DANGLING */
sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env,
2a468: e1a00005 mov r0, r5 <== NOT EXECUTED
2a46c: e59f105c ldr r1, [pc, #92] ; 2a4d0 <rtems_libio_share_private_env+0xa4><== NOT EXECUTED
2a470: e28d2004 add r2, sp, #4 <== NOT EXECUTED
2a474: eb0005ea bl 2bc24 <rtems_task_variable_get> <== NOT EXECUTED
(void*)&shared_user_env );
if (sc != RTEMS_SUCCESSFUL)
2a478: e2503000 subs r3, r0, #0 <== NOT EXECUTED
2a47c: 0a00000b beq 2a4b0 <rtems_libio_share_private_env+0x84> <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
bailout:
/* fallback to the global env */
rtems_current_user_env = &rtems_global_user_env;
2a480: e59f204c ldr r2, [pc, #76] ; 2a4d4 <rtems_libio_share_private_env+0xa8><== NOT EXECUTED
2a484: e5842000 str r2, [r4] <== NOT EXECUTED
return sc;
}
2a488: e1a00003 mov r0, r3 <== NOT EXECUTED
2a48c: e28dd008 add sp, sp, #8 <== NOT EXECUTED
2a490: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
if (rtems_current_user_env->task_id==current_task_id) {
/* kill the current user env & task_var*/
rtems_user_env_t *tmp = rtems_current_user_env;
sc = rtems_task_variable_delete(RTEMS_SELF,(void*)&rtems_current_user_env);
2a494: e1a01004 mov r1, r4 <== NOT EXECUTED
2a498: eb0005bb bl 2bb8c <rtems_task_variable_delete> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL) return sc;
2a49c: e2503000 subs r3, r0, #0 <== NOT EXECUTED
2a4a0: 1afffff8 bne 2a488 <rtems_libio_share_private_env+0x5c> <== NOT EXECUTED
free_user_env(tmp);
2a4a4: e1a00006 mov r0, r6 <== NOT EXECUTED
2a4a8: ebffffc6 bl 2a3c8 <free_user_env> <== NOT EXECUTED
2a4ac: eaffffed b 2a468 <rtems_libio_share_private_env+0x3c> <== NOT EXECUTED
sc = rtems_task_variable_get(task_id,(void*)&rtems_current_user_env,
(void*)&shared_user_env );
if (sc != RTEMS_SUCCESSFUL)
goto bailout;
sc = rtems_task_variable_add(RTEMS_SELF,(void*)&rtems_current_user_env,free_user_env);
2a4b0: e59f1018 ldr r1, [pc, #24] ; 2a4d0 <rtems_libio_share_private_env+0xa4><== NOT EXECUTED
2a4b4: e59f201c ldr r2, [pc, #28] ; 2a4d8 <rtems_libio_share_private_env+0xac><== NOT EXECUTED
2a4b8: eb000586 bl 2bad8 <rtems_task_variable_add> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2a4bc: e2503000 subs r3, r0, #0 <== NOT EXECUTED
2a4c0: 1affffee bne 2a480 <rtems_libio_share_private_env+0x54> <== NOT EXECUTED
goto bailout;
/* the current_user_env is the same pointer that remote env */
rtems_current_user_env = shared_user_env;
2a4c4: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
2a4c8: e5842000 str r2, [r4] <== NOT EXECUTED
/* increase the reference count */
#ifdef HAVE_USERENV_REFCNT
rtems_current_user_env->refcnt++;
#endif
return RTEMS_SUCCESSFUL;
2a4cc: eaffffed b 2a488 <rtems_libio_share_private_env+0x5c> <== NOT EXECUTED
0000857c <rtems_malloc_statistics_at_free>:
* size and thus we skip updating the statistics.
*/
static void rtems_malloc_statistics_at_free(
void *pointer
)
{
857c: e92d4800 push {fp, lr} <== NOT EXECUTED
uintptr_t size;
if (_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &size) ) {
8580: e59f3040 ldr r3, [pc, #64] ; 85c8 <rtems_malloc_statistics_at_free+0x4c><== NOT EXECUTED
* size and thus we skip updating the statistics.
*/
static void rtems_malloc_statistics_at_free(
void *pointer
)
{
8584: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
8588: e1a01000 mov r1, r0 <== NOT EXECUTED
uintptr_t size;
if (_Protected_heap_Get_block_size(RTEMS_Malloc_Heap, pointer, &size) ) {
858c: e1a0200d mov r2, sp <== NOT EXECUTED
8590: e5930000 ldr r0, [r3] <== NOT EXECUTED
8594: eb001763 bl e328 <_Protected_heap_Get_block_size> <== NOT EXECUTED
8598: e3500000 cmp r0, #0 <== NOT EXECUTED
859c: 0a000007 beq 85c0 <rtems_malloc_statistics_at_free+0x44> <== NOT EXECUTED
MSBUMP(lifetime_freed, size);
85a0: e59f3024 ldr r3, [pc, #36] ; 85cc <rtems_malloc_statistics_at_free+0x50><== NOT EXECUTED
85a4: e59d0000 ldr r0, [sp] <== NOT EXECUTED
85a8: e283c024 add ip, r3, #36 ; 0x24 <== NOT EXECUTED
85ac: e89c1800 ldm ip, {fp, ip} <== NOT EXECUTED
85b0: e09b1000 adds r1, fp, r0 <== NOT EXECUTED
85b4: e2ac2000 adc r2, ip, #0 <== NOT EXECUTED
85b8: e5831024 str r1, [r3, #36] ; 0x24 <== NOT EXECUTED
85bc: e5832028 str r2, [r3, #40] ; 0x28 <== NOT EXECUTED
}
}
85c0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
85c4: e8bd8800 pop {fp, pc} <== NOT EXECUTED
00009490 <rtems_mkdir>:
return (retval);
}
int
rtems_mkdir(const char *path, mode_t mode)
{
9490: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
9494: e24dd048 sub sp, sp, #72 ; 0x48 <== NOT EXECUTED
9498: e1a0a001 mov sl, r1 <== NOT EXECUTED
int success = 0;
char *dup_path = strdup(path);
949c: eb010030 bl 49564 <strdup> <== NOT EXECUTED
if (dup_path != NULL) {
94a0: e2506000 subs r6, r0, #0 <== NOT EXECUTED
94a4: 0a00005e beq 9624 <rtems_mkdir+0x194> <== NOT EXECUTED
char *p;
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
94a8: e5d63000 ldrb r3, [r6] <== NOT EXECUTED
94ac: e353002f cmp r3, #47 ; 0x2f <== NOT EXECUTED
++p;
94b0: e3a07000 mov r7, #0 <== NOT EXECUTED
94b4: 05d63001 ldrbeq r3, [r6, #1] <== NOT EXECUTED
char *p;
p = path;
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
94b8: 11a05006 movne r5, r6 <== NOT EXECUTED
++p;
94bc: 02865001 addeq r5, r6, #1 <== NOT EXECUTED
94c0: e3a02001 mov r2, #1 <== NOT EXECUTED
retval = 0;
break;
}
}
if (!last)
*p = '/';
94c4: e3a0802f mov r8, #47 ; 0x2f <== NOT EXECUTED
94c8: e1a09007 mov r9, r7 <== NOT EXECUTED
}
if (last)
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
if (errno == EEXIST || errno == EISDIR) {
if (stat(path, &sb) < 0) {
94cc: e1a0b00d mov fp, sp <== NOT EXECUTED
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
94d0: e3530000 cmp r3, #0 <== NOT EXECUTED
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
94d4: 05c53000 strbeq r3, [r5] <== NOT EXECUTED
94d8: 03a04001 moveq r4, #1 <== NOT EXECUTED
oumask = 0;
retval = 1;
if (p[0] == '/') /* Skip leading '/'. */
++p;
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
94dc: 0a000006 beq 94fc <rtems_mkdir+0x6c> <== NOT EXECUTED
last = 1;
else if (p[0] != '/')
94e0: e353002f cmp r3, #47 ; 0x2f <== NOT EXECUTED
retval = 0;
break;
}
}
if (!last)
*p = '/';
94e4: 15f53001 ldrbne r3, [r5, #1]! <== NOT EXECUTED
94e8: 1afffff8 bne 94d0 <rtems_mkdir+0x40> <== NOT EXECUTED
if (p[0] == '\0')
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
if (!last && p[1] == '\0')
94ec: e5d54001 ldrb r4, [r5, #1] <== NOT EXECUTED
for (first = 1, last = 0; !last ; ++p) {
if (p[0] == '\0')
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
94f0: e5c59000 strb r9, [r5] <== NOT EXECUTED
if (!last && p[1] == '\0')
94f4: e2744001 rsbs r4, r4, #1 <== NOT EXECUTED
94f8: 33a04000 movcc r4, #0 <== NOT EXECUTED
last = 1;
if (first) {
94fc: e3520000 cmp r2, #0 <== NOT EXECUTED
9500: 1a000031 bne 95cc <rtems_mkdir+0x13c> <== NOT EXECUTED
oumask = umask(0);
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
9504: e3540000 cmp r4, #0 <== NOT EXECUTED
9508: 03a01f7f moveq r1, #508 ; 0x1fc <== NOT EXECUTED
950c: 02811003 addeq r1, r1, #3 <== NOT EXECUTED
9510: 1a000011 bne 955c <rtems_mkdir+0xcc> <== NOT EXECUTED
(void)umask(oumask);
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
9514: e1a00006 mov r0, r6 <== NOT EXECUTED
9518: ebfffc59 bl 8684 <mkdir> <== NOT EXECUTED
951c: e3500000 cmp r0, #0 <== NOT EXECUTED
9520: ba000014 blt 9578 <rtems_mkdir+0xe8> <== NOT EXECUTED
} else {
retval = 0;
break;
}
}
if (!last)
9524: e3540000 cmp r4, #0 <== NOT EXECUTED
9528: 0a000007 beq 954c <rtems_mkdir+0xbc> <== NOT EXECUTED
if (p[0] == '\0')
last = 1;
else if (p[0] != '/')
continue;
*p = '\0';
if (!last && p[1] == '\0')
952c: e3a04001 mov r4, #1 <== NOT EXECUTED
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
9530: e1a00006 mov r0, r6 <== NOT EXECUTED
9534: ebfffa0d bl 7d70 <free> <== NOT EXECUTED
}
return success != 0 ? 0 : -1;
9538: e3540000 cmp r4, #0 <== NOT EXECUTED
953c: 13a00000 movne r0, #0 <== NOT EXECUTED
9540: 0a000037 beq 9624 <rtems_mkdir+0x194> <== NOT EXECUTED
}
9544: e28dd048 add sp, sp, #72 ; 0x48 <== NOT EXECUTED
9548: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
retval = 0;
break;
}
}
if (!last)
*p = '/';
954c: e5c58000 strb r8, [r5] <== NOT EXECUTED
9550: e3a02000 mov r2, #0 <== NOT EXECUTED
9554: e5f53001 ldrb r3, [r5, #1]! <== NOT EXECUTED
9558: eaffffdc b 94d0 <rtems_mkdir+0x40> <== NOT EXECUTED
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
first = 0;
}
if (last)
(void)umask(oumask);
955c: e1a00007 mov r0, r7 <== NOT EXECUTED
9560: eb0007f3 bl b534 <umask> <== NOT EXECUTED
9564: e1a0100a mov r1, sl <== NOT EXECUTED
if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
9568: e1a00006 mov r0, r6 <== NOT EXECUTED
956c: ebfffc44 bl 8684 <mkdir> <== NOT EXECUTED
9570: e3500000 cmp r0, #0 <== NOT EXECUTED
9574: aaffffea bge 9524 <rtems_mkdir+0x94> <== NOT EXECUTED
if (errno == EEXIST || errno == EISDIR) {
9578: eb00e69c bl 42ff0 <__errno> <== NOT EXECUTED
957c: e5903000 ldr r3, [r0] <== NOT EXECUTED
9580: e3530011 cmp r3, #17 <== NOT EXECUTED
9584: 0a000003 beq 9598 <rtems_mkdir+0x108> <== NOT EXECUTED
9588: eb00e698 bl 42ff0 <__errno> <== NOT EXECUTED
958c: e5903000 ldr r3, [r0] <== NOT EXECUTED
9590: e3530015 cmp r3, #21 <== NOT EXECUTED
9594: 1a000024 bne 962c <rtems_mkdir+0x19c> <== NOT EXECUTED
if (stat(path, &sb) < 0) {
9598: e1a00006 mov r0, r6 <== NOT EXECUTED
959c: e1a0100d mov r1, sp <== NOT EXECUTED
95a0: eb000024 bl 9638 <stat> <== NOT EXECUTED
95a4: e3500000 cmp r0, #0 <== NOT EXECUTED
95a8: ba00001f blt 962c <rtems_mkdir+0x19c> <== NOT EXECUTED
retval = 0;
break;
} else if (!S_ISDIR(sb.st_mode)) {
95ac: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
95b0: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
95b4: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
95b8: 1a000009 bne 95e4 <rtems_mkdir+0x154> <== NOT EXECUTED
else
errno = ENOTDIR;
retval = 0;
break;
}
if (last)
95bc: e3540000 cmp r4, #0 <== NOT EXECUTED
95c0: 0affffe1 beq 954c <rtems_mkdir+0xbc> <== NOT EXECUTED
95c4: e3a04002 mov r4, #2 <== NOT EXECUTED
95c8: eaffffd8 b 9530 <rtems_mkdir+0xa0> <== NOT EXECUTED
* mkdir [-m mode] dir
*
* We change the user's umask and then restore it,
* instead of doing chmod's.
*/
oumask = umask(0);
95cc: e3a00000 mov r0, #0 <== NOT EXECUTED
95d0: eb0007d7 bl b534 <umask> <== NOT EXECUTED
95d4: e1a07000 mov r7, r0 <== NOT EXECUTED
numask = oumask & ~(S_IWUSR | S_IXUSR);
(void)umask(numask);
95d8: e3c000c0 bic r0, r0, #192 ; 0xc0 <== NOT EXECUTED
95dc: eb0007d4 bl b534 <umask> <== NOT EXECUTED
95e0: eaffffc7 b 9504 <rtems_mkdir+0x74> <== NOT EXECUTED
if (errno == EEXIST || errno == EISDIR) {
if (stat(path, &sb) < 0) {
retval = 0;
break;
} else if (!S_ISDIR(sb.st_mode)) {
if (last)
95e4: e3540000 cmp r4, #0 <== NOT EXECUTED
95e8: 0a000006 beq 9608 <rtems_mkdir+0x178> <== NOT EXECUTED
errno = EEXIST;
95ec: eb00e67f bl 42ff0 <__errno> <== NOT EXECUTED
95f0: e3a03011 mov r3, #17 <== NOT EXECUTED
95f4: e5803000 str r3, [r0] <== NOT EXECUTED
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
95f8: e1a00006 mov r0, r6 <== NOT EXECUTED
95fc: ebfff9db bl 7d70 <free> <== NOT EXECUTED
9600: e3e00000 mvn r0, #0 <== NOT EXECUTED
9604: eaffffce b 9544 <rtems_mkdir+0xb4> <== NOT EXECUTED
break;
} else if (!S_ISDIR(sb.st_mode)) {
if (last)
errno = EEXIST;
else
errno = ENOTDIR;
9608: eb00e678 bl 42ff0 <__errno> <== NOT EXECUTED
960c: e3a03014 mov r3, #20 <== NOT EXECUTED
9610: e5803000 str r3, [r0] <== NOT EXECUTED
}
if (!last)
*p = '/';
}
if (!first && !last)
(void)umask(oumask);
9614: e1a00007 mov r0, r7 <== NOT EXECUTED
9618: eb0007c5 bl b534 <umask> <== NOT EXECUTED
int success = 0;
char *dup_path = strdup(path);
if (dup_path != NULL) {
success = build(dup_path, mode);
free(dup_path);
961c: e1a00006 mov r0, r6 <== NOT EXECUTED
9620: ebfff9d2 bl 7d70 <free> <== NOT EXECUTED
}
if (!last)
*p = '/';
}
if (!first && !last)
(void)umask(oumask);
9624: e3e00000 mvn r0, #0 <== NOT EXECUTED
9628: eaffffc5 b 9544 <rtems_mkdir+0xb4> <== NOT EXECUTED
}
}
if (!last)
*p = '/';
}
if (!first && !last)
962c: e3540000 cmp r4, #0 <== NOT EXECUTED
9630: 0afffff7 beq 9614 <rtems_mkdir+0x184> <== NOT EXECUTED
9634: eafffff8 b 961c <rtems_mkdir+0x18c> <== NOT EXECUTED
00020b5c <rtems_nvdisk_crc16_gen_factors>:
* @relval RTEMS_SUCCESSFUL The table was generated.
* @retval RTEMS_NO_MEMORY The table could not be allocated from the heap.
*/
rtems_status_code
rtems_nvdisk_crc16_gen_factors (uint16_t pattern)
{
20b5c: e92d4010 push {r4, lr} <== NOT EXECUTED
20b60: e1a04800 lsl r4, r0, #16 <== NOT EXECUTED
uint32_t b;
rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
20b64: e3a00c02 mov r0, #512 ; 0x200 <== NOT EXECUTED
20b68: ebff9e44 bl 8480 <malloc> <== NOT EXECUTED
20b6c: e59f3058 ldr r3, [pc, #88] ; 20bcc <rtems_nvdisk_crc16_gen_factors+0x70><== NOT EXECUTED
if (!rtems_nvdisk_crc16_factor)
20b70: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_status_code
rtems_nvdisk_crc16_gen_factors (uint16_t pattern)
{
uint32_t b;
rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
20b74: e5830008 str r0, [r3, #8] <== NOT EXECUTED
* @relval RTEMS_SUCCESSFUL The table was generated.
* @retval RTEMS_NO_MEMORY The table could not be allocated from the heap.
*/
rtems_status_code
rtems_nvdisk_crc16_gen_factors (uint16_t pattern)
{
20b78: e1a04824 lsr r4, r4, #16 <== NOT EXECUTED
uint32_t b;
rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
if (!rtems_nvdisk_crc16_factor)
20b7c: 0280001a addeq r0, r0, #26 <== NOT EXECUTED
20b80: 08bd8010 popeq {r4, pc} <== NOT EXECUTED
20b84: e3a01000 mov r1, #0 <== NOT EXECUTED
20b88: e1a03801 lsl r3, r1, #16 <== NOT EXECUTED
20b8c: e1a03823 lsr r3, r3, #16 <== NOT EXECUTED
20b90: e3a02007 mov r2, #7 <== NOT EXECUTED
20b94: ea000000 b 20b9c <rtems_nvdisk_crc16_gen_factors+0x40> <== NOT EXECUTED
for (b = 0; b < 256; b++)
{
uint32_t i;
uint16_t v = b;
for (i = 8; i--;)
20b98: e2422001 sub r2, r2, #1 <== NOT EXECUTED
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
20b9c: e3130001 tst r3, #1 <== NOT EXECUTED
20ba0: 102430a3 eorne r3, r4, r3, lsr #1 <== NOT EXECUTED
20ba4: 01a030a3 lsreq r3, r3, #1 <== NOT EXECUTED
for (b = 0; b < 256; b++)
{
uint32_t i;
uint16_t v = b;
for (i = 8; i--;)
20ba8: e3520000 cmp r2, #0 <== NOT EXECUTED
20bac: 1afffff9 bne 20b98 <rtems_nvdisk_crc16_gen_factors+0x3c> <== NOT EXECUTED
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
rtems_nvdisk_crc16_factor[b] = v & 0xffff;
20bb0: e1a0c081 lsl ip, r1, #1 <== NOT EXECUTED
rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
if (!rtems_nvdisk_crc16_factor)
return RTEMS_NO_MEMORY;
for (b = 0; b < 256; b++)
20bb4: e2811001 add r1, r1, #1 <== NOT EXECUTED
20bb8: e3510c01 cmp r1, #256 ; 0x100 <== NOT EXECUTED
{
uint32_t i;
uint16_t v = b;
for (i = 8; i--;)
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
rtems_nvdisk_crc16_factor[b] = v & 0xffff;
20bbc: e18030bc strh r3, [r0, ip] <== NOT EXECUTED
rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256);
if (!rtems_nvdisk_crc16_factor)
return RTEMS_NO_MEMORY;
for (b = 0; b < 256; b++)
20bc0: 1afffff0 bne 20b88 <rtems_nvdisk_crc16_gen_factors+0x2c> <== NOT EXECUTED
20bc4: e1a00002 mov r0, r2 <== NOT EXECUTED
for (i = 8; i--;)
v = v & 1 ? (v >> 1) ^ pattern : v >> 1;
rtems_nvdisk_crc16_factor[b] = v & 0xffff;
}
return RTEMS_SUCCESSFUL;
}
20bc8: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0002043c <rtems_nvdisk_error>:
* @param ... The arguments for the format text.
* @return int The number of bytes written to the output.
*/
static int
rtems_nvdisk_error (const char *format, ...)
{
2043c: e92d000f push {r0, r1, r2, r3} <== NOT EXECUTED
20440: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
int ret;
va_list args;
va_start (args, format);
fprintf (stderr, "nvdisk:error:");
20444: e59f4068 ldr r4, [pc, #104] ; 204b4 <rtems_nvdisk_error+0x78><== NOT EXECUTED
20448: e5943000 ldr r3, [r4] <== NOT EXECUTED
* @param ... The arguments for the format text.
* @return int The number of bytes written to the output.
*/
static int
rtems_nvdisk_error (const char *format, ...)
{
2044c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
int ret;
va_list args;
va_start (args, format);
20450: e28dc014 add ip, sp, #20 <== NOT EXECUTED
fprintf (stderr, "nvdisk:error:");
20454: e593300c ldr r3, [r3, #12] <== NOT EXECUTED
20458: e3a01001 mov r1, #1 <== NOT EXECUTED
2045c: e3a0200d mov r2, #13 <== NOT EXECUTED
20460: e59f0050 ldr r0, [pc, #80] ; 204b8 <rtems_nvdisk_error+0x7c><== NOT EXECUTED
static int
rtems_nvdisk_error (const char *format, ...)
{
int ret;
va_list args;
va_start (args, format);
20464: e58dc000 str ip, [sp] <== NOT EXECUTED
fprintf (stderr, "nvdisk:error:");
20468: eb00921d bl 44ce4 <fwrite> <== NOT EXECUTED
ret = vfprintf (stderr, format, args);
2046c: e5943000 ldr r3, [r4] <== NOT EXECUTED
20470: e59d2000 ldr r2, [sp] <== NOT EXECUTED
20474: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
20478: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
2047c: eb00c5f8 bl 51c64 <vfprintf> <== NOT EXECUTED
fprintf (stderr, "\n");
20480: e5943000 ldr r3, [r4] <== NOT EXECUTED
{
int ret;
va_list args;
va_start (args, format);
fprintf (stderr, "nvdisk:error:");
ret = vfprintf (stderr, format, args);
20484: e1a05000 mov r5, r0 <== NOT EXECUTED
fprintf (stderr, "\n");
20488: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
2048c: e3a0000a mov r0, #10 <== NOT EXECUTED
20490: eb008d69 bl 43a3c <fputc> <== NOT EXECUTED
fflush (stderr);
20494: e5943000 ldr r3, [r4] <== NOT EXECUTED
20498: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
2049c: eb008bc6 bl 433bc <fflush> <== NOT EXECUTED
va_end (args);
return ret;
}
204a0: e1a00005 mov r0, r5 <== NOT EXECUTED
204a4: e28dd004 add sp, sp, #4 <== NOT EXECUTED
204a8: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED
204ac: e28dd010 add sp, sp, #16 <== NOT EXECUTED
204b0: e12fff1e bx lr <== NOT EXECUTED
000204bc <rtems_nvdisk_get_device>:
static rtems_nvdisk_device_ctl*
rtems_nvdisk_get_device (rtems_nvdisk* nvd, uint32_t block)
{
uint32_t device;
if (block >= nvd->block_count)
204bc: e5902010 ldr r2, [r0, #16] <== NOT EXECUTED
204c0: e1520001 cmp r2, r1 <== NOT EXECUTED
/**
* Map a block to a device.
*/
static rtems_nvdisk_device_ctl*
rtems_nvdisk_get_device (rtems_nvdisk* nvd, uint32_t block)
{
204c4: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
204c8: e1a03001 mov r3, r1 <== NOT EXECUTED
uint32_t device;
if (block >= nvd->block_count)
204cc: 9a000017 bls 20530 <rtems_nvdisk_get_device+0x74> <== NOT EXECUTED
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
return NULL;
}
for (device = 0; device < nvd->device_count; device++)
204d0: e5904018 ldr r4, [r0, #24] <== NOT EXECUTED
204d4: e3540000 cmp r4, #0 <== NOT EXECUTED
204d8: 0a00000f beq 2051c <rtems_nvdisk_get_device+0x60> <== NOT EXECUTED
uint32_t device;
if (block >= nvd->block_count)
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
return NULL;
204dc: e5902014 ldr r2, [r0, #20] <== NOT EXECUTED
204e0: e3a01000 mov r1, #0 <== NOT EXECUTED
}
for (device = 0; device < nvd->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
if ((block >= dc->block_base) &&
204e4: e592c00c ldr ip, [r2, #12] <== NOT EXECUTED
204e8: e153000c cmp r3, ip <== NOT EXECUTED
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
return NULL;
}
for (device = 0; device < nvd->device_count; device++)
204ec: e2811001 add r1, r1, #1 <== NOT EXECUTED
uint32_t device;
if (block >= nvd->block_count)
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
return NULL;
204f0: e1a00002 mov r0, r2 <== NOT EXECUTED
}
for (device = 0; device < nvd->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
if ((block >= dc->block_base) &&
204f4: 3a000005 bcc 20510 <rtems_nvdisk_get_device+0x54> <== NOT EXECUTED
204f8: e5926004 ldr r6, [r2, #4] <== NOT EXECUTED
204fc: e5925008 ldr r5, [r2, #8] <== NOT EXECUTED
20500: e08cc006 add ip, ip, r6 <== NOT EXECUTED
20504: e065c00c rsb ip, r5, ip <== NOT EXECUTED
20508: e153000c cmp r3, ip <== NOT EXECUTED
2050c: 38bd8070 popcc {r4, r5, r6, pc} <== NOT EXECUTED
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
return NULL;
}
for (device = 0; device < nvd->device_count; device++)
20510: e1510004 cmp r1, r4 <== NOT EXECUTED
20514: e2822014 add r2, r2, #20 <== NOT EXECUTED
20518: 3afffff1 bcc 204e4 <rtems_nvdisk_get_device+0x28> <== NOT EXECUTED
if ((block >= dc->block_base) &&
(block < (dc->block_base + dc->pages - dc->pages_desc)))
return dc;
}
rtems_nvdisk_error ("map-block:%d: no device/page map found", block);
2051c: e1a01003 mov r1, r3 <== NOT EXECUTED
20520: e59f0018 ldr r0, [pc, #24] ; 20540 <rtems_nvdisk_get_device+0x84><== NOT EXECUTED
20524: ebffffc4 bl 2043c <rtems_nvdisk_error> <== NOT EXECUTED
20528: e3a00000 mov r0, #0 <== NOT EXECUTED
return NULL;
}
2052c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
{
uint32_t device;
if (block >= nvd->block_count)
{
rtems_nvdisk_error ("read-block: bad block: %d", block);
20530: e59f000c ldr r0, [pc, #12] ; 20544 <rtems_nvdisk_get_device+0x88><== NOT EXECUTED
20534: ebffffc0 bl 2043c <rtems_nvdisk_error> <== NOT EXECUTED
20538: e3a00000 mov r0, #0 <== NOT EXECUTED
return NULL;
2053c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00020bd0 <rtems_nvdisk_initialize>:
*/
rtems_device_driver
rtems_nvdisk_initialize (rtems_device_major_number major,
rtems_device_minor_number minor,
void* arg __attribute__((unused)))
{
20bd0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
20bd4: e24dd03c sub sp, sp, #60 ; 0x3c <== NOT EXECUTED
20bd8: e58d001c str r0, [sp, #28] <== NOT EXECUTED
const rtems_nvdisk_config* c = rtems_nvdisk_configuration;
rtems_nvdisk* nvd;
rtems_status_code sc;
sc = rtems_disk_io_initialize ();
20bdc: ebff967f bl 65e0 <rtems_disk_io_initialize> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
20be0: e2506000 subs r6, r0, #0 <== NOT EXECUTED
20be4: 0a000002 beq 20bf4 <rtems_nvdisk_initialize+0x24> <== NOT EXECUTED
}
rtems_nvdisk_count = rtems_nvdisk_configuration_size;
return RTEMS_SUCCESSFUL;
}
20be8: e1a00006 mov r0, r6 <== NOT EXECUTED
20bec: e28dd03c add sp, sp, #60 ; 0x3c <== NOT EXECUTED
20bf0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
sc = rtems_disk_io_initialize ();
if (sc != RTEMS_SUCCESSFUL)
return sc;
sc = rtems_nvdisk_crc16_gen_factors (0x8408);
20bf4: e3a00b21 mov r0, #33792 ; 0x8400 <== NOT EXECUTED
20bf8: e2800008 add r0, r0, #8 <== NOT EXECUTED
20bfc: ebffffd6 bl 20b5c <rtems_nvdisk_crc16_gen_factors> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
20c00: e2506000 subs r6, r0, #0 <== NOT EXECUTED
20c04: 1afffff7 bne 20be8 <rtems_nvdisk_initialize+0x18> <== NOT EXECUTED
return sc;
rtems_nvdisks = calloc (rtems_nvdisk_configuration_size,
20c08: e59f223c ldr r2, [pc, #572] ; 20e4c <rtems_nvdisk_initialize+0x27c><== NOT EXECUTED
20c0c: e3a01028 mov r1, #40 ; 0x28 <== NOT EXECUTED
20c10: e5920000 ldr r0, [r2] <== NOT EXECUTED
20c14: ebff9ad1 bl 7760 <calloc> <== NOT EXECUTED
20c18: e59fc230 ldr ip, [pc, #560] ; 20e50 <rtems_nvdisk_initialize+0x280><== NOT EXECUTED
sizeof (rtems_nvdisk));
if (!rtems_nvdisks)
20c1c: e3500000 cmp r0, #0 <== NOT EXECUTED
sc = rtems_nvdisk_crc16_gen_factors (0x8408);
if (sc != RTEMS_SUCCESSFUL)
return sc;
rtems_nvdisks = calloc (rtems_nvdisk_configuration_size,
20c20: e1a03000 mov r3, r0 <== NOT EXECUTED
20c24: e58c0004 str r0, [ip, #4] <== NOT EXECUTED
sizeof (rtems_nvdisk));
if (!rtems_nvdisks)
20c28: 0a000079 beq 20e14 <rtems_nvdisk_initialize+0x244> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_nvdisk_configuration_size; minor++, c++)
20c2c: e59f1218 ldr r1, [pc, #536] ; 20e4c <rtems_nvdisk_initialize+0x27c><== NOT EXECUTED
20c30: e5912000 ldr r2, [r1] <== NOT EXECUTED
20c34: e3520000 cmp r2, #0 <== NOT EXECUTED
20c38: 0a000077 beq 20e1c <rtems_nvdisk_initialize+0x24c> <== NOT EXECUTED
20c3c: e28d2028 add r2, sp, #40 ; 0x28 <== NOT EXECUTED
20c40: e58d6018 str r6, [sp, #24] <== NOT EXECUTED
20c44: e59f5208 ldr r5, [pc, #520] ; 20e54 <rtems_nvdisk_initialize+0x284><== NOT EXECUTED
20c48: e58d6014 str r6, [sp, #20] <== NOT EXECUTED
20c4c: e58d200c str r2, [sp, #12] <== NOT EXECUTED
{
char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a";
20c50: e59fc200 ldr ip, [pc, #512] ; 20e58 <rtems_nvdisk_initialize+0x288><== NOT EXECUTED
20c54: e89c0007 ldm ip, {r0, r1, r2} <== NOT EXECUTED
20c58: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
20c5c: e8ac0003 stmia ip!, {r0, r1} <== NOT EXECUTED
20c60: e1cc20b0 strh r2, [ip] <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
20c64: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
uint32_t device;
uint32_t blocks = 0;
nvd = &rtems_nvdisks[minor];
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
20c68: e5dd2031 ldrb r2, [sp, #49] ; 0x31 <== NOT EXECUTED
temp.__overlay.minor = _minor;
20c6c: e59dc014 ldr ip, [sp, #20] <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
20c70: e58d1034 str r1, [sp, #52] ; 0x34 <== NOT EXECUTED
char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a";
dev_t dev = rtems_filesystem_make_dev_t (major, minor);
uint32_t device;
uint32_t blocks = 0;
nvd = &rtems_nvdisks[minor];
20c74: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
temp.__overlay.minor = _minor;
20c78: e58dc038 str ip, [sp, #56] ; 0x38 <== NOT EXECUTED
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
20c7c: e082200c add r2, r2, ip <== NOT EXECUTED
char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a";
dev_t dev = rtems_filesystem_make_dev_t (major, minor);
uint32_t device;
uint32_t blocks = 0;
nvd = &rtems_nvdisks[minor];
20c80: e0834001 add r4, r3, r1 <== NOT EXECUTED
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
20c84: e5cd2031 strb r2, [sp, #49] ; 0x31 <== NOT EXECUTED
return temp.device;
20c88: e28d2034 add r2, sp, #52 ; 0x34 <== NOT EXECUTED
20c8c: e8920006 ldm r2, {r1, r2} <== NOT EXECUTED
nvd->major = major;
20c90: e59dc01c ldr ip, [sp, #28] <== NOT EXECUTED
20c94: e58d1020 str r1, [sp, #32] <== NOT EXECUTED
20c98: e58d2024 str r2, [sp, #36] ; 0x24 <== NOT EXECUTED
nvd->minor = minor;
20c9c: e28d1014 add r1, sp, #20 <== NOT EXECUTED
20ca0: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
20ca4: e5841004 str r1, [r4, #4] <== NOT EXECUTED
nvd = &rtems_nvdisks[minor];
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
nvd->major = major;
20ca8: e783c002 str ip, [r3, r2] <== NOT EXECUTED
nvd->minor = minor;
nvd->flags = c->flags;
20cac: e5953000 ldr r3, [r5] <== NOT EXECUTED
20cb0: e5843008 str r3, [r4, #8] <== NOT EXECUTED
nvd->block_size = c->block_size;
20cb4: e515300c ldr r3, [r5, #-12] <== NOT EXECUTED
20cb8: e584300c str r3, [r4, #12] <== NOT EXECUTED
nvd->info_level = c->info_level;
20cbc: e5953004 ldr r3, [r5, #4] <== NOT EXECUTED
20cc0: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl));
20cc4: e3a01014 mov r1, #20 <== NOT EXECUTED
20cc8: e5150008 ldr r0, [r5, #-8] <== NOT EXECUTED
20ccc: ebff9aa3 bl 7760 <calloc> <== NOT EXECUTED
if (!nvd->devices)
20cd0: e3500000 cmp r0, #0 <== NOT EXECUTED
nvd->minor = minor;
nvd->flags = c->flags;
nvd->block_size = c->block_size;
nvd->info_level = c->info_level;
nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl));
20cd4: e1a08000 mov r8, r0 <== NOT EXECUTED
20cd8: e5840014 str r0, [r4, #20] <== NOT EXECUTED
if (!nvd->devices)
20cdc: 0a00004c beq 20e14 <rtems_nvdisk_initialize+0x244> <== NOT EXECUTED
return RTEMS_NO_MEMORY;
for (device = 0; device < c->device_count; device++)
20ce0: e5156008 ldr r6, [r5, #-8] <== NOT EXECUTED
20ce4: e3560000 cmp r6, #0 <== NOT EXECUTED
20ce8: 0a000022 beq 20d78 <rtems_nvdisk_initialize+0x1a8> <== NOT EXECUTED
20cec: e3a0a000 mov sl, #0 <== NOT EXECUTED
20cf0: e1a0600a mov r6, sl <== NOT EXECUTED
20cf4: e1a0700a mov r7, sl <== NOT EXECUTED
20cf8: ea000000 b 20d00 <rtems_nvdisk_initialize+0x130> <== NOT EXECUTED
20cfc: e5948014 ldr r8, [r4, #20] <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_pages_in_device (const rtems_nvdisk* nvd,
const rtems_nvdisk_device_desc* dd)
{
return dd->size / nvd->block_size;
20d00: e5159004 ldr r9, [r5, #-4] <== NOT EXECUTED
for (device = 0; device < c->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
dc->device = device;
20d04: e788700a str r7, [r8, sl] <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_pages_in_device (const rtems_nvdisk* nvd,
const rtems_nvdisk_device_desc* dd)
{
return dd->size / nvd->block_size;
20d08: e0899207 add r9, r9, r7, lsl #4 <== NOT EXECUTED
20d0c: e594100c ldr r1, [r4, #12] <== NOT EXECUTED
20d10: e5990008 ldr r0, [r9, #8] <== NOT EXECUTED
20d14: eb00e873 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (!nvd->devices)
return RTEMS_NO_MEMORY;
for (device = 0; device < c->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
20d18: e088800a add r8, r8, sl <== NOT EXECUTED
dc->device = device;
dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]);
20d1c: e5880004 str r0, [r8, #4] <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_pages_in_device (const rtems_nvdisk* nvd,
const rtems_nvdisk_device_desc* dd)
{
return dd->size / nvd->block_size;
20d20: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
20d24: e1a0b000 mov fp, r0 <== NOT EXECUTED
rtems_nvdisk_page_desc_pages (const rtems_nvdisk* nvd,
const rtems_nvdisk_device_desc* dd)
{
uint32_t pages = rtems_nvdisk_pages_in_device (nvd, dd);
uint32_t bytes = pages * sizeof (uint16_t);
return ((bytes - 1) / nvd->block_size) + 1;
20d28: e1a01003 mov r1, r3 <== NOT EXECUTED
20d2c: e5990008 ldr r0, [r9, #8] <== NOT EXECUTED
20d30: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
20d34: eb00e86b bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
20d38: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
20d3c: e1a00080 lsl r0, r0, #1 <== NOT EXECUTED
20d40: e1a01003 mov r1, r3 <== NOT EXECUTED
20d44: e2400001 sub r0, r0, #1 <== NOT EXECUTED
20d48: eb00e866 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
20d4c: e2800001 add r0, r0, #1 <== NOT EXECUTED
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
dc->device = device;
dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]);
dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]);
dc->block_base = blocks;
20d50: e588600c str r6, [r8, #12] <== NOT EXECUTED
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
dc->device = device;
dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]);
dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]);
20d54: e5880008 str r0, [r8, #8] <== NOT EXECUTED
nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl));
if (!nvd->devices)
return RTEMS_NO_MEMORY;
for (device = 0; device < c->device_count; device++)
20d58: e5153008 ldr r3, [r5, #-8] <== NOT EXECUTED
20d5c: e2877001 add r7, r7, #1 <== NOT EXECUTED
dc->device = device;
dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]);
dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]);
dc->block_base = blocks;
blocks += dc->pages - dc->pages_desc;
20d60: e060b00b rsb fp, r0, fp <== NOT EXECUTED
nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl));
if (!nvd->devices)
return RTEMS_NO_MEMORY;
for (device = 0; device < c->device_count; device++)
20d64: e1530007 cmp r3, r7 <== NOT EXECUTED
dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]);
dc->block_base = blocks;
blocks += dc->pages - dc->pages_desc;
dc->descriptor = &c->devices[device];
20d68: e5889010 str r9, [r8, #16] <== NOT EXECUTED
dc->device = device;
dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]);
dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]);
dc->block_base = blocks;
blocks += dc->pages - dc->pages_desc;
20d6c: e086600b add r6, r6, fp <== NOT EXECUTED
nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl));
if (!nvd->devices)
return RTEMS_NO_MEMORY;
for (device = 0; device < c->device_count; device++)
20d70: e28aa014 add sl, sl, #20 <== NOT EXECUTED
20d74: 8affffe0 bhi 20cfc <rtems_nvdisk_initialize+0x12c> <== NOT EXECUTED
blocks += dc->pages - dc->pages_desc;
dc->descriptor = &c->devices[device];
}
nvd->block_count = blocks;
20d78: e5846010 str r6, [r4, #16] <== NOT EXECUTED
nvd->device_count = c->device_count;
20d7c: e5153008 ldr r3, [r5, #-8] <== NOT EXECUTED
sc = rtems_disk_create_phys(dev, c->block_size, blocks,
20d80: e59fc0d4 ldr ip, [pc, #212] ; 20e5c <rtems_nvdisk_initialize+0x28c><== NOT EXECUTED
dc->descriptor = &c->devices[device];
}
nvd->block_count = blocks;
nvd->device_count = c->device_count;
20d84: e5843018 str r3, [r4, #24] <== NOT EXECUTED
sc = rtems_disk_create_phys(dev, c->block_size, blocks,
20d88: e58dc000 str ip, [sp] <== NOT EXECUTED
20d8c: e3a0c000 mov ip, #0 <== NOT EXECUTED
20d90: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
20d94: e515200c ldr r2, [r5, #-12] <== NOT EXECUTED
20d98: e28dc028 add ip, sp, #40 ; 0x28 <== NOT EXECUTED
20d9c: e28d1020 add r1, sp, #32 <== NOT EXECUTED
20da0: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
20da4: e1a03006 mov r3, r6 <== NOT EXECUTED
20da8: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
20dac: ebff97dd bl 6d28 <rtems_disk_create_phys> <== NOT EXECUTED
rtems_nvdisk_ioctl, NULL, name);
if (sc != RTEMS_SUCCESSFUL)
20db0: e3500000 cmp r0, #0 <== NOT EXECUTED
20db4: 1a000020 bne 20e3c <rtems_nvdisk_initialize+0x26c> <== NOT EXECUTED
{
rtems_nvdisk_error ("disk create phy failed");
return sc;
}
sc = rtems_semaphore_create (rtems_build_name ('N', 'V', 'D', 'K'), 1,
20db8: e2844020 add r4, r4, #32 <== NOT EXECUTED
20dbc: e59f009c ldr r0, [pc, #156] ; 20e60 <rtems_nvdisk_initialize+0x290><== NOT EXECUTED
20dc0: e3a01001 mov r1, #1 <== NOT EXECUTED
20dc4: e3a02054 mov r2, #84 ; 0x54 <== NOT EXECUTED
20dc8: e3a03000 mov r3, #0 <== NOT EXECUTED
20dcc: e58d4000 str r4, [sp] <== NOT EXECUTED
20dd0: ebffad06 bl c1f0 <rtems_semaphore_create> <== NOT EXECUTED
RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
RTEMS_INHERIT_PRIORITY, 0, &nvd->lock);
if (sc != RTEMS_SUCCESSFUL)
20dd4: e3500000 cmp r0, #0 <== NOT EXECUTED
20dd8: 1a000013 bne 20e2c <rtems_nvdisk_initialize+0x25c> <== NOT EXECUTED
sizeof (rtems_nvdisk));
if (!rtems_nvdisks)
return RTEMS_NO_MEMORY;
for (minor = 0; minor < rtems_nvdisk_configuration_size; minor++, c++)
20ddc: e59f1068 ldr r1, [pc, #104] ; 20e4c <rtems_nvdisk_initialize+0x27c><== NOT EXECUTED
20de0: e28d3014 add r3, sp, #20 <== NOT EXECUTED
20de4: e8931008 ldm r3, {r3, ip} <== NOT EXECUTED
20de8: e5912000 ldr r2, [r1] <== NOT EXECUTED
20dec: e2833001 add r3, r3, #1 <== NOT EXECUTED
20df0: e28cc028 add ip, ip, #40 ; 0x28 <== NOT EXECUTED
20df4: e1520003 cmp r2, r3 <== NOT EXECUTED
20df8: e58d3014 str r3, [sp, #20] <== NOT EXECUTED
20dfc: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
20e00: e2855014 add r5, r5, #20 <== NOT EXECUTED
20e04: 9a000004 bls 20e1c <rtems_nvdisk_initialize+0x24c> <== NOT EXECUTED
20e08: e59f1040 ldr r1, [pc, #64] ; 20e50 <rtems_nvdisk_initialize+0x280><== NOT EXECUTED
20e0c: e5913004 ldr r3, [r1, #4] <== NOT EXECUTED
20e10: eaffff8e b 20c50 <rtems_nvdisk_initialize+0x80> <== NOT EXECUTED
}
}
rtems_nvdisk_count = rtems_nvdisk_configuration_size;
return RTEMS_SUCCESSFUL;
20e14: e3a0601a mov r6, #26 <== NOT EXECUTED
20e18: eaffff72 b 20be8 <rtems_nvdisk_initialize+0x18> <== NOT EXECUTED
rtems_nvdisk_error ("disk lock create failed");
return sc;
}
}
rtems_nvdisk_count = rtems_nvdisk_configuration_size;
20e1c: e59f302c ldr r3, [pc, #44] ; 20e50 <rtems_nvdisk_initialize+0x280><== NOT EXECUTED
20e20: e3a06000 mov r6, #0 <== NOT EXECUTED
20e24: e5832000 str r2, [r3] <== NOT EXECUTED
return RTEMS_SUCCESSFUL;
20e28: eaffff6e b 20be8 <rtems_nvdisk_initialize+0x18> <== NOT EXECUTED
20e2c: e1a06000 mov r6, r0 <== NOT EXECUTED
sc = rtems_semaphore_create (rtems_build_name ('N', 'V', 'D', 'K'), 1,
RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
RTEMS_INHERIT_PRIORITY, 0, &nvd->lock);
if (sc != RTEMS_SUCCESSFUL)
{
rtems_nvdisk_error ("disk lock create failed");
20e30: e59f002c ldr r0, [pc, #44] ; 20e64 <rtems_nvdisk_initialize+0x294><== NOT EXECUTED
20e34: ebfffd80 bl 2043c <rtems_nvdisk_error> <== NOT EXECUTED
return sc;
20e38: eaffff6a b 20be8 <rtems_nvdisk_initialize+0x18> <== NOT EXECUTED
20e3c: e1a06000 mov r6, r0 <== NOT EXECUTED
sc = rtems_disk_create_phys(dev, c->block_size, blocks,
rtems_nvdisk_ioctl, NULL, name);
if (sc != RTEMS_SUCCESSFUL)
{
rtems_nvdisk_error ("disk create phy failed");
20e40: e59f0020 ldr r0, [pc, #32] ; 20e68 <rtems_nvdisk_initialize+0x298><== NOT EXECUTED
20e44: ebfffd7c bl 2043c <rtems_nvdisk_error> <== NOT EXECUTED
return sc;
20e48: eaffff66 b 20be8 <rtems_nvdisk_initialize+0x18> <== NOT EXECUTED
00020548 <rtems_nvdisk_ioctl>:
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
20548: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
dev_t dev = rtems_disk_get_device_identifier (dd);
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
rtems_blkdev_request* r = argp;
rtems_status_code sc;
if (minor >= rtems_nvdisk_count)
2054c: e59fc600 ldr ip, [pc, #1536] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
dev_t device
)
{
union __rtems_dev_t temp;
temp.device = device;
20550: e5903004 ldr r3, [r0, #4] <== NOT EXECUTED
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
20554: e1a05000 mov r5, r0 <== NOT EXECUTED
dev_t dev = rtems_disk_get_device_identifier (dd);
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
rtems_blkdev_request* r = argp;
rtems_status_code sc;
if (minor >= rtems_nvdisk_count)
20558: e59c0000 ldr r0, [ip] <== NOT EXECUTED
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
2055c: e24dd020 sub sp, sp, #32 <== NOT EXECUTED
dev_t dev = rtems_disk_get_device_identifier (dd);
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
rtems_blkdev_request* r = argp;
rtems_status_code sc;
if (minor >= rtems_nvdisk_count)
20560: e1500003 cmp r0, r3 <== NOT EXECUTED
* @param argp IOCTL argument.
* @retval The IOCTL return value
*/
static int
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
20564: e1a04001 mov r4, r1 <== NOT EXECUTED
20568: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
dev_t dev = rtems_disk_get_device_identifier (dd);
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
rtems_blkdev_request* r = argp;
rtems_status_code sc;
if (minor >= rtems_nvdisk_count)
2056c: 9a0000fd bls 20968 <rtems_nvdisk_ioctl+0x420> <== NOT EXECUTED
{
errno = ENODEV;
return -1;
}
if (rtems_nvdisks[minor].device_count == 0)
20570: e59fe5dc ldr lr, [pc, #1500] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20574: e0833103 add r3, r3, r3, lsl #2 <== NOT EXECUTED
20578: e59e2004 ldr r2, [lr, #4] <== NOT EXECUTED
2057c: e1a03183 lsl r3, r3, #3 <== NOT EXECUTED
20580: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
20584: e0823003 add r3, r2, r3 <== NOT EXECUTED
20588: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
2058c: e3530000 cmp r3, #0 <== NOT EXECUTED
20590: 0a0000f4 beq 20968 <rtems_nvdisk_ioctl+0x420> <== NOT EXECUTED
{
errno = ENODEV;
return -1;
}
errno = 0;
20594: eb008a95 bl 42ff0 <__errno> <== NOT EXECUTED
sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
20598: e59f15b4 ldr r1, [pc, #1460] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
2059c: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
205a0: e5912004 ldr r2, [r1, #4] <== NOT EXECUTED
{
errno = ENODEV;
return -1;
}
errno = 0;
205a4: e3a03000 mov r3, #0 <== NOT EXECUTED
sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
205a8: e082200c add r2, r2, ip <== NOT EXECUTED
{
errno = ENODEV;
return -1;
}
errno = 0;
205ac: e5803000 str r3, [r0] <== NOT EXECUTED
sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
205b0: e1a01003 mov r1, r3 <== NOT EXECUTED
205b4: e5920020 ldr r0, [r2, #32] <== NOT EXECUTED
205b8: e1a02003 mov r2, r3 <== NOT EXECUTED
205bc: ebffafc0 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
205c0: e250a000 subs sl, r0, #0 <== NOT EXECUTED
205c4: 0a000009 beq 205f0 <rtems_nvdisk_ioctl+0xa8> <== NOT EXECUTED
break;
}
sc = rtems_semaphore_release (rtems_nvdisks[minor].lock);
if (sc != RTEMS_SUCCESSFUL)
errno = EIO;
205c8: eb008a88 bl 42ff0 <__errno> <== NOT EXECUTED
205cc: e3a03005 mov r3, #5 <== NOT EXECUTED
205d0: e5803000 str r3, [r0] <== NOT EXECUTED
}
return errno == 0 ? 0 : -1;
205d4: eb008a85 bl 42ff0 <__errno> <== NOT EXECUTED
205d8: e5903000 ldr r3, [r0] <== NOT EXECUTED
205dc: e3530000 cmp r3, #0 <== NOT EXECUTED
205e0: 01a00003 moveq r0, r3 <== NOT EXECUTED
205e4: 13e00000 mvnne r0, #0 <== NOT EXECUTED
}
205e8: e28dd020 add sp, sp, #32 <== NOT EXECUTED
205ec: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
errno = EIO;
else
{
errno = 0;
205f0: eb008a7e bl 42ff0 <__errno> <== NOT EXECUTED
switch (req)
205f4: e3a03202 mov r3, #536870912 ; 0x20000000 <== NOT EXECUTED
205f8: e2833c42 add r3, r3, #16896 ; 0x4200 <== NOT EXECUTED
205fc: e2833082 add r3, r3, #130 ; 0x82 <== NOT EXECUTED
20600: e1540003 cmp r4, r3 <== NOT EXECUTED
sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
if (sc != RTEMS_SUCCESSFUL)
errno = EIO;
else
{
errno = 0;
20604: e580a000 str sl, [r0] <== NOT EXECUTED
switch (req)
20608: 0a000043 beq 2071c <rtems_nvdisk_ioctl+0x1d4> <== NOT EXECUTED
2060c: e3a03961 mov r3, #1589248 ; 0x184000 <== NOT EXECUTED
20610: e2833c02 add r3, r3, #512 ; 0x200 <== NOT EXECUTED
20614: e2833107 add r3, r3, #-1073741823 ; 0xc0000001 <== NOT EXECUTED
20618: e1540003 cmp r4, r3 <== NOT EXECUTED
2061c: 0a000045 beq 20738 <rtems_nvdisk_ioctl+0x1f0> <== NOT EXECUTED
20620: e3a03202 mov r3, #536870912 ; 0x20000000 <== NOT EXECUTED
20624: e2833c42 add r3, r3, #16896 ; 0x4200 <== NOT EXECUTED
20628: e2833080 add r3, r3, #128 ; 0x80 <== NOT EXECUTED
2062c: e1540003 cmp r4, r3 <== NOT EXECUTED
20630: 0a00000c beq 20668 <rtems_nvdisk_ioctl+0x120> <== NOT EXECUTED
case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
rtems_nvdisks[minor].info_level = (uintptr_t) argp;
break;
default:
rtems_blkdev_ioctl (dd, req, argp);
20634: e1a01004 mov r1, r4 <== NOT EXECUTED
20638: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
2063c: e1a00005 mov r0, r5 <== NOT EXECUTED
20640: ebff956f bl 5c04 <rtems_blkdev_ioctl> <== NOT EXECUTED
20644: e59f1508 ldr r1, [pc, #1288] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20648: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
2064c: e5913004 ldr r3, [r1, #4] <== NOT EXECUTED
20650: e0833002 add r3, r3, r2 <== NOT EXECUTED
break;
}
sc = rtems_semaphore_release (rtems_nvdisks[minor].lock);
20654: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
20658: ebffafe1 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
2065c: e3500000 cmp r0, #0 <== NOT EXECUTED
20660: 0affffdb beq 205d4 <rtems_nvdisk_ioctl+0x8c> <== NOT EXECUTED
20664: eaffffd7 b 205c8 <rtems_nvdisk_ioctl+0x80> <== NOT EXECUTED
break;
}
break;
case RTEMS_NVDISK_IOCTL_ERASE_DISK:
errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
20668: eb008a60 bl 42ff0 <__errno> <== NOT EXECUTED
2066c: e59f34e0 ldr r3, [pc, #1248] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20670: e59dc008 ldr ip, [sp, #8] <== NOT EXECUTED
20674: e5936004 ldr r6, [r3, #4] <== NOT EXECUTED
20678: e086600c add r6, r6, ip <== NOT EXECUTED
2067c: e1a0b000 mov fp, r0 <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "erase-disk");
#endif
for (device = 0; device < nvd->device_count; device++)
20680: e5960018 ldr r0, [r6, #24] <== NOT EXECUTED
20684: e3500000 cmp r0, #0 <== NOT EXECUTED
20688: 0a0000aa beq 20938 <rtems_nvdisk_ioctl+0x3f0> <== NOT EXECUTED
2068c: e1a0900a mov r9, sl <== NOT EXECUTED
20690: e28d701e add r7, sp, #30 <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
20694: e3a08002 mov r8, #2 <== NOT EXECUTED
rtems_nvdisk_info (nvd, "erase-disk");
#endif
for (device = 0; device < nvd->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
20698: e5963014 ldr r3, [r6, #20] <== NOT EXECUTED
2069c: e083400a add r4, r3, sl <== NOT EXECUTED
uint32_t page;
for (page = 0; page < (dc->pages - dc->pages_desc); page++)
206a0: e9940006 ldmib r4, {r1, r2} <== NOT EXECUTED
206a4: e1510002 cmp r1, r2 <== NOT EXECUTED
206a8: 0a00009e beq 20928 <rtems_nvdisk_ioctl+0x3e0> <== NOT EXECUTED
206ac: e3a05000 mov r5, #0 <== NOT EXECUTED
206b0: ea000004 b 206c8 <rtems_nvdisk_ioctl+0x180> <== NOT EXECUTED
206b4: e9940009 ldmib r4, {r0, r3} <== NOT EXECUTED
206b8: e0403003 sub r3, r0, r3 <== NOT EXECUTED
206bc: e1550003 cmp r5, r3 <== NOT EXECUTED
206c0: 2a000097 bcs 20924 <rtems_nvdisk_ioctl+0x3dc> <== NOT EXECUTED
206c4: e5963014 ldr r3, [r6, #20] <== NOT EXECUTED
{
int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff);
206c8: e5940000 ldr r0, [r4] <== NOT EXECUTED
* Get the descriptor for a device.
*/
static const rtems_nvdisk_device_desc*
rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device)
{
return nvd->devices[device].descriptor;
206cc: e0802100 add r2, r0, r0, lsl #2 <== NOT EXECUTED
206d0: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
206d4: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
uint32_t page;
for (page = 0; page < (dc->pages - dc->pages_desc); page++)
{
int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff);
206d8: e3e0e000 mvn lr, #0 <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
206dc: e8930006 ldm r3, {r1, r2} <== NOT EXECUTED
206e0: e593c00c ldr ip, [r3, #12] <== NOT EXECUTED
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
uint32_t page;
for (page = 0; page < (dc->pages - dc->pages_desc); page++)
{
int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff);
206e4: e1cde1be strh lr, [sp, #30] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
206e8: e1a03085 lsl r3, r5, #1 <== NOT EXECUTED
206ec: e88d0180 stm sp, {r7, r8} <== NOT EXECUTED
206f0: e1a0e00f mov lr, pc <== NOT EXECUTED
206f4: e59cf004 ldr pc, [ip, #4] <== NOT EXECUTED
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
uint32_t page;
for (page = 0; page < (dc->pages - dc->pages_desc); page++)
{
int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff);
if (ret)
206f8: e3500000 cmp r0, #0 <== NOT EXECUTED
for (device = 0; device < nvd->device_count; device++)
{
rtems_nvdisk_device_ctl* dc = &nvd->devices[device];
uint32_t page;
for (page = 0; page < (dc->pages - dc->pages_desc); page++)
206fc: e2855001 add r5, r5, #1 <== NOT EXECUTED
{
int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff);
if (ret)
20700: 0affffeb beq 206b4 <rtems_nvdisk_ioctl+0x16c> <== NOT EXECUTED
break;
}
break;
case RTEMS_NVDISK_IOCTL_ERASE_DISK:
errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
20704: e59f1448 ldr r1, [pc, #1096] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20708: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
2070c: e5913004 ldr r3, [r1, #4] <== NOT EXECUTED
20710: e58b0000 str r0, [fp] <== NOT EXECUTED
20714: e0833002 add r3, r3, r2 <== NOT EXECUTED
break;
20718: eaffffcd b 20654 <rtems_nvdisk_ioctl+0x10c> <== NOT EXECUTED
case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
rtems_nvdisks[minor].info_level = (uintptr_t) argp;
2071c: e59fc430 ldr ip, [pc, #1072] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20720: e59de008 ldr lr, [sp, #8] <== NOT EXECUTED
20724: e59c3004 ldr r3, [ip, #4] <== NOT EXECUTED
20728: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
2072c: e083300e add r3, r3, lr <== NOT EXECUTED
20730: e5830024 str r0, [r3, #36] ; 0x24 <== NOT EXECUTED
break;
20734: eaffffc6 b 20654 <rtems_nvdisk_ioctl+0x10c> <== NOT EXECUTED
{
errno = 0;
switch (req)
{
case RTEMS_BLKIO_REQUEST:
switch (r->req)
20738: e59de010 ldr lr, [sp, #16] <== NOT EXECUTED
2073c: e59e4000 ldr r4, [lr] <== NOT EXECUTED
20740: e3540000 cmp r4, #0 <== NOT EXECUTED
20744: 1a00007d bne 20940 <rtems_nvdisk_ioctl+0x3f8> <== NOT EXECUTED
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
20748: eb008a28 bl 42ff0 <__errno> <== NOT EXECUTED
2074c: e58d0018 str r0, [sp, #24] <== NOT EXECUTED
20750: e59f03fc ldr r0, [pc, #1020] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20754: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
20758: e5906004 ldr r6, [r0, #4] <== NOT EXECUTED
ret = rtems_nvdisk_read_checksum (nvd, dc->device, page, &crc);
if (ret)
return ret;
if (crc == 0xffff)
2075c: e3a03801 mov r3, #65536 ; 0x10000 <== NOT EXECUTED
{
case RTEMS_BLKIO_REQUEST:
switch (r->req)
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
20760: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
20764: e3a0c001 mov ip, #1 <== NOT EXECUTED
ret = rtems_nvdisk_read_checksum (nvd, dc->device, page, &crc);
if (ret)
return ret;
if (crc == 0xffff)
20768: e2433001 sub r3, r3, #1 <== NOT EXECUTED
{
case RTEMS_BLKIO_REQUEST:
switch (r->req)
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
2076c: e5924010 ldr r4, [r2, #16] <== NOT EXECUTED
20770: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
20774: e0866001 add r6, r6, r1 <== NOT EXECUTED
20778: e2828028 add r8, r2, #40 ; 0x28 <== NOT EXECUTED
2077c: e1a0b003 mov fp, r3 <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "read: blocks=%d", req->bufnum);
#endif
for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++)
20780: e59d0014 ldr r0, [sp, #20] <== NOT EXECUTED
20784: e2403001 sub r3, r0, #1 <== NOT EXECUTED
20788: e1530004 cmp r3, r4 <== NOT EXECUTED
2078c: 2a0000eb bcs 20b40 <rtems_nvdisk_ioctl+0x5f8> <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
20790: e518000c ldr r0, [r8, #-12] <== NOT EXECUTED
20794: e596100c ldr r1, [r6, #12] <== NOT EXECUTED
20798: eb00e9d2 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
2079c: e3500000 cmp r0, #0 <== NOT EXECUTED
207a0: e58d000c str r0, [sp, #12] <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
207a4: e5185008 ldr r5, [r8, #-8] <== NOT EXECUTED
for (b = 0; b < nvb; b++, data += nvd->block_size)
207a8: 0a000075 beq 20984 <rtems_nvdisk_ioctl+0x43c> <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
207ac: e3a09000 mov r9, #0 <== NOT EXECUTED
for (b = 0; b < nvb; b++, data += nvd->block_size)
{
ret = rtems_nvdisk_read_block (nvd, sg->block + b, data);
207b0: e5187010 ldr r7, [r8, #-16] <== NOT EXECUTED
207b4: e0897007 add r7, r9, r7 <== NOT EXECUTED
uint32_t page;
uint16_t crc;
uint16_t cs;
int ret;
dc = rtems_nvdisk_get_device (nvd, block);
207b8: e1a00006 mov r0, r6 <== NOT EXECUTED
207bc: e1a01007 mov r1, r7 <== NOT EXECUTED
207c0: ebffff3d bl 204bc <rtems_nvdisk_get_device> <== NOT EXECUTED
if (!dc)
207c4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
207c8: 0a00003b beq 208bc <rtems_nvdisk_ioctl+0x374> <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, " read-block:%d=>%02d-%03d, cs:%04x",
block, dc->device, page, crc);
#endif
ret = rtems_nvdisk_read_checksum (nvd, dc->device, page, &crc);
207cc: e5940000 ldr r0, [r4] <== NOT EXECUTED
* Get the descriptor for a device.
*/
static const rtems_nvdisk_device_desc*
rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device)
{
return nvd->devices[device].descriptor;
207d0: e5963014 ldr r3, [r6, #20] <== NOT EXECUTED
207d4: e0802100 add r2, r0, r0, lsl #2 <== NOT EXECUTED
207d8: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
207dc: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc,
uint32_t block)
{
return block - dc->block_base;
207e0: e594a00c ldr sl, [r4, #12] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-read: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->read (device, dd->flags, dd->base, offset, buffer, size);
207e4: e8930006 ldm r3, {r1, r2} <== NOT EXECUTED
207e8: e593c00c ldr ip, [r3, #12] <== NOT EXECUTED
207ec: e28de01e add lr, sp, #30 <== NOT EXECUTED
207f0: e3a03002 mov r3, #2 <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc,
uint32_t block)
{
return block - dc->block_base;
207f4: e06aa007 rsb sl, sl, r7 <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-read: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->read (device, dd->flags, dd->base, offset, buffer, size);
207f8: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
207fc: e58de000 str lr, [sp] <== NOT EXECUTED
20800: e1a0308a lsl r3, sl, #1 <== NOT EXECUTED
20804: e1a0e00f mov lr, pc <== NOT EXECUTED
20808: e59cf000 ldr pc, [ip] <== NOT EXECUTED
block, dc->device, page, crc);
#endif
ret = rtems_nvdisk_read_checksum (nvd, dc->device, page, &crc);
if (ret)
2080c: e2501000 subs r1, r0, #0 <== NOT EXECUTED
20810: 1a000037 bne 208f4 <rtems_nvdisk_ioctl+0x3ac> <== NOT EXECUTED
return ret;
if (crc == 0xffff)
20814: e1dd31be ldrh r3, [sp, #30] <== NOT EXECUTED
20818: e153000b cmp r3, fp <== NOT EXECUTED
2081c: 0a000036 beq 208fc <rtems_nvdisk_ioctl+0x3b4> <== NOT EXECUTED
#endif
memset (buffer, 0, nvd->block_size);
return 0;
}
ret = rtems_nvdisk_read_page (nvd, dc->device, page + dc->pages_desc, buffer);
20820: e5940000 ldr r0, [r4] <== NOT EXECUTED
* Get the descriptor for a device.
*/
static const rtems_nvdisk_device_desc*
rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device)
{
return nvd->devices[device].descriptor;
20824: e5963014 ldr r3, [r6, #20] <== NOT EXECUTED
20828: e0802100 add r2, r0, r0, lsl #2 <== NOT EXECUTED
2082c: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
20830: e593c010 ldr ip, [r3, #16] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-read: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->read (device, dd->flags, dd->base, offset, buffer, size);
20834: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
rtems_nvdisk_read_page (const rtems_nvdisk* nvd,
uint32_t device,
uint32_t page,
void* buffer)
{
return rtems_nvdisk_device_read (nvd, device,
20838: e596e00c ldr lr, [r6, #12] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-read: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->read (device, dd->flags, dd->base, offset, buffer, size);
2083c: e08a3003 add r3, sl, r3 <== NOT EXECUTED
20840: e89c0006 ldm ip, {r1, r2} <== NOT EXECUTED
20844: e003039e mul r3, lr, r3 <== NOT EXECUTED
20848: e59cc00c ldr ip, [ip, #12] <== NOT EXECUTED
2084c: e88d4020 stm sp, {r5, lr} <== NOT EXECUTED
20850: e1a0e00f mov lr, pc <== NOT EXECUTED
20854: e59cf000 ldr pc, [ip] <== NOT EXECUTED
return 0;
}
ret = rtems_nvdisk_read_page (nvd, dc->device, page + dc->pages_desc, buffer);
if (ret)
20858: e2501000 subs r1, r0, #0 <== NOT EXECUTED
2085c: 1a000024 bne 208f4 <rtems_nvdisk_ioctl+0x3ac> <== NOT EXECUTED
return ret;
cs = rtems_nvdisk_page_checksum (buffer, nvd->block_size);
20860: e596c00c ldr ip, [r6, #12] <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20864: e35c0000 cmp ip, #0 <== NOT EXECUTED
20868: 03a02801 moveq r2, #65536 ; 0x10000 <== NOT EXECUTED
2086c: 02422001 subeq r2, r2, #1 <== NOT EXECUTED
20870: 0a00000b beq 208a4 <rtems_nvdisk_ioctl+0x35c> <== NOT EXECUTED
20874: e59fe2d8 ldr lr, [pc, #728] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20878: e3a02801 mov r2, #65536 ; 0x10000 <== NOT EXECUTED
2087c: e59e3008 ldr r3, [lr, #8] <== NOT EXECUTED
20880: e2422001 sub r2, r2, #1 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
20884: e7d50001 ldrb r0, [r5, r1] <== NOT EXECUTED
20888: e0222000 eor r2, r2, r0 <== NOT EXECUTED
2088c: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20890: e2811001 add r1, r1, #1 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
20894: e1a02082 lsl r2, r2, #1 <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20898: e15c0001 cmp ip, r1 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
2089c: e19320b2 ldrh r2, [r3, r2] <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
208a0: 8afffff7 bhi 20884 <rtems_nvdisk_ioctl+0x33c> <== NOT EXECUTED
if (ret)
return ret;
cs = rtems_nvdisk_page_checksum (buffer, nvd->block_size);
if (cs != crc)
208a4: e1dd31be ldrh r3, [sp, #30] <== NOT EXECUTED
208a8: e1520003 cmp r2, r3 <== NOT EXECUTED
208ac: 0a000016 beq 2090c <rtems_nvdisk_ioctl+0x3c4> <== NOT EXECUTED
{
rtems_nvdisk_error ("read-block: crc failure: %d: buffer:%04x page:%04x",
208b0: e1a01007 mov r1, r7 <== NOT EXECUTED
208b4: e59f029c ldr r0, [pc, #668] ; 20b58 <rtems_nvdisk_ioctl+0x610><== NOT EXECUTED
208b8: ebfffedf bl 2043c <rtems_nvdisk_error> <== NOT EXECUTED
208bc: e3a0b005 mov fp, #5 <== NOT EXECUTED
208c0: e3a0101b mov r1, #27 <== NOT EXECUTED
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
208c4: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
req->req_done (req->done_arg, req->status);
208c8: e5920008 ldr r0, [r2, #8] <== NOT EXECUTED
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
208cc: e582100c str r1, [r2, #12] <== NOT EXECUTED
req->req_done (req->done_arg, req->status);
208d0: e1a0e00f mov lr, pc <== NOT EXECUTED
208d4: e592f004 ldr pc, [r2, #4] <== NOT EXECUTED
{
case RTEMS_BLKIO_REQUEST:
switch (r->req)
{
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
208d8: e59fc274 ldr ip, [pc, #628] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
208dc: e59de018 ldr lr, [sp, #24] <== NOT EXECUTED
208e0: e59c3004 ldr r3, [ip, #4] <== NOT EXECUTED
208e4: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
208e8: e58eb000 str fp, [lr] <== NOT EXECUTED
208ec: e0833000 add r3, r3, r0 <== NOT EXECUTED
break;
208f0: eaffff57 b 20654 <rtems_nvdisk_ioctl+0x10c> <== NOT EXECUTED
208f4: e1a0b001 mov fp, r1 <== NOT EXECUTED
208f8: eafffff0 b 208c0 <rtems_nvdisk_ioctl+0x378> <== NOT EXECUTED
if (crc == 0xffff)
{
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_warning (nvd, "read-block: crc not set: %d", block);
#endif
memset (buffer, 0, nvd->block_size);
208fc: e1a00005 mov r0, r5 <== NOT EXECUTED
20900: e596200c ldr r2, [r6, #12] <== NOT EXECUTED
20904: eb0096f0 bl 464cc <memset> <== NOT EXECUTED
20908: e596c00c ldr ip, [r6, #12] <== NOT EXECUTED
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
2090c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
20910: e2899001 add r9, r9, #1 <== NOT EXECUTED
20914: e1530009 cmp r3, r9 <== NOT EXECUTED
20918: 9a000017 bls 2097c <rtems_nvdisk_ioctl+0x434> <== NOT EXECUTED
2091c: e085500c add r5, r5, ip <== NOT EXECUTED
20920: eaffffa2 b 207b0 <rtems_nvdisk_ioctl+0x268> <== NOT EXECUTED
20924: e5960018 ldr r0, [r6, #24] <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "erase-disk");
#endif
for (device = 0; device < nvd->device_count; device++)
20928: e2899001 add r9, r9, #1 <== NOT EXECUTED
2092c: e1590000 cmp r9, r0 <== NOT EXECUTED
20930: e28aa014 add sl, sl, #20 <== NOT EXECUTED
20934: 3affff57 bcc 20698 <rtems_nvdisk_ioctl+0x150> <== NOT EXECUTED
20938: e3a00000 mov r0, #0 <== NOT EXECUTED
2093c: eaffff70 b 20704 <rtems_nvdisk_ioctl+0x1bc> <== NOT EXECUTED
{
errno = 0;
switch (req)
{
case RTEMS_BLKIO_REQUEST:
switch (r->req)
20940: e3540001 cmp r4, #1 <== NOT EXECUTED
20944: 0a000013 beq 20998 <rtems_nvdisk_ioctl+0x450> <== NOT EXECUTED
case RTEMS_BLKDEV_REQ_WRITE:
errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
break;
default:
errno = EINVAL;
20948: eb0089a8 bl 42ff0 <__errno> <== NOT EXECUTED
2094c: e59f1200 ldr r1, [pc, #512] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20950: e3a02016 mov r2, #22 <== NOT EXECUTED
20954: e5913004 ldr r3, [r1, #4] <== NOT EXECUTED
20958: e5802000 str r2, [r0] <== NOT EXECUTED
2095c: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
20960: e0833002 add r3, r3, r2 <== NOT EXECUTED
20964: eaffff3a b 20654 <rtems_nvdisk_ioctl+0x10c> <== NOT EXECUTED
return -1;
}
if (rtems_nvdisks[minor].device_count == 0)
{
errno = ENODEV;
20968: eb0089a0 bl 42ff0 <__errno> <== NOT EXECUTED
2096c: e3a03013 mov r3, #19 <== NOT EXECUTED
20970: e5803000 str r3, [r0] <== NOT EXECUTED
20974: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
20978: eaffff1a b 205e8 <rtems_nvdisk_ioctl+0xa0> <== NOT EXECUTED
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
2097c: e59dc010 ldr ip, [sp, #16] <== NOT EXECUTED
20980: e59c4010 ldr r4, [ip, #16] <== NOT EXECUTED
20984: e59de014 ldr lr, [sp, #20] <== NOT EXECUTED
20988: e28ee001 add lr, lr, #1 <== NOT EXECUTED
2098c: e2888010 add r8, r8, #16 <== NOT EXECUTED
20990: e58de014 str lr, [sp, #20] <== NOT EXECUTED
20994: eaffff79 b 20780 <rtems_nvdisk_ioctl+0x238> <== NOT EXECUTED
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
break;
case RTEMS_BLKDEV_REQ_WRITE:
errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
20998: eb008994 bl 42ff0 <__errno> <== NOT EXECUTED
2099c: e59f11b0 ldr r1, [pc, #432] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
209a0: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
209a4: e5917004 ldr r7, [r1, #4] <== NOT EXECUTED
209a8: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
209ac: e58d400c str r4, [sp, #12] <== NOT EXECUTED
209b0: e58d0014 str r0, [sp, #20] <== NOT EXECUTED
209b4: e5934010 ldr r4, [r3, #16] <== NOT EXECUTED
209b8: e0877002 add r7, r7, r2 <== NOT EXECUTED
209bc: e283a028 add sl, r3, #40 ; 0x28 <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "write: blocks=%d", req->bufnum);
#endif
for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++)
209c0: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
209c4: e2413001 sub r3, r1, #1 <== NOT EXECUTED
209c8: e1540003 cmp r4, r3 <== NOT EXECUTED
209cc: 9a00005e bls 20b4c <rtems_nvdisk_ioctl+0x604> <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
209d0: e51a000c ldr r0, [sl, #-12] <== NOT EXECUTED
209d4: e597100c ldr r1, [r7, #12] <== NOT EXECUTED
209d8: eb00e942 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
209dc: e250b000 subs fp, r0, #0 <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
209e0: e51a5008 ldr r5, [sl, #-8] <== NOT EXECUTED
for (b = 0; b < nvb; b++, data += nvd->block_size)
209e4: 0a000050 beq 20b2c <rtems_nvdisk_ioctl+0x5e4> <== NOT EXECUTED
{
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
209e8: e3a08000 mov r8, #0 <== NOT EXECUTED
for (b = 0; b < nvb; b++, data += nvd->block_size)
{
ret = rtems_nvdisk_write_block (nvd, sg->block + b, data);
209ec: e51a9010 ldr r9, [sl, #-16] <== NOT EXECUTED
209f0: e0889009 add r9, r8, r9 <== NOT EXECUTED
rtems_nvdisk_device_ctl* dc;
uint32_t page;
uint16_t cs;
int ret;
dc = rtems_nvdisk_get_device (nvd, block);
209f4: e1a00007 mov r0, r7 <== NOT EXECUTED
209f8: e1a01009 mov r1, r9 <== NOT EXECUTED
209fc: ebfffeae bl 204bc <rtems_nvdisk_get_device> <== NOT EXECUTED
if (!dc)
20a00: e2506000 subs r6, r0, #0 <== NOT EXECUTED
20a04: 0a000022 beq 20a94 <rtems_nvdisk_ioctl+0x54c> <== NOT EXECUTED
return EIO;
page = rtems_nvdisk_get_page (dc, block);
cs = rtems_nvdisk_page_checksum (buffer, nvd->block_size);
20a08: e597e00c ldr lr, [r7, #12] <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc,
uint32_t block)
{
return block - dc->block_base;
20a0c: e596300c ldr r3, [r6, #12] <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20a10: e35e0000 cmp lr, #0 <== NOT EXECUTED
20a14: 03a04801 moveq r4, #65536 ; 0x10000 <== NOT EXECUTED
*/
static uint32_t
rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc,
uint32_t block)
{
return block - dc->block_base;
20a18: e0639009 rsb r9, r3, r9 <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20a1c: 02444001 subeq r4, r4, #1 <== NOT EXECUTED
20a20: 0a00000c beq 20a58 <rtems_nvdisk_ioctl+0x510> <== NOT EXECUTED
20a24: e59fc128 ldr ip, [pc, #296] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20a28: e3a04801 mov r4, #65536 ; 0x10000 <== NOT EXECUTED
20a2c: e59c1008 ldr r1, [ip, #8] <== NOT EXECUTED
20a30: e2444001 sub r4, r4, #1 <== NOT EXECUTED
20a34: e3a03000 mov r3, #0 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
20a38: e7d52003 ldrb r2, [r5, r3] <== NOT EXECUTED
20a3c: e0242002 eor r2, r4, r2 <== NOT EXECUTED
20a40: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20a44: e2833001 add r3, r3, #1 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
20a48: e1a02082 lsl r2, r2, #1 <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20a4c: e15e0003 cmp lr, r3 <== NOT EXECUTED
cs = rtems_nvdisk_calc_crc16 (cs, *buffer);
20a50: e19140b2 ldrh r4, [r1, r2] <== NOT EXECUTED
rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size)
{
uint16_t cs = 0xffff;
uint32_t i;
for (i = 0; i < page_size; i++, buffer++)
20a54: 8afffff7 bhi 20a38 <rtems_nvdisk_ioctl+0x4f0> <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, " write-block:%d=>%02d-%03d", block, dc->device, page);
#endif
ret = rtems_nvdisk_write_page (nvd, dc->device, page + dc->pages_desc, buffer);
20a58: e5960000 ldr r0, [r6] <== NOT EXECUTED
* Get the descriptor for a device.
*/
static const rtems_nvdisk_device_desc*
rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device)
{
return nvd->devices[device].descriptor;
20a5c: e5973014 ldr r3, [r7, #20] <== NOT EXECUTED
20a60: e0802100 add r2, r0, r0, lsl #2 <== NOT EXECUTED
20a64: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
20a68: e593c010 ldr ip, [r3, #16] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
20a6c: e5963008 ldr r3, [r6, #8] <== NOT EXECUTED
20a70: e0893003 add r3, r9, r3 <== NOT EXECUTED
20a74: e89c0006 ldm ip, {r1, r2} <== NOT EXECUTED
20a78: e003039e mul r3, lr, r3 <== NOT EXECUTED
20a7c: e59cc00c ldr ip, [ip, #12] <== NOT EXECUTED
20a80: e88d4020 stm sp, {r5, lr} <== NOT EXECUTED
20a84: e1a0e00f mov lr, pc <== NOT EXECUTED
20a88: e59cf004 ldr pc, [ip, #4] <== NOT EXECUTED
rtems_nvdisk_info (nvd, " write-block:%d=>%02d-%03d", block, dc->device, page);
#endif
ret = rtems_nvdisk_write_page (nvd, dc->device, page + dc->pages_desc, buffer);
if (ret)
20a8c: e3500000 cmp r0, #0 <== NOT EXECUTED
20a90: 0a00000d beq 20acc <rtems_nvdisk_ioctl+0x584> <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "write: blocks=%d", req->bufnum);
#endif
for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++)
20a94: e3a0101b mov r1, #27 <== NOT EXECUTED
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
20a98: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
req->req_done (req->done_arg, req->status);
20a9c: e5920008 ldr r0, [r2, #8] <== NOT EXECUTED
if (ret)
break;
}
}
req->status = ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL;
20aa0: e582100c str r1, [r2, #12] <== NOT EXECUTED
req->req_done (req->done_arg, req->status);
20aa4: e1a0e00f mov lr, pc <== NOT EXECUTED
20aa8: e592f004 ldr pc, [r2, #4] <== NOT EXECUTED
case RTEMS_BLKDEV_REQ_READ:
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
break;
case RTEMS_BLKDEV_REQ_WRITE:
errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
20aac: e59fc0a0 ldr ip, [pc, #160] ; 20b54 <rtems_nvdisk_ioctl+0x60c><== NOT EXECUTED
20ab0: e59de014 ldr lr, [sp, #20] <== NOT EXECUTED
20ab4: e59c3004 ldr r3, [ip, #4] <== NOT EXECUTED
20ab8: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
20abc: e3a02000 mov r2, #0 <== NOT EXECUTED
20ac0: e58e2000 str r2, [lr] <== NOT EXECUTED
20ac4: e0833000 add r3, r3, r0 <== NOT EXECUTED
break;
20ac8: eafffee1 b 20654 <rtems_nvdisk_ioctl+0x10c> <== NOT EXECUTED
ret = rtems_nvdisk_write_page (nvd, dc->device, page + dc->pages_desc, buffer);
if (ret)
return ret;
return rtems_nvdisk_write_checksum (nvd, dc->device, page, cs);
20acc: e5960000 ldr r0, [r6] <== NOT EXECUTED
* Get the descriptor for a device.
*/
static const rtems_nvdisk_device_desc*
rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device)
{
return nvd->devices[device].descriptor;
20ad0: e5973014 ldr r3, [r7, #20] <== NOT EXECUTED
20ad4: e0802100 add r2, r0, r0, lsl #2 <== NOT EXECUTED
20ad8: e0833102 add r3, r3, r2, lsl #2 <== NOT EXECUTED
20adc: e593c010 ldr ip, [r3, #16] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
20ae0: e28de01e add lr, sp, #30 <== NOT EXECUTED
20ae4: e89c0006 ldm ip, {r1, r2} <== NOT EXECUTED
20ae8: e59cc00c ldr ip, [ip, #12] <== NOT EXECUTED
20aec: e58de000 str lr, [sp] <== NOT EXECUTED
20af0: e3a0e002 mov lr, #2 <== NOT EXECUTED
ret = rtems_nvdisk_write_page (nvd, dc->device, page + dc->pages_desc, buffer);
if (ret)
return ret;
return rtems_nvdisk_write_checksum (nvd, dc->device, page, cs);
20af4: e1cd41be strh r4, [sp, #30] <== NOT EXECUTED
ops = nvd->devices[device].descriptor->nv_ops;
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d",
device, offset, size);
#endif
return ops->write (device, dd->flags, dd->base, offset, buffer, size);
20af8: e1a03089 lsl r3, r9, #1 <== NOT EXECUTED
20afc: e58de004 str lr, [sp, #4] <== NOT EXECUTED
20b00: e1a0e00f mov lr, pc <== NOT EXECUTED
20b04: e59cf004 ldr pc, [ip, #4] <== NOT EXECUTED
nvb = sg->length / nvd->block_size;
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
{
ret = rtems_nvdisk_write_block (nvd, sg->block + b, data);
if (ret)
20b08: e3500000 cmp r0, #0 <== NOT EXECUTED
20b0c: 1affffe0 bne 20a94 <rtems_nvdisk_ioctl+0x54c> <== NOT EXECUTED
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
20b10: e2888001 add r8, r8, #1 <== NOT EXECUTED
20b14: e15b0008 cmp fp, r8 <== NOT EXECUTED
20b18: e597300c ldr r3, [r7, #12] <== NOT EXECUTED
20b1c: 80855003 addhi r5, r5, r3 <== NOT EXECUTED
20b20: 8affffb1 bhi 209ec <rtems_nvdisk_ioctl+0x4a4> <== NOT EXECUTED
20b24: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
20b28: e5904010 ldr r4, [r0, #16] <== NOT EXECUTED
uint8_t* data;
uint32_t nvb;
uint32_t b;
nvb = sg->length / nvd->block_size;
data = sg->buffer;
for (b = 0; b < nvb; b++, data += nvd->block_size)
20b2c: e59d000c ldr r0, [sp, #12] <== NOT EXECUTED
20b30: e2800001 add r0, r0, #1 <== NOT EXECUTED
20b34: e28aa010 add sl, sl, #16 <== NOT EXECUTED
20b38: e58d000c str r0, [sp, #12] <== NOT EXECUTED
20b3c: eaffff9f b 209c0 <rtems_nvdisk_ioctl+0x478> <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "read: blocks=%d", req->bufnum);
#endif
for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++)
20b40: e3a0b000 mov fp, #0 <== NOT EXECUTED
20b44: e1a0100b mov r1, fp <== NOT EXECUTED
20b48: eaffff5d b 208c4 <rtems_nvdisk_ioctl+0x37c> <== NOT EXECUTED
#if RTEMS_NVDISK_TRACE
rtems_nvdisk_info (nvd, "write: blocks=%d", req->bufnum);
#endif
for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++)
20b4c: e3a01000 mov r1, #0 <== NOT EXECUTED
20b50: eaffffd0 b 20a98 <rtems_nvdisk_ioctl+0x550> <== NOT EXECUTED
00020ea4 <rtems_nvdisk_sram_read>:
uint32_t flags __attribute__((unused)),
void* base,
uint32_t offset,
void* buffer,
size_t size)
{
20ea4: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
memcpy (buffer, (base + offset), size);
20ea8: e0821003 add r1, r2, r3 <== NOT EXECUTED
20eac: e99d0005 ldmib sp, {r0, r2} <== NOT EXECUTED
20eb0: eb0094fe bl 462b0 <memcpy> <== NOT EXECUTED
return 0;
}
20eb4: e3a00000 mov r0, #0 <== NOT EXECUTED
20eb8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00020e6c <rtems_nvdisk_sram_verify>:
uint32_t flags __attribute__((unused)),
void* base,
uint32_t offset,
const void* buffer,
size_t size)
{
20e6c: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
return memcmp ((base + offset), buffer, size) == 0 ? 0 : EIO;
20e70: e0820003 add r0, r2, r3 <== NOT EXECUTED
20e74: e99d0006 ldmib sp, {r1, r2} <== NOT EXECUTED
20e78: eb0094e2 bl 46208 <memcmp> <== NOT EXECUTED
}
20e7c: e3500000 cmp r0, #0 <== NOT EXECUTED
20e80: 13a00005 movne r0, #5 <== NOT EXECUTED
20e84: 03a00000 moveq r0, #0 <== NOT EXECUTED
20e88: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00020e8c <rtems_nvdisk_sram_write>:
uint32_t flags __attribute__((unused)),
void* base,
uint32_t offset,
const void* buffer,
size_t size)
{
20e8c: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
memcpy ((base + offset), buffer, size);
20e90: e0820003 add r0, r2, r3 <== NOT EXECUTED
20e94: e99d0006 ldmib sp, {r1, r2} <== NOT EXECUTED
20e98: eb009504 bl 462b0 <memcpy> <== NOT EXECUTED
return 0;
}
20e9c: e3a00000 mov r0, #0 <== NOT EXECUTED
20ea0: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00006d0c <rtems_panic>:
void rtems_panic(
const char *printf_format,
...
)
{
6d0c: e92d000f push {r0, r1, r2, r3} <== NOT EXECUTED
6d10: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
6d14: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
va_list arglist;
va_start(arglist, printf_format);
6d18: e28d300c add r3, sp, #12 <== NOT EXECUTED
(void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist);
6d1c: e1a02003 mov r2, r3 <== NOT EXECUTED
6d20: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
6d24: e3a00202 mov r0, #536870912 ; 0x20000000 <== NOT EXECUTED
...
)
{
va_list arglist;
va_start(arglist, printf_format);
6d28: e58d3000 str r3, [sp] <== NOT EXECUTED
(void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist);
6d2c: ebffff8d bl 6b68 <rtems_verror> <== NOT EXECUTED
va_end(arglist);
}
6d30: e28dd004 add sp, sp, #4 <== NOT EXECUTED
6d34: e49de004 pop {lr} ; (ldr lr, [sp], #4) <== NOT EXECUTED
6d38: e28dd010 add sp, sp, #16 <== NOT EXECUTED
6d3c: e12fff1e bx lr <== NOT EXECUTED
0000907c <rtems_pipe_initialize>:
/*
* Initialization of FIFO/pipe module.
*/
void rtems_pipe_initialize (void)
{
907c: e52de004 push {lr} ; (str lr, [sp, #-4]!)
if (!rtems_pipe_configured)
9080: e59f3054 ldr r3, [pc, #84] ; 90dc <rtems_pipe_initialize+0x60>
9084: e5d33000 ldrb r3, [r3]
9088: e3530000 cmp r3, #0
/*
* Initialization of FIFO/pipe module.
*/
void rtems_pipe_initialize (void)
{
908c: e24dd004 sub sp, sp, #4
if (!rtems_pipe_configured)
9090: 0a000003 beq 90a4 <rtems_pipe_initialize+0x28>
return;
if (rtems_pipe_semaphore)
9094: e59fc044 ldr ip, [pc, #68] ; 90e0 <rtems_pipe_initialize+0x64><== NOT EXECUTED
9098: e59c3000 ldr r3, [ip] <== NOT EXECUTED
909c: e3530000 cmp r3, #0 <== NOT EXECUTED
90a0: 0a000001 beq 90ac <rtems_pipe_initialize+0x30> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
rtems_interval now;
now = rtems_clock_get_ticks_since_boot();
rtems_pipe_no = now;
}
90a4: e28dd004 add sp, sp, #4
90a8: e8bd8000 pop {pc}
if (rtems_pipe_semaphore)
return;
rtems_status_code sc;
sc = rtems_semaphore_create(
90ac: e59f0030 ldr r0, [pc, #48] ; 90e4 <rtems_pipe_initialize+0x68><== NOT EXECUTED
90b0: e3a01001 mov r1, #1 <== NOT EXECUTED
90b4: e3a02054 mov r2, #84 ; 0x54 <== NOT EXECUTED
90b8: e58dc000 str ip, [sp] <== NOT EXECUTED
90bc: ebfff11f bl 5540 <rtems_semaphore_create> <== NOT EXECUTED
rtems_build_name ('P', 'I', 'P', 'E'), 1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY, &rtems_pipe_semaphore);
if (sc != RTEMS_SUCCESSFUL)
90c0: e3500000 cmp r0, #0 <== NOT EXECUTED
90c4: 1a000003 bne 90d8 <rtems_pipe_initialize+0x5c> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
rtems_interval now;
now = rtems_clock_get_ticks_since_boot();
90c8: ebfff013 bl 511c <rtems_clock_get_ticks_since_boot> <== NOT EXECUTED
rtems_pipe_no = now;
90cc: e59f3014 ldr r3, [pc, #20] ; 90e8 <rtems_pipe_initialize+0x6c><== NOT EXECUTED
90d0: e1c300b0 strh r0, [r3] <== NOT EXECUTED
90d4: eafffff2 b 90a4 <rtems_pipe_initialize+0x28> <== NOT EXECUTED
sc = rtems_semaphore_create(
rtems_build_name ('P', 'I', 'P', 'E'), 1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY, &rtems_pipe_semaphore);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
90d8: ebfff340 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00042260 <rtems_rfs_bitmap_close>:
return rtems_rfs_bitmap_create_search (control);
}
int
rtems_rfs_bitmap_close (rtems_rfs_bitmap_control* control)
{
42260: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
free (control->search_bits);
42264: e5900014 ldr r0, [r0, #20] <== NOT EXECUTED
42268: ebff16c0 bl 7d70 <free> <== NOT EXECUTED
return 0;
}
4226c: e3a00000 mov r0, #0 <== NOT EXECUTED
42270: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
000422c4 <rtems_rfs_bitmap_create_search>:
return 0;
}
int
rtems_rfs_bitmap_create_search (rtems_rfs_bitmap_control* control)
{
422c4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
422c8: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
size_t size;
rtems_rfs_bitmap_bit bit;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
422cc: e1a0100d mov r1, sp <== NOT EXECUTED
return 0;
}
int
rtems_rfs_bitmap_create_search (rtems_rfs_bitmap_control* control)
{
422d0: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
size_t size;
rtems_rfs_bitmap_bit bit;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
422d4: ebffffe6 bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
422d8: e3500000 cmp r0, #0 <== NOT EXECUTED
422dc: da000001 ble 422e8 <rtems_rfs_bitmap_create_search+0x24> <== NOT EXECUTED
bit++;
map++;
}
return 0;
}
422e0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
422e4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
if (rc > 0)
return rc;
control->free = 0;
search_map = control->search_bits;
size = control->size;
422e8: e594000c ldr r0, [r4, #12] <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
control->free = 0;
search_map = control->search_bits;
422ec: e594b014 ldr fp, [r4, #20] <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
control->free = 0;
422f0: e3a06000 mov r6, #0 <== NOT EXECUTED
search_map = control->search_bits;
size = control->size;
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
422f4: e3e09000 mvn r9, #0 <== NOT EXECUTED
while (size)
422f8: e3500000 cmp r0, #0 <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
control->free = 0;
422fc: e5846010 str r6, [r4, #16] <== NOT EXECUTED
search_map = control->search_bits;
size = control->size;
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42300: e58b9000 str r9, [fp] <== NOT EXECUTED
while (size)
42304: 0a00001d beq 42380 <rtems_rfs_bitmap_create_search+0xbc> <== NOT EXECUTED
42308: e59da000 ldr sl, [sp] <== NOT EXECUTED
4230c: e1a07006 mov r7, r6 <== NOT EXECUTED
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
if (!rtems_rfs_bitmap_test (bits, b))
42310: e3a0c001 mov ip, #1 <== NOT EXECUTED
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
while (size)
{
rtems_rfs_bitmap_element bits;
int available;
if (size < rtems_rfs_bitmap_element_bits ())
42314: e350001f cmp r0, #31 <== NOT EXECUTED
{
/*
* Use the normal bit operators because we do not change the bits just merge
* the 2 separate parts.
*/
bits1 &= mask;
42318: 979a3006 ldrls r3, [sl, r6] <== NOT EXECUTED
4231c: 92602020 rsbls r2, r0, #32 <== NOT EXECUTED
42320: 90032239 andls r2, r3, r9, lsr r2 <== NOT EXECUTED
rtems_rfs_bitmap_mask_section (0, size));
available = size;
}
else
{
bits = *map;
42324: 879a2006 ldrhi r2, [sl, r6] <== NOT EXECUTED
42328: 83a08020 movhi r8, #32 <== NOT EXECUTED
if (size < rtems_rfs_bitmap_element_bits ())
{
bits = rtems_rfs_bitmap_merge (*map,
RTEMS_RFS_BITMAP_ELEMENT_SET,
rtems_rfs_bitmap_mask_section (0, size));
available = size;
4232c: 91a01000 movls r1, r0 <== NOT EXECUTED
42330: 91a08000 movls r8, r0 <== NOT EXECUTED
}
else
{
bits = *map;
42334: 81a01008 movhi r1, r8 <== NOT EXECUTED
available = rtems_rfs_bitmap_element_bits ();
}
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
42338: e3520000 cmp r2, #0 <== NOT EXECUTED
4233c: 0a000007 beq 42360 <rtems_rfs_bitmap_create_search+0x9c> <== NOT EXECUTED
42340: e3a03000 mov r3, #0 <== NOT EXECUTED
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
if (!rtems_rfs_bitmap_test (bits, b))
42344: e012531c ands r5, r2, ip, lsl r3 <== NOT EXECUTED
control->free++;
42348: 15945010 ldrne r5, [r4, #16] <== NOT EXECUTED
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
4234c: e2833001 add r3, r3, #1 <== NOT EXECUTED
if (!rtems_rfs_bitmap_test (bits, b))
control->free++;
42350: 12855001 addne r5, r5, #1 <== NOT EXECUTED
42354: 15845010 strne r5, [r4, #16] <== NOT EXECUTED
if (rtems_rfs_bitmap_match (bits, RTEMS_RFS_BITMAP_ELEMENT_SET))
rtems_rfs_bitmap_set (*search_map, bit);
else
{
int b;
for (b = 0; b < available; b++)
42358: e1510003 cmp r1, r3 <== NOT EXECUTED
4235c: cafffff8 bgt 42344 <rtems_rfs_bitmap_create_search+0x80> <== NOT EXECUTED
control->free++;
}
size -= available;
if (bit == rtems_rfs_bitmap_element_bits ())
42360: e3570020 cmp r7, #32 <== NOT EXECUTED
for (b = 0; b < available; b++)
if (!rtems_rfs_bitmap_test (bits, b))
control->free++;
}
size -= available;
42364: e0680000 rsb r0, r8, r0 <== NOT EXECUTED
if (bit == rtems_rfs_bitmap_element_bits ())
{
bit = 0;
search_map++;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42368: 05ab9004 streq r9, [fp, #4]! <== NOT EXECUTED
4236c: 03a07000 moveq r7, #0 <== NOT EXECUTED
}
else
bit++;
42370: 12877001 addne r7, r7, #1 <== NOT EXECUTED
search_map = control->search_bits;
size = control->size;
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
while (size)
42374: e3500000 cmp r0, #0 <== NOT EXECUTED
bit = 0;
search_map++;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
}
else
bit++;
42378: e2866004 add r6, r6, #4 <== NOT EXECUTED
search_map = control->search_bits;
size = control->size;
bit = 0;
*search_map = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
while (size)
4237c: 1affffe4 bne 42314 <rtems_rfs_bitmap_create_search+0x50> <== NOT EXECUTED
42380: e3a00000 mov r0, #0 <== NOT EXECUTED
42384: eaffffd5 b 422e0 <rtems_rfs_bitmap_create_search+0x1c> <== NOT EXECUTED
00042274 <rtems_rfs_bitmap_load_map>:
rtems_rfs_bitmap_load_map (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_map* map)
{
int rc;
if (!control->buffer)
42274: e5903000 ldr r3, [r0] <== NOT EXECUTED
42278: e3530000 cmp r3, #0 <== NOT EXECUTED
* @return int The error number (errno). No error if 0.
*/
static int
rtems_rfs_bitmap_load_map (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_map* map)
{
4227c: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
42280: e1a04000 mov r4, r0 <== NOT EXECUTED
42284: e1a05001 mov r5, r1 <== NOT EXECUTED
int rc;
if (!control->buffer)
42288: 03a00006 moveq r0, #6 <== NOT EXECUTED
4228c: 08bd8030 popeq {r4, r5, pc} <== NOT EXECUTED
return ENXIO;
*map = NULL;
42290: e3a02000 mov r2, #0 <== NOT EXECUTED
42294: e5812000 str r2, [r1] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (control->fs,
42298: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
4229c: e1a01003 mov r1, r3 <== NOT EXECUTED
422a0: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
422a4: e3a03001 mov r3, #1 <== NOT EXECUTED
422a8: ebffdde9 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
control->buffer,
control->block,
true);
if (rc)
422ac: e3500000 cmp r0, #0 <== NOT EXECUTED
return rc;
*map = rtems_rfs_buffer_data (control->buffer);
422b0: 05943000 ldreq r3, [r4] <== NOT EXECUTED
422b4: 05933008 ldreq r3, [r3, #8] <== NOT EXECUTED
422b8: 05933020 ldreq r3, [r3, #32] <== NOT EXECUTED
422bc: 05853000 streq r3, [r5] <== NOT EXECUTED
return 0;
}
422c0: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
0004295c <rtems_rfs_bitmap_map_alloc>:
int
rtems_rfs_bitmap_map_alloc (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit seed,
bool* allocated,
rtems_rfs_bitmap_bit* bit)
{
4295c: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
42960: e1a07002 mov r7, r2 <== NOT EXECUTED
int rc = 0;
/*
* By default we assume the allocation failed.
*/
*allocated = false;
42964: e3a02000 mov r2, #0 <== NOT EXECUTED
42968: e1a05001 mov r5, r1 <== NOT EXECUTED
4296c: e5c72000 strb r2, [r7] <== NOT EXECUTED
int
rtems_rfs_bitmap_map_alloc (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit seed,
bool* allocated,
rtems_rfs_bitmap_bit* bit)
{
42970: e1a06000 mov r6, r0 <== NOT EXECUTED
42974: e1a08003 mov r8, r3 <== NOT EXECUTED
int rc = 0;
/*
* By default we assume the allocation failed.
*/
*allocated = false;
42978: e1a04001 mov r4, r1 <== NOT EXECUTED
* we have searched all of the map. The seed may not be aligned to a window
* boundary so we may need to search a partial window and this may also not
* be balanced for the upper or lower seeds. We move to the limits, search
* then return false if no clear bits are found.
*/
while (((upper_seed >= 0) && (upper_seed < control->size))
4297c: ea000011 b 429c8 <rtems_rfs_bitmap_map_alloc+0x6c> <== NOT EXECUTED
/*
* Search up first so bits allocated in succession are grouped together.
*/
if (upper_seed < control->size)
{
*bit = upper_seed;
42980: e5884000 str r4, [r8] <== NOT EXECUTED
rc = rtems_rfs_search_map_for_clear_bit (control, bit, allocated,
42984: e1a00006 mov r0, r6 <== NOT EXECUTED
42988: e1a01008 mov r1, r8 <== NOT EXECUTED
4298c: e1a02007 mov r2, r7 <== NOT EXECUTED
42990: e3a03001 mov r3, #1 <== NOT EXECUTED
42994: ebffff3f bl 42698 <T.57> <== NOT EXECUTED
window, 1);
if ((rc > 0) || *allocated)
42998: e3500000 cmp r0, #0 <== NOT EXECUTED
4299c: ca000020 bgt 42a24 <rtems_rfs_bitmap_map_alloc+0xc8> <== NOT EXECUTED
429a0: e5d73000 ldrb r3, [r7] <== NOT EXECUTED
429a4: e3530000 cmp r3, #0 <== NOT EXECUTED
429a8: 1a00001d bne 42a24 <rtems_rfs_bitmap_map_alloc+0xc8> <== NOT EXECUTED
break;
}
if (lower_seed >= 0)
429ac: e3550000 cmp r5, #0 <== NOT EXECUTED
429b0: aa000010 bge 429f8 <rtems_rfs_bitmap_map_alloc+0x9c> <== NOT EXECUTED
/*
* Do not bound the limits at the edges of the map. Do not update if an
* edge has been passed.
*/
if (upper_seed < control->size)
429b4: e596300c ldr r3, [r6, #12] <== NOT EXECUTED
429b8: e1530004 cmp r3, r4 <== NOT EXECUTED
upper_seed += window;
429bc: 82844b02 addhi r4, r4, #2048 ; 0x800 <== NOT EXECUTED
if (lower_seed >= 0)
429c0: e3550000 cmp r5, #0 <== NOT EXECUTED
lower_seed -= window;
429c4: a2455b02 subge r5, r5, #2048 ; 0x800 <== NOT EXECUTED
* we have searched all of the map. The seed may not be aligned to a window
* boundary so we may need to search a partial window and this may also not
* be balanced for the upper or lower seeds. We move to the limits, search
* then return false if no clear bits are found.
*/
while (((upper_seed >= 0) && (upper_seed < control->size))
429c8: e3540000 cmp r4, #0 <== NOT EXECUTED
429cc: ba000002 blt 429dc <rtems_rfs_bitmap_map_alloc+0x80> <== NOT EXECUTED
429d0: e596300c ldr r3, [r6, #12] <== NOT EXECUTED
429d4: e1540003 cmp r4, r3 <== NOT EXECUTED
429d8: 3affffe8 bcc 42980 <rtems_rfs_bitmap_map_alloc+0x24> <== NOT EXECUTED
429dc: e3550000 cmp r5, #0 <== NOT EXECUTED
429e0: ba00000f blt 42a24 <rtems_rfs_bitmap_map_alloc+0xc8> <== NOT EXECUTED
|| ((lower_seed >= 0) && (lower_seed < control->size)))
429e4: e596300c ldr r3, [r6, #12] <== NOT EXECUTED
* we have searched all of the map. The seed may not be aligned to a window
* boundary so we may need to search a partial window and this may also not
* be balanced for the upper or lower seeds. We move to the limits, search
* then return false if no clear bits are found.
*/
while (((upper_seed >= 0) && (upper_seed < control->size))
429e8: e1550003 cmp r5, r3 <== NOT EXECUTED
429ec: 2a00000c bcs 42a24 <rtems_rfs_bitmap_map_alloc+0xc8> <== NOT EXECUTED
|| ((lower_seed >= 0) && (lower_seed < control->size)))
{
/*
* Search up first so bits allocated in succession are grouped together.
*/
if (upper_seed < control->size)
429f0: e1540003 cmp r4, r3 <== NOT EXECUTED
429f4: 3affffe1 bcc 42980 <rtems_rfs_bitmap_map_alloc+0x24> <== NOT EXECUTED
break;
}
if (lower_seed >= 0)
{
*bit = lower_seed;
429f8: e5885000 str r5, [r8] <== NOT EXECUTED
rc = rtems_rfs_search_map_for_clear_bit (control, bit, allocated,
429fc: e1a00006 mov r0, r6 <== NOT EXECUTED
42a00: e1a01008 mov r1, r8 <== NOT EXECUTED
42a04: e1a02007 mov r2, r7 <== NOT EXECUTED
42a08: e3e03000 mvn r3, #0 <== NOT EXECUTED
42a0c: ebffff21 bl 42698 <T.57> <== NOT EXECUTED
window, -1);
if ((rc > 0) || *allocated)
42a10: e3500000 cmp r0, #0 <== NOT EXECUTED
42a14: ca000002 bgt 42a24 <rtems_rfs_bitmap_map_alloc+0xc8> <== NOT EXECUTED
42a18: e5d73000 ldrb r3, [r7] <== NOT EXECUTED
42a1c: e3530000 cmp r3, #0 <== NOT EXECUTED
42a20: 0affffe3 beq 429b4 <rtems_rfs_bitmap_map_alloc+0x58> <== NOT EXECUTED
if (lower_seed >= 0)
lower_seed -= window;
}
return 0;
}
42a24: e3a00000 mov r0, #0 <== NOT EXECUTED
42a28: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00042580 <rtems_rfs_bitmap_map_clear>:
}
int
rtems_rfs_bitmap_map_clear (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
42580: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
42584: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
42588: e1a05001 mov r5, r1 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
4258c: e1a0100d mov r1, sp <== NOT EXECUTED
}
int
rtems_rfs_bitmap_map_clear (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
42590: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
42594: ebffff36 bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
42598: e3500000 cmp r0, #0 <== NOT EXECUTED
4259c: da000001 ble 425a8 <rtems_rfs_bitmap_map_clear+0x28> <== NOT EXECUTED
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
rtems_rfs_buffer_mark_dirty (control->buffer);
control->free++;
return 0;
}
425a0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
425a4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
425a8: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
425ac: e1550003 cmp r5, r3 <== NOT EXECUTED
425b0: 23a00016 movcs r0, #22 <== NOT EXECUTED
425b4: 2afffff9 bcs 425a0 <rtems_rfs_bitmap_map_clear+0x20> <== NOT EXECUTED
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
425b8: e59d1000 ldr r1, [sp] <== NOT EXECUTED
if (rc > 0)
return rc;
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
425bc: e1a022c5 asr r2, r5, #5 <== NOT EXECUTED
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
425c0: e7910102 ldr r0, [r1, r2, lsl #2] <== NOT EXECUTED
425c4: e3a03001 mov r3, #1 <== NOT EXECUTED
425c8: e205c01f and ip, r5, #31 <== NOT EXECUTED
425cc: e1800c13 orr r0, r0, r3, lsl ip <== NOT EXECUTED
425d0: e7810102 str r0, [r1, r2, lsl #2] <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
425d4: e5941014 ldr r1, [r4, #20] <== NOT EXECUTED
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
425d8: e1a05545 asr r5, r5, #10 <== NOT EXECUTED
425dc: e7910105 ldr r0, [r1, r5, lsl #2] <== NOT EXECUTED
425e0: e202201f and r2, r2, #31 <== NOT EXECUTED
425e4: e1802213 orr r2, r0, r3, lsl r2 <== NOT EXECUTED
425e8: e7812105 str r2, [r1, r5, lsl #2] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (control->buffer);
control->free++;
425ec: e5942010 ldr r2, [r4, #16] <== NOT EXECUTED
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
rtems_rfs_buffer_mark_dirty (control->buffer);
425f0: e5941000 ldr r1, [r4] <== NOT EXECUTED
control->free++;
425f4: e0822003 add r2, r2, r3 <== NOT EXECUTED
map[index] = rtems_rfs_bitmap_clear (map[index], 1 << offset);
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset(bit);
search_map[index] = rtems_rfs_bitmap_clear (search_map[index], 1 << offset);
rtems_rfs_buffer_mark_dirty (control->buffer);
425f8: e5c13000 strb r3, [r1] <== NOT EXECUTED
control->free++;
425fc: e5842010 str r2, [r4, #16] <== NOT EXECUTED
42600: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
42604: eaffffe5 b 425a0 <rtems_rfs_bitmap_map_clear+0x20> <== NOT EXECUTED
000423d0 <rtems_rfs_bitmap_map_clear_all>:
return 0;
}
int
rtems_rfs_bitmap_map_clear_all (rtems_rfs_bitmap_control* control)
{
423d0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
423d4: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_rfs_bitmap_bit last_search_bit;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
423d8: e1a0100d mov r1, sp <== NOT EXECUTED
return 0;
}
int
rtems_rfs_bitmap_map_clear_all (rtems_rfs_bitmap_control* control)
{
423dc: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_bitmap_bit last_search_bit;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
423e0: ebffffa3 bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
423e4: e3500000 cmp r0, #0 <== NOT EXECUTED
423e8: da000001 ble 423f4 <rtems_rfs_bitmap_map_clear_all+0x24> <== NOT EXECUTED
rtems_rfs_bitmap_mask (last_search_bit));
rtems_rfs_buffer_mark_dirty (control->buffer);
return 0;
}
423ec: e28dd004 add sp, sp, #4 <== NOT EXECUTED
423f0: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
423f4: e594500c ldr r5, [r4, #12] <== NOT EXECUTED
423f8: e2455001 sub r5, r5, #1 <== NOT EXECUTED
423fc: e1a052a5 lsr r5, r5, #5 <== NOT EXECUTED
42400: e2851001 add r1, r5, #1 <== NOT EXECUTED
control->free = elements;
42404: e3a02000 mov r2, #0 <== NOT EXECUTED
42408: e5841010 str r1, [r4, #16] <== NOT EXECUTED
4240c: e59dc000 ldr ip, [sp] <== NOT EXECUTED
42410: e1a03002 mov r3, r2 <== NOT EXECUTED
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42414: e3e00000 mvn r0, #0 <== NOT EXECUTED
elements = rtems_rfs_bitmap_elements (control->size);
control->free = elements;
for (e = 0; e < elements; e++)
42418: e2833001 add r3, r3, #1 <== NOT EXECUTED
4241c: e1510003 cmp r1, r3 <== NOT EXECUTED
map[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42420: e78c0102 str r0, [ip, r2, lsl #2] <== NOT EXECUTED
elements = rtems_rfs_bitmap_elements (control->size);
control->free = elements;
for (e = 0; e < elements; e++)
42424: e1a02003 mov r2, r3 <== NOT EXECUTED
42428: 8afffffa bhi 42418 <rtems_rfs_bitmap_map_clear_all+0x48> <== NOT EXECUTED
* Set the un-mapped bits in the last search element so the available logic
* works.
*/
last_search_bit = rtems_rfs_bitmap_map_offset (elements);
if (last_search_bit == 0)
4242c: e211101f ands r1, r1, #31 <== NOT EXECUTED
42430: 12611020 rsbne r1, r1, #32 <== NOT EXECUTED
42434: 01a06000 moveq r6, r0 <== NOT EXECUTED
42438: 11a06130 lsrne r6, r0, r1 <== NOT EXECUTED
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
4243c: e1b012a5 lsrs r1, r5, #5 <== NOT EXECUTED
42440: 05940014 ldreq r0, [r4, #20] <== NOT EXECUTED
42444: 0a000008 beq 4246c <rtems_rfs_bitmap_map_clear_all+0x9c> <== NOT EXECUTED
return 0;
}
int
rtems_rfs_bitmap_map_clear_all (rtems_rfs_bitmap_control* control)
42448: e3a02000 mov r2, #0 <== NOT EXECUTED
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
4244c: e5940014 ldr r0, [r4, #20] <== NOT EXECUTED
return 0;
}
int
rtems_rfs_bitmap_map_clear_all (rtems_rfs_bitmap_control* control)
42450: e1a03002 mov r3, r2 <== NOT EXECUTED
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42454: e3e0c000 mvn ip, #0 <== NOT EXECUTED
if (last_search_bit == 0)
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
42458: e2833001 add r3, r3, #1 <== NOT EXECUTED
4245c: e1530001 cmp r3, r1 <== NOT EXECUTED
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
42460: e780c102 str ip, [r0, r2, lsl #2] <== NOT EXECUTED
if (last_search_bit == 0)
last_search_bit = rtems_rfs_bitmap_element_bits ();
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
42464: e1a02003 mov r2, r3 <== NOT EXECUTED
42468: 1afffffa bne 42458 <rtems_rfs_bitmap_map_clear_all+0x88> <== NOT EXECUTED
control->search_bits[elements - 1] =
rtems_rfs_bitmap_merge (RTEMS_RFS_BITMAP_ELEMENT_CLEAR,
RTEMS_RFS_BITMAP_ELEMENT_SET,
rtems_rfs_bitmap_mask (last_search_bit));
rtems_rfs_buffer_mark_dirty (control->buffer);
4246c: e5943000 ldr r3, [r4] <== NOT EXECUTED
42470: e3a02001 mov r2, #1 <== NOT EXECUTED
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < (elements - 1); e++)
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_CLEAR;
control->search_bits[elements - 1] =
42474: e7806101 str r6, [r0, r1, lsl #2] <== NOT EXECUTED
rtems_rfs_bitmap_merge (RTEMS_RFS_BITMAP_ELEMENT_CLEAR,
RTEMS_RFS_BITMAP_ELEMENT_SET,
rtems_rfs_bitmap_mask (last_search_bit));
rtems_rfs_buffer_mark_dirty (control->buffer);
42478: e5c32000 strb r2, [r3] <== NOT EXECUTED
4247c: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
42480: eaffffd9 b 423ec <rtems_rfs_bitmap_map_clear_all+0x1c> <== NOT EXECUTED
00042608 <rtems_rfs_bitmap_map_set>:
}
int
rtems_rfs_bitmap_map_set (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
42608: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
4260c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
42610: e1a05001 mov r5, r1 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
42614: e1a0100d mov r1, sp <== NOT EXECUTED
}
int
rtems_rfs_bitmap_map_set (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit)
{
42618: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
rtems_rfs_bitmap_map search_map;
int index;
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
4261c: ebffff14 bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
42620: e3500000 cmp r0, #0 <== NOT EXECUTED
42624: da000001 ble 42630 <rtems_rfs_bitmap_map_set+0x28> <== NOT EXECUTED
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
control->free--;
rtems_rfs_buffer_mark_dirty (control->buffer);
}
return 0;
}
42628: e28dd004 add sp, sp, #4 <== NOT EXECUTED
4262c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
int offset;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
42630: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
42634: e1550003 cmp r5, r3 <== NOT EXECUTED
42638: 23a00016 movcs r0, #22 <== NOT EXECUTED
4263c: 2afffff9 bcs 42628 <rtems_rfs_bitmap_map_set+0x20> <== NOT EXECUTED
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
42640: e59d1000 ldr r1, [sp] <== NOT EXECUTED
if (rc > 0)
return rc;
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
42644: e1a032c5 asr r3, r5, #5 <== NOT EXECUTED
*/
static rtems_rfs_bitmap_element
rtems_rfs_bitmap_set (rtems_rfs_bitmap_element target,
rtems_rfs_bitmap_element bits)
{
return RTEMS_RFS_BITMAP_SET_BITS (target, bits);
42648: e7910103 ldr r0, [r1, r3, lsl #2] <== NOT EXECUTED
4264c: e205c01f and ip, r5, #31 <== NOT EXECUTED
42650: e3a02001 mov r2, #1 <== NOT EXECUTED
42654: e1c00c12 bic r0, r0, r2, lsl ip <== NOT EXECUTED
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
if (rtems_rfs_bitmap_match(map[index], RTEMS_RFS_BITMAP_ELEMENT_SET))
42658: e3500000 cmp r0, #0 <== NOT EXECUTED
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
4265c: e7810103 str r0, [r1, r3, lsl #2] <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
return EINVAL;
search_map = control->search_bits;
42660: e5941014 ldr r1, [r4, #20] <== NOT EXECUTED
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
map[index] = rtems_rfs_bitmap_set (map[index], 1 << offset);
if (rtems_rfs_bitmap_match(map[index], RTEMS_RFS_BITMAP_ELEMENT_SET))
42664: 13a00000 movne r0, #0 <== NOT EXECUTED
42668: 1affffee bne 42628 <rtems_rfs_bitmap_map_set+0x20> <== NOT EXECUTED
{
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
4266c: e1a05545 asr r5, r5, #10 <== NOT EXECUTED
42670: e791c105 ldr ip, [r1, r5, lsl #2] <== NOT EXECUTED
42674: e203301f and r3, r3, #31 <== NOT EXECUTED
42678: e1cc3312 bic r3, ip, r2, lsl r3 <== NOT EXECUTED
4267c: e7813105 str r3, [r1, r5, lsl #2] <== NOT EXECUTED
control->free--;
42680: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (control->buffer);
42684: e5941000 ldr r1, [r4] <== NOT EXECUTED
{
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
control->free--;
42688: e2433001 sub r3, r3, #1 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (control->buffer);
4268c: e5c12000 strb r2, [r1] <== NOT EXECUTED
{
bit = index;
index = rtems_rfs_bitmap_map_index (bit);
offset = rtems_rfs_bitmap_map_offset (bit);
search_map[index] = rtems_rfs_bitmap_set (search_map[index], 1 << offset);
control->free--;
42690: e5843010 str r3, [r4, #16] <== NOT EXECUTED
42694: eaffffe3 b 42628 <rtems_rfs_bitmap_map_set+0x20> <== NOT EXECUTED
00042484 <rtems_rfs_bitmap_map_set_all>:
return 0;
}
int
rtems_rfs_bitmap_map_set_all (rtems_rfs_bitmap_control* control)
{
42484: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
42488: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
4248c: e1a0100d mov r1, sp <== NOT EXECUTED
return 0;
}
int
rtems_rfs_bitmap_map_set_all (rtems_rfs_bitmap_control* control)
{
42490: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
size_t elements;
int e;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
42494: ebffff76 bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
42498: e3500000 cmp r0, #0 <== NOT EXECUTED
4249c: da000001 ble 424a8 <rtems_rfs_bitmap_map_set_all+0x24> <== NOT EXECUTED
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
rtems_rfs_buffer_mark_dirty (control->buffer);
return 0;
}
424a0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
424a4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
424a8: e594500c ldr r5, [r4, #12] <== NOT EXECUTED
control->free = 0;
424ac: e3a03000 mov r3, #0 <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
424b0: e2455001 sub r5, r5, #1 <== NOT EXECUTED
424b4: e1a052a5 lsr r5, r5, #5 <== NOT EXECUTED
control->free = 0;
424b8: e5843010 str r3, [r4, #16] <== NOT EXECUTED
424bc: e59dc000 ldr ip, [sp] <== NOT EXECUTED
424c0: e1a02003 mov r2, r3 <== NOT EXECUTED
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
elements = rtems_rfs_bitmap_elements (control->size);
424c4: e2850001 add r0, r5, #1 <== NOT EXECUTED
control->free = 0;
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
424c8: e1a01003 mov r1, r3 <== NOT EXECUTED
elements = rtems_rfs_bitmap_elements (control->size);
control->free = 0;
for (e = 0; e < elements; e++)
424cc: e2833001 add r3, r3, #1 <== NOT EXECUTED
424d0: e1500003 cmp r0, r3 <== NOT EXECUTED
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
424d4: e78c1102 str r1, [ip, r2, lsl #2] <== NOT EXECUTED
elements = rtems_rfs_bitmap_elements (control->size);
control->free = 0;
for (e = 0; e < elements; e++)
424d8: e1a02003 mov r2, r3 <== NOT EXECUTED
424dc: 8afffffa bhi 424cc <rtems_rfs_bitmap_map_set_all+0x48> <== NOT EXECUTED
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < elements; e++)
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
424e0: e1a02001 mov r2, r1 <== NOT EXECUTED
424e4: e594c014 ldr ip, [r4, #20] <== NOT EXECUTED
control->free = 0;
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
424e8: e1a012a5 lsr r1, r5, #5 <== NOT EXECUTED
424ec: e2811001 add r1, r1, #1 <== NOT EXECUTED
for (e = 0; e < elements; e++)
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
424f0: e1a03002 mov r3, r2 <== NOT EXECUTED
424f4: e1a00002 mov r0, r2 <== NOT EXECUTED
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < elements; e++)
424f8: e2833001 add r3, r3, #1 <== NOT EXECUTED
424fc: e1530001 cmp r3, r1 <== NOT EXECUTED
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
42500: e78c0102 str r0, [ip, r2, lsl #2] <== NOT EXECUTED
for (e = 0; e < elements; e++)
map[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
elements = rtems_rfs_bitmap_elements (elements);
for (e = 0; e < elements; e++)
42504: e1a02003 mov r2, r3 <== NOT EXECUTED
42508: 3afffffa bcc 424f8 <rtems_rfs_bitmap_map_set_all+0x74> <== NOT EXECUTED
control->search_bits[e] = RTEMS_RFS_BITMAP_ELEMENT_SET;
rtems_rfs_buffer_mark_dirty (control->buffer);
4250c: e5943000 ldr r3, [r4] <== NOT EXECUTED
42510: e3a02001 mov r2, #1 <== NOT EXECUTED
42514: e5c32000 strb r2, [r3] <== NOT EXECUTED
return 0;
42518: eaffffe0 b 424a0 <rtems_rfs_bitmap_map_set_all+0x1c> <== NOT EXECUTED
0004251c <rtems_rfs_bitmap_map_test>:
int
rtems_rfs_bitmap_map_test (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit,
bool* state)
{
4251c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
42520: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
42524: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
int index;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
42528: e1a0100d mov r1, sp <== NOT EXECUTED
int
rtems_rfs_bitmap_map_test (rtems_rfs_bitmap_control* control,
rtems_rfs_bitmap_bit bit,
bool* state)
{
4252c: e1a06002 mov r6, r2 <== NOT EXECUTED
42530: e1a05000 mov r5, r0 <== NOT EXECUTED
rtems_rfs_bitmap_map map;
int index;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
42534: ebffff4e bl 42274 <rtems_rfs_bitmap_load_map> <== NOT EXECUTED
if (rc > 0)
42538: e3500000 cmp r0, #0 <== NOT EXECUTED
4253c: da000001 ble 42548 <rtems_rfs_bitmap_map_test+0x2c> <== NOT EXECUTED
if (bit >= control->size)
return EINVAL;
index = rtems_rfs_bitmap_map_index (bit);
*state = rtems_rfs_bitmap_test (map[index], bit);
return 0;
}
42540: e28dd004 add sp, sp, #4 <== NOT EXECUTED
42544: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
int index;
int rc;
rc = rtems_rfs_bitmap_load_map (control, &map);
if (rc > 0)
return rc;
if (bit >= control->size)
42548: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
4254c: e1540003 cmp r4, r3 <== NOT EXECUTED
42550: 23a00016 movcs r0, #22 <== NOT EXECUTED
42554: 2afffff9 bcs 42540 <rtems_rfs_bitmap_map_test+0x24> <== NOT EXECUTED
return EINVAL;
index = rtems_rfs_bitmap_map_index (bit);
*state = rtems_rfs_bitmap_test (map[index], bit);
42558: e59d3000 ldr r3, [sp] <== NOT EXECUTED
4255c: e1a022c4 asr r2, r4, #5 <== NOT EXECUTED
42560: e7933102 ldr r3, [r3, r2, lsl #2] <== NOT EXECUTED
42564: e3a02001 mov r2, #1 <== NOT EXECUTED
42568: e0133412 ands r3, r3, r2, lsl r4 <== NOT EXECUTED
4256c: 13a03000 movne r3, #0 <== NOT EXECUTED
42570: 03a03001 moveq r3, #1 <== NOT EXECUTED
42574: e5c63000 strb r3, [r6] <== NOT EXECUTED
42578: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
4257c: eaffffef b 42540 <rtems_rfs_bitmap_map_test+0x24> <== NOT EXECUTED
00042230 <rtems_rfs_bitmap_mask>:
return 0;
}
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask (unsigned int size)
{
42230: e3e03000 mvn r3, #0 <== NOT EXECUTED
42234: e2600020 rsb r0, r0, #32 <== NOT EXECUTED
rtems_rfs_bitmap_element mask = RTEMS_RFS_BITMAP_ELEMENT_FULL_MASK;
mask >>= (rtems_rfs_bitmap_element_bits () - size);
return mask;
}
42238: e1a00033 lsr r0, r3, r0 <== NOT EXECUTED
4223c: e12fff1e bx lr <== NOT EXECUTED
00042240 <rtems_rfs_bitmap_mask_section>:
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask_section (unsigned int start, unsigned int end)
{
rtems_rfs_bitmap_element mask = 0;
if (end > start)
42240: e1510000 cmp r1, r0 <== NOT EXECUTED
mask = rtems_rfs_bitmap_mask (end - start) << start;
42244: 80601001 rsbhi r1, r0, r1 <== NOT EXECUTED
42248: 82611020 rsbhi r1, r1, #32 <== NOT EXECUTED
4224c: 83e03000 mvnhi r3, #0 <== NOT EXECUTED
42250: 81a01133 lsrhi r1, r3, r1 <== NOT EXECUTED
rtems_rfs_bitmap_element
rtems_rfs_bitmap_mask_section (unsigned int start, unsigned int end)
{
rtems_rfs_bitmap_element mask = 0;
if (end > start)
42254: 93a00000 movls r0, #0 <== NOT EXECUTED
mask = rtems_rfs_bitmap_mask (end - start) << start;
42258: 81a00011 lslhi r0, r1, r0 <== NOT EXECUTED
return mask;
}
4225c: e12fff1e bx lr <== NOT EXECUTED
00042388 <rtems_rfs_bitmap_open>:
rtems_rfs_bitmap_open (rtems_rfs_bitmap_control* control,
rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
size_t size,
rtems_rfs_buffer_block block)
{
42388: e92d4010 push {r4, lr} <== NOT EXECUTED
control->fs = fs;
control->block = block;
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
4238c: e243c001 sub ip, r3, #1 <== NOT EXECUTED
rtems_rfs_bitmap_open (rtems_rfs_bitmap_control* control,
rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
size_t size,
rtems_rfs_buffer_block block)
{
42390: e1a04000 mov r4, r0 <== NOT EXECUTED
control->fs = fs;
control->block = block;
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
42394: e1a0c52c lsr ip, ip, #10 <== NOT EXECUTED
size_t size,
rtems_rfs_buffer_block block)
{
size_t elements = rtems_rfs_bitmap_elements (size);
control->buffer = buffer;
42398: e5842000 str r2, [r4] <== NOT EXECUTED
control->fs = fs;
control->block = block;
4239c: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
423a0: e28c0001 add r0, ip, #1 <== NOT EXECUTED
rtems_rfs_buffer_block block)
{
size_t elements = rtems_rfs_bitmap_elements (size);
control->buffer = buffer;
control->fs = fs;
423a4: e984000e stmib r4, {r1, r2, r3} <== NOT EXECUTED
control->block = block;
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
423a8: e1a00100 lsl r0, r0, #2 <== NOT EXECUTED
423ac: ebff1833 bl 8480 <malloc> <== NOT EXECUTED
if (!control->search_bits)
423b0: e3500000 cmp r0, #0 <== NOT EXECUTED
control->fs = fs;
control->block = block;
control->size = size;
elements = rtems_rfs_bitmap_elements (elements);
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
423b4: e5840014 str r0, [r4, #20] <== NOT EXECUTED
if (!control->search_bits)
423b8: 0a000002 beq 423c8 <rtems_rfs_bitmap_open+0x40> <== NOT EXECUTED
return ENOMEM;
return rtems_rfs_bitmap_create_search (control);
423bc: e1a00004 mov r0, r4 <== NOT EXECUTED
}
423c0: e8bd4010 pop {r4, lr} <== NOT EXECUTED
control->search_bits = malloc (elements * sizeof (rtems_rfs_bitmap_element));
if (!control->search_bits)
return ENOMEM;
return rtems_rfs_bitmap_create_search (control);
423c4: eaffffbe b 422c4 <rtems_rfs_bitmap_create_search> <== NOT EXECUTED
}
423c8: e3a0000c mov r0, #12 <== NOT EXECUTED
423cc: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00038904 <rtems_rfs_block_find_indirect>:
rtems_rfs_block_find_indirect (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no block,
int offset,
rtems_rfs_block_no* result)
{
38904: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
38908: e1a04003 mov r4, r3 <== NOT EXECUTED
/*
* If the handle has a buffer and this request is a different block the current
* buffer is released.
*/
rc = rtems_rfs_buffer_handle_request (fs, buffer, block, true);
3890c: e3a03001 mov r3, #1 <== NOT EXECUTED
rtems_rfs_block_find_indirect (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no block,
int offset,
rtems_rfs_block_no* result)
{
38910: e1a06000 mov r6, r0 <== NOT EXECUTED
38914: e1a07001 mov r7, r1 <== NOT EXECUTED
38918: e59d5014 ldr r5, [sp, #20] <== NOT EXECUTED
/*
* If the handle has a buffer and this request is a different block the current
* buffer is released.
*/
rc = rtems_rfs_buffer_handle_request (fs, buffer, block, true);
3891c: eb00044c bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
38920: e3500000 cmp r0, #0 <== NOT EXECUTED
38924: c8bd80f0 popgt {r4, r5, r6, r7, pc} <== NOT EXECUTED
return rc;
*result = rtems_rfs_block_get_number (buffer, offset);
38928: e5973008 ldr r3, [r7, #8] <== NOT EXECUTED
3892c: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
38930: e0821104 add r1, r2, r4, lsl #2 <== NOT EXECUTED
38934: e7d20104 ldrb r0, [r2, r4, lsl #2] <== NOT EXECUTED
38938: e5d13003 ldrb r3, [r1, #3] <== NOT EXECUTED
3893c: e1a04001 mov r4, r1 <== NOT EXECUTED
38940: e5d11001 ldrb r1, [r1, #1] <== NOT EXECUTED
38944: e5d42002 ldrb r2, [r4, #2] <== NOT EXECUTED
38948: e1833c00 orr r3, r3, r0, lsl #24 <== NOT EXECUTED
3894c: e1833801 orr r3, r3, r1, lsl #16 <== NOT EXECUTED
38950: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
if ((*result + 1) == 0)
38954: e3730001 cmn r3, #1 <== NOT EXECUTED
38958: 03a03000 moveq r3, #0 <== NOT EXECUTED
3895c: e5853000 str r3, [r5] <== NOT EXECUTED
*result = 0;
if (*result >= rtems_rfs_fs_blocks (fs))
38960: e5962004 ldr r2, [r6, #4] <== NOT EXECUTED
38964: e1530002 cmp r3, r2 <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_FIND))
printf ("rtems-rfs: block-find: invalid block in table:"
" block=%" PRId32 ", indirect=%" PRId32 "/%d\n", *result, block, offset);
*result = 0;
38968: 23a00000 movcs r0, #0 <== NOT EXECUTED
*result = rtems_rfs_block_get_number (buffer, offset);
if ((*result + 1) == 0)
*result = 0;
if (*result >= rtems_rfs_fs_blocks (fs))
3896c: 33a00000 movcc r0, #0 <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_FIND))
printf ("rtems-rfs: block-find: invalid block in table:"
" block=%" PRId32 ", indirect=%" PRId32 "/%d\n", *result, block, offset);
*result = 0;
38970: 25850000 strcs r0, [r5] <== NOT EXECUTED
rc = EIO;
}
return 0;
}
38974: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00038860 <rtems_rfs_block_get_block_size>:
void
rtems_rfs_block_get_block_size (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_size* size)
{
38860: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
38864: e1a04002 mov r4, r2 <== NOT EXECUTED
if (pos == 0)
38868: e1912002 orrs r2, r1, r2 <== NOT EXECUTED
void
rtems_rfs_block_get_block_size (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_size* size)
{
3886c: e1a05001 mov r5, r1 <== NOT EXECUTED
38870: e1a06003 mov r6, r3 <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_set_size_zero (rtems_rfs_block_size* size)
{
size->count = 0;
size->offset = 0;
38874: 05832004 streq r2, [r3, #4] <== NOT EXECUTED
* @param size A pointer to the block size.
*/
static inline void
rtems_rfs_block_set_size_zero (rtems_rfs_block_size* size)
{
size->count = 0;
38878: 05832000 streq r2, [r3] <== NOT EXECUTED
if (pos == 0)
3887c: 08bd80f0 popeq {r4, r5, r6, r7, pc} <== NOT EXECUTED
rtems_rfs_block_set_size_zero (size);
else
{
size->count = pos / rtems_rfs_fs_block_size (fs) + 1;
38880: e5907008 ldr r7, [r0, #8] <== NOT EXECUTED
38884: e3a03000 mov r3, #0 <== NOT EXECUTED
38888: e1a02007 mov r2, r7 <== NOT EXECUTED
3888c: e1a00001 mov r0, r1 <== NOT EXECUTED
38890: e1a01004 mov r1, r4 <== NOT EXECUTED
38894: eb008d9f bl 5bf18 <__udivdi3> <== NOT EXECUTED
38898: e2800001 add r0, r0, #1 <== NOT EXECUTED
3889c: e5860000 str r0, [r6] <== NOT EXECUTED
size->offset = pos % rtems_rfs_fs_block_size (fs);
388a0: e1a01004 mov r1, r4 <== NOT EXECUTED
388a4: e1a00005 mov r0, r5 <== NOT EXECUTED
388a8: e1a02007 mov r2, r7 <== NOT EXECUTED
388ac: e3a03000 mov r3, #0 <== NOT EXECUTED
388b0: eb008ea9 bl 5c35c <__umoddi3> <== NOT EXECUTED
388b4: e5860004 str r0, [r6, #4] <== NOT EXECUTED
388b8: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00038800 <rtems_rfs_block_get_bpos>:
void
rtems_rfs_block_get_bpos (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_pos* bpos)
{
38800: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
bpos->bno = pos / rtems_rfs_fs_block_size (fs);
38804: e5906008 ldr r6, [r0, #8] <== NOT EXECUTED
void
rtems_rfs_block_get_bpos (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_pos* bpos)
{
38808: e1a08002 mov r8, r2 <== NOT EXECUTED
bpos->bno = pos / rtems_rfs_fs_block_size (fs);
3880c: e3a05000 mov r5, #0 <== NOT EXECUTED
void
rtems_rfs_block_get_bpos (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_pos* bpos)
{
38810: e1a04003 mov r4, r3 <== NOT EXECUTED
38814: e1a07001 mov r7, r1 <== NOT EXECUTED
bpos->bno = pos / rtems_rfs_fs_block_size (fs);
38818: e1a02006 mov r2, r6 <== NOT EXECUTED
3881c: e1a03005 mov r3, r5 <== NOT EXECUTED
38820: e1a00001 mov r0, r1 <== NOT EXECUTED
38824: e1a01008 mov r1, r8 <== NOT EXECUTED
38828: eb008dba bl 5bf18 <__udivdi3> <== NOT EXECUTED
bpos->boff = pos % rtems_rfs_fs_block_size (fs);
3882c: e1a02006 mov r2, r6 <== NOT EXECUTED
void
rtems_rfs_block_get_bpos (rtems_rfs_file_system* fs,
rtems_rfs_pos pos,
rtems_rfs_block_pos* bpos)
{
bpos->bno = pos / rtems_rfs_fs_block_size (fs);
38830: e5840000 str r0, [r4] <== NOT EXECUTED
bpos->boff = pos % rtems_rfs_fs_block_size (fs);
38834: e1a01008 mov r1, r8 <== NOT EXECUTED
38838: e1a00007 mov r0, r7 <== NOT EXECUTED
3883c: e1a03005 mov r3, r5 <== NOT EXECUTED
38840: eb008ec5 bl 5c35c <__umoddi3> <== NOT EXECUTED
38844: e5840004 str r0, [r4, #4] <== NOT EXECUTED
}
38848: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
0003884c <rtems_rfs_block_get_pos>:
rtems_rfs_pos
rtems_rfs_block_get_pos (rtems_rfs_file_system* fs,
rtems_rfs_block_pos* bpos)
{
3884c: e5902008 ldr r2, [r0, #8] <== NOT EXECUTED
38850: e8910009 ldm r1, {r0, r3} <== NOT EXECUTED
return (bpos->bno * rtems_rfs_fs_block_size (fs)) + bpos->boff;
}
38854: e3a01000 mov r1, #0 <== NOT EXECUTED
38858: e0203092 mla r0, r2, r0, r3 <== NOT EXECUTED
3885c: e12fff1e bx lr <== NOT EXECUTED
000388bc <rtems_rfs_block_get_size>:
rtems_rfs_block_get_size (rtems_rfs_file_system* fs,
rtems_rfs_block_size* size)
{
uint32_t offset;
uint64_t block_size;
if (size->count == 0)
388bc: e5912000 ldr r2, [r1] <== NOT EXECUTED
388c0: e3520000 cmp r2, #0 <== NOT EXECUTED
}
rtems_rfs_pos
rtems_rfs_block_get_size (rtems_rfs_file_system* fs,
rtems_rfs_block_size* size)
{
388c4: e52d4004 push {r4} ; (str r4, [sp, #-4]!) <== NOT EXECUTED
uint32_t offset;
uint64_t block_size;
if (size->count == 0)
388c8: 03a03000 moveq r3, #0 <== NOT EXECUTED
388cc: 03a04000 moveq r4, #0 <== NOT EXECUTED
388d0: 0a000007 beq 388f4 <rtems_rfs_block_get_size+0x38> <== NOT EXECUTED
return 0;
if (size->offset == 0)
388d4: e5913004 ldr r3, [r1, #4] <== NOT EXECUTED
388d8: e3530000 cmp r3, #0 <== NOT EXECUTED
offset = rtems_rfs_fs_block_size (fs);
388dc: 05903008 ldreq r3, [r0, #8] <== NOT EXECUTED
{
uint32_t offset;
uint64_t block_size;
if (size->count == 0)
return 0;
if (size->offset == 0)
388e0: 15901008 ldrne r1, [r0, #8] <== NOT EXECUTED
offset = rtems_rfs_fs_block_size (fs);
388e4: 01a01003 moveq r1, r3 <== NOT EXECUTED
else
offset = size->offset;
block_size = rtems_rfs_fs_block_size (fs);
return (((uint64_t) (size->count - 1)) * block_size) + offset;
388e8: e2422001 sub r2, r2, #1 <== NOT EXECUTED
388ec: e3a04000 mov r4, #0 <== NOT EXECUTED
388f0: e0a43192 umlal r3, r4, r2, r1 <== NOT EXECUTED
}
388f4: e1a01004 mov r1, r4 <== NOT EXECUTED
388f8: e1a00003 mov r0, r3 <== NOT EXECUTED
388fc: e8bd0010 pop {r4} <== NOT EXECUTED
38900: e12fff1e bx lr <== NOT EXECUTED
00039434 <rtems_rfs_block_map_close>:
rtems_rfs_block_map* map)
{
int rc = 0;
int brc;
if (map->dirty && map->inode)
39434: e5d13000 ldrb r3, [r1] <== NOT EXECUTED
39438: e3530000 cmp r3, #0 <== NOT EXECUTED
}
int
rtems_rfs_block_map_close (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
3943c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
39440: e1a04001 mov r4, r1 <== NOT EXECUTED
39444: e1a05000 mov r5, r0 <== NOT EXECUTED
int rc = 0;
int brc;
if (map->dirty && map->inode)
39448: 0a000015 beq 394a4 <rtems_rfs_block_map_close+0x70> <== NOT EXECUTED
3944c: e5911004 ldr r1, [r1, #4] <== NOT EXECUTED
39450: e3510000 cmp r1, #0 <== NOT EXECUTED
39454: 0a000012 beq 394a4 <rtems_rfs_block_map_close+0x70> <== NOT EXECUTED
{
brc = rtems_rfs_inode_load (fs, map->inode);
39458: eb000f69 bl 3d204 <rtems_rfs_inode_load> <== NOT EXECUTED
if (brc > 0)
3945c: e2507000 subs r7, r0, #0 <== NOT EXECUTED
39460: da000011 ble 394ac <rtems_rfs_block_map_close+0x78> <== NOT EXECUTED
map->dirty = false;
}
}
map->inode = NULL;
39464: e3a06000 mov r6, #0 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
39468: e2841038 add r1, r4, #56 ; 0x38 <== NOT EXECUTED
3946c: e5846004 str r6, [r4, #4] <== NOT EXECUTED
39470: e1a00005 mov r0, r5 <== NOT EXECUTED
39474: eb00012c bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
39478: e5c46038 strb r6, [r4, #56] ; 0x38 <== NOT EXECUTED
handle->bnum = 0;
3947c: e584603c str r6, [r4, #60] ; 0x3c <== NOT EXECUTED
handle->buffer = NULL;
39480: e5846040 str r6, [r4, #64] ; 0x40 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
39484: e1a00005 mov r0, r5 <== NOT EXECUTED
39488: e2841044 add r1, r4, #68 ; 0x44 <== NOT EXECUTED
3948c: eb000126 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
39490: e584604c str r6, [r4, #76] ; 0x4c <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
39494: e5c46044 strb r6, [r4, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
39498: e5846048 str r6, [r4, #72] ; 0x48 <== NOT EXECUTED
rc = brc;
brc = rtems_rfs_buffer_handle_close (fs, &map->doubly_buffer);
if ((brc > 0) && (rc == 0))
rc = brc;
return rc;
}
3949c: e1a00007 mov r0, r7 <== NOT EXECUTED
394a0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
brc = rtems_rfs_inode_unload (fs, map->inode, true);
if (brc > 0)
rc = brc;
map->dirty = false;
394a4: e3a07000 mov r7, #0 <== NOT EXECUTED
394a8: eaffffed b 39464 <rtems_rfs_block_map_close+0x30> <== NOT EXECUTED
int brc;
if (map->dirty && map->inode)
{
brc = rtems_rfs_inode_load (fs, map->inode);
if (brc > 0)
394ac: e1a00004 mov r0, r4 <== NOT EXECUTED
394b0: e3a03000 mov r3, #0 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
394b4: e3a06001 mov r6, #1 <== NOT EXECUTED
if (rc == 0)
{
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_inode_set_block (map->inode, b, map->blocks[b]);
394b8: e5942004 ldr r2, [r4, #4] <== NOT EXECUTED
394bc: e5901024 ldr r1, [r0, #36] ; 0x24 <== NOT EXECUTED
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
394c0: e592c00c ldr ip, [r2, #12] <== NOT EXECUTED
394c4: e1a0ec21 lsr lr, r1, #24 <== NOT EXECUTED
394c8: e08cc003 add ip, ip, r3 <== NOT EXECUTED
394cc: e5cce01c strb lr, [ip, #28] <== NOT EXECUTED
394d0: e592c00c ldr ip, [r2, #12] <== NOT EXECUTED
394d4: e1a0e821 lsr lr, r1, #16 <== NOT EXECUTED
394d8: e08cc003 add ip, ip, r3 <== NOT EXECUTED
394dc: e5cce01d strb lr, [ip, #29] <== NOT EXECUTED
394e0: e592c00c ldr ip, [r2, #12] <== NOT EXECUTED
394e4: e1a0e421 lsr lr, r1, #8 <== NOT EXECUTED
394e8: e08cc003 add ip, ip, r3 <== NOT EXECUTED
394ec: e5cce01e strb lr, [ip, #30] <== NOT EXECUTED
394f0: e592c00c ldr ip, [r2, #12] <== NOT EXECUTED
394f4: e08cc003 add ip, ip, r3 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
394f8: e2833004 add r3, r3, #4 <== NOT EXECUTED
if (rc == 0)
{
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
394fc: e3530014 cmp r3, #20 <== NOT EXECUTED
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
39500: e5cc101f strb r1, [ip, #31] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
39504: e2800004 add r0, r0, #4 <== NOT EXECUTED
39508: e5c26010 strb r6, [r2, #16] <== NOT EXECUTED
3950c: e3a02001 mov r2, #1 <== NOT EXECUTED
39510: 1affffe8 bne 394b8 <rtems_rfs_block_map_close+0x84> <== NOT EXECUTED
rtems_rfs_inode_set_block (map->inode, b, map->blocks[b]);
rtems_rfs_inode_set_block_count (map->inode, map->size.count);
39514: e5943004 ldr r3, [r4, #4] <== NOT EXECUTED
39518: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
3951c: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
39520: e1a0cc21 lsr ip, r1, #24 <== NOT EXECUTED
39524: e5c0c00c strb ip, [r0, #12] <== NOT EXECUTED
39528: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
3952c: e1a0c821 lsr ip, r1, #16 <== NOT EXECUTED
39530: e5c0c00d strb ip, [r0, #13] <== NOT EXECUTED
39534: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
39538: e1a0c421 lsr ip, r1, #8 <== NOT EXECUTED
3953c: e5c0c00e strb ip, [r0, #14] <== NOT EXECUTED
39540: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
39544: e5c0100f strb r1, [r0, #15] <== NOT EXECUTED
rtems_rfs_inode_set_block_offset (map->inode, map->size.offset);
39548: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
3954c: e594100c ldr r1, [r4, #12] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
39550: e590c00c ldr ip, [r0, #12] <== NOT EXECUTED
39554: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
39558: e1a0ec21 lsr lr, r1, #24 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3955c: e5c32010 strb r2, [r3, #16] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
39560: e5cce00a strb lr, [ip, #10] <== NOT EXECUTED
39564: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
39568: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
3956c: e5c3100b strb r1, [r3, #11] <== NOT EXECUTED
rtems_rfs_inode_set_last_map_block (map->inode, map->last_map_block);
39570: e5941004 ldr r1, [r4, #4] <== NOT EXECUTED
39574: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
* @param block_count The last map block number.
*/
static inline void
rtems_rfs_inode_set_last_map_block (rtems_rfs_inode_handle* handle, uint32_t last_map_block)
{
rtems_rfs_write_u32 (&handle->node->last_map_block, last_map_block);
39578: e591c00c ldr ip, [r1, #12] <== NOT EXECUTED
3957c: e1a0ec23 lsr lr, r3, #24 <== NOT EXECUTED
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
39580: e5c02010 strb r2, [r0, #16] <== NOT EXECUTED
* @param block_count The last map block number.
*/
static inline void
rtems_rfs_inode_set_last_map_block (rtems_rfs_inode_handle* handle, uint32_t last_map_block)
{
rtems_rfs_write_u32 (&handle->node->last_map_block, last_map_block);
39584: e5cce030 strb lr, [ip, #48] ; 0x30 <== NOT EXECUTED
39588: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
3958c: e1a0c823 lsr ip, r3, #16 <== NOT EXECUTED
39590: e5c0c031 strb ip, [r0, #49] ; 0x31 <== NOT EXECUTED
39594: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
39598: e1a0c423 lsr ip, r3, #8 <== NOT EXECUTED
3959c: e5c0c032 strb ip, [r0, #50] ; 0x32 <== NOT EXECUTED
395a0: e591000c ldr r0, [r1, #12] <== NOT EXECUTED
395a4: e5c03033 strb r3, [r0, #51] ; 0x33 <== NOT EXECUTED
rtems_rfs_inode_set_last_data_block (map->inode, map->last_data_block);
395a8: e5943004 ldr r3, [r4, #4] <== NOT EXECUTED
395ac: e5940020 ldr r0, [r4, #32] <== NOT EXECUTED
* @param block_count The last data block number.
*/
static inline void
rtems_rfs_inode_set_last_data_block (rtems_rfs_inode_handle* handle, uint32_t last_data_block)
{
rtems_rfs_write_u32 (&handle->node->last_data_block, last_data_block);
395b0: e593c00c ldr ip, [r3, #12] <== NOT EXECUTED
395b4: e1a0ec20 lsr lr, r0, #24 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_last_map_block (rtems_rfs_inode_handle* handle, uint32_t last_map_block)
{
rtems_rfs_write_u32 (&handle->node->last_map_block, last_map_block);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
395b8: e5c12010 strb r2, [r1, #16] <== NOT EXECUTED
* @param block_count The last data block number.
*/
static inline void
rtems_rfs_inode_set_last_data_block (rtems_rfs_inode_handle* handle, uint32_t last_data_block)
{
rtems_rfs_write_u32 (&handle->node->last_data_block, last_data_block);
395bc: e5cce034 strb lr, [ip, #52] ; 0x34 <== NOT EXECUTED
395c0: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
395c4: e1a0c820 lsr ip, r0, #16 <== NOT EXECUTED
395c8: e5c1c035 strb ip, [r1, #53] ; 0x35 <== NOT EXECUTED
395cc: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
395d0: e1a0c420 lsr ip, r0, #8 <== NOT EXECUTED
395d4: e5c1c036 strb ip, [r1, #54] ; 0x36 <== NOT EXECUTED
395d8: e593100c ldr r1, [r3, #12] <== NOT EXECUTED
395dc: e5c10037 strb r0, [r1, #55] ; 0x37 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
395e0: e5c32010 strb r2, [r3, #16] <== NOT EXECUTED
brc = rtems_rfs_inode_unload (fs, map->inode, true);
395e4: e1a00005 mov r0, r5 <== NOT EXECUTED
395e8: e5941004 ldr r1, [r4, #4] <== NOT EXECUTED
395ec: eb000ecd bl 3d128 <rtems_rfs_inode_unload> <== NOT EXECUTED
if (brc > 0)
rc = brc;
map->dirty = false;
395f0: e3a03000 mov r3, #0 <== NOT EXECUTED
395f4: e5c43000 strb r3, [r4] <== NOT EXECUTED
rtems_rfs_inode_set_block_count (map->inode, map->size.count);
rtems_rfs_inode_set_block_offset (map->inode, map->size.offset);
rtems_rfs_inode_set_last_map_block (map->inode, map->last_map_block);
rtems_rfs_inode_set_last_data_block (map->inode, map->last_data_block);
brc = rtems_rfs_inode_unload (fs, map->inode, true);
395f8: e1c07fc0 bic r7, r0, r0, asr #31 <== NOT EXECUTED
395fc: eaffff98 b 39464 <rtems_rfs_block_map_close+0x30> <== NOT EXECUTED
00038978 <rtems_rfs_block_map_find>:
int
rtems_rfs_block_map_find (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_pos* bpos,
rtems_rfs_block_no* block)
{
38978: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3897c: e1a06003 mov r6, r3 <== NOT EXECUTED
int rc = 0;
*block = 0;
38980: e3a03000 mov r3, #0 <== NOT EXECUTED
38984: e5863000 str r3, [r6] <== NOT EXECUTED
/*
* Range checking here makes the remaining logic simpler.
*/
if (rtems_rfs_block_pos_block_past_end (bpos, &map->size))
38988: e592b000 ldr fp, [r2] <== NOT EXECUTED
3898c: e15b0003 cmp fp, r3 <== NOT EXECUTED
int
rtems_rfs_block_map_find (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_pos* bpos,
rtems_rfs_block_no* block)
{
38990: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
38994: e1a05002 mov r5, r2 <== NOT EXECUTED
38998: e1a07000 mov r7, r0 <== NOT EXECUTED
3899c: e1a04001 mov r4, r1 <== NOT EXECUTED
*block = 0;
/*
* Range checking here makes the remaining logic simpler.
*/
if (rtems_rfs_block_pos_block_past_end (bpos, &map->size))
389a0: 0591a008 ldreq sl, [r1, #8] <== NOT EXECUTED
389a4: 0a000002 beq 389b4 <rtems_rfs_block_map_find+0x3c> <== NOT EXECUTED
389a8: e591a008 ldr sl, [r1, #8] <== NOT EXECUTED
389ac: e35a0000 cmp sl, #0 <== NOT EXECUTED
389b0: 0a000022 beq 38a40 <rtems_rfs_block_map_find+0xc8> <== NOT EXECUTED
389b4: e15b000a cmp fp, sl <== NOT EXECUTED
389b8: 2a000020 bcs 38a40 <rtems_rfs_block_map_find+0xc8> <== NOT EXECUTED
return ENXIO;
/*
* If the block position is the same and we have found the block just return it.
*/
if ((bpos->bno == map->bpos.bno) && (map->bpos.block != 0))
389bc: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
389c0: e15b0003 cmp fp, r3 <== NOT EXECUTED
389c4: 0a000020 beq 38a4c <rtems_rfs_block_map_find+0xd4> <== NOT EXECUTED
/*
* Determine the type of access we need to perform. If the number of blocks
* is less than or equal to the number of slots in the inode the blocks are
* directly accessed.
*/
if (map->size.count <= RTEMS_RFS_INODE_BLOCKS)
389c8: e35a0005 cmp sl, #5 <== NOT EXECUTED
389cc: 8a00000b bhi 38a00 <rtems_rfs_block_map_find+0x88> <== NOT EXECUTED
{
*block = map->blocks[bpos->bno];
389d0: e28bb009 add fp, fp, #9 <== NOT EXECUTED
389d4: e794310b ldr r3, [r4, fp, lsl #2] <== NOT EXECUTED
389d8: e5863000 str r3, [r6] <== NOT EXECUTED
}
}
if (rc == 0)
{
rtems_rfs_block_copy_bpos (&map->bpos, bpos);
389dc: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
389e0: e895000c ldm r5, {r2, r3} <== NOT EXECUTED
389e4: e5841018 str r1, [r4, #24] <== NOT EXECUTED
389e8: e5842010 str r2, [r4, #16] <== NOT EXECUTED
389ec: e5843014 str r3, [r4, #20] <== NOT EXECUTED
map->bpos.block = *block;
389f0: e5963000 ldr r3, [r6] <== NOT EXECUTED
389f4: e3a00000 mov r0, #0 <== NOT EXECUTED
389f8: e5843018 str r3, [r4, #24] <== NOT EXECUTED
389fc: ea000010 b 38a44 <rtems_rfs_block_map_find+0xcc> <== NOT EXECUTED
* The map is either singly or doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = bpos->bno % fs->blocks_per_block;
38a00: e5979030 ldr r9, [r7, #48] ; 0x30 <== NOT EXECUTED
38a04: e1a0000b mov r0, fp <== NOT EXECUTED
38a08: e1a01009 mov r1, r9 <== NOT EXECUTED
38a0c: eb0089c9 bl 5b138 <__umodsi3> <== NOT EXECUTED
singly = bpos->bno / fs->blocks_per_block;
38a10: e1a01009 mov r1, r9 <== NOT EXECUTED
* The map is either singly or doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = bpos->bno % fs->blocks_per_block;
38a14: e1a08000 mov r8, r0 <== NOT EXECUTED
singly = bpos->bno / fs->blocks_per_block;
38a18: e1a0000b mov r0, fp <== NOT EXECUTED
38a1c: eb008931 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (map->size.count <= fs->block_map_singly_blocks)
38a20: e5973034 ldr r3, [r7, #52] ; 0x34 <== NOT EXECUTED
38a24: e15a0003 cmp sl, r3 <== NOT EXECUTED
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = bpos->bno % fs->blocks_per_block;
singly = bpos->bno / fs->blocks_per_block;
38a28: e1a0b000 mov fp, r0 <== NOT EXECUTED
38a2c: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
if (map->size.count <= fs->block_map_singly_blocks)
38a30: 9a000009 bls 38a5c <rtems_rfs_block_map_find+0xe4> <== NOT EXECUTED
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
if (map->size.count < fs->block_map_doubly_blocks)
38a34: e5973038 ldr r3, [r7, #56] ; 0x38 <== NOT EXECUTED
38a38: e15a0003 cmp sl, r3 <== NOT EXECUTED
38a3c: 3a000010 bcc 38a84 <rtems_rfs_block_map_find+0x10c> <== NOT EXECUTED
}
if (rc == 0)
{
rtems_rfs_block_copy_bpos (&map->bpos, bpos);
map->bpos.block = *block;
38a40: e3a00006 mov r0, #6 <== NOT EXECUTED
}
return rc;
}
38a44: e28dd008 add sp, sp, #8 <== NOT EXECUTED
38a48: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
return ENXIO;
/*
* If the block position is the same and we have found the block just return it.
*/
if ((bpos->bno == map->bpos.bno) && (map->bpos.block != 0))
38a4c: e5943018 ldr r3, [r4, #24] <== NOT EXECUTED
38a50: e3530000 cmp r3, #0 <== NOT EXECUTED
38a54: 0affffdb beq 389c8 <rtems_rfs_block_map_find+0x50> <== NOT EXECUTED
38a58: eaffffde b 389d8 <rtems_rfs_block_map_find+0x60> <== NOT EXECUTED
{
/*
* This is a single indirect table of blocks anchored off a slot in the
* inode.
*/
rc = rtems_rfs_block_find_indirect (fs,
38a5c: e280b009 add fp, r0, #9 <== NOT EXECUTED
38a60: e794210b ldr r2, [r4, fp, lsl #2] <== NOT EXECUTED
38a64: e1a00007 mov r0, r7 <== NOT EXECUTED
38a68: e1a03008 mov r3, r8 <== NOT EXECUTED
38a6c: e2841038 add r1, r4, #56 ; 0x38 <== NOT EXECUTED
38a70: e58d6000 str r6, [sp] <== NOT EXECUTED
38a74: ebffffa2 bl 38904 <rtems_rfs_block_find_indirect> <== NOT EXECUTED
}
}
}
}
if (rc == 0)
38a78: e3500000 cmp r0, #0 <== NOT EXECUTED
38a7c: 1afffff0 bne 38a44 <rtems_rfs_block_map_find+0xcc> <== NOT EXECUTED
38a80: eaffffd5 b 389dc <rtems_rfs_block_map_find+0x64> <== NOT EXECUTED
* The map is doubly indirect.
*/
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
38a84: e1a01009 mov r1, r9 <== NOT EXECUTED
38a88: eb0089aa bl 5b138 <__umodsi3> <== NOT EXECUTED
if (map->size.count < fs->block_map_doubly_blocks)
{
rc = rtems_rfs_block_find_indirect (fs,
38a8c: e1a01009 mov r1, r9 <== NOT EXECUTED
* The map is doubly indirect.
*/
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
38a90: e1a0a000 mov sl, r0 <== NOT EXECUTED
if (map->size.count < fs->block_map_doubly_blocks)
{
rc = rtems_rfs_block_find_indirect (fs,
38a94: e1a0000b mov r0, fp <== NOT EXECUTED
38a98: eb008912 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
* The map is doubly indirect.
*/
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
38a9c: e28dc008 add ip, sp, #8 <== NOT EXECUTED
if (map->size.count < fs->block_map_doubly_blocks)
{
rc = rtems_rfs_block_find_indirect (fs,
38aa0: e2800009 add r0, r0, #9 <== NOT EXECUTED
38aa4: e7942100 ldr r2, [r4, r0, lsl #2] <== NOT EXECUTED
* The map is doubly indirect.
*/
rtems_rfs_block_no doubly;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
38aa8: e52ca004 str sl, [ip, #-4]! <== NOT EXECUTED
if (map->size.count < fs->block_map_doubly_blocks)
{
rc = rtems_rfs_block_find_indirect (fs,
38aac: e1a0300a mov r3, sl <== NOT EXECUTED
38ab0: e1a00007 mov r0, r7 <== NOT EXECUTED
38ab4: e2841044 add r1, r4, #68 ; 0x44 <== NOT EXECUTED
38ab8: e58dc000 str ip, [sp] <== NOT EXECUTED
38abc: ebffff90 bl 38904 <rtems_rfs_block_find_indirect> <== NOT EXECUTED
&map->doubly_buffer,
map->blocks[doubly],
singly, &singly);
if (rc == 0)
38ac0: e3500000 cmp r0, #0 <== NOT EXECUTED
38ac4: 1affffde bne 38a44 <rtems_rfs_block_map_find+0xcc> <== NOT EXECUTED
{
rc = rtems_rfs_block_find_indirect (fs,
38ac8: e1a00007 mov r0, r7 <== NOT EXECUTED
38acc: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
38ad0: e1a03008 mov r3, r8 <== NOT EXECUTED
38ad4: e2841038 add r1, r4, #56 ; 0x38 <== NOT EXECUTED
38ad8: e58d6000 str r6, [sp] <== NOT EXECUTED
38adc: ebffff88 bl 38904 <rtems_rfs_block_find_indirect> <== NOT EXECUTED
38ae0: eaffffe4 b 38a78 <rtems_rfs_block_map_find+0x100> <== NOT EXECUTED
00038f18 <rtems_rfs_block_map_free_all>:
int
rtems_rfs_block_map_free_all (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map)
{
return rtems_rfs_block_map_shrink (fs, map, map->size.count);
38f18: e5912008 ldr r2, [r1, #8] <== NOT EXECUTED
38f1c: eaffff45 b 38c38 <rtems_rfs_block_map_shrink> <== NOT EXECUTED
00039050 <rtems_rfs_block_map_grow>:
int
rtems_rfs_block_map_grow (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks,
rtems_rfs_block_no* new_block)
{
39050: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
39054: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
39058: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
3905c: e1a04001 mov r4, r1 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if ((map->size.count + blocks) >= rtems_rfs_fs_max_block_map_blocks (fs))
39060: e5902038 ldr r2, [r0, #56] ; 0x38 <== NOT EXECUTED
int
rtems_rfs_block_map_grow (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks,
rtems_rfs_block_no* new_block)
{
39064: e1a06000 mov r6, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if ((map->size.count + blocks) >= rtems_rfs_fs_max_block_map_blocks (fs))
39068: e5911008 ldr r1, [r1, #8] <== NOT EXECUTED
3906c: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
39070: e0801001 add r1, r0, r1 <== NOT EXECUTED
39074: e1510002 cmp r1, r2 <== NOT EXECUTED
int
rtems_rfs_block_map_grow (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks,
rtems_rfs_block_no* new_block)
{
39078: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if ((map->size.count + blocks) >= rtems_rfs_fs_max_block_map_blocks (fs))
3907c: 23a0a01b movcs sl, #27 <== NOT EXECUTED
39080: 2a0000bb bcs 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
39084: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
39088: e3520000 cmp r2, #0 <== NOT EXECUTED
3908c: 0a0000d4 beq 393e4 <rtems_rfs_block_map_grow+0x394> <== NOT EXECUTED
&map->blocks[singly],
upping);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
39090: e2843038 add r3, r4, #56 ; 0x38 <== NOT EXECUTED
return rc;
}
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
39094: e2840044 add r0, r4, #68 ; 0x44 <== NOT EXECUTED
39098: e3a05000 mov r5, #0 <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
3909c: e5941020 ldr r1, [r4, #32] <== NOT EXECUTED
&map->blocks[singly],
upping);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
390a0: e58d300c str r3, [sp, #12] <== NOT EXECUTED
return rc;
}
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
390a4: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
return rc;
}
}
}
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
390a8: e3a08001 mov r8, #1 <== NOT EXECUTED
390ac: ea000011 b 390f8 <rtems_rfs_block_map_grow+0xa8> <== NOT EXECUTED
false, &block);
if (rc > 0)
return rc;
if (map->size.count < RTEMS_RFS_INODE_BLOCKS)
map->blocks[map->size.count] = block;
390b0: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
390b4: e28a3009 add r3, sl, #9 <== NOT EXECUTED
390b8: e7841103 str r1, [r4, r3, lsl #2] <== NOT EXECUTED
390bc: e1a03001 mov r3, r1 <== NOT EXECUTED
}
map->size.count++;
map->size.offset = 0;
if (b == 0)
390c0: e3550000 cmp r5, #0 <== NOT EXECUTED
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
}
map->size.count++;
map->size.offset = 0;
390c4: e3a02000 mov r2, #0 <== NOT EXECUTED
390c8: e584200c str r2, [r4, #12] <== NOT EXECUTED
if (b == 0)
*new_block = block;
390cc: 059d0008 ldreq r0, [sp, #8] <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
390d0: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
}
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
}
map->size.count++;
390d4: e28aa001 add sl, sl, #1 <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
390d8: e2855001 add r5, r5, #1 <== NOT EXECUTED
}
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
}
map->size.count++;
390dc: e584a008 str sl, [r4, #8] <== NOT EXECUTED
map->size.offset = 0;
if (b == 0)
*new_block = block;
390e0: 01a01003 moveq r1, r3 <== NOT EXECUTED
390e4: 05803000 streq r3, [r0] <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
390e8: e1520005 cmp r2, r5 <== NOT EXECUTED
map->size.count++;
map->size.offset = 0;
if (b == 0)
*new_block = block;
map->last_data_block = block;
390ec: e5843020 str r3, [r4, #32] <== NOT EXECUTED
map->dirty = true;
390f0: e5c48000 strb r8, [r4] <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
390f4: 9a0000ba bls 393e4 <rtems_rfs_block_map_grow+0x394> <== NOT EXECUTED
/*
* Allocate the block. If an indirect block is needed and cannot be
* allocated free this block.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_data_block,
390f8: e1a00006 mov r0, r6 <== NOT EXECUTED
390fc: e3a02000 mov r2, #0 <== NOT EXECUTED
39100: e28d3018 add r3, sp, #24 <== NOT EXECUTED
39104: eb000e8e bl 3cb44 <rtems_rfs_group_bitmap_alloc> <== NOT EXECUTED
false, &block);
if (rc > 0)
39108: e3500000 cmp r0, #0 <== NOT EXECUTED
3910c: ca0000b6 bgt 393ec <rtems_rfs_block_map_grow+0x39c> <== NOT EXECUTED
return rc;
if (map->size.count < RTEMS_RFS_INODE_BLOCKS)
39110: e594a008 ldr sl, [r4, #8] <== NOT EXECUTED
39114: e35a0004 cmp sl, #4 <== NOT EXECUTED
39118: 9affffe4 bls 390b0 <rtems_rfs_block_map_grow+0x60> <== NOT EXECUTED
* Single indirect access is occuring. It could still be doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = map->size.count % fs->blocks_per_block;
3911c: e5969030 ldr r9, [r6, #48] ; 0x30 <== NOT EXECUTED
39120: e1a0000a mov r0, sl <== NOT EXECUTED
39124: e1a01009 mov r1, r9 <== NOT EXECUTED
39128: eb008802 bl 5b138 <__umodsi3> <== NOT EXECUTED
singly = map->size.count / fs->blocks_per_block;
3912c: e1a01009 mov r1, r9 <== NOT EXECUTED
* Single indirect access is occuring. It could still be doubly indirect.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = map->size.count % fs->blocks_per_block;
39130: e1a07000 mov r7, r0 <== NOT EXECUTED
singly = map->size.count / fs->blocks_per_block;
39134: e1a0000a mov r0, sl <== NOT EXECUTED
39138: eb00876a bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (map->size.count < fs->block_map_singly_blocks)
3913c: e5963034 ldr r3, [r6, #52] ; 0x34 <== NOT EXECUTED
39140: e15a0003 cmp sl, r3 <== NOT EXECUTED
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = map->size.count % fs->blocks_per_block;
singly = map->size.count / fs->blocks_per_block;
39144: e1a0b000 mov fp, r0 <== NOT EXECUTED
if (map->size.count < fs->block_map_singly_blocks)
39148: 2a00002b bcs 391fc <rtems_rfs_block_map_grow+0x1ac> <== NOT EXECUTED
* Singly indirect tables are being used. Allocate a new block for a
* mapping table if direct is 0 or we are moving up (upping). If upping
* move the direct blocks into the table and if not this is the first
* entry of a new block.
*/
if ((direct == 0) ||
3914c: e3570000 cmp r7, #0 <== NOT EXECUTED
39150: 0a000002 beq 39160 <rtems_rfs_block_map_grow+0x110> <== NOT EXECUTED
39154: e3570005 cmp r7, #5 <== NOT EXECUTED
39158: 03500000 cmpeq r0, #0 <== NOT EXECUTED
3915c: 1a000087 bne 39380 <rtems_rfs_block_map_grow+0x330> <== NOT EXECUTED
/*
* Upping is when we move from direct to singly indirect.
*/
bool upping;
upping = map->size.count == RTEMS_RFS_INODE_BLOCKS;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
39160: e28b3009 add r3, fp, #9 <== NOT EXECUTED
39164: e35a0005 cmp sl, #5 <== NOT EXECUTED
39168: 13a0c000 movne ip, #0 <== NOT EXECUTED
3916c: 03a0c001 moveq ip, #1 <== NOT EXECUTED
39170: e0843103 add r3, r4, r3, lsl #2 <== NOT EXECUTED
39174: e1a00006 mov r0, r6 <== NOT EXECUTED
39178: e1a01004 mov r1, r4 <== NOT EXECUTED
3917c: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
39180: e58dc000 str ip, [sp] <== NOT EXECUTED
39184: ebffff65 bl 38f20 <rtems_rfs_block_map_indirect_alloc> <== NOT EXECUTED
{
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
map->blocks[singly], true);
}
if (rc > 0)
39188: e3500000 cmp r0, #0 <== NOT EXECUTED
3918c: ca000073 bgt 39360 <rtems_rfs_block_map_grow+0x310> <== NOT EXECUTED
return rc;
}
}
}
rtems_rfs_block_set_number (&map->singly_buffer, direct, block);
39190: e5943040 ldr r3, [r4, #64] ; 0x40 <== NOT EXECUTED
39194: e5dd201b ldrb r2, [sp, #27] <== NOT EXECUTED
39198: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3919c: e7c32107 strb r2, [r3, r7, lsl #2] <== NOT EXECUTED
391a0: e5943040 ldr r3, [r4, #64] ; 0x40 <== NOT EXECUTED
391a4: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
391a8: e1dd11ba ldrh r1, [sp, #26] <== NOT EXECUTED
391ac: e1a03107 lsl r3, r7, #2 <== NOT EXECUTED
391b0: e0822003 add r2, r2, r3 <== NOT EXECUTED
391b4: e5c21001 strb r1, [r2, #1] <== NOT EXECUTED
391b8: e5942040 ldr r2, [r4, #64] ; 0x40 <== NOT EXECUTED
391bc: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
391c0: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
391c4: e1a07087 lsl r7, r7, #1 <== NOT EXECUTED
391c8: e1a01421 lsr r1, r1, #8 <== NOT EXECUTED
391cc: e2877001 add r7, r7, #1 <== NOT EXECUTED
391d0: e7c21087 strb r1, [r2, r7, lsl #1] <== NOT EXECUTED
391d4: e5942040 ldr r2, [r4, #64] ; 0x40 <== NOT EXECUTED
391d8: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
391dc: e0823003 add r3, r2, r3 <== NOT EXECUTED
391e0: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
391e4: e5c32003 strb r2, [r3, #3] <== NOT EXECUTED
391e8: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
391ec: e5c48038 strb r8, [r4, #56] ; 0x38 <== NOT EXECUTED
391f0: e594a008 ldr sl, [r4, #8] <== NOT EXECUTED
391f4: e1a01003 mov r1, r3 <== NOT EXECUTED
391f8: eaffffb0 b 390c0 <rtems_rfs_block_map_grow+0x70> <== NOT EXECUTED
* Doubly indirect tables are being used.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no singly_block;
doubly = singly / fs->blocks_per_block;
391fc: e1a01009 mov r1, r9 <== NOT EXECUTED
39200: eb008738 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
singly %= fs->blocks_per_block;
39204: e1a01009 mov r1, r9 <== NOT EXECUTED
* Doubly indirect tables are being used.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no singly_block;
doubly = singly / fs->blocks_per_block;
39208: e1a0a000 mov sl, r0 <== NOT EXECUTED
singly %= fs->blocks_per_block;
3920c: e1a0000b mov r0, fp <== NOT EXECUTED
39210: eb0087c8 bl 5b138 <__umodsi3> <== NOT EXECUTED
* Allocate a new block for a singly indirect table if direct is 0 as
* it is the first entry of a new block. We may also need to allocate a
* doubly indirect block as well. Both always occur when direct is 0
* and the doubly indirect block when singly is 0.
*/
if (direct == 0)
39214: e3570000 cmp r7, #0 <== NOT EXECUTED
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no singly_block;
doubly = singly / fs->blocks_per_block;
singly %= fs->blocks_per_block;
39218: e1a09000 mov r9, r0 <== NOT EXECUTED
* Allocate a new block for a singly indirect table if direct is 0 as
* it is the first entry of a new block. We may also need to allocate a
* doubly indirect block as well. Both always occur when direct is 0
* and the doubly indirect block when singly is 0.
*/
if (direct == 0)
3921c: 1a000034 bne 392f4 <rtems_rfs_block_map_grow+0x2a4> <== NOT EXECUTED
{
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
39220: e1a00006 mov r0, r6 <== NOT EXECUTED
39224: e1a01004 mov r1, r4 <== NOT EXECUTED
39228: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
3922c: e28d3014 add r3, sp, #20 <== NOT EXECUTED
39230: e58d7000 str r7, [sp] <== NOT EXECUTED
39234: ebffff39 bl 38f20 <rtems_rfs_block_map_indirect_alloc> <== NOT EXECUTED
&map->singly_buffer,
&singly_block,
false);
if (rc > 0)
39238: e3500000 cmp r0, #0 <== NOT EXECUTED
3923c: ca00006c bgt 393f4 <rtems_rfs_block_map_grow+0x3a4> <== NOT EXECUTED
/*
* Allocate a new block for a doubly indirect table if singly is 0 as
* it is the first entry of a new singly indirect block.
*/
if ((singly == 0) ||
39240: e3590000 cmp r9, #0 <== NOT EXECUTED
39244: 0a000004 beq 3925c <rtems_rfs_block_map_grow+0x20c> <== NOT EXECUTED
39248: e3590005 cmp r9, #5 <== NOT EXECUTED
3924c: 035a0000 cmpeq sl, #0 <== NOT EXECUTED
39250: 13a0b000 movne fp, #0 <== NOT EXECUTED
39254: 03a0b001 moveq fp, #1 <== NOT EXECUTED
39258: 1a00004f bne 3939c <rtems_rfs_block_map_grow+0x34c> <== NOT EXECUTED
((doubly == 0) && (singly == RTEMS_RFS_INODE_BLOCKS)))
{
bool upping;
upping = map->size.count == fs->block_map_singly_blocks;
rc = rtems_rfs_block_map_indirect_alloc (fs, map,
3925c: e5962034 ldr r2, [r6, #52] ; 0x34 <== NOT EXECUTED
39260: e594c008 ldr ip, [r4, #8] <== NOT EXECUTED
39264: e28a3009 add r3, sl, #9 <== NOT EXECUTED
39268: e15c0002 cmp ip, r2 <== NOT EXECUTED
3926c: 13a0c000 movne ip, #0 <== NOT EXECUTED
39270: 03a0c001 moveq ip, #1 <== NOT EXECUTED
39274: e0843103 add r3, r4, r3, lsl #2 <== NOT EXECUTED
39278: e1a00006 mov r0, r6 <== NOT EXECUTED
3927c: e1a01004 mov r1, r4 <== NOT EXECUTED
39280: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
39284: e58dc000 str ip, [sp] <== NOT EXECUTED
39288: ebffff24 bl 38f20 <rtems_rfs_block_map_indirect_alloc> <== NOT EXECUTED
&map->doubly_buffer,
&map->blocks[doubly],
upping);
if (rc > 0)
3928c: e3500000 cmp r0, #0 <== NOT EXECUTED
39290: ca00005d bgt 3940c <rtems_rfs_block_map_grow+0x3bc> <== NOT EXECUTED
rtems_rfs_group_bitmap_free (fs, false, block);
return rc;
}
}
rtems_rfs_block_set_number (&map->doubly_buffer,
39294: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
39298: e5dd2017 ldrb r2, [sp, #23] <== NOT EXECUTED
3929c: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
392a0: e7c32109 strb r2, [r3, r9, lsl #2] <== NOT EXECUTED
392a4: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
392a8: e5932020 ldr r2, [r3, #32] <== NOT EXECUTED
392ac: e1dd11b6 ldrh r1, [sp, #22] <== NOT EXECUTED
392b0: e1a03109 lsl r3, r9, #2 <== NOT EXECUTED
392b4: e0822003 add r2, r2, r3 <== NOT EXECUTED
392b8: e5c21001 strb r1, [r2, #1] <== NOT EXECUTED
392bc: e594204c ldr r2, [r4, #76] ; 0x4c <== NOT EXECUTED
392c0: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
392c4: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
392c8: e1a09089 lsl r9, r9, #1 <== NOT EXECUTED
392cc: e2899001 add r9, r9, #1 <== NOT EXECUTED
392d0: e1a01421 lsr r1, r1, #8 <== NOT EXECUTED
392d4: e7c21089 strb r1, [r2, r9, lsl #1] <== NOT EXECUTED
392d8: e594204c ldr r2, [r4, #76] ; 0x4c <== NOT EXECUTED
392dc: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
392e0: e0823003 add r3, r2, r3 <== NOT EXECUTED
392e4: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
392e8: e5c32003 strb r2, [r3, #3] <== NOT EXECUTED
392ec: e5c48044 strb r8, [r4, #68] ; 0x44 <== NOT EXECUTED
392f0: eaffffa6 b 39190 <rtems_rfs_block_map_grow+0x140> <== NOT EXECUTED
singly,
singly_block);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs,
392f4: e28aa009 add sl, sl, #9 <== NOT EXECUTED
392f8: e794210a ldr r2, [r4, sl, lsl #2] <== NOT EXECUTED
392fc: e1a00006 mov r0, r6 <== NOT EXECUTED
39300: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
39304: e3a03001 mov r3, #1 <== NOT EXECUTED
39308: eb0001d1 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
&map->doubly_buffer,
map->blocks[doubly],
true);
if (rc > 0)
3930c: e3500000 cmp r0, #0 <== NOT EXECUTED
39310: ca000012 bgt 39360 <rtems_rfs_block_map_grow+0x310> <== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, block);
return rc;
}
singly_block = rtems_rfs_block_get_number (&map->doubly_buffer,
39314: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
39318: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
3931c: e0832109 add r2, r3, r9, lsl #2 <== NOT EXECUTED
39320: e7d30109 ldrb r0, [r3, r9, lsl #2] <== NOT EXECUTED
39324: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
39328: e1a09002 mov r9, r2 <== NOT EXECUTED
3932c: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED
39330: e5d93002 ldrb r3, [r9, #2] <== NOT EXECUTED
39334: e181cc00 orr ip, r1, r0, lsl #24 <== NOT EXECUTED
39338: e18cc802 orr ip, ip, r2, lsl #16 <== NOT EXECUTED
3933c: e18cc403 orr ip, ip, r3, lsl #8 <== NOT EXECUTED
singly);
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
39340: e1a0200c mov r2, ip <== NOT EXECUTED
39344: e1a00006 mov r0, r6 <== NOT EXECUTED
39348: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
3934c: e3a03001 mov r3, #1 <== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, block);
return rc;
}
singly_block = rtems_rfs_block_get_number (&map->doubly_buffer,
39350: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
singly);
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
39354: eb0001be bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
singly_block, true);
if (rc > 0)
39358: e3500000 cmp r0, #0 <== NOT EXECUTED
3935c: daffff8b ble 39190 <rtems_rfs_block_map_grow+0x140> <== NOT EXECUTED
39360: e1a0a000 mov sl, r0 <== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, block);
39364: e3a01000 mov r1, #0 <== NOT EXECUTED
39368: e1a00006 mov r0, r6 <== NOT EXECUTED
3936c: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
39370: eb000dcb bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
map->last_data_block = block;
map->dirty = true;
}
return 0;
}
39374: e1a0000a mov r0, sl <== NOT EXECUTED
39378: e28dd01c add sp, sp, #28 <== NOT EXECUTED
3937c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
&map->blocks[singly],
upping);
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
39380: e280b009 add fp, r0, #9 <== NOT EXECUTED
39384: e794210b ldr r2, [r4, fp, lsl #2] <== NOT EXECUTED
39388: e1a00006 mov r0, r6 <== NOT EXECUTED
3938c: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
39390: e3a03001 mov r3, #1 <== NOT EXECUTED
39394: eb0001ae bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
39398: eaffff7a b 39188 <rtems_rfs_block_map_grow+0x138> <== NOT EXECUTED
return rc;
}
}
else
{
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
3939c: e28aa009 add sl, sl, #9 <== NOT EXECUTED
393a0: e794210a ldr r2, [r4, sl, lsl #2] <== NOT EXECUTED
393a4: e1a00006 mov r0, r6 <== NOT EXECUTED
393a8: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
393ac: e3a03001 mov r3, #1 <== NOT EXECUTED
393b0: eb0001a7 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
map->blocks[doubly], true);
if (rc > 0)
393b4: e3500000 cmp r0, #0 <== NOT EXECUTED
393b8: daffffb5 ble 39294 <rtems_rfs_block_map_grow+0x244> <== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, singly_block);
393bc: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
393c0: e1a0100b mov r1, fp <== NOT EXECUTED
393c4: e1a0a000 mov sl, r0 <== NOT EXECUTED
393c8: e1a00006 mov r0, r6 <== NOT EXECUTED
393cc: eb000db4 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
rtems_rfs_group_bitmap_free (fs, false, block);
393d0: e1a00006 mov r0, r6 <== NOT EXECUTED
393d4: e1a0100b mov r1, fp <== NOT EXECUTED
393d8: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
393dc: eb000db0 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
return rc;
393e0: eaffffe3 b 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
/*
* Allocate a block at a time. The buffer handles hold the blocks so adding
* this way does not thrash the cache with lots of requests.
*/
for (b = 0; b < blocks; b++)
393e4: e3a0a000 mov sl, #0 <== NOT EXECUTED
393e8: eaffffe1 b 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
393ec: e1a0a000 mov sl, r0 <== NOT EXECUTED
393f0: eaffffdf b 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
393f4: e1a0a000 mov sl, r0 <== NOT EXECUTED
&map->singly_buffer,
&singly_block,
false);
if (rc > 0)
{
rtems_rfs_group_bitmap_free (fs, false, block);
393f8: e1a01007 mov r1, r7 <== NOT EXECUTED
393fc: e1a00006 mov r0, r6 <== NOT EXECUTED
39400: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
39404: eb000da6 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
return rc;
39408: eaffffd9 b 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
&map->doubly_buffer,
&map->blocks[doubly],
upping);
if (rc > 0)
{
rtems_rfs_group_bitmap_free (fs, false, singly_block);
3940c: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
39410: e1a0a000 mov sl, r0 <== NOT EXECUTED
39414: e3a01000 mov r1, #0 <== NOT EXECUTED
39418: e1a00006 mov r0, r6 <== NOT EXECUTED
3941c: eb000da0 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
rtems_rfs_group_bitmap_free (fs, false, block);
39420: e1a00006 mov r0, r6 <== NOT EXECUTED
39424: e3a01000 mov r1, #0 <== NOT EXECUTED
39428: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
3942c: eb000d9c bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
return rc;
39430: eaffffcf b 39374 <rtems_rfs_block_map_grow+0x324> <== NOT EXECUTED
00038f20 <rtems_rfs_block_map_indirect_alloc>:
rtems_rfs_block_map_indirect_alloc (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no* block,
bool upping)
{
38f20: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
38f24: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
38f28: e1a04001 mov r4, r1 <== NOT EXECUTED
38f2c: e1a05002 mov r5, r2 <== NOT EXECUTED
38f30: e1a08003 mov r8, r3 <== NOT EXECUTED
int rc;
/*
* Save the new block locally because upping can have *block pointing to the
* slots which are cleared when upping.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_map_block, false, &new_block);
38f34: e591101c ldr r1, [r1, #28] <== NOT EXECUTED
38f38: e3a02000 mov r2, #0 <== NOT EXECUTED
38f3c: e1a0300d mov r3, sp <== NOT EXECUTED
rtems_rfs_block_map_indirect_alloc (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no* block,
bool upping)
{
38f40: e1a06000 mov r6, r0 <== NOT EXECUTED
38f44: e5dd7020 ldrb r7, [sp, #32] <== NOT EXECUTED
int rc;
/*
* Save the new block locally because upping can have *block pointing to the
* slots which are cleared when upping.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_map_block, false, &new_block);
38f48: eb000efd bl 3cb44 <rtems_rfs_group_bitmap_alloc> <== NOT EXECUTED
if (rc > 0)
38f4c: e250a000 subs sl, r0, #0 <== NOT EXECUTED
38f50: da000002 ble 38f60 <rtems_rfs_block_map_indirect_alloc+0x40><== NOT EXECUTED
}
rtems_rfs_buffer_mark_dirty (buffer);
*block = new_block;
map->last_map_block = new_block;
return 0;
}
38f54: e1a0000a mov r0, sl <== NOT EXECUTED
38f58: e28dd004 add sp, sp, #4 <== NOT EXECUTED
38f5c: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
* slots which are cleared when upping.
*/
rc = rtems_rfs_group_bitmap_alloc (fs, map->last_map_block, false, &new_block);
if (rc > 0)
return rc;
rc = rtems_rfs_buffer_handle_request (fs, buffer, new_block, false);
38f60: e1a00006 mov r0, r6 <== NOT EXECUTED
38f64: e1a01005 mov r1, r5 <== NOT EXECUTED
38f68: e59d2000 ldr r2, [sp] <== NOT EXECUTED
38f6c: e3a03000 mov r3, #0 <== NOT EXECUTED
38f70: eb0002b7 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
38f74: e250a000 subs sl, r0, #0 <== NOT EXECUTED
38f78: da000004 ble 38f90 <rtems_rfs_block_map_indirect_alloc+0x70><== NOT EXECUTED
{
rtems_rfs_group_bitmap_free (fs, false, new_block);
38f7c: e1a00006 mov r0, r6 <== NOT EXECUTED
38f80: e3a01000 mov r1, #0 <== NOT EXECUTED
38f84: e59d2000 ldr r2, [sp] <== NOT EXECUTED
38f88: eb000ec5 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
return rc;
38f8c: eafffff0 b 38f54 <rtems_rfs_block_map_indirect_alloc+0x34> <== NOT EXECUTED
}
memset (rtems_rfs_buffer_data (buffer), 0xff, rtems_rfs_fs_block_size (fs));
38f90: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
38f94: e5962008 ldr r2, [r6, #8] <== NOT EXECUTED
38f98: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
38f9c: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
38fa0: eb003549 bl 464cc <memset> <== NOT EXECUTED
if (upping)
38fa4: e3570000 cmp r7, #0 <== NOT EXECUTED
38fa8: 0a000021 beq 39034 <rtems_rfs_block_map_indirect_alloc+0x114><== NOT EXECUTED
38fac: e1a02004 mov r2, r4 <== NOT EXECUTED
38fb0: e3a03000 mov r3, #0 <== NOT EXECUTED
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
38fb4: e3a0c001 mov ip, #1 <== NOT EXECUTED
38fb8: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
38fbc: e5d20027 ldrb r0, [r2, #39] ; 0x27 <== NOT EXECUTED
38fc0: e5911020 ldr r1, [r1, #32] <== NOT EXECUTED
38fc4: e7c10003 strb r0, [r1, r3] <== NOT EXECUTED
38fc8: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
38fcc: e5911020 ldr r1, [r1, #32] <== NOT EXECUTED
38fd0: e1d202b6 ldrh r0, [r2, #38] ; 0x26 <== NOT EXECUTED
38fd4: e0811003 add r1, r1, r3 <== NOT EXECUTED
38fd8: e5c10001 strb r0, [r1, #1] <== NOT EXECUTED
38fdc: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
38fe0: e5920024 ldr r0, [r2, #36] ; 0x24 <== NOT EXECUTED
38fe4: e5911020 ldr r1, [r1, #32] <== NOT EXECUTED
38fe8: e1a00420 lsr r0, r0, #8 <== NOT EXECUTED
38fec: e0811003 add r1, r1, r3 <== NOT EXECUTED
38ff0: e5c10002 strb r0, [r1, #2] <== NOT EXECUTED
38ff4: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
38ff8: e5911020 ldr r1, [r1, #32] <== NOT EXECUTED
38ffc: e5920024 ldr r0, [r2, #36] ; 0x24 <== NOT EXECUTED
39000: e0811003 add r1, r1, r3 <== NOT EXECUTED
39004: e2833004 add r3, r3, #4 <== NOT EXECUTED
{
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
39008: e3530014 cmp r3, #20 <== NOT EXECUTED
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
3900c: e5c10003 strb r0, [r1, #3] <== NOT EXECUTED
39010: e2822004 add r2, r2, #4 <== NOT EXECUTED
39014: e5c5c000 strb ip, [r5] <== NOT EXECUTED
{
int b;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_GROW))
printf ("rtems-rfs: block-map-grow: upping: block-count=%" PRId32 "\n",
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
39018: 1affffe6 bne 38fb8 <rtems_rfs_block_map_indirect_alloc+0x98><== NOT EXECUTED
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
memset (map->blocks, 0, sizeof (map->blocks));
3901c: e3a03000 mov r3, #0 <== NOT EXECUTED
39020: e5843034 str r3, [r4, #52] ; 0x34 <== NOT EXECUTED
39024: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
39028: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
3902c: e584302c str r3, [r4, #44] ; 0x2c <== NOT EXECUTED
39030: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED
}
rtems_rfs_buffer_mark_dirty (buffer);
*block = new_block;
39034: e59d3000 ldr r3, [sp] <== NOT EXECUTED
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
memset (map->blocks, 0, sizeof (map->blocks));
}
rtems_rfs_buffer_mark_dirty (buffer);
39038: e3a02001 mov r2, #1 <== NOT EXECUTED
*block = new_block;
3903c: e5883000 str r3, [r8] <== NOT EXECUTED
map->size.count);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_block_set_number (buffer, b, map->blocks[b]);
memset (map->blocks, 0, sizeof (map->blocks));
}
rtems_rfs_buffer_mark_dirty (buffer);
39040: e5c52000 strb r2, [r5] <== NOT EXECUTED
*block = new_block;
map->last_map_block = new_block;
39044: e584301c str r3, [r4, #28] <== NOT EXECUTED
39048: e3a0a000 mov sl, #0 <== NOT EXECUTED
return 0;
3904c: eaffffc0 b 38f54 <rtems_rfs_block_map_indirect_alloc+0x34> <== NOT EXECUTED
00038b88 <rtems_rfs_block_map_indirect_shrink>:
rtems_rfs_block_map_indirect_shrink (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no indirect,
rtems_rfs_block_no index)
{
38b88: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
38b8c: e59dc010 ldr ip, [sp, #16] <== NOT EXECUTED
* block to be freed and the indirect block is now also free, or we have only
* one indirect table and we can fit the remaining blocks into the inode,
* then either move to the next indirect block or move the remaining blocks
* into the inode and free the indirect table's block.
*/
if ((index == 0) ||
38b90: e35c0000 cmp ip, #0 <== NOT EXECUTED
rtems_rfs_block_map_indirect_shrink (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_buffer_handle* buffer,
rtems_rfs_block_no indirect,
rtems_rfs_block_no index)
{
38b94: e1a04001 mov r4, r1 <== NOT EXECUTED
* block to be freed and the indirect block is now also free, or we have only
* one indirect table and we can fit the remaining blocks into the inode,
* then either move to the next indirect block or move the remaining blocks
* into the inode and free the indirect table's block.
*/
if ((index == 0) ||
38b98: 0a00001d beq 38c14 <rtems_rfs_block_map_indirect_shrink+0x8c><== NOT EXECUTED
38b9c: e35c0005 cmp ip, #5 <== NOT EXECUTED
38ba0: 03530000 cmpeq r3, #0 <== NOT EXECUTED
38ba4: 13a0c000 movne ip, #0 <== NOT EXECUTED
38ba8: 03a0c001 moveq ip, #1 <== NOT EXECUTED
38bac: 11a0000c movne r0, ip <== NOT EXECUTED
38bb0: 18bd8070 popne {r4, r5, r6, pc} <== NOT EXECUTED
((indirect == 0) && (index == RTEMS_RFS_INODE_BLOCKS)))
{
rtems_rfs_block_no block_to_free = map->blocks[indirect];
38bb4: e5923008 ldr r3, [r2, #8] <== NOT EXECUTED
38bb8: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
38bbc: e5915024 ldr r5, [r1, #36] ; 0x24 <== NOT EXECUTED
38bc0: e1a02001 mov r2, r1 <== NOT EXECUTED
* @param indirect The index index in the inode's block table.
* @param index The index in the indirect table of the block.
* @return int The error number (errno). No error if 0.
*/
static int
rtems_rfs_block_map_indirect_shrink (rtems_rfs_file_system* fs,
38bc4: e2836014 add r6, r3, #20 <== NOT EXECUTED
/*
* Move to direct inode access.
*/
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
map->blocks[b] = rtems_rfs_block_get_number (buffer, b);
38bc8: e5d31001 ldrb r1, [r3, #1] <== NOT EXECUTED
38bcc: e5d3c000 ldrb ip, [r3] <== NOT EXECUTED
38bd0: e5d3e003 ldrb lr, [r3, #3] <== NOT EXECUTED
38bd4: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
38bd8: e1811c0c orr r1, r1, ip, lsl #24 <== NOT EXECUTED
38bdc: e5d3c002 ldrb ip, [r3, #2] <== NOT EXECUTED
38be0: e181100e orr r1, r1, lr <== NOT EXECUTED
38be4: e2833004 add r3, r3, #4 <== NOT EXECUTED
38be8: e181140c orr r1, r1, ip, lsl #8 <== NOT EXECUTED
{
/*
* Move to direct inode access.
*/
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
38bec: e1530006 cmp r3, r6 <== NOT EXECUTED
map->blocks[b] = rtems_rfs_block_get_number (buffer, b);
38bf0: e5821024 str r1, [r2, #36] ; 0x24 <== NOT EXECUTED
38bf4: e2822004 add r2, r2, #4 <== NOT EXECUTED
{
/*
* Move to direct inode access.
*/
int b;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
38bf8: 1afffff2 bne 38bc8 <rtems_rfs_block_map_indirect_shrink+0x40><== NOT EXECUTED
* One less singly indirect block in the inode.
*/
map->blocks[indirect] = 0;
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
38bfc: e3a01000 mov r1, #0 <== NOT EXECUTED
38c00: e1a02005 mov r2, r5 <== NOT EXECUTED
38c04: eb000fa6 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
if (rc > 0)
38c08: e3500000 cmp r0, #0 <== NOT EXECUTED
return rc;
map->last_map_block = block_to_free;
38c0c: d584501c strle r5, [r4, #28] <== NOT EXECUTED
}
return rc;
}
38c10: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
* into the inode and free the indirect table's block.
*/
if ((index == 0) ||
((indirect == 0) && (index == RTEMS_RFS_INODE_BLOCKS)))
{
rtems_rfs_block_no block_to_free = map->blocks[indirect];
38c14: e2833009 add r3, r3, #9 <== NOT EXECUTED
38c18: e7915103 ldr r5, [r1, r3, lsl #2] <== NOT EXECUTED
else
{
/*
* One less singly indirect block in the inode.
*/
map->blocks[indirect] = 0;
38c1c: e781c103 str ip, [r1, r3, lsl #2] <== NOT EXECUTED
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
38c20: e1a02005 mov r2, r5 <== NOT EXECUTED
38c24: e3a01000 mov r1, #0 <== NOT EXECUTED
38c28: eb000f9d bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
if (rc > 0)
38c2c: e3500000 cmp r0, #0 <== NOT EXECUTED
return rc;
map->last_map_block = block_to_free;
38c30: d584501c strle r5, [r4, #28] <== NOT EXECUTED
}
return rc;
}
38c34: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
00038ae4 <rtems_rfs_block_map_next_block>:
int
rtems_rfs_block_map_next_block (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_no* block)
{
38ae4: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
rtems_rfs_block_pos bpos;
bpos.bno = map->bpos.bno + 1;
38ae8: e591e010 ldr lr, [r1, #16] <== NOT EXECUTED
int
rtems_rfs_block_map_next_block (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_no* block)
{
38aec: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
rtems_rfs_block_pos bpos;
bpos.bno = map->bpos.bno + 1;
bpos.boff = 0;
38af0: e3a0c000 mov ip, #0 <== NOT EXECUTED
int
rtems_rfs_block_map_next_block (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_no* block)
{
38af4: e1a03002 mov r3, r2 <== NOT EXECUTED
rtems_rfs_block_pos bpos;
bpos.bno = map->bpos.bno + 1;
38af8: e28ee001 add lr, lr, #1 <== NOT EXECUTED
bpos.boff = 0;
bpos.block = 0;
return rtems_rfs_block_map_find (fs, map, &bpos, block);
38afc: e1a0200d mov r2, sp <== NOT EXECUTED
rtems_rfs_block_map_next_block (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_block_no* block)
{
rtems_rfs_block_pos bpos;
bpos.bno = map->bpos.bno + 1;
38b00: e58de000 str lr, [sp] <== NOT EXECUTED
bpos.boff = 0;
bpos.block = 0;
38b04: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
rtems_rfs_block_map* map,
rtems_rfs_block_no* block)
{
rtems_rfs_block_pos bpos;
bpos.bno = map->bpos.bno + 1;
bpos.boff = 0;
38b08: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
bpos.block = 0;
return rtems_rfs_block_map_find (fs, map, &bpos, block);
38b0c: ebffff99 bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
}
38b10: e28dd00c add sp, sp, #12 <== NOT EXECUTED
38b14: e8bd8000 pop {pc} <== NOT EXECUTED
00039600 <rtems_rfs_block_map_open>:
int
rtems_rfs_block_map_open (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* inode,
rtems_rfs_block_map* map)
{
39600: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
* Set the count to 0 so at least find fails, then open the handle and make
* sure the inode has been loaded into memory. If we did not load the inode
* do not unload it. The caller may assume it is still loaded when we return.
*/
map->dirty = false;
39604: e3a05000 mov r5, #0 <== NOT EXECUTED
39608: e5c25000 strb r5, [r2] <== NOT EXECUTED
map->inode = NULL;
3960c: e5825004 str r5, [r2, #4] <== NOT EXECUTED
* @param size A pointer to the block size.
*/
static inline void
rtems_rfs_block_set_size_zero (rtems_rfs_block_size* size)
{
size->count = 0;
39610: e5825008 str r5, [r2, #8] <== NOT EXECUTED
size->offset = 0;
39614: e582500c str r5, [r2, #12] <== NOT EXECUTED
* @param bpos A pointer to the block position.
*/
static inline void
rtems_rfs_block_set_bpos_zero (rtems_rfs_block_pos* bpos)
{
bpos->bno = 0;
39618: e5825010 str r5, [r2, #16] <== NOT EXECUTED
bpos->boff = 0;
3961c: e5825014 str r5, [r2, #20] <== NOT EXECUTED
bpos->block = 0;
39620: e5825018 str r5, [r2, #24] <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
39624: e5c25038 strb r5, [r2, #56] ; 0x38 <== NOT EXECUTED
handle->bnum = 0;
39628: e582503c str r5, [r2, #60] ; 0x3c <== NOT EXECUTED
handle->buffer = NULL;
3962c: e5825040 str r5, [r2, #64] ; 0x40 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
39630: e5c25044 strb r5, [r2, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
39634: e5825048 str r5, [r2, #72] ; 0x48 <== NOT EXECUTED
handle->buffer = NULL;
39638: e582504c str r5, [r2, #76] ; 0x4c <== NOT EXECUTED
int
rtems_rfs_block_map_open (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* inode,
rtems_rfs_block_map* map)
{
3963c: e1a04002 mov r4, r2 <== NOT EXECUTED
39640: e1a07000 mov r7, r0 <== NOT EXECUTED
39644: e1a06001 mov r6, r1 <== NOT EXECUTED
return rc;
rc = rtems_rfs_buffer_handle_open (fs, &map->doubly_buffer);
if (rc > 0)
return rc;
rc = rtems_rfs_inode_load (fs, inode);
39648: eb000eed bl 3d204 <rtems_rfs_inode_load> <== NOT EXECUTED
if (rc > 0)
3964c: e2508000 subs r8, r0, #0 <== NOT EXECUTED
39650: ca000035 bgt 3972c <rtems_rfs_block_map_open+0x12c> <== NOT EXECUTED
/*
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
39654: e596100c ldr r1, [r6, #12] <== NOT EXECUTED
39658: e5846004 str r6, [r4, #4] <== NOT EXECUTED
3965c: e281301c add r3, r1, #28 <== NOT EXECUTED
39660: e1a02004 mov r2, r4 <== NOT EXECUTED
block_size = rtems_rfs_fs_block_size (fs);
return (((uint64_t) (size->count - 1)) * block_size) + offset;
}
int
rtems_rfs_block_map_open (rtems_rfs_file_system* fs,
39664: e2818030 add r8, r1, #48 ; 0x30 <== NOT EXECUTED
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
map->blocks[b] = rtems_rfs_inode_get_block (inode, b);
39668: e5d30001 ldrb r0, [r3, #1] <== NOT EXECUTED
3966c: e5d3c000 ldrb ip, [r3] <== NOT EXECUTED
39670: e5d35003 ldrb r5, [r3, #3] <== NOT EXECUTED
39674: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
39678: e1800c0c orr r0, r0, ip, lsl #24 <== NOT EXECUTED
3967c: e5d3c002 ldrb ip, [r3, #2] <== NOT EXECUTED
39680: e1800005 orr r0, r0, r5 <== NOT EXECUTED
39684: e2833004 add r3, r3, #4 <== NOT EXECUTED
39688: e180040c orr r0, r0, ip, lsl #8 <== NOT EXECUTED
/*
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
3968c: e1530008 cmp r3, r8 <== NOT EXECUTED
map->blocks[b] = rtems_rfs_inode_get_block (inode, b);
39690: e5820024 str r0, [r2, #36] ; 0x24 <== NOT EXECUTED
39694: e2822004 add r2, r2, #4 <== NOT EXECUTED
/*
* Extract the block and block count data from the inode into the targets
* byte order.
*/
map->inode = inode;
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
39698: 1afffff2 bne 39668 <rtems_rfs_block_map_open+0x68> <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
3969c: e281300c add r3, r1, #12 <== NOT EXECUTED
map->blocks[b] = rtems_rfs_inode_get_block (inode, b);
map->size.count = rtems_rfs_inode_get_block_count (inode);
396a0: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
396a4: e5d1000c ldrb r0, [r1, #12] <== NOT EXECUTED
396a8: e5d3c001 ldrb ip, [r3, #1] <== NOT EXECUTED
396ac: e1820c00 orr r0, r2, r0, lsl #24 <== NOT EXECUTED
396b0: e5d32002 ldrb r2, [r3, #2] <== NOT EXECUTED
396b4: e180380c orr r3, r0, ip, lsl #16 <== NOT EXECUTED
396b8: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
396bc: e5843008 str r3, [r4, #8] <== NOT EXECUTED
map->size.offset = rtems_rfs_inode_get_block_offset (inode);
396c0: e5d1200a ldrb r2, [r1, #10] <== NOT EXECUTED
396c4: e5d1300b ldrb r3, [r1, #11] <== NOT EXECUTED
396c8: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
396cc: e584300c str r3, [r4, #12] <== NOT EXECUTED
* @return uint32_t The last map block number.
*/
static inline uint32_t
rtems_rfs_inode_get_last_map_block (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->last_map_block);
396d0: e2813030 add r3, r1, #48 ; 0x30 <== NOT EXECUTED
map->last_map_block = rtems_rfs_inode_get_last_map_block (inode);
396d4: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
396d8: e5d10030 ldrb r0, [r1, #48] ; 0x30 <== NOT EXECUTED
396dc: e5d3c001 ldrb ip, [r3, #1] <== NOT EXECUTED
396e0: e1820c00 orr r0, r2, r0, lsl #24 <== NOT EXECUTED
396e4: e5d32002 ldrb r2, [r3, #2] <== NOT EXECUTED
396e8: e180380c orr r3, r0, ip, lsl #16 <== NOT EXECUTED
396ec: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
396f0: e584301c str r3, [r4, #28] <== NOT EXECUTED
* @return uint32_t The last data block number.
*/
static inline uint32_t
rtems_rfs_inode_get_last_data_block (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->last_data_block);
396f4: e2813034 add r3, r1, #52 ; 0x34 <== NOT EXECUTED
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
396f8: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
396fc: e5d11034 ldrb r1, [r1, #52] ; 0x34 <== NOT EXECUTED
39700: e5d30001 ldrb r0, [r3, #1] <== NOT EXECUTED
39704: e1821c01 orr r1, r2, r1, lsl #24 <== NOT EXECUTED
39708: e5d32002 ldrb r2, [r3, #2] <== NOT EXECUTED
3970c: e1813800 orr r3, r1, r0, lsl #16 <== NOT EXECUTED
39710: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
rc = rtems_rfs_inode_unload (fs, inode, false);
39714: e1a00007 mov r0, r7 <== NOT EXECUTED
39718: e1a01006 mov r1, r6 <== NOT EXECUTED
3971c: e3a02000 mov r2, #0 <== NOT EXECUTED
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
map->blocks[b] = rtems_rfs_inode_get_block (inode, b);
map->size.count = rtems_rfs_inode_get_block_count (inode);
map->size.offset = rtems_rfs_inode_get_block_offset (inode);
map->last_map_block = rtems_rfs_inode_get_last_map_block (inode);
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
39720: e5843020 str r3, [r4, #32] <== NOT EXECUTED
rc = rtems_rfs_inode_unload (fs, inode, false);
return rc;
}
39724: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
map->size.count = rtems_rfs_inode_get_block_count (inode);
map->size.offset = rtems_rfs_inode_get_block_offset (inode);
map->last_map_block = rtems_rfs_inode_get_last_map_block (inode);
map->last_data_block = rtems_rfs_inode_get_last_data_block (inode);
rc = rtems_rfs_inode_unload (fs, inode, false);
39728: ea000e7e b 3d128 <rtems_rfs_inode_unload> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3972c: e2841038 add r1, r4, #56 ; 0x38 <== NOT EXECUTED
39730: e1a00007 mov r0, r7 <== NOT EXECUTED
39734: eb00007c bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
39738: e5c45038 strb r5, [r4, #56] ; 0x38 <== NOT EXECUTED
handle->bnum = 0;
3973c: e584503c str r5, [r4, #60] ; 0x3c <== NOT EXECUTED
handle->buffer = NULL;
39740: e5845040 str r5, [r4, #64] ; 0x40 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
39744: e1a00007 mov r0, r7 <== NOT EXECUTED
39748: e2841044 add r1, r4, #68 ; 0x44 <== NOT EXECUTED
3974c: eb000076 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
39750: e584504c str r5, [r4, #76] ; 0x4c <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
39754: e5c45044 strb r5, [r4, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
39758: e5845048 str r5, [r4, #72] ; 0x48 <== NOT EXECUTED
return rc;
}
3975c: e1a00008 mov r0, r8 <== NOT EXECUTED
39760: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
00038b18 <rtems_rfs_block_map_seek>:
int
rtems_rfs_block_map_seek (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_pos_rel offset,
rtems_rfs_block_no* block)
{
38b18: e92d43f0 push {r4, r5, r6, r7, r8, r9, lr} <== NOT EXECUTED
rtems_rfs_block_pos bpos;
rtems_rfs_block_copy_bpos (&bpos, &map->bpos);
38b1c: e591c014 ldr ip, [r1, #20] <== NOT EXECUTED
static inline void
rtems_rfs_block_add_pos (rtems_rfs_file_system* fs,
rtems_rfs_pos_rel offset,
rtems_rfs_block_pos* bpos)
{
rtems_rfs_block_get_bpos (fs,
38b20: e5905008 ldr r5, [r0, #8] <== NOT EXECUTED
38b24: e591e010 ldr lr, [r1, #16] <== NOT EXECUTED
int
rtems_rfs_block_map_seek (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_pos_rel offset,
rtems_rfs_block_no* block)
{
38b28: e1a04001 mov r4, r1 <== NOT EXECUTED
38b2c: e021ce95 mla r1, r5, lr, ip <== NOT EXECUTED
38b30: e0928001 adds r8, r2, r1 <== NOT EXECUTED
38b34: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
38b38: e2a39000 adc r9, r3, #0 <== NOT EXECUTED
rtems_rfs_block_pos bpos;
rtems_rfs_block_copy_bpos (&bpos, &map->bpos);
38b3c: e5947018 ldr r7, [r4, #24] <== NOT EXECUTED
int
rtems_rfs_block_map_seek (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
rtems_rfs_pos_rel offset,
rtems_rfs_block_no* block)
{
38b40: e1a06000 mov r6, r0 <== NOT EXECUTED
38b44: e1a01008 mov r1, r8 <== NOT EXECUTED
38b48: e1a02009 mov r2, r9 <== NOT EXECUTED
38b4c: e1a0300d mov r3, sp <== NOT EXECUTED
rtems_rfs_block_pos bpos;
rtems_rfs_block_copy_bpos (&bpos, &map->bpos);
38b50: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
38b54: e58d7008 str r7, [sp, #8] <== NOT EXECUTED
38b58: e58de000 str lr, [sp] <== NOT EXECUTED
38b5c: ebffff27 bl 38800 <rtems_rfs_block_get_bpos> <== NOT EXECUTED
rtems_rfs_block_get_pos (fs, bpos) + offset,
bpos);
bpos->block = 0;
38b60: e3a0c000 mov ip, #0 <== NOT EXECUTED
rtems_rfs_block_add_pos (fs, offset, &bpos);
return rtems_rfs_block_map_find (fs, map, &bpos, block);
38b64: e1a00006 mov r0, r6 <== NOT EXECUTED
38b68: e1a01004 mov r1, r4 <== NOT EXECUTED
38b6c: e1a0200d mov r2, sp <== NOT EXECUTED
38b70: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
static inline void
rtems_rfs_block_add_pos (rtems_rfs_file_system* fs,
rtems_rfs_pos_rel offset,
rtems_rfs_block_pos* bpos)
{
rtems_rfs_block_get_bpos (fs,
38b74: e1a0500d mov r5, sp <== NOT EXECUTED
rtems_rfs_block_get_pos (fs, bpos) + offset,
bpos);
bpos->block = 0;
38b78: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
38b7c: ebffff7d bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
}
38b80: e28dd00c add sp, sp, #12 <== NOT EXECUTED
38b84: e8bd83f0 pop {r4, r5, r6, r7, r8, r9, pc} <== NOT EXECUTED
00038c38 <rtems_rfs_block_map_shrink>:
int
rtems_rfs_block_map_shrink (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks)
{
38c38: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_SHRINK))
printf ("rtems-rfs: block-map-shrink: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if (map->size.count == 0)
38c3c: e5918008 ldr r8, [r1, #8] <== NOT EXECUTED
38c40: e3580000 cmp r8, #0 <== NOT EXECUTED
int
rtems_rfs_block_map_shrink (rtems_rfs_file_system* fs,
rtems_rfs_block_map* map,
size_t blocks)
{
38c44: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
38c48: e1a04001 mov r4, r1 <== NOT EXECUTED
38c4c: e1a05000 mov r5, r0 <== NOT EXECUTED
38c50: e1a0a002 mov sl, r2 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BLOCK_MAP_SHRINK))
printf ("rtems-rfs: block-map-shrink: entry: blocks=%zd count=%" PRIu32 "\n",
blocks, map->size.count);
if (map->size.count == 0)
38c54: e1a09008 mov r9, r8 <== NOT EXECUTED
38c58: 0a00007b beq 38e4c <rtems_rfs_block_map_shrink+0x214> <== NOT EXECUTED
return 0;
if (blocks > map->size.count)
38c5c: e1580002 cmp r8, r2 <== NOT EXECUTED
38c60: 3a00007c bcc 38e58 <rtems_rfs_block_map_shrink+0x220> <== NOT EXECUTED
blocks = map->size.count;
while (blocks)
38c64: e3520000 cmp r2, #0 <== NOT EXECUTED
38c68: 0a00006f beq 38e2c <rtems_rfs_block_map_shrink+0x1f4> <== NOT EXECUTED
{
/*
* Request the indirect block and then obtain the block number from the
* indirect block.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
38c6c: e2843038 add r3, r4, #56 ; 0x38 <== NOT EXECUTED
38c70: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
doubly_singly = singly % fs->blocks_per_block;
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
38c74: e2843044 add r3, r4, #68 ; 0x44 <== NOT EXECUTED
38c78: e58d300c str r3, [sp, #12] <== NOT EXECUTED
38c7c: ea000014 b 38cd4 <rtems_rfs_block_map_shrink+0x9c> <== NOT EXECUTED
{
/*
* We have less than RTEMS_RFS_INODE_BLOCKS so they are held in the
* inode.
*/
block_to_free = map->blocks[block];
38c80: e2899008 add r9, r9, #8 <== NOT EXECUTED
map->blocks[block] = 0;
38c84: e3a03000 mov r3, #0 <== NOT EXECUTED
{
/*
* We have less than RTEMS_RFS_INODE_BLOCKS so they are held in the
* inode.
*/
block_to_free = map->blocks[block];
38c88: e7946109 ldr r6, [r4, r9, lsl #2] <== NOT EXECUTED
map->blocks[block] = 0;
38c8c: e7843109 str r3, [r4, r9, lsl #2] <== NOT EXECUTED
{
rc = EIO;
break;
}
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
38c90: e1a00005 mov r0, r5 <== NOT EXECUTED
38c94: e3a01000 mov r1, #0 <== NOT EXECUTED
38c98: e1a02006 mov r2, r6 <== NOT EXECUTED
38c9c: eb000f80 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
if (rc > 0)
38ca0: e3500000 cmp r0, #0 <== NOT EXECUTED
38ca4: ca000069 bgt 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
return rc;
map->size.count--;
38ca8: e5948008 ldr r8, [r4, #8] <== NOT EXECUTED
map->size.offset = 0;
38cac: e3a03000 mov r3, #0 <== NOT EXECUTED
}
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
if (rc > 0)
return rc;
map->size.count--;
38cb0: e2489001 sub r9, r8, #1 <== NOT EXECUTED
map->size.offset = 0;
38cb4: e584300c str r3, [r4, #12] <== NOT EXECUTED
return 0;
if (blocks > map->size.count)
blocks = map->size.count;
while (blocks)
38cb8: e25aa001 subs sl, sl, #1 <== NOT EXECUTED
if (rc > 0)
return rc;
map->size.count--;
map->size.offset = 0;
map->last_data_block = block_to_free;
map->dirty = true;
38cbc: e3a03001 mov r3, #1 <== NOT EXECUTED
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
if (rc > 0)
return rc;
map->size.count--;
map->size.offset = 0;
map->last_data_block = block_to_free;
38cc0: e5846020 str r6, [r4, #32] <== NOT EXECUTED
}
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
if (rc > 0)
return rc;
map->size.count--;
38cc4: e5849008 str r9, [r4, #8] <== NOT EXECUTED
map->size.offset = 0;
map->last_data_block = block_to_free;
map->dirty = true;
38cc8: e5c43000 strb r3, [r4] <== NOT EXECUTED
}
}
rc = rtems_rfs_group_bitmap_free (fs, false, block_to_free);
if (rc > 0)
return rc;
map->size.count--;
38ccc: e1a08009 mov r8, r9 <== NOT EXECUTED
return 0;
if (blocks > map->size.count)
blocks = map->size.count;
while (blocks)
38cd0: 0a000051 beq 38e1c <rtems_rfs_block_map_shrink+0x1e4> <== NOT EXECUTED
{
rtems_rfs_block_no block;
rtems_rfs_block_no block_to_free;
int rc;
block = map->size.count - 1;
38cd4: e249b001 sub fp, r9, #1 <== NOT EXECUTED
if (block < RTEMS_RFS_INODE_BLOCKS)
38cd8: e35b0004 cmp fp, #4 <== NOT EXECUTED
38cdc: 9affffe7 bls 38c80 <rtems_rfs_block_map_shrink+0x48> <== NOT EXECUTED
* table of block numbers.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = block % fs->blocks_per_block;
38ce0: e5956030 ldr r6, [r5, #48] ; 0x30 <== NOT EXECUTED
38ce4: e1a0000b mov r0, fp <== NOT EXECUTED
38ce8: e1a01006 mov r1, r6 <== NOT EXECUTED
38cec: eb008911 bl 5b138 <__umodsi3> <== NOT EXECUTED
singly = block / fs->blocks_per_block;
38cf0: e1a01006 mov r1, r6 <== NOT EXECUTED
* table of block numbers.
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = block % fs->blocks_per_block;
38cf4: e1a07000 mov r7, r0 <== NOT EXECUTED
singly = block / fs->blocks_per_block;
38cf8: e1a0000b mov r0, fp <== NOT EXECUTED
38cfc: eb008879 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
if (block < fs->block_map_singly_blocks)
38d00: e5953034 ldr r3, [r5, #52] ; 0x34 <== NOT EXECUTED
38d04: e15b0003 cmp fp, r3 <== NOT EXECUTED
*/
rtems_rfs_block_no direct;
rtems_rfs_block_no singly;
direct = block % fs->blocks_per_block;
singly = block / fs->blocks_per_block;
38d08: e1a0c000 mov ip, r0 <== NOT EXECUTED
if (block < fs->block_map_singly_blocks)
38d0c: 3a000053 bcc 38e60 <rtems_rfs_block_map_shrink+0x228> <== NOT EXECUTED
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
singly, direct);
if (rc)
return rc;
}
else if (block < fs->block_map_doubly_blocks)
38d10: e5953038 ldr r3, [r5, #56] ; 0x38 <== NOT EXECUTED
38d14: e15b0003 cmp fp, r3 <== NOT EXECUTED
38d18: 2a00003f bcs 38e1c <rtems_rfs_block_map_shrink+0x1e4> <== NOT EXECUTED
* value is still valid for doubly indirect tables.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
38d1c: e1a01006 mov r1, r6 <== NOT EXECUTED
38d20: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
38d24: eb00886f bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
doubly_singly = singly % fs->blocks_per_block;
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
38d28: e2803009 add r3, r0, #9 <== NOT EXECUTED
38d2c: e7942103 ldr r2, [r4, r3, lsl #2] <== NOT EXECUTED
* value is still valid for doubly indirect tables.
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
38d30: e1a0b000 mov fp, r0 <== NOT EXECUTED
doubly_singly = singly % fs->blocks_per_block;
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
38d34: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
38d38: e1a00005 mov r0, r5 <== NOT EXECUTED
38d3c: e3a03001 mov r3, #1 <== NOT EXECUTED
38d40: eb000343 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
map->blocks[doubly], true);
if (rc > 0)
38d44: e3500000 cmp r0, #0 <== NOT EXECUTED
38d48: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
38d4c: ca00003f bgt 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
doubly_singly = singly % fs->blocks_per_block;
38d50: e1a01006 mov r1, r6 <== NOT EXECUTED
38d54: e1a0000c mov r0, ip <== NOT EXECUTED
38d58: eb0088f6 bl 5b138 <__umodsi3> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &map->doubly_buffer,
map->blocks[doubly], true);
if (rc > 0)
return rc;
singly = rtems_rfs_block_get_number (&map->doubly_buffer,
38d5c: e594304c ldr r3, [r4, #76] ; 0x4c <== NOT EXECUTED
38d60: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
38d64: e0832100 add r2, r3, r0, lsl #2 <== NOT EXECUTED
38d68: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
38d6c: e7d39100 ldrb r9, [r3, r0, lsl #2] <== NOT EXECUTED
38d70: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED
38d74: e0833100 add r3, r3, r0, lsl #2 <== NOT EXECUTED
38d78: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
38d7c: e1819c09 orr r9, r1, r9, lsl #24 <== NOT EXECUTED
38d80: e1899802 orr r9, r9, r2, lsl #16 <== NOT EXECUTED
38d84: e1899403 orr r9, r9, r3, lsl #8 <== NOT EXECUTED
*/
rtems_rfs_block_no doubly;
rtems_rfs_block_no doubly_singly;
doubly = singly / fs->blocks_per_block;
doubly_singly = singly % fs->blocks_per_block;
38d88: e1a08000 mov r8, r0 <== NOT EXECUTED
doubly_singly);
/*
* Read the singly indirect table and get the block number.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
38d8c: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
38d90: e1a00005 mov r0, r5 <== NOT EXECUTED
38d94: e1a02009 mov r2, r9 <== NOT EXECUTED
38d98: e3a03001 mov r3, #1 <== NOT EXECUTED
38d9c: eb00032c bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
singly, true);
if (rc > 0)
38da0: e3500000 cmp r0, #0 <== NOT EXECUTED
38da4: ca000029 bgt 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38da8: e5943040 ldr r3, [r4, #64] ; 0x40 <== NOT EXECUTED
38dac: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
38db0: e0832107 add r2, r3, r7, lsl #2 <== NOT EXECUTED
38db4: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
38db8: e7d36107 ldrb r6, [r3, r7, lsl #2] <== NOT EXECUTED
38dbc: e5d22001 ldrb r2, [r2, #1] <== NOT EXECUTED
38dc0: e0833107 add r3, r3, r7, lsl #2 <== NOT EXECUTED
38dc4: e1816c06 orr r6, r1, r6, lsl #24 <== NOT EXECUTED
38dc8: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
38dcc: e1866802 orr r6, r6, r2, lsl #16 <== NOT EXECUTED
direct);
if (direct == 0)
38dd0: e3570000 cmp r7, #0 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
singly, true);
if (rc > 0)
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38dd4: e1866403 orr r6, r6, r3, lsl #8 <== NOT EXECUTED
direct);
if (direct == 0)
38dd8: 1affffac bne 38c90 <rtems_rfs_block_map_shrink+0x58> <== NOT EXECUTED
{
rc = rtems_rfs_group_bitmap_free (fs, false, singly);
38ddc: e1a01007 mov r1, r7 <== NOT EXECUTED
38de0: e1a00005 mov r0, r5 <== NOT EXECUTED
38de4: e1a02009 mov r2, r9 <== NOT EXECUTED
38de8: eb000f2d bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
if (rc > 0)
38dec: e3500000 cmp r0, #0 <== NOT EXECUTED
38df0: ca000016 bgt 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
return rc;
map->last_map_block = singly;
38df4: e584901c str r9, [r4, #28] <== NOT EXECUTED
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->doubly_buffer,
38df8: e1a0300b mov r3, fp <== NOT EXECUTED
38dfc: e1a00005 mov r0, r5 <== NOT EXECUTED
38e00: e1a01004 mov r1, r4 <== NOT EXECUTED
38e04: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
38e08: e58d8000 str r8, [sp] <== NOT EXECUTED
38e0c: ebffff5d bl 38b88 <rtems_rfs_block_map_indirect_shrink> <== NOT EXECUTED
doubly, doubly_singly);
if (rc)
38e10: e3500000 cmp r0, #0 <== NOT EXECUTED
38e14: 0affff9d beq 38c90 <rtems_rfs_block_map_shrink+0x58> <== NOT EXECUTED
38e18: ea00000c b 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
map->last_data_block = block_to_free;
map->dirty = true;
blocks--;
}
if (map->size.count == 0)
38e1c: e3590000 cmp r9, #0 <== NOT EXECUTED
{
map->last_map_block = 0;
map->last_data_block = 0;
38e20: 05849020 streq r9, [r4, #32] <== NOT EXECUTED
blocks--;
}
if (map->size.count == 0)
{
map->last_map_block = 0;
38e24: 0584901c streq r9, [r4, #28] <== NOT EXECUTED
map->last_data_block = 0;
38e28: 01a09008 moveq r9, r8 <== NOT EXECUTED
}
/*
* Keep the position inside the map.
*/
if (rtems_rfs_block_pos_past_end (&map->bpos, &map->size))
38e2c: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
38e30: e3530000 cmp r3, #0 <== NOT EXECUTED
38e34: 1a000026 bne 38ed4 <rtems_rfs_block_map_shrink+0x29c> <== NOT EXECUTED
38e38: e1590003 cmp r9, r3 <== NOT EXECUTED
38e3c: 9a000026 bls 38edc <rtems_rfs_block_map_shrink+0x2a4> <== NOT EXECUTED
38e40: e2492001 sub r2, r9, #1 <== NOT EXECUTED
38e44: e1530002 cmp r3, r2 <== NOT EXECUTED
38e48: 0a00002d beq 38f04 <rtems_rfs_block_map_shrink+0x2cc> <== NOT EXECUTED
rtems_rfs_block_size_get_bpos (&map->size, &map->bpos);
38e4c: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
}
38e50: e28dd010 add sp, sp, #16 <== NOT EXECUTED
38e54: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
blocks, map->size.count);
if (map->size.count == 0)
return 0;
if (blocks > map->size.count)
38e58: e1a0a008 mov sl, r8 <== NOT EXECUTED
38e5c: eaffff82 b 38c6c <rtems_rfs_block_map_shrink+0x34> <== NOT EXECUTED
{
/*
* Request the indirect block and then obtain the block number from the
* indirect block.
*/
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
38e60: e2803009 add r3, r0, #9 <== NOT EXECUTED
38e64: e7942103 ldr r2, [r4, r3, lsl #2] <== NOT EXECUTED
38e68: e1a00005 mov r0, r5 <== NOT EXECUTED
38e6c: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
38e70: e3a03001 mov r3, #1 <== NOT EXECUTED
38e74: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
38e78: eb0002f5 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
map->blocks[singly], true);
if (rc > 0)
38e7c: e3500000 cmp r0, #0 <== NOT EXECUTED
38e80: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
38e84: cafffff1 bgt 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38e88: e5943040 ldr r3, [r4, #64] ; 0x40 <== NOT EXECUTED
38e8c: e593e020 ldr lr, [r3, #32] <== NOT EXECUTED
direct);
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
38e90: e1a00005 mov r0, r5 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
map->blocks[singly], true);
if (rc > 0)
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38e94: e08e6107 add r6, lr, r7, lsl #2 <== NOT EXECUTED
direct);
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
38e98: e1a0300c mov r3, ip <== NOT EXECUTED
38e9c: e1a01004 mov r1, r4 <== NOT EXECUTED
38ea0: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
map->blocks[singly], true);
if (rc > 0)
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38ea4: e5d6b002 ldrb fp, [r6, #2] <== NOT EXECUTED
38ea8: e5d69003 ldrb r9, [r6, #3] <== NOT EXECUTED
38eac: e7de8107 ldrb r8, [lr, r7, lsl #2] <== NOT EXECUTED
38eb0: e5d66001 ldrb r6, [r6, #1] <== NOT EXECUTED
direct);
rc = rtems_rfs_block_map_indirect_shrink (fs, map, &map->singly_buffer,
38eb4: e58d7000 str r7, [sp] <== NOT EXECUTED
38eb8: ebffff32 bl 38b88 <rtems_rfs_block_map_indirect_shrink> <== NOT EXECUTED
singly, direct);
if (rc)
38ebc: e3500000 cmp r0, #0 <== NOT EXECUTED
38ec0: 1affffe2 bne 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &map->singly_buffer,
map->blocks[singly], true);
if (rc > 0)
return rc;
block_to_free = rtems_rfs_block_get_number (&map->singly_buffer,
38ec4: e1898c08 orr r8, r9, r8, lsl #24 <== NOT EXECUTED
38ec8: e1886806 orr r6, r8, r6, lsl #16 <== NOT EXECUTED
38ecc: e186640b orr r6, r6, fp, lsl #8 <== NOT EXECUTED
38ed0: eaffff6e b 38c90 <rtems_rfs_block_map_shrink+0x58> <== NOT EXECUTED
}
/*
* Keep the position inside the map.
*/
if (rtems_rfs_block_pos_past_end (&map->bpos, &map->size))
38ed4: e3590000 cmp r9, #0 <== NOT EXECUTED
38ed8: 1affffd6 bne 38e38 <rtems_rfs_block_map_shrink+0x200> <== NOT EXECUTED
38edc: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
rtems_rfs_block_size_get_bpos (&map->size, &map->bpos);
38ee0: e3530000 cmp r3, #0 <== NOT EXECUTED
38ee4: e5849010 str r9, [r4, #16] <== NOT EXECUTED
38ee8: e3a00000 mov r0, #0 <== NOT EXECUTED
38eec: 12499001 subne r9, r9, #1 <== NOT EXECUTED
38ef0: e5843014 str r3, [r4, #20] <== NOT EXECUTED
38ef4: e5840018 str r0, [r4, #24] <== NOT EXECUTED
38ef8: 15849010 strne r9, [r4, #16] <== NOT EXECUTED
38efc: 1affffd3 bne 38e50 <rtems_rfs_block_map_shrink+0x218> <== NOT EXECUTED
38f00: eaffffd1 b 38e4c <rtems_rfs_block_map_shrink+0x214> <== NOT EXECUTED
}
/*
* Keep the position inside the map.
*/
if (rtems_rfs_block_pos_past_end (&map->bpos, &map->size))
38f04: e5942014 ldr r2, [r4, #20] <== NOT EXECUTED
38f08: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
38f0c: e1520003 cmp r2, r3 <== NOT EXECUTED
38f10: 8afffff2 bhi 38ee0 <rtems_rfs_block_map_shrink+0x2a8> <== NOT EXECUTED
38f14: eaffffcc b 38e4c <rtems_rfs_block_map_shrink+0x214> <== NOT EXECUTED
00042a2c <rtems_rfs_buffer_bdbuf_release>:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
printf ("rtems-rfs: bdbuf-release: block=%" PRIuPTR " bdbuf=%" PRIu32 " %s\n",
((intptr_t) buffer->user),
buffer->block, modified ? "(modified)" : "");
if (modified)
42a2c: e31100ff tst r1, #255 ; 0xff <== NOT EXECUTED
}
int
rtems_rfs_buffer_bdbuf_release (rtems_rfs_buffer* buffer,
bool modified)
{
42a30: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
printf ("rtems-rfs: bdbuf-release: block=%" PRIuPTR " bdbuf=%" PRIu32 " %s\n",
((intptr_t) buffer->user),
buffer->block, modified ? "(modified)" : "");
if (modified)
42a34: 0a000003 beq 42a48 <rtems_rfs_buffer_bdbuf_release+0x1c> <== NOT EXECUTED
sc = rtems_bdbuf_release_modified (buffer);
42a38: ebff067b bl 442c <rtems_bdbuf_release_modified> <== NOT EXECUTED
else
sc = rtems_bdbuf_release (buffer);
if (sc != RTEMS_SUCCESSFUL)
42a3c: e3500000 cmp r0, #0 <== NOT EXECUTED
#endif
rc = EIO;
}
return rc;
}
42a40: 13a00005 movne r0, #5 <== NOT EXECUTED
42a44: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
buffer->block, modified ? "(modified)" : "");
if (modified)
sc = rtems_bdbuf_release_modified (buffer);
else
sc = rtems_bdbuf_release (buffer);
42a48: ebff0699 bl 44b4 <rtems_bdbuf_release> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
42a4c: e3500000 cmp r0, #0 <== NOT EXECUTED
#endif
rc = EIO;
}
return rc;
}
42a50: 13a00005 movne r0, #5 <== NOT EXECUTED
42a54: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00042a58 <rtems_rfs_buffer_bdbuf_request>:
rtems_rfs_buffer** buffer)
{
rtems_status_code sc;
int rc = 0;
if (read)
42a58: e31200ff tst r2, #255 ; 0xff <== NOT EXECUTED
int
rtems_rfs_buffer_bdbuf_request (rtems_rfs_file_system* fs,
rtems_rfs_buffer_block block,
bool read,
rtems_rfs_buffer** buffer)
{
42a5c: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
42a60: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_status_code sc;
int rc = 0;
if (read)
42a64: 0a000005 beq 42a80 <rtems_rfs_buffer_bdbuf_request+0x28> <== NOT EXECUTED
sc = rtems_bdbuf_read (rtems_rfs_fs_device (fs), block, buffer);
42a68: e590000c ldr r0, [r0, #12] <== NOT EXECUTED
42a6c: e8900003 ldm r0, {r0, r1} <== NOT EXECUTED
42a70: ebff0b20 bl 56f8 <rtems_bdbuf_read> <== NOT EXECUTED
else
sc = rtems_bdbuf_get (rtems_rfs_fs_device (fs), block, buffer);
if (sc != RTEMS_SUCCESSFUL)
42a74: e3500000 cmp r0, #0 <== NOT EXECUTED
#endif
rc = EIO;
}
return rc;
}
42a78: 13a00005 movne r0, #5 <== NOT EXECUTED
42a7c: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
int rc = 0;
if (read)
sc = rtems_bdbuf_read (rtems_rfs_fs_device (fs), block, buffer);
else
sc = rtems_bdbuf_get (rtems_rfs_fs_device (fs), block, buffer);
42a80: e590000c ldr r0, [r0, #12] <== NOT EXECUTED
42a84: e8900003 ldm r0, {r0, r1} <== NOT EXECUTED
42a88: ebff0ae6 bl 5628 <rtems_bdbuf_get> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
42a8c: e3500000 cmp r0, #0 <== NOT EXECUTED
#endif
rc = EIO;
}
return rc;
}
42a90: 13a00005 movne r0, #5 <== NOT EXECUTED
42a94: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
000398a8 <rtems_rfs_buffer_close>:
/*
* Change the block size to the media device size. It will release and sync
* all buffers.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_media_block_size (fs));
398a8: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
return 0;
}
int
rtems_rfs_buffer_close (rtems_rfs_file_system* fs)
{
398ac: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
/*
* Change the block size to the media device size. It will release and sync
* all buffers.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_media_block_size (fs));
398b0: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
return 0;
}
int
rtems_rfs_buffer_close (rtems_rfs_file_system* fs)
{
398b4: e1a04000 mov r4, r0 <== NOT EXECUTED
/*
* Change the block size to the media device size. It will release and sync
* all buffers.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_media_block_size (fs));
398b8: ebffffe3 bl 3984c <rtems_rfs_buffer_setblksize> <== NOT EXECUTED
398bc: e1a05000 mov r5, r0 <== NOT EXECUTED
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CLOSE))
printf ("rtems-rfs: buffer-close: set media block size failed: %d: %s\n",
rc, strerror (rc));
#if RTEMS_RFS_USE_LIBBLOCK
rtems_disk_release (fs->disk);
398c0: e594000c ldr r0, [r4, #12] <== NOT EXECUTED
398c4: ebff3458 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
rc, strerror (rc));
}
#endif
return rc;
}
398c8: e1a00005 mov r0, r5 <== NOT EXECUTED
398cc: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
00039c84 <rtems_rfs_buffer_handle_close>:
* @return int The error number (errno). No error if 0.
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
39c84: e92d4010 push {r4, lr} <== NOT EXECUTED
39c88: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_rfs_buffer_handle_release (fs, handle);
39c8c: ebffff26 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
39c90: e3a00000 mov r0, #0 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
39c94: e5840008 str r0, [r4, #8] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
39c98: e5c40000 strb r0, [r4] <== NOT EXECUTED
handle->bnum = 0;
39c9c: e5840004 str r0, [r4, #4] <== NOT EXECUTED
handle->buffer = NULL;
return 0;
}
39ca0: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0003992c <rtems_rfs_buffer_handle_release>:
rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (handle))
3992c: e5913008 ldr r3, [r1, #8] <== NOT EXECUTED
39930: e3530000 cmp r3, #0 <== NOT EXECUTED
}
int
rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
39934: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
39938: e1a04001 mov r4, r1 <== NOT EXECUTED
3993c: e1a05000 mov r5, r0 <== NOT EXECUTED
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (handle))
39940: 01a06003 moveq r6, r3 <== NOT EXECUTED
39944: 0a000008 beq 3996c <rtems_rfs_buffer_handle_release+0x40> <== NOT EXECUTED
rtems_rfs_buffer_bnum (handle),
rtems_rfs_buffer_dirty (handle) ? "(dirty)" : "",
rtems_rfs_buffer_refs (handle),
rtems_rfs_buffer_refs (handle) == 0 ? "BAD REF COUNT" : "");
if (rtems_rfs_buffer_refs (handle) > 0)
39948: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
3994c: e3560000 cmp r6, #0 <== NOT EXECUTED
rtems_rfs_buffer_refs_down (handle);
39950: c2466001 subgt r6, r6, #1 <== NOT EXECUTED
39954: c5836034 strgt r6, [r3, #52] ; 0x34 <== NOT EXECUTED
if (rtems_rfs_buffer_refs (handle) == 0)
39958: e3560000 cmp r6, #0 <== NOT EXECUTED
3995c: 13a06000 movne r6, #0 <== NOT EXECUTED
39960: 0a000003 beq 39974 <rtems_rfs_buffer_handle_release+0x48> <== NOT EXECUTED
rtems_chain_append (&fs->release, rtems_rfs_buffer_link (handle));
fs->release_count++;
}
}
}
handle->buffer = NULL;
39964: e3a03000 mov r3, #0 <== NOT EXECUTED
39968: e5843008 str r3, [r4, #8] <== NOT EXECUTED
}
return rc;
}
3996c: e1a00006 mov r0, r6 <== NOT EXECUTED
39970: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
39974: e1a00003 mov r0, r3 <== NOT EXECUTED
39978: ebff4dcc bl d0b0 <_Chain_Extract> <== NOT EXECUTED
rtems_rfs_buffer_refs_down (handle);
if (rtems_rfs_buffer_refs (handle) == 0)
{
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
3997c: e595304c ldr r3, [r5, #76] ; 0x4c <== NOT EXECUTED
if (rtems_rfs_fs_no_local_cache (fs))
39980: e5952000 ldr r2, [r5] <== NOT EXECUTED
rtems_rfs_buffer_refs_down (handle);
if (rtems_rfs_buffer_refs (handle) == 0)
{
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
39984: e2433001 sub r3, r3, #1 <== NOT EXECUTED
if (rtems_rfs_fs_no_local_cache (fs))
39988: e3120002 tst r2, #2 <== NOT EXECUTED
rtems_rfs_buffer_refs_down (handle);
if (rtems_rfs_buffer_refs (handle) == 0)
{
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
3998c: e585304c str r3, [r5, #76] ; 0x4c <== NOT EXECUTED
if (rtems_rfs_fs_no_local_cache (fs))
39990: 1a00001c bne 39a08 <rtems_rfs_buffer_handle_release+0xdc> <== NOT EXECUTED
* head.
*
* This code stops a large series of transactions causing all the
* buffers in the cache being held in queues of this file system.
*/
if ((fs->release_count +
39994: e595205c ldr r2, [r5, #92] ; 0x5c <== NOT EXECUTED
39998: e595306c ldr r3, [r5, #108] ; 0x6c <== NOT EXECUTED
fs->release_modified_count) >= fs->max_held_buffers)
3999c: e595103c ldr r1, [r5, #60] ; 0x3c <== NOT EXECUTED
* head.
*
* This code stops a large series of transactions causing all the
* buffers in the cache being held in queues of this file system.
*/
if ((fs->release_count +
399a0: e0830002 add r0, r3, r2 <== NOT EXECUTED
fs->release_modified_count) >= fs->max_held_buffers)
399a4: e1500001 cmp r0, r1 <== NOT EXECUTED
399a8: 3a00000c bcc 399e0 <rtems_rfs_buffer_handle_release+0xb4> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_RELEASE))
printf ("rtems-rfs: buffer-release: local cache overflow:"
" %" PRIu32 "\n", fs->release_count + fs->release_modified_count);
if (fs->release_count > fs->release_modified_count)
399ac: e1520003 cmp r2, r3 <== NOT EXECUTED
399b0: 8a000021 bhi 39a3c <rtems_rfs_buffer_handle_release+0x110> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
399b4: e2850060 add r0, r5, #96 ; 0x60 <== NOT EXECUTED
399b8: ebff4dc5 bl d0d4 <_Chain_Get> <== NOT EXECUTED
}
else
{
buffer =
(rtems_rfs_buffer*) rtems_chain_get (&fs->release_modified);
fs->release_modified_count--;
399bc: e595306c ldr r3, [r5, #108] ; 0x6c <== NOT EXECUTED
399c0: e2433001 sub r3, r3, #1 <== NOT EXECUTED
399c4: e585306c str r3, [r5, #108] ; 0x6c <== NOT EXECUTED
399c8: e3a06001 mov r6, #1 <== NOT EXECUTED
modified = true;
}
buffer->user = (void*) 0;
399cc: e3a03000 mov r3, #0 <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (buffer, modified);
399d0: e1a01006 mov r1, r6 <== NOT EXECUTED
buffer =
(rtems_rfs_buffer*) rtems_chain_get (&fs->release_modified);
fs->release_modified_count--;
modified = true;
}
buffer->user = (void*) 0;
399d4: e5803038 str r3, [r0, #56] ; 0x38 <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (buffer, modified);
399d8: eb002413 bl 42a2c <rtems_rfs_buffer_bdbuf_release> <== NOT EXECUTED
399dc: e1a06000 mov r6, r0 <== NOT EXECUTED
}
if (rtems_rfs_buffer_dirty (handle))
399e0: e5d43000 ldrb r3, [r4] <== NOT EXECUTED
399e4: e3530000 cmp r3, #0 <== NOT EXECUTED
399e8: 0a00000c beq 39a20 <rtems_rfs_buffer_handle_release+0xf4> <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
399ec: e2850060 add r0, r5, #96 ; 0x60 <== NOT EXECUTED
399f0: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
399f4: ebff4da2 bl d084 <_Chain_Append> <== NOT EXECUTED
{
rtems_chain_append (&fs->release_modified,
rtems_rfs_buffer_link (handle));
fs->release_modified_count++;
399f8: e595306c ldr r3, [r5, #108] ; 0x6c <== NOT EXECUTED
399fc: e2833001 add r3, r3, #1 <== NOT EXECUTED
39a00: e585306c str r3, [r5, #108] ; 0x6c <== NOT EXECUTED
39a04: eaffffd6 b 39964 <rtems_rfs_buffer_handle_release+0x38> <== NOT EXECUTED
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
if (rtems_rfs_fs_no_local_cache (fs))
{
handle->buffer->user = (void*) 0;
39a08: e5940008 ldr r0, [r4, #8] <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (handle->buffer,
39a0c: e5d41000 ldrb r1, [r4] <== NOT EXECUTED
rtems_chain_extract (rtems_rfs_buffer_link (handle));
fs->buffers_count--;
if (rtems_rfs_fs_no_local_cache (fs))
{
handle->buffer->user = (void*) 0;
39a10: e5806038 str r6, [r0, #56] ; 0x38 <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (handle->buffer,
39a14: eb002404 bl 42a2c <rtems_rfs_buffer_bdbuf_release> <== NOT EXECUTED
39a18: e1a06000 mov r6, r0 <== NOT EXECUTED
39a1c: eaffffd0 b 39964 <rtems_rfs_buffer_handle_release+0x38> <== NOT EXECUTED
39a20: e2850050 add r0, r5, #80 ; 0x50 <== NOT EXECUTED
39a24: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
39a28: ebff4d95 bl d084 <_Chain_Append> <== NOT EXECUTED
fs->release_modified_count++;
}
else
{
rtems_chain_append (&fs->release, rtems_rfs_buffer_link (handle));
fs->release_count++;
39a2c: e595305c ldr r3, [r5, #92] ; 0x5c <== NOT EXECUTED
39a30: e2833001 add r3, r3, #1 <== NOT EXECUTED
39a34: e585305c str r3, [r5, #92] ; 0x5c <== NOT EXECUTED
39a38: eaffffc9 b 39964 <rtems_rfs_buffer_handle_release+0x38> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
39a3c: e2850050 add r0, r5, #80 ; 0x50 <== NOT EXECUTED
39a40: ebff4da3 bl d0d4 <_Chain_Get> <== NOT EXECUTED
" %" PRIu32 "\n", fs->release_count + fs->release_modified_count);
if (fs->release_count > fs->release_modified_count)
{
buffer = (rtems_rfs_buffer*) rtems_chain_get (&fs->release);
fs->release_count--;
39a44: e595305c ldr r3, [r5, #92] ; 0x5c <== NOT EXECUTED
39a48: e2433001 sub r3, r3, #1 <== NOT EXECUTED
39a4c: e585305c str r3, [r5, #92] ; 0x5c <== NOT EXECUTED
39a50: eaffffdd b 399cc <rtems_rfs_buffer_handle_release+0xa0> <== NOT EXECUTED
00039a54 <rtems_rfs_buffer_handle_request>:
int
rtems_rfs_buffer_handle_request (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle,
rtems_rfs_buffer_block block,
bool read)
{
39a54: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
39a58: e1a05001 mov r5, r1 <== NOT EXECUTED
/*
* If the handle has a buffer release it. This allows a handle to be reused
* without needing to close then open it again.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
39a5c: e5911008 ldr r1, [r1, #8] <== NOT EXECUTED
39a60: e3510000 cmp r1, #0 <== NOT EXECUTED
int
rtems_rfs_buffer_handle_request (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle,
rtems_rfs_buffer_block block,
bool read)
{
39a64: e1a06000 mov r6, r0 <== NOT EXECUTED
39a68: e1a04002 mov r4, r2 <== NOT EXECUTED
39a6c: e20370ff and r7, r3, #255 ; 0xff <== NOT EXECUTED
/*
* If the handle has a buffer release it. This allows a handle to be reused
* without needing to close then open it again.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
39a70: 0a00000d beq 39aac <rtems_rfs_buffer_handle_request+0x58> <== NOT EXECUTED
{
/*
* Treat block 0 as special to handle the loading of the super block.
*/
if (block && (rtems_rfs_buffer_bnum (handle) == block))
39a74: e3520000 cmp r2, #0 <== NOT EXECUTED
39a78: 0a000003 beq 39a8c <rtems_rfs_buffer_handle_request+0x38> <== NOT EXECUTED
39a7c: e5953004 ldr r3, [r5, #4] <== NOT EXECUTED
39a80: e1530002 cmp r3, r2 <== NOT EXECUTED
39a84: 03a00000 moveq r0, #0 <== NOT EXECUTED
39a88: 08bd85f0 popeq {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_HANDLE_REQUEST))
printf ("rtems-rfs: buffer-request: handle has buffer: %" PRIu32 "\n",
rtems_rfs_buffer_bnum (handle));
rc = rtems_rfs_buffer_handle_release (fs, handle);
39a8c: e1a00006 mov r0, r6 <== NOT EXECUTED
39a90: e1a01005 mov r1, r5 <== NOT EXECUTED
39a94: ebffffa4 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
if (rc > 0)
39a98: e3500000 cmp r0, #0 <== NOT EXECUTED
39a9c: c8bd85f0 popgt {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
return rc;
handle->dirty = false;
39aa0: e3a03000 mov r3, #0 <== NOT EXECUTED
handle->bnum = 0;
39aa4: e5853004 str r3, [r5, #4] <== NOT EXECUTED
rtems_rfs_buffer_bnum (handle));
rc = rtems_rfs_buffer_handle_release (fs, handle);
if (rc > 0)
return rc;
handle->dirty = false;
39aa8: e5c53000 strb r3, [r5] <== NOT EXECUTED
* currently attached to a handle. If it is share the access. A buffer could
* be shared where different parts of the block have separate functions. An
* example is an inode block and the file system needs to handle 2 inodes in
* the same block at the same time.
*/
if (fs->buffers_count)
39aac: e596104c ldr r1, [r6, #76] ; 0x4c <== NOT EXECUTED
39ab0: e3510000 cmp r1, #0 <== NOT EXECUTED
39ab4: 0595a008 ldreq sl, [r5, #8] <== NOT EXECUTED
39ab8: 0a000005 beq 39ad4 <rtems_rfs_buffer_handle_request+0x80> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Last(
Chain_Control *the_chain
)
{
return the_chain->last;
39abc: e5968048 ldr r8, [r6, #72] ; 0x48 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head(
Chain_Control *the_chain
)
{
return (Chain_Node *) the_chain;
39ac0: e2862040 add r2, r6, #64 ; 0x40 <== NOT EXECUTED
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
39ac4: e1580002 cmp r8, r2 <== NOT EXECUTED
39ac8: 1a000018 bne 39b30 <rtems_rfs_buffer_handle_request+0xdc> <== NOT EXECUTED
39acc: e3a0a000 mov sl, #0 <== NOT EXECUTED
if (fs->buffers_count)
{
/*
* Check the active buffer list for shared buffers.
*/
handle->buffer = rtems_rfs_scan_chain (&fs->buffers,
39ad0: e585a008 str sl, [r5, #8] <== NOT EXECUTED
/*
* If the buffer has not been found check the local cache of released
* buffers. There are release and released modified lists to preserve the
* state.
*/
if (!rtems_rfs_fs_no_local_cache (fs) &&
39ad4: e5963000 ldr r3, [r6] <== NOT EXECUTED
39ad8: e3130002 tst r3, #2 <== NOT EXECUTED
39adc: 1a00003c bne 39bd4 <rtems_rfs_buffer_handle_request+0x180> <== NOT EXECUTED
39ae0: e35a0000 cmp sl, #0 <== NOT EXECUTED
39ae4: 0a00001e beq 39b64 <rtems_rfs_buffer_handle_request+0x110> <== NOT EXECUTED
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
fs->release_modified_count)
{
handle->buffer = rtems_rfs_scan_chain (&fs->release_modified,
39ae8: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
39aec: e1a0a001 mov sl, r1 <== NOT EXECUTED
}
/*
* Increase the reference count of the buffer.
*/
rtems_rfs_buffer_refs_up (handle);
39af0: e59a3034 ldr r3, [sl, #52] ; 0x34 <== NOT EXECUTED
39af4: e2833001 add r3, r3, #1 <== NOT EXECUTED
39af8: e58a3034 str r3, [sl, #52] ; 0x34 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
39afc: e2860040 add r0, r6, #64 ; 0x40 <== NOT EXECUTED
39b00: ebff4d5f bl d084 <_Chain_Append> <== NOT EXECUTED
rtems_chain_append (&fs->buffers, rtems_rfs_buffer_link (handle));
fs->buffers_count++;
39b04: e596204c ldr r2, [r6, #76] ; 0x4c <== NOT EXECUTED
handle->buffer->user = (void*) ((intptr_t) block);
39b08: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
/*
* Increase the reference count of the buffer.
*/
rtems_rfs_buffer_refs_up (handle);
rtems_chain_append (&fs->buffers, rtems_rfs_buffer_link (handle));
fs->buffers_count++;
39b0c: e2822001 add r2, r2, #1 <== NOT EXECUTED
39b10: e586204c str r2, [r6, #76] ; 0x4c <== NOT EXECUTED
handle->buffer->user = (void*) ((intptr_t) block);
39b14: e5834038 str r4, [r3, #56] ; 0x38 <== NOT EXECUTED
handle->bnum = block;
39b18: e5854004 str r4, [r5, #4] <== NOT EXECUTED
39b1c: e3a00000 mov r0, #0 <== NOT EXECUTED
printf ("rtems-rfs: buffer-request: block=%" PRIu32 " bdbuf-%s=%" PRIu32 " refs=%d\n",
block, read ? "read" : "get", handle->buffer->block,
handle->buffer->references);
return 0;
}
39b20: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Previous(
Chain_Node *the_node
)
{
return the_node->previous;
39b24: e5988004 ldr r8, [r8, #4] <== NOT EXECUTED
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
39b28: e1580002 cmp r8, r2 <== NOT EXECUTED
39b2c: 0affffe6 beq 39acc <rtems_rfs_buffer_handle_request+0x78> <== NOT EXECUTED
buffer = (rtems_rfs_buffer*) node;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
39b30: e5983038 ldr r3, [r8, #56] ; 0x38 <== NOT EXECUTED
39b34: e1530004 cmp r3, r4 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
{
buffer = (rtems_rfs_buffer*) node;
39b38: e1a0a008 mov sl, r8 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
39b3c: 1afffff8 bne 39b24 <rtems_rfs_buffer_handle_request+0xd0> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf (": found block=%" PRIuPTR "\n",
((intptr_t)(buffer->user)));
(*count)--;
39b40: e2411001 sub r1, r1, #1 <== NOT EXECUTED
39b44: e586104c str r1, [r6, #76] ; 0x4c <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
39b48: e1a00008 mov r0, r8 <== NOT EXECUTED
39b4c: ebff4d57 bl d0b0 <_Chain_Extract> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
39b50: e3a03000 mov r3, #0 <== NOT EXECUTED
39b54: e5883000 str r3, [r8] <== NOT EXECUTED
39b58: e5883004 str r3, [r8, #4] <== NOT EXECUTED
if (fs->buffers_count)
{
/*
* Check the active buffer list for shared buffers.
*/
handle->buffer = rtems_rfs_scan_chain (&fs->buffers,
39b5c: e585a008 str sl, [r5, #8] <== NOT EXECUTED
39b60: eaffffdb b 39ad4 <rtems_rfs_buffer_handle_request+0x80> <== NOT EXECUTED
!rtems_rfs_buffer_handle_has_block (handle))
{
/*
* Check the local cache of released buffers.
*/
if (fs->release_count)
39b64: e596105c ldr r1, [r6, #92] ; 0x5c <== NOT EXECUTED
39b68: e3510000 cmp r1, #0 <== NOT EXECUTED
39b6c: 1a000028 bne 39c14 <rtems_rfs_buffer_handle_request+0x1c0> <== NOT EXECUTED
handle->buffer = rtems_rfs_scan_chain (&fs->release,
&fs->release_count,
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
fs->release_modified_count)
39b70: e596106c ldr r1, [r6, #108] ; 0x6c <== NOT EXECUTED
if (fs->release_count)
handle->buffer = rtems_rfs_scan_chain (&fs->release,
&fs->release_count,
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
39b74: e3510000 cmp r1, #0 <== NOT EXECUTED
39b78: 0a000018 beq 39be0 <rtems_rfs_buffer_handle_request+0x18c> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Last(
Chain_Control *the_chain
)
{
return the_chain->last;
39b7c: e5968068 ldr r8, [r6, #104] ; 0x68 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head(
Chain_Control *the_chain
)
{
return (Chain_Node *) the_chain;
39b80: e2862060 add r2, r6, #96 ; 0x60 <== NOT EXECUTED
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
39b84: e1580002 cmp r8, r2 <== NOT EXECUTED
39b88: 1a000003 bne 39b9c <rtems_rfs_buffer_handle_request+0x148> <== NOT EXECUTED
39b8c: ea000039 b 39c78 <rtems_rfs_buffer_handle_request+0x224> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Previous(
Chain_Node *the_node
)
{
return the_node->previous;
39b90: e5988004 ldr r8, [r8, #4] <== NOT EXECUTED
39b94: e1520008 cmp r2, r8 <== NOT EXECUTED
39b98: 0a000036 beq 39c78 <rtems_rfs_buffer_handle_request+0x224> <== NOT EXECUTED
buffer = (rtems_rfs_buffer*) node;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
39b9c: e5983038 ldr r3, [r8, #56] ; 0x38 <== NOT EXECUTED
39ba0: e1530004 cmp r3, r4 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
{
buffer = (rtems_rfs_buffer*) node;
39ba4: e1a0a008 mov sl, r8 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
39ba8: 1afffff8 bne 39b90 <rtems_rfs_buffer_handle_request+0x13c> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf (": found block=%" PRIuPTR "\n",
((intptr_t)(buffer->user)));
(*count)--;
39bac: e2411001 sub r1, r1, #1 <== NOT EXECUTED
39bb0: e586106c str r1, [r6, #108] ; 0x6c <== NOT EXECUTED
39bb4: e1a00008 mov r0, r8 <== NOT EXECUTED
39bb8: ebff4d3c bl d0b0 <_Chain_Extract> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
39bbc: e3a03000 mov r3, #0 <== NOT EXECUTED
block);
/*
* If we found a buffer retain the dirty buffer state.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
rtems_rfs_buffer_mark_dirty (handle);
39bc0: e3a02001 mov r2, #1 <== NOT EXECUTED
39bc4: e5883000 str r3, [r8] <== NOT EXECUTED
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
fs->release_modified_count)
{
handle->buffer = rtems_rfs_scan_chain (&fs->release_modified,
39bc8: e5858008 str r8, [r5, #8] <== NOT EXECUTED
block);
/*
* If we found a buffer retain the dirty buffer state.
*/
if (rtems_rfs_buffer_handle_has_block (handle))
rtems_rfs_buffer_mark_dirty (handle);
39bcc: e5c52000 strb r2, [r5] <== NOT EXECUTED
39bd0: e5883004 str r3, [r8, #4] <== NOT EXECUTED
}
/*
* If not located we request the buffer from the I/O layer.
*/
if (!rtems_rfs_buffer_handle_has_block (handle))
39bd4: e35a0000 cmp sl, #0 <== NOT EXECUTED
39bd8: 15951008 ldrne r1, [r5, #8] <== NOT EXECUTED
39bdc: 1affffc3 bne 39af0 <rtems_rfs_buffer_handle_request+0x9c> <== NOT EXECUTED
{
rc = rtems_rfs_buffer_io_request (fs, block, read, &handle->buffer);
39be0: e1a01004 mov r1, r4 <== NOT EXECUTED
39be4: e2853008 add r3, r5, #8 <== NOT EXECUTED
39be8: e1a02007 mov r2, r7 <== NOT EXECUTED
39bec: e1a00006 mov r0, r6 <== NOT EXECUTED
39bf0: eb002398 bl 42a58 <rtems_rfs_buffer_bdbuf_request> <== NOT EXECUTED
rtems_chain_set_off_chain (rtems_rfs_buffer_link(handle));
39bf4: e5951008 ldr r1, [r5, #8] <== NOT EXECUTED
39bf8: e3a03000 mov r3, #0 <== NOT EXECUTED
if (rc > 0)
39bfc: e3500000 cmp r0, #0 <== NOT EXECUTED
39c00: e5813000 str r3, [r1] <== NOT EXECUTED
39c04: e5813004 str r3, [r1, #4] <== NOT EXECUTED
39c08: c8bd85f0 popgt {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
39c0c: e1a0a001 mov sl, r1 <== NOT EXECUTED
39c10: eaffffb6 b 39af0 <rtems_rfs_buffer_handle_request+0x9c> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Last(
Chain_Control *the_chain
)
{
return the_chain->last;
39c14: e5968058 ldr r8, [r6, #88] ; 0x58 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Head(
Chain_Control *the_chain
)
{
return (Chain_Node *) the_chain;
39c18: e2862050 add r2, r6, #80 ; 0x50 <== NOT EXECUTED
node = rtems_chain_last (chain);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: buffer-scan: count=%" PRIu32 ", block=%" PRIu32 ": ", *count, block);
while (!rtems_chain_is_head (chain, node))
39c1c: e1580002 cmp r8, r2 <== NOT EXECUTED
39c20: 1a000003 bne 39c34 <rtems_rfs_buffer_handle_request+0x1e0> <== NOT EXECUTED
39c24: ea000010 b 39c6c <rtems_rfs_buffer_handle_request+0x218> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Previous(
Chain_Node *the_node
)
{
return the_node->previous;
39c28: e5988004 ldr r8, [r8, #4] <== NOT EXECUTED
39c2c: e1580002 cmp r8, r2 <== NOT EXECUTED
39c30: 0a00000d beq 39c6c <rtems_rfs_buffer_handle_request+0x218> <== NOT EXECUTED
buffer = (rtems_rfs_buffer*) node;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("%" PRIuPTR " ", ((intptr_t) buffer->user));
if (((rtems_rfs_buffer_block) ((intptr_t)(buffer->user))) == block)
39c34: e5983038 ldr r3, [r8, #56] ; 0x38 <== NOT EXECUTED
39c38: e1530004 cmp r3, r4 <== NOT EXECUTED
39c3c: 1afffff9 bne 39c28 <rtems_rfs_buffer_handle_request+0x1d4> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf (": found block=%" PRIuPTR "\n",
((intptr_t)(buffer->user)));
(*count)--;
39c40: e2411001 sub r1, r1, #1 <== NOT EXECUTED
39c44: e586105c str r1, [r6, #92] ; 0x5c <== NOT EXECUTED
39c48: e1a00008 mov r0, r8 <== NOT EXECUTED
39c4c: ebff4d17 bl d0b0 <_Chain_Extract> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain(
Chain_Node *node
)
{
node->next = node->previous = NULL;
39c50: e3a03000 mov r3, #0 <== NOT EXECUTED
if (fs->release_count)
handle->buffer = rtems_rfs_scan_chain (&fs->release,
&fs->release_count,
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
39c54: e3580000 cmp r8, #0 <== NOT EXECUTED
39c58: e5883000 str r3, [r8] <== NOT EXECUTED
39c5c: e5883004 str r3, [r8, #4] <== NOT EXECUTED
{
/*
* Check the local cache of released buffers.
*/
if (fs->release_count)
handle->buffer = rtems_rfs_scan_chain (&fs->release,
39c60: e5858008 str r8, [r5, #8] <== NOT EXECUTED
&fs->release_count,
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
39c64: 1affff9f bne 39ae8 <rtems_rfs_buffer_handle_request+0x94> <== NOT EXECUTED
39c68: eaffffc0 b 39b70 <rtems_rfs_buffer_handle_request+0x11c> <== NOT EXECUTED
{
/*
* Check the local cache of released buffers.
*/
if (fs->release_count)
handle->buffer = rtems_rfs_scan_chain (&fs->release,
39c6c: e3a03000 mov r3, #0 <== NOT EXECUTED
39c70: e5853008 str r3, [r5, #8] <== NOT EXECUTED
39c74: eaffffbd b 39b70 <rtems_rfs_buffer_handle_request+0x11c> <== NOT EXECUTED
block);
if (!rtems_rfs_buffer_handle_has_block (handle) &&
fs->release_modified_count)
{
handle->buffer = rtems_rfs_scan_chain (&fs->release_modified,
39c78: e3a03000 mov r3, #0 <== NOT EXECUTED
39c7c: e5853008 str r3, [r5, #8] <== NOT EXECUTED
39c80: eaffffd6 b 39be0 <rtems_rfs_buffer_handle_request+0x18c> <== NOT EXECUTED
000398d0 <rtems_rfs_buffer_open>:
return rc;
}
int
rtems_rfs_buffer_open (const char* name, rtems_rfs_file_system* fs)
{
398d0: e92d4010 push {r4, lr} <== NOT EXECUTED
398d4: e24dd048 sub sp, sp, #72 ; 0x48 <== NOT EXECUTED
398d8: e1a04001 mov r4, r1 <== NOT EXECUTED
struct stat st;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
printf ("rtems-rfs: buffer-open: opening: %s\n", name);
if (stat (name, &st) < 0)
398dc: e1a0100d mov r1, sp <== NOT EXECUTED
398e0: ebff3f54 bl 9638 <stat> <== NOT EXECUTED
398e4: e3500000 cmp r0, #0 <== NOT EXECUTED
398e8: b3a00002 movlt r0, #2 <== NOT EXECUTED
398ec: ba000004 blt 39904 <rtems_rfs_buffer_open+0x34> <== NOT EXECUTED
#if RTEMS_RFS_USE_LIBBLOCK
/*
* Is the device a block device ?
*/
if (!S_ISBLK (st.st_mode))
398f0: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
398f4: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
398f8: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
398fc: 0a000002 beq 3990c <rtems_rfs_buffer_open+0x3c> <== NOT EXECUTED
/*
* Check that device is registred as a block device and lock it.
*/
fs->disk = rtems_disk_obtain (st.st_rdev);
if (!fs->disk)
39900: e3a00005 mov r0, #5 <== NOT EXECUTED
printf ("rtems-rfs: buffer-open: blks=%" PRId32 ", blk-size=%" PRId32 "\n",
rtems_rfs_fs_media_blocks (fs),
rtems_rfs_fs_media_block_size (fs));
return 0;
}
39904: e28dd048 add sp, sp, #72 ; 0x48 <== NOT EXECUTED
39908: e8bd8010 pop {r4, pc} <== NOT EXECUTED
}
/*
* Check that device is registred as a block device and lock it.
*/
fs->disk = rtems_disk_obtain (st.st_rdev);
3990c: e28d1018 add r1, sp, #24 <== NOT EXECUTED
39910: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
39914: ebff33b0 bl 67dc <rtems_disk_obtain> <== NOT EXECUTED
if (!fs->disk)
39918: e3500000 cmp r0, #0 <== NOT EXECUTED
}
/*
* Check that device is registred as a block device and lock it.
*/
fs->disk = rtems_disk_obtain (st.st_rdev);
3991c: e584000c str r0, [r4, #12] <== NOT EXECUTED
if (!fs->disk)
39920: 13a00000 movne r0, #0 <== NOT EXECUTED
39924: 1afffff6 bne 39904 <rtems_rfs_buffer_open+0x34> <== NOT EXECUTED
39928: eafffff4 b 39900 <rtems_rfs_buffer_open+0x30> <== NOT EXECUTED
0003984c <rtems_rfs_buffer_setblksize>:
int
rtems_rfs_buffer_setblksize (rtems_rfs_file_system* fs, size_t size)
{
3984c: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
39850: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
39854: e1a05000 mov r5, r0 <== NOT EXECUTED
39858: e28d4004 add r4, sp, #4 <== NOT EXECUTED
3985c: e5241004 str r1, [r4, #-4]! <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
printf ("rtems-rfs: buffer-setblksize: block size: %zu\n", size);
rc = rtems_rfs_buffers_release (fs);
39860: ebffffdb bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
printf ("rtems-rfs: buffer-setblksize: buffer release failed: %d: %s\n",
rc, strerror (rc));
rc = rtems_rfs_buffer_sync (fs);
39864: e1a00005 mov r0, r5 <== NOT EXECUTED
39868: ebffffeb bl 3981c <rtems_rfs_buffer_sync> <== NOT EXECUTED
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SETBLKSIZE))
printf ("rtems-rfs: buffer-setblksize: device sync failed: %d: %s\n",
rc, strerror (rc));
#if RTEMS_RFS_USE_LIBBLOCK
rc = fs->disk->ioctl (fs->disk, RTEMS_BLKIO_SETBLKSIZE, &size);
3986c: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
39870: e3a01102 mov r1, #-2147483648 ; 0x80000000 <== NOT EXECUTED
39874: e2811911 add r1, r1, #278528 ; 0x44000 <== NOT EXECUTED
39878: e2811f81 add r1, r1, #516 ; 0x204 <== NOT EXECUTED
3987c: e1a0200d mov r2, sp <== NOT EXECUTED
39880: e1a00003 mov r0, r3 <== NOT EXECUTED
39884: e1a0e00f mov lr, pc <== NOT EXECUTED
39888: e593f028 ldr pc, [r3, #40] ; 0x28 <== NOT EXECUTED
if (rc < 0)
3988c: e3500000 cmp r0, #0 <== NOT EXECUTED
39890: ba000001 blt 3989c <rtems_rfs_buffer_setblksize+0x50> <== NOT EXECUTED
rc = errno;
#endif
return rc;
}
39894: e28dd004 add sp, sp, #4 <== NOT EXECUTED
39898: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
rc, strerror (rc));
#if RTEMS_RFS_USE_LIBBLOCK
rc = fs->disk->ioctl (fs->disk, RTEMS_BLKIO_SETBLKSIZE, &size);
if (rc < 0)
rc = errno;
3989c: eb0025d3 bl 42ff0 <__errno> <== NOT EXECUTED
398a0: e5900000 ldr r0, [r0] <== NOT EXECUTED
398a4: eafffffa b 39894 <rtems_rfs_buffer_setblksize+0x48> <== NOT EXECUTED
0003981c <rtems_rfs_buffer_sync>:
/*
* @todo Split in the separate files for each type.
*/
#if RTEMS_RFS_USE_LIBBLOCK
sc = rtems_bdbuf_syncdev (rtems_rfs_fs_device (fs));
3981c: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
return rc;
}
int
rtems_rfs_buffer_sync (rtems_rfs_file_system* fs)
{
39820: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
39824: e1a04000 mov r4, r0 <== NOT EXECUTED
/*
* @todo Split in the separate files for each type.
*/
#if RTEMS_RFS_USE_LIBBLOCK
sc = rtems_bdbuf_syncdev (rtems_rfs_fs_device (fs));
39828: e8930003 ldm r3, {r0, r1} <== NOT EXECUTED
3982c: ebff2877 bl 3a10 <rtems_bdbuf_syncdev> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
39830: e3500000 cmp r0, #0 <== NOT EXECUTED
39834: 13a05005 movne r5, #5 <== NOT EXECUTED
39838: 03a05000 moveq r5, #0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_SYNC))
printf ("rtems-rfs: buffer-sync: device sync failed: %s\n",
rtems_status_text (sc));
result = EIO;
}
rtems_disk_release (fs->disk);
3983c: e594000c ldr r0, [r4, #12] <== NOT EXECUTED
39840: ebff3479 bl 6a2c <rtems_disk_release> <== NOT EXECUTED
printf ("rtems-rfs: buffer-sync: file sync failed: %d: %s\n",
result, strerror (result));
}
#endif
return result;
}
39844: e1a00005 mov r0, r5 <== NOT EXECUTED
39848: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
000397d4 <rtems_rfs_buffers_release>:
int
rtems_rfs_buffers_release (rtems_rfs_file_system* fs)
{
397d4: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
printf ("rtems-rfs: buffers-release: active:%" PRIu32 " "
"release:%" PRIu32 " release-modified:%" PRIu32 "\n",
fs->buffers_count, fs->release_count, fs->release_modified_count);
rc = rtems_rfs_release_chain (&fs->release,
397d8: e280105c add r1, r0, #92 ; 0x5c <== NOT EXECUTED
return rrc;
}
int
rtems_rfs_buffers_release (rtems_rfs_file_system* fs)
{
397dc: e1a04000 mov r4, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
printf ("rtems-rfs: buffers-release: active:%" PRIu32 " "
"release:%" PRIu32 " release-modified:%" PRIu32 "\n",
fs->buffers_count, fs->release_count, fs->release_modified_count);
rc = rtems_rfs_release_chain (&fs->release,
397e0: e3a02000 mov r2, #0 <== NOT EXECUTED
397e4: e2800050 add r0, r0, #80 ; 0x50 <== NOT EXECUTED
397e8: ebffffdd bl 39764 <rtems_rfs_release_chain> <== NOT EXECUTED
&fs->release_count,
false);
if ((rc > 0) && (rrc == 0))
rrc = rc;
rc = rtems_rfs_release_chain (&fs->release_modified,
397ec: e284106c add r1, r4, #108 ; 0x6c <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_RELEASE))
printf ("rtems-rfs: buffers-release: active:%" PRIu32 " "
"release:%" PRIu32 " release-modified:%" PRIu32 "\n",
fs->buffers_count, fs->release_count, fs->release_modified_count);
rc = rtems_rfs_release_chain (&fs->release,
397f0: e1c05fc0 bic r5, r0, r0, asr #31 <== NOT EXECUTED
&fs->release_count,
false);
if ((rc > 0) && (rrc == 0))
rrc = rc;
rc = rtems_rfs_release_chain (&fs->release_modified,
397f4: e3a02001 mov r2, #1 <== NOT EXECUTED
397f8: e2840060 add r0, r4, #96 ; 0x60 <== NOT EXECUTED
397fc: ebffffd8 bl 39764 <rtems_rfs_release_chain> <== NOT EXECUTED
&fs->release_modified_count,
true);
if ((rc > 0) && (rrc == 0))
39800: e2753001 rsbs r3, r5, #1 <== NOT EXECUTED
39804: 33a03000 movcc r3, #0 <== NOT EXECUTED
39808: e3500000 cmp r0, #0 <== NOT EXECUTED
3980c: d3a03000 movle r3, #0 <== NOT EXECUTED
rrc = rc;
return rrc;
}
39810: e3530000 cmp r3, #0 <== NOT EXECUTED
39814: 01a00005 moveq r0, r5 <== NOT EXECUTED
39818: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
0003a288 <rtems_rfs_dir_add_entry>:
rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
const char* name,
size_t length,
rtems_rfs_ino ino)
{
3a288: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3a28c: e24dd098 sub sp, sp, #152 ; 0x98 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (", len=%zd\n", length);
}
rc = rtems_rfs_block_map_open (fs, dir, &map);
3a290: e28d602c add r6, sp, #44 ; 0x2c <== NOT EXECUTED
rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
const char* name,
size_t length,
rtems_rfs_ino ino)
{
3a294: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (", len=%zd\n", length);
}
rc = rtems_rfs_block_map_open (fs, dir, &map);
3a298: e1a02006 mov r2, r6 <== NOT EXECUTED
rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
const char* name,
size_t length,
rtems_rfs_ino ino)
{
3a29c: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
3a2a0: e1a04000 mov r4, r0 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (", len=%zd\n", length);
}
rc = rtems_rfs_block_map_open (fs, dir, &map);
3a2a4: ebfffcd5 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3a2a8: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3a2ac: da000002 ble 3a2bc <rtems_rfs_dir_add_entry+0x34> <== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
3a2b0: e1a00009 mov r0, r9 <== NOT EXECUTED
3a2b4: e28dd098 add sp, sp, #152 ; 0x98 <== NOT EXECUTED
3a2b8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
3a2bc: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a2c0: e3a00801 mov r0, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3a2c4: e3a03000 mov r3, #0 <== NOT EXECUTED
3a2c8: e2400001 sub r0, r0, #1 <== NOT EXECUTED
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
3a2cc: e281100a add r1, r1, #10 <== NOT EXECUTED
3a2d0: e58d3090 str r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3a2d4: e5cd307c strb r3, [sp, #124] ; 0x7c <== NOT EXECUTED
handle->bnum = 0;
3a2d8: e58d3080 str r3, [sp, #128] ; 0x80 <== NOT EXECUTED
handle->buffer = NULL;
3a2dc: e58d3084 str r3, [sp, #132] ; 0x84 <== NOT EXECUTED
* @param bpos A pointer to the block position.
*/
static inline void
rtems_rfs_block_set_bpos_zero (rtems_rfs_block_pos* bpos)
{
bpos->bno = 0;
3a2e0: e58d3088 str r3, [sp, #136] ; 0x88 <== NOT EXECUTED
bpos->boff = 0;
3a2e4: e58d308c str r3, [sp, #140] ; 0x8c <== NOT EXECUTED
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a2e8: e58d0000 str r0, [sp] <== NOT EXECUTED
3a2ec: e28da088 add sl, sp, #136 ; 0x88 <== NOT EXECUTED
3a2f0: e28d7094 add r7, sp, #148 ; 0x94 <== NOT EXECUTED
3a2f4: e28d807c add r8, sp, #124 ; 0x7c <== NOT EXECUTED
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
3a2f8: e58d101c str r1, [sp, #28] <== NOT EXECUTED
3a2fc: ea000002 b 3a30c <rtems_rfs_dir_add_entry+0x84> <== NOT EXECUTED
if (!read)
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a300: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
3a304: e253200a subs r2, r3, #10 <== NOT EXECUTED
3a308: 1a000026 bne 3a3a8 <rtems_rfs_dir_add_entry+0x120> <== NOT EXECUTED
/*
* Locate the first block. If an error the block will be 0. If the map is
* empty which happens when creating a directory and adding the first entry
* the seek will return ENXIO. In this case we need to grow the directory.
*/
rc = rtems_rfs_block_map_find (fs, &map, &bpos, &block);
3a30c: e1a00004 mov r0, r4 <== NOT EXECUTED
3a310: e1a01006 mov r1, r6 <== NOT EXECUTED
3a314: e1a0200a mov r2, sl <== NOT EXECUTED
3a318: e1a03007 mov r3, r7 <== NOT EXECUTED
3a31c: ebfff995 bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
if (rc > 0)
3a320: e3500000 cmp r0, #0 <== NOT EXECUTED
3a324: d3a05001 movle r5, #1 <== NOT EXECUTED
3a328: da000009 ble 3a354 <rtems_rfs_dir_add_entry+0xcc> <== NOT EXECUTED
{
if (rc != ENXIO)
3a32c: e3500006 cmp r0, #6 <== NOT EXECUTED
3a330: 1a000062 bne 3a4c0 <rtems_rfs_dir_add_entry+0x238> <== NOT EXECUTED
}
/*
* We have reached the end of the directory so add a block.
*/
rc = rtems_rfs_block_map_grow (fs, &map, 1, &block);
3a334: e1a00004 mov r0, r4 <== NOT EXECUTED
3a338: e1a01006 mov r1, r6 <== NOT EXECUTED
3a33c: e3a02001 mov r2, #1 <== NOT EXECUTED
3a340: e1a03007 mov r3, r7 <== NOT EXECUTED
3a344: ebfffb41 bl 39050 <rtems_rfs_block_map_grow> <== NOT EXECUTED
if (rc > 0)
3a348: e3500000 cmp r0, #0 <== NOT EXECUTED
3a34c: ca00005b bgt 3a4c0 <rtems_rfs_dir_add_entry+0x238> <== NOT EXECUTED
3a350: e3a05000 mov r5, #0 <== NOT EXECUTED
}
read = false;
}
bpos.bno++;
3a354: e59dc088 ldr ip, [sp, #136] ; 0x88 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, read);
3a358: e1a00004 mov r0, r4 <== NOT EXECUTED
}
read = false;
}
bpos.bno++;
3a35c: e28cc001 add ip, ip, #1 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, read);
3a360: e1a01008 mov r1, r8 <== NOT EXECUTED
3a364: e59d2094 ldr r2, [sp, #148] ; 0x94 <== NOT EXECUTED
3a368: e1a03005 mov r3, r5 <== NOT EXECUTED
}
read = false;
}
bpos.bno++;
3a36c: e58dc088 str ip, [sp, #136] ; 0x88 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, read);
3a370: ebfffdb7 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3a374: e3500000 cmp r0, #0 <== NOT EXECUTED
3a378: ca000050 bgt 3a4c0 <rtems_rfs_dir_add_entry+0x238> <== NOT EXECUTED
"block buffer req failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
break;
}
entry = rtems_rfs_buffer_data (&buffer);
3a37c: e59d3084 ldr r3, [sp, #132] ; 0x84 <== NOT EXECUTED
if (!read)
3a380: e3550000 cmp r5, #0 <== NOT EXECUTED
"block buffer req failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
break;
}
entry = rtems_rfs_buffer_data (&buffer);
3a384: e5935020 ldr r5, [r3, #32] <== NOT EXECUTED
if (!read)
3a388: 1affffdc bne 3a300 <rtems_rfs_dir_add_entry+0x78> <== NOT EXECUTED
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
3a38c: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
3a390: e1a00005 mov r0, r5 <== NOT EXECUTED
3a394: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3a398: eb00304b bl 464cc <memset> <== NOT EXECUTED
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a39c: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
3a3a0: e253200a subs r2, r3, #10 <== NOT EXECUTED
3a3a4: 0affffd8 beq 3a30c <rtems_rfs_dir_add_entry+0x84> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a3a8: e5d50008 ldrb r0, [r5, #8] <== NOT EXECUTED
3a3ac: e5d51009 ldrb r1, [r5, #9] <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a3b0: e59d9000 ldr r9, [sp] <== NOT EXECUTED
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a3b4: e285c008 add ip, r5, #8 <== NOT EXECUTED
3a3b8: e285e009 add lr, r5, #9 <== NOT EXECUTED
3a3bc: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
3a3c0: e58de014 str lr, [sp, #20] <== NOT EXECUTED
3a3c4: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a3c8: e1510009 cmp r1, r9 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a3cc: e285c002 add ip, r5, #2 <== NOT EXECUTED
3a3d0: e1a09005 mov r9, r5 <== NOT EXECUTED
3a3d4: e5d50001 ldrb r0, [r5, #1] <== NOT EXECUTED
3a3d8: e4d9b001 ldrb fp, [r9], #1 <== NOT EXECUTED
3a3dc: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
3a3e0: e285e003 add lr, r5, #3 <== NOT EXECUTED
3a3e4: e5d5c002 ldrb ip, [r5, #2] <== NOT EXECUTED
3a3e8: e58de00c str lr, [sp, #12] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a3ec: 03a00000 moveq r0, #0 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a3f0: e5d5e003 ldrb lr, [r5, #3] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a3f4: 0a000046 beq 3a514 <rtems_rfs_dir_add_entry+0x28c> <== NOT EXECUTED
}
break;
}
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a3f8: e351000a cmp r1, #10 <== NOT EXECUTED
3a3fc: da00003b ble 3a4f0 <rtems_rfs_dir_add_entry+0x268> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a400: e18eec0b orr lr, lr, fp, lsl #24 <== NOT EXECUTED
3a404: e18ee40c orr lr, lr, ip, lsl #8 <== NOT EXECUTED
3a408: e594b018 ldr fp, [r4, #24] <== NOT EXECUTED
3a40c: e18e0800 orr r0, lr, r0, lsl #16 <== NOT EXECUTED
3a410: e3a0e000 mov lr, #0 <== NOT EXECUTED
}
break;
}
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a414: e3500000 cmp r0, #0 <== NOT EXECUTED
3a418: 1151000b cmpne r1, fp <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return EIO;
}
entry += elength;
offset += elength;
3a41c: e08ee001 add lr, lr, r1 <== NOT EXECUTED
}
break;
}
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a420: 2a000032 bcs 3a4f0 <rtems_rfs_dir_add_entry+0x268> <== NOT EXECUTED
3a424: e594c010 ldr ip, [r4, #16] <== NOT EXECUTED
3a428: e15c0000 cmp ip, r0 <== NOT EXECUTED
3a42c: 3a00002f bcc 3a4f0 <rtems_rfs_dir_add_entry+0x268> <== NOT EXECUTED
if (!read)
memset (entry, 0xff, rtems_rfs_fs_block_size (fs));
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a430: e15e0002 cmp lr, r2 <== NOT EXECUTED
3a434: e1a0000e mov r0, lr <== NOT EXECUTED
3a438: 2affffb3 bcs 3a30c <rtems_rfs_dir_add_entry+0x84> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return EIO;
}
entry += elength;
3a43c: e0855001 add r5, r5, r1 <== NOT EXECUTED
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a440: e5d5c008 ldrb ip, [r5, #8] <== NOT EXECUTED
3a444: e5d51009 ldrb r1, [r5, #9] <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a448: e59d9000 ldr r9, [sp] <== NOT EXECUTED
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a44c: e181140c orr r1, r1, ip, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a450: e1510009 cmp r1, r9 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a454: e1a09005 mov r9, r5 <== NOT EXECUTED
3a458: e4d9c001 ldrb ip, [r9], #1 <== NOT EXECUTED
3a45c: e58dc028 str ip, [sp, #40] ; 0x28 <== NOT EXECUTED
3a460: e5d5c001 ldrb ip, [r5, #1] <== NOT EXECUTED
3a464: e58dc024 str ip, [sp, #36] ; 0x24 <== NOT EXECUTED
3a468: e5d5c002 ldrb ip, [r5, #2] <== NOT EXECUTED
3a46c: e58dc020 str ip, [sp, #32] <== NOT EXECUTED
3a470: e5d5c003 ldrb ip, [r5, #3] <== NOT EXECUTED
3a474: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a478: e285c008 add ip, r5, #8 <== NOT EXECUTED
3a47c: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
3a480: e285c009 add ip, r5, #9 <== NOT EXECUTED
3a484: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
3a488: e285c002 add ip, r5, #2 <== NOT EXECUTED
3a48c: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
3a490: e285c003 add ip, r5, #3 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a494: 0a00001d beq 3a510 <rtems_rfs_dir_add_entry+0x288> <== NOT EXECUTED
}
break;
}
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a498: e351000a cmp r1, #10 <== NOT EXECUTED
3a49c: da000013 ble 3a4f0 <rtems_rfs_dir_add_entry+0x268> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a4a0: e59d900c ldr r9, [sp, #12] <== NOT EXECUTED
3a4a4: e59dc028 ldr ip, [sp, #40] ; 0x28 <== NOT EXECUTED
3a4a8: e1890c0c orr r0, r9, ip, lsl #24 <== NOT EXECUTED
3a4ac: e59d9024 ldr r9, [sp, #36] ; 0x24 <== NOT EXECUTED
3a4b0: e59dc020 ldr ip, [sp, #32] <== NOT EXECUTED
3a4b4: e1800809 orr r0, r0, r9, lsl #16 <== NOT EXECUTED
3a4b8: e180040c orr r0, r0, ip, lsl #8 <== NOT EXECUTED
3a4bc: eaffffd4 b 3a414 <rtems_rfs_dir_add_entry+0x18c> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3a4c0: e1a01008 mov r1, r8 <== NOT EXECUTED
3a4c4: e1a09000 mov r9, r0 <== NOT EXECUTED
3a4c8: e1a00004 mov r0, r4 <== NOT EXECUTED
3a4cc: ebfffd16 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3a4d0: e3a03000 mov r3, #0 <== NOT EXECUTED
offset += elength;
}
}
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
3a4d4: e1a00004 mov r0, r4 <== NOT EXECUTED
3a4d8: e1a01006 mov r1, r6 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3a4dc: e58d3084 str r3, [sp, #132] ; 0x84 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3a4e0: e5cd307c strb r3, [sp, #124] ; 0x7c <== NOT EXECUTED
handle->bnum = 0;
3a4e4: e58d3080 str r3, [sp, #128] ; 0x80 <== NOT EXECUTED
3a4e8: ebfffbd1 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3a4ec: eaffff6f b 3a2b0 <rtems_rfs_dir_add_entry+0x28> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
printf ("rtems-rfs: dir-add-entry: "
"bad length or ino for ino %" PRIu32 ": %u/%" PRId32 " @ %04x\n",
rtems_rfs_inode_ino (dir), elength, eino, offset);
rtems_rfs_buffer_handle_close (fs, &buffer);
3a4f0: e1a01008 mov r1, r8 <== NOT EXECUTED
3a4f4: e1a00004 mov r0, r4 <== NOT EXECUTED
3a4f8: ebfffde1 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
3a4fc: e1a00004 mov r0, r4 <== NOT EXECUTED
3a500: e1a01006 mov r1, r6 <== NOT EXECUTED
3a504: ebfffbca bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
3a508: e3a09005 mov r9, #5 <== NOT EXECUTED
return EIO;
3a50c: eaffff67 b 3a2b0 <rtems_rfs_dir_add_entry+0x28> <== NOT EXECUTED
3a510: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
3a514: e59de01c ldr lr, [sp, #28] <== NOT EXECUTED
3a518: e0603003 rsb r3, r0, r3 <== NOT EXECUTED
3a51c: e15e0003 cmp lr, r3 <== NOT EXECUTED
3a520: 2affff79 bcs 3a30c <rtems_rfs_dir_add_entry+0x84> <== NOT EXECUTED
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
3a524: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
3a528: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
3a52c: eb002159 bl 42a98 <rtems_rfs_dir_hash> <== NOT EXECUTED
rtems_rfs_dir_set_entry_hash (entry, hash);
rtems_rfs_dir_set_entry_ino (entry, ino);
3a530: e59d70bc ldr r7, [sp, #188] ; 0xbc <== NOT EXECUTED
3a534: e1a0c005 mov ip, r5 <== NOT EXECUTED
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
rtems_rfs_dir_set_entry_hash (entry, hash);
3a538: e1a02c20 lsr r2, r0, #24 <== NOT EXECUTED
3a53c: e1a01820 lsr r1, r0, #16 <== NOT EXECUTED
3a540: e1a0e420 lsr lr, r0, #8 <== NOT EXECUTED
rtems_rfs_dir_set_entry_ino (entry, ino);
3a544: e1a03c27 lsr r3, r7, #24 <== NOT EXECUTED
if ((length + RTEMS_RFS_DIR_ENTRY_SIZE) <
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
rtems_rfs_dir_set_entry_hash (entry, hash);
3a548: e5c52004 strb r2, [r5, #4] <== NOT EXECUTED
3a54c: e5c51005 strb r1, [r5, #5] <== NOT EXECUTED
3a550: e5c50007 strb r0, [r5, #7] <== NOT EXECUTED
3a554: e5c5e006 strb lr, [r5, #6] <== NOT EXECUTED
rtems_rfs_dir_set_entry_ino (entry, ino);
3a558: e1a01827 lsr r1, r7, #16 <== NOT EXECUTED
3a55c: e4cc300a strb r3, [ip], #10 <== NOT EXECUTED
rtems_rfs_dir_set_entry_length (entry,
3a560: e59de01c ldr lr, [sp, #28] <== NOT EXECUTED
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
rtems_rfs_dir_set_entry_hash (entry, hash);
rtems_rfs_dir_set_entry_ino (entry, ino);
3a564: e1a02427 lsr r2, r7, #8 <== NOT EXECUTED
rtems_rfs_dir_set_entry_length (entry,
3a568: e59d7004 ldr r7, [sp, #4] <== NOT EXECUTED
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
rtems_rfs_dir_set_entry_hash (entry, hash);
rtems_rfs_dir_set_entry_ino (entry, ino);
3a56c: e5c91000 strb r1, [r9] <== NOT EXECUTED
3a570: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
3a574: e5c92000 strb r2, [r9] <== NOT EXECUTED
3a578: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
rtems_rfs_dir_set_entry_length (entry,
3a57c: e1a0042e lsr r0, lr, #8 <== NOT EXECUTED
(rtems_rfs_fs_block_size (fs) - offset))
{
uint32_t hash;
hash = rtems_rfs_dir_hash (name, length);
rtems_rfs_dir_set_entry_hash (entry, hash);
rtems_rfs_dir_set_entry_ino (entry, ino);
3a580: e59de0bc ldr lr, [sp, #188] ; 0xbc <== NOT EXECUTED
3a584: e5c1e000 strb lr, [r1] <== NOT EXECUTED
rtems_rfs_dir_set_entry_length (entry,
3a588: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
3a58c: e5c20000 strb r0, [r2] <== NOT EXECUTED
3a590: e287300a add r3, r7, #10 <== NOT EXECUTED
3a594: e59d7014 ldr r7, [sp, #20] <== NOT EXECUTED
3a598: e5c73000 strb r3, [r7] <== NOT EXECUTED
RTEMS_RFS_DIR_ENTRY_SIZE + length);
memcpy (entry + RTEMS_RFS_DIR_ENTRY_SIZE, name, length);
3a59c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
3a5a0: e1a0000c mov r0, ip <== NOT EXECUTED
3a5a4: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
3a5a8: eb002f40 bl 462b0 <memcpy> <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&buffer);
3a5ac: e3a03001 mov r3, #1 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
3a5b0: e1a01008 mov r1, r8 <== NOT EXECUTED
3a5b4: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_rfs_dir_set_entry_hash (entry, hash);
rtems_rfs_dir_set_entry_ino (entry, ino);
rtems_rfs_dir_set_entry_length (entry,
RTEMS_RFS_DIR_ENTRY_SIZE + length);
memcpy (entry + RTEMS_RFS_DIR_ENTRY_SIZE, name, length);
rtems_rfs_buffer_mark_dirty (&buffer);
3a5b8: e5cd307c strb r3, [sp, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
3a5bc: ebfffdb0 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
3a5c0: e1a00004 mov r0, r4 <== NOT EXECUTED
3a5c4: e1a01006 mov r1, r6 <== NOT EXECUTED
3a5c8: ebfffb99 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
3a5cc: e3a09000 mov r9, #0 <== NOT EXECUTED
return 0;
3a5d0: eaffff36 b 3a2b0 <rtems_rfs_dir_add_entry+0x28> <== NOT EXECUTED
00039f84 <rtems_rfs_dir_del_entry>:
int
rtems_rfs_dir_del_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_ino ino,
uint32_t offset)
{
39f84: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
39f88: e24dd07c sub sp, sp, #124 ; 0x7c <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: dir=%" PRId32 ", entry=%" PRId32 " offset=%" PRIu32 "\n",
rtems_rfs_inode_ino (dir), ino, offset);
rc = rtems_rfs_block_map_open (fs, dir, &map);
39f8c: e28d601c add r6, sp, #28 <== NOT EXECUTED
int
rtems_rfs_dir_del_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_ino ino,
uint32_t offset)
{
39f90: e1a05002 mov r5, r2 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: dir=%" PRId32 ", entry=%" PRId32 " offset=%" PRIu32 "\n",
rtems_rfs_inode_ino (dir), ino, offset);
rc = rtems_rfs_block_map_open (fs, dir, &map);
39f94: e1a02006 mov r2, r6 <== NOT EXECUTED
int
rtems_rfs_dir_del_entry (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_ino ino,
uint32_t offset)
{
39f98: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
39f9c: e1a04000 mov r4, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: dir=%" PRId32 ", entry=%" PRId32 " offset=%" PRIu32 "\n",
rtems_rfs_inode_ino (dir), ino, offset);
rc = rtems_rfs_block_map_open (fs, dir, &map);
39fa0: ebfffd96 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
39fa4: e250b000 subs fp, r0, #0 <== NOT EXECUTED
39fa8: da000002 ble 39fb8 <rtems_rfs_dir_del_entry+0x34> <== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
39fac: e1a0000b mov r0, fp <== NOT EXECUTED
39fb0: e28dd07c add sp, sp, #124 ; 0x7c <== NOT EXECUTED
39fb4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
39fb8: e3a07000 mov r7, #0 <== NOT EXECUTED
39fbc: e28dc078 add ip, sp, #120 ; 0x78 <== NOT EXECUTED
39fc0: e1a00004 mov r0, r4 <== NOT EXECUTED
39fc4: e1a01006 mov r1, r6 <== NOT EXECUTED
39fc8: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
39fcc: e1a03007 mov r3, r7 <== NOT EXECUTED
39fd0: e58dc000 str ip, [sp] <== NOT EXECUTED
39fd4: ebfffacf bl 38b18 <rtems_rfs_block_map_seek> <== NOT EXECUTED
if (rc > 0)
39fd8: e250b000 subs fp, r0, #0 <== NOT EXECUTED
39fdc: da000005 ble 39ff8 <rtems_rfs_dir_del_entry+0x74> <== NOT EXECUTED
{
if (rc == ENXIO)
39fe0: e35b0006 cmp fp, #6 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
39fe4: e1a00004 mov r0, r4 <== NOT EXECUTED
39fe8: e1a01006 mov r1, r6 <== NOT EXECUTED
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
if (rc > 0)
{
if (rc == ENXIO)
39fec: 03a0b002 moveq fp, #2 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
39ff0: ebfffd0f bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
39ff4: eaffffec b 39fac <rtems_rfs_dir_del_entry+0x28> <== NOT EXECUTED
}
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
39ff8: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
39ffc: e2722001 rsbs r2, r2, #1 <== NOT EXECUTED
3a000: 33a02000 movcc r2, #0 <== NOT EXECUTED
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a004: e3a09801 mov r9, #65536 ; 0x10000 <== NOT EXECUTED
handle->buffer = NULL;
3a008: e58d7074 str r7, [sp, #116] ; 0x74 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3a00c: e5cd706c strb r7, [sp, #108] ; 0x6c <== NOT EXECUTED
handle->bnum = 0;
3a010: e58d7070 str r7, [sp, #112] ; 0x70 <== NOT EXECUTED
}
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
3a014: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
3a018: e58d500c str r5, [sp, #12] <== NOT EXECUTED
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a01c: e2499001 sub r9, r9, #1 <== NOT EXECUTED
while (rc == 0)
{
uint8_t* entry;
int eoffset;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
3a020: e1a00004 mov r0, r4 <== NOT EXECUTED
3a024: e28d106c add r1, sp, #108 ; 0x6c <== NOT EXECUTED
3a028: e59d2078 ldr r2, [sp, #120] ; 0x78 <== NOT EXECUTED
3a02c: e3a03001 mov r3, #1 <== NOT EXECUTED
3a030: ebfffe87 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3a034: e3500000 cmp r0, #0 <== NOT EXECUTED
3a038: e58d0018 str r0, [sp, #24] <== NOT EXECUTED
3a03c: ca00004b bgt 3a170 <rtems_rfs_dir_del_entry+0x1ec> <== NOT EXECUTED
/*
* If we are searching start at the beginning of the block. If not searching
* skip to the offset in the block.
*/
if (search)
3a040: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
3a044: e3530000 cmp r3, #0 <== NOT EXECUTED
3a048: 0a00003e beq 3a148 <rtems_rfs_dir_del_entry+0x1c4> <== NOT EXECUTED
3a04c: e594c008 ldr ip, [r4, #8] <== NOT EXECUTED
3a050: e3a03000 mov r3, #0 <== NOT EXECUTED
3a054: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
3a058: e1a00003 mov r0, r3 <== NOT EXECUTED
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a05c: e59dc014 ldr ip, [sp, #20] <== NOT EXECUTED
if (search)
eoffset = 0;
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
3a060: e59d2074 ldr r2, [sp, #116] ; 0x74 <== NOT EXECUTED
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a064: e24ce00a sub lr, ip, #10 <== NOT EXECUTED
3a068: e153000e cmp r3, lr <== NOT EXECUTED
if (search)
eoffset = 0;
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
3a06c: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a070: 2a00003b bcs 3a164 <rtems_rfs_dir_del_entry+0x1e0> <== NOT EXECUTED
if (search)
eoffset = 0;
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
3a074: e0827003 add r7, r2, r3 <== NOT EXECUTED
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a078: e5d71009 ldrb r1, [r7, #9] <== NOT EXECUTED
3a07c: e5d78008 ldrb r8, [r7, #8] <== NOT EXECUTED
3a080: e1818408 orr r8, r1, r8, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a084: e1580009 cmp r8, r9 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a088: e7d21003 ldrb r1, [r2, r3] <== NOT EXECUTED
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a08c: e287b008 add fp, r7, #8 <== NOT EXECUTED
3a090: e287a009 add sl, r7, #9 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
3a094: e5d73001 ldrb r3, [r7, #1] <== NOT EXECUTED
3a098: e5d7c002 ldrb ip, [r7, #2] <== NOT EXECUTED
3a09c: e5d72003 ldrb r2, [r7, #3] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a0a0: 0a00002f beq 3a164 <rtems_rfs_dir_del_entry+0x1e0> <== NOT EXECUTED
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a0a4: e358000a cmp r8, #10 <== NOT EXECUTED
3a0a8: da000024 ble 3a140 <rtems_rfs_dir_del_entry+0x1bc> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a0ac: e1822c01 orr r2, r2, r1, lsl #24 <== NOT EXECUTED
3a0b0: e1823803 orr r3, r2, r3, lsl #16 <== NOT EXECUTED
3a0b4: e183340c orr r3, r3, ip, lsl #8 <== NOT EXECUTED
3a0b8: e5945018 ldr r5, [r4, #24] <== NOT EXECUTED
3a0bc: ea00001c b 3a134 <rtems_rfs_dir_del_entry+0x1b0> <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a0c0: e5942010 ldr r2, [r4, #16] <== NOT EXECUTED
3a0c4: e1520003 cmp r2, r3 <== NOT EXECUTED
3a0c8: 3a00001c bcc 3a140 <rtems_rfs_dir_del_entry+0x1bc> <== NOT EXECUTED
rtems_rfs_inode_ino (dir), elength, eino, block, eoffset);
rc = EIO;
break;
}
if (ino == rtems_rfs_dir_entry_ino (entry))
3a0cc: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
3a0d0: e1530002 cmp r3, r2 <== NOT EXECUTED
3a0d4: 0a000039 beq 3a1c0 <rtems_rfs_dir_del_entry+0x23c> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return 0;
}
if (!search)
3a0d8: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
3a0dc: e3520000 cmp r2, #0 <== NOT EXECUTED
{
rc = EIO;
break;
}
entry += elength;
3a0e0: e0877008 add r7, r7, r8 <== NOT EXECUTED
eoffset += elength;
3a0e4: e0800008 add r0, r0, r8 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return 0;
}
if (!search)
3a0e8: 0a000014 beq 3a140 <rtems_rfs_dir_del_entry+0x1bc> <== NOT EXECUTED
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
entry = rtems_rfs_buffer_data (&buffer) + eoffset;
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a0ec: e150000e cmp r0, lr <== NOT EXECUTED
3a0f0: 2a00001b bcs 3a164 <rtems_rfs_dir_del_entry+0x1e0> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a0f4: e5d73009 ldrb r3, [r7, #9] <== NOT EXECUTED
3a0f8: e5d78008 ldrb r8, [r7, #8] <== NOT EXECUTED
3a0fc: e1838408 orr r8, r3, r8, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a100: e1580009 cmp r8, r9 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a104: e5d7c000 ldrb ip, [r7] <== NOT EXECUTED
3a108: e5d72001 ldrb r2, [r7, #1] <== NOT EXECUTED
3a10c: e5d73002 ldrb r3, [r7, #2] <== NOT EXECUTED
3a110: e5d71003 ldrb r1, [r7, #3] <== NOT EXECUTED
while (eoffset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a114: e287b008 add fp, r7, #8 <== NOT EXECUTED
3a118: e287a009 add sl, r7, #9 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a11c: 0a000010 beq 3a164 <rtems_rfs_dir_del_entry+0x1e0> <== NOT EXECUTED
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a120: e358000a cmp r8, #10 <== NOT EXECUTED
3a124: da000005 ble 3a140 <rtems_rfs_dir_del_entry+0x1bc> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a128: e1811c0c orr r1, r1, ip, lsl #24 <== NOT EXECUTED
3a12c: e1811802 orr r1, r1, r2, lsl #16 <== NOT EXECUTED
3a130: e1813403 orr r3, r1, r3, lsl #8 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a134: e3530000 cmp r3, #0 <== NOT EXECUTED
3a138: 11580005 cmpne r8, r5 <== NOT EXECUTED
3a13c: 3affffdf bcc 3a0c0 <rtems_rfs_dir_del_entry+0x13c> <== NOT EXECUTED
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
while (rc == 0)
3a140: e3a0b005 mov fp, #5 <== NOT EXECUTED
3a144: ea00000a b 3a174 <rtems_rfs_dir_del_entry+0x1f0> <== NOT EXECUTED
* skip to the offset in the block.
*/
if (search)
eoffset = 0;
else
eoffset = offset % rtems_rfs_fs_block_size (fs);
3a148: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
3a14c: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
3a150: e1a01002 mov r1, r2 <== NOT EXECUTED
3a154: e58d2014 str r2, [sp, #20] <== NOT EXECUTED
3a158: eb0083f6 bl 5b138 <__umodsi3> <== NOT EXECUTED
3a15c: e1a03000 mov r3, r0 <== NOT EXECUTED
3a160: eaffffbd b 3a05c <rtems_rfs_dir_del_entry+0xd8> <== NOT EXECUTED
entry += elength;
eoffset += elength;
}
if (rc == 0)
3a164: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
3a168: e3530000 cmp r3, #0 <== NOT EXECUTED
3a16c: 0a000007 beq 3a190 <rtems_rfs_dir_del_entry+0x20c> <== NOT EXECUTED
3a170: e59db018 ldr fp, [sp, #24] <== NOT EXECUTED
if (rc == ENXIO)
rc = ENOENT;
}
}
rtems_rfs_buffer_handle_close (fs, &buffer);
3a174: e28d106c add r1, sp, #108 ; 0x6c <== NOT EXECUTED
3a178: e1a00004 mov r0, r4 <== NOT EXECUTED
3a17c: ebfffec0 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
3a180: e1a00004 mov r0, r4 <== NOT EXECUTED
3a184: e1a01006 mov r1, r6 <== NOT EXECUTED
3a188: ebfffca9 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3a18c: eaffff86 b 39fac <rtems_rfs_dir_del_entry+0x28> <== NOT EXECUTED
eoffset += elength;
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
3a190: e1a00004 mov r0, r4 <== NOT EXECUTED
3a194: e1a01006 mov r1, r6 <== NOT EXECUTED
3a198: e28d2078 add r2, sp, #120 ; 0x78 <== NOT EXECUTED
3a19c: ebfffa50 bl 38ae4 <rtems_rfs_block_map_next_block> <== NOT EXECUTED
if (rc == ENXIO)
3a1a0: e3500006 cmp r0, #6 <== NOT EXECUTED
eoffset += elength;
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
3a1a4: e58d0018 str r0, [sp, #24] <== NOT EXECUTED
if (rc == ENXIO)
3a1a8: 0a000034 beq 3a280 <rtems_rfs_dir_del_entry+0x2fc> <== NOT EXECUTED
/*
* Only search if the offset is 0 else we are at that position.
*/
search = offset ? false : true;
while (rc == 0)
3a1ac: e59dc018 ldr ip, [sp, #24] <== NOT EXECUTED
3a1b0: e35c0000 cmp ip, #0 <== NOT EXECUTED
3a1b4: 0affff99 beq 3a020 <rtems_rfs_dir_del_entry+0x9c> <== NOT EXECUTED
3a1b8: e1a0b00c mov fp, ip <== NOT EXECUTED
3a1bc: eaffffec b 3a174 <rtems_rfs_dir_del_entry+0x1f0> <== NOT EXECUTED
}
if (ino == rtems_rfs_dir_entry_ino (entry))
{
uint32_t remaining;
remaining = rtems_rfs_fs_block_size (fs) - (eoffset + elength);
3a1c0: e59dc014 ldr ip, [sp, #20] <== NOT EXECUTED
3a1c4: e0805008 add r5, r0, r8 <== NOT EXECUTED
3a1c8: e065500c rsb r5, r5, ip <== NOT EXECUTED
3a1cc: e1a0900a mov r9, sl <== NOT EXECUTED
memmove (entry, entry + elength, remaining);
3a1d0: e0871008 add r1, r7, r8 <== NOT EXECUTED
3a1d4: e1a0a000 mov sl, r0 <== NOT EXECUTED
3a1d8: e1a02005 mov r2, r5 <== NOT EXECUTED
3a1dc: e1a00007 mov r0, r7 <== NOT EXECUTED
3a1e0: e58db004 str fp, [sp, #4] <== NOT EXECUTED
3a1e4: eb00306d bl 463a0 <memmove> <== NOT EXECUTED
memset (entry + remaining, 0xff, elength);
3a1e8: e1a02008 mov r2, r8 <== NOT EXECUTED
3a1ec: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3a1f0: e0870005 add r0, r7, r5 <== NOT EXECUTED
3a1f4: eb0030b4 bl 464cc <memset> <== NOT EXECUTED
* block and it is the last block in the map shrink the map.
*
* @note We could check again to see if the new end block in the map is
* also empty. This way we could clean up an empty directory.
*/
elength = rtems_rfs_dir_entry_length (entry);
3a1f8: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
3a1fc: e5d92000 ldrb r2, [r9] <== NOT EXECUTED
3a200: e5d31000 ldrb r1, [r3] <== NOT EXECUTED
3a204: e3a03801 mov r3, #65536 ; 0x10000 <== NOT EXECUTED
3a208: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3a20c: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3a210: e1520003 cmp r2, r3 <== NOT EXECUTED
3a214: 035a0000 cmpeq sl, #0 <== NOT EXECUTED
3a218: 1a00000a bne 3a248 <rtems_rfs_dir_del_entry+0x2c4> <== NOT EXECUTED
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
if ((elength == RTEMS_RFS_DIR_ENTRY_EMPTY) &&
(eoffset == 0) && rtems_rfs_block_map_last (&map))
3a21c: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
if ((elength == RTEMS_RFS_DIR_ENTRY_EMPTY) &&
3a220: e3530000 cmp r3, #0 <== NOT EXECUTED
3a224: 159d2024 ldrne r2, [sp, #36] ; 0x24 <== NOT EXECUTED
3a228: 1a000010 bne 3a270 <rtems_rfs_dir_del_entry+0x2ec> <== NOT EXECUTED
(eoffset == 0) && rtems_rfs_block_map_last (&map))
3a22c: e59d2024 ldr r2, [sp, #36] ; 0x24 <== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
if ((elength == RTEMS_RFS_DIR_ENTRY_EMPTY) &&
3a230: e3520000 cmp r2, #0 <== NOT EXECUTED
3a234: 1a00000d bne 3a270 <rtems_rfs_dir_del_entry+0x2ec> <== NOT EXECUTED
(eoffset == 0) && rtems_rfs_block_map_last (&map))
{
rc = rtems_rfs_block_map_shrink (fs, &map, 1);
3a238: e1a00004 mov r0, r4 <== NOT EXECUTED
3a23c: e1a01006 mov r1, r6 <== NOT EXECUTED
3a240: e3a02001 mov r2, #1 <== NOT EXECUTED
3a244: ebfffa7b bl 38c38 <rtems_rfs_block_map_shrink> <== NOT EXECUTED
"block map shrink failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
}
}
rtems_rfs_buffer_mark_dirty (&buffer);
3a248: e3a03001 mov r3, #1 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
3a24c: e28d106c add r1, sp, #108 ; 0x6c <== NOT EXECUTED
3a250: e1a00004 mov r0, r4 <== NOT EXECUTED
"block map shrink failed for ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (dir), rc, strerror (rc));
}
}
rtems_rfs_buffer_mark_dirty (&buffer);
3a254: e5cd306c strb r3, [sp, #108] ; 0x6c <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
3a258: ebfffe89 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
3a25c: e1a00004 mov r0, r4 <== NOT EXECUTED
3a260: e1a01006 mov r1, r6 <== NOT EXECUTED
3a264: ebfffc72 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
3a268: e3a0b000 mov fp, #0 <== NOT EXECUTED
return 0;
3a26c: eaffff4e b 39fac <rtems_rfs_dir_del_entry+0x28> <== NOT EXECUTED
"last block free for ino %" PRIu32 ": elength=%i block=%" PRIu32
" offset=%d last=%s\n",
ino, elength, block, eoffset,
rtems_rfs_block_map_last (&map) ? "yes" : "no");
if ((elength == RTEMS_RFS_DIR_ENTRY_EMPTY) &&
3a270: e2422001 sub r2, r2, #1 <== NOT EXECUTED
3a274: e1530002 cmp r3, r2 <== NOT EXECUTED
3a278: 1afffff2 bne 3a248 <rtems_rfs_dir_del_entry+0x2c4> <== NOT EXECUTED
3a27c: eaffffed b 3a238 <rtems_rfs_dir_del_entry+0x2b4> <== NOT EXECUTED
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
if (rc == ENXIO)
3a280: e3a0b002 mov fp, #2 <== NOT EXECUTED
3a284: eaffffba b 3a174 <rtems_rfs_dir_del_entry+0x1f0> <== NOT EXECUTED
0003a838 <rtems_rfs_dir_empty>:
}
int
rtems_rfs_dir_empty (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir)
{
3a838: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3a83c: e24dd064 sub sp, sp, #100 ; 0x64 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-empty: dir=%" PRId32 "\n", rtems_rfs_inode_ino (dir));
empty = true;
rc = rtems_rfs_block_map_open (fs, dir, &map);
3a840: e28d6004 add r6, sp, #4 <== NOT EXECUTED
3a844: e1a02006 mov r2, r6 <== NOT EXECUTED
}
int
rtems_rfs_dir_empty (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir)
{
3a848: e1a04000 mov r4, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-empty: dir=%" PRId32 "\n", rtems_rfs_inode_ino (dir));
empty = true;
rc = rtems_rfs_block_map_open (fs, dir, &map);
3a84c: ebfffb6b bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3a850: e2508000 subs r8, r0, #0 <== NOT EXECUTED
3a854: da000002 ble 3a864 <rtems_rfs_dir_empty+0x2c> <== NOT EXECUTED
rc = ENOTEMPTY;
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
3a858: e1a00008 mov r0, r8 <== NOT EXECUTED
3a85c: e28dd064 add sp, sp, #100 ; 0x64 <== NOT EXECUTED
3a860: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
3a864: e28dc060 add ip, sp, #96 ; 0x60 <== NOT EXECUTED
3a868: e1a00004 mov r0, r4 <== NOT EXECUTED
3a86c: e1a01006 mov r1, r6 <== NOT EXECUTED
3a870: e3a02000 mov r2, #0 <== NOT EXECUTED
3a874: e3a03000 mov r3, #0 <== NOT EXECUTED
3a878: e58dc000 str ip, [sp] <== NOT EXECUTED
3a87c: ebfff8a5 bl 38b18 <rtems_rfs_block_map_seek> <== NOT EXECUTED
if (rc > 0)
3a880: e2508000 subs r8, r0, #0 <== NOT EXECUTED
3a884: ca00005e bgt 3aa04 <rtems_rfs_dir_empty+0x1cc> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3a888: e3a03000 mov r3, #0 <== NOT EXECUTED
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a88c: e3a05801 mov r5, #65536 ; 0x10000 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3a890: e58d305c str r3, [sp, #92] ; 0x5c <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3a894: e5cd3054 strb r3, [sp, #84] ; 0x54 <== NOT EXECUTED
handle->bnum = 0;
3a898: e58d3058 str r3, [sp, #88] ; 0x58 <== NOT EXECUTED
3a89c: e2455001 sub r5, r5, #1 <== NOT EXECUTED
3a8a0: e28d7054 add r7, sp, #84 ; 0x54 <== NOT EXECUTED
while (empty)
{
uint8_t* entry;
int offset;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
3a8a4: e1a00004 mov r0, r4 <== NOT EXECUTED
3a8a8: e1a01007 mov r1, r7 <== NOT EXECUTED
3a8ac: e59d2060 ldr r2, [sp, #96] ; 0x60 <== NOT EXECUTED
3a8b0: e3a03001 mov r3, #1 <== NOT EXECUTED
3a8b4: ebfffc66 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3a8b8: e2508000 subs r8, r0, #0 <== NOT EXECUTED
3a8bc: ca00003c bgt 3a9b4 <rtems_rfs_dir_empty+0x17c> <== NOT EXECUTED
break;
entry = rtems_rfs_buffer_data (&buffer);
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a8c0: e5949008 ldr r9, [r4, #8] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
break;
entry = rtems_rfs_buffer_data (&buffer);
3a8c4: e59d305c ldr r3, [sp, #92] ; 0x5c <== NOT EXECUTED
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a8c8: e259900a subs r9, r9, #10 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
break;
entry = rtems_rfs_buffer_data (&buffer);
3a8cc: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a8d0: 0a000042 beq 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a8d4: e5d31008 ldrb r1, [r3, #8] <== NOT EXECUTED
3a8d8: e5d32009 ldrb r2, [r3, #9] <== NOT EXECUTED
3a8dc: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a8e0: e1520005 cmp r2, r5 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a8e4: e5d3e000 ldrb lr, [r3] <== NOT EXECUTED
3a8e8: e5d3c001 ldrb ip, [r3, #1] <== NOT EXECUTED
3a8ec: e5d30002 ldrb r0, [r3, #2] <== NOT EXECUTED
3a8f0: e5d31003 ldrb r1, [r3, #3] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a8f4: 0a000039 beq 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a8f8: e352000a cmp r2, #10 <== NOT EXECUTED
3a8fc: da000037 ble 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a900: e1811c0e orr r1, r1, lr, lsl #24 <== NOT EXECUTED
3a904: e181180c orr r1, r1, ip, lsl #16 <== NOT EXECUTED
3a908: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
3a90c: e594a018 ldr sl, [r4, #24] <== NOT EXECUTED
3a910: e3a0c000 mov ip, #0 <== NOT EXECUTED
3a914: ea000019 b 3a980 <rtems_rfs_dir_empty+0x148> <== NOT EXECUTED
/*
* Ignore the current (.) and parent (..) entries. Anything else means
* the directory is not empty.
*/
if (((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 1)) ||
3a918: e352000c cmp r2, #12 <== NOT EXECUTED
3a91c: 1a000022 bne 3a9ac <rtems_rfs_dir_empty+0x174> <== NOT EXECUTED
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.')) &&
((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 2)) ||
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.') ||
3a920: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
3a924: e351002e cmp r1, #46 ; 0x2e <== NOT EXECUTED
3a928: 1a00001f bne 3a9ac <rtems_rfs_dir_empty+0x174> <== NOT EXECUTED
(entry[RTEMS_RFS_DIR_ENTRY_SIZE + 1] != '.')))
3a92c: e5d3100b ldrb r1, [r3, #11] <== NOT EXECUTED
3a930: e351002e cmp r1, #46 ; 0x2e <== NOT EXECUTED
3a934: 1a00001c bne 3a9ac <rtems_rfs_dir_empty+0x174> <== NOT EXECUTED
empty = false;
break;
}
entry += elength;
offset += elength;
3a938: e08cc002 add ip, ip, r2 <== NOT EXECUTED
break;
entry = rtems_rfs_buffer_data (&buffer);
offset = 0;
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a93c: e15c0009 cmp ip, r9 <== NOT EXECUTED
3a940: 2a000026 bcs 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
{
empty = false;
break;
}
entry += elength;
3a944: e0833002 add r3, r3, r2 <== NOT EXECUTED
while (offset < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
3a948: e5d31008 ldrb r1, [r3, #8] <== NOT EXECUTED
3a94c: e5d32009 ldrb r2, [r3, #9] <== NOT EXECUTED
3a950: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a954: e1520005 cmp r2, r5 <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a958: e5d3b000 ldrb fp, [r3] <== NOT EXECUTED
3a95c: e5d3e001 ldrb lr, [r3, #1] <== NOT EXECUTED
3a960: e5d30002 ldrb r0, [r3, #2] <== NOT EXECUTED
3a964: e5d31003 ldrb r1, [r3, #3] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a968: 0a00001c beq 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a96c: e352000a cmp r2, #10 <== NOT EXECUTED
3a970: da00001a ble 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
{
rtems_rfs_ino eino;
int elength;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
3a974: e1811c0b orr r1, r1, fp, lsl #24 <== NOT EXECUTED
3a978: e181180e orr r1, r1, lr, lsl #16 <== NOT EXECUTED
3a97c: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
3a980: e3510000 cmp r1, #0 <== NOT EXECUTED
3a984: 1152000a cmpne r2, sl <== NOT EXECUTED
3a988: 2a000014 bcs 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
3a98c: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
3a990: e1500001 cmp r0, r1 <== NOT EXECUTED
3a994: 3a000011 bcc 3a9e0 <rtems_rfs_dir_empty+0x1a8> <== NOT EXECUTED
/*
* Ignore the current (.) and parent (..) entries. Anything else means
* the directory is not empty.
*/
if (((elength != (RTEMS_RFS_DIR_ENTRY_SIZE + 1)) ||
3a998: e352000b cmp r2, #11 <== NOT EXECUTED
3a99c: 1affffdd bne 3a918 <rtems_rfs_dir_empty+0xe0> <== NOT EXECUTED
(entry[RTEMS_RFS_DIR_ENTRY_SIZE] != '.')) &&
3a9a0: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
3a9a4: e351002e cmp r1, #46 ; 0x2e <== NOT EXECUTED
3a9a8: 0affffe2 beq 3a938 <rtems_rfs_dir_empty+0x100> <== NOT EXECUTED
break;
}
}
}
if ((rc == 0) && !empty)
3a9ac: e3580000 cmp r8, #0 <== NOT EXECUTED
3a9b0: 03a0805a moveq r8, #90 ; 0x5a <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3a9b4: e1a01007 mov r1, r7 <== NOT EXECUTED
3a9b8: e1a00004 mov r0, r4 <== NOT EXECUTED
3a9bc: ebfffbda bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3a9c0: e3a03000 mov r3, #0 <== NOT EXECUTED
rc = ENOTEMPTY;
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
3a9c4: e1a00004 mov r0, r4 <== NOT EXECUTED
3a9c8: e1a01006 mov r1, r6 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3a9cc: e58d305c str r3, [sp, #92] ; 0x5c <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3a9d0: e5cd3054 strb r3, [sp, #84] ; 0x54 <== NOT EXECUTED
handle->bnum = 0;
3a9d4: e58d3058 str r3, [sp, #88] ; 0x58 <== NOT EXECUTED
3a9d8: ebfffa95 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3a9dc: eaffff9d b 3a858 <rtems_rfs_dir_empty+0x20> <== NOT EXECUTED
offset += elength;
}
if (empty)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
3a9e0: e1a00004 mov r0, r4 <== NOT EXECUTED
3a9e4: e1a01006 mov r1, r6 <== NOT EXECUTED
3a9e8: e28d2060 add r2, sp, #96 ; 0x60 <== NOT EXECUTED
3a9ec: ebfff83c bl 38ae4 <rtems_rfs_block_map_next_block> <== NOT EXECUTED
if (rc > 0)
3a9f0: e2508000 subs r8, r0, #0 <== NOT EXECUTED
3a9f4: daffffaa ble 3a8a4 <rtems_rfs_dir_empty+0x6c> <== NOT EXECUTED
{
if (rc == ENXIO)
3a9f8: e3580006 cmp r8, #6 <== NOT EXECUTED
3a9fc: 03a08000 moveq r8, #0 <== NOT EXECUTED
3aa00: eaffffeb b 3a9b4 <rtems_rfs_dir_empty+0x17c> <== NOT EXECUTED
return rc;
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
if (rc > 0)
{
rtems_rfs_block_map_close (fs, &map);
3aa04: e1a00004 mov r0, r4 <== NOT EXECUTED
3aa08: e1a01006 mov r1, r6 <== NOT EXECUTED
3aa0c: ebfffa88 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3aa10: eaffff90 b 3a858 <rtems_rfs_dir_empty+0x20> <== NOT EXECUTED
00042a98 <rtems_rfs_dir_hash>:
{
uint32_t a,b,c; /* internal state */
union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */
/* Set up the internal state */
a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
42a98: e281320e add r3, r1, #-536870912 ; 0xe0000000 <== NOT EXECUTED
42a9c: e2433983 sub r3, r3, #2146304 ; 0x20c000 <== NOT EXECUTED
42aa0: e2433da5 sub r3, r3, #10560 ; 0x2940 <== NOT EXECUTED
} else { /* need to read the key one byte at a time */
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
42aa4: e351000c cmp r1, #12 <== NOT EXECUTED
{
uint32_t a,b,c; /* internal state */
union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */
/* Set up the internal state */
a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
42aa8: e2433021 sub r3, r3, #33 ; 0x21 <== NOT EXECUTED
*/
#define initval (20010928)
uint32_t
rtems_rfs_dir_hash (const void *key, size_t length)
{
42aac: e92d0ff0 push {r4, r5, r6, r7, r8, r9, sl, fp} <== NOT EXECUTED
} else { /* need to read the key one byte at a time */
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
42ab0: 91a0c003 movls ip, r3 <== NOT EXECUTED
42ab4: 91a02003 movls r2, r3 <== NOT EXECUTED
42ab8: 9a000032 bls 42b88 <rtems_rfs_dir_hash+0xf0> <== NOT EXECUTED
42abc: e1a0c003 mov ip, r3 <== NOT EXECUTED
42ac0: e1a02003 mov r2, r3 <== NOT EXECUTED
{
a += k[0];
42ac4: e5d09002 ldrb r9, [r0, #2] <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
42ac8: e5d0800a ldrb r8, [r0, #10] <== NOT EXECUTED
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
42acc: e5d05001 ldrb r5, [r0, #1] <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
42ad0: e5d04009 ldrb r4, [r0, #9] <== NOT EXECUTED
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
a += ((uint32_t)k[1])<<8;
42ad4: e5d0a000 ldrb sl, [r0] <== NOT EXECUTED
a += ((uint32_t)k[2])<<16;
a += ((uint32_t)k[3])<<24;
b += k[4];
42ad8: e5d06006 ldrb r6, [r0, #6] <== NOT EXECUTED
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
42adc: e5d07008 ldrb r7, [r0, #8] <== NOT EXECUTED
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
42ae0: e1a09809 lsl r9, r9, #16 <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
42ae4: e1a08808 lsl r8, r8, #16 <== NOT EXECUTED
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
42ae8: e0899405 add r9, r9, r5, lsl #8 <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
42aec: e0888404 add r8, r8, r4, lsl #8 <== NOT EXECUTED
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
a += ((uint32_t)k[1])<<8;
a += ((uint32_t)k[2])<<16;
42af0: e5d05003 ldrb r5, [r0, #3] <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
42af4: e5d04005 ldrb r4, [r0, #5] <== NOT EXECUTED
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
42af8: e5d0b00b ldrb fp, [r0, #11] <== NOT EXECUTED
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
a += ((uint32_t)k[1])<<8;
42afc: e089a00a add sl, r9, sl <== NOT EXECUTED
a += ((uint32_t)k[2])<<16;
a += ((uint32_t)k[3])<<24;
b += k[4];
42b00: e1a06806 lsl r6, r6, #16 <== NOT EXECUTED
b += ((uint32_t)k[5])<<8;
42b04: e5d09004 ldrb r9, [r0, #4] <== NOT EXECUTED
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
42b08: e0887007 add r7, r8, r7 <== NOT EXECUTED
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
{
a += k[0];
a += ((uint32_t)k[1])<<8;
a += ((uint32_t)k[2])<<16;
42b0c: e08aac05 add sl, sl, r5, lsl #24 <== NOT EXECUTED
a += ((uint32_t)k[3])<<24;
b += k[4];
42b10: e0864404 add r4, r6, r4, lsl #8 <== NOT EXECUTED
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
42b14: e5d05007 ldrb r5, [r0, #7] <== NOT EXECUTED
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
42b18: e0877c0b add r7, r7, fp, lsl #24 <== NOT EXECUTED
c += ((uint32_t)k[11])<<24;
42b1c: e0873003 add r3, r7, r3 <== NOT EXECUTED
while (length > 12)
{
a += k[0];
a += ((uint32_t)k[1])<<8;
a += ((uint32_t)k[2])<<16;
a += ((uint32_t)k[3])<<24;
42b20: e08a2002 add r2, sl, r2 <== NOT EXECUTED
b += k[4];
b += ((uint32_t)k[5])<<8;
42b24: e0844009 add r4, r4, r9 <== NOT EXECUTED
b += ((uint32_t)k[6])<<16;
42b28: e0844c05 add r4, r4, r5, lsl #24 <== NOT EXECUTED
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
c += ((uint32_t)k[11])<<24;
mix(a,b,c);
42b2c: e0632002 rsb r2, r3, r2 <== NOT EXECUTED
42b30: e0222e63 eor r2, r2, r3, ror #28 <== NOT EXECUTED
a += ((uint32_t)k[2])<<16;
a += ((uint32_t)k[3])<<24;
b += k[4];
b += ((uint32_t)k[5])<<8;
b += ((uint32_t)k[6])<<16;
b += ((uint32_t)k[7])<<24;
42b34: e084c00c add ip, r4, ip <== NOT EXECUTED
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
c += ((uint32_t)k[11])<<24;
mix(a,b,c);
42b38: e062600c rsb r6, r2, ip <== NOT EXECUTED
42b3c: e0266d62 eor r6, r6, r2, ror #26 <== NOT EXECUTED
42b40: e083300c add r3, r3, ip <== NOT EXECUTED
42b44: e0664003 rsb r4, r6, r3 <== NOT EXECUTED
42b48: e0244c66 eor r4, r4, r6, ror #24 <== NOT EXECUTED
42b4c: e0823003 add r3, r2, r3 <== NOT EXECUTED
42b50: e0642003 rsb r2, r4, r3 <== NOT EXECUTED
42b54: e0222864 eor r2, r2, r4, ror #16 <== NOT EXECUTED
42b58: e0866003 add r6, r6, r3 <== NOT EXECUTED
42b5c: e062c006 rsb ip, r2, r6 <== NOT EXECUTED
42b60: e02cc6e2 eor ip, ip, r2, ror #13 <== NOT EXECUTED
42b64: e0844006 add r4, r4, r6 <== NOT EXECUTED
length -= 12;
42b68: e241100c sub r1, r1, #12 <== NOT EXECUTED
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
c += ((uint32_t)k[11])<<24;
mix(a,b,c);
42b6c: e0822004 add r2, r2, r4 <== NOT EXECUTED
} else { /* need to read the key one byte at a time */
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
42b70: e351000c cmp r1, #12 <== NOT EXECUTED
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
c += ((uint32_t)k[11])<<24;
mix(a,b,c);
42b74: e06c4004 rsb r4, ip, r4 <== NOT EXECUTED
42b78: e0243e6c eor r3, r4, ip, ror #28 <== NOT EXECUTED
length -= 12;
k += 12;
42b7c: e280000c add r0, r0, #12 <== NOT EXECUTED
b += ((uint32_t)k[7])<<24;
c += k[8];
c += ((uint32_t)k[9])<<8;
c += ((uint32_t)k[10])<<16;
c += ((uint32_t)k[11])<<24;
mix(a,b,c);
42b80: e08cc002 add ip, ip, r2 <== NOT EXECUTED
} else { /* need to read the key one byte at a time */
const uint8_t *k = (const uint8_t *)key;
/*--------------- all but the last block: affect some 32 bits of (a,b,c) */
while (length > 12)
42b84: 8affffce bhi 42ac4 <rtems_rfs_dir_hash+0x2c> <== NOT EXECUTED
length -= 12;
k += 12;
}
/*-------------------------------- last block: affect all 32 bits of (c) */
switch(length) /* all the case statements fall through */
42b88: e2411001 sub r1, r1, #1 <== NOT EXECUTED
42b8c: e351000b cmp r1, #11 <== NOT EXECUTED
42b90: 979ff101 ldrls pc, [pc, r1, lsl #2] <== NOT EXECUTED
42b94: ea000031 b 42c60 <rtems_rfs_dir_hash+0x1c8> <== NOT EXECUTED
42b98: 00042c20 .word 0x00042c20 <== NOT EXECUTED
42b9c: 00042c18 .word 0x00042c18 <== NOT EXECUTED
42ba0: 00042c10 .word 0x00042c10 <== NOT EXECUTED
42ba4: 00042c08 .word 0x00042c08 <== NOT EXECUTED
42ba8: 00042c00 .word 0x00042c00 <== NOT EXECUTED
42bac: 00042bf8 .word 0x00042bf8 <== NOT EXECUTED
42bb0: 00042bf0 .word 0x00042bf0 <== NOT EXECUTED
42bb4: 00042be8 .word 0x00042be8 <== NOT EXECUTED
42bb8: 00042be0 .word 0x00042be0 <== NOT EXECUTED
42bbc: 00042bd8 .word 0x00042bd8 <== NOT EXECUTED
42bc0: 00042bd0 .word 0x00042bd0 <== NOT EXECUTED
42bc4: 00042bc8 .word 0x00042bc8 <== NOT EXECUTED
{
case 12: c+=((uint32_t)k[11])<<24;
42bc8: e5d0100b ldrb r1, [r0, #11] <== NOT EXECUTED
42bcc: e0833c01 add r3, r3, r1, lsl #24 <== NOT EXECUTED
case 11: c+=((uint32_t)k[10])<<16;
42bd0: e5d0100a ldrb r1, [r0, #10] <== NOT EXECUTED
42bd4: e0833801 add r3, r3, r1, lsl #16 <== NOT EXECUTED
case 10: c+=((uint32_t)k[9])<<8;
42bd8: e5d01009 ldrb r1, [r0, #9] <== NOT EXECUTED
42bdc: e0833401 add r3, r3, r1, lsl #8 <== NOT EXECUTED
case 9 : c+=k[8];
42be0: e5d01008 ldrb r1, [r0, #8] <== NOT EXECUTED
42be4: e0833001 add r3, r3, r1 <== NOT EXECUTED
case 8 : b+=((uint32_t)k[7])<<24;
42be8: e5d01007 ldrb r1, [r0, #7] <== NOT EXECUTED
42bec: e08ccc01 add ip, ip, r1, lsl #24 <== NOT EXECUTED
case 7 : b+=((uint32_t)k[6])<<16;
42bf0: e5d01006 ldrb r1, [r0, #6] <== NOT EXECUTED
42bf4: e08cc801 add ip, ip, r1, lsl #16 <== NOT EXECUTED
case 6 : b+=((uint32_t)k[5])<<8;
42bf8: e5d01005 ldrb r1, [r0, #5] <== NOT EXECUTED
42bfc: e08cc401 add ip, ip, r1, lsl #8 <== NOT EXECUTED
case 5 : b+=k[4];
42c00: e5d01004 ldrb r1, [r0, #4] <== NOT EXECUTED
42c04: e08cc001 add ip, ip, r1 <== NOT EXECUTED
case 4 : a+=((uint32_t)k[3])<<24;
42c08: e5d01003 ldrb r1, [r0, #3] <== NOT EXECUTED
42c0c: e0822c01 add r2, r2, r1, lsl #24 <== NOT EXECUTED
case 3 : a+=((uint32_t)k[2])<<16;
42c10: e5d01002 ldrb r1, [r0, #2] <== NOT EXECUTED
42c14: e0822801 add r2, r2, r1, lsl #16 <== NOT EXECUTED
case 2 : a+=((uint32_t)k[1])<<8;
42c18: e5d01001 ldrb r1, [r0, #1] <== NOT EXECUTED
42c1c: e0822401 add r2, r2, r1, lsl #8 <== NOT EXECUTED
case 1 : a+=k[0];
42c20: e5d01000 ldrb r1, [r0] <== NOT EXECUTED
break;
case 0 : return c;
}
}
final(a,b,c);
42c24: e023300c eor r3, r3, ip <== NOT EXECUTED
42c28: e043396c sub r3, r3, ip, ror #18 <== NOT EXECUTED
case 6 : b+=((uint32_t)k[5])<<8;
case 5 : b+=k[4];
case 4 : a+=((uint32_t)k[3])<<24;
case 3 : a+=((uint32_t)k[2])<<16;
case 2 : a+=((uint32_t)k[1])<<8;
case 1 : a+=k[0];
42c2c: e0822001 add r2, r2, r1 <== NOT EXECUTED
break;
case 0 : return c;
}
}
final(a,b,c);
42c30: e0232002 eor r2, r3, r2 <== NOT EXECUTED
42c34: e0422ae3 sub r2, r2, r3, ror #21 <== NOT EXECUTED
42c38: e022c00c eor ip, r2, ip <== NOT EXECUTED
42c3c: e04cc3e2 sub ip, ip, r2, ror #7 <== NOT EXECUTED
42c40: e02c3003 eor r3, ip, r3 <== NOT EXECUTED
42c44: e043186c sub r1, r3, ip, ror #16 <== NOT EXECUTED
42c48: e0212002 eor r2, r1, r2 <== NOT EXECUTED
42c4c: e0422e61 sub r2, r2, r1, ror #28 <== NOT EXECUTED
42c50: e022c00c eor ip, r2, ip <== NOT EXECUTED
42c54: e04cc962 sub ip, ip, r2, ror #18 <== NOT EXECUTED
42c58: e02c3001 eor r3, ip, r1 <== NOT EXECUTED
42c5c: e043346c sub r3, r3, ip, ror #8 <== NOT EXECUTED
return c;
}
42c60: e1a00003 mov r0, r3 <== NOT EXECUTED
42c64: e8bd0ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp} <== NOT EXECUTED
42c68: e12fff1e bx lr <== NOT EXECUTED
0003a5d4 <rtems_rfs_dir_lookup_ino>:
rtems_rfs_inode_handle* inode,
const char* name,
int length,
rtems_rfs_ino* ino,
uint32_t* offset)
{
3a5d4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3a5d8: e24dd070 sub sp, sp, #112 ; 0x70 <== NOT EXECUTED
3a5dc: e59d5094 ldr r5, [sp, #148] ; 0x94 <== NOT EXECUTED
3a5e0: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
printf ("%c", name[c]);
printf (", len=%d\n", length);
}
*ino = RTEMS_RFS_EMPTY_INO;
*offset = 0;
3a5e4: e59d2098 ldr r2, [sp, #152] ; 0x98 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (", len=%d\n", length);
}
*ino = RTEMS_RFS_EMPTY_INO;
3a5e8: e3a06000 mov r6, #0 <== NOT EXECUTED
*offset = 0;
rc = rtems_rfs_block_map_open (fs, inode, &map);
3a5ec: e28db010 add fp, sp, #16 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf (", len=%d\n", length);
}
*ino = RTEMS_RFS_EMPTY_INO;
3a5f0: e5856000 str r6, [r5] <== NOT EXECUTED
*offset = 0;
3a5f4: e5826000 str r6, [r2] <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, inode, &map);
3a5f8: e1a0200b mov r2, fp <== NOT EXECUTED
rtems_rfs_inode_handle* inode,
const char* name,
int length,
rtems_rfs_ino* ino,
uint32_t* offset)
{
3a5fc: e1a08003 mov r8, r3 <== NOT EXECUTED
3a600: e1a04000 mov r4, r0 <== NOT EXECUTED
}
*ino = RTEMS_RFS_EMPTY_INO;
*offset = 0;
rc = rtems_rfs_block_map_open (fs, inode, &map);
3a604: ebfffbfd bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3a608: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3a60c: da000002 ble 3a61c <rtems_rfs_dir_lookup_ino+0x48> <== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
3a610: e1a00009 mov r0, r9 <== NOT EXECUTED
3a614: e28dd070 add sp, sp, #112 ; 0x70 <== NOT EXECUTED
3a618: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
uint32_t hash;
/*
* Calculate the hash of the look up string.
*/
hash = rtems_rfs_dir_hash (name, length);
3a61c: e1a01008 mov r1, r8 <== NOT EXECUTED
3a620: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3a624: e5cd6060 strb r6, [sp, #96] ; 0x60 <== NOT EXECUTED
handle->bnum = 0;
3a628: e58d6064 str r6, [sp, #100] ; 0x64 <== NOT EXECUTED
handle->buffer = NULL;
3a62c: e58d6068 str r6, [sp, #104] ; 0x68 <== NOT EXECUTED
3a630: eb002118 bl 42a98 <rtems_rfs_dir_hash> <== NOT EXECUTED
/*
* Locate the first block. The map points to the start after open so just
* seek 0. If an error the block will be 0.
*/
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
3a634: e28dc06c add ip, sp, #108 ; 0x6c <== NOT EXECUTED
uint32_t hash;
/*
* Calculate the hash of the look up string.
*/
hash = rtems_rfs_dir_hash (name, length);
3a638: e1a07000 mov r7, r0 <== NOT EXECUTED
/*
* Locate the first block. The map points to the start after open so just
* seek 0. If an error the block will be 0.
*/
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
3a63c: e1a0100b mov r1, fp <== NOT EXECUTED
3a640: e1a00004 mov r0, r4 <== NOT EXECUTED
3a644: e3a02000 mov r2, #0 <== NOT EXECUTED
3a648: e3a03000 mov r3, #0 <== NOT EXECUTED
3a64c: e58dc000 str ip, [sp] <== NOT EXECUTED
3a650: ebfff930 bl 38b18 <rtems_rfs_block_map_seek> <== NOT EXECUTED
if (rc > 0)
3a654: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3a658: da00000b ble 3a68c <rtems_rfs_dir_lookup_ino+0xb8> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3a65c: e28d1060 add r1, sp, #96 ; 0x60 <== NOT EXECUTED
3a660: e1a00004 mov r0, r4 <== NOT EXECUTED
3a664: ebfffcb0 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: block map find failed: %d: %s\n",
rc, strerror (rc));
if (rc == ENXIO)
3a668: e3590006 cmp r9, #6 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
3a66c: e1a00004 mov r0, r4 <== NOT EXECUTED
3a670: e1a0100b mov r1, fp <== NOT EXECUTED
if (rc > 0)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: block map find failed: %d: %s\n",
rc, strerror (rc));
if (rc == ENXIO)
3a674: 03a09002 moveq r9, #2 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3a678: e58d6068 str r6, [sp, #104] ; 0x68 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3a67c: e5cd6060 strb r6, [sp, #96] ; 0x60 <== NOT EXECUTED
handle->bnum = 0;
3a680: e58d6064 str r6, [sp, #100] ; 0x64 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
3a684: ebfffb6a bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3a688: eaffffe0 b 3a610 <rtems_rfs_dir_lookup_ino+0x3c> <== NOT EXECUTED
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a68c: e3a06801 mov r6, #65536 ; 0x10000 <== NOT EXECUTED
3a690: e58d9008 str r9, [sp, #8] <== NOT EXECUTED
3a694: e2466001 sub r6, r6, #1 <== NOT EXECUTED
3a698: e1a0a007 mov sl, r7 <== NOT EXECUTED
3a69c: e1a09008 mov r9, r8 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
while ((rc == 0) && block)
3a6a0: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
3a6a4: e3520000 cmp r2, #0 <== NOT EXECUTED
3a6a8: 1a00005b bne 3a81c <rtems_rfs_dir_lookup_ino+0x248> <== NOT EXECUTED
3a6ac: e59d206c ldr r2, [sp, #108] ; 0x6c <== NOT EXECUTED
3a6b0: e3520000 cmp r2, #0 <== NOT EXECUTED
3a6b4: 0a00005a beq 3a824 <rtems_rfs_dir_lookup_ino+0x250> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: block read, ino=%" PRIu32 " bno=%" PRId32 "\n",
rtems_rfs_inode_ino (inode), map.bpos.bno);
rc = rtems_rfs_buffer_handle_request (fs, &entries, block, true);
3a6b8: e1a00004 mov r0, r4 <== NOT EXECUTED
3a6bc: e28d1060 add r1, sp, #96 ; 0x60 <== NOT EXECUTED
3a6c0: e3a03001 mov r3, #1 <== NOT EXECUTED
3a6c4: ebfffce2 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3a6c8: e3500000 cmp r0, #0 <== NOT EXECUTED
3a6cc: e58d000c str r0, [sp, #12] <== NOT EXECUTED
3a6d0: ca000040 bgt 3a7d8 <rtems_rfs_dir_lookup_ino+0x204> <== NOT EXECUTED
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a6d4: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
* means the entry is empty.
*/
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
3a6d8: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a6dc: e353000a cmp r3, #10 <== NOT EXECUTED
/*
* Search the block to see if the name matches. A hash of 0xffff or 0x0
* means the entry is empty.
*/
entry = rtems_rfs_buffer_data (&entries);
3a6e0: e59d3068 ldr r3, [sp, #104] ; 0x68 <== NOT EXECUTED
map.bpos.boff = 0;
3a6e4: e58d2024 str r2, [sp, #36] ; 0x24 <== NOT EXECUTED
/*
* Search the block to see if the name matches. A hash of 0xffff or 0x0
* means the entry is empty.
*/
entry = rtems_rfs_buffer_data (&entries);
3a6e8: e5937020 ldr r7, [r3, #32] <== NOT EXECUTED
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a6ec: 1a000008 bne 3a714 <rtems_rfs_dir_lookup_ino+0x140> <== NOT EXECUTED
3a6f0: ea000035 b 3a7cc <rtems_rfs_dir_lookup_ino+0x1f8> <== NOT EXECUTED
3a6f4: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return 0;
}
}
map.bpos.boff += elength;
3a6f8: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a6fc: e242200a sub r2, r2, #10 <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return 0;
}
}
map.bpos.boff += elength;
3a700: e0883003 add r3, r8, r3 <== NOT EXECUTED
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a704: e1520003 cmp r2, r3 <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
return 0;
}
}
map.bpos.boff += elength;
3a708: e58d3024 str r3, [sp, #36] ; 0x24 <== NOT EXECUTED
entry = rtems_rfs_buffer_data (&entries);
map.bpos.boff = 0;
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
3a70c: 9a00002e bls 3a7cc <rtems_rfs_dir_lookup_ino+0x1f8> <== NOT EXECUTED
return 0;
}
}
map.bpos.boff += elength;
entry += elength;
3a710: e0877008 add r7, r7, r8 <== NOT EXECUTED
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
3a714: e5d72000 ldrb r2, [r7] <== NOT EXECUTED
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
3a718: e5d70009 ldrb r0, [r7, #9] <== NOT EXECUTED
*ino = rtems_rfs_dir_entry_ino (entry);
3a71c: e5d73003 ldrb r3, [r7, #3] <== NOT EXECUTED
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
3a720: e5d78008 ldrb r8, [r7, #8] <== NOT EXECUTED
*ino = rtems_rfs_dir_entry_ino (entry);
3a724: e5d71001 ldrb r1, [r7, #1] <== NOT EXECUTED
3a728: e1833c02 orr r3, r3, r2, lsl #24 <== NOT EXECUTED
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
3a72c: e1808408 orr r8, r0, r8, lsl #8 <== NOT EXECUTED
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
3a730: e5d70005 ldrb r0, [r7, #5] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
3a734: e1833801 orr r3, r3, r1, lsl #16 <== NOT EXECUTED
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
3a738: e5d71004 ldrb r1, [r7, #4] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
3a73c: e5d72002 ldrb r2, [r7, #2] <== NOT EXECUTED
rtems_rfs_inode_ino (inode), elength, *ino, map.bpos.boff);
rc = EIO;
break;
}
if (ehash == hash)
3a740: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
3a744: e1800c01 orr r0, r0, r1, lsl #24 <== NOT EXECUTED
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
3a748: e5d71007 ldrb r1, [r7, #7] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
3a74c: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
while (map.bpos.boff < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE))
{
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
3a750: e5d72006 ldrb r2, [r7, #6] <== NOT EXECUTED
rtems_rfs_inode_ino (inode), elength, *ino, map.bpos.boff);
rc = EIO;
break;
}
if (ehash == hash)
3a754: e1801001 orr r1, r0, r1 <== NOT EXECUTED
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a758: e1580006 cmp r8, r6 <== NOT EXECUTED
rtems_rfs_inode_ino (inode), elength, *ino, map.bpos.boff);
rc = EIO;
break;
}
if (ehash == hash)
3a75c: e1811402 orr r1, r1, r2, lsl #8 <== NOT EXECUTED
uint32_t ehash;
int elength;
ehash = rtems_rfs_dir_entry_hash (entry);
elength = rtems_rfs_dir_entry_length (entry);
*ino = rtems_rfs_dir_entry_ino (entry);
3a760: e5853000 str r3, [r5] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
3a764: 0a000018 beq 3a7cc <rtems_rfs_dir_lookup_ino+0x1f8> <== NOT EXECUTED
break;
if (rtems_rfs_dir_entry_valid (fs, elength, *ino))
3a768: e358000a cmp r8, #10 <== NOT EXECUTED
3a76c: da00002e ble 3a82c <rtems_rfs_dir_lookup_ino+0x258> <== NOT EXECUTED
3a770: e594c018 ldr ip, [r4, #24] <== NOT EXECUTED
3a774: e158000c cmp r8, ip <== NOT EXECUTED
3a778: 2a00002b bcs 3a82c <rtems_rfs_dir_lookup_ino+0x258> <== NOT EXECUTED
3a77c: e3530000 cmp r3, #0 <== NOT EXECUTED
3a780: 0a000029 beq 3a82c <rtems_rfs_dir_lookup_ino+0x258> <== NOT EXECUTED
3a784: e5942010 ldr r2, [r4, #16] <== NOT EXECUTED
3a788: e1530002 cmp r3, r2 <== NOT EXECUTED
3a78c: 8a000026 bhi 3a82c <rtems_rfs_dir_lookup_ino+0x258> <== NOT EXECUTED
rtems_rfs_inode_ino (inode), elength, *ino, map.bpos.boff);
rc = EIO;
break;
}
if (ehash == hash)
3a790: e15a0001 cmp sl, r1 <== NOT EXECUTED
3a794: 1affffd6 bne 3a6f4 <rtems_rfs_dir_lookup_ino+0x120> <== NOT EXECUTED
"checking entry for ino %" PRId32 ": bno=%04" PRIx32 "/off=%04" PRIx32
" length:%d ino:%" PRId32 "\n",
rtems_rfs_inode_ino (inode), map.bpos.bno, map.bpos.boff,
elength, rtems_rfs_dir_entry_ino (entry));
if (memcmp (entry + RTEMS_RFS_DIR_ENTRY_SIZE, name, length) == 0)
3a798: e287000a add r0, r7, #10 <== NOT EXECUTED
3a79c: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
3a7a0: e1a02009 mov r2, r9 <== NOT EXECUTED
3a7a4: eb002e97 bl 46208 <memcmp> <== NOT EXECUTED
3a7a8: e3500000 cmp r0, #0 <== NOT EXECUTED
3a7ac: 1affffd0 bne 3a6f4 <rtems_rfs_dir_lookup_ino+0x120> <== NOT EXECUTED
{
*offset = rtems_rfs_block_map_pos (fs, &map);
3a7b0: e1a00004 mov r0, r4 <== NOT EXECUTED
3a7b4: e28b1010 add r1, fp, #16 <== NOT EXECUTED
3a7b8: e59d9008 ldr r9, [sp, #8] <== NOT EXECUTED
3a7bc: ebfff822 bl 3884c <rtems_rfs_block_get_pos> <== NOT EXECUTED
3a7c0: e59d3098 ldr r3, [sp, #152] ; 0x98 <== NOT EXECUTED
3a7c4: e5830000 str r0, [r3] <== NOT EXECUTED
3a7c8: ea000003 b 3a7dc <rtems_rfs_dir_lookup_ino+0x208> <== NOT EXECUTED
map.bpos.boff += elength;
entry += elength;
}
if (rc == 0)
3a7cc: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
3a7d0: e35c0000 cmp ip, #0 <== NOT EXECUTED
3a7d4: 0a000007 beq 3a7f8 <rtems_rfs_dir_lookup_ino+0x224> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
while ((rc == 0) && block)
3a7d8: e59d900c ldr r9, [sp, #12] <== NOT EXECUTED
printf ("rtems-rfs: dir-lookup-ino: block is 0 in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
}
rtems_rfs_buffer_handle_close (fs, &entries);
3a7dc: e28d1060 add r1, sp, #96 ; 0x60 <== NOT EXECUTED
3a7e0: e1a00004 mov r0, r4 <== NOT EXECUTED
3a7e4: ebfffd26 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
3a7e8: e1a00004 mov r0, r4 <== NOT EXECUTED
3a7ec: e1a0100b mov r1, fp <== NOT EXECUTED
3a7f0: ebfffb0f bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
3a7f4: eaffff85 b 3a610 <rtems_rfs_dir_lookup_ino+0x3c> <== NOT EXECUTED
entry += elength;
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
3a7f8: e1a00004 mov r0, r4 <== NOT EXECUTED
3a7fc: e1a0100b mov r1, fp <== NOT EXECUTED
3a800: e28d206c add r2, sp, #108 ; 0x6c <== NOT EXECUTED
3a804: ebfff8b6 bl 38ae4 <rtems_rfs_block_map_next_block> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: "
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
3a808: e3500006 cmp r0, #6 <== NOT EXECUTED
entry += elength;
}
if (rc == 0)
{
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
3a80c: e58d0008 str r0, [sp, #8] <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: "
"block map next block failed in ino %" PRIu32 ": %d: %s\n",
rtems_rfs_inode_ino (inode), rc, strerror (rc));
}
if (rc == ENXIO)
3a810: 1affffa2 bne 3a6a0 <rtems_rfs_dir_lookup_ino+0xcc> <== NOT EXECUTED
3a814: e3a09002 mov r9, #2 <== NOT EXECUTED
3a818: eaffffef b 3a7dc <rtems_rfs_dir_lookup_ino+0x208> <== NOT EXECUTED
3a81c: e59d9008 ldr r9, [sp, #8] <== NOT EXECUTED
3a820: eaffffed b 3a7dc <rtems_rfs_dir_lookup_ino+0x208> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &entries);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
while ((rc == 0) && block)
3a824: e3a09005 mov r9, #5 <== NOT EXECUTED
3a828: eaffffeb b 3a7dc <rtems_rfs_dir_lookup_ino+0x208> <== NOT EXECUTED
3a82c: e3a03005 mov r3, #5 <== NOT EXECUTED
3a830: e58d300c str r3, [sp, #12] <== NOT EXECUTED
3a834: eaffffe7 b 3a7d8 <rtems_rfs_dir_lookup_ino+0x204> <== NOT EXECUTED
00039ca4 <rtems_rfs_dir_read>:
rtems_rfs_dir_read (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_pos_rel offset,
struct dirent* dirent,
size_t* length)
{
39ca4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
39ca8: e24dd074 sub sp, sp, #116 ; 0x74 <== NOT EXECUTED
39cac: e59d509c ldr r5, [sp, #156] ; 0x9c <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: dir=%" PRId32 " offset=%" PRId64 "\n",
rtems_rfs_inode_ino (dir), offset);
*length = 0;
39cb0: e3a0c000 mov ip, #0 <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
39cb4: e28d6014 add r6, sp, #20 <== NOT EXECUTED
rtems_rfs_dir_read (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_pos_rel offset,
struct dirent* dirent,
size_t* length)
{
39cb8: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
39cbc: e58d300c str r3, [sp, #12] <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: dir=%" PRId32 " offset=%" PRId64 "\n",
rtems_rfs_inode_ino (dir), offset);
*length = 0;
39cc0: e585c000 str ip, [r5] <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
39cc4: e1a02006 mov r2, r6 <== NOT EXECUTED
rtems_rfs_dir_read (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* dir,
rtems_rfs_pos_rel offset,
struct dirent* dirent,
size_t* length)
{
39cc8: e1a04000 mov r4, r0 <== NOT EXECUTED
printf ("rtems-rfs: dir-read: dir=%" PRId32 " offset=%" PRId64 "\n",
rtems_rfs_inode_ino (dir), offset);
*length = 0;
rc = rtems_rfs_block_map_open (fs, dir, &map);
39ccc: ebfffe4b bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
39cd0: e2508000 subs r8, r0, #0 <== NOT EXECUTED
39cd4: da000002 ble 39ce4 <rtems_rfs_dir_read+0x40> <== NOT EXECUTED
}
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
39cd8: e1a00008 mov r0, r8 <== NOT EXECUTED
39cdc: e28dd074 add sp, sp, #116 ; 0x74 <== NOT EXECUTED
39ce0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
if (((rtems_rfs_fs_block_size (fs) -
(offset % rtems_rfs_fs_block_size (fs))) <= RTEMS_RFS_DIR_ENTRY_SIZE))
39ce4: e5947008 ldr r7, [r4, #8] <== NOT EXECUTED
39ce8: e3a08000 mov r8, #0 <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
if (((rtems_rfs_fs_block_size (fs) -
39cec: e1a02007 mov r2, r7 <== NOT EXECUTED
39cf0: e1a03008 mov r3, r8 <== NOT EXECUTED
39cf4: e28d1008 add r1, sp, #8 <== NOT EXECUTED
39cf8: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
39cfc: eb008743 bl 5ba10 <__moddi3> <== NOT EXECUTED
39d00: e1a02007 mov r2, r7 <== NOT EXECUTED
39d04: e1a03008 mov r3, r8 <== NOT EXECUTED
39d08: e0522000 subs r2, r2, r0 <== NOT EXECUTED
39d0c: e0c33001 sbc r3, r3, r1 <== NOT EXECUTED
39d10: e3530000 cmp r3, #0 <== NOT EXECUTED
39d14: da00000e ble 39d54 <rtems_rfs_dir_read+0xb0> <== NOT EXECUTED
(offset % rtems_rfs_fs_block_size (fs))) <= RTEMS_RFS_DIR_ENTRY_SIZE))
offset = (((offset / rtems_rfs_fs_block_size (fs)) + 1) *
rtems_rfs_fs_block_size (fs));
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
39d18: e1a00004 mov r0, r4 <== NOT EXECUTED
39d1c: e1a01006 mov r1, r6 <== NOT EXECUTED
39d20: e28d3008 add r3, sp, #8 <== NOT EXECUTED
39d24: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
39d28: e28d9070 add r9, sp, #112 ; 0x70 <== NOT EXECUTED
39d2c: e58d9000 str r9, [sp] <== NOT EXECUTED
39d30: ebfffb78 bl 38b18 <rtems_rfs_block_map_seek> <== NOT EXECUTED
if (rc > 0)
39d34: e2508000 subs r8, r0, #0 <== NOT EXECUTED
39d38: da000017 ble 39d9c <rtems_rfs_dir_read+0xf8> <== NOT EXECUTED
{
if (rc == ENXIO)
39d3c: e3580006 cmp r8, #6 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
39d40: e1a00004 mov r0, r4 <== NOT EXECUTED
39d44: e1a01006 mov r1, r6 <== NOT EXECUTED
rtems_rfs_fs_block_size (fs));
rc = rtems_rfs_block_map_seek (fs, &map, offset, &block);
if (rc > 0)
{
if (rc == ENXIO)
39d48: 03a08002 moveq r8, #2 <== NOT EXECUTED
rc = ENOENT;
rtems_rfs_block_map_close (fs, &map);
39d4c: ebfffdb8 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
39d50: eaffffe0 b 39cd8 <rtems_rfs_dir_read+0x34> <== NOT EXECUTED
rc = rtems_rfs_block_map_open (fs, dir, &map);
if (rc > 0)
return rc;
if (((rtems_rfs_fs_block_size (fs) -
39d54: 1a000001 bne 39d60 <rtems_rfs_dir_read+0xbc> <== NOT EXECUTED
39d58: e352000a cmp r2, #10 <== NOT EXECUTED
39d5c: 8affffed bhi 39d18 <rtems_rfs_dir_read+0x74> <== NOT EXECUTED
(offset % rtems_rfs_fs_block_size (fs))) <= RTEMS_RFS_DIR_ENTRY_SIZE))
offset = (((offset / rtems_rfs_fs_block_size (fs)) + 1) *
39d60: e28d1008 add r1, sp, #8 <== NOT EXECUTED
39d64: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
39d68: e1a02007 mov r2, r7 <== NOT EXECUTED
39d6c: e1a03008 mov r3, r8 <== NOT EXECUTED
39d70: eb0085fc bl 5b568 <__divdi3> <== NOT EXECUTED
39d74: e3a02001 mov r2, #1 <== NOT EXECUTED
39d78: e0922000 adds r2, r2, r0 <== NOT EXECUTED
39d7c: e3a03000 mov r3, #0 <== NOT EXECUTED
39d80: e0a33001 adc r3, r3, r1 <== NOT EXECUTED
39d84: e0810792 umull r0, r1, r2, r7 <== NOT EXECUTED
39d88: e58d0008 str r0, [sp, #8] <== NOT EXECUTED
39d8c: e58d100c str r1, [sp, #12] <== NOT EXECUTED
39d90: e0211397 mla r1, r7, r3, r1 <== NOT EXECUTED
39d94: e58d100c str r1, [sp, #12] <== NOT EXECUTED
39d98: eaffffde b 39d18 <rtems_rfs_dir_read+0x74> <== NOT EXECUTED
entry += map.bpos.boff;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
39d9c: e3a0c801 mov ip, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
39da0: e3a03000 mov r3, #0 <== NOT EXECUTED
39da4: e24cc001 sub ip, ip, #1 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
39da8: e58d306c str r3, [sp, #108] ; 0x6c <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
39dac: e5cd3064 strb r3, [sp, #100] ; 0x64 <== NOT EXECUTED
handle->bnum = 0;
39db0: e58d3068 str r3, [sp, #104] ; 0x68 <== NOT EXECUTED
39db4: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
39db8: ea000001 b 39dc4 <rtems_rfs_dir_read+0x120> <== NOT EXECUTED
/*
* Look for an empty entry and if this is the last block that is the end of
* the directory.
*/
while (rc == 0)
39dbc: e3500000 cmp r0, #0 <== NOT EXECUTED
39dc0: 1a000027 bne 39e64 <rtems_rfs_dir_read+0x1c0> <== NOT EXECUTED
uint8_t* entry;
rtems_rfs_ino eino;
int elength;
int remaining;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
39dc4: e28d1064 add r1, sp, #100 ; 0x64 <== NOT EXECUTED
39dc8: e59d2070 ldr r2, [sp, #112] ; 0x70 <== NOT EXECUTED
39dcc: e3a03001 mov r3, #1 <== NOT EXECUTED
39dd0: e1a00004 mov r0, r4 <== NOT EXECUTED
39dd4: ebffff1e bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
39dd8: e2508000 subs r8, r0, #0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: next block: off:%" PRId64 " length:%zd\n",
offset, *length);
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
39ddc: e1a01006 mov r1, r6 <== NOT EXECUTED
39de0: e28d2070 add r2, sp, #112 ; 0x70 <== NOT EXECUTED
39de4: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int remaining;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
39de8: ca000024 bgt 39e80 <rtems_rfs_dir_read+0x1dc> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_block_map_close (fs, &map);
return rc;
}
entry = rtems_rfs_buffer_data (&buffer);
39dec: e59d306c ldr r3, [sp, #108] ; 0x6c <== NOT EXECUTED
39df0: e593c020 ldr ip, [r3, #32] <== NOT EXECUTED
entry += map.bpos.boff;
39df4: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
39df8: e08c7003 add r7, ip, r3 <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
39dfc: e7dca003 ldrb sl, [ip, r3] <== NOT EXECUTED
39e00: e5d79003 ldrb r9, [r7, #3] <== NOT EXECUTED
}
entry = rtems_rfs_buffer_data (&buffer);
entry += map.bpos.boff;
elength = rtems_rfs_dir_entry_length (entry);
39e04: e5d7c009 ldrb ip, [r7, #9] <== NOT EXECUTED
39e08: e5d7e008 ldrb lr, [r7, #8] <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
39e0c: e5d7b001 ldrb fp, [r7, #1] <== NOT EXECUTED
39e10: e189ac0a orr sl, r9, sl, lsl #24 <== NOT EXECUTED
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
39e14: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
}
entry = rtems_rfs_buffer_data (&buffer);
entry += map.bpos.boff;
elength = rtems_rfs_dir_entry_length (entry);
39e18: e18ce40e orr lr, ip, lr, lsl #8 <== NOT EXECUTED
eino = rtems_rfs_dir_entry_ino (entry);
39e1c: e5d7c002 ldrb ip, [r7, #2] <== NOT EXECUTED
39e20: e18aa80b orr sl, sl, fp, lsl #16 <== NOT EXECUTED
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
39e24: e15e0009 cmp lr, r9 <== NOT EXECUTED
entry = rtems_rfs_buffer_data (&buffer);
entry += map.bpos.boff;
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
39e28: e18aa40c orr sl, sl, ip, lsl #8 <== NOT EXECUTED
39e2c: e2879001 add r9, r7, #1 <== NOT EXECUTED
39e30: e287b002 add fp, r7, #2 <== NOT EXECUTED
39e34: e287c003 add ip, r7, #3 <== NOT EXECUTED
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
39e38: 1a000016 bne 39e98 <rtems_rfs_dir_read+0x1f4> <== NOT EXECUTED
printf ("rtems-rfs: dir-read: found off:%" PRIdoff_t " ino:%ld name=%s\n",
dirent->d_off, dirent->d_ino, dirent->d_name);
break;
}
*length += rtems_rfs_fs_block_size (fs) - map.bpos.boff;
39e3c: e594e008 ldr lr, [r4, #8] <== NOT EXECUTED
39e40: e595c000 ldr ip, [r5] <== NOT EXECUTED
39e44: e063300e rsb r3, r3, lr <== NOT EXECUTED
39e48: e08c3003 add r3, ip, r3 <== NOT EXECUTED
39e4c: e5853000 str r3, [r5] <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: next block: off:%" PRId64 " length:%zd\n",
offset, *length);
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
39e50: ebfffb23 bl 38ae4 <rtems_rfs_block_map_next_block> <== NOT EXECUTED
if (rc == ENXIO)
39e54: e3500006 cmp r0, #6 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: next block: off:%" PRId64 " length:%zd\n",
offset, *length);
rc = rtems_rfs_block_map_next_block (fs, &map, &block);
39e58: e1a08000 mov r8, r0 <== NOT EXECUTED
if (rc == ENXIO)
39e5c: 1affffd6 bne 39dbc <rtems_rfs_dir_read+0x118> <== NOT EXECUTED
39e60: e3a08002 mov r8, #2 <== NOT EXECUTED
rc = ENOENT;
}
rtems_rfs_buffer_handle_close (fs, &buffer);
39e64: e28d1064 add r1, sp, #100 ; 0x64 <== NOT EXECUTED
39e68: e1a00004 mov r0, r4 <== NOT EXECUTED
39e6c: ebffff84 bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
39e70: e1a00004 mov r0, r4 <== NOT EXECUTED
39e74: e1a01006 mov r1, r6 <== NOT EXECUTED
39e78: ebfffd6d bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
39e7c: eaffff95 b 39cd8 <rtems_rfs_dir_read+0x34> <== NOT EXECUTED
int remaining;
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &buffer);
39e80: e28d1064 add r1, sp, #100 ; 0x64 <== NOT EXECUTED
39e84: ebffff7e bl 39c84 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
39e88: e1a00004 mov r0, r4 <== NOT EXECUTED
39e8c: e1a01006 mov r1, r6 <== NOT EXECUTED
39e90: ebfffd67 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
return rc;
39e94: eaffff8f b 39cd8 <rtems_rfs_dir_read+0x34> <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
39e98: e35e000a cmp lr, #10 <== NOT EXECUTED
39e9c: e58db010 str fp, [sp, #16] <== NOT EXECUTED
39ea0: e1a0b00e mov fp, lr <== NOT EXECUTED
39ea4: ca000001 bgt 39eb0 <rtems_rfs_dir_read+0x20c> <== NOT EXECUTED
/*
* Look for an empty entry and if this is the last block that is the end of
* the directory.
*/
while (rc == 0)
39ea8: e3a08005 mov r8, #5 <== NOT EXECUTED
39eac: eaffffec b 39e64 <rtems_rfs_dir_read+0x1c0> <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (entry);
eino = rtems_rfs_dir_entry_ino (entry);
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
{
if (rtems_rfs_dir_entry_valid (fs, elength, eino))
39eb0: e5941018 ldr r1, [r4, #24] <== NOT EXECUTED
39eb4: e35a0000 cmp sl, #0 <== NOT EXECUTED
39eb8: 115e0001 cmpne lr, r1 <== NOT EXECUTED
39ebc: 33a01000 movcc r1, #0 <== NOT EXECUTED
39ec0: 23a01001 movcs r1, #1 <== NOT EXECUTED
39ec4: 2afffff7 bcs 39ea8 <rtems_rfs_dir_read+0x204> <== NOT EXECUTED
39ec8: e5943010 ldr r3, [r4, #16] <== NOT EXECUTED
39ecc: e15a0003 cmp sl, r3 <== NOT EXECUTED
39ed0: 8afffff4 bhi 39ea8 <rtems_rfs_dir_read+0x204> <== NOT EXECUTED
rtems_rfs_inode_ino (dir), elength, eino, map.bpos.boff);
rc = EIO;
break;
}
memset (dirent, 0, sizeof (struct dirent));
39ed4: e3a02e11 mov r2, #272 ; 0x110 <== NOT EXECUTED
39ed8: e59d0098 ldr r0, [sp, #152] ; 0x98 <== NOT EXECUTED
39edc: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
39ee0: eb003179 bl 464cc <memset> <== NOT EXECUTED
dirent->d_off = offset;
dirent->d_reclen = sizeof (struct dirent);
*length += elength;
39ee4: e5952000 ldr r2, [r5] <== NOT EXECUTED
39ee8: e08b2002 add r2, fp, r2 <== NOT EXECUTED
39eec: e5852000 str r2, [r5] <== NOT EXECUTED
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
39ef0: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
39ef4: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
39ef8: e0633001 rsb r3, r3, r1 <== NOT EXECUTED
39efc: e06b3003 rsb r3, fp, r3 <== NOT EXECUTED
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
39f00: e353000a cmp r3, #10 <== NOT EXECUTED
rc = EIO;
break;
}
memset (dirent, 0, sizeof (struct dirent));
dirent->d_off = offset;
39f04: e28d1008 add r1, sp, #8 <== NOT EXECUTED
39f08: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
39f0c: e59de098 ldr lr, [sp, #152] ; 0x98 <== NOT EXECUTED
*length += elength;
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
*length += remaining;
39f10: d0833002 addle r3, r3, r2 <== NOT EXECUTED
39f14: d5853000 strle r3, [r5] <== NOT EXECUTED
rc = EIO;
break;
}
memset (dirent, 0, sizeof (struct dirent));
dirent->d_off = offset;
39f18: e98e0003 stmib lr, {r0, r1} <== NOT EXECUTED
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
*length += remaining;
elength -= RTEMS_RFS_DIR_ENTRY_SIZE;
39f1c: e24b500a sub r5, fp, #10 <== NOT EXECUTED
if (elength > NAME_MAX)
elength = NAME_MAX;
memcpy (dirent->d_name, entry + RTEMS_RFS_DIR_ENTRY_SIZE, elength);
39f20: e59d1098 ldr r1, [sp, #152] ; 0x98 <== NOT EXECUTED
*length += elength;
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
39f24: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
break;
}
memset (dirent, 0, sizeof (struct dirent));
dirent->d_off = offset;
dirent->d_reclen = sizeof (struct dirent);
39f28: e3a00e11 mov r0, #272 ; 0x110 <== NOT EXECUTED
remaining = rtems_rfs_fs_block_size (fs) - (map.bpos.boff + elength);
if (remaining <= RTEMS_RFS_DIR_ENTRY_SIZE)
*length += remaining;
elength -= RTEMS_RFS_DIR_ENTRY_SIZE;
39f2c: e35500ff cmp r5, #255 ; 0xff <== NOT EXECUTED
39f30: a3a050ff movge r5, #255 ; 0xff <== NOT EXECUTED
break;
}
memset (dirent, 0, sizeof (struct dirent));
dirent->d_off = offset;
dirent->d_reclen = sizeof (struct dirent);
39f34: e1ce00bc strh r0, [lr, #12] <== NOT EXECUTED
elength -= RTEMS_RFS_DIR_ENTRY_SIZE;
if (elength > NAME_MAX)
elength = NAME_MAX;
memcpy (dirent->d_name, entry + RTEMS_RFS_DIR_ENTRY_SIZE, elength);
39f38: e1a02005 mov r2, r5 <== NOT EXECUTED
39f3c: e2810010 add r0, r1, #16 <== NOT EXECUTED
39f40: e287100a add r1, r7, #10 <== NOT EXECUTED
39f44: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
39f48: eb0030d8 bl 462b0 <memcpy> <== NOT EXECUTED
dirent->d_ino = rtems_rfs_dir_entry_ino (entry);
39f4c: e5d92000 ldrb r2, [r9] <== NOT EXECUTED
39f50: e59dc004 ldr ip, [sp, #4] <== NOT EXECUTED
39f54: e5d71000 ldrb r1, [r7] <== NOT EXECUTED
39f58: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
39f5c: e5dc3000 ldrb r3, [ip] <== NOT EXECUTED
39f60: e1a02802 lsl r2, r2, #16 <== NOT EXECUTED
39f64: e1821c01 orr r1, r2, r1, lsl #24 <== NOT EXECUTED
39f68: e5d92000 ldrb r2, [r9] <== NOT EXECUTED
dirent->d_namlen = elength;
39f6c: e59dc098 ldr ip, [sp, #152] ; 0x98 <== NOT EXECUTED
if (elength > NAME_MAX)
elength = NAME_MAX;
memcpy (dirent->d_name, entry + RTEMS_RFS_DIR_ENTRY_SIZE, elength);
dirent->d_ino = rtems_rfs_dir_entry_ino (entry);
39f70: e1813003 orr r3, r1, r3 <== NOT EXECUTED
39f74: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
dirent->d_namlen = elength;
39f78: e1cc50be strh r5, [ip, #14] <== NOT EXECUTED
if (elength > NAME_MAX)
elength = NAME_MAX;
memcpy (dirent->d_name, entry + RTEMS_RFS_DIR_ENTRY_SIZE, elength);
dirent->d_ino = rtems_rfs_dir_entry_ino (entry);
39f7c: e58c3000 str r3, [ip] <== NOT EXECUTED
dirent->d_namlen = elength;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: found off:%" PRIdoff_t " ino:%ld name=%s\n",
dirent->d_off, dirent->d_ino, dirent->d_name);
break;
39f80: eaffffb7 b 39e64 <rtems_rfs_dir_read+0x1c0> <== NOT EXECUTED
0003b190 <rtems_rfs_file_close>:
}
int
rtems_rfs_file_close (rtems_rfs_file_system* fs,
rtems_rfs_file_handle* handle)
{
3b190: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
3b194: e1a04001 mov r4, r1 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: entry: ino=%" PRId32 "\n",
handle->shared->inode.ino);
if (handle->shared->references > 0)
3b198: e591101c ldr r1, [r1, #28] <== NOT EXECUTED
3b19c: e5913008 ldr r3, [r1, #8] <== NOT EXECUTED
3b1a0: e3530000 cmp r3, #0 <== NOT EXECUTED
handle->shared->references--;
3b1a4: c2433001 subgt r3, r3, #1 <== NOT EXECUTED
3b1a8: c5813008 strgt r3, [r1, #8] <== NOT EXECUTED
if (handle->shared->references == 0)
3b1ac: e3530000 cmp r3, #0 <== NOT EXECUTED
}
int
rtems_rfs_file_close (rtems_rfs_file_system* fs,
rtems_rfs_file_handle* handle)
{
3b1b0: e1a06000 mov r6, r0 <== NOT EXECUTED
handle->shared->inode.ino);
if (handle->shared->references > 0)
handle->shared->references--;
if (handle->shared->references == 0)
3b1b4: 13a05000 movne r5, #0 <== NOT EXECUTED
3b1b8: 1a00004b bne 3b2ec <rtems_rfs_file_close+0x15c> <== NOT EXECUTED
{
if (!rtems_rfs_inode_is_loaded (&handle->shared->inode))
3b1bc: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
3b1c0: e3530000 cmp r3, #0 <== NOT EXECUTED
3b1c4: 0a000058 beq 3b32c <rtems_rfs_file_close+0x19c> <== NOT EXECUTED
if (rrc == 0)
{
/*
* @todo This could be clever and only update if different.
*/
rtems_rfs_inode_set_atime (&handle->shared->inode,
3b1c8: e591208c ldr r2, [r1, #140] ; 0x8c <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
3b1cc: e1a00c22 lsr r0, r2, #24 <== NOT EXECUTED
3b1d0: e5c30010 strb r0, [r3, #16] <== NOT EXECUTED
3b1d4: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
3b1d8: e1a00822 lsr r0, r2, #16 <== NOT EXECUTED
3b1dc: e5c30011 strb r0, [r3, #17] <== NOT EXECUTED
3b1e0: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
3b1e4: e1a00422 lsr r0, r2, #8 <== NOT EXECUTED
3b1e8: e5c30012 strb r0, [r3, #18] <== NOT EXECUTED
3b1ec: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
3b1f0: e5c32013 strb r2, [r3, #19] <== NOT EXECUTED
handle->shared->atime);
rtems_rfs_inode_set_mtime (&handle->shared->inode,
3b1f4: e594201c ldr r2, [r4, #28] <== NOT EXECUTED
3b1f8: e5923090 ldr r3, [r2, #144] ; 0x90 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
3b1fc: e592c018 ldr ip, [r2, #24] <== NOT EXECUTED
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3b200: e3a00001 mov r0, #1 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
3b204: e1a0ec23 lsr lr, r3, #24 <== NOT EXECUTED
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3b208: e5c1001c strb r0, [r1, #28] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
3b20c: e5cce014 strb lr, [ip, #20] <== NOT EXECUTED
3b210: e5921018 ldr r1, [r2, #24] <== NOT EXECUTED
3b214: e1a0c823 lsr ip, r3, #16 <== NOT EXECUTED
3b218: e5c1c015 strb ip, [r1, #21] <== NOT EXECUTED
3b21c: e5921018 ldr r1, [r2, #24] <== NOT EXECUTED
3b220: e1a0c423 lsr ip, r3, #8 <== NOT EXECUTED
3b224: e5c1c016 strb ip, [r1, #22] <== NOT EXECUTED
3b228: e5921018 ldr r1, [r2, #24] <== NOT EXECUTED
3b22c: e5c13017 strb r3, [r1, #23] <== NOT EXECUTED
handle->shared->mtime);
rtems_rfs_inode_set_ctime (&handle->shared->inode,
3b230: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3b234: e5931094 ldr r1, [r3, #148] ; 0x94 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_ctime (rtems_rfs_inode_handle* handle,
rtems_rfs_time ctime)
{
rtems_rfs_write_u32 (&handle->node->ctime, ctime);
3b238: e593c018 ldr ip, [r3, #24] <== NOT EXECUTED
3b23c: e1a0ec21 lsr lr, r1, #24 <== NOT EXECUTED
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3b240: e5c2001c strb r0, [r2, #28] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_ctime (rtems_rfs_inode_handle* handle,
rtems_rfs_time ctime)
{
rtems_rfs_write_u32 (&handle->node->ctime, ctime);
3b244: e5cce018 strb lr, [ip, #24] <== NOT EXECUTED
3b248: e5932018 ldr r2, [r3, #24] <== NOT EXECUTED
3b24c: e1a0c821 lsr ip, r1, #16 <== NOT EXECUTED
3b250: e5c2c019 strb ip, [r2, #25] <== NOT EXECUTED
3b254: e5932018 ldr r2, [r3, #24] <== NOT EXECUTED
3b258: e1a0c421 lsr ip, r1, #8 <== NOT EXECUTED
3b25c: e5c2c01a strb ip, [r2, #26] <== NOT EXECUTED
3b260: e5932018 ldr r2, [r3, #24] <== NOT EXECUTED
3b264: e5c2101b strb r1, [r2, #27] <== NOT EXECUTED
handle->shared->ctime);
if (!rtems_rfs_block_size_equal (&handle->shared->size,
3b268: e594101c ldr r1, [r4, #28] <== NOT EXECUTED
3b26c: e5912084 ldr r2, [r1, #132] ; 0x84 <== NOT EXECUTED
3b270: e591c03c ldr ip, [r1, #60] ; 0x3c <== NOT EXECUTED
3b274: e152000c cmp r2, ip <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3b278: e5c3001c strb r0, [r3, #28] <== NOT EXECUTED
3b27c: e1a03001 mov r3, r1 <== NOT EXECUTED
3b280: 15910088 ldrne r0, [r1, #136] ; 0x88 <== NOT EXECUTED
3b284: 0a000023 beq 3b318 <rtems_rfs_file_close+0x188> <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size (rtems_rfs_block_map* map,
rtems_rfs_block_size* size)
{
rtems_rfs_block_copy_size (&map->size, size);
3b288: e583203c str r2, [r3, #60] ; 0x3c <== NOT EXECUTED
map->dirty = true;
3b28c: e3a02001 mov r2, #1 <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size (rtems_rfs_block_map* map,
rtems_rfs_block_size* size)
{
rtems_rfs_block_copy_size (&map->size, size);
3b290: e5830040 str r0, [r3, #64] ; 0x40 <== NOT EXECUTED
map->dirty = true;
3b294: e5c32034 strb r2, [r3, #52] ; 0x34 <== NOT EXECUTED
3b298: e1a01003 mov r1, r3 <== NOT EXECUTED
3b29c: e3a05000 mov r5, #0 <== NOT EXECUTED
&handle->shared->map.size))
rtems_rfs_block_map_set_size (&handle->shared->map,
&handle->shared->size);
}
rc = rtems_rfs_block_map_close (fs, &handle->shared->map);
3b2a0: e2811034 add r1, r1, #52 ; 0x34 <== NOT EXECUTED
3b2a4: e1a00006 mov r0, r6 <== NOT EXECUTED
3b2a8: ebfff861 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
if (rc > 0)
3b2ac: e3500000 cmp r0, #0 <== NOT EXECUTED
3b2b0: da000001 ble 3b2bc <rtems_rfs_file_close+0x12c> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: map close error: ino=%" PRId32 ": %d: %s\n",
handle->shared->inode.ino, rc, strerror (rc));
if (rrc == 0)
3b2b4: e3550000 cmp r5, #0 <== NOT EXECUTED
3b2b8: 01a05000 moveq r5, r0 <== NOT EXECUTED
rrc = rc;
}
rc = rtems_rfs_inode_close (fs, &handle->shared->inode);
3b2bc: e594101c ldr r1, [r4, #28] <== NOT EXECUTED
3b2c0: e1a00006 mov r0, r6 <== NOT EXECUTED
3b2c4: e281100c add r1, r1, #12 <== NOT EXECUTED
3b2c8: eb0007c1 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3b2cc: e3500000 cmp r0, #0 <== NOT EXECUTED
3b2d0: da000001 ble 3b2dc <rtems_rfs_file_close+0x14c> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: inode close error: ino=%" PRId32 ": %d: %s\n",
handle->shared->inode.ino, rc, strerror (rc));
if (rrc == 0)
3b2d4: e3550000 cmp r5, #0 <== NOT EXECUTED
3b2d8: 01a05000 moveq r5, r0 <== NOT EXECUTED
3b2dc: e594001c ldr r0, [r4, #28] <== NOT EXECUTED
3b2e0: ebff4772 bl d0b0 <_Chain_Extract> <== NOT EXECUTED
rrc = rc;
}
rtems_chain_extract (&handle->shared->link);
free (handle->shared);
3b2e4: e594001c ldr r0, [r4, #28] <== NOT EXECUTED
3b2e8: ebff32a0 bl 7d70 <free> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3b2ec: e2841004 add r1, r4, #4 <== NOT EXECUTED
3b2f0: e1a00006 mov r0, r6 <== NOT EXECUTED
3b2f4: ebfff98c bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3b2f8: e3a03000 mov r3, #0 <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_CLOSE))
printf ("rtems-rfs: file-close: result: %d: %s\n", rrc, strerror (rrc));
}
free (handle);
3b2fc: e1a00004 mov r0, r4 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3b300: e584300c str r3, [r4, #12] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3b304: e5c43004 strb r3, [r4, #4] <== NOT EXECUTED
handle->bnum = 0;
3b308: e5843008 str r3, [r4, #8] <== NOT EXECUTED
3b30c: ebff3297 bl 7d70 <free> <== NOT EXECUTED
return rrc;
}
3b310: e1a00005 mov r0, r5 <== NOT EXECUTED
3b314: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
handle->shared->atime);
rtems_rfs_inode_set_mtime (&handle->shared->inode,
handle->shared->mtime);
rtems_rfs_inode_set_ctime (&handle->shared->inode,
handle->shared->ctime);
if (!rtems_rfs_block_size_equal (&handle->shared->size,
3b318: e5910088 ldr r0, [r1, #136] ; 0x88 <== NOT EXECUTED
3b31c: e591c040 ldr ip, [r1, #64] ; 0x40 <== NOT EXECUTED
3b320: e150000c cmp r0, ip <== NOT EXECUTED
3b324: 1affffd7 bne 3b288 <rtems_rfs_file_close+0xf8> <== NOT EXECUTED
3b328: eaffffdb b 3b29c <rtems_rfs_file_close+0x10c> <== NOT EXECUTED
handle->shared->references--;
if (handle->shared->references == 0)
{
if (!rtems_rfs_inode_is_loaded (&handle->shared->inode))
rrc = rtems_rfs_inode_load (fs, &handle->shared->inode);
3b32c: e281100c add r1, r1, #12 <== NOT EXECUTED
3b330: eb0007b3 bl 3d204 <rtems_rfs_inode_load> <== NOT EXECUTED
if (rrc == 0)
3b334: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3b338: 1594101c ldrne r1, [r4, #28] <== NOT EXECUTED
3b33c: 1affffd7 bne 3b2a0 <rtems_rfs_file_close+0x110> <== NOT EXECUTED
3b340: e594101c ldr r1, [r4, #28] <== NOT EXECUTED
3b344: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
3b348: eaffff9e b 3b1c8 <rtems_rfs_file_close+0x38> <== NOT EXECUTED
0003aa14 <rtems_rfs_file_get_shared>:
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
3aa14: e5903070 ldr r3, [r0, #112] ; 0x70 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
3aa18: e2802074 add r2, r0, #116 ; 0x74 <== NOT EXECUTED
rtems_rfs_file_get_shared (rtems_rfs_file_system* fs,
rtems_rfs_ino ino)
{
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
3aa1c: e1530002 cmp r3, r2 <== NOT EXECUTED
3aa20: 0a00000b beq 3aa54 <rtems_rfs_file_get_shared+0x40> <== NOT EXECUTED
{
rtems_rfs_file_shared* shared;
shared = (rtems_rfs_file_shared*) node;
if (shared->inode.ino == ino)
3aa24: e5930014 ldr r0, [r3, #20] <== NOT EXECUTED
3aa28: e1500001 cmp r0, r1 <== NOT EXECUTED
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
{
rtems_rfs_file_shared* shared;
shared = (rtems_rfs_file_shared*) node;
3aa2c: e1a00003 mov r0, r3 <== NOT EXECUTED
if (shared->inode.ino == ino)
3aa30: 1a000004 bne 3aa48 <rtems_rfs_file_get_shared+0x34> <== NOT EXECUTED
3aa34: e12fff1e bx lr <== NOT EXECUTED
3aa38: e5930014 ldr r0, [r3, #20] <== NOT EXECUTED
3aa3c: e1500001 cmp r0, r1 <== NOT EXECUTED
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
{
rtems_rfs_file_shared* shared;
shared = (rtems_rfs_file_shared*) node;
3aa40: e1a00003 mov r0, r3 <== NOT EXECUTED
if (shared->inode.ino == ino)
3aa44: 012fff1e bxeq lr <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
3aa48: e5933000 ldr r3, [r3] <== NOT EXECUTED
rtems_rfs_file_get_shared (rtems_rfs_file_system* fs,
rtems_rfs_ino ino)
{
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
3aa4c: e1530002 cmp r3, r2 <== NOT EXECUTED
3aa50: 1afffff8 bne 3aa38 <rtems_rfs_file_get_shared+0x24> <== NOT EXECUTED
3aa54: e3a00000 mov r0, #0 <== NOT EXECUTED
if (shared->inode.ino == ino)
return shared;
node = rtems_chain_next (node);
}
return NULL;
}
3aa58: e12fff1e bx lr <== NOT EXECUTED
0003afd4 <rtems_rfs_file_io_end>:
int
rtems_rfs_file_io_end (rtems_rfs_file_handle* handle,
size_t size,
bool read)
{
3afd4: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: end: %s size=%zu\n",
read ? "read" : "write", size);
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
3afd8: e590400c ldr r4, [r0, #12] <== NOT EXECUTED
3afdc: e3540000 cmp r4, #0 <== NOT EXECUTED
int
rtems_rfs_file_io_end (rtems_rfs_file_handle* handle,
size_t size,
bool read)
{
3afe0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3afe4: e1a05000 mov r5, r0 <== NOT EXECUTED
3afe8: e1a07001 mov r7, r1 <== NOT EXECUTED
3afec: e20260ff and r6, r2, #255 ; 0xff <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: end: %s size=%zu\n",
read ? "read" : "write", size);
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
3aff0: 0a000017 beq 3b054 <rtems_rfs_file_io_end+0x80> <== NOT EXECUTED
{
if (!read)
3aff4: e3560000 cmp r6, #0 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (rtems_rfs_file_buffer (handle));
3aff8: 03a03001 moveq r3, #1 <== NOT EXECUTED
3affc: 05c03004 strbeq r3, [r0, #4] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
3b000: e590301c ldr r3, [r0, #28] <== NOT EXECUTED
3b004: e2851004 add r1, r5, #4 <== NOT EXECUTED
3b008: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3b00c: ebfffa46 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_file_buffer (handle));
if (rc > 0)
3b010: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3b014: da00000e ble 3b054 <rtems_rfs_file_io_end+0x80> <== NOT EXECUTED
{
printf (
3b018: e59f3164 ldr r3, [pc, #356] ; 3b184 <rtems_rfs_file_io_end+0x1b0><== NOT EXECUTED
3b01c: e59f2164 ldr r2, [pc, #356] ; 3b188 <rtems_rfs_file_io_end+0x1b4><== NOT EXECUTED
3b020: e3560000 cmp r6, #0 <== NOT EXECUTED
3b024: 11a06002 movne r6, r2 <== NOT EXECUTED
3b028: 01a06003 moveq r6, r3 <== NOT EXECUTED
3b02c: eb003960 bl 495b4 <strerror> <== NOT EXECUTED
3b030: e1a01006 mov r1, r6 <== NOT EXECUTED
3b034: e58d0000 str r0, [sp] <== NOT EXECUTED
3b038: e1a02007 mov r2, r7 <== NOT EXECUTED
3b03c: e1a03004 mov r3, r4 <== NOT EXECUTED
3b040: e59f0144 ldr r0, [pc, #324] ; 3b18c <rtems_rfs_file_io_end+0x1b8><== NOT EXECUTED
3b044: eb003147 bl 47568 <printf> <== NOT EXECUTED
handle->shared->size.offset =
rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle));
}
return rc;
}
3b048: e1a00004 mov r0, r4 <== NOT EXECUTED
3b04c: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3b050: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
* increase the block number and adjust the offset.
*
* If we are the last block and the position is past the current size update
* the size with the new length. The map holds the block count.
*/
handle->bpos.boff += size;
3b054: e5952014 ldr r2, [r5, #20] <== NOT EXECUTED
if (handle->bpos.boff >=
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))
3b058: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
* increase the block number and adjust the offset.
*
* If we are the last block and the position is past the current size update
* the size with the new length. The map holds the block count.
*/
handle->bpos.boff += size;
3b05c: e0877002 add r7, r7, r2 <== NOT EXECUTED
3b060: e5857014 str r7, [r5, #20] <== NOT EXECUTED
if (handle->bpos.boff >=
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))
3b064: e5932098 ldr r2, [r3, #152] ; 0x98 <== NOT EXECUTED
3b068: e5921008 ldr r1, [r2, #8] <== NOT EXECUTED
3b06c: e1570001 cmp r7, r1 <== NOT EXECUTED
3b070: 3a000005 bcc 3b08c <rtems_rfs_file_io_end+0xb8> <== NOT EXECUTED
{
handle->bpos.bno++;
3b074: e5951010 ldr r1, [r5, #16] <== NOT EXECUTED
3b078: e2811001 add r1, r1, #1 <== NOT EXECUTED
3b07c: e5851010 str r1, [r5, #16] <== NOT EXECUTED
handle->bpos.boff -= rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
3b080: e5922008 ldr r2, [r2, #8] <== NOT EXECUTED
3b084: e0627007 rsb r7, r2, r7 <== NOT EXECUTED
3b088: e5857014 str r7, [r5, #20] <== NOT EXECUTED
}
length = false;
mtime = false;
if (!read &&
3b08c: e3560000 cmp r6, #0 <== NOT EXECUTED
3b090: 0a000019 beq 3b0fc <rtems_rfs_file_io_end+0x128> <== NOT EXECUTED
3b094: e3a08000 mov r8, #0 <== NOT EXECUTED
3b098: e1a07008 mov r7, r8 <== NOT EXECUTED
handle->bpos.boff);
length = true;
mtime = true;
}
atime = rtems_rfs_file_update_atime (handle);
3b09c: e595a000 ldr sl, [r5] <== NOT EXECUTED
mtime = rtems_rfs_file_update_mtime (handle) && mtime;
3b0a0: e31a0002 tst sl, #2 <== NOT EXECUTED
3b0a4: 13a07000 movne r7, #0 <== NOT EXECUTED
length = rtems_rfs_file_update_length (handle) && length;
3b0a8: e31a0004 tst sl, #4 <== NOT EXECUTED
handle->bpos.boff);
length = true;
mtime = true;
}
atime = rtems_rfs_file_update_atime (handle);
3b0ac: e22aa001 eor sl, sl, #1 <== NOT EXECUTED
mtime = rtems_rfs_file_update_mtime (handle) && mtime;
length = rtems_rfs_file_update_length (handle) && length;
3b0b0: 13a08000 movne r8, #0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: end: pos=%" PRIu32 ":%" PRIu32 " %c %c %c\n",
handle->bpos.bno, handle->bpos.boff,
atime ? 'A' : '-', mtime ? 'M' : '-', length ? 'L' : '-');
if (atime || mtime)
3b0b4: e21aa001 ands sl, sl, #1 <== NOT EXECUTED
3b0b8: 1a000001 bne 3b0c4 <rtems_rfs_file_io_end+0xf0> <== NOT EXECUTED
3b0bc: e3570000 cmp r7, #0 <== NOT EXECUTED
3b0c0: 0a000006 beq 3b0e0 <rtems_rfs_file_io_end+0x10c> <== NOT EXECUTED
{
time_t now = time (NULL);
3b0c4: e3a00000 mov r0, #0 <== NOT EXECUTED
3b0c8: eb004f3a bl 4edb8 <time> <== NOT EXECUTED
if (read && atime)
3b0cc: e3560000 cmp r6, #0 <== NOT EXECUTED
3b0d0: 0a000017 beq 3b134 <rtems_rfs_file_io_end+0x160> <== NOT EXECUTED
3b0d4: e35a0000 cmp sl, #0 <== NOT EXECUTED
handle->shared->atime = now;
3b0d8: 1595301c ldrne r3, [r5, #28] <== NOT EXECUTED
3b0dc: 1583008c strne r0, [r3, #140] ; 0x8c <== NOT EXECUTED
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
3b0e0: e3580000 cmp r8, #0 <== NOT EXECUTED
{
handle->shared->size.count =
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
3b0e4: 1595301c ldrne r3, [r5, #28] <== NOT EXECUTED
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
{
handle->shared->size.count =
3b0e8: 1593203c ldrne r2, [r3, #60] ; 0x3c <== NOT EXECUTED
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
handle->shared->size.offset =
3b0ec: 15931040 ldrne r1, [r3, #64] ; 0x40 <== NOT EXECUTED
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
{
handle->shared->size.count =
3b0f0: 15832084 strne r2, [r3, #132] ; 0x84 <== NOT EXECUTED
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
handle->shared->size.offset =
3b0f4: 15831088 strne r1, [r3, #136] ; 0x88 <== NOT EXECUTED
3b0f8: eaffffd2 b 3b048 <rtems_rfs_file_io_end+0x74> <== NOT EXECUTED
length = false;
mtime = false;
if (!read &&
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
3b0fc: e5952010 ldr r2, [r5, #16] <== NOT EXECUTED
}
length = false;
mtime = false;
if (!read &&
3b100: e3520000 cmp r2, #0 <== NOT EXECUTED
3b104: 0593103c ldreq r1, [r3, #60] ; 0x3c <== NOT EXECUTED
3b108: 0a000013 beq 3b15c <rtems_rfs_file_io_end+0x188> <== NOT EXECUTED
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
3b10c: e593103c ldr r1, [r3, #60] ; 0x3c <== NOT EXECUTED
}
length = false;
mtime = false;
if (!read &&
3b110: e3510000 cmp r1, #0 <== NOT EXECUTED
3b114: 1a000010 bne 3b15c <rtems_rfs_file_io_end+0x188> <== NOT EXECUTED
3b118: e5951014 ldr r1, [r5, #20] <== NOT EXECUTED
3b11c: e3a02001 mov r2, #1 <== NOT EXECUTED
3b120: e1a08002 mov r8, r2 <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
3b124: e5831040 str r1, [r3, #64] ; 0x40 <== NOT EXECUTED
map->dirty = true;
3b128: e5c32034 strb r2, [r3, #52] ; 0x34 <== NOT EXECUTED
3b12c: e1a07002 mov r7, r2 <== NOT EXECUTED
3b130: eaffffd9 b 3b09c <rtems_rfs_file_io_end+0xc8> <== NOT EXECUTED
if (atime || mtime)
{
time_t now = time (NULL);
if (read && atime)
handle->shared->atime = now;
if (!read && mtime)
3b134: e3570000 cmp r7, #0 <== NOT EXECUTED
handle->shared->mtime = now;
3b138: 1595301c ldrne r3, [r5, #28] <== NOT EXECUTED
3b13c: 15830090 strne r0, [r3, #144] ; 0x90 <== NOT EXECUTED
}
if (length)
3b140: e3580000 cmp r8, #0 <== NOT EXECUTED
{
handle->shared->size.count =
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
3b144: 1595301c ldrne r3, [r5, #28] <== NOT EXECUTED
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
{
handle->shared->size.count =
3b148: 1593203c ldrne r2, [r3, #60] ; 0x3c <== NOT EXECUTED
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
handle->shared->size.offset =
3b14c: 15931040 ldrne r1, [r3, #64] ; 0x40 <== NOT EXECUTED
if (!read && mtime)
handle->shared->mtime = now;
}
if (length)
{
handle->shared->size.count =
3b150: 15832084 strne r2, [r3, #132] ; 0x84 <== NOT EXECUTED
rtems_rfs_block_map_count (rtems_rfs_file_map (handle));
handle->shared->size.offset =
3b154: 15831088 strne r1, [r3, #136] ; 0x88 <== NOT EXECUTED
3b158: eaffffba b 3b048 <rtems_rfs_file_io_end+0x74> <== NOT EXECUTED
}
length = false;
mtime = false;
if (!read &&
3b15c: e1520001 cmp r2, r1 <== NOT EXECUTED
3b160: 2affffec bcs 3b118 <rtems_rfs_file_io_end+0x144> <== NOT EXECUTED
3b164: e2411001 sub r1, r1, #1 <== NOT EXECUTED
3b168: e1520001 cmp r2, r1 <== NOT EXECUTED
3b16c: 1affffc8 bne 3b094 <rtems_rfs_file_io_end+0xc0> <== NOT EXECUTED
rtems_rfs_block_map_past_end (rtems_rfs_file_map (handle),
3b170: e5951014 ldr r1, [r5, #20] <== NOT EXECUTED
}
length = false;
mtime = false;
if (!read &&
3b174: e5932040 ldr r2, [r3, #64] ; 0x40 <== NOT EXECUTED
3b178: e1510002 cmp r1, r2 <== NOT EXECUTED
3b17c: 9affffc4 bls 3b094 <rtems_rfs_file_io_end+0xc0> <== NOT EXECUTED
3b180: eaffffe5 b 3b11c <rtems_rfs_file_io_end+0x148> <== NOT EXECUTED
0003abc0 <rtems_rfs_file_io_release>:
int
rtems_rfs_file_io_release (rtems_rfs_file_handle* handle)
{
int rc = 0;
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
3abc0: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
3abc4: e3530000 cmp r3, #0 <== NOT EXECUTED
3abc8: 0a000003 beq 3abdc <rtems_rfs_file_io_release+0x1c> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
3abcc: e590301c ldr r3, [r0, #28] <== NOT EXECUTED
3abd0: e2801004 add r1, r0, #4 <== NOT EXECUTED
3abd4: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3abd8: eafffb53 b 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_file_buffer (handle));
return rc;
}
3abdc: e1a00003 mov r0, r3 <== NOT EXECUTED
3abe0: e12fff1e bx lr <== NOT EXECUTED
0003aa5c <rtems_rfs_file_io_start>:
int
rtems_rfs_file_io_start (rtems_rfs_file_handle* handle,
size_t* available,
bool read)
{
3aa5c: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: %s pos=%" PRIu32 ":%" PRIu32 "\n",
read ? "read" : "write", handle->bpos.bno, handle->bpos.boff);
if (!rtems_rfs_buffer_handle_has_block (&handle->buffer))
3aa60: e590600c ldr r6, [r0, #12] <== NOT EXECUTED
3aa64: e3560000 cmp r6, #0 <== NOT EXECUTED
int
rtems_rfs_file_io_start (rtems_rfs_file_handle* handle,
size_t* available,
bool read)
{
3aa68: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3aa6c: e1a04000 mov r4, r0 <== NOT EXECUTED
3aa70: e1a07001 mov r7, r1 <== NOT EXECUTED
3aa74: e20250ff and r5, r2, #255 ; 0xff <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: %s pos=%" PRIu32 ":%" PRIu32 "\n",
read ? "read" : "write", handle->bpos.bno, handle->bpos.boff);
if (!rtems_rfs_buffer_handle_has_block (&handle->buffer))
3aa78: 0a00001a beq 3aae8 <rtems_rfs_file_io_start+0x8c> <== NOT EXECUTED
block, request_read);
if (rc > 0)
return rc;
}
if (read
3aa7c: e3550000 cmp r5, #0 <== NOT EXECUTED
3aa80: 0594301c ldreq r3, [r4, #28] <== NOT EXECUTED
3aa84: 1a000007 bne 3aaa8 <rtems_rfs_file_io_start+0x4c> <== NOT EXECUTED
&& rtems_rfs_block_map_last (rtems_rfs_file_map (handle))
&& rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle)))
size = rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle));
else
size = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
3aa88: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
3aa8c: e5932008 ldr r2, [r3, #8] <== NOT EXECUTED
*available = size - rtems_rfs_file_block_offset (handle);
3aa90: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
3aa94: e0632002 rsb r2, r3, r2 <== NOT EXECUTED
3aa98: e5872000 str r2, [r7] <== NOT EXECUTED
3aa9c: e3a00000 mov r0, #0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: available=%zu (%zu)\n",
*available, size);
return 0;
}
3aaa0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3aaa4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
if (rc > 0)
return rc;
}
if (read
&& rtems_rfs_block_map_last (rtems_rfs_file_map (handle))
3aaa8: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3aaac: e5932044 ldr r2, [r3, #68] ; 0x44 <== NOT EXECUTED
block, request_read);
if (rc > 0)
return rc;
}
if (read
3aab0: e3520000 cmp r2, #0 <== NOT EXECUTED
3aab4: 1593103c ldrne r1, [r3, #60] ; 0x3c <== NOT EXECUTED
3aab8: 1a000006 bne 3aad8 <rtems_rfs_file_io_start+0x7c> <== NOT EXECUTED
&& rtems_rfs_block_map_last (rtems_rfs_file_map (handle))
3aabc: e593103c ldr r1, [r3, #60] ; 0x3c <== NOT EXECUTED
block, request_read);
if (rc > 0)
return rc;
}
if (read
3aac0: e3510000 cmp r1, #0 <== NOT EXECUTED
3aac4: 1a000003 bne 3aad8 <rtems_rfs_file_io_start+0x7c> <== NOT EXECUTED
&& rtems_rfs_block_map_last (rtems_rfs_file_map (handle))
&& rtems_rfs_block_map_size_offset (rtems_rfs_file_map (handle)))
3aac8: e5932040 ldr r2, [r3, #64] ; 0x40 <== NOT EXECUTED
block, request_read);
if (rc > 0)
return rc;
}
if (read
3aacc: e3520000 cmp r2, #0 <== NOT EXECUTED
3aad0: 1affffee bne 3aa90 <rtems_rfs_file_io_start+0x34> <== NOT EXECUTED
3aad4: eaffffeb b 3aa88 <rtems_rfs_file_io_start+0x2c> <== NOT EXECUTED
3aad8: e2411001 sub r1, r1, #1 <== NOT EXECUTED
3aadc: e1520001 cmp r2, r1 <== NOT EXECUTED
3aae0: 1affffe8 bne 3aa88 <rtems_rfs_file_io_start+0x2c> <== NOT EXECUTED
3aae4: eafffff7 b 3aac8 <rtems_rfs_file_io_start+0x6c> <== NOT EXECUTED
bool request_read;
int rc;
request_read = read;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
3aae8: e590301c ldr r3, [r0, #28] <== NOT EXECUTED
3aaec: e2842010 add r2, r4, #16 <== NOT EXECUTED
3aaf0: e2831034 add r1, r3, #52 ; 0x34 <== NOT EXECUTED
3aaf4: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3aaf8: e1a0300d mov r3, sp <== NOT EXECUTED
3aafc: ebfff79d bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
rtems_rfs_file_map (handle),
rtems_rfs_file_bpos (handle),
&block);
if (rc > 0)
3ab00: e3500000 cmp r0, #0 <== NOT EXECUTED
bool request_read;
int rc;
request_read = read;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
3ab04: e1a0800d mov r8, sp <== NOT EXECUTED
rtems_rfs_file_map (handle),
rtems_rfs_file_bpos (handle),
&block);
if (rc > 0)
3ab08: da000005 ble 3ab24 <rtems_rfs_file_io_start+0xc8> <== NOT EXECUTED
{
/*
* Has the read reached the EOF ?
*/
if (read && (rc == ENXIO))
3ab0c: e3550000 cmp r5, #0 <== NOT EXECUTED
3ab10: 0a00000e beq 3ab50 <rtems_rfs_file_io_start+0xf4> <== NOT EXECUTED
3ab14: e3500006 cmp r0, #6 <== NOT EXECUTED
{
*available = 0;
3ab18: 05876000 streq r6, [r7] <== NOT EXECUTED
3ab1c: 01a00006 moveq r0, r6 <== NOT EXECUTED
3ab20: eaffffde b 3aaa0 <rtems_rfs_file_io_start+0x44> <== NOT EXECUTED
/*
* If this is a write check if the write starts within a block or the
* amount of data is less than a block size. If it is read the block
* rather than getting a block to fill.
*/
if (!read &&
3ab24: e3550000 cmp r5, #0 <== NOT EXECUTED
3ab28: 0a000016 beq 3ab88 <rtems_rfs_file_io_start+0x12c> <== NOT EXECUTED
3ab2c: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ab30: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3ab34: e3a03001 mov r3, #1 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: block=%" PRIu32 " request-read=%s\n",
block, request_read ? "yes" : "no");
rc = rtems_rfs_buffer_handle_request (rtems_rfs_file_fs (handle),
3ab38: e2841004 add r1, r4, #4 <== NOT EXECUTED
3ab3c: e59d2000 ldr r2, [sp] <== NOT EXECUTED
3ab40: ebfffbc3 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
rtems_rfs_file_buffer (handle),
block, request_read);
if (rc > 0)
3ab44: e3500000 cmp r0, #0 <== NOT EXECUTED
3ab48: caffffd4 bgt 3aaa0 <rtems_rfs_file_io_start+0x44> <== NOT EXECUTED
3ab4c: eaffffca b 3aa7c <rtems_rfs_file_io_start+0x20> <== NOT EXECUTED
{
*available = 0;
return 0;
}
if (rc != ENXIO)
3ab50: e3500006 cmp r0, #6 <== NOT EXECUTED
3ab54: 1affffd1 bne 3aaa0 <rtems_rfs_file_io_start+0x44> <== NOT EXECUTED
return rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_IO))
printf ("rtems-rfs: file-io: start: grow\n");
rc = rtems_rfs_block_map_grow (rtems_rfs_file_fs (handle),
3ab58: e594201c ldr r2, [r4, #28] <== NOT EXECUTED
3ab5c: e1a0300d mov r3, sp <== NOT EXECUTED
3ab60: e2821034 add r1, r2, #52 ; 0x34 <== NOT EXECUTED
3ab64: e5920098 ldr r0, [r2, #152] ; 0x98 <== NOT EXECUTED
3ab68: e3a02001 mov r2, #1 <== NOT EXECUTED
3ab6c: ebfff937 bl 39050 <rtems_rfs_block_map_grow> <== NOT EXECUTED
rtems_rfs_file_map (handle),
1, &block);
if (rc > 0)
3ab70: e3500000 cmp r0, #0 <== NOT EXECUTED
3ab74: caffffc9 bgt 3aaa0 <rtems_rfs_file_io_start+0x44> <== NOT EXECUTED
3ab78: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ab7c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3ab80: e1a03005 mov r3, r5 <== NOT EXECUTED
3ab84: eaffffeb b 3ab38 <rtems_rfs_file_io_start+0xdc> <== NOT EXECUTED
* If this is a write check if the write starts within a block or the
* amount of data is less than a block size. If it is read the block
* rather than getting a block to fill.
*/
if (!read &&
(rtems_rfs_file_block_offset (handle) ||
3ab88: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
3ab8c: e3530000 cmp r3, #0 <== NOT EXECUTED
3ab90: 1594301c ldrne r3, [r4, #28] <== NOT EXECUTED
3ab94: 1a000006 bne 3abb4 <rtems_rfs_file_io_start+0x158> <== NOT EXECUTED
(*available < rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle)))))
3ab98: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ab9c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3aba0: e5971000 ldr r1, [r7] <== NOT EXECUTED
3aba4: e5902008 ldr r2, [r0, #8] <== NOT EXECUTED
3aba8: e1510002 cmp r1, r2 <== NOT EXECUTED
3abac: 21a03005 movcs r3, r5 <== NOT EXECUTED
3abb0: 2affffe0 bcs 3ab38 <rtems_rfs_file_io_start+0xdc> <== NOT EXECUTED
3abb4: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3abb8: e3a03001 mov r3, #1 <== NOT EXECUTED
3abbc: eaffffdd b 3ab38 <rtems_rfs_file_io_start+0xdc> <== NOT EXECUTED
0003b34c <rtems_rfs_file_open>:
int
rtems_rfs_file_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
uint32_t flags,
rtems_rfs_file_handle** file)
{
3b34c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
printf ("rtems-rfs: file-open: ino=%" PRId32 "\n", ino);
*file = NULL;
3b350: e3a04000 mov r4, #0 <== NOT EXECUTED
int
rtems_rfs_file_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
uint32_t flags,
rtems_rfs_file_handle** file)
{
3b354: e1a08000 mov r8, r0 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
printf ("rtems-rfs: file-open: ino=%" PRId32 "\n", ino);
*file = NULL;
3b358: e5834000 str r4, [r3] <== NOT EXECUTED
/*
* Allocate a new handle and initialise it. Do this before we deal with the
* shared node data so we do not have to be concerned with reference
* counting.
*/
handle = malloc (sizeof (rtems_rfs_file_handle));
3b35c: e3a00020 mov r0, #32 <== NOT EXECUTED
int
rtems_rfs_file_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
uint32_t flags,
rtems_rfs_file_handle** file)
{
3b360: e1a07003 mov r7, r3 <== NOT EXECUTED
3b364: e1a0a001 mov sl, r1 <== NOT EXECUTED
3b368: e1a09002 mov r9, r2 <== NOT EXECUTED
/*
* Allocate a new handle and initialise it. Do this before we deal with the
* shared node data so we do not have to be concerned with reference
* counting.
*/
handle = malloc (sizeof (rtems_rfs_file_handle));
3b36c: ebff3443 bl 8480 <malloc> <== NOT EXECUTED
if (!handle)
3b370: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3b374: 0a00002b beq 3b428 <rtems_rfs_file_open+0xdc> <== NOT EXECUTED
return ENOMEM;
memset (handle, 0, sizeof (rtems_rfs_file_handle));
3b378: e1a06005 mov r6, r5 <== NOT EXECUTED
3b37c: e4864004 str r4, [r6], #4 <== NOT EXECUTED
3b380: e2863008 add r3, r6, #8 <== NOT EXECUTED
3b384: e5854004 str r4, [r5, #4] <== NOT EXECUTED
3b388: e4834004 str r4, [r3], #4 <== NOT EXECUTED
3b38c: e4834004 str r4, [r3], #4 <== NOT EXECUTED
3b390: e4834004 str r4, [r3], #4 <== NOT EXECUTED
3b394: e4834004 str r4, [r3], #4 <== NOT EXECUTED
3b398: e5834000 str r4, [r3] <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_First(
Chain_Control *the_chain
)
{
return the_chain->first;
3b39c: e5983070 ldr r3, [r8, #112] ; 0x70 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Tail(
Chain_Control *the_chain
)
{
return (Chain_Node *) &the_chain->permanent_null;
3b3a0: e2881074 add r1, r8, #116 ; 0x74 <== NOT EXECUTED
rtems_rfs_file_get_shared (rtems_rfs_file_system* fs,
rtems_rfs_ino ino)
{
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
3b3a4: e1530001 cmp r3, r1 <== NOT EXECUTED
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3b3a8: e585400c str r4, [r5, #12] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
handle->bnum = 0;
3b3ac: e5854008 str r4, [r5, #8] <== NOT EXECUTED
3b3b0: 1a000003 bne 3b3c4 <rtems_rfs_file_open+0x78> <== NOT EXECUTED
3b3b4: ea00000f b 3b3f8 <rtems_rfs_file_open+0xac> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE Chain_Node *_Chain_Next(
Chain_Node *the_node
)
{
return the_node->next;
3b3b8: e5933000 ldr r3, [r3] <== NOT EXECUTED
3b3bc: e1530001 cmp r3, r1 <== NOT EXECUTED
3b3c0: 0a00000c beq 3b3f8 <rtems_rfs_file_open+0xac> <== NOT EXECUTED
{
rtems_rfs_file_shared* shared;
shared = (rtems_rfs_file_shared*) node;
if (shared->inode.ino == ino)
3b3c4: e5932014 ldr r2, [r3, #20] <== NOT EXECUTED
3b3c8: e15a0002 cmp sl, r2 <== NOT EXECUTED
rtems_chain_node* node;
node = rtems_chain_first (&fs->file_shares);
while (!rtems_chain_is_tail (&fs->file_shares, node))
{
rtems_rfs_file_shared* shared;
shared = (rtems_rfs_file_shared*) node;
3b3cc: e1a04003 mov r4, r3 <== NOT EXECUTED
if (shared->inode.ino == ino)
3b3d0: 1afffff8 bne 3b3b8 <rtems_rfs_file_open+0x6c> <== NOT EXECUTED
* the reference count and return the pointer to the data.
*/
shared = rtems_rfs_file_get_shared (fs, ino);
if (shared)
{
shared->references++;
3b3d4: e5932008 ldr r2, [r3, #8] <== NOT EXECUTED
3b3d8: e2822001 add r2, r2, #1 <== NOT EXECUTED
3b3dc: e5832008 str r2, [r3, #8] <== NOT EXECUTED
}
handle->flags = flags;
handle->shared = shared;
*file = handle;
3b3e0: e5875000 str r5, [r7] <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
printf ("rtems-rfs: file-open: ino=%" PRId32 " share created\n", ino);
}
handle->flags = flags;
3b3e4: e5859000 str r9, [r5] <== NOT EXECUTED
handle->shared = shared;
3b3e8: e585401c str r4, [r5, #28] <== NOT EXECUTED
*file = handle;
3b3ec: e3a0a000 mov sl, #0 <== NOT EXECUTED
return 0;
}
3b3f0: e1a0000a mov r0, sl <== NOT EXECUTED
3b3f4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
{
/*
* None exists so create. Copy in the shared parts of the inode we hold in
* memory.
*/
shared = malloc (sizeof (rtems_rfs_file_shared));
3b3f8: e3a0009c mov r0, #156 ; 0x9c <== NOT EXECUTED
3b3fc: ebff341f bl 8480 <malloc> <== NOT EXECUTED
if (!shared)
3b400: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3b404: 1a00000a bne 3b434 <rtems_rfs_file_open+0xe8> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3b408: e1a01006 mov r1, r6 <== NOT EXECUTED
3b40c: e1a00008 mov r0, r8 <== NOT EXECUTED
3b410: ebfff945 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3b414: e585400c str r4, [r5, #12] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3b418: e5c54004 strb r4, [r5, #4] <== NOT EXECUTED
handle->bnum = 0;
3b41c: e5854008 str r4, [r5, #8] <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
3b420: e1a00005 mov r0, r5 <== NOT EXECUTED
3b424: ebff3251 bl 7d70 <free> <== NOT EXECUTED
3b428: e3a0a00c mov sl, #12 <== NOT EXECUTED
handle->shared = shared;
*file = handle;
return 0;
}
3b42c: e1a0000a mov r0, sl <== NOT EXECUTED
3b430: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return ENOMEM;
}
memset (shared, 0, sizeof (rtems_rfs_file_shared));
3b434: e3a01000 mov r1, #0 <== NOT EXECUTED
3b438: e3a0209c mov r2, #156 ; 0x9c <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &shared->inode, true);
3b43c: e284b00c add fp, r4, #12 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return ENOMEM;
}
memset (shared, 0, sizeof (rtems_rfs_file_shared));
3b440: eb002c21 bl 464cc <memset> <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &shared->inode, true);
3b444: e1a0100a mov r1, sl <== NOT EXECUTED
3b448: e1a00008 mov r0, r8 <== NOT EXECUTED
3b44c: e1a0200b mov r2, fp <== NOT EXECUTED
3b450: e3a03001 mov r3, #1 <== NOT EXECUTED
3b454: eb000782 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3b458: e250a000 subs sl, r0, #0 <== NOT EXECUTED
3b45c: da00000b ble 3b490 <rtems_rfs_file_open+0x144> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
printf ("rtems-rfs: file-open: block map open failed: %d: %s\n",
rc, strerror (rc));
rtems_rfs_inode_close (fs, &shared->inode);
free (shared);
3b460: e1a00004 mov r0, r4 <== NOT EXECUTED
3b464: ebff3241 bl 7d70 <free> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3b468: e1a00008 mov r0, r8 <== NOT EXECUTED
3b46c: e1a01006 mov r1, r6 <== NOT EXECUTED
3b470: ebfff92d bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3b474: e3a03000 mov r3, #0 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3b478: e585300c str r3, [r5, #12] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3b47c: e5c53004 strb r3, [r5, #4] <== NOT EXECUTED
handle->bnum = 0;
3b480: e5853008 str r3, [r5, #8] <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
3b484: e1a00005 mov r0, r5 <== NOT EXECUTED
3b488: ebff3238 bl 7d70 <free> <== NOT EXECUTED
return rc;
3b48c: eaffffd7 b 3b3f0 <rtems_rfs_file_open+0xa4> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return rc;
}
rc = rtems_rfs_block_map_open (fs, &shared->inode, &shared->map);
3b490: e1a00008 mov r0, r8 <== NOT EXECUTED
3b494: e1a0100b mov r1, fp <== NOT EXECUTED
3b498: e2842034 add r2, r4, #52 ; 0x34 <== NOT EXECUTED
3b49c: ebfff857 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3b4a0: e250a000 subs sl, r0, #0 <== NOT EXECUTED
3b4a4: da000003 ble 3b4b8 <rtems_rfs_file_open+0x16c> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
printf ("rtems-rfs: file-open: block map open failed: %d: %s\n",
rc, strerror (rc));
rtems_rfs_inode_close (fs, &shared->inode);
3b4a8: e1a0100b mov r1, fp <== NOT EXECUTED
3b4ac: e1a00008 mov r0, r8 <== NOT EXECUTED
3b4b0: eb000747 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3b4b4: eaffffe9 b 3b460 <rtems_rfs_file_open+0x114> <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
3b4b8: e5943018 ldr r3, [r4, #24] <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle->buffer);
free (handle);
return rc;
}
shared->references = 1;
3b4bc: e3a02001 mov r2, #1 <== NOT EXECUTED
3b4c0: e5842008 str r2, [r4, #8] <== NOT EXECUTED
3b4c4: e283200c add r2, r3, #12 <== NOT EXECUTED
shared->size.count = rtems_rfs_inode_get_block_count (&shared->inode);
3b4c8: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
3b4cc: e5d3000c ldrb r0, [r3, #12] <== NOT EXECUTED
3b4d0: e5d2c001 ldrb ip, [r2, #1] <== NOT EXECUTED
3b4d4: e1810c00 orr r0, r1, r0, lsl #24 <== NOT EXECUTED
3b4d8: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
3b4dc: e180280c orr r2, r0, ip, lsl #16 <== NOT EXECUTED
3b4e0: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3b4e4: e5842084 str r2, [r4, #132] ; 0x84 <== NOT EXECUTED
shared->size.offset = rtems_rfs_inode_get_block_offset (&shared->inode);
3b4e8: e5d3100a ldrb r1, [r3, #10] <== NOT EXECUTED
3b4ec: e5d3200b ldrb r2, [r3, #11] <== NOT EXECUTED
3b4f0: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3b4f4: e5842088 str r2, [r4, #136] ; 0x88 <== NOT EXECUTED
* @return rtems_rfs_time The atime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_atime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->atime);
3b4f8: e2832010 add r2, r3, #16 <== NOT EXECUTED
shared->atime = rtems_rfs_inode_get_atime (&shared->inode);
3b4fc: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
3b500: e5d30010 ldrb r0, [r3, #16] <== NOT EXECUTED
3b504: e5d2c001 ldrb ip, [r2, #1] <== NOT EXECUTED
3b508: e1810c00 orr r0, r1, r0, lsl #24 <== NOT EXECUTED
3b50c: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
3b510: e180280c orr r2, r0, ip, lsl #16 <== NOT EXECUTED
3b514: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3b518: e584208c str r2, [r4, #140] ; 0x8c <== NOT EXECUTED
* @return rtems_rfs_time The mtime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_mtime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->mtime);
3b51c: e2832014 add r2, r3, #20 <== NOT EXECUTED
shared->mtime = rtems_rfs_inode_get_mtime (&shared->inode);
3b520: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
3b524: e5d30014 ldrb r0, [r3, #20] <== NOT EXECUTED
3b528: e5d2c001 ldrb ip, [r2, #1] <== NOT EXECUTED
3b52c: e1810c00 orr r0, r1, r0, lsl #24 <== NOT EXECUTED
3b530: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
3b534: e180280c orr r2, r0, ip, lsl #16 <== NOT EXECUTED
3b538: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3b53c: e5842090 str r2, [r4, #144] ; 0x90 <== NOT EXECUTED
* @return rtems_rfs_time The ctime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_ctime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->ctime);
3b540: e2832018 add r2, r3, #24 <== NOT EXECUTED
shared->ctime = rtems_rfs_inode_get_ctime (&shared->inode);
3b544: e5d30018 ldrb r0, [r3, #24] <== NOT EXECUTED
3b548: e5d23003 ldrb r3, [r2, #3] <== NOT EXECUTED
3b54c: e5d21001 ldrb r1, [r2, #1] <== NOT EXECUTED
3b550: e1833c00 orr r3, r3, r0, lsl #24 <== NOT EXECUTED
3b554: e5d22002 ldrb r2, [r2, #2] <== NOT EXECUTED
3b558: e1833801 orr r3, r3, r1, lsl #16 <== NOT EXECUTED
3b55c: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void rtems_chain_append(
rtems_chain_control *the_chain,
rtems_chain_node *the_node
)
{
_Chain_Append( the_chain, the_node );
3b560: e2880070 add r0, r8, #112 ; 0x70 <== NOT EXECUTED
3b564: e1a01004 mov r1, r4 <== NOT EXECUTED
3b568: e5843094 str r3, [r4, #148] ; 0x94 <== NOT EXECUTED
shared->fs = fs;
3b56c: e5848098 str r8, [r4, #152] ; 0x98 <== NOT EXECUTED
3b570: ebff46c3 bl d084 <_Chain_Append> <== NOT EXECUTED
rtems_chain_append (&fs->file_shares, &shared->link);
rtems_rfs_inode_unload (fs, &shared->inode, false);
3b574: e1a00008 mov r0, r8 <== NOT EXECUTED
3b578: e1a0100b mov r1, fp <== NOT EXECUTED
3b57c: e3a02000 mov r2, #0 <== NOT EXECUTED
3b580: eb0006e8 bl 3d128 <rtems_rfs_inode_unload> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_FILE_OPEN))
3b584: eaffff95 b 3b3e0 <rtems_rfs_file_open+0x94> <== NOT EXECUTED
0003af00 <rtems_rfs_file_seek>:
int
rtems_rfs_file_seek (rtems_rfs_file_handle* handle,
rtems_rfs_pos pos,
rtems_rfs_pos* new_pos)
{
3af00: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
3af04: e1a04000 mov r4, r0 <== NOT EXECUTED
* file, this function does not itself extend the size of the file."
*
* This means the file needs to set the file size to the pos only when a
* write occurs.
*/
if (pos < rtems_rfs_file_shared_get_size (rtems_rfs_file_fs (handle),
3af08: e590001c ldr r0, [r0, #28] <== NOT EXECUTED
int
rtems_rfs_file_seek (rtems_rfs_file_handle* handle,
rtems_rfs_pos pos,
rtems_rfs_pos* new_pos)
{
3af0c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3af10: e1a06001 mov r6, r1 <== NOT EXECUTED
3af14: e2801084 add r1, r0, #132 ; 0x84 <== NOT EXECUTED
3af18: e5900098 ldr r0, [r0, #152] ; 0x98 <== NOT EXECUTED
3af1c: e1a05002 mov r5, r2 <== NOT EXECUTED
3af20: e1a07003 mov r7, r3 <== NOT EXECUTED
3af24: ebfff664 bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
* file, this function does not itself extend the size of the file."
*
* This means the file needs to set the file size to the pos only when a
* write occurs.
*/
if (pos < rtems_rfs_file_shared_get_size (rtems_rfs_file_fs (handle),
3af28: e1510005 cmp r1, r5 <== NOT EXECUTED
3af2c: 8a000008 bhi 3af54 <rtems_rfs_file_seek+0x54> <== NOT EXECUTED
3af30: 0a000005 beq 3af4c <rtems_rfs_file_seek+0x4c> <== NOT EXECUTED
{
/*
* The seek is outside the current file so release any buffer. A write will
* extend the file.
*/
int rc = rtems_rfs_file_io_release (handle);
3af34: e1a00004 mov r0, r4 <== NOT EXECUTED
3af38: ebffff20 bl 3abc0 <rtems_rfs_file_io_release> <== NOT EXECUTED
if (rc > 0)
3af3c: e3500000 cmp r0, #0 <== NOT EXECUTED
3af40: da00001f ble 3afc4 <rtems_rfs_file_seek+0xc4> <== NOT EXECUTED
return rc;
}
*new_pos = pos;
return 0;
}
3af44: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3af48: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
* file, this function does not itself extend the size of the file."
*
* This means the file needs to set the file size to the pos only when a
* write occurs.
*/
if (pos < rtems_rfs_file_shared_get_size (rtems_rfs_file_fs (handle),
3af4c: e1500006 cmp r0, r6 <== NOT EXECUTED
3af50: 9afffff7 bls 3af34 <rtems_rfs_file_seek+0x34> <== NOT EXECUTED
handle->shared))
{
rtems_rfs_file_set_bpos (handle, pos);
3af54: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3af58: e2848010 add r8, r4, #16 <== NOT EXECUTED
3af5c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3af60: e1a01006 mov r1, r6 <== NOT EXECUTED
3af64: e1a03008 mov r3, r8 <== NOT EXECUTED
3af68: e1a02005 mov r2, r5 <== NOT EXECUTED
3af6c: ebfff623 bl 38800 <rtems_rfs_block_get_bpos> <== NOT EXECUTED
/*
* If the file has a block check if it maps to the current position and it
* does not release it. That will force us to get the block at the new
* position when the I/O starts.
*/
if (rtems_rfs_buffer_handle_has_block (&handle->buffer))
3af70: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3af74: e3530000 cmp r3, #0 <== NOT EXECUTED
3af78: 0a000011 beq 3afc4 <rtems_rfs_file_seek+0xc4> <== NOT EXECUTED
{
rtems_rfs_buffer_block block;
int rc;
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
3af7c: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3af80: e1a02008 mov r2, r8 <== NOT EXECUTED
3af84: e2831034 add r1, r3, #52 ; 0x34 <== NOT EXECUTED
3af88: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3af8c: e1a0300d mov r3, sp <== NOT EXECUTED
3af90: ebfff678 bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
rtems_rfs_file_map (handle),
rtems_rfs_file_bpos (handle),
&block);
if (rc > 0)
3af94: e3500000 cmp r0, #0 <== NOT EXECUTED
3af98: caffffe9 bgt 3af44 <rtems_rfs_file_seek+0x44> <== NOT EXECUTED
return rc;
if (rtems_rfs_buffer_bnum (&handle->buffer) != block)
3af9c: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
3afa0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3afa4: e1520003 cmp r2, r3 <== NOT EXECUTED
3afa8: 0a000005 beq 3afc4 <rtems_rfs_file_seek+0xc4> <== NOT EXECUTED
{
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
3afac: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3afb0: e2841004 add r1, r4, #4 <== NOT EXECUTED
3afb4: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3afb8: ebfffa5b bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_file_buffer (handle));
if (rc > 0)
3afbc: e3500000 cmp r0, #0 <== NOT EXECUTED
3afc0: caffffdf bgt 3af44 <rtems_rfs_file_seek+0x44> <== NOT EXECUTED
int rc = rtems_rfs_file_io_release (handle);
if (rc > 0)
return rc;
}
*new_pos = pos;
3afc4: e5875004 str r5, [r7, #4] <== NOT EXECUTED
3afc8: e5876000 str r6, [r7] <== NOT EXECUTED
3afcc: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
3afd0: eaffffdb b 3af44 <rtems_rfs_file_seek+0x44> <== NOT EXECUTED
0003abe4 <rtems_rfs_file_set_size>:
}
int
rtems_rfs_file_set_size (rtems_rfs_file_handle* handle,
rtems_rfs_pos new_size)
{
3abe4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_block_map* map = rtems_rfs_file_map (handle);
3abe8: e590501c ldr r5, [r0, #28] <== NOT EXECUTED
}
int
rtems_rfs_file_set_size (rtems_rfs_file_handle* handle,
rtems_rfs_pos new_size)
{
3abec: e1a0a001 mov sl, r1 <== NOT EXECUTED
3abf0: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
3abf4: e1a04000 mov r4, r0 <== NOT EXECUTED
3abf8: e2851084 add r1, r5, #132 ; 0x84 <== NOT EXECUTED
3abfc: e5950098 ldr r0, [r5, #152] ; 0x98 <== NOT EXECUTED
3ac00: e1a0b002 mov fp, r2 <== NOT EXECUTED
3ac04: ebfff72c bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
/*
* If the file is same size do nothing else grow or shrink it ?
*
* If the file does not change size do not update the times.
*/
if (size != new_size)
3ac08: e15a0000 cmp sl, r0 <== NOT EXECUTED
3ac0c: 0a0000ab beq 3aec0 <rtems_rfs_file_set_size+0x2dc> <== NOT EXECUTED
{
/*
* Short cut for the common truncate on open call.
*/
if (new_size == 0)
3ac10: e19a200b orrs r2, sl, fp <== NOT EXECUTED
int
rtems_rfs_file_set_size (rtems_rfs_file_handle* handle,
rtems_rfs_pos new_size)
{
rtems_rfs_block_map* map = rtems_rfs_file_map (handle);
3ac14: e2859034 add r9, r5, #52 ; 0x34 <== NOT EXECUTED
if (size != new_size)
{
/*
* Short cut for the common truncate on open call.
*/
if (new_size == 0)
3ac18: 0a000083 beq 3ae2c <rtems_rfs_file_set_size+0x248> <== NOT EXECUTED
if (rc > 0)
return rc;
}
else
{
if (size < new_size)
3ac1c: e15b0001 cmp fp, r1 <== NOT EXECUTED
3ac20: 9a000054 bls 3ad78 <rtems_rfs_file_set_size+0x194> <== NOT EXECUTED
rtems_rfs_pos count;
uint32_t length;
bool read_block;
count = new_size - size;
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
3ac24: e594c01c ldr ip, [r4, #28] <== NOT EXECUTED
*/
rtems_rfs_pos count;
uint32_t length;
bool read_block;
count = new_size - size;
3ac28: e1a0700a mov r7, sl <== NOT EXECUTED
3ac2c: e1a0800b mov r8, fp <== NOT EXECUTED
3ac30: e0577000 subs r7, r7, r0 <== NOT EXECUTED
3ac34: e0c88001 sbc r8, r8, r1 <== NOT EXECUTED
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
3ac38: e59c0098 ldr r0, [ip, #152] ; 0x98 <== NOT EXECUTED
read_block = false;
while (count)
3ac3c: e1973008 orrs r3, r7, r8 <== NOT EXECUTED
rtems_rfs_pos count;
uint32_t length;
bool read_block;
count = new_size - size;
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
3ac40: e5906008 ldr r6, [r0, #8] <== NOT EXECUTED
read_block = false;
while (count)
3ac44: 0a00009b beq 3aeb8 <rtems_rfs_file_set_size+0x2d4> <== NOT EXECUTED
}
/*
* Only read the block if the length is not the block size.
*/
rc = rtems_rfs_buffer_handle_request (rtems_rfs_file_fs (handle),
3ac48: e3a02000 mov r2, #0 <== NOT EXECUTED
3ac4c: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
3ac50: e284b004 add fp, r4, #4 <== NOT EXECUTED
/*
* Get the block position for the current end of the file as seen by
* the map. If not found and the EOF grow the map then fill the block
* with 0.
*/
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map), &bpos);
3ac54: e1a0a002 mov sl, r2 <== NOT EXECUTED
3ac58: ea000025 b 3acf4 <rtems_rfs_file_set_size+0x110> <== NOT EXECUTED
map, 1, &block);
if (rc > 0)
return rc;
}
if (count < (length - bpos.boff))
3ac5c: e1520007 cmp r2, r7 <== NOT EXECUTED
3ac60: 9a00003f bls 3ad64 <rtems_rfs_file_set_size+0x180> <== NOT EXECUTED
{
length = count + bpos.boff;
3ac64: e0836007 add r6, r3, r7 <== NOT EXECUTED
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
map->dirty = true;
3ac68: e3a02001 mov r2, #1 <== NOT EXECUTED
3ac6c: e3a03001 mov r3, #1 <== NOT EXECUTED
3ac70: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
3ac74: e5856040 str r6, [r5, #64] ; 0x40 <== NOT EXECUTED
map->dirty = true;
3ac78: e5c52034 strb r2, [r5, #52] ; 0x34 <== NOT EXECUTED
}
/*
* Only read the block if the length is not the block size.
*/
rc = rtems_rfs_buffer_handle_request (rtems_rfs_file_fs (handle),
3ac7c: e594201c ldr r2, [r4, #28] <== NOT EXECUTED
3ac80: e1a0100b mov r1, fp <== NOT EXECUTED
3ac84: e5920098 ldr r0, [r2, #152] ; 0x98 <== NOT EXECUTED
3ac88: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
3ac8c: ebfffb70 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
rtems_rfs_file_buffer (handle),
block, read_block);
if (rc > 0)
3ac90: e3500000 cmp r0, #0 <== NOT EXECUTED
3ac94: ca000062 bgt 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
return rc;
dst = rtems_rfs_buffer_data (&handle->buffer);
memset (dst + bpos.boff, 0, length - bpos.boff);
3ac98: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3ac9c: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
3aca0: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
3aca4: e3a01000 mov r1, #0 <== NOT EXECUTED
3aca8: e0632006 rsb r2, r3, r6 <== NOT EXECUTED
3acac: e0800003 add r0, r0, r3 <== NOT EXECUTED
3acb0: eb002e05 bl 464cc <memset> <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (rtems_rfs_file_buffer (handle));
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
3acb4: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
return rc;
dst = rtems_rfs_buffer_data (&handle->buffer);
memset (dst + bpos.boff, 0, length - bpos.boff);
rtems_rfs_buffer_mark_dirty (rtems_rfs_file_buffer (handle));
3acb8: e3a02001 mov r2, #1 <== NOT EXECUTED
3acbc: e5c42004 strb r2, [r4, #4] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_release (rtems_rfs_file_fs (handle),
3acc0: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3acc4: e1a0100b mov r1, fp <== NOT EXECUTED
3acc8: ebfffb17 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_file_buffer (handle));
if (rc > 0)
3accc: e3500000 cmp r0, #0 <== NOT EXECUTED
3acd0: ca000053 bgt 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
return rc;
count -= length - bpos.boff;
3acd4: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
3acd8: e0633006 rsb r3, r3, r6 <== NOT EXECUTED
3acdc: e0577003 subs r7, r7, r3 <== NOT EXECUTED
3ace0: e2c88000 sbc r8, r8, #0 <== NOT EXECUTED
count = new_size - size;
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
read_block = false;
while (count)
3ace4: e1973008 orrs r3, r7, r8 <== NOT EXECUTED
3ace8: 0a000055 beq 3ae44 <rtems_rfs_file_set_size+0x260> <== NOT EXECUTED
3acec: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3acf0: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
/*
* Get the block position for the current end of the file as seen by
* the map. If not found and the EOF grow the map then fill the block
* with 0.
*/
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map), &bpos);
3acf4: e595203c ldr r2, [r5, #60] ; 0x3c <== NOT EXECUTED
3acf8: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
3acfc: e5953040 ldr r3, [r5, #64] ; 0x40 <== NOT EXECUTED
3ad00: e3530000 cmp r3, #0 <== NOT EXECUTED
3ad04: 12422001 subne r2, r2, #1 <== NOT EXECUTED
3ad08: 158d2008 strne r2, [sp, #8] <== NOT EXECUTED
3ad0c: e58d300c str r3, [sp, #12] <== NOT EXECUTED
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
3ad10: e1a01009 mov r1, r9 <== NOT EXECUTED
3ad14: e28d2008 add r2, sp, #8 <== NOT EXECUTED
3ad18: e28d3014 add r3, sp, #20 <== NOT EXECUTED
/*
* Get the block position for the current end of the file as seen by
* the map. If not found and the EOF grow the map then fill the block
* with 0.
*/
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map), &bpos);
3ad1c: e58da010 str sl, [sp, #16] <== NOT EXECUTED
rc = rtems_rfs_block_map_find (rtems_rfs_file_fs (handle),
3ad20: ebfff714 bl 38978 <rtems_rfs_block_map_find> <== NOT EXECUTED
map, &bpos, &block);
if (rc > 0)
3ad24: e3500000 cmp r0, #0 <== NOT EXECUTED
3ad28: da000009 ble 3ad54 <rtems_rfs_file_set_size+0x170> <== NOT EXECUTED
{
/*
* Have we reached the EOF ?
*/
if (rc != ENXIO)
3ad2c: e3500006 cmp r0, #6 <== NOT EXECUTED
3ad30: 1a00003b bne 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
return rc;
rc = rtems_rfs_block_map_grow (rtems_rfs_file_fs (handle),
3ad34: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ad38: e1a01009 mov r1, r9 <== NOT EXECUTED
3ad3c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3ad40: e3a02001 mov r2, #1 <== NOT EXECUTED
3ad44: e28d3014 add r3, sp, #20 <== NOT EXECUTED
3ad48: ebfff8c0 bl 39050 <rtems_rfs_block_map_grow> <== NOT EXECUTED
map, 1, &block);
if (rc > 0)
3ad4c: e3500000 cmp r0, #0 <== NOT EXECUTED
3ad50: ca000033 bgt 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
return rc;
}
if (count < (length - bpos.boff))
3ad54: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
3ad58: e15a0008 cmp sl, r8 <== NOT EXECUTED
3ad5c: e0632006 rsb r2, r3, r6 <== NOT EXECUTED
3ad60: 0affffbd beq 3ac5c <rtems_rfs_file_set_size+0x78> <== NOT EXECUTED
3ad64: e3a03001 mov r3, #1 <== NOT EXECUTED
3ad68: e5c53034 strb r3, [r5, #52] ; 0x34 <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
3ad6c: e585a040 str sl, [r5, #64] ; 0x40 <== NOT EXECUTED
map->dirty = true;
3ad70: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
3ad74: eaffffc0 b 3ac7c <rtems_rfs_file_set_size+0x98> <== NOT EXECUTED
if (rc > 0)
return rc;
}
else
{
if (size < new_size)
3ad78: 0a000040 beq 3ae80 <rtems_rfs_file_set_size+0x29c> <== NOT EXECUTED
uint32_t offset;
blocks =
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle))) + 1);
3ad7c: e594c01c ldr ip, [r4, #28] <== NOT EXECUTED
3ad80: e59c9098 ldr r9, [ip, #152] ; 0x98 <== NOT EXECUTED
* Shrink
*/
rtems_rfs_block_no blocks;
uint32_t offset;
blocks =
3ad84: e3e00000 mvn r0, #0 <== NOT EXECUTED
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
3ad88: e5997008 ldr r7, [r9, #8] <== NOT EXECUTED
* Shrink
*/
rtems_rfs_block_no blocks;
uint32_t offset;
blocks =
3ad8c: e090000a adds r0, r0, sl <== NOT EXECUTED
3ad90: e3e01000 mvn r1, #0 <== NOT EXECUTED
3ad94: e0a1100b adc r1, r1, fp <== NOT EXECUTED
3ad98: e1a02007 mov r2, r7 <== NOT EXECUTED
3ad9c: e3a03000 mov r3, #0 <== NOT EXECUTED
3ada0: e58dc000 str ip, [sp] <== NOT EXECUTED
3ada4: eb00845b bl 5bf18 <__udivdi3> <== NOT EXECUTED
3ada8: e595603c ldr r6, [r5, #60] ; 0x3c <== NOT EXECUTED
3adac: e1e02000 mvn r2, r0 <== NOT EXECUTED
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle))) + 1);
offset =
new_size % rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
if (blocks)
3adb0: e0922006 adds r2, r2, r6 <== NOT EXECUTED
3adb4: e59dc000 ldr ip, [sp] <== NOT EXECUTED
3adb8: 1a000044 bne 3aed0 <rtems_rfs_file_set_size+0x2ec> <== NOT EXECUTED
blocks =
rtems_rfs_block_map_count (map) -
(((new_size - 1) /
rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle))) + 1);
offset =
3adbc: e1a02007 mov r2, r7 <== NOT EXECUTED
3adc0: e3a03000 mov r3, #0 <== NOT EXECUTED
3adc4: e1a0000a mov r0, sl <== NOT EXECUTED
3adc8: e1a0100b mov r1, fp <== NOT EXECUTED
3adcc: e58dc000 str ip, [sp] <== NOT EXECUTED
3add0: eb008561 bl 5c35c <__umoddi3> <== NOT EXECUTED
*/
static inline void
rtems_rfs_block_map_set_size_offset (rtems_rfs_block_map* map,
rtems_rfs_block_off offset)
{
map->size.offset = offset;
3add4: e5850040 str r0, [r5, #64] ; 0x40 <== NOT EXECUTED
return rc;
}
rtems_rfs_block_map_set_size_offset (map, offset);
if (rtems_rfs_block_pos_past_end (rtems_rfs_file_bpos (handle),
3add8: e5942010 ldr r2, [r4, #16] <== NOT EXECUTED
map->dirty = true;
3addc: e3a03001 mov r3, #1 <== NOT EXECUTED
3ade0: e3520000 cmp r2, #0 <== NOT EXECUTED
3ade4: e5c53034 strb r3, [r5, #52] ; 0x34 <== NOT EXECUTED
3ade8: e59dc000 ldr ip, [sp] <== NOT EXECUTED
3adec: 01a03006 moveq r3, r6 <== NOT EXECUTED
3adf0: 1a000025 bne 3ae8c <rtems_rfs_file_set_size+0x2a8> <== NOT EXECUTED
3adf4: e1560002 cmp r6, r2 <== NOT EXECUTED
3adf8: 9a000026 bls 3ae98 <rtems_rfs_file_set_size+0x2b4> <== NOT EXECUTED
3adfc: e2461001 sub r1, r6, #1 <== NOT EXECUTED
3ae00: e1520001 cmp r2, r1 <== NOT EXECUTED
3ae04: 0a000039 beq 3aef0 <rtems_rfs_file_set_size+0x30c> <== NOT EXECUTED
rtems_rfs_file_bpos (handle));
}
}
handle->shared->size.count = rtems_rfs_block_map_count (map);
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
3ae08: e5952040 ldr r2, [r5, #64] ; 0x40 <== NOT EXECUTED
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map),
rtems_rfs_file_bpos (handle));
}
}
handle->shared->size.count = rtems_rfs_block_map_count (map);
3ae0c: e58c3084 str r3, [ip, #132] ; 0x84 <== NOT EXECUTED
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
3ae10: e58c2088 str r2, [ip, #136] ; 0x88 <== NOT EXECUTED
if (rtems_rfs_file_update_mtime (handle))
3ae14: e5944000 ldr r4, [r4] <== NOT EXECUTED
3ae18: e2144002 ands r4, r4, #2 <== NOT EXECUTED
3ae1c: 0a000010 beq 3ae64 <rtems_rfs_file_set_size+0x280> <== NOT EXECUTED
handle->shared->mtime = time (NULL);
3ae20: e3a00000 mov r0, #0 <== NOT EXECUTED
}
return 0;
}
3ae24: e28dd018 add sp, sp, #24 <== NOT EXECUTED
3ae28: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/*
* Short cut for the common truncate on open call.
*/
if (new_size == 0)
{
rc = rtems_rfs_block_map_free_all (rtems_rfs_file_fs (handle), map);
3ae2c: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ae30: e1a01009 mov r1, r9 <== NOT EXECUTED
3ae34: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3ae38: ebfff836 bl 38f18 <rtems_rfs_block_map_free_all> <== NOT EXECUTED
if (rc > 0)
3ae3c: e3500000 cmp r0, #0 <== NOT EXECUTED
3ae40: cafffff7 bgt 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
count = new_size - size;
length = rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
read_block = false;
while (count)
3ae44: e594c01c ldr ip, [r4, #28] <== NOT EXECUTED
3ae48: e595303c ldr r3, [r5, #60] ; 0x3c <== NOT EXECUTED
rtems_rfs_file_bpos (handle));
}
}
handle->shared->size.count = rtems_rfs_block_map_count (map);
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
3ae4c: e5952040 ldr r2, [r5, #64] ; 0x40 <== NOT EXECUTED
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map),
rtems_rfs_file_bpos (handle));
}
}
handle->shared->size.count = rtems_rfs_block_map_count (map);
3ae50: e58c3084 str r3, [ip, #132] ; 0x84 <== NOT EXECUTED
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
3ae54: e58c2088 str r2, [ip, #136] ; 0x88 <== NOT EXECUTED
if (rtems_rfs_file_update_mtime (handle))
3ae58: e5944000 ldr r4, [r4] <== NOT EXECUTED
3ae5c: e2144002 ands r4, r4, #2 <== NOT EXECUTED
3ae60: 1affffee bne 3ae20 <rtems_rfs_file_set_size+0x23c> <== NOT EXECUTED
handle->shared->mtime = time (NULL);
3ae64: e1a00004 mov r0, r4 <== NOT EXECUTED
3ae68: e58dc000 str ip, [sp] <== NOT EXECUTED
3ae6c: eb004fd1 bl 4edb8 <time> <== NOT EXECUTED
3ae70: e59dc000 ldr ip, [sp] <== NOT EXECUTED
3ae74: e58c0090 str r0, [ip, #144] ; 0x90 <== NOT EXECUTED
3ae78: e1a00004 mov r0, r4 <== NOT EXECUTED
3ae7c: eaffffe8 b 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
if (rc > 0)
return rc;
}
else
{
if (size < new_size)
3ae80: e15a0000 cmp sl, r0 <== NOT EXECUTED
3ae84: 9affffbc bls 3ad7c <rtems_rfs_file_set_size+0x198> <== NOT EXECUTED
3ae88: eaffff65 b 3ac24 <rtems_rfs_file_set_size+0x40> <== NOT EXECUTED
return rc;
}
rtems_rfs_block_map_set_size_offset (map, offset);
if (rtems_rfs_block_pos_past_end (rtems_rfs_file_bpos (handle),
3ae8c: e3560000 cmp r6, #0 <== NOT EXECUTED
3ae90: e1a03006 mov r3, r6 <== NOT EXECUTED
3ae94: 1affffd6 bne 3adf4 <rtems_rfs_file_set_size+0x210> <== NOT EXECUTED
rtems_rfs_block_map_size (map)))
rtems_rfs_block_size_get_bpos (rtems_rfs_block_map_size (map),
3ae98: e5846010 str r6, [r4, #16] <== NOT EXECUTED
3ae9c: e5953040 ldr r3, [r5, #64] ; 0x40 <== NOT EXECUTED
3aea0: e3530000 cmp r3, #0 <== NOT EXECUTED
3aea4: e3a02000 mov r2, #0 <== NOT EXECUTED
3aea8: 12466001 subne r6, r6, #1 <== NOT EXECUTED
3aeac: e5842018 str r2, [r4, #24] <== NOT EXECUTED
3aeb0: e5843014 str r3, [r4, #20] <== NOT EXECUTED
3aeb4: 15846010 strne r6, [r4, #16] <== NOT EXECUTED
3aeb8: e595303c ldr r3, [r5, #60] ; 0x3c <== NOT EXECUTED
3aebc: eaffffd1 b 3ae08 <rtems_rfs_file_set_size+0x224> <== NOT EXECUTED
/*
* If the file is same size do nothing else grow or shrink it ?
*
* If the file does not change size do not update the times.
*/
if (size != new_size)
3aec0: e15b0001 cmp fp, r1 <== NOT EXECUTED
3aec4: 1affff51 bne 3ac10 <rtems_rfs_file_set_size+0x2c> <== NOT EXECUTED
handle->shared->size.count = rtems_rfs_block_map_count (map);
handle->shared->size.offset = rtems_rfs_block_map_size_offset (map);
if (rtems_rfs_file_update_mtime (handle))
handle->shared->mtime = time (NULL);
3aec8: e3a00000 mov r0, #0 <== NOT EXECUTED
3aecc: eaffffd4 b 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
new_size % rtems_rfs_fs_block_size (rtems_rfs_file_fs (handle));
if (blocks)
{
int rc;
rc = rtems_rfs_block_map_shrink (rtems_rfs_file_fs (handle),
3aed0: e1a00009 mov r0, r9 <== NOT EXECUTED
3aed4: e28c1034 add r1, ip, #52 ; 0x34 <== NOT EXECUTED
3aed8: ebfff756 bl 38c38 <rtems_rfs_block_map_shrink> <== NOT EXECUTED
rtems_rfs_file_map (handle),
blocks);
if (rc > 0)
3aedc: e3500000 cmp r0, #0 <== NOT EXECUTED
3aee0: caffffcf bgt 3ae24 <rtems_rfs_file_set_size+0x240> <== NOT EXECUTED
3aee4: e594c01c ldr ip, [r4, #28] <== NOT EXECUTED
3aee8: e595603c ldr r6, [r5, #60] ; 0x3c <== NOT EXECUTED
3aeec: eaffffb2 b 3adbc <rtems_rfs_file_set_size+0x1d8> <== NOT EXECUTED
return rc;
}
rtems_rfs_block_map_set_size_offset (map, offset);
if (rtems_rfs_block_pos_past_end (rtems_rfs_file_bpos (handle),
3aef0: e5942014 ldr r2, [r4, #20] <== NOT EXECUTED
3aef4: e1500002 cmp r0, r2 <== NOT EXECUTED
3aef8: 2affffc2 bcs 3ae08 <rtems_rfs_file_set_size+0x224> <== NOT EXECUTED
3aefc: eaffffe5 b 3ae98 <rtems_rfs_file_set_size+0x2b4> <== NOT EXECUTED
0003bbd8 <rtems_rfs_format>:
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
{
3bbd8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_file_system fs;
int group;
int rc;
if (config->verbose)
3bbdc: e5d13015 ldrb r3, [r1, #21] <== NOT EXECUTED
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
{
3bbe0: e24dd0e8 sub sp, sp, #232 ; 0xe8 <== NOT EXECUTED
rtems_rfs_file_system fs;
int group;
int rc;
if (config->verbose)
3bbe4: e3530000 cmp r3, #0 <== NOT EXECUTED
return rc;
}
int
rtems_rfs_format (const char* name, const rtems_rfs_format_config* config)
{
3bbe8: e1a07001 mov r7, r1 <== NOT EXECUTED
3bbec: e58d0008 str r0, [sp, #8] <== NOT EXECUTED
rtems_rfs_file_system fs;
int group;
int rc;
if (config->verbose)
3bbf0: 1a000098 bne 3be58 <rtems_rfs_format+0x280> <== NOT EXECUTED
printf ("rtems-rfs: format: %s\n", name);
memset (&fs, 0, sizeof (rtems_rfs_file_system));
3bbf4: e28d4014 add r4, sp, #20 <== NOT EXECUTED
3bbf8: e3a01000 mov r1, #0 <== NOT EXECUTED
3bbfc: e3a02080 mov r2, #128 ; 0x80 <== NOT EXECUTED
3bc00: e1a00004 mov r0, r4 <== NOT EXECUTED
3bc04: eb002a30 bl 464cc <memset> <== NOT EXECUTED
the_chain->last = _Chain_Head(the_chain);
3bc08: e2843070 add r3, r4, #112 ; 0x70 <== NOT EXECUTED
3bc0c: e58d308c str r3, [sp, #140] ; 0x8c <== NOT EXECUTED
rtems_chain_initialize_empty (&fs.buffers);
rtems_chain_initialize_empty (&fs.release);
rtems_chain_initialize_empty (&fs.release_modified);
rtems_chain_initialize_empty (&fs.file_shares);
fs.max_held_buffers = RTEMS_RFS_FS_MAX_HELD_BUFFERS;
3bc10: e3a03005 mov r3, #5 <== NOT EXECUTED
3bc14: e2845050 add r5, r4, #80 ; 0x50 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc18: e284e064 add lr, r4, #100 ; 0x64 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3bc1c: e284c060 add ip, r4, #96 ; 0x60 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc20: e2842074 add r2, r4, #116 ; 0x74 <== NOT EXECUTED
3bc24: e58d3050 str r3, [sp, #80] ; 0x50 <== NOT EXECUTED
3bc28: e284a044 add sl, r4, #68 ; 0x44 <== NOT EXECUTED
fs.release_count = 0;
fs.release_modified_count = 0;
fs.flags = RTEMS_RFS_FS_NO_LOCAL_CACHE;
3bc2c: e3a03002 mov r3, #2 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3bc30: e2848040 add r8, r4, #64 ; 0x40 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc34: e2846054 add r6, r4, #84 ; 0x54 <== NOT EXECUTED
/*
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, &fs);
3bc38: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
3bc3c: e1a01004 mov r1, r4 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3bc40: e58d506c str r5, [sp, #108] ; 0x6c <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc44: e58da054 str sl, [sp, #84] ; 0x54 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3bc48: e58d805c str r8, [sp, #92] ; 0x5c <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc4c: e58d6064 str r6, [sp, #100] ; 0x64 <== NOT EXECUTED
3bc50: e58de074 str lr, [sp, #116] ; 0x74 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3bc54: e58dc07c str ip, [sp, #124] ; 0x7c <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3bc58: e58d2084 str r2, [sp, #132] ; 0x84 <== NOT EXECUTED
fs.max_held_buffers = RTEMS_RFS_FS_MAX_HELD_BUFFERS;
fs.release_count = 0;
fs.release_modified_count = 0;
fs.flags = RTEMS_RFS_FS_NO_LOCAL_CACHE;
3bc5c: e58d3014 str r3, [sp, #20] <== NOT EXECUTED
/*
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, &fs);
3bc60: ebfff71a bl 398d0 <rtems_rfs_buffer_open> <== NOT EXECUTED
if (rc > 0)
3bc64: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3bc68: ca00014b bgt 3c19c <rtems_rfs_format+0x5c4> <== NOT EXECUTED
}
/*
* Check the media.
*/
if (rtems_rfs_fs_media_block_size (&fs) == 0)
3bc6c: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
3bc70: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
3bc74: e3510000 cmp r1, #0 <== NOT EXECUTED
3bc78: 0a000071 beq 3be44 <rtems_rfs_format+0x26c> <== NOT EXECUTED
static bool
rtems_rfs_check_config (rtems_rfs_file_system* fs,
const rtems_rfs_format_config* config)
{
fs->block_size = config->block_size;
3bc7c: e5975000 ldr r5, [r7] <== NOT EXECUTED
if (!fs->block_size)
3bc80: e3550000 cmp r5, #0 <== NOT EXECUTED
static bool
rtems_rfs_check_config (rtems_rfs_file_system* fs,
const rtems_rfs_format_config* config)
{
fs->block_size = config->block_size;
3bc84: e58d501c str r5, [sp, #28] <== NOT EXECUTED
if (!fs->block_size)
3bc88: 0a00011c beq 3c100 <rtems_rfs_format+0x528> <== NOT EXECUTED
if (fs->block_size > (4 * 1024))
fs->block_size = (4 * 1024);
}
if ((fs->block_size % rtems_rfs_fs_media_block_size (fs)) != 0)
3bc8c: e5936024 ldr r6, [r3, #36] ; 0x24 <== NOT EXECUTED
3bc90: e1a00005 mov r0, r5 <== NOT EXECUTED
3bc94: e1a01006 mov r1, r6 <== NOT EXECUTED
3bc98: eb007d26 bl 5b138 <__umodsi3> <== NOT EXECUTED
3bc9c: e3500000 cmp r0, #0 <== NOT EXECUTED
3bca0: 1a000132 bne 3c170 <rtems_rfs_format+0x598> <== NOT EXECUTED
printf ("block size (%zd) is not a multiple of media block size (%" PRId32 ")\n",
fs->block_size, rtems_rfs_fs_media_block_size (fs));
return false;
}
fs->group_blocks = config->group_blocks;
3bca4: e5973004 ldr r3, [r7, #4] <== NOT EXECUTED
if (!fs->group_blocks)
3bca8: e3530000 cmp r3, #0 <== NOT EXECUTED
{
/*
* The number of blocks per group is defined by the number of bits in a
* block.
*/
fs->group_blocks = rtems_rfs_bitmap_numof_bits (fs->block_size);
3bcac: 059d501c ldreq r5, [sp, #28] <== NOT EXECUTED
3bcb0: 159d501c ldrne r5, [sp, #28] <== NOT EXECUTED
printf ("block size (%zd) is not a multiple of media block size (%" PRId32 ")\n",
fs->block_size, rtems_rfs_fs_media_block_size (fs));
return false;
}
fs->group_blocks = config->group_blocks;
3bcb4: e58d3038 str r3, [sp, #56] ; 0x38 <== NOT EXECUTED
{
/*
* The number of blocks per group is defined by the number of bits in a
* block.
*/
fs->group_blocks = rtems_rfs_bitmap_numof_bits (fs->block_size);
3bcb8: 01a03185 lsleq r3, r5, #3 <== NOT EXECUTED
3bcbc: 058d3038 streq r3, [sp, #56] ; 0x38 <== NOT EXECUTED
}
if (fs->group_blocks > rtems_rfs_bitmap_numof_bits (fs->block_size))
3bcc0: e1530185 cmp r3, r5, lsl #3 <== NOT EXECUTED
3bcc4: 8a000109 bhi 3c0f0 <rtems_rfs_format+0x518> <== NOT EXECUTED
{
printf ("group block count is higher than bits in block\n");
return false;
}
fs->blocks = rtems_rfs_fs_media_size (fs) / fs->block_size;
3bcc8: e1a00004 mov r0, r4 <== NOT EXECUTED
3bccc: ebfffe35 bl 3b5a8 <rtems_rfs_fs_media_size> <== NOT EXECUTED
3bcd0: e59d501c ldr r5, [sp, #28] <== NOT EXECUTED
3bcd4: e3a03000 mov r3, #0 <== NOT EXECUTED
3bcd8: e1a02005 mov r2, r5 <== NOT EXECUTED
3bcdc: eb00808d bl 5bf18 <__udivdi3> <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bce0: e3500000 cmp r0, #0 <== NOT EXECUTED
{
printf ("group block count is higher than bits in block\n");
return false;
}
fs->blocks = rtems_rfs_fs_media_size (fs) / fs->block_size;
3bce4: e1a06000 mov r6, r0 <== NOT EXECUTED
3bce8: e58d0018 str r0, [sp, #24] <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bcec: 03a01001 moveq r1, #1 <== NOT EXECUTED
3bcf0: 0a000003 beq 3bd04 <rtems_rfs_format+0x12c> <== NOT EXECUTED
return 1;
return ((dividend - 1) / divisor) + 1;
3bcf4: e1a01185 lsl r1, r5, #3 <== NOT EXECUTED
3bcf8: e2460001 sub r0, r6, #1 <== NOT EXECUTED
3bcfc: eb007c79 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3bd00: e2801001 add r1, r0, #1 <== NOT EXECUTED
* per block.
*/
fs->group_count = rtems_rfs_rup_quotient (rtems_rfs_fs_blocks (fs),
rtems_rfs_bits_per_block (fs));
fs->group_inodes = config->group_inodes;
3bd04: e5973008 ldr r3, [r7, #8] <== NOT EXECUTED
if (!fs->group_inodes)
3bd08: e3530000 cmp r3, #0 <== NOT EXECUTED
/*
* The bits per block sets the upper limit for the number of blocks in a
* group. The disk will be divided into groups which are the number of bits
* per block.
*/
fs->group_count = rtems_rfs_rup_quotient (rtems_rfs_fs_blocks (fs),
3bd0c: e58d1034 str r1, [sp, #52] ; 0x34 <== NOT EXECUTED
rtems_rfs_bits_per_block (fs));
fs->group_inodes = config->group_inodes;
3bd10: e58d303c str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
if (!fs->group_inodes)
3bd14: 1a000011 bne 3bd60 <rtems_rfs_format+0x188> <== NOT EXECUTED
int inode_overhead = RTEMS_RFS_INODE_OVERHEAD_PERCENTAGE;
/*
* The number of inodes per group is set as a percentage.
*/
if (config->inode_overhead)
3bd18: e597300c ldr r3, [r7, #12] <== NOT EXECUTED
3bd1c: e3530000 cmp r3, #0 <== NOT EXECUTED
3bd20: 03a03001 moveq r3, #1 <== NOT EXECUTED
static int
rtems_rfs_inodes_from_percent (rtems_rfs_file_system* fs,
int percentage)
{
int blocks;
blocks = ((rtems_rfs_fs_blocks (fs) -
3bd24: e2466001 sub r6, r6, #1 <== NOT EXECUTED
3bd28: e0000396 mul r0, r6, r3 <== NOT EXECUTED
3bd2c: e59f2b4c ldr r2, [pc, #2892] ; 3c880 <rtems_rfs_format+0xca8><== NOT EXECUTED
3bd30: e083c092 umull ip, r3, r2, r0 <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bd34: e1b032a3 lsrs r3, r3, #5 <== NOT EXECUTED
3bd38: 03a00001 moveq r0, #1 <== NOT EXECUTED
3bd3c: 0a000002 beq 3bd4c <rtems_rfs_format+0x174> <== NOT EXECUTED
3bd40: e2430001 sub r0, r3, #1 <== NOT EXECUTED
3bd44: eb007c67 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3bd48: e2800001 add r0, r0, #1 <== NOT EXECUTED
* The number of inodes per group is set as a percentage.
*/
if (config->inode_overhead)
inode_overhead = config->inode_overhead;
fs->group_inodes = rtems_rfs_inodes_from_percent (fs, inode_overhead);
3bd4c: e59f3b30 ldr r3, [pc, #2864] ; 3c884 <rtems_rfs_format+0xcac><== NOT EXECUTED
3bd50: e1a011a5 lsr r1, r5, #3 <== NOT EXECUTED
3bd54: e082c193 umull ip, r2, r3, r1 <== NOT EXECUTED
3bd58: e0030092 mul r3, r2, r0 <== NOT EXECUTED
3bd5c: e58d303c str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
}
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
3bd60: e59f3b1c ldr r3, [pc, #2844] ; 3c884 <rtems_rfs_format+0xcac><== NOT EXECUTED
3bd64: e1a021a5 lsr r2, r5, #3 <== NOT EXECUTED
3bd68: e0861293 umull r1, r6, r3, r2 <== NOT EXECUTED
fs->group_inodes =
rtems_rfs_rup_quotient (fs->group_inodes,
3bd6c: e59d003c ldr r0, [sp, #60] ; 0x3c <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bd70: e3500000 cmp r0, #0 <== NOT EXECUTED
}
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
3bd74: e58d6040 str r6, [sp, #64] ; 0x40 <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bd78: 03a00001 moveq r0, #1 <== NOT EXECUTED
3bd7c: 0a000003 beq 3bd90 <rtems_rfs_format+0x1b8> <== NOT EXECUTED
3bd80: e2400001 sub r0, r0, #1 <== NOT EXECUTED
3bd84: e1a01006 mov r1, r6 <== NOT EXECUTED
3bd88: eb007c56 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3bd8c: e2800001 add r0, r0, #1 <== NOT EXECUTED
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
fs->group_inodes =
rtems_rfs_rup_quotient (fs->group_inodes,
3bd90: e0030096 mul r3, r6, r0 <== NOT EXECUTED
fs->inodes_per_block) * fs->inodes_per_block;
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
3bd94: e1a02185 lsl r2, r5, #3 <== NOT EXECUTED
3bd98: e1530002 cmp r3, r2 <== NOT EXECUTED
/*
* Round up to fill a block because the minimum allocation unit is a block.
*/
fs->inodes_per_block = rtems_rfs_fs_block_size (fs) / RTEMS_RFS_INODE_SIZE;
fs->group_inodes =
3bd9c: e58d303c str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
rtems_rfs_rup_quotient (fs->group_inodes,
fs->inodes_per_block) * fs->inodes_per_block;
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
fs->group_inodes = rtems_rfs_bitmap_numof_bits (fs->block_size);
3bda0: 858d203c strhi r2, [sp, #60] ; 0x3c <== NOT EXECUTED
fs->max_name_length = config->max_name_length;
3bda4: e5973010 ldr r3, [r7, #16] <== NOT EXECUTED
if (!fs->max_name_length)
3bda8: e3530000 cmp r3, #0 <== NOT EXECUTED
fs->inodes_per_block) * fs->inodes_per_block;
if (fs->group_inodes > rtems_rfs_bitmap_numof_bits (fs->block_size))
fs->group_inodes = rtems_rfs_bitmap_numof_bits (fs->block_size);
fs->max_name_length = config->max_name_length;
3bdac: e58d302c str r3, [sp, #44] ; 0x2c <== NOT EXECUTED
if (!fs->max_name_length)
{
fs->max_name_length = 512;
3bdb0: 03a03c02 moveq r3, #512 ; 0x200 <== NOT EXECUTED
3bdb4: 058d302c streq r3, [sp, #44] ; 0x2c <== NOT EXECUTED
* Check the configuration data.
*/
if (!rtems_rfs_check_config (&fs, config))
return -1;
if (config->verbose)
3bdb8: e5d73015 ldrb r3, [r7, #21] <== NOT EXECUTED
3bdbc: e3530000 cmp r3, #0 <== NOT EXECUTED
3bdc0: 1a000091 bne 3c00c <rtems_rfs_format+0x434> <== NOT EXECUTED
printf ("rtems-rfs: format: groups = %u\n", fs.group_count);
printf ("rtems-rfs: format: group blocks = %zu\n", fs.group_blocks);
printf ("rtems-rfs: format: group inodes = %zu\n", fs.group_inodes);
}
rc = rtems_rfs_buffer_setblksize (&fs, rtems_rfs_fs_block_size (&fs));
3bdc4: e1a01005 mov r1, r5 <== NOT EXECUTED
3bdc8: e1a00004 mov r0, r4 <== NOT EXECUTED
3bdcc: ebfff69e bl 3984c <rtems_rfs_buffer_setblksize> <== NOT EXECUTED
if (rc > 0)
3bdd0: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3bdd4: ca0001f6 bgt 3c5b4 <rtems_rfs_format+0x9dc> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3bdd8: e3a09000 mov r9, #0 <== NOT EXECUTED
printf ("rtems-rfs: write-superblock: handle open failed: %d: %s\n",
rc, strerror (rc));
return false;
}
rc = rtems_rfs_buffer_handle_request (fs, &handle, 0, false);
3bddc: e1a00004 mov r0, r4 <== NOT EXECUTED
3bde0: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3bde4: e1a02009 mov r2, r9 <== NOT EXECUTED
3bde8: e1a03009 mov r3, r9 <== NOT EXECUTED
3bdec: e5cd90d4 strb r9, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3bdf0: e58d90d8 str r9, [sp, #216] ; 0xd8 <== NOT EXECUTED
handle->buffer = NULL;
3bdf4: e58d90dc str r9, [sp, #220] ; 0xdc <== NOT EXECUTED
3bdf8: ebfff715 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3bdfc: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3be00: da000018 ble 3be68 <rtems_rfs_format+0x290> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3be04: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3be08: e1a00004 mov r0, r4 <== NOT EXECUTED
3be0c: ebfff6c6 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
printf ("rtems-rfs: write-superblock: request failed: %d: %s\n",
3be10: e1a00005 mov r0, r5 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3be14: e58d90dc str r9, [sp, #220] ; 0xdc <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3be18: e5cd90d4 strb r9, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3be1c: e58d90d8 str r9, [sp, #216] ; 0xd8 <== NOT EXECUTED
3be20: eb0035e3 bl 495b4 <strerror> <== NOT EXECUTED
3be24: e1a01005 mov r1, r5 <== NOT EXECUTED
3be28: e1a02000 mov r2, r0 <== NOT EXECUTED
3be2c: e59f0a54 ldr r0, [pc, #2644] ; 3c888 <rtems_rfs_format+0xcb0><== NOT EXECUTED
3be30: eb002dcc bl 47568 <printf> <== NOT EXECUTED
return -1;
}
if (!rtems_rfs_write_superblock (&fs))
{
printf ("rtems-rfs: format: superblock write failed\n");
3be34: e59f0a50 ldr r0, [pc, #2640] ; 3c88c <rtems_rfs_format+0xcb4><== NOT EXECUTED
3be38: eb002e6f bl 477fc <puts> <== NOT EXECUTED
3be3c: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
3be40: ea000002 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
/*
* Check the media.
*/
if (rtems_rfs_fs_media_block_size (&fs) == 0)
{
printf ("rtems-rfs: media block is invalid: %" PRIu32 "\n",
3be44: e59f0a44 ldr r0, [pc, #2628] ; 3c890 <rtems_rfs_format+0xcb8><== NOT EXECUTED
3be48: eb002dc6 bl 47568 <printf> <== NOT EXECUTED
3be4c: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc, strerror (rc));
return -1;
}
return 0;
}
3be50: e28dd0e8 add sp, sp, #232 ; 0xe8 <== NOT EXECUTED
3be54: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rtems_rfs_file_system fs;
int group;
int rc;
if (config->verbose)
printf ("rtems-rfs: format: %s\n", name);
3be58: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
3be5c: e59f0a30 ldr r0, [pc, #2608] ; 3c894 <rtems_rfs_format+0xcbc><== NOT EXECUTED
3be60: eb002dc0 bl 47568 <printf> <== NOT EXECUTED
3be64: eaffff62 b 3bbf4 <rtems_rfs_format+0x1c> <== NOT EXECUTED
printf ("rtems-rfs: write-superblock: request failed: %d: %s\n",
rc, strerror (rc));
return false;
}
sb = rtems_rfs_buffer_data (&handle);
3be68: e59d30dc ldr r3, [sp, #220] ; 0xdc <== NOT EXECUTED
3be6c: e5935020 ldr r5, [r3, #32] <== NOT EXECUTED
#define write_sb(_o, _d) rtems_rfs_write_u32(sb + (_o), _d)
memset (sb, 0xff, rtems_rfs_fs_block_size (fs));
3be70: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3be74: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
3be78: e1a00005 mov r0, r5 <== NOT EXECUTED
3be7c: eb002992 bl 464cc <memset> <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_MAGIC, RTEMS_RFS_SB_MAGIC);
3be80: e3a03028 mov r3, #40 ; 0x28 <== NOT EXECUTED
3be84: e5c53000 strb r3, [r5] <== NOT EXECUTED
3be88: e3a03009 mov r3, #9 <== NOT EXECUTED
3be8c: e5c53001 strb r3, [r5, #1] <== NOT EXECUTED
3be90: e3a0a001 mov sl, #1 <== NOT EXECUTED
3be94: e3a03020 mov r3, #32 <== NOT EXECUTED
3be98: e5c53002 strb r3, [r5, #2] <== NOT EXECUTED
3be9c: e5c5a003 strb sl, [r5, #3] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_VERSION, RTEMS_RFS_VERSION);
3bea0: e5c59004 strb r9, [r5, #4] <== NOT EXECUTED
3bea4: e5c59005 strb r9, [r5, #5] <== NOT EXECUTED
3bea8: e5c59006 strb r9, [r5, #6] <== NOT EXECUTED
3beac: e5c59007 strb r9, [r5, #7] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_BLOCKS, rtems_rfs_fs_blocks (fs));
3beb0: e5dd301b ldrb r3, [sp, #27] <== NOT EXECUTED
3beb4: e5c5300c strb r3, [r5, #12] <== NOT EXECUTED
3beb8: e1dd31ba ldrh r3, [sp, #26] <== NOT EXECUTED
3bebc: e5c5300d strb r3, [r5, #13] <== NOT EXECUTED
3bec0: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
3bec4: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bec8: e5c5300e strb r3, [r5, #14] <== NOT EXECUTED
3becc: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
3bed0: e5c5300f strb r3, [r5, #15] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE, rtems_rfs_fs_block_size (fs));
3bed4: e5dd301f ldrb r3, [sp, #31] <== NOT EXECUTED
3bed8: e5c53008 strb r3, [r5, #8] <== NOT EXECUTED
3bedc: e1dd31be ldrh r3, [sp, #30] <== NOT EXECUTED
3bee0: e5c53009 strb r3, [r5, #9] <== NOT EXECUTED
3bee4: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
3bee8: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3beec: e5c5300a strb r3, [r5, #10] <== NOT EXECUTED
3bef0: e59d301c ldr r3, [sp, #28] <== NOT EXECUTED
3bef4: e5c5300b strb r3, [r5, #11] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS, fs->bad_blocks);
3bef8: e5dd302b ldrb r3, [sp, #43] ; 0x2b <== NOT EXECUTED
3befc: e5c53010 strb r3, [r5, #16] <== NOT EXECUTED
3bf00: e1dd32ba ldrh r3, [sp, #42] ; 0x2a <== NOT EXECUTED
3bf04: e5c53011 strb r3, [r5, #17] <== NOT EXECUTED
3bf08: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
3bf0c: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bf10: e5c53012 strb r3, [r5, #18] <== NOT EXECUTED
3bf14: e59d3028 ldr r3, [sp, #40] ; 0x28 <== NOT EXECUTED
3bf18: e5c53013 strb r3, [r5, #19] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH, fs->max_name_length);
3bf1c: e5dd302f ldrb r3, [sp, #47] ; 0x2f <== NOT EXECUTED
3bf20: e5c53014 strb r3, [r5, #20] <== NOT EXECUTED
3bf24: e1dd32be ldrh r3, [sp, #46] ; 0x2e <== NOT EXECUTED
3bf28: e5c53015 strb r3, [r5, #21] <== NOT EXECUTED
3bf2c: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
3bf30: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bf34: e5c53016 strb r3, [r5, #22] <== NOT EXECUTED
3bf38: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
3bf3c: e5c53017 strb r3, [r5, #23] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_GROUPS, fs->group_count);
3bf40: e5dd3037 ldrb r3, [sp, #55] ; 0x37 <== NOT EXECUTED
3bf44: e5c53018 strb r3, [r5, #24] <== NOT EXECUTED
3bf48: e1dd33b6 ldrh r3, [sp, #54] ; 0x36 <== NOT EXECUTED
3bf4c: e5c53019 strb r3, [r5, #25] <== NOT EXECUTED
3bf50: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3bf54: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bf58: e5c5301a strb r3, [r5, #26] <== NOT EXECUTED
3bf5c: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3bf60: e5c5301b strb r3, [r5, #27] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS, fs->group_blocks);
3bf64: e5dd303b ldrb r3, [sp, #59] ; 0x3b <== NOT EXECUTED
3bf68: e5c5301c strb r3, [r5, #28] <== NOT EXECUTED
3bf6c: e1dd33ba ldrh r3, [sp, #58] ; 0x3a <== NOT EXECUTED
3bf70: e5c5301d strb r3, [r5, #29] <== NOT EXECUTED
3bf74: e59d3038 ldr r3, [sp, #56] ; 0x38 <== NOT EXECUTED
3bf78: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bf7c: e5c5301e strb r3, [r5, #30] <== NOT EXECUTED
3bf80: e59d3038 ldr r3, [sp, #56] ; 0x38 <== NOT EXECUTED
3bf84: e5c5301f strb r3, [r5, #31] <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES, fs->group_inodes);
3bf88: e5dd303f ldrb r3, [sp, #63] ; 0x3f <== NOT EXECUTED
3bf8c: e5c53020 strb r3, [r5, #32] <== NOT EXECUTED
3bf90: e1dd33be ldrh r3, [sp, #62] ; 0x3e <== NOT EXECUTED
3bf94: e5c53021 strb r3, [r5, #33] ; 0x21 <== NOT EXECUTED
3bf98: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
3bf9c: e1a03423 lsr r3, r3, #8 <== NOT EXECUTED
3bfa0: e5c53022 strb r3, [r5, #34] ; 0x22 <== NOT EXECUTED
3bfa4: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE, RTEMS_RFS_INODE_SIZE);
rtems_rfs_buffer_mark_dirty (&handle);
rc = rtems_rfs_buffer_handle_release (fs, &handle);
3bfa8: e1a00004 mov r0, r4 <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE, rtems_rfs_fs_block_size (fs));
write_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS, fs->bad_blocks);
write_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH, fs->max_name_length);
write_sb (RTEMS_RFS_SB_OFFSET_GROUPS, fs->group_count);
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS, fs->group_blocks);
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES, fs->group_inodes);
3bfac: e5c53023 strb r3, [r5, #35] ; 0x23 <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE, RTEMS_RFS_INODE_SIZE);
rtems_rfs_buffer_mark_dirty (&handle);
rc = rtems_rfs_buffer_handle_release (fs, &handle);
3bfb0: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
write_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS, fs->bad_blocks);
write_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH, fs->max_name_length);
write_sb (RTEMS_RFS_SB_OFFSET_GROUPS, fs->group_count);
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS, fs->group_blocks);
write_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES, fs->group_inodes);
write_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE, RTEMS_RFS_INODE_SIZE);
3bfb4: e3a03038 mov r3, #56 ; 0x38 <== NOT EXECUTED
3bfb8: e5c59024 strb r9, [r5, #36] ; 0x24 <== NOT EXECUTED
3bfbc: e5c59025 strb r9, [r5, #37] ; 0x25 <== NOT EXECUTED
3bfc0: e5c59026 strb r9, [r5, #38] ; 0x26 <== NOT EXECUTED
3bfc4: e5c53027 strb r3, [r5, #39] ; 0x27 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle);
3bfc8: e5cda0d4 strb sl, [sp, #212] ; 0xd4 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_release (fs, &handle);
3bfcc: ebfff656 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
if (rc > 0)
3bfd0: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3bfd4: da000077 ble 3c1b8 <rtems_rfs_format+0x5e0> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3bfd8: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3bfdc: e1a00004 mov r0, r4 <== NOT EXECUTED
3bfe0: ebfff651 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
printf ("rtems-rfs: write-superblock: buffer release failed: %d: %s\n",
3bfe4: e1a00005 mov r0, r5 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3bfe8: e58d90dc str r9, [sp, #220] ; 0xdc <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3bfec: e5cd90d4 strb r9, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3bff0: e58d90d8 str r9, [sp, #216] ; 0xd8 <== NOT EXECUTED
3bff4: eb00356e bl 495b4 <strerror> <== NOT EXECUTED
3bff8: e1a01005 mov r1, r5 <== NOT EXECUTED
3bffc: e1a02000 mov r2, r0 <== NOT EXECUTED
3c000: e59f0890 ldr r0, [pc, #2192] ; 3c898 <rtems_rfs_format+0xcc0><== NOT EXECUTED
3c004: eb002d57 bl 47568 <printf> <== NOT EXECUTED
3c008: eaffff89 b 3be34 <rtems_rfs_format+0x25c> <== NOT EXECUTED
if (!rtems_rfs_check_config (&fs, config))
return -1;
if (config->verbose)
{
printf ("rtems-rfs: format: media size = %" PRIu64 "\n",
3c00c: e1a00004 mov r0, r4 <== NOT EXECUTED
3c010: ebfffd64 bl 3b5a8 <rtems_rfs_fs_media_size> <== NOT EXECUTED
3c014: e1a02001 mov r2, r1 <== NOT EXECUTED
3c018: e1a01000 mov r1, r0 <== NOT EXECUTED
3c01c: e59f0878 ldr r0, [pc, #2168] ; 3c89c <rtems_rfs_format+0xcc4><== NOT EXECUTED
3c020: eb002d50 bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_media_size (&fs));
printf ("rtems-rfs: format: media blocks = %" PRIu32 "\n",
3c024: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
3c028: e59f0870 ldr r0, [pc, #2160] ; 3c8a0 <rtems_rfs_format+0xcc8><== NOT EXECUTED
3c02c: e593101c ldr r1, [r3, #28] <== NOT EXECUTED
3c030: eb002d4c bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_media_blocks (&fs));
printf ("rtems-rfs: format: media block size = %" PRIu32 "\n",
3c034: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
3c038: e59f0864 ldr r0, [pc, #2148] ; 3c8a4 <rtems_rfs_format+0xccc><== NOT EXECUTED
3c03c: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
3c040: eb002d48 bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_media_block_size (&fs));
printf ("rtems-rfs: format: size = %" PRIu64 "\n",
3c044: e1a00004 mov r0, r4 <== NOT EXECUTED
3c048: ebfffd4e bl 3b588 <rtems_rfs_fs_size> <== NOT EXECUTED
3c04c: e1a02001 mov r2, r1 <== NOT EXECUTED
3c050: e1a01000 mov r1, r0 <== NOT EXECUTED
3c054: e59f084c ldr r0, [pc, #2124] ; 3c8a8 <rtems_rfs_format+0xcd0><== NOT EXECUTED
3c058: eb002d42 bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_size (&fs));
printf ("rtems-rfs: format: blocks = %zu\n",
3c05c: e59d1018 ldr r1, [sp, #24] <== NOT EXECUTED
3c060: e59f0844 ldr r0, [pc, #2116] ; 3c8ac <rtems_rfs_format+0xcd4><== NOT EXECUTED
3c064: eb002d3f bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_blocks (&fs));
printf ("rtems-rfs: format: block size = %zu\n",
3c068: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
3c06c: e59f083c ldr r0, [pc, #2108] ; 3c8b0 <rtems_rfs_format+0xcd8><== NOT EXECUTED
3c070: eb002d3c bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_block_size (&fs));
printf ("rtems-rfs: format: bits per block = %u\n",
3c074: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
3c078: e59f0834 ldr r0, [pc, #2100] ; 3c8b4 <rtems_rfs_format+0xcdc><== NOT EXECUTED
3c07c: e1a01181 lsl r1, r1, #3 <== NOT EXECUTED
3c080: eb002d38 bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_bits_per_block (&fs));
printf ("rtems-rfs: format: inode size = %zu\n", RTEMS_RFS_INODE_SIZE);
3c084: e3a01038 mov r1, #56 ; 0x38 <== NOT EXECUTED
3c088: e59f0828 ldr r0, [pc, #2088] ; 3c8b8 <rtems_rfs_format+0xce0><== NOT EXECUTED
3c08c: eb002d35 bl 47568 <printf> <== NOT EXECUTED
printf ("rtems-rfs: format: inodes = %zu (%d.%d%%)\n",
3c090: e1a00004 mov r0, r4 <== NOT EXECUTED
3c094: ebfffeb0 bl 3bb5c <rtems_rfs_inode_overhead> <== NOT EXECUTED
3c098: e59f381c ldr r3, [pc, #2076] ; 3c8bc <rtems_rfs_format+0xce4><== NOT EXECUTED
3c09c: e0c2c093 smull ip, r2, r3, r0 <== NOT EXECUTED
3c0a0: e1a03fc0 asr r3, r0, #31 <== NOT EXECUTED
3c0a4: e0632142 rsb r2, r3, r2, asr #2 <== NOT EXECUTED
3c0a8: e0823102 add r3, r2, r2, lsl #2 <== NOT EXECUTED
3c0ac: e0403083 sub r3, r0, r3, lsl #1 <== NOT EXECUTED
3c0b0: e59d1034 ldr r1, [sp, #52] ; 0x34 <== NOT EXECUTED
3c0b4: e59d003c ldr r0, [sp, #60] ; 0x3c <== NOT EXECUTED
3c0b8: e0010190 mul r1, r0, r1 <== NOT EXECUTED
3c0bc: e59f07fc ldr r0, [pc, #2044] ; 3c8c0 <rtems_rfs_format+0xce8><== NOT EXECUTED
3c0c0: eb002d28 bl 47568 <printf> <== NOT EXECUTED
fs.group_inodes * fs.group_count,
rtems_rfs_inode_overhead (&fs) / 10,
rtems_rfs_inode_overhead (&fs) % 10);
printf ("rtems-rfs: format: groups = %u\n", fs.group_count);
3c0c4: e59d1034 ldr r1, [sp, #52] ; 0x34 <== NOT EXECUTED
3c0c8: e59f07f4 ldr r0, [pc, #2036] ; 3c8c4 <rtems_rfs_format+0xcec><== NOT EXECUTED
3c0cc: eb002d25 bl 47568 <printf> <== NOT EXECUTED
printf ("rtems-rfs: format: group blocks = %zu\n", fs.group_blocks);
3c0d0: e59d1038 ldr r1, [sp, #56] ; 0x38 <== NOT EXECUTED
3c0d4: e59f07ec ldr r0, [pc, #2028] ; 3c8c8 <rtems_rfs_format+0xcf0><== NOT EXECUTED
3c0d8: eb002d22 bl 47568 <printf> <== NOT EXECUTED
printf ("rtems-rfs: format: group inodes = %zu\n", fs.group_inodes);
3c0dc: e59f07e8 ldr r0, [pc, #2024] ; 3c8cc <rtems_rfs_format+0xcf4><== NOT EXECUTED
3c0e0: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
3c0e4: eb002d1f bl 47568 <printf> <== NOT EXECUTED
3c0e8: e59d501c ldr r5, [sp, #28] <== NOT EXECUTED
3c0ec: eaffff34 b 3bdc4 <rtems_rfs_format+0x1ec> <== NOT EXECUTED
fs->group_blocks = rtems_rfs_bitmap_numof_bits (fs->block_size);
}
if (fs->group_blocks > rtems_rfs_bitmap_numof_bits (fs->block_size))
{
printf ("group block count is higher than bits in block\n");
3c0f0: e59f07d8 ldr r0, [pc, #2008] ; 3c8d0 <rtems_rfs_format+0xcf8><== NOT EXECUTED
3c0f4: eb002dc0 bl 477fc <puts> <== NOT EXECUTED
3c0f8: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c0fc: eaffff53 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
const rtems_rfs_format_config* config)
{
fs->block_size = config->block_size;
if (!fs->block_size)
{
uint64_t total_size = rtems_rfs_fs_media_size (fs);
3c100: e1a00004 mov r0, r4 <== NOT EXECUTED
3c104: ebfffd27 bl 3b5a8 <rtems_rfs_fs_media_size> <== NOT EXECUTED
if (total_size >= GIGS (1))
3c108: e3510000 cmp r1, #0 <== NOT EXECUTED
3c10c: 1a000002 bne 3c11c <rtems_rfs_format+0x544> <== NOT EXECUTED
3c110: e3500601 cmp r0, #1048576 ; 0x100000 <== NOT EXECUTED
3c114: 359d501c ldrcc r5, [sp, #28] <== NOT EXECUTED
3c118: 3a00000e bcc 3c158 <rtems_rfs_format+0x580> <== NOT EXECUTED
{
uint32_t gigs = (total_size + GIGS (1)) / GIGS (1);
3c11c: e3a02601 mov r2, #1048576 ; 0x100000 <== NOT EXECUTED
3c120: e0922000 adds r2, r2, r0 <== NOT EXECUTED
3c124: e3a03000 mov r3, #0 <== NOT EXECUTED
3c128: e0a33001 adc r3, r3, r1 <== NOT EXECUTED
3c12c: e1a01a22 lsr r1, r2, #20 <== NOT EXECUTED
3c130: e1811603 orr r1, r1, r3, lsl #12 <== NOT EXECUTED
int b;
for (b = 31; b > 0; b--)
if ((gigs & (1 << b)) != 0)
3c134: e3a02001 mov r2, #1 <== NOT EXECUTED
{
uint64_t total_size = rtems_rfs_fs_media_size (fs);
if (total_size >= GIGS (1))
{
uint32_t gigs = (total_size + GIGS (1)) / GIGS (1);
3c138: e3a0301f mov r3, #31 <== NOT EXECUTED
3c13c: ea000001 b 3c148 <rtems_rfs_format+0x570> <== NOT EXECUTED
int b;
for (b = 31; b > 0; b--)
3c140: e2533001 subs r3, r3, #1 <== NOT EXECUTED
3c144: 0a000121 beq 3c5d0 <rtems_rfs_format+0x9f8> <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
3c148: e1a05312 lsl r5, r2, r3 <== NOT EXECUTED
3c14c: e1150001 tst r5, r1 <== NOT EXECUTED
3c150: 0afffffa beq 3c140 <rtems_rfs_format+0x568> <== NOT EXECUTED
break;
fs->block_size = 1 << b;
3c154: e58d501c str r5, [sp, #28] <== NOT EXECUTED
}
if (fs->block_size < 512)
3c158: e3550c02 cmp r5, #512 ; 0x200 <== NOT EXECUTED
3c15c: 2a000009 bcs 3c188 <rtems_rfs_format+0x5b0> <== NOT EXECUTED
fs->block_size = 512;
3c160: e3a05c02 mov r5, #512 ; 0x200 <== NOT EXECUTED
3c164: e58d501c str r5, [sp, #28] <== NOT EXECUTED
3c168: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
3c16c: eafffec6 b 3bc8c <rtems_rfs_format+0xb4> <== NOT EXECUTED
fs->block_size = (4 * 1024);
}
if ((fs->block_size % rtems_rfs_fs_media_block_size (fs)) != 0)
{
printf ("block size (%zd) is not a multiple of media block size (%" PRId32 ")\n",
3c170: e1a01005 mov r1, r5 <== NOT EXECUTED
3c174: e1a02006 mov r2, r6 <== NOT EXECUTED
3c178: e59f0754 ldr r0, [pc, #1876] ; 3c8d4 <rtems_rfs_format+0xcfc><== NOT EXECUTED
3c17c: eb002cf9 bl 47568 <printf> <== NOT EXECUTED
3c180: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c184: eaffff31 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
}
if (fs->block_size < 512)
fs->block_size = 512;
if (fs->block_size > (4 * 1024))
3c188: e3550a01 cmp r5, #4096 ; 0x1000 <== NOT EXECUTED
fs->block_size = (4 * 1024);
3c18c: 83a05a01 movhi r5, #4096 ; 0x1000 <== NOT EXECUTED
3c190: 858d501c strhi r5, [sp, #28] <== NOT EXECUTED
3c194: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
3c198: eafffebb b 3bc8c <rtems_rfs_format+0xb4> <== NOT EXECUTED
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, &fs);
if (rc > 0)
{
printf ("rtems-rfs: format: buffer open failed: %d: %s\n",
3c19c: eb003504 bl 495b4 <strerror> <== NOT EXECUTED
3c1a0: e1a01005 mov r1, r5 <== NOT EXECUTED
3c1a4: e1a02000 mov r2, r0 <== NOT EXECUTED
3c1a8: e59f0728 ldr r0, [pc, #1832] ; 3c8d8 <rtems_rfs_format+0xd00><== NOT EXECUTED
3c1ac: eb002ced bl 47568 <printf> <== NOT EXECUTED
3c1b0: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc, strerror (rc));
return -1;
3c1b4: eaffff25 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3c1b8: e1a00004 mov r0, r4 <== NOT EXECUTED
3c1bc: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c1c0: ebfff5d9 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
{
printf ("rtems-rfs: format: superblock write failed\n");
return -1;
}
for (group = 0; group < fs.group_count; group++)
3c1c4: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3c1c8: e3530000 cmp r3, #0 <== NOT EXECUTED
handle->dirty = false;
3c1cc: e5cd90d4 strb r9, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3c1d0: e58d90d8 str r9, [sp, #216] ; 0xd8 <== NOT EXECUTED
handle->buffer = NULL;
3c1d4: e58d90dc str r9, [sp, #220] ; 0xdc <== NOT EXECUTED
3c1d8: da00009d ble 3c454 <rtems_rfs_format+0x87c> <== NOT EXECUTED
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
if (group_base > rtems_rfs_fs_blocks (fs))
3c1dc: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
return -1;
}
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
3c1e0: e5d72014 ldrb r2, [r7, #20] <== NOT EXECUTED
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
if (group_base > rtems_rfs_fs_blocks (fs))
3c1e4: e3530000 cmp r3, #0 <== NOT EXECUTED
return -1;
}
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
3c1e8: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
3c1ec: e5d78015 ldrb r8, [r7, #21] <== NOT EXECUTED
size_t group_size;
int blocks;
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
3c1f0: e59d6038 ldr r6, [sp, #56] ; 0x38 <== NOT EXECUTED
if (group_base > rtems_rfs_fs_blocks (fs))
3c1f4: 01a09003 moveq r9, r3 <== NOT EXECUTED
3c1f8: 0a000056 beq 3c358 <rtems_rfs_format+0x780> <== NOT EXECUTED
{
printf ("rtems-rfs: write-group: group %d base beyond disk limit\n",
3c1fc: e1a0500a mov r5, sl <== NOT EXECUTED
3c200: e28da0bc add sl, sp, #188 ; 0xbc <== NOT EXECUTED
/*
* Be nice to strange sizes of disks. These are embedded systems after all
* and nice numbers do not always work out. Let the last block pick up the
* remainder of the blocks.
*/
if ((group_base + group_size) > rtems_rfs_fs_blocks (fs))
3c204: e0862005 add r2, r6, r5 <== NOT EXECUTED
3c208: e1530002 cmp r3, r2 <== NOT EXECUTED
group_size = rtems_rfs_fs_blocks (fs) - group_base;
3c20c: 30656003 rsbcc r6, r5, r3 <== NOT EXECUTED
if (verbose)
3c210: e3580000 cmp r8, #0 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3c214: 05cd80d4 strbeq r8, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3c218: 058d80d8 streq r8, [sp, #216] ; 0xd8 <== NOT EXECUTED
handle->buffer = NULL;
3c21c: 058d80dc streq r8, [sp, #220] ; 0xdc <== NOT EXECUTED
3c220: 1a000032 bne 3c2f0 <rtems_rfs_format+0x718> <== NOT EXECUTED
printf (", blocks");
/*
* Open the block bitmap using the new buffer.
*/
rc = rtems_rfs_bitmap_open (&bitmap, fs, &handle, group_size,
3c224: e1a0000a mov r0, sl <== NOT EXECUTED
3c228: e1a01004 mov r1, r4 <== NOT EXECUTED
3c22c: e28d20d4 add r2, sp, #212 ; 0xd4 <== NOT EXECUTED
3c230: e1a03006 mov r3, r6 <== NOT EXECUTED
3c234: e58d5000 str r5, [sp] <== NOT EXECUTED
3c238: eb001852 bl 42388 <rtems_rfs_bitmap_open> <== NOT EXECUTED
group_base + RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
if (rc > 0)
3c23c: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3c240: da00000f ble 3c284 <rtems_rfs_format+0x6ac> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3c244: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c248: e1a00004 mov r0, r4 <== NOT EXECUTED
3c24c: ebfff5b6 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3c250: e3a03000 mov r3, #0 <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
printf ("\nrtems-rfs: write-group: group %3d: open block bitmap failed: %d: %s\n",
3c254: e1a0000b mov r0, fp <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3c258: e58d30dc str r3, [sp, #220] ; 0xdc <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3c25c: e5cd30d4 strb r3, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3c260: e58d30d8 str r3, [sp, #216] ; 0xd8 <== NOT EXECUTED
3c264: eb0034d2 bl 495b4 <strerror> <== NOT EXECUTED
3c268: e1a01009 mov r1, r9 <== NOT EXECUTED
3c26c: e1a03000 mov r3, r0 <== NOT EXECUTED
3c270: e1a0200b mov r2, fp <== NOT EXECUTED
3c274: e59f0660 ldr r0, [pc, #1632] ; 3c8dc <rtems_rfs_format+0xd04><== NOT EXECUTED
3c278: eb002cba bl 47568 <printf> <== NOT EXECUTED
3c27c: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c280: eafffef2 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
3c284: e59d30dc ldr r3, [sp, #220] ; 0xdc <== NOT EXECUTED
3c288: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3c28c: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
3c290: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
3c294: eb00288c bl 464cc <memset> <== NOT EXECUTED
/*
* Clear the bitmap.
*/
rc = rtems_rfs_bitmap_map_clear_all (&bitmap);
3c298: e1a0000a mov r0, sl <== NOT EXECUTED
3c29c: eb00184b bl 423d0 <rtems_rfs_bitmap_map_clear_all> <== NOT EXECUTED
if (rc > 0)
3c2a0: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3c2a4: da000030 ble 3c36c <rtems_rfs_format+0x794> <== NOT EXECUTED
{
rtems_rfs_bitmap_close (&bitmap);
3c2a8: e1a0000a mov r0, sl <== NOT EXECUTED
3c2ac: eb0017eb bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3c2b0: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c2b4: e1a00004 mov r0, r4 <== NOT EXECUTED
3c2b8: ebfff59b bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3c2bc: e3a03000 mov r3, #0 <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle);
printf ("\nrtems-rfs: write-group: group %3d: block bitmap clear all failed: %d: %s\n",
3c2c0: e1a0000b mov r0, fp <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3c2c4: e58d30dc str r3, [sp, #220] ; 0xdc <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3c2c8: e5cd30d4 strb r3, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3c2cc: e58d30d8 str r3, [sp, #216] ; 0xd8 <== NOT EXECUTED
3c2d0: eb0034b7 bl 495b4 <strerror> <== NOT EXECUTED
3c2d4: e1a01009 mov r1, r9 <== NOT EXECUTED
3c2d8: e1a03000 mov r3, r0 <== NOT EXECUTED
3c2dc: e1a0200b mov r2, fp <== NOT EXECUTED
3c2e0: e59f05f8 ldr r0, [pc, #1528] ; 3c8e0 <rtems_rfs_format+0xd08><== NOT EXECUTED
3c2e4: eb002c9f bl 47568 <printf> <== NOT EXECUTED
3c2e8: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c2ec: eafffed7 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
*/
if ((group_base + group_size) > rtems_rfs_fs_blocks (fs))
group_size = rtems_rfs_fs_blocks (fs) - group_base;
if (verbose)
printf ("\rrtems-rfs: format: group %3d: base = %" PRId32 ", size = %zd",
3c2f0: e1a02005 mov r2, r5 <== NOT EXECUTED
3c2f4: e1a03006 mov r3, r6 <== NOT EXECUTED
3c2f8: e1a01009 mov r1, r9 <== NOT EXECUTED
3c2fc: e59f05e0 ldr r0, [pc, #1504] ; 3c8e4 <rtems_rfs_format+0xd0c><== NOT EXECUTED
3c300: eb002c98 bl 47568 <printf> <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
handle->bnum = 0;
3c304: e3a03000 mov r3, #0 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3c308: e3a02000 mov r2, #0 <== NOT EXECUTED
rc, strerror (rc));
return false;
}
if (verbose)
printf (", blocks");
3c30c: e59f05d4 ldr r0, [pc, #1492] ; 3c8e8 <rtems_rfs_format+0xd10><== NOT EXECUTED
3c310: e5cd20d4 strb r2, [sp, #212] ; 0xd4 <== NOT EXECUTED
handle->bnum = 0;
3c314: e58d30d8 str r3, [sp, #216] ; 0xd8 <== NOT EXECUTED
handle->buffer = NULL;
3c318: e58d30dc str r3, [sp, #220] ; 0xdc <== NOT EXECUTED
3c31c: eb002c91 bl 47568 <printf> <== NOT EXECUTED
3c320: eaffffbf b 3c224 <rtems_rfs_format+0x64c> <== NOT EXECUTED
{
printf ("rtems-rfs: format: superblock write failed\n");
return -1;
}
for (group = 0; group < fs.group_count; group++)
3c324: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3c328: e2899001 add r9, r9, #1 <== NOT EXECUTED
3c32c: e1530009 cmp r3, r9 <== NOT EXECUTED
3c330: da000047 ble 3c454 <rtems_rfs_format+0x87c> <== NOT EXECUTED
size_t group_size;
int blocks;
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
3c334: e59d6038 ldr r6, [sp, #56] ; 0x38 <== NOT EXECUTED
3c338: e0050996 mul r5, r6, r9 <== NOT EXECUTED
if (group_base > rtems_rfs_fs_blocks (fs))
3c33c: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
size_t group_size;
int blocks;
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
3c340: e2855001 add r5, r5, #1 <== NOT EXECUTED
return -1;
}
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
3c344: e5d71014 ldrb r1, [r7, #20] <== NOT EXECUTED
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
if (group_base > rtems_rfs_fs_blocks (fs))
3c348: e1550003 cmp r5, r3 <== NOT EXECUTED
return -1;
}
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
3c34c: e58d1004 str r1, [sp, #4] <== NOT EXECUTED
3c350: e5d78015 ldrb r8, [r7, #21] <== NOT EXECUTED
int b;
int rc;
group_base = rtems_rfs_fs_block (fs, group, 0);
if (group_base > rtems_rfs_fs_blocks (fs))
3c354: 9affffaa bls 3c204 <rtems_rfs_format+0x62c> <== NOT EXECUTED
{
printf ("rtems-rfs: write-group: group %d base beyond disk limit\n",
3c358: e1a01009 mov r1, r9 <== NOT EXECUTED
3c35c: e59f0588 ldr r0, [pc, #1416] ; 3c8ec <rtems_rfs_format+0xd14><== NOT EXECUTED
3c360: eb002c80 bl 47568 <printf> <== NOT EXECUTED
3c364: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c368: eafffeb8 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
}
/*
* Forced allocation of the block bitmap.
*/
rtems_rfs_bitmap_map_set (&bitmap, RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
3c36c: e3a01000 mov r1, #0 <== NOT EXECUTED
3c370: e1a0000a mov r0, sl <== NOT EXECUTED
3c374: eb0018a3 bl 42608 <rtems_rfs_bitmap_map_set> <== NOT EXECUTED
/*
* Forced allocation of the inode bitmap.
*/
rtems_rfs_bitmap_map_set (&bitmap, RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
3c378: e3a01001 mov r1, #1 <== NOT EXECUTED
3c37c: e1a0000a mov r0, sl <== NOT EXECUTED
3c380: eb0018a0 bl 42608 <rtems_rfs_bitmap_map_set> <== NOT EXECUTED
/*
* Determine the number of inodes blocks in the group.
*/
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
3c384: e59d003c ldr r0, [sp, #60] ; 0x3c <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3c388: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_rfs_bitmap_map_set (&bitmap, RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
/*
* Determine the number of inodes blocks in the group.
*/
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
3c38c: e59d1040 ldr r1, [sp, #64] ; 0x40 <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3c390: 1a000028 bne 3c438 <rtems_rfs_format+0x860> <== NOT EXECUTED
3c394: e3a0c001 mov ip, #1 <== NOT EXECUTED
3c398: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
3c39c: e58d8010 str r8, [sp, #16] <== NOT EXECUTED
3c3a0: e59d800c ldr r8, [sp, #12] <== NOT EXECUTED
3c3a4: e3a0b000 mov fp, #0 <== NOT EXECUTED
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
3c3a8: e28b1002 add r1, fp, #2 <== NOT EXECUTED
3c3ac: e1a0000a mov r0, sl <== NOT EXECUTED
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
3c3b0: e28bb001 add fp, fp, #1 <== NOT EXECUTED
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
3c3b4: eb001893 bl 42608 <rtems_rfs_bitmap_map_set> <== NOT EXECUTED
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
3c3b8: e15b0008 cmp fp, r8 <== NOT EXECUTED
3c3bc: bafffff9 blt 3c3a8 <rtems_rfs_format+0x7d0> <== NOT EXECUTED
3c3c0: e59d8010 ldr r8, [sp, #16] <== NOT EXECUTED
rtems_rfs_bitmap_map_set (&bitmap, b + RTEMS_RFS_GROUP_INODE_BLOCK);
/*
* Close the block bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
3c3c4: e1a0000a mov r0, sl <== NOT EXECUTED
3c3c8: eb0017a4 bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
if (rc > 0)
3c3cc: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3c3d0: ca00003f bgt 3c4d4 <rtems_rfs_format+0x8fc> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close block bitmap failed: %d: %s\n",
group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
3c3d4: e3a01001 mov r1, #1 <== NOT EXECUTED
if (verbose)
3c3d8: e3580000 cmp r8, #0 <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close block bitmap failed: %d: %s\n",
group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
3c3dc: e5cd10d4 strb r1, [sp, #212] ; 0xd4 <== NOT EXECUTED
if (verbose)
3c3e0: 1a00005e bne 3c560 <rtems_rfs_format+0x988> <== NOT EXECUTED
printf (", inodes");
/*
* Open the inode bitmap using the old buffer. Should release any changes.
*/
rc = rtems_rfs_bitmap_open (&bitmap, fs, &handle, group_size,
3c3e4: e1a03006 mov r3, r6 <== NOT EXECUTED
3c3e8: e285c001 add ip, r5, #1 <== NOT EXECUTED
3c3ec: e1a0000a mov r0, sl <== NOT EXECUTED
3c3f0: e1a01004 mov r1, r4 <== NOT EXECUTED
3c3f4: e28d20d4 add r2, sp, #212 ; 0xd4 <== NOT EXECUTED
3c3f8: e58dc000 str ip, [sp] <== NOT EXECUTED
3c3fc: eb0017e1 bl 42388 <rtems_rfs_bitmap_open> <== NOT EXECUTED
group_base + RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
if (rc > 0)
3c400: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c404: da00003e ble 3c504 <rtems_rfs_format+0x92c> <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
3c408: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c40c: e1a00004 mov r0, r4 <== NOT EXECUTED
3c410: ebfffde8 bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: open inode bitmap failed: %d: %s\n",
3c414: e1a00006 mov r0, r6 <== NOT EXECUTED
3c418: eb003465 bl 495b4 <strerror> <== NOT EXECUTED
3c41c: e1a01009 mov r1, r9 <== NOT EXECUTED
3c420: e1a03000 mov r3, r0 <== NOT EXECUTED
3c424: e1a02006 mov r2, r6 <== NOT EXECUTED
3c428: e59f04c0 ldr r0, [pc, #1216] ; 3c8f0 <rtems_rfs_format+0xd18><== NOT EXECUTED
3c42c: eb002c4d bl 47568 <printf> <== NOT EXECUTED
3c430: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c434: eafffe85 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
return 1;
return ((dividend - 1) / divisor) + 1;
3c438: e2400001 sub r0, r0, #1 <== NOT EXECUTED
3c43c: eb007aa9 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3c440: e2800001 add r0, r0, #1 <== NOT EXECUTED
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
3c444: e3500000 cmp r0, #0 <== NOT EXECUTED
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
return 1;
return ((dividend - 1) / divisor) + 1;
3c448: e58d000c str r0, [sp, #12] <== NOT EXECUTED
blocks = rtems_rfs_rup_quotient (fs->group_inodes, fs->inodes_per_block);
/*
* Forced allocation of the inode blocks which follow the block bitmap.
*/
for (b = 0; b < blocks; b++)
3c44c: caffffd2 bgt 3c39c <rtems_rfs_format+0x7c4> <== NOT EXECUTED
3c450: eaffffdb b 3c3c4 <rtems_rfs_format+0x7ec> <== NOT EXECUTED
for (group = 0; group < fs.group_count; group++)
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
return -1;
if (config->verbose)
3c454: e5d73015 ldrb r3, [r7, #21] <== NOT EXECUTED
3c458: e3530000 cmp r3, #0 <== NOT EXECUTED
3c45c: 1a000051 bne 3c5a8 <rtems_rfs_format+0x9d0> <== NOT EXECUTED
printf ("\n");
rc = rtems_rfs_buffer_close (&fs);
3c460: e1a00004 mov r0, r4 <== NOT EXECUTED
3c464: ebfff50f bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
if (rc > 0)
3c468: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3c46c: ca00009f bgt 3c6f0 <rtems_rfs_format+0xb18> <== NOT EXECUTED
int rc;
/*
* External API so returns -1.
*/
rc = rtems_rfs_fs_open (name, NULL,
3c470: e3a01000 mov r1, #0 <== NOT EXECUTED
3c474: e28dc0e4 add ip, sp, #228 ; 0xe4 <== NOT EXECUTED
3c478: e59d0008 ldr r0, [sp, #8] <== NOT EXECUTED
3c47c: e3a02006 mov r2, #6 <== NOT EXECUTED
3c480: e1a03001 mov r3, r1 <== NOT EXECUTED
3c484: e58dc000 str ip, [sp] <== NOT EXECUTED
3c488: ebfffc6d bl 3b644 <rtems_rfs_fs_open> <== NOT EXECUTED
RTEMS_RFS_FS_FORCE_OPEN | RTEMS_RFS_FS_NO_LOCAL_CACHE,
0, &fs);
if (rc < 0)
3c48c: e3500000 cmp r0, #0 <== NOT EXECUTED
3c490: ba0000e4 blt 3c828 <rtems_rfs_format+0xc50> <== NOT EXECUTED
printf ("rtems-rfs: format: file system open failed: %d: %s\n",
errno, strerror (errno));
return -1;
}
rc = rtems_rfs_inode_alloc (fs, RTEMS_RFS_ROOT_INO, &ino);
3c494: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c498: e3a01001 mov r1, #1 <== NOT EXECUTED
3c49c: e28d20e0 add r2, sp, #224 ; 0xe0 <== NOT EXECUTED
3c4a0: eb0003c9 bl 3d3cc <rtems_rfs_inode_alloc> <== NOT EXECUTED
if (rc > 0)
3c4a4: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c4a8: ca00002f bgt 3c56c <rtems_rfs_format+0x994> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_fs_close (fs);
return rc;
}
if (ino != RTEMS_RFS_ROOT_INO)
3c4ac: e59d40e0 ldr r4, [sp, #224] ; 0xe0 <== NOT EXECUTED
3c4b0: e3540001 cmp r4, #1 <== NOT EXECUTED
3c4b4: 0a000048 beq 3c5dc <rtems_rfs_format+0xa04> <== NOT EXECUTED
{
printf ("rtems-rfs: format: allocated inode not root ino: %" PRId32 "\n", ino);
3c4b8: e1a01004 mov r1, r4 <== NOT EXECUTED
3c4bc: e59f0430 ldr r0, [pc, #1072] ; 3c8f4 <rtems_rfs_format+0xd1c><== NOT EXECUTED
3c4c0: eb002c28 bl 47568 <printf> <== NOT EXECUTED
rtems_rfs_fs_close (fs);
3c4c4: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c4c8: ebfffc3f bl 3b5cc <rtems_rfs_fs_close> <== NOT EXECUTED
3c4cc: e3a00000 mov r0, #0 <== NOT EXECUTED
3c4d0: eafffe5e b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
* Close the block bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &handle);
3c4d4: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c4d8: e1a00004 mov r0, r4 <== NOT EXECUTED
3c4dc: ebfffdb5 bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close block bitmap failed: %d: %s\n",
3c4e0: e1a0000b mov r0, fp <== NOT EXECUTED
3c4e4: eb003432 bl 495b4 <strerror> <== NOT EXECUTED
3c4e8: e1a01009 mov r1, r9 <== NOT EXECUTED
3c4ec: e1a03000 mov r3, r0 <== NOT EXECUTED
3c4f0: e1a0200b mov r2, fp <== NOT EXECUTED
3c4f4: e59f03fc ldr r0, [pc, #1020] ; 3c8f8 <rtems_rfs_format+0xd20><== NOT EXECUTED
3c4f8: eb002c1a bl 47568 <printf> <== NOT EXECUTED
3c4fc: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c500: eafffe52 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0x00, rtems_rfs_fs_block_size (fs));
3c504: e59d30dc ldr r3, [sp, #220] ; 0xdc <== NOT EXECUTED
3c508: e3a01000 mov r1, #0 <== NOT EXECUTED
3c50c: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
3c510: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
3c514: eb0027ec bl 464cc <memset> <== NOT EXECUTED
/*
* Clear the inode bitmap.
*/
rc = rtems_rfs_bitmap_map_clear_all (&bitmap);
3c518: e1a0000a mov r0, sl <== NOT EXECUTED
3c51c: eb0017ab bl 423d0 <rtems_rfs_bitmap_map_clear_all> <== NOT EXECUTED
if (rc > 0)
3c520: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c524: da000040 ble 3c62c <rtems_rfs_format+0xa54> <== NOT EXECUTED
{
rtems_rfs_bitmap_close (&bitmap);
3c528: e1a0000a mov r0, sl <== NOT EXECUTED
3c52c: eb00174b bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
rtems_rfs_buffer_handle_close (fs, &handle);
3c530: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c534: e1a00004 mov r0, r4 <== NOT EXECUTED
3c538: ebfffd9e bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: inode bitmap" \
3c53c: e1a00006 mov r0, r6 <== NOT EXECUTED
3c540: eb00341b bl 495b4 <strerror> <== NOT EXECUTED
3c544: e1a01009 mov r1, r9 <== NOT EXECUTED
3c548: e1a03000 mov r3, r0 <== NOT EXECUTED
3c54c: e1a02006 mov r2, r6 <== NOT EXECUTED
3c550: e59f03a4 ldr r0, [pc, #932] ; 3c8fc <rtems_rfs_format+0xd24><== NOT EXECUTED
3c554: eb002c03 bl 47568 <printf> <== NOT EXECUTED
3c558: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c55c: eafffe3b b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
}
rtems_rfs_buffer_mark_dirty (&handle);
if (verbose)
printf (", inodes");
3c560: e59f0398 ldr r0, [pc, #920] ; 3c900 <rtems_rfs_format+0xd28><== NOT EXECUTED
3c564: eb002bff bl 47568 <printf> <== NOT EXECUTED
3c568: eaffff9d b 3c3e4 <rtems_rfs_format+0x80c> <== NOT EXECUTED
}
rc = rtems_rfs_inode_alloc (fs, RTEMS_RFS_ROOT_INO, &ino);
if (rc > 0)
{
printf ("rtems-rfs: format: inode allocation failed: %d: %s\n",
3c56c: eb003410 bl 495b4 <strerror> <== NOT EXECUTED
3c570: e1a01006 mov r1, r6 <== NOT EXECUTED
3c574: e1a02000 mov r2, r0 <== NOT EXECUTED
3c578: e59f0384 ldr r0, [pc, #900] ; 3c904 <rtems_rfs_format+0xd2c><== NOT EXECUTED
3c57c: eb002bf9 bl 47568 <printf> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_fs_close (fs);
3c580: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c584: ebfffc10 bl 3b5cc <rtems_rfs_fs_close> <== NOT EXECUTED
}
rc = rtems_rfs_write_root_dir (name);
if (rc > 0)
{
printf ("rtems-rfs: format: writing root dir failed: %d: %s\n",
3c588: e1a00006 mov r0, r6 <== NOT EXECUTED
3c58c: eb003408 bl 495b4 <strerror> <== NOT EXECUTED
3c590: e1a01006 mov r1, r6 <== NOT EXECUTED
3c594: e1a02000 mov r2, r0 <== NOT EXECUTED
3c598: e59f0368 ldr r0, [pc, #872] ; 3c908 <rtems_rfs_format+0xd30><== NOT EXECUTED
3c59c: eb002bf1 bl 47568 <printf> <== NOT EXECUTED
3c5a0: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc, strerror (rc));
return -1;
3c5a4: eafffe29 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
if (!rtems_rfs_write_group (&fs, group,
config->initialise_inodes, config->verbose))
return -1;
if (config->verbose)
printf ("\n");
3c5a8: e3a0000a mov r0, #10 <== NOT EXECUTED
3c5ac: eb002c62 bl 4773c <putchar> <== NOT EXECUTED
3c5b0: eaffffaa b 3c460 <rtems_rfs_format+0x888> <== NOT EXECUTED
}
rc = rtems_rfs_buffer_setblksize (&fs, rtems_rfs_fs_block_size (&fs));
if (rc > 0)
{
printf ("rtems-rfs: format: setting block size failed: %d: %s\n",
3c5b4: eb0033fe bl 495b4 <strerror> <== NOT EXECUTED
3c5b8: e1a01005 mov r1, r5 <== NOT EXECUTED
3c5bc: e1a02000 mov r2, r0 <== NOT EXECUTED
3c5c0: e59f0344 ldr r0, [pc, #836] ; 3c90c <rtems_rfs_format+0xd34><== NOT EXECUTED
3c5c4: eb002be7 bl 47568 <printf> <== NOT EXECUTED
3c5c8: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc, strerror (rc));
return -1;
3c5cc: eafffe1f b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
if (total_size >= GIGS (1))
{
uint32_t gigs = (total_size + GIGS (1)) / GIGS (1);
int b;
for (b = 31; b > 0; b--)
3c5d0: e3a05001 mov r5, #1 <== NOT EXECUTED
if ((gigs & (1 << b)) != 0)
break;
fs->block_size = 1 << b;
3c5d4: e58d501c str r5, [sp, #28] <== NOT EXECUTED
3c5d8: eafffede b 3c158 <rtems_rfs_format+0x580> <== NOT EXECUTED
printf ("rtems-rfs: format: allocated inode not root ino: %" PRId32 "\n", ino);
rtems_rfs_fs_close (fs);
return rc;
}
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3c5dc: e28d5094 add r5, sp, #148 ; 0x94 <== NOT EXECUTED
3c5e0: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c5e4: e1a01004 mov r1, r4 <== NOT EXECUTED
3c5e8: e1a02005 mov r2, r5 <== NOT EXECUTED
3c5ec: e1a03004 mov r3, r4 <== NOT EXECUTED
3c5f0: eb00031b bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3c5f4: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c5f8: da00004f ble 3c73c <rtems_rfs_format+0xb64> <== NOT EXECUTED
{
printf ("rtems-rfs: format: inode open failed: %d: %s\n",
3c5fc: eb0033ec bl 495b4 <strerror> <== NOT EXECUTED
3c600: e1a01006 mov r1, r6 <== NOT EXECUTED
3c604: e1a02000 mov r2, r0 <== NOT EXECUTED
3c608: e59f0300 ldr r0, [pc, #768] ; 3c910 <rtems_rfs_format+0xd38><== NOT EXECUTED
3c60c: eb002bd5 bl 47568 <printf> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_group_bitmap_free (fs, true, ino);
3c610: e1a01004 mov r1, r4 <== NOT EXECUTED
3c614: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c618: e59d20e0 ldr r2, [sp, #224] ; 0xe0 <== NOT EXECUTED
3c61c: eb000120 bl 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
rtems_rfs_fs_close (fs);
3c620: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c624: ebfffbe8 bl 3b5cc <rtems_rfs_fs_close> <== NOT EXECUTED
3c628: eaffffd6 b 3c588 <rtems_rfs_format+0x9b0> <== NOT EXECUTED
}
/*
* Close the inode bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
3c62c: e1a0000a mov r0, sl <== NOT EXECUTED
3c630: eb00170a bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
if (rc > 0)
3c634: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c638: ca000033 bgt 3c70c <rtems_rfs_format+0xb34> <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle);
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
3c63c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close inode" \
" bitmap failed: %d: %s\n", group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
3c640: e3a03001 mov r3, #1 <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
3c644: e3520000 cmp r2, #0 <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close inode" \
" bitmap failed: %d: %s\n", group, rc, strerror (rc));
return false;
}
rtems_rfs_buffer_mark_dirty (&handle);
3c648: e5cd30d4 strb r3, [sp, #212] ; 0xd4 <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
3c64c: 0a000069 beq 3c7f8 <rtems_rfs_format+0xc20> <== NOT EXECUTED
{
for (b = 0; b < blocks; b++)
3c650: e59dc00c ldr ip, [sp, #12] <== NOT EXECUTED
3c654: e35c0000 cmp ip, #0 <== NOT EXECUTED
3c658: da000066 ble 3c7f8 <rtems_rfs_format+0xc20> <== NOT EXECUTED
3c65c: e2856002 add r6, r5, #2 <== NOT EXECUTED
3c660: e1a08007 mov r8, r7 <== NOT EXECUTED
3c664: e3a05000 mov r5, #0 <== NOT EXECUTED
3c668: e1a0700c mov r7, ip <== NOT EXECUTED
3c66c: ea000008 b 3c694 <rtems_rfs_format+0xabc> <== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
3c670: e59d30dc ldr r3, [sp, #220] ; 0xdc <== NOT EXECUTED
3c674: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
3c678: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
3c67c: eb002792 bl 464cc <memset> <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle);
3c680: e3a01001 mov r1, #1 <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
{
for (b = 0; b < blocks; b++)
3c684: e1550007 cmp r5, r7 <== NOT EXECUTED
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
rtems_rfs_buffer_mark_dirty (&handle);
3c688: e5cd10d4 strb r1, [sp, #212] ; 0xd4 <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
{
for (b = 0; b < blocks; b++)
3c68c: e2866001 add r6, r6, #1 <== NOT EXECUTED
3c690: aa000057 bge 3c7f4 <rtems_rfs_format+0xc1c> <== NOT EXECUTED
{
rc = rtems_rfs_buffer_handle_request (fs, &handle,
3c694: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c698: e1a02006 mov r2, r6 <== NOT EXECUTED
3c69c: e3a03000 mov r3, #0 <== NOT EXECUTED
3c6a0: e1a00004 mov r0, r4 <== NOT EXECUTED
3c6a4: ebfff4ea bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
group_base + b + RTEMS_RFS_GROUP_INODE_BLOCK,
false);
if (rc > 0)
3c6a8: e3500000 cmp r0, #0 <== NOT EXECUTED
/*
* Initialise the inode tables if required to do so.
*/
if (initialise_inodes)
{
for (b = 0; b < blocks; b++)
3c6ac: e2855001 add r5, r5, #1 <== NOT EXECUTED
/*
* Force the whole buffer to a known state. The bit map may not occupy the
* whole block.
*/
memset (rtems_rfs_buffer_data (&handle), 0xff, rtems_rfs_fs_block_size (fs));
3c6b0: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
for (b = 0; b < blocks; b++)
{
rc = rtems_rfs_buffer_handle_request (fs, &handle,
group_base + b + RTEMS_RFS_GROUP_INODE_BLOCK,
false);
if (rc > 0)
3c6b4: daffffed ble 3c670 <rtems_rfs_format+0xa98> <== NOT EXECUTED
3c6b8: e1a08000 mov r8, r0 <== NOT EXECUTED
{
rtems_rfs_buffer_handle_close (fs, &handle);
3c6bc: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c6c0: e1a00004 mov r0, r4 <== NOT EXECUTED
3c6c4: ebfffd3b bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: block %" PRId32 " request failed: %d: %s\n",
3c6c8: e1a00008 mov r0, r8 <== NOT EXECUTED
3c6cc: eb0033b8 bl 495b4 <strerror> <== NOT EXECUTED
3c6d0: e1a01009 mov r1, r9 <== NOT EXECUTED
3c6d4: e58d0000 str r0, [sp] <== NOT EXECUTED
3c6d8: e1a02006 mov r2, r6 <== NOT EXECUTED
3c6dc: e1a03008 mov r3, r8 <== NOT EXECUTED
3c6e0: e59f022c ldr r0, [pc, #556] ; 3c914 <rtems_rfs_format+0xd3c><== NOT EXECUTED
3c6e4: eb002b9f bl 47568 <printf> <== NOT EXECUTED
3c6e8: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c6ec: eafffdd7 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
printf ("\n");
rc = rtems_rfs_buffer_close (&fs);
if (rc > 0)
{
printf ("rtems-rfs: format: buffer close failed: %d: %s\n",
3c6f0: eb0033af bl 495b4 <strerror> <== NOT EXECUTED
3c6f4: e1a01004 mov r1, r4 <== NOT EXECUTED
3c6f8: e1a02000 mov r2, r0 <== NOT EXECUTED
3c6fc: e59f0214 ldr r0, [pc, #532] ; 3c918 <rtems_rfs_format+0xd40><== NOT EXECUTED
3c700: eb002b98 bl 47568 <printf> <== NOT EXECUTED
3c704: e3e00000 mvn r0, #0 <== NOT EXECUTED
rc, strerror (rc));
return -1;
3c708: eafffdd0 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
* Close the inode bitmap.
*/
rc = rtems_rfs_bitmap_close (&bitmap);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &handle);
3c70c: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c710: e1a00004 mov r0, r4 <== NOT EXECUTED
3c714: ebfffd27 bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
printf ("\nrtems-rfs: write-group: group %3d: close inode" \
3c718: e1a00006 mov r0, r6 <== NOT EXECUTED
3c71c: eb0033a4 bl 495b4 <strerror> <== NOT EXECUTED
3c720: e1a01009 mov r1, r9 <== NOT EXECUTED
3c724: e1a03000 mov r3, r0 <== NOT EXECUTED
3c728: e1a02006 mov r2, r6 <== NOT EXECUTED
3c72c: e59f01e8 ldr r0, [pc, #488] ; 3c91c <rtems_rfs_format+0xd44><== NOT EXECUTED
3c730: eb002b8c bl 47568 <printf> <== NOT EXECUTED
3c734: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c738: eafffdc4 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
rtems_rfs_group_bitmap_free (fs, true, ino);
rtems_rfs_fs_close (fs);
return rc;
}
rc = rtems_rfs_inode_initialise (&inode, 0,
3c73c: e3a0c000 mov ip, #0 <== NOT EXECUTED
3c740: e3a02c41 mov r2, #16640 ; 0x4100 <== NOT EXECUTED
3c744: e1a0100c mov r1, ip <== NOT EXECUTED
3c748: e28220c9 add r2, r2, #201 ; 0xc9 <== NOT EXECUTED
3c74c: e1a00005 mov r0, r5 <== NOT EXECUTED
3c750: e1a0300c mov r3, ip <== NOT EXECUTED
3c754: e58dc000 str ip, [sp] <== NOT EXECUTED
3c758: eb000217 bl 3cfbc <rtems_rfs_inode_initialise> <== NOT EXECUTED
(RTEMS_RFS_S_IFDIR | RTEMS_RFS_S_IRWXU |
RTEMS_RFS_S_IXGRP | RTEMS_RFS_S_IXOTH),
0, 0);
if (rc > 0)
3c75c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3c760: da000004 ble 3c778 <rtems_rfs_format+0xba0> <== NOT EXECUTED
printf ("rtems-rfs: format: inode initialise failed: %d: %s\n",
3c764: eb003392 bl 495b4 <strerror> <== NOT EXECUTED
3c768: e1a01004 mov r1, r4 <== NOT EXECUTED
3c76c: e1a02000 mov r2, r0 <== NOT EXECUTED
3c770: e59f01a8 ldr r0, [pc, #424] ; 3c920 <rtems_rfs_format+0xd48><== NOT EXECUTED
3c774: eb002b7b bl 47568 <printf> <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, ino);
3c778: e59dc0e0 ldr ip, [sp, #224] ; 0xe0 <== NOT EXECUTED
3c77c: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c780: e1a01005 mov r1, r5 <== NOT EXECUTED
3c784: e59f2198 ldr r2, [pc, #408] ; 3c924 <rtems_rfs_format+0xd4c><== NOT EXECUTED
3c788: e3a03001 mov r3, #1 <== NOT EXECUTED
3c78c: e58dc000 str ip, [sp] <== NOT EXECUTED
3c790: ebfff6bc bl 3a288 <rtems_rfs_dir_add_entry> <== NOT EXECUTED
if (rc > 0)
3c794: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3c798: da000004 ble 3c7b0 <rtems_rfs_format+0xbd8> <== NOT EXECUTED
printf ("rtems-rfs: format: directory add failed: %d: %s\n",
3c79c: eb003384 bl 495b4 <strerror> <== NOT EXECUTED
3c7a0: e1a01004 mov r1, r4 <== NOT EXECUTED
3c7a4: e1a02000 mov r2, r0 <== NOT EXECUTED
3c7a8: e59f0178 ldr r0, [pc, #376] ; 3c928 <rtems_rfs_format+0xd50><== NOT EXECUTED
3c7ac: eb002b6d bl 47568 <printf> <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_inode_close (fs, &inode);
3c7b0: e1a01005 mov r1, r5 <== NOT EXECUTED
3c7b4: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c7b8: eb000285 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3c7bc: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3c7c0: da000004 ble 3c7d8 <rtems_rfs_format+0xc00> <== NOT EXECUTED
printf ("rtems-rfs: format: inode close failed: %d: %s\n",
3c7c4: eb00337a bl 495b4 <strerror> <== NOT EXECUTED
3c7c8: e1a01004 mov r1, r4 <== NOT EXECUTED
3c7cc: e1a02000 mov r2, r0 <== NOT EXECUTED
3c7d0: e59f0154 ldr r0, [pc, #340] ; 3c92c <rtems_rfs_format+0xd54><== NOT EXECUTED
3c7d4: eb002b63 bl 47568 <printf> <== NOT EXECUTED
rc, strerror (rc));
rc = rtems_rfs_fs_close (fs);
3c7d8: e59d00e4 ldr r0, [sp, #228] ; 0xe4 <== NOT EXECUTED
3c7dc: ebfffb7a bl 3b5cc <rtems_rfs_fs_close> <== NOT EXECUTED
if (rc < 0)
3c7e0: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3c7e4: ba00001a blt 3c854 <rtems_rfs_format+0xc7c> <== NOT EXECUTED
rc, strerror (rc));
return -1;
}
rc = rtems_rfs_write_root_dir (name);
if (rc > 0)
3c7e8: 01a00006 moveq r0, r6 <== NOT EXECUTED
3c7ec: 0afffd97 beq 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
3c7f0: eaffff64 b 3c588 <rtems_rfs_format+0x9b0> <== NOT EXECUTED
3c7f4: e1a07008 mov r7, r8 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle);
}
}
rc = rtems_rfs_buffer_handle_close (fs, &handle);
3c7f8: e1a00004 mov r0, r4 <== NOT EXECUTED
3c7fc: e28d10d4 add r1, sp, #212 ; 0xd4 <== NOT EXECUTED
3c800: ebfffcec bl 3bbb8 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
if (rc > 0)
3c804: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3c808: dafffec5 ble 3c324 <rtems_rfs_format+0x74c> <== NOT EXECUTED
{
printf ("\nrtems-rfs: write-group: buffer handle close failed: %d: %s\n",
3c80c: eb003368 bl 495b4 <strerror> <== NOT EXECUTED
3c810: e1a01005 mov r1, r5 <== NOT EXECUTED
3c814: e1a02000 mov r2, r0 <== NOT EXECUTED
3c818: e59f0110 ldr r0, [pc, #272] ; 3c930 <rtems_rfs_format+0xd58><== NOT EXECUTED
3c81c: eb002b51 bl 47568 <printf> <== NOT EXECUTED
3c820: e3e00000 mvn r0, #0 <== NOT EXECUTED
3c824: eafffd89 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
rc = rtems_rfs_fs_open (name, NULL,
RTEMS_RFS_FS_FORCE_OPEN | RTEMS_RFS_FS_NO_LOCAL_CACHE,
0, &fs);
if (rc < 0)
{
printf ("rtems-rfs: format: file system open failed: %d: %s\n",
3c828: eb0019f0 bl 42ff0 <__errno> <== NOT EXECUTED
3c82c: e5904000 ldr r4, [r0] <== NOT EXECUTED
3c830: eb0019ee bl 42ff0 <__errno> <== NOT EXECUTED
3c834: e5900000 ldr r0, [r0] <== NOT EXECUTED
3c838: eb00335d bl 495b4 <strerror> <== NOT EXECUTED
3c83c: e1a01004 mov r1, r4 <== NOT EXECUTED
3c840: e1a02000 mov r2, r0 <== NOT EXECUTED
3c844: e59f00e8 ldr r0, [pc, #232] ; 3c934 <rtems_rfs_format+0xd5c><== NOT EXECUTED
3c848: eb002b46 bl 47568 <printf> <== NOT EXECUTED
3c84c: e3a00000 mov r0, #0 <== NOT EXECUTED
3c850: eafffd7e b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
printf ("rtems-rfs: format: inode close failed: %d: %s\n",
rc, strerror (rc));
rc = rtems_rfs_fs_close (fs);
if (rc < 0)
printf ("rtems-rfs: format: file system close failed: %d: %s\n",
3c854: eb0019e5 bl 42ff0 <__errno> <== NOT EXECUTED
3c858: e5904000 ldr r4, [r0] <== NOT EXECUTED
3c85c: eb0019e3 bl 42ff0 <__errno> <== NOT EXECUTED
3c860: e5900000 ldr r0, [r0] <== NOT EXECUTED
3c864: eb003352 bl 495b4 <strerror> <== NOT EXECUTED
3c868: e1a01004 mov r1, r4 <== NOT EXECUTED
3c86c: e1a02000 mov r2, r0 <== NOT EXECUTED
3c870: e59f00c0 ldr r0, [pc, #192] ; 3c938 <rtems_rfs_format+0xd60><== NOT EXECUTED
3c874: eb002b3b bl 47568 <printf> <== NOT EXECUTED
3c878: e3a00000 mov r0, #0 <== NOT EXECUTED
3c87c: eafffd73 b 3be50 <rtems_rfs_format+0x278> <== NOT EXECUTED
0003b5cc <rtems_rfs_fs_close>:
int group;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
3b5cc: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
3b5d0: e3530000 cmp r3, #0 <== NOT EXECUTED
return 0;
}
int
rtems_rfs_fs_close (rtems_rfs_file_system* fs)
{
3b5d4: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
3b5d8: e1a04000 mov r4, r0 <== NOT EXECUTED
int group;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
3b5dc: da00000a ble 3b60c <rtems_rfs_fs_close+0x40> <== NOT EXECUTED
3b5e0: e3a05000 mov r5, #0 <== NOT EXECUTED
3b5e4: e1a06005 mov r6, r5 <== NOT EXECUTED
rtems_rfs_group_close (fs, &fs->groups[group]);
3b5e8: e594101c ldr r1, [r4, #28] <== NOT EXECUTED
3b5ec: e1a00004 mov r0, r4 <== NOT EXECUTED
3b5f0: e0811005 add r1, r1, r5 <== NOT EXECUTED
3b5f4: eb0005cc bl 3cd2c <rtems_rfs_group_close> <== NOT EXECUTED
int group;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_CLOSE))
printf ("rtems-rfs: close\n");
for (group = 0; group < fs->group_count; group++)
3b5f8: e5943020 ldr r3, [r4, #32] <== NOT EXECUTED
3b5fc: e2866001 add r6, r6, #1 <== NOT EXECUTED
3b600: e1530006 cmp r3, r6 <== NOT EXECUTED
3b604: e2855050 add r5, r5, #80 ; 0x50 <== NOT EXECUTED
3b608: cafffff6 bgt 3b5e8 <rtems_rfs_fs_close+0x1c> <== NOT EXECUTED
rtems_rfs_group_close (fs, &fs->groups[group]);
rtems_rfs_buffer_close (fs);
3b60c: e1a00004 mov r0, r4 <== NOT EXECUTED
3b610: ebfff8a4 bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
free (fs);
3b614: e1a00004 mov r0, r4 <== NOT EXECUTED
3b618: ebff31d4 bl 7d70 <free> <== NOT EXECUTED
return 0;
}
3b61c: e3a00000 mov r0, #0 <== NOT EXECUTED
3b620: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
0003b5a8 <rtems_rfs_fs_media_size>:
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
3b5a8: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
3b5ac: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
3b5b0: e593201c ldr r2, [r3, #28] <== NOT EXECUTED
return blocks * block_size;
}
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
3b5b4: e52d4004 push {r4} ; (str r4, [sp, #-4]!) <== NOT EXECUTED
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
3b5b8: e0843291 umull r3, r4, r1, r2 <== NOT EXECUTED
uint64_t media_block_size = (uint64_t) rtems_rfs_fs_media_block_size (fs);
return media_blocks * media_block_size;
}
3b5bc: e1a01004 mov r1, r4 <== NOT EXECUTED
3b5c0: e1a00003 mov r0, r3 <== NOT EXECUTED
3b5c4: e8bd0010 pop {r4} <== NOT EXECUTED
3b5c8: e12fff1e bx lr <== NOT EXECUTED
0003b644 <rtems_rfs_fs_open>:
rtems_rfs_fs_open (const char* name,
void* user,
uint32_t flags,
uint32_t max_held_buffers,
rtems_rfs_file_system** fs)
{
3b644: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3b648: e24dd03c sub sp, sp, #60 ; 0x3c <== NOT EXECUTED
3b64c: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: %s\n", name);
*fs = malloc (sizeof (rtems_rfs_file_system));
3b650: e3a00080 mov r0, #128 ; 0x80 <== NOT EXECUTED
rtems_rfs_fs_open (const char* name,
void* user,
uint32_t flags,
uint32_t max_held_buffers,
rtems_rfs_file_system** fs)
{
3b654: e59d5060 ldr r5, [sp, #96] ; 0x60 <== NOT EXECUTED
3b658: e1a07001 mov r7, r1 <== NOT EXECUTED
3b65c: e1a06002 mov r6, r2 <== NOT EXECUTED
3b660: e1a08003 mov r8, r3 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: %s\n", name);
*fs = malloc (sizeof (rtems_rfs_file_system));
3b664: ebff3385 bl 8480 <malloc> <== NOT EXECUTED
if (!*fs)
3b668: e3500000 cmp r0, #0 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: %s\n", name);
*fs = malloc (sizeof (rtems_rfs_file_system));
3b66c: e5850000 str r0, [r5] <== NOT EXECUTED
if (!*fs)
3b670: 0a0000c8 beq 3b998 <rtems_rfs_fs_open+0x354> <== NOT EXECUTED
printf ("rtems-rfs: open: no memory for file system data\n");
errno = ENOMEM;
return -1;
}
memset (*fs, 0, sizeof (rtems_rfs_file_system));
3b674: e3a01000 mov r1, #0 <== NOT EXECUTED
3b678: e3a02080 mov r2, #128 ; 0x80 <== NOT EXECUTED
3b67c: eb002b92 bl 464cc <memset> <== NOT EXECUTED
(*fs)->user = user;
3b680: e5951000 ldr r1, [r5] <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
3b684: e3a04000 mov r4, #0 <== NOT EXECUTED
the_chain->last = _Chain_Head(the_chain);
3b688: e2810060 add r0, r1, #96 ; 0x60 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b68c: e281b044 add fp, r1, #68 ; 0x44 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b690: e2819040 add r9, r1, #64 ; 0x40 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b694: e281a054 add sl, r1, #84 ; 0x54 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b698: e281e050 add lr, r1, #80 ; 0x50 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b69c: e281c064 add ip, r1, #100 ; 0x64 <== NOT EXECUTED
3b6a0: e2812074 add r2, r1, #116 ; 0x74 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b6a4: e2813070 add r3, r1, #112 ; 0x70 <== NOT EXECUTED
3b6a8: e5810068 str r0, [r1, #104] ; 0x68 <== NOT EXECUTED
(*fs)->max_held_buffers = max_held_buffers;
(*fs)->buffers_count = 0;
(*fs)->release_count = 0;
(*fs)->release_modified_count = 0;
(*fs)->flags = flags;
3b6ac: e5816000 str r6, [r1] <== NOT EXECUTED
return -1;
}
memset (*fs, 0, sizeof (rtems_rfs_file_system));
(*fs)->user = user;
3b6b0: e581707c str r7, [r1, #124] ; 0x7c <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b6b4: e581b040 str fp, [r1, #64] ; 0x40 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b6b8: e5819048 str r9, [r1, #72] ; 0x48 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b6bc: e581a050 str sl, [r1, #80] ; 0x50 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b6c0: e581e058 str lr, [r1, #88] ; 0x58 <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
3b6c4: e581c060 str ip, [r1, #96] ; 0x60 <== NOT EXECUTED
3b6c8: e5812070 str r2, [r1, #112] ; 0x70 <== NOT EXECUTED
the_chain->permanent_null = NULL;
the_chain->last = _Chain_Head(the_chain);
3b6cc: e5813078 str r3, [r1, #120] ; 0x78 <== NOT EXECUTED
rtems_chain_initialize_empty (&(*fs)->buffers);
rtems_chain_initialize_empty (&(*fs)->release);
rtems_chain_initialize_empty (&(*fs)->release_modified);
rtems_chain_initialize_empty (&(*fs)->file_shares);
(*fs)->max_held_buffers = max_held_buffers;
3b6d0: e581803c str r8, [r1, #60] ; 0x3c <== NOT EXECUTED
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(
Chain_Control *the_chain
)
{
the_chain->first = _Chain_Tail(the_chain);
the_chain->permanent_null = NULL;
3b6d4: e5814044 str r4, [r1, #68] ; 0x44 <== NOT EXECUTED
3b6d8: e5814054 str r4, [r1, #84] ; 0x54 <== NOT EXECUTED
3b6dc: e5814064 str r4, [r1, #100] ; 0x64 <== NOT EXECUTED
3b6e0: e5814074 str r4, [r1, #116] ; 0x74 <== NOT EXECUTED
(*fs)->buffers_count = 0;
3b6e4: e581404c str r4, [r1, #76] ; 0x4c <== NOT EXECUTED
(*fs)->release_count = 0;
3b6e8: e581405c str r4, [r1, #92] ; 0x5c <== NOT EXECUTED
(*fs)->release_modified_count = 0;
3b6ec: e581406c str r4, [r1, #108] ; 0x6c <== NOT EXECUTED
group_base = 0;
/*
* Open the buffer interface.
*/
rc = rtems_rfs_buffer_open (name, *fs);
3b6f0: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3b6f4: ebfff875 bl 398d0 <rtems_rfs_buffer_open> <== NOT EXECUTED
if (rc > 0)
3b6f8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3b6fc: ca00002b bgt 3b7b0 <rtems_rfs_fs_open+0x16c> <== NOT EXECUTED
rc, strerror (rc));
errno = rc;
return -1;
}
rc = rtems_rfs_fs_read_superblock (*fs);
3b700: e5956000 ldr r6, [r5] <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: handle open failed: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &handle, 0, true);
3b704: e28d7030 add r7, sp, #48 ; 0x30 <== NOT EXECUTED
3b708: e1a00006 mov r0, r6 <== NOT EXECUTED
3b70c: e1a01007 mov r1, r7 <== NOT EXECUTED
3b710: e1a02004 mov r2, r4 <== NOT EXECUTED
3b714: e3a03001 mov r3, #1 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3b718: e5cd4030 strb r4, [sp, #48] ; 0x30 <== NOT EXECUTED
handle->bnum = 0;
3b71c: e58d4034 str r4, [sp, #52] ; 0x34 <== NOT EXECUTED
handle->buffer = NULL;
3b720: e58d4038 str r4, [sp, #56] ; 0x38 <== NOT EXECUTED
3b724: ebfff8ca bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3b728: e250a000 subs sl, r0, #0 <== NOT EXECUTED
3b72c: da000008 ble 3b754 <rtems_rfs_fs_open+0x110> <== NOT EXECUTED
}
rc = rtems_rfs_fs_read_superblock (*fs);
if (rc > 0)
{
rtems_rfs_buffer_close (*fs);
3b730: e5950000 ldr r0, [r5] <== NOT EXECUTED
3b734: ebfff85b bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
free (*fs);
3b738: e5950000 ldr r0, [r5] <== NOT EXECUTED
3b73c: ebff318b bl 7d70 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: reading superblock: %d: %s\n",
rc, strerror (rc));
errno = rc;
3b740: eb001e2a bl 42ff0 <__errno> <== NOT EXECUTED
3b744: e580a000 str sl, [r0] <== NOT EXECUTED
3b748: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
}
errno = 0;
return 0;
}
3b74c: e28dd03c add sp, sp, #60 ; 0x3c <== NOT EXECUTED
3b750: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: request failed%d: %s\n",
rc, strerror (rc));
return rc;
}
sb = rtems_rfs_buffer_data (&handle);
3b754: e59d3038 ldr r3, [sp, #56] ; 0x38 <== NOT EXECUTED
3b758: e5933020 ldr r3, [r3, #32] <== NOT EXECUTED
#define read_sb(_o) rtems_rfs_read_u32 (sb + (_o))
if (read_sb (RTEMS_RFS_SB_OFFSET_MAGIC) != RTEMS_RFS_SB_MAGIC)
3b75c: e5d30000 ldrb r0, [r3] <== NOT EXECUTED
3b760: e5d31003 ldrb r1, [r3, #3] <== NOT EXECUTED
3b764: e5d32001 ldrb r2, [r3, #1] <== NOT EXECUTED
3b768: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
3b76c: e5d30002 ldrb r0, [r3, #2] <== NOT EXECUTED
3b770: e1811802 orr r1, r1, r2, lsl #16 <== NOT EXECUTED
3b774: e3a0234a mov r2, #671088641 ; 0x28000001 <== NOT EXECUTED
3b778: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
3b77c: e2822a92 add r2, r2, #598016 ; 0x92000 <== NOT EXECUTED
3b780: e1510002 cmp r1, r2 <== NOT EXECUTED
3b784: 0a00000f beq 3b7c8 <rtems_rfs_fs_open+0x184> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3b788: e1a00006 mov r0, r6 <== NOT EXECUTED
3b78c: e1a01007 mov r1, r7 <== NOT EXECUTED
3b790: ebfff865 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3b794: e3a0a005 mov sl, #5 <== NOT EXECUTED
3b798: e58d4038 str r4, [sp, #56] ; 0x38 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3b79c: e5cd4030 strb r4, [sp, #48] ; 0x30 <== NOT EXECUTED
handle->bnum = 0;
3b7a0: e58d4034 str r4, [sp, #52] ; 0x34 <== NOT EXECUTED
3b7a4: eaffffe1 b 3b730 <rtems_rfs_fs_open+0xec> <== NOT EXECUTED
}
rc = rtems_rfs_inode_open (*fs, RTEMS_RFS_ROOT_INO, &inode, true);
if (rc > 0)
{
rtems_rfs_buffer_close (*fs);
3b7a8: e5950000 ldr r0, [r5] <== NOT EXECUTED
3b7ac: ebfff83d bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
free (*fs);
3b7b0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3b7b4: ebff316d bl 7d70 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: reading root inode: %d: %s\n",
rc, strerror (rc));
errno = rc;
3b7b8: eb001e0c bl 42ff0 <__errno> <== NOT EXECUTED
3b7bc: e5806000 str r6, [r0] <== NOT EXECUTED
3b7c0: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
3b7c4: eaffffe0 b 3b74c <rtems_rfs_fs_open+0x108> <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock, bad magic\n");
rtems_rfs_buffer_handle_close (fs, &handle);
return EIO;
}
fs->blocks = read_sb (RTEMS_RFS_SB_OFFSET_BLOCKS);
3b7c8: e5d3100d ldrb r1, [r3, #13] <== NOT EXECUTED
3b7cc: e5d3200c ldrb r2, [r3, #12] <== NOT EXECUTED
3b7d0: e5d3000f ldrb r0, [r3, #15] <== NOT EXECUTED
3b7d4: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b7d8: e1811c02 orr r1, r1, r2, lsl #24 <== NOT EXECUTED
3b7dc: e5d3200e ldrb r2, [r3, #14] <== NOT EXECUTED
3b7e0: e1811000 orr r1, r1, r0 <== NOT EXECUTED
3b7e4: e1811402 orr r1, r1, r2, lsl #8 <== NOT EXECUTED
3b7e8: e5861004 str r1, [r6, #4] <== NOT EXECUTED
fs->block_size = read_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE);
3b7ec: e5d32009 ldrb r2, [r3, #9] <== NOT EXECUTED
3b7f0: e5d30008 ldrb r0, [r3, #8] <== NOT EXECUTED
3b7f4: e5d3c00b ldrb ip, [r3, #11] <== NOT EXECUTED
3b7f8: e1a02802 lsl r2, r2, #16 <== NOT EXECUTED
3b7fc: e1822c00 orr r2, r2, r0, lsl #24 <== NOT EXECUTED
3b800: e5d3000a ldrb r0, [r3, #10] <== NOT EXECUTED
3b804: e182200c orr r2, r2, ip <== NOT EXECUTED
3b808: e1822400 orr r2, r2, r0, lsl #8 <== NOT EXECUTED
3b80c: e5862008 str r2, [r6, #8] <== NOT EXECUTED
}
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
3b810: e596000c ldr r0, [r6, #12] <== NOT EXECUTED
3b814: e590c01c ldr ip, [r0, #28] <== NOT EXECUTED
3b818: e5900024 ldr r0, [r0, #36] ; 0x24 <== NOT EXECUTED
}
fs->blocks = read_sb (RTEMS_RFS_SB_OFFSET_BLOCKS);
fs->block_size = read_sb (RTEMS_RFS_SB_OFFSET_BLOCK_SIZE);
if (rtems_rfs_fs_size(fs) > rtems_rfs_fs_media_size (fs))
3b81c: e08ba192 umull sl, fp, r2, r1 <== NOT EXECUTED
}
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
3b820: e0898c90 umull r8, r9, r0, ip <== NOT EXECUTED
3b824: e15b0009 cmp fp, r9 <== NOT EXECUTED
3b828: 8a00000a bhi 3b858 <rtems_rfs_fs_open+0x214> <== NOT EXECUTED
3b82c: 0a00000e beq 3b86c <rtems_rfs_fs_open+0x228> <== NOT EXECUTED
read_sb (RTEMS_RFS_SB_OFFSET_VERSION), RTEMS_RFS_VERSION_MASK);
rtems_rfs_buffer_handle_close (fs, &handle);
return EIO;
}
if (read_sb (RTEMS_RFS_SB_OFFSET_INODE_SIZE) != RTEMS_RFS_INODE_SIZE)
3b830: e5d31025 ldrb r1, [r3, #37] ; 0x25 <== NOT EXECUTED
3b834: e5d30024 ldrb r0, [r3, #36] ; 0x24 <== NOT EXECUTED
3b838: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b83c: e5d3c027 ldrb ip, [r3, #39] ; 0x27 <== NOT EXECUTED
3b840: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
3b844: e5d30026 ldrb r0, [r3, #38] ; 0x26 <== NOT EXECUTED
3b848: e181100c orr r1, r1, ip <== NOT EXECUTED
3b84c: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
3b850: e3510038 cmp r1, #56 ; 0x38 <== NOT EXECUTED
3b854: 0a000007 beq 3b878 <rtems_rfs_fs_open+0x234> <== NOT EXECUTED
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
if (fs->group_blocks >
rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs)))
{
rtems_rfs_buffer_handle_close (fs, &handle);
3b858: e1a00006 mov r0, r6 <== NOT EXECUTED
3b85c: e1a01007 mov r1, r7 <== NOT EXECUTED
3b860: ebffff6f bl 3b624 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
3b864: e3a0a005 mov sl, #5 <== NOT EXECUTED
3b868: eaffffb0 b 3b730 <rtems_rfs_fs_open+0xec> <== NOT EXECUTED
}
uint64_t
rtems_rfs_fs_media_size (rtems_rfs_file_system* fs)
{
uint64_t media_blocks = (uint64_t) rtems_rfs_fs_media_blocks (fs);
3b86c: e15a0008 cmp sl, r8 <== NOT EXECUTED
3b870: 9affffee bls 3b830 <rtems_rfs_fs_open+0x1ec> <== NOT EXECUTED
3b874: eafffff7 b 3b858 <rtems_rfs_fs_open+0x214> <== NOT EXECUTED
read_sb (RTEMS_RFS_SB_OFFSET_VERSION), RTEMS_RFS_VERSION_MASK);
rtems_rfs_buffer_handle_close (fs, &handle);
return EIO;
}
fs->bad_blocks = read_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS);
3b878: e5d31011 ldrb r1, [r3, #17] <== NOT EXECUTED
3b87c: e5d30010 ldrb r0, [r3, #16] <== NOT EXECUTED
3b880: e5d3c013 ldrb ip, [r3, #19] <== NOT EXECUTED
3b884: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b888: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
3b88c: e5d30012 ldrb r0, [r3, #18] <== NOT EXECUTED
3b890: e181100c orr r1, r1, ip <== NOT EXECUTED
3b894: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
3b898: e5861014 str r1, [r6, #20] <== NOT EXECUTED
fs->max_name_length = read_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH);
3b89c: e5d31015 ldrb r1, [r3, #21] <== NOT EXECUTED
3b8a0: e5d30014 ldrb r0, [r3, #20] <== NOT EXECUTED
3b8a4: e5d3c017 ldrb ip, [r3, #23] <== NOT EXECUTED
3b8a8: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b8ac: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
3b8b0: e5d30016 ldrb r0, [r3, #22] <== NOT EXECUTED
3b8b4: e181100c orr r1, r1, ip <== NOT EXECUTED
3b8b8: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
3b8bc: e5861018 str r1, [r6, #24] <== NOT EXECUTED
fs->group_count = read_sb (RTEMS_RFS_SB_OFFSET_GROUPS);
3b8c0: e5d31019 ldrb r1, [r3, #25] <== NOT EXECUTED
3b8c4: e5d3c018 ldrb ip, [r3, #24] <== NOT EXECUTED
3b8c8: e5d3001b ldrb r0, [r3, #27] <== NOT EXECUTED
3b8cc: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b8d0: e5d3e01a ldrb lr, [r3, #26] <== NOT EXECUTED
3b8d4: e1811c0c orr r1, r1, ip, lsl #24 <== NOT EXECUTED
3b8d8: e1811000 orr r1, r1, r0 <== NOT EXECUTED
3b8dc: e181e40e orr lr, r1, lr, lsl #8 <== NOT EXECUTED
3b8e0: e586e020 str lr, [r6, #32] <== NOT EXECUTED
fs->group_blocks = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS);
3b8e4: e5d3101d ldrb r1, [r3, #29] <== NOT EXECUTED
3b8e8: e5d3c01c ldrb ip, [r3, #28] <== NOT EXECUTED
3b8ec: e5d3001f ldrb r0, [r3, #31] <== NOT EXECUTED
3b8f0: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b8f4: e1811c0c orr r1, r1, ip, lsl #24 <== NOT EXECUTED
3b8f8: e5d3c01e ldrb ip, [r3, #30] <== NOT EXECUTED
3b8fc: e1811000 orr r1, r1, r0 <== NOT EXECUTED
3b900: e181c40c orr ip, r1, ip, lsl #8 <== NOT EXECUTED
3b904: e586c024 str ip, [r6, #36] ; 0x24 <== NOT EXECUTED
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
3b908: e5d31021 ldrb r1, [r3, #33] ; 0x21 <== NOT EXECUTED
3b90c: e5d30020 ldrb r0, [r3, #32] <== NOT EXECUTED
3b910: e5d34023 ldrb r4, [r3, #35] ; 0x23 <== NOT EXECUTED
3b914: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
3b918: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
3b91c: e5d30022 ldrb r0, [r3, #34] ; 0x22 <== NOT EXECUTED
3b920: e1811004 orr r1, r1, r4 <== NOT EXECUTED
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
3b924: e1a03122 lsr r3, r2, #2 <== NOT EXECUTED
fs->block_map_doubly_blocks =
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->inodes = fs->group_count * fs->group_inodes;
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
3b928: e59f8208 ldr r8, [pc, #520] ; 3bb38 <rtems_rfs_fs_open+0x4f4><== NOT EXECUTED
fs->bad_blocks = read_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS);
fs->max_name_length = read_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH);
fs->group_count = read_sb (RTEMS_RFS_SB_OFFSET_GROUPS);
fs->group_blocks = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS);
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
3b92c: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
fs->block_map_doubly_blocks =
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->inodes = fs->group_count * fs->group_inodes;
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
3b930: e1a0a1a2 lsr sl, r2, #3 <== NOT EXECUTED
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->block_map_doubly_blocks =
3b934: e0000393 mul r0, r3, r3 <== NOT EXECUTED
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->inodes = fs->group_count * fs->group_inodes;
3b938: e004019e mul r4, lr, r1 <== NOT EXECUTED
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
3b93c: e08e9a98 umull r9, lr, r8, sl <== NOT EXECUTED
if (fs->group_blocks >
3b940: e15c0182 cmp ip, r2, lsl #3 <== NOT EXECUTED
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->block_map_doubly_blocks =
3b944: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
fs->blocks_per_block =
rtems_rfs_fs_block_size (fs) / sizeof (rtems_rfs_inode_block);
fs->block_map_singly_blocks =
3b948: e0832103 add r2, r3, r3, lsl #2 <== NOT EXECUTED
3b94c: e5862034 str r2, [r6, #52] ; 0x34 <== NOT EXECUTED
fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->block_map_doubly_blocks =
3b950: e5860038 str r0, [r6, #56] ; 0x38 <== NOT EXECUTED
fs->blocks_per_block * fs->blocks_per_block * RTEMS_RFS_INODE_BLOCKS;
fs->inodes = fs->group_count * fs->group_inodes;
3b954: e5864010 str r4, [r6, #16] <== NOT EXECUTED
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
3b958: e586e02c str lr, [r6, #44] ; 0x2c <== NOT EXECUTED
fs->bad_blocks = read_sb (RTEMS_RFS_SB_OFFSET_BAD_BLOCKS);
fs->max_name_length = read_sb (RTEMS_RFS_SB_OFFSET_MAX_NAME_LENGTH);
fs->group_count = read_sb (RTEMS_RFS_SB_OFFSET_GROUPS);
fs->group_blocks = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_BLOCKS);
fs->group_inodes = read_sb (RTEMS_RFS_SB_OFFSET_GROUP_INODES);
3b95c: e5861028 str r1, [r6, #40] ; 0x28 <== NOT EXECUTED
fs->blocks_per_block =
3b960: e5863030 str r3, [r6, #48] ; 0x30 <== NOT EXECUTED
fs->inodes = fs->group_count * fs->group_inodes;
fs->inodes_per_block = fs->block_size / RTEMS_RFS_INODE_SIZE;
if (fs->group_blocks >
3b964: 8affffbb bhi 3b858 <rtems_rfs_fs_open+0x214> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: read-superblock: groups blocks larger than block bits\n");
return EIO;
}
rtems_rfs_buffer_handle_close (fs, &handle);
3b968: e1a01007 mov r1, r7 <== NOT EXECUTED
3b96c: e1a00006 mov r0, r6 <== NOT EXECUTED
3b970: ebffff2b bl 3b624 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
/*
* Change the block size to the value in the superblock.
*/
rc = rtems_rfs_buffer_setblksize (fs, rtems_rfs_fs_block_size (fs));
3b974: e1a00006 mov r0, r6 <== NOT EXECUTED
3b978: e5961008 ldr r1, [r6, #8] <== NOT EXECUTED
3b97c: ebfff7b2 bl 3984c <rtems_rfs_buffer_setblksize> <== NOT EXECUTED
if (rc > 0)
3b980: e250a000 subs sl, r0, #0 <== NOT EXECUTED
3b984: da000008 ble 3b9ac <rtems_rfs_fs_open+0x368> <== NOT EXECUTED
if (rc > 0)
{
int g;
for (g = 0; g < group; g++)
rtems_rfs_group_close (fs, &fs->groups[g]);
rtems_rfs_buffer_handle_close (fs, &handle);
3b988: e1a00006 mov r0, r6 <== NOT EXECUTED
3b98c: e1a01007 mov r1, r7 <== NOT EXECUTED
3b990: ebffff23 bl 3b624 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
3b994: eaffff65 b 3b730 <rtems_rfs_fs_open+0xec> <== NOT EXECUTED
*fs = malloc (sizeof (rtems_rfs_file_system));
if (!*fs)
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: no memory for file system data\n");
errno = ENOMEM;
3b998: eb001d94 bl 42ff0 <__errno> <== NOT EXECUTED
3b99c: e3a0300c mov r3, #12 <== NOT EXECUTED
3b9a0: e5803000 str r3, [r0] <== NOT EXECUTED
3b9a4: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
3b9a8: eaffff67 b 3b74c <rtems_rfs_fs_open+0x108> <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock block size%d: %s\n",
rc, strerror (rc));
return rc;
}
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
3b9ac: e5960020 ldr r0, [r6, #32] <== NOT EXECUTED
3b9b0: e3a01050 mov r1, #80 ; 0x50 <== NOT EXECUTED
3b9b4: ebff2f69 bl 7760 <calloc> <== NOT EXECUTED
if (!fs->groups)
3b9b8: e3500000 cmp r0, #0 <== NOT EXECUTED
printf ("rtems-rfs: read-superblock: invalid superblock block size%d: %s\n",
rc, strerror (rc));
return rc;
}
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
3b9bc: e586001c str r0, [r6, #28] <== NOT EXECUTED
if (!fs->groups)
3b9c0: 0a000057 beq 3bb24 <rtems_rfs_fs_open+0x4e0> <== NOT EXECUTED
/*
* Perform each phase of group initialisation at the same time. This way we
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
3b9c4: e5963020 ldr r3, [r6, #32] <== NOT EXECUTED
3b9c8: e3530000 cmp r3, #0 <== NOT EXECUTED
3b9cc: da000021 ble 3ba58 <rtems_rfs_fs_open+0x414> <== NOT EXECUTED
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
if (!fs->groups)
{
rtems_rfs_buffer_handle_close (fs, &handle);
3b9d0: e3a08000 mov r8, #0 <== NOT EXECUTED
3b9d4: e5962024 ldr r2, [r6, #36] ; 0x24 <== NOT EXECUTED
3b9d8: e1a04008 mov r4, r8 <== NOT EXECUTED
3b9dc: ea000006 b 3b9fc <rtems_rfs_fs_open+0x3b8> <== NOT EXECUTED
/*
* Perform each phase of group initialisation at the same time. This way we
* know how far the initialisation has gone if an error occurs and we need to
* close everything.
*/
for (group = 0; group < fs->group_count; group++)
3b9e0: e5963020 ldr r3, [r6, #32] <== NOT EXECUTED
3b9e4: e2844001 add r4, r4, #1 <== NOT EXECUTED
3b9e8: e1540003 cmp r4, r3 <== NOT EXECUTED
3b9ec: e2888050 add r8, r8, #80 ; 0x50 <== NOT EXECUTED
3b9f0: aa000018 bge 3ba58 <rtems_rfs_fs_open+0x414> <== NOT EXECUTED
3b9f4: e5962024 ldr r2, [r6, #36] ; 0x24 <== NOT EXECUTED
3b9f8: e596001c ldr r0, [r6, #28] <== NOT EXECUTED
{
rc = rtems_rfs_group_open (fs,
3b9fc: e0010294 mul r1, r4, r2 <== NOT EXECUTED
3ba00: e080c008 add ip, r0, r8 <== NOT EXECUTED
3ba04: e5963028 ldr r3, [r6, #40] ; 0x28 <== NOT EXECUTED
3ba08: e2811001 add r1, r1, #1 <== NOT EXECUTED
3ba0c: e1a00006 mov r0, r6 <== NOT EXECUTED
3ba10: e58dc000 str ip, [sp] <== NOT EXECUTED
3ba14: eb0004de bl 3cd94 <rtems_rfs_group_open> <== NOT EXECUTED
rtems_rfs_fs_block (fs, group, 0),
fs->group_blocks,
fs->group_inodes,
&fs->groups[group]);
if (rc > 0)
3ba18: e3500000 cmp r0, #0 <== NOT EXECUTED
3ba1c: daffffef ble 3b9e0 <rtems_rfs_fs_open+0x39c> <== NOT EXECUTED
{
int g;
for (g = 0; g < group; g++)
3ba20: e3540000 cmp r4, #0 <== NOT EXECUTED
3ba24: e1a0a000 mov sl, r0 <== NOT EXECUTED
3ba28: 0affffd6 beq 3b988 <rtems_rfs_fs_open+0x344> <== NOT EXECUTED
3ba2c: e3a08000 mov r8, #0 <== NOT EXECUTED
3ba30: e1a09008 mov r9, r8 <== NOT EXECUTED
rtems_rfs_group_close (fs, &fs->groups[g]);
3ba34: e596101c ldr r1, [r6, #28] <== NOT EXECUTED
fs->group_inodes,
&fs->groups[group]);
if (rc > 0)
{
int g;
for (g = 0; g < group; g++)
3ba38: e2899001 add r9, r9, #1 <== NOT EXECUTED
rtems_rfs_group_close (fs, &fs->groups[g]);
3ba3c: e0811008 add r1, r1, r8 <== NOT EXECUTED
3ba40: e1a00006 mov r0, r6 <== NOT EXECUTED
3ba44: eb0004b8 bl 3cd2c <rtems_rfs_group_close> <== NOT EXECUTED
fs->group_inodes,
&fs->groups[group]);
if (rc > 0)
{
int g;
for (g = 0; g < group; g++)
3ba48: e1540009 cmp r4, r9 <== NOT EXECUTED
3ba4c: e2888050 add r8, r8, #80 ; 0x50 <== NOT EXECUTED
3ba50: cafffff7 bgt 3ba34 <rtems_rfs_fs_open+0x3f0> <== NOT EXECUTED
3ba54: eaffffcb b 3b988 <rtems_rfs_fs_open+0x344> <== NOT EXECUTED
rc, strerror (rc));
errno = rc;
return -1;
}
rc = rtems_rfs_inode_open (*fs, RTEMS_RFS_ROOT_INO, &inode, true);
3ba58: e3a01001 mov r1, #1 <== NOT EXECUTED
3ba5c: e28d4008 add r4, sp, #8 <== NOT EXECUTED
3ba60: e5950000 ldr r0, [r5] <== NOT EXECUTED
3ba64: e1a02004 mov r2, r4 <== NOT EXECUTED
3ba68: e1a03001 mov r3, r1 <== NOT EXECUTED
3ba6c: eb0005fc bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3ba70: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3ba74: caffff4b bgt 3b7a8 <rtems_rfs_fs_open+0x164> <== NOT EXECUTED
rc, strerror (rc));
errno = rc;
return -1;
}
if (((*fs)->flags & RTEMS_RFS_FS_FORCE_OPEN) == 0)
3ba78: e5950000 ldr r0, [r5] <== NOT EXECUTED
3ba7c: e5903000 ldr r3, [r0] <== NOT EXECUTED
3ba80: e3130004 tst r3, #4 <== NOT EXECUTED
3ba84: 1a00000a bne 3bab4 <rtems_rfs_fs_open+0x470> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
3ba88: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
3ba8c: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
3ba90: e5d31002 ldrb r1, [r3, #2] <== NOT EXECUTED
{
mode = rtems_rfs_inode_get_mode (&inode);
if ((mode == 0xffff) || !RTEMS_RFS_S_ISDIR (mode))
3ba94: e3a03801 mov r3, #65536 ; 0x10000 <== NOT EXECUTED
3ba98: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
3ba9c: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3baa0: e1520003 cmp r2, r3 <== NOT EXECUTED
3baa4: 0a000013 beq 3baf8 <rtems_rfs_fs_open+0x4b4> <== NOT EXECUTED
3baa8: e2022a0f and r2, r2, #61440 ; 0xf000 <== NOT EXECUTED
3baac: e3520901 cmp r2, #16384 ; 0x4000 <== NOT EXECUTED
3bab0: 1a000010 bne 3baf8 <rtems_rfs_fs_open+0x4b4> <== NOT EXECUTED
errno = EIO;
return -1;
}
}
rc = rtems_rfs_inode_close (*fs, &inode);
3bab4: e1a01004 mov r1, r4 <== NOT EXECUTED
3bab8: eb0005c5 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3babc: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3bac0: ca000004 bgt 3bad8 <rtems_rfs_fs_open+0x494> <== NOT EXECUTED
printf ("rtems-rfs: open: closing root inode: %d: %s\n", rc, strerror (rc));
errno = rc;
return -1;
}
errno = 0;
3bac4: eb001d49 bl 42ff0 <__errno> <== NOT EXECUTED
3bac8: e3a03000 mov r3, #0 <== NOT EXECUTED
3bacc: e5803000 str r3, [r0] <== NOT EXECUTED
3bad0: e1a00003 mov r0, r3 <== NOT EXECUTED
return 0;
3bad4: eaffff1c b 3b74c <rtems_rfs_fs_open+0x108> <== NOT EXECUTED
}
rc = rtems_rfs_inode_close (*fs, &inode);
if (rc > 0)
{
rtems_rfs_buffer_close (*fs);
3bad8: e5950000 ldr r0, [r5] <== NOT EXECUTED
3badc: ebfff771 bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
free (*fs);
3bae0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3bae4: ebff30a1 bl 7d70 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: closing root inode: %d: %s\n", rc, strerror (rc));
errno = rc;
3bae8: eb001d40 bl 42ff0 <__errno> <== NOT EXECUTED
3baec: e5804000 str r4, [r0] <== NOT EXECUTED
3baf0: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
3baf4: eaffff14 b 3b74c <rtems_rfs_fs_open+0x108> <== NOT EXECUTED
{
mode = rtems_rfs_inode_get_mode (&inode);
if ((mode == 0xffff) || !RTEMS_RFS_S_ISDIR (mode))
{
rtems_rfs_inode_close (*fs, &inode);
3baf8: e1a01004 mov r1, r4 <== NOT EXECUTED
3bafc: eb0005b4 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_buffer_close (*fs);
3bb00: e5950000 ldr r0, [r5] <== NOT EXECUTED
3bb04: ebfff767 bl 398a8 <rtems_rfs_buffer_close> <== NOT EXECUTED
free (*fs);
3bb08: e5950000 ldr r0, [r5] <== NOT EXECUTED
3bb0c: ebff3097 bl 7d70 <free> <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_OPEN))
printf ("rtems-rfs: open: invalid root inode mode\n");
errno = EIO;
3bb10: eb001d36 bl 42ff0 <__errno> <== NOT EXECUTED
3bb14: e3a03005 mov r3, #5 <== NOT EXECUTED
3bb18: e5803000 str r3, [r0] <== NOT EXECUTED
3bb1c: e3e00000 mvn r0, #0 <== NOT EXECUTED
return -1;
3bb20: eaffff09 b 3b74c <rtems_rfs_fs_open+0x108> <== NOT EXECUTED
fs->groups = calloc (fs->group_count, sizeof (rtems_rfs_group));
if (!fs->groups)
{
rtems_rfs_buffer_handle_close (fs, &handle);
3bb24: e1a00006 mov r0, r6 <== NOT EXECUTED
3bb28: e1a01007 mov r1, r7 <== NOT EXECUTED
3bb2c: ebfffebc bl 3b624 <rtems_rfs_buffer_handle_close> <== NOT EXECUTED
3bb30: e3a0a00c mov sl, #12 <== NOT EXECUTED
3bb34: eafffefd b 3b730 <rtems_rfs_fs_open+0xec> <== NOT EXECUTED
0003b588 <rtems_rfs_fs_size>:
#include <rtems/rfs/rtems-rfs-inode.h>
#include <rtems/rfs/rtems-rfs-trace.h>
uint64_t
rtems_rfs_fs_size (rtems_rfs_file_system* fs)
{
3b588: e5901008 ldr r1, [r0, #8] <== NOT EXECUTED
3b58c: e5902004 ldr r2, [r0, #4] <== NOT EXECUTED
3b590: e52d4004 push {r4} ; (str r4, [sp, #-4]!) <== NOT EXECUTED
3b594: e0843291 umull r3, r4, r1, r2 <== NOT EXECUTED
uint64_t blocks = rtems_rfs_fs_blocks (fs);
uint64_t block_size = rtems_rfs_fs_block_size (fs);
return blocks * block_size;
}
3b598: e1a01004 mov r1, r4 <== NOT EXECUTED
3b59c: e1a00003 mov r0, r3 <== NOT EXECUTED
3b5a0: e8bd0010 pop {r4} <== NOT EXECUTED
3b5a4: e12fff1e bx lr <== NOT EXECUTED
0003cb44 <rtems_rfs_group_bitmap_alloc>:
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
3cb44: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_bitmap_bit bit;
int offset;
bool updown;
int direction;
if (inode)
3cb48: e21220ff ands r2, r2, #255 ; 0xff <== NOT EXECUTED
{
size = fs->group_inodes;
3cb4c: 15905028 ldrne r5, [r0, #40] ; 0x28 <== NOT EXECUTED
goal -= RTEMS_RFS_ROOT_INO;
}
else
size = fs->group_blocks;
3cb50: 05905024 ldreq r5, [r0, #36] ; 0x24 <== NOT EXECUTED
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
3cb54: e1a04001 mov r4, r1 <== NOT EXECUTED
int direction;
if (inode)
{
size = fs->group_inodes;
goal -= RTEMS_RFS_ROOT_INO;
3cb58: 12414001 subne r4, r1, #1 <== NOT EXECUTED
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
3cb5c: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
goal -= RTEMS_RFS_ROOT_INO;
}
else
size = fs->group_blocks;
group_start = goal / size;
3cb60: e1a01005 mov r1, r5 <== NOT EXECUTED
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
3cb64: e1a07000 mov r7, r0 <== NOT EXECUTED
goal -= RTEMS_RFS_ROOT_INO;
}
else
size = fs->group_blocks;
group_start = goal / size;
3cb68: e1a00004 mov r0, r4 <== NOT EXECUTED
int
rtems_rfs_group_bitmap_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
bool inode,
rtems_rfs_bitmap_bit* result)
{
3cb6c: e58d3010 str r3, [sp, #16] <== NOT EXECUTED
rtems_rfs_bitmap_bit bit;
int offset;
bool updown;
int direction;
if (inode)
3cb70: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
goal -= RTEMS_RFS_ROOT_INO;
}
else
size = fs->group_blocks;
group_start = goal / size;
3cb74: eb0078db bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (goal % size);
3cb78: e1a01005 mov r1, r5 <== NOT EXECUTED
goal -= RTEMS_RFS_ROOT_INO;
}
else
size = fs->group_blocks;
group_start = goal / size;
3cb7c: e1a0a000 mov sl, r0 <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (goal % size);
3cb80: e1a00004 mov r0, r4 <== NOT EXECUTED
3cb84: eb00796b bl 5b138 <__umodsi3> <== NOT EXECUTED
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
3cb88: e28d901c add r9, sp, #28 <== NOT EXECUTED
3cb8c: e3a03000 mov r3, #0 <== NOT EXECUTED
3cb90: e5693001 strb r3, [r9, #-1]! <== NOT EXECUTED
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
if (offset)
bit = direction > 0 ? 0 : size - 1;
3cb94: e245c001 sub ip, r5, #1 <== NOT EXECUTED
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
3cb98: e1a0500a mov r5, sl <== NOT EXECUTED
3cb9c: e3a04001 mov r4, #1 <== NOT EXECUTED
/*
* If we are still looking up and down and if the group is out of range we
* have reached one end. Stopping looking up and down and just move in the
* one direction one group at a time.
*/
if ((group < 0) || (group >= fs->group_count))
3cba0: e3550000 cmp r5, #0 <== NOT EXECUTED
3cba4: e58d9008 str r9, [sp, #8] <== NOT EXECUTED
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
3cba8: e1a06003 mov r6, r3 <== NOT EXECUTED
}
else
size = fs->group_blocks;
group_start = goal / size;
bit = (rtems_rfs_bitmap_bit) (goal % size);
3cbac: e58d0014 str r0, [sp, #20] <== NOT EXECUTED
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
3cbb0: e1a08004 mov r8, r4 <== NOT EXECUTED
/*
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
if (offset)
3cbb4: e1a0b003 mov fp, r3 <== NOT EXECUTED
3cbb8: e1a0900c mov r9, ip <== NOT EXECUTED
/*
* If we are still looking up and down and if the group is out of range we
* have reached one end. Stopping looking up and down and just move in the
* one direction one group at a time.
*/
if ((group < 0) || (group >= fs->group_count))
3cbbc: ba000002 blt 3cbcc <rtems_rfs_group_bitmap_alloc+0x88> <== NOT EXECUTED
3cbc0: e5973020 ldr r3, [r7, #32] <== NOT EXECUTED
3cbc4: e1530005 cmp r3, r5 <== NOT EXECUTED
3cbc8: ca000012 bgt 3cc18 <rtems_rfs_group_bitmap_alloc+0xd4> <== NOT EXECUTED
{
if (!updown)
3cbcc: e3580000 cmp r8, #0 <== NOT EXECUTED
3cbd0: 0a00002f beq 3cc94 <rtems_rfs_group_bitmap_alloc+0x150> <== NOT EXECUTED
break;
direction = direction > 0 ? -1 : 1;
3cbd4: e3540001 cmp r4, #1 <== NOT EXECUTED
3cbd8: 03e04000 mvneq r4, #0 <== NOT EXECUTED
3cbdc: 13a04001 movne r4, #1 <== NOT EXECUTED
/*
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
if (offset)
3cbe0: e3560000 cmp r6, #0 <== NOT EXECUTED
3cbe4: 13a08000 movne r8, #0 <== NOT EXECUTED
3cbe8: 0a00002c beq 3cca0 <rtems_rfs_group_bitmap_alloc+0x15c> <== NOT EXECUTED
bit = direction > 0 ? 0 : size - 1;
3cbec: e3540001 cmp r4, #1 <== NOT EXECUTED
3cbf0: 11a03009 movne r3, r9 <== NOT EXECUTED
3cbf4: 03a03000 moveq r3, #0 <== NOT EXECUTED
3cbf8: e58d3014 str r3, [sp, #20] <== NOT EXECUTED
/*
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
3cbfc: e025a694 mla r5, r4, r6, sl <== NOT EXECUTED
/*
* If we are still looking up and down and if the group is out of range we
* have reached one end. Stopping looking up and down and just move in the
* one direction one group at a time.
*/
if ((group < 0) || (group >= fs->group_count))
3cc00: e3550000 cmp r5, #0 <== NOT EXECUTED
*/
while (true)
{
rtems_rfs_bitmap_control* bitmap;
int group;
bool allocated = false;
3cc04: e5cdb01b strb fp, [sp, #27] <== NOT EXECUTED
/*
* If we are still looking up and down and if the group is out of range we
* have reached one end. Stopping looking up and down and just move in the
* one direction one group at a time.
*/
if ((group < 0) || (group >= fs->group_count))
3cc08: baffffef blt 3cbcc <rtems_rfs_group_bitmap_alloc+0x88> <== NOT EXECUTED
3cc0c: e5973020 ldr r3, [r7, #32] <== NOT EXECUTED
3cc10: e1530005 cmp r3, r5 <== NOT EXECUTED
3cc14: daffffec ble 3cbcc <rtems_rfs_group_bitmap_alloc+0x88> <== NOT EXECUTED
direction = direction > 0 ? -1 : 1;
updown = false;
continue;
}
if (inode)
3cc18: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
3cc1c: e3520000 cmp r2, #0 <== NOT EXECUTED
3cc20: 1a000020 bne 3cca8 <rtems_rfs_group_bitmap_alloc+0x164> <== NOT EXECUTED
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
3cc24: e1a02105 lsl r2, r5, #2 <== NOT EXECUTED
3cc28: e597301c ldr r3, [r7, #28] <== NOT EXECUTED
3cc2c: e58d200c str r2, [sp, #12] <== NOT EXECUTED
3cc30: e0822005 add r2, r2, r5 <== NOT EXECUTED
3cc34: e0833202 add r3, r3, r2, lsl #4 <== NOT EXECUTED
3cc38: e283c008 add ip, r3, #8 <== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (bitmap, bit, &allocated, &bit);
3cc3c: e1a0000c mov r0, ip <== NOT EXECUTED
3cc40: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
3cc44: e59d2008 ldr r2, [sp, #8] <== NOT EXECUTED
3cc48: e28d3014 add r3, sp, #20 <== NOT EXECUTED
3cc4c: e58dc000 str ip, [sp] <== NOT EXECUTED
3cc50: eb001741 bl 4295c <rtems_rfs_bitmap_map_alloc> <== NOT EXECUTED
if (rc > 0)
3cc54: e3500000 cmp r0, #0 <== NOT EXECUTED
3cc58: e59dc000 ldr ip, [sp] <== NOT EXECUTED
3cc5c: ca00000d bgt 3cc98 <rtems_rfs_group_bitmap_alloc+0x154> <== NOT EXECUTED
return rc;
if (rtems_rfs_fs_release_bitmaps (fs))
3cc60: e5973000 ldr r3, [r7] <== NOT EXECUTED
3cc64: e3130001 tst r3, #1 <== NOT EXECUTED
3cc68: 0a000016 beq 3ccc8 <rtems_rfs_group_bitmap_alloc+0x184> <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
if (allocated)
3cc6c: e5dd301b ldrb r3, [sp, #27] <== NOT EXECUTED
3cc70: e3530000 cmp r3, #0 <== NOT EXECUTED
3cc74: 1a000017 bne 3ccd8 <rtems_rfs_group_bitmap_alloc+0x194> <== NOT EXECUTED
printf ("rtems-rfs: group-bitmap-alloc: %s allocated: %" PRId32 "\n",
inode ? "inode" : "block", *result);
return 0;
}
if (updown)
3cc78: e3580000 cmp r8, #0 <== NOT EXECUTED
3cc7c: 0a000002 beq 3cc8c <rtems_rfs_group_bitmap_alloc+0x148> <== NOT EXECUTED
direction = direction > 0 ? -1 : 1;
3cc80: e3540001 cmp r4, #1 <== NOT EXECUTED
3cc84: 03e04000 mvneq r4, #0 <== NOT EXECUTED
3cc88: 13a04001 movne r4, #1 <== NOT EXECUTED
offset++;
3cc8c: e2866001 add r6, r6, #1 <== NOT EXECUTED
3cc90: eaffffd5 b 3cbec <rtems_rfs_group_bitmap_alloc+0xa8> <== NOT EXECUTED
3cc94: e3a0001c mov r0, #28 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-alloc: no blocks available\n");
return ENOSPC;
}
3cc98: e28dd01c add sp, sp, #28 <== NOT EXECUTED
3cc9c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/*
* We can start at any location and we move out from that point in each
* direction. The offset grows until we find a free bit or we hit an end.
*/
group = group_start + (direction * offset);
if (offset)
3cca0: e1a08006 mov r8, r6 <== NOT EXECUTED
3cca4: eaffffd4 b 3cbfc <rtems_rfs_group_bitmap_alloc+0xb8> <== NOT EXECUTED
updown = false;
continue;
}
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
3cca8: e1a03105 lsl r3, r5, #2 <== NOT EXECUTED
3ccac: e58d300c str r3, [sp, #12] <== NOT EXECUTED
3ccb0: e59d100c ldr r1, [sp, #12] <== NOT EXECUTED
3ccb4: e597301c ldr r3, [r7, #28] <== NOT EXECUTED
3ccb8: e0812005 add r2, r1, r5 <== NOT EXECUTED
3ccbc: e0833202 add r3, r3, r2, lsl #4 <== NOT EXECUTED
3ccc0: e283c02c add ip, r3, #44 ; 0x2c <== NOT EXECUTED
3ccc4: eaffffdc b 3cc3c <rtems_rfs_group_bitmap_alloc+0xf8> <== NOT EXECUTED
rc = rtems_rfs_bitmap_map_alloc (bitmap, bit, &allocated, &bit);
if (rc > 0)
return rc;
if (rtems_rfs_fs_release_bitmaps (fs))
rtems_rfs_bitmap_release_buffer (fs, bitmap);
3ccc8: e59c1000 ldr r1, [ip] <== NOT EXECUTED
3cccc: e1a00007 mov r0, r7 <== NOT EXECUTED
3ccd0: ebfff315 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
3ccd4: eaffffe4 b 3cc6c <rtems_rfs_group_bitmap_alloc+0x128> <== NOT EXECUTED
if (allocated)
{
if (inode)
3ccd8: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
3ccdc: e3530000 cmp r3, #0 <== NOT EXECUTED
3cce0: 0a000007 beq 3cd04 <rtems_rfs_group_bitmap_alloc+0x1c0> <== NOT EXECUTED
*result = rtems_rfs_group_inode (fs, group, bit);
3cce4: e59d2014 ldr r2, [sp, #20] <== NOT EXECUTED
3cce8: e5971028 ldr r1, [r7, #40] ; 0x28 <== NOT EXECUTED
3ccec: e2822001 add r2, r2, #1 <== NOT EXECUTED
3ccf0: e0232591 mla r3, r1, r5, r2 <== NOT EXECUTED
3ccf4: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
3ccf8: e3a00000 mov r0, #0 <== NOT EXECUTED
3ccfc: e5813000 str r3, [r1] <== NOT EXECUTED
3cd00: eaffffe4 b 3cc98 <rtems_rfs_group_bitmap_alloc+0x154> <== NOT EXECUTED
else
*result = rtems_rfs_group_block (&fs->groups[group], bit);
3cd04: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
3cd08: e597301c ldr r3, [r7, #28] <== NOT EXECUTED
3cd0c: e0825005 add r5, r2, r5 <== NOT EXECUTED
3cd10: e7933205 ldr r3, [r3, r5, lsl #4] <== NOT EXECUTED
3cd14: e28d1010 add r1, sp, #16 <== NOT EXECUTED
3cd18: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
3cd1c: e0823003 add r3, r2, r3 <== NOT EXECUTED
3cd20: e5813000 str r3, [r1] <== NOT EXECUTED
3cd24: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
3cd28: eaffffda b 3cc98 <rtems_rfs_group_bitmap_alloc+0x154> <== NOT EXECUTED
0003caa4 <rtems_rfs_group_bitmap_free>:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-free: %s free: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
3caa4: e31100ff tst r1, #255 ; 0xff <== NOT EXECUTED
int
rtems_rfs_group_bitmap_free (rtems_rfs_file_system* fs,
bool inode,
rtems_rfs_bitmap_bit no)
{
3caa8: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
3caac: e1a04000 mov r4, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-free: %s free: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
3cab0: 0a000015 beq 3cb0c <rtems_rfs_group_bitmap_free+0x68> <== NOT EXECUTED
{
no -= RTEMS_RFS_ROOT_INO;
size = fs->group_inodes;
3cab4: e5905028 ldr r5, [r0, #40] ; 0x28 <== NOT EXECUTED
{
no -= RTEMS_RFS_SUPERBLOCK_SIZE;
size = fs->group_blocks;
}
group = no / size;
3cab8: e2427001 sub r7, r2, #1 <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (no % size);
3cabc: e1a01005 mov r1, r5 <== NOT EXECUTED
3cac0: e1a00007 mov r0, r7 <== NOT EXECUTED
3cac4: eb00799b bl 5b138 <__umodsi3> <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
3cac8: e1a01005 mov r1, r5 <== NOT EXECUTED
no -= RTEMS_RFS_SUPERBLOCK_SIZE;
size = fs->group_blocks;
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
3cacc: e1a06000 mov r6, r0 <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
3cad0: e1a00007 mov r0, r7 <== NOT EXECUTED
3cad4: eb007903 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3cad8: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3cadc: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3cae0: e0835200 add r5, r3, r0, lsl #4 <== NOT EXECUTED
3cae4: e285502c add r5, r5, #44 ; 0x2c <== NOT EXECUTED
else
bitmap = &fs->groups[group].block_bitmap;
rc = rtems_rfs_bitmap_map_clear (bitmap, bit);
3cae8: e1a01006 mov r1, r6 <== NOT EXECUTED
3caec: e1a00005 mov r0, r5 <== NOT EXECUTED
3caf0: eb0016a2 bl 42580 <rtems_rfs_bitmap_map_clear> <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
3caf4: e5951000 ldr r1, [r5] <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
rc = rtems_rfs_bitmap_map_clear (bitmap, bit);
3caf8: e1a06000 mov r6, r0 <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
3cafc: e1a00004 mov r0, r4 <== NOT EXECUTED
3cb00: ebfff389 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
return rc;
}
3cb04: e1a00006 mov r0, r6 <== NOT EXECUTED
3cb08: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
size = fs->group_inodes;
}
else
{
no -= RTEMS_RFS_SUPERBLOCK_SIZE;
size = fs->group_blocks;
3cb0c: e5905024 ldr r5, [r0, #36] ; 0x24 <== NOT EXECUTED
}
group = no / size;
3cb10: e2427001 sub r7, r2, #1 <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (no % size);
3cb14: e1a01005 mov r1, r5 <== NOT EXECUTED
3cb18: e1a00007 mov r0, r7 <== NOT EXECUTED
3cb1c: eb007985 bl 5b138 <__umodsi3> <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
3cb20: e1a01005 mov r1, r5 <== NOT EXECUTED
no -= RTEMS_RFS_SUPERBLOCK_SIZE;
size = fs->group_blocks;
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
3cb24: e1a06000 mov r6, r0 <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
3cb28: e1a00007 mov r0, r7 <== NOT EXECUTED
3cb2c: eb0078ed bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3cb30: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3cb34: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3cb38: e0835200 add r5, r3, r0, lsl #4 <== NOT EXECUTED
3cb3c: e2855008 add r5, r5, #8 <== NOT EXECUTED
3cb40: eaffffe8 b 3cae8 <rtems_rfs_group_bitmap_free+0x44> <== NOT EXECUTED
0003c9d0 <rtems_rfs_group_bitmap_test>:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-test: %s test: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
3c9d0: e31100ff tst r1, #255 ; 0xff <== NOT EXECUTED
int
rtems_rfs_group_bitmap_test (rtems_rfs_file_system* fs,
bool inode,
rtems_rfs_bitmap_bit no,
bool* state)
{
3c9d4: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
3c9d8: e1a04000 mov r4, r0 <== NOT EXECUTED
3c9dc: e1a05002 mov r5, r2 <== NOT EXECUTED
3c9e0: e1a06003 mov r6, r3 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_BITMAPS))
printf ("rtems-rfs: group-bitmap-test: %s test: %" PRId32 "\n",
inode ? "inode" : "block", no);
if (inode)
3c9e4: 0a00001b beq 3ca58 <rtems_rfs_group_bitmap_test+0x88> <== NOT EXECUTED
{
if ((no < RTEMS_RFS_ROOT_INO) || (no > rtems_rfs_fs_inodes (fs)))
3c9e8: e3520000 cmp r2, #0 <== NOT EXECUTED
3c9ec: da000029 ble 3ca98 <rtems_rfs_group_bitmap_test+0xc8> <== NOT EXECUTED
3c9f0: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
3c9f4: e1520003 cmp r2, r3 <== NOT EXECUTED
3c9f8: 8a000026 bhi 3ca98 <rtems_rfs_group_bitmap_test+0xc8> <== NOT EXECUTED
return EINVAL;
no -= RTEMS_RFS_ROOT_INO;
size = fs->group_inodes;
3c9fc: e5908028 ldr r8, [r0, #40] ; 0x28 <== NOT EXECUTED
if (no >= rtems_rfs_fs_blocks (fs))
return EINVAL;
size = fs->group_blocks;
}
group = no / size;
3ca00: e2425001 sub r5, r2, #1 <== NOT EXECUTED
bit = (rtems_rfs_bitmap_bit) (no % size);
3ca04: e1a00005 mov r0, r5 <== NOT EXECUTED
3ca08: e1a01008 mov r1, r8 <== NOT EXECUTED
3ca0c: eb0079c9 bl 5b138 <__umodsi3> <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
3ca10: e1a01008 mov r1, r8 <== NOT EXECUTED
return EINVAL;
size = fs->group_blocks;
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
3ca14: e1a07000 mov r7, r0 <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
3ca18: e1a00005 mov r0, r5 <== NOT EXECUTED
3ca1c: eb007931 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3ca20: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ca24: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3ca28: e0835200 add r5, r3, r0, lsl #4 <== NOT EXECUTED
3ca2c: e285502c add r5, r5, #44 ; 0x2c <== NOT EXECUTED
else
bitmap = &fs->groups[group].block_bitmap;
rc = rtems_rfs_bitmap_map_test (bitmap, bit, state);
3ca30: e1a02006 mov r2, r6 <== NOT EXECUTED
3ca34: e1a01007 mov r1, r7 <== NOT EXECUTED
3ca38: e1a00005 mov r0, r5 <== NOT EXECUTED
3ca3c: eb0016b6 bl 4251c <rtems_rfs_bitmap_map_test> <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
3ca40: e5951000 ldr r1, [r5] <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
rc = rtems_rfs_bitmap_map_test (bitmap, bit, state);
3ca44: e1a06000 mov r6, r0 <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, bitmap);
3ca48: e1a00004 mov r0, r4 <== NOT EXECUTED
3ca4c: ebfff3b6 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
return rc;
}
3ca50: e1a00006 mov r0, r6 <== NOT EXECUTED
3ca54: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
no -= RTEMS_RFS_ROOT_INO;
size = fs->group_inodes;
}
else
{
if (no >= rtems_rfs_fs_blocks (fs))
3ca58: e5903004 ldr r3, [r0, #4] <== NOT EXECUTED
3ca5c: e1520003 cmp r2, r3 <== NOT EXECUTED
3ca60: 2a00000c bcs 3ca98 <rtems_rfs_group_bitmap_test+0xc8> <== NOT EXECUTED
return EINVAL;
size = fs->group_blocks;
3ca64: e5908024 ldr r8, [r0, #36] ; 0x24 <== NOT EXECUTED
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
3ca68: e1a00002 mov r0, r2 <== NOT EXECUTED
3ca6c: e1a01008 mov r1, r8 <== NOT EXECUTED
3ca70: eb0079b0 bl 5b138 <__umodsi3> <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
3ca74: e1a01008 mov r1, r8 <== NOT EXECUTED
return EINVAL;
size = fs->group_blocks;
}
group = no / size;
bit = (rtems_rfs_bitmap_bit) (no % size);
3ca78: e1a07000 mov r7, r0 <== NOT EXECUTED
if (inode)
bitmap = &fs->groups[group].inode_bitmap;
else
bitmap = &fs->groups[group].block_bitmap;
3ca7c: e1a00005 mov r0, r5 <== NOT EXECUTED
3ca80: eb007918 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3ca84: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3ca88: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3ca8c: e0835200 add r5, r3, r0, lsl #4 <== NOT EXECUTED
3ca90: e2855008 add r5, r5, #8 <== NOT EXECUTED
3ca94: eaffffe5 b 3ca30 <rtems_rfs_group_bitmap_test+0x60> <== NOT EXECUTED
rc = rtems_rfs_bitmap_map_test (bitmap, bit, state);
rtems_rfs_bitmap_release_buffer (fs, bitmap);
return rc;
3ca98: e3a06016 mov r6, #22 <== NOT EXECUTED
}
3ca9c: e1a00006 mov r0, r6 <== NOT EXECUTED
3caa0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
0003cd2c <rtems_rfs_group_close>:
return 0;
}
int
rtems_rfs_group_close (rtems_rfs_file_system* fs, rtems_rfs_group* group)
{
3cd2c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
3cd30: e1a05000 mov r5, r0 <== NOT EXECUTED
/*
* We need to close as much as possible and also return any error if one
* occurs but this may result in one even more important error being lost but
* we cannot OR the errors together so this is a reasonable compromise.
*/
rc = rtems_rfs_bitmap_close (&group->inode_bitmap);
3cd34: e281002c add r0, r1, #44 ; 0x2c <== NOT EXECUTED
return 0;
}
int
rtems_rfs_group_close (rtems_rfs_file_system* fs, rtems_rfs_group* group)
{
3cd38: e1a04001 mov r4, r1 <== NOT EXECUTED
/*
* We need to close as much as possible and also return any error if one
* occurs but this may result in one even more important error being lost but
* we cannot OR the errors together so this is a reasonable compromise.
*/
rc = rtems_rfs_bitmap_close (&group->inode_bitmap);
3cd3c: eb001547 bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3cd40: e2841044 add r1, r4, #68 ; 0x44 <== NOT EXECUTED
3cd44: e1a07000 mov r7, r0 <== NOT EXECUTED
3cd48: e1a00005 mov r0, r5 <== NOT EXECUTED
3cd4c: ebfff2f6 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3cd50: e3a03000 mov r3, #0 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3cd54: e584304c str r3, [r4, #76] ; 0x4c <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3cd58: e5c43044 strb r3, [r4, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
3cd5c: e5843048 str r3, [r4, #72] ; 0x48 <== NOT EXECUTED
if (rc > 0)
result = rc;
rc = rtems_rfs_buffer_handle_close (fs, &group->inode_bitmap_buffer);
if (rc > 0)
result = rc;
rc = rtems_rfs_bitmap_close (&group->block_bitmap);
3cd60: e2840008 add r0, r4, #8 <== NOT EXECUTED
3cd64: eb00153d bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3cd68: e2841020 add r1, r4, #32 <== NOT EXECUTED
if (rc > 0)
3cd6c: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3cd70: e1a00005 mov r0, r5 <== NOT EXECUTED
3cd74: d1c76fc7 bicle r6, r7, r7, asr #31 <== NOT EXECUTED
3cd78: ebfff2eb bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3cd7c: e3a03000 mov r3, #0 <== NOT EXECUTED
handle->bnum = 0;
handle->buffer = NULL;
3cd80: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3cd84: e5c43020 strb r3, [r4, #32] <== NOT EXECUTED
handle->bnum = 0;
3cd88: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_close (fs, &group->block_bitmap_buffer);
if (rc > 0)
result = rc;
return result;
}
3cd8c: e1a00006 mov r0, r6 <== NOT EXECUTED
3cd90: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
0003cd94 <rtems_rfs_group_open>:
rtems_rfs_group_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_block base,
size_t size,
size_t inodes,
rtems_rfs_group* group)
{
3cd94: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3cd98: e1a06000 mov r6, r0 <== NOT EXECUTED
int rc;
if (base >= rtems_rfs_fs_blocks (fs))
3cd9c: e5900004 ldr r0, [r0, #4] <== NOT EXECUTED
rtems_rfs_group_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_block base,
size_t size,
size_t inodes,
rtems_rfs_group* group)
{
3cda0: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
int rc;
if (base >= rtems_rfs_fs_blocks (fs))
3cda4: e1500001 cmp r0, r1 <== NOT EXECUTED
rtems_rfs_group_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_block base,
size_t size,
size_t inodes,
rtems_rfs_group* group)
{
3cda8: e1a0c001 mov ip, r1 <== NOT EXECUTED
3cdac: e1a07002 mov r7, r2 <== NOT EXECUTED
3cdb0: e1a09003 mov r9, r3 <== NOT EXECUTED
3cdb4: e59d402c ldr r4, [sp, #44] ; 0x2c <== NOT EXECUTED
int rc;
if (base >= rtems_rfs_fs_blocks (fs))
3cdb8: 93a0b005 movls fp, #5 <== NOT EXECUTED
3cdbc: 9a000017 bls 3ce20 <rtems_rfs_group_open+0x8c> <== NOT EXECUTED
printf ("rtems-rfs: group-open: base outside file system range: %d: %s\n",
EIO, strerror (EIO));
return EIO;
}
if ((base + size) >= rtems_rfs_fs_blocks (fs))
3cdc0: e0823001 add r3, r2, r1 <== NOT EXECUTED
3cdc4: e1500003 cmp r0, r3 <== NOT EXECUTED
size = rtems_rfs_fs_blocks (fs) - base;
3cdc8: 90617000 rsbls r7, r1, r0 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3cdcc: e3a05000 mov r5, #0 <== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open block bitmap handle: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_bitmap_open (&group->block_bitmap, fs,
3cdd0: e284a008 add sl, r4, #8 <== NOT EXECUTED
3cdd4: e2848020 add r8, r4, #32 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_GROUP_OPEN))
printf ("rtems-rfs: group-open: base=%" PRId32 ", blocks=%zd inodes=%zd\n",
base, size, inodes);
group->base = base;
3cdd8: e8840082 stm r4, {r1, r7} <== NOT EXECUTED
3cddc: e5c45020 strb r5, [r4, #32] <== NOT EXECUTED
handle->bnum = 0;
3cde0: e5845024 str r5, [r4, #36] ; 0x24 <== NOT EXECUTED
handle->buffer = NULL;
3cde4: e5845028 str r5, [r4, #40] ; 0x28 <== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open block bitmap handle: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_bitmap_open (&group->block_bitmap, fs,
3cde8: e1a0000a mov r0, sl <== NOT EXECUTED
3cdec: e1a01006 mov r1, r6 <== NOT EXECUTED
3cdf0: e1a02008 mov r2, r8 <== NOT EXECUTED
3cdf4: e1a03007 mov r3, r7 <== NOT EXECUTED
3cdf8: e58dc000 str ip, [sp] <== NOT EXECUTED
3cdfc: eb001561 bl 42388 <rtems_rfs_bitmap_open> <== NOT EXECUTED
&group->block_bitmap_buffer, size,
group->base + RTEMS_RFS_GROUP_BLOCK_BITMAP_BLOCK);
if (rc > 0)
3ce00: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3ce04: da000008 ble 3ce2c <rtems_rfs_group_open+0x98> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3ce08: e1a00006 mov r0, r6 <== NOT EXECUTED
3ce0c: e1a01008 mov r1, r8 <== NOT EXECUTED
3ce10: ebfff2c5 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3ce14: e5845028 str r5, [r4, #40] ; 0x28 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3ce18: e5c45020 strb r5, [r4, #32] <== NOT EXECUTED
handle->bnum = 0;
3ce1c: e5845024 str r5, [r4, #36] ; 0x24 <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, &group->block_bitmap);
rtems_rfs_bitmap_release_buffer (fs, &group->inode_bitmap);
}
return 0;
}
3ce20: e1a0000b mov r0, fp <== NOT EXECUTED
3ce24: e28dd008 add sp, sp, #8 <== NOT EXECUTED
3ce28: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open inode bitmap handle: %d: %s\n",
rc, strerror (rc));
return rc;
}
rc = rtems_rfs_bitmap_open (&group->inode_bitmap, fs,
3ce2c: e594c000 ldr ip, [r4] <== NOT EXECUTED
3ce30: e2843044 add r3, r4, #68 ; 0x44 <== NOT EXECUTED
3ce34: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
3ce38: e28cc001 add ip, ip, #1 <== NOT EXECUTED
3ce3c: e1570009 cmp r7, r9 <== NOT EXECUTED
3ce40: 31a03007 movcc r3, r7 <== NOT EXECUTED
3ce44: 21a03009 movcs r3, r9 <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3ce48: e5c45044 strb r5, [r4, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
3ce4c: e5845048 str r5, [r4, #72] ; 0x48 <== NOT EXECUTED
handle->buffer = NULL;
3ce50: e584504c str r5, [r4, #76] ; 0x4c <== NOT EXECUTED
3ce54: e284002c add r0, r4, #44 ; 0x2c <== NOT EXECUTED
3ce58: e1a01006 mov r1, r6 <== NOT EXECUTED
3ce5c: e59d2004 ldr r2, [sp, #4] <== NOT EXECUTED
3ce60: e58dc000 str ip, [sp] <== NOT EXECUTED
3ce64: eb001547 bl 42388 <rtems_rfs_bitmap_open> <== NOT EXECUTED
&group->inode_bitmap_buffer, inodes,
group->base + RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
if (rc > 0)
3ce68: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3ce6c: ca00000a bgt 3ce9c <rtems_rfs_group_open+0x108> <== NOT EXECUTED
printf ("rtems-rfs: group-open: could not open inode bitmap: %d: %s\n",
rc, strerror (rc));
return rc;
}
if (rtems_rfs_fs_release_bitmaps (fs))
3ce70: e596b000 ldr fp, [r6] <== NOT EXECUTED
3ce74: e21bb001 ands fp, fp, #1 <== NOT EXECUTED
3ce78: 11a0b005 movne fp, r5 <== NOT EXECUTED
3ce7c: 1affffe7 bne 3ce20 <rtems_rfs_group_open+0x8c> <== NOT EXECUTED
{
rtems_rfs_bitmap_release_buffer (fs, &group->block_bitmap);
3ce80: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
3ce84: e1a00006 mov r0, r6 <== NOT EXECUTED
3ce88: ebfff2a7 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_bitmap_release_buffer (fs, &group->inode_bitmap);
3ce8c: e1a00006 mov r0, r6 <== NOT EXECUTED
3ce90: e594102c ldr r1, [r4, #44] ; 0x2c <== NOT EXECUTED
3ce94: ebfff2a4 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
3ce98: eaffffe0 b 3ce20 <rtems_rfs_group_open+0x8c> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3ce9c: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
3cea0: e1a00006 mov r0, r6 <== NOT EXECUTED
3cea4: ebfff2a0 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
3cea8: e5c45044 strb r5, [r4, #68] ; 0x44 <== NOT EXECUTED
handle->bnum = 0;
3ceac: e5845048 str r5, [r4, #72] ; 0x48 <== NOT EXECUTED
handle->buffer = NULL;
3ceb0: e584504c str r5, [r4, #76] ; 0x4c <== NOT EXECUTED
&group->inode_bitmap_buffer, inodes,
group->base + RTEMS_RFS_GROUP_INODE_BITMAP_BLOCK);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &group->inode_bitmap_buffer);
rtems_rfs_bitmap_close (&group->block_bitmap);
3ceb4: e1a0000a mov r0, sl <== NOT EXECUTED
3ceb8: eb0014e8 bl 42260 <rtems_rfs_bitmap_close> <== NOT EXECUTED
3cebc: eaffffd1 b 3ce08 <rtems_rfs_group_open+0x74> <== NOT EXECUTED
0003c93c <rtems_rfs_group_usage>:
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
3c93c: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
int
rtems_rfs_group_usage (rtems_rfs_file_system* fs,
size_t* blocks,
size_t* inodes)
{
3c940: e92d0070 push {r4, r5, r6} <== NOT EXECUTED
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
3c944: e3530000 cmp r3, #0 <== NOT EXECUTED
size_t* blocks,
size_t* inodes)
{
int g;
*blocks = 0;
3c948: e3a04000 mov r4, #0 <== NOT EXECUTED
3c94c: e5814000 str r4, [r1] <== NOT EXECUTED
*inodes = 0;
3c950: e5824000 str r4, [r2] <== NOT EXECUTED
for (g = 0; g < fs->group_count; g++)
3c954: da000010 ble 3c99c <rtems_rfs_group_usage+0x60> <== NOT EXECUTED
3c958: e590c01c ldr ip, [r0, #28] <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
*blocks +=
3c95c: e28c6014 add r6, ip, #20 <== NOT EXECUTED
3c960: e8960060 ldm r6, {r5, r6} <== NOT EXECUTED
3c964: e0455006 sub r5, r5, r6 <== NOT EXECUTED
3c968: e5916000 ldr r6, [r1] <== NOT EXECUTED
3c96c: e0865005 add r5, r6, r5 <== NOT EXECUTED
3c970: e5815000 str r5, [r1] <== NOT EXECUTED
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
rtems_rfs_bitmap_map_free (&group->block_bitmap);
*inodes +=
3c974: e28c6038 add r6, ip, #56 ; 0x38 <== NOT EXECUTED
3c978: e8960060 ldm r6, {r5, r6} <== NOT EXECUTED
3c97c: e0455006 sub r5, r5, r6 <== NOT EXECUTED
3c980: e5926000 ldr r6, [r2] <== NOT EXECUTED
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
3c984: e2844001 add r4, r4, #1 <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
*blocks +=
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
rtems_rfs_bitmap_map_free (&group->block_bitmap);
*inodes +=
3c988: e0865005 add r5, r6, r5 <== NOT EXECUTED
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
3c98c: e1540003 cmp r4, r3 <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
*blocks +=
rtems_rfs_bitmap_map_size(&group->block_bitmap) -
rtems_rfs_bitmap_map_free (&group->block_bitmap);
*inodes +=
3c990: e5825000 str r5, [r2] <== NOT EXECUTED
int g;
*blocks = 0;
*inodes = 0;
for (g = 0; g < fs->group_count; g++)
3c994: e28cc050 add ip, ip, #80 ; 0x50 <== NOT EXECUTED
3c998: baffffef blt 3c95c <rtems_rfs_group_usage+0x20> <== NOT EXECUTED
*inodes +=
rtems_rfs_bitmap_map_size (&group->inode_bitmap) -
rtems_rfs_bitmap_map_free (&group->inode_bitmap);
}
if (*blocks > rtems_rfs_fs_blocks (fs))
3c99c: e5903004 ldr r3, [r0, #4] <== NOT EXECUTED
3c9a0: e591c000 ldr ip, [r1] <== NOT EXECUTED
3c9a4: e15c0003 cmp ip, r3 <== NOT EXECUTED
3c9a8: 9581c000 strls ip, [r1] <== NOT EXECUTED
3c9ac: 85813000 strhi r3, [r1] <== NOT EXECUTED
*blocks = rtems_rfs_fs_blocks (fs);
if (*inodes > rtems_rfs_fs_inodes (fs))
3c9b0: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
3c9b4: e5921000 ldr r1, [r2] <== NOT EXECUTED
*inodes = rtems_rfs_fs_inodes (fs);
return 0;
}
3c9b8: e3a00000 mov r0, #0 <== NOT EXECUTED
rtems_rfs_bitmap_map_free (&group->inode_bitmap);
}
if (*blocks > rtems_rfs_fs_blocks (fs))
*blocks = rtems_rfs_fs_blocks (fs);
if (*inodes > rtems_rfs_fs_inodes (fs))
3c9bc: e1510003 cmp r1, r3 <== NOT EXECUTED
3c9c0: 95821000 strls r1, [r2] <== NOT EXECUTED
3c9c4: 85823000 strhi r3, [r2] <== NOT EXECUTED
*inodes = rtems_rfs_fs_inodes (fs);
return 0;
}
3c9c8: e8bd0070 pop {r4, r5, r6} <== NOT EXECUTED
3c9cc: e12fff1e bx lr <== NOT EXECUTED
0003d3cc <rtems_rfs_inode_alloc>:
int
rtems_rfs_inode_alloc (rtems_rfs_file_system* fs,
rtems_rfs_bitmap_bit goal,
rtems_rfs_ino* ino)
{
3d3cc: e92d4010 push {r4, lr} <== NOT EXECUTED
3d3d0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3d3d4: e1a04002 mov r4, r2 <== NOT EXECUTED
rtems_rfs_bitmap_bit bit;
int rc;
rc = rtems_rfs_group_bitmap_alloc (fs, goal, true, &bit);
3d3d8: e1a0300d mov r3, sp <== NOT EXECUTED
3d3dc: e3a02001 mov r2, #1 <== NOT EXECUTED
3d3e0: ebfffdd7 bl 3cb44 <rtems_rfs_group_bitmap_alloc> <== NOT EXECUTED
*ino = bit;
3d3e4: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3d3e8: e5843000 str r3, [r4] <== NOT EXECUTED
return rc;
}
3d3ec: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3d3f0: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0003d1d4 <rtems_rfs_inode_close>:
}
int
rtems_rfs_inode_close (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3d1d4: e92d4010 push {r4, lr} <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CLOSE))
printf ("rtems-rfs: inode-close: ino: %" PRIu32 "\n", handle->ino);
rc = rtems_rfs_inode_unload (fs, handle, true);
3d1d8: e3a02001 mov r2, #1 <== NOT EXECUTED
}
int
rtems_rfs_inode_close (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3d1dc: e1a04001 mov r4, r1 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_CLOSE))
printf ("rtems-rfs: inode-close: ino: %" PRIu32 "\n", handle->ino);
rc = rtems_rfs_inode_unload (fs, handle, true);
3d1e0: ebffffd0 bl 3d128 <rtems_rfs_inode_unload> <== NOT EXECUTED
if ((rc == 0) && (handle->loads > 0))
3d1e4: e3500000 cmp r0, #0 <== NOT EXECUTED
3d1e8: 1a000002 bne 3d1f8 <rtems_rfs_inode_close+0x24> <== NOT EXECUTED
3d1ec: e5943024 ldr r3, [r4, #36] ; 0x24 <== NOT EXECUTED
3d1f0: e3530000 cmp r3, #0 <== NOT EXECUTED
3d1f4: c3a00005 movgt r0, #5 <== NOT EXECUTED
printf ("rtems-rfs: inode-close: bad loads number: %d\n",
handle->loads);
rc = EIO;
}
handle->ino = 0;
3d1f8: e3a03000 mov r3, #0 <== NOT EXECUTED
3d1fc: e5843008 str r3, [r4, #8] <== NOT EXECUTED
return rc;
}
3d200: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0003d3f4 <rtems_rfs_inode_create>:
uint16_t mode,
uint16_t links,
uid_t uid,
gid_t gid,
rtems_rfs_ino* ino)
{
3d3f4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3d3f8: e24dd05c sub sp, sp, #92 ; 0x5c <== NOT EXECUTED
3d3fc: e1dd58b0 ldrh r5, [sp, #128] ; 0x80 <== NOT EXECUTED
}
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & RTEMS_RFS_S_IFMT)
3d400: e2054a0f and r4, r5, #61440 ; 0xf000 <== NOT EXECUTED
3d404: e3540a06 cmp r4, #24576 ; 0x6000 <== NOT EXECUTED
uint16_t mode,
uint16_t links,
uid_t uid,
gid_t gid,
rtems_rfs_ino* ino)
{
3d408: e1a06000 mov r6, r0 <== NOT EXECUTED
3d40c: e1a07001 mov r7, r1 <== NOT EXECUTED
3d410: e98d000c stmib sp, {r2, r3} <== NOT EXECUTED
3d414: e1dd88b4 ldrh r8, [sp, #132] ; 0x84 <== NOT EXECUTED
3d418: e1dda8b8 ldrh sl, [sp, #136] ; 0x88 <== NOT EXECUTED
3d41c: e1dd98bc ldrh r9, [sp, #140] ; 0x8c <== NOT EXECUTED
}
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & RTEMS_RFS_S_IFMT)
3d420: 0a00000c beq 3d458 <rtems_rfs_inode_create+0x64> <== NOT EXECUTED
3d424: da000007 ble 3d448 <rtems_rfs_inode_create+0x54> <== NOT EXECUTED
3d428: e3540902 cmp r4, #32768 ; 0x8000 <== NOT EXECUTED
3d42c: 0a000009 beq 3d458 <rtems_rfs_inode_create+0x64> <== NOT EXECUTED
3d430: e3540a0a cmp r4, #40960 ; 0xa000 <== NOT EXECUTED
3d434: 0a000007 beq 3d458 <rtems_rfs_inode_create+0x64> <== NOT EXECUTED
3d438: e3a0b016 mov fp, #22 <== NOT EXECUTED
rtems_rfs_inode_free (fs, *ino);
return rc;
}
return 0;
}
3d43c: e1a0000b mov r0, fp <== NOT EXECUTED
3d440: e28dd05c add sp, sp, #92 ; 0x5c <== NOT EXECUTED
3d444: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
/*
* The file type is field within the mode. Check we have a sane mode set.
*/
switch (mode & RTEMS_RFS_S_IFMT)
3d448: e3540a02 cmp r4, #8192 ; 0x2000 <== NOT EXECUTED
3d44c: 0a000001 beq 3d458 <rtems_rfs_inode_create+0x64> <== NOT EXECUTED
3d450: e3540901 cmp r4, #16384 ; 0x4000 <== NOT EXECUTED
3d454: 1afffff7 bne 3d438 <rtems_rfs_inode_create+0x44> <== NOT EXECUTED
break;
default:
return EINVAL;
}
rc = rtems_rfs_inode_alloc (fs, parent, ino);
3d458: e1a00006 mov r0, r6 <== NOT EXECUTED
3d45c: e1a01007 mov r1, r7 <== NOT EXECUTED
3d460: e59d2090 ldr r2, [sp, #144] ; 0x90 <== NOT EXECUTED
3d464: ebffffd8 bl 3d3cc <rtems_rfs_inode_alloc> <== NOT EXECUTED
if (rc > 0)
3d468: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d46c: cafffff2 bgt 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
return rc;
rc = rtems_rfs_inode_open (fs, *ino, &inode, true);
3d470: e59d3090 ldr r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3d474: e1a00006 mov r0, r6 <== NOT EXECUTED
3d478: e5931000 ldr r1, [r3] <== NOT EXECUTED
3d47c: e28d200c add r2, sp, #12 <== NOT EXECUTED
3d480: e3a03001 mov r3, #1 <== NOT EXECUTED
3d484: ebffff76 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3d488: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d48c: da000004 ble 3d4a4 <rtems_rfs_inode_create+0xb0> <== NOT EXECUTED
}
rc = rtems_rfs_inode_close (fs, &inode);
if (rc > 0)
{
rtems_rfs_inode_free (fs, *ino);
3d490: e59d3090 ldr r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3d494: e1a00006 mov r0, r6 <== NOT EXECUTED
3d498: e5931000 ldr r1, [r3] <== NOT EXECUTED
3d49c: ebffff9f bl 3d320 <rtems_rfs_inode_free> <== NOT EXECUTED
return rc;
3d4a0: eaffffe5 b 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
{
rtems_rfs_inode_free (fs, *ino);
return rc;
}
rc = rtems_rfs_inode_initialise (&inode, links, mode, uid, gid);
3d4a4: e1a01008 mov r1, r8 <== NOT EXECUTED
3d4a8: e1a02005 mov r2, r5 <== NOT EXECUTED
3d4ac: e1a0300a mov r3, sl <== NOT EXECUTED
3d4b0: e28d000c add r0, sp, #12 <== NOT EXECUTED
3d4b4: e58d9000 str r9, [sp] <== NOT EXECUTED
3d4b8: ebfffebf bl 3cfbc <rtems_rfs_inode_initialise> <== NOT EXECUTED
if (rc > 0)
3d4bc: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d4c0: ca000010 bgt 3d508 <rtems_rfs_inode_create+0x114> <== NOT EXECUTED
/*
* Only handle the specifics of a directory. Let caller handle the others.
*
* The inode delete will free the inode.
*/
if (RTEMS_RFS_S_ISDIR (mode))
3d4c4: e3540901 cmp r4, #16384 ; 0x4000 <== NOT EXECUTED
3d4c8: 0a00002d beq 3d584 <rtems_rfs_inode_create+0x190> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
3d4cc: e28d5034 add r5, sp, #52 ; 0x34 <== NOT EXECUTED
3d4d0: e1a01007 mov r1, r7 <== NOT EXECUTED
3d4d4: e1a00006 mov r0, r6 <== NOT EXECUTED
3d4d8: e1a02005 mov r2, r5 <== NOT EXECUTED
3d4dc: e3a03001 mov r3, #1 <== NOT EXECUTED
3d4e0: ebffff5f bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3d4e4: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d4e8: da00000e ble 3d528 <rtems_rfs_inode_create+0x134> <== NOT EXECUTED
rtems_rfs_inode_get_links (&parent_inode) + 1);
rc = rtems_rfs_inode_close (fs, &parent_inode);
if (rc > 0)
{
rtems_rfs_inode_delete (fs, &inode);
3d4ec: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d4f0: e1a00006 mov r0, r6 <== NOT EXECUTED
3d4f4: ebffff8c bl 3d32c <rtems_rfs_inode_delete> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
3d4f8: e1a00006 mov r0, r6 <== NOT EXECUTED
3d4fc: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d500: ebffff33 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d504: eaffffcc b 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
}
rc = rtems_rfs_inode_initialise (&inode, links, mode, uid, gid);
if (rc > 0)
{
rtems_rfs_inode_close (fs, &inode);
3d508: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d50c: e1a00006 mov r0, r6 <== NOT EXECUTED
3d510: ebffff2f bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_free (fs, *ino);
3d514: e59d3090 ldr r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3d518: e1a00006 mov r0, r6 <== NOT EXECUTED
3d51c: e5931000 ldr r1, [r3] <== NOT EXECUTED
3d520: ebffff7e bl 3d320 <rtems_rfs_inode_free> <== NOT EXECUTED
return rc;
3d524: eaffffc4 b 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
rtems_rfs_inode_delete (fs, &inode);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, *ino);
3d528: e59d3090 ldr r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3d52c: e593c000 ldr ip, [r3] <== NOT EXECUTED
3d530: e99d000c ldmib sp, {r2, r3} <== NOT EXECUTED
3d534: e1a00006 mov r0, r6 <== NOT EXECUTED
3d538: e1a01005 mov r1, r5 <== NOT EXECUTED
3d53c: e58dc000 str ip, [sp] <== NOT EXECUTED
3d540: ebfff350 bl 3a288 <rtems_rfs_dir_add_entry> <== NOT EXECUTED
if (rc > 0)
3d544: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d548: ca00001a bgt 3d5b8 <rtems_rfs_inode_create+0x1c4> <== NOT EXECUTED
/*
* If the node is a directory update the parent link count as the
* new directory has the '..' link that points to the parent.
*/
if (RTEMS_RFS_S_ISDIR (mode))
3d54c: e3540901 cmp r4, #16384 ; 0x4000 <== NOT EXECUTED
3d550: 0a00002a beq 3d600 <rtems_rfs_inode_create+0x20c> <== NOT EXECUTED
rtems_rfs_inode_set_links (&parent_inode,
rtems_rfs_inode_get_links (&parent_inode) + 1);
rc = rtems_rfs_inode_close (fs, &parent_inode);
3d554: e1a01005 mov r1, r5 <== NOT EXECUTED
3d558: e1a00006 mov r0, r6 <== NOT EXECUTED
3d55c: ebffff1c bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3d560: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d564: caffffe0 bgt 3d4ec <rtems_rfs_inode_create+0xf8> <== NOT EXECUTED
rtems_rfs_inode_delete (fs, &inode);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_inode_close (fs, &inode);
3d568: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d56c: e1a00006 mov r0, r6 <== NOT EXECUTED
3d570: ebffff17 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3d574: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d578: d3a0b000 movle fp, #0 <== NOT EXECUTED
3d57c: caffffc3 bgt 3d490 <rtems_rfs_inode_create+0x9c> <== NOT EXECUTED
3d580: eaffffad b 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
*
* The inode delete will free the inode.
*/
if (RTEMS_RFS_S_ISDIR (mode))
{
rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, *ino);
3d584: e59d3090 ldr r3, [sp, #144] ; 0x90 <== NOT EXECUTED
3d588: e593c000 ldr ip, [r3] <== NOT EXECUTED
3d58c: e1a00006 mov r0, r6 <== NOT EXECUTED
3d590: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d594: e59f20b4 ldr r2, [pc, #180] ; 3d650 <rtems_rfs_inode_create+0x25c><== NOT EXECUTED
3d598: e3a03001 mov r3, #1 <== NOT EXECUTED
3d59c: e58dc000 str ip, [sp] <== NOT EXECUTED
3d5a0: ebfff338 bl 3a288 <rtems_rfs_dir_add_entry> <== NOT EXECUTED
if (rc == 0)
3d5a4: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3d5a8: 0a00000c beq 3d5e0 <rtems_rfs_inode_create+0x1ec> <== NOT EXECUTED
rc = rtems_rfs_dir_add_entry (fs, &inode, "..", 2, parent);
if (rc > 0)
3d5ac: e35b0000 cmp fp, #0 <== NOT EXECUTED
3d5b0: daffffc5 ble 3d4cc <rtems_rfs_inode_create+0xd8> <== NOT EXECUTED
3d5b4: eaffffcc b 3d4ec <rtems_rfs_inode_create+0xf8> <== NOT EXECUTED
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, *ino);
if (rc > 0)
{
rtems_rfs_inode_delete (fs, &inode);
3d5b8: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d5bc: e1a00006 mov r0, r6 <== NOT EXECUTED
3d5c0: ebffff59 bl 3d32c <rtems_rfs_inode_delete> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
3d5c4: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d5c8: e1a00006 mov r0, r6 <== NOT EXECUTED
3d5cc: ebffff00 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
3d5d0: e1a00006 mov r0, r6 <== NOT EXECUTED
3d5d4: e1a01005 mov r1, r5 <== NOT EXECUTED
3d5d8: ebfffefd bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d5dc: eaffff96 b 3d43c <rtems_rfs_inode_create+0x48> <== NOT EXECUTED
*/
if (RTEMS_RFS_S_ISDIR (mode))
{
rc = rtems_rfs_dir_add_entry (fs, &inode, ".", 1, *ino);
if (rc == 0)
rc = rtems_rfs_dir_add_entry (fs, &inode, "..", 2, parent);
3d5e0: e1a00006 mov r0, r6 <== NOT EXECUTED
3d5e4: e28d100c add r1, sp, #12 <== NOT EXECUTED
3d5e8: e59f2064 ldr r2, [pc, #100] ; 3d654 <rtems_rfs_inode_create+0x260><== NOT EXECUTED
3d5ec: e3a03002 mov r3, #2 <== NOT EXECUTED
3d5f0: e58d7000 str r7, [sp] <== NOT EXECUTED
3d5f4: ebfff323 bl 3a288 <rtems_rfs_dir_add_entry> <== NOT EXECUTED
3d5f8: e1a0b000 mov fp, r0 <== NOT EXECUTED
3d5fc: eaffffea b 3d5ac <rtems_rfs_inode_create+0x1b8> <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3d600: e59d3040 ldr r3, [sp, #64] ; 0x40 <== NOT EXECUTED
3d604: e5d30000 ldrb r0, [r3] <== NOT EXECUTED
3d608: e5d31001 ldrb r1, [r3, #1] <== NOT EXECUTED
if (links == 0xffff)
3d60c: e3a02801 mov r2, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3d610: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
if (links == 0xffff)
3d614: e2422001 sub r2, r2, #1 <== NOT EXECUTED
3d618: e1510002 cmp r1, r2 <== NOT EXECUTED
3d61c: 12811001 addne r1, r1, #1 <== NOT EXECUTED
3d620: 11a01801 lslne r1, r1, #16 <== NOT EXECUTED
3d624: 11a02821 lsrne r2, r1, #16 <== NOT EXECUTED
3d628: 03a01000 moveq r1, #0 <== NOT EXECUTED
3d62c: 11a01c21 lsrne r1, r1, #24 <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3d630: e5c31000 strb r1, [r3] <== NOT EXECUTED
3d634: e59d3040 ldr r3, [sp, #64] ; 0x40 <== NOT EXECUTED
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
if (links == 0xffff)
3d638: 03a02001 moveq r2, #1 <== NOT EXECUTED
3d63c: 120220ff andne r2, r2, #255 ; 0xff <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3d640: e5c32001 strb r2, [r3, #1] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d644: e3a03001 mov r3, #1 <== NOT EXECUTED
3d648: e5cd3044 strb r3, [sp, #68] ; 0x44 <== NOT EXECUTED
3d64c: eaffffc0 b 3d554 <rtems_rfs_inode_create+0x160> <== NOT EXECUTED
0003d32c <rtems_rfs_inode_delete>:
}
int
rtems_rfs_inode_delete (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3d32c: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_DELETE))
printf("rtems-rfs: inode-delete: ino:%" PRIu32 " loaded:%s\n",
rtems_rfs_inode_ino (handle),
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
3d330: e591300c ldr r3, [r1, #12] <== NOT EXECUTED
3d334: e3530000 cmp r3, #0 <== NOT EXECUTED
}
int
rtems_rfs_inode_delete (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3d338: e1a05000 mov r5, r0 <== NOT EXECUTED
3d33c: e24dd050 sub sp, sp, #80 ; 0x50 <== NOT EXECUTED
3d340: e1a04001 mov r4, r1 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_DELETE))
printf("rtems-rfs: inode-delete: ino:%" PRIu32 " loaded:%s\n",
rtems_rfs_inode_ino (handle),
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
3d344: 01a00003 moveq r0, r3 <== NOT EXECUTED
3d348: 0a000003 beq 3d35c <rtems_rfs_inode_delete+0x30> <== NOT EXECUTED
rtems_rfs_block_map map;
/*
* Free the ino number.
*/
rc = rtems_rfs_inode_free (fs, handle->ino);
3d34c: e5911008 ldr r1, [r1, #8] <== NOT EXECUTED
3d350: ebfffff2 bl 3d320 <rtems_rfs_inode_free> <== NOT EXECUTED
if (rc > 0)
3d354: e3500000 cmp r0, #0 <== NOT EXECUTED
3d358: da000001 ble 3d364 <rtems_rfs_inode_delete+0x38> <== NOT EXECUTED
handle->loads = 0;
handle->node = NULL;
}
}
return rc;
}
3d35c: e28dd050 add sp, sp, #80 ; 0x50 <== NOT EXECUTED
3d360: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
return rc;
/*
* Free the blocks the inode may have attached.
*/
rc = rtems_rfs_block_map_open (fs, handle, &map);
3d364: e1a00005 mov r0, r5 <== NOT EXECUTED
3d368: e1a01004 mov r1, r4 <== NOT EXECUTED
3d36c: e1a0200d mov r2, sp <== NOT EXECUTED
3d370: ebfff0a2 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc == 0)
3d374: e3500000 cmp r0, #0 <== NOT EXECUTED
return rc;
/*
* Free the blocks the inode may have attached.
*/
rc = rtems_rfs_block_map_open (fs, handle, &map);
3d378: e1a0600d mov r6, sp <== NOT EXECUTED
if (rc == 0)
3d37c: 1afffff6 bne 3d35c <rtems_rfs_inode_delete+0x30> <== NOT EXECUTED
{
int rrc;
rrc = rtems_rfs_block_map_free_all (fs, &map);
3d380: e1a0100d mov r1, sp <== NOT EXECUTED
3d384: e1a00005 mov r0, r5 <== NOT EXECUTED
3d388: ebffeee2 bl 38f18 <rtems_rfs_block_map_free_all> <== NOT EXECUTED
rc = rtems_rfs_block_map_close (fs, &map);
3d38c: e1a0100d mov r1, sp <== NOT EXECUTED
3d390: e1a00005 mov r0, r5 <== NOT EXECUTED
3d394: ebfff026 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
if (rc > 0)
rrc = rc;
memset (handle->node, 0xff, RTEMS_RFS_INODE_SIZE);
3d398: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3d39c: e3a02038 mov r2, #56 ; 0x38 <== NOT EXECUTED
3d3a0: e594000c ldr r0, [r4, #12] <== NOT EXECUTED
3d3a4: eb002448 bl 464cc <memset> <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d3a8: e3a03001 mov r3, #1 <== NOT EXECUTED
3d3ac: e1a01004 mov r1, r4 <== NOT EXECUTED
3d3b0: e5e13010 strb r3, [r1, #16]! <== NOT EXECUTED
/*
* Do the release here to avoid the ctime field being set on a
* close. Also if there loads is greater then one then other loads
* active. Forcing the loads count to 0.
*/
rc = rtems_rfs_buffer_handle_release (fs, &handle->buffer);
3d3b4: e1a00005 mov r0, r5 <== NOT EXECUTED
3d3b8: ebfff15b bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->loads = 0;
3d3bc: e3a03000 mov r3, #0 <== NOT EXECUTED
handle->node = NULL;
3d3c0: e584300c str r3, [r4, #12] <== NOT EXECUTED
* Do the release here to avoid the ctime field being set on a
* close. Also if there loads is greater then one then other loads
* active. Forcing the loads count to 0.
*/
rc = rtems_rfs_buffer_handle_release (fs, &handle->buffer);
handle->loads = 0;
3d3c4: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
3d3c8: eaffffe3 b 3d35c <rtems_rfs_inode_delete+0x30> <== NOT EXECUTED
0003d320 <rtems_rfs_inode_free>:
}
int
rtems_rfs_inode_free (rtems_rfs_file_system* fs,
rtems_rfs_ino ino)
{
3d320: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_rfs_bitmap_bit bit;
bit = ino;
return rtems_rfs_group_bitmap_free (fs, true, bit);
3d324: e3a01001 mov r1, #1 <== NOT EXECUTED
3d328: eafffddd b 3caa4 <rtems_rfs_group_bitmap_free> <== NOT EXECUTED
0003cec0 <rtems_rfs_inode_get_size>:
}
rtems_rfs_pos
rtems_rfs_inode_get_size (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3cec0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
3cec4: e591200c ldr r2, [r1, #12] <== NOT EXECUTED
3cec8: e282300c add r3, r2, #12 <== NOT EXECUTED
rtems_rfs_block_size size;
size.count = rtems_rfs_inode_get_block_count (handle);
3cecc: e5d31003 ldrb r1, [r3, #3] <== NOT EXECUTED
3ced0: e5d2c00c ldrb ip, [r2, #12] <== NOT EXECUTED
3ced4: e5d3e001 ldrb lr, [r3, #1] <== NOT EXECUTED
3ced8: e181cc0c orr ip, r1, ip, lsl #24 <== NOT EXECUTED
3cedc: e5d31002 ldrb r1, [r3, #2] <== NOT EXECUTED
3cee0: e18c380e orr r3, ip, lr, lsl #16 <== NOT EXECUTED
}
rtems_rfs_pos
rtems_rfs_inode_get_size (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3cee4: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
rtems_rfs_block_size size;
size.count = rtems_rfs_inode_get_block_count (handle);
3cee8: e1833401 orr r3, r3, r1, lsl #8 <== NOT EXECUTED
3ceec: e58d3000 str r3, [sp] <== NOT EXECUTED
size.offset = rtems_rfs_inode_get_block_offset (handle);
3cef0: e5d2300b ldrb r3, [r2, #11] <== NOT EXECUTED
3cef4: e5d2200a ldrb r2, [r2, #10] <== NOT EXECUTED
return rtems_rfs_block_get_size (fs, &size);
3cef8: e1a0100d mov r1, sp <== NOT EXECUTED
rtems_rfs_inode_get_size (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
rtems_rfs_block_size size;
size.count = rtems_rfs_inode_get_block_count (handle);
size.offset = rtems_rfs_inode_get_block_offset (handle);
3cefc: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
3cf00: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
return rtems_rfs_block_get_size (fs, &size);
3cf04: ebffee6c bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
}
3cf08: e28dd008 add sp, sp, #8 <== NOT EXECUTED
3cf0c: e8bd8000 pop {pc} <== NOT EXECUTED
0003cfbc <rtems_rfs_inode_initialise>:
rtems_rfs_inode_initialise (rtems_rfs_inode_handle* handle,
uint16_t links,
uint16_t mode,
uid_t uid,
gid_t gid)
{
3cfbc: e92d0030 push {r4, r5} <== NOT EXECUTED
3cfc0: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3cfc4: e590400c ldr r4, [r0, #12] <== NOT EXECUTED
3cfc8: e1a05c21 lsr r5, r1, #24 <== NOT EXECUTED
3cfcc: e1a0c000 mov ip, r0 <== NOT EXECUTED
3cfd0: e1dd00b8 ldrh r0, [sp, #8] <== NOT EXECUTED
3cfd4: e5c45000 strb r5, [r4] <== NOT EXECUTED
3cfd8: e59c400c ldr r4, [ip, #12] <== NOT EXECUTED
3cfdc: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
3cfe0: e5c41001 strb r1, [r4, #1] <== NOT EXECUTED
* @prarm flags The flags.
*/
static inline void
rtems_rfs_inode_set_flags (rtems_rfs_inode_handle* handle, uint16_t flags)
{
rtems_rfs_write_u16 (&handle->node->flags, flags);
3cfe4: e59c400c ldr r4, [ip, #12] <== NOT EXECUTED
3cfe8: e3a01000 mov r1, #0 <== NOT EXECUTED
3cfec: e5c41008 strb r1, [r4, #8] <== NOT EXECUTED
3cff0: e59c400c ldr r4, [ip, #12] <== NOT EXECUTED
3cff4: e5c41009 strb r1, [r4, #9] <== NOT EXECUTED
3cff8: e1a02802 lsl r2, r2, #16 <== NOT EXECUTED
* @prarm mode The mode.
*/
static inline void
rtems_rfs_inode_set_mode (rtems_rfs_inode_handle* handle, uint16_t mode)
{
rtems_rfs_write_u16 (&handle->node->mode, mode);
3cffc: e59c400c ldr r4, [ip, #12] <== NOT EXECUTED
3d000: e1a05c22 lsr r5, r2, #24 <== NOT EXECUTED
3d004: e5c45002 strb r5, [r4, #2] <== NOT EXECUTED
3d008: e59c400c ldr r4, [ip, #12] <== NOT EXECUTED
3d00c: e1a02822 lsr r2, r2, #16 <== NOT EXECUTED
3d010: e5c42003 strb r2, [r4, #3] <== NOT EXECUTED
3d014: e1a03803 lsl r3, r3, #16 <== NOT EXECUTED
3d018: e1a03823 lsr r3, r3, #16 <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_uid_gid (rtems_rfs_inode_handle* handle,
uint16_t uid, uint16_t gid)
{
rtems_rfs_write_u32 (&handle->node->owner, (((uint32_t) gid) << 16) | uid);
3d01c: e59c200c ldr r2, [ip, #12] <== NOT EXECUTED
3d020: e1830800 orr r0, r3, r0, lsl #16 <== NOT EXECUTED
3d024: e1a04c20 lsr r4, r0, #24 <== NOT EXECUTED
3d028: e5c24004 strb r4, [r2, #4] <== NOT EXECUTED
3d02c: e59c200c ldr r2, [ip, #12] <== NOT EXECUTED
3d030: e1a04820 lsr r4, r0, #16 <== NOT EXECUTED
3d034: e5c24005 strb r4, [r2, #5] <== NOT EXECUTED
3d038: e59c200c ldr r2, [ip, #12] <== NOT EXECUTED
3d03c: e1a00420 lsr r0, r0, #8 <== NOT EXECUTED
3d040: e5c20006 strb r0, [r2, #6] <== NOT EXECUTED
3d044: e59c200c ldr r2, [ip, #12] <== NOT EXECUTED
3d048: e5c23007 strb r3, [r2, #7] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
3d04c: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d050: e5c3100a strb r1, [r3, #10] <== NOT EXECUTED
3d054: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d058: e5c3100b strb r1, [r3, #11] <== NOT EXECUTED
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
3d05c: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d060: e5c3100c strb r1, [r3, #12] <== NOT EXECUTED
3d064: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d068: e5c3100d strb r1, [r3, #13] <== NOT EXECUTED
3d06c: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d070: e5c3100e strb r1, [r3, #14] <== NOT EXECUTED
3d074: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d078: e3a04001 mov r4, #1 <== NOT EXECUTED
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
3d07c: e5c3100f strb r1, [r3, #15] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d080: e5cc4010 strb r4, [ip, #16] <== NOT EXECUTED
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
3d084: e1a00001 mov r0, r1 <== NOT EXECUTED
3d088: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d08c: e0833001 add r3, r3, r1 <== NOT EXECUTED
3d090: e5c3001c strb r0, [r3, #28] <== NOT EXECUTED
3d094: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d098: e3a02000 mov r2, #0 <== NOT EXECUTED
3d09c: e0833001 add r3, r3, r1 <== NOT EXECUTED
3d0a0: e5c3201d strb r2, [r3, #29] <== NOT EXECUTED
3d0a4: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d0a8: e0833001 add r3, r3, r1 <== NOT EXECUTED
3d0ac: e5c3001e strb r0, [r3, #30] <== NOT EXECUTED
3d0b0: e59c300c ldr r3, [ip, #12] <== NOT EXECUTED
3d0b4: e0833001 add r3, r3, r1 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d0b8: e2811004 add r1, r1, #4 <== NOT EXECUTED
rtems_rfs_inode_set_flags (handle, 0);
rtems_rfs_inode_set_mode (handle, mode);
rtems_rfs_inode_set_uid_gid (handle, uid, gid);
rtems_rfs_inode_set_block_offset (handle, 0);
rtems_rfs_inode_set_block_count (handle, 0);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
3d0bc: e3510014 cmp r1, #20 <== NOT EXECUTED
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
3d0c0: e5c3001f strb r0, [r3, #31] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d0c4: e5cc4010 strb r4, [ip, #16] <== NOT EXECUTED
3d0c8: e3a03001 mov r3, #1 <== NOT EXECUTED
3d0cc: 1affffed bne 3d088 <rtems_rfs_inode_initialise+0xcc> <== NOT EXECUTED
* @param block_count The last map block number.
*/
static inline void
rtems_rfs_inode_set_last_map_block (rtems_rfs_inode_handle* handle, uint32_t last_map_block)
{
rtems_rfs_write_u32 (&handle->node->last_map_block, last_map_block);
3d0d0: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0d4: e5c12030 strb r2, [r1, #48] ; 0x30 <== NOT EXECUTED
3d0d8: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0dc: e5c12031 strb r2, [r1, #49] ; 0x31 <== NOT EXECUTED
3d0e0: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0e4: e5c12032 strb r2, [r1, #50] ; 0x32 <== NOT EXECUTED
3d0e8: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0ec: e5c12033 strb r2, [r1, #51] ; 0x33 <== NOT EXECUTED
* @param block_count The last data block number.
*/
static inline void
rtems_rfs_inode_set_last_data_block (rtems_rfs_inode_handle* handle, uint32_t last_data_block)
{
rtems_rfs_write_u32 (&handle->node->last_data_block, last_data_block);
3d0f0: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0f4: e5c12034 strb r2, [r1, #52] ; 0x34 <== NOT EXECUTED
3d0f8: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d0fc: e5c12035 strb r2, [r1, #53] ; 0x35 <== NOT EXECUTED
3d100: e59c100c ldr r1, [ip, #12] <== NOT EXECUTED
3d104: e5c12036 strb r2, [r1, #54] ; 0x36 <== NOT EXECUTED
3d108: e59c000c ldr r0, [ip, #12] <== NOT EXECUTED
rtems_rfs_inode_set_block (handle, b, 0);
rtems_rfs_inode_set_last_map_block (handle, 0);
rtems_rfs_inode_set_last_data_block (handle, 0);
return rtems_rfs_inode_time_stamp_now (handle, true, true);
3d10c: e1a01003 mov r1, r3 <== NOT EXECUTED
3d110: e5c02037 strb r2, [r0, #55] ; 0x37 <== NOT EXECUTED
3d114: e1a0000c mov r0, ip <== NOT EXECUTED
3d118: e1a02003 mov r2, r3 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d11c: e5cc3010 strb r3, [ip, #16] <== NOT EXECUTED
}
3d120: e8bd0030 pop {r4, r5} <== NOT EXECUTED
rtems_rfs_inode_set_block_count (handle, 0);
for (b = 0; b < RTEMS_RFS_INODE_BLOCKS; b++)
rtems_rfs_inode_set_block (handle, b, 0);
rtems_rfs_inode_set_last_map_block (handle, 0);
rtems_rfs_inode_set_last_data_block (handle, 0);
return rtems_rfs_inode_time_stamp_now (handle, true, true);
3d124: eaffff79 b 3cf10 <rtems_rfs_inode_time_stamp_now> <== NOT EXECUTED
0003d204 <rtems_rfs_inode_load>:
/*
* An inode does not move so once loaded no need to do again.
*/
if (!rtems_rfs_inode_is_loaded (handle))
3d204: e591300c ldr r3, [r1, #12] <== NOT EXECUTED
3d208: e3530000 cmp r3, #0 <== NOT EXECUTED
}
int
rtems_rfs_inode_load (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle)
{
3d20c: e92d4010 push {r4, lr} <== NOT EXECUTED
3d210: e1a04001 mov r4, r1 <== NOT EXECUTED
/*
* An inode does not move so once loaded no need to do again.
*/
if (!rtems_rfs_inode_is_loaded (handle))
3d214: 0a000004 beq 3d22c <rtems_rfs_inode_load+0x28> <== NOT EXECUTED
handle->node = rtems_rfs_buffer_data (&handle->buffer);
handle->node += handle->offset;
}
handle->loads++;
3d218: e5943024 ldr r3, [r4, #36] ; 0x24 <== NOT EXECUTED
3d21c: e2833001 add r3, r3, #1 <== NOT EXECUTED
3d220: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
3d224: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
}
3d228: e8bd8010 pop {r4, pc} <== NOT EXECUTED
if (!rtems_rfs_inode_is_loaded (handle))
{
int rc;
rc = rtems_rfs_buffer_handle_request (fs,&handle->buffer,
3d22c: e2811010 add r1, r1, #16 <== NOT EXECUTED
3d230: e594201c ldr r2, [r4, #28] <== NOT EXECUTED
3d234: e3a03001 mov r3, #1 <== NOT EXECUTED
3d238: ebfff205 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
handle->block, true);
if (rc > 0)
3d23c: e3500000 cmp r0, #0 <== NOT EXECUTED
3d240: c8bd8010 popgt {r4, pc} <== NOT EXECUTED
return rc;
handle->node = rtems_rfs_buffer_data (&handle->buffer);
handle->node += handle->offset;
3d244: e5943020 ldr r3, [r4, #32] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs,&handle->buffer,
handle->block, true);
if (rc > 0)
return rc;
handle->node = rtems_rfs_buffer_data (&handle->buffer);
3d248: e5942018 ldr r2, [r4, #24] <== NOT EXECUTED
handle->node += handle->offset;
3d24c: e1a01303 lsl r1, r3, #6 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs,&handle->buffer,
handle->block, true);
if (rc > 0)
return rc;
handle->node = rtems_rfs_buffer_data (&handle->buffer);
3d250: e5922020 ldr r2, [r2, #32] <== NOT EXECUTED
handle->node += handle->offset;
3d254: e0413183 sub r3, r1, r3, lsl #3 <== NOT EXECUTED
3d258: e0823003 add r3, r2, r3 <== NOT EXECUTED
3d25c: e584300c str r3, [r4, #12] <== NOT EXECUTED
3d260: eaffffec b 3d218 <rtems_rfs_inode_load+0x14> <== NOT EXECUTED
0003d264 <rtems_rfs_inode_open>:
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_OPEN))
printf ("rtems-rfs: inode-open: ino: %" PRIu32 "\n", ino);
if (ino == RTEMS_RFS_EMPTY_INO)
3d264: e3510000 cmp r1, #0 <== NOT EXECUTED
int
rtems_rfs_inode_open (rtems_rfs_file_system* fs,
rtems_rfs_ino ino,
rtems_rfs_inode_handle* handle,
bool load)
{
3d268: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3d26c: e1a04000 mov r4, r0 <== NOT EXECUTED
3d270: e1a05002 mov r5, r2 <== NOT EXECUTED
3d274: e20380ff and r8, r3, #255 ; 0xff <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_OPEN))
printf ("rtems-rfs: inode-open: ino: %" PRIu32 "\n", ino);
if (ino == RTEMS_RFS_EMPTY_INO)
3d278: 0a000026 beq 3d318 <rtems_rfs_inode_open+0xb4> <== NOT EXECUTED
return EINVAL;
if ((ino - RTEMS_RFS_ROOT_INO) > rtems_rfs_fs_inodes (fs))
3d27c: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
3d280: e2417001 sub r7, r1, #1 <== NOT EXECUTED
3d284: e1570003 cmp r7, r3 <== NOT EXECUTED
3d288: 8a000022 bhi 3d318 <rtems_rfs_inode_open+0xb4> <== NOT EXECUTED
return EINVAL;
handle->ino = ino;
3d28c: e5821008 str r1, [r2, #8] <== NOT EXECUTED
handle->node = NULL;
handle->loads = 0;
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
3d290: e5909028 ldr r9, [r0, #40] ; 0x28 <== NOT EXECUTED
if ((ino - RTEMS_RFS_ROOT_INO) > rtems_rfs_fs_inodes (fs))
return EINVAL;
handle->ino = ino;
handle->node = NULL;
3d294: e3a06000 mov r6, #0 <== NOT EXECUTED
3d298: e582600c str r6, [r2, #12] <== NOT EXECUTED
handle->loads = 0;
3d29c: e5826024 str r6, [r2, #36] ; 0x24 <== NOT EXECUTED
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
3d2a0: e1a01009 mov r1, r9 <== NOT EXECUTED
3d2a4: e1a00007 mov r0, r7 <== NOT EXECUTED
3d2a8: eb0077a2 bl 5b138 <__umodsi3> <== NOT EXECUTED
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
3d2ac: e594a02c ldr sl, [r4, #44] ; 0x2c <== NOT EXECUTED
handle->offset = gino % fs->inodes_per_block;
3d2b0: e1a0100a mov r1, sl <== NOT EXECUTED
handle->node = NULL;
handle->loads = 0;
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
3d2b4: e1a0b000 mov fp, r0 <== NOT EXECUTED
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
handle->offset = gino % fs->inodes_per_block;
3d2b8: eb00779e bl 5b138 <__umodsi3> <== NOT EXECUTED
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
3d2bc: e1a01009 mov r1, r9 <== NOT EXECUTED
gino = ino - RTEMS_RFS_ROOT_INO;
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
handle->offset = gino % fs->inodes_per_block;
3d2c0: e5850020 str r0, [r5, #32] <== NOT EXECUTED
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
3d2c4: e1a00007 mov r0, r7 <== NOT EXECUTED
3d2c8: eb007706 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3d2cc: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3d2d0: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3d2d4: e7937200 ldr r7, [r3, r0, lsl #4] <== NOT EXECUTED
3d2d8: e1a0100a mov r1, sl <== NOT EXECUTED
3d2dc: e1a0000b mov r0, fp <== NOT EXECUTED
3d2e0: eb007700 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3d2e4: e2877002 add r7, r7, #2 <== NOT EXECUTED
3d2e8: e0870000 add r0, r7, r0 <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_open (fs, &handle->buffer);
if ((rc == 0) && load)
3d2ec: e1580006 cmp r8, r6 <== NOT EXECUTED
group = gino / fs->group_inodes;
gino = gino % fs->group_inodes;
index = (gino / fs->inodes_per_block) + RTEMS_RFS_GROUP_INODE_BLOCK;
handle->offset = gino % fs->inodes_per_block;
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
3d2f0: e585001c str r0, [r5, #28] <== NOT EXECUTED
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3d2f4: e5856018 str r6, [r5, #24] <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3d2f8: e5c56010 strb r6, [r5, #16] <== NOT EXECUTED
handle->bnum = 0;
3d2fc: e5856014 str r6, [r5, #20] <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_open (fs, &handle->buffer);
if ((rc == 0) && load)
3d300: 01a00008 moveq r0, r8 <== NOT EXECUTED
3d304: 08bd8ff0 popeq {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
rc = rtems_rfs_inode_load (fs, handle);
3d308: e1a00004 mov r0, r4 <== NOT EXECUTED
3d30c: e1a01005 mov r1, r5 <== NOT EXECUTED
return rc;
}
3d310: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
handle->offset = gino % fs->inodes_per_block;
handle->block = rtems_rfs_group_block (&fs->groups[group], index);
rc = rtems_rfs_buffer_handle_open (fs, &handle->buffer);
if ((rc == 0) && load)
rc = rtems_rfs_inode_load (fs, handle);
3d314: eaffffba b 3d204 <rtems_rfs_inode_load> <== NOT EXECUTED
3d318: e3a00016 mov r0, #22 <== NOT EXECUTED
return rc;
}
3d31c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
0003bb5c <rtems_rfs_inode_overhead>:
static int
rtems_rfs_inode_overhead (rtems_rfs_file_system* fs)
{
int blocks;
int bits_per_block;
blocks = rtems_rfs_rup_quotient(fs->group_inodes * RTEMS_RFS_INODE_SIZE,
3bb5c: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
/**
* Return the inode overhead given a number of inodes.
*/
static int
rtems_rfs_inode_overhead (rtems_rfs_file_system* fs)
{
3bb60: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3bb64: e1a04000 mov r4, r0 <== NOT EXECUTED
int blocks;
int bits_per_block;
blocks = rtems_rfs_rup_quotient(fs->group_inodes * RTEMS_RFS_INODE_SIZE,
3bb68: e1a00303 lsl r0, r3, #6 <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bb6c: e0500183 subs r0, r0, r3, lsl #3 <== NOT EXECUTED
static int
rtems_rfs_inode_overhead (rtems_rfs_file_system* fs)
{
int blocks;
int bits_per_block;
blocks = rtems_rfs_rup_quotient(fs->group_inodes * RTEMS_RFS_INODE_SIZE,
3bb70: e5945008 ldr r5, [r4, #8] <== NOT EXECUTED
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bb74: 03a00e7d moveq r0, #2000 ; 0x7d0 <== NOT EXECUTED
3bb78: 0a000007 beq 3bb9c <rtems_rfs_inode_overhead+0x40> <== NOT EXECUTED
3bb7c: e2400001 sub r0, r0, #1 <== NOT EXECUTED
3bb80: e1a01005 mov r1, r5 <== NOT EXECUTED
3bb84: eb007cd7 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3bb88: e2800002 add r0, r0, #2 <== NOT EXECUTED
3bb8c: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3bb90: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3bb94: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
3bb98: e1a00180 lsl r0, r0, #3 <== NOT EXECUTED
rtems_rfs_fs_block_size (fs));
bits_per_block = rtems_rfs_bits_per_block (fs);
/*
* There could be more bits than blocks, eg 512K disk with 512 blocks.
*/
if (bits_per_block > (rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE))
3bb9c: e5943004 ldr r3, [r4, #4] <== NOT EXECUTED
* Return the number of bits that fit in the block size.
*/
static int
rtems_rfs_bits_per_block (rtems_rfs_file_system* fs)
{
return rtems_rfs_bitmap_numof_bits (rtems_rfs_fs_block_size (fs));
3bba0: e1a01185 lsl r1, r5, #3 <== NOT EXECUTED
rtems_rfs_fs_block_size (fs));
bits_per_block = rtems_rfs_bits_per_block (fs);
/*
* There could be more bits than blocks, eg 512K disk with 512 blocks.
*/
if (bits_per_block > (rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE))
3bba4: e2433001 sub r3, r3, #1 <== NOT EXECUTED
bits_per_block = rtems_rfs_fs_blocks (fs) - RTEMS_RFS_SUPERBLOCK_SIZE;
3bba8: e1510003 cmp r1, r3 <== NOT EXECUTED
3bbac: 21a01003 movcs r1, r3 <== NOT EXECUTED
3bbb0: eb007d10 bl 5aff8 <__aeabi_idiv> <== NOT EXECUTED
return ((blocks + 1) * 100 * 10) / bits_per_block;
}
3bbb4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
0003cf10 <rtems_rfs_inode_time_stamp_now>:
rtems_rfs_inode_time_stamp_now (rtems_rfs_inode_handle* handle,
bool atime,
bool mtime)
{
time_t now;
if (!rtems_rfs_inode_is_loaded (handle))
3cf10: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
3cf14: e3530000 cmp r3, #0 <== NOT EXECUTED
int
rtems_rfs_inode_time_stamp_now (rtems_rfs_inode_handle* handle,
bool atime,
bool mtime)
{
3cf18: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
3cf1c: e1a04000 mov r4, r0 <== NOT EXECUTED
3cf20: e20160ff and r6, r1, #255 ; 0xff <== NOT EXECUTED
3cf24: e20250ff and r5, r2, #255 ; 0xff <== NOT EXECUTED
time_t now;
if (!rtems_rfs_inode_is_loaded (handle))
3cf28: 03a00006 moveq r0, #6 <== NOT EXECUTED
3cf2c: 08bd8070 popeq {r4, r5, r6, pc} <== NOT EXECUTED
return ENXIO;
now = time (NULL);
3cf30: e3a00000 mov r0, #0 <== NOT EXECUTED
3cf34: eb00479f bl 4edb8 <time> <== NOT EXECUTED
if (atime)
3cf38: e3560000 cmp r6, #0 <== NOT EXECUTED
3cf3c: 0a00000c beq 3cf74 <rtems_rfs_inode_time_stamp_now+0x64> <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
3cf40: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf44: e1a02c20 lsr r2, r0, #24 <== NOT EXECUTED
3cf48: e5c32010 strb r2, [r3, #16] <== NOT EXECUTED
3cf4c: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf50: e1a02820 lsr r2, r0, #16 <== NOT EXECUTED
3cf54: e5c32011 strb r2, [r3, #17] <== NOT EXECUTED
3cf58: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf5c: e1a02420 lsr r2, r0, #8 <== NOT EXECUTED
3cf60: e5c32012 strb r2, [r3, #18] <== NOT EXECUTED
3cf64: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf68: e5c30013 strb r0, [r3, #19] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3cf6c: e3a03001 mov r3, #1 <== NOT EXECUTED
3cf70: e5c43010 strb r3, [r4, #16] <== NOT EXECUTED
rtems_rfs_inode_set_atime (handle, now);
if (mtime)
3cf74: e3550000 cmp r5, #0 <== NOT EXECUTED
3cf78: 01a00005 moveq r0, r5 <== NOT EXECUTED
3cf7c: 08bd8070 popeq {r4, r5, r6, pc} <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
3cf80: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf84: e1a02c20 lsr r2, r0, #24 <== NOT EXECUTED
3cf88: e5c32014 strb r2, [r3, #20] <== NOT EXECUTED
3cf8c: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf90: e1a02820 lsr r2, r0, #16 <== NOT EXECUTED
3cf94: e5c32015 strb r2, [r3, #21] <== NOT EXECUTED
3cf98: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cf9c: e1a02420 lsr r2, r0, #8 <== NOT EXECUTED
3cfa0: e5c32016 strb r2, [r3, #22] <== NOT EXECUTED
3cfa4: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3cfa8: e5c30017 strb r0, [r3, #23] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3cfac: e3a03001 mov r3, #1 <== NOT EXECUTED
3cfb0: e5c43010 strb r3, [r4, #16] <== NOT EXECUTED
3cfb4: e3a00000 mov r0, #0 <== NOT EXECUTED
rtems_rfs_inode_set_mtime (handle, now);
return 0;
}
3cfb8: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
0003d128 <rtems_rfs_inode_unload>:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_UNLOAD))
printf ("rtems-rfs: inode-unload: ino=%" PRIu32 " loads=%i loaded=%s\n",
handle->ino, handle->loads,
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
3d128: e591300c ldr r3, [r1, #12] <== NOT EXECUTED
3d12c: e3530000 cmp r3, #0 <== NOT EXECUTED
int
rtems_rfs_inode_unload (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* handle,
bool update_ctime)
{
3d130: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3d134: e20220ff and r2, r2, #255 ; 0xff <== NOT EXECUTED
3d138: e1a04001 mov r4, r1 <== NOT EXECUTED
3d13c: e1a05000 mov r5, r0 <== NOT EXECUTED
if (rtems_rfs_trace (RTEMS_RFS_TRACE_INODE_UNLOAD))
printf ("rtems-rfs: inode-unload: ino=%" PRIu32 " loads=%i loaded=%s\n",
handle->ino, handle->loads,
rtems_rfs_inode_is_loaded (handle) ? "yes" : "no");
if (rtems_rfs_inode_is_loaded (handle))
3d140: 0a000012 beq 3d190 <rtems_rfs_inode_unload+0x68> <== NOT EXECUTED
{
if (handle->loads == 0)
3d144: e5910024 ldr r0, [r1, #36] ; 0x24 <== NOT EXECUTED
3d148: e3500000 cmp r0, #0 <== NOT EXECUTED
3d14c: 03a00005 moveq r0, #5 <== NOT EXECUTED
3d150: 08bd8030 popeq {r4, r5, pc} <== NOT EXECUTED
return EIO;
handle->loads--;
3d154: e2400001 sub r0, r0, #1 <== NOT EXECUTED
if (handle->loads == 0)
3d158: e3500000 cmp r0, #0 <== NOT EXECUTED
if (rtems_rfs_inode_is_loaded (handle))
{
if (handle->loads == 0)
return EIO;
handle->loads--;
3d15c: e5810024 str r0, [r1, #36] ; 0x24 <== NOT EXECUTED
if (handle->loads == 0)
3d160: 1a00000a bne 3d190 <rtems_rfs_inode_unload+0x68> <== NOT EXECUTED
{
/*
* If the buffer is dirty it will be release. Also set the ctime.
*/
if (rtems_rfs_buffer_dirty (&handle->buffer) && update_ctime)
3d164: e5d13010 ldrb r3, [r1, #16] <== NOT EXECUTED
3d168: e3530000 cmp r3, #0 <== NOT EXECUTED
3d16c: 0a000001 beq 3d178 <rtems_rfs_inode_unload+0x50> <== NOT EXECUTED
3d170: e3520000 cmp r2, #0 <== NOT EXECUTED
3d174: 1a000007 bne 3d198 <rtems_rfs_inode_unload+0x70> <== NOT EXECUTED
rtems_rfs_inode_set_ctime (handle, time (NULL));
rc = rtems_rfs_buffer_handle_release (fs, &handle->buffer);
3d178: e1a00005 mov r0, r5 <== NOT EXECUTED
3d17c: e2841010 add r1, r4, #16 <== NOT EXECUTED
3d180: ebfff1e9 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->node = NULL;
3d184: e3a03000 mov r3, #0 <== NOT EXECUTED
3d188: e584300c str r3, [r4, #12] <== NOT EXECUTED
3d18c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
3d190: e3a00000 mov r0, #0 <== NOT EXECUTED
}
}
return rc;
}
3d194: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
{
/*
* If the buffer is dirty it will be release. Also set the ctime.
*/
if (rtems_rfs_buffer_dirty (&handle->buffer) && update_ctime)
rtems_rfs_inode_set_ctime (handle, time (NULL));
3d198: eb004706 bl 4edb8 <time> <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_ctime (rtems_rfs_inode_handle* handle,
rtems_rfs_time ctime)
{
rtems_rfs_write_u32 (&handle->node->ctime, ctime);
3d19c: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3d1a0: e1a02c20 lsr r2, r0, #24 <== NOT EXECUTED
3d1a4: e5c32018 strb r2, [r3, #24] <== NOT EXECUTED
3d1a8: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3d1ac: e1a02820 lsr r2, r0, #16 <== NOT EXECUTED
3d1b0: e5c32019 strb r2, [r3, #25] <== NOT EXECUTED
3d1b4: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3d1b8: e1a02420 lsr r2, r0, #8 <== NOT EXECUTED
3d1bc: e5c3201a strb r2, [r3, #26] <== NOT EXECUTED
3d1c0: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3d1c4: e5c3001b strb r0, [r3, #27] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d1c8: e3a03001 mov r3, #1 <== NOT EXECUTED
3d1cc: e5c43010 strb r3, [r4, #16] <== NOT EXECUTED
3d1d0: eaffffe8 b 3d178 <rtems_rfs_inode_unload+0x50> <== NOT EXECUTED
0003dc54 <rtems_rfs_link>:
const char* name,
int length,
rtems_rfs_ino parent,
rtems_rfs_ino target,
bool link_dir)
{
3dc54: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3dc58: e24dd054 sub sp, sp, #84 ; 0x54 <== NOT EXECUTED
3dc5c: e59db078 ldr fp, [sp, #120] ; 0x78 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf ("(%" PRIu32 ")\n", target);
}
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3dc60: e28d5004 add r5, sp, #4 <== NOT EXECUTED
const char* name,
int length,
rtems_rfs_ino parent,
rtems_rfs_ino target,
bool link_dir)
{
3dc64: e1a08001 mov r8, r1 <== NOT EXECUTED
3dc68: e1a0a002 mov sl, r2 <== NOT EXECUTED
3dc6c: e1a07003 mov r7, r3 <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf ("(%" PRIu32 ")\n", target);
}
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3dc70: e1a0100b mov r1, fp <== NOT EXECUTED
3dc74: e1a02005 mov r2, r5 <== NOT EXECUTED
3dc78: e3a03001 mov r3, #1 <== NOT EXECUTED
const char* name,
int length,
rtems_rfs_ino parent,
rtems_rfs_ino target,
bool link_dir)
{
3dc7c: e1a04000 mov r4, r0 <== NOT EXECUTED
3dc80: e5dd607c ldrb r6, [sp, #124] ; 0x7c <== NOT EXECUTED
for (c = 0; c < length; c++)
printf ("%c", name[c]);
printf ("(%" PRIu32 ")\n", target);
}
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3dc84: ebfffd76 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3dc88: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3dc8c: 1a000036 bne 3dd6c <rtems_rfs_link+0x118> <== NOT EXECUTED
/*
* If the target inode is a directory and we cannot link directories
* return a not supported error code.
*/
if (!link_dir && S_ISDIR (rtems_rfs_inode_get_mode (&target_inode)))
3dc90: e3560000 cmp r6, #0 <== NOT EXECUTED
3dc94: 1a000005 bne 3dcb0 <rtems_rfs_link+0x5c> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
3dc98: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
3dc9c: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
3dca0: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
3dca4: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
3dca8: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
3dcac: 0a000038 beq 3dd94 <rtems_rfs_link+0x140> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &target_inode);
return ENOTSUP;
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
3dcb0: e28d602c add r6, sp, #44 ; 0x2c <== NOT EXECUTED
3dcb4: e1a01007 mov r1, r7 <== NOT EXECUTED
3dcb8: e1a00004 mov r0, r4 <== NOT EXECUTED
3dcbc: e1a02006 mov r2, r6 <== NOT EXECUTED
3dcc0: e3a03001 mov r3, #1 <== NOT EXECUTED
3dcc4: ebfffd66 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3dcc8: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3dccc: 1a00002c bne 3dd84 <rtems_rfs_link+0x130> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, target);
3dcd0: e1a02008 mov r2, r8 <== NOT EXECUTED
3dcd4: e1a0300a mov r3, sl <== NOT EXECUTED
3dcd8: e1a00004 mov r0, r4 <== NOT EXECUTED
3dcdc: e1a01006 mov r1, r6 <== NOT EXECUTED
3dce0: e58db000 str fp, [sp] <== NOT EXECUTED
3dce4: ebfff167 bl 3a288 <rtems_rfs_dir_add_entry> <== NOT EXECUTED
if (rc > 0)
3dce8: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3dcec: ca000021 bgt 3dd78 <rtems_rfs_link+0x124> <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3dcf0: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
3dcf4: e5d30000 ldrb r0, [r3] <== NOT EXECUTED
3dcf8: e5d31001 ldrb r1, [r3, #1] <== NOT EXECUTED
if (links == 0xffff)
3dcfc: e3a02801 mov r2, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3dd00: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
if (links == 0xffff)
3dd04: e2422001 sub r2, r2, #1 <== NOT EXECUTED
3dd08: e1510002 cmp r1, r2 <== NOT EXECUTED
3dd0c: 12811001 addne r1, r1, #1 <== NOT EXECUTED
3dd10: 11a01801 lslne r1, r1, #16 <== NOT EXECUTED
3dd14: 11a00821 lsrne r0, r1, #16 <== NOT EXECUTED
3dd18: 03a01000 moveq r1, #0 <== NOT EXECUTED
3dd1c: 11a01c21 lsrne r1, r1, #24 <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3dd20: e5c31000 strb r1, [r3] <== NOT EXECUTED
3dd24: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
if (links == 0xffff)
3dd28: 03a00001 moveq r0, #1 <== NOT EXECUTED
3dd2c: 120000ff andne r0, r0, #255 ; 0xff <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3dd30: e3a03001 mov r3, #1 <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3dd34: e5c20001 strb r0, [r2, #1] <== NOT EXECUTED
}
links = rtems_rfs_inode_get_links (&target_inode) + 1;
rtems_rfs_inode_set_links (&target_inode, links);
rc = rtems_rfs_inode_time_stamp_now (&parent_inode, true, true);
3dd38: e1a01003 mov r1, r3 <== NOT EXECUTED
3dd3c: e1a00006 mov r0, r6 <== NOT EXECUTED
3dd40: e1a02003 mov r2, r3 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3dd44: e5cd3014 strb r3, [sp, #20] <== NOT EXECUTED
3dd48: ebfffc70 bl 3cf10 <rtems_rfs_inode_time_stamp_now> <== NOT EXECUTED
if (rc > 0)
3dd4c: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3dd50: da000014 ble 3dda8 <rtems_rfs_link+0x154> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &parent_inode);
3dd54: e1a01006 mov r1, r6 <== NOT EXECUTED
3dd58: e1a00004 mov r0, r4 <== NOT EXECUTED
3dd5c: ebfffd1c bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
3dd60: e1a00004 mov r0, r4 <== NOT EXECUTED
3dd64: e1a01005 mov r1, r5 <== NOT EXECUTED
3dd68: ebfffd19 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
}
rc = rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
3dd6c: e1a00009 mov r0, r9 <== NOT EXECUTED
3dd70: e28dd054 add sp, sp, #84 ; 0x54 <== NOT EXECUTED
3dd74: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
rc = rtems_rfs_dir_add_entry (fs, &parent_inode, name, length, target);
if (rc > 0)
{
rtems_rfs_inode_close (fs, &parent_inode);
3dd78: e1a01006 mov r1, r6 <== NOT EXECUTED
3dd7c: e1a00004 mov r0, r4 <== NOT EXECUTED
3dd80: ebfffd13 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
3dd84: e1a00004 mov r0, r4 <== NOT EXECUTED
3dd88: e1a01005 mov r1, r5 <== NOT EXECUTED
3dd8c: ebfffd10 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3dd90: eafffff5 b 3dd6c <rtems_rfs_link+0x118> <== NOT EXECUTED
* If the target inode is a directory and we cannot link directories
* return a not supported error code.
*/
if (!link_dir && S_ISDIR (rtems_rfs_inode_get_mode (&target_inode)))
{
rtems_rfs_inode_close (fs, &target_inode);
3dd94: e1a00004 mov r0, r4 <== NOT EXECUTED
3dd98: e1a01005 mov r1, r5 <== NOT EXECUTED
3dd9c: ebfffd0c bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3dda0: e3a09086 mov r9, #134 ; 0x86 <== NOT EXECUTED
return ENOTSUP;
3dda4: eafffff0 b 3dd6c <rtems_rfs_link+0x118> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_inode_close (fs, &parent_inode);
3dda8: e1a01006 mov r1, r6 <== NOT EXECUTED
3ddac: e1a00004 mov r0, r4 <== NOT EXECUTED
3ddb0: ebfffd07 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3ddb4: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3ddb8: cafffff1 bgt 3dd84 <rtems_rfs_link+0x130> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_inode_close (fs, &target_inode);
3ddbc: e1a00004 mov r0, r4 <== NOT EXECUTED
3ddc0: e1a01005 mov r1, r5 <== NOT EXECUTED
3ddc4: ebfffd02 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3ddc8: e1a09000 mov r9, r0 <== NOT EXECUTED
return rc;
3ddcc: eaffffe6 b 3dd6c <rtems_rfs_link+0x118> <== NOT EXECUTED
0003ddec <rtems_rfs_mutex_create>:
RTEMS_NO_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL)
#endif
int
rtems_rfs_mutex_create (rtems_rfs_mutex* mutex)
{
3ddec: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
3ddf0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_create (rtems_build_name ('R', 'F', 'S', 'm'),
3ddf4: e58d0000 str r0, [sp] <== NOT EXECUTED
3ddf8: e3a01001 mov r1, #1 <== NOT EXECUTED
3ddfc: e3a02024 mov r2, #36 ; 0x24 <== NOT EXECUTED
3de00: e3a03000 mov r3, #0 <== NOT EXECUTED
3de04: e59f0014 ldr r0, [pc, #20] ; 3de20 <rtems_rfs_mutex_create+0x34><== NOT EXECUTED
3de08: ebff38f8 bl c1f0 <rtems_semaphore_create> <== NOT EXECUTED
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
}
3de0c: e3500000 cmp r0, #0 <== NOT EXECUTED
3de10: 13a00005 movne r0, #5 <== NOT EXECUTED
3de14: 03a00000 moveq r0, #0 <== NOT EXECUTED
3de18: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3de1c: e8bd8000 pop {pc} <== NOT EXECUTED
0003ddd0 <rtems_rfs_mutex_destroy>:
return 0;
}
int
rtems_rfs_mutex_destroy (rtems_rfs_mutex* mutex)
{
3ddd0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
#if __rtems__
rtems_status_code sc;
sc = rtems_semaphore_delete (*mutex);
3ddd4: e5900000 ldr r0, [r0] <== NOT EXECUTED
3ddd8: ebff3976 bl c3b8 <rtems_semaphore_delete> <== NOT EXECUTED
rtems_status_text (sc));
return EIO;
}
#endif
return 0;
}
3dddc: e3500000 cmp r0, #0 <== NOT EXECUTED
3dde0: 13a00005 movne r0, #5 <== NOT EXECUTED
3dde4: 03a00000 moveq r0, #0 <== NOT EXECUTED
3dde8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
00039764 <rtems_rfs_release_chain>:
static int
rtems_rfs_release_chain (rtems_chain_control* chain,
uint32_t* count,
bool modified)
{
39764: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
39768: e3a05000 mov r5, #0 <== NOT EXECUTED
3976c: e1a04000 mov r4, r0 <== NOT EXECUTED
39770: e1a06001 mov r6, r1 <== NOT EXECUTED
39774: e202a0ff and sl, r2, #255 ; 0xff <== NOT EXECUTED
39778: e2807004 add r7, r0, #4 <== NOT EXECUTED
while (!rtems_chain_is_empty (chain))
{
buffer = (rtems_rfs_buffer*) rtems_chain_get (chain);
(*count)--;
buffer->user = (void*) 0;
3977c: e1a08005 mov r8, r5 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: release-chain: count=%" PRIu32 "\n", *count);
while (!rtems_chain_is_empty (chain))
39780: ea00000d b 397bc <rtems_rfs_release_chain+0x58> <== NOT EXECUTED
*/
RTEMS_INLINE_ROUTINE rtems_chain_node *rtems_chain_get(
rtems_chain_control *the_chain
)
{
return _Chain_Get( the_chain );
39784: ebff4e52 bl d0d4 <_Chain_Get> <== NOT EXECUTED
{
buffer = (rtems_rfs_buffer*) rtems_chain_get (chain);
(*count)--;
39788: e5962000 ldr r2, [r6] <== NOT EXECUTED
3978c: e2422001 sub r2, r2, #1 <== NOT EXECUTED
39790: e5862000 str r2, [r6] <== NOT EXECUTED
buffer->user = (void*) 0;
39794: e5808038 str r8, [r0, #56] ; 0x38 <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (buffer, modified);
39798: e1a0100a mov r1, sl <== NOT EXECUTED
3979c: eb0024a2 bl 42a2c <rtems_rfs_buffer_bdbuf_release> <== NOT EXECUTED
if ((rc > 0) && (rrc == 0))
397a0: e3500000 cmp r0, #0 <== NOT EXECUTED
397a4: d3a03000 movle r3, #0 <== NOT EXECUTED
397a8: c3a03001 movgt r3, #1 <== NOT EXECUTED
397ac: e3550000 cmp r5, #0 <== NOT EXECUTED
397b0: 13a03000 movne r3, #0 <== NOT EXECUTED
397b4: e3530000 cmp r3, #0 <== NOT EXECUTED
397b8: 11a05000 movne r5, r0 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_BUFFER_CHAINS))
printf ("rtems-rfs: release-chain: count=%" PRIu32 "\n", *count);
while (!rtems_chain_is_empty (chain))
397bc: e5943000 ldr r3, [r4] <== NOT EXECUTED
397c0: e1530007 cmp r3, r7 <== NOT EXECUTED
397c4: e1a00004 mov r0, r4 <== NOT EXECUTED
397c8: 1affffed bne 39784 <rtems_rfs_release_chain+0x20> <== NOT EXECUTED
rc = rtems_rfs_buffer_io_release (buffer, modified);
if ((rc > 0) && (rrc == 0))
rrc = rc;
}
return rrc;
}
397cc: e1a00005 mov r0, r5 <== NOT EXECUTED
397d0: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
000226e0 <rtems_rfs_rtems_chown>:
static int
rtems_rfs_rtems_chown (rtems_filesystem_location_info_t *pathloc,
uid_t owner,
gid_t group)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
226e0: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
static int
rtems_rfs_rtems_chown (rtems_filesystem_location_info_t *pathloc,
uid_t owner,
gid_t group)
{
226e4: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
226e8: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
226ec: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
226f0: e5908000 ldr r8, [r0] <== NOT EXECUTED
static int
rtems_rfs_rtems_chown (rtems_filesystem_location_info_t *pathloc,
uid_t owner,
gid_t group)
{
226f4: e1a06801 lsl r6, r1, #16 <== NOT EXECUTED
226f8: e3a01000 mov r1, #0 <== NOT EXECUTED
226fc: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
22700: e1a07802 lsl r7, r2, #16 <== NOT EXECUTED
22704: e5930000 ldr r0, [r3] <== NOT EXECUTED
22708: e1a02001 mov r2, r1 <== NOT EXECUTED
2270c: ebffa76c bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
printf ("rtems-rfs-rtems: chown: in: ino:%" PRId32 " uid:%d gid:%d\n",
ino, owner, group);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
22710: e1a01008 mov r1, r8 <== NOT EXECUTED
22714: e1a00004 mov r0, r4 <== NOT EXECUTED
22718: e1a0200d mov r2, sp <== NOT EXECUTED
2271c: e3a03001 mov r3, #1 <== NOT EXECUTED
22720: eb006acf bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
22724: e2508000 subs r8, r0, #0 <== NOT EXECUTED
static int
rtems_rfs_rtems_chown (rtems_filesystem_location_info_t *pathloc,
uid_t owner,
gid_t group)
{
22728: e1a06826 lsr r6, r6, #16 <== NOT EXECUTED
2272c: e1a07827 lsr r7, r7, #16 <== NOT EXECUTED
ino, owner, group);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc > 0)
22730: da000009 ble 2275c <rtems_rfs_rtems_chown+0x7c> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
22734: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
22738: e1a00004 mov r0, r4 <== NOT EXECUTED
2273c: eb005c24 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
22740: e5950000 ldr r0, [r5] <== NOT EXECUTED
22744: ebffa7a6 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("chown: opening inode", rc);
22748: eb008228 bl 42ff0 <__errno> <== NOT EXECUTED
2274c: e5808000 str r8, [r0] <== NOT EXECUTED
22750: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
22754: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
22758: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_uid_gid (rtems_rfs_inode_handle* handle,
uint16_t uid, uint16_t gid)
{
rtems_rfs_write_u32 (&handle->node->owner, (((uint32_t) gid) << 16) | uid);
2275c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
22760: e1867807 orr r7, r6, r7, lsl #16 <== NOT EXECUTED
22764: e1a02c27 lsr r2, r7, #24 <== NOT EXECUTED
22768: e5c32004 strb r2, [r3, #4] <== NOT EXECUTED
2276c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
22770: e1a02827 lsr r2, r7, #16 <== NOT EXECUTED
22774: e5c32005 strb r2, [r3, #5] <== NOT EXECUTED
22778: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
2277c: e1a07427 lsr r7, r7, #8 <== NOT EXECUTED
22780: e5c37006 strb r7, [r3, #6] <== NOT EXECUTED
22784: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
}
#endif
rtems_rfs_inode_set_uid_gid (&inode, owner, group);
rc = rtems_rfs_inode_close (fs, &inode);
22788: e1a0100d mov r1, sp <== NOT EXECUTED
2278c: e5c36007 strb r6, [r3, #7] <== NOT EXECUTED
22790: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
22794: e3a03001 mov r3, #1 <== NOT EXECUTED
22798: e5cd3010 strb r3, [sp, #16] <== NOT EXECUTED
2279c: eb006a8c bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc)
227a0: e2505000 subs r5, r0, #0 <== NOT EXECUTED
227a4: 0a000008 beq 227cc <rtems_rfs_rtems_chown+0xec> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
227a8: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
227ac: e1a00004 mov r0, r4 <== NOT EXECUTED
227b0: eb005c07 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
227b4: e5960000 ldr r0, [r6] <== NOT EXECUTED
227b8: ebffa789 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("chown: closing inode", rc);
227bc: eb00820b bl 42ff0 <__errno> <== NOT EXECUTED
227c0: e5805000 str r5, [r0] <== NOT EXECUTED
227c4: e3e00000 mvn r0, #0 <== NOT EXECUTED
227c8: eaffffe1 b 22754 <rtems_rfs_rtems_chown+0x74> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
227cc: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
227d0: e1a00004 mov r0, r4 <== NOT EXECUTED
227d4: eb005bfe bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
227d8: e5960000 ldr r0, [r6] <== NOT EXECUTED
227dc: ebffa780 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
227e0: e1a00005 mov r0, r5 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
227e4: eaffffda b 22754 <rtems_rfs_rtems_chown+0x74> <== NOT EXECUTED
0003df44 <rtems_rfs_rtems_device_close>:
* @return int
*/
static int
rtems_rfs_rtems_device_close (rtems_libio_t* iop)
{
3df44: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
3df48: e1a03000 mov r3, r0 <== NOT EXECUTED
3df4c: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
rtems_libio_open_close_args_t args;
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
3df50: e5900030 ldr r0, [r0, #48] ; 0x30 <== NOT EXECUTED
minor = (intptr_t) iop->data1;
args.iop = iop;
args.flags = 0;
3df54: e3a0c000 mov ip, #0 <== NOT EXECUTED
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
3df58: e5931034 ldr r1, [r3, #52] ; 0x34 <== NOT EXECUTED
args.iop = iop;
args.flags = 0;
args.mode = 0;
status = rtems_io_close (major, minor, (void *) &args);
3df5c: e1a0200d mov r2, sp <== NOT EXECUTED
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
3df60: e58d3000 str r3, [sp] <== NOT EXECUTED
args.flags = 0;
args.mode = 0;
3df64: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
args.flags = 0;
3df68: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
args.mode = 0;
status = rtems_io_close (major, minor, (void *) &args);
3df6c: eb000897 bl 401d0 <rtems_io_close> <== NOT EXECUTED
if (status)
3df70: e2503000 subs r3, r0, #0 <== NOT EXECUTED
3df74: 01a00003 moveq r0, r3 <== NOT EXECUTED
return rtems_deviceio_errno (status);
3df78: 1b00029c blne 3e9f0 <rtems_deviceio_errno> <== NOT EXECUTED
return 0;
}
3df7c: e28dd00c add sp, sp, #12 <== NOT EXECUTED
3df80: e8bd8000 pop {pc} <== NOT EXECUTED
0003de30 <rtems_rfs_rtems_device_ftruncate>:
static int
rtems_rfs_rtems_device_ftruncate (rtems_libio_t* iop, rtems_off64_t length)
{
return 0;
}
3de30: e3a00000 mov r0, #0 <== NOT EXECUTED
3de34: e12fff1e bx lr <== NOT EXECUTED
0003de38 <rtems_rfs_rtems_device_ioctl>:
static int
rtems_rfs_rtems_device_ioctl (rtems_libio_t* iop,
uint32_t command,
void* buffer)
{
3de38: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
3de3c: e1a03000 mov r3, r0 <== NOT EXECUTED
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
3de40: e593c034 ldr ip, [r3, #52] ; 0x34 <== NOT EXECUTED
static int
rtems_rfs_rtems_device_ioctl (rtems_libio_t* iop,
uint32_t command,
void* buffer)
{
3de44: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
rtems_libio_ioctl_args_t args;
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
3de48: e5900030 ldr r0, [r0, #48] ; 0x30 <== NOT EXECUTED
minor = (intptr_t) iop->data1;
args.iop = iop;
args.command = command;
args.buffer = buffer;
3de4c: e98d0006 stmib sp, {r1, r2} <== NOT EXECUTED
status = rtems_io_control (major, minor, (void *) &args);
3de50: e1a0200d mov r2, sp <== NOT EXECUTED
3de54: e1a0100c mov r1, ip <== NOT EXECUTED
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
3de58: e58d3000 str r3, [sp] <== NOT EXECUTED
args.command = command;
args.buffer = buffer;
status = rtems_io_control (major, minor, (void *) &args);
3de5c: eb0008ef bl 40220 <rtems_io_control> <== NOT EXECUTED
if (status)
3de60: e3500000 cmp r0, #0 <== NOT EXECUTED
return rtems_deviceio_errno (status);
return args.ioctl_return;
3de64: 059d000c ldreq r0, [sp, #12] <== NOT EXECUTED
args.iop = iop;
args.command = command;
args.buffer = buffer;
status = rtems_io_control (major, minor, (void *) &args);
if (status)
3de68: 1a000001 bne 3de74 <rtems_rfs_rtems_device_ioctl+0x3c> <== NOT EXECUTED
return rtems_deviceio_errno (status);
return args.ioctl_return;
}
3de6c: e28dd010 add sp, sp, #16 <== NOT EXECUTED
3de70: e8bd8000 pop {pc} <== NOT EXECUTED
args.command = command;
args.buffer = buffer;
status = rtems_io_control (major, minor, (void *) &args);
if (status)
return rtems_deviceio_errno (status);
3de74: eb0002dd bl 3e9f0 <rtems_deviceio_errno> <== NOT EXECUTED
3de78: eafffffb b 3de6c <rtems_rfs_rtems_device_ioctl+0x34> <== NOT EXECUTED
0003de24 <rtems_rfs_rtems_device_lseek>:
rtems_rfs_rtems_device_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
return offset;
}
3de24: e1a00001 mov r0, r1 <== NOT EXECUTED
3de28: e1a01002 mov r1, r2 <== NOT EXECUTED
3de2c: e12fff1e bx lr <== NOT EXECUTED
0003df84 <rtems_rfs_rtems_device_open>:
static int
rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode)
{
3df84: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_libio_open_close_args_t args;
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3df88: e5902028 ldr r2, [r0, #40] ; 0x28 <== NOT EXECUTED
3df8c: e5924034 ldr r4, [r2, #52] ; 0x34 <== NOT EXECUTED
3df90: e594207c ldr r2, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
3df94: e5907038 ldr r7, [r0, #56] ; 0x38 <== NOT EXECUTED
static int
rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode)
{
3df98: e24dd044 sub sp, sp, #68 ; 0x44 <== NOT EXECUTED
3df9c: e3a01000 mov r1, #0 <== NOT EXECUTED
3dfa0: e1a05000 mov r5, r0 <== NOT EXECUTED
rtems_status_code status;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3dfa4: e28d6010 add r6, sp, #16 <== NOT EXECUTED
3dfa8: e5920000 ldr r0, [r2] <== NOT EXECUTED
3dfac: e1a02001 mov r2, r1 <== NOT EXECUTED
static int
rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
const char *pathname,
uint32_t flag,
uint32_t mode)
{
3dfb0: e1a08003 mov r8, r3 <== NOT EXECUTED
3dfb4: ebff3942 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_status_code status;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3dfb8: e1a01007 mov r1, r7 <== NOT EXECUTED
3dfbc: e1a00004 mov r0, r4 <== NOT EXECUTED
3dfc0: e1a02006 mov r2, r6 <== NOT EXECUTED
3dfc4: e3a03001 mov r3, #1 <== NOT EXECUTED
3dfc8: ebfffca5 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3dfcc: e2507000 subs r7, r0, #0 <== NOT EXECUTED
3dfd0: da000009 ble 3dffc <rtems_rfs_rtems_device_open+0x78> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3dfd4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3dfd8: e1a00004 mov r0, r4 <== NOT EXECUTED
3dfdc: ebffedfc bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3dfe0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3dfe4: ebff397e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("device_open: opening inode", rc);
3dfe8: eb001400 bl 42ff0 <__errno> <== NOT EXECUTED
3dfec: e5807000 str r7, [r0] <== NOT EXECUTED
3dff0: e3e00000 mvn r0, #0 <== NOT EXECUTED
status = rtems_io_open (major, minor, (void *) &args);
if (status)
return rtems_deviceio_errno(status);
return 0;
}
3dff4: e28dd044 add sp, sp, #68 ; 0x44 <== NOT EXECUTED
3dff8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
3dffc: e59d201c ldr r2, [sp, #28] <== NOT EXECUTED
3e000: e282301c add r3, r2, #28 <== NOT EXECUTED
3e004: e5d2a01c ldrb sl, [r2, #28] <== NOT EXECUTED
3e008: e5d32007 ldrb r2, [r3, #7] <== NOT EXECUTED
3e00c: e58d2008 str r2, [sp, #8] <== NOT EXECUTED
3e010: e5d32002 ldrb r2, [r3, #2] <== NOT EXECUTED
}
major = rtems_rfs_inode_get_block (&inode, 0);
minor = rtems_rfs_inode_get_block (&inode, 1);
rc = rtems_rfs_inode_close (fs, &inode);
3e014: e1a01006 mov r1, r6 <== NOT EXECUTED
3e018: e5d36001 ldrb r6, [r3, #1] <== NOT EXECUTED
3e01c: e58d200c str r2, [sp, #12] <== NOT EXECUTED
3e020: e5d37003 ldrb r7, [r3, #3] <== NOT EXECUTED
3e024: e5d39004 ldrb r9, [r3, #4] <== NOT EXECUTED
3e028: e5d3b005 ldrb fp, [r3, #5] <== NOT EXECUTED
3e02c: e5d33006 ldrb r3, [r3, #6] <== NOT EXECUTED
3e030: e1a00004 mov r0, r4 <== NOT EXECUTED
3e034: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
3e038: ebfffc65 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3e03c: e2503000 subs r3, r0, #0 <== NOT EXECUTED
3e040: da00000a ble 3e070 <rtems_rfs_rtems_device_open+0xec> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e044: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e048: e1a00004 mov r0, r4 <== NOT EXECUTED
3e04c: e58d3000 str r3, [sp] <== NOT EXECUTED
3e050: ebffeddf bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e054: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e058: ebff3961 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("device_open: closing inode", rc);
3e05c: eb0013e3 bl 42ff0 <__errno> <== NOT EXECUTED
3e060: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3e064: e5803000 str r3, [r0] <== NOT EXECUTED
3e068: e3e00000 mvn r0, #0 <== NOT EXECUTED
3e06c: eaffffe0 b 3dff4 <rtems_rfs_rtems_device_open+0x70> <== NOT EXECUTED
3e070: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
3e074: e1a0b80b lsl fp, fp, #16 <== NOT EXECUTED
3e078: e18b9c09 orr r9, fp, r9, lsl #24 <== NOT EXECUTED
3e07c: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e080: e594b07c ldr fp, [r4, #124] ; 0x7c <== NOT EXECUTED
3e084: e1899003 orr r9, r9, r3 <== NOT EXECUTED
3e088: e1877c0a orr r7, r7, sl, lsl #24 <== NOT EXECUTED
3e08c: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
3e090: e1876806 orr r6, r7, r6, lsl #16 <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e094: e1a00004 mov r0, r4 <== NOT EXECUTED
3e098: e1866402 orr r6, r6, r2, lsl #8 <== NOT EXECUTED
3e09c: e1899403 orr r9, r9, r3, lsl #8 <== NOT EXECUTED
3e0a0: ebffedcb bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e0a4: e59b0000 ldr r0, [fp] <== NOT EXECUTED
3e0a8: ebff394d bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
iop->data0 = major;
iop->data1 = (void*)((intptr_t) minor);
args.iop = iop;
args.flags = iop->flags;
3e0ac: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
return rtems_rfs_rtems_error ("device_open: closing inode", rc);
}
rtems_rfs_rtems_unlock (fs);
iop->data0 = major;
3e0b0: e5856030 str r6, [r5, #48] ; 0x30 <== NOT EXECUTED
iop->data1 = (void*)((intptr_t) minor);
3e0b4: e5859034 str r9, [r5, #52] ; 0x34 <== NOT EXECUTED
args.iop = iop;
args.flags = iop->flags;
args.mode = mode;
status = rtems_io_open (major, minor, (void *) &args);
3e0b8: e1a00006 mov r0, r6 <== NOT EXECUTED
3e0bc: e1a01009 mov r1, r9 <== NOT EXECUTED
3e0c0: e28d2038 add r2, sp, #56 ; 0x38 <== NOT EXECUTED
iop->data0 = major;
iop->data1 = (void*)((intptr_t) minor);
args.iop = iop;
args.flags = iop->flags;
3e0c4: e58d303c str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
args.mode = mode;
3e0c8: e58d8040 str r8, [sp, #64] ; 0x40 <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
iop->data0 = major;
iop->data1 = (void*)((intptr_t) minor);
args.iop = iop;
3e0cc: e58d5038 str r5, [sp, #56] ; 0x38 <== NOT EXECUTED
args.flags = iop->flags;
args.mode = mode;
status = rtems_io_open (major, minor, (void *) &args);
3e0d0: eb000866 bl 40270 <rtems_io_open> <== NOT EXECUTED
if (status)
3e0d4: e2503000 subs r3, r0, #0 <== NOT EXECUTED
3e0d8: 01a00003 moveq r0, r3 <== NOT EXECUTED
3e0dc: 0affffc4 beq 3dff4 <rtems_rfs_rtems_device_open+0x70> <== NOT EXECUTED
return rtems_deviceio_errno(status);
3e0e0: eb000242 bl 3e9f0 <rtems_deviceio_errno> <== NOT EXECUTED
3e0e4: eaffffc2 b 3dff4 <rtems_rfs_rtems_device_open+0x70> <== NOT EXECUTED
0003dee0 <rtems_rfs_rtems_device_read>:
* @return ssize_t
*/
static ssize_t
rtems_rfs_rtems_device_read (rtems_libio_t* iop, void* buffer, size_t count)
{
3dee0: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3dee4: e1a03000 mov r3, r0 <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
3dee8: e593c014 ldr ip, [r3, #20] <== NOT EXECUTED
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
3deec: e593e034 ldr lr, [r3, #52] ; 0x34 <== NOT EXECUTED
* @return ssize_t
*/
static ssize_t
rtems_rfs_rtems_device_read (rtems_libio_t* iop, void* buffer, size_t count)
{
3def0: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
3def4: e283500c add r5, r3, #12 <== NOT EXECUTED
3def8: e8950030 ldm r5, {r4, r5} <== NOT EXECUTED
rtems_libio_rw_args_t args;
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
3defc: e5900030 ldr r0, [r0, #48] ; 0x30 <== NOT EXECUTED
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
3df00: e58d100c str r1, [sp, #12] <== NOT EXECUTED
args.count = count;
3df04: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
args.flags = iop->flags;
3df08: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
args.bytes_moved = 0;
status = rtems_io_read (major, minor, (void *) &args);
3df0c: e1a0100e mov r1, lr <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
3df10: e3a0c000 mov ip, #0 <== NOT EXECUTED
status = rtems_io_read (major, minor, (void *) &args);
3df14: e1a0200d mov r2, sp <== NOT EXECUTED
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
3df18: e98d0030 stmib sp, {r4, r5} <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
3df1c: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
3df20: e58d3000 str r3, [sp] <== NOT EXECUTED
args.buffer = buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read (major, minor, (void *) &args);
3df24: eb0008e5 bl 402c0 <rtems_io_read> <== NOT EXECUTED
if (status)
3df28: e3500000 cmp r0, #0 <== NOT EXECUTED
return rtems_deviceio_errno (status);
return (ssize_t) args.bytes_moved;
3df2c: 059d0018 ldreq r0, [sp, #24] <== NOT EXECUTED
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read (major, minor, (void *) &args);
if (status)
3df30: 1a000001 bne 3df3c <rtems_rfs_rtems_device_read+0x5c> <== NOT EXECUTED
return rtems_deviceio_errno (status);
return (ssize_t) args.bytes_moved;
}
3df34: e28dd01c add sp, sp, #28 <== NOT EXECUTED
3df38: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_read (major, minor, (void *) &args);
if (status)
return rtems_deviceio_errno (status);
3df3c: eb0002ab bl 3e9f0 <rtems_deviceio_errno> <== NOT EXECUTED
3df40: eafffffb b 3df34 <rtems_rfs_rtems_device_read+0x54> <== NOT EXECUTED
0003de7c <rtems_rfs_rtems_device_write>:
static ssize_t
rtems_rfs_rtems_device_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
3de7c: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3de80: e1a03000 mov r3, r0 <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
3de84: e593c014 ldr ip, [r3, #20] <== NOT EXECUTED
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
3de88: e593e034 ldr lr, [r3, #52] ; 0x34 <== NOT EXECUTED
static ssize_t
rtems_rfs_rtems_device_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
3de8c: e24dd01c sub sp, sp, #28 <== NOT EXECUTED
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
3de90: e283500c add r5, r3, #12 <== NOT EXECUTED
3de94: e8950030 ldm r5, {r4, r5} <== NOT EXECUTED
rtems_libio_rw_args_t args;
rtems_status_code status;
int major;
int minor;
major = (int) iop->data0;
3de98: e5900030 ldr r0, [r0, #48] ; 0x30 <== NOT EXECUTED
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
3de9c: e58d100c str r1, [sp, #12] <== NOT EXECUTED
args.count = count;
3dea0: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
args.flags = iop->flags;
3dea4: e58dc014 str ip, [sp, #20] <== NOT EXECUTED
args.bytes_moved = 0;
status = rtems_io_write (major, minor, (void *) &args);
3dea8: e1a0100e mov r1, lr <== NOT EXECUTED
args.iop = iop;
args.offset = iop->offset;
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
3deac: e3a0c000 mov ip, #0 <== NOT EXECUTED
status = rtems_io_write (major, minor, (void *) &args);
3deb0: e1a0200d mov r2, sp <== NOT EXECUTED
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
args.offset = iop->offset;
3deb4: e98d0030 stmib sp, {r4, r5} <== NOT EXECUTED
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
3deb8: e58dc018 str ip, [sp, #24] <== NOT EXECUTED
int minor;
major = (int) iop->data0;
minor = (intptr_t) iop->data1;
args.iop = iop;
3debc: e58d3000 str r3, [sp] <== NOT EXECUTED
args.buffer = (void *) buffer;
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write (major, minor, (void *) &args);
3dec0: eb000912 bl 40310 <rtems_io_write> <== NOT EXECUTED
if (status)
3dec4: e3500000 cmp r0, #0 <== NOT EXECUTED
return rtems_deviceio_errno (status);
return (ssize_t) args.bytes_moved;
3dec8: 059d0018 ldreq r0, [sp, #24] <== NOT EXECUTED
args.count = count;
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write (major, minor, (void *) &args);
if (status)
3decc: 1a000001 bne 3ded8 <rtems_rfs_rtems_device_write+0x5c> <== NOT EXECUTED
return rtems_deviceio_errno (status);
return (ssize_t) args.bytes_moved;
}
3ded0: e28dd01c add sp, sp, #28 <== NOT EXECUTED
3ded4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
args.flags = iop->flags;
args.bytes_moved = 0;
status = rtems_io_write (major, minor, (void *) &args);
if (status)
return rtems_deviceio_errno (status);
3ded8: eb0002c4 bl 3e9f0 <rtems_deviceio_errno> <== NOT EXECUTED
3dedc: eafffffb b 3ded0 <rtems_rfs_rtems_device_write+0x54> <== NOT EXECUTED
0003e0e8 <rtems_rfs_rtems_dir_close>:
{
/*
* The RFS does not hold any resources. Nothing to do.
*/
return 0;
}
3e0e8: e3a00000 mov r0, #0 <== NOT EXECUTED
3e0ec: e12fff1e bx lr <== NOT EXECUTED
0003e0f0 <rtems_rfs_rtems_dir_lseek>:
static rtems_off64_t
rtems_rfs_rtems_dir_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
switch (whence)
3e0f0: e3530001 cmp r3, #1 <== NOT EXECUTED
*/
static rtems_off64_t
rtems_rfs_rtems_dir_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
3e0f4: e92d4010 push {r4, lr} <== NOT EXECUTED
switch (whence)
3e0f8: 93a03000 movls r3, #0 <== NOT EXECUTED
3e0fc: 93a04000 movls r4, #0 <== NOT EXECUTED
3e100: 9a000004 bls 3e118 <rtems_rfs_rtems_dir_lseek+0x28> <== NOT EXECUTED
break;
case SEEK_END: /* Movement past the end of the directory via lseek */
/* is not a permitted operation */
default:
return rtems_rfs_rtems_error ("dir_lseek: bad whence", EINVAL);
3e104: eb0013b9 bl 42ff0 <__errno> <== NOT EXECUTED
3e108: e3a03016 mov r3, #22 <== NOT EXECUTED
3e10c: e5803000 str r3, [r0] <== NOT EXECUTED
3e110: e3e04000 mvn r4, #0 <== NOT EXECUTED
3e114: e3e03000 mvn r3, #0 <== NOT EXECUTED
break;
}
return 0;
}
3e118: e1a01004 mov r1, r4 <== NOT EXECUTED
3e11c: e1a00003 mov r0, r3 <== NOT EXECUTED
3e120: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0003e314 <rtems_rfs_rtems_dir_open>:
rtems_rfs_rtems_dir_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3e314: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
static int
rtems_rfs_rtems_dir_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
3e318: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3e31c: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e320: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
3e324: e5907038 ldr r7, [r0, #56] ; 0x38 <== NOT EXECUTED
3e328: e3a01000 mov r1, #0 <== NOT EXECUTED
static int
rtems_rfs_rtems_dir_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
3e32c: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
3e330: e1a02001 mov r2, r1 <== NOT EXECUTED
3e334: e1a05000 mov r5, r0 <== NOT EXECUTED
3e338: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e33c: ebff3860 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_inode_handle inode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3e340: e1a01007 mov r1, r7 <== NOT EXECUTED
3e344: e1a00004 mov r0, r4 <== NOT EXECUTED
3e348: e1a0200d mov r2, sp <== NOT EXECUTED
3e34c: e3a03001 mov r3, #1 <== NOT EXECUTED
3e350: ebfffbc3 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3e354: e2507000 subs r7, r0, #0 <== NOT EXECUTED
rtems_rfs_inode_handle inode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3e358: e1a0600d mov r6, sp <== NOT EXECUTED
if (rc)
3e35c: 1a000014 bne 3e3b4 <rtems_rfs_rtems_dir_open+0xa0> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
3e360: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_open: opening inode", rc);
}
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
3e364: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
3e368: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
3e36c: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
3e370: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
3e374: 1a000017 bne 3e3d8 <rtems_rfs_rtems_dir_open+0xc4> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_open: not dir", ENOTDIR);
}
iop->offset = 0;
3e378: e3a02000 mov r2, #0 <== NOT EXECUTED
3e37c: e3a03000 mov r3, #0 <== NOT EXECUTED
3e380: e585200c str r2, [r5, #12] <== NOT EXECUTED
3e384: e5853010 str r3, [r5, #16] <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
3e388: e1a0100d mov r1, sp <== NOT EXECUTED
3e38c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e390: ebfffb8f bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e394: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e398: e1a00004 mov r0, r4 <== NOT EXECUTED
3e39c: ebffed0c bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e3a0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e3a4: ebff388e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
3e3a8: e1a00007 mov r0, r7 <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return 0;
}
3e3ac: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
3e3b0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e3b4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e3b8: e1a00004 mov r0, r4 <== NOT EXECUTED
3e3bc: ebffed04 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e3c0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e3c4: ebff3886 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc)
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_open: opening inode", rc);
3e3c8: eb001308 bl 42ff0 <__errno> <== NOT EXECUTED
3e3cc: e5807000 str r7, [r0] <== NOT EXECUTED
3e3d0: e3e00000 mvn r0, #0 <== NOT EXECUTED
3e3d4: eafffff4 b 3e3ac <rtems_rfs_rtems_dir_open+0x98> <== NOT EXECUTED
}
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
{
rtems_rfs_inode_close (fs, &inode);
3e3d8: e1a0100d mov r1, sp <== NOT EXECUTED
3e3dc: e1a00004 mov r0, r4 <== NOT EXECUTED
3e3e0: ebfffb7b bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e3e4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e3e8: e1a00004 mov r0, r4 <== NOT EXECUTED
3e3ec: ebffecf8 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e3f0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e3f4: ebff387a bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_open: not dir", ENOTDIR);
3e3f8: eb0012fc bl 42ff0 <__errno> <== NOT EXECUTED
3e3fc: e3a03014 mov r3, #20 <== NOT EXECUTED
3e400: e5803000 str r3, [r0] <== NOT EXECUTED
3e404: e3e00000 mvn r0, #0 <== NOT EXECUTED
3e408: eaffffe7 b 3e3ac <rtems_rfs_rtems_dir_open+0x98> <== NOT EXECUTED
0003e1d8 <rtems_rfs_rtems_dir_read>:
*/
static ssize_t
rtems_rfs_rtems_dir_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
3e1d8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3e1dc: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
3e1e0: e5937034 ldr r7, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e1e4: e597307c ldr r3, [r7, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_iop_ino (iop);
3e1e8: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
*/
static ssize_t
rtems_rfs_rtems_dir_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
3e1ec: e24dd038 sub sp, sp, #56 ; 0x38 <== NOT EXECUTED
3e1f0: e1a0a001 mov sl, r1 <== NOT EXECUTED
3e1f4: e3a01000 mov r1, #0 <== NOT EXECUTED
3e1f8: e1a06000 mov r6, r0 <== NOT EXECUTED
3e1fc: e1a05002 mov r5, r2 <== NOT EXECUTED
3e200: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e204: e1a02001 mov r2, r1 <== NOT EXECUTED
count = count / sizeof (struct dirent);
dirent = buffer;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3e208: e28d800c add r8, sp, #12 <== NOT EXECUTED
3e20c: ebff38ac bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
3e210: e1a01004 mov r1, r4 <== NOT EXECUTED
3e214: e1a00007 mov r0, r7 <== NOT EXECUTED
3e218: e1a02008 mov r2, r8 <== NOT EXECUTED
3e21c: e3a03001 mov r3, #1 <== NOT EXECUTED
3e220: ebfffc0f bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3e224: e2504000 subs r4, r0, #0 <== NOT EXECUTED
3e228: 1a000029 bne 3e2d4 <rtems_rfs_rtems_dir_read+0xfc> <== NOT EXECUTED
struct dirent* dirent;
ssize_t bytes_transferred;
int d;
int rc;
count = count / sizeof (struct dirent);
3e22c: e59f30dc ldr r3, [pc, #220] ; 3e310 <rtems_rfs_rtems_dir_read+0x138><== NOT EXECUTED
3e230: e08b2593 umull r2, fp, r3, r5 <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
3e234: e1b0b42b lsrs fp, fp, #8 <== NOT EXECUTED
3e238: 01a0400b moveq r4, fp <== NOT EXECUTED
3e23c: 0a000019 beq 3e2a8 <rtems_rfs_rtems_dir_read+0xd0> <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc)
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
3e240: e286300c add r3, r6, #12 <== NOT EXECUTED
3e244: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
3e248: e1a05004 mov r5, r4 <== NOT EXECUTED
3e24c: e28d9034 add r9, sp, #52 ; 0x34 <== NOT EXECUTED
3e250: ea00000b b 3e284 <rtems_rfs_rtems_dir_read+0xac> <== NOT EXECUTED
if (rc == ENOENT)
{
rc = 0;
break;
}
if (rc > 0)
3e254: e3500000 cmp r0, #0 <== NOT EXECUTED
3e258: ca000026 bgt 3e2f8 <rtems_rfs_rtems_dir_read+0x120> <== NOT EXECUTED
{
bytes_transferred = rtems_rfs_rtems_error ("dir_read: dir read", rc);
break;
}
iop->offset += size;
3e25c: e286100c add r1, r6, #12 <== NOT EXECUTED
3e260: e8910003 ldm r1, {r0, r1} <== NOT EXECUTED
3e264: e59dc034 ldr ip, [sp, #52] ; 0x34 <== NOT EXECUTED
3e268: e090200c adds r2, r0, ip <== NOT EXECUTED
3e26c: e2a13000 adc r3, r1, #0 <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
3e270: e15b0005 cmp fp, r5 <== NOT EXECUTED
if (rc > 0)
{
bytes_transferred = rtems_rfs_rtems_error ("dir_read: dir read", rc);
break;
}
iop->offset += size;
3e274: e586200c str r2, [r6, #12] <== NOT EXECUTED
3e278: e5863010 str r3, [r6, #16] <== NOT EXECUTED
3e27c: e2844e11 add r4, r4, #272 ; 0x110 <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
3e280: 9a000008 bls 3e2a8 <rtems_rfs_rtems_dir_read+0xd0> <== NOT EXECUTED
{
size_t size;
rc = rtems_rfs_dir_read (fs, &inode, iop->offset, dirent, &size);
3e284: e08ac004 add ip, sl, r4 <== NOT EXECUTED
3e288: e1a00007 mov r0, r7 <== NOT EXECUTED
3e28c: e1a01008 mov r1, r8 <== NOT EXECUTED
3e290: e58dc000 str ip, [sp] <== NOT EXECUTED
3e294: e58d9004 str r9, [sp, #4] <== NOT EXECUTED
3e298: ebffee81 bl 39ca4 <rtems_rfs_dir_read> <== NOT EXECUTED
if (rc == ENOENT)
3e29c: e3500002 cmp r0, #2 <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
}
bytes_transferred = 0;
for (d = 0; d < count; d++, dirent++)
3e2a0: e2855001 add r5, r5, #1 <== NOT EXECUTED
{
size_t size;
rc = rtems_rfs_dir_read (fs, &inode, iop->offset, dirent, &size);
if (rc == ENOENT)
3e2a4: 1affffea bne 3e254 <rtems_rfs_rtems_dir_read+0x7c> <== NOT EXECUTED
}
iop->offset += size;
bytes_transferred += sizeof (struct dirent);
}
rtems_rfs_inode_close (fs, &inode);
3e2a8: e1a01008 mov r1, r8 <== NOT EXECUTED
3e2ac: e1a00007 mov r0, r7 <== NOT EXECUTED
3e2b0: ebfffbc7 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e2b4: e597507c ldr r5, [r7, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e2b8: e1a00007 mov r0, r7 <== NOT EXECUTED
3e2bc: ebffed44 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e2c0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e2c4: ebff38c6 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return bytes_transferred;
}
3e2c8: e1a00004 mov r0, r4 <== NOT EXECUTED
3e2cc: e28dd038 add sp, sp, #56 ; 0x38 <== NOT EXECUTED
3e2d0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e2d4: e597507c ldr r5, [r7, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e2d8: e1a00007 mov r0, r7 <== NOT EXECUTED
3e2dc: ebffed3c bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e2e0: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e2e4: ebff38be bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc)
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_read: read inode", rc);
3e2e8: eb001340 bl 42ff0 <__errno> <== NOT EXECUTED
3e2ec: e5804000 str r4, [r0] <== NOT EXECUTED
3e2f0: e3e04000 mvn r4, #0 <== NOT EXECUTED
3e2f4: eafffff3 b 3e2c8 <rtems_rfs_rtems_dir_read+0xf0> <== NOT EXECUTED
rc = 0;
break;
}
if (rc > 0)
{
bytes_transferred = rtems_rfs_rtems_error ("dir_read: dir read", rc);
3e2f8: e58d0008 str r0, [sp, #8] <== NOT EXECUTED
3e2fc: eb00133b bl 42ff0 <__errno> <== NOT EXECUTED
3e300: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
3e304: e3e04000 mvn r4, #0 <== NOT EXECUTED
3e308: e5803000 str r3, [r0] <== NOT EXECUTED
3e30c: eaffffe5 b 3e2a8 <rtems_rfs_rtems_dir_read+0xd0> <== NOT EXECUTED
0003e124 <rtems_rfs_rtems_dir_rmnod>:
static int
rtems_rfs_rtems_dir_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
3e124: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_pathloc);
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
3e128: e5915000 ldr r5, [r1] <== NOT EXECUTED
static int
rtems_rfs_rtems_dir_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
3e12c: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_DIR_RMNOD))
printf ("rtems-rfs: dir-rmnod: parent:%" PRId32 " doff:%" PRIu32 ", ino:%" PRId32 "\n",
parent, doff, ino);
if (ino == RTEMS_RFS_ROOT_INO)
3e130: e3550001 cmp r5, #1 <== NOT EXECUTED
}
static int
rtems_rfs_rtems_dir_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
3e134: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
3e138: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_pathloc);
3e13c: e5907000 ldr r7, [r0] <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
uint32_t doff = rtems_rfs_rtems_get_pathloc_doff (pathloc);
3e140: e5916004 ldr r6, [r1, #4] <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_DIR_RMNOD))
printf ("rtems-rfs: dir-rmnod: parent:%" PRId32 " doff:%" PRIu32 ", ino:%" PRId32 "\n",
parent, doff, ino);
if (ino == RTEMS_RFS_ROOT_INO)
3e144: 0a00001e beq 3e1c4 <rtems_rfs_rtems_dir_rmnod+0xa0> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e148: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
3e14c: e3a01000 mov r1, #0 <== NOT EXECUTED
3e150: e1a02001 mov r2, r1 <== NOT EXECUTED
3e154: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e158: ebff38d9 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_rmnod: root inode", EBUSY);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_unlink (fs, parent, ino, doff, rtems_rfs_unlink_dir_if_empty);
3e15c: e1a02005 mov r2, r5 <== NOT EXECUTED
3e160: e3a0c001 mov ip, #1 <== NOT EXECUTED
3e164: e1a01007 mov r1, r7 <== NOT EXECUTED
3e168: e1a03006 mov r3, r6 <== NOT EXECUTED
3e16c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e170: e58dc000 str ip, [sp] <== NOT EXECUTED
3e174: ebfffe32 bl 3da44 <rtems_rfs_unlink> <== NOT EXECUTED
if (rc)
3e178: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3e17c: 1a000007 bne 3e1a0 <rtems_rfs_rtems_dir_rmnod+0x7c> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e180: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e184: e1a00004 mov r0, r4 <== NOT EXECUTED
3e188: ebffed91 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e18c: e5960000 ldr r0, [r6] <== NOT EXECUTED
3e190: ebff3913 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
3e194: e1a00005 mov r0, r5 <== NOT EXECUTED
return rtems_rfs_rtems_error ("dir_rmnod: unlinking", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
3e198: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3e19c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e1a0: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e1a4: e1a00004 mov r0, r4 <== NOT EXECUTED
3e1a8: ebffed89 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e1ac: e5960000 ldr r0, [r6] <== NOT EXECUTED
3e1b0: ebff390b bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rc = rtems_rfs_unlink (fs, parent, ino, doff, rtems_rfs_unlink_dir_if_empty);
if (rc)
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("dir_rmnod: unlinking", rc);
3e1b4: eb00138d bl 42ff0 <__errno> <== NOT EXECUTED
3e1b8: e5805000 str r5, [r0] <== NOT EXECUTED
3e1bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
3e1c0: eafffff4 b 3e198 <rtems_rfs_rtems_dir_rmnod+0x74> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_DIR_RMNOD))
printf ("rtems-rfs: dir-rmnod: parent:%" PRId32 " doff:%" PRIu32 ", ino:%" PRId32 "\n",
parent, doff, ino);
if (ino == RTEMS_RFS_ROOT_INO)
return rtems_rfs_rtems_error ("dir_rmnod: root inode", EBUSY);
3e1c4: eb001389 bl 42ff0 <__errno> <== NOT EXECUTED
3e1c8: e3a03010 mov r3, #16 <== NOT EXECUTED
3e1cc: e5803000 str r3, [r0] <== NOT EXECUTED
3e1d0: e3e00000 mvn r0, #0 <== NOT EXECUTED
3e1d4: eaffffef b 3e198 <rtems_rfs_rtems_dir_rmnod+0x74> <== NOT EXECUTED
00021fa0 <rtems_rfs_rtems_eval_for_make>:
*/
int
rtems_rfs_rtems_eval_for_make (const char* path,
rtems_filesystem_location_info_t* pathloc,
const char** name)
{
21fa0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21fa4: e5913010 ldr r3, [r1, #16] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_eval_for_make (const char* path,
rtems_filesystem_location_info_t* pathloc,
const char** name)
{
21fa8: e1a09001 mov r9, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21fac: e5911000 ldr r1, [r1] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_eval_for_make (const char* path,
rtems_filesystem_location_info_t* pathloc,
const char** name)
{
21fb0: e24dd040 sub sp, sp, #64 ; 0x40 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21fb4: e58d103c str r1, [sp, #60] ; 0x3c <== NOT EXECUTED
rtems_rfs_ino node_ino;
uint32_t doff = 0;
21fb8: e3a01000 mov r1, #0 <== NOT EXECUTED
*/
int
rtems_rfs_rtems_eval_for_make (const char* path,
rtems_filesystem_location_info_t* pathloc,
const char** name)
{
21fbc: e1a06002 mov r6, r2 <== NOT EXECUTED
21fc0: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
rtems_rfs_ino node_ino;
uint32_t doff = 0;
21fc4: e58d1034 str r1, [sp, #52] ; 0x34 <== NOT EXECUTED
int
rtems_rfs_rtems_eval_for_make (const char* path,
rtems_filesystem_location_info_t* pathloc,
const char** name)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21fc8: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf ("rtems-rfs-rtems: eval-for-make: path:%s ino:%" PRId32 "\n", path, ino);
*name = path + strlen (path);
21fcc: eb009f04 bl 49be4 <strlen> <== NOT EXECUTED
21fd0: e0840000 add r0, r4, r0 <== NOT EXECUTED
21fd4: e5860000 str r0, [r6] <== NOT EXECUTED
while (*name != path)
21fd8: ea000000 b 21fe0 <rtems_rfs_rtems_eval_for_make+0x40> <== NOT EXECUTED
{
(*name)--;
if (rtems_filesystem_is_separator (**name))
{
(*name)++;
break;
21fdc: e5960000 ldr r0, [r6] <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf ("rtems-rfs-rtems: eval-for-make: path:%s ino:%" PRId32 "\n", path, ino);
*name = path + strlen (path);
while (*name != path)
21fe0: e1540000 cmp r4, r0 <== NOT EXECUTED
{
(*name)--;
21fe4: e2403001 sub r3, r0, #1 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf ("rtems-rfs-rtems: eval-for-make: path:%s ino:%" PRId32 "\n", path, ino);
*name = path + strlen (path);
while (*name != path)
21fe8: 0a000007 beq 2200c <rtems_rfs_rtems_eval_for_make+0x6c> <== NOT EXECUTED
{
(*name)--;
21fec: e5863000 str r3, [r6] <== NOT EXECUTED
if (rtems_filesystem_is_separator (**name))
21ff0: e5500001 ldrb r0, [r0, #-1] <== NOT EXECUTED
21ff4: ebff9de7 bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
21ff8: e3500000 cmp r0, #0 <== NOT EXECUTED
21ffc: 0afffff6 beq 21fdc <rtems_rfs_rtems_eval_for_make+0x3c> <== NOT EXECUTED
{
(*name)++;
22000: e5963000 ldr r3, [r6] <== NOT EXECUTED
22004: e2833001 add r3, r3, #1 <== NOT EXECUTED
22008: e5863000 str r3, [r6] <== NOT EXECUTED
}
/*
* Eat any separators at start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, strlen(path));
2200c: e1a00004 mov r0, r4 <== NOT EXECUTED
22010: eb009ef3 bl 49be4 <strlen> <== NOT EXECUTED
22014: e1a01000 mov r1, r0 <== NOT EXECUTED
22018: e1a00004 mov r0, r4 <== NOT EXECUTED
2201c: ebff96cf bl 7b60 <rtems_filesystem_prefix_separators> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
22020: e595307c ldr r3, [r5, #124] ; 0x7c <== NOT EXECUTED
22024: e3a01000 mov r1, #0 <== NOT EXECUTED
path += stripped;
22028: e0844000 add r4, r4, r0 <== NOT EXECUTED
2202c: e1a02001 mov r2, r1 <== NOT EXECUTED
22030: e5930000 ldr r0, [r3] <== NOT EXECUTED
22034: ebffa922 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
22038: e28d700c add r7, sp, #12 <== NOT EXECUTED
while (true)
{
/*
* Open and load the inode.
*/
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
2203c: e1a00005 mov r0, r5 <== NOT EXECUTED
22040: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
22044: e1a02007 mov r2, r7 <== NOT EXECUTED
22048: e3a03001 mov r3, #1 <== NOT EXECUTED
2204c: eb006c84 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
22050: e2508000 subs r8, r0, #0 <== NOT EXECUTED
22054: ca0000b5 bgt 22330 <rtems_rfs_rtems_eval_for_make+0x390> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
22058: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
}
/*
* If a directory the execute bit must be set for us to enter.
*/
if (RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)) &&
2205c: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
22060: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
22064: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
22068: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
2206c: 0a000061 beq 221f8 <rtems_rfs_rtems_eval_for_make+0x258> <== NOT EXECUTED
}
/*
* Is this the end of the pathname we where given ?
*/
if (path == *name)
22070: e5963000 ldr r3, [r6] <== NOT EXECUTED
22074: e1530004 cmp r3, r4 <== NOT EXECUTED
22078: 0a000035 beq 22154 <rtems_rfs_rtems_eval_for_make+0x1b4> <== NOT EXECUTED
2207c: e3a0a000 mov sl, #0 <== NOT EXECUTED
22080: ea000007 b 220a4 <rtems_rfs_rtems_eval_for_make+0x104> <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator(*path) &&
22084: e7d4300a ldrb r3, [r4, sl] <== NOT EXECUTED
22088: e3530000 cmp r3, #0 <== NOT EXECUTED
2208c: 0a000009 beq 220b8 <rtems_rfs_rtems_eval_for_make+0x118> <== NOT EXECUTED
(*path != '\0') &&
(node_len < (rtems_rfs_fs_max_name (fs) - 1)))
22090: e5953018 ldr r3, [r5, #24] <== NOT EXECUTED
22094: e2433001 sub r3, r3, #1 <== NOT EXECUTED
22098: e15a0003 cmp sl, r3 <== NOT EXECUTED
2209c: 2a000005 bcs 220b8 <rtems_rfs_rtems_eval_for_make+0x118> <== NOT EXECUTED
{
node_len++;
220a0: e28aa001 add sl, sl, #1 <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator(*path) &&
220a4: e7d4000a ldrb r0, [r4, sl] <== NOT EXECUTED
220a8: ebff9dba bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
220ac: e3500000 cmp r0, #0 <== NOT EXECUTED
* @param pathloc
* @param name
* @return int
*/
int
rtems_rfs_rtems_eval_for_make (const char* path,
220b0: e084b00a add fp, r4, sl <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator(*path) &&
220b4: 0afffff2 beq 22084 <rtems_rfs_rtems_eval_for_make+0xe4> <== NOT EXECUTED
}
/*
* Eat any separators at start of the new path.
*/
stripped = rtems_filesystem_prefix_separators (path, strlen (path));
220b8: e1a0000b mov r0, fp <== NOT EXECUTED
220bc: eb009ec8 bl 49be4 <strlen> <== NOT EXECUTED
220c0: e1a01000 mov r1, r0 <== NOT EXECUTED
220c4: e1a0000b mov r0, fp <== NOT EXECUTED
220c8: ebff96a4 bl 7b60 <rtems_filesystem_prefix_separators> <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
220cc: e5d42000 ldrb r2, [r4] <== NOT EXECUTED
220d0: e352002e cmp r2, #46 ; 0x2e <== NOT EXECUTED
}
/*
* Eat any separators at start of the new path.
*/
stripped = rtems_filesystem_prefix_separators (path, strlen (path));
220d4: e1a03000 mov r3, r0 <== NOT EXECUTED
path += stripped;
220d8: e08b8000 add r8, fp, r0 <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
220dc: 0a000016 beq 2213c <rtems_rfs_rtems_eval_for_make+0x19c> <== NOT EXECUTED
/*
* If the node is a parent we must move up one directory. If the location
* is on another file system we have a crossmount so we call that file
* system to handle the remainder of the path.
*/
if (rtems_rfs_parent_dir (path))
220e0: e7db3003 ldrb r3, [fp, r3] <== NOT EXECUTED
220e4: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
220e8: 1a000002 bne 220f8 <rtems_rfs_rtems_eval_for_make+0x158> <== NOT EXECUTED
220ec: e5d83001 ldrb r3, [r8, #1] <== NOT EXECUTED
220f0: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
220f4: 0a00004e beq 22234 <rtems_rfs_rtems_eval_for_make+0x294> <== NOT EXECUTED
else
{
/*
* Read the inode so we know it exists and what type it is.
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode,
220f8: e1a02004 mov r2, r4 <== NOT EXECUTED
220fc: e1a0300a mov r3, sl <== NOT EXECUTED
22100: e1a00005 mov r0, r5 <== NOT EXECUTED
22104: e1a01007 mov r1, r7 <== NOT EXECUTED
22108: e28dc03c add ip, sp, #60 ; 0x3c <== NOT EXECUTED
2210c: e28de034 add lr, sp, #52 ; 0x34 <== NOT EXECUTED
22110: e88d5000 stm sp, {ip, lr} <== NOT EXECUTED
22114: eb00612e bl 3a5d4 <rtems_rfs_dir_lookup_ino> <== NOT EXECUTED
node, node_len - stripped, &ino, &doff);
if (rc > 0)
22118: e2504000 subs r4, r0, #0 <== NOT EXECUTED
2211c: ca000076 bgt 222fc <rtems_rfs_rtems_eval_for_make+0x35c> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf("rtems-rfs-rtems: eval-for-make: down: path:%s ino:%" PRId32 "\n",
node, ino);
}
rc = rtems_rfs_inode_close (fs, &inode);
22120: e1a00005 mov r0, r5 <== NOT EXECUTED
22124: e1a01007 mov r1, r7 <== NOT EXECUTED
22128: eb006c29 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
2212c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
22130: ca000074 bgt 22308 <rtems_rfs_rtems_eval_for_make+0x368> <== NOT EXECUTED
22134: e1a04008 mov r4, r8 <== NOT EXECUTED
22138: eaffffbf b 2203c <rtems_rfs_rtems_eval_for_make+0x9c> <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
2213c: e5d40001 ldrb r0, [r4, #1] <== NOT EXECUTED
22140: e3500000 cmp r0, #0 <== NOT EXECUTED
22144: 1a00004c bne 2227c <rtems_rfs_rtems_eval_for_make+0x2dc> <== NOT EXECUTED
{
if (*path)
22148: e7db3003 ldrb r3, [fp, r3] <== NOT EXECUTED
2214c: e3530000 cmp r3, #0 <== NOT EXECUTED
22150: 1a000051 bne 2229c <rtems_rfs_rtems_eval_for_make+0x2fc> <== NOT EXECUTED
22154: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("eval_for_make: closing node", rc);
}
}
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
22158: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
2215c: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
22160: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
22164: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
22168: 1a000076 bne 22348 <rtems_rfs_rtems_eval_for_make+0x3a8> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("eval_for_make: not dir", ENOTDIR);
}
if (!rtems_rfs_rtems_eval_perms (&inode, RTEMS_LIBIO_PERMS_WX))
2216c: e1a00007 mov r0, r7 <== NOT EXECUTED
22170: e3a01003 mov r1, #3 <== NOT EXECUTED
22174: eb0001d9 bl 228e0 <rtems_rfs_rtems_eval_perms> <== NOT EXECUTED
22178: e3500000 cmp r0, #0 <== NOT EXECUTED
2217c: 0a000022 beq 2220c <rtems_rfs_rtems_eval_for_make+0x26c> <== NOT EXECUTED
}
/*
* Make sure the name does not already exists in the directory.
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode, *name, strlen (*name),
22180: e5964000 ldr r4, [r6] <== NOT EXECUTED
22184: e1a00004 mov r0, r4 <== NOT EXECUTED
22188: eb009e95 bl 49be4 <strlen> <== NOT EXECUTED
2218c: e28dc038 add ip, sp, #56 ; 0x38 <== NOT EXECUTED
22190: e1a03000 mov r3, r0 <== NOT EXECUTED
22194: e1a02004 mov r2, r4 <== NOT EXECUTED
22198: e58dc000 str ip, [sp] <== NOT EXECUTED
2219c: e1a00005 mov r0, r5 <== NOT EXECUTED
221a0: e28dc034 add ip, sp, #52 ; 0x34 <== NOT EXECUTED
221a4: e1a01007 mov r1, r7 <== NOT EXECUTED
221a8: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
221ac: eb006108 bl 3a5d4 <rtems_rfs_dir_lookup_ino> <== NOT EXECUTED
&node_ino, &doff);
if (rc == 0)
221b0: e2504000 subs r4, r0, #0 <== NOT EXECUTED
221b4: 0a000081 beq 223c0 <rtems_rfs_rtems_eval_for_make+0x420> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("eval_for_make: found name", EEXIST);
}
if (rc != ENOENT)
221b8: e3540002 cmp r4, #2 <== NOT EXECUTED
221bc: 0a00003b beq 222b0 <rtems_rfs_rtems_eval_for_make+0x310> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
221c0: e1a01007 mov r1, r7 <== NOT EXECUTED
221c4: e1a00005 mov r0, r5 <== NOT EXECUTED
221c8: eb006c01 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
221cc: e595607c ldr r6, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
221d0: e1a00005 mov r0, r5 <== NOT EXECUTED
221d4: eb005d7e bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
221d8: e5960000 ldr r0, [r6] <== NOT EXECUTED
221dc: ebffa900 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("eval_for_make: look up", rc);
221e0: eb008382 bl 42ff0 <__errno> <== NOT EXECUTED
221e4: e5804000 str r4, [r0] <== NOT EXECUTED
221e8: e3e04000 mvn r4, #0 <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
rtems_rfs_rtems_unlock (fs);
return rc;
}
221ec: e1a00004 mov r0, r4 <== NOT EXECUTED
221f0: e28dd040 add sp, sp, #64 ; 0x40 <== NOT EXECUTED
221f4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
/*
* If a directory the execute bit must be set for us to enter.
*/
if (RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)) &&
221f8: e1a00007 mov r0, r7 <== NOT EXECUTED
221fc: e3a01001 mov r1, #1 <== NOT EXECUTED
22200: eb0001b6 bl 228e0 <rtems_rfs_rtems_eval_perms> <== NOT EXECUTED
22204: e3500000 cmp r0, #0 <== NOT EXECUTED
22208: 1affff98 bne 22070 <rtems_rfs_rtems_eval_for_make+0xd0> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: not dir", ENOTDIR);
}
if (!rtems_rfs_rtems_eval_perms (&inode, RTEMS_LIBIO_PERMS_WX))
{
rtems_rfs_inode_close (fs, &inode);
2220c: e1a01007 mov r1, r7 <== NOT EXECUTED
22210: e1a00005 mov r0, r5 <== NOT EXECUTED
22214: eb006bee bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
22218: e1a00005 mov r0, r5 <== NOT EXECUTED
2221c: ebfffbbd bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: cannot write", EACCES);
22220: eb008372 bl 42ff0 <__errno> <== NOT EXECUTED
22224: e3a0300d mov r3, #13 <== NOT EXECUTED
22228: e5803000 str r3, [r0] <== NOT EXECUTED
2222c: e3e04000 mvn r4, #0 <== NOT EXECUTED
22230: eaffffed b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
/*
* If the node is a parent we must move up one directory. If the location
* is on another file system we have a crossmount so we call that file
* system to handle the remainder of the path.
*/
if (rtems_rfs_parent_dir (path))
22234: e5d80002 ldrb r0, [r8, #2] <== NOT EXECUTED
22238: e3500000 cmp r0, #0 <== NOT EXECUTED
2223c: e288b002 add fp, r8, #2 <== NOT EXECUTED
22240: 1a000036 bne 22320 <rtems_rfs_rtems_eval_for_make+0x380> <== NOT EXECUTED
{
/*
* If we are at the root inode of the file system we have a crossmount
* path.
*/
if (ino == RTEMS_RFS_ROOT_INO)
22244: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
22248: e3530001 cmp r3, #1 <== NOT EXECUTED
2224c: 0a000047 beq 22370 <rtems_rfs_rtems_eval_for_make+0x3d0> <== NOT EXECUTED
22250: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
/*
* If not a directory give and up return. We cannot change dir from a
* regular file or device node.
*/
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
22254: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
22258: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
2225c: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
22260: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
22264: 1a00005f bne 223e8 <rtems_rfs_rtems_eval_for_make+0x448> <== NOT EXECUTED
}
/*
* We need to find the parent of this node.
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode, "..", 2, &ino, &doff);
22268: e1a00005 mov r0, r5 <== NOT EXECUTED
2226c: e1a01007 mov r1, r7 <== NOT EXECUTED
22270: e59f2198 ldr r2, [pc, #408] ; 22410 <rtems_rfs_rtems_eval_for_make+0x470><== NOT EXECUTED
22274: e3a03002 mov r3, #2 <== NOT EXECUTED
22278: eaffffa2 b 22108 <rtems_rfs_rtems_eval_for_make+0x168> <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
2227c: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
22280: ebff9d44 bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
22284: e3500000 cmp r0, #0 <== NOT EXECUTED
22288: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
2228c: 0affff93 beq 220e0 <rtems_rfs_rtems_eval_for_make+0x140> <== NOT EXECUTED
{
if (*path)
22290: e7db3003 ldrb r3, [fp, r3] <== NOT EXECUTED
22294: e3530000 cmp r3, #0 <== NOT EXECUTED
22298: 0affffad beq 22154 <rtems_rfs_rtems_eval_for_make+0x1b4> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
2229c: e1a00005 mov r0, r5 <== NOT EXECUTED
222a0: e1a01007 mov r1, r7 <== NOT EXECUTED
222a4: eb006bca bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
222a8: e1a04008 mov r4, r8 <== NOT EXECUTED
222ac: eaffff62 b 2203c <rtems_rfs_rtems_eval_for_make+0x9c> <== NOT EXECUTED
/*
* Set the parent ino in the path location.
*/
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
222b0: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
222b4: e5893000 str r3, [r9] <== NOT EXECUTED
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
222b8: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
222bc: e1a01007 mov r1, r7 <== NOT EXECUTED
/*
* Set the parent ino in the path location.
*/
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
222c0: e5893004 str r3, [r9, #4] <== NOT EXECUTED
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
222c4: e1a00009 mov r0, r9 <== NOT EXECUTED
222c8: eb000195 bl 22924 <rtems_rfs_rtems_set_handlers> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf("rtems-rfs-rtems: eval-for-make: parent ino:%" PRId32 " name:%s\n",
ino, *name);
rtems_rfs_inode_close (fs, &inode);
222cc: e1a01007 mov r1, r7 <== NOT EXECUTED
*/
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
222d0: e3500000 cmp r0, #0 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf("rtems-rfs-rtems: eval-for-make: parent ino:%" PRId32 " name:%s\n",
ino, *name);
rtems_rfs_inode_close (fs, &inode);
222d4: e1a00005 mov r0, r5 <== NOT EXECUTED
*/
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
222d8: 03a04005 moveq r4, #5 <== NOT EXECUTED
222dc: 13a04000 movne r4, #0 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf("rtems-rfs-rtems: eval-for-make: parent ino:%" PRId32 " name:%s\n",
ino, *name);
rtems_rfs_inode_close (fs, &inode);
222e0: eb006bbb bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
222e4: e595607c ldr r6, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
222e8: e1a00005 mov r0, r5 <== NOT EXECUTED
222ec: eb005d38 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
222f0: e5960000 ldr r0, [r6] <== NOT EXECUTED
222f4: ebffa8ba bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
222f8: eaffffbb b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode,
node, node_len - stripped, &ino, &doff);
if (rc > 0)
{
rtems_rfs_inode_close (fs, &inode);
222fc: e1a01007 mov r1, r7 <== NOT EXECUTED
22300: e1a00005 mov r0, r5 <== NOT EXECUTED
22304: eb006bb2 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
}
rc = rtems_rfs_inode_close (fs, &inode);
if (rc > 0)
{
rtems_rfs_rtems_unlock (fs);
22308: e1a00005 mov r0, r5 <== NOT EXECUTED
2230c: ebfffb81 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: closing node", rc);
22310: eb008336 bl 42ff0 <__errno> <== NOT EXECUTED
22314: e5804000 str r4, [r0] <== NOT EXECUTED
22318: e3e04000 mvn r4, #0 <== NOT EXECUTED
2231c: eaffffb2 b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
/*
* If the node is a parent we must move up one directory. If the location
* is on another file system we have a crossmount so we call that file
* system to handle the remainder of the path.
*/
if (rtems_rfs_parent_dir (path))
22320: ebff9d1c bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
22324: e3500000 cmp r0, #0 <== NOT EXECUTED
22328: 0affff72 beq 220f8 <rtems_rfs_rtems_eval_for_make+0x158> <== NOT EXECUTED
2232c: eaffffc4 b 22244 <rtems_rfs_rtems_eval_for_make+0x2a4> <== NOT EXECUTED
* Open and load the inode.
*/
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc > 0)
{
rtems_rfs_rtems_unlock (fs);
22330: e1a00005 mov r0, r5 <== NOT EXECUTED
22334: ebfffb77 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: read ino", rc);
22338: eb00832c bl 42ff0 <__errno> <== NOT EXECUTED
2233c: e3e04000 mvn r4, #0 <== NOT EXECUTED
22340: e5808000 str r8, [r0] <== NOT EXECUTED
22344: eaffffa8 b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
}
}
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
{
rtems_rfs_inode_close (fs, &inode);
22348: e1a01007 mov r1, r7 <== NOT EXECUTED
2234c: e1a00005 mov r0, r5 <== NOT EXECUTED
22350: eb006b9f bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
22354: e1a00005 mov r0, r5 <== NOT EXECUTED
22358: ebfffb6e bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: not dir", ENOTDIR);
2235c: eb008323 bl 42ff0 <__errno> <== NOT EXECUTED
22360: e3a03014 mov r3, #20 <== NOT EXECUTED
22364: e5803000 str r3, [r0] <== NOT EXECUTED
22368: e3e04000 mvn r4, #0 <== NOT EXECUTED
2236c: eaffff9e b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
{
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_FOR_MAKE))
printf("rtems-rfs-rtems: eval-for-make: crossmount: path:%s\n",
path - node_len);
rtems_rfs_inode_close (fs, &inode);
22370: e1a01007 mov r1, r7 <== NOT EXECUTED
22374: e1a00005 mov r0, r5 <== NOT EXECUTED
22378: eb006b95 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
2237c: e1a00005 mov r0, r5 <== NOT EXECUTED
22380: ebfffb64 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
*pathloc = pathloc->mt_entry->mt_point_node;
22384: e599c010 ldr ip, [r9, #16] <== NOT EXECUTED
22388: e28cc008 add ip, ip, #8 <== NOT EXECUTED
2238c: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED
22390: e1a0e009 mov lr, r9 <== NOT EXECUTED
22394: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED
22398: e59c2000 ldr r2, [ip] <== NOT EXECUTED
2239c: e58e2000 str r2, [lr] <== NOT EXECUTED
return (*pathloc->ops->evalformake_h)(path + 2, pathloc, name);
223a0: e1a0000b mov r0, fp <== NOT EXECUTED
223a4: e1a01009 mov r1, r9 <== NOT EXECUTED
223a8: e1a02006 mov r2, r6 <== NOT EXECUTED
223ac: e599300c ldr r3, [r9, #12] <== NOT EXECUTED
223b0: e1a0e00f mov lr, pc <== NOT EXECUTED
223b4: e593f004 ldr pc, [r3, #4] <== NOT EXECUTED
223b8: e1a04000 mov r4, r0 <== NOT EXECUTED
223bc: eaffff8a b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode, *name, strlen (*name),
&node_ino, &doff);
if (rc == 0)
{
rtems_rfs_inode_close (fs, &inode);
223c0: e1a01007 mov r1, r7 <== NOT EXECUTED
223c4: e1a00005 mov r0, r5 <== NOT EXECUTED
223c8: eb006b81 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
223cc: e1a00005 mov r0, r5 <== NOT EXECUTED
223d0: ebfffb50 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: found name", EEXIST);
223d4: eb008305 bl 42ff0 <__errno> <== NOT EXECUTED
223d8: e3a03011 mov r3, #17 <== NOT EXECUTED
223dc: e5803000 str r3, [r0] <== NOT EXECUTED
223e0: e3e04000 mvn r4, #0 <== NOT EXECUTED
223e4: eaffff80 b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
* If not a directory give and up return. We cannot change dir from a
* regular file or device node.
*/
if (!RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)))
{
rtems_rfs_inode_close (fs, &inode);
223e8: e1a01007 mov r1, r7 <== NOT EXECUTED
223ec: e1a00005 mov r0, r5 <== NOT EXECUTED
223f0: eb006b77 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
223f4: e1a00005 mov r0, r5 <== NOT EXECUTED
223f8: ebfffb46 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_for_make: not dir", ENOTSUP);
223fc: eb0082fb bl 42ff0 <__errno> <== NOT EXECUTED
22400: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
22404: e5803000 str r3, [r0] <== NOT EXECUTED
22408: e3e04000 mvn r4, #0 <== NOT EXECUTED
2240c: eaffff76 b 221ec <rtems_rfs_rtems_eval_for_make+0x24c> <== NOT EXECUTED
00021414 <rtems_rfs_rtems_eval_path>:
int
rtems_rfs_rtems_eval_path (const char* path,
size_t pathlen,
int flags,
rtems_filesystem_location_info_t* pathloc)
{
21414: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
21418: e1a08003 mov r8, r3 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
2141c: e5933010 ldr r3, [r3, #16] <== NOT EXECUTED
21420: e5936034 ldr r6, [r3, #52] ; 0x34 <== NOT EXECUTED
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21424: e5983000 ldr r3, [r8] <== NOT EXECUTED
int
rtems_rfs_rtems_eval_path (const char* path,
size_t pathlen,
int flags,
rtems_filesystem_location_info_t* pathloc)
{
21428: e24dd044 sub sp, sp, #68 ; 0x44 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
uint32_t doff = 0;
2142c: e3a07000 mov r7, #0 <== NOT EXECUTED
int
rtems_rfs_rtems_eval_path (const char* path,
size_t pathlen,
int flags,
rtems_filesystem_location_info_t* pathloc)
{
21430: e1a05001 mov r5, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21434: e58d3040 str r3, [sp, #64] ; 0x40 <== NOT EXECUTED
int
rtems_rfs_rtems_eval_path (const char* path,
size_t pathlen,
int flags,
rtems_filesystem_location_info_t* pathloc)
{
21438: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_inode_handle inode;
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
uint32_t doff = 0;
2143c: e58d703c str r7, [sp, #60] ; 0x3c <== NOT EXECUTED
int
rtems_rfs_rtems_eval_path (const char* path,
size_t pathlen,
int flags,
rtems_filesystem_location_info_t* pathloc)
{
21440: e1a04000 mov r4, r0 <== NOT EXECUTED
path, pathlen, ino);
/*
* Eat any separators at the start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
21444: ebff99c5 bl 7b60 <rtems_filesystem_prefix_separators> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21448: e596207c ldr r2, [r6, #124] ; 0x7c <== NOT EXECUTED
2144c: e1a03000 mov r3, r0 <== NOT EXECUTED
21450: e1a01007 mov r1, r7 <== NOT EXECUTED
21454: e5920000 ldr r0, [r2] <== NOT EXECUTED
21458: e1a02007 mov r2, r7 <== NOT EXECUTED
path += stripped;
pathlen -= stripped;
2145c: e0635005 rsb r5, r3, r5 <== NOT EXECUTED
/*
* Eat any separators at the start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
path += stripped;
21460: e0844003 add r4, r4, r3 <== NOT EXECUTED
21464: ebffac16 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
21468: e28d7014 add r7, sp, #20 <== NOT EXECUTED
while (true)
{
/*
* Open and load the inode.
*/
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
2146c: e1a00006 mov r0, r6 <== NOT EXECUTED
21470: e59d1040 ldr r1, [sp, #64] ; 0x40 <== NOT EXECUTED
21474: e1a02007 mov r2, r7 <== NOT EXECUTED
21478: e3a03001 mov r3, #1 <== NOT EXECUTED
2147c: eb006f78 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
21480: e3500000 cmp r0, #0 <== NOT EXECUTED
21484: ca00008b bgt 216b8 <rtems_rfs_rtems_eval_path+0x2a4> <== NOT EXECUTED
}
/*
* Is this the end of the pathname we where given ?
*/
if ((*path == '\0') || (pathlen == 0))
21488: e5d40000 ldrb r0, [r4] <== NOT EXECUTED
2148c: e3550000 cmp r5, #0 <== NOT EXECUTED
21490: 13500000 cmpne r0, #0 <== NOT EXECUTED
21494: 0a00003f beq 21598 <rtems_rfs_rtems_eval_path+0x184> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
21498: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
break;
/*
* If a directory the execute bit must be set for us to enter.
*/
if (RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)) &&
2149c: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
214a0: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
214a4: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
214a8: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
214ac: 0a00002b beq 21560 <rtems_rfs_rtems_eval_path+0x14c> <== NOT EXECUTED
214b0: e3a0a000 mov sl, #0 <== NOT EXECUTED
214b4: ea000009 b 214e0 <rtems_rfs_rtems_eval_path+0xcc> <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator (*path) &&
214b8: e7d4200a ldrb r2, [r4, sl] <== NOT EXECUTED
214bc: e3550000 cmp r5, #0 <== NOT EXECUTED
214c0: 13520000 cmpne r2, #0 <== NOT EXECUTED
214c4: 0a00000a beq 214f4 <rtems_rfs_rtems_eval_path+0xe0> <== NOT EXECUTED
(*path != '\0') && pathlen &&
((node_len + 1) < rtems_rfs_fs_max_name (fs)))
214c8: e5962018 ldr r2, [r6, #24] <== NOT EXECUTED
214cc: e1530002 cmp r3, r2 <== NOT EXECUTED
214d0: 2a000007 bcs 214f4 <rtems_rfs_rtems_eval_path+0xe0> <== NOT EXECUTED
{
path++;
pathlen--;
214d4: e7d40003 ldrb r0, [r4, r3] <== NOT EXECUTED
214d8: e2455001 sub r5, r5, #1 <== NOT EXECUTED
214dc: e1a0a003 mov sl, r3 <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator (*path) &&
214e0: ebffa0ac bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
214e4: e3500000 cmp r0, #0 <== NOT EXECUTED
(*path != '\0') && pathlen &&
((node_len + 1) < rtems_rfs_fs_max_name (fs)))
214e8: e28a3001 add r3, sl, #1 <== NOT EXECUTED
* @param pathlen
* @param flags
* @param pathloc
*/
int
rtems_rfs_rtems_eval_path (const char* path,
214ec: e084b00a add fp, r4, sl <== NOT EXECUTED
/*
* Extract the node name we will look for this time around.
*/
node = path;
node_len = 0;
while (!rtems_filesystem_is_separator (*path) &&
214f0: 0afffff0 beq 214b8 <rtems_rfs_rtems_eval_path+0xa4> <== NOT EXECUTED
}
/*
* Eat any separators at start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
214f4: e1a01005 mov r1, r5 <== NOT EXECUTED
214f8: e1a0000b mov r0, fp <== NOT EXECUTED
214fc: ebff9997 bl 7b60 <rtems_filesystem_prefix_separators> <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
21500: e5d43000 ldrb r3, [r4] <== NOT EXECUTED
21504: e353002e cmp r3, #46 ; 0x2e <== NOT EXECUTED
}
/*
* Eat any separators at start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
21508: e1a09000 mov r9, r0 <== NOT EXECUTED
path += stripped;
pathlen -= stripped;
node_len += stripped;
2150c: e080300a add r3, r0, sl <== NOT EXECUTED
/*
* Eat any separators at start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
path += stripped;
pathlen -= stripped;
21510: e0605005 rsb r5, r0, r5 <== NOT EXECUTED
/*
* Eat any separators at start of the path.
*/
stripped = rtems_filesystem_prefix_separators (path, pathlen);
path += stripped;
21514: e08ba000 add sl, fp, r0 <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
21518: 0a000017 beq 2157c <rtems_rfs_rtems_eval_path+0x168> <== NOT EXECUTED
/*
* Look up the node name in this directory. If found drop through, close
* the current inode and let the loop open the inode so the mode can be
* read and handlers set.
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode,
2151c: e28dc040 add ip, sp, #64 ; 0x40 <== NOT EXECUTED
21520: e28de03c add lr, sp, #60 ; 0x3c <== NOT EXECUTED
21524: e0693003 rsb r3, r9, r3 <== NOT EXECUTED
21528: e1a02004 mov r2, r4 <== NOT EXECUTED
2152c: e1a00006 mov r0, r6 <== NOT EXECUTED
21530: e1a01007 mov r1, r7 <== NOT EXECUTED
21534: e88d5000 stm sp, {ip, lr} <== NOT EXECUTED
21538: eb006425 bl 3a5d4 <rtems_rfs_dir_lookup_ino> <== NOT EXECUTED
node, node_len - stripped, &ino, &doff);
if (rc > 0)
2153c: e3500000 cmp r0, #0 <== NOT EXECUTED
21540: ca00004c bgt 21678 <rtems_rfs_rtems_eval_path+0x264> <== NOT EXECUTED
}
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_PATH))
printf("rtems-rfs-rtems: eval-path: down: path:%s ino:%" PRId32 "\n", node, ino);
}
rc = rtems_rfs_inode_close (fs, &inode);
21544: e1a00006 mov r0, r6 <== NOT EXECUTED
21548: e1a01007 mov r1, r7 <== NOT EXECUTED
2154c: eb006f20 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
21550: e3500000 cmp r0, #0 <== NOT EXECUTED
21554: ca000047 bgt 21678 <rtems_rfs_rtems_eval_path+0x264> <== NOT EXECUTED
21558: e1a0400a mov r4, sl <== NOT EXECUTED
2155c: eaffffc2 b 2146c <rtems_rfs_rtems_eval_path+0x58> <== NOT EXECUTED
break;
/*
* If a directory the execute bit must be set for us to enter.
*/
if (RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)) &&
21560: e1a00007 mov r0, r7 <== NOT EXECUTED
21564: e3a01001 mov r1, #1 <== NOT EXECUTED
21568: eb0004dc bl 228e0 <rtems_rfs_rtems_eval_perms> <== NOT EXECUTED
2156c: e3500000 cmp r0, #0 <== NOT EXECUTED
21570: 0a00006d beq 2172c <rtems_rfs_rtems_eval_path+0x318> <== NOT EXECUTED
21574: e5d40000 ldrb r0, [r4] <== NOT EXECUTED
21578: eaffffcc b 214b0 <rtems_rfs_rtems_eval_path+0x9c> <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
2157c: e5d40001 ldrb r0, [r4, #1] <== NOT EXECUTED
21580: e3500000 cmp r0, #0 <== NOT EXECUTED
21584: e2842001 add r2, r4, #1 <== NOT EXECUTED
21588: 1a000017 bne 215ec <rtems_rfs_rtems_eval_path+0x1d8> <== NOT EXECUTED
{
if (*path)
2158c: e7db3009 ldrb r3, [fp, r9] <== NOT EXECUTED
21590: e3530000 cmp r3, #0 <== NOT EXECUTED
21594: 1a000032 bne 21664 <rtems_rfs_rtems_eval_path+0x250> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("eval_path: closing node", rc);
}
}
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
21598: e59d3040 ldr r3, [sp, #64] ; 0x40 <== NOT EXECUTED
2159c: e5883000 str r3, [r8] <== NOT EXECUTED
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
215a0: e59d303c ldr r3, [sp, #60] ; 0x3c <== NOT EXECUTED
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
215a4: e1a01007 mov r1, r7 <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_path: closing node", rc);
}
}
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
215a8: e5883004 str r3, [r8, #4] <== NOT EXECUTED
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
215ac: e1a00008 mov r0, r8 <== NOT EXECUTED
215b0: eb0004db bl 22924 <rtems_rfs_rtems_set_handlers> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
215b4: e1a01007 mov r1, r7 <== NOT EXECUTED
}
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
215b8: e3500000 cmp r0, #0 <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
215bc: e1a00006 mov r0, r6 <== NOT EXECUTED
}
rtems_rfs_rtems_set_pathloc_ino (pathloc, ino);
rtems_rfs_rtems_set_pathloc_doff (pathloc, doff);
rc = rtems_rfs_rtems_set_handlers (pathloc, &inode) ? 0 : EIO;
215c0: 03a04005 moveq r4, #5 <== NOT EXECUTED
215c4: 13a04000 movne r4, #0 <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
215c8: eb006f01 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
215cc: e596507c ldr r5, [r6, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
215d0: e1a00006 mov r0, r6 <== NOT EXECUTED
215d4: eb00607e bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
215d8: e5950000 ldr r0, [r5] <== NOT EXECUTED
215dc: ebffac00 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_PATH))
printf("rtems-rfs-rtems: eval-path: ino:%" PRId32 "\n", ino);
return rc;
}
215e0: e1a00004 mov r0, r4 <== NOT EXECUTED
215e4: e28dd044 add sp, sp, #68 ; 0x44 <== NOT EXECUTED
215e8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
/*
* If the node is the current directory and there is more path to come move
* on it else we are at the inode we want.
*/
if (rtems_rfs_current_dir (node))
215ec: e58d200c str r2, [sp, #12] <== NOT EXECUTED
215f0: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
215f4: ebffa067 bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
215f8: e3500000 cmp r0, #0 <== NOT EXECUTED
215fc: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
21600: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
21604: 1affffe0 bne 2158c <rtems_rfs_rtems_eval_path+0x178> <== NOT EXECUTED
/*
* If the node is a parent we must move up one directory. If the location
* is on another file system we have a crossmount so we call that file
* system to handle the remainder of the path.
*/
if (rtems_rfs_parent_dir (node))
21608: e5d41000 ldrb r1, [r4] <== NOT EXECUTED
2160c: e351002e cmp r1, #46 ; 0x2e <== NOT EXECUTED
21610: 1affffc1 bne 2151c <rtems_rfs_rtems_eval_path+0x108> <== NOT EXECUTED
21614: e5d22000 ldrb r2, [r2] <== NOT EXECUTED
21618: e352002e cmp r2, #46 ; 0x2e <== NOT EXECUTED
2161c: 1affffbe bne 2151c <rtems_rfs_rtems_eval_path+0x108> <== NOT EXECUTED
21620: e5d40002 ldrb r0, [r4, #2] <== NOT EXECUTED
21624: e3500000 cmp r0, #0 <== NOT EXECUTED
21628: 1a00001c bne 216a0 <rtems_rfs_rtems_eval_path+0x28c> <== NOT EXECUTED
{
/*
* If we are at root inode of the file system we have a crossmount path.
*/
if (ino == RTEMS_RFS_ROOT_INO)
2162c: e59d2040 ldr r2, [sp, #64] ; 0x40 <== NOT EXECUTED
21630: e3520001 cmp r2, #1 <== NOT EXECUTED
21634: 0a000026 beq 216d4 <rtems_rfs_rtems_eval_path+0x2c0> <== NOT EXECUTED
}
/*
* We need to find the parent of this node.
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode, "..", 2, &ino, &doff);
21638: e28dc040 add ip, sp, #64 ; 0x40 <== NOT EXECUTED
2163c: e28de03c add lr, sp, #60 ; 0x3c <== NOT EXECUTED
21640: e1a00006 mov r0, r6 <== NOT EXECUTED
21644: e1a01007 mov r1, r7 <== NOT EXECUTED
21648: e59f2104 ldr r2, [pc, #260] ; 21754 <rtems_rfs_rtems_eval_path+0x340><== NOT EXECUTED
2164c: e3a03002 mov r3, #2 <== NOT EXECUTED
21650: e88d5000 stm sp, {ip, lr} <== NOT EXECUTED
21654: eb0063de bl 3a5d4 <rtems_rfs_dir_lookup_ino> <== NOT EXECUTED
if (rc > 0)
21658: e2504000 subs r4, r0, #0 <== NOT EXECUTED
2165c: daffffb8 ble 21544 <rtems_rfs_rtems_eval_path+0x130> <== NOT EXECUTED
21660: ea000005 b 2167c <rtems_rfs_rtems_eval_path+0x268> <== NOT EXECUTED
*/
if (rtems_rfs_current_dir (node))
{
if (*path)
{
rtems_rfs_inode_close (fs, &inode);
21664: e1a00006 mov r0, r6 <== NOT EXECUTED
21668: e1a01007 mov r1, r7 <== NOT EXECUTED
2166c: eb006ed8 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21670: e1a0400a mov r4, sl <== NOT EXECUTED
21674: eaffff7c b 2146c <rtems_rfs_rtems_eval_path+0x58> <== NOT EXECUTED
21678: e1a04000 mov r4, r0 <== NOT EXECUTED
*/
rc = rtems_rfs_dir_lookup_ino (fs, &inode,
node, node_len - stripped, &ino, &doff);
if (rc > 0)
{
rtems_rfs_inode_close (fs, &inode);
2167c: e1a01007 mov r1, r7 <== NOT EXECUTED
21680: e1a00006 mov r0, r6 <== NOT EXECUTED
21684: eb006ed2 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
21688: e1a00006 mov r0, r6 <== NOT EXECUTED
2168c: ebfffea1 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return ((errno = rc) == 0) ? 0 : -1;
21690: eb008656 bl 42ff0 <__errno> <== NOT EXECUTED
21694: e5804000 str r4, [r0] <== NOT EXECUTED
21698: e3e04000 mvn r4, #0 <== NOT EXECUTED
2169c: eaffffcf b 215e0 <rtems_rfs_rtems_eval_path+0x1cc> <== NOT EXECUTED
/*
* If the node is a parent we must move up one directory. If the location
* is on another file system we have a crossmount so we call that file
* system to handle the remainder of the path.
*/
if (rtems_rfs_parent_dir (node))
216a0: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
216a4: ebffa03b bl 9798 <rtems_filesystem_is_separator> <== NOT EXECUTED
216a8: e3500000 cmp r0, #0 <== NOT EXECUTED
216ac: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
216b0: 0affff99 beq 2151c <rtems_rfs_rtems_eval_path+0x108> <== NOT EXECUTED
216b4: eaffffdc b 2162c <rtems_rfs_rtems_eval_path+0x218> <== NOT EXECUTED
216b8: e1a0a000 mov sl, r0 <== NOT EXECUTED
* Open and load the inode.
*/
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc > 0)
{
rtems_rfs_rtems_unlock (fs);
216bc: e1a00006 mov r0, r6 <== NOT EXECUTED
216c0: ebfffe94 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_path: opening inode", rc);
216c4: eb008649 bl 42ff0 <__errno> <== NOT EXECUTED
216c8: e3e04000 mvn r4, #0 <== NOT EXECUTED
216cc: e580a000 str sl, [r0] <== NOT EXECUTED
216d0: eaffffc2 b 215e0 <rtems_rfs_rtems_eval_path+0x1cc> <== NOT EXECUTED
if (ino == RTEMS_RFS_ROOT_INO)
{
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_PATH))
printf("rtems-rfs-rtems: eval-path: crossmount: path:%s (%zd)\n",
path - node_len, pathlen + node_len);
rtems_rfs_inode_close (fs, &inode);
216d4: e1a01007 mov r1, r7 <== NOT EXECUTED
216d8: e1a00006 mov r0, r6 <== NOT EXECUTED
216dc: e1a09003 mov r9, r3 <== NOT EXECUTED
216e0: eb006ebb bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
216e4: e1a00006 mov r0, r6 <== NOT EXECUTED
216e8: ebfffe8a bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
*pathloc = pathloc->mt_entry->mt_point_node;
216ec: e598c010 ldr ip, [r8, #16] <== NOT EXECUTED
216f0: e28cc008 add ip, ip, #8 <== NOT EXECUTED
216f4: e8bc000f ldm ip!, {r0, r1, r2, r3} <== NOT EXECUTED
216f8: e1a0e008 mov lr, r8 <== NOT EXECUTED
216fc: e8ae000f stmia lr!, {r0, r1, r2, r3} <== NOT EXECUTED
21700: e59c2000 ldr r2, [ip] <== NOT EXECUTED
21704: e58e2000 str r2, [lr] <== NOT EXECUTED
return (*pathloc->ops->evalpath_h)(path - node_len, pathlen + node_len,
21708: e0891005 add r1, r9, r5 <== NOT EXECUTED
2170c: e069000a rsb r0, r9, sl <== NOT EXECUTED
21710: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
21714: e1a03008 mov r3, r8 <== NOT EXECUTED
21718: e598c00c ldr ip, [r8, #12] <== NOT EXECUTED
2171c: e1a0e00f mov lr, pc <== NOT EXECUTED
21720: e59cf000 ldr pc, [ip] <== NOT EXECUTED
21724: e1a04000 mov r4, r0 <== NOT EXECUTED
21728: eaffffac b 215e0 <rtems_rfs_rtems_eval_path+0x1cc> <== NOT EXECUTED
* If a directory the execute bit must be set for us to enter.
*/
if (RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&inode)) &&
!rtems_rfs_rtems_eval_perms (&inode, RTEMS_LIBIO_PERMS_SEARCH))
{
rtems_rfs_inode_close (fs, &inode);
2172c: e1a01007 mov r1, r7 <== NOT EXECUTED
21730: e1a00006 mov r0, r6 <== NOT EXECUTED
21734: eb006ea6 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
21738: e1a00006 mov r0, r6 <== NOT EXECUTED
2173c: ebfffe75 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("eval_path: eval perms", EACCES);
21740: eb00862a bl 42ff0 <__errno> <== NOT EXECUTED
21744: e3a0300d mov r3, #13 <== NOT EXECUTED
21748: e5803000 str r3, [r0] <== NOT EXECUTED
2174c: e3e04000 mvn r4, #0 <== NOT EXECUTED
21750: eaffffa2 b 215e0 <rtems_rfs_rtems_eval_path+0x1cc> <== NOT EXECUTED
000228e0 <rtems_rfs_rtems_eval_perms>:
228e0: e590300c ldr r3, [r0, #12] <== NOT EXECUTED
* Check if I am owner or a group member or someone else.
*/
flags_to_test = flags;
if ((st_uid == 0) || (st_uid == uid))
flags_to_test |= flags << 6;
228e4: e1a02181 lsl r2, r1, #3 <== NOT EXECUTED
228e8: e1822301 orr r2, r2, r1, lsl #6 <== NOT EXECUTED
228ec: e1821001 orr r1, r2, r1 <== NOT EXECUTED
228f0: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
228f4: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
228f8: e1a01b81 lsl r1, r1, #23 <== NOT EXECUTED
228fc: e1823403 orr r3, r2, r3, lsl #8 <== NOT EXECUTED
22900: e1a01ba1 lsr r1, r1, #23 <== NOT EXECUTED
22904: e1110003 tst r1, r3 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_EVAL_PERMS))
printf("rtems-rfs: eval-perms: perms failed\n");
return false;
}
22908: 03a00000 moveq r0, #0 <== NOT EXECUTED
2290c: 13a00001 movne r0, #1 <== NOT EXECUTED
22910: e12fff1e bx lr <== NOT EXECUTED
000225e4 <rtems_rfs_rtems_fchmod>:
*/
int
rtems_rfs_rtems_fchmod (rtems_filesystem_location_info_t* pathloc,
mode_t mode)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
225e4: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_fchmod (rtems_filesystem_location_info_t* pathloc,
mode_t mode)
{
225e8: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
225ec: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
225f0: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
225f4: e5907000 ldr r7, [r0] <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_fchmod (rtems_filesystem_location_info_t* pathloc,
mode_t mode)
{
225f8: e1a06001 mov r6, r1 <== NOT EXECUTED
225fc: e3a01000 mov r1, #0 <== NOT EXECUTED
22600: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
22604: e1a02001 mov r2, r1 <== NOT EXECUTED
22608: e5930000 ldr r0, [r3] <== NOT EXECUTED
2260c: ebffa7ac bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
printf ("rtems-rfs-rtems: fchmod: in: ino:%" PRId32 " mode:%06" PRIomode_t "\n",
ino, mode);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
22610: e1a01007 mov r1, r7 <== NOT EXECUTED
22614: e1a00004 mov r0, r4 <== NOT EXECUTED
22618: e1a0200d mov r2, sp <== NOT EXECUTED
2261c: e3a03001 mov r3, #1 <== NOT EXECUTED
22620: eb006b0f bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
22624: e2507000 subs r7, r0, #0 <== NOT EXECUTED
22628: 0a000009 beq 22654 <rtems_rfs_rtems_fchmod+0x70> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
2262c: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
22630: e1a00004 mov r0, r4 <== NOT EXECUTED
22634: eb005c66 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
22638: e5950000 ldr r0, [r5] <== NOT EXECUTED
2263c: ebffa7e8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("fchmod: opening inode", rc);
22640: eb00826a bl 42ff0 <__errno> <== NOT EXECUTED
22644: e5807000 str r7, [r0] <== NOT EXECUTED
22648: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
2264c: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
22650: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
22654: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
22658: e5d32002 ldrb r2, [r3, #2] <== NOT EXECUTED
2265c: e1a02402 lsl r2, r2, #8 <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("fchmod: not owner", EPERM);
}
#endif
imode &= ~(S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
22660: e2022a0f and r2, r2, #61440 ; 0xf000 <== NOT EXECUTED
imode |= mode & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX);
22664: e3c66a0f bic r6, r6, #61440 ; 0xf000 <== NOT EXECUTED
22668: e1826006 orr r6, r2, r6 <== NOT EXECUTED
2266c: e1a06806 lsl r6, r6, #16 <== NOT EXECUTED
* @prarm mode The mode.
*/
static inline void
rtems_rfs_inode_set_mode (rtems_rfs_inode_handle* handle, uint16_t mode)
{
rtems_rfs_write_u16 (&handle->node->mode, mode);
22670: e1a02c26 lsr r2, r6, #24 <== NOT EXECUTED
22674: e5c32002 strb r2, [r3, #2] <== NOT EXECUTED
22678: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
2267c: e1a06826 lsr r6, r6, #16 <== NOT EXECUTED
22680: e5c36003 strb r6, [r3, #3] <== NOT EXECUTED
rtems_rfs_inode_set_mode (&inode, imode);
rc = rtems_rfs_inode_close (fs, &inode);
22684: e1a0100d mov r1, sp <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
22688: e3a03001 mov r3, #1 <== NOT EXECUTED
2268c: e1a00004 mov r0, r4 <== NOT EXECUTED
22690: e5cd3010 strb r3, [sp, #16] <== NOT EXECUTED
22694: eb006ace bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
22698: e2505000 subs r5, r0, #0 <== NOT EXECUTED
2269c: da000008 ble 226c4 <rtems_rfs_rtems_fchmod+0xe0> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
226a0: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
226a4: e1a00004 mov r0, r4 <== NOT EXECUTED
226a8: eb005c49 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
226ac: e5960000 ldr r0, [r6] <== NOT EXECUTED
226b0: ebffa7cb bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("fchmod: closing inode", rc);
226b4: eb00824d bl 42ff0 <__errno> <== NOT EXECUTED
226b8: e5805000 str r5, [r0] <== NOT EXECUTED
226bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
226c0: eaffffe1 b 2264c <rtems_rfs_rtems_fchmod+0x68> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
226c4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
226c8: e1a00004 mov r0, r4 <== NOT EXECUTED
226cc: eb005c40 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
226d0: e5950000 ldr r0, [r5] <== NOT EXECUTED
226d4: ebffa7c2 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
226d8: e1a00007 mov r0, r7 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
226dc: eaffffda b 2264c <rtems_rfs_rtems_fchmod+0x68> <== NOT EXECUTED
00021110 <rtems_rfs_rtems_fcntl>:
int
rtems_rfs_rtems_fcntl (int cmd,
rtems_libio_t* iop)
{
return 0;
}
21110: e3a00000 mov r0, #0 <== NOT EXECUTED
21114: e12fff1e bx lr <== NOT EXECUTED
000213e8 <rtems_rfs_rtems_fdatasync>:
int
rtems_rfs_rtems_fdatasync (rtems_libio_t* iop)
{
int rc;
rc = rtems_rfs_buffer_sync (rtems_rfs_rtems_pathloc_dev (&iop->pathinfo));
213e8: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
* @param iop
* @return int
*/
int
rtems_rfs_rtems_fdatasync (rtems_libio_t* iop)
{
213ec: e92d4010 push {r4, lr} <== NOT EXECUTED
int rc;
rc = rtems_rfs_buffer_sync (rtems_rfs_rtems_pathloc_dev (&iop->pathinfo));
213f0: e5930034 ldr r0, [r3, #52] ; 0x34 <== NOT EXECUTED
213f4: eb006108 bl 3981c <rtems_rfs_buffer_sync> <== NOT EXECUTED
if (rc)
213f8: e2504000 subs r4, r0, #0 <== NOT EXECUTED
213fc: 01a00004 moveq r0, r4 <== NOT EXECUTED
21400: 08bd8010 popeq {r4, pc} <== NOT EXECUTED
return rtems_rfs_rtems_error ("fdatasync: sync", rc);
21404: eb0086f9 bl 42ff0 <__errno> <== NOT EXECUTED
21408: e5804000 str r4, [r0] <== NOT EXECUTED
2140c: e3e00000 mvn r0, #0 <== NOT EXECUTED
return 0;
}
21410: e8bd8010 pop {r4, pc} <== NOT EXECUTED
0003e544 <rtems_rfs_rtems_file_close>:
* @param iop
* @return int
*/
static int
rtems_rfs_rtems_file_close (rtems_libio_t* iop)
{
3e544: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
rtems_rfs_file_handle* file = iop->file_info;
3e548: e5905038 ldr r5, [r0, #56] ; 0x38 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_file_fs (file);
3e54c: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e550: e5934098 ldr r4, [r3, #152] ; 0x98 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e554: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
3e558: e3a01000 mov r1, #0 <== NOT EXECUTED
3e55c: e1a02001 mov r2, r1 <== NOT EXECUTED
3e560: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e564: ebff37d6 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_CLOSE))
printf("rtems-rfs: file-close: handle:%p\n", file);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_file_close (fs, file);
3e568: e1a01005 mov r1, r5 <== NOT EXECUTED
3e56c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e570: ebfff306 bl 3b190 <rtems_rfs_file_close> <== NOT EXECUTED
if (rc > 0)
3e574: e2505000 subs r5, r0, #0 <== NOT EXECUTED
3e578: da000002 ble 3e588 <rtems_rfs_rtems_file_close+0x44> <== NOT EXECUTED
rc = rtems_rfs_rtems_error ("file-close: file close", rc);
3e57c: eb00129b bl 42ff0 <__errno> <== NOT EXECUTED
3e580: e5805000 str r5, [r0] <== NOT EXECUTED
3e584: e3e05000 mvn r5, #0 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e588: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e58c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e590: ebffec8f bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e594: e5960000 ldr r0, [r6] <== NOT EXECUTED
3e598: ebff3811 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rc;
}
3e59c: e1a00005 mov r0, r5 <== NOT EXECUTED
3e5a0: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
0003e5a4 <rtems_rfs_rtems_file_ftruncate>:
* @return int
*/
int
rtems_rfs_rtems_file_ftruncate (rtems_libio_t* iop,
rtems_off64_t length)
{
3e5a4: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_handle* file = iop->file_info;
3e5a8: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e5ac: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e5b0: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
3e5b4: e593307c ldr r3, [r3, #124] ; 0x7c <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_file_ftruncate (rtems_libio_t* iop,
rtems_off64_t length)
{
3e5b8: e1a06001 mov r6, r1 <== NOT EXECUTED
3e5bc: e3a01000 mov r1, #0 <== NOT EXECUTED
3e5c0: e1a07002 mov r7, r2 <== NOT EXECUTED
3e5c4: e1a05000 mov r5, r0 <== NOT EXECUTED
3e5c8: e1a02001 mov r2, r1 <== NOT EXECUTED
3e5cc: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e5d0: ebff37bb bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_FTRUNC))
printf("rtems-rfs: file-ftrunc: handle:%p length:%Ld\n", file, length);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
rc = rtems_rfs_file_set_size (file, length);
3e5d4: e1a01006 mov r1, r6 <== NOT EXECUTED
3e5d8: e1a00004 mov r0, r4 <== NOT EXECUTED
3e5dc: e1a02007 mov r2, r7 <== NOT EXECUTED
3e5e0: ebfff17f bl 3abe4 <rtems_rfs_file_set_size> <== NOT EXECUTED
if (rc)
3e5e4: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3e5e8: 0a000002 beq 3e5f8 <rtems_rfs_rtems_file_ftruncate+0x54> <== NOT EXECUTED
rc = rtems_rfs_rtems_error ("file_ftruncate: set size", rc);
3e5ec: eb00127f bl 42ff0 <__errno> <== NOT EXECUTED
3e5f0: e5806000 str r6, [r0] <== NOT EXECUTED
3e5f4: e3e06000 mvn r6, #0 <== NOT EXECUTED
iop->size = rtems_rfs_file_size (file);
3e5f8: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e5fc: e2831084 add r1, r3, #132 ; 0x84 <== NOT EXECUTED
3e600: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3e604: ebffe8ac bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e608: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e60c: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e610: e593407c ldr r4, [r3, #124] ; 0x7c <== NOT EXECUTED
rc = rtems_rfs_file_set_size (file, length);
if (rc)
rc = rtems_rfs_rtems_error ("file_ftruncate: set size", rc);
iop->size = rtems_rfs_file_size (file);
3e614: e9850003 stmib r5, {r0, r1} <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e618: e1a00003 mov r0, r3 <== NOT EXECUTED
3e61c: ebffec6c bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e620: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e624: ebff37ee bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rc;
}
3e628: e1a00006 mov r0, r6 <== NOT EXECUTED
3e62c: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
0003e40c <rtems_rfs_rtems_file_ioctl>:
int
rtems_rfs_rtems_file_ioctl (rtems_libio_t* iop, uint32_t command, void* buffer)
{
return 0;
}
3e40c: e3a00000 mov r0, #0 <== NOT EXECUTED
3e410: e12fff1e bx lr <== NOT EXECUTED
0003e7f0 <rtems_rfs_rtems_file_lseek>:
*/
rtems_off64_t
rtems_rfs_rtems_file_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
3e7f0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
rtems_rfs_file_handle* file = iop->file_info;
3e7f4: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e7f8: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e7fc: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
3e800: e593307c ldr r3, [r3, #124] ; 0x7c <== NOT EXECUTED
3e804: e3a01000 mov r1, #0 <== NOT EXECUTED
*/
rtems_off64_t
rtems_rfs_rtems_file_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
3e808: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
3e80c: e1a05000 mov r5, r0 <== NOT EXECUTED
3e810: e1a02001 mov r2, r1 <== NOT EXECUTED
3e814: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e818: ebff3729 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_LSEEK))
printf("rtems-rfs: file-lseek: handle:%p offset:%Ld\n", file, offset);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
3e81c: e285200c add r2, r5, #12 <== NOT EXECUTED
3e820: e8920006 ldm r2, {r1, r2} <== NOT EXECUTED
3e824: e28d3008 add r3, sp, #8 <== NOT EXECUTED
3e828: e9230006 stmdb r3!, {r1, r2} <== NOT EXECUTED
rc = rtems_rfs_file_seek (file, pos, &pos);
3e82c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e830: e1a0300d mov r3, sp <== NOT EXECUTED
3e834: ebfff1b1 bl 3af00 <rtems_rfs_file_seek> <== NOT EXECUTED
if (rc)
3e838: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3e83c: 0a00000d beq 3e878 <rtems_rfs_rtems_file_lseek+0x88> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e840: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e844: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e848: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e84c: ebffebe0 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e850: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e854: ebff3762 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rtems_rfs_rtems_error ("file_lseek: lseek", rc);
3e858: eb0011e4 bl 42ff0 <__errno> <== NOT EXECUTED
3e85c: e5806000 str r6, [r0] <== NOT EXECUTED
3e860: e3e03000 mvn r3, #0 <== NOT EXECUTED
3e864: e3e04000 mvn r4, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return iop->offset;
}
3e868: e1a01004 mov r1, r4 <== NOT EXECUTED
3e86c: e1a00003 mov r0, r3 <== NOT EXECUTED
3e870: e28dd008 add sp, sp, #8 <== NOT EXECUTED
3e874: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rtems_rfs_rtems_error ("file_lseek: lseek", rc);
}
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e878: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e87c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e880: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e884: ebffebd2 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e888: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e88c: ebff3754 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return iop->offset;
3e890: e285400c add r4, r5, #12 <== NOT EXECUTED
3e894: e8940018 ldm r4, {r3, r4} <== NOT EXECUTED
3e898: eafffff2 b 3e868 <rtems_rfs_rtems_file_lseek+0x78> <== NOT EXECUTED
0003e89c <rtems_rfs_rtems_file_open>:
rtems_rfs_rtems_file_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3e89c: e5903028 ldr r3, [r0, #40] ; 0x28 <== NOT EXECUTED
static int
rtems_rfs_rtems_file_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
3e8a0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
3e8a4: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e8a8: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
3e8ac: e3a01000 mov r1, #0 <== NOT EXECUTED
static int
rtems_rfs_rtems_file_open (rtems_libio_t* iop,
const char* pathname,
uint32_t flag,
uint32_t mode)
{
3e8b0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3e8b4: e1a02001 mov r2, r1 <== NOT EXECUTED
3e8b8: e1a05000 mov r5, r0 <== NOT EXECUTED
3e8bc: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e8c0: ebff36ff bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_rtems_lock (fs);
ino = rtems_rfs_rtems_get_iop_ino (iop);
rc = rtems_rfs_file_open (fs, ino, flags, &file);
3e8c4: e1a00004 mov r0, r4 <== NOT EXECUTED
3e8c8: e5951038 ldr r1, [r5, #56] ; 0x38 <== NOT EXECUTED
3e8cc: e3a02000 mov r2, #0 <== NOT EXECUTED
3e8d0: e1a0300d mov r3, sp <== NOT EXECUTED
3e8d4: ebfff29c bl 3b34c <rtems_rfs_file_open> <== NOT EXECUTED
if (rc > 0)
3e8d8: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3e8dc: da000009 ble 3e908 <rtems_rfs_rtems_file_open+0x6c> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e8e0: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e8e4: e1a00004 mov r0, r4 <== NOT EXECUTED
3e8e8: ebffebb9 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e8ec: e5950000 ldr r0, [r5] <== NOT EXECUTED
3e8f0: ebff373b bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("file-open: open", rc);
3e8f4: eb0011bd bl 42ff0 <__errno> <== NOT EXECUTED
3e8f8: e5806000 str r6, [r0] <== NOT EXECUTED
3e8fc: e3e00000 mvn r0, #0 <== NOT EXECUTED
iop->size = rtems_rfs_file_size (file);
iop->file_info = file;
rtems_rfs_rtems_unlock (fs);
return 0;
}
3e900: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3e904: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
}
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_OPEN))
printf("rtems-rfs: file-open: handle:%p\n", file);
iop->size = rtems_rfs_file_size (file);
3e908: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3e90c: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
3e910: e2831084 add r1, r3, #132 ; 0x84 <== NOT EXECUTED
3e914: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3e918: ebffe7e7 bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
iop->file_info = file;
3e91c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3e920: e5853038 str r3, [r5, #56] ; 0x38 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e924: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
}
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_OPEN))
printf("rtems-rfs: file-open: handle:%p\n", file);
iop->size = rtems_rfs_file_size (file);
3e928: e9850003 stmib r5, {r0, r1} <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e92c: e1a00004 mov r0, r4 <== NOT EXECUTED
3e930: ebffeba7 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e934: e5960000 ldr r0, [r6] <== NOT EXECUTED
3e938: ebff3729 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
3e93c: e3a00000 mov r0, #0 <== NOT EXECUTED
3e940: eaffffee b 3e900 <rtems_rfs_rtems_file_open+0x64> <== NOT EXECUTED
0003e414 <rtems_rfs_rtems_file_read>:
*/
ssize_t
rtems_rfs_rtems_file_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
3e414: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
rtems_rfs_file_handle* file = iop->file_info;
3e418: e5904038 ldr r4, [r0, #56] ; 0x38 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e41c: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e420: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
3e424: e593307c ldr r3, [r3, #124] ; 0x7c <== NOT EXECUTED
*/
ssize_t
rtems_rfs_rtems_file_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
3e428: e1a07001 mov r7, r1 <== NOT EXECUTED
3e42c: e3a01000 mov r1, #0 <== NOT EXECUTED
3e430: e1a05000 mov r5, r0 <== NOT EXECUTED
3e434: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3e438: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e43c: e1a06002 mov r6, r2 <== NOT EXECUTED
3e440: e1a02001 mov r2, r1 <== NOT EXECUTED
3e444: ebff381e bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
if (pos < rtems_rfs_file_size (file))
3e448: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e44c: e2831084 add r1, r3, #132 ; 0x84 <== NOT EXECUTED
3e450: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_READ))
printf("rtems-rfs: file-read: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
3e454: e285500c add r5, r5, #12 <== NOT EXECUTED
3e458: e8950120 ldm r5, {r5, r8} <== NOT EXECUTED
3e45c: ebffe916 bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
if (pos < rtems_rfs_file_size (file))
3e460: e1510008 cmp r1, r8 <== NOT EXECUTED
3e464: 9a00002d bls 3e520 <rtems_rfs_rtems_file_read+0x10c> <== NOT EXECUTED
{
while (count)
3e468: e3560000 cmp r6, #0 <== NOT EXECUTED
void* buffer,
size_t count)
{
rtems_rfs_file_handle* file = iop->file_info;
rtems_rfs_pos pos;
uint8_t* data = buffer;
3e46c: 13a08000 movne r8, #0 <== NOT EXECUTED
3e470: 11a0a00d movne sl, sp <== NOT EXECUTED
pos = iop->offset;
if (pos < rtems_rfs_file_size (file))
{
while (count)
3e474: 1a000004 bne 3e48c <rtems_rfs_rtems_file_read+0x78> <== NOT EXECUTED
3e478: ea00002b b 3e52c <rtems_rfs_rtems_file_read+0x118> <== NOT EXECUTED
3e47c: e0566005 subs r6, r6, r5 <== NOT EXECUTED
memcpy (data, rtems_rfs_file_data (file), size);
data += size;
count -= size;
read += size;
3e480: e0888005 add r8, r8, r5 <== NOT EXECUTED
pos = iop->offset;
if (pos < rtems_rfs_file_size (file))
{
while (count)
3e484: 0a00001c beq 3e4fc <rtems_rfs_rtems_file_read+0xe8> <== NOT EXECUTED
if (size > count)
size = count;
memcpy (data, rtems_rfs_file_data (file), size);
data += size;
3e488: e0877005 add r7, r7, r5 <== NOT EXECUTED
{
while (count)
{
size_t size;
rc = rtems_rfs_file_io_start (file, &size, true);
3e48c: e1a0100d mov r1, sp <== NOT EXECUTED
3e490: e1a00004 mov r0, r4 <== NOT EXECUTED
3e494: e3a02001 mov r2, #1 <== NOT EXECUTED
3e498: ebfff16f bl 3aa5c <rtems_rfs_file_io_start> <== NOT EXECUTED
if (rc > 0)
3e49c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
break;
if (size > count)
size = count;
memcpy (data, rtems_rfs_file_data (file), size);
3e4a0: e1a00007 mov r0, r7 <== NOT EXECUTED
while (count)
{
size_t size;
rc = rtems_rfs_file_io_start (file, &size, true);
if (rc > 0)
3e4a4: ca000022 bgt 3e534 <rtems_rfs_rtems_file_read+0x120> <== NOT EXECUTED
{
read = rtems_rfs_rtems_error ("file-read: read: io-start", rc);
break;
}
if (size == 0)
3e4a8: e59d2000 ldr r2, [sp] <== NOT EXECUTED
3e4ac: e3520000 cmp r2, #0 <== NOT EXECUTED
3e4b0: 0a000011 beq 3e4fc <rtems_rfs_rtems_file_read+0xe8> <== NOT EXECUTED
break;
if (size > count)
3e4b4: e1520006 cmp r2, r6 <== NOT EXECUTED
size = count;
3e4b8: 858d6000 strhi r6, [sp] <== NOT EXECUTED
memcpy (data, rtems_rfs_file_data (file), size);
3e4bc: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
3e4c0: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
3e4c4: e5943014 ldr r3, [r4, #20] <== NOT EXECUTED
if (size == 0)
break;
if (size > count)
size = count;
3e4c8: 81a02006 movhi r2, r6 <== NOT EXECUTED
memcpy (data, rtems_rfs_file_data (file), size);
3e4cc: e0811003 add r1, r1, r3 <== NOT EXECUTED
3e4d0: eb001f76 bl 462b0 <memcpy> <== NOT EXECUTED
data += size;
3e4d4: e59d5000 ldr r5, [sp] <== NOT EXECUTED
count -= size;
read += size;
rc = rtems_rfs_file_io_end (file, size, true);
3e4d8: e1a00004 mov r0, r4 <== NOT EXECUTED
3e4dc: e1a01005 mov r1, r5 <== NOT EXECUTED
3e4e0: e3a02001 mov r2, #1 <== NOT EXECUTED
3e4e4: ebfff2ba bl 3afd4 <rtems_rfs_file_io_end> <== NOT EXECUTED
if (rc > 0)
3e4e8: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3e4ec: daffffe2 ble 3e47c <rtems_rfs_rtems_file_read+0x68> <== NOT EXECUTED
{
read = rtems_rfs_rtems_error ("file-read: read: io-end", rc);
3e4f0: eb0012be bl 42ff0 <__errno> <== NOT EXECUTED
3e4f4: e5809000 str r9, [r0] <== NOT EXECUTED
3e4f8: e3e08000 mvn r8, #0 <== NOT EXECUTED
break;
}
}
}
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e4fc: e594301c ldr r3, [r4, #28] <== NOT EXECUTED
3e500: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e504: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e508: ebffecb1 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e50c: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e510: ebff3833 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return read;
}
3e514: e1a00008 mov r0, r8 <== NOT EXECUTED
3e518: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3e51c: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
if (pos < rtems_rfs_file_size (file))
3e520: 1a000001 bne 3e52c <rtems_rfs_rtems_file_read+0x118> <== NOT EXECUTED
3e524: e1500005 cmp r0, r5 <== NOT EXECUTED
3e528: 8affffce bhi 3e468 <rtems_rfs_rtems_file_read+0x54> <== NOT EXECUTED
if (size > count)
size = count;
memcpy (data, rtems_rfs_file_data (file), size);
data += size;
3e52c: e3a08000 mov r8, #0 <== NOT EXECUTED
3e530: eafffff1 b 3e4fc <rtems_rfs_rtems_file_read+0xe8> <== NOT EXECUTED
size_t size;
rc = rtems_rfs_file_io_start (file, &size, true);
if (rc > 0)
{
read = rtems_rfs_rtems_error ("file-read: read: io-start", rc);
3e534: eb0012ad bl 42ff0 <__errno> <== NOT EXECUTED
3e538: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e53c: e5805000 str r5, [r0] <== NOT EXECUTED
3e540: eaffffed b 3e4fc <rtems_rfs_rtems_file_read+0xe8> <== NOT EXECUTED
0003e630 <rtems_rfs_rtems_file_write>:
*/
ssize_t
rtems_rfs_rtems_file_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
3e630: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
rtems_rfs_file_handle* file = iop->file_info;
3e634: e5905038 ldr r5, [r0, #56] ; 0x38 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
3e638: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e63c: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
3e640: e593307c ldr r3, [r3, #124] ; 0x7c <== NOT EXECUTED
*/
ssize_t
rtems_rfs_rtems_file_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
3e644: e1a07001 mov r7, r1 <== NOT EXECUTED
3e648: e3a01000 mov r1, #0 <== NOT EXECUTED
3e64c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
3e650: e1a09000 mov r9, r0 <== NOT EXECUTED
3e654: e1a04002 mov r4, r2 <== NOT EXECUTED
3e658: e5930000 ldr r0, [r3] <== NOT EXECUTED
3e65c: e1a02001 mov r2, r1 <== NOT EXECUTED
3e660: ebff3797 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
* size of file we are still past the end of the file as positions number
* from 0. For a specific position we need a file that has a length of one
* more.
*/
if (pos >= rtems_rfs_file_size (file))
3e664: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e668: e2831084 add r1, r3, #132 ; 0x84 <== NOT EXECUTED
3e66c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_WRITE))
printf("rtems-rfs: file-write: handle:%p count:%zd\n", file, count);
rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
pos = iop->offset;
3e670: e289b00c add fp, r9, #12 <== NOT EXECUTED
3e674: e89b0c00 ldm fp, {sl, fp} <== NOT EXECUTED
3e678: ebffe88f bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
* size of file we are still past the end of the file as positions number
* from 0. For a specific position we need a file that has a length of one
* more.
*/
if (pos >= rtems_rfs_file_size (file))
3e67c: e151000b cmp r1, fp <== NOT EXECUTED
3e680: 8a000008 bhi 3e6a8 <rtems_rfs_rtems_file_write+0x78> <== NOT EXECUTED
3e684: 0a000041 beq 3e790 <rtems_rfs_rtems_file_write+0x160> <== NOT EXECUTED
{
rc = rtems_rfs_file_set_size (file, pos + 1);
3e688: e3a01001 mov r1, #1 <== NOT EXECUTED
3e68c: e091100a adds r1, r1, sl <== NOT EXECUTED
3e690: e3a02000 mov r2, #0 <== NOT EXECUTED
3e694: e0a2200b adc r2, r2, fp <== NOT EXECUTED
3e698: e1a00005 mov r0, r5 <== NOT EXECUTED
3e69c: ebfff150 bl 3abe4 <rtems_rfs_file_set_size> <== NOT EXECUTED
if (rc)
3e6a0: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3e6a4: 1a000043 bne 3e7b8 <rtems_rfs_rtems_file_write+0x188> <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rtems_rfs_rtems_error ("file-write: write extend", rc);
}
}
rtems_rfs_file_set_bpos (file, pos);
3e6a8: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e6ac: e1a0100a mov r1, sl <== NOT EXECUTED
3e6b0: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3e6b4: e1a0200b mov r2, fp <== NOT EXECUTED
3e6b8: e2853010 add r3, r5, #16 <== NOT EXECUTED
3e6bc: ebffe84f bl 38800 <rtems_rfs_block_get_bpos> <== NOT EXECUTED
while (count)
3e6c0: e3540000 cmp r4, #0 <== NOT EXECUTED
if (size > count)
size = count;
memcpy (rtems_rfs_file_data (file), data, size);
data += size;
3e6c4: 01a08004 moveq r8, r4 <== NOT EXECUTED
}
}
rtems_rfs_file_set_bpos (file, pos);
while (count)
3e6c8: 0a000021 beq 3e754 <rtems_rfs_rtems_file_write+0x124> <== NOT EXECUTED
const void* buffer,
size_t count)
{
rtems_rfs_file_handle* file = iop->file_info;
rtems_rfs_pos pos;
const uint8_t* data = buffer;
3e6cc: e3a08000 mov r8, #0 <== NOT EXECUTED
3e6d0: e1a0a00d mov sl, sp <== NOT EXECUTED
3e6d4: ea000003 b 3e6e8 <rtems_rfs_rtems_file_write+0xb8> <== NOT EXECUTED
}
}
rtems_rfs_file_set_bpos (file, pos);
while (count)
3e6d8: e0544006 subs r4, r4, r6 <== NOT EXECUTED
memcpy (rtems_rfs_file_data (file), data, size);
data += size;
count -= size;
write += size;
3e6dc: e0888006 add r8, r8, r6 <== NOT EXECUTED
}
}
rtems_rfs_file_set_bpos (file, pos);
while (count)
3e6e0: 0a00001b beq 3e754 <rtems_rfs_rtems_file_write+0x124> <== NOT EXECUTED
if (size > count)
size = count;
memcpy (rtems_rfs_file_data (file), data, size);
data += size;
3e6e4: e0877006 add r7, r7, r6 <== NOT EXECUTED
while (count)
{
size_t size = count;
rc = rtems_rfs_file_io_start (file, &size, false);
3e6e8: e1a0100d mov r1, sp <== NOT EXECUTED
3e6ec: e1a00005 mov r0, r5 <== NOT EXECUTED
3e6f0: e3a02000 mov r2, #0 <== NOT EXECUTED
rtems_rfs_file_set_bpos (file, pos);
while (count)
{
size_t size = count;
3e6f4: e58d4000 str r4, [sp] <== NOT EXECUTED
rc = rtems_rfs_file_io_start (file, &size, false);
3e6f8: ebfff0d7 bl 3aa5c <rtems_rfs_file_io_start> <== NOT EXECUTED
if (rc)
3e6fc: e2506000 subs r6, r0, #0 <== NOT EXECUTED
}
if (size > count)
size = count;
memcpy (rtems_rfs_file_data (file), data, size);
3e700: e1a01007 mov r1, r7 <== NOT EXECUTED
while (count)
{
size_t size = count;
rc = rtems_rfs_file_io_start (file, &size, false);
if (rc)
3e704: 1a000035 bne 3e7e0 <rtems_rfs_rtems_file_write+0x1b0> <== NOT EXECUTED
{
write = rtems_rfs_rtems_error ("file-write: write open", rc);
break;
}
if (size > count)
3e708: e59d2000 ldr r2, [sp] <== NOT EXECUTED
3e70c: e1520004 cmp r2, r4 <== NOT EXECUTED
size = count;
3e710: 858d4000 strhi r4, [sp] <== NOT EXECUTED
memcpy (rtems_rfs_file_data (file), data, size);
3e714: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
3e718: e5930020 ldr r0, [r3, #32] <== NOT EXECUTED
3e71c: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
write = rtems_rfs_rtems_error ("file-write: write open", rc);
break;
}
if (size > count)
size = count;
3e720: 81a02004 movhi r2, r4 <== NOT EXECUTED
memcpy (rtems_rfs_file_data (file), data, size);
3e724: e0800003 add r0, r0, r3 <== NOT EXECUTED
3e728: eb001ee0 bl 462b0 <memcpy> <== NOT EXECUTED
data += size;
3e72c: e59d6000 ldr r6, [sp] <== NOT EXECUTED
count -= size;
write += size;
rc = rtems_rfs_file_io_end (file, size, false);
3e730: e1a00005 mov r0, r5 <== NOT EXECUTED
3e734: e1a01006 mov r1, r6 <== NOT EXECUTED
3e738: e3a02000 mov r2, #0 <== NOT EXECUTED
3e73c: ebfff224 bl 3afd4 <rtems_rfs_file_io_end> <== NOT EXECUTED
if (rc)
3e740: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3e744: 0affffe3 beq 3e6d8 <rtems_rfs_rtems_file_write+0xa8> <== NOT EXECUTED
{
write = rtems_rfs_rtems_error ("file-write: write close", rc);
3e748: eb001228 bl 42ff0 <__errno> <== NOT EXECUTED
3e74c: e580b000 str fp, [r0] <== NOT EXECUTED
3e750: e3e08000 mvn r8, #0 <== NOT EXECUTED
break;
}
}
iop->size = rtems_rfs_file_size (file);
3e754: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e758: e2831084 add r1, r3, #132 ; 0x84 <== NOT EXECUTED
3e75c: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
3e760: ebffe855 bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e764: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e768: e5933098 ldr r3, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e76c: e593407c ldr r4, [r3, #124] ; 0x7c <== NOT EXECUTED
write = rtems_rfs_rtems_error ("file-write: write close", rc);
break;
}
}
iop->size = rtems_rfs_file_size (file);
3e770: e9890003 stmib r9, {r0, r1} <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e774: e1a00003 mov r0, r3 <== NOT EXECUTED
3e778: ebffec15 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
3e77c: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e780: ebff3797 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return write;
}
3e784: e1a00008 mov r0, r8 <== NOT EXECUTED
3e788: e28dd004 add sp, sp, #4 <== NOT EXECUTED
3e78c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
* size of file we are still past the end of the file as positions number
* from 0. For a specific position we need a file that has a length of one
* more.
*/
if (pos >= rtems_rfs_file_size (file))
3e790: e150000a cmp r0, sl <== NOT EXECUTED
3e794: 8affffc3 bhi 3e6a8 <rtems_rfs_rtems_file_write+0x78> <== NOT EXECUTED
{
rc = rtems_rfs_file_set_size (file, pos + 1);
3e798: e3a01001 mov r1, #1 <== NOT EXECUTED
3e79c: e091100a adds r1, r1, sl <== NOT EXECUTED
3e7a0: e3a02000 mov r2, #0 <== NOT EXECUTED
3e7a4: e0a2200b adc r2, r2, fp <== NOT EXECUTED
3e7a8: e1a00005 mov r0, r5 <== NOT EXECUTED
3e7ac: ebfff10c bl 3abe4 <rtems_rfs_file_set_size> <== NOT EXECUTED
if (rc)
3e7b0: e2506000 subs r6, r0, #0 <== NOT EXECUTED
3e7b4: 0affffbb beq 3e6a8 <rtems_rfs_rtems_file_write+0x78> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
3e7b8: e595301c ldr r3, [r5, #28] <== NOT EXECUTED
3e7bc: e5930098 ldr r0, [r3, #152] ; 0x98 <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
3e7c0: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
3e7c4: ebffec02 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
3e7c8: e5940000 ldr r0, [r4] <== NOT EXECUTED
3e7cc: ebff3784 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rtems_rfs_rtems_error ("file-write: write extend", rc);
3e7d0: eb001206 bl 42ff0 <__errno> <== NOT EXECUTED
3e7d4: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e7d8: e5806000 str r6, [r0] <== NOT EXECUTED
3e7dc: eaffffe8 b 3e784 <rtems_rfs_rtems_file_write+0x154> <== NOT EXECUTED
size_t size = count;
rc = rtems_rfs_file_io_start (file, &size, false);
if (rc)
{
write = rtems_rfs_rtems_error ("file-write: write open", rc);
3e7e0: eb001202 bl 42ff0 <__errno> <== NOT EXECUTED
3e7e4: e3e08000 mvn r8, #0 <== NOT EXECUTED
3e7e8: e5806000 str r6, [r0] <== NOT EXECUTED
3e7ec: eaffffd8 b 3e754 <rtems_rfs_rtems_file_write+0x124> <== NOT EXECUTED
00021108 <rtems_rfs_rtems_freenodinfo>:
int
rtems_rfs_rtems_freenodinfo (rtems_filesystem_location_info_t* pathloc)
{
return 0;
}
21108: e3a00000 mov r0, #0 <== NOT EXECUTED
2110c: e12fff1e bx lr <== NOT EXECUTED
00022914 <rtems_rfs_rtems_imode>:
return true;
}
uint16_t
rtems_rfs_rtems_imode (mode_t mode)
{
22914: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
/*
* Mapping matches RTEMS so no need to change.
*/
return mode;
}
22918: e1a00820 lsr r0, r0, #16 <== NOT EXECUTED
2291c: e12fff1e bx lr <== NOT EXECUTED
00021170 <rtems_rfs_rtems_initialise>:
*/
int
rtems_rfs_rtems_initialise (rtems_filesystem_mount_table_entry_t* mt_entry,
const void* data)
{
21170: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
int rc;
/*
* Parse the options the user specifiies.
*/
while (options)
21174: e2514000 subs r4, r1, #0 <== NOT EXECUTED
*/
int
rtems_rfs_rtems_initialise (rtems_filesystem_mount_table_entry_t* mt_entry,
const void* data)
{
21178: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
2117c: e1a05000 mov r5, r0 <== NOT EXECUTED
int rc;
/*
* Parse the options the user specifiies.
*/
while (options)
21180: 01a06004 moveq r6, r4 <== NOT EXECUTED
21184: 03a07005 moveq r7, #5 <== NOT EXECUTED
21188: 0a000025 beq 21224 <rtems_rfs_rtems_initialise+0xb4> <== NOT EXECUTED
2118c: e3a07005 mov r7, #5 <== NOT EXECUTED
21190: e3a06000 mov r6, #0 <== NOT EXECUTED
{
printf ("options=%s\n", options);
21194: e1a01004 mov r1, r4 <== NOT EXECUTED
21198: e59f0190 ldr r0, [pc, #400] ; 21330 <rtems_rfs_rtems_initialise+0x1c0><== NOT EXECUTED
2119c: eb0098f1 bl 47568 <printf> <== NOT EXECUTED
if (strncmp (options, "hold-bitmaps",
211a0: e59f118c ldr r1, [pc, #396] ; 21334 <rtems_rfs_rtems_initialise+0x1c4><== NOT EXECUTED
211a4: e3a0200c mov r2, #12 <== NOT EXECUTED
211a8: e1a00004 mov r0, r4 <== NOT EXECUTED
211ac: eb00a2d6 bl 49d0c <strncmp> <== NOT EXECUTED
211b0: e3500000 cmp r0, #0 <== NOT EXECUTED
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
else if (strncmp (options, "no-local-cache",
211b4: e59f117c ldr r1, [pc, #380] ; 21338 <rtems_rfs_rtems_initialise+0x1c8><== NOT EXECUTED
211b8: e3a0200e mov r2, #14 <== NOT EXECUTED
211bc: e1a00004 mov r0, r4 <== NOT EXECUTED
while (options)
{
printf ("options=%s\n", options);
if (strncmp (options, "hold-bitmaps",
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
211c0: 03866001 orreq r6, r6, #1 <== NOT EXECUTED
* Parse the options the user specifiies.
*/
while (options)
{
printf ("options=%s\n", options);
if (strncmp (options, "hold-bitmaps",
211c4: 0a00000d beq 21200 <rtems_rfs_rtems_initialise+0x90> <== NOT EXECUTED
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
else if (strncmp (options, "no-local-cache",
211c8: eb00a2cf bl 49d0c <strncmp> <== NOT EXECUTED
211cc: e3500000 cmp r0, #0 <== NOT EXECUTED
sizeof ("no-local-cache") - 1) == 0)
flags |= RTEMS_RFS_FS_NO_LOCAL_CACHE;
else if (strncmp (options, "max-held-bufs",
211d0: e59f1164 ldr r1, [pc, #356] ; 2133c <rtems_rfs_rtems_initialise+0x1cc><== NOT EXECUTED
211d4: e3a0200d mov r2, #13 <== NOT EXECUTED
211d8: e1a00004 mov r0, r4 <== NOT EXECUTED
if (strncmp (options, "hold-bitmaps",
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
else if (strncmp (options, "no-local-cache",
sizeof ("no-local-cache") - 1) == 0)
flags |= RTEMS_RFS_FS_NO_LOCAL_CACHE;
211dc: 03866002 orreq r6, r6, #2 <== NOT EXECUTED
{
printf ("options=%s\n", options);
if (strncmp (options, "hold-bitmaps",
sizeof ("hold-bitmaps") - 1) == 0)
flags |= RTEMS_RFS_FS_BITMAPS_HOLD;
else if (strncmp (options, "no-local-cache",
211e0: 0a000006 beq 21200 <rtems_rfs_rtems_initialise+0x90> <== NOT EXECUTED
sizeof ("no-local-cache") - 1) == 0)
flags |= RTEMS_RFS_FS_NO_LOCAL_CACHE;
else if (strncmp (options, "max-held-bufs",
211e4: eb00a2c8 bl 49d0c <strncmp> <== NOT EXECUTED
211e8: e2501000 subs r1, r0, #0 <== NOT EXECUTED
211ec: 1a00003a bne 212dc <rtems_rfs_rtems_initialise+0x16c> <== NOT EXECUTED
sizeof ("max-held-bufs") - 1) == 0)
{
max_held_buffers = strtoul (options + sizeof ("max-held-bufs"), 0, 0);
211f0: e284000e add r0, r4, #14 <== NOT EXECUTED
211f4: e1a02001 mov r2, r1 <== NOT EXECUTED
211f8: eb00a795 bl 4b054 <strtoul> <== NOT EXECUTED
211fc: e1a07000 mov r7, r0 <== NOT EXECUTED
}
else
return rtems_rfs_rtems_error ("initialise: invalid option", EINVAL);
options = strchr (options, ',');
21200: e1a00004 mov r0, r4 <== NOT EXECUTED
21204: e3a0102c mov r1, #44 ; 0x2c <== NOT EXECUTED
21208: eb009fa6 bl 490a8 <strchr> <== NOT EXECUTED
if (options)
2120c: e3500000 cmp r0, #0 <== NOT EXECUTED
21210: 0a000003 beq 21224 <rtems_rfs_rtems_initialise+0xb4> <== NOT EXECUTED
{
++options;
if (*options == '\0')
21214: e5d03001 ldrb r3, [r0, #1] <== NOT EXECUTED
21218: e3530000 cmp r3, #0 <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: invalid option", EINVAL);
options = strchr (options, ',');
if (options)
{
++options;
2121c: e2804001 add r4, r0, #1 <== NOT EXECUTED
if (*options == '\0')
21220: 1affffdb bne 21194 <rtems_rfs_rtems_initialise+0x24> <== NOT EXECUTED
options = NULL;
}
}
rtems = malloc (sizeof (rtems_rfs_rtems_private));
21224: e3a00004 mov r0, #4 <== NOT EXECUTED
21228: ebff9c94 bl 8480 <malloc> <== NOT EXECUTED
if (!rtems)
2122c: e2504000 subs r4, r0, #0 <== NOT EXECUTED
21230: 0a000039 beq 2131c <rtems_rfs_rtems_initialise+0x1ac> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: local data", ENOMEM);
memset (rtems, 0, sizeof (rtems_rfs_rtems_private));
21234: e3a08000 mov r8, #0 <== NOT EXECUTED
21238: e5848000 str r8, [r4] <== NOT EXECUTED
rc = rtems_rfs_mutex_create (&rtems->access);
2123c: eb0072ea bl 3ddec <rtems_rfs_mutex_create> <== NOT EXECUTED
if (rc > 0)
21240: e250a000 subs sl, r0, #0 <== NOT EXECUTED
21244: da000006 ble 21264 <rtems_rfs_rtems_initialise+0xf4> <== NOT EXECUTED
{
free (rtems);
21248: e1a00004 mov r0, r4 <== NOT EXECUTED
2124c: ebff9ac7 bl 7d70 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: cannot create mutex", rc);
21250: eb008766 bl 42ff0 <__errno> <== NOT EXECUTED
21254: e580a000 str sl, [r0] <== NOT EXECUTED
21258: e3e00000 mvn r0, #0 <== NOT EXECUTED
mt_entry->mt_fs_root.ops = &rtems_rfs_ops;
rtems_rfs_rtems_unlock (fs);
return 0;
}
2125c: e28dd008 add sp, sp, #8 <== NOT EXECUTED
21260: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21264: e1a01008 mov r1, r8 <== NOT EXECUTED
21268: e5940000 ldr r0, [r4] <== NOT EXECUTED
2126c: e1a02008 mov r2, r8 <== NOT EXECUTED
21270: ebffac93 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
21274: e3500000 cmp r0, #0 <== NOT EXECUTED
21278: 1a00000e bne 212b8 <rtems_rfs_rtems_initialise+0x148> <== NOT EXECUTED
rtems_rfs_mutex_destroy (&rtems->access);
free (rtems);
return rtems_rfs_rtems_error ("initialise: cannot lock access mutex", rc);
}
rc = rtems_rfs_fs_open (mt_entry->dev, rtems, flags, max_held_buffers, &fs);
2127c: e5950070 ldr r0, [r5, #112] ; 0x70 <== NOT EXECUTED
21280: e1a02006 mov r2, r6 <== NOT EXECUTED
21284: e28dc004 add ip, sp, #4 <== NOT EXECUTED
21288: e1a03007 mov r3, r7 <== NOT EXECUTED
2128c: e1a01004 mov r1, r4 <== NOT EXECUTED
21290: e58dc000 str ip, [sp] <== NOT EXECUTED
21294: eb0068ea bl 3b644 <rtems_rfs_fs_open> <== NOT EXECUTED
if (rc)
21298: e2506000 subs r6, r0, #0 <== NOT EXECUTED
2129c: 0a000013 beq 212f0 <rtems_rfs_rtems_initialise+0x180> <== NOT EXECUTED
{
free (rtems);
212a0: e1a00004 mov r0, r4 <== NOT EXECUTED
212a4: ebff9ab1 bl 7d70 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: open", rc);
212a8: eb008750 bl 42ff0 <__errno> <== NOT EXECUTED
212ac: e5806000 str r6, [r0] <== NOT EXECUTED
212b0: e3e00000 mvn r0, #0 <== NOT EXECUTED
212b4: eaffffe8 b 2125c <rtems_rfs_rtems_initialise+0xec> <== NOT EXECUTED
}
rc = rtems_rfs_mutex_lock (&rtems->access);
if (rc > 0)
{
rtems_rfs_mutex_destroy (&rtems->access);
212b8: e1a00004 mov r0, r4 <== NOT EXECUTED
212bc: eb0072c3 bl 3ddd0 <rtems_rfs_mutex_destroy> <== NOT EXECUTED
free (rtems);
212c0: e1a00004 mov r0, r4 <== NOT EXECUTED
212c4: ebff9aa9 bl 7d70 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: cannot lock access mutex", rc);
212c8: eb008748 bl 42ff0 <__errno> <== NOT EXECUTED
212cc: e3a03005 mov r3, #5 <== NOT EXECUTED
212d0: e5803000 str r3, [r0] <== NOT EXECUTED
212d4: e3e00000 mvn r0, #0 <== NOT EXECUTED
212d8: eaffffdf b 2125c <rtems_rfs_rtems_initialise+0xec> <== NOT EXECUTED
sizeof ("max-held-bufs") - 1) == 0)
{
max_held_buffers = strtoul (options + sizeof ("max-held-bufs"), 0, 0);
}
else
return rtems_rfs_rtems_error ("initialise: invalid option", EINVAL);
212dc: eb008743 bl 42ff0 <__errno> <== NOT EXECUTED
212e0: e3a03016 mov r3, #22 <== NOT EXECUTED
212e4: e5803000 str r3, [r0] <== NOT EXECUTED
212e8: e3e00000 mvn r0, #0 <== NOT EXECUTED
212ec: eaffffda b 2125c <rtems_rfs_rtems_initialise+0xec> <== NOT EXECUTED
mt_entry->fs_info = fs;
mt_entry->mt_fs_root.node_access = (void*) RTEMS_RFS_ROOT_INO;
mt_entry->mt_fs_root.handlers = &rtems_rfs_rtems_dir_handlers;
mt_entry->mt_fs_root.ops = &rtems_rfs_ops;
212f0: e59f3048 ldr r3, [pc, #72] ; 21340 <rtems_rfs_rtems_initialise+0x1d0><== NOT EXECUTED
212f4: e5853028 str r3, [r5, #40] ; 0x28 <== NOT EXECUTED
return rtems_rfs_rtems_error ("initialise: open", rc);
}
mt_entry->fs_info = fs;
mt_entry->mt_fs_root.node_access = (void*) RTEMS_RFS_ROOT_INO;
212f8: e3a03001 mov r3, #1 <== NOT EXECUTED
{
free (rtems);
return rtems_rfs_rtems_error ("initialise: open", rc);
}
mt_entry->fs_info = fs;
212fc: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
mt_entry->mt_fs_root.node_access = (void*) RTEMS_RFS_ROOT_INO;
21300: e585301c str r3, [r5, #28] <== NOT EXECUTED
mt_entry->mt_fs_root.handlers = &rtems_rfs_rtems_dir_handlers;
21304: e59f3038 ldr r3, [pc, #56] ; 21344 <rtems_rfs_rtems_initialise+0x1d4><== NOT EXECUTED
{
free (rtems);
return rtems_rfs_rtems_error ("initialise: open", rc);
}
mt_entry->fs_info = fs;
21308: e5850034 str r0, [r5, #52] ; 0x34 <== NOT EXECUTED
mt_entry->mt_fs_root.node_access = (void*) RTEMS_RFS_ROOT_INO;
mt_entry->mt_fs_root.handlers = &rtems_rfs_rtems_dir_handlers;
2130c: e5853024 str r3, [r5, #36] ; 0x24 <== NOT EXECUTED
mt_entry->mt_fs_root.ops = &rtems_rfs_ops;
rtems_rfs_rtems_unlock (fs);
21310: ebffff80 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
21314: e1a00006 mov r0, r6 <== NOT EXECUTED
return 0;
21318: eaffffcf b 2125c <rtems_rfs_rtems_initialise+0xec> <== NOT EXECUTED
}
}
rtems = malloc (sizeof (rtems_rfs_rtems_private));
if (!rtems)
return rtems_rfs_rtems_error ("initialise: local data", ENOMEM);
2131c: eb008733 bl 42ff0 <__errno> <== NOT EXECUTED
21320: e3a0300c mov r3, #12 <== NOT EXECUTED
21324: e5803000 str r3, [r0] <== NOT EXECUTED
21328: e3e00000 mvn r0, #0 <== NOT EXECUTED
2132c: eaffffca b 2125c <rtems_rfs_rtems_initialise+0xec> <== NOT EXECUTED
000219e4 <rtems_rfs_rtems_link>:
*/
int
rtems_rfs_rtems_link (rtems_filesystem_location_info_t* to_loc,
rtems_filesystem_location_info_t* parent_loc,
const char* name)
{
219e4: e1a03000 mov r3, r0 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (to_loc);
219e8: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_link (rtems_filesystem_location_info_t* to_loc,
rtems_filesystem_location_info_t* parent_loc,
const char* name)
{
219ec: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (to_loc);
219f0: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
219f4: e594007c ldr r0, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino target = rtems_rfs_rtems_get_pathloc_ino (to_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
219f8: e5917000 ldr r7, [r1] <== NOT EXECUTED
219fc: e3a01000 mov r1, #0 <== NOT EXECUTED
*/
int
rtems_rfs_rtems_link (rtems_filesystem_location_info_t* to_loc,
rtems_filesystem_location_info_t* parent_loc,
const char* name)
{
21a00: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
21a04: e1a06002 mov r6, r2 <== NOT EXECUTED
21a08: e5900000 ldr r0, [r0] <== NOT EXECUTED
21a0c: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (to_loc);
rtems_rfs_ino target = rtems_rfs_rtems_get_pathloc_ino (to_loc);
21a10: e5935000 ldr r5, [r3] <== NOT EXECUTED
21a14: ebffaaaa bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
printf ("rtems-rfs-rtems: link: in: parent:%" PRId32 " target:%" PRId32 "\n",
parent, target);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_link (fs, name, strlen (name), parent, target, false);
21a18: e1a00006 mov r0, r6 <== NOT EXECUTED
21a1c: eb00a070 bl 49be4 <strlen> <== NOT EXECUTED
21a20: e3a0c000 mov ip, #0 <== NOT EXECUTED
21a24: e1a02000 mov r2, r0 <== NOT EXECUTED
21a28: e1a01006 mov r1, r6 <== NOT EXECUTED
21a2c: e1a03007 mov r3, r7 <== NOT EXECUTED
21a30: e1a00004 mov r0, r4 <== NOT EXECUTED
21a34: e88d1020 stm sp, {r5, ip} <== NOT EXECUTED
21a38: eb007085 bl 3dc54 <rtems_rfs_link> <== NOT EXECUTED
if (rc)
21a3c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
21a40: 0a000009 beq 21a6c <rtems_rfs_rtems_link+0x88> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21a44: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21a48: e1a00004 mov r0, r4 <== NOT EXECUTED
21a4c: eb005f60 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21a50: e5960000 ldr r0, [r6] <== NOT EXECUTED
21a54: ebffaae2 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("link: linking", rc);
21a58: eb008564 bl 42ff0 <__errno> <== NOT EXECUTED
21a5c: e5805000 str r5, [r0] <== NOT EXECUTED
21a60: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21a64: e28dd008 add sp, sp, #8 <== NOT EXECUTED
21a68: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21a6c: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21a70: e1a00004 mov r0, r4 <== NOT EXECUTED
21a74: eb005f56 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21a78: e5960000 ldr r0, [r6] <== NOT EXECUTED
21a7c: ebffaad8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
21a80: e1a00005 mov r0, r5 <== NOT EXECUTED
return rtems_rfs_rtems_error ("link: linking", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
21a84: eafffff6 b 21a64 <rtems_rfs_rtems_link+0x80> <== NOT EXECUTED
00022414 <rtems_rfs_rtems_mknod>:
int
rtems_rfs_rtems_mknod (const char *name,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc)
{
22414: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
22418: e24dd040 sub sp, sp, #64 ; 0x40 <== NOT EXECUTED
2241c: e59dc060 ldr ip, [sp, #96] ; 0x60 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
22420: e59ce010 ldr lr, [ip, #16] <== NOT EXECUTED
22424: e59e4034 ldr r4, [lr, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
22428: e594e07c ldr lr, [r4, #124] ; 0x7c <== NOT EXECUTED
int
rtems_rfs_rtems_mknod (const char *name,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc)
{
2242c: e1a06001 mov r6, r1 <== NOT EXECUTED
22430: e3a01000 mov r1, #0 <== NOT EXECUTED
22434: e1a05000 mov r5, r0 <== NOT EXECUTED
22438: e1a07002 mov r7, r2 <== NOT EXECUTED
2243c: e59e0000 ldr r0, [lr] <== NOT EXECUTED
22440: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (pathloc);
22444: e59ca000 ldr sl, [ip] <== NOT EXECUTED
int
rtems_rfs_rtems_mknod (const char *name,
mode_t mode,
dev_t dev,
rtems_filesystem_location_info_t *pathloc)
{
22448: e1a09003 mov r9, r3 <== NOT EXECUTED
2244c: ebffa81c bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
gid = 0;
#endif
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_create (fs, parent, name, strlen (name),
22450: e1a00005 mov r0, r5 <== NOT EXECUTED
22454: eb009de2 bl 49be4 <strlen> <== NOT EXECUTED
22458: e1a08000 mov r8, r0 <== NOT EXECUTED
rtems_rfs_rtems_imode (mode),
2245c: e1a00006 mov r0, r6 <== NOT EXECUTED
22460: eb00012b bl 22914 <rtems_rfs_rtems_imode> <== NOT EXECUTED
gid = 0;
#endif
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_create (fs, parent, name, strlen (name),
22464: e3a0c000 mov ip, #0 <== NOT EXECUTED
22468: e58d0000 str r0, [sp] <== NOT EXECUTED
2246c: e1a02005 mov r2, r5 <== NOT EXECUTED
22470: e1a03008 mov r3, r8 <== NOT EXECUTED
22474: e28de03c add lr, sp, #60 ; 0x3c <== NOT EXECUTED
22478: e1a0100a mov r1, sl <== NOT EXECUTED
2247c: e3a05001 mov r5, #1 <== NOT EXECUTED
22480: e1a00004 mov r0, r4 <== NOT EXECUTED
22484: e58dc00c str ip, [sp, #12] <== NOT EXECUTED
22488: e58de010 str lr, [sp, #16] <== NOT EXECUTED
2248c: e98d1020 stmib sp, {r5, ip} <== NOT EXECUTED
22490: eb006bd7 bl 3d3f4 <rtems_rfs_inode_create> <== NOT EXECUTED
rtems_rfs_rtems_imode (mode),
1, uid, gid, &ino);
if (rc > 0)
22494: e2508000 subs r8, r0, #0 <== NOT EXECUTED
22498: da000009 ble 224c4 <rtems_rfs_rtems_mknod+0xb0> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
2249c: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
224a0: e1a00004 mov r0, r4 <== NOT EXECUTED
224a4: eb005cca bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
224a8: e5950000 ldr r0, [r5] <== NOT EXECUTED
224ac: ebffa84c bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("mknod: inode create", rc);
224b0: eb0082ce bl 42ff0 <__errno> <== NOT EXECUTED
224b4: e5808000 str r8, [r0] <== NOT EXECUTED
224b8: e3e00000 mvn r0, #0 <== NOT EXECUTED
return rtems_rfs_rtems_error ("mknod: closing inode", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
224bc: e28dd040 add sp, sp, #64 ; 0x40 <== NOT EXECUTED
224c0: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("mknod: inode create", rc);
}
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
224c4: e28d8014 add r8, sp, #20 <== NOT EXECUTED
224c8: e1a00004 mov r0, r4 <== NOT EXECUTED
224cc: e59d103c ldr r1, [sp, #60] ; 0x3c <== NOT EXECUTED
224d0: e1a02008 mov r2, r8 <== NOT EXECUTED
224d4: e1a03005 mov r3, r5 <== NOT EXECUTED
224d8: eb006b61 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
224dc: e250a000 subs sl, r0, #0 <== NOT EXECUTED
224e0: da000008 ble 22508 <rtems_rfs_rtems_mknod+0xf4> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
224e4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
224e8: e1a00004 mov r0, r4 <== NOT EXECUTED
224ec: eb005cb8 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
224f0: e5950000 ldr r0, [r5] <== NOT EXECUTED
224f4: ebffa83a bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("mknod: inode open", rc);
224f8: eb0082bc bl 42ff0 <__errno> <== NOT EXECUTED
224fc: e580a000 str sl, [r0] <== NOT EXECUTED
22500: e3e00000 mvn r0, #0 <== NOT EXECUTED
22504: eaffffec b 224bc <rtems_rfs_rtems_mknod+0xa8> <== NOT EXECUTED
}
if (S_ISDIR(mode) || S_ISREG(mode))
22508: e2066a0f and r6, r6, #61440 ; 0xf000 <== NOT EXECUTED
2250c: e3560901 cmp r6, #16384 ; 0x4000 <== NOT EXECUTED
22510: 13560902 cmpne r6, #32768 ; 0x8000 <== NOT EXECUTED
22514: 0a000019 beq 22580 <rtems_rfs_rtems_mknod+0x16c> <== NOT EXECUTED
{
}
else if (S_ISCHR (mode) || S_ISBLK (mode))
22518: e3560a02 cmp r6, #8192 ; 0x2000 <== NOT EXECUTED
2251c: 13560a06 cmpne r6, #24576 ; 0x6000 <== NOT EXECUTED
22520: 1a000025 bne 225bc <rtems_rfs_rtems_mknod+0x1a8> <== NOT EXECUTED
* @param bno The block number.
*/
static inline void
rtems_rfs_inode_set_block (rtems_rfs_inode_handle* handle, int block, uint32_t bno)
{
rtems_rfs_write_u32 (&handle->node->data.blocks[block], bno);
22524: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22528: e1a02c27 lsr r2, r7, #24 <== NOT EXECUTED
2252c: e5c3201c strb r2, [r3, #28] <== NOT EXECUTED
22530: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22534: e1a02827 lsr r2, r7, #16 <== NOT EXECUTED
22538: e5c3201d strb r2, [r3, #29] <== NOT EXECUTED
2253c: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22540: e1a02427 lsr r2, r7, #8 <== NOT EXECUTED
22544: e5c3201e strb r2, [r3, #30] <== NOT EXECUTED
22548: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
2254c: e5c3701f strb r7, [r3, #31] <== NOT EXECUTED
22550: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22554: e1a02c29 lsr r2, r9, #24 <== NOT EXECUTED
22558: e5c32020 strb r2, [r3, #32] <== NOT EXECUTED
2255c: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22560: e1a02829 lsr r2, r9, #16 <== NOT EXECUTED
22564: e5c32021 strb r2, [r3, #33] ; 0x21 <== NOT EXECUTED
22568: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
2256c: e1a02429 lsr r2, r9, #8 <== NOT EXECUTED
22570: e5c32022 strb r2, [r3, #34] ; 0x22 <== NOT EXECUTED
22574: e59d3020 ldr r3, [sp, #32] <== NOT EXECUTED
22578: e5c39023 strb r9, [r3, #35] ; 0x23 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
2257c: e5cd5024 strb r5, [sp, #36] ; 0x24 <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("mknod: bad mode", EINVAL);
}
rc = rtems_rfs_inode_close (fs, &inode);
22580: e1a01008 mov r1, r8 <== NOT EXECUTED
22584: e1a00004 mov r0, r4 <== NOT EXECUTED
22588: eb006b11 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
2258c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
22590: da000005 ble 225ac <rtems_rfs_rtems_mknod+0x198> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
22594: e1a00004 mov r0, r4 <== NOT EXECUTED
22598: ebfffade bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("mknod: closing inode", rc);
2259c: eb008293 bl 42ff0 <__errno> <== NOT EXECUTED
225a0: e5805000 str r5, [r0] <== NOT EXECUTED
225a4: e3e00000 mvn r0, #0 <== NOT EXECUTED
225a8: eaffffc3 b 224bc <rtems_rfs_rtems_mknod+0xa8> <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
225ac: e1a00004 mov r0, r4 <== NOT EXECUTED
225b0: ebfffad8 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
225b4: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
225b8: eaffffbf b 224bc <rtems_rfs_rtems_mknod+0xa8> <== NOT EXECUTED
rtems_rfs_inode_set_block (&inode, 0, major);
rtems_rfs_inode_set_block (&inode, 1, minor);
}
else
{
rtems_rfs_inode_close (fs, &inode);
225bc: e1a01008 mov r1, r8 <== NOT EXECUTED
225c0: e1a00004 mov r0, r4 <== NOT EXECUTED
225c4: eb006b02 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
225c8: e1a00004 mov r0, r4 <== NOT EXECUTED
225cc: ebfffad1 bl 21118 <rtems_rfs_rtems_unlock> <== NOT EXECUTED
return rtems_rfs_rtems_error ("mknod: bad mode", EINVAL);
225d0: eb008286 bl 42ff0 <__errno> <== NOT EXECUTED
225d4: e3a03016 mov r3, #22 <== NOT EXECUTED
225d8: e5803000 str r3, [r0] <== NOT EXECUTED
225dc: e3e00000 mvn r0, #0 <== NOT EXECUTED
225e0: eaffffb5 b 224bc <rtems_rfs_rtems_mknod+0xa8> <== NOT EXECUTED
00022920 <rtems_rfs_rtems_mode>:
{
/*
* Mapping matches RTEMS so no need to change.
*/
return imode;
}
22920: e12fff1e bx lr <== NOT EXECUTED
000227e8 <rtems_rfs_rtems_node_type>:
*/
rtems_filesystem_node_types_t
rtems_rfs_rtems_node_type (rtems_filesystem_location_info_t* pathloc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
227e8: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
* @return rtems_filesystem_node_types_t
*/
rtems_filesystem_node_types_t
rtems_rfs_rtems_node_type (rtems_filesystem_location_info_t* pathloc)
{
227ec: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
227f0: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
227f4: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
227f8: e5906000 ldr r6, [r0] <== NOT EXECUTED
227fc: e3a01000 mov r1, #0 <== NOT EXECUTED
* @return rtems_filesystem_node_types_t
*/
rtems_filesystem_node_types_t
rtems_rfs_rtems_node_type (rtems_filesystem_location_info_t* pathloc)
{
22800: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
22804: e1a02001 mov r2, r1 <== NOT EXECUTED
22808: e5930000 ldr r0, [r3] <== NOT EXECUTED
2280c: ebffa72c bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
uint16_t mode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
22810: e1a01006 mov r1, r6 <== NOT EXECUTED
22814: e1a00004 mov r0, r4 <== NOT EXECUTED
22818: e1a0200d mov r2, sp <== NOT EXECUTED
2281c: e3a03001 mov r3, #1 <== NOT EXECUTED
22820: eb006a8f bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
22824: e2506000 subs r6, r0, #0 <== NOT EXECUTED
22828: da00000a ble 22858 <rtems_rfs_rtems_node_type+0x70> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
2282c: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
22830: e1a00004 mov r0, r4 <== NOT EXECUTED
22834: eb005be6 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
22838: e5950000 ldr r0, [r5] <== NOT EXECUTED
2283c: ebffa768 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("node_type: opening inode", rc);
22840: eb0081ea bl 42ff0 <__errno> <== NOT EXECUTED
22844: e5806000 str r6, [r0] <== NOT EXECUTED
22848: e3e06000 mvn r6, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return type;
}
2284c: e1a00006 mov r0, r6 <== NOT EXECUTED
22850: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
22854: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
22858: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
* link is actually the normal path to a regular file, directory, device
* etc's inode. Links to inodes can be considered "the real" one, yet they
* are all links.
*/
mode = rtems_rfs_inode_get_mode (&inode);
if (RTEMS_RFS_S_ISDIR (mode))
2285c: e5d33002 ldrb r3, [r3, #2] <== NOT EXECUTED
22860: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
22864: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
22868: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
2286c: 03a06001 moveq r6, #1 <== NOT EXECUTED
22870: 0a000006 beq 22890 <rtems_rfs_rtems_node_type+0xa8> <== NOT EXECUTED
type = RTEMS_FILESYSTEM_DIRECTORY;
else if (RTEMS_RFS_S_ISLNK (mode))
22874: e3530a0a cmp r3, #40960 ; 0xa000 <== NOT EXECUTED
22878: 03a06004 moveq r6, #4 <== NOT EXECUTED
2287c: 0a000003 beq 22890 <rtems_rfs_rtems_node_type+0xa8> <== NOT EXECUTED
type = RTEMS_FILESYSTEM_SYM_LINK;
else if (RTEMS_RFS_S_ISBLK (mode) || RTEMS_RFS_S_ISCHR (mode))
22880: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
22884: 13530a02 cmpne r3, #8192 ; 0x2000 <== NOT EXECUTED
22888: 03a06002 moveq r6, #2 <== NOT EXECUTED
2288c: 13a06005 movne r6, #5 <== NOT EXECUTED
type = RTEMS_FILESYSTEM_DEVICE;
else
type = RTEMS_FILESYSTEM_MEMORY_FILE;
rc = rtems_rfs_inode_close (fs, &inode);
22890: e1a0100d mov r1, sp <== NOT EXECUTED
22894: e1a00004 mov r0, r4 <== NOT EXECUTED
22898: eb006a4d bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
2289c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
228a0: da000008 ble 228c8 <rtems_rfs_rtems_node_type+0xe0> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
228a4: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
228a8: e1a00004 mov r0, r4 <== NOT EXECUTED
228ac: eb005bc8 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
228b0: e5960000 ldr r0, [r6] <== NOT EXECUTED
228b4: ebffa74a bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("node_type: closing inode", rc);
228b8: eb0081cc bl 42ff0 <__errno> <== NOT EXECUTED
228bc: e3e06000 mvn r6, #0 <== NOT EXECUTED
228c0: e5805000 str r5, [r0] <== NOT EXECUTED
228c4: eaffffe0 b 2284c <rtems_rfs_rtems_node_type+0x64> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
228c8: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
228cc: e1a00004 mov r0, r4 <== NOT EXECUTED
228d0: eb005bbf bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
228d4: e5950000 ldr r0, [r5] <== NOT EXECUTED
228d8: ebffa741 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return type;
228dc: eaffffda b 2284c <rtems_rfs_rtems_node_type+0x64> <== NOT EXECUTED
00021758 <rtems_rfs_rtems_readlink>:
int
rtems_rfs_rtems_readlink (rtems_filesystem_location_info_t* pathloc,
char* buf,
size_t bufsize)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21758: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
int
rtems_rfs_rtems_readlink (rtems_filesystem_location_info_t* pathloc,
char* buf,
size_t bufsize)
{
2175c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21760: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
21764: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21768: e5907000 ldr r7, [r0] <== NOT EXECUTED
int
rtems_rfs_rtems_readlink (rtems_filesystem_location_info_t* pathloc,
char* buf,
size_t bufsize)
{
2176c: e1a06001 mov r6, r1 <== NOT EXECUTED
21770: e3a01000 mov r1, #0 <== NOT EXECUTED
21774: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
21778: e1a05002 mov r5, r2 <== NOT EXECUTED
2177c: e5930000 ldr r0, [r3] <== NOT EXECUTED
21780: e1a02001 mov r2, r1 <== NOT EXECUTED
21784: ebffab4e bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_READLINK))
printf ("rtems-rfs-rtems: readlink: in: ino:%" PRId32 "\n", ino);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_symlink_read (fs, ino, buf, bufsize, &length);
21788: e1a03005 mov r3, r5 <== NOT EXECUTED
2178c: e28dc004 add ip, sp, #4 <== NOT EXECUTED
21790: e1a01007 mov r1, r7 <== NOT EXECUTED
21794: e1a02006 mov r2, r6 <== NOT EXECUTED
21798: e1a00004 mov r0, r4 <== NOT EXECUTED
2179c: e58dc000 str ip, [sp] <== NOT EXECUTED
217a0: eb006fac bl 3d658 <rtems_rfs_symlink_read> <== NOT EXECUTED
if (rc)
217a4: e2505000 subs r5, r0, #0 <== NOT EXECUTED
217a8: 0a000009 beq 217d4 <rtems_rfs_rtems_readlink+0x7c> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
217ac: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
217b0: e1a00004 mov r0, r4 <== NOT EXECUTED
217b4: eb006006 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
217b8: e5960000 ldr r0, [r6] <== NOT EXECUTED
217bc: ebffab88 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("readlink: reading link", rc);
217c0: eb00860a bl 42ff0 <__errno> <== NOT EXECUTED
217c4: e5805000 str r5, [r0] <== NOT EXECUTED
217c8: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return (int) length;
}
217cc: e28dd008 add sp, sp, #8 <== NOT EXECUTED
217d0: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
217d4: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
217d8: e1a00004 mov r0, r4 <== NOT EXECUTED
217dc: eb005ffc bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
217e0: e5950000 ldr r0, [r5] <== NOT EXECUTED
217e4: ebffab7e bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
return rtems_rfs_rtems_error ("readlink: reading link", rc);
}
rtems_rfs_rtems_unlock (fs);
return (int) length;
217e8: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
217ec: eafffff6 b 217cc <rtems_rfs_rtems_readlink+0x74> <== NOT EXECUTED
00021a88 <rtems_rfs_rtems_rename>:
int
rtems_rfs_rtems_rename(rtems_filesystem_location_info_t* old_parent_loc,
rtems_filesystem_location_info_t* old_loc,
rtems_filesystem_location_info_t* new_parent_loc,
const char* new_name)
{
21a88: e1a0c001 mov ip, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (old_loc);
21a8c: e5911010 ldr r1, [r1, #16] <== NOT EXECUTED
int
rtems_rfs_rtems_rename(rtems_filesystem_location_info_t* old_parent_loc,
rtems_filesystem_location_info_t* old_loc,
rtems_filesystem_location_info_t* new_parent_loc,
const char* new_name)
{
21a90: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (old_loc);
21a94: e5914034 ldr r4, [r1, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21a98: e594e07c ldr lr, [r4, #124] ; 0x7c <== NOT EXECUTED
21a9c: e3a01000 mov r1, #0 <== NOT EXECUTED
int
rtems_rfs_rtems_rename(rtems_filesystem_location_info_t* old_parent_loc,
rtems_filesystem_location_info_t* old_loc,
rtems_filesystem_location_info_t* new_parent_loc,
const char* new_name)
{
21aa0: e1a08003 mov r8, r3 <== NOT EXECUTED
21aa4: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
rtems_rfs_ino ino;
uint32_t doff;
int rc;
old_parent = rtems_rfs_rtems_get_pathloc_ino (old_parent_loc);
new_parent = rtems_rfs_rtems_get_pathloc_ino (new_parent_loc);
21aa8: e592a000 ldr sl, [r2] <== NOT EXECUTED
rtems_rfs_ino new_parent;
rtems_rfs_ino ino;
uint32_t doff;
int rc;
old_parent = rtems_rfs_rtems_get_pathloc_ino (old_parent_loc);
21aac: e5907000 ldr r7, [r0] <== NOT EXECUTED
21ab0: e1a02001 mov r2, r1 <== NOT EXECUTED
21ab4: e59e0000 ldr r0, [lr] <== NOT EXECUTED
new_parent = rtems_rfs_rtems_get_pathloc_ino (new_parent_loc);
ino = rtems_rfs_rtems_get_pathloc_ino (old_loc);
21ab8: e89c0060 ldm ip, {r5, r6} <== NOT EXECUTED
21abc: ebffaa80 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
/*
* Link to the inode before unlinking so the inode is not erased when
* unlinked.
*/
rc = rtems_rfs_link (fs, new_name, strlen (new_name), new_parent, ino, true);
21ac0: e1a00008 mov r0, r8 <== NOT EXECUTED
21ac4: eb00a046 bl 49be4 <strlen> <== NOT EXECUTED
21ac8: e1a01008 mov r1, r8 <== NOT EXECUTED
21acc: e1a02000 mov r2, r0 <== NOT EXECUTED
21ad0: e3a0c001 mov ip, #1 <== NOT EXECUTED
21ad4: e1a0300a mov r3, sl <== NOT EXECUTED
21ad8: e1a00004 mov r0, r4 <== NOT EXECUTED
21adc: e88d1020 stm sp, {r5, ip} <== NOT EXECUTED
21ae0: eb00705b bl 3dc54 <rtems_rfs_link> <== NOT EXECUTED
if (rc)
21ae4: e2508000 subs r8, r0, #0 <== NOT EXECUTED
21ae8: 0a000009 beq 21b14 <rtems_rfs_rtems_rename+0x8c> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21aec: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21af0: e1a00004 mov r0, r4 <== NOT EXECUTED
21af4: eb005f36 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21af8: e5950000 ldr r0, [r5] <== NOT EXECUTED
21afc: ebffaab8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("rename: linking", rc);
21b00: eb00853a bl 42ff0 <__errno> <== NOT EXECUTED
21b04: e5808000 str r8, [r0] <== NOT EXECUTED
21b08: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21b0c: e28dd008 add sp, sp, #8 <== NOT EXECUTED
21b10: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
/*
* Unlink all inodes even directories with the dir option as false because a
* directory may not be empty.
*/
rc = rtems_rfs_unlink (fs, old_parent, ino, doff,
21b14: e1a02005 mov r2, r5 <== NOT EXECUTED
21b18: e3a0c002 mov ip, #2 <== NOT EXECUTED
21b1c: e1a01007 mov r1, r7 <== NOT EXECUTED
21b20: e1a03006 mov r3, r6 <== NOT EXECUTED
21b24: e1a00004 mov r0, r4 <== NOT EXECUTED
21b28: e58dc000 str ip, [sp] <== NOT EXECUTED
21b2c: eb006fc4 bl 3da44 <rtems_rfs_unlink> <== NOT EXECUTED
rtems_rfs_unlink_dir_allowed);
if (rc)
21b30: e2505000 subs r5, r0, #0 <== NOT EXECUTED
21b34: 0a000008 beq 21b5c <rtems_rfs_rtems_rename+0xd4> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21b38: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21b3c: e1a00004 mov r0, r4 <== NOT EXECUTED
21b40: eb005f23 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21b44: e5960000 ldr r0, [r6] <== NOT EXECUTED
21b48: ebffaaa5 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("rename: unlinking", rc);
21b4c: eb008527 bl 42ff0 <__errno> <== NOT EXECUTED
21b50: e5805000 str r5, [r0] <== NOT EXECUTED
21b54: e3e00000 mvn r0, #0 <== NOT EXECUTED
21b58: eaffffeb b 21b0c <rtems_rfs_rtems_rename+0x84> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21b5c: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21b60: e1a00004 mov r0, r4 <== NOT EXECUTED
21b64: eb005f1a bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21b68: e5960000 ldr r0, [r6] <== NOT EXECUTED
21b6c: ebffaa9c bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
21b70: e1a00005 mov r0, r5 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
21b74: eaffffe4 b 21b0c <rtems_rfs_rtems_rename+0x84> <== NOT EXECUTED
000218ac <rtems_rfs_rtems_rmnod>:
*/
int
rtems_rfs_rtems_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
218ac: e5912010 ldr r2, [r1, #16] <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
218b0: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
218b4: e5924034 ldr r4, [r2, #52] ; 0x34 <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
218b8: e1a03001 mov r3, r1 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
218bc: e594207c ldr r2, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_pathloc);
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
uint32_t doff = rtems_rfs_rtems_get_pathloc_doff (pathloc);
218c0: e5915004 ldr r5, [r1, #4] <== NOT EXECUTED
int
rtems_rfs_rtems_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_pathloc);
218c4: e5907000 ldr r7, [r0] <== NOT EXECUTED
218c8: e3a01000 mov r1, #0 <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
218cc: e5936000 ldr r6, [r3] <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_rmnod (rtems_filesystem_location_info_t* parent_pathloc,
rtems_filesystem_location_info_t* pathloc)
{
218d0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
218d4: e5920000 ldr r0, [r2] <== NOT EXECUTED
218d8: e1a02001 mov r2, r1 <== NOT EXECUTED
218dc: ebffaaf8 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
printf ("rtems-rfs: rmnod: parent:%" PRId32 " doff:%" PRIu32 ", ino:%" PRId32 "\n",
parent, doff, ino);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_unlink (fs, parent, ino, doff, rtems_rfs_unlink_dir_denied);
218e0: e1a03005 mov r3, r5 <== NOT EXECUTED
218e4: e3a0c000 mov ip, #0 <== NOT EXECUTED
218e8: e1a01007 mov r1, r7 <== NOT EXECUTED
218ec: e1a02006 mov r2, r6 <== NOT EXECUTED
218f0: e1a00004 mov r0, r4 <== NOT EXECUTED
218f4: e58dc000 str ip, [sp] <== NOT EXECUTED
218f8: eb007051 bl 3da44 <rtems_rfs_unlink> <== NOT EXECUTED
if (rc)
218fc: e2505000 subs r5, r0, #0 <== NOT EXECUTED
21900: 0a000009 beq 2192c <rtems_rfs_rtems_rmnod+0x80> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21904: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21908: e1a00004 mov r0, r4 <== NOT EXECUTED
2190c: eb005fb0 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21910: e5960000 ldr r0, [r6] <== NOT EXECUTED
21914: ebffab32 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("rmnod: unlinking", rc);
21918: eb0085b4 bl 42ff0 <__errno> <== NOT EXECUTED
2191c: e5805000 str r5, [r0] <== NOT EXECUTED
21920: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21924: e28dd004 add sp, sp, #4 <== NOT EXECUTED
21928: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
2192c: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21930: e1a00004 mov r0, r4 <== NOT EXECUTED
21934: eb005fa6 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21938: e5960000 ldr r0, [r6] <== NOT EXECUTED
2193c: ebffab28 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
21940: e1a00005 mov r0, r5 <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("rmnod: unlinking", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
21944: eafffff6 b 21924 <rtems_rfs_rtems_rmnod+0x78> <== NOT EXECUTED
00022924 <rtems_rfs_rtems_set_handlers>:
*/
bool
rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
rtems_rfs_inode_handle* inode)
{
22924: e92d4010 push {r4, lr} <== NOT EXECUTED
22928: e591300c ldr r3, [r1, #12] <== NOT EXECUTED
2292c: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
22930: e5d31002 ldrb r1, [r3, #2] <== NOT EXECUTED
22934: e1821401 orr r1, r2, r1, lsl #8 <== NOT EXECUTED
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
if (RTEMS_RFS_S_ISDIR (mode))
22938: e2013a0f and r3, r1, #61440 ; 0xf000 <== NOT EXECUTED
bool
rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
rtems_rfs_inode_handle* inode)
{
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
2293c: e3a02000 mov r2, #0 <== NOT EXECUTED
if (RTEMS_RFS_S_ISDIR (mode))
22940: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
bool
rtems_rfs_rtems_set_handlers (rtems_filesystem_location_info_t* loc,
rtems_rfs_inode_handle* inode)
{
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
22944: e5802008 str r2, [r0, #8] <== NOT EXECUTED
if (RTEMS_RFS_S_ISDIR (mode))
22948: 0a000010 beq 22990 <rtems_rfs_rtems_set_handlers+0x6c> <== NOT EXECUTED
loc->handlers = rtems_rfs_rtems_handlers (dir);
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
2294c: e3530a02 cmp r3, #8192 ; 0x2000 <== NOT EXECUTED
22950: 13530a06 cmpne r3, #24576 ; 0x6000 <== NOT EXECUTED
22954: 13a04000 movne r4, #0 <== NOT EXECUTED
22958: 03a04001 moveq r4, #1 <== NOT EXECUTED
2295c: 0a000007 beq 22980 <rtems_rfs_rtems_set_handlers+0x5c> <== NOT EXECUTED
loc->handlers = rtems_rfs_rtems_handlers (device);
else if (RTEMS_RFS_S_ISLNK (mode))
22960: e3530a0a cmp r3, #40960 ; 0xa000 <== NOT EXECUTED
22964: 0a000011 beq 229b0 <rtems_rfs_rtems_set_handlers+0x8c> <== NOT EXECUTED
loc->handlers = rtems_rfs_rtems_handlers (link);
else if (RTEMS_RFS_S_ISREG (mode))
22968: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
2296c: 0a00000b beq 229a0 <rtems_rfs_rtems_set_handlers+0x7c> <== NOT EXECUTED
loc->handlers = rtems_rfs_rtems_handlers (file);
else
{
printf ("rtems-rfs: mode type unknown: %04x\n", mode);
22970: e59f0048 ldr r0, [pc, #72] ; 229c0 <rtems_rfs_rtems_set_handlers+0x9c><== NOT EXECUTED
22974: eb0092fb bl 47568 <printf> <== NOT EXECUTED
22978: e1a00004 mov r0, r4 <== NOT EXECUTED
return false;
}
return true;
}
2297c: e8bd8010 pop {r4, pc} <== NOT EXECUTED
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
if (RTEMS_RFS_S_ISDIR (mode))
loc->handlers = rtems_rfs_rtems_handlers (dir);
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
loc->handlers = rtems_rfs_rtems_handlers (device);
22980: e59f303c ldr r3, [pc, #60] ; 229c4 <rtems_rfs_rtems_set_handlers+0xa0><== NOT EXECUTED
22984: e5803008 str r3, [r0, #8] <== NOT EXECUTED
22988: e3a00001 mov r0, #1 <== NOT EXECUTED
2298c: e8bd8010 pop {r4, pc} <== NOT EXECUTED
rtems_rfs_inode_handle* inode)
{
uint16_t mode = rtems_rfs_inode_get_mode (inode);
loc->handlers = NULL;
if (RTEMS_RFS_S_ISDIR (mode))
loc->handlers = rtems_rfs_rtems_handlers (dir);
22990: e59f3030 ldr r3, [pc, #48] ; 229c8 <rtems_rfs_rtems_set_handlers+0xa4><== NOT EXECUTED
22994: e5803008 str r3, [r0, #8] <== NOT EXECUTED
22998: e3a00001 mov r0, #1 <== NOT EXECUTED
2299c: e8bd8010 pop {r4, pc} <== NOT EXECUTED
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
loc->handlers = rtems_rfs_rtems_handlers (device);
else if (RTEMS_RFS_S_ISLNK (mode))
loc->handlers = rtems_rfs_rtems_handlers (link);
else if (RTEMS_RFS_S_ISREG (mode))
loc->handlers = rtems_rfs_rtems_handlers (file);
229a0: e59f3024 ldr r3, [pc, #36] ; 229cc <rtems_rfs_rtems_set_handlers+0xa8><== NOT EXECUTED
229a4: e5803008 str r3, [r0, #8] <== NOT EXECUTED
229a8: e3a00001 mov r0, #1 <== NOT EXECUTED
229ac: e8bd8010 pop {r4, pc} <== NOT EXECUTED
if (RTEMS_RFS_S_ISDIR (mode))
loc->handlers = rtems_rfs_rtems_handlers (dir);
else if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK(mode))
loc->handlers = rtems_rfs_rtems_handlers (device);
else if (RTEMS_RFS_S_ISLNK (mode))
loc->handlers = rtems_rfs_rtems_handlers (link);
229b0: e59f3018 ldr r3, [pc, #24] ; 229d0 <rtems_rfs_rtems_set_handlers+0xac><== NOT EXECUTED
229b4: e5803008 str r3, [r0, #8] <== NOT EXECUTED
229b8: e3a00001 mov r0, #1 <== NOT EXECUTED
229bc: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00021130 <rtems_rfs_rtems_shutdown>:
* Shutdown the file system.
*/
int
rtems_rfs_rtems_shutdown (rtems_filesystem_mount_table_entry_t* mt_entry)
{
rtems_rfs_file_system* fs = mt_entry->fs_info;
21130: e5903034 ldr r3, [r0, #52] ; 0x34 <== NOT EXECUTED
/**
* Shutdown the file system.
*/
int
rtems_rfs_rtems_shutdown (rtems_filesystem_mount_table_entry_t* mt_entry)
{
21134: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
rtems_rfs_rtems_private* rtems;
int rc;
rtems = rtems_rfs_fs_user (fs);
rc = rtems_rfs_fs_close(fs);
21138: e1a00003 mov r0, r3 <== NOT EXECUTED
{
rtems_rfs_file_system* fs = mt_entry->fs_info;
rtems_rfs_rtems_private* rtems;
int rc;
rtems = rtems_rfs_fs_user (fs);
2113c: e593507c ldr r5, [r3, #124] ; 0x7c <== NOT EXECUTED
rc = rtems_rfs_fs_close(fs);
21140: eb006921 bl 3b5cc <rtems_rfs_fs_close> <== NOT EXECUTED
21144: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_rfs_mutex_destroy (&rtems->access);
21148: e1a00005 mov r0, r5 <== NOT EXECUTED
2114c: eb00731f bl 3ddd0 <rtems_rfs_mutex_destroy> <== NOT EXECUTED
free (rtems);
21150: e1a00005 mov r0, r5 <== NOT EXECUTED
21154: ebff9b05 bl 7d70 <free> <== NOT EXECUTED
return rtems_rfs_rtems_error ("shutdown: close", rc);
21158: eb0087a4 bl 42ff0 <__errno> <== NOT EXECUTED
2115c: e3540000 cmp r4, #0 <== NOT EXECUTED
21160: e5804000 str r4, [r0] <== NOT EXECUTED
}
21164: 01a00004 moveq r0, r4 <== NOT EXECUTED
21168: 13e00000 mvnne r0, #0 <== NOT EXECUTED
2116c: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
00021ca4 <rtems_rfs_rtems_stat>:
int
rtems_rfs_rtems_stat (rtems_filesystem_location_info_t* pathloc,
struct stat* buf)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21ca4: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_stat (rtems_filesystem_location_info_t* pathloc,
struct stat* buf)
{
21ca8: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21cac: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21cb0: e595307c ldr r3, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21cb4: e5906000 ldr r6, [r0] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_stat (rtems_filesystem_location_info_t* pathloc,
struct stat* buf)
{
21cb8: e1a04001 mov r4, r1 <== NOT EXECUTED
21cbc: e3a01000 mov r1, #0 <== NOT EXECUTED
21cc0: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
21cc4: e1a02001 mov r2, r1 <== NOT EXECUTED
21cc8: e5930000 ldr r0, [r3] <== NOT EXECUTED
21ccc: ebffa9fc bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_STAT))
printf ("rtems-rfs-rtems: stat: in: ino:%" PRId32 "\n", ino);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
21cd0: e1a00005 mov r0, r5 <== NOT EXECUTED
21cd4: e1a01006 mov r1, r6 <== NOT EXECUTED
21cd8: e1a0200d mov r2, sp <== NOT EXECUTED
21cdc: e3a03001 mov r3, #1 <== NOT EXECUTED
21ce0: eb006d5f bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
21ce4: e2508000 subs r8, r0, #0 <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_STAT))
printf ("rtems-rfs-rtems: stat: in: ino:%" PRId32 "\n", ino);
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
21ce8: e1a0700d mov r7, sp <== NOT EXECUTED
if (rc)
21cec: 1a00006d bne 21ea8 <rtems_rfs_rtems_stat+0x204> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
21cf0: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
return rtems_rfs_rtems_error ("stat: opening inode", rc);
}
mode = rtems_rfs_inode_get_mode (&inode);
if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK (mode))
21cf4: e5d23003 ldrb r3, [r2, #3] <== NOT EXECUTED
21cf8: e5d20002 ldrb r0, [r2, #2] <== NOT EXECUTED
21cfc: e1830400 orr r0, r3, r0, lsl #8 <== NOT EXECUTED
21d00: e2003a0f and r3, r0, #61440 ; 0xf000 <== NOT EXECUTED
21d04: e3530a02 cmp r3, #8192 ; 0x2000 <== NOT EXECUTED
21d08: 13530a06 cmpne r3, #24576 ; 0x6000 <== NOT EXECUTED
21d0c: 0a000040 beq 21e14 <rtems_rfs_rtems_stat+0x170> <== NOT EXECUTED
buf->st_rdev =
rtems_filesystem_make_dev_t (rtems_rfs_inode_get_block (&inode, 0),
rtems_rfs_inode_get_block (&inode, 1));
}
buf->st_dev = rtems_rfs_fs_device (fs);
21d10: e595300c ldr r3, [r5, #12] <== NOT EXECUTED
21d14: e893000c ldm r3, {r2, r3} <== NOT EXECUTED
buf->st_ino = ino;
21d18: e5846008 str r6, [r4, #8] <== NOT EXECUTED
buf->st_rdev =
rtems_filesystem_make_dev_t (rtems_rfs_inode_get_block (&inode, 0),
rtems_rfs_inode_get_block (&inode, 1));
}
buf->st_dev = rtems_rfs_fs_device (fs);
21d1c: e884000c stm r4, {r2, r3} <== NOT EXECUTED
buf->st_ino = ino;
buf->st_mode = rtems_rfs_rtems_mode (mode);
21d20: eb0002fe bl 22920 <rtems_rfs_rtems_mode> <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
21d24: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21d28: e584000c str r0, [r4, #12] <== NOT EXECUTED
21d2c: e5d30000 ldrb r0, [r3] <== NOT EXECUTED
21d30: e5d32001 ldrb r2, [r3, #1] <== NOT EXECUTED
if (links == 0xffff)
21d34: e3a01801 mov r1, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
21d38: e1822400 orr r2, r2, r0, lsl #8 <== NOT EXECUTED
if (links == 0xffff)
21d3c: e2411001 sub r1, r1, #1 <== NOT EXECUTED
21d40: e1520001 cmp r2, r1 <== NOT EXECUTED
21d44: 03a02000 moveq r2, #0 <== NOT EXECUTED
buf->st_nlink = rtems_rfs_inode_get_links (&inode);
21d48: e1c421b0 strh r2, [r4, #16] <== NOT EXECUTED
buf->st_uid = rtems_rfs_inode_get_uid (&inode);
21d4c: e5d31006 ldrb r1, [r3, #6] <== NOT EXECUTED
21d50: e5d32007 ldrb r2, [r3, #7] <== NOT EXECUTED
21d54: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
21d58: e1c421b2 strh r2, [r4, #18] <== NOT EXECUTED
buf->st_gid = rtems_rfs_inode_get_gid (&inode);
21d5c: e5d31007 ldrb r1, [r3, #7] <== NOT EXECUTED
21d60: e5d30004 ldrb r0, [r3, #4] <== NOT EXECUTED
21d64: e5d32005 ldrb r2, [r3, #5] <== NOT EXECUTED
21d68: e1813c00 orr r3, r1, r0, lsl #24 <== NOT EXECUTED
21d6c: e1833802 orr r3, r3, r2, lsl #16 <== NOT EXECUTED
21d70: e1a03823 lsr r3, r3, #16 <== NOT EXECUTED
21d74: e1c431b4 strh r3, [r4, #20] <== NOT EXECUTED
/*
* Need to check is the ino is an open file. If so we take the values from
* the open file rather than the inode.
*/
shared = rtems_rfs_file_get_shared (fs, ino);
21d78: e1a01006 mov r1, r6 <== NOT EXECUTED
21d7c: e1a00005 mov r0, r5 <== NOT EXECUTED
21d80: eb006323 bl 3aa14 <rtems_rfs_file_get_shared> <== NOT EXECUTED
if (shared)
21d84: e3500000 cmp r0, #0 <== NOT EXECUTED
21d88: 0a00004f beq 21ecc <rtems_rfs_rtems_stat+0x228> <== NOT EXECUTED
{
buf->st_atime = rtems_rfs_file_shared_get_atime (shared);
21d8c: e590308c ldr r3, [r0, #140] ; 0x8c <== NOT EXECUTED
21d90: e5843028 str r3, [r4, #40] ; 0x28 <== NOT EXECUTED
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
21d94: e5903090 ldr r3, [r0, #144] ; 0x90 <== NOT EXECUTED
21d98: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
21d9c: e5903094 ldr r3, [r0, #148] ; 0x94 <== NOT EXECUTED
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
if (S_ISLNK (buf->st_mode))
21da0: e594200c ldr r2, [r4, #12] <== NOT EXECUTED
if (shared)
{
buf->st_atime = rtems_rfs_file_shared_get_atime (shared);
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
21da4: e5843038 str r3, [r4, #56] ; 0x38 <== NOT EXECUTED
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
if (S_ISLNK (buf->st_mode))
21da8: e2022a0f and r2, r2, #61440 ; 0xf000 <== NOT EXECUTED
if (shared)
{
buf->st_atime = rtems_rfs_file_shared_get_atime (shared);
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
21dac: e5903084 ldr r3, [r0, #132] ; 0x84 <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21db0: e3520a0a cmp r2, #40960 ; 0xa000 <== NOT EXECUTED
if (shared)
{
buf->st_atime = rtems_rfs_file_shared_get_atime (shared);
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
21db4: e5843044 str r3, [r4, #68] ; 0x44 <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21db8: 0a000028 beq 21e60 <rtems_rfs_rtems_stat+0x1bc> <== NOT EXECUTED
*/
static inline rtems_rfs_pos
rtems_rfs_file_shared_get_size (rtems_rfs_file_system* fs,
rtems_rfs_file_shared* shared)
{
return rtems_rfs_block_get_size (fs, &shared->size);
21dbc: e2801084 add r1, r0, #132 ; 0x84 <== NOT EXECUTED
21dc0: e1a00005 mov r0, r5 <== NOT EXECUTED
21dc4: eb005abc bl 388bc <rtems_rfs_block_get_size> <== NOT EXECUTED
buf->st_size = rtems_rfs_file_shared_get_block_offset (shared);
else
buf->st_size = rtems_rfs_file_shared_get_size (fs, shared);
21dc8: e5840020 str r0, [r4, #32] <== NOT EXECUTED
21dcc: e5841024 str r1, [r4, #36] ; 0x24 <== NOT EXECUTED
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
}
buf->st_blksize = rtems_rfs_fs_block_size (fs);
21dd0: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
21dd4: e1a0100d mov r1, sp <== NOT EXECUTED
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
}
buf->st_blksize = rtems_rfs_fs_block_size (fs);
21dd8: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
21ddc: e1a00005 mov r0, r5 <== NOT EXECUTED
21de0: eb006cfb bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
21de4: e2504000 subs r4, r0, #0 <== NOT EXECUTED
21de8: da000027 ble 21e8c <rtems_rfs_rtems_stat+0x1e8> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21dec: e595607c ldr r6, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21df0: e1a00005 mov r0, r5 <== NOT EXECUTED
21df4: eb005e76 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21df8: e5960000 ldr r0, [r6] <== NOT EXECUTED
21dfc: ebffa9f8 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("stat: closing inode", rc);
21e00: eb00847a bl 42ff0 <__errno> <== NOT EXECUTED
21e04: e5804000 str r4, [r0] <== NOT EXECUTED
21e08: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21e0c: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
21e10: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
21e14: e282301c add r3, r2, #28 <== NOT EXECUTED
21e18: e5d3a005 ldrb sl, [r3, #5] <== NOT EXECUTED
rtems_device_minor_number _minor
)
{
union __rtems_dev_t temp;
temp.__overlay.major = _major;
21e1c: e5d2101c ldrb r1, [r2, #28] <== NOT EXECUTED
21e20: e5d3c004 ldrb ip, [r3, #4] <== NOT EXECUTED
21e24: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
21e28: e5d3e001 ldrb lr, [r3, #1] <== NOT EXECUTED
21e2c: e5d38007 ldrb r8, [r3, #7] <== NOT EXECUTED
21e30: e1a0a80a lsl sl, sl, #16 <== NOT EXECUTED
21e34: e18aac0c orr sl, sl, ip, lsl #24 <== NOT EXECUTED
21e38: e1822c01 orr r2, r2, r1, lsl #24 <== NOT EXECUTED
21e3c: e5d3c006 ldrb ip, [r3, #6] <== NOT EXECUTED
21e40: e5d31002 ldrb r1, [r3, #2] <== NOT EXECUTED
21e44: e182280e orr r2, r2, lr, lsl #16 <== NOT EXECUTED
21e48: e18a3008 orr r3, sl, r8 <== NOT EXECUTED
21e4c: e183340c orr r3, r3, ip, lsl #8 <== NOT EXECUTED
21e50: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
mode = rtems_rfs_inode_get_mode (&inode);
if (RTEMS_RFS_S_ISCHR (mode) || RTEMS_RFS_S_ISBLK (mode))
{
buf->st_rdev =
21e54: e5842018 str r2, [r4, #24] <== NOT EXECUTED
21e58: e584301c str r3, [r4, #28] <== NOT EXECUTED
21e5c: eaffffab b 21d10 <rtems_rfs_rtems_stat+0x6c> <== NOT EXECUTED
buf->st_mtime = rtems_rfs_file_shared_get_mtime (shared);
buf->st_ctime = rtems_rfs_file_shared_get_ctime (shared);
buf->st_blocks = rtems_rfs_file_shared_get_block_count (shared);
if (S_ISLNK (buf->st_mode))
buf->st_size = rtems_rfs_file_shared_get_block_offset (shared);
21e60: e1d038b8 ldrh r3, [r0, #136] ; 0x88 <== NOT EXECUTED
21e64: e5843020 str r3, [r4, #32] <== NOT EXECUTED
21e68: e3a03000 mov r3, #0 <== NOT EXECUTED
21e6c: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
}
buf->st_blksize = rtems_rfs_fs_block_size (fs);
21e70: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
21e74: e1a0100d mov r1, sp <== NOT EXECUTED
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
}
buf->st_blksize = rtems_rfs_fs_block_size (fs);
21e78: e5843040 str r3, [r4, #64] ; 0x40 <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
21e7c: e1a00005 mov r0, r5 <== NOT EXECUTED
21e80: eb006cd3 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
21e84: e2504000 subs r4, r0, #0 <== NOT EXECUTED
21e88: caffffd7 bgt 21dec <rtems_rfs_rtems_stat+0x148> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21e8c: e595407c ldr r4, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21e90: e1a00005 mov r0, r5 <== NOT EXECUTED
21e94: eb005e4e bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21e98: e5940000 ldr r0, [r4] <== NOT EXECUTED
21e9c: ebffa9d0 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
21ea0: e3a00000 mov r0, #0 <== NOT EXECUTED
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("stat: closing inode", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
21ea4: eaffffd8 b 21e0c <rtems_rfs_rtems_stat+0x168> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21ea8: e595407c ldr r4, [r5, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21eac: e1a00005 mov r0, r5 <== NOT EXECUTED
21eb0: eb005e47 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21eb4: e5940000 ldr r0, [r4] <== NOT EXECUTED
21eb8: ebffa9c9 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc)
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("stat: opening inode", rc);
21ebc: eb00844b bl 42ff0 <__errno> <== NOT EXECUTED
21ec0: e5808000 str r8, [r0] <== NOT EXECUTED
21ec4: e3e00000 mvn r0, #0 <== NOT EXECUTED
21ec8: eaffffcf b 21e0c <rtems_rfs_rtems_stat+0x168> <== NOT EXECUTED
* @return rtems_rfs_time The atime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_atime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->atime);
21ecc: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21ed0: e2832010 add r2, r3, #16 <== NOT EXECUTED
else
buf->st_size = rtems_rfs_file_shared_get_size (fs, shared);
}
else
{
buf->st_atime = rtems_rfs_inode_get_atime (&inode);
21ed4: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
21ed8: e5d3c010 ldrb ip, [r3, #16] <== NOT EXECUTED
21edc: e5d2e001 ldrb lr, [r2, #1] <== NOT EXECUTED
21ee0: e181cc0c orr ip, r1, ip, lsl #24 <== NOT EXECUTED
21ee4: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
21ee8: e18c280e orr r2, ip, lr, lsl #16 <== NOT EXECUTED
21eec: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
21ef0: e5842028 str r2, [r4, #40] ; 0x28 <== NOT EXECUTED
* @return rtems_rfs_time The mtime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_mtime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->mtime);
21ef4: e2832014 add r2, r3, #20 <== NOT EXECUTED
buf->st_mtime = rtems_rfs_inode_get_mtime (&inode);
21ef8: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
21efc: e5d3c014 ldrb ip, [r3, #20] <== NOT EXECUTED
21f00: e5d2e001 ldrb lr, [r2, #1] <== NOT EXECUTED
21f04: e181cc0c orr ip, r1, ip, lsl #24 <== NOT EXECUTED
21f08: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
21f0c: e18c280e orr r2, ip, lr, lsl #16 <== NOT EXECUTED
21f10: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
21f14: e5842030 str r2, [r4, #48] ; 0x30 <== NOT EXECUTED
* @return rtems_rfs_time The ctime.
*/
static inline rtems_rfs_time
rtems_rfs_inode_get_ctime (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->ctime);
21f18: e2832018 add r2, r3, #24 <== NOT EXECUTED
buf->st_ctime = rtems_rfs_inode_get_ctime (&inode);
21f1c: e5d21003 ldrb r1, [r2, #3] <== NOT EXECUTED
21f20: e5d3c018 ldrb ip, [r3, #24] <== NOT EXECUTED
21f24: e5d2e001 ldrb lr, [r2, #1] <== NOT EXECUTED
21f28: e181cc0c orr ip, r1, ip, lsl #24 <== NOT EXECUTED
21f2c: e5d21002 ldrb r1, [r2, #2] <== NOT EXECUTED
21f30: e18c280e orr r2, ip, lr, lsl #16 <== NOT EXECUTED
21f34: e1822401 orr r2, r2, r1, lsl #8 <== NOT EXECUTED
21f38: e5842038 str r2, [r4, #56] ; 0x38 <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
21f3c: e283200c add r2, r3, #12 <== NOT EXECUTED
buf->st_blocks = rtems_rfs_inode_get_block_count (&inode);
21f40: e5d2c003 ldrb ip, [r2, #3] <== NOT EXECUTED
21f44: e5d3e00c ldrb lr, [r3, #12] <== NOT EXECUTED
21f48: e5d26001 ldrb r6, [r2, #1] <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21f4c: e594100c ldr r1, [r4, #12] <== NOT EXECUTED
else
{
buf->st_atime = rtems_rfs_inode_get_atime (&inode);
buf->st_mtime = rtems_rfs_inode_get_mtime (&inode);
buf->st_ctime = rtems_rfs_inode_get_ctime (&inode);
buf->st_blocks = rtems_rfs_inode_get_block_count (&inode);
21f50: e18cec0e orr lr, ip, lr, lsl #24 <== NOT EXECUTED
21f54: e5d2c002 ldrb ip, [r2, #2] <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21f58: e2011a0f and r1, r1, #61440 ; 0xf000 <== NOT EXECUTED
else
{
buf->st_atime = rtems_rfs_inode_get_atime (&inode);
buf->st_mtime = rtems_rfs_inode_get_mtime (&inode);
buf->st_ctime = rtems_rfs_inode_get_ctime (&inode);
buf->st_blocks = rtems_rfs_inode_get_block_count (&inode);
21f5c: e18e2806 orr r2, lr, r6, lsl #16 <== NOT EXECUTED
21f60: e182240c orr r2, r2, ip, lsl #8 <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21f64: e3510a0a cmp r1, #40960 ; 0xa000 <== NOT EXECUTED
else
{
buf->st_atime = rtems_rfs_inode_get_atime (&inode);
buf->st_mtime = rtems_rfs_inode_get_mtime (&inode);
buf->st_ctime = rtems_rfs_inode_get_ctime (&inode);
buf->st_blocks = rtems_rfs_inode_get_block_count (&inode);
21f68: e5842044 str r2, [r4, #68] ; 0x44 <== NOT EXECUTED
if (S_ISLNK (buf->st_mode))
21f6c: 1a000005 bne 21f88 <rtems_rfs_rtems_stat+0x2e4> <== NOT EXECUTED
buf->st_size = rtems_rfs_inode_get_block_offset (&inode);
21f70: e5d3200b ldrb r2, [r3, #11] <== NOT EXECUTED
21f74: e5d3300a ldrb r3, [r3, #10] <== NOT EXECUTED
21f78: e1823403 orr r3, r2, r3, lsl #8 <== NOT EXECUTED
21f7c: e5843020 str r3, [r4, #32] <== NOT EXECUTED
21f80: e5840024 str r0, [r4, #36] ; 0x24 <== NOT EXECUTED
21f84: eaffff91 b 21dd0 <rtems_rfs_rtems_stat+0x12c> <== NOT EXECUTED
else
buf->st_size = rtems_rfs_inode_get_size (fs, &inode);
21f88: e1a00005 mov r0, r5 <== NOT EXECUTED
21f8c: e1a0100d mov r1, sp <== NOT EXECUTED
21f90: eb006bca bl 3cec0 <rtems_rfs_inode_get_size> <== NOT EXECUTED
21f94: e5840020 str r0, [r4, #32] <== NOT EXECUTED
21f98: e5841024 str r1, [r4, #36] ; 0x24 <== NOT EXECUTED
21f9c: eaffff8b b 21dd0 <rtems_rfs_rtems_stat+0x12c> <== NOT EXECUTED
00021348 <rtems_rfs_rtems_statvfs>:
* @return int
*/
int
rtems_rfs_rtems_statvfs (rtems_filesystem_location_info_t* pathloc,
struct statvfs* sb)
{
21348: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
2134c: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
21350: e5935034 ldr r5, [r3, #52] ; 0x34 <== NOT EXECUTED
* @return int
*/
int
rtems_rfs_rtems_statvfs (rtems_filesystem_location_info_t* pathloc,
struct statvfs* sb)
{
21354: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
21358: e1a04001 mov r4, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
size_t blocks;
size_t inodes;
rtems_rfs_group_usage (fs, &blocks, &inodes);
2135c: e1a0200d mov r2, sp <== NOT EXECUTED
21360: e28d1004 add r1, sp, #4 <== NOT EXECUTED
21364: e1a00005 mov r0, r5 <== NOT EXECUTED
21368: eb006d73 bl 3c93c <rtems_rfs_group_usage> <== NOT EXECUTED
sb->f_bsize = rtems_rfs_fs_block_size (fs);
2136c: e5953008 ldr r3, [r5, #8] <== NOT EXECUTED
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
21370: e595000c ldr r0, [r5, #12] <== NOT EXECUTED
size_t blocks;
size_t inodes;
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
21374: e5843000 str r3, [r4] <== NOT EXECUTED
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
21378: e5903024 ldr r3, [r0, #36] ; 0x24 <== NOT EXECUTED
2137c: e5843004 str r3, [r4, #4] <== NOT EXECUTED
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
sb->f_bavail = sb->f_bfree;
sb->f_files = rtems_rfs_fs_inodes (fs);
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
21380: e59d2000 ldr r2, [sp] <== NOT EXECUTED
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
sb->f_bavail = sb->f_bfree;
sb->f_files = rtems_rfs_fs_inodes (fs);
21384: e5951010 ldr r1, [r5, #16] <== NOT EXECUTED
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
sb->f_favail = sb->f_ffree;
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
21388: e3a0334a mov r3, #671088641 ; 0x28000001 <== NOT EXECUTED
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
sb->f_bavail = sb->f_bfree;
sb->f_files = rtems_rfs_fs_inodes (fs);
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
2138c: e0622001 rsb r2, r2, r1 <== NOT EXECUTED
sb->f_favail = sb->f_ffree;
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
21390: e2833a92 add r3, r3, #598016 ; 0x92000 <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
21394: e590c01c ldr ip, [r0, #28] <== NOT EXECUTED
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
21398: e5950004 ldr r0, [r5, #4] <== NOT EXECUTED
sb->f_bavail = sb->f_bfree;
sb->f_files = rtems_rfs_fs_inodes (fs);
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
sb->f_favail = sb->f_ffree;
2139c: e5842028 str r2, [r4, #40] ; 0x28 <== NOT EXECUTED
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
213a0: e584302c str r3, [r4, #44] ; 0x2c <== NOT EXECUTED
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
sb->f_bavail = sb->f_bfree;
sb->f_files = rtems_rfs_fs_inodes (fs);
213a4: e5841020 str r1, [r4, #32] <== NOT EXECUTED
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
213a8: e5842024 str r2, [r4, #36] ; 0x24 <== NOT EXECUTED
sb->f_favail = sb->f_ffree;
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
sb->f_flag = rtems_rfs_fs_flags (fs);
213ac: e5953000 ldr r3, [r5] <== NOT EXECUTED
213b0: e5843030 str r3, [r4, #48] ; 0x30 <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
213b4: e59d3004 ldr r3, [sp, #4] <== NOT EXECUTED
sb->f_files = rtems_rfs_fs_inodes (fs);
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
sb->f_favail = sb->f_ffree;
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
sb->f_flag = rtems_rfs_fs_flags (fs);
sb->f_namemax = rtems_rfs_fs_max_name (fs);
213b8: e5952018 ldr r2, [r5, #24] <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
213bc: e0633000 rsb r3, r3, r0 <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
213c0: e3a00000 mov r0, #0 <== NOT EXECUTED
sb->f_files = rtems_rfs_fs_inodes (fs);
sb->f_ffree = rtems_rfs_fs_inodes (fs) - inodes;
sb->f_favail = sb->f_ffree;
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
sb->f_flag = rtems_rfs_fs_flags (fs);
sb->f_namemax = rtems_rfs_fs_max_name (fs);
213c4: e5842034 str r2, [r4, #52] ; 0x34 <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
213c8: e584c008 str ip, [r4, #8] <== NOT EXECUTED
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
sb->f_bavail = sb->f_bfree;
213cc: e5843018 str r3, [r4, #24] <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
sb->f_bsize = rtems_rfs_fs_block_size (fs);
sb->f_frsize = rtems_rfs_fs_media_block_size (fs);
sb->f_blocks = rtems_rfs_fs_media_blocks (fs);
213d0: e584000c str r0, [r4, #12] <== NOT EXECUTED
sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks;
213d4: e5843010 str r3, [r4, #16] <== NOT EXECUTED
213d8: e5840014 str r0, [r4, #20] <== NOT EXECUTED
sb->f_bavail = sb->f_bfree;
213dc: e584001c str r0, [r4, #28] <== NOT EXECUTED
sb->f_fsid = RTEMS_RFS_SB_MAGIC;
sb->f_flag = rtems_rfs_fs_flags (fs);
sb->f_namemax = rtems_rfs_fs_max_name (fs);
return 0;
}
213e0: e28dd008 add sp, sp, #8 <== NOT EXECUTED
213e4: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
000217f0 <rtems_rfs_rtems_symlink>:
int
rtems_rfs_rtems_symlink (rtems_filesystem_location_info_t* parent_loc,
const char* link_name,
const char* node_name)
{
217f0: e1a03000 mov r3, r0 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
217f4: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
int
rtems_rfs_rtems_symlink (rtems_filesystem_location_info_t* parent_loc,
const char* link_name,
const char* node_name)
{
217f8: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
217fc: e5904034 ldr r4, [r0, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21800: e594007c ldr r0, [r4, #124] ; 0x7c <== NOT EXECUTED
int
rtems_rfs_rtems_symlink (rtems_filesystem_location_info_t* parent_loc,
const char* link_name,
const char* node_name)
{
21804: e1a06001 mov r6, r1 <== NOT EXECUTED
21808: e3a01000 mov r1, #0 <== NOT EXECUTED
2180c: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
21810: e1a07002 mov r7, r2 <== NOT EXECUTED
21814: e5900000 ldr r0, [r0] <== NOT EXECUTED
21818: e1a02001 mov r2, r1 <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
2181c: e5935000 ldr r5, [r3] <== NOT EXECUTED
21820: ebffab27 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
gid = 0;
#endif
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_symlink (fs, node_name, strlen (node_name),
21824: e1a00007 mov r0, r7 <== NOT EXECUTED
21828: eb00a0ed bl 49be4 <strlen> <== NOT EXECUTED
2182c: e1a08000 mov r8, r0 <== NOT EXECUTED
link_name, strlen (link_name),
21830: e1a00006 mov r0, r6 <== NOT EXECUTED
21834: eb00a0ea bl 49be4 <strlen> <== NOT EXECUTED
gid = 0;
#endif
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_symlink (fs, node_name, strlen (node_name),
21838: e3a0c000 mov ip, #0 <== NOT EXECUTED
2183c: e58d0000 str r0, [sp] <== NOT EXECUTED
21840: e1a01007 mov r1, r7 <== NOT EXECUTED
21844: e1a02008 mov r2, r8 <== NOT EXECUTED
21848: e1a03006 mov r3, r6 <== NOT EXECUTED
2184c: e1a00004 mov r0, r4 <== NOT EXECUTED
21850: e58d500c str r5, [sp, #12] <== NOT EXECUTED
21854: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
21858: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
2185c: eb006fec bl 3d814 <rtems_rfs_symlink> <== NOT EXECUTED
link_name, strlen (link_name),
uid, gid, parent);
if (rc)
21860: e2505000 subs r5, r0, #0 <== NOT EXECUTED
21864: 0a000009 beq 21890 <rtems_rfs_rtems_symlink+0xa0> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21868: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
2186c: e1a00004 mov r0, r4 <== NOT EXECUTED
21870: eb005fd7 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21874: e5960000 ldr r0, [r6] <== NOT EXECUTED
21878: ebffab59 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("symlink: linking", rc);
2187c: eb0085db bl 42ff0 <__errno> <== NOT EXECUTED
21880: e5805000 str r5, [r0] <== NOT EXECUTED
21884: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21888: e28dd010 add sp, sp, #16 <== NOT EXECUTED
2188c: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21890: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21894: e1a00004 mov r0, r4 <== NOT EXECUTED
21898: eb005fcd bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
2189c: e5960000 ldr r0, [r6] <== NOT EXECUTED
218a0: ebffab4f bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
218a4: e1a00005 mov r0, r5 <== NOT EXECUTED
return rtems_rfs_rtems_error ("symlink: linking", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
218a8: eafffff6 b 21888 <rtems_rfs_rtems_symlink+0x98> <== NOT EXECUTED
00021948 <rtems_rfs_rtems_unlink>:
int
rtems_rfs_rtems_unlink (rtems_filesystem_location_info_t* parent_loc,
rtems_filesystem_location_info_t* loc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
21948: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_unlink (rtems_filesystem_location_info_t* parent_loc,
rtems_filesystem_location_info_t* loc)
{
2194c: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
21950: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
int
rtems_rfs_rtems_unlink (rtems_filesystem_location_info_t* parent_loc,
rtems_filesystem_location_info_t* loc)
{
21954: e1a03001 mov r3, r1 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21958: e594207c ldr r2, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (loc);
uint32_t doff = rtems_rfs_rtems_get_pathloc_doff (loc);
2195c: e5915004 ldr r5, [r1, #4] <== NOT EXECUTED
int
rtems_rfs_rtems_unlink (rtems_filesystem_location_info_t* parent_loc,
rtems_filesystem_location_info_t* loc)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (parent_loc);
rtems_rfs_ino parent = rtems_rfs_rtems_get_pathloc_ino (parent_loc);
21960: e5907000 ldr r7, [r0] <== NOT EXECUTED
21964: e3a01000 mov r1, #0 <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (loc);
21968: e5936000 ldr r6, [r3] <== NOT EXECUTED
*/
int
rtems_rfs_rtems_unlink (rtems_filesystem_location_info_t* parent_loc,
rtems_filesystem_location_info_t* loc)
{
2196c: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
21970: e5920000 ldr r0, [r2] <== NOT EXECUTED
21974: e1a02001 mov r2, r1 <== NOT EXECUTED
21978: ebffaad1 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_UNLINK))
printf("rtems-rfs-rtems: unlink: parent:%" PRId32 " doff:%" PRIu32 " ino:%" PRId32 "\n",
parent, doff, ino);
rc = rtems_rfs_unlink (fs, parent, ino, doff, rtems_rfs_unlink_dir_denied);
2197c: e1a03005 mov r3, r5 <== NOT EXECUTED
21980: e3a0c000 mov ip, #0 <== NOT EXECUTED
21984: e1a01007 mov r1, r7 <== NOT EXECUTED
21988: e1a02006 mov r2, r6 <== NOT EXECUTED
2198c: e1a00004 mov r0, r4 <== NOT EXECUTED
21990: e58dc000 str ip, [sp] <== NOT EXECUTED
21994: eb00702a bl 3da44 <rtems_rfs_unlink> <== NOT EXECUTED
if (rc)
21998: e2505000 subs r5, r0, #0 <== NOT EXECUTED
2199c: 0a000009 beq 219c8 <rtems_rfs_rtems_unlink+0x80> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
219a0: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
219a4: e1a00004 mov r0, r4 <== NOT EXECUTED
219a8: eb005f89 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
219ac: e5960000 ldr r0, [r6] <== NOT EXECUTED
219b0: ebffab0b bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("unlink: unlink inode", rc);
219b4: eb00858d bl 42ff0 <__errno> <== NOT EXECUTED
219b8: e5805000 str r5, [r0] <== NOT EXECUTED
219bc: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
219c0: e28dd004 add sp, sp, #4 <== NOT EXECUTED
219c4: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
219c8: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
219cc: e1a00004 mov r0, r4 <== NOT EXECUTED
219d0: eb005f7f bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
219d4: e5960000 ldr r0, [r6] <== NOT EXECUTED
219d8: ebffab01 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
219dc: e1a00005 mov r0, r5 <== NOT EXECUTED
return rtems_rfs_rtems_error ("unlink: unlink inode", rc);
}
rtems_rfs_rtems_unlock (fs);
return 0;
219e0: eafffff6 b 219c0 <rtems_rfs_rtems_unlink+0x78> <== NOT EXECUTED
00021118 <rtems_rfs_rtems_unlock>:
/**
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
21118: e92d4010 push {r4, lr} <== NOT EXECUTED
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
2111c: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21120: eb0061ab bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21124: e5940000 ldr r0, [r4] <== NOT EXECUTED
rtems_rfs_mutex_unlock (&rtems->access);
}
21128: e8bd4010 pop {r4, lr} <== NOT EXECUTED
2112c: eaffad2c b c5e4 <rtems_semaphore_release> <== NOT EXECUTED
00021b78 <rtems_rfs_rtems_utime>:
int
rtems_rfs_rtems_utime(rtems_filesystem_location_info_t* pathloc,
time_t atime,
time_t mtime)
{
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21b78: e5903010 ldr r3, [r0, #16] <== NOT EXECUTED
int
rtems_rfs_rtems_utime(rtems_filesystem_location_info_t* pathloc,
time_t atime,
time_t mtime)
{
21b7c: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc);
21b80: e5934034 ldr r4, [r3, #52] ; 0x34 <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
21b84: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_ino ino = rtems_rfs_rtems_get_pathloc_ino (pathloc);
21b88: e5908000 ldr r8, [r0] <== NOT EXECUTED
int
rtems_rfs_rtems_utime(rtems_filesystem_location_info_t* pathloc,
time_t atime,
time_t mtime)
{
21b8c: e1a06001 mov r6, r1 <== NOT EXECUTED
21b90: e3a01000 mov r1, #0 <== NOT EXECUTED
21b94: e24dd028 sub sp, sp, #40 ; 0x28 <== NOT EXECUTED
21b98: e5930000 ldr r0, [r3] <== NOT EXECUTED
21b9c: e1a05002 mov r5, r2 <== NOT EXECUTED
21ba0: e1a02001 mov r2, r1 <== NOT EXECUTED
21ba4: ebffaa46 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_inode_handle inode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
21ba8: e1a01008 mov r1, r8 <== NOT EXECUTED
21bac: e1a00004 mov r0, r4 <== NOT EXECUTED
21bb0: e1a0200d mov r2, sp <== NOT EXECUTED
21bb4: e3a03001 mov r3, #1 <== NOT EXECUTED
21bb8: eb006da9 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
21bbc: e2508000 subs r8, r0, #0 <== NOT EXECUTED
rtems_rfs_inode_handle inode;
int rc;
rtems_rfs_rtems_lock (fs);
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
21bc0: e1a0700d mov r7, sp <== NOT EXECUTED
if (rc)
21bc4: 0a000009 beq 21bf0 <rtems_rfs_rtems_utime+0x78> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21bc8: e594507c ldr r5, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21bcc: e1a00004 mov r0, r4 <== NOT EXECUTED
21bd0: eb005eff bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_unlock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_release (*mutex);
21bd4: e5950000 ldr r0, [r5] <== NOT EXECUTED
21bd8: ebffaa81 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("utime: read inode", rc);
21bdc: eb008503 bl 42ff0 <__errno> <== NOT EXECUTED
21be0: e5808000 str r8, [r0] <== NOT EXECUTED
21be4: e3e00000 mvn r0, #0 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
}
21be8: e28dd028 add sp, sp, #40 ; 0x28 <== NOT EXECUTED
21bec: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_atime (rtems_rfs_inode_handle* handle,
rtems_rfs_time atime)
{
rtems_rfs_write_u32 (&handle->node->atime, atime);
21bf0: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21bf4: e1a02c26 lsr r2, r6, #24 <== NOT EXECUTED
21bf8: e5c32010 strb r2, [r3, #16] <== NOT EXECUTED
21bfc: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c00: e1a02826 lsr r2, r6, #16 <== NOT EXECUTED
21c04: e5c32011 strb r2, [r3, #17] <== NOT EXECUTED
21c08: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c0c: e1a02426 lsr r2, r6, #8 <== NOT EXECUTED
21c10: e5c32012 strb r2, [r3, #18] <== NOT EXECUTED
21c14: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c18: e5c36013 strb r6, [r3, #19] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_mtime (rtems_rfs_inode_handle* handle,
rtems_rfs_time mtime)
{
rtems_rfs_write_u32 (&handle->node->mtime, mtime);
21c1c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c20: e1a02c25 lsr r2, r5, #24 <== NOT EXECUTED
21c24: e5c32014 strb r2, [r3, #20] <== NOT EXECUTED
21c28: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c2c: e1a02825 lsr r2, r5, #16 <== NOT EXECUTED
21c30: e5c32015 strb r2, [r3, #21] <== NOT EXECUTED
21c34: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
21c38: e1a02425 lsr r2, r5, #8 <== NOT EXECUTED
21c3c: e5c32016 strb r2, [r3, #22] <== NOT EXECUTED
21c40: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
}
rtems_rfs_inode_set_atime (&inode, atime);
rtems_rfs_inode_set_mtime (&inode, mtime);
rc = rtems_rfs_inode_close (fs, &inode);
21c44: e1a0100d mov r1, sp <== NOT EXECUTED
21c48: e5c35017 strb r5, [r3, #23] <== NOT EXECUTED
21c4c: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
21c50: e3a03001 mov r3, #1 <== NOT EXECUTED
21c54: e5cd3010 strb r3, [sp, #16] <== NOT EXECUTED
21c58: eb006d5d bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc)
21c5c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
21c60: 0a000008 beq 21c88 <rtems_rfs_rtems_utime+0x110> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21c64: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21c68: e1a00004 mov r0, r4 <== NOT EXECUTED
21c6c: eb005ed8 bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21c70: e5960000 ldr r0, [r6] <== NOT EXECUTED
21c74: ebffaa5a bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
{
rtems_rfs_rtems_unlock (fs);
return rtems_rfs_rtems_error ("utime: closing inode", rc);
21c78: eb0084dc bl 42ff0 <__errno> <== NOT EXECUTED
21c7c: e5805000 str r5, [r0] <== NOT EXECUTED
21c80: e3e00000 mvn r0, #0 <== NOT EXECUTED
21c84: eaffffd7 b 21be8 <rtems_rfs_rtems_utime+0x70> <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
21c88: e594607c ldr r6, [r4, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
21c8c: e1a00004 mov r0, r4 <== NOT EXECUTED
21c90: eb005ecf bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
21c94: e5960000 ldr r0, [r6] <== NOT EXECUTED
21c98: ebffaa51 bl c5e4 <rtems_semaphore_release> <== NOT EXECUTED
21c9c: e1a00005 mov r0, r5 <== NOT EXECUTED
}
rtems_rfs_rtems_unlock (fs);
return 0;
21ca0: eaffffd0 b 21be8 <rtems_rfs_rtems_utime+0x70> <== NOT EXECUTED
0003bb3c <rtems_rfs_rup_quotient>:
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
if (dividend == 0)
3bb3c: e3500000 cmp r0, #0 <== NOT EXECUTED
* Return a rounded up integer quotient given a dividend and divisor. That is:
* "quotient = dividend / divisor"
*/
int
rtems_rfs_rup_quotient (uint32_t dividend, uint32_t divisor)
{
3bb40: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
if (dividend == 0)
3bb44: 03a00001 moveq r0, #1 <== NOT EXECUTED
3bb48: 049df004 popeq {pc} ; (ldreq pc, [sp], #4) <== NOT EXECUTED
return 1;
return ((dividend - 1) / divisor) + 1;
3bb4c: e2400001 sub r0, r0, #1 <== NOT EXECUTED
3bb50: eb007ce4 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
3bb54: e2800001 add r0, r0, #1 <== NOT EXECUTED
}
3bb58: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
0002367c <rtems_rfs_shell_block>:
return 0;
}
static int
rtems_rfs_shell_block (rtems_rfs_file_system* fs, int argc, char *argv[])
{
2367c: e92d41f0 push {r4, r5, r6, r7, r8, lr} <== NOT EXECUTED
uint8_t* data;
bool state;
int b;
int rc;
if (argc <= 1)
23680: e3510001 cmp r1, #1 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_block (rtems_rfs_file_system* fs, int argc, char *argv[])
{
23684: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
23688: e1a04000 mov r4, r0 <== NOT EXECUTED
uint8_t* data;
bool state;
int b;
int rc;
if (argc <= 1)
2368c: da000070 ble 23854 <rtems_rfs_shell_block+0x1d8> <== NOT EXECUTED
{
printf ("error: no block number provided\n");
return 1;
}
block = strtoul (argv[1], 0, 0);
23690: e3a01000 mov r1, #0 <== NOT EXECUTED
23694: e5920004 ldr r0, [r2, #4] <== NOT EXECUTED
23698: e1a02001 mov r2, r1 <== NOT EXECUTED
2369c: eb009e6c bl 4b054 <strtoul> <== NOT EXECUTED
236a0: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
236a4: e3a01000 mov r1, #0 <== NOT EXECUTED
236a8: e1a02001 mov r2, r1 <== NOT EXECUTED
236ac: e1a05000 mov r5, r0 <== NOT EXECUTED
236b0: e5930000 ldr r0, [r3] <== NOT EXECUTED
236b4: ebffa382 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_shell_lock_rfs (fs);
rc = rtems_rfs_group_bitmap_test (fs, false, block, &state);
236b8: e1a00004 mov r0, r4 <== NOT EXECUTED
236bc: e3a01000 mov r1, #0 <== NOT EXECUTED
236c0: e1a02005 mov r2, r5 <== NOT EXECUTED
236c4: e28d300f add r3, sp, #15 <== NOT EXECUTED
236c8: eb0064c0 bl 3c9d0 <rtems_rfs_group_bitmap_test> <== NOT EXECUTED
if (rc > 0)
236cc: e2506000 subs r6, r0, #0 <== NOT EXECUTED
236d0: ca00003f bgt 237d4 <rtems_rfs_shell_block+0x158> <== NOT EXECUTED
printf ("error: testing block state: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
printf (" %5" PRIu32 ": block %s\n", block, state ? "allocated" : "free");
236d4: e5dd100f ldrb r1, [sp, #15] <== NOT EXECUTED
236d8: e59f3184 ldr r3, [pc, #388] ; 23864 <rtems_rfs_shell_block+0x1e8><== NOT EXECUTED
236dc: e3510000 cmp r1, #0 <== NOT EXECUTED
236e0: e59f2180 ldr r2, [pc, #384] ; 23868 <rtems_rfs_shell_block+0x1ec><== NOT EXECUTED
236e4: e1a01005 mov r1, r5 <== NOT EXECUTED
236e8: 01a02003 moveq r2, r3 <== NOT EXECUTED
236ec: e59f0178 ldr r0, [pc, #376] ; 2386c <rtems_rfs_shell_block+0x1f0><== NOT EXECUTED
236f0: eb008f9c bl 47568 <printf> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
236f4: e3a06000 mov r6, #0 <== NOT EXECUTED
printf ("error: opening buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
236f8: e1a00004 mov r0, r4 <== NOT EXECUTED
236fc: e1a0100d mov r1, sp <== NOT EXECUTED
23700: e1a02005 mov r2, r5 <== NOT EXECUTED
23704: e3a03001 mov r3, #1 <== NOT EXECUTED
23708: e5cd6000 strb r6, [sp] <== NOT EXECUTED
handle->bnum = 0;
2370c: e58d6004 str r6, [sp, #4] <== NOT EXECUTED
handle->buffer = NULL;
23710: e58d6008 str r6, [sp, #8] <== NOT EXECUTED
23714: eb0058ce bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
23718: e2508000 subs r8, r0, #0 <== NOT EXECUTED
printf ("error: opening buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
2371c: e1a0700d mov r7, sp <== NOT EXECUTED
if (rc > 0)
23720: ca00003a bgt 23810 <rtems_rfs_shell_block+0x194> <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
b < rtems_rfs_fs_block_size (fs);
23724: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
23728: e3530000 cmp r3, #0 <== NOT EXECUTED
printf ("error: requesting buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
2372c: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
23730: e5935020 ldr r5, [r3, #32] <== NOT EXECUTED
b < rtems_rfs_fs_block_size (fs);
23734: 1a00000c bne 2376c <rtems_rfs_shell_block+0xf0> <== NOT EXECUTED
23738: ea000018 b 237a0 <rtems_rfs_shell_block+0x124> <== NOT EXECUTED
b++, data++)
{
int mod = b % 16;
if (mod == 0)
{
if (b)
2373c: e3560000 cmp r6, #0 <== NOT EXECUTED
23740: 1a00002f bne 23804 <rtems_rfs_shell_block+0x188> <== NOT EXECUTED
printf ("\n");
printf ("%04x ", b);
23744: e1a01006 mov r1, r6 <== NOT EXECUTED
23748: e59f0120 ldr r0, [pc, #288] ; 23870 <rtems_rfs_shell_block+0x1f4><== NOT EXECUTED
2374c: eb008f85 bl 47568 <printf> <== NOT EXECUTED
}
if (mod == 8)
printf (" ");
printf ("%02x ", *data);
23750: e7d51006 ldrb r1, [r5, r6] <== NOT EXECUTED
23754: e59f0118 ldr r0, [pc, #280] ; 23874 <rtems_rfs_shell_block+0x1f8><== NOT EXECUTED
23758: eb008f82 bl 47568 <printf> <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
b < rtems_rfs_fs_block_size (fs);
2375c: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
b++, data++)
23760: e2866001 add r6, r6, #1 <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
b < rtems_rfs_fs_block_size (fs);
23764: e1530006 cmp r3, r6 <== NOT EXECUTED
23768: 9a00000c bls 237a0 <rtems_rfs_shell_block+0x124> <== NOT EXECUTED
b++, data++)
{
int mod = b % 16;
if (mod == 0)
2376c: e216300f ands r3, r6, #15 <== NOT EXECUTED
23770: 0afffff1 beq 2373c <rtems_rfs_shell_block+0xc0> <== NOT EXECUTED
{
if (b)
printf ("\n");
printf ("%04x ", b);
}
if (mod == 8)
23774: e3530008 cmp r3, #8 <== NOT EXECUTED
23778: 1afffff4 bne 23750 <rtems_rfs_shell_block+0xd4> <== NOT EXECUTED
printf (" ");
2377c: e3a00020 mov r0, #32 <== NOT EXECUTED
23780: eb008fed bl 4773c <putchar> <== NOT EXECUTED
printf ("%02x ", *data);
23784: e7d51006 ldrb r1, [r5, r6] <== NOT EXECUTED
23788: e59f00e4 ldr r0, [pc, #228] ; 23874 <rtems_rfs_shell_block+0x1f8><== NOT EXECUTED
2378c: eb008f75 bl 47568 <printf> <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
b < rtems_rfs_fs_block_size (fs);
23790: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
b++, data++)
23794: e2866001 add r6, r6, #1 <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
}
for (b = 0, data = rtems_rfs_buffer_data (&buffer);
b < rtems_rfs_fs_block_size (fs);
23798: e1530006 cmp r3, r6 <== NOT EXECUTED
2379c: 8afffff2 bhi 2376c <rtems_rfs_shell_block+0xf0> <== NOT EXECUTED
if (mod == 8)
printf (" ");
printf ("%02x ", *data);
}
printf ("\n");
237a0: e3a0000a mov r0, #10 <== NOT EXECUTED
237a4: eb008fe4 bl 4773c <putchar> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
237a8: e1a00004 mov r0, r4 <== NOT EXECUTED
237ac: e1a0100d mov r1, sp <== NOT EXECUTED
237b0: eb00585d bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
printf ("error: closing buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
rtems_rfs_shell_unlock_rfs (fs);
237b4: e1a00004 mov r0, r4 <== NOT EXECUTED
handle->dirty = false;
237b8: e3a04000 mov r4, #0 <== NOT EXECUTED
237bc: e5cd4000 strb r4, [sp] <== NOT EXECUTED
handle->bnum = 0;
237c0: e58d4004 str r4, [sp, #4] <== NOT EXECUTED
handle->buffer = NULL;
237c4: e58d4008 str r4, [sp, #8] <== NOT EXECUTED
237c8: ebfffd52 bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
237cc: e1a00004 mov r0, r4 <== NOT EXECUTED
return 0;
237d0: ea000009 b 237fc <rtems_rfs_shell_block+0x180> <== NOT EXECUTED
rtems_rfs_shell_lock_rfs (fs);
rc = rtems_rfs_group_bitmap_test (fs, false, block, &state);
if (rc > 0)
{
rtems_rfs_shell_unlock_rfs (fs);
237d4: e1a00004 mov r0, r4 <== NOT EXECUTED
237d8: ebfffd4e bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: testing block state: block=%" PRIu32 ": (%d) %s\n",
237dc: e1a00006 mov r0, r6 <== NOT EXECUTED
237e0: eb009773 bl 495b4 <strerror> <== NOT EXECUTED
237e4: e1a01005 mov r1, r5 <== NOT EXECUTED
237e8: e1a03000 mov r3, r0 <== NOT EXECUTED
237ec: e1a02006 mov r2, r6 <== NOT EXECUTED
237f0: e59f0080 ldr r0, [pc, #128] ; 23878 <rtems_rfs_shell_block+0x1fc><== NOT EXECUTED
237f4: eb008f5b bl 47568 <printf> <== NOT EXECUTED
237f8: e3a00001 mov r0, #1 <== NOT EXECUTED
}
rtems_rfs_shell_unlock_rfs (fs);
return 0;
}
237fc: e28dd010 add sp, sp, #16 <== NOT EXECUTED
23800: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
{
int mod = b % 16;
if (mod == 0)
{
if (b)
printf ("\n");
23804: e3a0000a mov r0, #10 <== NOT EXECUTED
23808: eb008fcb bl 4773c <putchar> <== NOT EXECUTED
2380c: eaffffcc b 23744 <rtems_rfs_shell_block+0xc8> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
23810: e1a0100d mov r1, sp <== NOT EXECUTED
23814: e1a00004 mov r0, r4 <== NOT EXECUTED
23818: eb005843 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_shell_unlock_rfs (fs);
2381c: e1a00004 mov r0, r4 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
23820: e58d6008 str r6, [sp, #8] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
23824: e5cd6000 strb r6, [sp] <== NOT EXECUTED
handle->bnum = 0;
23828: e58d6004 str r6, [sp, #4] <== NOT EXECUTED
2382c: ebfffd39 bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: requesting buffer handle: block=%" PRIu32 ": (%d) %s\n",
23830: e1a00008 mov r0, r8 <== NOT EXECUTED
23834: eb00975e bl 495b4 <strerror> <== NOT EXECUTED
23838: e1a01005 mov r1, r5 <== NOT EXECUTED
2383c: e1a03000 mov r3, r0 <== NOT EXECUTED
23840: e1a02008 mov r2, r8 <== NOT EXECUTED
23844: e59f0030 ldr r0, [pc, #48] ; 2387c <rtems_rfs_shell_block+0x200><== NOT EXECUTED
23848: eb008f46 bl 47568 <printf> <== NOT EXECUTED
2384c: e3a00001 mov r0, #1 <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
23850: eaffffe9 b 237fc <rtems_rfs_shell_block+0x180> <== NOT EXECUTED
int b;
int rc;
if (argc <= 1)
{
printf ("error: no block number provided\n");
23854: e59f0024 ldr r0, [pc, #36] ; 23880 <rtems_rfs_shell_block+0x204><== NOT EXECUTED
23858: eb008fe7 bl 477fc <puts> <== NOT EXECUTED
2385c: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
23860: eaffffe5 b 237fc <rtems_rfs_shell_block+0x180> <== NOT EXECUTED
00023884 <rtems_rfs_shell_data>:
return rc;
}
static int
rtems_rfs_shell_data (rtems_rfs_file_system* fs, int argc, char *argv[])
{
23884: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
23888: e1a04000 mov r4, r0 <== NOT EXECUTED
2388c: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
size_t blocks;
size_t inodes;
int bpcent;
int ipcent;
printf ("RFS Filesystem Data\n");
23890: e59f01a4 ldr r0, [pc, #420] ; 23a3c <rtems_rfs_shell_data+0x1b8><== NOT EXECUTED
23894: eb008fd8 bl 477fc <puts> <== NOT EXECUTED
printf (" flags: %08" PRIx32 "\n", fs->flags);
23898: e5941000 ldr r1, [r4] <== NOT EXECUTED
2389c: e59f019c ldr r0, [pc, #412] ; 23a40 <rtems_rfs_shell_data+0x1bc><== NOT EXECUTED
238a0: eb008f30 bl 47568 <printf> <== NOT EXECUTED
#if 0
printf (" device: %08lx\n", rtems_rfs_fs_device (fs));
#endif
printf (" blocks: %zu\n", rtems_rfs_fs_blocks (fs));
238a4: e5941004 ldr r1, [r4, #4] <== NOT EXECUTED
238a8: e59f0194 ldr r0, [pc, #404] ; 23a44 <rtems_rfs_shell_data+0x1c0><== NOT EXECUTED
238ac: eb008f2d bl 47568 <printf> <== NOT EXECUTED
printf (" block size: %zu\n", rtems_rfs_fs_block_size (fs));
238b0: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
238b4: e59f018c ldr r0, [pc, #396] ; 23a48 <rtems_rfs_shell_data+0x1c4><== NOT EXECUTED
238b8: eb008f2a bl 47568 <printf> <== NOT EXECUTED
printf (" size: %" PRIu64 "\n", rtems_rfs_fs_size (fs));
238bc: e1a00004 mov r0, r4 <== NOT EXECUTED
238c0: eb005f30 bl 3b588 <rtems_rfs_fs_size> <== NOT EXECUTED
238c4: e1a02001 mov r2, r1 <== NOT EXECUTED
238c8: e1a01000 mov r1, r0 <== NOT EXECUTED
238cc: e59f0178 ldr r0, [pc, #376] ; 23a4c <rtems_rfs_shell_data+0x1c8><== NOT EXECUTED
238d0: eb008f24 bl 47568 <printf> <== NOT EXECUTED
printf (" media block size: %" PRIu32 "\n", rtems_rfs_fs_media_block_size (fs));
238d4: e594300c ldr r3, [r4, #12] <== NOT EXECUTED
238d8: e59f0170 ldr r0, [pc, #368] ; 23a50 <rtems_rfs_shell_data+0x1cc><== NOT EXECUTED
238dc: e5931024 ldr r1, [r3, #36] ; 0x24 <== NOT EXECUTED
238e0: eb008f20 bl 47568 <printf> <== NOT EXECUTED
printf (" media size: %" PRIu64 "\n", rtems_rfs_fs_media_size (fs));
238e4: e1a00004 mov r0, r4 <== NOT EXECUTED
238e8: eb005f2e bl 3b5a8 <rtems_rfs_fs_media_size> <== NOT EXECUTED
238ec: e1a02001 mov r2, r1 <== NOT EXECUTED
238f0: e1a01000 mov r1, r0 <== NOT EXECUTED
238f4: e59f0158 ldr r0, [pc, #344] ; 23a54 <rtems_rfs_shell_data+0x1d0><== NOT EXECUTED
238f8: eb008f1a bl 47568 <printf> <== NOT EXECUTED
printf (" inodes: %" PRIu32 "\n", rtems_rfs_fs_inodes (fs));
238fc: e5941010 ldr r1, [r4, #16] <== NOT EXECUTED
23900: e59f0150 ldr r0, [pc, #336] ; 23a58 <rtems_rfs_shell_data+0x1d4><== NOT EXECUTED
23904: eb008f17 bl 47568 <printf> <== NOT EXECUTED
printf (" bad blocks: %" PRIu32 "\n", fs->bad_blocks);
23908: e5941014 ldr r1, [r4, #20] <== NOT EXECUTED
2390c: e59f0148 ldr r0, [pc, #328] ; 23a5c <rtems_rfs_shell_data+0x1d8><== NOT EXECUTED
23910: eb008f14 bl 47568 <printf> <== NOT EXECUTED
printf (" max. name length: %" PRIu32 "\n", rtems_rfs_fs_max_name (fs));
23914: e5941018 ldr r1, [r4, #24] <== NOT EXECUTED
23918: e59f0140 ldr r0, [pc, #320] ; 23a60 <rtems_rfs_shell_data+0x1dc><== NOT EXECUTED
2391c: eb008f11 bl 47568 <printf> <== NOT EXECUTED
printf (" groups: %d\n", fs->group_count);
23920: e5941020 ldr r1, [r4, #32] <== NOT EXECUTED
23924: e59f0138 ldr r0, [pc, #312] ; 23a64 <rtems_rfs_shell_data+0x1e0><== NOT EXECUTED
23928: eb008f0e bl 47568 <printf> <== NOT EXECUTED
printf (" group blocks: %zd\n", fs->group_blocks);
2392c: e5941024 ldr r1, [r4, #36] ; 0x24 <== NOT EXECUTED
23930: e59f0130 ldr r0, [pc, #304] ; 23a68 <rtems_rfs_shell_data+0x1e4><== NOT EXECUTED
23934: eb008f0b bl 47568 <printf> <== NOT EXECUTED
printf (" group inodes: %zd\n", fs->group_inodes);
23938: e5941028 ldr r1, [r4, #40] ; 0x28 <== NOT EXECUTED
2393c: e59f0128 ldr r0, [pc, #296] ; 23a6c <rtems_rfs_shell_data+0x1e8><== NOT EXECUTED
23940: eb008f08 bl 47568 <printf> <== NOT EXECUTED
printf (" inodes per block: %zd\n", fs->inodes_per_block);
23944: e594102c ldr r1, [r4, #44] ; 0x2c <== NOT EXECUTED
23948: e59f0120 ldr r0, [pc, #288] ; 23a70 <rtems_rfs_shell_data+0x1ec><== NOT EXECUTED
2394c: eb008f05 bl 47568 <printf> <== NOT EXECUTED
printf (" blocks per block: %zd\n", fs->blocks_per_block);
23950: e5941030 ldr r1, [r4, #48] ; 0x30 <== NOT EXECUTED
23954: e59f0118 ldr r0, [pc, #280] ; 23a74 <rtems_rfs_shell_data+0x1f0><== NOT EXECUTED
23958: eb008f02 bl 47568 <printf> <== NOT EXECUTED
printf (" singly blocks: %zd\n", fs->block_map_singly_blocks);
2395c: e5941034 ldr r1, [r4, #52] ; 0x34 <== NOT EXECUTED
23960: e59f0110 ldr r0, [pc, #272] ; 23a78 <rtems_rfs_shell_data+0x1f4><== NOT EXECUTED
23964: eb008eff bl 47568 <printf> <== NOT EXECUTED
printf (" doublly blocks: %zd\n", fs->block_map_doubly_blocks);
23968: e5941038 ldr r1, [r4, #56] ; 0x38 <== NOT EXECUTED
2396c: e59f0108 ldr r0, [pc, #264] ; 23a7c <rtems_rfs_shell_data+0x1f8><== NOT EXECUTED
23970: eb008efc bl 47568 <printf> <== NOT EXECUTED
printf (" max. held buffers: %" PRId32 "\n", fs->max_held_buffers);
23974: e594103c ldr r1, [r4, #60] ; 0x3c <== NOT EXECUTED
23978: e59f0100 ldr r0, [pc, #256] ; 23a80 <rtems_rfs_shell_data+0x1fc><== NOT EXECUTED
2397c: eb008ef9 bl 47568 <printf> <== NOT EXECUTED
23980: e594307c ldr r3, [r4, #124] ; 0x7c <== NOT EXECUTED
23984: e3a01000 mov r1, #0 <== NOT EXECUTED
23988: e5930000 ldr r0, [r3] <== NOT EXECUTED
2398c: e1a02001 mov r2, r1 <== NOT EXECUTED
23990: ebffa2cb bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_shell_lock_rfs (fs);
rtems_rfs_group_usage (fs, &blocks, &inodes);
23994: e1a0200d mov r2, sp <== NOT EXECUTED
23998: e28d1004 add r1, sp, #4 <== NOT EXECUTED
2399c: e1a00004 mov r0, r4 <== NOT EXECUTED
239a0: eb0063e5 bl 3c93c <rtems_rfs_group_usage> <== NOT EXECUTED
rtems_rfs_shell_unlock_rfs (fs);
239a4: e1a00004 mov r0, r4 <== NOT EXECUTED
239a8: ebfffcda bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
bpcent = (blocks * 1000) / rtems_rfs_fs_blocks (fs);
239ac: e59d6004 ldr r6, [sp, #4] <== NOT EXECUTED
239b0: e0860106 add r0, r6, r6, lsl #2 <== NOT EXECUTED
239b4: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
239b8: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
239bc: e5941004 ldr r1, [r4, #4] <== NOT EXECUTED
239c0: e1a00180 lsl r0, r0, #3 <== NOT EXECUTED
239c4: eb00dd47 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
239c8: e1a07000 mov r7, r0 <== NOT EXECUTED
ipcent = (inodes * 1000) / rtems_rfs_fs_inodes (fs);
239cc: e59d0000 ldr r0, [sp] <== NOT EXECUTED
239d0: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
239d4: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
239d8: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
239dc: e5941010 ldr r1, [r4, #16] <== NOT EXECUTED
239e0: e1a00180 lsl r0, r0, #3 <== NOT EXECUTED
239e4: eb00dd3f bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
printf (" blocks used: %zd (%d.%d%%)\n",
239e8: e59f5094 ldr r5, [pc, #148] ; 23a84 <rtems_rfs_shell_data+0x200><== NOT EXECUTED
239ec: e0c23795 smull r3, r2, r5, r7 <== NOT EXECUTED
239f0: e1a03fc7 asr r3, r7, #31 <== NOT EXECUTED
239f4: e0632142 rsb r2, r3, r2, asr #2 <== NOT EXECUTED
239f8: e0823102 add r3, r2, r2, lsl #2 <== NOT EXECUTED
rtems_rfs_group_usage (fs, &blocks, &inodes);
rtems_rfs_shell_unlock_rfs (fs);
bpcent = (blocks * 1000) / rtems_rfs_fs_blocks (fs);
ipcent = (inodes * 1000) / rtems_rfs_fs_inodes (fs);
239fc: e1a04000 mov r4, r0 <== NOT EXECUTED
printf (" blocks used: %zd (%d.%d%%)\n",
23a00: e0473083 sub r3, r7, r3, lsl #1 <== NOT EXECUTED
23a04: e1a01006 mov r1, r6 <== NOT EXECUTED
23a08: e59f0078 ldr r0, [pc, #120] ; 23a88 <rtems_rfs_shell_data+0x204><== NOT EXECUTED
23a0c: eb008ed5 bl 47568 <printf> <== NOT EXECUTED
blocks, bpcent / 10, bpcent % 10);
printf (" inodes used: %zd (%d.%d%%)\n",
23a10: e0c23495 smull r3, r2, r5, r4 <== NOT EXECUTED
23a14: e1a03fc4 asr r3, r4, #31 <== NOT EXECUTED
23a18: e0632142 rsb r2, r3, r2, asr #2 <== NOT EXECUTED
23a1c: e0823102 add r3, r2, r2, lsl #2 <== NOT EXECUTED
23a20: e0443083 sub r3, r4, r3, lsl #1 <== NOT EXECUTED
23a24: e59d1000 ldr r1, [sp] <== NOT EXECUTED
23a28: e59f005c ldr r0, [pc, #92] ; 23a8c <rtems_rfs_shell_data+0x208><== NOT EXECUTED
23a2c: eb008ecd bl 47568 <printf> <== NOT EXECUTED
inodes, ipcent / 10, ipcent % 10);
return 0;
}
23a30: e3a00000 mov r0, #0 <== NOT EXECUTED
23a34: e28dd008 add sp, sp, #8 <== NOT EXECUTED
23a38: e8bd80f0 pop {r4, r5, r6, r7, pc} <== NOT EXECUTED
00023370 <rtems_rfs_shell_dir>:
return 0;
}
static int
rtems_rfs_shell_dir (rtems_rfs_file_system* fs, int argc, char *argv[])
{
23370: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
bool state;
int entry;
int b;
int rc;
if (argc <= 1)
23374: e3510001 cmp r1, #1 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_dir (rtems_rfs_file_system* fs, int argc, char *argv[])
{
23378: e24dd020 sub sp, sp, #32 <== NOT EXECUTED
2337c: e1a07000 mov r7, r0 <== NOT EXECUTED
bool state;
int entry;
int b;
int rc;
if (argc <= 1)
23380: da0000aa ble 23630 <rtems_rfs_shell_dir+0x2c0> <== NOT EXECUTED
{
printf ("error: no block number provided\n");
return 1;
}
block = strtoul (argv[1], 0, 0);
23384: e3a01000 mov r1, #0 <== NOT EXECUTED
23388: e5920004 ldr r0, [r2, #4] <== NOT EXECUTED
2338c: e1a02001 mov r2, r1 <== NOT EXECUTED
23390: eb009f2f bl 4b054 <strtoul> <== NOT EXECUTED
23394: e597307c ldr r3, [r7, #124] ; 0x7c <== NOT EXECUTED
23398: e3a01000 mov r1, #0 <== NOT EXECUTED
2339c: e1a02001 mov r2, r1 <== NOT EXECUTED
233a0: e1a04000 mov r4, r0 <== NOT EXECUTED
233a4: e5930000 ldr r0, [r3] <== NOT EXECUTED
233a8: ebffa445 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
rtems_rfs_shell_lock_rfs (fs);
rc = rtems_rfs_group_bitmap_test (fs, false, block, &state);
233ac: e1a00007 mov r0, r7 <== NOT EXECUTED
233b0: e3a01000 mov r1, #0 <== NOT EXECUTED
233b4: e1a02004 mov r2, r4 <== NOT EXECUTED
233b8: e28d301f add r3, sp, #31 <== NOT EXECUTED
233bc: eb006583 bl 3c9d0 <rtems_rfs_group_bitmap_test> <== NOT EXECUTED
if (rc > 0)
233c0: e2505000 subs r5, r0, #0 <== NOT EXECUTED
233c4: ca00006a bgt 23574 <rtems_rfs_shell_dir+0x204> <== NOT EXECUTED
printf ("error: testing block state: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
printf (" %5" PRIu32 ": block %s\n", block, state ? "allocated" : "free");
233c8: e5dd101f ldrb r1, [sp, #31] <== NOT EXECUTED
233cc: e59f3280 ldr r3, [pc, #640] ; 23654 <rtems_rfs_shell_dir+0x2e4><== NOT EXECUTED
233d0: e3510000 cmp r1, #0 <== NOT EXECUTED
233d4: e59f227c ldr r2, [pc, #636] ; 23658 <rtems_rfs_shell_dir+0x2e8><== NOT EXECUTED
233d8: e1a01004 mov r1, r4 <== NOT EXECUTED
233dc: 01a02003 moveq r2, r3 <== NOT EXECUTED
233e0: e59f0274 ldr r0, [pc, #628] ; 2365c <rtems_rfs_shell_dir+0x2ec><== NOT EXECUTED
233e4: eb00905f bl 47568 <printf> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
233e8: e3a08000 mov r8, #0 <== NOT EXECUTED
printf ("error: opening buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
233ec: e1a00007 mov r0, r7 <== NOT EXECUTED
233f0: e28d1010 add r1, sp, #16 <== NOT EXECUTED
233f4: e1a02004 mov r2, r4 <== NOT EXECUTED
233f8: e3a03001 mov r3, #1 <== NOT EXECUTED
233fc: e5cd8010 strb r8, [sp, #16] <== NOT EXECUTED
handle->bnum = 0;
23400: e58d8014 str r8, [sp, #20] <== NOT EXECUTED
handle->buffer = NULL;
23404: e58d8018 str r8, [sp, #24] <== NOT EXECUTED
23408: eb005991 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
2340c: e2505000 subs r5, r0, #0 <== NOT EXECUTED
23410: ca000075 bgt 235ec <rtems_rfs_shell_dir+0x27c> <== NOT EXECUTED
b = 0;
entry = 1;
data = rtems_rfs_buffer_data (&buffer);
while (b < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE - 1))
23414: e5973008 ldr r3, [r7, #8] <== NOT EXECUTED
23418: e353000b cmp r3, #11 <== NOT EXECUTED
return 1;
}
b = 0;
entry = 1;
data = rtems_rfs_buffer_data (&buffer);
2341c: e59d3018 ldr r3, [sp, #24] <== NOT EXECUTED
23420: e5935020 ldr r5, [r3, #32] <== NOT EXECUTED
while (b < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE - 1))
23424: 0a000065 beq 235c0 <rtems_rfs_shell_dir+0x250> <== NOT EXECUTED
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
elength = rtems_rfs_dir_entry_length (data);
23428: e5d53009 ldrb r3, [r5, #9] <== NOT EXECUTED
2342c: e5d56008 ldrb r6, [r5, #8] <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
23430: e3a0b801 mov fp, #65536 ; 0x10000 <== NOT EXECUTED
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
elength = rtems_rfs_dir_entry_length (data);
23434: e1836406 orr r6, r3, r6, lsl #8 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
23438: e24bb001 sub fp, fp, #1 <== NOT EXECUTED
2343c: e156000b cmp r6, fp <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
23440: e5d50000 ldrb r0, [r5] <== NOT EXECUTED
23444: e5d52001 ldrb r2, [r5, #1] <== NOT EXECUTED
23448: e5d53002 ldrb r3, [r5, #2] <== NOT EXECUTED
2344c: e5d51003 ldrb r1, [r5, #3] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (data);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
23450: 0a00005a beq 235c0 <rtems_rfs_shell_dir+0x250> <== NOT EXECUTED
break;
if ((elength < RTEMS_RFS_DIR_ENTRY_SIZE) ||
23454: e3560009 cmp r6, #9 <== NOT EXECUTED
23458: d3a09001 movle r9, #1 <== NOT EXECUTED
2345c: da000053 ble 235b0 <rtems_rfs_shell_dir+0x240> <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
23460: e1811c00 orr r1, r1, r0, lsl #24 <== NOT EXECUTED
23464: e1812802 orr r2, r1, r2, lsl #16 <== NOT EXECUTED
23468: e1823403 orr r3, r2, r3, lsl #8 <== NOT EXECUTED
2346c: e3a09001 mov r9, #1 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if ((elength < RTEMS_RFS_DIR_ENTRY_SIZE) ||
(elength >= rtems_rfs_fs_max_name (fs)))
23470: e5972018 ldr r2, [r7, #24] <== NOT EXECUTED
23474: e1560002 cmp r6, r2 <== NOT EXECUTED
23478: 2a00004c bcs 235b0 <rtems_rfs_shell_dir+0x240> <== NOT EXECUTED
{
printf (" %5d: entry length appears corrupt: %d\n", entry, elength);
break;
}
if ((eino < RTEMS_RFS_ROOT_INO) || (eino >= rtems_rfs_fs_inodes (fs)))
2347c: e3530000 cmp r3, #0 <== NOT EXECUTED
23480: 0a00006e beq 23640 <rtems_rfs_shell_dir+0x2d0> <== NOT EXECUTED
23484: e5972010 ldr r2, [r7, #16] <== NOT EXECUTED
23488: e1520003 cmp r2, r3 <== NOT EXECUTED
2348c: 9a00006b bls 23640 <rtems_rfs_shell_dir+0x2d0> <== NOT EXECUTED
break;
}
length = elength - RTEMS_RFS_DIR_ENTRY_SIZE;
printf (" %5d: %04x inode=%-6" PRIu32 " hash=%08" PRIx32 " name[%03u]=",
23490: e5d5c005 ldrb ip, [r5, #5] <== NOT EXECUTED
23494: e5d52004 ldrb r2, [r5, #4] <== NOT EXECUTED
23498: e5d51007 ldrb r1, [r5, #7] <== NOT EXECUTED
2349c: e1a0c80c lsl ip, ip, #16 <== NOT EXECUTED
234a0: e18ccc02 orr ip, ip, r2, lsl #24 <== NOT EXECUTED
234a4: e5d52006 ldrb r2, [r5, #6] <== NOT EXECUTED
234a8: e18cc001 orr ip, ip, r1 <== NOT EXECUTED
{
printf (" %5d: entry ino appears corrupt: ino=%" PRId32 "\n", entry, eino);
break;
}
length = elength - RTEMS_RFS_DIR_ENTRY_SIZE;
234ac: e246a00a sub sl, r6, #10 <== NOT EXECUTED
printf (" %5d: %04x inode=%-6" PRIu32 " hash=%08" PRIx32 " name[%03u]=",
234b0: e18cc402 orr ip, ip, r2, lsl #8 <== NOT EXECUTED
234b4: e35a0032 cmp sl, #50 ; 0x32 <== NOT EXECUTED
234b8: b1a0400a movlt r4, sl <== NOT EXECUTED
234bc: a3a04032 movge r4, #50 ; 0x32 <== NOT EXECUTED
234c0: e59f0198 ldr r0, [pc, #408] ; 23660 <rtems_rfs_shell_dir+0x2f0><== NOT EXECUTED
234c4: e1a01009 mov r1, r9 <== NOT EXECUTED
234c8: e1a02008 mov r2, r8 <== NOT EXECUTED
234cc: e58dc000 str ip, [sp] <== NOT EXECUTED
234d0: e58da004 str sl, [sp, #4] <== NOT EXECUTED
234d4: eb009023 bl 47568 <printf> <== NOT EXECUTED
length);
if (length > 50)
length = 50;
for (c = 0; c < length; c++)
234d8: e3540000 cmp r4, #0 <== NOT EXECUTED
234dc: da00000b ble 23510 <rtems_rfs_shell_dir+0x1a0> <== NOT EXECUTED
234e0: e1a02005 mov r2, r5 <== NOT EXECUTED
234e4: e3a03000 mov r3, #0 <== NOT EXECUTED
printf ("%c", data[RTEMS_RFS_DIR_ENTRY_SIZE + c]);
234e8: e5d2000a ldrb r0, [r2, #10] <== NOT EXECUTED
length);
if (length > 50)
length = 50;
for (c = 0; c < length; c++)
234ec: e2833001 add r3, r3, #1 <== NOT EXECUTED
printf ("%c", data[RTEMS_RFS_DIR_ENTRY_SIZE + c]);
234f0: e58d200c str r2, [sp, #12] <== NOT EXECUTED
234f4: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
234f8: eb00908f bl 4773c <putchar> <== NOT EXECUTED
length);
if (length > 50)
length = 50;
for (c = 0; c < length; c++)
234fc: e59d3008 ldr r3, [sp, #8] <== NOT EXECUTED
23500: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
23504: e1540003 cmp r4, r3 <== NOT EXECUTED
23508: e2822001 add r2, r2, #1 <== NOT EXECUTED
2350c: cafffff5 bgt 234e8 <rtems_rfs_shell_dir+0x178> <== NOT EXECUTED
printf ("%c", data[RTEMS_RFS_DIR_ENTRY_SIZE + c]);
if (length < elength - RTEMS_RFS_DIR_ENTRY_SIZE)
23510: e15a0004 cmp sl, r4 <== NOT EXECUTED
23514: ca000022 bgt 235a4 <rtems_rfs_shell_dir+0x234> <== NOT EXECUTED
printf ("...");
printf ("\n");
23518: e3a0000a mov r0, #10 <== NOT EXECUTED
2351c: eb009086 bl 4773c <putchar> <== NOT EXECUTED
b = 0;
entry = 1;
data = rtems_rfs_buffer_data (&buffer);
while (b < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE - 1))
23520: e5973008 ldr r3, [r7, #8] <== NOT EXECUTED
printf ("%c", data[RTEMS_RFS_DIR_ENTRY_SIZE + c]);
if (length < elength - RTEMS_RFS_DIR_ENTRY_SIZE)
printf ("...");
printf ("\n");
b += elength;
23524: e0888006 add r8, r8, r6 <== NOT EXECUTED
b = 0;
entry = 1;
data = rtems_rfs_buffer_data (&buffer);
while (b < (rtems_rfs_fs_block_size (fs) - RTEMS_RFS_DIR_ENTRY_SIZE - 1))
23528: e243300b sub r3, r3, #11 <== NOT EXECUTED
2352c: e1580003 cmp r8, r3 <== NOT EXECUTED
23530: 2a000022 bcs 235c0 <rtems_rfs_shell_dir+0x250> <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
23534: e7f50006 ldrb r0, [r5, r6]! <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (data);
23538: e5d52009 ldrb r2, [r5, #9] <== NOT EXECUTED
2353c: e5d56008 ldrb r6, [r5, #8] <== NOT EXECUTED
23540: e1826406 orr r6, r2, r6, lsl #8 <== NOT EXECUTED
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
23544: e156000b cmp r6, fp <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
23548: e5d51001 ldrb r1, [r5, #1] <== NOT EXECUTED
2354c: e5d52002 ldrb r2, [r5, #2] <== NOT EXECUTED
23550: e5d53003 ldrb r3, [r5, #3] <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (data);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
23554: 0a000019 beq 235c0 <rtems_rfs_shell_dir+0x250> <== NOT EXECUTED
break;
if ((elength < RTEMS_RFS_DIR_ENTRY_SIZE) ||
23558: e3560009 cmp r6, #9 <== NOT EXECUTED
printf ("...");
printf ("\n");
b += elength;
data += elength;
entry++;
2355c: e2899001 add r9, r9, #1 <== NOT EXECUTED
elength = rtems_rfs_dir_entry_length (data);
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
if ((elength < RTEMS_RFS_DIR_ENTRY_SIZE) ||
23560: da000012 ble 235b0 <rtems_rfs_shell_dir+0x240> <== NOT EXECUTED
rtems_rfs_ino eino;
int elength;
int length;
int c;
eino = rtems_rfs_dir_entry_ino (data);
23564: e1833c00 orr r3, r3, r0, lsl #24 <== NOT EXECUTED
23568: e1833801 orr r3, r3, r1, lsl #16 <== NOT EXECUTED
2356c: e1833402 orr r3, r3, r2, lsl #8 <== NOT EXECUTED
23570: eaffffbe b 23470 <rtems_rfs_shell_dir+0x100> <== NOT EXECUTED
rtems_rfs_shell_lock_rfs (fs);
rc = rtems_rfs_group_bitmap_test (fs, false, block, &state);
if (rc > 0)
{
rtems_rfs_shell_unlock_rfs (fs);
23574: e1a00007 mov r0, r7 <== NOT EXECUTED
23578: ebfffde6 bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: testing block state: block=%" PRIu32 ": (%d) %s\n",
2357c: e1a00005 mov r0, r5 <== NOT EXECUTED
23580: eb00980b bl 495b4 <strerror> <== NOT EXECUTED
23584: e1a01004 mov r1, r4 <== NOT EXECUTED
23588: e1a03000 mov r3, r0 <== NOT EXECUTED
2358c: e1a02005 mov r2, r5 <== NOT EXECUTED
23590: e59f00cc ldr r0, [pc, #204] ; 23664 <rtems_rfs_shell_dir+0x2f4><== NOT EXECUTED
23594: eb008ff3 bl 47568 <printf> <== NOT EXECUTED
23598: e3a00001 mov r0, #1 <== NOT EXECUTED
}
rtems_rfs_shell_unlock_rfs (fs);
return 0;
}
2359c: e28dd020 add sp, sp, #32 <== NOT EXECUTED
235a0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
length = 50;
for (c = 0; c < length; c++)
printf ("%c", data[RTEMS_RFS_DIR_ENTRY_SIZE + c]);
if (length < elength - RTEMS_RFS_DIR_ENTRY_SIZE)
printf ("...");
235a4: e59f00bc ldr r0, [pc, #188] ; 23668 <rtems_rfs_shell_dir+0x2f8><== NOT EXECUTED
235a8: eb008fee bl 47568 <printf> <== NOT EXECUTED
235ac: eaffffd9 b 23518 <rtems_rfs_shell_dir+0x1a8> <== NOT EXECUTED
break;
if ((elength < RTEMS_RFS_DIR_ENTRY_SIZE) ||
(elength >= rtems_rfs_fs_max_name (fs)))
{
printf (" %5d: entry length appears corrupt: %d\n", entry, elength);
235b0: e1a01009 mov r1, r9 <== NOT EXECUTED
235b4: e1a02006 mov r2, r6 <== NOT EXECUTED
235b8: e59f00ac ldr r0, [pc, #172] ; 2366c <rtems_rfs_shell_dir+0x2fc><== NOT EXECUTED
235bc: eb008fe9 bl 47568 <printf> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
235c0: e28d1010 add r1, sp, #16 <== NOT EXECUTED
235c4: e1a00007 mov r0, r7 <== NOT EXECUTED
235c8: eb0058d7 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
handle->dirty = false;
235cc: e3a04000 mov r4, #0 <== NOT EXECUTED
printf ("error: closing buffer handle: block=%" PRIu32 ": (%d) %s\n",
block, rc, strerror (rc));
return 1;
}
rtems_rfs_shell_unlock_rfs (fs);
235d0: e1a00007 mov r0, r7 <== NOT EXECUTED
235d4: e5cd4010 strb r4, [sp, #16] <== NOT EXECUTED
handle->bnum = 0;
235d8: e58d4014 str r4, [sp, #20] <== NOT EXECUTED
handle->buffer = NULL;
235dc: e58d4018 str r4, [sp, #24] <== NOT EXECUTED
235e0: ebfffdcc bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
235e4: e1a00004 mov r0, r4 <== NOT EXECUTED
return 0;
235e8: eaffffeb b 2359c <rtems_rfs_shell_dir+0x22c> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
235ec: e28d1010 add r1, sp, #16 <== NOT EXECUTED
235f0: e1a00007 mov r0, r7 <== NOT EXECUTED
235f4: eb0058cc bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, true);
if (rc > 0)
{
rtems_rfs_buffer_handle_close (fs, &buffer);
rtems_rfs_shell_unlock_rfs (fs);
235f8: e1a00007 mov r0, r7 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
235fc: e58d8018 str r8, [sp, #24] <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
23600: e5cd8010 strb r8, [sp, #16] <== NOT EXECUTED
handle->bnum = 0;
23604: e58d8014 str r8, [sp, #20] <== NOT EXECUTED
23608: ebfffdc2 bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: requesting buffer handle: block=%" PRIu32 ": (%d) %s\n",
2360c: e1a00005 mov r0, r5 <== NOT EXECUTED
23610: eb0097e7 bl 495b4 <strerror> <== NOT EXECUTED
23614: e1a01004 mov r1, r4 <== NOT EXECUTED
23618: e1a03000 mov r3, r0 <== NOT EXECUTED
2361c: e1a02005 mov r2, r5 <== NOT EXECUTED
23620: e59f0048 ldr r0, [pc, #72] ; 23670 <rtems_rfs_shell_dir+0x300><== NOT EXECUTED
23624: eb008fcf bl 47568 <printf> <== NOT EXECUTED
23628: e3a00001 mov r0, #1 <== NOT EXECUTED
block, rc, strerror (rc));
return 1;
2362c: eaffffda b 2359c <rtems_rfs_shell_dir+0x22c> <== NOT EXECUTED
int b;
int rc;
if (argc <= 1)
{
printf ("error: no block number provided\n");
23630: e59f003c ldr r0, [pc, #60] ; 23674 <rtems_rfs_shell_dir+0x304><== NOT EXECUTED
23634: eb009070 bl 477fc <puts> <== NOT EXECUTED
23638: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
2363c: eaffffd6 b 2359c <rtems_rfs_shell_dir+0x22c> <== NOT EXECUTED
break;
}
if ((eino < RTEMS_RFS_ROOT_INO) || (eino >= rtems_rfs_fs_inodes (fs)))
{
printf (" %5d: entry ino appears corrupt: ino=%" PRId32 "\n", entry, eino);
23640: e1a01009 mov r1, r9 <== NOT EXECUTED
23644: e1a02003 mov r2, r3 <== NOT EXECUTED
23648: e59f0028 ldr r0, [pc, #40] ; 23678 <rtems_rfs_shell_dir+0x308><== NOT EXECUTED
2364c: eb008fc5 bl 47568 <printf> <== NOT EXECUTED
break;
23650: eaffffda b 235c0 <rtems_rfs_shell_dir+0x250> <== NOT EXECUTED
000231d8 <rtems_rfs_shell_group>:
return 0;
}
static int
rtems_rfs_shell_group (rtems_rfs_file_system* fs, int argc, char *argv[])
{
231d8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
int g;
start = 0;
end = fs->group_count - 1;
switch (argc)
231dc: e3510002 cmp r1, #2 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_group (rtems_rfs_file_system* fs, int argc, char *argv[])
{
231e0: e24dd010 sub sp, sp, #16 <== NOT EXECUTED
231e4: e1a06000 mov r6, r0 <== NOT EXECUTED
231e8: e1a05002 mov r5, r2 <== NOT EXECUTED
int start;
int end;
int g;
start = 0;
end = fs->group_count - 1;
231ec: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
switch (argc)
231f0: 0a000025 beq 2328c <rtems_rfs_shell_group+0xb4> <== NOT EXECUTED
231f4: e3510003 cmp r1, #3 <== NOT EXECUTED
231f8: 0a000015 beq 23254 <rtems_rfs_shell_group+0x7c> <== NOT EXECUTED
231fc: e3510001 cmp r1, #1 <== NOT EXECUTED
23200: 0a000004 beq 23218 <rtems_rfs_shell_group+0x40> <== NOT EXECUTED
case 3:
start = strtoul (argv[1], 0, 0);
end = strtoul (argv[2], 0, 0);
break;
default:
printf ("error: too many arguments.\n");
23204: e59f0158 ldr r0, [pc, #344] ; 23364 <rtems_rfs_shell_group+0x18c><== NOT EXECUTED
23208: eb00917b bl 477fc <puts> <== NOT EXECUTED
2320c: e3a00001 mov r0, #1 <== NOT EXECUTED
}
rtems_rfs_shell_unlock_rfs (fs);
return 0;
}
23210: e28dd010 add sp, sp, #16 <== NOT EXECUTED
23214: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
int start;
int end;
int g;
start = 0;
end = fs->group_count - 1;
23218: e2437001 sub r7, r3, #1 <== NOT EXECUTED
2321c: e3a02000 mov r2, #0 <== NOT EXECUTED
23220: e1a01fa7 lsr r1, r7, #31 <== NOT EXECUTED
23224: e1a04002 mov r4, r2 <== NOT EXECUTED
default:
printf ("error: too many arguments.\n");
return 1;
}
if ((start < 0) || (end < 0) ||
23228: e1911002 orrs r1, r1, r2 <== NOT EXECUTED
2322c: 1a000003 bne 23240 <rtems_rfs_shell_group+0x68> <== NOT EXECUTED
23230: e1540003 cmp r4, r3 <== NOT EXECUTED
23234: aa000001 bge 23240 <rtems_rfs_shell_group+0x68> <== NOT EXECUTED
23238: e1570003 cmp r7, r3 <== NOT EXECUTED
2323c: ba00001c blt 232b4 <rtems_rfs_shell_group+0xdc> <== NOT EXECUTED
(start >= fs->group_count) || (end >= fs->group_count))
{
printf ("error: group out of range (0->%d).\n", fs->group_count);
23240: e1a01003 mov r1, r3 <== NOT EXECUTED
23244: e59f011c ldr r0, [pc, #284] ; 23368 <rtems_rfs_shell_group+0x190><== NOT EXECUTED
23248: eb0090c6 bl 47568 <printf> <== NOT EXECUTED
2324c: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
23250: eaffffee b 23210 <rtems_rfs_shell_group+0x38> <== NOT EXECUTED
break;
case 2:
start = end = strtoul (argv[1], 0, 0);
break;
case 3:
start = strtoul (argv[1], 0, 0);
23254: e3a01000 mov r1, #0 <== NOT EXECUTED
23258: e1a02001 mov r2, r1 <== NOT EXECUTED
2325c: e5950004 ldr r0, [r5, #4] <== NOT EXECUTED
23260: eb009f7b bl 4b054 <strtoul> <== NOT EXECUTED
end = strtoul (argv[2], 0, 0);
23264: e3a01000 mov r1, #0 <== NOT EXECUTED
23268: e1a02001 mov r2, r1 <== NOT EXECUTED
break;
case 2:
start = end = strtoul (argv[1], 0, 0);
break;
case 3:
start = strtoul (argv[1], 0, 0);
2326c: e1a04000 mov r4, r0 <== NOT EXECUTED
end = strtoul (argv[2], 0, 0);
23270: e5950008 ldr r0, [r5, #8] <== NOT EXECUTED
23274: eb009f76 bl 4b054 <strtoul> <== NOT EXECUTED
23278: e1a02fa4 lsr r2, r4, #31 <== NOT EXECUTED
2327c: e1a07000 mov r7, r0 <== NOT EXECUTED
23280: e1a01fa0 lsr r1, r0, #31 <== NOT EXECUTED
23284: e5963020 ldr r3, [r6, #32] <== NOT EXECUTED
break;
23288: eaffffe6 b 23228 <rtems_rfs_shell_group+0x50> <== NOT EXECUTED
switch (argc)
{
case 1:
break;
case 2:
start = end = strtoul (argv[1], 0, 0);
2328c: e3a01000 mov r1, #0 <== NOT EXECUTED
23290: e5920004 ldr r0, [r2, #4] <== NOT EXECUTED
23294: e1a02001 mov r2, r1 <== NOT EXECUTED
23298: eb009f6d bl 4b054 <strtoul> <== NOT EXECUTED
2329c: e1a02fa0 lsr r2, r0, #31 <== NOT EXECUTED
232a0: e1a07000 mov r7, r0 <== NOT EXECUTED
232a4: e5963020 ldr r3, [r6, #32] <== NOT EXECUTED
232a8: e1a01002 mov r1, r2 <== NOT EXECUTED
232ac: e1a04000 mov r4, r0 <== NOT EXECUTED
break;
232b0: eaffffdc b 23228 <rtems_rfs_shell_group+0x50> <== NOT EXECUTED
232b4: e596307c ldr r3, [r6, #124] ; 0x7c <== NOT EXECUTED
232b8: e1a02001 mov r2, r1 <== NOT EXECUTED
232bc: e5930000 ldr r0, [r3] <== NOT EXECUTED
232c0: ebffa47f bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
return 1;
}
rtems_rfs_shell_lock_rfs (fs);
for (g = start; g <= end; g++)
232c4: e1540007 cmp r4, r7 <== NOT EXECUTED
232c8: ca000021 bgt 23354 <rtems_rfs_shell_group+0x17c> <== NOT EXECUTED
232cc: e0845104 add r5, r4, r4, lsl #2 <== NOT EXECUTED
232d0: e1a05205 lsl r5, r5, #4 <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
232d4: e596201c ldr r2, [r6, #28] <== NOT EXECUTED
232d8: e0821005 add r1, r2, r5 <== NOT EXECUTED
size_t blocks;
size_t inodes;
blocks = group->size - rtems_rfs_bitmap_map_free (&group->block_bitmap);
232dc: e5918004 ldr r8, [r1, #4] <== NOT EXECUTED
232e0: e5913018 ldr r3, [r1, #24] <== NOT EXECUTED
232e4: e0633008 rsb r3, r3, r8 <== NOT EXECUTED
inodes = fs->group_inodes - rtems_rfs_bitmap_map_free (&group->inode_bitmap);
printf (" %4d: base=%-7" PRIu32 " size=%-6zu blocks=%-5zu (%3zu%%) inode=%-5zu (%3zu%%)\n",
232e8: e0830103 add r0, r3, r3, lsl #2 <== NOT EXECUTED
232ec: e0800100 add r0, r0, r0, lsl #2 <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
size_t blocks;
size_t inodes;
blocks = group->size - rtems_rfs_bitmap_map_free (&group->block_bitmap);
inodes = fs->group_inodes - rtems_rfs_bitmap_map_free (&group->inode_bitmap);
232f0: e591a03c ldr sl, [r1, #60] ; 0x3c <== NOT EXECUTED
printf (" %4d: base=%-7" PRIu32 " size=%-6zu blocks=%-5zu (%3zu%%) inode=%-5zu (%3zu%%)\n",
232f4: e1a00100 lsl r0, r0, #2 <== NOT EXECUTED
232f8: e1a01008 mov r1, r8 <== NOT EXECUTED
232fc: e792b005 ldr fp, [r2, r5] <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
size_t blocks;
size_t inodes;
blocks = group->size - rtems_rfs_bitmap_map_free (&group->block_bitmap);
inodes = fs->group_inodes - rtems_rfs_bitmap_map_free (&group->inode_bitmap);
23300: e5969028 ldr r9, [r6, #40] ; 0x28 <== NOT EXECUTED
printf (" %4d: base=%-7" PRIu32 " size=%-6zu blocks=%-5zu (%3zu%%) inode=%-5zu (%3zu%%)\n",
23304: e58d3000 str r3, [sp] <== NOT EXECUTED
23308: eb00def6 bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
{
rtems_rfs_group* group = &fs->groups[g];
size_t blocks;
size_t inodes;
blocks = group->size - rtems_rfs_bitmap_map_free (&group->block_bitmap);
inodes = fs->group_inodes - rtems_rfs_bitmap_map_free (&group->inode_bitmap);
2330c: e06aa009 rsb sl, sl, r9 <== NOT EXECUTED
printf (" %4d: base=%-7" PRIu32 " size=%-6zu blocks=%-5zu (%3zu%%) inode=%-5zu (%3zu%%)\n",
23310: e08a310a add r3, sl, sl, lsl #2 <== NOT EXECUTED
23314: e0833103 add r3, r3, r3, lsl #2 <== NOT EXECUTED
23318: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
2331c: e1a01009 mov r1, r9 <== NOT EXECUTED
23320: e1a00103 lsl r0, r3, #2 <== NOT EXECUTED
23324: e58da008 str sl, [sp, #8] <== NOT EXECUTED
23328: eb00deee bl 5aee8 <__aeabi_uidiv> <== NOT EXECUTED
2332c: e1a01004 mov r1, r4 <== NOT EXECUTED
23330: e58d000c str r0, [sp, #12] <== NOT EXECUTED
23334: e1a0200b mov r2, fp <== NOT EXECUTED
23338: e1a03008 mov r3, r8 <== NOT EXECUTED
return 1;
}
rtems_rfs_shell_lock_rfs (fs);
for (g = start; g <= end; g++)
2333c: e2844001 add r4, r4, #1 <== NOT EXECUTED
rtems_rfs_group* group = &fs->groups[g];
size_t blocks;
size_t inodes;
blocks = group->size - rtems_rfs_bitmap_map_free (&group->block_bitmap);
inodes = fs->group_inodes - rtems_rfs_bitmap_map_free (&group->inode_bitmap);
printf (" %4d: base=%-7" PRIu32 " size=%-6zu blocks=%-5zu (%3zu%%) inode=%-5zu (%3zu%%)\n",
23340: e59f0024 ldr r0, [pc, #36] ; 2336c <rtems_rfs_shell_group+0x194><== NOT EXECUTED
23344: eb009087 bl 47568 <printf> <== NOT EXECUTED
return 1;
}
rtems_rfs_shell_lock_rfs (fs);
for (g = start; g <= end; g++)
23348: e1570004 cmp r7, r4 <== NOT EXECUTED
2334c: e2855050 add r5, r5, #80 ; 0x50 <== NOT EXECUTED
23350: aaffffdf bge 232d4 <rtems_rfs_shell_group+0xfc> <== NOT EXECUTED
g, group->base, group->size,
blocks, (blocks * 100) / group->size,
inodes, (inodes * 100) / fs->group_inodes);
}
rtems_rfs_shell_unlock_rfs (fs);
23354: e1a00006 mov r0, r6 <== NOT EXECUTED
23358: ebfffe6e bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
2335c: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
23360: eaffffaa b 23210 <rtems_rfs_shell_group+0x38> <== NOT EXECUTED
00022d30 <rtems_rfs_shell_inode>:
return 0;
}
static int
rtems_rfs_shell_inode (rtems_rfs_file_system* fs, int argc, char *argv[])
{
22d30: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
bool have_end;
int arg;
int b;
int rc;
total = fs->group_inodes * fs->group_count;
22d34: e5903020 ldr r3, [r0, #32] <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_inode (rtems_rfs_file_system* fs, int argc, char *argv[])
{
22d38: e1a05000 mov r5, r0 <== NOT EXECUTED
bool have_end;
int arg;
int b;
int rc;
total = fs->group_inodes * fs->group_count;
22d3c: e5900028 ldr r0, [r0, #40] ; 0x28 <== NOT EXECUTED
22d40: e0030390 mul r3, r0, r3 <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_inode (rtems_rfs_file_system* fs, int argc, char *argv[])
{
22d44: e24dd04c sub sp, sp, #76 ; 0x4c <== NOT EXECUTED
int b;
int rc;
total = fs->group_inodes * fs->group_count;
start = RTEMS_RFS_ROOT_INO;
end = total - 1;
22d48: e2430001 sub r0, r3, #1 <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
22d4c: e3510001 cmp r1, #1 <== NOT EXECUTED
bool have_end;
int arg;
int b;
int rc;
total = fs->group_inodes * fs->group_count;
22d50: e58d300c str r3, [sp, #12] <== NOT EXECUTED
return 0;
}
static int
rtems_rfs_shell_inode (rtems_rfs_file_system* fs, int argc, char *argv[])
{
22d54: e1a08001 mov r8, r1 <== NOT EXECUTED
22d58: e1a09002 mov r9, r2 <== NOT EXECUTED
int b;
int rc;
total = fs->group_inodes * fs->group_count;
start = RTEMS_RFS_ROOT_INO;
end = total - 1;
22d5c: e58d001c str r0, [sp, #28] <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
22d60: da000104 ble 23178 <rtems_rfs_shell_inode+0x448> <== NOT EXECUTED
22d64: e3a07000 mov r7, #0 <== NOT EXECUTED
22d68: e3a04001 mov r4, #1 <== NOT EXECUTED
22d6c: e59d601c ldr r6, [sp, #28] <== NOT EXECUTED
22d70: e1a0a007 mov sl, r7 <== NOT EXECUTED
22d74: e58d7018 str r7, [sp, #24] <== NOT EXECUTED
22d78: e58d7014 str r7, [sp, #20] <== NOT EXECUTED
22d7c: e1a0b007 mov fp, r7 <== NOT EXECUTED
22d80: e58d4010 str r4, [sp, #16] <== NOT EXECUTED
22d84: ea00000a b 22db4 <rtems_rfs_shell_inode+0x84> <== NOT EXECUTED
break;
}
}
else
{
if (have_end && have_start)
22d88: e35a0000 cmp sl, #0 <== NOT EXECUTED
22d8c: 1a0000c2 bne 2309c <rtems_rfs_shell_inode+0x36c> <== NOT EXECUTED
printf ("warning: option ignored: %s\n", argv[arg]);
else if (!have_start)
{
start = end = strtoul (argv[arg], 0, 0);
22d90: e3a01000 mov r1, #0 <== NOT EXECUTED
22d94: e1a02001 mov r2, r1 <== NOT EXECUTED
22d98: eb00a0ad bl 4b054 <strtoul> <== NOT EXECUTED
22d9c: e58d0010 str r0, [sp, #16] <== NOT EXECUTED
22da0: e1a06000 mov r6, r0 <== NOT EXECUTED
22da4: e3a0a001 mov sl, #1 <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
22da8: e2844001 add r4, r4, #1 <== NOT EXECUTED
22dac: e1580004 cmp r8, r4 <== NOT EXECUTED
22db0: da00000f ble 22df4 <rtems_rfs_shell_inode+0xc4> <== NOT EXECUTED
{
if (argv[arg][0] == '-')
22db4: e7990104 ldr r0, [r9, r4, lsl #2] <== NOT EXECUTED
22db8: e5d03000 ldrb r3, [r0] <== NOT EXECUTED
22dbc: e353002d cmp r3, #45 ; 0x2d <== NOT EXECUTED
22dc0: 0a0000aa beq 23070 <rtems_rfs_shell_inode+0x340> <== NOT EXECUTED
break;
}
}
else
{
if (have_end && have_start)
22dc4: e3570000 cmp r7, #0 <== NOT EXECUTED
22dc8: 1affffee bne 22d88 <rtems_rfs_shell_inode+0x58> <== NOT EXECUTED
printf ("warning: option ignored: %s\n", argv[arg]);
else if (!have_start)
22dcc: e35a0000 cmp sl, #0 <== NOT EXECUTED
22dd0: 0affffee beq 22d90 <rtems_rfs_shell_inode+0x60> <== NOT EXECUTED
start = end = strtoul (argv[arg], 0, 0);
have_start = true;
}
else
{
end = strtoul (argv[arg], 0, 0);
22dd4: e1a01007 mov r1, r7 <== NOT EXECUTED
22dd8: e1a02007 mov r2, r7 <== NOT EXECUTED
22ddc: eb00a09c bl 4b054 <strtoul> <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
22de0: e2844001 add r4, r4, #1 <== NOT EXECUTED
22de4: e1580004 cmp r8, r4 <== NOT EXECUTED
start = end = strtoul (argv[arg], 0, 0);
have_start = true;
}
else
{
end = strtoul (argv[arg], 0, 0);
22de8: e1a06000 mov r6, r0 <== NOT EXECUTED
22dec: e3a07001 mov r7, #1 <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
22df0: caffffef bgt 22db4 <rtems_rfs_shell_inode+0x84> <== NOT EXECUTED
have_end = true;
}
}
}
if ((start >= total) || (end >= total))
22df4: e28d200c add r2, sp, #12 <== NOT EXECUTED
22df8: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
22dfc: e1530002 cmp r3, r2 <== NOT EXECUTED
22e00: 31560002 cmpcc r6, r2 <== NOT EXECUTED
22e04: 33a01000 movcc r1, #0 <== NOT EXECUTED
22e08: 23a01001 movcs r1, #1 <== NOT EXECUTED
22e0c: 2a0000bb bcs 23100 <rtems_rfs_shell_inode+0x3d0> <== NOT EXECUTED
*/
static inline int
rtems_rfs_mutex_lock (rtems_rfs_mutex* mutex)
{
#if __rtems__
rtems_status_code sc = rtems_semaphore_obtain (*mutex, RTEMS_WAIT, 0);
22e10: e595307c ldr r3, [r5, #124] ; 0x7c <== NOT EXECUTED
22e14: e1a02001 mov r2, r1 <== NOT EXECUTED
22e18: e5930000 ldr r0, [r3] <== NOT EXECUTED
22e1c: ebffa5a8 bl c4c4 <rtems_semaphore_obtain> <== NOT EXECUTED
return 1;
}
rtems_rfs_shell_lock_rfs (fs);
for (ino = start; ino <= end; ino++)
22e20: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
22e24: e1530006 cmp r3, r6 <== NOT EXECUTED
22e28: 8a00008c bhi 23060 <rtems_rfs_shell_inode+0x330> <== NOT EXECUTED
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
if (links == 0xffff)
22e2c: e3a00801 mov r0, #65536 ; 0x10000 <== NOT EXECUTED
22e30: e2400001 sub r0, r0, #1 <== NOT EXECUTED
22e34: e58d000c str r0, [sp, #12] <== NOT EXECUTED
22e38: e1a04003 mov r4, r3 <== NOT EXECUTED
22e3c: e28da04b add sl, sp, #75 ; 0x4b <== NOT EXECUTED
if (show_all || allocated)
{
uint16_t mode;
bool error;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
22e40: e28d8020 add r8, sp, #32 <== NOT EXECUTED
22e44: e1a09006 mov r9, r6 <== NOT EXECUTED
for (ino = start; ino <= end; ino++)
{
rtems_rfs_inode_handle inode;
bool allocated;
rc = rtems_rfs_group_bitmap_test (fs, true, ino, &allocated);
22e48: e1a00005 mov r0, r5 <== NOT EXECUTED
22e4c: e3a01001 mov r1, #1 <== NOT EXECUTED
22e50: e1a02004 mov r2, r4 <== NOT EXECUTED
22e54: e1a0300a mov r3, sl <== NOT EXECUTED
22e58: eb0066dc bl 3c9d0 <rtems_rfs_group_bitmap_test> <== NOT EXECUTED
if (rc > 0)
22e5c: e3500000 cmp r0, #0 <== NOT EXECUTED
22e60: ca0000ac bgt 23118 <rtems_rfs_shell_inode+0x3e8> <== NOT EXECUTED
printf ("error: testing inode state: ino=%" PRIu32 ": (%d) %s\n",
ino, rc, strerror (rc));
return 1;
}
if (show_all || allocated)
22e64: e35b0000 cmp fp, #0 <== NOT EXECUTED
22e68: 1a000002 bne 22e78 <rtems_rfs_shell_inode+0x148> <== NOT EXECUTED
22e6c: e5dd304b ldrb r3, [sp, #75] ; 0x4b <== NOT EXECUTED
22e70: e3530000 cmp r3, #0 <== NOT EXECUTED
22e74: 0a000076 beq 23054 <rtems_rfs_shell_inode+0x324> <== NOT EXECUTED
{
uint16_t mode;
bool error;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
22e78: e1a00005 mov r0, r5 <== NOT EXECUTED
22e7c: e1a01004 mov r1, r4 <== NOT EXECUTED
22e80: e1a02008 mov r2, r8 <== NOT EXECUTED
22e84: e3a03001 mov r3, #1 <== NOT EXECUTED
22e88: eb0068f5 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
22e8c: e3500000 cmp r0, #0 <== NOT EXECUTED
22e90: ca0000ac bgt 23148 <rtems_rfs_shell_inode+0x418> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
22e94: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
error = false;
mode = rtems_rfs_inode_get_mode (&inode);
if (error_check_only)
22e98: e59d1014 ldr r1, [sp, #20] <== NOT EXECUTED
22e9c: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
22ea0: e5d36002 ldrb r6, [r3, #2] <== NOT EXECUTED
22ea4: e3510000 cmp r1, #0 <== NOT EXECUTED
22ea8: e1826406 orr r6, r2, r6, lsl #8 <== NOT EXECUTED
22eac: 0a000009 beq 22ed8 <rtems_rfs_shell_inode+0x1a8> <== NOT EXECUTED
{
if (!RTEMS_RFS_S_ISDIR (mode) &&
22eb0: e2063a0f and r3, r6, #61440 ; 0xf000 <== NOT EXECUTED
22eb4: e3530a02 cmp r3, #8192 ; 0x2000 <== NOT EXECUTED
22eb8: 13530901 cmpne r3, #16384 ; 0x4000 <== NOT EXECUTED
22ebc: 0a00005f beq 23040 <rtems_rfs_shell_inode+0x310> <== NOT EXECUTED
22ec0: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
22ec4: 0a00005d beq 23040 <rtems_rfs_shell_inode+0x310> <== NOT EXECUTED
22ec8: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
22ecc: 0a00005b beq 23040 <rtems_rfs_shell_inode+0x310> <== NOT EXECUTED
}
#endif
}
}
if (!error_check_only || error)
22ed0: e3530a0a cmp r3, #40960 ; 0xa000 <== NOT EXECUTED
22ed4: 0a000059 beq 23040 <rtems_rfs_shell_inode+0x310> <== NOT EXECUTED
{
printf (" %5" PRIu32 ": pos=%06" PRIu32 ":%04zx %c ",
22ed8: e5ddc04b ldrb ip, [sp, #75] ; 0x4b <== NOT EXECUTED
22edc: e59d3040 ldr r3, [sp, #64] ; 0x40 <== NOT EXECUTED
22ee0: e35c0000 cmp ip, #0 <== NOT EXECUTED
22ee4: e1a02303 lsl r2, r3, #6 <== NOT EXECUTED
22ee8: 13a0c041 movne ip, #65 ; 0x41 <== NOT EXECUTED
22eec: 03a0c046 moveq ip, #70 ; 0x46 <== NOT EXECUTED
22ef0: e0423183 sub r3, r2, r3, lsl #3 <== NOT EXECUTED
22ef4: e59f029c ldr r0, [pc, #668] ; 23198 <rtems_rfs_shell_inode+0x468><== NOT EXECUTED
22ef8: e59d2034 ldr r2, [sp, #52] ; 0x34 <== NOT EXECUTED
22efc: e1a01004 mov r1, r4 <== NOT EXECUTED
22f00: e58dc000 str ip, [sp] <== NOT EXECUTED
22f04: eb009197 bl 47568 <printf> <== NOT EXECUTED
ino, rtems_rfs_buffer_bnum (&inode.buffer),
inode.offset * RTEMS_RFS_INODE_SIZE,
allocated ? 'A' : 'F');
if (!allocated && !forced)
22f08: e5dd304b ldrb r3, [sp, #75] ; 0x4b <== NOT EXECUTED
22f0c: e3530000 cmp r3, #0 <== NOT EXECUTED
22f10: 1a000002 bne 22f20 <rtems_rfs_shell_inode+0x1f0> <== NOT EXECUTED
22f14: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
22f18: e3520000 cmp r2, #0 <== NOT EXECUTED
22f1c: 0a000064 beq 230b4 <rtems_rfs_shell_inode+0x384> <== NOT EXECUTED
printf (" --\n");
else
{
const char* type;
type = "UKN";
if (RTEMS_RFS_S_ISDIR (mode))
22f20: e2063a0f and r3, r6, #61440 ; 0xf000 <== NOT EXECUTED
22f24: e3530901 cmp r3, #16384 ; 0x4000 <== NOT EXECUTED
22f28: 059f326c ldreq r3, [pc, #620] ; 2319c <rtems_rfs_shell_inode+0x46c><== NOT EXECUTED
22f2c: 0a00000d beq 22f68 <rtems_rfs_shell_inode+0x238> <== NOT EXECUTED
type = "DIR";
else if (RTEMS_RFS_S_ISCHR (mode))
22f30: e3530a02 cmp r3, #8192 ; 0x2000 <== NOT EXECUTED
22f34: 059f3264 ldreq r3, [pc, #612] ; 231a0 <rtems_rfs_shell_inode+0x470><== NOT EXECUTED
22f38: 0a00000a beq 22f68 <rtems_rfs_shell_inode+0x238> <== NOT EXECUTED
type = "CHR";
else if (RTEMS_RFS_S_ISBLK (mode))
22f3c: e3530a06 cmp r3, #24576 ; 0x6000 <== NOT EXECUTED
22f40: 059f325c ldreq r3, [pc, #604] ; 231a4 <rtems_rfs_shell_inode+0x474><== NOT EXECUTED
22f44: 0a000007 beq 22f68 <rtems_rfs_shell_inode+0x238> <== NOT EXECUTED
type = "BLK";
else if (RTEMS_RFS_S_ISREG (mode))
22f48: e3530902 cmp r3, #32768 ; 0x8000 <== NOT EXECUTED
22f4c: 059f3254 ldreq r3, [pc, #596] ; 231a8 <rtems_rfs_shell_inode+0x478><== NOT EXECUTED
22f50: 0a000004 beq 22f68 <rtems_rfs_shell_inode+0x238> <== NOT EXECUTED
type = "REG";
else if (RTEMS_RFS_S_ISLNK (mode))
22f54: e59f1250 ldr r1, [pc, #592] ; 231ac <rtems_rfs_shell_inode+0x47c><== NOT EXECUTED
22f58: e59f0250 ldr r0, [pc, #592] ; 231b0 <rtems_rfs_shell_inode+0x480><== NOT EXECUTED
22f5c: e3530a0a cmp r3, #40960 ; 0xa000 <== NOT EXECUTED
22f60: 01a00001 moveq r0, r1 <== NOT EXECUTED
22f64: e1a03000 mov r3, r0 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
22f68: e59d002c ldr r0, [sp, #44] ; 0x2c <== NOT EXECUTED
type = "LNK";
printf ("links=%03i mode=%04x (%s/%03o) bo=%04u bc=%04" PRIu32 " b=[",
22f6c: e1a02b06 lsl r2, r6, #22 <== NOT EXECUTED
22f70: e1a02b22 lsr r2, r2, #22 <== NOT EXECUTED
22f74: e5d0e000 ldrb lr, [r0] <== NOT EXECUTED
22f78: e5d01001 ldrb r1, [r0, #1] <== NOT EXECUTED
22f7c: e58d2000 str r2, [sp] <== NOT EXECUTED
22f80: e5d0c00a ldrb ip, [r0, #10] <== NOT EXECUTED
22f84: e5d0200b ldrb r2, [r0, #11] <== NOT EXECUTED
22f88: e182240c orr r2, r2, ip, lsl #8 <== NOT EXECUTED
22f8c: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
22f90: e280200c add r2, r0, #12 <== NOT EXECUTED
22f94: e5d2c003 ldrb ip, [r2, #3] <== NOT EXECUTED
22f98: e5d0700c ldrb r7, [r0, #12] <== NOT EXECUTED
22f9c: e5d20001 ldrb r0, [r2, #1] <== NOT EXECUTED
22fa0: e18c7c07 orr r7, ip, r7, lsl #24 <== NOT EXECUTED
22fa4: e5d22002 ldrb r2, [r2, #2] <== NOT EXECUTED
22fa8: e187c800 orr ip, r7, r0, lsl #16 <== NOT EXECUTED
22fac: e18cc402 orr ip, ip, r2, lsl #8 <== NOT EXECUTED
22fb0: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
22fb4: e181140e orr r1, r1, lr, lsl #8 <== NOT EXECUTED
22fb8: e1510002 cmp r1, r2 <== NOT EXECUTED
22fbc: 03a01000 moveq r1, #0 <== NOT EXECUTED
22fc0: e1a02006 mov r2, r6 <== NOT EXECUTED
22fc4: e59f01e8 ldr r0, [pc, #488] ; 231b4 <rtems_rfs_shell_inode+0x484><== NOT EXECUTED
22fc8: e58dc008 str ip, [sp, #8] <== NOT EXECUTED
22fcc: eb009165 bl 47568 <printf> <== NOT EXECUTED
22fd0: e3a06000 mov r6, #0 <== NOT EXECUTED
* @return uint32_t The block number.
*/
static inline uint32_t
rtems_rfs_inode_get_block (rtems_rfs_inode_handle* handle, int block)
{
return rtems_rfs_read_u32 (&handle->node->data.blocks[block]);
22fd4: e59d202c ldr r2, [sp, #44] ; 0x2c <== NOT EXECUTED
22fd8: e282201c add r2, r2, #28 <== NOT EXECUTED
rtems_rfs_inode_get_links (&inode),
mode, type, mode & ((1 << 10) - 1),
rtems_rfs_inode_get_block_offset (&inode),
rtems_rfs_inode_get_block_count (&inode));
for (b = 0; b < (RTEMS_RFS_INODE_BLOCKS - 1); b++)
printf ("%" PRIu32 " ", rtems_rfs_inode_get_block (&inode, b));
22fdc: e0823006 add r3, r2, r6 <== NOT EXECUTED
22fe0: e7d21006 ldrb r1, [r2, r6] <== NOT EXECUTED
22fe4: e5d32003 ldrb r2, [r3, #3] <== NOT EXECUTED
22fe8: e5d30001 ldrb r0, [r3, #1] <== NOT EXECUTED
22fec: e1822c01 orr r2, r2, r1, lsl #24 <== NOT EXECUTED
22ff0: e5d31002 ldrb r1, [r3, #2] <== NOT EXECUTED
22ff4: e1823800 orr r3, r2, r0, lsl #16 <== NOT EXECUTED
22ff8: e1831401 orr r1, r3, r1, lsl #8 <== NOT EXECUTED
22ffc: e2866004 add r6, r6, #4 <== NOT EXECUTED
23000: e59f01b0 ldr r0, [pc, #432] ; 231b8 <rtems_rfs_shell_inode+0x488><== NOT EXECUTED
23004: eb009157 bl 47568 <printf> <== NOT EXECUTED
printf ("links=%03i mode=%04x (%s/%03o) bo=%04u bc=%04" PRIu32 " b=[",
rtems_rfs_inode_get_links (&inode),
mode, type, mode & ((1 << 10) - 1),
rtems_rfs_inode_get_block_offset (&inode),
rtems_rfs_inode_get_block_count (&inode));
for (b = 0; b < (RTEMS_RFS_INODE_BLOCKS - 1); b++)
23008: e3560010 cmp r6, #16 <== NOT EXECUTED
2300c: 1afffff0 bne 22fd4 <rtems_rfs_shell_inode+0x2a4> <== NOT EXECUTED
23010: e59d302c ldr r3, [sp, #44] ; 0x2c <== NOT EXECUTED
23014: e283301c add r3, r3, #28 <== NOT EXECUTED
printf ("%" PRIu32 " ", rtems_rfs_inode_get_block (&inode, b));
printf ("%" PRIu32 "]\n", rtems_rfs_inode_get_block (&inode, b));
23018: e5d30011 ldrb r0, [r3, #17] <== NOT EXECUTED
2301c: e5d31010 ldrb r1, [r3, #16] <== NOT EXECUTED
23020: e1a00800 lsl r0, r0, #16 <== NOT EXECUTED
23024: e5d32013 ldrb r2, [r3, #19] <== NOT EXECUTED
23028: e1800c01 orr r0, r0, r1, lsl #24 <== NOT EXECUTED
2302c: e5d31012 ldrb r1, [r3, #18] <== NOT EXECUTED
23030: e1803002 orr r3, r0, r2 <== NOT EXECUTED
23034: e1831401 orr r1, r3, r1, lsl #8 <== NOT EXECUTED
23038: e59f017c ldr r0, [pc, #380] ; 231bc <rtems_rfs_shell_inode+0x48c><== NOT EXECUTED
2303c: eb009149 bl 47568 <printf> <== NOT EXECUTED
}
}
rc = rtems_rfs_inode_close (fs, &inode);
23040: e1a00005 mov r0, r5 <== NOT EXECUTED
23044: e1a01008 mov r1, r8 <== NOT EXECUTED
23048: eb006861 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
2304c: e3500000 cmp r0, #0 <== NOT EXECUTED
23050: ca00001e bgt 230d0 <rtems_rfs_shell_inode+0x3a0> <== NOT EXECUTED
return 1;
}
rtems_rfs_shell_lock_rfs (fs);
for (ino = start; ino <= end; ino++)
23054: e2844001 add r4, r4, #1 <== NOT EXECUTED
23058: e1540009 cmp r4, r9 <== NOT EXECUTED
2305c: 9affff79 bls 22e48 <rtems_rfs_shell_inode+0x118> <== NOT EXECUTED
return 1;
}
}
}
rtems_rfs_shell_unlock_rfs (fs);
23060: e1a00005 mov r0, r5 <== NOT EXECUTED
23064: ebffff2b bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
23068: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
2306c: ea000027 b 23110 <rtems_rfs_shell_inode+0x3e0> <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
{
if (argv[arg][0] == '-')
{
switch (argv[arg][1])
23070: e5d03001 ldrb r3, [r0, #1] <== NOT EXECUTED
23074: e3530065 cmp r3, #101 ; 0x65 <== NOT EXECUTED
23078: 03a03001 moveq r3, #1 <== NOT EXECUTED
2307c: 058d3014 streq r3, [sp, #20] <== NOT EXECUTED
23080: 0affff48 beq 22da8 <rtems_rfs_shell_inode+0x78> <== NOT EXECUTED
23084: e3530066 cmp r3, #102 ; 0x66 <== NOT EXECUTED
23088: 03a00001 moveq r0, #1 <== NOT EXECUTED
2308c: 058d0018 streq r0, [sp, #24] <== NOT EXECUTED
23090: 0affff44 beq 22da8 <rtems_rfs_shell_inode+0x78> <== NOT EXECUTED
23094: e3530061 cmp r3, #97 ; 0x61 <== NOT EXECUTED
23098: 0a000003 beq 230ac <rtems_rfs_shell_inode+0x37c> <== NOT EXECUTED
}
}
else
{
if (have_end && have_start)
printf ("warning: option ignored: %s\n", argv[arg]);
2309c: e1a01000 mov r1, r0 <== NOT EXECUTED
230a0: e59f0118 ldr r0, [pc, #280] ; 231c0 <rtems_rfs_shell_inode+0x490><== NOT EXECUTED
230a4: eb00912f bl 47568 <printf> <== NOT EXECUTED
break;
}
}
else
{
if (have_end && have_start)
230a8: eaffff3e b 22da8 <rtems_rfs_shell_inode+0x78> <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
{
if (argv[arg][0] == '-')
{
switch (argv[arg][1])
230ac: e3a0b001 mov fp, #1 <== NOT EXECUTED
230b0: eaffff3c b 22da8 <rtems_rfs_shell_inode+0x78> <== NOT EXECUTED
ino, rtems_rfs_buffer_bnum (&inode.buffer),
inode.offset * RTEMS_RFS_INODE_SIZE,
allocated ? 'A' : 'F');
if (!allocated && !forced)
printf (" --\n");
230b4: e59f0108 ldr r0, [pc, #264] ; 231c4 <rtems_rfs_shell_inode+0x494><== NOT EXECUTED
230b8: eb0091cf bl 477fc <puts> <== NOT EXECUTED
printf ("%" PRIu32 " ", rtems_rfs_inode_get_block (&inode, b));
printf ("%" PRIu32 "]\n", rtems_rfs_inode_get_block (&inode, b));
}
}
rc = rtems_rfs_inode_close (fs, &inode);
230bc: e1a00005 mov r0, r5 <== NOT EXECUTED
230c0: e1a01008 mov r1, r8 <== NOT EXECUTED
230c4: eb006842 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
230c8: e3500000 cmp r0, #0 <== NOT EXECUTED
230cc: daffffe0 ble 23054 <rtems_rfs_shell_inode+0x324> <== NOT EXECUTED
230d0: e1a07000 mov r7, r0 <== NOT EXECUTED
{
rtems_rfs_shell_unlock_rfs (fs);
230d4: e1a00005 mov r0, r5 <== NOT EXECUTED
230d8: ebffff0e bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: closing inode handle: ino=%" PRIu32 ": (%d) %s\n",
230dc: e1a00007 mov r0, r7 <== NOT EXECUTED
230e0: eb009933 bl 495b4 <strerror> <== NOT EXECUTED
230e4: e1a01004 mov r1, r4 <== NOT EXECUTED
230e8: e1a03000 mov r3, r0 <== NOT EXECUTED
230ec: e1a02007 mov r2, r7 <== NOT EXECUTED
230f0: e59f00d0 ldr r0, [pc, #208] ; 231c8 <rtems_rfs_shell_inode+0x498><== NOT EXECUTED
230f4: eb00911b bl 47568 <printf> <== NOT EXECUTED
230f8: e3a00001 mov r0, #1 <== NOT EXECUTED
ino, rc, strerror (rc));
return 1;
230fc: ea000003 b 23110 <rtems_rfs_shell_inode+0x3e0> <== NOT EXECUTED
}
}
if ((start >= total) || (end >= total))
{
printf ("error: inode out of range (0->%" PRId32 ").\n", total - 1);
23100: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
23104: e59f00c0 ldr r0, [pc, #192] ; 231cc <rtems_rfs_shell_inode+0x49c><== NOT EXECUTED
23108: eb009116 bl 47568 <printf> <== NOT EXECUTED
2310c: e3a00001 mov r0, #1 <== NOT EXECUTED
}
rtems_rfs_shell_unlock_rfs (fs);
return 0;
}
23110: e28dd04c add sp, sp, #76 ; 0x4c <== NOT EXECUTED
23114: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
23118: e1a07000 mov r7, r0 <== NOT EXECUTED
bool allocated;
rc = rtems_rfs_group_bitmap_test (fs, true, ino, &allocated);
if (rc > 0)
{
rtems_rfs_shell_unlock_rfs (fs);
2311c: e1a00005 mov r0, r5 <== NOT EXECUTED
23120: ebfffefc bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: testing inode state: ino=%" PRIu32 ": (%d) %s\n",
23124: e1a00007 mov r0, r7 <== NOT EXECUTED
23128: eb009921 bl 495b4 <strerror> <== NOT EXECUTED
2312c: e1a01004 mov r1, r4 <== NOT EXECUTED
23130: e1a03000 mov r3, r0 <== NOT EXECUTED
23134: e1a02007 mov r2, r7 <== NOT EXECUTED
23138: e59f0090 ldr r0, [pc, #144] ; 231d0 <rtems_rfs_shell_inode+0x4a0><== NOT EXECUTED
2313c: eb009109 bl 47568 <printf> <== NOT EXECUTED
23140: e3a00001 mov r0, #1 <== NOT EXECUTED
ino, rc, strerror (rc));
return 1;
23144: eafffff1 b 23110 <rtems_rfs_shell_inode+0x3e0> <== NOT EXECUTED
23148: e1a07000 mov r7, r0 <== NOT EXECUTED
bool error;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
if (rc > 0)
{
rtems_rfs_shell_unlock_rfs (fs);
2314c: e1a00005 mov r0, r5 <== NOT EXECUTED
23150: ebfffef0 bl 22d18 <rtems_rfs_shell_unlock_rfs> <== NOT EXECUTED
printf ("error: opening inode handle: ino=%" PRIu32 ": (%d) %s\n",
23154: e1a00007 mov r0, r7 <== NOT EXECUTED
23158: eb009915 bl 495b4 <strerror> <== NOT EXECUTED
2315c: e1a01004 mov r1, r4 <== NOT EXECUTED
23160: e1a03000 mov r3, r0 <== NOT EXECUTED
23164: e1a02007 mov r2, r7 <== NOT EXECUTED
23168: e59f0064 ldr r0, [pc, #100] ; 231d4 <rtems_rfs_shell_inode+0x4a4><== NOT EXECUTED
2316c: eb0090fd bl 47568 <printf> <== NOT EXECUTED
23170: e3a00001 mov r0, #1 <== NOT EXECUTED
ino, rc, strerror (rc));
return 1;
23174: eaffffe5 b 23110 <rtems_rfs_shell_inode+0x3e0> <== NOT EXECUTED
show_all = false;
error_check_only = false;
forced = false;
have_start = have_end = false;
for (arg = 1; arg < argc; arg++)
23178: e3a01000 mov r1, #0 <== NOT EXECUTED
2317c: e3a02001 mov r2, #1 <== NOT EXECUTED
23180: e58d1018 str r1, [sp, #24] <== NOT EXECUTED
23184: e1a06000 mov r6, r0 <== NOT EXECUTED
23188: e58d1014 str r1, [sp, #20] <== NOT EXECUTED
2318c: e1a0b001 mov fp, r1 <== NOT EXECUTED
23190: e58d2010 str r2, [sp, #16] <== NOT EXECUTED
23194: eaffff16 b 22df4 <rtems_rfs_shell_inode+0xc4> <== NOT EXECUTED
00022d18 <rtems_rfs_shell_unlock_rfs>:
/**
* Unlock the file system.
*/
static void
rtems_rfs_shell_unlock_rfs (rtems_rfs_file_system* fs)
{
22d18: e92d4010 push {r4, lr} <== NOT EXECUTED
* Unlock the RFS file system.
*/
static inline void
rtems_rfs_rtems_unlock (rtems_rfs_file_system* fs)
{
rtems_rfs_rtems_private* rtems = rtems_rfs_fs_user (fs);
22d1c: e590407c ldr r4, [r0, #124] ; 0x7c <== NOT EXECUTED
rtems_rfs_buffers_release (fs);
22d20: eb005aab bl 397d4 <rtems_rfs_buffers_release> <== NOT EXECUTED
22d24: e5940000 ldr r0, [r4] <== NOT EXECUTED
#if __rtems__
rtems_rfs_rtems_unlock (fs);
#endif
}
22d28: e8bd4010 pop {r4, lr} <== NOT EXECUTED
22d2c: eaffa62c b c5e4 <rtems_semaphore_release> <== NOT EXECUTED
000229d4 <rtems_rfs_shell_usage>:
}
void
rtems_rfs_shell_usage (const char* arg)
{
229d4: e92d4010 push {r4, lr} <== NOT EXECUTED
printf ("%s: RFS debugger\n", arg);
229d8: e1a01000 mov r1, r0 <== NOT EXECUTED
}
void
rtems_rfs_shell_usage (const char* arg)
{
229dc: e1a04000 mov r4, r0 <== NOT EXECUTED
printf ("%s: RFS debugger\n", arg);
229e0: e59f0038 ldr r0, [pc, #56] ; 22a20 <rtems_rfs_shell_usage+0x4c><== NOT EXECUTED
229e4: eb0092df bl 47568 <printf> <== NOT EXECUTED
printf (" %s [-hl] <path> <command>\n", arg);
229e8: e1a01004 mov r1, r4 <== NOT EXECUTED
229ec: e59f0030 ldr r0, [pc, #48] ; 22a24 <rtems_rfs_shell_usage+0x50><== NOT EXECUTED
229f0: eb0092dc bl 47568 <printf> <== NOT EXECUTED
printf (" where:\n");
229f4: e59f002c ldr r0, [pc, #44] ; 22a28 <rtems_rfs_shell_usage+0x54><== NOT EXECUTED
229f8: eb00937f bl 477fc <puts> <== NOT EXECUTED
printf (" path: Path to the mounted RFS file system\n");
229fc: e59f0028 ldr r0, [pc, #40] ; 22a2c <rtems_rfs_shell_usage+0x58><== NOT EXECUTED
22a00: eb00937d bl 477fc <puts> <== NOT EXECUTED
printf (" command: A debugger command. See -l for a list plus help.\n");
22a04: e59f0024 ldr r0, [pc, #36] ; 22a30 <rtems_rfs_shell_usage+0x5c><== NOT EXECUTED
22a08: eb00937b bl 477fc <puts> <== NOT EXECUTED
printf (" -h: This help\n");
22a0c: e59f0020 ldr r0, [pc, #32] ; 22a34 <rtems_rfs_shell_usage+0x60><== NOT EXECUTED
22a10: eb009379 bl 477fc <puts> <== NOT EXECUTED
printf (" -l: The debugger command list.\n");
22a14: e59f001c ldr r0, [pc, #28] ; 22a38 <rtems_rfs_shell_usage+0x64><== NOT EXECUTED
}
22a18: e8bd4010 pop {r4, lr} <== NOT EXECUTED
printf (" %s [-hl] <path> <command>\n", arg);
printf (" where:\n");
printf (" path: Path to the mounted RFS file system\n");
printf (" command: A debugger command. See -l for a list plus help.\n");
printf (" -h: This help\n");
printf (" -l: The debugger command list.\n");
22a1c: ea009376 b 477fc <puts> <== NOT EXECUTED
0003d814 <rtems_rfs_symlink>:
const char* link,
int link_length,
uid_t uid,
gid_t gid,
rtems_rfs_ino parent)
{
3d814: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3d818: e24dd0a0 sub sp, sp, #160 ; 0xa0 <== NOT EXECUTED
3d81c: e59d50c4 ldr r5, [sp, #196] ; 0xc4 <== NOT EXECUTED
printf (" link:");
for (c = 0; c < link_length; c++)
printf ("%c", link[c]);
}
if (link_length >= rtems_rfs_fs_block_size (fs))
3d820: e5902008 ldr r2, [r0, #8] <== NOT EXECUTED
3d824: e1550002 cmp r5, r2 <== NOT EXECUTED
const char* link,
int link_length,
uid_t uid,
gid_t gid,
rtems_rfs_ino parent)
{
3d828: e1a04000 mov r4, r0 <== NOT EXECUTED
3d82c: e1a08001 mov r8, r1 <== NOT EXECUTED
3d830: e1a0a003 mov sl, r3 <== NOT EXECUTED
3d834: e1dd7cb8 ldrh r7, [sp, #200] ; 0xc8 <== NOT EXECUTED
3d838: e1dd6cbc ldrh r6, [sp, #204] ; 0xcc <== NOT EXECUTED
printf (" link:");
for (c = 0; c < link_length; c++)
printf ("%c", link[c]);
}
if (link_length >= rtems_rfs_fs_block_size (fs))
3d83c: 23a0905b movcs r9, #91 ; 0x5b <== NOT EXECUTED
3d840: 3a000002 bcc 3d850 <rtems_rfs_symlink+0x3c> <== NOT EXECUTED
rtems_rfs_inode_set_block_offset (&inode, link_length);
rc = rtems_rfs_inode_close (fs, &inode);
return rc;
}
3d844: e1a00009 mov r0, r9 <== NOT EXECUTED
3d848: e28dd0a0 add sp, sp, #160 ; 0xa0 <== NOT EXECUTED
3d84c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
if (link_length >= rtems_rfs_fs_block_size (fs))
return ENAMETOOLONG;
rc = rtems_rfs_inode_create (fs, parent, name, strlen (name),
3d850: e1a00001 mov r0, r1 <== NOT EXECUTED
3d854: eb0030e2 bl 49be4 <strlen> <== NOT EXECUTED
3d858: e3a0cca2 mov ip, #41472 ; 0xa200 <== NOT EXECUTED
3d85c: e24cc001 sub ip, ip, #1 <== NOT EXECUTED
3d860: e1a03000 mov r3, r0 <== NOT EXECUTED
3d864: e1a02008 mov r2, r8 <== NOT EXECUTED
3d868: e58dc000 str ip, [sp] <== NOT EXECUTED
3d86c: e59d10d0 ldr r1, [sp, #208] ; 0xd0 <== NOT EXECUTED
3d870: e28dc09c add ip, sp, #156 ; 0x9c <== NOT EXECUTED
3d874: e3a08001 mov r8, #1 <== NOT EXECUTED
3d878: e1a00004 mov r0, r4 <== NOT EXECUTED
3d87c: e58d7008 str r7, [sp, #8] <== NOT EXECUTED
3d880: e58d600c str r6, [sp, #12] <== NOT EXECUTED
3d884: e58dc010 str ip, [sp, #16] <== NOT EXECUTED
3d888: e58d8004 str r8, [sp, #4] <== NOT EXECUTED
3d88c: ebfffed8 bl 3d3f4 <rtems_rfs_inode_create> <== NOT EXECUTED
RTEMS_RFS_S_SYMLINK,
1, uid, gid, &ino);
if (rc > 0)
3d890: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d894: caffffea bgt 3d844 <rtems_rfs_symlink+0x30> <== NOT EXECUTED
return rc;
rc = rtems_rfs_inode_open (fs, ino, &inode, true);
3d898: e28d6064 add r6, sp, #100 ; 0x64 <== NOT EXECUTED
3d89c: e1a00004 mov r0, r4 <== NOT EXECUTED
3d8a0: e59d109c ldr r1, [sp, #156] ; 0x9c <== NOT EXECUTED
3d8a4: e1a02006 mov r2, r6 <== NOT EXECUTED
3d8a8: e1a03008 mov r3, r8 <== NOT EXECUTED
3d8ac: ebfffe6c bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc > 0)
3d8b0: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d8b4: caffffe2 bgt 3d844 <rtems_rfs_symlink+0x30> <== NOT EXECUTED
/*
* If the link length is less than the length of data union in the inode
* place the link into the data area else allocate a block and write the link
* to that.
*/
if (link_length < RTEMS_RFS_INODE_DATA_NAME_SIZE)
3d8b8: e3550013 cmp r5, #19 <== NOT EXECUTED
3d8bc: 8a000021 bhi 3d948 <rtems_rfs_symlink+0x134> <== NOT EXECUTED
{
memset (inode.node->data.name, 0, RTEMS_RFS_INODE_DATA_NAME_SIZE);
3d8c0: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d8c4: e3a07000 mov r7, #0 <== NOT EXECUTED
3d8c8: e583702c str r7, [r3, #44] ; 0x2c <== NOT EXECUTED
3d8cc: e583701c str r7, [r3, #28] <== NOT EXECUTED
3d8d0: e5837020 str r7, [r3, #32] <== NOT EXECUTED
3d8d4: e5837024 str r7, [r3, #36] ; 0x24 <== NOT EXECUTED
3d8d8: e5837028 str r7, [r3, #40] ; 0x28 <== NOT EXECUTED
memcpy (inode.node->data.name, link, link_length);
3d8dc: e59d0070 ldr r0, [sp, #112] ; 0x70 <== NOT EXECUTED
3d8e0: e1a0100a mov r1, sl <== NOT EXECUTED
3d8e4: e280001c add r0, r0, #28 <== NOT EXECUTED
3d8e8: e1a02005 mov r2, r5 <== NOT EXECUTED
3d8ec: eb00226f bl 462b0 <memcpy> <== NOT EXECUTED
* @param block_count The block count.
*/
static inline void
rtems_rfs_inode_set_block_count (rtems_rfs_inode_handle* handle, uint32_t block_count)
{
rtems_rfs_write_u32 (&handle->node->block_count, block_count);
3d8f0: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d8f4: e5c3700c strb r7, [r3, #12] <== NOT EXECUTED
3d8f8: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d8fc: e5c3700d strb r7, [r3, #13] <== NOT EXECUTED
3d900: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d904: e5c3700e strb r7, [r3, #14] <== NOT EXECUTED
3d908: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d90c: e5c3700f strb r7, [r3, #15] <== NOT EXECUTED
*/
static inline void
rtems_rfs_inode_set_block_offset (rtems_rfs_inode_handle* handle,
uint16_t block_offset)
{
rtems_rfs_write_u16 (&handle->node->block_offset, block_offset);
3d910: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
}
rtems_rfs_inode_set_block_offset (&inode, link_length);
3d914: e1a05805 lsl r5, r5, #16 <== NOT EXECUTED
3d918: e1a02c25 lsr r2, r5, #24 <== NOT EXECUTED
3d91c: e5c3200a strb r2, [r3, #10] <== NOT EXECUTED
3d920: e59d3070 ldr r3, [sp, #112] ; 0x70 <== NOT EXECUTED
3d924: e1a05825 lsr r5, r5, #16 <== NOT EXECUTED
3d928: e5c3500b strb r5, [r3, #11] <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
3d92c: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3d930: e3a03001 mov r3, #1 <== NOT EXECUTED
3d934: e1a01006 mov r1, r6 <== NOT EXECUTED
3d938: e5cd3074 strb r3, [sp, #116] ; 0x74 <== NOT EXECUTED
3d93c: ebfffe24 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3d940: e1a09000 mov r9, r0 <== NOT EXECUTED
return rc;
3d944: eaffffbe b 3d844 <rtems_rfs_symlink+0x30> <== NOT EXECUTED
rtems_rfs_block_map map;
rtems_rfs_block_no block;
rtems_rfs_buffer_handle buffer;
uint8_t* data;
rc = rtems_rfs_block_map_open (fs, &inode, &map);
3d948: e28d7014 add r7, sp, #20 <== NOT EXECUTED
3d94c: e1a00004 mov r0, r4 <== NOT EXECUTED
3d950: e1a01006 mov r1, r6 <== NOT EXECUTED
3d954: e1a02007 mov r2, r7 <== NOT EXECUTED
3d958: ebffef28 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3d95c: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d960: da000003 ble 3d974 <rtems_rfs_symlink+0x160> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
if (rc > 0)
{
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
3d964: e1a00004 mov r0, r4 <== NOT EXECUTED
3d968: e1a01006 mov r1, r6 <== NOT EXECUTED
3d96c: ebfffe18 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d970: eaffffb3 b 3d844 <rtems_rfs_symlink+0x30> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_grow (fs, &map, 1, &block);
3d974: e1a02008 mov r2, r8 <== NOT EXECUTED
3d978: e1a00004 mov r0, r4 <== NOT EXECUTED
3d97c: e1a01007 mov r1, r7 <== NOT EXECUTED
3d980: e28d3098 add r3, sp, #152 ; 0x98 <== NOT EXECUTED
3d984: ebffedb1 bl 39050 <rtems_rfs_block_map_grow> <== NOT EXECUTED
if (rc > 0)
3d988: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d98c: da000006 ble 3d9ac <rtems_rfs_symlink+0x198> <== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
3d990: e1a01007 mov r1, r7 <== NOT EXECUTED
3d994: e1a00004 mov r0, r4 <== NOT EXECUTED
3d998: ebffeea5 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
3d99c: e1a00004 mov r0, r4 <== NOT EXECUTED
3d9a0: e1a01006 mov r1, r6 <== NOT EXECUTED
3d9a4: ebfffe0a bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d9a8: eaffffa5 b 3d844 <rtems_rfs_symlink+0x30> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3d9ac: e3a08000 mov r8, #0 <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
3d9b0: e28db08c add fp, sp, #140 ; 0x8c <== NOT EXECUTED
3d9b4: e1a00004 mov r0, r4 <== NOT EXECUTED
3d9b8: e1a0100b mov r1, fp <== NOT EXECUTED
3d9bc: e59d2098 ldr r2, [sp, #152] ; 0x98 <== NOT EXECUTED
3d9c0: e1a03008 mov r3, r8 <== NOT EXECUTED
3d9c4: e5cd808c strb r8, [sp, #140] ; 0x8c <== NOT EXECUTED
handle->bnum = 0;
3d9c8: e58d8090 str r8, [sp, #144] ; 0x90 <== NOT EXECUTED
handle->buffer = NULL;
3d9cc: e58d8094 str r8, [sp, #148] ; 0x94 <== NOT EXECUTED
3d9d0: ebfff01f bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3d9d4: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d9d8: da000003 ble 3d9ec <rtems_rfs_symlink+0x1d8> <== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
3d9dc: e1a01007 mov r1, r7 <== NOT EXECUTED
3d9e0: e1a00004 mov r0, r4 <== NOT EXECUTED
3d9e4: ebffee92 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
3d9e8: eaffffdd b 3d964 <rtems_rfs_symlink+0x150> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
data = rtems_rfs_buffer_data (&buffer);
3d9ec: e59d3094 ldr r3, [sp, #148] ; 0x94 <== NOT EXECUTED
3d9f0: e5939020 ldr r9, [r3, #32] <== NOT EXECUTED
memset (data, 0xff, rtems_rfs_fs_block_size (fs));
3d9f4: e3a010ff mov r1, #255 ; 0xff <== NOT EXECUTED
3d9f8: e1a00009 mov r0, r9 <== NOT EXECUTED
3d9fc: e5942008 ldr r2, [r4, #8] <== NOT EXECUTED
3da00: eb0022b1 bl 464cc <memset> <== NOT EXECUTED
memcpy (data, link, link_length);
3da04: e1a02005 mov r2, r5 <== NOT EXECUTED
3da08: e1a00009 mov r0, r9 <== NOT EXECUTED
3da0c: e1a0100a mov r1, sl <== NOT EXECUTED
3da10: eb002226 bl 462b0 <memcpy> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3da14: e1a0100b mov r1, fp <== NOT EXECUTED
3da18: e1a00004 mov r0, r4 <== NOT EXECUTED
3da1c: ebffefc2 bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_close (fs, &map);
3da20: e1a01007 mov r1, r7 <== NOT EXECUTED
3da24: e1a00004 mov r0, r4 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3da28: e58d8094 str r8, [sp, #148] ; 0x94 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3da2c: e5cd808c strb r8, [sp, #140] ; 0x8c <== NOT EXECUTED
handle->bnum = 0;
3da30: e58d8090 str r8, [sp, #144] ; 0x90 <== NOT EXECUTED
3da34: ebffee7e bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
if (rc > 0)
3da38: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3da3c: daffffb3 ble 3d910 <rtems_rfs_symlink+0xfc> <== NOT EXECUTED
3da40: eaffffc7 b 3d964 <rtems_rfs_symlink+0x150> <== NOT EXECUTED
0003d658 <rtems_rfs_symlink_read>:
rtems_rfs_symlink_read (rtems_rfs_file_system* fs,
rtems_rfs_ino link,
char* path,
size_t size,
size_t* length)
{
3d658: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3d65c: e24dd08c sub sp, sp, #140 ; 0x8c <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK_READ))
printf ("rtems-rfs: symlink-read: link:%" PRIu32 "\n", link);
rc = rtems_rfs_inode_open (fs, link, &inode, true);
3d660: e28d4054 add r4, sp, #84 ; 0x54 <== NOT EXECUTED
rtems_rfs_symlink_read (rtems_rfs_file_system* fs,
rtems_rfs_ino link,
char* path,
size_t size,
size_t* length)
{
3d664: e1a07002 mov r7, r2 <== NOT EXECUTED
3d668: e1a06003 mov r6, r3 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK_READ))
printf ("rtems-rfs: symlink-read: link:%" PRIu32 "\n", link);
rc = rtems_rfs_inode_open (fs, link, &inode, true);
3d66c: e1a02004 mov r2, r4 <== NOT EXECUTED
3d670: e3a03001 mov r3, #1 <== NOT EXECUTED
rtems_rfs_symlink_read (rtems_rfs_file_system* fs,
rtems_rfs_ino link,
char* path,
size_t size,
size_t* length)
{
3d674: e1a05000 mov r5, r0 <== NOT EXECUTED
3d678: e59d80b0 ldr r8, [sp, #176] ; 0xb0 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_SYMLINK_READ))
printf ("rtems-rfs: symlink-read: link:%" PRIu32 "\n", link);
rc = rtems_rfs_inode_open (fs, link, &inode, true);
3d67c: ebfffef8 bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3d680: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d684: 1a000009 bne 3d6b0 <rtems_rfs_symlink_read+0x58> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
3d688: e59d1060 ldr r1, [sp, #96] ; 0x60 <== NOT EXECUTED
return rc;
if (!RTEMS_RFS_S_ISLNK (rtems_rfs_inode_get_mode (&inode)))
3d68c: e5d13002 ldrb r3, [r1, #2] <== NOT EXECUTED
3d690: e1a03403 lsl r3, r3, #8 <== NOT EXECUTED
3d694: e2033a0f and r3, r3, #61440 ; 0xf000 <== NOT EXECUTED
3d698: e3530a0a cmp r3, #40960 ; 0xa000 <== NOT EXECUTED
3d69c: 0a000006 beq 3d6bc <rtems_rfs_symlink_read+0x64> <== NOT EXECUTED
*length = rtems_rfs_inode_get_block_offset (&inode);
if (size < *length)
{
rtems_rfs_inode_close (fs, &inode);
3d6a0: e1a00005 mov r0, r5 <== NOT EXECUTED
3d6a4: e1a01004 mov r1, r4 <== NOT EXECUTED
3d6a8: ebfffec9 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3d6ac: e3a09016 mov r9, #22 <== NOT EXECUTED
path[*length] = '\0';
rc = rtems_rfs_inode_close (fs, &inode);
return rc;
}
3d6b0: e1a00009 mov r0, r9 <== NOT EXECUTED
3d6b4: e28dd08c add sp, sp, #140 ; 0x8c <== NOT EXECUTED
3d6b8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return EINVAL;
}
*length = rtems_rfs_inode_get_block_offset (&inode);
3d6bc: e5d1200a ldrb r2, [r1, #10] <== NOT EXECUTED
3d6c0: e5d1300b ldrb r3, [r1, #11] <== NOT EXECUTED
3d6c4: e1832402 orr r2, r3, r2, lsl #8 <== NOT EXECUTED
if (size < *length)
3d6c8: e1520006 cmp r2, r6 <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return EINVAL;
}
*length = rtems_rfs_inode_get_block_offset (&inode);
3d6cc: e5882000 str r2, [r8] <== NOT EXECUTED
if (size < *length)
3d6d0: 8afffff2 bhi 3d6a0 <rtems_rfs_symlink_read+0x48> <== NOT EXECUTED
* @return uint32_t The block count.
*/
static inline uint32_t
rtems_rfs_inode_get_block_count (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u32 (&handle->node->block_count);
3d6d4: e281300c add r3, r1, #12 <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return EINVAL;
}
if (rtems_rfs_inode_get_block_count (&inode) == 0)
3d6d8: e5d30003 ldrb r0, [r3, #3] <== NOT EXECUTED
3d6dc: e5d1c00c ldrb ip, [r1, #12] <== NOT EXECUTED
3d6e0: e5d3e001 ldrb lr, [r3, #1] <== NOT EXECUTED
3d6e4: e180cc0c orr ip, r0, ip, lsl #24 <== NOT EXECUTED
3d6e8: e5d30002 ldrb r0, [r3, #2] <== NOT EXECUTED
3d6ec: e18c380e orr r3, ip, lr, lsl #16 <== NOT EXECUTED
3d6f0: e1930400 orrs r0, r3, r0, lsl #8 <== NOT EXECUTED
3d6f4: 1a00000a bne 3d724 <rtems_rfs_symlink_read+0xcc> <== NOT EXECUTED
{
memcpy (path, inode.node->data.name, *length);
3d6f8: e281101c add r1, r1, #28 <== NOT EXECUTED
3d6fc: e1a00007 mov r0, r7 <== NOT EXECUTED
3d700: eb0022ea bl 462b0 <memcpy> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
}
path[*length] = '\0';
3d704: e5983000 ldr r3, [r8] <== NOT EXECUTED
3d708: e3a02000 mov r2, #0 <== NOT EXECUTED
3d70c: e7c72003 strb r2, [r7, r3] <== NOT EXECUTED
rc = rtems_rfs_inode_close (fs, &inode);
3d710: e1a00005 mov r0, r5 <== NOT EXECUTED
3d714: e1a01004 mov r1, r4 <== NOT EXECUTED
3d718: ebfffead bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3d71c: e1a09000 mov r9, r0 <== NOT EXECUTED
return rc;
3d720: eaffffe2 b 3d6b0 <rtems_rfs_symlink_read+0x58> <== NOT EXECUTED
rtems_rfs_block_map map;
rtems_rfs_block_no block;
rtems_rfs_buffer_handle buffer;
char* data;
rc = rtems_rfs_block_map_open (fs, &inode, &map);
3d724: e28d6004 add r6, sp, #4 <== NOT EXECUTED
3d728: e1a00005 mov r0, r5 <== NOT EXECUTED
3d72c: e1a01004 mov r1, r4 <== NOT EXECUTED
3d730: e1a02006 mov r2, r6 <== NOT EXECUTED
3d734: ebffefb1 bl 39600 <rtems_rfs_block_map_open> <== NOT EXECUTED
if (rc > 0)
3d738: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d73c: da000003 ble 3d750 <rtems_rfs_symlink_read+0xf8> <== NOT EXECUTED
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
if (rc > 0)
{
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
3d740: e1a00005 mov r0, r5 <== NOT EXECUTED
3d744: e1a01004 mov r1, r4 <== NOT EXECUTED
3d748: ebfffea1 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d74c: eaffffd7 b 3d6b0 <rtems_rfs_symlink_read+0x58> <== NOT EXECUTED
{
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_seek (fs, &map, 0, &block);
3d750: e28dc088 add ip, sp, #136 ; 0x88 <== NOT EXECUTED
3d754: e1a00005 mov r0, r5 <== NOT EXECUTED
3d758: e1a01006 mov r1, r6 <== NOT EXECUTED
3d75c: e3a02000 mov r2, #0 <== NOT EXECUTED
3d760: e3a03000 mov r3, #0 <== NOT EXECUTED
3d764: e58dc000 str ip, [sp] <== NOT EXECUTED
3d768: ebffecea bl 38b18 <rtems_rfs_block_map_seek> <== NOT EXECUTED
if (rc > 0)
3d76c: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d770: da000006 ble 3d790 <rtems_rfs_symlink_read+0x138> <== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
3d774: e1a01006 mov r1, r6 <== NOT EXECUTED
3d778: e1a00005 mov r0, r5 <== NOT EXECUTED
3d77c: ebffef2c bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
3d780: e1a00005 mov r0, r5 <== NOT EXECUTED
3d784: e1a01004 mov r1, r4 <== NOT EXECUTED
3d788: ebfffe91 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3d78c: eaffffc7 b 3d6b0 <rtems_rfs_symlink_read+0x58> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_open (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
handle->dirty = false;
3d790: e3a0a000 mov sl, #0 <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_buffer_handle_request (fs, &buffer, block, false);
3d794: e28db07c add fp, sp, #124 ; 0x7c <== NOT EXECUTED
3d798: e1a00005 mov r0, r5 <== NOT EXECUTED
3d79c: e1a0100b mov r1, fp <== NOT EXECUTED
3d7a0: e59d2088 ldr r2, [sp, #136] ; 0x88 <== NOT EXECUTED
3d7a4: e1a0300a mov r3, sl <== NOT EXECUTED
3d7a8: e5cda07c strb sl, [sp, #124] ; 0x7c <== NOT EXECUTED
handle->bnum = 0;
3d7ac: e58da080 str sl, [sp, #128] ; 0x80 <== NOT EXECUTED
handle->buffer = NULL;
3d7b0: e58da084 str sl, [sp, #132] ; 0x84 <== NOT EXECUTED
3d7b4: ebfff0a6 bl 39a54 <rtems_rfs_buffer_handle_request> <== NOT EXECUTED
if (rc > 0)
3d7b8: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d7bc: da000003 ble 3d7d0 <rtems_rfs_symlink_read+0x178> <== NOT EXECUTED
{
rtems_rfs_block_map_close (fs, &map);
3d7c0: e1a01006 mov r1, r6 <== NOT EXECUTED
3d7c4: e1a00005 mov r0, r5 <== NOT EXECUTED
3d7c8: ebffef19 bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
3d7cc: eaffffdb b 3d740 <rtems_rfs_symlink_read+0xe8> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &inode);
return rc;
}
data = rtems_rfs_buffer_data (&buffer);
memcpy (path, data, *length);
3d7d0: e59d3084 ldr r3, [sp, #132] ; 0x84 <== NOT EXECUTED
3d7d4: e5982000 ldr r2, [r8] <== NOT EXECUTED
3d7d8: e5931020 ldr r1, [r3, #32] <== NOT EXECUTED
3d7dc: e1a00007 mov r0, r7 <== NOT EXECUTED
3d7e0: eb0022b2 bl 462b0 <memcpy> <== NOT EXECUTED
*/
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
3d7e4: e1a0100b mov r1, fp <== NOT EXECUTED
3d7e8: e1a00005 mov r0, r5 <== NOT EXECUTED
3d7ec: ebfff04e bl 3992c <rtems_rfs_buffer_handle_release> <== NOT EXECUTED
rtems_rfs_block_map_close (fs, &map);
rtems_rfs_inode_close (fs, &inode);
return rc;
}
rc = rtems_rfs_block_map_close (fs, &map);
3d7f0: e1a01006 mov r1, r6 <== NOT EXECUTED
3d7f4: e1a00005 mov r0, r5 <== NOT EXECUTED
handle->dirty = false;
handle->bnum = 0;
handle->buffer = NULL;
3d7f8: e58da084 str sl, [sp, #132] ; 0x84 <== NOT EXECUTED
static inline int
rtems_rfs_buffer_handle_close (rtems_rfs_file_system* fs,
rtems_rfs_buffer_handle* handle)
{
rtems_rfs_buffer_handle_release (fs, handle);
handle->dirty = false;
3d7fc: e5cda07c strb sl, [sp, #124] ; 0x7c <== NOT EXECUTED
handle->bnum = 0;
3d800: e58da080 str sl, [sp, #128] ; 0x80 <== NOT EXECUTED
3d804: ebffef0a bl 39434 <rtems_rfs_block_map_close> <== NOT EXECUTED
if (rc > 0)
3d808: e2509000 subs r9, r0, #0 <== NOT EXECUTED
3d80c: daffffbc ble 3d704 <rtems_rfs_symlink_read+0xac> <== NOT EXECUTED
3d810: eaffffca b 3d740 <rtems_rfs_symlink_read+0xe8> <== NOT EXECUTED
0003da44 <rtems_rfs_unlink>:
rtems_rfs_unlink (rtems_rfs_file_system* fs,
rtems_rfs_ino parent,
rtems_rfs_ino target,
uint32_t doff,
rtems_rfs_unlink_dir dir_mode)
{
3da44: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
3da48: e24dd050 sub sp, sp, #80 ; 0x50 <== NOT EXECUTED
3da4c: e1a06002 mov r6, r2 <== NOT EXECUTED
3da50: e1a08001 mov r8, r1 <== NOT EXECUTED
3da54: e1a0a003 mov sl, r3 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: unlink: parent(%" PRIu32 ") -X-> (%" PRIu32 ")\n", parent, target);
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3da58: e1a01002 mov r1, r2 <== NOT EXECUTED
3da5c: e3a03001 mov r3, #1 <== NOT EXECUTED
3da60: e1a0200d mov r2, sp <== NOT EXECUTED
rtems_rfs_unlink (rtems_rfs_file_system* fs,
rtems_rfs_ino parent,
rtems_rfs_ino target,
uint32_t doff,
rtems_rfs_unlink_dir dir_mode)
{
3da64: e1a05000 mov r5, r0 <== NOT EXECUTED
3da68: e59d7074 ldr r7, [sp, #116] ; 0x74 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: unlink: parent(%" PRIu32 ") -X-> (%" PRIu32 ")\n", parent, target);
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3da6c: ebfffdfc bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3da70: e250b000 subs fp, r0, #0 <== NOT EXECUTED
int rc;
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: unlink: parent(%" PRIu32 ") -X-> (%" PRIu32 ")\n", parent, target);
rc = rtems_rfs_inode_open (fs, target, &target_inode, true);
3da74: e1a0400d mov r4, sp <== NOT EXECUTED
if (rc)
3da78: 1a00000e bne 3dab8 <rtems_rfs_unlink+0x74> <== NOT EXECUTED
* @return uint16_t The mode.
*/
static inline uint16_t
rtems_rfs_inode_get_mode (rtems_rfs_inode_handle* handle)
{
return rtems_rfs_read_u16 (&handle->node->mode);
3da7c: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
/*
* If a directory process the unlink mode.
*/
dir = RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&target_inode));
3da80: e5d39002 ldrb r9, [r3, #2] <== NOT EXECUTED
3da84: e1a09409 lsl r9, r9, #8 <== NOT EXECUTED
3da88: e2099a0f and r9, r9, #61440 ; 0xf000 <== NOT EXECUTED
3da8c: e3590901 cmp r9, #16384 ; 0x4000 <== NOT EXECUTED
3da90: 13a09000 movne r9, #0 <== NOT EXECUTED
3da94: 03a09001 moveq r9, #1 <== NOT EXECUTED
if (dir)
3da98: e3590000 cmp r9, #0 <== NOT EXECUTED
3da9c: 0a00000a beq 3dacc <rtems_rfs_unlink+0x88> <== NOT EXECUTED
{
switch (dir_mode)
3daa0: e3570000 cmp r7, #0 <== NOT EXECUTED
3daa4: 1a000006 bne 3dac4 <rtems_rfs_unlink+0x80> <== NOT EXECUTED
{
case rtems_rfs_unlink_dir_denied:
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: link is a directory\n");
rtems_rfs_inode_close (fs, &target_inode);
3daa8: e1a00005 mov r0, r5 <== NOT EXECUTED
3daac: e1a0100d mov r1, sp <== NOT EXECUTED
3dab0: ebfffdc7 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3dab4: e3a0b015 mov fp, #21 <== NOT EXECUTED
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: link: target inode-close failed: %d: %s\n",
rc, strerror (rc));
return rc;
}
3dab8: e1a0000b mov r0, fp <== NOT EXECUTED
3dabc: e28dd050 add sp, sp, #80 ; 0x50 <== NOT EXECUTED
3dac0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
*/
dir = RTEMS_RFS_S_ISDIR (rtems_rfs_inode_get_mode (&target_inode));
if (dir)
{
switch (dir_mode)
3dac4: e3570001 cmp r7, #1 <== NOT EXECUTED
3dac8: 0a000037 beq 3dbac <rtems_rfs_unlink+0x168> <== NOT EXECUTED
default:
break;
}
}
rc = rtems_rfs_inode_open (fs, parent, &parent_inode, true);
3dacc: e28d7028 add r7, sp, #40 ; 0x28 <== NOT EXECUTED
3dad0: e1a01008 mov r1, r8 <== NOT EXECUTED
3dad4: e1a00005 mov r0, r5 <== NOT EXECUTED
3dad8: e1a02007 mov r2, r7 <== NOT EXECUTED
3dadc: e3a03001 mov r3, #1 <== NOT EXECUTED
3dae0: ebfffddf bl 3d264 <rtems_rfs_inode_open> <== NOT EXECUTED
if (rc)
3dae4: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3dae8: 1a00002b bne 3db9c <rtems_rfs_unlink+0x158> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_dir_del_entry (fs, &parent_inode, target, doff);
3daec: e1a02006 mov r2, r6 <== NOT EXECUTED
3daf0: e1a0300a mov r3, sl <== NOT EXECUTED
3daf4: e1a00005 mov r0, r5 <== NOT EXECUTED
3daf8: e1a01007 mov r1, r7 <== NOT EXECUTED
3dafc: ebfff120 bl 39f84 <rtems_rfs_dir_del_entry> <== NOT EXECUTED
if (rc > 0)
3db00: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3db04: ca000018 bgt 3db6c <rtems_rfs_unlink+0x128> <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3db08: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
3db0c: e5d20000 ldrb r0, [r2] <== NOT EXECUTED
3db10: e5d21001 ldrb r1, [r2, #1] <== NOT EXECUTED
if (links == 0xffff)
3db14: e3a03801 mov r3, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3db18: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
if (links == 0xffff)
3db1c: e2433001 sub r3, r3, #1 <== NOT EXECUTED
3db20: e1510003 cmp r1, r3 <== NOT EXECUTED
3db24: 0a00002b beq 3dbd8 <rtems_rfs_unlink+0x194> <== NOT EXECUTED
links = rtems_rfs_inode_get_links (&target_inode);
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: unlink: target:%" PRIu32 " links:%u\n", target, links);
if (links > 1)
3db28: e3510001 cmp r1, #1 <== NOT EXECUTED
3db2c: 9a000029 bls 3dbd8 <rtems_rfs_unlink+0x194> <== NOT EXECUTED
{
links--;
3db30: e2411001 sub r1, r1, #1 <== NOT EXECUTED
3db34: e1a01801 lsl r1, r1, #16 <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3db38: e1a03c21 lsr r3, r1, #24 <== NOT EXECUTED
3db3c: e5c23000 strb r3, [r2] <== NOT EXECUTED
3db40: e59d300c ldr r3, [sp, #12] <== NOT EXECUTED
3db44: e1a01821 lsr r1, r1, #16 <== NOT EXECUTED
3db48: e5c31001 strb r1, [r3, #1] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3db4c: e3a03001 mov r3, #1 <== NOT EXECUTED
3db50: e5cd3010 strb r3, [sp, #16] <== NOT EXECUTED
links--;
rtems_rfs_inode_set_links (&parent_inode, links);
}
}
rc = rtems_rfs_inode_time_stamp_now (&parent_inode, true, true);
3db54: e3a01001 mov r1, #1 <== NOT EXECUTED
3db58: e1a00007 mov r0, r7 <== NOT EXECUTED
3db5c: e1a02001 mov r2, r1 <== NOT EXECUTED
3db60: ebfffcea bl 3cf10 <rtems_rfs_inode_time_stamp_now> <== NOT EXECUTED
if (rc > 0)
3db64: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3db68: da000006 ble 3db88 <rtems_rfs_unlink+0x144> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: link: inode-time-stamp failed: %d: %s\n",
rc, strerror (rc));
rtems_rfs_inode_close (fs, &parent_inode);
3db6c: e1a01007 mov r1, r7 <== NOT EXECUTED
3db70: e1a00005 mov r0, r5 <== NOT EXECUTED
3db74: ebfffd96 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &target_inode);
3db78: e1a00005 mov r0, r5 <== NOT EXECUTED
3db7c: e1a0100d mov r1, sp <== NOT EXECUTED
3db80: ebfffd93 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3db84: eaffffcb b 3dab8 <rtems_rfs_unlink+0x74> <== NOT EXECUTED
}
rc = rtems_rfs_inode_close (fs, &parent_inode);
3db88: e1a01007 mov r1, r7 <== NOT EXECUTED
3db8c: e1a00005 mov r0, r5 <== NOT EXECUTED
3db90: ebfffd8f bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
if (rc > 0)
3db94: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3db98: da000009 ble 3dbc4 <rtems_rfs_unlink+0x180> <== NOT EXECUTED
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: link: parent inode-close failed: %d: %s\n",
rc, strerror (rc));
rtems_rfs_inode_close (fs, &target_inode);
3db9c: e1a00005 mov r0, r5 <== NOT EXECUTED
3dba0: e1a0100d mov r1, sp <== NOT EXECUTED
3dba4: ebfffd8a bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
return rc;
3dba8: eaffffc2 b 3dab8 <rtems_rfs_unlink+0x74> <== NOT EXECUTED
printf ("rtems-rfs: link is a directory\n");
rtems_rfs_inode_close (fs, &target_inode);
return EISDIR;
case rtems_rfs_unlink_dir_if_empty:
rc = rtems_rfs_dir_empty (fs, &target_inode);
3dbac: e1a00005 mov r0, r5 <== NOT EXECUTED
3dbb0: e1a0100d mov r1, sp <== NOT EXECUTED
3dbb4: ebfff31f bl 3a838 <rtems_rfs_dir_empty> <== NOT EXECUTED
if (rc > 0)
3dbb8: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3dbbc: daffffc2 ble 3dacc <rtems_rfs_unlink+0x88> <== NOT EXECUTED
3dbc0: eafffff5 b 3db9c <rtems_rfs_unlink+0x158> <== NOT EXECUTED
rc, strerror (rc));
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
rc = rtems_rfs_inode_close (fs, &target_inode);
3dbc4: e1a00005 mov r0, r5 <== NOT EXECUTED
3dbc8: e1a0100d mov r1, sp <== NOT EXECUTED
3dbcc: ebfffd80 bl 3d1d4 <rtems_rfs_inode_close> <== NOT EXECUTED
3dbd0: e1a0b000 mov fp, r0 <== NOT EXECUTED
if ((rc > 0) && rtems_rfs_trace (RTEMS_RFS_TRACE_UNLINK))
printf ("rtems-rfs: link: target inode-close failed: %d: %s\n",
rc, strerror (rc));
return rc;
3dbd4: eaffffb7 b 3dab8 <rtems_rfs_unlink+0x74> <== NOT EXECUTED
else
{
/*
* Erasing the inode releases all blocks attached to it.
*/
rc = rtems_rfs_inode_delete (fs, &target_inode);
3dbd8: e1a00005 mov r0, r5 <== NOT EXECUTED
3dbdc: e1a0100d mov r1, sp <== NOT EXECUTED
3dbe0: ebfffdd1 bl 3d32c <rtems_rfs_inode_delete> <== NOT EXECUTED
if (rc > 0)
3dbe4: e250b000 subs fp, r0, #0 <== NOT EXECUTED
3dbe8: caffffdf bgt 3db6c <rtems_rfs_unlink+0x128> <== NOT EXECUTED
rtems_rfs_inode_close (fs, &parent_inode);
rtems_rfs_inode_close (fs, &target_inode);
return rc;
}
if (dir)
3dbec: e3590000 cmp r9, #0 <== NOT EXECUTED
3dbf0: 0affffd7 beq 3db54 <rtems_rfs_unlink+0x110> <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3dbf4: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3dbf8: e5d30000 ldrb r0, [r3] <== NOT EXECUTED
3dbfc: e5d31001 ldrb r1, [r3, #1] <== NOT EXECUTED
if (links == 0xffff)
3dc00: e3a02801 mov r2, #65536 ; 0x10000 <== NOT EXECUTED
*/
static inline uint16_t
rtems_rfs_inode_get_links (rtems_rfs_inode_handle* handle)
{
uint16_t links;
links = rtems_rfs_read_u16 (&handle->node->links);
3dc04: e1811400 orr r1, r1, r0, lsl #8 <== NOT EXECUTED
if (links == 0xffff)
3dc08: e2422001 sub r2, r2, #1 <== NOT EXECUTED
3dc0c: e1510002 cmp r1, r2 <== NOT EXECUTED
3dc10: 03a01000 moveq r1, #0 <== NOT EXECUTED
3dc14: 01a02001 moveq r2, r1 <== NOT EXECUTED
3dc18: 0a000007 beq 3dc3c <rtems_rfs_unlink+0x1f8> <== NOT EXECUTED
{
links = rtems_rfs_inode_get_links (&parent_inode);
if (links > 1)
3dc1c: e3510001 cmp r1, #1 <== NOT EXECUTED
links--;
3dc20: 82412001 subhi r2, r1, #1 <== NOT EXECUTED
3dc24: 81a02802 lslhi r2, r2, #16 <== NOT EXECUTED
3dc28: 81a01822 lsrhi r1, r2, #16 <== NOT EXECUTED
}
if (dir)
{
links = rtems_rfs_inode_get_links (&parent_inode);
if (links > 1)
3dc2c: 920110ff andls r1, r1, #255 ; 0xff <== NOT EXECUTED
3dc30: 93a02000 movls r2, #0 <== NOT EXECUTED
links--;
3dc34: 81a02c22 lsrhi r2, r2, #24 <== NOT EXECUTED
3dc38: 820110ff andhi r1, r1, #255 ; 0xff <== NOT EXECUTED
* @prarm links The links.
*/
static inline void
rtems_rfs_inode_set_links (rtems_rfs_inode_handle* handle, uint16_t links)
{
rtems_rfs_write_u16 (&handle->node->links, links);
3dc3c: e5c32000 strb r2, [r3] <== NOT EXECUTED
3dc40: e59d3034 ldr r3, [sp, #52] ; 0x34 <== NOT EXECUTED
3dc44: e5c31001 strb r1, [r3, #1] <== NOT EXECUTED
rtems_rfs_buffer_mark_dirty (&handle->buffer);
3dc48: e3a03001 mov r3, #1 <== NOT EXECUTED
3dc4c: e5cd3038 strb r3, [sp, #56] ; 0x38 <== NOT EXECUTED
3dc50: eaffffbf b 3db54 <rtems_rfs_unlink+0x110> <== NOT EXECUTED
00023a90 <rtems_shell_debugrfs>:
printf (" -l: The debugger command list.\n");
}
int
rtems_shell_debugrfs (int argc, char *argv[])
{
23a90: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
"Display a block as a table for directory entrie, dir <bno>" },
{ "group", rtems_rfs_shell_group,
"Display the group data of a file system, group, group <group>, group <start> <end>" },
{ "inode", rtems_rfs_shell_inode,
"Display an inode, inode <ino>, inode> <ino>..<ino>" }
};
23a94: e59fe234 ldr lr, [pc, #564] ; 23cd0 <rtems_shell_debugrfs+0x240><== NOT EXECUTED
printf (" -l: The debugger command list.\n");
}
int
rtems_shell_debugrfs (int argc, char *argv[])
{
23a98: e24dd08c sub sp, sp, #140 ; 0x8c <== NOT EXECUTED
23a9c: e1a06000 mov r6, r0 <== NOT EXECUTED
23aa0: e1a05001 mov r5, r1 <== NOT EXECUTED
"Display a block as a table for directory entrie, dir <bno>" },
{ "group", rtems_rfs_shell_group,
"Display the group data of a file system, group, group <group>, group <start> <end>" },
{ "inode", rtems_rfs_shell_inode,
"Display an inode, inode <ino>, inode> <ino>..<ino>" }
};
23aa4: e28d4004 add r4, sp, #4 <== NOT EXECUTED
23aa8: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED
23aac: e1a0c004 mov ip, r4 <== NOT EXECUTED
23ab0: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
23ab4: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED
23ab8: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
23abc: e8be000f ldm lr!, {r0, r1, r2, r3} <== NOT EXECUTED
23ac0: e8ac000f stmia ip!, {r0, r1, r2, r3} <== NOT EXECUTED
23ac4: e89e0007 ldm lr, {r0, r1, r2} <== NOT EXECUTED
int arg;
int t;
for (arg = 1; arg < argc; arg++)
23ac8: e3560001 cmp r6, #1 <== NOT EXECUTED
"Display a block as a table for directory entrie, dir <bno>" },
{ "group", rtems_rfs_shell_group,
"Display the group data of a file system, group, group <group>, group <start> <end>" },
{ "inode", rtems_rfs_shell_inode,
"Display an inode, inode <ino>, inode> <ino>..<ino>" }
};
23acc: e88c0007 stm ip, {r0, r1, r2} <== NOT EXECUTED
int arg;
int t;
for (arg = 1; arg < argc; arg++)
23ad0: da000038 ble 23bb8 <rtems_shell_debugrfs+0x128> <== NOT EXECUTED
{
if (argv[arg][0] != '-')
23ad4: e5958004 ldr r8, [r5, #4] <== NOT EXECUTED
23ad8: e5d83000 ldrb r3, [r8] <== NOT EXECUTED
23adc: e353002d cmp r3, #45 ; 0x2d <== NOT EXECUTED
23ae0: 0a000039 beq 23bcc <rtems_shell_debugrfs+0x13c> <== NOT EXECUTED
printf ("error: unknown option: %s\n", argv[arg]);
return 1;
}
}
if ((argc - arg) < 2)
23ae4: e3560002 cmp r6, #2 <== NOT EXECUTED
23ae8: 0a000032 beq 23bb8 <rtems_shell_debugrfs+0x128> <== NOT EXECUTED
rtems_rfs_get_fs (const char* path, rtems_rfs_file_system** fs)
{
struct statvfs sb;
int rc;
rc = statvfs (path, &sb);
23aec: e1a00008 mov r0, r8 <== NOT EXECUTED
23af0: e28d1040 add r1, sp, #64 ; 0x40 <== NOT EXECUTED
23af4: eb001baa bl 2a9a4 <statvfs> <== NOT EXECUTED
if (rc < 0)
23af8: e3500000 cmp r0, #0 <== NOT EXECUTED
23afc: ba000067 blt 23ca0 <rtems_shell_debugrfs+0x210> <== NOT EXECUTED
printf ("error: cannot statvfs path: %s: (%d) %s\n",
path, errno, strerror (errno));
return -1;
}
if (sb.f_fsid != RTEMS_RFS_SB_MAGIC)
23b00: e3a0334a mov r3, #671088641 ; 0x28000001 <== NOT EXECUTED
23b04: e59d206c ldr r2, [sp, #108] ; 0x6c <== NOT EXECUTED
23b08: e2833a92 add r3, r3, #598016 ; 0x92000 <== NOT EXECUTED
23b0c: e1520003 cmp r2, r3 <== NOT EXECUTED
23b10: 1a00005d bne 23c8c <rtems_shell_debugrfs+0x1fc> <== NOT EXECUTED
* Now find the path location on the file system. This will give the file
* system data.
*/
{
rtems_filesystem_location_info_t pathloc;
rc = rtems_filesystem_evaluate_path (path, strlen (path), 0, &pathloc, true);
23b14: e1a00008 mov r0, r8 <== NOT EXECUTED
23b18: eb009831 bl 49be4 <strlen> <== NOT EXECUTED
23b1c: e28d7078 add r7, sp, #120 ; 0x78 <== NOT EXECUTED
23b20: e1a01000 mov r1, r0 <== NOT EXECUTED
23b24: e3a02000 mov r2, #0 <== NOT EXECUTED
23b28: e1a00008 mov r0, r8 <== NOT EXECUTED
23b2c: e1a03007 mov r3, r7 <== NOT EXECUTED
23b30: e3a0c001 mov ip, #1 <== NOT EXECUTED
23b34: e58dc000 str ip, [sp] <== NOT EXECUTED
23b38: ebff906a bl 7ce8 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
*fs = rtems_rfs_rtems_pathloc_dev (&pathloc);
rtems_filesystem_freenode (&pathloc);
23b3c: e59d3084 ldr r3, [sp, #132] ; 0x84 <== NOT EXECUTED
* system data.
*/
{
rtems_filesystem_location_info_t pathloc;
rc = rtems_filesystem_evaluate_path (path, strlen (path), 0, &pathloc, true);
*fs = rtems_rfs_rtems_pathloc_dev (&pathloc);
23b40: e59d2088 ldr r2, [sp, #136] ; 0x88 <== NOT EXECUTED
rtems_filesystem_freenode (&pathloc);
23b44: e3530000 cmp r3, #0 <== NOT EXECUTED
* Now find the path location on the file system. This will give the file
* system data.
*/
{
rtems_filesystem_location_info_t pathloc;
rc = rtems_filesystem_evaluate_path (path, strlen (path), 0, &pathloc, true);
23b48: e1a08000 mov r8, r0 <== NOT EXECUTED
*fs = rtems_rfs_rtems_pathloc_dev (&pathloc);
23b4c: e592a034 ldr sl, [r2, #52] ; 0x34 <== NOT EXECUTED
rtems_filesystem_freenode (&pathloc);
23b50: 0a000004 beq 23b68 <rtems_shell_debugrfs+0xd8> <== NOT EXECUTED
23b54: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
23b58: e3530000 cmp r3, #0 <== NOT EXECUTED
23b5c: 11a00007 movne r0, r7 <== NOT EXECUTED
23b60: 11a0e00f movne lr, pc <== NOT EXECUTED
23b64: 112fff13 bxne r3 <== NOT EXECUTED
if ((argc - arg) < 2)
printf ("error: you need at least a path and command, try %s -h\n", argv[0]);
else
{
rtems_rfs_file_system* fs;
if (rtems_rfs_get_fs (argv[arg], &fs) == 0)
23b68: e3580000 cmp r8, #0 <== NOT EXECUTED
23b6c: 1a00000e bne 23bac <rtems_shell_debugrfs+0x11c> <== NOT EXECUTED
23b70: e5959008 ldr r9, [r5, #8] <== NOT EXECUTED
23b74: e1a07008 mov r7, r8 <== NOT EXECUTED
23b78: e2855008 add r5, r5, #8 <== NOT EXECUTED
{
for (t = 0; t < (sizeof (table) / sizeof (const rtems_rfs_shell_cmd)); t++)
if (strcmp (argv[arg + 1], table[t].name) == 0)
23b7c: e7941007 ldr r1, [r4, r7] <== NOT EXECUTED
23b80: e1a00009 mov r0, r9 <== NOT EXECUTED
23b84: eb0095ae bl 49244 <strcmp> <== NOT EXECUTED
23b88: e3500000 cmp r0, #0 <== NOT EXECUTED
23b8c: 0a000035 beq 23c68 <rtems_shell_debugrfs+0x1d8> <== NOT EXECUTED
else
{
rtems_rfs_file_system* fs;
if (rtems_rfs_get_fs (argv[arg], &fs) == 0)
{
for (t = 0; t < (sizeof (table) / sizeof (const rtems_rfs_shell_cmd)); t++)
23b90: e2888001 add r8, r8, #1 <== NOT EXECUTED
23b94: e3580005 cmp r8, #5 <== NOT EXECUTED
23b98: e287700c add r7, r7, #12 <== NOT EXECUTED
23b9c: 1afffff6 bne 23b7c <rtems_shell_debugrfs+0xec> <== NOT EXECUTED
if (strcmp (argv[arg + 1], table[t].name) == 0)
return table[t].handler (fs, argc - 2, argv + 2);
printf ("error: command not found: %s\n", argv[arg + 1]);
23ba0: e1a01009 mov r1, r9 <== NOT EXECUTED
23ba4: e59f0128 ldr r0, [pc, #296] ; 23cd4 <rtems_shell_debugrfs+0x244><== NOT EXECUTED
23ba8: eb008e6e bl 47568 <printf> <== NOT EXECUTED
23bac: e3a00001 mov r0, #1 <== NOT EXECUTED
}
}
return 1;
}
23bb0: e28dd08c add sp, sp, #140 ; 0x8c <== NOT EXECUTED
23bb4: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
return 1;
}
}
if ((argc - arg) < 2)
printf ("error: you need at least a path and command, try %s -h\n", argv[0]);
23bb8: e5951000 ldr r1, [r5] <== NOT EXECUTED
23bbc: e59f0114 ldr r0, [pc, #276] ; 23cd8 <rtems_shell_debugrfs+0x248><== NOT EXECUTED
23bc0: eb008e68 bl 47568 <printf> <== NOT EXECUTED
23bc4: e3a00001 mov r0, #1 <== NOT EXECUTED
23bc8: eafffff8 b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
{
if (argv[arg][0] != '-')
break;
switch (argv[arg][1])
23bcc: e5d83001 ldrb r3, [r8, #1] <== NOT EXECUTED
23bd0: e3530068 cmp r3, #104 ; 0x68 <== NOT EXECUTED
23bd4: 0a000006 beq 23bf4 <rtems_shell_debugrfs+0x164> <== NOT EXECUTED
23bd8: e353006c cmp r3, #108 ; 0x6c <== NOT EXECUTED
23bdc: 0a000008 beq 23c04 <rtems_shell_debugrfs+0x174> <== NOT EXECUTED
printf ("%s: commands are:\n", argv[0]);
for (t = 0; t < (sizeof (table) / sizeof (const rtems_rfs_shell_cmd)); t++)
printf (" %s\t\t%s\n", table[t].name, table[t].help);
return 0;
default:
printf ("error: unknown option: %s\n", argv[arg]);
23be0: e1a01008 mov r1, r8 <== NOT EXECUTED
23be4: e59f00f0 ldr r0, [pc, #240] ; 23cdc <rtems_shell_debugrfs+0x24c><== NOT EXECUTED
23be8: eb008e5e bl 47568 <printf> <== NOT EXECUTED
23bec: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
23bf0: eaffffee b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
break;
switch (argv[arg][1])
{
case 'h':
rtems_rfs_shell_usage (argv[0]);
23bf4: e5950000 ldr r0, [r5] <== NOT EXECUTED
23bf8: ebfffb75 bl 229d4 <rtems_rfs_shell_usage> <== NOT EXECUTED
23bfc: e3a00000 mov r0, #0 <== NOT EXECUTED
return 0;
23c00: eaffffea b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
case 'l':
printf ("%s: commands are:\n", argv[0]);
23c04: e5951000 ldr r1, [r5] <== NOT EXECUTED
23c08: e59f00d0 ldr r0, [pc, #208] ; 23ce0 <rtems_shell_debugrfs+0x250><== NOT EXECUTED
23c0c: eb008e55 bl 47568 <printf> <== NOT EXECUTED
for (t = 0; t < (sizeof (table) / sizeof (const rtems_rfs_shell_cmd)); t++)
printf (" %s\t\t%s\n", table[t].name, table[t].help);
23c10: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
23c14: e59d200c ldr r2, [sp, #12] <== NOT EXECUTED
23c18: e59f00c4 ldr r0, [pc, #196] ; 23ce4 <rtems_shell_debugrfs+0x254><== NOT EXECUTED
23c1c: eb008e51 bl 47568 <printf> <== NOT EXECUTED
23c20: e59d1010 ldr r1, [sp, #16] <== NOT EXECUTED
23c24: e59d2018 ldr r2, [sp, #24] <== NOT EXECUTED
23c28: e59f00b4 ldr r0, [pc, #180] ; 23ce4 <rtems_shell_debugrfs+0x254><== NOT EXECUTED
23c2c: eb008e4d bl 47568 <printf> <== NOT EXECUTED
23c30: e59d101c ldr r1, [sp, #28] <== NOT EXECUTED
23c34: e59d2024 ldr r2, [sp, #36] ; 0x24 <== NOT EXECUTED
23c38: e59f00a4 ldr r0, [pc, #164] ; 23ce4 <rtems_shell_debugrfs+0x254><== NOT EXECUTED
23c3c: eb008e49 bl 47568 <printf> <== NOT EXECUTED
23c40: e59d1028 ldr r1, [sp, #40] ; 0x28 <== NOT EXECUTED
23c44: e59d2030 ldr r2, [sp, #48] ; 0x30 <== NOT EXECUTED
23c48: e59f0094 ldr r0, [pc, #148] ; 23ce4 <rtems_shell_debugrfs+0x254><== NOT EXECUTED
23c4c: eb008e45 bl 47568 <printf> <== NOT EXECUTED
23c50: e59f008c ldr r0, [pc, #140] ; 23ce4 <rtems_shell_debugrfs+0x254><== NOT EXECUTED
23c54: e59d1034 ldr r1, [sp, #52] ; 0x34 <== NOT EXECUTED
23c58: e59d203c ldr r2, [sp, #60] ; 0x3c <== NOT EXECUTED
23c5c: eb008e41 bl 47568 <printf> <== NOT EXECUTED
23c60: e3a00000 mov r0, #0 <== NOT EXECUTED
23c64: eaffffd1 b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
rtems_rfs_file_system* fs;
if (rtems_rfs_get_fs (argv[arg], &fs) == 0)
{
for (t = 0; t < (sizeof (table) / sizeof (const rtems_rfs_shell_cmd)); t++)
if (strcmp (argv[arg + 1], table[t].name) == 0)
return table[t].handler (fs, argc - 2, argv + 2);
23c68: e28d208c add r2, sp, #140 ; 0x8c <== NOT EXECUTED
23c6c: e0888088 add r8, r8, r8, lsl #1 <== NOT EXECUTED
23c70: e0823108 add r3, r2, r8, lsl #2 <== NOT EXECUTED
23c74: e1a0000a mov r0, sl <== NOT EXECUTED
23c78: e2461002 sub r1, r6, #2 <== NOT EXECUTED
23c7c: e1a02005 mov r2, r5 <== NOT EXECUTED
23c80: e1a0e00f mov lr, pc <== NOT EXECUTED
23c84: e513f084 ldr pc, [r3, #-132] ; 0x84 <== NOT EXECUTED
23c88: eaffffc8 b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
return -1;
}
if (sb.f_fsid != RTEMS_RFS_SB_MAGIC)
{
printf ("error: path '%s' is not on an RFS file system\n", path);
23c8c: e1a01008 mov r1, r8 <== NOT EXECUTED
23c90: e59f0050 ldr r0, [pc, #80] ; 23ce8 <rtems_shell_debugrfs+0x258><== NOT EXECUTED
23c94: eb008e33 bl 47568 <printf> <== NOT EXECUTED
23c98: e3a00001 mov r0, #1 <== NOT EXECUTED
23c9c: eaffffc3 b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
int rc;
rc = statvfs (path, &sb);
if (rc < 0)
{
printf ("error: cannot statvfs path: %s: (%d) %s\n",
23ca0: eb007cd2 bl 42ff0 <__errno> <== NOT EXECUTED
23ca4: e5904000 ldr r4, [r0] <== NOT EXECUTED
23ca8: eb007cd0 bl 42ff0 <__errno> <== NOT EXECUTED
23cac: e5900000 ldr r0, [r0] <== NOT EXECUTED
23cb0: eb00963f bl 495b4 <strerror> <== NOT EXECUTED
23cb4: e1a01008 mov r1, r8 <== NOT EXECUTED
23cb8: e1a03000 mov r3, r0 <== NOT EXECUTED
23cbc: e1a02004 mov r2, r4 <== NOT EXECUTED
23cc0: e59f0024 ldr r0, [pc, #36] ; 23cec <rtems_shell_debugrfs+0x25c><== NOT EXECUTED
23cc4: eb008e27 bl 47568 <printf> <== NOT EXECUTED
23cc8: e3a00001 mov r0, #1 <== NOT EXECUTED
23ccc: eaffffb7 b 23bb0 <rtems_shell_debugrfs+0x120> <== NOT EXECUTED
00022a3c <rtems_shell_rfs_format>:
return 1;
}
int
rtems_shell_rfs_format (int argc, char* argv[])
{
22a3c: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
22a40: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
rtems_rfs_format_config config;
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
22a44: e3a05000 mov r5, #0 <== NOT EXECUTED
22a48: e28d3008 add r3, sp, #8 <== NOT EXECUTED
22a4c: e4835004 str r5, [r3], #4 <== NOT EXECUTED
22a50: e4835004 str r5, [r3], #4 <== NOT EXECUTED
22a54: e4835004 str r5, [r3], #4 <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
22a58: e3500001 cmp r0, #1 <== NOT EXECUTED
{
rtems_rfs_format_config config;
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
22a5c: e1a0800d mov r8, sp <== NOT EXECUTED
return 1;
}
int
rtems_shell_rfs_format (int argc, char* argv[])
{
22a60: e1a06000 mov r6, r0 <== NOT EXECUTED
rtems_rfs_format_config config;
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
22a64: e5835000 str r5, [r3] <== NOT EXECUTED
return 1;
}
int
rtems_shell_rfs_format (int argc, char* argv[])
{
22a68: e1a07001 mov r7, r1 <== NOT EXECUTED
rtems_rfs_format_config config;
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
22a6c: e58d5000 str r5, [sp] <== NOT EXECUTED
22a70: e58d5004 str r5, [sp, #4] <== NOT EXECUTED
for (arg = 1; arg < argc; arg++)
22a74: da00008b ble 22ca8 <rtems_shell_rfs_format+0x26c> <== NOT EXECUTED
22a78: e3a04001 mov r4, #1 <== NOT EXECUTED
}
config.group_inodes = strtoul (argv[arg], 0, 0);
break;
case 'I':
config.initialise_inodes = true;
22a7c: e1a0a004 mov sl, r4 <== NOT EXECUTED
22a80: ea000005 b 22a9c <rtems_shell_rfs_format+0x60> <== NOT EXECUTED
return 1;
}
}
else
{
if (!driver)
22a84: e3550000 cmp r5, #0 <== NOT EXECUTED
22a88: 1a000081 bne 22c94 <rtems_shell_rfs_format+0x258> <== NOT EXECUTED
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
for (arg = 1; arg < argc; arg++)
22a8c: e2844001 add r4, r4, #1 <== NOT EXECUTED
22a90: e1560004 cmp r6, r4 <== NOT EXECUTED
22a94: da00003c ble 22b8c <rtems_shell_rfs_format+0x150> <== NOT EXECUTED
22a98: e1a05009 mov r5, r9 <== NOT EXECUTED
{
if (argv[arg][0] == '-')
22a9c: e7979104 ldr r9, [r7, r4, lsl #2] <== NOT EXECUTED
22aa0: e5d93000 ldrb r3, [r9] <== NOT EXECUTED
22aa4: e353002d cmp r3, #45 ; 0x2d <== NOT EXECUTED
22aa8: 1afffff5 bne 22a84 <rtems_shell_rfs_format+0x48> <== NOT EXECUTED
{
switch (argv[arg][1])
22aac: e5d93001 ldrb r3, [r9, #1] <== NOT EXECUTED
22ab0: e2433049 sub r3, r3, #73 ; 0x49 <== NOT EXECUTED
22ab4: e353002d cmp r3, #45 ; 0x2d <== NOT EXECUTED
22ab8: 979ff103 ldrls pc, [pc, r3, lsl #2] <== NOT EXECUTED
22abc: ea00006e b 22c7c <rtems_shell_rfs_format+0x240> <== NOT EXECUTED
22ac0: 00022c70 .word 0x00022c70 <== NOT EXECUTED
22ac4: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ac8: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22acc: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ad0: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ad4: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ad8: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22adc: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ae0: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ae4: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22ae8: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22aec: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22af0: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22af4: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22af8: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22afc: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b00: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b04: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b08: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b0c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b10: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b14: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b18: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b1c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b20: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b24: 00022c48 .word 0x00022c48 <== NOT EXECUTED
22b28: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b2c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b30: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b34: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b38: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b3c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b40: 00022c20 .word 0x00022c20 <== NOT EXECUTED
22b44: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b48: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b4c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b50: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b54: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b58: 00022bf8 .word 0x00022bf8 <== NOT EXECUTED
22b5c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b60: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b64: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b68: 00022bd0 .word 0x00022bd0 <== NOT EXECUTED
22b6c: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b70: 00022c7c .word 0x00022c7c <== NOT EXECUTED
22b74: 00022b78 .word 0x00022b78 <== NOT EXECUTED
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
for (arg = 1; arg < argc; arg++)
22b78: e2844001 add r4, r4, #1 <== NOT EXECUTED
22b7c: e1560004 cmp r6, r4 <== NOT EXECUTED
if (argv[arg][0] == '-')
{
switch (argv[arg][1])
{
case 'v':
config.verbose = true;
22b80: e5cda015 strb sl, [sp, #21] <== NOT EXECUTED
22b84: e1a09005 mov r9, r5 <== NOT EXECUTED
const char* driver = NULL;
int arg;
memset (&config, 0, sizeof (rtems_rfs_format_config));
for (arg = 1; arg < argc; arg++)
22b88: caffffc2 bgt 22a98 <rtems_shell_rfs_format+0x5c> <== NOT EXECUTED
return 1;
}
}
}
if (!driver) {
22b8c: e3590000 cmp r9, #0 <== NOT EXECUTED
22b90: 0a000044 beq 22ca8 <rtems_shell_rfs_format+0x26c> <== NOT EXECUTED
printf ("error: no driver name provided\n");
return 1;
}
if (rtems_rfs_format (driver, &config) < 0)
22b94: e1a0100d mov r1, sp <== NOT EXECUTED
22b98: e1a00009 mov r0, r9 <== NOT EXECUTED
22b9c: eb00640d bl 3bbd8 <rtems_rfs_format> <== NOT EXECUTED
22ba0: e3500000 cmp r0, #0 <== NOT EXECUTED
22ba4: a3a00000 movge r0, #0 <== NOT EXECUTED
22ba8: aa000037 bge 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
{
printf ("error: format of %s failed: %s\n",
22bac: eb00810f bl 42ff0 <__errno> <== NOT EXECUTED
22bb0: e5900000 ldr r0, [r0] <== NOT EXECUTED
22bb4: eb009a7e bl 495b4 <strerror> <== NOT EXECUTED
22bb8: e1a01009 mov r1, r9 <== NOT EXECUTED
22bbc: e1a02000 mov r2, r0 <== NOT EXECUTED
22bc0: e59f0130 ldr r0, [pc, #304] ; 22cf8 <rtems_shell_rfs_format+0x2bc><== NOT EXECUTED
22bc4: eb009267 bl 47568 <printf> <== NOT EXECUTED
22bc8: e3a00001 mov r0, #1 <== NOT EXECUTED
driver, strerror (errno));
return 1;
22bcc: ea00002e b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
case 'v':
config.verbose = true;
break;
case 's':
arg++;
22bd0: e2844001 add r4, r4, #1 <== NOT EXECUTED
if (arg >= argc)
22bd4: e1560004 cmp r6, r4 <== NOT EXECUTED
22bd8: da00003a ble 22cc8 <rtems_shell_rfs_format+0x28c> <== NOT EXECUTED
{
printf ("error: block size needs an argument\n");
return 1;
}
config.block_size = strtoul (argv[arg], 0, 0);
22bdc: e3a01000 mov r1, #0 <== NOT EXECUTED
22be0: e7970104 ldr r0, [r7, r4, lsl #2] <== NOT EXECUTED
22be4: e1a02001 mov r2, r1 <== NOT EXECUTED
22be8: eb00a119 bl 4b054 <strtoul> <== NOT EXECUTED
22bec: e1a09005 mov r9, r5 <== NOT EXECUTED
22bf0: e58d0000 str r0, [sp] <== NOT EXECUTED
break;
22bf4: eaffffa4 b 22a8c <rtems_shell_rfs_format+0x50> <== NOT EXECUTED
case 'I':
config.initialise_inodes = true;
break;
case 'o':
arg++;
22bf8: e2844001 add r4, r4, #1 <== NOT EXECUTED
if (arg >= argc)
22bfc: e1560004 cmp r6, r4 <== NOT EXECUTED
22c00: da000038 ble 22ce8 <rtems_shell_rfs_format+0x2ac> <== NOT EXECUTED
{
printf ("error: inode percentage overhead needs an argument\n");
return 1;
}
config.inode_overhead = strtoul (argv[arg], 0, 0);
22c04: e3a01000 mov r1, #0 <== NOT EXECUTED
22c08: e7970104 ldr r0, [r7, r4, lsl #2] <== NOT EXECUTED
22c0c: e1a02001 mov r2, r1 <== NOT EXECUTED
22c10: eb00a10f bl 4b054 <strtoul> <== NOT EXECUTED
22c14: e1a09005 mov r9, r5 <== NOT EXECUTED
22c18: e58d000c str r0, [sp, #12] <== NOT EXECUTED
break;
22c1c: eaffff9a b 22a8c <rtems_shell_rfs_format+0x50> <== NOT EXECUTED
}
config.group_blocks = strtoul (argv[arg], 0, 0);
break;
case 'i':
arg++;
22c20: e2844001 add r4, r4, #1 <== NOT EXECUTED
if (arg >= argc)
22c24: e1560004 cmp r6, r4 <== NOT EXECUTED
22c28: da00002a ble 22cd8 <rtems_shell_rfs_format+0x29c> <== NOT EXECUTED
{
printf ("error: group inode count needs an argument\n");
return 1;
}
config.group_inodes = strtoul (argv[arg], 0, 0);
22c2c: e3a01000 mov r1, #0 <== NOT EXECUTED
22c30: e7970104 ldr r0, [r7, r4, lsl #2] <== NOT EXECUTED
22c34: e1a02001 mov r2, r1 <== NOT EXECUTED
22c38: eb00a105 bl 4b054 <strtoul> <== NOT EXECUTED
22c3c: e1a09005 mov r9, r5 <== NOT EXECUTED
22c40: e58d0008 str r0, [sp, #8] <== NOT EXECUTED
break;
22c44: eaffff90 b 22a8c <rtems_shell_rfs_format+0x50> <== NOT EXECUTED
}
config.block_size = strtoul (argv[arg], 0, 0);
break;
case 'b':
arg++;
22c48: e2844001 add r4, r4, #1 <== NOT EXECUTED
if (arg >= argc)
22c4c: e1560004 cmp r6, r4 <== NOT EXECUTED
22c50: da000018 ble 22cb8 <rtems_shell_rfs_format+0x27c> <== NOT EXECUTED
{
printf ("error: group block count needs an argument\n");
return 1;
}
config.group_blocks = strtoul (argv[arg], 0, 0);
22c54: e3a01000 mov r1, #0 <== NOT EXECUTED
22c58: e7970104 ldr r0, [r7, r4, lsl #2] <== NOT EXECUTED
22c5c: e1a02001 mov r2, r1 <== NOT EXECUTED
22c60: eb00a0fb bl 4b054 <strtoul> <== NOT EXECUTED
22c64: e1a09005 mov r9, r5 <== NOT EXECUTED
22c68: e58d0004 str r0, [sp, #4] <== NOT EXECUTED
break;
22c6c: eaffff86 b 22a8c <rtems_shell_rfs_format+0x50> <== NOT EXECUTED
}
config.group_inodes = strtoul (argv[arg], 0, 0);
break;
case 'I':
config.initialise_inodes = true;
22c70: e5cda014 strb sl, [sp, #20] <== NOT EXECUTED
22c74: e1a09005 mov r9, r5 <== NOT EXECUTED
break;
22c78: eaffff83 b 22a8c <rtems_shell_rfs_format+0x50> <== NOT EXECUTED
}
config.inode_overhead = strtoul (argv[arg], 0, 0);
break;
default:
printf ("error: invalid option: %s\n", argv[arg]);
22c7c: e1a01009 mov r1, r9 <== NOT EXECUTED
22c80: e59f0074 ldr r0, [pc, #116] ; 22cfc <rtems_shell_rfs_format+0x2c0><== NOT EXECUTED
22c84: eb009237 bl 47568 <printf> <== NOT EXECUTED
22c88: e3a00001 mov r0, #1 <== NOT EXECUTED
driver, strerror (errno));
return 1;
}
return 0;
}
22c8c: e28dd018 add sp, sp, #24 <== NOT EXECUTED
22c90: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
{
if (!driver)
driver = argv[arg];
else
{
printf ("error: only one driver name allowed: %s\n", argv[arg]);
22c94: e1a01009 mov r1, r9 <== NOT EXECUTED
22c98: e59f0060 ldr r0, [pc, #96] ; 22d00 <rtems_shell_rfs_format+0x2c4><== NOT EXECUTED
22c9c: eb009231 bl 47568 <printf> <== NOT EXECUTED
22ca0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22ca4: eafffff8 b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
}
}
}
if (!driver) {
printf ("error: no driver name provided\n");
22ca8: e59f0054 ldr r0, [pc, #84] ; 22d04 <rtems_shell_rfs_format+0x2c8><== NOT EXECUTED
22cac: eb0092d2 bl 477fc <puts> <== NOT EXECUTED
22cb0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22cb4: eafffff4 b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
case 'b':
arg++;
if (arg >= argc)
{
printf ("error: group block count needs an argument\n");
22cb8: e59f0048 ldr r0, [pc, #72] ; 22d08 <rtems_shell_rfs_format+0x2cc><== NOT EXECUTED
22cbc: eb0092ce bl 477fc <puts> <== NOT EXECUTED
22cc0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22cc4: eafffff0 b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
case 's':
arg++;
if (arg >= argc)
{
printf ("error: block size needs an argument\n");
22cc8: e59f003c ldr r0, [pc, #60] ; 22d0c <rtems_shell_rfs_format+0x2d0><== NOT EXECUTED
22ccc: eb0092ca bl 477fc <puts> <== NOT EXECUTED
22cd0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22cd4: eaffffec b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
case 'i':
arg++;
if (arg >= argc)
{
printf ("error: group inode count needs an argument\n");
22cd8: e59f0030 ldr r0, [pc, #48] ; 22d10 <rtems_shell_rfs_format+0x2d4><== NOT EXECUTED
22cdc: eb0092c6 bl 477fc <puts> <== NOT EXECUTED
22ce0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22ce4: eaffffe8 b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
case 'o':
arg++;
if (arg >= argc)
{
printf ("error: inode percentage overhead needs an argument\n");
22ce8: e59f0024 ldr r0, [pc, #36] ; 22d14 <rtems_shell_rfs_format+0x2d8><== NOT EXECUTED
22cec: eb0092c2 bl 477fc <puts> <== NOT EXECUTED
22cf0: e3a00001 mov r0, #1 <== NOT EXECUTED
return 1;
22cf4: eaffffe4 b 22c8c <rtems_shell_rfs_format+0x250> <== NOT EXECUTED
0000635c <rtems_stack_checker_is_blown>:
/*
* Check if blown
*/
bool rtems_stack_checker_is_blown( void )
{
635c: e92d4830 push {r4, r5, fp, lr}
Stack_Control *the_stack = &_Thread_Executing->Start.Initial_stack;
6360: e59f4078 ldr r4, [pc, #120] ; 63e0 <rtems_stack_checker_is_blown+0x84>
6364: e5943000 ldr r3, [r4]
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
6368: e59300c4 ldr r0, [r3, #196] ; 0xc4
/*
* Check if blown
*/
bool rtems_stack_checker_is_blown( void )
{
636c: e28db00c add fp, sp, #12
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
6370: e15b0000 cmp fp, r0
6374: 33a05000 movcc r5, #0
6378: 3a000004 bcc 6390 <rtems_stack_checker_is_blown+0x34>
}
/*
* Check if blown
*/
bool rtems_stack_checker_is_blown( void )
637c: e59350c0 ldr r5, [r3, #192] ; 0xc0
6380: e0805005 add r5, r0, r5
6384: e15b0005 cmp fp, r5
6388: 83a05000 movhi r5, #0
638c: 93a05001 movls r5, #1
/*
* The stack checker must be initialized before the pattern is there
* to check.
*/
if ( Stack_check_Initialized ) {
6390: e59f304c ldr r3, [pc, #76] ; 63e4 <rtems_stack_checker_is_blown+0x88>
6394: e5933000 ldr r3, [r3]
6398: e3530000 cmp r3, #0
639c: 03a01001 moveq r1, #1
63a0: 0a000005 beq 63bc <rtems_stack_checker_is_blown+0x60>
pattern_ok = (!memcmp(
63a4: e59f103c ldr r1, [pc, #60] ; 63e8 <rtems_stack_checker_is_blown+0x8c>
63a8: e2800008 add r0, r0, #8
63ac: e3a02010 mov r2, #16
63b0: eb00ff94 bl 46208 <memcmp>
63b4: e2701001 rsbs r1, r0, #1
63b8: 33a01000 movcc r1, #0
}
/*
* The Stack Pointer and the Pattern Area are OK so return false.
*/
if ( sp_ok && pattern_ok )
63bc: e3550000 cmp r5, #0
63c0: 0a000002 beq 63d0 <rtems_stack_checker_is_blown+0x74>
63c4: e3510000 cmp r1, #0
63c8: 13a00000 movne r0, #0
63cc: 18bd8830 popne {r4, r5, fp, pc}
return false;
/*
* Let's report as much as we can.
*/
Stack_check_report_blown_task( _Thread_Executing, pattern_ok );
63d0: e5940000 ldr r0, [r4] <== NOT EXECUTED
63d4: ebffffb3 bl 62a8 <Stack_check_report_blown_task> <== NOT EXECUTED
63d8: e3a00001 mov r0, #1 <== NOT EXECUTED
return true;
}
63dc: e8bd8830 pop {r4, r5, fp, pc} <== NOT EXECUTED
00006298 <rtems_stack_checker_report_usage>:
void rtems_stack_checker_report_usage( void )
{
rtems_stack_checker_report_usage_with_plugin( NULL, printk_plugin );
6298: e59f1004 ldr r1, [pc, #4] ; 62a4 <rtems_stack_checker_report_usage+0xc><== NOT EXECUTED
629c: e3a00000 mov r0, #0 <== NOT EXECUTED
62a0: eaffffe3 b 6234 <rtems_stack_checker_report_usage_with_plugin><== NOT EXECUTED
00006234 <rtems_stack_checker_report_usage_with_plugin>:
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
6234: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
print_context = context;
6238: e59f4048 ldr r4, [pc, #72] ; 6288 <rtems_stack_checker_report_usage_with_plugin+0x54><== NOT EXECUTED
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
623c: e1a05001 mov r5, r1 <== NOT EXECUTED
6240: e1a06000 mov r6, r0 <== NOT EXECUTED
print_context = context;
print_handler = print;
6244: e5841004 str r1, [r4, #4] <== NOT EXECUTED
void rtems_stack_checker_report_usage_with_plugin(
void *context,
rtems_printk_plugin_t print
)
{
print_context = context;
6248: e5840008 str r0, [r4, #8] <== NOT EXECUTED
print_handler = print;
(*print)( context, "Stack usage by thread\n");
624c: e59f1038 ldr r1, [pc, #56] ; 628c <rtems_stack_checker_report_usage_with_plugin+0x58><== NOT EXECUTED
6250: e1a0e00f mov lr, pc <== NOT EXECUTED
6254: e12fff15 bx r5 <== NOT EXECUTED
(*print)( context,
6258: e59f1030 ldr r1, [pc, #48] ; 6290 <rtems_stack_checker_report_usage_with_plugin+0x5c><== NOT EXECUTED
625c: e1a00006 mov r0, r6 <== NOT EXECUTED
6260: e1a0e00f mov lr, pc <== NOT EXECUTED
6264: e12fff15 bx r5 <== NOT EXECUTED
" ID NAME LOW HIGH CURRENT AVAILABLE USED\n"
);
/* iterate over all threads and dump the usage */
rtems_iterate_over_all_threads( Stack_check_Dump_threads_usage );
6268: e59f0024 ldr r0, [pc, #36] ; 6294 <rtems_stack_checker_report_usage_with_plugin+0x60><== NOT EXECUTED
626c: eb001df4 bl da44 <rtems_iterate_over_all_threads> <== NOT EXECUTED
/* dump interrupt stack info if any */
Stack_check_Dump_threads_usage((Thread_Control *) -1);
6270: e3e00000 mvn r0, #0 <== NOT EXECUTED
6274: ebffff9d bl 60f0 <Stack_check_Dump_threads_usage> <== NOT EXECUTED
print_context = NULL;
6278: e3a03000 mov r3, #0 <== NOT EXECUTED
print_handler = NULL;
627c: e5843004 str r3, [r4, #4] <== NOT EXECUTED
rtems_iterate_over_all_threads( Stack_check_Dump_threads_usage );
/* dump interrupt stack info if any */
Stack_check_Dump_threads_usage((Thread_Control *) -1);
print_context = NULL;
6280: e5843008 str r3, [r4, #8] <== NOT EXECUTED
print_handler = NULL;
}
6284: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
000063ec <rtems_stack_checker_switch_extension>:
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
63ec: e92d4810 push {r4, fp, lr}
Stack_Control *the_stack = &running->Start.Initial_stack;
void *pattern;
bool sp_ok;
bool pattern_ok = true;
pattern = (void *) Stack_check_Get_pattern_area(the_stack)->pattern;
63f0: e59030c4 ldr r3, [r0, #196] ; 0xc4
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
63f4: e28db008 add fp, sp, #8
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
63f8: e15b0003 cmp fp, r3
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
63fc: e1a04000 mov r4, r0
Stack_Control *the_stack = &running->Start.Initial_stack;
void *pattern;
bool sp_ok;
bool pattern_ok = true;
pattern = (void *) Stack_check_Get_pattern_area(the_stack)->pattern;
6400: e2830008 add r0, r3, #8
)
{
#if defined(__GNUC__)
void *sp = __builtin_frame_address(0);
if ( sp < the_stack->area ) {
6404: 3a000003 bcc 6418 <rtems_stack_checker_switch_extension+0x2c>
void rtems_stack_checker_switch_extension(
Thread_Control *running __attribute__((unused)),
Thread_Control *heir __attribute__((unused))
)
{
Stack_Control *the_stack = &running->Start.Initial_stack;
6408: e59420c0 ldr r2, [r4, #192] ; 0xc0
640c: e0833002 add r3, r3, r2
6410: e15b0003 cmp fp, r3
6414: 9a000007 bls 6438 <rtems_stack_checker_switch_extension+0x4c>
/*
* Check for an out of bounds stack pointer or an overwrite
*/
sp_ok = Stack_check_Frame_pointer_in_range( the_stack );
pattern_ok = (!memcmp( pattern,
6418: e59f1034 ldr r1, [pc, #52] ; 6454 <rtems_stack_checker_switch_extension+0x68><== NOT EXECUTED
641c: e3a02010 mov r2, #16 <== NOT EXECUTED
6420: eb00ff78 bl 46208 <memcmp> <== NOT EXECUTED
6424: e2701001 rsbs r1, r0, #1 <== NOT EXECUTED
6428: 33a01000 movcc r1, #0 <== NOT EXECUTED
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
Stack_check_report_blown_task( running, pattern_ok );
642c: e1a00004 mov r0, r4
}
}
6430: e8bd4810 pop {r4, fp, lr}
pattern_ok = (!memcmp( pattern,
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
Stack_check_report_blown_task( running, pattern_ok );
6434: eaffff9b b 62a8 <Stack_check_report_blown_task>
/*
* Check for an out of bounds stack pointer or an overwrite
*/
sp_ok = Stack_check_Frame_pointer_in_range( the_stack );
pattern_ok = (!memcmp( pattern,
6438: e59f1014 ldr r1, [pc, #20] ; 6454 <rtems_stack_checker_switch_extension+0x68>
643c: e3a02010 mov r2, #16
6440: eb00ff70 bl 46208 <memcmp>
(void *) Stack_check_Pattern.pattern, PATTERN_SIZE_BYTES));
if ( !sp_ok || !pattern_ok ) {
6444: e3500000 cmp r0, #0
6448: 13a01000 movne r1, #0
644c: 1afffff6 bne 642c <rtems_stack_checker_switch_extension+0x40>
6450: e8bd8810 pop {r4, fp, pc}
0000b8a8 <rtems_string_to_double>:
rtems_status_code rtems_string_to_double (
const char *s,
double *n,
char **endptr
)
{
b8a8: e92d41f0 push {r4, r5, r6, r7, r8, lr}
double result;
char *end;
if ( !n )
b8ac: e2514000 subs r4, r1, #0
rtems_status_code rtems_string_to_double (
const char *s,
double *n,
char **endptr
)
{
b8b0: e1a07000 mov r7, r0
b8b4: e24dd004 sub sp, sp, #4
b8b8: e1a08002 mov r8, r2
double result;
char *end;
if ( !n )
b8bc: 03a00009 moveq r0, #9
b8c0: 0a000017 beq b924 <rtems_string_to_double+0x7c>
return RTEMS_INVALID_ADDRESS;
errno = 0;
b8c4: eb0008d5 bl dc20 <__errno>
b8c8: e3a03000 mov r3, #0
b8cc: e5803000 str r3, [r0]
*n = 0;
b8d0: e3a02000 mov r2, #0
b8d4: e3a03000 mov r3, #0
b8d8: e884000c stm r4, {r2, r3}
result = strtod( s, &end );
b8dc: e1a00007 mov r0, r7
b8e0: e1a0100d mov r1, sp
b8e4: eb00144b bl 10a18 <strtod>
if ( endptr )
b8e8: e3580000 cmp r8, #0
*endptr = end;
b8ec: 159d3000 ldrne r3, [sp]
b8f0: 059d3000 ldreq r3, [sp]
b8f4: 15883000 strne r3, [r8]
if ( end == s )
b8f8: e1530007 cmp r3, r7
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
result = strtod( s, &end );
b8fc: e1a05000 mov r5, r0
b900: e1a06001 mov r6, r1
if ( endptr )
*endptr = end;
if ( end == s )
b904: 03a0000b moveq r0, #11
b908: 0a000005 beq b924 <rtems_string_to_double+0x7c>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
b90c: eb0008c3 bl dc20 <__errno>
b910: e5903000 ldr r3, [r0]
b914: e3530022 cmp r3, #34 ; 0x22
b918: 0a000003 beq b92c <rtems_string_to_double+0x84>
(( result == 0 ) || ( result == HUGE_VAL ) || ( result == -HUGE_VAL )))
return RTEMS_INVALID_NUMBER;
*n = result;
b91c: e8840060 stm r4, {r5, r6}
b920: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
b924: e28dd004 add sp, sp, #4
b928: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
b92c: e1a00005 mov r0, r5
b930: e1a01006 mov r1, r6
b934: e3a02000 mov r2, #0
b938: e3a03000 mov r3, #0
b93c: ebffdd61 bl 2ec8 <__cmpdf2>
b940: e3500000 cmp r0, #0
b944: 0a00000e beq b984 <rtems_string_to_double+0xdc>
b948: e3e03102 mvn r3, #-2147483648 ; 0x80000000
b94c: e1a00005 mov r0, r5
b950: e1a01006 mov r1, r6
b954: e3e02000 mvn r2, #0
b958: e2433601 sub r3, r3, #1048576 ; 0x100000
b95c: ebffdd55 bl 2eb8 <__gedf2>
b960: e3500000 cmp r0, #0
b964: ca000006 bgt b984 <rtems_string_to_double+0xdc>
b968: e1a00005 mov r0, r5 <== NOT EXECUTED
b96c: e1a01006 mov r1, r6 <== NOT EXECUTED
b970: e3e02000 mvn r2, #0 <== NOT EXECUTED
b974: e3e03601 mvn r3, #1048576 ; 0x100000 <== NOT EXECUTED
b978: ebffdd50 bl 2ec0 <__ledf2> <== NOT EXECUTED
b97c: e3500000 cmp r0, #0 <== NOT EXECUTED
b980: aaffffe5 bge b91c <rtems_string_to_double+0x74> <== NOT EXECUTED
(( result == 0 ) || ( result == HUGE_VAL ) || ( result == -HUGE_VAL )))
return RTEMS_INVALID_NUMBER;
*n = result;
return RTEMS_SUCCESSFUL;
b984: e3a0000a mov r0, #10
b988: eaffffe5 b b924 <rtems_string_to_double+0x7c>
0000b98c <rtems_string_to_float>:
rtems_status_code rtems_string_to_float (
const char *s,
float *n,
char **endptr
)
{
b98c: e92d40f0 push {r4, r5, r6, r7, lr}
float result;
char *end;
if ( !n )
b990: e2515000 subs r5, r1, #0
rtems_status_code rtems_string_to_float (
const char *s,
float *n,
char **endptr
)
{
b994: e1a04000 mov r4, r0
b998: e24dd004 sub sp, sp, #4
b99c: e1a06002 mov r6, r2
float result;
char *end;
if ( !n )
b9a0: 03a00009 moveq r0, #9
b9a4: 0a000015 beq ba00 <rtems_string_to_float+0x74>
return RTEMS_INVALID_ADDRESS;
errno = 0;
b9a8: eb00089c bl dc20 <__errno>
b9ac: e3a03000 mov r3, #0
b9b0: e5803000 str r3, [r0]
*n = 0;
b9b4: e3a03000 mov r3, #0
b9b8: e5853000 str r3, [r5]
result = strtof( s, &end );
b9bc: e1a00004 mov r0, r4
b9c0: e1a0100d mov r1, sp
b9c4: eb001400 bl 109cc <strtof>
if ( endptr )
b9c8: e3560000 cmp r6, #0
*endptr = end;
b9cc: 159d3000 ldrne r3, [sp]
b9d0: 059d3000 ldreq r3, [sp]
b9d4: 15863000 strne r3, [r6]
if ( end == s )
b9d8: e1530004 cmp r3, r4
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
result = strtof( s, &end );
b9dc: e1a07000 mov r7, r0
if ( endptr )
*endptr = end;
if ( end == s )
b9e0: 03a0000b moveq r0, #11
b9e4: 0a000005 beq ba00 <rtems_string_to_float+0x74>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
b9e8: eb00088c bl dc20 <__errno>
b9ec: e5903000 ldr r3, [r0]
b9f0: e3530022 cmp r3, #34 ; 0x22
b9f4: 0a000003 beq ba08 <rtems_string_to_float+0x7c>
(( result == 0 ) || ( result == HUGE_VALF ) || ( result == -HUGE_VALF )))
return RTEMS_INVALID_NUMBER;
*n = result;
b9f8: e5857000 str r7, [r5]
b9fc: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
ba00: e28dd004 add sp, sp, #4
ba04: e8bd80f0 pop {r4, r5, r6, r7, pc}
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
ba08: e1a00007 mov r0, r7
ba0c: e3a01000 mov r1, #0
ba10: ebffdd77 bl 2ff4 <__cmpsf2>
ba14: e3500000 cmp r0, #0
ba18: 0a00000a beq ba48 <rtems_string_to_float+0xbc>
ba1c: e3e01102 mvn r1, #-2147483648 ; 0x80000000
ba20: e1a00007 mov r0, r7
ba24: e2411502 sub r1, r1, #8388608 ; 0x800000
ba28: ebffdd6d bl 2fe4 <__gesf2>
ba2c: e3500000 cmp r0, #0
ba30: ca000004 bgt ba48 <rtems_string_to_float+0xbc>
ba34: e1a00007 mov r0, r7 <== NOT EXECUTED
ba38: e3e01502 mvn r1, #8388608 ; 0x800000 <== NOT EXECUTED
ba3c: ebffdd6a bl 2fec <__lesf2> <== NOT EXECUTED
ba40: e3500000 cmp r0, #0 <== NOT EXECUTED
ba44: aaffffeb bge b9f8 <rtems_string_to_float+0x6c> <== NOT EXECUTED
(( result == 0 ) || ( result == HUGE_VALF ) || ( result == -HUGE_VALF )))
return RTEMS_INVALID_NUMBER;
*n = result;
return RTEMS_SUCCESSFUL;
ba48: e3a0000a mov r0, #10
ba4c: eaffffeb b ba00 <rtems_string_to_float+0x74>
0001ee48 <rtems_string_to_int>:
const char *s,
int *n,
char **endptr,
int base
)
{
1ee48: e92d40f0 push {r4, r5, r6, r7, lr}
long result;
char *end;
if ( !n )
1ee4c: e2516000 subs r6, r1, #0
const char *s,
int *n,
char **endptr,
int base
)
{
1ee50: e1a04000 mov r4, r0
1ee54: e24dd004 sub sp, sp, #4
1ee58: e1a05002 mov r5, r2
1ee5c: e1a07003 mov r7, r3
long result;
char *end;
if ( !n )
1ee60: 03a00009 moveq r0, #9
1ee64: 0a000015 beq 1eec0 <rtems_string_to_int+0x78>
return RTEMS_INVALID_ADDRESS;
errno = 0;
1ee68: eb009060 bl 42ff0 <__errno>
1ee6c: e3a03000 mov r3, #0
1ee70: e5803000 str r3, [r0]
*n = 0;
result = strtol( s, &end, base );
1ee74: e1a02007 mov r2, r7
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
1ee78: e5863000 str r3, [r6]
result = strtol( s, &end, base );
1ee7c: e1a00004 mov r0, r4
1ee80: e1a0100d mov r1, sp
1ee84: eb00af55 bl 4abe0 <strtol>
if ( endptr )
1ee88: e3550000 cmp r5, #0
*endptr = end;
1ee8c: 159d3000 ldrne r3, [sp]
1ee90: 059d3000 ldreq r3, [sp]
1ee94: 15853000 strne r3, [r5]
if ( end == s )
1ee98: e1530004 cmp r3, r4
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
result = strtol( s, &end, base );
1ee9c: e1a07000 mov r7, r0
if ( endptr )
*endptr = end;
if ( end == s )
1eea0: 03a0000b moveq r0, #11
1eea4: 0a000005 beq 1eec0 <rtems_string_to_int+0x78>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
1eea8: eb009050 bl 42ff0 <__errno>
1eeac: e5903000 ldr r3, [r0]
1eeb0: e3530022 cmp r3, #34 ; 0x22
1eeb4: 0a000003 beq 1eec8 <rtems_string_to_int+0x80>
errno = ERANGE;
return RTEMS_INVALID_NUMBER;
}
#endif
*n = result;
1eeb8: e5867000 str r7, [r6]
1eebc: e3a00000 mov r0, #0
return RTEMS_SUCCESSFUL;
}
1eec0: e28dd004 add sp, sp, #4
1eec4: e8bd80f0 pop {r4, r5, r6, r7, pc}
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
1eec8: e3770106 cmn r7, #-2147483647 ; 0x80000001
1eecc: 13570000 cmpne r7, #0
1eed0: 0a000001 beq 1eedc <rtems_string_to_int+0x94>
1eed4: e3570102 cmp r7, #-2147483648 ; 0x80000000 <== NOT EXECUTED
1eed8: 1afffff6 bne 1eeb8 <rtems_string_to_int+0x70> <== NOT EXECUTED
}
#endif
*n = result;
return RTEMS_SUCCESSFUL;
1eedc: e3a0000a mov r0, #10
1eee0: eafffff6 b 1eec0 <rtems_string_to_int+0x78>
0001eeec <rtems_string_to_unsigned_char>:
const char *s,
unsigned char *n,
char **endptr,
int base
)
{
1eeec: e92d40f0 push {r4, r5, r6, r7, lr}
unsigned long result;
char *end;
if ( !n )
1eef0: e2516000 subs r6, r1, #0
const char *s,
unsigned char *n,
char **endptr,
int base
)
{
1eef4: e1a04000 mov r4, r0
1eef8: e24dd004 sub sp, sp, #4
1eefc: e1a05002 mov r5, r2
1ef00: e1a07003 mov r7, r3
unsigned long result;
char *end;
if ( !n )
1ef04: 03a00009 moveq r0, #9
1ef08: 0a000017 beq 1ef6c <rtems_string_to_unsigned_char+0x80>
return RTEMS_INVALID_ADDRESS;
errno = 0;
1ef0c: eb009037 bl 42ff0 <__errno>
1ef10: e3a03000 mov r3, #0
1ef14: e5803000 str r3, [r0]
*n = 0;
result = strtoul( s, &end, base );
1ef18: e1a02007 mov r2, r7
if ( !n )
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
1ef1c: e5c63000 strb r3, [r6]
result = strtoul( s, &end, base );
1ef20: e1a00004 mov r0, r4
1ef24: e1a0100d mov r1, sp
1ef28: eb00b049 bl 4b054 <strtoul>
if ( endptr )
1ef2c: e3550000 cmp r5, #0
*endptr = end;
1ef30: 159d3000 ldrne r3, [sp]
1ef34: 059d3000 ldreq r3, [sp]
1ef38: 15853000 strne r3, [r5]
if ( end == s )
1ef3c: e1530004 cmp r3, r4
return RTEMS_INVALID_ADDRESS;
errno = 0;
*n = 0;
result = strtoul( s, &end, base );
1ef40: e1a07000 mov r7, r0
if ( endptr )
*endptr = end;
if ( end == s )
1ef44: 03a0000b moveq r0, #11
1ef48: 0a000007 beq 1ef6c <rtems_string_to_unsigned_char+0x80>
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
1ef4c: eb009027 bl 42ff0 <__errno>
1ef50: e5903000 ldr r3, [r0]
1ef54: e3530022 cmp r3, #34 ; 0x22
1ef58: 0a000005 beq 1ef74 <rtems_string_to_unsigned_char+0x88>
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
#if (UCHAR_MAX < ULONG_MAX)
if ( result > UCHAR_MAX ) {
1ef5c: e35700ff cmp r7, #255 ; 0xff
errno = ERANGE;
return RTEMS_INVALID_NUMBER;
}
#endif
*n = result;
1ef60: 95c67000 strbls r7, [r6]
1ef64: 93a00000 movls r0, #0
if ( ( errno == ERANGE ) &&
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
#if (UCHAR_MAX < ULONG_MAX)
if ( result > UCHAR_MAX ) {
1ef68: 8a000006 bhi 1ef88 <rtems_string_to_unsigned_char+0x9c>
#endif
*n = result;
return RTEMS_SUCCESSFUL;
}
1ef6c: e28dd004 add sp, sp, #4
1ef70: e8bd80f0 pop {r4, r5, r6, r7, pc}
*endptr = end;
if ( end == s )
return RTEMS_NOT_DEFINED;
if ( ( errno == ERANGE ) &&
1ef74: e2473001 sub r3, r7, #1 <== NOT EXECUTED
1ef78: e3730003 cmn r3, #3 <== NOT EXECUTED
1ef7c: 9afffff6 bls 1ef5c <rtems_string_to_unsigned_char+0x70> <== NOT EXECUTED
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
#if (UCHAR_MAX < ULONG_MAX)
if ( result > UCHAR_MAX ) {
errno = ERANGE;
1ef80: e3a0000a mov r0, #10 <== NOT EXECUTED
return RTEMS_INVALID_NUMBER;
1ef84: eafffff8 b 1ef6c <rtems_string_to_unsigned_char+0x80> <== NOT EXECUTED
(( result == 0 ) || ( result == ULONG_MAX )))
return RTEMS_INVALID_NUMBER;
#if (UCHAR_MAX < ULONG_MAX)
if ( result > UCHAR_MAX ) {
errno = ERANGE;
1ef88: eb009018 bl 42ff0 <__errno> <== NOT EXECUTED
1ef8c: e3a03022 mov r3, #34 ; 0x22 <== NOT EXECUTED
1ef90: e5803000 str r3, [r0] <== NOT EXECUTED
1ef94: e3a0000a mov r0, #10 <== NOT EXECUTED
1ef98: eafffff3 b 1ef6c <rtems_string_to_unsigned_char+0x80> <== NOT EXECUTED
00004644 <rtems_termios_baud_to_index>:
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
4644: e3500009 cmp r0, #9
4648: 012fff1e bxeq lr
464c: da000013 ble 46a0 <rtems_termios_baud_to_index+0x5c>
4650: e350000e cmp r0, #14 <== NOT EXECUTED
4654: 012fff1e bxeq lr <== NOT EXECUTED
4658: da00001b ble 46cc <rtems_termios_baud_to_index+0x88> <== NOT EXECUTED
465c: e3a03a01 mov r3, #4096 ; 0x1000 <== NOT EXECUTED
4660: e2833002 add r3, r3, #2 <== NOT EXECUTED
4664: e1500003 cmp r0, r3 <== NOT EXECUTED
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
4668: 03a00011 moveq r0, #17 <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
466c: 012fff1e bxeq lr <== NOT EXECUTED
4670: da000028 ble 4718 <rtems_termios_baud_to_index+0xd4> <== NOT EXECUTED
4674: e3a03a01 mov r3, #4096 ; 0x1000 <== NOT EXECUTED
4678: e2833003 add r3, r3, #3 <== NOT EXECUTED
467c: e1500003 cmp r0, r3 <== NOT EXECUTED
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
4680: 03a00012 moveq r0, #18 <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
4684: 012fff1e bxeq lr <== NOT EXECUTED
4688: e3a03a01 mov r3, #4096 ; 0x1000 <== NOT EXECUTED
468c: e2833004 add r3, r3, #4 <== NOT EXECUTED
4690: e1500003 cmp r0, r3 <== NOT EXECUTED
4694: 1a00001d bne 4710 <rtems_termios_baud_to_index+0xcc> <== NOT EXECUTED
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
case B230400: baud_index = 18; break;
4698: e3a00013 mov r0, #19 <== NOT EXECUTED
case B460800: baud_index = 19; break;
469c: e12fff1e bx lr <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
46a0: e3500004 cmp r0, #4
46a4: 012fff1e bxeq lr
46a8: ca000010 bgt 46f0 <rtems_termios_baud_to_index+0xac>
46ac: e3500001 cmp r0, #1
46b0: 012fff1e bxeq lr
46b4: da00001f ble 4738 <rtems_termios_baud_to_index+0xf4>
46b8: e3500002 cmp r0, #2 <== NOT EXECUTED
46bc: 012fff1e bxeq lr <== NOT EXECUTED
46c0: e3500003 cmp r0, #3 <== NOT EXECUTED
46c4: 1a000011 bne 4710 <rtems_termios_baud_to_index+0xcc> <== NOT EXECUTED
46c8: e12fff1e bx lr <== NOT EXECUTED
46cc: e350000b cmp r0, #11 <== NOT EXECUTED
46d0: 012fff1e bxeq lr <== NOT EXECUTED
case B134: baud_index = 4; break;
case B150: baud_index = 5; break;
case B200: baud_index = 6; break;
case B300: baud_index = 7; break;
case B600: baud_index = 8; break;
case B1200: baud_index = 9; break;
46d4: b3a0000a movlt r0, #10 <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
46d8: b12fff1e bxlt lr <== NOT EXECUTED
46dc: e350000c cmp r0, #12 <== NOT EXECUTED
46e0: 012fff1e bxeq lr <== NOT EXECUTED
46e4: e350000d cmp r0, #13 <== NOT EXECUTED
46e8: 1a000008 bne 4710 <rtems_termios_baud_to_index+0xcc> <== NOT EXECUTED
46ec: e12fff1e bx lr <== NOT EXECUTED
46f0: e3500006 cmp r0, #6 <== NOT EXECUTED
46f4: 012fff1e bxeq lr <== NOT EXECUTED
case B0: baud_index = 0; break;
case B50: baud_index = 1; break;
case B75: baud_index = 2; break;
case B110: baud_index = 3; break;
case B134: baud_index = 4; break;
46f8: b3a00005 movlt r0, #5 <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
46fc: b12fff1e bxlt lr <== NOT EXECUTED
4700: e3500007 cmp r0, #7 <== NOT EXECUTED
4704: 012fff1e bxeq lr <== NOT EXECUTED
4708: e3500008 cmp r0, #8 <== NOT EXECUTED
470c: 012fff1e bxeq lr <== NOT EXECUTED
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
case B57600: baud_index = 16; break;
case B115200: baud_index = 17; break;
case B230400: baud_index = 18; break;
case B460800: baud_index = 19; break;
4710: e3e00000 mvn r0, #0
default: baud_index = -1; break;
}
return baud_index;
}
4714: e12fff1e bx lr
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
4718: e350000f cmp r0, #15 <== NOT EXECUTED
471c: 012fff1e bxeq lr <== NOT EXECUTED
4720: e3a03a01 mov r3, #4096 ; 0x1000 <== NOT EXECUTED
4724: e2833001 add r3, r3, #1 <== NOT EXECUTED
4728: e1500003 cmp r0, r3 <== NOT EXECUTED
472c: 1afffff7 bne 4710 <rtems_termios_baud_to_index+0xcc> <== NOT EXECUTED
case B1800: baud_index = 10; break;
case B2400: baud_index = 11; break;
case B4800: baud_index = 12; break;
case B9600: baud_index = 13; break;
case B19200: baud_index = 14; break;
case B38400: baud_index = 15; break;
4730: e3a00010 mov r0, #16 <== NOT EXECUTED
case B57600: baud_index = 16; break;
4734: e12fff1e bx lr <== NOT EXECUTED
rtems_termios_baud_t termios_baud
)
{
int baud_index;
switch (termios_baud) {
4738: e3500000 cmp r0, #0
473c: 012fff1e bxeq lr
4740: eafffff2 b 4710 <rtems_termios_baud_to_index+0xcc>
00003084 <rtems_termios_bufsize>:
int cbufsize,
int raw_input,
int raw_output
)
{
rtems_termios_cbufsize = cbufsize;
3084: e59f3008 ldr r3, [pc, #8] ; 3094 <rtems_termios_bufsize+0x10><== NOT EXECUTED
3088: e8830007 stm r3, {r0, r1, r2} <== NOT EXECUTED
rtems_termios_raw_input_size = raw_input;
rtems_termios_raw_output_size = raw_output;
return RTEMS_SUCCESSFUL;
}
308c: e3a00000 mov r0, #0 <== NOT EXECUTED
3090: e12fff1e bx lr <== NOT EXECUTED
00004638 <rtems_termios_close>:
}
}
rtems_status_code
rtems_termios_close (void *arg)
{
4638: e92d4070 push {r4, r5, r6, lr}
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
rtems_status_code sc;
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
463c: e59f51b0 ldr r5, [pc, #432] ; 47f4 <rtems_termios_close+0x1bc>
rtems_status_code
rtems_termios_close (void *arg)
{
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4640: e5903000 ldr r3, [r0]
rtems_status_code sc;
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4644: e3a01000 mov r1, #0
}
}
rtems_status_code
rtems_termios_close (void *arg)
{
4648: e1a06000 mov r6, r0
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
rtems_status_code sc;
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
464c: e1a02001 mov r2, r1
4650: e5950000 ldr r0, [r5]
rtems_status_code
rtems_termios_close (void *arg)
{
rtems_libio_open_close_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4654: e5934034 ldr r4, [r3, #52] ; 0x34
rtems_status_code sc;
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4658: eb000453 bl 57ac <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL)
465c: e3500000 cmp r0, #0
4660: 1a00005f bne 47e4 <rtems_termios_close+0x1ac>
rtems_fatal_error_occurred (sc);
if (--tty->refcount == 0) {
4664: e5943008 ldr r3, [r4, #8]
4668: e2433001 sub r3, r3, #1
466c: e3530000 cmp r3, #0
4670: e5843008 str r3, [r4, #8]
4674: 1a00002f bne 4738 <rtems_termios_close+0x100>
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
4678: e59420cc ldr r2, [r4, #204] ; 0xcc
467c: e59f3174 ldr r3, [pc, #372] ; 47f8 <rtems_termios_close+0x1c0>
4680: e0833282 add r3, r3, r2, lsl #5
4684: e5931004 ldr r1, [r3, #4]
4688: e3510000 cmp r1, #0
468c: 0a000040 beq 4794 <rtems_termios_close+0x15c>
/*
* call discipline-specific close
*/
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
4690: e1a00004 mov r0, r4 <== NOT EXECUTED
4694: e1a0e00f mov lr, pc <== NOT EXECUTED
4698: e12fff11 bx r1 <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
drainOutput (tty);
}
if (tty->device.outputUsesInterrupts
469c: e59430b4 ldr r3, [r4, #180] ; 0xb4 <== NOT EXECUTED
46a0: e3530002 cmp r3, #2 <== NOT EXECUTED
46a4: 0a000044 beq 47bc <rtems_termios_close+0x184> <== NOT EXECUTED
tty->txTaskId,
TERMIOS_TX_TERMINATE_EVENT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
if (tty->device.lastClose)
46a8: e594309c ldr r3, [r4, #156] ; 0x9c
46ac: e3530000 cmp r3, #0
(*tty->device.lastClose)(tty->major, tty->minor, arg);
46b0: 11a02006 movne r2, r6
46b4: 1284000c addne r0, r4, #12
46b8: 18900003 ldmne r0, {r0, r1}
46bc: 11a0e00f movne lr, pc
46c0: 112fff13 bxne r3
if (tty->forw == NULL) {
46c4: e5943000 ldr r3, [r4]
46c8: e3530000 cmp r3, #0
46cc: 0a000020 beq 4754 <rtems_termios_close+0x11c>
if ( rtems_termios_ttyTail != NULL ) {
rtems_termios_ttyTail->forw = NULL;
}
}
else {
tty->forw->back = tty->back;
46d0: e5942004 ldr r2, [r4, #4]
46d4: e5832004 str r2, [r3, #4]
}
if (tty->back == NULL) {
46d8: e5942004 ldr r2, [r4, #4]
46dc: e3520000 cmp r2, #0
if ( rtems_termios_ttyHead != NULL ) {
rtems_termios_ttyHead->back = NULL;
}
}
else {
tty->back->forw = tty->forw;
46e0: 15823000 strne r3, [r2]
}
}
else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
46e4: 0a000025 beq 4780 <rtems_termios_close+0x148>
}
}
else {
tty->back->forw = tty->forw;
}
rtems_semaphore_delete (tty->isem);
46e8: e5940014 ldr r0, [r4, #20]
46ec: eb000405 bl 5708 <rtems_semaphore_delete>
rtems_semaphore_delete (tty->osem);
46f0: e5940018 ldr r0, [r4, #24]
46f4: eb000403 bl 5708 <rtems_semaphore_delete>
rtems_semaphore_delete (tty->rawOutBuf.Semaphore);
46f8: e594008c ldr r0, [r4, #140] ; 0x8c
46fc: eb000401 bl 5708 <rtems_semaphore_delete>
if ((tty->device.pollRead == NULL) ||
4700: e59430a0 ldr r3, [r4, #160] ; 0xa0
4704: e3530000 cmp r3, #0
4708: 0a00000e beq 4748 <rtems_termios_close+0x110>
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN))
470c: e59430b4 ldr r3, [r4, #180] ; 0xb4
4710: e3530002 cmp r3, #2
4714: 0a00000b beq 4748 <rtems_termios_close+0x110>
rtems_semaphore_delete (tty->rawInBuf.Semaphore);
free (tty->rawInBuf.theBuf);
4718: e5940058 ldr r0, [r4, #88] ; 0x58
471c: ebfff661 bl 20a8 <free>
free (tty->rawOutBuf.theBuf);
4720: e594007c ldr r0, [r4, #124] ; 0x7c
4724: ebfff65f bl 20a8 <free>
free (tty->cbuf);
4728: e594001c ldr r0, [r4, #28]
472c: ebfff65d bl 20a8 <free>
free (tty);
4730: e1a00004 mov r0, r4
4734: ebfff65b bl 20a8 <free>
}
rtems_semaphore_release (rtems_termios_ttyMutex);
4738: e5950000 ldr r0, [r5]
473c: eb000462 bl 58cc <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
}
4740: e3a00000 mov r0, #0
4744: e8bd8070 pop {r4, r5, r6, pc}
rtems_semaphore_delete (tty->isem);
rtems_semaphore_delete (tty->osem);
rtems_semaphore_delete (tty->rawOutBuf.Semaphore);
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN))
rtems_semaphore_delete (tty->rawInBuf.Semaphore);
4748: e5940068 ldr r0, [r4, #104] ; 0x68 <== NOT EXECUTED
474c: eb0003ed bl 5708 <rtems_semaphore_delete> <== NOT EXECUTED
4750: eafffff0 b 4718 <rtems_termios_close+0xe0> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
if (tty->device.lastClose)
(*tty->device.lastClose)(tty->major, tty->minor, arg);
if (tty->forw == NULL) {
rtems_termios_ttyTail = tty->back;
4754: e5942004 ldr r2, [r4, #4]
4758: e59f109c ldr r1, [pc, #156] ; 47fc <rtems_termios_close+0x1c4>
if ( rtems_termios_ttyTail != NULL ) {
475c: e3520000 cmp r2, #0
rtems_fatal_error_occurred (sc);
}
if (tty->device.lastClose)
(*tty->device.lastClose)(tty->major, tty->minor, arg);
if (tty->forw == NULL) {
rtems_termios_ttyTail = tty->back;
4760: e5812000 str r2, [r1]
if ( rtems_termios_ttyTail != NULL ) {
4764: 0a00001f beq 47e8 <rtems_termios_close+0x1b0>
rtems_termios_ttyTail->forw = NULL;
4768: e5823000 str r3, [r2] <== NOT EXECUTED
}
}
else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
476c: e5942004 ldr r2, [r4, #4] <== NOT EXECUTED
4770: e5943000 ldr r3, [r4] <== NOT EXECUTED
4774: e3520000 cmp r2, #0 <== NOT EXECUTED
if ( rtems_termios_ttyHead != NULL ) {
rtems_termios_ttyHead->back = NULL;
}
}
else {
tty->back->forw = tty->forw;
4778: 15823000 strne r3, [r2] <== NOT EXECUTED
}
}
else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
477c: 1affffd9 bne 46e8 <rtems_termios_close+0xb0> <== NOT EXECUTED
rtems_termios_ttyHead = tty->forw;
4780: e59f1078 ldr r1, [pc, #120] ; 4800 <rtems_termios_close+0x1c8>
if ( rtems_termios_ttyHead != NULL ) {
4784: e3530000 cmp r3, #0
}
else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
rtems_termios_ttyHead = tty->forw;
4788: e5813000 str r3, [r1]
if ( rtems_termios_ttyHead != NULL ) {
rtems_termios_ttyHead->back = NULL;
478c: 15832004 strne r2, [r3, #4]
4790: eaffffd4 b 46e8 <rtems_termios_close+0xb0>
}
else {
/*
* default: just flush output buffer
*/
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4794: e5940018 ldr r0, [r4, #24]
4798: e1a02001 mov r2, r1
479c: eb000402 bl 57ac <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL) {
47a0: e3500000 cmp r0, #0
47a4: 1a00000e bne 47e4 <rtems_termios_close+0x1ac>
rtems_fatal_error_occurred (sc);
}
drainOutput (tty);
47a8: e1a00004 mov r0, r4
47ac: ebfffd9e bl 3e2c <drainOutput>
}
if (tty->device.outputUsesInterrupts
47b0: e59430b4 ldr r3, [r4, #180] ; 0xb4
47b4: e3530002 cmp r3, #2
47b8: 1affffba bne 46a8 <rtems_termios_close+0x70>
== TERMIOS_TASK_DRIVEN) {
/*
* send "terminate" to I/O tasks
*/
sc = rtems_event_send(
47bc: e59400c4 ldr r0, [r4, #196] ; 0xc4 <== NOT EXECUTED
47c0: e3a01001 mov r1, #1 <== NOT EXECUTED
47c4: eb0002d2 bl 5314 <rtems_event_send> <== NOT EXECUTED
tty->rxTaskId,
TERMIOS_RX_TERMINATE_EVENT);
if (sc != RTEMS_SUCCESSFUL)
47c8: e3500000 cmp r0, #0 <== NOT EXECUTED
47cc: 1a000004 bne 47e4 <rtems_termios_close+0x1ac> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_event_send(
47d0: e59400c8 ldr r0, [r4, #200] ; 0xc8 <== NOT EXECUTED
47d4: e3a01001 mov r1, #1 <== NOT EXECUTED
47d8: eb0002cd bl 5314 <rtems_event_send> <== NOT EXECUTED
tty->txTaskId,
TERMIOS_TX_TERMINATE_EVENT);
if (sc != RTEMS_SUCCESSFUL)
47dc: e3500000 cmp r0, #0 <== NOT EXECUTED
47e0: 0affffb0 beq 46a8 <rtems_termios_close+0x70> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
47e4: eb00057d bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
}
else {
tty->forw->back = tty->back;
}
if (tty->back == NULL) {
rtems_termios_ttyHead = tty->forw;
47e8: e59f3010 ldr r3, [pc, #16] ; 4800 <rtems_termios_close+0x1c8>
47ec: e5832000 str r2, [r3]
47f0: eaffffbc b 46e8 <rtems_termios_close+0xb0>
000032a0 <rtems_termios_dequeue_characters>:
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
32a0: e590c090 ldr ip, [r0, #144] ; 0x90 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
32a4: e59020b4 ldr r2, [r0, #180] ; 0xb4 <== NOT EXECUTED
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
32a8: e08c1001 add r1, ip, r1 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
32ac: e3520002 cmp r2, #2 <== NOT EXECUTED
* for each transmitted character.
* It returns number of characters left to transmit
*/
int
rtems_termios_dequeue_characters (void *ttyp, int len)
{
32b0: e52de004 push {lr} ; (str lr, [sp, #-4]!) <== NOT EXECUTED
rtems_status_code sc;
/*
* sum up character count already sent
*/
tty->t_dqlen += len;
32b4: e5801090 str r1, [r0, #144] ; 0x90 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
32b8: 0a00000b beq 32ec <rtems_termios_dequeue_characters+0x4c> <== NOT EXECUTED
TERMIOS_TX_START_EVENT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
return 0; /* nothing to output in IRQ... */
}
else if (tty->t_line == PPPDISC ) {
32bc: e59030cc ldr r3, [r0, #204] ; 0xcc <== NOT EXECUTED
32c0: e3530005 cmp r3, #5 <== NOT EXECUTED
32c4: 0a000001 beq 32d0 <rtems_termios_dequeue_characters+0x30> <== NOT EXECUTED
return 0; /* nothing to output in IRQ... */
}
else {
return rtems_termios_refill_transmitter(tty);
}
}
32c8: e49de004 pop {lr} ; (ldr lr, [sp], #4) <== NOT EXECUTED
rtems_termios_linesw[tty->t_line].l_start(tty);
}
return 0; /* nothing to output in IRQ... */
}
else {
return rtems_termios_refill_transmitter(tty);
32cc: eaffff74 b 30a4 <rtems_termios_refill_transmitter> <== NOT EXECUTED
}
else if (tty->t_line == PPPDISC ) {
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
32d0: e59f302c ldr r3, [pc, #44] ; 3304 <rtems_termios_dequeue_characters+0x64><== NOT EXECUTED
32d4: e59330b4 ldr r3, [r3, #180] ; 0xb4 <== NOT EXECUTED
32d8: e3530000 cmp r3, #0 <== NOT EXECUTED
rtems_termios_linesw[tty->t_line].l_start(tty);
32dc: 11a0e00f movne lr, pc <== NOT EXECUTED
32e0: 112fff13 bxne r3 <== NOT EXECUTED
return 0; /* nothing to output in IRQ... */
}
else {
return rtems_termios_refill_transmitter(tty);
}
}
32e4: e3a00000 mov r0, #0 <== NOT EXECUTED
32e8: e49df004 pop {pc} ; (ldr pc, [sp], #4) <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
/*
* send wake up to transmitter task
*/
sc = rtems_event_send(tty->txTaskId,
32ec: e59000c8 ldr r0, [r0, #200] ; 0xc8 <== NOT EXECUTED
32f0: e1a01002 mov r1, r2 <== NOT EXECUTED
32f4: eb000806 bl 5314 <rtems_event_send> <== NOT EXECUTED
TERMIOS_TX_START_EVENT);
if (sc != RTEMS_SUCCESSFUL)
32f8: e3500000 cmp r0, #0 <== NOT EXECUTED
32fc: 0afffff8 beq 32e4 <rtems_termios_dequeue_characters+0x44> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
3300: eb000ab6 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00003308 <rtems_termios_enqueue_raw_characters>:
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
3308: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} <== NOT EXECUTED
char c;
int dropped = 0;
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
330c: e59030cc ldr r3, [r0, #204] ; 0xcc <== NOT EXECUTED
3310: e59f82f0 ldr r8, [pc, #752] ; 3608 <rtems_termios_enqueue_raw_characters+0x300><== NOT EXECUTED
3314: e0883283 add r3, r8, r3, lsl #5 <== NOT EXECUTED
3318: e5936010 ldr r6, [r3, #16] <== NOT EXECUTED
331c: e3560000 cmp r6, #0 <== NOT EXECUTED
* device receive interrupt handler.
* Returns the number of characters dropped because of overflow.
*/
int
rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len)
{
3320: e24dd00c sub sp, sp, #12 <== NOT EXECUTED
3324: e1a04000 mov r4, r0 <== NOT EXECUTED
3328: e1a05001 mov r5, r1 <== NOT EXECUTED
332c: e1a07002 mov r7, r2 <== NOT EXECUTED
char c;
int dropped = 0;
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
3330: 0a00001e beq 33b0 <rtems_termios_enqueue_raw_characters+0xa8><== NOT EXECUTED
while (len--) {
3334: e3520000 cmp r2, #0 <== NOT EXECUTED
3338: 0a00000b beq 336c <rtems_termios_enqueue_raw_characters+0x64><== NOT EXECUTED
333c: e3a0a000 mov sl, #0 <== NOT EXECUTED
3340: ea000002 b 3350 <rtems_termios_enqueue_raw_characters+0x48><== NOT EXECUTED
3344: e59430cc ldr r3, [r4, #204] ; 0xcc <== NOT EXECUTED
3348: e0883283 add r3, r8, r3, lsl #5 <== NOT EXECUTED
334c: e5936010 ldr r6, [r3, #16] <== NOT EXECUTED
c = *buf++;
rtems_termios_linesw[tty->t_line].l_rint(c,tty);
3350: e7d5000a ldrb r0, [r5, sl] <== NOT EXECUTED
3354: e1a01004 mov r1, r4 <== NOT EXECUTED
3358: e28aa001 add sl, sl, #1 <== NOT EXECUTED
335c: e1a0e00f mov lr, pc <== NOT EXECUTED
3360: e12fff16 bx r6 <== NOT EXECUTED
int dropped = 0;
bool flow_rcv = false; /* true, if flow control char received */
rtems_interrupt_level level;
if (rtems_termios_linesw[tty->t_line].l_rint != NULL) {
while (len--) {
3364: e157000a cmp r7, sl <== NOT EXECUTED
3368: 1afffff5 bne 3344 <rtems_termios_enqueue_raw_characters+0x3c><== NOT EXECUTED
}
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
336c: e59490e4 ldr r9, [r4, #228] ; 0xe4 <== NOT EXECUTED
3370: e3590000 cmp r9, #0 <== NOT EXECUTED
3374: 1a00000b bne 33a8 <rtems_termios_enqueue_raw_characters+0xa0><== NOT EXECUTED
3378: e59430dc ldr r3, [r4, #220] ; 0xdc <== NOT EXECUTED
337c: e3530000 cmp r3, #0 <== NOT EXECUTED
3380: 0a000008 beq 33a8 <rtems_termios_enqueue_raw_characters+0xa0><== NOT EXECUTED
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
3384: e2840030 add r0, r4, #48 ; 0x30 <== NOT EXECUTED
3388: e59410e0 ldr r1, [r4, #224] ; 0xe0 <== NOT EXECUTED
338c: e1a0e00f mov lr, pc <== NOT EXECUTED
3390: e12fff13 bx r3 <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
3394: e3a03001 mov r3, #1 <== NOT EXECUTED
3398: e58430e4 str r3, [r4, #228] ; 0xe4 <== NOT EXECUTED
}
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
}
339c: e1a00009 mov r0, r9 <== NOT EXECUTED
33a0: e28dd00c add sp, sp, #12 <== NOT EXECUTED
33a4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
}
}
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
33a8: e3a09000 mov r9, #0 <== NOT EXECUTED
33ac: eafffffa b 339c <rtems_termios_enqueue_raw_characters+0x94><== NOT EXECUTED
if ((tty->flow_ctrl & FL_OSTOP) ||
(tty->rawOutBufState == rob_idle)) {
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
(*tty->device.write)(tty->minor,
33b0: e280304a add r3, r0, #74 ; 0x4a <== NOT EXECUTED
33b4: e58d3008 str r3, [sp, #8] <== NOT EXECUTED
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
33b8: e2803030 add r3, r0, #48 ; 0x30 <== NOT EXECUTED
33bc: e58d3004 str r3, [sp, #4] <== NOT EXECUTED
33c0: e1a0b006 mov fp, r6 <== NOT EXECUTED
33c4: e58d6000 str r6, [sp] <== NOT EXECUTED
33c8: ea000036 b 34a8 <rtems_termios_enqueue_raw_characters+0x1a0><== NOT EXECUTED
/* reenable interrupts */
rtems_interrupt_enable(level);
}
}
else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
33cc: e5940060 ldr r0, [r4, #96] ; 0x60 <== NOT EXECUTED
33d0: e5941064 ldr r1, [r4, #100] ; 0x64 <== NOT EXECUTED
33d4: e2800001 add r0, r0, #1 <== NOT EXECUTED
33d8: eb005186 bl 179f8 <__umodsi3> <== NOT EXECUTED
33dc: e1a08000 mov r8, r0 <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
33e0: e10f9000 mrs r9, CPSR <== NOT EXECUTED
33e4: e3893080 orr r3, r9, #128 ; 0x80 <== NOT EXECUTED
33e8: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
33ec: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED
33f0: e5940064 ldr r0, [r4, #100] ; 0x64 <== NOT EXECUTED
33f4: e0630000 rsb r0, r3, r0 <== NOT EXECUTED
33f8: e5941064 ldr r1, [r4, #100] ; 0x64 <== NOT EXECUTED
33fc: e0800008 add r0, r0, r8 <== NOT EXECUTED
3400: eb00517c bl 179f8 <__umodsi3> <== NOT EXECUTED
% tty->rawInBuf.Size)
> tty->highwater) &&
3404: e59430c0 ldr r3, [r4, #192] ; 0xc0 <== NOT EXECUTED
3408: e1500003 cmp r0, r3 <== NOT EXECUTED
340c: 9a000010 bls 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
!(tty->flow_ctrl & FL_IREQXOF)) {
3410: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
else {
newTail = (tty->rawInBuf.Tail + 1) % tty->rawInBuf.Size;
/* if chars_in_buffer > highwater */
rtems_interrupt_disable(level);
if ((((newTail - tty->rawInBuf.Head + tty->rawInBuf.Size)
3414: e3130001 tst r3, #1 <== NOT EXECUTED
3418: 1a00000d bne 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
% tty->rawInBuf.Size)
> tty->highwater) &&
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
341c: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
3420: e3833001 orr r3, r3, #1 <== NOT EXECUTED
3424: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
3428: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
342c: e3c33fff bic r3, r3, #1020 ; 0x3fc <== NOT EXECUTED
3430: e3c33001 bic r3, r3, #1 <== NOT EXECUTED
3434: e1a03a83 lsl r3, r3, #21 <== NOT EXECUTED
3438: e1a03aa3 lsr r3, r3, #21 <== NOT EXECUTED
343c: e3530b01 cmp r3, #1024 ; 0x400 <== NOT EXECUTED
3440: 0a000057 beq 35a4 <rtems_termios_enqueue_raw_characters+0x29c><== NOT EXECUTED
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTOP]),
1);
}
}
else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF))
3444: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
3448: e2033f41 and r3, r3, #260 ; 0x104 <== NOT EXECUTED
344c: e3530c01 cmp r3, #256 ; 0x100 <== NOT EXECUTED
3450: 0a000062 beq 35e0 <rtems_termios_enqueue_raw_characters+0x2d8><== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3454: e129f009 msr CPSR_fc, r9 <== NOT EXECUTED
}
}
/* reenable interrupts */
rtems_interrupt_enable(level);
if (newTail == tty->rawInBuf.Head) {
3458: e594305c ldr r3, [r4, #92] ; 0x5c <== NOT EXECUTED
345c: e1530008 cmp r3, r8 <== NOT EXECUTED
3460: 0a00002d beq 351c <rtems_termios_enqueue_raw_characters+0x214><== NOT EXECUTED
dropped++;
}
else {
tty->rawInBuf.theBuf[newTail] = c;
3464: e5943058 ldr r3, [r4, #88] ; 0x58 <== NOT EXECUTED
3468: e7c3a008 strb sl, [r3, r8] <== NOT EXECUTED
tty->rawInBuf.Tail = newTail;
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
346c: e59430e4 ldr r3, [r4, #228] ; 0xe4 <== NOT EXECUTED
3470: e3530000 cmp r3, #0 <== NOT EXECUTED
if (newTail == tty->rawInBuf.Head) {
dropped++;
}
else {
tty->rawInBuf.theBuf[newTail] = c;
tty->rawInBuf.Tail = newTail;
3474: e5848060 str r8, [r4, #96] ; 0x60 <== NOT EXECUTED
/*
* check to see if rcv wakeup callback was set
*/
if (( !tty->tty_rcvwakeup ) && ( tty->tty_rcv.sw_pfn != NULL )) {
3478: 1a000008 bne 34a0 <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
347c: e59430dc ldr r3, [r4, #220] ; 0xdc <== NOT EXECUTED
3480: e3530000 cmp r3, #0 <== NOT EXECUTED
3484: 0a000005 beq 34a0 <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
(*tty->tty_rcv.sw_pfn)(&tty->termios, tty->tty_rcv.sw_arg);
3488: e59d0004 ldr r0, [sp, #4] <== NOT EXECUTED
348c: e59410e0 ldr r1, [r4, #224] ; 0xe0 <== NOT EXECUTED
3490: e1a0e00f mov lr, pc <== NOT EXECUTED
3494: e12fff13 bx r3 <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
3498: e3a03001 mov r3, #1 <== NOT EXECUTED
349c: e58430e4 str r3, [r4, #228] ; 0xe4 <== NOT EXECUTED
34a0: e2866001 add r6, r6, #1 <== NOT EXECUTED
34a4: e2477001 sub r7, r7, #1 <== NOT EXECUTED
tty->tty_rcvwakeup = 1;
}
return 0;
}
while (len--) {
34a8: e3570000 cmp r7, #0 <== NOT EXECUTED
34ac: 0a00002d beq 3568 <rtems_termios_enqueue_raw_characters+0x260><== NOT EXECUTED
c = *buf++;
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
34b0: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
34b4: e3130c02 tst r3, #512 ; 0x200 <== NOT EXECUTED
}
return 0;
}
while (len--) {
c = *buf++;
34b8: e7d5a006 ldrb sl, [r5, r6] <== NOT EXECUTED
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
34bc: 0a000005 beq 34d8 <rtems_termios_enqueue_raw_characters+0x1d0><== NOT EXECUTED
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
34c0: e5d4304a ldrb r3, [r4, #74] ; 0x4a <== NOT EXECUTED
34c4: e153000a cmp r3, sl <== NOT EXECUTED
34c8: 0a000017 beq 352c <rtems_termios_enqueue_raw_characters+0x224><== NOT EXECUTED
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
}
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
34cc: e5d43049 ldrb r3, [r4, #73] ; 0x49 <== NOT EXECUTED
34d0: e153000a cmp r3, sl <== NOT EXECUTED
34d4: 0a00001e beq 3554 <rtems_termios_enqueue_raw_characters+0x24c><== NOT EXECUTED
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
flow_rcv = true;
}
}
if (flow_rcv) {
34d8: e35b0000 cmp fp, #0 <== NOT EXECUTED
34dc: 0affffba beq 33cc <rtems_termios_enqueue_raw_characters+0xc4><== NOT EXECUTED
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
34e0: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
34e4: e2033030 and r3, r3, #48 ; 0x30 <== NOT EXECUTED
34e8: e3530020 cmp r3, #32 <== NOT EXECUTED
34ec: 1affffeb bne 34a0 <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
34f0: e10f8000 mrs r8, CPSR <== NOT EXECUTED
34f4: e3883080 orr r3, r8, #128 ; 0x80 <== NOT EXECUTED
34f8: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
34fc: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
3500: e5942094 ldr r2, [r4, #148] ; 0x94 <== NOT EXECUTED
if (flow_rcv) {
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
3504: e3c33020 bic r3, r3, #32 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
3508: e3520000 cmp r2, #0 <== NOT EXECUTED
if (flow_rcv) {
/* restart output according to FL_ORCVXOF flag */
if ((tty->flow_ctrl & (FL_ORCVXOF | FL_OSTOP)) == FL_OSTOP) {
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
350c: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
3510: 1a00001b bne 3584 <rtems_termios_enqueue_raw_characters+0x27c><== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3514: e129f008 msr CPSR_fc, r8 <== NOT EXECUTED
3518: eaffffe0 b 34a0 <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
}
/* reenable interrupts */
rtems_interrupt_enable(level);
if (newTail == tty->rawInBuf.Head) {
dropped++;
351c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
3520: e2833001 add r3, r3, #1 <== NOT EXECUTED
3524: e58d3000 str r3, [sp] <== NOT EXECUTED
3528: eaffffdc b 34a0 <rtems_termios_enqueue_raw_characters+0x198><== NOT EXECUTED
/* FIXME: implement IXANY: any character restarts output */
/* if incoming XON/XOFF controls outgoing stream: */
if (tty->flow_ctrl & FL_MDXON) {
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
if (c == tty->termios.c_cc[VSTART]) {
352c: e5d42049 ldrb r2, [r4, #73] ; 0x49 <== NOT EXECUTED
3530: e1520003 cmp r2, r3 <== NOT EXECUTED
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
3534: 059430b8 ldreq r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
3538: 159430b8 ldrne r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
if (c == tty->termios.c_cc[VSTART]) {
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
353c: 02233010 eoreq r3, r3, #16 <== NOT EXECUTED
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
3540: 13833010 orrne r3, r3, #16 <== NOT EXECUTED
/* if received char is V_STOP and V_START (both are equal value) */
if (c == tty->termios.c_cc[VSTOP]) {
if (c == tty->termios.c_cc[VSTART]) {
/* received VSTOP and VSTART==VSTOP? */
/* then toggle "stop output" status */
tty->flow_ctrl = tty->flow_ctrl ^ FL_ORCVXOF;
3544: 058430b8 streq r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
else {
/* VSTOP received (other code than VSTART) */
/* stop output */
tty->flow_ctrl |= FL_ORCVXOF;
3548: 158430b8 strne r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
}
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
354c: e3a0b001 mov fp, #1 <== NOT EXECUTED
3550: eaffffe2 b 34e0 <rtems_termios_enqueue_raw_characters+0x1d8><== NOT EXECUTED
flow_rcv = true;
}
else if (c == tty->termios.c_cc[VSTART]) {
/* VSTART received */
/* restart output */
tty->flow_ctrl &= ~FL_ORCVXOF;
3554: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
3558: e3c33010 bic r3, r3, #16 <== NOT EXECUTED
355c: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
}
}
tty->rawInBufDropped += dropped;
rtems_semaphore_release (tty->rawInBuf.Semaphore);
return dropped;
3560: e3a0b001 mov fp, #1 <== NOT EXECUTED
3564: eaffffdd b 34e0 <rtems_termios_enqueue_raw_characters+0x1d8><== NOT EXECUTED
tty->tty_rcvwakeup = 1;
}
}
}
}
tty->rawInBufDropped += dropped;
3568: e5943078 ldr r3, [r4, #120] ; 0x78 <== NOT EXECUTED
356c: e59d9000 ldr r9, [sp] <== NOT EXECUTED
3570: e0833009 add r3, r3, r9 <== NOT EXECUTED
3574: e5843078 str r3, [r4, #120] ; 0x78 <== NOT EXECUTED
rtems_semaphore_release (tty->rawInBuf.Semaphore);
3578: e5940068 ldr r0, [r4, #104] ; 0x68 <== NOT EXECUTED
357c: eb0008d2 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
return dropped;
3580: eaffff85 b 339c <rtems_termios_enqueue_raw_characters+0x94><== NOT EXECUTED
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(tty->minor,
&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail], 1);
3584: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(tty->minor,
3588: e594107c ldr r1, [r4, #124] ; 0x7c <== NOT EXECUTED
358c: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
3590: e0811003 add r1, r1, r3 <== NOT EXECUTED
3594: e3a02001 mov r2, #1 <== NOT EXECUTED
3598: e1a0e00f mov lr, pc <== NOT EXECUTED
359c: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
35a0: eaffffdb b 3514 <rtems_termios_enqueue_raw_characters+0x20c><== NOT EXECUTED
!(tty->flow_ctrl & FL_IREQXOF)) {
/* incoming data stream should be stopped */
tty->flow_ctrl |= FL_IREQXOF;
if ((tty->flow_ctrl & (FL_MDXOF | FL_ISNTXOF))
== (FL_MDXOF ) ){
if ((tty->flow_ctrl & FL_OSTOP) ||
35a4: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
35a8: e3130020 tst r3, #32 <== NOT EXECUTED
35ac: 1a000002 bne 35bc <rtems_termios_enqueue_raw_characters+0x2b4><== NOT EXECUTED
(tty->rawOutBufState == rob_idle)) {
35b0: e5943094 ldr r3, [r4, #148] ; 0x94 <== NOT EXECUTED
35b4: e3530000 cmp r3, #0 <== NOT EXECUTED
35b8: 1affffa5 bne 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
/* if tx is stopped due to XOFF or out of data */
/* call write function here */
tty->flow_ctrl |= FL_ISNTXOF;
35bc: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
35c0: e3833002 orr r3, r3, #2 <== NOT EXECUTED
35c4: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
35c8: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
35cc: e59d1008 ldr r1, [sp, #8] <== NOT EXECUTED
35d0: e3a02001 mov r2, #1 <== NOT EXECUTED
35d4: e1a0e00f mov lr, pc <== NOT EXECUTED
35d8: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
35dc: eaffff9c b 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
1);
}
}
else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF))
== (FL_MDRTS ) ) {
tty->flow_ctrl |= FL_IRTSOFF;
35e0: e59420b8 ldr r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
35e4: e59430ac ldr r3, [r4, #172] ; 0xac <== NOT EXECUTED
1);
}
}
else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF))
== (FL_MDRTS ) ) {
tty->flow_ctrl |= FL_IRTSOFF;
35e8: e3822004 orr r2, r2, #4 <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
35ec: e3530000 cmp r3, #0 <== NOT EXECUTED
1);
}
}
else if ((tty->flow_ctrl & (FL_MDRTS | FL_IRTSOFF))
== (FL_MDRTS ) ) {
tty->flow_ctrl |= FL_IRTSOFF;
35f0: e58420b8 str r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* deactivate RTS line */
if (tty->device.stopRemoteTx != NULL) {
35f4: 0affff96 beq 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
tty->device.stopRemoteTx(tty->minor);
35f8: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
35fc: e1a0e00f mov lr, pc <== NOT EXECUTED
3600: e12fff13 bx r3 <== NOT EXECUTED
3604: eaffff92 b 3454 <rtems_termios_enqueue_raw_characters+0x14c><== NOT EXECUTED
0000303c <rtems_termios_initialize>:
struct rtems_termios_tty *rtems_termios_ttyTail;
rtems_id rtems_termios_ttyMutex;
void
rtems_termios_initialize (void)
{
303c: e52de004 push {lr} ; (str lr, [sp, #-4]!)
rtems_status_code sc;
/*
* Create the mutex semaphore for the tty list
*/
if (!rtems_termios_ttyMutex) {
3040: e59fc034 ldr ip, [pc, #52] ; 307c <rtems_termios_initialize+0x40>
3044: e59c3000 ldr r3, [ip]
3048: e3530000 cmp r3, #0
struct rtems_termios_tty *rtems_termios_ttyTail;
rtems_id rtems_termios_ttyMutex;
void
rtems_termios_initialize (void)
{
304c: e24dd004 sub sp, sp, #4
rtems_status_code sc;
/*
* Create the mutex semaphore for the tty list
*/
if (!rtems_termios_ttyMutex) {
3050: 0a000001 beq 305c <rtems_termios_initialize+0x20>
RTEMS_NO_PRIORITY,
&rtems_termios_ttyMutex);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
}
3054: e28dd004 add sp, sp, #4
3058: e8bd8000 pop {pc}
/*
* Create the mutex semaphore for the tty list
*/
if (!rtems_termios_ttyMutex) {
sc = rtems_semaphore_create (
305c: e59f001c ldr r0, [pc, #28] ; 3080 <rtems_termios_initialize+0x44>
3060: e3a01001 mov r1, #1
3064: e3a02054 mov r2, #84 ; 0x54
3068: e58dc000 str ip, [sp]
306c: eb000933 bl 5540 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'm', 'i'),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&rtems_termios_ttyMutex);
if (sc != RTEMS_SUCCESSFUL)
3070: e3500000 cmp r0, #0
3074: 0afffff6 beq 3054 <rtems_termios_initialize+0x18>
rtems_fatal_error_occurred (sc);
3078: eb000b58 bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00004258 <rtems_termios_ioctl>:
rtems_status_code
rtems_termios_ioctl (void *arg)
{
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4258: e5903000 ldr r3, [r0]
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
425c: e3a01000 mov r1, #0
}
}
rtems_status_code
rtems_termios_ioctl (void *arg)
{
4260: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
4264: e580100c str r1, [r0, #12]
rtems_status_code
rtems_termios_ioctl (void *arg)
{
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
4268: e5935034 ldr r5, [r3, #52] ; 0x34
}
}
rtems_status_code
rtems_termios_ioctl (void *arg)
{
426c: e1a04000 mov r4, r0
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
rtems_status_code sc;
args->ioctl_return = 0;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
4270: e1a02001 mov r2, r1
4274: e5950018 ldr r0, [r5, #24]
rtems_status_code
rtems_termios_ioctl (void *arg)
{
rtems_libio_ioctl_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
struct ttywakeup *wakeup = (struct ttywakeup *)args->buffer;
4278: e5947008 ldr r7, [r4, #8]
rtems_status_code sc;
args->ioctl_return = 0;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
427c: eb00054a bl 57ac <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL) {
4280: e2506000 subs r6, r0, #0
4284: 1a00000e bne 42c4 <rtems_termios_ioctl+0x6c>
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
4288: e5943004 ldr r3, [r4, #4]
428c: e3530004 cmp r3, #4
4290: 0a000006 beq 42b0 <rtems_termios_ioctl+0x58>
4294: 8a00000d bhi 42d0 <rtems_termios_ioctl+0x78>
4298: e3530002 cmp r3, #2
429c: 0a000020 beq 4324 <rtems_termios_ioctl+0xcc>
42a0: 9a000087 bls 44c4 <rtems_termios_ioctl+0x26c>
if (tty->device.setAttributes)
(*tty->device.setAttributes)(tty->minor, &tty->termios);
break;
case RTEMS_IO_TCDRAIN:
drainOutput (tty);
42a4: e1a00005 mov r0, r5
42a8: ebfffedf bl 3e2c <drainOutput>
break;
42ac: ea000002 b 42bc <rtems_termios_ioctl+0x64>
case RTEMS_IO_SNDWAKEUP:
tty->tty_snd = *wakeup;
break;
case RTEMS_IO_RCVWAKEUP:
tty->tty_rcv = *wakeup;
42b0: e897000c ldm r7, {r2, r3} <== NOT EXECUTED
42b4: e58520dc str r2, [r5, #220] ; 0xdc <== NOT EXECUTED
42b8: e58530e0 str r3, [r5, #224] ; 0xe0 <== NOT EXECUTED
/* Half guess that this is the right operation */
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
}
break;
}
rtems_semaphore_release (tty->osem);
42bc: e5950018 ldr r0, [r5, #24]
42c0: eb000581 bl 58cc <rtems_semaphore_release>
args->ioctl_return = sc;
42c4: e584600c str r6, [r4, #12]
return sc;
}
42c8: e1a00006 mov r0, r6
42cc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
42d0: e3a02a46 mov r2, #286720 ; 0x46000 <== NOT EXECUTED
42d4: e2822e67 add r2, r2, #1648 ; 0x670 <== NOT EXECUTED
42d8: e282213d add r2, r2, #1073741839 ; 0x4000000f <== NOT EXECUTED
42dc: e1530002 cmp r3, r2 <== NOT EXECUTED
42e0: 0a00006b beq 4494 <rtems_termios_ioctl+0x23c> <== NOT EXECUTED
42e4: 8a000082 bhi 44f4 <rtems_termios_ioctl+0x29c> <== NOT EXECUTED
42e8: e3530005 cmp r3, #5 <== NOT EXECUTED
42ec: 0a0000a5 beq 4588 <rtems_termios_ioctl+0x330> <== NOT EXECUTED
default:
if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) {
42f0: e59520cc ldr r2, [r5, #204] ; 0xcc <== NOT EXECUTED
42f4: e59f3334 ldr r3, [pc, #820] ; 4630 <rtems_termios_ioctl+0x3d8><== NOT EXECUTED
42f8: e0833282 add r3, r3, r2, lsl #5 <== NOT EXECUTED
42fc: e5933018 ldr r3, [r3, #24] <== NOT EXECUTED
4300: e3530000 cmp r3, #0 <== NOT EXECUTED
4304: 03a0600a moveq r6, #10 <== NOT EXECUTED
4308: 0affffeb beq 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args);
430c: e1a00005 mov r0, r5 <== NOT EXECUTED
4310: e1a01004 mov r1, r4 <== NOT EXECUTED
4314: e1a0e00f mov lr, pc <== NOT EXECUTED
4318: e12fff13 bx r3 <== NOT EXECUTED
431c: e1a06000 mov r6, r0 <== NOT EXECUTED
4320: eaffffe5 b 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
break;
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
4324: e594e008 ldr lr, [r4, #8]
4328: e2857030 add r7, r5, #48 ; 0x30
432c: e8be000f ldm lr!, {r0, r1, r2, r3}
4330: e1a0c007 mov ip, r7
4334: e8ac000f stmia ip!, {r0, r1, r2, r3}
4338: e8be000f ldm lr!, {r0, r1, r2, r3}
433c: e8ac000f stmia ip!, {r0, r1, r2, r3}
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
4340: e59520b8 ldr r2, [r5, #184] ; 0xb8
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
break;
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
4344: e59e3000 ldr r3, [lr]
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
4348: e3120c02 tst r2, #512 ; 0x200
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
break;
case RTEMS_IO_SET_ATTRIBUTES:
tty->termios = *(struct termios *)args->buffer;
434c: e58c3000 str r3, [ip]
/*
* check for flow control options to be switched off
*/
/* check for outgoing XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXON) &&
4350: 0a000012 beq 43a0 <rtems_termios_ioctl+0x148>
4354: e5953030 ldr r3, [r5, #48] ; 0x30
4358: e3130b01 tst r3, #1024 ; 0x400
435c: 1a00000f bne 43a0 <rtems_termios_ioctl+0x148>
!(tty->termios.c_iflag & IXON)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXON | FL_ORCVXOF);
4360: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
4364: e3c33e21 bic r3, r3, #528 ; 0x210 <== NOT EXECUTED
4368: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/* has output been stopped due to received XOFF? */
if (tty->flow_ctrl & FL_OSTOP) {
436c: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
4370: e3130020 tst r3, #32 <== NOT EXECUTED
4374: 0a000009 beq 43a0 <rtems_termios_ioctl+0x148> <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
4378: e10f8000 mrs r8, CPSR <== NOT EXECUTED
437c: e3883080 orr r3, r8, #128 ; 0x80 <== NOT EXECUTED
4380: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
4384: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
4388: e5952094 ldr r2, [r5, #148] ; 0x94 <== NOT EXECUTED
/* has output been stopped due to received XOFF? */
if (tty->flow_ctrl & FL_OSTOP) {
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
438c: e3c33020 bic r3, r3, #32 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
4390: e3520000 cmp r2, #0 <== NOT EXECUTED
/* has output been stopped due to received XOFF? */
if (tty->flow_ctrl & FL_OSTOP) {
/* disable interrupts */
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
4394: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
4398: 1a00009c bne 4610 <rtems_termios_ioctl+0x3b8> <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
439c: e129f008 msr CPSR_fc, r8 <== NOT EXECUTED
/* reenable interrupts */
rtems_interrupt_enable(level);
}
}
/* check for incoming XON/XOFF flow control switched off */
if (( tty->flow_ctrl & FL_MDXOF) &&
43a0: e59530b8 ldr r3, [r5, #184] ; 0xb8
43a4: e3130b01 tst r3, #1024 ; 0x400
43a8: 0a000008 beq 43d0 <rtems_termios_ioctl+0x178>
43ac: e5953030 ldr r3, [r5, #48] ; 0x30 <== NOT EXECUTED
43b0: e3130a01 tst r3, #4096 ; 0x1000 <== NOT EXECUTED
43b4: 1a000005 bne 43d0 <rtems_termios_ioctl+0x178> <== NOT EXECUTED
!(tty->termios.c_iflag & IXOFF)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDXOF);
43b8: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
43bc: e3c33b01 bic r3, r3, #1024 ; 0x400 <== NOT EXECUTED
43c0: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/* FIXME: what happens, if we had sent XOFF but not yet XON? */
tty->flow_ctrl &= ~(FL_ISNTXOF);
43c4: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
43c8: e3c33002 bic r3, r3, #2 <== NOT EXECUTED
43cc: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
}
/* check for incoming RTS/CTS flow control switched off */
if (( tty->flow_ctrl & FL_MDRTS) &&
43d0: e59530b8 ldr r3, [r5, #184] ; 0xb8
43d4: e3130c01 tst r3, #256 ; 0x100
43d8: 05952038 ldreq r2, [r5, #56] ; 0x38
43dc: 0a000012 beq 442c <rtems_termios_ioctl+0x1d4>
43e0: e5952038 ldr r2, [r5, #56] ; 0x38 <== NOT EXECUTED
43e4: e3520000 cmp r2, #0 <== NOT EXECUTED
43e8: ba00007c blt 45e0 <rtems_termios_ioctl+0x388> <== NOT EXECUTED
!(tty->termios.c_cflag & CRTSCTS)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDRTS);
43ec: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
43f0: e3c33c01 bic r3, r3, #256 ; 0x100 <== NOT EXECUTED
43f4: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/* restart remote Tx, if it was stopped */
if ((tty->flow_ctrl & FL_IRTSOFF) &&
43f8: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
43fc: e3130004 tst r3, #4 <== NOT EXECUTED
4400: 0a000006 beq 4420 <rtems_termios_ioctl+0x1c8> <== NOT EXECUTED
(tty->device.startRemoteTx != NULL)) {
4404: e59530b0 ldr r3, [r5, #176] ; 0xb0 <== NOT EXECUTED
!(tty->termios.c_cflag & CRTSCTS)) {
/* clear related flags in flow_ctrl */
tty->flow_ctrl &= ~(FL_MDRTS);
/* restart remote Tx, if it was stopped */
if ((tty->flow_ctrl & FL_IRTSOFF) &&
4408: e3530000 cmp r3, #0 <== NOT EXECUTED
440c: 0a000003 beq 4420 <rtems_termios_ioctl+0x1c8> <== NOT EXECUTED
(tty->device.startRemoteTx != NULL)) {
tty->device.startRemoteTx(tty->minor);
4410: e5950010 ldr r0, [r5, #16] <== NOT EXECUTED
4414: e1a0e00f mov lr, pc <== NOT EXECUTED
4418: e12fff13 bx r3 <== NOT EXECUTED
441c: e5952038 ldr r2, [r5, #56] ; 0x38 <== NOT EXECUTED
}
tty->flow_ctrl &= ~(FL_IRTSOFF);
4420: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
4424: e3c33004 bic r3, r3, #4 <== NOT EXECUTED
4428: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
/*
* check for flow control options to be switched on
*/
/* check for incoming RTS/CTS flow control switched on */
if (tty->termios.c_cflag & CRTSCTS) {
442c: e3520000 cmp r2, #0
4430: ba00006a blt 45e0 <rtems_termios_ioctl+0x388>
tty->flow_ctrl |= FL_MDRTS;
}
/* check for incoming XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXOFF) {
4434: e5953030 ldr r3, [r5, #48] ; 0x30
4438: e3130a01 tst r3, #4096 ; 0x1000
tty->flow_ctrl |= FL_MDXOF;
443c: 159520b8 ldrne r2, [r5, #184] ; 0xb8
4440: 13822b01 orrne r2, r2, #1024 ; 0x400
4444: 158520b8 strne r2, [r5, #184] ; 0xb8
}
/* check for outgoing XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXON) {
4448: e3130b01 tst r3, #1024 ; 0x400
tty->flow_ctrl |= FL_MDXON;
444c: 159530b8 ldrne r3, [r5, #184] ; 0xb8
tty->termios = *(struct termios *)args->buffer;
/* check for and process change in flow control options */
termios_set_flowctrl(tty);
if (tty->termios.c_lflag & ICANON) {
4450: e595803c ldr r8, [r5, #60] ; 0x3c
if (tty->termios.c_iflag & IXOFF) {
tty->flow_ctrl |= FL_MDXOF;
}
/* check for outgoing XON/XOF flow control switched on */
if (tty->termios.c_iflag & IXON) {
tty->flow_ctrl |= FL_MDXON;
4454: 13833c02 orrne r3, r3, #512 ; 0x200
4458: 158530b8 strne r3, [r5, #184] ; 0xb8
tty->termios = *(struct termios *)args->buffer;
/* check for and process change in flow control options */
termios_set_flowctrl(tty);
if (tty->termios.c_lflag & ICANON) {
445c: e2188002 ands r8, r8, #2
4460: 0a00004c beq 4598 <rtems_termios_ioctl+0x340>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
4464: e3a03000 mov r3, #0
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
4468: e5853074 str r3, [r5, #116] ; 0x74
/* check for and process change in flow control options */
termios_set_flowctrl(tty);
if (tty->termios.c_lflag & ICANON) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
446c: e585306c str r3, [r5, #108] ; 0x6c
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
4470: e5853070 str r3, [r5, #112] ; 0x70
else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
}
}
}
if (tty->device.setAttributes)
4474: e59530a8 ldr r3, [r5, #168] ; 0xa8
4478: e3530000 cmp r3, #0
447c: 0affff8e beq 42bc <rtems_termios_ioctl+0x64>
(*tty->device.setAttributes)(tty->minor, &tty->termios);
4480: e1a01007 mov r1, r7
4484: e5950010 ldr r0, [r5, #16]
4488: e1a0e00f mov lr, pc
448c: e12fff13 bx r3
4490: eaffff89 b 42bc <rtems_termios_ioctl+0x64>
*(int*)(args->buffer)=tty->t_line;
break;
#endif
case FIONREAD:
{
int rawnc = tty->rawInBuf.Tail - tty->rawInBuf.Head;
4494: e5952060 ldr r2, [r5, #96] ; 0x60 <== NOT EXECUTED
4498: e595305c ldr r3, [r5, #92] ; 0x5c <== NOT EXECUTED
if ( rawnc < 0 )
449c: e0523003 subs r3, r2, r3 <== NOT EXECUTED
rawnc += tty->rawInBuf.Size;
44a0: 45952064 ldrmi r2, [r5, #100] ; 0x64 <== NOT EXECUTED
44a4: 40833002 addmi r3, r3, r2 <== NOT EXECUTED
/* Half guess that this is the right operation */
*(int *)args->buffer = tty->ccount - tty->cindex + rawnc;
44a8: e2851020 add r1, r5, #32 <== NOT EXECUTED
44ac: e8910006 ldm r1, {r1, r2} <== NOT EXECUTED
44b0: e0412002 sub r2, r1, r2 <== NOT EXECUTED
44b4: e5941008 ldr r1, [r4, #8] <== NOT EXECUTED
44b8: e0823003 add r3, r2, r3 <== NOT EXECUTED
44bc: e5813000 str r3, [r1] <== NOT EXECUTED
44c0: eaffff7d b 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
44c4: e3530001 cmp r3, #1
44c8: 1affff88 bne 42f0 <rtems_termios_ioctl+0x98>
sc = RTEMS_INVALID_NUMBER;
}
break;
case RTEMS_IO_GET_ATTRIBUTES:
*(struct termios *)args->buffer = tty->termios;
44cc: e5947008 ldr r7, [r4, #8]
44d0: e285c030 add ip, r5, #48 ; 0x30
44d4: e8bc000f ldm ip!, {r0, r1, r2, r3}
44d8: e1a0e007 mov lr, r7
44dc: e8ae000f stmia lr!, {r0, r1, r2, r3}
44e0: e8bc000f ldm ip!, {r0, r1, r2, r3}
44e4: e8ae000f stmia lr!, {r0, r1, r2, r3}
44e8: e59c3000 ldr r3, [ip]
44ec: e58e3000 str r3, [lr]
break;
44f0: eaffff71 b 42bc <rtems_termios_ioctl+0x64>
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL) {
args->ioctl_return = sc;
return sc;
}
switch (args->command) {
44f4: e3a02a47 mov r2, #290816 ; 0x47000 <== NOT EXECUTED
44f8: e2822e41 add r2, r2, #1040 ; 0x410 <== NOT EXECUTED
44fc: e2822129 add r2, r2, #1073741834 ; 0x4000000a <== NOT EXECUTED
4500: e1530002 cmp r3, r2 <== NOT EXECUTED
4504: 0a00001b beq 4578 <rtems_termios_ioctl+0x320> <== NOT EXECUTED
4508: e3a02a47 mov r2, #290816 ; 0x47000 <== NOT EXECUTED
450c: e2822e41 add r2, r2, #1040 ; 0x410 <== NOT EXECUTED
4510: e282212e add r2, r2, #-2147483637 ; 0x8000000b <== NOT EXECUTED
4514: e1530002 cmp r3, r2 <== NOT EXECUTED
4518: 1affff74 bne 42f0 <rtems_termios_ioctl+0x98> <== NOT EXECUTED
#if 1 /* FIXME */
case TIOCSETD:
/*
* close old line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
451c: e59f710c ldr r7, [pc, #268] ; 4630 <rtems_termios_ioctl+0x3d8><== NOT EXECUTED
4520: e59530cc ldr r3, [r5, #204] ; 0xcc <== NOT EXECUTED
4524: e0873283 add r3, r7, r3, lsl #5 <== NOT EXECUTED
4528: e5933004 ldr r3, [r3, #4] <== NOT EXECUTED
452c: e3530000 cmp r3, #0 <== NOT EXECUTED
4530: 0a000003 beq 4544 <rtems_termios_ioctl+0x2ec> <== NOT EXECUTED
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
4534: e1a00005 mov r0, r5 <== NOT EXECUTED
4538: e1a0e00f mov lr, pc <== NOT EXECUTED
453c: e12fff13 bx r3 <== NOT EXECUTED
4540: e1a06000 mov r6, r0 <== NOT EXECUTED
}
tty->t_line=*(int*)(args->buffer);
4544: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
4548: e5932000 ldr r2, [r3] <== NOT EXECUTED
tty->t_sc = NULL; /* ensure that no more valid data */
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
454c: e7973282 ldr r3, [r7, r2, lsl #5] <== NOT EXECUTED
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
}
tty->t_line=*(int*)(args->buffer);
tty->t_sc = NULL; /* ensure that no more valid data */
4550: e3a01000 mov r1, #0 <== NOT EXECUTED
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
4554: e3530000 cmp r3, #0 <== NOT EXECUTED
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
}
tty->t_line=*(int*)(args->buffer);
tty->t_sc = NULL; /* ensure that no more valid data */
4558: e58510d0 str r1, [r5, #208] ; 0xd0 <== NOT EXECUTED
* close old line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_close != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_close(tty);
}
tty->t_line=*(int*)(args->buffer);
455c: e58520cc str r2, [r5, #204] ; 0xcc <== NOT EXECUTED
tty->t_sc = NULL; /* ensure that no more valid data */
/*
* open new line discipline
*/
if (rtems_termios_linesw[tty->t_line].l_open != NULL) {
4560: 0affff55 beq 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
sc = rtems_termios_linesw[tty->t_line].l_open(tty);
4564: e1a00005 mov r0, r5 <== NOT EXECUTED
4568: e1a0e00f mov lr, pc <== NOT EXECUTED
456c: e12fff13 bx r3 <== NOT EXECUTED
4570: e1a06000 mov r6, r0 <== NOT EXECUTED
4574: eaffff50 b 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
}
break;
case TIOCGETD:
*(int*)(args->buffer)=tty->t_line;
4578: e5943008 ldr r3, [r4, #8] <== NOT EXECUTED
457c: e59520cc ldr r2, [r5, #204] ; 0xcc <== NOT EXECUTED
4580: e5832000 str r2, [r3] <== NOT EXECUTED
break;
4584: eaffff4c b 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
case RTEMS_IO_TCDRAIN:
drainOutput (tty);
break;
case RTEMS_IO_SNDWAKEUP:
tty->tty_snd = *wakeup;
4588: e897000c ldm r7, {r2, r3} <== NOT EXECUTED
458c: e58520d4 str r2, [r5, #212] ; 0xd4 <== NOT EXECUTED
4590: e58530d8 str r3, [r5, #216] ; 0xd8 <== NOT EXECUTED
break;
4594: eaffff48 b 42bc <rtems_termios_ioctl+0x64> <== NOT EXECUTED
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
rtems_clock_get_ticks_per_second() / 10;
4598: e5d5a046 ldrb sl, [r5, #70] ; 0x46
459c: eb0002d6 bl 50fc <rtems_clock_get_ticks_per_second>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
45a0: e000009a mul r0, sl, r0
45a4: e59f2088 ldr r2, [pc, #136] ; 4634 <rtems_termios_ioctl+0x3dc>
45a8: e0831092 umull r1, r3, r2, r0
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
45ac: e5d52046 ldrb r2, [r5, #70] ; 0x46
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
45b0: e1a031a3 lsr r3, r3, #3
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
45b4: e3520000 cmp r2, #0
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
45b8: e5853054 str r3, [r5, #84] ; 0x54
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
45bc: 0a00000b beq 45f0 <rtems_termios_ioctl+0x398>
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = tty->vtimeTicks;
if (tty->termios.c_cc[VMIN])
45c0: e5d52047 ldrb r2, [r5, #71] ; 0x47 <== NOT EXECUTED
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
45c4: e3520000 cmp r2, #0 <== NOT EXECUTED
45c8: 01a02003 moveq r2, r3 <== NOT EXECUTED
45cc: 13a02000 movne r2, #0 <== NOT EXECUTED
}
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
45d0: e585806c str r8, [r5, #108] ; 0x6c <== NOT EXECUTED
tty->rawInBufSemaphoreTimeout = tty->vtimeTicks;
if (tty->termios.c_cc[VMIN])
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
45d4: e5852074 str r2, [r5, #116] ; 0x74 <== NOT EXECUTED
else {
tty->vtimeTicks = tty->termios.c_cc[VTIME] *
rtems_clock_get_ticks_per_second() / 10;
if (tty->termios.c_cc[VTIME]) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = tty->vtimeTicks;
45d8: e5853070 str r3, [r5, #112] ; 0x70 <== NOT EXECUTED
45dc: eaffffa4 b 4474 <rtems_termios_ioctl+0x21c> <== NOT EXECUTED
/*
* check for flow control options to be switched on
*/
/* check for incoming RTS/CTS flow control switched on */
if (tty->termios.c_cflag & CRTSCTS) {
tty->flow_ctrl |= FL_MDRTS;
45e0: e59530b8 ldr r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
45e4: e3833c01 orr r3, r3, #256 ; 0x100 <== NOT EXECUTED
45e8: e58530b8 str r3, [r5, #184] ; 0xb8 <== NOT EXECUTED
45ec: eaffff90 b 4434 <rtems_termios_ioctl+0x1dc> <== NOT EXECUTED
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
}
else {
if (tty->termios.c_cc[VMIN]) {
45f0: e5d53047 ldrb r3, [r5, #71] ; 0x47
45f4: e3530000 cmp r3, #0
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
45f8: 03a03001 moveq r3, #1
}
else {
if (tty->termios.c_cc[VMIN]) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
45fc: 15852074 strne r2, [r5, #116] ; 0x74
else
tty->rawInBufSemaphoreFirstTimeout = tty->vtimeTicks;
}
else {
if (tty->termios.c_cc[VMIN]) {
tty->rawInBufSemaphoreOptions = RTEMS_WAIT;
4600: 1585206c strne r2, [r5, #108] ; 0x6c
tty->rawInBufSemaphoreTimeout = RTEMS_NO_TIMEOUT;
4604: 15852070 strne r2, [r5, #112] ; 0x70
tty->rawInBufSemaphoreFirstTimeout = RTEMS_NO_TIMEOUT;
}
else {
tty->rawInBufSemaphoreOptions = RTEMS_NO_WAIT;
4608: 0585306c streq r3, [r5, #108] ; 0x6c
460c: eaffff98 b 4474 <rtems_termios_ioctl+0x21c>
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(tty->minor,
&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
4610: e5953084 ldr r3, [r5, #132] ; 0x84 <== NOT EXECUTED
rtems_interrupt_disable(level);
tty->flow_ctrl &= ~FL_OSTOP;
/* check for chars in output buffer (or rob_state?) */
if (tty->rawOutBufState != rob_idle) {
/* if chars available, call write function... */
(*tty->device.write)(tty->minor,
4614: e595107c ldr r1, [r5, #124] ; 0x7c <== NOT EXECUTED
4618: e5950010 ldr r0, [r5, #16] <== NOT EXECUTED
461c: e0811003 add r1, r1, r3 <== NOT EXECUTED
4620: e3a02001 mov r2, #1 <== NOT EXECUTED
4624: e1a0e00f mov lr, pc <== NOT EXECUTED
4628: e595f0a4 ldr pc, [r5, #164] ; 0xa4 <== NOT EXECUTED
462c: eaffff5a b 439c <rtems_termios_ioctl+0x144> <== NOT EXECUTED
00004804 <rtems_termios_open>:
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
4804: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex,
4808: e59f7490 ldr r7, [pc, #1168] ; 4ca0 <rtems_termios_open+0x49c>
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
480c: e1a06001 mov r6, r1
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex,
4810: e3a01000 mov r1, #0
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
4814: e24dd014 sub sp, sp, #20
4818: e1a05000 mov r5, r0
481c: e1a08002 mov r8, r2
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex,
4820: e5970000 ldr r0, [r7]
4824: e1a02001 mov r2, r1
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg,
const rtems_termios_callbacks *callbacks
)
{
4828: e1a09003 mov r9, r3
struct rtems_termios_tty *tty;
/*
* See if the device has already been opened
*/
sc = rtems_semaphore_obtain (rtems_termios_ttyMutex,
482c: eb0003de bl 57ac <rtems_semaphore_obtain>
RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
4830: e250a000 subs sl, r0, #0
4834: 1a000020 bne 48bc <rtems_termios_open+0xb8>
return sc;
for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
4838: e59fb464 ldr fp, [pc, #1124] ; 4ca4 <rtems_termios_open+0x4a0>
483c: e59b4000 ldr r4, [fp]
4840: e3540000 cmp r4, #0
4844: 1a000003 bne 4858 <rtems_termios_open+0x54>
4848: ea00002b b 48fc <rtems_termios_open+0xf8>
484c: e5944000 ldr r4, [r4]
4850: e3540000 cmp r4, #0
4854: 0a000028 beq 48fc <rtems_termios_open+0xf8>
if ((tty->major == major) && (tty->minor == minor))
4858: e594300c ldr r3, [r4, #12]
485c: e1530005 cmp r3, r5
4860: 1afffff9 bne 484c <rtems_termios_open+0x48>
4864: e5943010 ldr r3, [r4, #16]
4868: e1530006 cmp r3, r6
486c: 1afffff6 bne 484c <rtems_termios_open+0x48>
if (c++ == 'z')
c = 'a';
}
args->iop->data1 = tty;
if (!tty->refcount++) {
4870: e5943008 ldr r3, [r4, #8]
*/
if (c++ == 'z')
c = 'a';
}
args->iop->data1 = tty;
4874: e5982000 ldr r2, [r8]
if (!tty->refcount++) {
4878: e3530000 cmp r3, #0
487c: e2833001 add r3, r3, #1
*/
if (c++ == 'z')
c = 'a';
}
args->iop->data1 = tty;
4880: e5824034 str r4, [r2, #52] ; 0x34
if (!tty->refcount++) {
4884: e5843008 str r3, [r4, #8]
4888: 1a000009 bne 48b4 <rtems_termios_open+0xb0>
if (tty->device.firstOpen)
488c: e5943098 ldr r3, [r4, #152] ; 0x98
4890: e3530000 cmp r3, #0
(*tty->device.firstOpen)(major, minor, arg);
4894: 11a00005 movne r0, r5
4898: 11a01006 movne r1, r6
489c: 11a02008 movne r2, r8
48a0: 11a0e00f movne lr, pc
48a4: 112fff13 bxne r3
/*
* start I/O tasks, if needed
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
48a8: e59430b4 ldr r3, [r4, #180] ; 0xb4
48ac: e3530002 cmp r3, #2
48b0: 0a000004 beq 48c8 <rtems_termios_open+0xc4>
(rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
}
rtems_semaphore_release (rtems_termios_ttyMutex);
48b4: e5970000 ldr r0, [r7]
48b8: eb000403 bl 58cc <rtems_semaphore_release>
return RTEMS_SUCCESSFUL;
}
48bc: e1a0000a mov r0, sl
48c0: e28dd014 add sp, sp, #20
48c4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
(*tty->device.firstOpen)(major, minor, arg);
/*
* start I/O tasks, if needed
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_start(tty->rxTaskId,
48c8: e59400c4 ldr r0, [r4, #196] ; 0xc4 <== NOT EXECUTED
48cc: e59f13d4 ldr r1, [pc, #980] ; 4ca8 <rtems_termios_open+0x4a4><== NOT EXECUTED
48d0: e1a02004 mov r2, r4 <== NOT EXECUTED
48d4: eb0004cd bl 5c10 <rtems_task_start> <== NOT EXECUTED
rtems_termios_rxdaemon,
(rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
48d8: e3500000 cmp r0, #0 <== NOT EXECUTED
48dc: 1a0000d2 bne 4c2c <rtems_termios_open+0x428> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_task_start(tty->txTaskId,
48e0: e1a02004 mov r2, r4 <== NOT EXECUTED
48e4: e59400c8 ldr r0, [r4, #200] ; 0xc8 <== NOT EXECUTED
48e8: e59f13bc ldr r1, [pc, #956] ; 4cac <rtems_termios_open+0x4a8><== NOT EXECUTED
48ec: eb0004c7 bl 5c10 <rtems_task_start> <== NOT EXECUTED
rtems_termios_txdaemon,
(rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
48f0: e3500000 cmp r0, #0 <== NOT EXECUTED
48f4: 0affffee beq 48b4 <rtems_termios_open+0xb0> <== NOT EXECUTED
48f8: ea0000cb b 4c2c <rtems_termios_open+0x428> <== NOT EXECUTED
static char c = 'a';
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
48fc: e3a00001 mov r0, #1
4900: e3a010e8 mov r1, #232 ; 0xe8
4904: ebfff551 bl 1e50 <calloc>
if (tty == NULL) {
4908: e3500000 cmp r0, #0
static char c = 'a';
/*
* Create a new device
*/
tty = calloc (1, sizeof (struct rtems_termios_tty));
490c: e58d0010 str r0, [sp, #16]
4910: e1a04000 mov r4, r0
if (tty == NULL) {
4914: 0a0000af beq 4bd8 <rtems_termios_open+0x3d4>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
4918: e59f0390 ldr r0, [pc, #912] ; 4cb0 <rtems_termios_open+0x4ac>
491c: e59d1010 ldr r1, [sp, #16]
4920: e5903004 ldr r3, [r0, #4]
4924: e5813064 str r3, [r1, #100] ; 0x64
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
4928: e5910064 ldr r0, [r1, #100] ; 0x64
492c: ebfff6b6 bl 240c <malloc>
4930: e59d2010 ldr r2, [sp, #16]
if (tty->rawInBuf.theBuf == NULL) {
4934: e3500000 cmp r0, #0
}
/*
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
4938: e5820058 str r0, [r2, #88] ; 0x58
if (tty->rawInBuf.theBuf == NULL) {
493c: 0a0000a9 beq 4be8 <rtems_termios_open+0x3e4>
return RTEMS_NO_MEMORY;
}
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
4940: e59fc368 ldr ip, [pc, #872] ; 4cb0 <rtems_termios_open+0x4ac>
4944: e59de010 ldr lr, [sp, #16]
4948: e59c3008 ldr r3, [ip, #8]
494c: e58e3088 str r3, [lr, #136] ; 0x88
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
4950: e59e0088 ldr r0, [lr, #136] ; 0x88
4954: ebfff6ac bl 240c <malloc>
4958: e59d1010 ldr r1, [sp, #16]
if (tty->rawOutBuf.theBuf == NULL) {
495c: e3500000 cmp r0, #0
}
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
4960: e581007c str r0, [r1, #124] ; 0x7c
if (tty->rawOutBuf.theBuf == NULL) {
free((void *)(tty->rawInBuf.theBuf));
4964: 05910058 ldreq r0, [r1, #88] ; 0x58
/*
* allocate raw output buffer
*/
tty->rawOutBuf.Size = RAW_OUTPUT_BUFFER_SIZE;
tty->rawOutBuf.theBuf = malloc (tty->rawOutBuf.Size);
if (tty->rawOutBuf.theBuf == NULL) {
4968: 0a000097 beq 4bcc <rtems_termios_open+0x3c8>
return RTEMS_NO_MEMORY;
}
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
496c: e59f233c ldr r2, [pc, #828] ; 4cb0 <rtems_termios_open+0x4ac>
4970: e5920000 ldr r0, [r2]
4974: ebfff6a4 bl 240c <malloc>
4978: e59d3010 ldr r3, [sp, #16]
if (tty->cbuf == NULL) {
497c: e3500000 cmp r0, #0
return RTEMS_NO_MEMORY;
}
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
4980: e583001c str r0, [r3, #28]
if (tty->cbuf == NULL) {
4984: 0a00008c beq 4bbc <rtems_termios_open+0x3b8>
tty->tty_rcvwakeup = 0;
/*
* link tty
*/
tty->forw = rtems_termios_ttyHead;
4988: e59b2000 ldr r2, [fp]
tty->back = NULL;
498c: e59dc010 ldr ip, [sp, #16]
return RTEMS_NO_MEMORY;
}
/*
* Initialize wakeup callbacks
*/
tty->tty_snd.sw_pfn = NULL;
4990: e3a03000 mov r3, #0
/*
* link tty
*/
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
4994: e3520000 cmp r2, #0
/*
* link tty
*/
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
4998: e88c000c stm ip, {r2, r3}
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
499c: 1582c004 strne ip, [r2, #4]
return RTEMS_NO_MEMORY;
}
/*
* Initialize wakeup callbacks
*/
tty->tty_snd.sw_pfn = NULL;
49a0: e58c30d4 str r3, [ip, #212] ; 0xd4
tty->tty_snd.sw_arg = NULL;
49a4: e58c30d8 str r3, [ip, #216] ; 0xd8
tty->tty_rcv.sw_pfn = NULL;
49a8: e58c30dc str r3, [ip, #220] ; 0xdc
tty->tty_rcv.sw_arg = NULL;
49ac: e58c30e0 str r3, [ip, #224] ; 0xe0
tty->tty_rcvwakeup = 0;
49b0: e58c30e4 str r3, [ip, #228] ; 0xe4
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
49b4: e59f32f8 ldr r3, [pc, #760] ; 4cb4 <rtems_termios_open+0x4b0>
49b8: e5932000 ldr r2, [r3]
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
49bc: e59f12ec ldr r1, [pc, #748] ; 4cb0 <rtems_termios_open+0x4ac>
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
49c0: e3520000 cmp r2, #0
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
49c4: e59d2010 ldr r2, [sp, #16]
49c8: e5d1000c ldrb r0, [r1, #12]
*/
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
49cc: e59de010 ldr lr, [sp, #16]
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
49d0: e282c014 add ip, r2, #20
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
49d4: 0583e000 streq lr, [r3]
*/
tty->forw = rtems_termios_ttyHead;
tty->back = NULL;
if (rtems_termios_ttyHead != NULL)
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
49d8: e58be000 str lr, [fp]
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
49dc: e3800315 orr r0, r0, #1409286144 ; 0x54000000
49e0: e58dc000 str ip, [sp]
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
tty->minor = minor;
49e4: e59dc010 ldr ip, [sp, #16]
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
49e8: e3800852 orr r0, r0, #5373952 ; 0x520000
49ec: e3a03000 mov r3, #0
49f0: e3800c69 orr r0, r0, #26880 ; 0x6900
49f4: e3a01001 mov r1, #1
49f8: e3a02054 mov r2, #84 ; 0x54
rtems_termios_ttyHead->back = tty;
rtems_termios_ttyHead = tty;
if (rtems_termios_ttyTail == NULL)
rtems_termios_ttyTail = tty;
tty->minor = minor;
49fc: e58c6010 str r6, [ip, #16]
tty->major = major;
4a00: e58c500c str r5, [ip, #12]
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
4a04: eb0002cd bl 5540 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'i', c),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->isem);
if (sc != RTEMS_SUCCESSFUL)
4a08: e2503000 subs r3, r0, #0
tty->major = major;
/*
* Set up mutex semaphores
*/
sc = rtems_semaphore_create (
4a0c: e59fb29c ldr fp, [pc, #668] ; 4cb0 <rtems_termios_open+0x4ac>
rtems_build_name ('T', 'R', 'i', c),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->isem);
if (sc != RTEMS_SUCCESSFUL)
4a10: 1a000085 bne 4c2c <rtems_termios_open+0x428>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
4a14: e5db000c ldrb r0, [fp, #12]
4a18: e59de010 ldr lr, [sp, #16]
4a1c: e3800315 orr r0, r0, #1409286144 ; 0x54000000
4a20: e3800852 orr r0, r0, #5373952 ; 0x520000
4a24: e28ec018 add ip, lr, #24
4a28: e3a01001 mov r1, #1
4a2c: e3800c6f orr r0, r0, #28416 ; 0x6f00
4a30: e3a02054 mov r2, #84 ; 0x54
4a34: e58dc000 str ip, [sp]
4a38: eb0002c0 bl 5540 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'o', c),
1,
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->osem);
if (sc != RTEMS_SUCCESSFUL)
4a3c: e2501000 subs r1, r0, #0
4a40: 1a000079 bne 4c2c <rtems_termios_open+0x428>
rtems_fatal_error_occurred (sc);
sc = rtems_semaphore_create (
4a44: e5db000c ldrb r0, [fp, #12]
4a48: e59d2010 ldr r2, [sp, #16]
4a4c: e3800315 orr r0, r0, #1409286144 ; 0x54000000
4a50: e3800852 orr r0, r0, #5373952 ; 0x520000
4a54: e282c08c add ip, r2, #140 ; 0x8c
4a58: e3800b1e orr r0, r0, #30720 ; 0x7800
4a5c: e3a02020 mov r2, #32
4a60: e1a03001 mov r3, r1
4a64: e58dc000 str ip, [sp]
4a68: eb0002b4 bl 5540 <rtems_semaphore_create>
rtems_build_name ('T', 'R', 'x', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
RTEMS_NO_PRIORITY,
&tty->rawOutBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
4a6c: e250e000 subs lr, r0, #0
4a70: 1a00006d bne 4c2c <rtems_termios_open+0x428>
tty->rawOutBufState = rob_idle;
/*
* Set callbacks
*/
tty->device = *callbacks;
4a74: e8b9000f ldm r9!, {r0, r1, r2, r3}
4a78: e58d900c str r9, [sp, #12]
4a7c: e59d9010 ldr r9, [sp, #16]
4a80: e289c098 add ip, r9, #152 ; 0x98
4a84: e8ac000f stmia ip!, {r0, r1, r2, r3}
4a88: e59d900c ldr r9, [sp, #12]
4a8c: e899000f ldm r9, {r0, r1, r2, r3}
4a90: e88c000f stm ip, {r0, r1, r2, r3}
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
4a94: e59dc010 ldr ip, [sp, #16]
4a98: e59c30b4 ldr r3, [ip, #180] ; 0xb4
4a9c: e3530002 cmp r3, #2
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
RTEMS_NO_PRIORITY,
&tty->rawOutBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
tty->rawOutBufState = rob_idle;
4aa0: e58ce094 str lr, [ip, #148] ; 0x94
tty->device = *callbacks;
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
4aa4: 0a000061 beq 4c30 <rtems_termios_open+0x42c>
&tty->rxTaskId);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
4aa8: e59d9010 ldr r9, [sp, #16]
4aac: e59930a0 ldr r3, [r9, #160] ; 0xa0
4ab0: e3530000 cmp r3, #0
4ab4: 0a00004e beq 4bf4 <rtems_termios_open+0x3f0>
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
4ab8: e59930b4 ldr r3, [r9, #180] ; 0xb4
4abc: e3530002 cmp r3, #2
4ac0: 0a00004b beq 4bf4 <rtems_termios_open+0x3f0>
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
tty->termios.c_cc[VLNEXT] = '\026';
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
4ac4: e59d0010 ldr r0, [sp, #16]
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
4ac8: e3a03000 mov r3, #0
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
tty->termios.c_cc[VLNEXT] = '\026';
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
4acc: e58030b8 str r3, [r0, #184] ; 0xb8
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
4ad0: e5909064 ldr r9, [r0, #100] ; 0x64
tty->highwater = tty->rawInBuf.Size * 3/4;
4ad4: e590b064 ldr fp, [r0, #100] ; 0x64
/*
* Bump name characer
*/
if (c++ == 'z')
4ad8: e59f11d0 ldr r1, [pc, #464] ; 4cb0 <rtems_termios_open+0x4ac>
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
4adc: e1a090a9 lsr r9, r9, #1
4ae0: e58d9008 str r9, [sp, #8]
tty->highwater = tty->rawInBuf.Size * 3/4;
4ae4: e08bb08b add fp, fp, fp, lsl #1
4ae8: e59d9010 ldr r9, [sp, #16]
/*
* Bump name characer
*/
if (c++ == 'z')
4aec: e5d1e00c ldrb lr, [r1, #12]
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
tty->highwater = tty->rawInBuf.Size * 3/4;
4af0: e1a0b12b lsr fp, fp, #2
4af4: e589b0c0 str fp, [r9, #192] ; 0xc0
/*
* Bump name characer
*/
if (c++ == 'z')
4af8: e59f91b0 ldr r9, [pc, #432] ; 4cb0 <rtems_termios_open+0x4ac>
4afc: e35e007a cmp lr, #122 ; 0x7a
4b00: e28ee001 add lr, lr, #1
4b04: e5c9e00c strb lr, [r9, #12]
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
4b08: e3a02c82 mov r2, #33280 ; 0x8200
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
4b0c: e59de010 ldr lr, [sp, #16]
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
tty->termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOK | ECHOE | ECHOCTL;
4b10: e282203b add r2, r2, #59 ; 0x3b
4b14: e58e203c str r2, [lr, #60] ; 0x3c
tty->termios.c_cc[VINTR] = '\003';
4b18: e3a02003 mov r2, #3
4b1c: e5ce2041 strb r2, [lr, #65] ; 0x41
tty->termios.c_cc[VQUIT] = '\034';
4b20: e3a0201c mov r2, #28
4b24: e5ce2042 strb r2, [lr, #66] ; 0x42
tty->termios.c_cc[VERASE] = '\177';
4b28: e3a0207f mov r2, #127 ; 0x7f
4b2c: e5ce2043 strb r2, [lr, #67] ; 0x43
tty->termios.c_cc[VKILL] = '\025';
4b30: e3a02015 mov r2, #21
4b34: e5ce2044 strb r2, [lr, #68] ; 0x44
tty->termios.c_cc[VEOF] = '\004';
4b38: e3a02004 mov r2, #4
4b3c: e5ce2045 strb r2, [lr, #69] ; 0x45
tty->termios.c_cc[VEOL] = '\000';
tty->termios.c_cc[VEOL2] = '\000';
tty->termios.c_cc[VSTART] = '\021';
4b40: e3a02011 mov r2, #17
4b44: e5ce2049 strb r2, [lr, #73] ; 0x49
tty->termios.c_cc[VSTOP] = '\023';
4b48: e3a02013 mov r2, #19
4b4c: e5ce204a strb r2, [lr, #74] ; 0x4a
tty->termios.c_cc[VSUSP] = '\032';
4b50: e3a0201a mov r2, #26
4b54: e5ce204b strb r2, [lr, #75] ; 0x4b
tty->termios.c_cc[VREPRINT] = '\022';
4b58: e3a02012 mov r2, #18
4b5c: e5ce204d strb r2, [lr, #77] ; 0x4d
tty->termios.c_cc[VDISCARD] = '\017';
4b60: e3a0200f mov r2, #15
4b64: e5ce204e strb r2, [lr, #78] ; 0x4e
tty->termios.c_cc[VWERASE] = '\027';
4b68: e3a02017 mov r2, #23
4b6c: e5ce204f strb r2, [lr, #79] ; 0x4f
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
4b70: e3a00b06 mov r0, #6144 ; 0x1800
tty->termios.c_cc[VSTOP] = '\023';
tty->termios.c_cc[VSUSP] = '\032';
tty->termios.c_cc[VREPRINT] = '\022';
tty->termios.c_cc[VDISCARD] = '\017';
tty->termios.c_cc[VWERASE] = '\027';
tty->termios.c_cc[VLNEXT] = '\026';
4b74: e3a02016 mov r2, #22
4b78: e5ce2050 strb r2, [lr, #80] ; 0x50
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
4b7c: e2800005 add r0, r0, #5
4b80: e58e0034 str r0, [lr, #52] ; 0x34
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
4b84: e3a0cc25 mov ip, #9472 ; 0x2500
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
4b88: e59d0008 ldr r0, [sp, #8]
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
4b8c: e3a01e8b mov r1, #2224 ; 0x8b0
tty->termios.c_cc[VINTR] = '\003';
tty->termios.c_cc[VQUIT] = '\034';
tty->termios.c_cc[VERASE] = '\177';
tty->termios.c_cc[VKILL] = '\025';
tty->termios.c_cc[VEOF] = '\004';
tty->termios.c_cc[VEOL] = '\000';
4b90: e5ce304c strb r3, [lr, #76] ; 0x4c
tty->termios.c_cc[VEOL2] = '\000';
4b94: e5ce3051 strb r3, [lr, #81] ; 0x51
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
4b98: e28cc002 add ip, ip, #2
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
4b9c: e281100d add r1, r1, #13
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
c = 'a';
4ba0: 0282204b addeq r2, r2, #75 ; 0x4b
4ba4: 01a03009 moveq r3, r9
}
/*
* Set default parameters
*/
tty->termios.c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;
4ba8: e58ec030 str ip, [lr, #48] ; 0x30
tty->termios.c_oflag = OPOST | ONLCR | XTABS;
tty->termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
4bac: e58e1038 str r1, [lr, #56] ; 0x38
/* start with no flow control, clear flow control flags */
tty->flow_ctrl = 0;
/*
* set low/highwater mark for XON/XOFF support
*/
tty->lowwater = tty->rawInBuf.Size * 1/2;
4bb0: e58e00bc str r0, [lr, #188] ; 0xbc
tty->highwater = tty->rawInBuf.Size * 3/4;
/*
* Bump name characer
*/
if (c++ == 'z')
c = 'a';
4bb4: 05c3200c strbeq r2, [r3, #12]
4bb8: eaffff2c b 4870 <rtems_termios_open+0x6c>
/*
* allocate cooked buffer
*/
tty->cbuf = malloc (CBUFSIZE);
if (tty->cbuf == NULL) {
free((void *)(tty->rawOutBuf.theBuf));
4bbc: e593007c ldr r0, [r3, #124] ; 0x7c <== NOT EXECUTED
4bc0: ebfff538 bl 20a8 <free> <== NOT EXECUTED
free((void *)(tty->rawInBuf.theBuf));
4bc4: e59d9010 ldr r9, [sp, #16] <== NOT EXECUTED
4bc8: e5990058 ldr r0, [r9, #88] ; 0x58 <== NOT EXECUTED
4bcc: ebfff535 bl 20a8 <free> <== NOT EXECUTED
free(tty);
4bd0: e59d0010 ldr r0, [sp, #16] <== NOT EXECUTED
4bd4: ebfff533 bl 20a8 <free> <== NOT EXECUTED
rtems_semaphore_release (rtems_termios_ttyMutex);
4bd8: e5970000 ldr r0, [r7] <== NOT EXECUTED
4bdc: eb00033a bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
4be0: e3a0a01a mov sl, #26 <== NOT EXECUTED
return RTEMS_NO_MEMORY;
4be4: eaffff34 b 48bc <rtems_termios_open+0xb8> <== NOT EXECUTED
* allocate raw input buffer
*/
tty->rawInBuf.Size = RAW_INPUT_BUFFER_SIZE;
tty->rawInBuf.theBuf = malloc (tty->rawInBuf.Size);
if (tty->rawInBuf.theBuf == NULL) {
free(tty);
4be8: e1a00002 mov r0, r2 <== NOT EXECUTED
4bec: ebfff52d bl 20a8 <free> <== NOT EXECUTED
4bf0: eafffff8 b 4bd8 <rtems_termios_open+0x3d4> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
}
if ((tty->device.pollRead == NULL) ||
(tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN)){
sc = rtems_semaphore_create (
4bf4: e59fc0b4 ldr ip, [pc, #180] ; 4cb0 <rtems_termios_open+0x4ac><== NOT EXECUTED
4bf8: e5dc000c ldrb r0, [ip, #12] <== NOT EXECUTED
4bfc: e59de010 ldr lr, [sp, #16] <== NOT EXECUTED
4c00: e3800315 orr r0, r0, #1409286144 ; 0x54000000 <== NOT EXECUTED
4c04: e3a01000 mov r1, #0 <== NOT EXECUTED
4c08: e3800852 orr r0, r0, #5373952 ; 0x520000 <== NOT EXECUTED
4c0c: e28ec068 add ip, lr, #104 ; 0x68 <== NOT EXECUTED
4c10: e3800c72 orr r0, r0, #29184 ; 0x7200 <== NOT EXECUTED
4c14: e3a02024 mov r2, #36 ; 0x24 <== NOT EXECUTED
4c18: e1a03001 mov r3, r1 <== NOT EXECUTED
4c1c: e58dc000 str ip, [sp] <== NOT EXECUTED
4c20: eb000246 bl 5540 <rtems_semaphore_create> <== NOT EXECUTED
rtems_build_name ('T', 'R', 'r', c),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_PRIORITY,
RTEMS_NO_PRIORITY,
&tty->rawInBuf.Semaphore);
if (sc != RTEMS_SUCCESSFUL)
4c24: e3500000 cmp r0, #0 <== NOT EXECUTED
4c28: 0affffa5 beq 4ac4 <rtems_termios_open+0x2c0> <== NOT EXECUTED
sc = rtems_task_start(tty->txTaskId,
rtems_termios_txdaemon,
(rtems_task_argument)tty);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
4c2c: eb00046b bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
/*
* Create I/O tasks
*/
if (tty->device.outputUsesInterrupts == TERMIOS_TASK_DRIVEN) {
sc = rtems_task_create (
4c30: e5db000c ldrb r0, [fp, #12] <== NOT EXECUTED
4c34: e3800315 orr r0, r0, #1409286144 ; 0x54000000 <== NOT EXECUTED
4c38: e380071e orr r0, r0, #7864320 ; 0x780000 <== NOT EXECUTED
4c3c: e28cc0c8 add ip, ip, #200 ; 0xc8 <== NOT EXECUTED
4c40: e3800b15 orr r0, r0, #21504 ; 0x5400 <== NOT EXECUTED
4c44: e3a0100a mov r1, #10 <== NOT EXECUTED
4c48: e3a02b01 mov r2, #1024 ; 0x400 <== NOT EXECUTED
4c4c: e3a03c05 mov r3, #1280 ; 0x500 <== NOT EXECUTED
4c50: e58de000 str lr, [sp] <== NOT EXECUTED
4c54: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
4c58: eb000345 bl 5974 <rtems_task_create> <== NOT EXECUTED
TERMIOS_TXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->txTaskId);
if (sc != RTEMS_SUCCESSFUL)
4c5c: e250e000 subs lr, r0, #0 <== NOT EXECUTED
4c60: 1afffff1 bne 4c2c <rtems_termios_open+0x428> <== NOT EXECUTED
rtems_fatal_error_occurred (sc);
sc = rtems_task_create (
4c64: e5db000c ldrb r0, [fp, #12] <== NOT EXECUTED
4c68: e59d2010 ldr r2, [sp, #16] <== NOT EXECUTED
4c6c: e3800452 orr r0, r0, #1375731712 ; 0x52000000 <== NOT EXECUTED
4c70: e380071e orr r0, r0, #7864320 ; 0x780000 <== NOT EXECUTED
4c74: e282c0c4 add ip, r2, #196 ; 0xc4 <== NOT EXECUTED
4c78: e3800b15 orr r0, r0, #21504 ; 0x5400 <== NOT EXECUTED
4c7c: e3a01009 mov r1, #9 <== NOT EXECUTED
4c80: e3a02b01 mov r2, #1024 ; 0x400 <== NOT EXECUTED
4c84: e3a03c05 mov r3, #1280 ; 0x500 <== NOT EXECUTED
4c88: e58de000 str lr, [sp] <== NOT EXECUTED
4c8c: e58dc004 str ip, [sp, #4] <== NOT EXECUTED
4c90: eb000337 bl 5974 <rtems_task_create> <== NOT EXECUTED
TERMIOS_RXTASK_STACKSIZE,
RTEMS_NO_PREEMPT | RTEMS_NO_TIMESLICE |
RTEMS_NO_ASR,
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
&tty->rxTaskId);
if (sc != RTEMS_SUCCESSFUL)
4c94: e3500000 cmp r0, #0 <== NOT EXECUTED
4c98: 0affff82 beq 4aa8 <rtems_termios_open+0x2a4> <== NOT EXECUTED
4c9c: eaffffe2 b 4c2c <rtems_termios_open+0x428> <== NOT EXECUTED
0000360c <rtems_termios_puts>:
const unsigned char *buf = _buf;
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
360c: e59230b4 ldr r3, [r2, #180] ; 0xb4
3610: e3530000 cmp r3, #0
* Send characters to device-specific code
*/
void
rtems_termios_puts (
const void *_buf, int len, struct rtems_termios_tty *tty)
{
3614: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
3618: e1a04002 mov r4, r2
361c: e1a0b000 mov fp, r0
3620: e1a09001 mov r9, r1
const unsigned char *buf = _buf;
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
3624: 0a000039 beq 3710 <rtems_termios_puts+0x104>
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
3628: e3510000 cmp r1, #0 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
362c: e5928080 ldr r8, [r2, #128] ; 0x80 <== NOT EXECUTED
while (len) {
3630: 08bd8ff0 popeq {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
3634: e3a0a000 mov sl, #0 <== NOT EXECUTED
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
rtems_interrupt_disable (level);
while (newHead == tty->rawOutBuf.Tail) {
tty->rawOutBufState = rob_wait;
3638: e3a07002 mov r7, #2 <== NOT EXECUTED
* len -= ncopy
*
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
363c: e5941088 ldr r1, [r4, #136] ; 0x88 <== NOT EXECUTED
3640: e2880001 add r0, r8, #1 <== NOT EXECUTED
3644: eb0050eb bl 179f8 <__umodsi3> <== NOT EXECUTED
3648: e1a08000 mov r8, r0 <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
364c: e10f5000 mrs r5, CPSR <== NOT EXECUTED
3650: e3853080 orr r3, r5, #128 ; 0x80 <== NOT EXECUTED
3654: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
rtems_interrupt_disable (level);
while (newHead == tty->rawOutBuf.Tail) {
3658: e5946084 ldr r6, [r4, #132] ; 0x84 <== NOT EXECUTED
365c: e1560000 cmp r6, r0 <== NOT EXECUTED
3660: 1a00000d bne 369c <rtems_termios_puts+0x90> <== NOT EXECUTED
tty->rawOutBufState = rob_wait;
3664: e5847094 str r7, [r4, #148] ; 0x94 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3668: e129f005 msr CPSR_fc, r5 <== NOT EXECUTED
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore,
366c: e3a01000 mov r1, #0 <== NOT EXECUTED
3670: e594008c ldr r0, [r4, #140] ; 0x8c <== NOT EXECUTED
3674: e1a02001 mov r2, r1 <== NOT EXECUTED
3678: eb00084b bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
367c: e3500000 cmp r0, #0 <== NOT EXECUTED
3680: 1a000028 bne 3728 <rtems_termios_puts+0x11c> <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
3684: e10f5000 mrs r5, CPSR <== NOT EXECUTED
3688: e3853080 orr r3, r5, #128 ; 0x80 <== NOT EXECUTED
368c: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
* To minimize latency, the memcpy should be done
* with interrupts enabled.
*/
newHead = (newHead + 1) % tty->rawOutBuf.Size;
rtems_interrupt_disable (level);
while (newHead == tty->rawOutBuf.Tail) {
3690: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
3694: e1530006 cmp r3, r6 <== NOT EXECUTED
3698: 0afffff1 beq 3664 <rtems_termios_puts+0x58> <== NOT EXECUTED
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
}
tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++;
369c: e5943080 ldr r3, [r4, #128] ; 0x80 <== NOT EXECUTED
36a0: e7db100a ldrb r1, [fp, sl] <== NOT EXECUTED
36a4: e594207c ldr r2, [r4, #124] ; 0x7c <== NOT EXECUTED
36a8: e7c21003 strb r1, [r2, r3] <== NOT EXECUTED
tty->rawOutBuf.Head = newHead;
if (tty->rawOutBufState == rob_idle) {
36ac: e5943094 ldr r3, [r4, #148] ; 0x94 <== NOT EXECUTED
36b0: e3530000 cmp r3, #0 <== NOT EXECUTED
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
rtems_interrupt_disable (level);
}
tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++;
tty->rawOutBuf.Head = newHead;
36b4: e5848080 str r8, [r4, #128] ; 0x80 <== NOT EXECUTED
if (tty->rawOutBufState == rob_idle) {
36b8: 1a000007 bne 36dc <rtems_termios_puts+0xd0> <== NOT EXECUTED
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
36bc: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
36c0: e3130010 tst r3, #16 <== NOT EXECUTED
36c4: 0a000009 beq 36f0 <rtems_termios_puts+0xe4> <== NOT EXECUTED
(*tty->device.write)(tty->minor,
(char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
}
else {
/* remember that output has been stopped due to flow ctrl*/
tty->flow_ctrl |= FL_OSTOP;
36c8: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
36cc: e3833020 orr r3, r3, #32 <== NOT EXECUTED
36d0: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
}
tty->rawOutBufState = rob_busy;
36d4: e3a03001 mov r3, #1 <== NOT EXECUTED
36d8: e5843094 str r3, [r4, #148] ; 0x94 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
36dc: e129f005 msr CPSR_fc, r5 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
36e0: e2599001 subs r9, r9, #1 <== NOT EXECUTED
tty->flow_ctrl |= FL_OSTOP;
}
tty->rawOutBufState = rob_busy;
}
rtems_interrupt_enable (level);
len--;
36e4: e28aa001 add sl, sl, #1 <== NOT EXECUTED
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
return;
}
newHead = tty->rawOutBuf.Head;
while (len) {
36e8: 1affffd3 bne 363c <rtems_termios_puts+0x30> <== NOT EXECUTED
36ec: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
tty->rawOutBuf.Head = newHead;
if (tty->rawOutBufState == rob_idle) {
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
(*tty->device.write)(tty->minor,
(char *)&tty->rawOutBuf.theBuf[tty->rawOutBuf.Tail],1);
36f0: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
tty->rawOutBuf.theBuf[tty->rawOutBuf.Head] = *buf++;
tty->rawOutBuf.Head = newHead;
if (tty->rawOutBufState == rob_idle) {
/* check, whether XOFF has been received */
if (!(tty->flow_ctrl & FL_ORCVXOF)) {
(*tty->device.write)(tty->minor,
36f4: e594107c ldr r1, [r4, #124] ; 0x7c <== NOT EXECUTED
36f8: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
36fc: e0811003 add r1, r1, r3 <== NOT EXECUTED
3700: e3a02001 mov r2, #1 <== NOT EXECUTED
3704: e1a0e00f mov lr, pc <== NOT EXECUTED
3708: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
370c: eafffff0 b 36d4 <rtems_termios_puts+0xc8> <== NOT EXECUTED
unsigned int newHead;
rtems_interrupt_level level;
rtems_status_code sc;
if (tty->device.outputUsesInterrupts == TERMIOS_POLLED) {
(*tty->device.write)(tty->minor, (void *)buf, len);
3710: e1a01000 mov r1, r0
3714: e1a02009 mov r2, r9
3718: e5940010 ldr r0, [r4, #16]
371c: e1a0e00f mov lr, pc
3720: e594f0a4 ldr pc, [r4, #164] ; 0xa4
return;
3724: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
rtems_interrupt_enable (level);
sc = rtems_semaphore_obtain (tty->rawOutBuf.Semaphore,
RTEMS_WAIT,
RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
3728: eb0009ac bl 5de0 <rtems_fatal_error_occurred> <== NOT EXECUTED
00003ea8 <rtems_termios_read>:
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_termios_read (void *arg)
{
3ea8: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
3eac: e5903000 ldr r3, [r0]
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_termios_read (void *arg)
{
3eb0: e1a0a000 mov sl, r0
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
3eb4: e5934034 ldr r4, [r3, #52] ; 0x34
uint32_t count = args->count;
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3eb8: e3a01000 mov r1, #0
rtems_termios_read (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
char *buffer = args->buffer;
3ebc: e59a300c ldr r3, [sl, #12]
return RTEMS_SUCCESSFUL;
}
rtems_status_code
rtems_termios_read (void *arg)
{
3ec0: e24dd008 sub sp, sp, #8
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
char *buffer = args->buffer;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3ec4: e5940014 ldr r0, [r4, #20]
3ec8: e1a02001 mov r2, r1
rtems_status_code
rtems_termios_read (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
uint32_t count = args->count;
3ecc: e59a7010 ldr r7, [sl, #16]
char *buffer = args->buffer;
3ed0: e58d3000 str r3, [sp]
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3ed4: eb000634 bl 57ac <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL)
3ed8: e250b000 subs fp, r0, #0
3edc: 1a00000e bne 3f1c <rtems_termios_read+0x74>
return sc;
if (rtems_termios_linesw[tty->t_line].l_read != NULL) {
3ee0: e59420cc ldr r2, [r4, #204] ; 0xcc
3ee4: e59f3364 ldr r3, [pc, #868] ; 4250 <rtems_termios_read+0x3a8>
3ee8: e0833282 add r3, r3, r2, lsl #5
3eec: e5933008 ldr r3, [r3, #8]
3ef0: e3530000 cmp r3, #0
3ef4: 0a00000b beq 3f28 <rtems_termios_read+0x80>
sc = rtems_termios_linesw[tty->t_line].l_read(tty,args);
3ef8: e1a0100a mov r1, sl <== NOT EXECUTED
3efc: e1a00004 mov r0, r4 <== NOT EXECUTED
3f00: e1a0e00f mov lr, pc <== NOT EXECUTED
3f04: e12fff13 bx r3 <== NOT EXECUTED
tty->tty_rcvwakeup = 0;
3f08: e3a03000 mov r3, #0 <== NOT EXECUTED
sc = rtems_semaphore_obtain (tty->isem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
if (sc != RTEMS_SUCCESSFUL)
return sc;
if (rtems_termios_linesw[tty->t_line].l_read != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_read(tty,args);
3f0c: e1a0b000 mov fp, r0 <== NOT EXECUTED
tty->tty_rcvwakeup = 0;
3f10: e58430e4 str r3, [r4, #228] ; 0xe4 <== NOT EXECUTED
rtems_semaphore_release (tty->isem);
3f14: e5940014 ldr r0, [r4, #20] <== NOT EXECUTED
3f18: eb00066b bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
}
args->bytes_moved = args->count - count;
tty->tty_rcvwakeup = 0;
rtems_semaphore_release (tty->isem);
return sc;
}
3f1c: e1a0000b mov r0, fp <== NOT EXECUTED
3f20: e28dd008 add sp, sp, #8 <== NOT EXECUTED
3f24: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
sc = rtems_termios_linesw[tty->t_line].l_read(tty,args);
tty->tty_rcvwakeup = 0;
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
3f28: e5942024 ldr r2, [r4, #36] ; 0x24
3f2c: e5943020 ldr r3, [r4, #32]
3f30: e1520003 cmp r2, r3
3f34: 0a00001a beq 3fa4 <rtems_termios_read+0xfc>
else
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
3f38: e3570000 cmp r7, #0 <== NOT EXECUTED
3f3c: 0a000010 beq 3f84 <rtems_termios_read+0xdc> <== NOT EXECUTED
3f40: e2842020 add r2, r4, #32 <== NOT EXECUTED
3f44: e892000c ldm r2, {r2, r3} <== NOT EXECUTED
3f48: e1530002 cmp r3, r2 <== NOT EXECUTED
3f4c: aa00000c bge 3f84 <rtems_termios_read+0xdc> <== NOT EXECUTED
*buffer++ = tty->cbuf[tty->cindex++];
3f50: e59d2000 ldr r2, [sp] <== NOT EXECUTED
3f54: e0631002 rsb r1, r3, r2 <== NOT EXECUTED
3f58: ea000002 b 3f68 <rtems_termios_read+0xc0> <== NOT EXECUTED
else
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
3f5c: e5942020 ldr r2, [r4, #32] <== NOT EXECUTED
3f60: e1520003 cmp r2, r3 <== NOT EXECUTED
3f64: da000006 ble 3f84 <rtems_termios_read+0xdc> <== NOT EXECUTED
*buffer++ = tty->cbuf[tty->cindex++];
3f68: e594201c ldr r2, [r4, #28] <== NOT EXECUTED
3f6c: e7d22003 ldrb r2, [r2, r3] <== NOT EXECUTED
else
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
3f70: e2577001 subs r7, r7, #1 <== NOT EXECUTED
*buffer++ = tty->cbuf[tty->cindex++];
3f74: e7c12003 strb r2, [r1, r3] <== NOT EXECUTED
3f78: e2833001 add r3, r3, #1 <== NOT EXECUTED
3f7c: e5843024 str r3, [r4, #36] ; 0x24 <== NOT EXECUTED
else
sc = fillBufferQueue (tty);
if (sc != RTEMS_SUCCESSFUL)
tty->cindex = tty->ccount = 0;
}
while (count && (tty->cindex < tty->ccount)) {
3f80: 1afffff5 bne 3f5c <rtems_termios_read+0xb4> <== NOT EXECUTED
*buffer++ = tty->cbuf[tty->cindex++];
count--;
}
args->bytes_moved = args->count - count;
3f84: e59a3010 ldr r3, [sl, #16] <== NOT EXECUTED
3f88: e0677003 rsb r7, r7, r3 <== NOT EXECUTED
3f8c: e58a7018 str r7, [sl, #24] <== NOT EXECUTED
tty->tty_rcvwakeup = 0;
3f90: e3a03000 mov r3, #0 <== NOT EXECUTED
3f94: e58430e4 str r3, [r4, #228] ; 0xe4 <== NOT EXECUTED
rtems_semaphore_release (tty->isem);
3f98: e5940014 ldr r0, [r4, #20] <== NOT EXECUTED
3f9c: eb00064a bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
return sc;
3fa0: eaffffdd b 3f1c <rtems_termios_read+0x74> <== NOT EXECUTED
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
tty->read_start_column = tty->column;
if (tty->device.pollRead != NULL
&& tty->device.outputUsesInterrupts == TERMIOS_POLLED)
3fa4: e59430a0 ldr r3, [r4, #160] ; 0xa0
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
tty->read_start_column = tty->column;
3fa8: e5942028 ldr r2, [r4, #40] ; 0x28
if (tty->device.pollRead != NULL
3fac: e3530000 cmp r3, #0
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
tty->read_start_column = tty->column;
3fb0: e584202c str r2, [r4, #44] ; 0x2c
tty->tty_rcvwakeup = 0;
rtems_semaphore_release (tty->isem);
return sc;
}
if (tty->cindex == tty->ccount) {
tty->cindex = tty->ccount = 0;
3fb4: e584b020 str fp, [r4, #32]
3fb8: e584b024 str fp, [r4, #36] ; 0x24
tty->read_start_column = tty->column;
if (tty->device.pollRead != NULL
3fbc: 0a000002 beq 3fcc <rtems_termios_read+0x124>
&& tty->device.outputUsesInterrupts == TERMIOS_POLLED)
3fc0: e59420b4 ldr r2, [r4, #180] ; 0xb4
3fc4: e3520000 cmp r2, #0
3fc8: 0a000064 beq 4160 <rtems_termios_read+0x2b8>
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(tty->minor,
3fcc: e2842049 add r2, r4, #73 ; 0x49 <== NOT EXECUTED
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
3fd0: e3a09c02 mov r9, #512 ; 0x200 <== NOT EXECUTED
* Fill the input buffer from the raw input queue
*/
static rtems_status_code
fillBufferQueue (struct rtems_termios_tty *tty)
{
rtems_interval timeout = tty->rawInBufSemaphoreFirstTimeout;
3fd4: e5945074 ldr r5, [r4, #116] ; 0x74 <== NOT EXECUTED
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(tty->minor,
3fd8: e58d2004 str r2, [sp, #4] <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
3fdc: e59f6270 ldr r6, [pc, #624] ; 4254 <rtems_termios_read+0x3ac><== NOT EXECUTED
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
3fe0: e2899002 add r9, r9, #2 <== NOT EXECUTED
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(tty->minor,
3fe4: e3a08001 mov r8, #1 <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
3fe8: e594205c ldr r2, [r4, #92] ; 0x5c <== NOT EXECUTED
3fec: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED
3ff0: e1520003 cmp r2, r3 <== NOT EXECUTED
3ff4: 0a00003b beq 40e8 <rtems_termios_read+0x240> <== NOT EXECUTED
3ff8: e5962000 ldr r2, [r6] <== NOT EXECUTED
3ffc: e5943020 ldr r3, [r4, #32] <== NOT EXECUTED
4000: e2422001 sub r2, r2, #1 <== NOT EXECUTED
4004: e1520003 cmp r2, r3 <== NOT EXECUTED
4008: da000036 ble 40e8 <rtems_termios_read+0x240> <== NOT EXECUTED
(tty->ccount < (CBUFSIZE-1))) {
unsigned char c;
unsigned int newHead;
newHead = (tty->rawInBuf.Head + 1) % tty->rawInBuf.Size;
400c: e594005c ldr r0, [r4, #92] ; 0x5c <== NOT EXECUTED
4010: e5941064 ldr r1, [r4, #100] ; 0x64 <== NOT EXECUTED
4014: e2800001 add r0, r0, #1 <== NOT EXECUTED
4018: eb004e76 bl 179f8 <__umodsi3> <== NOT EXECUTED
c = tty->rawInBuf.theBuf[newHead];
401c: e5943058 ldr r3, [r4, #88] ; 0x58 <== NOT EXECUTED
4020: e7d35000 ldrb r5, [r3, r0] <== NOT EXECUTED
tty->rawInBuf.Head = newHead;
4024: e584005c str r0, [r4, #92] ; 0x5c <== NOT EXECUTED
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
4028: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED
402c: e5942064 ldr r2, [r4, #100] ; 0x64 <== NOT EXECUTED
4030: e0823003 add r3, r2, r3 <== NOT EXECUTED
4034: e0600003 rsb r0, r0, r3 <== NOT EXECUTED
4038: e5941064 ldr r1, [r4, #100] ; 0x64 <== NOT EXECUTED
403c: eb004e6d bl 179f8 <__umodsi3> <== NOT EXECUTED
4040: e59430bc ldr r3, [r4, #188] ; 0xbc <== NOT EXECUTED
4044: e1500003 cmp r0, r3 <== NOT EXECUTED
4048: 2a000014 bcs 40a0 <rtems_termios_read+0x1f8> <== NOT EXECUTED
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
404c: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
4050: e3c33001 bic r3, r3, #1 <== NOT EXECUTED
4054: e58430b8 str r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
4058: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
405c: e3c33f7f bic r3, r3, #508 ; 0x1fc <== NOT EXECUTED
4060: e3c33001 bic r3, r3, #1 <== NOT EXECUTED
4064: e1a03b03 lsl r3, r3, #22 <== NOT EXECUTED
4068: e1a03b23 lsr r3, r3, #22 <== NOT EXECUTED
406c: e1530009 cmp r3, r9 <== NOT EXECUTED
4070: 0a00002e beq 4130 <rtems_termios_read+0x288> <== NOT EXECUTED
/* XON should be sent now... */
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]),
1);
}
else if (tty->flow_ctrl & FL_MDRTS) {
4074: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
4078: e3130c01 tst r3, #256 ; 0x100 <== NOT EXECUTED
407c: 0a000007 beq 40a0 <rtems_termios_read+0x1f8> <== NOT EXECUTED
tty->flow_ctrl &= ~FL_IRTSOFF;
4080: e59420b8 ldr r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
4084: e59430b0 ldr r3, [r4, #176] ; 0xb0 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]),
1);
}
else if (tty->flow_ctrl & FL_MDRTS) {
tty->flow_ctrl &= ~FL_IRTSOFF;
4088: e3c22004 bic r2, r2, #4 <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
408c: e3530000 cmp r3, #0 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]),
1);
}
else if (tty->flow_ctrl & FL_MDRTS) {
tty->flow_ctrl &= ~FL_IRTSOFF;
4090: e58420b8 str r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* activate RTS line */
if (tty->device.startRemoteTx != NULL) {
tty->device.startRemoteTx(tty->minor);
4094: 15940010 ldrne r0, [r4, #16] <== NOT EXECUTED
4098: 11a0e00f movne lr, pc <== NOT EXECUTED
409c: 112fff13 bxne r3 <== NOT EXECUTED
}
}
}
/* continue processing new character */
if (tty->termios.c_lflag & ICANON) {
40a0: e594303c ldr r3, [r4, #60] ; 0x3c <== NOT EXECUTED
40a4: e3130002 tst r3, #2 <== NOT EXECUTED
40a8: 0a000017 beq 410c <rtems_termios_read+0x264> <== NOT EXECUTED
if (siproc (c, tty))
40ac: e1a00005 mov r0, r5 <== NOT EXECUTED
40b0: e1a01004 mov r1, r4 <== NOT EXECUTED
40b4: ebffff0f bl 3cf8 <siproc> <== NOT EXECUTED
40b8: e3500000 cmp r0, #0 <== NOT EXECUTED
40bc: 1a000019 bne 4128 <rtems_termios_read+0x280> <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
40c0: e594205c ldr r2, [r4, #92] ; 0x5c <== NOT EXECUTED
40c4: e5943060 ldr r3, [r4, #96] ; 0x60 <== NOT EXECUTED
40c8: e1520003 cmp r2, r3 <== NOT EXECUTED
else {
siproc (c, tty);
if (tty->ccount >= tty->termios.c_cc[VMIN])
wait = 0;
}
timeout = tty->rawInBufSemaphoreTimeout;
40cc: e5945070 ldr r5, [r4, #112] ; 0x70 <== NOT EXECUTED
while ( wait ) {
/*
* Process characters read from raw queue
*/
while ((tty->rawInBuf.Head != tty->rawInBuf.Tail) &&
40d0: 0a000004 beq 40e8 <rtems_termios_read+0x240> <== NOT EXECUTED
40d4: e5963000 ldr r3, [r6] <== NOT EXECUTED
40d8: e5942020 ldr r2, [r4, #32] <== NOT EXECUTED
40dc: e2433001 sub r3, r3, #1 <== NOT EXECUTED
40e0: e1520003 cmp r2, r3 <== NOT EXECUTED
40e4: baffffc8 blt 400c <rtems_termios_read+0x164> <== NOT EXECUTED
}
/*
* Wait for characters
*/
if ( wait ) {
40e8: e3580000 cmp r8, #0 <== NOT EXECUTED
40ec: 0affff91 beq 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
sc = rtems_semaphore_obtain (tty->rawInBuf.Semaphore,
40f0: e2840068 add r0, r4, #104 ; 0x68 <== NOT EXECUTED
40f4: e8900003 ldm r0, {r0, r1} <== NOT EXECUTED
40f8: e1a02005 mov r2, r5 <== NOT EXECUTED
40fc: eb0005aa bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
tty->rawInBufSemaphoreOptions,
timeout);
if (sc != RTEMS_SUCCESSFUL)
4100: e3500000 cmp r0, #0 <== NOT EXECUTED
4104: 0affffb7 beq 3fe8 <rtems_termios_read+0x140> <== NOT EXECUTED
4108: eaffff8a b 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
if (tty->termios.c_lflag & ICANON) {
if (siproc (c, tty))
wait = 0;
}
else {
siproc (c, tty);
410c: e1a00005 mov r0, r5 <== NOT EXECUTED
4110: e1a01004 mov r1, r4 <== NOT EXECUTED
4114: ebfffef7 bl 3cf8 <siproc> <== NOT EXECUTED
if (tty->ccount >= tty->termios.c_cc[VMIN])
4118: e5d43047 ldrb r3, [r4, #71] ; 0x47 <== NOT EXECUTED
411c: e5942020 ldr r2, [r4, #32] <== NOT EXECUTED
4120: e1520003 cmp r2, r3 <== NOT EXECUTED
4124: baffffe5 blt 40c0 <rtems_termios_read+0x218> <== NOT EXECUTED
4128: e3a08000 mov r8, #0 <== NOT EXECUTED
412c: eaffffe3 b 40c0 <rtems_termios_read+0x218> <== NOT EXECUTED
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
4130: e5943094 ldr r3, [r4, #148] ; 0x94 <== NOT EXECUTED
4134: e3530000 cmp r3, #0 <== NOT EXECUTED
4138: 0a000002 beq 4148 <rtems_termios_read+0x2a0> <== NOT EXECUTED
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
413c: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
if(((tty->rawInBuf.Tail-newHead+tty->rawInBuf.Size)
% tty->rawInBuf.Size)
< tty->lowwater) {
tty->flow_ctrl &= ~FL_IREQXOF;
/* if tx stopped and XON should be sent... */
if (((tty->flow_ctrl & (FL_MDXON | FL_ISNTXOF))
4140: e3130020 tst r3, #32 <== NOT EXECUTED
4144: 0affffca beq 4074 <rtems_termios_read+0x1cc> <== NOT EXECUTED
== (FL_MDXON | FL_ISNTXOF))
&& ((tty->rawOutBufState == rob_idle)
|| (tty->flow_ctrl & FL_OSTOP))) {
/* XON should be sent now... */
(*tty->device.write)(tty->minor,
4148: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
414c: e59d1004 ldr r1, [sp, #4] <== NOT EXECUTED
4150: e3a02001 mov r2, #1 <== NOT EXECUTED
4154: e1a0e00f mov lr, pc <== NOT EXECUTED
4158: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
415c: eaffffcf b 40a0 <rtems_termios_read+0x1f8> <== NOT EXECUTED
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
4160: e594203c ldr r2, [r4, #60] ; 0x3c
4164: e3120002 tst r2, #2
4168: 0a00000b beq 419c <rtems_termios_read+0x2f4>
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
416c: e5940010 ldr r0, [r4, #16]
4170: e1a0e00f mov lr, pc
4174: e12fff13 bx r3
if (n < 0) {
4178: e3500000 cmp r0, #0
rtems_task_wake_after (1);
}
else {
if (siproc (n, tty))
417c: e1a01004 mov r1, r4
4180: e20000ff and r0, r0, #255 ; 0xff
int n;
if (tty->termios.c_lflag & ICANON) {
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
4184: ba00002d blt 4240 <rtems_termios_read+0x398>
rtems_task_wake_after (1);
}
else {
if (siproc (n, tty))
4188: ebfffeda bl 3cf8 <siproc> <== NOT EXECUTED
418c: e3500000 cmp r0, #0 <== NOT EXECUTED
4190: 1affff68 bne 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
4194: e59430a0 ldr r3, [r4, #160] ; 0xa0 <== NOT EXECUTED
4198: eafffff3 b 416c <rtems_termios_read+0x2c4> <== NOT EXECUTED
}
}
}
else {
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
419c: eb0003de bl 511c <rtems_clock_get_ticks_since_boot>
41a0: e1a05000 mov r5, r0
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
41a4: e5940010 ldr r0, [r4, #16]
41a8: e1a0e00f mov lr, pc
41ac: e594f0a0 ldr pc, [r4, #160] ; 0xa0
if (n < 0) {
41b0: e3500000 cmp r0, #0
41b4: ba00000c blt 41ec <rtems_termios_read+0x344>
}
}
rtems_task_wake_after (1);
}
else {
siproc (n, tty);
41b8: e20000ff and r0, r0, #255 ; 0xff <== NOT EXECUTED
41bc: e1a01004 mov r1, r4 <== NOT EXECUTED
41c0: ebfffecc bl 3cf8 <siproc> <== NOT EXECUTED
if (tty->ccount >= tty->termios.c_cc[VMIN])
41c4: e5d43047 ldrb r3, [r4, #71] ; 0x47 <== NOT EXECUTED
41c8: e5942020 ldr r2, [r4, #32] <== NOT EXECUTED
41cc: e1520003 cmp r2, r3 <== NOT EXECUTED
41d0: aaffff58 bge 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
break;
if (tty->termios.c_cc[VMIN] && tty->termios.c_cc[VTIME])
41d4: e3530000 cmp r3, #0 <== NOT EXECUTED
41d8: 0afffff1 beq 41a4 <rtems_termios_read+0x2fc> <== NOT EXECUTED
41dc: e5d43046 ldrb r3, [r4, #70] ; 0x46 <== NOT EXECUTED
41e0: e3530000 cmp r3, #0 <== NOT EXECUTED
41e4: 0affffee beq 41a4 <rtems_termios_read+0x2fc> <== NOT EXECUTED
41e8: eaffffeb b 419c <rtems_termios_read+0x2f4> <== NOT EXECUTED
rtems_interval then, now;
then = rtems_clock_get_ticks_since_boot();
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
if (tty->termios.c_cc[VMIN]) {
41ec: e5d43047 ldrb r3, [r4, #71] ; 0x47
41f0: e3530000 cmp r3, #0
41f4: 0a000008 beq 421c <rtems_termios_read+0x374>
if (tty->termios.c_cc[VTIME] && tty->ccount) {
41f8: e5d43046 ldrb r3, [r4, #70] ; 0x46
41fc: e3530000 cmp r3, #0
4200: 0a000002 beq 4210 <rtems_termios_read+0x368>
4204: e5943020 ldr r3, [r4, #32] <== NOT EXECUTED
4208: e3530000 cmp r3, #0 <== NOT EXECUTED
420c: 1a000005 bne 4228 <rtems_termios_read+0x380> <== NOT EXECUTED
now = rtems_clock_get_ticks_since_boot();
if ((now - then) > tty->vtimeTicks) {
break;
}
}
rtems_task_wake_after (1);
4210: e3a00001 mov r0, #1
4214: eb000697 bl 5c78 <rtems_task_wake_after>
4218: eaffffe1 b 41a4 <rtems_termios_read+0x2fc>
break;
}
}
}
else {
if (!tty->termios.c_cc[VTIME])
421c: e5d43046 ldrb r3, [r4, #70] ; 0x46 <== NOT EXECUTED
4220: e3530000 cmp r3, #0 <== NOT EXECUTED
4224: 0affff43 beq 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
break;
now = rtems_clock_get_ticks_since_boot();
4228: eb0003bb bl 511c <rtems_clock_get_ticks_since_boot> <== NOT EXECUTED
if ((now - then) > tty->vtimeTicks) {
422c: e5943054 ldr r3, [r4, #84] ; 0x54 <== NOT EXECUTED
4230: e0650000 rsb r0, r5, r0 <== NOT EXECUTED
4234: e1500003 cmp r0, r3 <== NOT EXECUTED
4238: 9afffff4 bls 4210 <rtems_termios_read+0x368> <== NOT EXECUTED
423c: eaffff3d b 3f38 <rtems_termios_read+0x90> <== NOT EXECUTED
if (tty->termios.c_lflag & ICANON) {
for (;;) {
n = (*tty->device.pollRead)(tty->minor);
if (n < 0) {
rtems_task_wake_after (1);
4240: e3a00001 mov r0, #1
4244: eb00068b bl 5c78 <rtems_task_wake_after>
static rtems_status_code
fillBufferPoll (struct rtems_termios_tty *tty)
{
int n;
if (tty->termios.c_lflag & ICANON) {
4248: e59430a0 ldr r3, [r4, #160] ; 0xa0
424c: eaffffc6 b 416c <rtems_termios_read+0x2c4>
000030a4 <rtems_termios_refill_transmitter>:
int nToSend;
rtems_interrupt_level level;
int len;
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
30a4: e59030b8 ldr r3, [r0, #184] ; 0xb8 <== NOT EXECUTED
30a8: e3c33fff bic r3, r3, #1020 ; 0x3fc <== NOT EXECUTED
30ac: e1a03a83 lsl r3, r3, #21 <== NOT EXECUTED
30b0: e3a02b01 mov r2, #1024 ; 0x400 <== NOT EXECUTED
30b4: e1a03aa3 lsr r3, r3, #21 <== NOT EXECUTED
30b8: e2822001 add r2, r2, #1 <== NOT EXECUTED
30bc: e1530002 cmp r3, r2 <== NOT EXECUTED
* in task-driven mode, this function is called in Tx task context
* in interrupt-driven mode, this function is called in TxIRQ context
*/
int
rtems_termios_refill_transmitter (struct rtems_termios_tty *tty)
{
30c0: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
30c4: e1a04000 mov r4, r0 <== NOT EXECUTED
int nToSend;
rtems_interrupt_level level;
int len;
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
30c8: 0a000046 beq 31e8 <rtems_termios_refill_transmitter+0x144> <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
rtems_interrupt_enable(level);
nToSend = 1;
}
else if ((tty->flow_ctrl & (FL_IREQXOF | FL_ISNTXOF))
30cc: e59030b8 ldr r3, [r0, #184] ; 0xb8 <== NOT EXECUTED
30d0: e2033003 and r3, r3, #3 <== NOT EXECUTED
30d4: e3530002 cmp r3, #2 <== NOT EXECUTED
30d8: 0a000054 beq 3230 <rtems_termios_refill_transmitter+0x18c> <== NOT EXECUTED
rtems_interrupt_enable(level);
nToSend = 1;
}
else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
30dc: e5902080 ldr r2, [r0, #128] ; 0x80 <== NOT EXECUTED
30e0: e5903084 ldr r3, [r0, #132] ; 0x84 <== NOT EXECUTED
30e4: e1520003 cmp r2, r3 <== NOT EXECUTED
30e8: 0a00002a beq 3198 <rtems_termios_refill_transmitter+0xf4> <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
30ec: e10f3000 mrs r3, CPSR <== NOT EXECUTED
30f0: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
30f4: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
return 0;
}
rtems_interrupt_disable(level);
len = tty->t_dqlen;
tty->t_dqlen = 0;
30f8: e3a02000 mov r2, #0 <== NOT EXECUTED
}
return 0;
}
rtems_interrupt_disable(level);
len = tty->t_dqlen;
30fc: e5900090 ldr r0, [r0, #144] ; 0x90 <== NOT EXECUTED
tty->t_dqlen = 0;
3100: e5842090 str r2, [r4, #144] ; 0x90 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3104: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
rtems_interrupt_enable(level);
newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size;
3108: e5943084 ldr r3, [r4, #132] ; 0x84 <== NOT EXECUTED
310c: e5941088 ldr r1, [r4, #136] ; 0x88 <== NOT EXECUTED
3110: e0800003 add r0, r0, r3 <== NOT EXECUTED
3114: eb005237 bl 179f8 <__umodsi3> <== NOT EXECUTED
tty->rawOutBuf.Tail = newTail;
if (tty->rawOutBufState == rob_wait) {
3118: e5943094 ldr r3, [r4, #148] ; 0x94 <== NOT EXECUTED
311c: e3530002 cmp r3, #2 <== NOT EXECUTED
rtems_interrupt_disable(level);
len = tty->t_dqlen;
tty->t_dqlen = 0;
rtems_interrupt_enable(level);
newTail = (tty->rawOutBuf.Tail + len) % tty->rawOutBuf.Size;
3120: e1a05000 mov r5, r0 <== NOT EXECUTED
tty->rawOutBuf.Tail = newTail;
3124: e5840084 str r0, [r4, #132] ; 0x84 <== NOT EXECUTED
if (tty->rawOutBufState == rob_wait) {
3128: 0a00002b beq 31dc <rtems_termios_refill_transmitter+0x138> <== NOT EXECUTED
/*
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
}
if (newTail == tty->rawOutBuf.Head) {
312c: e5943080 ldr r3, [r4, #128] ; 0x80 <== NOT EXECUTED
3130: e1530005 cmp r3, r5 <== NOT EXECUTED
3134: 0a00001d beq 31b0 <rtems_termios_refill_transmitter+0x10c> <== NOT EXECUTED
if ( tty->tty_snd.sw_pfn != NULL) {
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
}
}
/* check, whether output should stop due to received XOFF */
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
3138: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
313c: e2033e21 and r3, r3, #528 ; 0x210 <== NOT EXECUTED
3140: e3530e21 cmp r3, #528 ; 0x210 <== NOT EXECUTED
3144: 0a000046 beq 3264 <rtems_termios_refill_transmitter+0x1c0> <== NOT EXECUTED
}
else {
/*
* Buffer not empty, start tranmitter
*/
if (newTail > tty->rawOutBuf.Head)
3148: e5943080 ldr r3, [r4, #128] ; 0x80 <== NOT EXECUTED
314c: e1550003 cmp r5, r3 <== NOT EXECUTED
nToSend = tty->rawOutBuf.Size - newTail;
3150: 85946088 ldrhi r6, [r4, #136] ; 0x88 <== NOT EXECUTED
else
nToSend = tty->rawOutBuf.Head - newTail;
3154: 95946080 ldrls r6, [r4, #128] ; 0x80 <== NOT EXECUTED
/* when flow control XON or XOF, don't send blocks of data */
/* to allow fast reaction on incoming flow ctrl and low latency*/
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
3158: e59430b8 ldr r3, [r4, #184] ; 0xb8 <== NOT EXECUTED
else {
/*
* Buffer not empty, start tranmitter
*/
if (newTail > tty->rawOutBuf.Head)
nToSend = tty->rawOutBuf.Size - newTail;
315c: 80656006 rsbhi r6, r5, r6 <== NOT EXECUTED
else
nToSend = tty->rawOutBuf.Head - newTail;
3160: 90656006 rsbls r6, r5, r6 <== NOT EXECUTED
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
(*tty->device.write)(tty->minor,
3164: e594107c ldr r1, [r4, #124] ; 0x7c <== NOT EXECUTED
else
nToSend = tty->rawOutBuf.Head - newTail;
/* when flow control XON or XOF, don't send blocks of data */
/* to allow fast reaction on incoming flow ctrl and low latency*/
/* for outgoing flow control */
if (tty->flow_ctrl & (FL_MDXON | FL_MDXOF)) {
3168: e3130c06 tst r3, #1536 ; 0x600 <== NOT EXECUTED
316c: 13a06001 movne r6, #1 <== NOT EXECUTED
nToSend = 1;
}
tty->rawOutBufState = rob_busy; /*apm*/
3170: e3a03001 mov r3, #1 <== NOT EXECUTED
3174: e5843094 str r3, [r4, #148] ; 0x94 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
3178: e0811005 add r1, r1, r5 <== NOT EXECUTED
317c: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
3180: e1a02006 mov r2, r6 <== NOT EXECUTED
3184: e1a0e00f mov lr, pc <== NOT EXECUTED
3188: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
&tty->rawOutBuf.theBuf[newTail],
nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
318c: e5845084 str r5, [r4, #132] ; 0x84 <== NOT EXECUTED
}
return nToSend;
}
3190: e1a00006 mov r0, r6 <== NOT EXECUTED
3194: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
else {
if ( tty->rawOutBuf.Head == tty->rawOutBuf.Tail ) {
/*
* buffer was empty
*/
if (tty->rawOutBufState == rob_wait) {
3198: e5903094 ldr r3, [r0, #148] ; 0x94 <== NOT EXECUTED
319c: e3530002 cmp r3, #2 <== NOT EXECUTED
31a0: 0a00003a beq 3290 <rtems_termios_refill_transmitter+0x1ec> <== NOT EXECUTED
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
31a4: e3a06000 mov r6, #0 <== NOT EXECUTED
nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
31a8: e1a00006 mov r0, r6 <== NOT EXECUTED
31ac: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
31b0: e59430d4 ldr r3, [r4, #212] ; 0xd4 <== NOT EXECUTED
}
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
31b4: e3a06000 mov r6, #0 <== NOT EXECUTED
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
31b8: e3530000 cmp r3, #0 <== NOT EXECUTED
}
if (newTail == tty->rawOutBuf.Head) {
/*
* Buffer has become empty
*/
tty->rawOutBufState = rob_idle;
31bc: e5846094 str r6, [r4, #148] ; 0x94 <== NOT EXECUTED
nToSend = 0;
/*
* check to see if snd wakeup callback was set
*/
if ( tty->tty_snd.sw_pfn != NULL) {
31c0: 01a06003 moveq r6, r3 <== NOT EXECUTED
31c4: 0afffff0 beq 318c <rtems_termios_refill_transmitter+0xe8> <== NOT EXECUTED
(*tty->tty_snd.sw_pfn)(&tty->termios, tty->tty_snd.sw_arg);
31c8: e2840030 add r0, r4, #48 ; 0x30 <== NOT EXECUTED
31cc: e59410d8 ldr r1, [r4, #216] ; 0xd8 <== NOT EXECUTED
31d0: e1a0e00f mov lr, pc <== NOT EXECUTED
31d4: e12fff13 bx r3 <== NOT EXECUTED
31d8: eaffffeb b 318c <rtems_termios_refill_transmitter+0xe8> <== NOT EXECUTED
tty->rawOutBuf.Tail = newTail;
if (tty->rawOutBufState == rob_wait) {
/*
* wake up any pending writer task
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
31dc: e594008c ldr r0, [r4, #140] ; 0x8c <== NOT EXECUTED
31e0: eb0009b9 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
31e4: eaffffd0 b 312c <rtems_termios_refill_transmitter+0x88> <== NOT EXECUTED
/* check for XOF/XON to send */
if ((tty->flow_ctrl & (FL_MDXOF | FL_IREQXOF | FL_ISNTXOF))
== (FL_MDXOF | FL_IREQXOF)) {
/* XOFF should be sent now... */
(*tty->device.write)(tty->minor,
31e8: e284104a add r1, r4, #74 ; 0x4a <== NOT EXECUTED
31ec: e3a02001 mov r2, #1 <== NOT EXECUTED
31f0: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
31f4: e1a0e00f mov lr, pc <== NOT EXECUTED
31f8: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
31fc: e10f3000 mrs r3, CPSR <== NOT EXECUTED
3200: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
3204: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
(void *)&(tty->termios.c_cc[VSTOP]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
3208: e5942090 ldr r2, [r4, #144] ; 0x90 <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
320c: e59410b8 ldr r1, [r4, #184] ; 0xb8 <== NOT EXECUTED
/* XOFF should be sent now... */
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTOP]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
3210: e2422001 sub r2, r2, #1 <== NOT EXECUTED
tty->flow_ctrl |= FL_ISNTXOF;
3214: e3811002 orr r1, r1, #2 <== NOT EXECUTED
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
tty->flow_ctrl &= ~FL_ISNTXOF;
3218: e58410b8 str r1, [r4, #184] ; 0xb8 <== NOT EXECUTED
*/
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
321c: e5842090 str r2, [r4, #144] ; 0x90 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3220: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
3224: e3a06001 mov r6, #1 <== NOT EXECUTED
nToSend);
}
tty->rawOutBuf.Tail = newTail; /*apm*/
}
return nToSend;
}
3228: e1a00006 mov r0, r6 <== NOT EXECUTED
322c: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
* FIXME: this .write call will generate another
* dequeue callback. This will advance the "Tail" in the data
* buffer, although the corresponding data is not yet out!
* Therefore the dequeue "length" should be reduced by 1
*/
(*tty->device.write)(tty->minor,
3230: e2841049 add r1, r4, #73 ; 0x49 <== NOT EXECUTED
3234: e3a02001 mov r2, #1 <== NOT EXECUTED
3238: e5900010 ldr r0, [r0, #16] <== NOT EXECUTED
323c: e1a0e00f mov lr, pc <== NOT EXECUTED
3240: e594f0a4 ldr pc, [r4, #164] ; 0xa4 <== NOT EXECUTED
static inline uint32_t arm_interrupt_disable( void )
{
uint32_t arm_switch_reg;
uint32_t level;
asm volatile (
3244: e10f3000 mrs r3, CPSR <== NOT EXECUTED
3248: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
324c: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
(void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
3250: e5942090 ldr r2, [r4, #144] ; 0x90 <== NOT EXECUTED
tty->flow_ctrl &= ~FL_ISNTXOF;
3254: e59410b8 ldr r1, [r4, #184] ; 0xb8 <== NOT EXECUTED
*/
(*tty->device.write)(tty->minor,
(void *)&(tty->termios.c_cc[VSTART]), 1);
rtems_interrupt_disable(level);
tty->t_dqlen--;
3258: e2422001 sub r2, r2, #1 <== NOT EXECUTED
tty->flow_ctrl &= ~FL_ISNTXOF;
325c: e3c11002 bic r1, r1, #2 <== NOT EXECUTED
3260: eaffffec b 3218 <rtems_termios_refill_transmitter+0x174> <== NOT EXECUTED
3264: e10f3000 mrs r3, CPSR <== NOT EXECUTED
3268: e3832080 orr r2, r3, #128 ; 0x80 <== NOT EXECUTED
326c: e129f002 msr CPSR_fc, r2 <== NOT EXECUTED
else if ((tty->flow_ctrl & (FL_MDXON | FL_ORCVXOF))
== (FL_MDXON | FL_ORCVXOF)) {
/* Buffer not empty, but output stops due to XOFF */
/* set flag, that output has been stopped */
rtems_interrupt_disable(level);
tty->flow_ctrl |= FL_OSTOP;
3270: e59420b8 ldr r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
3274: e3822020 orr r2, r2, #32 <== NOT EXECUTED
3278: e58420b8 str r2, [r4, #184] ; 0xb8 <== NOT EXECUTED
tty->rawOutBufState = rob_busy; /*apm*/
327c: e3a02001 mov r2, #1 <== NOT EXECUTED
3280: e5842094 str r2, [r4, #148] ; 0x94 <== NOT EXECUTED
static inline void arm_interrupt_enable( uint32_t level )
{
ARM_SWITCH_REGISTERS;
asm volatile (
3284: e129f003 msr CPSR_fc, r3 <== NOT EXECUTED
3288: e3a06000 mov r6, #0 <== NOT EXECUTED
328c: eaffffbe b 318c <rtems_termios_refill_transmitter+0xe8> <== NOT EXECUTED
*/
if (tty->rawOutBufState == rob_wait) {
/*
* this should never happen...
*/
rtems_semaphore_release (tty->rawOutBuf.Semaphore);
3290: e590008c ldr r0, [r0, #140] ; 0x8c <== NOT EXECUTED
3294: eb00098c bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
3298: e3a06000 mov r6, #0 <== NOT EXECUTED
329c: eaffffc1 b 31a8 <rtems_termios_refill_transmitter+0x104> <== NOT EXECUTED
00004d28 <rtems_termios_rxdaemon>:
/*
* this task actually processes any receive events
*/
static rtems_task rtems_termios_rxdaemon(rtems_task_argument argument)
{
4d28: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
4d2c: e24dd008 sub sp, sp, #8 <== NOT EXECUTED
4d30: e1a04000 mov r4, r0 <== NOT EXECUTED
4d34: e28d7007 add r7, sp, #7 <== NOT EXECUTED
char c_buf;
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive((TERMIOS_RX_PROC_EVENT |
4d38: e3a06000 mov r6, #0 <== NOT EXECUTED
4d3c: e1a0300d mov r3, sp <== NOT EXECUTED
4d40: e3a01002 mov r1, #2 <== NOT EXECUTED
4d44: e3a02000 mov r2, #0 <== NOT EXECUTED
4d48: e3a00003 mov r0, #3 <== NOT EXECUTED
4d4c: eb000112 bl 519c <rtems_event_receive> <== NOT EXECUTED
TERMIOS_RX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event);
if ((the_event & TERMIOS_RX_TERMINATE_EVENT) != 0) {
4d50: e59d3000 ldr r3, [sp] <== NOT EXECUTED
4d54: e3130001 tst r3, #1 <== NOT EXECUTED
4d58: 1a000012 bne 4da8 <rtems_termios_rxdaemon+0x80> <== NOT EXECUTED
}
else {
/*
* do something
*/
c = tty->device.pollRead(tty->minor);
4d5c: e5940010 ldr r0, [r4, #16] <== NOT EXECUTED
4d60: e1a0e00f mov lr, pc <== NOT EXECUTED
4d64: e594f0a0 ldr pc, [r4, #160] ; 0xa0 <== NOT EXECUTED
if (c != EOF) {
4d68: e3700001 cmn r0, #1 <== NOT EXECUTED
}
else {
/*
* do something
*/
c = tty->device.pollRead(tty->minor);
4d6c: e1a03000 mov r3, r0 <== NOT EXECUTED
if (c != EOF) {
4d70: 0afffff1 beq 4d3c <rtems_termios_rxdaemon+0x14> <== NOT EXECUTED
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
rtems_termios_enqueue_raw_characters (
4d74: e1a01007 mov r1, r7 <== NOT EXECUTED
4d78: e3a02001 mov r2, #1 <== NOT EXECUTED
4d7c: e1a00004 mov r0, r4 <== NOT EXECUTED
c = tty->device.pollRead(tty->minor);
if (c != EOF) {
/*
* pollRead did call enqueue on its own
*/
c_buf = c;
4d80: e5cd3007 strb r3, [sp, #7] <== NOT EXECUTED
rtems_termios_enqueue_raw_characters (
4d84: ebfff95f bl 3308 <rtems_termios_enqueue_raw_characters> <== NOT EXECUTED
char c_buf;
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive((TERMIOS_RX_PROC_EVENT |
4d88: e1a0300d mov r3, sp <== NOT EXECUTED
4d8c: e3a01002 mov r1, #2 <== NOT EXECUTED
4d90: e3a02000 mov r2, #0 <== NOT EXECUTED
4d94: e3a00003 mov r0, #3 <== NOT EXECUTED
4d98: eb0000ff bl 519c <rtems_event_receive> <== NOT EXECUTED
TERMIOS_RX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event);
if ((the_event & TERMIOS_RX_TERMINATE_EVENT) != 0) {
4d9c: e59d3000 ldr r3, [sp] <== NOT EXECUTED
4da0: e3130001 tst r3, #1 <== NOT EXECUTED
4da4: 0affffec beq 4d5c <rtems_termios_rxdaemon+0x34> <== NOT EXECUTED
tty->rxTaskId = 0;
4da8: e58460c4 str r6, [r4, #196] ; 0xc4 <== NOT EXECUTED
rtems_task_delete(RTEMS_SELF);
4dac: e1a00006 mov r0, r6 <== NOT EXECUTED
4db0: eb00033d bl 5aac <rtems_task_delete> <== NOT EXECUTED
4db4: eaffffe0 b 4d3c <rtems_termios_rxdaemon+0x14> <== NOT EXECUTED
00003098 <rtems_termios_rxirq_occured>:
void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty)
{
/*
* send event to rx daemon task
*/
rtems_event_send(tty->rxTaskId,TERMIOS_RX_PROC_EVENT);
3098: e59000c4 ldr r0, [r0, #196] ; 0xc4 <== NOT EXECUTED
309c: e3a01002 mov r1, #2 <== NOT EXECUTED
30a0: ea00089b b 5314 <rtems_event_send> <== NOT EXECUTED
00004cb8 <rtems_termios_txdaemon>:
/*
* this task actually processes any transmit events
*/
static rtems_task rtems_termios_txdaemon(rtems_task_argument argument)
{
4cb8: e92d40f0 push {r4, r5, r6, r7, lr} <== NOT EXECUTED
4cbc: e59f6060 ldr r6, [pc, #96] ; 4d24 <rtems_termios_txdaemon+0x6c><== NOT EXECUTED
4cc0: e24dd004 sub sp, sp, #4 <== NOT EXECUTED
4cc4: e1a04000 mov r4, r0 <== NOT EXECUTED
while (1) {
/*
* wait for rtems event
*/
rtems_event_receive((TERMIOS_TX_START_EVENT |
4cc8: e3a07000 mov r7, #0 <== NOT EXECUTED
4ccc: e1a0300d mov r3, sp <== NOT EXECUTED
4cd0: e3a01002 mov r1, #2 <== NOT EXECUTED
4cd4: e3a02000 mov r2, #0 <== NOT EXECUTED
4cd8: e3a00003 mov r0, #3 <== NOT EXECUTED
4cdc: eb00012e bl 519c <rtems_event_receive> <== NOT EXECUTED
TERMIOS_TX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event);
if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) {
4ce0: e59d3000 ldr r3, [sp] <== NOT EXECUTED
4ce4: e3130001 tst r3, #1 <== NOT EXECUTED
else {
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
rtems_termios_linesw[tty->t_line].l_start(tty);
4ce8: e1a00004 mov r0, r4 <== NOT EXECUTED
rtems_event_receive((TERMIOS_TX_START_EVENT |
TERMIOS_TX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event);
if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) {
4cec: 1a000008 bne 4d14 <rtems_termios_txdaemon+0x5c> <== NOT EXECUTED
}
else {
/*
* call any line discipline start function
*/
if (rtems_termios_linesw[tty->t_line].l_start != NULL) {
4cf0: e59430cc ldr r3, [r4, #204] ; 0xcc <== NOT EXECUTED
4cf4: e0863283 add r3, r6, r3, lsl #5 <== NOT EXECUTED
4cf8: e5933014 ldr r3, [r3, #20] <== NOT EXECUTED
4cfc: e3530000 cmp r3, #0 <== NOT EXECUTED
rtems_termios_linesw[tty->t_line].l_start(tty);
4d00: 11a0e00f movne lr, pc <== NOT EXECUTED
4d04: 112fff13 bxne r3 <== NOT EXECUTED
}
/*
* try to push further characters to device
*/
rtems_termios_refill_transmitter(tty);
4d08: e1a00004 mov r0, r4 <== NOT EXECUTED
4d0c: ebfff8e4 bl 30a4 <rtems_termios_refill_transmitter> <== NOT EXECUTED
4d10: eaffffed b 4ccc <rtems_termios_txdaemon+0x14> <== NOT EXECUTED
TERMIOS_TX_TERMINATE_EVENT),
RTEMS_EVENT_ANY | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&the_event);
if ((the_event & TERMIOS_TX_TERMINATE_EVENT) != 0) {
tty->txTaskId = 0;
4d14: e58470c8 str r7, [r4, #200] ; 0xc8 <== NOT EXECUTED
rtems_task_delete(RTEMS_SELF);
4d18: e1a00007 mov r0, r7 <== NOT EXECUTED
4d1c: eb000362 bl 5aac <rtems_task_delete> <== NOT EXECUTED
4d20: eaffffe9 b 4ccc <rtems_termios_txdaemon+0x14> <== NOT EXECUTED
00003d5c <rtems_termios_write>:
rtems_status_code
rtems_termios_write (void *arg)
{
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
3d5c: e5903000 ldr r3, [r0]
rtems_termios_puts (&c, 1, tty);
}
rtems_status_code
rtems_termios_write (void *arg)
{
3d60: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
3d64: e5934034 ldr r4, [r3, #52] ; 0x34
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3d68: e3a01000 mov r1, #0
rtems_termios_puts (&c, 1, tty);
}
rtems_status_code
rtems_termios_write (void *arg)
{
3d6c: e1a05000 mov r5, r0
rtems_libio_rw_args_t *args = arg;
struct rtems_termios_tty *tty = args->iop->data1;
rtems_status_code sc;
sc = rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3d70: e1a02001 mov r2, r1
3d74: e5940018 ldr r0, [r4, #24]
3d78: eb00068b bl 57ac <rtems_semaphore_obtain>
if (sc != RTEMS_SUCCESSFUL)
3d7c: e2506000 subs r6, r0, #0
3d80: 1a00000c bne 3db8 <rtems_termios_write+0x5c>
return sc;
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
3d84: e59420cc ldr r2, [r4, #204] ; 0xcc
3d88: e59f3098 ldr r3, [pc, #152] ; 3e28 <rtems_termios_write+0xcc>
3d8c: e0833282 add r3, r3, r2, lsl #5
3d90: e593300c ldr r3, [r3, #12]
3d94: e3530000 cmp r3, #0
3d98: 0a000008 beq 3dc0 <rtems_termios_write+0x64>
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
3d9c: e1a01005 mov r1, r5 <== NOT EXECUTED
3da0: e1a00004 mov r0, r4 <== NOT EXECUTED
3da4: e1a0e00f mov lr, pc <== NOT EXECUTED
3da8: e12fff13 bx r3 <== NOT EXECUTED
3dac: e1a06000 mov r6, r0 <== NOT EXECUTED
rtems_semaphore_release (tty->osem);
3db0: e5940018 ldr r0, [r4, #24] <== NOT EXECUTED
3db4: eb0006c4 bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
rtems_termios_puts (args->buffer, args->count, tty);
args->bytes_moved = args->count;
}
rtems_semaphore_release (tty->osem);
return sc;
}
3db8: e1a00006 mov r0, r6 <== NOT EXECUTED
3dbc: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc} <== NOT EXECUTED
if (rtems_termios_linesw[tty->t_line].l_write != NULL) {
sc = rtems_termios_linesw[tty->t_line].l_write(tty,args);
rtems_semaphore_release (tty->osem);
return sc;
}
if (tty->termios.c_oflag & OPOST) {
3dc0: e5943034 ldr r3, [r4, #52] ; 0x34
3dc4: e3130001 tst r3, #1
3dc8: 0a000011 beq 3e14 <rtems_termios_write+0xb8>
uint32_t count = args->count;
3dcc: e5958010 ldr r8, [r5, #16]
char *buffer = args->buffer;
while (count--)
3dd0: e3580000 cmp r8, #0
rtems_semaphore_release (tty->osem);
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
3dd4: e595a00c ldr sl, [r5, #12]
while (count--)
3dd8: 01a03006 moveq r3, r6
3ddc: 0a000007 beq 3e00 <rtems_termios_write+0xa4>
3de0: e1a07006 mov r7, r6
oproc (*buffer++, tty);
3de4: e7da0007 ldrb r0, [sl, r7]
3de8: e1a01004 mov r1, r4
3dec: e2877001 add r7, r7, #1
3df0: ebfffe4d bl 372c <oproc>
return sc;
}
if (tty->termios.c_oflag & OPOST) {
uint32_t count = args->count;
char *buffer = args->buffer;
while (count--)
3df4: e1580007 cmp r8, r7
3df8: 1afffff9 bne 3de4 <rtems_termios_write+0x88>
oproc (*buffer++, tty);
args->bytes_moved = args->count;
}
else {
rtems_termios_puts (args->buffer, args->count, tty);
args->bytes_moved = args->count;
3dfc: e5953010 ldr r3, [r5, #16]
3e00: e5853018 str r3, [r5, #24]
}
rtems_semaphore_release (tty->osem);
3e04: e5940018 ldr r0, [r4, #24]
3e08: eb0006af bl 58cc <rtems_semaphore_release>
return sc;
}
3e0c: e1a00006 mov r0, r6
3e10: e8bd85f0 pop {r4, r5, r6, r7, r8, sl, pc}
while (count--)
oproc (*buffer++, tty);
args->bytes_moved = args->count;
}
else {
rtems_termios_puts (args->buffer, args->count, tty);
3e14: e285000c add r0, r5, #12 <== NOT EXECUTED
3e18: e8900003 ldm r0, {r0, r1} <== NOT EXECUTED
3e1c: e1a02004 mov r2, r4 <== NOT EXECUTED
3e20: ebfffdf9 bl 360c <rtems_termios_puts> <== NOT EXECUTED
3e24: eafffff4 b 3dfc <rtems_termios_write+0xa0> <== NOT EXECUTED
00006b68 <rtems_verror>:
static int rtems_verror(
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
6b68: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} <== NOT EXECUTED
int local_errno = 0;
int chars_written = 0;
rtems_status_code status;
if (error_flag & RTEMS_ERROR_PANIC)
6b6c: e2108202 ands r8, r0, #536870912 ; 0x20000000 <== NOT EXECUTED
static int rtems_verror(
rtems_error_code_t error_flag,
const char *printf_format,
va_list arglist
)
{
6b70: e1a04000 mov r4, r0 <== NOT EXECUTED
6b74: e1a09001 mov r9, r1 <== NOT EXECUTED
6b78: e1a07002 mov r7, r2 <== NOT EXECUTED
int local_errno = 0;
int chars_written = 0;
rtems_status_code status;
if (error_flag & RTEMS_ERROR_PANIC)
6b7c: 0a00000c beq 6bb4 <rtems_verror+0x4c> <== NOT EXECUTED
{
if (rtems_panic_in_progress++)
6b80: e59f2160 ldr r2, [pc, #352] ; 6ce8 <rtems_verror+0x180> <== NOT EXECUTED
6b84: e5923000 ldr r3, [r2] <== NOT EXECUTED
6b88: e3530000 cmp r3, #0 <== NOT EXECUTED
6b8c: e2833001 add r3, r3, #1 <== NOT EXECUTED
6b90: e5823000 str r3, [r2] <== NOT EXECUTED
6b94: 0a000004 beq 6bac <rtems_verror+0x44> <== NOT EXECUTED
rtems_fatal_error_occurred( 99 );
}
}
#endif
_Thread_Dispatch_disable_level += 1;
6b98: e59f314c ldr r3, [pc, #332] ; 6cec <rtems_verror+0x184> <== NOT EXECUTED
6b9c: e5931000 ldr r1, [r3] <== NOT EXECUTED
6ba0: e2811001 add r1, r1, #1 <== NOT EXECUTED
6ba4: e5831000 str r1, [r3] <== NOT EXECUTED
RTEMS_COMPILER_MEMORY_BARRIER();
6ba8: e5923000 ldr r3, [r2] <== NOT EXECUTED
_Thread_Disable_dispatch(); /* disable task switches */
/* don't aggravate things */
if (rtems_panic_in_progress > 2)
6bac: e3530002 cmp r3, #2 <== NOT EXECUTED
6bb0: ca00002e bgt 6c70 <rtems_verror+0x108> <== NOT EXECUTED
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
6bb4: e59f5134 ldr r5, [pc, #308] ; 6cf0 <rtems_verror+0x188> <== NOT EXECUTED
6bb8: e5953000 ldr r3, [r5] <== NOT EXECUTED
6bbc: e5930008 ldr r0, [r3, #8] <== NOT EXECUTED
6bc0: eb00342e bl 13c80 <fflush> <== NOT EXECUTED
status = error_flag & ~RTEMS_ERROR_MASK;
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
6bc4: e2146101 ands r6, r4, #1073741824 ; 0x40000000 <== NOT EXECUTED
return 0;
}
(void) fflush(stdout); /* in case stdout/stderr same */
status = error_flag & ~RTEMS_ERROR_MASK;
6bc8: e3c4a207 bic sl, r4, #1879048192 ; 0x70000000 <== NOT EXECUTED
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
6bcc: 1a000038 bne 6cb4 <rtems_verror+0x14c> <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
6bd0: e5953000 ldr r3, [r5] <== NOT EXECUTED
6bd4: e1a02007 mov r2, r7 <== NOT EXECUTED
6bd8: e1a01009 mov r1, r9 <== NOT EXECUTED
6bdc: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
6be0: eb004c4c bl 19d18 <vfprintf> <== NOT EXECUTED
if (status)
6be4: e35a0000 cmp sl, #0 <== NOT EXECUTED
#if defined(RTEMS_MULTIPROCESSING)
if (_System_state_Is_multiprocessing)
fprintf(stderr, "[%" PRIu32 "] ", _Configuration_MP_table->node);
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
6be8: e1a07000 mov r7, r0 <== NOT EXECUTED
if (status)
6bec: 1a000025 bne 6c88 <rtems_verror+0x120> <== NOT EXECUTED
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno)
6bf0: e3560000 cmp r6, #0 <== NOT EXECUTED
6bf4: 0a00000b beq 6c28 <rtems_verror+0xc0> <== NOT EXECUTED
{
if ((local_errno > 0) && *strerror(local_errno))
6bf8: da000004 ble 6c10 <rtems_verror+0xa8> <== NOT EXECUTED
6bfc: e1a00006 mov r0, r6 <== NOT EXECUTED
6c00: eb0037ef bl 14bc4 <strerror> <== NOT EXECUTED
6c04: e5d03000 ldrb r3, [r0] <== NOT EXECUTED
6c08: e3530000 cmp r3, #0 <== NOT EXECUTED
6c0c: 1a00002b bne 6cc0 <rtems_verror+0x158> <== NOT EXECUTED
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
6c10: e5953000 ldr r3, [r5] <== NOT EXECUTED
6c14: e59f10d8 ldr r1, [pc, #216] ; 6cf4 <rtems_verror+0x18c> <== NOT EXECUTED
6c18: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
6c1c: e1a02006 mov r2, r6 <== NOT EXECUTED
6c20: eb0034d4 bl 13f78 <fprintf> <== NOT EXECUTED
6c24: e0877000 add r7, r7, r0 <== NOT EXECUTED
}
chars_written += fprintf(stderr, "\n");
6c28: e5953000 ldr r3, [r5] <== NOT EXECUTED
6c2c: e59f10c4 ldr r1, [pc, #196] ; 6cf8 <rtems_verror+0x190> <== NOT EXECUTED
6c30: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
6c34: eb0034cf bl 13f78 <fprintf> <== NOT EXECUTED
(void) fflush(stderr);
6c38: e5953000 ldr r3, [r5] <== NOT EXECUTED
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
}
chars_written += fprintf(stderr, "\n");
6c3c: e1a0a000 mov sl, r0 <== NOT EXECUTED
(void) fflush(stderr);
6c40: e593000c ldr r0, [r3, #12] <== NOT EXECUTED
6c44: eb00340d bl 13c80 <fflush> <== NOT EXECUTED
if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT))
6c48: e3140203 tst r4, #805306368 ; 0x30000000 <== NOT EXECUTED
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
else
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
}
chars_written += fprintf(stderr, "\n");
6c4c: 008a0007 addeq r0, sl, r7 <== NOT EXECUTED
(void) fflush(stderr);
if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT))
6c50: 08bd87f0 popeq {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
{
if (error_flag & RTEMS_ERROR_PANIC)
6c54: e3580000 cmp r8, #0 <== NOT EXECUTED
6c58: 0a000006 beq 6c78 <rtems_verror+0x110> <== NOT EXECUTED
{
rtems_error(0, "fatal error, exiting");
6c5c: e3a00000 mov r0, #0 <== NOT EXECUTED
6c60: e59f1094 ldr r1, [pc, #148] ; 6cfc <rtems_verror+0x194> <== NOT EXECUTED
6c64: eb000035 bl 6d40 <rtems_error> <== NOT EXECUTED
_exit(local_errno);
6c68: e1a00006 mov r0, r6 <== NOT EXECUTED
6c6c: eb000336 bl 794c <_exit> <== NOT EXECUTED
}
else
{
rtems_error(0, "fatal error, aborting");
abort();
6c70: e3a00000 mov r0, #0 <== NOT EXECUTED
}
}
return chars_written;
}
6c74: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc} <== NOT EXECUTED
rtems_error(0, "fatal error, exiting");
_exit(local_errno);
}
else
{
rtems_error(0, "fatal error, aborting");
6c78: e59f1080 ldr r1, [pc, #128] ; 6d00 <rtems_verror+0x198> <== NOT EXECUTED
6c7c: e1a00008 mov r0, r8 <== NOT EXECUTED
6c80: eb00002e bl 6d40 <rtems_error> <== NOT EXECUTED
abort();
6c84: eb003301 bl 13890 <abort> <== NOT EXECUTED
#endif
chars_written += vfprintf(stderr, printf_format, arglist);
if (status)
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
6c88: e59f3060 ldr r3, [pc, #96] ; 6cf0 <rtems_verror+0x188> <== NOT EXECUTED
6c8c: e5933000 ldr r3, [r3] <== NOT EXECUTED
6c90: e1a0000a mov r0, sl <== NOT EXECUTED
6c94: e593a00c ldr sl, [r3, #12] <== NOT EXECUTED
6c98: ebffffae bl 6b58 <rtems_status_text> <== NOT EXECUTED
6c9c: e59f1060 ldr r1, [pc, #96] ; 6d04 <rtems_verror+0x19c> <== NOT EXECUTED
6ca0: e1a02000 mov r2, r0 <== NOT EXECUTED
6ca4: e1a0000a mov r0, sl <== NOT EXECUTED
6ca8: eb0034b2 bl 13f78 <fprintf> <== NOT EXECUTED
6cac: e0877000 add r7, r7, r0 <== NOT EXECUTED
6cb0: eaffffce b 6bf0 <rtems_verror+0x88> <== NOT EXECUTED
(void) fflush(stdout); /* in case stdout/stderr same */
status = error_flag & ~RTEMS_ERROR_MASK;
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
local_errno = errno;
6cb4: eb0032fe bl 138b4 <__errno> <== NOT EXECUTED
6cb8: e5906000 ldr r6, [r0] <== NOT EXECUTED
6cbc: eaffffc3 b 6bd0 <rtems_verror+0x68> <== NOT EXECUTED
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno)
{
if ((local_errno > 0) && *strerror(local_errno))
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
6cc0: e5953000 ldr r3, [r5] <== NOT EXECUTED
6cc4: e1a00006 mov r0, r6 <== NOT EXECUTED
6cc8: e593a00c ldr sl, [r3, #12] <== NOT EXECUTED
6ccc: eb0037bc bl 14bc4 <strerror> <== NOT EXECUTED
6cd0: e59f1030 ldr r1, [pc, #48] ; 6d08 <rtems_verror+0x1a0> <== NOT EXECUTED
6cd4: e1a02000 mov r2, r0 <== NOT EXECUTED
6cd8: e1a0000a mov r0, sl <== NOT EXECUTED
6cdc: eb0034a5 bl 13f78 <fprintf> <== NOT EXECUTED
6ce0: e0877000 add r7, r7, r0 <== NOT EXECUTED
if (status)
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
if (local_errno)
{
if ((local_errno > 0) && *strerror(local_errno))
6ce4: eaffffcf b 6c28 <rtems_verror+0xc0> <== NOT EXECUTED
000291e4 <scanInt>:
/*
* Extract an integer value from the database
*/
static int
scanInt(FILE *fp, int *val)
{
291e4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
291e8: e3a06000 mov r6, #0
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
291ec: e59f90e8 ldr r9, [pc, #232] ; 292dc <scanInt+0xf8>
limit++;
continue;
}
sign = 1;
}
if (!isdigit(c))
291f0: e59f80e8 ldr r8, [pc, #232] ; 292e0 <scanInt+0xfc>
return 0;
d = c - '0';
if ((i > (limit / 10))
291f4: e59fa0e8 ldr sl, [pc, #232] ; 292e4 <scanInt+0x100>
/*
* Extract an integer value from the database
*/
static int
scanInt(FILE *fp, int *val)
{
291f8: e1a04000 mov r4, r0
291fc: e1a0b001 mov fp, r1
29200: e3e07102 mvn r7, #-2147483648 ; 0x80000000
29204: e1a05006 mov r5, r6
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
29208: e5943004 ldr r3, [r4, #4]
2920c: e2433001 sub r3, r3, #1
29210: e3530000 cmp r3, #0
29214: e5843004 str r3, [r4, #4]
29218: ba00001d blt 29294 <scanInt+0xb0>
2921c: e5943000 ldr r3, [r4]
29220: e4d30001 ldrb r0, [r3], #1
if (c == ':')
29224: e350003a cmp r0, #58 ; 0x3a
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
29228: e5843000 str r3, [r4]
if (c == ':')
2922c: 0a00001d beq 292a8 <scanInt+0xc4>
break;
if (sign == 0) {
29230: e3560000 cmp r6, #0
29234: 1a000004 bne 2924c <scanInt+0x68>
if (c == '-') {
29238: e350002d cmp r0, #45 ; 0x2d
sign = -1;
limit++;
2923c: 02877001 addeq r7, r7, #1
29240: 03e06000 mvneq r6, #0
for (;;) {
c = getc(fp);
if (c == ':')
break;
if (sign == 0) {
if (c == '-') {
29244: 0affffef beq 29208 <scanInt+0x24>
sign = -1;
limit++;
continue;
29248: e3a06001 mov r6, #1
}
sign = 1;
}
if (!isdigit(c))
2924c: e5983000 ldr r3, [r8]
29250: e0833000 add r3, r3, r0
29254: e5d33001 ldrb r3, [r3, #1]
29258: e3130004 tst r3, #4
2925c: 0a00001c beq 292d4 <scanInt+0xf0>
return 0;
d = c - '0';
if ((i > (limit / 10))
29260: e083279a umull r2, r3, sl, r7
29264: e15501a3 cmp r5, r3, lsr #3
29268: 8a000019 bhi 292d4 <scanInt+0xf0>
}
sign = 1;
}
if (!isdigit(c))
return 0;
d = c - '0';
2926c: e2400030 sub r0, r0, #48 ; 0x30
29270: 11a03105 lslne r3, r5, #2
if ((i > (limit / 10))
29274: 0a000011 beq 292c0 <scanInt+0xdc>
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
29278: e0835005 add r5, r3, r5
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
2927c: e5943004 ldr r3, [r4, #4]
29280: e2433001 sub r3, r3, #1
29284: e3530000 cmp r3, #0
return 0;
d = c - '0';
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
29288: e0805085 add r5, r0, r5, lsl #1
unsigned int limit = INT_MAX;
int sign = 0;
int d;
for (;;) {
c = getc(fp);
2928c: e5843004 str r3, [r4, #4]
29290: aaffffe1 bge 2921c <scanInt+0x38>
29294: e5990000 ldr r0, [r9] <== NOT EXECUTED
29298: e1a01004 mov r1, r4 <== NOT EXECUTED
2929c: eb007cd5 bl 485f8 <__srget_r> <== NOT EXECUTED
if (c == ':')
292a0: e350003a cmp r0, #58 ; 0x3a <== NOT EXECUTED
292a4: 1affffe1 bne 29230 <scanInt+0x4c> <== NOT EXECUTED
if ((i > (limit / 10))
|| ((i == (limit / 10)) && (d > (limit % 10))))
return 0;
i = i * 10 + d;
}
if (sign == 0)
292a8: e3560000 cmp r6, #0
292ac: 0a000008 beq 292d4 <scanInt+0xf0>
return 0;
*val = i * sign;
292b0: e0030695 mul r3, r5, r6
292b4: e3a00001 mov r0, #1
292b8: e58b3000 str r3, [fp]
return 1;
292bc: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
sign = 1;
}
if (!isdigit(c))
return 0;
d = c - '0';
if ((i > (limit / 10))
292c0: e1a03105 lsl r3, r5, #2 <== NOT EXECUTED
292c4: e0832005 add r2, r3, r5 <== NOT EXECUTED
292c8: e0472082 sub r2, r7, r2, lsl #1 <== NOT EXECUTED
292cc: e1500002 cmp r0, r2 <== NOT EXECUTED
292d0: 9affffe8 bls 29278 <scanInt+0x94> <== NOT EXECUTED
i = i * 10 + d;
}
if (sign == 0)
return 0;
*val = i * sign;
return 1;
292d4: e3a00000 mov r0, #0 <== NOT EXECUTED
}
292d8: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} <== NOT EXECUTED
000292e8 <scanString>:
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
292e8: e92d41f0 push {r4, r5, r6, r7, r8, lr}
292ec: e1a05002 mov r5, r2
int c;
*name = *bufp;
292f0: e5922000 ldr r2, [r2]
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
292f4: e59d7018 ldr r7, [sp, #24]
int c;
*name = *bufp;
292f8: e5812000 str r2, [r1]
for (;;) {
c = getc(fp);
292fc: e59f60c4 ldr r6, [pc, #196] ; 293c8 <scanString+0xe0>
/*
* Extract a string value from the database
*/
static int
scanString(FILE *fp, char **name, char **bufp, size_t *nleft, int nlFlag)
{
29300: e1a04000 mov r4, r0
29304: e1a08003 mov r8, r3
29308: ea000013 b 2935c <scanString+0x74>
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
2930c: e5943000 ldr r3, [r4]
29310: e4d30001 ldrb r0, [r3], #1
if (c == ':') {
29314: e350003a cmp r0, #58 ; 0x3a
{
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
29318: e5843000 str r3, [r4]
if (c == ':') {
2931c: 0a000018 beq 29384 <scanString+0x9c>
if (nlFlag)
return 0;
break;
}
if (c == '\n') {
29320: e350000a cmp r0, #10
29324: 0a000023 beq 293b8 <scanString+0xd0>
if (!nlFlag)
return 0;
break;
}
if (c == EOF)
29328: e3700001 cmn r0, #1
2932c: 0a000023 beq 293c0 <scanString+0xd8>
return 0;
if (*nleft < 2)
29330: e5983000 ldr r3, [r8]
29334: e3530001 cmp r3, #1
29338: 9a000020 bls 293c0 <scanString+0xd8>
return 0;
**bufp = c;
2933c: e5953000 ldr r3, [r5]
29340: e5c30000 strb r0, [r3]
++(*bufp);
29344: e5952000 ldr r2, [r5]
--(*nleft);
29348: e5983000 ldr r3, [r8]
if (c == EOF)
return 0;
if (*nleft < 2)
return 0;
**bufp = c;
++(*bufp);
2934c: e2822001 add r2, r2, #1
--(*nleft);
29350: e2433001 sub r3, r3, #1
if (c == EOF)
return 0;
if (*nleft < 2)
return 0;
**bufp = c;
++(*bufp);
29354: e5852000 str r2, [r5]
--(*nleft);
29358: e5883000 str r3, [r8]
{
int c;
*name = *bufp;
for (;;) {
c = getc(fp);
2935c: e5943004 ldr r3, [r4, #4]
29360: e2433001 sub r3, r3, #1
29364: e3530000 cmp r3, #0
29368: e5843004 str r3, [r4, #4]
2936c: aaffffe6 bge 2930c <scanString+0x24>
29370: e5960000 ldr r0, [r6]
29374: e1a01004 mov r1, r4
29378: eb007c9e bl 485f8 <__srget_r>
if (c == ':') {
2937c: e350003a cmp r0, #58 ; 0x3a
29380: 1affffe6 bne 29320 <scanString+0x38>
if (nlFlag)
29384: e3570000 cmp r7, #0
29388: 1a00000c bne 293c0 <scanString+0xd8>
return 0;
**bufp = c;
++(*bufp);
--(*nleft);
}
**bufp = '\0';
2938c: e5953000 ldr r3, [r5]
29390: e3a02000 mov r2, #0
29394: e5c32000 strb r2, [r3]
++(*bufp);
29398: e5952000 ldr r2, [r5]
--(*nleft);
2939c: e5983000 ldr r3, [r8]
**bufp = c;
++(*bufp);
--(*nleft);
}
**bufp = '\0';
++(*bufp);
293a0: e2822001 add r2, r2, #1
--(*nleft);
293a4: e2433001 sub r3, r3, #1
**bufp = c;
++(*bufp);
--(*nleft);
}
**bufp = '\0';
++(*bufp);
293a8: e5852000 str r2, [r5]
--(*nleft);
293ac: e5883000 str r3, [r8]
293b0: e3a00001 mov r0, #1
return 1;
293b4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
if (nlFlag)
return 0;
break;
}
if (c == '\n') {
if (!nlFlag)
293b8: e3570000 cmp r7, #0
293bc: 1afffff2 bne 2938c <scanString+0xa4>
--(*nleft);
}
**bufp = '\0';
++(*bufp);
--(*nleft);
return 1;
293c0: e3a00000 mov r0, #0 <== NOT EXECUTED
}
293c4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} <== NOT EXECUTED
000293cc <scangr>:
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
293cc: e92d41f0 push {r4, r5, r6, r7, r8, lr}
293d0: e24dd014 sub sp, sp, #20
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
293d4: e28d5008 add r5, sp, #8
293d8: e28d4004 add r4, sp, #4
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
293dc: e58d2008 str r2, [sp, #8]
293e0: e58d3004 str r3, [sp, #4]
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
293e4: e3a06000 mov r6, #0
293e8: e1a02005 mov r2, r5
293ec: e1a03004 mov r3, r4
293f0: e58d6000 str r6, [sp]
FILE *fp,
struct group *grp,
char *buffer,
size_t bufsize
)
{
293f4: e1a07000 mov r7, r0
293f8: e1a08001 mov r8, r1
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
293fc: ebffffb9 bl 292e8 <scanString>
29400: e1500006 cmp r0, r6
29404: 1a000002 bne 29414 <scangr+0x48>
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
return 1;
29408: e3a00000 mov r0, #0 <== NOT EXECUTED
}
2940c: e28dd014 add sp, sp, #20
29410: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
29414: e1a00007 mov r0, r7
29418: e2881004 add r1, r8, #4
2941c: e1a02005 mov r2, r5
29420: e1a03004 mov r3, r4
29424: e58d6000 str r6, [sp]
29428: ebffffae bl 292e8 <scanString>
{
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
2942c: e1500006 cmp r0, r6
29430: 0afffff4 beq 29408 <scangr+0x3c>
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
29434: e1a00007 mov r0, r7
29438: e28d1010 add r1, sp, #16
2943c: ebffff68 bl 291e4 <scanInt>
{
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
29440: e1500006 cmp r0, r6
29444: 0affffef beq 29408 <scangr+0x3c>
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
29448: e1a03004 mov r3, r4
2944c: e1a00007 mov r0, r7
29450: e1a02005 mov r2, r5
29454: e3a04001 mov r4, #1
29458: e28d100c add r1, sp, #12
2945c: e58d4000 str r4, [sp]
29460: ebffffa0 bl 292e8 <scanString>
{
int grgid;
char *grmem, *cp;
int memcount;
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
29464: e1500006 cmp r0, r6
29468: 0affffe6 beq 29408 <scangr+0x3c>
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
return 0;
grp->gr_gid = grgid;
2946c: e1dd31b0 ldrh r3, [sp, #16]
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
29470: e59d100c ldr r1, [sp, #12]
if (!scanString(fp, &grp->gr_name, &buffer, &bufsize, 0)
|| !scanString(fp, &grp->gr_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &grgid)
|| !scanString(fp, &grmem, &buffer, &bufsize, 1))
return 0;
grp->gr_gid = grgid;
29474: e1c830b8 strh r3, [r8, #8]
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
29478: e5d13000 ldrb r3, [r1]
2947c: e1530006 cmp r3, r6
29480: 03a04017 moveq r4, #23
29484: 0a000007 beq 294a8 <scangr+0xdc>
29488: e1a02001 mov r2, r1
if(*cp == ',')
2948c: e353002c cmp r3, #44 ; 0x2c
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
29490: e5f23001 ldrb r3, [r2, #1]!
if(*cp == ',')
memcount++;
29494: 02844001 addeq r4, r4, #1
grp->gr_gid = grgid;
/*
* Determine number of members
*/
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
29498: e3530000 cmp r3, #0
2949c: 1afffffa bne 2948c <scangr+0xc0>
294a0: e1a04104 lsl r4, r4, #2
294a4: e2844013 add r4, r4, #19
}
/*
* Hack to produce (hopefully) a suitably-aligned array of pointers
*/
if (bufsize < (((memcount+1)*sizeof(char *)) + 15))
294a8: e59d3004 ldr r3, [sp, #4]
294ac: e1530004 cmp r3, r4
294b0: 3affffd4 bcc 29408 <scangr+0x3c>
return 0;
grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15);
294b4: e59d3008 ldr r3, [sp, #8]
294b8: e283300f add r3, r3, #15
294bc: e3c3300f bic r3, r3, #15
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
294c0: e5831000 str r1, [r3]
/*
* Hack to produce (hopefully) a suitably-aligned array of pointers
*/
if (bufsize < (((memcount+1)*sizeof(char *)) + 15))
return 0;
grp->gr_mem = (char **)(((uintptr_t)buffer + 15) & ~15);
294c4: e588300c str r3, [r8, #12]
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
294c8: e59d200c ldr r2, [sp, #12]
294cc: e5d23000 ldrb r3, [r2]
294d0: e3530000 cmp r3, #0
294d4: 03a01004 moveq r1, #4
294d8: 0a00000b beq 2950c <scangr+0x140>
294dc: e2822001 add r2, r2, #1
294e0: e3a01001 mov r1, #1
if(*cp == ',') {
*cp = '\0';
294e4: e3a00000 mov r0, #0
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
if(*cp == ',') {
294e8: e353002c cmp r3, #44 ; 0x2c
*cp = '\0';
294ec: 05420001 strbeq r0, [r2, #-1]
grp->gr_mem[memcount++] = cp + 1;
294f0: 0598300c ldreq r3, [r8, #12]
294f4: 07832101 streq r2, [r3, r1, lsl #2]
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
294f8: e4d23001 ldrb r3, [r2], #1
if(*cp == ',') {
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
294fc: 02811001 addeq r1, r1, #1
/*
* Fill in pointer array
*/
grp->gr_mem[0] = grmem;
for (cp = grmem, memcount = 1 ; *cp != 0 ; cp++) {
29500: e3530000 cmp r3, #0
29504: 1afffff7 bne 294e8 <scangr+0x11c>
29508: e1a01101 lsl r1, r1, #2
if(*cp == ',') {
*cp = '\0';
grp->gr_mem[memcount++] = cp + 1;
}
}
grp->gr_mem[memcount] = NULL;
2950c: e598300c ldr r3, [r8, #12]
29510: e3a02000 mov r2, #0
29514: e7832001 str r2, [r3, r1]
29518: e3a00001 mov r0, #1
return 1;
2951c: eaffffba b 2940c <scangr+0x40>
00029560 <scanpw>:
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
29560: e92d41f0 push {r4, r5, r6, r7, r8, lr}
29564: e24dd014 sub sp, sp, #20
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29568: e28d5008 add r5, sp, #8
2956c: e28d4004 add r4, sp, #4
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
29570: e58d2008 str r2, [sp, #8]
29574: e58d3004 str r3, [sp, #4]
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29578: e3a06000 mov r6, #0
2957c: e1a02005 mov r2, r5
29580: e1a03004 mov r3, r4
29584: e58d6000 str r6, [sp]
FILE *fp,
struct passwd *pwd,
char *buffer,
size_t bufsize
)
{
29588: e1a07000 mov r7, r0
2958c: e1a08001 mov r8, r1
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29590: ebffff54 bl 292e8 <scanString>
29594: e1500006 cmp r0, r6
29598: 1a000002 bne 295a8 <scanpw+0x48>
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
return 0;
pwd->pw_uid = pwuid;
pwd->pw_gid = pwgid;
return 1;
2959c: e3a00000 mov r0, #0 <== NOT EXECUTED
}
295a0: e28dd014 add sp, sp, #20
295a4: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
295a8: e1a00007 mov r0, r7
295ac: e2881004 add r1, r8, #4
295b0: e1a02005 mov r2, r5
295b4: e1a03004 mov r3, r4
295b8: e58d6000 str r6, [sp]
295bc: ebffff49 bl 292e8 <scanString>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
295c0: e1500006 cmp r0, r6
295c4: 0afffff4 beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &pwuid)
295c8: e1a00007 mov r0, r7
295cc: e28d1010 add r1, sp, #16
295d0: ebffff03 bl 291e4 <scanInt>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
295d4: e1500006 cmp r0, r6
295d8: 0affffef beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &pwuid)
|| !scanInt(fp, &pwgid)
295dc: e1a00007 mov r0, r7
295e0: e28d100c add r1, sp, #12
295e4: ebfffefe bl 291e4 <scanInt>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
295e8: e1500006 cmp r0, r6
295ec: 0affffea beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &pwuid)
|| !scanInt(fp, &pwgid)
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
295f0: e1a00007 mov r0, r7
295f4: e288100c add r1, r8, #12
295f8: e1a02005 mov r2, r5
295fc: e1a03004 mov r3, r4
29600: e58d6000 str r6, [sp]
29604: ebffff37 bl 292e8 <scanString>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29608: e1500006 cmp r0, r6
2960c: 0affffe2 beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &pwuid)
|| !scanInt(fp, &pwgid)
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
29610: e1a00007 mov r0, r7
29614: e2881010 add r1, r8, #16
29618: e1a02005 mov r2, r5
2961c: e1a03004 mov r3, r4
29620: e58d6000 str r6, [sp]
29624: ebffff2f bl 292e8 <scanString>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29628: e1500006 cmp r0, r6
2962c: 0affffda beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_passwd, &buffer, &bufsize, 0)
|| !scanInt(fp, &pwuid)
|| !scanInt(fp, &pwgid)
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
29630: e1a00007 mov r0, r7
29634: e2881014 add r1, r8, #20
29638: e1a02005 mov r2, r5
2963c: e1a03004 mov r3, r4
29640: e58d6000 str r6, [sp]
29644: ebffff27 bl 292e8 <scanString>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
29648: e1500006 cmp r0, r6
2964c: 0affffd2 beq 2959c <scanpw+0x3c>
|| !scanInt(fp, &pwuid)
|| !scanInt(fp, &pwgid)
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
29650: e1a03004 mov r3, r4
29654: e1a00007 mov r0, r7
29658: e1a02005 mov r2, r5
2965c: e3a04001 mov r4, #1
29660: e2881018 add r1, r8, #24
29664: e58d4000 str r4, [sp]
29668: ebffff1e bl 292e8 <scanString>
size_t bufsize
)
{
int pwuid, pwgid;
if (!scanString(fp, &pwd->pw_name, &buffer, &bufsize, 0)
2966c: e1500006 cmp r0, r6
29670: 0affffc9 beq 2959c <scanpw+0x3c>
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
return 0;
pwd->pw_uid = pwuid;
pwd->pw_gid = pwgid;
29674: e1dd30bc ldrh r3, [sp, #12]
29678: e1c830ba strh r3, [r8, #10]
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
return 0;
pwd->pw_uid = pwuid;
2967c: e1dd31b0 ldrh r3, [sp, #16]
pwd->pw_gid = pwgid;
29680: e1a00004 mov r0, r4
|| !scanString(fp, &pwd->pw_comment, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_gecos, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_dir, &buffer, &bufsize, 0)
|| !scanString(fp, &pwd->pw_shell, &buffer, &bufsize, 1))
return 0;
pwd->pw_uid = pwuid;
29684: e1c830b8 strh r3, [r8, #8]
pwd->pw_gid = pwgid;
return 1;
29688: eaffffc4 b 295a0 <scanpw+0x40>
0002919c <setgid>:
int setgid(
gid_t gid
)
{
_POSIX_types_Gid = gid;
2919c: e59f300c ldr r3, [pc, #12] ; 291b0 <setgid+0x14> <== NOT EXECUTED
291a0: e5933000 ldr r3, [r3] <== NOT EXECUTED
291a4: e1c303b4 strh r0, [r3, #52] ; 0x34 <== NOT EXECUTED
return 0;
}
291a8: e3a00000 mov r0, #0 <== NOT EXECUTED
291ac: e12fff1e bx lr <== NOT EXECUTED
000297ac <setgrent>:
return NULL;
return &grent;
}
void setgrent(void)
{
297ac: e92d4010 push {r4, lr} <== NOT EXECUTED
init_etc_passwd_group();
if (group_fp != NULL)
297b0: e59f4020 ldr r4, [pc, #32] ; 297d8 <setgrent+0x2c> <== NOT EXECUTED
return &grent;
}
void setgrent(void)
{
init_etc_passwd_group();
297b4: ebffffc4 bl 296cc <init_etc_passwd_group> <== NOT EXECUTED
if (group_fp != NULL)
297b8: e5940000 ldr r0, [r4] <== NOT EXECUTED
297bc: e3500000 cmp r0, #0 <== NOT EXECUTED
fclose(group_fp);
297c0: 1b006657 blne 43124 <fclose> <== NOT EXECUTED
group_fp = fopen("/etc/group", "r");
297c4: e59f0010 ldr r0, [pc, #16] ; 297dc <setgrent+0x30> <== NOT EXECUTED
297c8: e59f1010 ldr r1, [pc, #16] ; 297e0 <setgrent+0x34> <== NOT EXECUTED
297cc: eb006877 bl 439b0 <fopen> <== NOT EXECUTED
297d0: e5840000 str r0, [r4] <== NOT EXECUTED
}
297d4: e8bd8010 pop {r4, pc} <== NOT EXECUTED
000299a4 <setpwent>:
return NULL;
return &pwent;
}
void setpwent(void)
{
299a4: e92d4010 push {r4, lr} <== NOT EXECUTED
init_etc_passwd_group();
if (passwd_fp != NULL)
299a8: e59f4020 ldr r4, [pc, #32] ; 299d0 <setpwent+0x2c> <== NOT EXECUTED
return &pwent;
}
void setpwent(void)
{
init_etc_passwd_group();
299ac: ebffff46 bl 296cc <init_etc_passwd_group> <== NOT EXECUTED
if (passwd_fp != NULL)
299b0: e5940004 ldr r0, [r4, #4] <== NOT EXECUTED
299b4: e3500000 cmp r0, #0 <== NOT EXECUTED
fclose(passwd_fp);
299b8: 1b0065d9 blne 43124 <fclose> <== NOT EXECUTED
passwd_fp = fopen("/etc/passwd", "r");
299bc: e59f0010 ldr r0, [pc, #16] ; 299d4 <setpwent+0x30> <== NOT EXECUTED
299c0: e59f1010 ldr r1, [pc, #16] ; 299d8 <setpwent+0x34> <== NOT EXECUTED
299c4: eb0067f9 bl 439b0 <fopen> <== NOT EXECUTED
299c8: e5840004 str r0, [r4, #4] <== NOT EXECUTED
}
299cc: e8bd8010 pop {r4, pc} <== NOT EXECUTED
00007ea0 <setuid>:
int setuid(
uid_t uid
)
{
_POSIX_types_Uid = uid;
7ea0: e59f300c ldr r3, [pc, #12] ; 7eb4 <setuid+0x14> <== NOT EXECUTED
7ea4: e5933000 ldr r3, [r3] <== NOT EXECUTED
7ea8: e1c303b2 strh r0, [r3, #50] ; 0x32 <== NOT EXECUTED
return 0;
}
7eac: e3a00000 mov r0, #0 <== NOT EXECUTED
7eb0: e12fff1e bx lr <== NOT EXECUTED
00003cf8 <siproc>:
int i;
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
3cf8: e591303c ldr r3, [r1, #60] ; 0x3c <== NOT EXECUTED
3cfc: e3c33f61 bic r3, r3, #388 ; 0x184 <== NOT EXECUTED
3d00: e3c33003 bic r3, r3, #3 <== NOT EXECUTED
3d04: e1a03a03 lsl r3, r3, #20 <== NOT EXECUTED
3d08: e1a03a23 lsr r3, r3, #20 <== NOT EXECUTED
3d0c: e3530000 cmp r3, #0 <== NOT EXECUTED
/*
* Process input character, with semaphore.
*/
static int
siproc (unsigned char c, struct rtems_termios_tty *tty)
{
3d10: e92d4030 push {r4, r5, lr} <== NOT EXECUTED
3d14: e1a04001 mov r4, r1 <== NOT EXECUTED
3d18: e20050ff and r5, r0, #255 ; 0xff <== NOT EXECUTED
int i;
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
3d1c: 1a000002 bne 3d2c <siproc+0x34> <== NOT EXECUTED
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
i = iproc (c, tty);
rtems_semaphore_release (tty->osem);
}
else {
i = iproc (c, tty);
3d20: e1a00005 mov r0, r5 <== NOT EXECUTED
}
return i;
}
3d24: e8bd4030 pop {r4, r5, lr} <== NOT EXECUTED
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
i = iproc (c, tty);
rtems_semaphore_release (tty->osem);
}
else {
i = iproc (c, tty);
3d28: eaffff80 b 3b30 <iproc> <== NOT EXECUTED
/*
* Obtain output semaphore if character will be echoed
*/
if (tty->termios.c_lflag & (ECHO|ECHOE|ECHOK|ECHONL|ECHOPRT|ECHOCTL|ECHOKE)) {
rtems_semaphore_obtain (tty->osem, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
3d2c: e3a01000 mov r1, #0 <== NOT EXECUTED
3d30: e1a02001 mov r2, r1 <== NOT EXECUTED
3d34: e5940018 ldr r0, [r4, #24] <== NOT EXECUTED
3d38: eb00069b bl 57ac <rtems_semaphore_obtain> <== NOT EXECUTED
i = iproc (c, tty);
3d3c: e1a01004 mov r1, r4 <== NOT EXECUTED
3d40: e1a00005 mov r0, r5 <== NOT EXECUTED
3d44: ebffff79 bl 3b30 <iproc> <== NOT EXECUTED
3d48: e1a05000 mov r5, r0 <== NOT EXECUTED
rtems_semaphore_release (tty->osem);
3d4c: e5940018 ldr r0, [r4, #24] <== NOT EXECUTED
3d50: eb0006dd bl 58cc <rtems_semaphore_release> <== NOT EXECUTED
}
else {
i = iproc (c, tty);
}
return i;
}
3d54: e1a00005 mov r0, r5 <== NOT EXECUTED
3d58: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
00009638 <stat>:
int _STAT_NAME(
const char *path,
struct stat *buf
)
{
9638: e92d4070 push {r4, r5, r6, lr}
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
963c: e2515000 subs r5, r1, #0
int _STAT_NAME(
const char *path,
struct stat *buf
)
{
9640: e24dd018 sub sp, sp, #24
9644: e1a06000 mov r6, r0
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
9648: 0a00002f beq 970c <stat+0xd4>
rtems_set_errno_and_return_minus_one( EFAULT );
status = rtems_filesystem_evaluate_path( path, strlen( path ),
964c: eb010164 bl 49be4 <strlen>
9650: e28d4004 add r4, sp, #4
9654: e1a01000 mov r1, r0
9658: e3a0c001 mov ip, #1
965c: e1a00006 mov r0, r6
9660: e3a02000 mov r2, #0
9664: e1a03004 mov r3, r4
9668: e58dc000 str ip, [sp]
966c: ebfff99d bl 7ce8 <rtems_filesystem_evaluate_path>
0, &loc, _STAT_FOLLOW_LINKS );
if ( status != 0 )
9670: e2501000 subs r1, r0, #0
9674: 1a000022 bne 9704 <stat+0xcc>
return -1;
if ( !loc.handlers->fstat_h ){
9678: e59d300c ldr r3, [sp, #12]
967c: e5933018 ldr r3, [r3, #24]
9680: e3530000 cmp r3, #0
9684: 0a000013 beq 96d8 <stat+0xa0>
/*
* Zero out the stat structure so the various support
* versions of stat don't have to.
*/
memset( buf, 0, sizeof(struct stat) );
9688: e3a02048 mov r2, #72 ; 0x48
968c: e1a00005 mov r0, r5
9690: eb00f38d bl 464cc <memset>
status = (*loc.handlers->fstat_h)( &loc, buf );
9694: e1a01005 mov r1, r5
9698: e59d300c ldr r3, [sp, #12]
969c: e1a00004 mov r0, r4
96a0: e1a0e00f mov lr, pc
96a4: e593f018 ldr pc, [r3, #24]
rtems_filesystem_freenode( &loc );
96a8: e59d3010 ldr r3, [sp, #16]
96ac: e3530000 cmp r3, #0
* versions of stat don't have to.
*/
memset( buf, 0, sizeof(struct stat) );
status = (*loc.handlers->fstat_h)( &loc, buf );
96b0: e1a05000 mov r5, r0
rtems_filesystem_freenode( &loc );
96b4: 0a000004 beq 96cc <stat+0x94>
96b8: e593301c ldr r3, [r3, #28]
96bc: e3530000 cmp r3, #0
96c0: 11a00004 movne r0, r4
96c4: 11a0e00f movne lr, pc
96c8: 112fff13 bxne r3
return status;
}
96cc: e1a00005 mov r0, r5
96d0: e28dd018 add sp, sp, #24
96d4: e8bd8070 pop {r4, r5, r6, pc}
0, &loc, _STAT_FOLLOW_LINKS );
if ( status != 0 )
return -1;
if ( !loc.handlers->fstat_h ){
rtems_filesystem_freenode( &loc );
96d8: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
96dc: e3530000 cmp r3, #0 <== NOT EXECUTED
96e0: 0a000004 beq 96f8 <stat+0xc0> <== NOT EXECUTED
96e4: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
96e8: e3530000 cmp r3, #0 <== NOT EXECUTED
96ec: 11a00004 movne r0, r4 <== NOT EXECUTED
96f0: 11a0e00f movne lr, pc <== NOT EXECUTED
96f4: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
96f8: eb00e63c bl 42ff0 <__errno> <== NOT EXECUTED
96fc: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
9700: e5803000 str r3, [r0] <== NOT EXECUTED
9704: e3e05000 mvn r5, #0
9708: eaffffef b 96cc <stat+0x94>
/*
* Check to see if we were passed a valid pointer.
*/
if ( !buf )
rtems_set_errno_and_return_minus_one( EFAULT );
970c: eb00e637 bl 42ff0 <__errno>
9710: e3a0300e mov r3, #14
9714: e5803000 str r3, [r0]
9718: e3e05000 mvn r5, #0
971c: eaffffea b 96cc <stat+0x94>
0002a9a4 <statvfs>:
#include <sys/statvfs.h>
int
statvfs (const char *path, struct statvfs *sb)
{
2a9a4: e92d4070 push {r4, r5, r6, lr} <== NOT EXECUTED
2a9a8: e24dd018 sub sp, sp, #24 <== NOT EXECUTED
2a9ac: e1a04001 mov r4, r1 <== NOT EXECUTED
2a9b0: e1a06000 mov r6, r0 <== NOT EXECUTED
* The root node of the mounted filesytem.
* The node for the directory that the fileystem is mounted on.
* The mount entry that is being refered to.
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
2a9b4: eb007c8a bl 49be4 <strlen> <== NOT EXECUTED
2a9b8: e28d5004 add r5, sp, #4 <== NOT EXECUTED
2a9bc: e1a01000 mov r1, r0 <== NOT EXECUTED
2a9c0: e3a0c001 mov ip, #1 <== NOT EXECUTED
2a9c4: e1a00006 mov r0, r6 <== NOT EXECUTED
2a9c8: e3a02000 mov r2, #0 <== NOT EXECUTED
2a9cc: e1a03005 mov r3, r5 <== NOT EXECUTED
2a9d0: e58dc000 str ip, [sp] <== NOT EXECUTED
2a9d4: ebff74c3 bl 7ce8 <rtems_filesystem_evaluate_path> <== NOT EXECUTED
2a9d8: e3500000 cmp r0, #0 <== NOT EXECUTED
2a9dc: 1a000028 bne 2aa84 <statvfs+0xe0> <== NOT EXECUTED
return -1;
mt_entry = loc.mt_entry;
2a9e0: e59d3014 ldr r3, [sp, #20] <== NOT EXECUTED
fs_mount_root = &mt_entry->mt_fs_root;
2a9e4: e5932028 ldr r2, [r3, #40] ; 0x28 <== NOT EXECUTED
2a9e8: e5922044 ldr r2, [r2, #68] ; 0x44 <== NOT EXECUTED
2a9ec: e3520000 cmp r2, #0 <== NOT EXECUTED
2a9f0: 0a000020 beq 2aa78 <statvfs+0xd4> <== NOT EXECUTED
if ( !fs_mount_root->ops->statvfs_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
memset (sb, 0, sizeof (struct statvfs));
2a9f4: e1a02004 mov r2, r4 <== NOT EXECUTED
2a9f8: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2a9fc: e2822004 add r2, r2, #4 <== NOT EXECUTED
2aa00: e5840004 str r0, [r4, #4] <== NOT EXECUTED
2aa04: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa08: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa0c: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa10: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa14: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa18: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa1c: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa20: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa24: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa28: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa2c: e4820004 str r0, [r2], #4 <== NOT EXECUTED
2aa30: e5820000 str r0, [r2] <== NOT EXECUTED
result = ( fs_mount_root->ops->statvfs_h )( fs_mount_root, sb );
2aa34: e1a01004 mov r1, r4 <== NOT EXECUTED
2aa38: e283001c add r0, r3, #28 <== NOT EXECUTED
2aa3c: e5933028 ldr r3, [r3, #40] ; 0x28 <== NOT EXECUTED
2aa40: e1a0e00f mov lr, pc <== NOT EXECUTED
2aa44: e593f044 ldr pc, [r3, #68] ; 0x44 <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
2aa48: e59d3010 ldr r3, [sp, #16] <== NOT EXECUTED
2aa4c: e3530000 cmp r3, #0 <== NOT EXECUTED
if ( !fs_mount_root->ops->statvfs_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
memset (sb, 0, sizeof (struct statvfs));
result = ( fs_mount_root->ops->statvfs_h )( fs_mount_root, sb );
2aa50: e1a04000 mov r4, r0 <== NOT EXECUTED
rtems_filesystem_freenode( &loc );
2aa54: 0a000004 beq 2aa6c <statvfs+0xc8> <== NOT EXECUTED
2aa58: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
2aa5c: e3530000 cmp r3, #0 <== NOT EXECUTED
2aa60: 11a00005 movne r0, r5 <== NOT EXECUTED
2aa64: 11a0e00f movne lr, pc <== NOT EXECUTED
2aa68: 112fff13 bxne r3 <== NOT EXECUTED
return result;
}
2aa6c: e1a00004 mov r0, r4 <== NOT EXECUTED
2aa70: e28dd018 add sp, sp, #24 <== NOT EXECUTED
2aa74: e8bd8070 pop {r4, r5, r6, pc} <== NOT EXECUTED
mt_entry = loc.mt_entry;
fs_mount_root = &mt_entry->mt_fs_root;
if ( !fs_mount_root->ops->statvfs_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
2aa78: eb00615c bl 42ff0 <__errno> <== NOT EXECUTED
2aa7c: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2aa80: e5803000 str r3, [r0] <== NOT EXECUTED
2aa84: e3e04000 mvn r4, #0 <== NOT EXECUTED
2aa88: eafffff7 b 2aa6c <statvfs+0xc8> <== NOT EXECUTED
0002aad8 <symlink>:
int symlink(
const char *actualpath,
const char *sympath
)
{
2aad8: e92d4070 push {r4, r5, r6, lr}
2aadc: e1a05001 mov r5, r1
2aae0: e24dd01c sub sp, sp, #28
2aae4: e1a06000 mov r6, r0
rtems_filesystem_location_info_t loc;
int i;
const char *name_start;
int result;
rtems_filesystem_get_start_loc( sympath, &i, &loc );
2aae8: e28d1018 add r1, sp, #24
2aaec: e1a00005 mov r0, r5
2aaf0: e1a0200d mov r2, sp
2aaf4: ebff7b0c bl 972c <rtems_filesystem_get_start_loc>
if ( !loc.ops->evalformake_h ) {
2aaf8: e59d300c ldr r3, [sp, #12]
2aafc: e5933004 ldr r3, [r3, #4]
2ab00: e3530000 cmp r3, #0
rtems_filesystem_location_info_t loc;
int i;
const char *name_start;
int result;
rtems_filesystem_get_start_loc( sympath, &i, &loc );
2ab04: e1a0400d mov r4, sp
if ( !loc.ops->evalformake_h ) {
2ab08: 0a000021 beq 2ab94 <symlink+0xbc>
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->evalformake_h)( &sympath[i], &loc, &name_start );
2ab0c: e59d0018 ldr r0, [sp, #24]
2ab10: e1a0100d mov r1, sp
2ab14: e0850000 add r0, r5, r0
2ab18: e28d2014 add r2, sp, #20
2ab1c: e1a0e00f mov lr, pc
2ab20: e12fff13 bx r3
if ( result != 0 )
2ab24: e3500000 cmp r0, #0
2ab28: 1a00001c bne 2aba0 <symlink+0xc8>
return -1;
if ( !loc.ops->symlink_h ) {
2ab2c: e59d200c ldr r2, [sp, #12]
2ab30: e5923038 ldr r3, [r2, #56] ; 0x38
2ab34: e3530000 cmp r3, #0
2ab38: 0a000010 beq 2ab80 <symlink+0xa8>
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->symlink_h)( &loc, actualpath, name_start);
2ab3c: e1a01006 mov r1, r6
2ab40: e1a0000d mov r0, sp
2ab44: e59d2014 ldr r2, [sp, #20]
2ab48: e1a0e00f mov lr, pc
2ab4c: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
2ab50: e59d300c ldr r3, [sp, #12]
2ab54: e3530000 cmp r3, #0
if ( !loc.ops->symlink_h ) {
rtems_filesystem_freenode( &loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->symlink_h)( &loc, actualpath, name_start);
2ab58: e1a05000 mov r5, r0
rtems_filesystem_freenode( &loc );
2ab5c: 0a000004 beq 2ab74 <symlink+0x9c>
2ab60: e593301c ldr r3, [r3, #28]
2ab64: e3530000 cmp r3, #0
2ab68: 11a0000d movne r0, sp
2ab6c: 11a0e00f movne lr, pc
2ab70: 112fff13 bxne r3
return result;
}
2ab74: e1a00005 mov r0, r5
2ab78: e28dd01c add sp, sp, #28
2ab7c: e8bd8070 pop {r4, r5, r6, pc}
result = (*loc.ops->evalformake_h)( &sympath[i], &loc, &name_start );
if ( result != 0 )
return -1;
if ( !loc.ops->symlink_h ) {
rtems_filesystem_freenode( &loc );
2ab80: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
2ab84: e3530000 cmp r3, #0 <== NOT EXECUTED
2ab88: 11a0000d movne r0, sp <== NOT EXECUTED
2ab8c: 11a0e00f movne lr, pc <== NOT EXECUTED
2ab90: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2ab94: eb006115 bl 42ff0 <__errno> <== NOT EXECUTED
2ab98: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2ab9c: e5803000 str r3, [r0] <== NOT EXECUTED
2aba0: e3e05000 mvn r5, #0
2aba4: eafffff2 b 2ab74 <symlink+0x9c>
00013464 <tcsetattr>:
int fd,
int opt,
struct termios *tp
)
{
switch (opt) {
13464: e3510000 cmp r1, #0
int tcsetattr(
int fd,
int opt,
struct termios *tp
)
{
13468: e92d4030 push {r4, r5, lr}
1346c: e1a04002 mov r4, r2
13470: e1a05000 mov r5, r0
switch (opt) {
13474: 0a00000b beq 134a8 <tcsetattr+0x44>
13478: e3510001 cmp r1, #1 <== NOT EXECUTED
1347c: 0a000004 beq 13494 <tcsetattr+0x30> <== NOT EXECUTED
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
13480: eb001178 bl 17a68 <__errno> <== NOT EXECUTED
13484: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
13488: e5803000 str r3, [r0] <== NOT EXECUTED
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
}
}
1348c: e3e00000 mvn r0, #0 <== NOT EXECUTED
13490: e8bd8030 pop {r4, r5, pc} <== NOT EXECUTED
switch (opt) {
default:
rtems_set_errno_and_return_minus_one( ENOTSUP );
case TCSADRAIN:
if (ioctl( fd, RTEMS_IO_TCDRAIN, NULL ) < 0)
13494: e3a01003 mov r1, #3 <== NOT EXECUTED
13498: e3a02000 mov r2, #0 <== NOT EXECUTED
1349c: eb000f46 bl 171bc <ioctl> <== NOT EXECUTED
134a0: e3500000 cmp r0, #0 <== NOT EXECUTED
134a4: bafffff8 blt 1348c <tcsetattr+0x28> <== NOT EXECUTED
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
134a8: e1a00005 mov r0, r5
134ac: e1a02004 mov r2, r4
134b0: e3a01002 mov r1, #2
}
}
134b4: e8bd4030 pop {r4, r5, lr}
return -1;
/*
* Fall through to....
*/
case TCSANOW:
return ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, tp );
134b8: ea000f3f b 171bc <ioctl>
0000db2c <unlink>:
#include <rtems/seterr.h>
int unlink(
const char *path
)
{
db2c: e92d40f0 push {r4, r5, r6, r7, lr}
db30: e24dd030 sub sp, sp, #48 ; 0x30
db34: e1a07000 mov r7, r0
/*
* Get the node to be unlinked. Find the parent path first.
*/
parentpathlen = rtems_filesystem_dirname ( path );
db38: ebffd0eb bl 1eec <rtems_filesystem_dirname>
if ( parentpathlen == 0 )
db3c: e2505000 subs r5, r0, #0
db40: 1a000045 bne dc5c <unlink+0x130>
rtems_filesystem_get_start_loc( path, &i, &parentloc );
db44: e28d4018 add r4, sp, #24
db48: e1a00007 mov r0, r7
db4c: e28d102c add r1, sp, #44 ; 0x2c
db50: e1a02004 mov r2, r4
db54: ebffd515 bl 2fb0 <rtems_filesystem_get_start_loc>
db58: e1a06005 mov r6, r5
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
db5c: e1a0e004 mov lr, r4
db60: e8be000f ldm lr!, {r0, r1, r2, r3}
db64: e28dc004 add ip, sp, #4
db68: e8ac000f stmia ip!, {r0, r1, r2, r3}
db6c: e59e3000 ldr r3, [lr]
name = path + parentpathlen;
db70: e0875005 add r5, r7, r5
/*
* Start from the parent to find the node that should be under it.
*/
loc = parentloc;
db74: e58c3000 str r3, [ip]
name = path + parentpathlen;
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
db78: e1a00005 mov r0, r5
db7c: eb0005d4 bl f2d4 <strlen>
db80: e1a01000 mov r1, r0
db84: e1a00005 mov r0, r5
db88: ebffd0c2 bl 1e98 <rtems_filesystem_prefix_separators>
db8c: e0857000 add r7, r5, r0
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
db90: e1a00007 mov r0, r7
db94: eb0005ce bl f2d4 <strlen>
db98: e28d5004 add r5, sp, #4
db9c: e3a0c000 mov ip, #0
dba0: e1a01000 mov r1, r0
dba4: e1a0200c mov r2, ip
dba8: e1a00007 mov r0, r7
dbac: e1a03005 mov r3, r5
dbb0: e58dc000 str ip, [sp]
dbb4: ebffd0dd bl 1f30 <rtems_filesystem_evaluate_relative_path>
0, &loc, false );
if ( result != 0 ) {
dbb8: e3500000 cmp r0, #0
dbbc: 1a000033 bne dc90 <unlink+0x164>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
return -1;
}
if ( !loc.ops->node_type_h ) {
dbc0: e59d2010 ldr r2, [sp, #16]
dbc4: e5923010 ldr r3, [r2, #16]
dbc8: e3530000 cmp r3, #0
dbcc: 0a00003c beq dcc4 <unlink+0x198>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
dbd0: e1a00005 mov r0, r5
dbd4: e1a0e00f mov lr, pc
dbd8: e12fff13 bx r3
dbdc: e3500001 cmp r0, #1
dbe0: 0a00004b beq dd14 <unlink+0x1e8>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( EISDIR );
}
if ( !loc.ops->unlink_h ) {
dbe4: e59d2010 ldr r2, [sp, #16]
dbe8: e592300c ldr r3, [r2, #12]
dbec: e3530000 cmp r3, #0
dbf0: 0a000033 beq dcc4 <unlink+0x198>
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->unlink_h)( &parentloc, &loc );
dbf4: e1a00004 mov r0, r4
dbf8: e1a01005 mov r1, r5
dbfc: e1a0e00f mov lr, pc
dc00: e12fff13 bx r3
rtems_filesystem_freenode( &loc );
dc04: e59d3010 ldr r3, [sp, #16]
dc08: e3530000 cmp r3, #0
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->unlink_h)( &parentloc, &loc );
dc0c: e1a07000 mov r7, r0
rtems_filesystem_freenode( &loc );
dc10: 0a000004 beq dc28 <unlink+0xfc>
dc14: e593301c ldr r3, [r3, #28]
dc18: e3530000 cmp r3, #0
dc1c: 11a00005 movne r0, r5
dc20: 11a0e00f movne lr, pc
dc24: 112fff13 bxne r3
if ( free_parentloc )
dc28: e3560000 cmp r6, #0
dc2c: 0a000007 beq dc50 <unlink+0x124>
rtems_filesystem_freenode( &parentloc );
dc30: e59d3024 ldr r3, [sp, #36] ; 0x24
dc34: e3530000 cmp r3, #0
dc38: 0a000004 beq dc50 <unlink+0x124>
dc3c: e593301c ldr r3, [r3, #28]
dc40: e3530000 cmp r3, #0
dc44: 11a00004 movne r0, r4
dc48: 11a0e00f movne lr, pc
dc4c: 112fff13 bxne r3
return result;
}
dc50: e1a00007 mov r0, r7
dc54: e28dd030 add sp, sp, #48 ; 0x30
dc58: e8bd80f0 pop {r4, r5, r6, r7, pc}
parentpathlen = rtems_filesystem_dirname ( path );
if ( parentpathlen == 0 )
rtems_filesystem_get_start_loc( path, &i, &parentloc );
else {
result = rtems_filesystem_evaluate_path( path, parentpathlen,
dc5c: e28d4018 add r4, sp, #24
dc60: e3a0c000 mov ip, #0
dc64: e1a00007 mov r0, r7
dc68: e1a01005 mov r1, r5
dc6c: e3a02002 mov r2, #2
dc70: e1a03004 mov r3, r4
dc74: e58dc000 str ip, [sp]
dc78: ebffd0e8 bl 2020 <rtems_filesystem_evaluate_path>
RTEMS_LIBIO_PERMS_WRITE,
&parentloc,
false );
if ( result != 0 )
dc7c: e3500000 cmp r0, #0
dc80: 03a06001 moveq r6, #1
dc84: 0affffb4 beq db5c <unlink+0x30>
result = (*loc.ops->unlink_h)( &parentloc, &loc );
rtems_filesystem_freenode( &loc );
if ( free_parentloc )
rtems_filesystem_freenode( &parentloc );
dc88: e3e07000 mvn r7, #0 <== NOT EXECUTED
dc8c: eaffffef b dc50 <unlink+0x124> <== NOT EXECUTED
name += rtems_filesystem_prefix_separators( name, strlen( name ) );
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
0, &loc, false );
if ( result != 0 ) {
if ( free_parentloc )
dc90: e3560000 cmp r6, #0
dc94: 0afffffb beq dc88 <unlink+0x15c>
rtems_filesystem_freenode( &parentloc );
dc98: e59d3024 ldr r3, [sp, #36] ; 0x24
dc9c: e3530000 cmp r3, #0
dca0: 0afffff8 beq dc88 <unlink+0x15c>
dca4: e593301c ldr r3, [r3, #28]
dca8: e3530000 cmp r3, #0
dcac: 0afffff5 beq dc88 <unlink+0x15c>
dcb0: e1a00004 mov r0, r4
dcb4: e1a0e00f mov lr, pc
dcb8: e12fff13 bx r3
dcbc: e3e07000 mvn r7, #0
dcc0: eaffffe2 b dc50 <unlink+0x124>
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( EISDIR );
}
if ( !loc.ops->unlink_h ) {
rtems_filesystem_freenode( &loc );
dcc4: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
dcc8: e3530000 cmp r3, #0 <== NOT EXECUTED
dccc: 11a00005 movne r0, r5 <== NOT EXECUTED
dcd0: 11a0e00f movne lr, pc <== NOT EXECUTED
dcd4: 112fff13 bxne r3 <== NOT EXECUTED
if ( free_parentloc )
dcd8: e3560000 cmp r6, #0 <== NOT EXECUTED
dcdc: 0a000007 beq dd00 <unlink+0x1d4> <== NOT EXECUTED
rtems_filesystem_freenode( &parentloc );
dce0: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
dce4: e3530000 cmp r3, #0 <== NOT EXECUTED
dce8: 0a000004 beq dd00 <unlink+0x1d4> <== NOT EXECUTED
dcec: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
dcf0: e3530000 cmp r3, #0 <== NOT EXECUTED
dcf4: 11a00004 movne r0, r4 <== NOT EXECUTED
dcf8: 11a0e00f movne lr, pc <== NOT EXECUTED
dcfc: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
dd00: eb00016e bl e2c0 <__errno> <== NOT EXECUTED
dd04: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
dd08: e5803000 str r3, [r0] <== NOT EXECUTED
dd0c: e3e07000 mvn r7, #0 <== NOT EXECUTED
dd10: eaffffce b dc50 <unlink+0x124> <== NOT EXECUTED
rtems_filesystem_freenode( &parentloc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
rtems_filesystem_freenode( &loc );
dd14: e59d3010 ldr r3, [sp, #16]
dd18: e3530000 cmp r3, #0
dd1c: 0a000004 beq dd34 <unlink+0x208>
dd20: e593301c ldr r3, [r3, #28]
dd24: e3530000 cmp r3, #0
dd28: 11a00005 movne r0, r5
dd2c: 11a0e00f movne lr, pc
dd30: 112fff13 bxne r3
if ( free_parentloc )
dd34: e3560000 cmp r6, #0
dd38: 0a000007 beq dd5c <unlink+0x230>
rtems_filesystem_freenode( &parentloc );
dd3c: e59d3024 ldr r3, [sp, #36] ; 0x24 <== NOT EXECUTED
dd40: e3530000 cmp r3, #0 <== NOT EXECUTED
dd44: 0a000004 beq dd5c <unlink+0x230> <== NOT EXECUTED
dd48: e593301c ldr r3, [r3, #28] <== NOT EXECUTED
dd4c: e3530000 cmp r3, #0 <== NOT EXECUTED
dd50: 11a00004 movne r0, r4 <== NOT EXECUTED
dd54: 11a0e00f movne lr, pc <== NOT EXECUTED
dd58: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( EISDIR );
dd5c: eb000157 bl e2c0 <__errno>
dd60: e3a03015 mov r3, #21
dd64: e5803000 str r3, [r0]
dd68: e3e07000 mvn r7, #0
dd6c: eaffffb7 b dc50 <unlink+0x124>
0002ac2c <unmount>:
*/
int unmount(
const char *path
)
{
2ac2c: e92d4030 push {r4, r5, lr}
2ac30: e24dd018 sub sp, sp, #24
2ac34: e1a05000 mov r5, r0
* The root node of the mounted filesytem.
* The node for the directory that the fileystem is mounted on.
* The mount entry that is being refered to.
*/
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
2ac38: eb007be9 bl 49be4 <strlen>
2ac3c: e28d4004 add r4, sp, #4
2ac40: e1a01000 mov r1, r0
2ac44: e3a0c001 mov ip, #1
2ac48: e1a00005 mov r0, r5
2ac4c: e3a02000 mov r2, #0
2ac50: e1a03004 mov r3, r4
2ac54: e58dc000 str ip, [sp]
2ac58: ebff7422 bl 7ce8 <rtems_filesystem_evaluate_path>
2ac5c: e3500000 cmp r0, #0
2ac60: 1a000028 bne 2ad08 <unmount+0xdc>
return -1;
mt_entry = loc.mt_entry;
2ac64: e59d5014 ldr r5, [sp, #20]
fs_mount_loc = &mt_entry->mt_point_node;
fs_root_loc = &mt_entry->mt_fs_root;
2ac68: e59d3004 ldr r3, [sp, #4]
2ac6c: e595201c ldr r2, [r5, #28]
2ac70: e1520003 cmp r2, r3
2ac74: 1a000040 bne 2ad7c <unmount+0x150>
/*
* Free the loc node and just use the nodes from the mt_entry .
*/
rtems_filesystem_freenode( &loc );
2ac78: e59d3010 ldr r3, [sp, #16]
2ac7c: e3530000 cmp r3, #0
2ac80: 0a000004 beq 2ac98 <unmount+0x6c>
2ac84: e593301c ldr r3, [r3, #28]
2ac88: e3530000 cmp r3, #0
2ac8c: 11a00004 movne r0, r4
2ac90: 11a0e00f movne lr, pc
2ac94: 112fff13 bxne r3
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x0, &loc, true ) )
return -1;
mt_entry = loc.mt_entry;
fs_mount_loc = &mt_entry->mt_point_node;
2ac98: e5953014 ldr r3, [r5, #20]
2ac9c: e5933028 ldr r3, [r3, #40] ; 0x28
2aca0: e3530000 cmp r3, #0
2aca4: 0a00004e beq 2ade4 <unmount+0x1b8>
fs_root_loc = &mt_entry->mt_fs_root;
2aca8: e5953028 ldr r3, [r5, #40] ; 0x28
2acac: e593302c ldr r3, [r3, #44] ; 0x2c
2acb0: e3530000 cmp r3, #0
2acb4: 0a00004a beq 2ade4 <unmount+0x1b8>
* that made the current node thread based instead
* of system based? I thought it was but it doesn't
* look like it in this version.
*/
if ( rtems_filesystem_current.mt_entry == mt_entry )
2acb8: e59f3138 ldr r3, [pc, #312] ; 2adf8 <unmount+0x1cc>
2acbc: e5933000 ldr r3, [r3]
2acc0: e5933014 ldr r3, [r3, #20]
2acc4: e1530005 cmp r3, r5
2acc8: 0a000038 beq 2adb0 <unmount+0x184>
/*
* Verify there are no file systems below the path specified
*/
if ( rtems_filesystem_mount_iterate( is_fs_below_mount_point,
2accc: e59f0128 ldr r0, [pc, #296] ; 2adfc <unmount+0x1d0>
2acd0: e595102c ldr r1, [r5, #44] ; 0x2c
2acd4: ebff76bc bl 87cc <rtems_filesystem_mount_iterate>
2acd8: e3500000 cmp r0, #0
2acdc: 1a000033 bne 2adb0 <unmount+0x184>
* Run the file descriptor table to determine if there are any file
* descriptors that are currently active and reference nodes in the
* file system that we are trying to unmount
*/
if ( rtems_libio_is_open_files_in_fs( mt_entry ) == 1 )
2ace0: e1a00005 mov r0, r5
2ace4: ebff7508 bl 810c <rtems_libio_is_open_files_in_fs>
2ace8: e3500001 cmp r0, #1
2acec: 0a00002f beq 2adb0 <unmount+0x184>
* Allow the file system being unmounted on to do its cleanup.
* If it fails it will set the errno to the approprate value
* and the fileystem will not be modified.
*/
if (( fs_mount_loc->ops->unmount_h )( mt_entry ) != 0 )
2acf0: e5953014 ldr r3, [r5, #20]
2acf4: e1a00005 mov r0, r5
2acf8: e1a0e00f mov lr, pc
2acfc: e593f028 ldr pc, [r3, #40] ; 0x28
2ad00: e2504000 subs r4, r0, #0
2ad04: 0a000002 beq 2ad14 <unmount+0xe8>
*/
rtems_filesystem_freenode( fs_mount_loc );
free( mt_entry );
return 0;
2ad08: e3e00000 mvn r0, #0
}
2ad0c: e28dd018 add sp, sp, #24
2ad10: e8bd8030 pop {r4, r5, pc}
* NOTE: Fatal error is called in a case which should never happen
* This was response was questionable but the best we could
* come up with.
*/
if ((fs_root_loc->ops->fsunmount_me_h )( mt_entry ) != 0){
2ad14: e5953028 ldr r3, [r5, #40] ; 0x28
2ad18: e1a00005 mov r0, r5
2ad1c: e1a0e00f mov lr, pc
2ad20: e593f02c ldr pc, [r3, #44] ; 0x2c
2ad24: e2501000 subs r1, r0, #0
2ad28: 1a000025 bne 2adc4 <unmount+0x198>
rtems_status_code rtems_libio_set_private_env(void);
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
static inline void rtems_libio_lock( void )
{
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
2ad2c: e59f40cc ldr r4, [pc, #204] ; 2ae00 <unmount+0x1d4>
2ad30: e1a02001 mov r2, r1
2ad34: e5940000 ldr r0, [r4]
2ad38: ebff85e1 bl c4c4 <rtems_semaphore_obtain>
*/
RTEMS_INLINE_ROUTINE void rtems_chain_extract(
rtems_chain_node *the_node
)
{
_Chain_Extract( the_node );
2ad3c: e1a00005 mov r0, r5
2ad40: ebff88da bl d0b0 <_Chain_Extract>
}
static inline void rtems_libio_unlock( void )
{
rtems_semaphore_release( rtems_libio_semaphore );
2ad44: e5940000 ldr r0, [r4]
2ad48: ebff8625 bl c5e4 <rtems_semaphore_release>
/*
* Free the memory node that was allocated in mount
* Free the memory associated with the extracted mount table entry.
*/
rtems_filesystem_freenode( fs_mount_loc );
2ad4c: e5953014 ldr r3, [r5, #20]
2ad50: e3530000 cmp r3, #0
2ad54: 0a000004 beq 2ad6c <unmount+0x140>
2ad58: e593301c ldr r3, [r3, #28]
2ad5c: e3530000 cmp r3, #0
2ad60: 12850008 addne r0, r5, #8
2ad64: 11a0e00f movne lr, pc
2ad68: 112fff13 bxne r3
free( mt_entry );
2ad6c: e1a00005 mov r0, r5
2ad70: ebff73fe bl 7d70 <free>
2ad74: e3a00000 mov r0, #0
return 0;
2ad78: eaffffe3 b 2ad0c <unmount+0xe0>
/*
* Verify this is the root node for the file system to be unmounted.
*/
if ( fs_root_loc->node_access != loc.node_access ){
rtems_filesystem_freenode( &loc );
2ad7c: e59d3010 ldr r3, [sp, #16]
2ad80: e3530000 cmp r3, #0
2ad84: 0a000004 beq 2ad9c <unmount+0x170>
2ad88: e593301c ldr r3, [r3, #28]
2ad8c: e3530000 cmp r3, #0
2ad90: 11a00004 movne r0, r4
2ad94: 11a0e00f movne lr, pc
2ad98: 112fff13 bxne r3
rtems_set_errno_and_return_minus_one( EACCES );
2ad9c: eb006093 bl 42ff0 <__errno>
2ada0: e3a0300d mov r3, #13
2ada4: e5803000 str r3, [r0]
2ada8: e3e00000 mvn r0, #0
2adac: eaffffd6 b 2ad0c <unmount+0xe0>
* descriptors that are currently active and reference nodes in the
* file system that we are trying to unmount
*/
if ( rtems_libio_is_open_files_in_fs( mt_entry ) == 1 )
rtems_set_errno_and_return_minus_one( EBUSY );
2adb0: eb00608e bl 42ff0 <__errno>
2adb4: e3a03010 mov r3, #16
2adb8: e5803000 str r3, [r0]
2adbc: e3e00000 mvn r0, #0
2adc0: eaffffd1 b 2ad0c <unmount+0xe0>
* This was response was questionable but the best we could
* come up with.
*/
if ((fs_root_loc->ops->fsunmount_me_h )( mt_entry ) != 0){
if (( fs_mount_loc->ops->mount_h )( mt_entry ) != 0 )
2adc4: e1a00005 mov r0, r5 <== NOT EXECUTED
2adc8: e5953014 ldr r3, [r5, #20] <== NOT EXECUTED
2adcc: e1a0e00f mov lr, pc <== NOT EXECUTED
2add0: e593f020 ldr pc, [r3, #32] <== NOT EXECUTED
2add4: e3500000 cmp r0, #0 <== NOT EXECUTED
2add8: 0affffca beq 2ad08 <unmount+0xdc> <== NOT EXECUTED
rtems_fatal_error_occurred( 0 );
2addc: e1a00004 mov r0, r4 <== NOT EXECUTED
2ade0: ebff8798 bl cc48 <rtems_fatal_error_occurred> <== NOT EXECUTED
if ( !fs_mount_loc->ops->unmount_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
if ( !fs_root_loc->ops->fsunmount_me_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
2ade4: eb006081 bl 42ff0 <__errno> <== NOT EXECUTED
2ade8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2adec: e5803000 str r3, [r0] <== NOT EXECUTED
2adf0: e3e00000 mvn r0, #0 <== NOT EXECUTED
2adf4: eaffffc4 b 2ad0c <unmount+0xe0> <== NOT EXECUTED
0002ae04 <utime>:
int utime(
const char *path,
const struct utimbuf *times
)
{
2ae04: e92d4070 push {r4, r5, r6, lr}
2ae08: e24dd018 sub sp, sp, #24
2ae0c: e1a05001 mov r5, r1
2ae10: e1a06000 mov r6, r0
rtems_filesystem_location_info_t temp_loc;
int result;
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
2ae14: eb007b72 bl 49be4 <strlen>
2ae18: e28d4004 add r4, sp, #4
2ae1c: e1a01000 mov r1, r0
2ae20: e3a0c001 mov ip, #1
2ae24: e1a00006 mov r0, r6
2ae28: e3a02000 mov r2, #0
2ae2c: e1a03004 mov r3, r4
2ae30: e58dc000 str ip, [sp]
2ae34: ebff73ab bl 7ce8 <rtems_filesystem_evaluate_path>
2ae38: e3500000 cmp r0, #0
2ae3c: 1a00001b bne 2aeb0 <utime+0xac>
return -1;
if ( !temp_loc.ops->utime_h ){
2ae40: e59d2010 ldr r2, [sp, #16]
2ae44: e5923030 ldr r3, [r2, #48] ; 0x30
2ae48: e3530000 cmp r3, #0
2ae4c: 0a00000f beq 2ae90 <utime+0x8c>
rtems_filesystem_freenode( &temp_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->utime_h)( &temp_loc, times->actime, times->modtime );
2ae50: e8950006 ldm r5, {r1, r2}
2ae54: e1a00004 mov r0, r4
2ae58: e1a0e00f mov lr, pc
2ae5c: e12fff13 bx r3
rtems_filesystem_freenode( &temp_loc );
2ae60: e59d3010 ldr r3, [sp, #16]
2ae64: e3530000 cmp r3, #0
if ( !temp_loc.ops->utime_h ){
rtems_filesystem_freenode( &temp_loc );
rtems_set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->utime_h)( &temp_loc, times->actime, times->modtime );
2ae68: e1a05000 mov r5, r0
rtems_filesystem_freenode( &temp_loc );
2ae6c: 0a000004 beq 2ae84 <utime+0x80>
2ae70: e593301c ldr r3, [r3, #28]
2ae74: e3530000 cmp r3, #0
2ae78: 11a00004 movne r0, r4
2ae7c: 11a0e00f movne lr, pc
2ae80: 112fff13 bxne r3
return result;
}
2ae84: e1a00005 mov r0, r5
2ae88: e28dd018 add sp, sp, #24
2ae8c: e8bd8070 pop {r4, r5, r6, pc}
if ( rtems_filesystem_evaluate_path( path, strlen( path ), 0x00, &temp_loc, true ) )
return -1;
if ( !temp_loc.ops->utime_h ){
rtems_filesystem_freenode( &temp_loc );
2ae90: e592301c ldr r3, [r2, #28] <== NOT EXECUTED
2ae94: e3530000 cmp r3, #0 <== NOT EXECUTED
2ae98: 11a00004 movne r0, r4 <== NOT EXECUTED
2ae9c: 11a0e00f movne lr, pc <== NOT EXECUTED
2aea0: 112fff13 bxne r3 <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOTSUP );
2aea4: eb006051 bl 42ff0 <__errno> <== NOT EXECUTED
2aea8: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
2aeac: e5803000 str r3, [r0] <== NOT EXECUTED
2aeb0: e3e05000 mvn r5, #0
2aeb4: eafffff2 b 2ae84 <utime+0x80>
00019ff0 <write>:
)
{
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
19ff0: e59f30bc ldr r3, [pc, #188] ; 1a0b4 <write+0xc4>
19ff4: e5933000 ldr r3, [r3]
19ff8: e1500003 cmp r0, r3
ssize_t write(
int fd,
const void *buffer,
size_t count
)
{
19ffc: e92d4810 push {r4, fp, lr}
ssize_t rc;
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
1a000: 2a00001c bcs 1a078 <write+0x88>
iop = rtems_libio_iop( fd );
1a004: e59f40ac ldr r4, [pc, #172] ; 1a0b8 <write+0xc8>
1a008: e5944000 ldr r4, [r4]
1a00c: e0844300 add r4, r4, r0, lsl #6
rtems_libio_check_is_open( iop );
1a010: e5940014 ldr r0, [r4, #20]
1a014: e3100c01 tst r0, #256 ; 0x100
1a018: 0a000016 beq 1a078 <write+0x88>
rtems_libio_check_buffer( buffer );
1a01c: e3510000 cmp r1, #0
1a020: 0a00001e beq 1a0a0 <write+0xb0>
rtems_libio_check_count( count );
1a024: e3520000 cmp r2, #0
1a028: 01a00002 moveq r0, r2
1a02c: 08bd8810 popeq {r4, fp, pc}
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
1a030: e3100004 tst r0, #4
1a034: 0a00000f beq 1a078 <write+0x88>
/*
* Now process the write() request.
*/
if ( !iop->handlers->write_h )
1a038: e594303c ldr r3, [r4, #60] ; 0x3c
1a03c: e593300c ldr r3, [r3, #12]
1a040: e3530000 cmp r3, #0
1a044: 0a000010 beq 1a08c <write+0x9c>
rtems_set_errno_and_return_minus_one( ENOTSUP );
rc = (*iop->handlers->write_h)( iop, buffer, count );
1a048: e1a00004 mov r0, r4
1a04c: e1a0e00f mov lr, pc
1a050: e12fff13 bx r3
if ( rc > 0 )
1a054: e3500000 cmp r0, #0
1a058: d8bd8810 pople {r4, fp, pc}
iop->offset += rc;
1a05c: e284c00c add ip, r4, #12
1a060: e89c1800 ldm ip, {fp, ip}
1a064: e09b2000 adds r2, fp, r0
1a068: e0ac3fc0 adc r3, ip, r0, asr #31
1a06c: e584200c str r2, [r4, #12]
1a070: e5843010 str r3, [r4, #16]
return rc;
}
1a074: e8bd8810 pop {r4, fp, pc}
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
rtems_libio_check_count( count );
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
1a078: ebffd090 bl e2c0 <__errno> <== NOT EXECUTED
1a07c: e3a03009 mov r3, #9 <== NOT EXECUTED
1a080: e5803000 str r3, [r0] <== NOT EXECUTED
1a084: e3e00000 mvn r0, #0 <== NOT EXECUTED
1a088: e8bd8810 pop {r4, fp, pc} <== NOT EXECUTED
/*
* Now process the write() request.
*/
if ( !iop->handlers->write_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
1a08c: ebffd08b bl e2c0 <__errno> <== NOT EXECUTED
1a090: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
1a094: e5803000 str r3, [r0] <== NOT EXECUTED
1a098: e3e00000 mvn r0, #0 <== NOT EXECUTED
1a09c: e8bd8810 pop {r4, fp, pc} <== NOT EXECUTED
rtems_libio_t *iop;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_buffer( buffer );
1a0a0: ebffd086 bl e2c0 <__errno> <== NOT EXECUTED
1a0a4: e3a03016 mov r3, #22 <== NOT EXECUTED
1a0a8: e5803000 str r3, [r0] <== NOT EXECUTED
1a0ac: e3e00000 mvn r0, #0 <== NOT EXECUTED
1a0b0: e8bd8810 pop {r4, fp, pc} <== NOT EXECUTED
00006204 <writev>:
int bytes;
rtems_libio_t *iop;
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
6204: e59f3174 ldr r3, [pc, #372] ; 6380 <writev+0x17c>
6208: e5933000 ldr r3, [r3]
620c: e1500003 cmp r0, r3
ssize_t writev(
int fd,
const struct iovec *iov,
int iovcnt
)
{
6210: e92d49f0 push {r4, r5, r6, r7, r8, fp, lr}
6214: e1a05002 mov r5, r2
int bytes;
rtems_libio_t *iop;
ssize_t old;
bool all_zeros;
rtems_libio_check_fd( fd );
6218: 2a00004c bcs 6350 <writev+0x14c>
iop = rtems_libio_iop( fd );
621c: e59f3160 ldr r3, [pc, #352] ; 6384 <writev+0x180>
6220: e5937000 ldr r7, [r3]
6224: e0877300 add r7, r7, r0, lsl #6
rtems_libio_check_is_open( iop );
6228: e5973014 ldr r3, [r7, #20]
622c: e3130c01 tst r3, #256 ; 0x100
6230: 0a000046 beq 6350 <writev+0x14c>
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
6234: e3130004 tst r3, #4
6238: 0a000044 beq 6350 <writev+0x14c>
/*
* Argument validation on IO vector
*/
if ( !iov )
623c: e3510000 cmp r1, #0
6240: 0a00003c beq 6338 <writev+0x134>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt <= 0 )
6244: e3520000 cmp r2, #0
6248: da00003a ble 6338 <writev+0x134>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iovcnt > IOV_MAX )
624c: e3520b01 cmp r2, #1024 ; 0x400
6250: ca000038 bgt 6338 <writev+0x134>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !iop->handlers->write_h )
6254: e597303c ldr r3, [r7, #60] ; 0x3c
6258: e593300c ldr r3, [r3, #12]
625c: e3530000 cmp r3, #0
6260: 0a000041 beq 636c <writev+0x168>
rtems_set_errno_and_return_minus_one( ENOTSUP );
6264: e1a04001 mov r4, r1
6268: e3a01000 mov r1, #0
626c: e1a02004 mov r2, r4
6270: e3a06001 mov r6, #1
6274: e1a08001 mov r8, r1
6278: ea000000 b 6280 <writev+0x7c>
* this loop does that check as well and sets "all-zero" appropriately.
* The variable "all_zero" is used as an early exit point before
* entering the write loop.
*/
all_zeros = true;
for ( old=0, total=0, v=0 ; v < iovcnt ; v++ ) {
627c: e1a08003 mov r8, r3
if ( !iov[v].iov_base )
6280: e5923000 ldr r3, [r2]
6284: e3530000 cmp r3, #0
* this loop does that check as well and sets "all-zero" appropriately.
* The variable "all_zero" is used as an early exit point before
* entering the write loop.
*/
all_zeros = true;
for ( old=0, total=0, v=0 ; v < iovcnt ; v++ ) {
6288: e2811001 add r1, r1, #1
if ( !iov[v].iov_base )
628c: 0a000029 beq 6338 <writev+0x134>
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
6290: e5920004 ldr r0, [r2, #4]
all_zeros = false;
/* check for wrap */
old = total;
total += iov[v].iov_len;
6294: e0883000 add r3, r8, r0
if ( total < old || total > SSIZE_MAX )
6298: e1580003 cmp r8, r3
629c: d3a08000 movle r8, #0
62a0: c3a08001 movgt r8, #1
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len < 0 )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( iov[v].iov_len )
62a4: e3500000 cmp r0, #0
62a8: 13a06000 movne r6, #0
all_zeros = false;
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old || total > SSIZE_MAX )
62ac: e1988fa3 orrs r8, r8, r3, lsr #31
62b0: 1a000020 bne 6338 <writev+0x134>
* this loop does that check as well and sets "all-zero" appropriately.
* The variable "all_zero" is used as an early exit point before
* entering the write loop.
*/
all_zeros = true;
for ( old=0, total=0, v=0 ; v < iovcnt ; v++ ) {
62b4: e1550001 cmp r5, r1
62b8: e2822008 add r2, r2, #8
62bc: caffffee bgt 627c <writev+0x78>
}
/*
* A writev with all zeros is supposed to have no effect per OpenGroup.
*/
if ( all_zeros == true ) {
62c0: e3560000 cmp r6, #0
62c4: 1a00001f bne 6348 <writev+0x144>
62c8: e1a08006 mov r8, r6
62cc: ea000002 b 62dc <writev+0xd8>
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
62d0: e1550006 cmp r5, r6
62d4: e2844008 add r4, r4, #8
62d8: da00001a ble 6348 <writev+0x144>
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
62dc: e5942004 ldr r2, [r4, #4]
62e0: e3520000 cmp r2, #0
}
/*
* Now process the writev().
*/
for ( total=0, v=0 ; v < iovcnt ; v++ ) {
62e4: e2866001 add r6, r6, #1
/* all zero lengths has no effect */
if ( iov[v].iov_len == 0 )
62e8: 0afffff8 beq 62d0 <writev+0xcc>
continue;
bytes = (*iop->handlers->write_h)( iop, iov[v].iov_base, iov[v].iov_len );
62ec: e5941000 ldr r1, [r4]
62f0: e597303c ldr r3, [r7, #60] ; 0x3c
62f4: e1a00007 mov r0, r7
62f8: e1a0e00f mov lr, pc
62fc: e593f00c ldr pc, [r3, #12]
if ( bytes < 0 )
6300: e3500000 cmp r0, #0
6304: ba000016 blt 6364 <writev+0x160>
return -1;
if ( bytes > 0 ) {
6308: 0a000006 beq 6328 <writev+0x124>
iop->offset += bytes;
630c: e287c00c add ip, r7, #12
6310: e89c1800 ldm ip, {fp, ip}
6314: e09b2000 adds r2, fp, r0
6318: e0ac3fc0 adc r3, ip, r0, asr #31
631c: e587200c str r2, [r7, #12]
6320: e5873010 str r3, [r7, #16]
total += bytes;
6324: e0888000 add r8, r8, r0
}
if (bytes != iov[ v ].iov_len)
6328: e5943004 ldr r3, [r4, #4]
632c: e1500003 cmp r0, r3
6330: 0affffe6 beq 62d0 <writev+0xcc>
6334: ea000003 b 6348 <writev+0x144> <== NOT EXECUTED
/* check for wrap */
old = total;
total += iov[v].iov_len;
if ( total < old || total > SSIZE_MAX )
rtems_set_errno_and_return_minus_one( EINVAL );
6338: eb002451 bl f484 <__errno>
633c: e3a03016 mov r3, #22
6340: e5803000 str r3, [r0]
6344: e3e08000 mvn r8, #0
if (bytes != iov[ v ].iov_len)
break;
}
return total;
}
6348: e1a00008 mov r0, r8
634c: e8bd89f0 pop {r4, r5, r6, r7, r8, fp, pc}
bool all_zeros;
rtems_libio_check_fd( fd );
iop = rtems_libio_iop( fd );
rtems_libio_check_is_open( iop );
rtems_libio_check_permissions_with_error( iop, LIBIO_FLAGS_WRITE, EBADF );
6350: eb00244b bl f484 <__errno>
6354: e3a03009 mov r3, #9
6358: e5803000 str r3, [r0]
635c: e3e08000 mvn r8, #0
6360: eafffff8 b 6348 <writev+0x144>
if ( iov[v].iov_len == 0 )
continue;
bytes = (*iop->handlers->write_h)( iop, iov[v].iov_base, iov[v].iov_len );
if ( bytes < 0 )
6364: e3e08000 mvn r8, #0 <== NOT EXECUTED
6368: eafffff6 b 6348 <writev+0x144> <== NOT EXECUTED
if ( iovcnt > IOV_MAX )
rtems_set_errno_and_return_minus_one( EINVAL );
if ( !iop->handlers->write_h )
rtems_set_errno_and_return_minus_one( ENOTSUP );
636c: eb002444 bl f484 <__errno> <== NOT EXECUTED
6370: e3a03086 mov r3, #134 ; 0x86 <== NOT EXECUTED
6374: e5803000 str r3, [r0] <== NOT EXECUTED
6378: e3e08000 mvn r8, #0 <== NOT EXECUTED
637c: eafffff1 b 6348 <writev+0x144> <== NOT EXECUTED