RTEMS-6
Annotated Report
libimfs
Sun Feb 28 23:45:50 2021
001079cc <IMFS_add_node>:
#endif
#include <rtems/imfs.h>
int IMFS_add_node( const char *path, IMFS_jnode_t *node, void *arg )
{
1079cc: b5f0 push {r4, r5, r6, r7, lr}
1079ce: b095 sub sp, #84 ; 0x54
rtems_filesystem_eval_path_context_t ctx;
const rtems_filesystem_location_info_t *currentloc;
int eval_flags;
int rv;
mode = node->st_mode;
1079d0: 694c ldr r4, [r1, #20]
{
1079d2: 460d mov r5, r1
1079d4: 4606 mov r6, r0
1079d6: 4617 mov r7, r2
mode &= ~rtems_filesystem_umask;
1079d8: f7ff fece bl 107778 <rtems_current_user_env_get>
1079dc: 6883 ldr r3, [r0, #8]
1079de: ea24 0403 bic.w r4, r4, r3
switch (mode & S_IFMT) {
1079e2: f404 4370 and.w r3, r4, #61440 ; 0xf000
1079e6: f5b3 4fc0 cmp.w r3, #24576 ; 0x6000
1079ea: d014 beq.n 107a16 <IMFS_add_node+0x4a> <== ALWAYS TAKEN
1079ec: d90d bls.n 107a0a <IMFS_add_node+0x3e> <== NEVER TAKEN
1079ee: f404 4330 and.w r3, r4, #45056 ; 0xb000 <== NOT EXECUTED
1079f2: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 <== NOT EXECUTED
1079f6: d00e beq.n 107a16 <IMFS_add_node+0x4a> <== NOT EXECUTED
case S_IFIFO:
case S_IFREG:
case S_IFSOCK:
break;
default:
errno = EINVAL;
1079f8: f008 fe98 bl 11072c <__errno>
return -1;
1079fc: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
errno = EINVAL;
107a00: 2316 movs r3, #22
107a02: 6003 str r3, [r0, #0]
rv = -1;
}
rtems_filesystem_eval_path_cleanup( &ctx );
return rv;
}
107a04: 4620 mov r0, r4
107a06: b015 add sp, #84 ; 0x54
107a08: bdf0 pop {r4, r5, r6, r7, pc}
switch (mode & S_IFMT) {
107a0a: f5a3 5380 sub.w r3, r3, #4096 ; 0x1000
107a0e: f423 5380 bic.w r3, r3, #4096 ; 0x1000
107a12: 2b00 cmp r3, #0
107a14: d1f0 bne.n 1079f8 <IMFS_add_node+0x2c>
currentloc = rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
107a16: 2218 movs r2, #24
107a18: 4631 mov r1, r6
107a1a: eb0d 0002 add.w r0, sp, r2
107a1e: f7ff fb73 bl 107108 <rtems_filesystem_eval_path_start>
return loc->mt_entry->ops->clonenod_h == IMFS_node_clone;
107a22: 6943 ldr r3, [r0, #20]
107a24: 68db ldr r3, [r3, #12]
if ( IMFS_is_imfs_instance( currentloc ) ) {
107a26: 6a5a ldr r2, [r3, #36] ; 0x24
107a28: f248 6345 movw r3, #34373 ; 0x8645
107a2c: f2c0 0310 movt r3, #16
107a30: 429a cmp r2, r3
107a32: d00b beq.n 107a4c <IMFS_add_node+0x80>
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
107a34: 2186 movs r1, #134 ; 0x86
107a36: a806 add r0, sp, #24
rv = -1;
107a38: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
107a3c: f7ff fbc8 bl 1071d0 <rtems_filesystem_eval_path_error>
rtems_filesystem_eval_path_cleanup( &ctx );
107a40: a806 add r0, sp, #24
107a42: f7ff fbe5 bl 107210 <rtems_filesystem_eval_path_cleanup>
}
107a46: 4620 mov r0, r4
107a48: b015 add sp, #84 ; 0x54
107a4a: bdf0 pop {r4, r5, r6, r7, pc}
ctx->flags = flags;
107a4c: 2360 movs r3, #96 ; 0x60
rtems_filesystem_eval_path_continue( &ctx );
107a4e: a806 add r0, sp, #24
107a50: 930a str r3, [sp, #40] ; 0x28
rtems_filesystem_eval_path_set_path( &ctx, node->name, node->namelen );
107a52: 8a2b ldrh r3, [r5, #16]
ctx->pathlen = pathlen;
107a54: 9307 str r3, [sp, #28]
ctx->path = path;
107a56: 68eb ldr r3, [r5, #12]
107a58: 9306 str r3, [sp, #24]
rtems_filesystem_eval_path_continue( &ctx );
107a5a: f7ff fac1 bl 106fe0 <rtems_filesystem_eval_path_continue>
return ctx->token;
107a5e: 9b08 ldr r3, [sp, #32]
if ( rtems_filesystem_eval_path_get_token( &ctx ) == node->name ) {
107a60: 68ea ldr r2, [r5, #12]
107a62: 429a cmp r2, r3
107a64: d007 beq.n 107a76 <IMFS_add_node+0xaa>
if ( rtems_filesystem_eval_path_get_token( &ctx ) != NULL ) {
107a66: b17b cbz r3, 107a88 <IMFS_add_node+0xbc>
rtems_filesystem_eval_path_error( &ctx, EINVAL );
107a68: 2116 movs r1, #22
107a6a: a806 add r0, sp, #24
rv = -1;
107a6c: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
rtems_filesystem_eval_path_error( &ctx, EINVAL );
107a70: f7ff fbae bl 1071d0 <rtems_filesystem_eval_path_error>
107a74: e7e4 b.n 107a40 <IMFS_add_node+0x74>
node = IMFS_initialize_node(
107a76: 9701 str r7, [sp, #4]
107a78: 4628 mov r0, r5
107a7a: 8a2b ldrh r3, [r5, #16]
107a7c: 9400 str r4, [sp, #0]
107a7e: 6ba9 ldr r1, [r5, #56] ; 0x38
107a80: f000 fdb0 bl 1085e4 <IMFS_initialize_node>
if ( node != NULL ) {
107a84: 4603 mov r3, r0
107a86: b910 cbnz r0, 107a8e <IMFS_add_node+0xc2>
rv = -1;
107a88: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
107a8c: e7d8 b.n 107a40 <IMFS_add_node+0x74>
parent = currentloc->node_access;
107a8e: 9d0e ldr r5, [sp, #56] ; 0x38
rv = 0;
107a90: 2400 movs r4, #0
old_last = tail->previous;
107a92: 6caa ldr r2, [r5, #72] ; 0x48
return &the_chain->Tail.Node;
107a94: f105 0144 add.w r1, r5, #68 ; 0x44
entry_node->Parent = dir_node;
107a98: 6085 str r5, [r0, #8]
the_node->next = tail;
107a9a: 6001 str r1, [r0, #0]
_Timecounter_Getbintime( &now );
107a9c: a802 add r0, sp, #8
tail->previous = the_node;
107a9e: 64ab str r3, [r5, #72] ; 0x48
old_last->next = the_node;
107aa0: 6013 str r3, [r2, #0]
the_node->previous = old_last;
107aa2: 605a str r2, [r3, #4]
107aa4: f002 f90c bl 109cc0 <_Timecounter_Getbintime>
return now.sec;
107aa8: e9dd 2302 ldrd r2, r3, [sp, #8]
jnode->stat_mtime = now;
107aac: e9c5 230a strd r2, r3, [r5, #40] ; 0x28
jnode->stat_ctime = now;
107ab0: e9c5 230c strd r2, r3, [r5, #48] ; 0x30
}
107ab4: e7c4 b.n 107a40 <IMFS_add_node+0x74>
107ab6: bf00 nop
00108674 <IMFS_do_nothing_destroy>:
void IMFS_do_nothing_destroy( IMFS_jnode_t *node )
{
(void) node;
}
108674: 4770 bx lr <== NOT EXECUTED
108676: bf00 nop
00105510 <IMFS_eval_path_devfs>:
return NULL;
}
void IMFS_eval_path_devfs( rtems_filesystem_eval_path_context_t *ctx )
{
105510: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
return ctx->pathlen;
105514: 2301 movs r3, #1
105516: e9d0 8500 ldrd r8, r5, [r0]
10551a: 4606 mov r6, r0
rtems_filesystem_location_info_t *currentloc;
IMFS_directory_t *dir;
IMFS_jnode_t *entry;
currentloc = rtems_filesystem_eval_path_get_currentloc( ctx );
dir = currentloc->node_access;
10551c: 4c26 ldr r4, [pc, #152] ; (1055b8 <IMFS_eval_path_devfs+0xa8>)
&& memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0;
10551e: 429d cmp r5, r3
dir = currentloc->node_access;
105520: 6a07 ldr r7, [r0, #32]
for ( i = 0; i < RTEMS_ARRAY_SIZE( IMFS_devfs_dirs ); ++i ) {
105522: f104 0910 add.w r9, r4, #16
&& memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0;
105526: d006 beq.n 105536 <IMFS_eval_path_devfs+0x26> <== ALWAYS TAKEN
for ( i = 0; i < RTEMS_ARRAY_SIZE( IMFS_devfs_dirs ); ++i ) {
105528: 3404 adds r4, #4
10552a: 45a1 cmp r9, r4
10552c: d013 beq.n 105556 <IMFS_eval_path_devfs+0x46>
match = IMFS_devfs_dirs[ i ].len == pathlen
10552e: f814 3c01 ldrb.w r3, [r4, #-1]
&& memcmp( IMFS_devfs_dirs[ i ].name, path, pathlen ) == 0;
105532: 429d cmp r5, r3
105534: d1f8 bne.n 105528 <IMFS_eval_path_devfs+0x18>
105536: 462a mov r2, r5
105538: 4641 mov r1, r8
10553a: 4620 mov r0, r4
10553c: f005 fae0 bl 10ab00 <memcmp>
105540: 2800 cmp r0, #0
105542: d1f1 bne.n 105528 <IMFS_eval_path_devfs+0x18> <== ALWAYS TAKEN
eval_flags &= ~RTEMS_FS_EXCLUSIVE;
105544: 6933 ldr r3, [r6, #16]
105546: 463d mov r5, r7
ctx->pathlen = 0;
105548: 6070 str r0, [r6, #4]
10554a: f023 0340 bic.w r3, r3, #64 ; 0x40
ctx->flags = flags;
10554e: 6133 str r3, [r6, #16]
entry = IMFS_devfs_is_dir( ctx, dir );
if ( entry != NULL ) {
105550: b10f cbz r7, 105556 <IMFS_eval_path_devfs+0x46>
rtems_filesystem_eval_path_get_path( ctx ),
rtems_filesystem_eval_path_get_pathlen( ctx )
);
rtems_filesystem_eval_path_clear_path( ctx );
}
}
105552: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
return _Chain_Immutable_head( the_chain )->next;
105556: 6c3c ldr r4, [r7, #64] ; 0x40
return &the_chain->Tail.Node;
105558: f107 0944 add.w r9, r7, #68 ; 0x44
while ( current != tail ) {
10555c: 454c cmp r4, r9
10555e: d103 bne.n 105568 <IMFS_eval_path_devfs+0x58> <== NEVER TAKEN
105560: e025 b.n 1055ae <IMFS_eval_path_devfs+0x9e> <== NOT EXECUTED
return the_node->next;
105562: 6824 ldr r4, [r4, #0]
105564: 45a1 cmp r9, r4
105566: d022 beq.n 1055ae <IMFS_eval_path_devfs+0x9e>
match = entry->namelen == pathlen
105568: 8a23 ldrh r3, [r4, #16]
&& memcmp( entry->name, path, pathlen ) == 0;
10556a: 42ab cmp r3, r5
10556c: d1f9 bne.n 105562 <IMFS_eval_path_devfs+0x52>
10556e: 68e0 ldr r0, [r4, #12]
105570: 462a mov r2, r5
105572: 4641 mov r1, r8
105574: f005 fac4 bl 10ab00 <memcmp>
105578: 2800 cmp r0, #0
10557a: d1f2 bne.n 105562 <IMFS_eval_path_devfs+0x52>
if ( ( eval_flags & RTEMS_FS_EXCLUSIVE ) == 0 ) {
10557c: 6933 ldr r3, [r6, #16]
10557e: f013 0340 ands.w r3, r3, #64 ; 0x40
105582: d10e bne.n 1055a2 <IMFS_eval_path_devfs+0x92> <== ALWAYS TAKEN
--dir->Node.reference_count;
105584: 8b3a ldrh r2, [r7, #24]
loc->handlers = node->control->handlers;
105586: 6ba1 ldr r1, [r4, #56] ; 0x38
105588: 3a01 subs r2, #1
10558a: 833a strh r2, [r7, #24]
++entry->reference_count;
10558c: 8b22 ldrh r2, [r4, #24]
10558e: 6809 ldr r1, [r1, #0]
105590: 3201 adds r2, #1
105592: 8322 strh r2, [r4, #24]
currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry );
105594: 6c22 ldr r2, [r4, #64] ; 0x40
currentloc->node_access = entry;
105596: 6234 str r4, [r6, #32]
105598: 62b1 str r1, [r6, #40] ; 0x28
ctx->pathlen = 0;
10559a: 6073 str r3, [r6, #4]
currentloc->node_access_2 = IMFS_generic_get_context_by_node( entry );
10559c: 6272 str r2, [r6, #36] ; 0x24
}
10559e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
rtems_filesystem_eval_path_error( ctx, EEXIST );
1055a2: 4630 mov r0, r6 <== NOT EXECUTED
1055a4: 2111 movs r1, #17 <== NOT EXECUTED
}
1055a6: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} <== NOT EXECUTED
rtems_filesystem_eval_path_error( ctx, EEXIST );
1055aa: f7ff bbdd b.w 104d68 <rtems_filesystem_eval_path_error> <== NOT EXECUTED
1055ae: 2300 movs r3, #0
ctx->tokenlen = tokenlen;
1055b0: e9c6 8502 strd r8, r5, [r6, #8]
ctx->pathlen = 0;
1055b4: 6073 str r3, [r6, #4]
}
1055b6: e7cc b.n 105552 <IMFS_eval_path_devfs+0x42>
1055b8: 0010ba21 .word 0x0010ba21
00108878 <IMFS_fsunmount>:
((IMFS_jnode_t *)( rtems_chain_head( jnode_get_control( jnode ) )->next))
void IMFS_fsunmount(
rtems_filesystem_mount_table_entry_t *temp_mt_entry
)
{
108878: b570 push {r4, r5, r6, lr}
10887a: b086 sub sp, #24
/*
* Traverse tree that starts at the mt_fs_root and deallocate memory
* associated memory space
*/
loc = temp_mt_entry->mt_fs_root->location;
10887c: 6a46 ldr r6, [r0, #36] ; 0x24
10887e: 466d mov r5, sp
108880: ce0f ldmia r6!, {r0, r1, r2, r3}
108882: c50f stmia r5!, {r0, r1, r2, r3}
jnode = (IMFS_jnode_t *)loc.node_access;
108884: 4614 mov r4, r2
return S_ISDIR( node->st_mode );
108886: 6953 ldr r3, [r2, #20]
loc = temp_mt_entry->mt_fs_root->location;
108888: e896 0003 ldmia.w r6, {r0, r1}
10888c: f403 4370 and.w r3, r3, #61440 ; 0xf000
108890: e885 0003 stmia.w r5, {r0, r1}
loc->handlers = node->control->handlers;
108894: 6ba2 ldr r2, [r4, #56] ; 0x38
do {
next = jnode->Parent;
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) {
108896: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
next = jnode->Parent;
10889a: 68a5 ldr r5, [r4, #8]
loc.node_access = (void *)jnode;
10889c: 9402 str r4, [sp, #8]
10889e: 6812 ldr r2, [r2, #0]
1088a0: 9204 str r2, [sp, #16]
if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) {
1088a2: d10b bne.n 1088bc <IMFS_fsunmount+0x44>
return _Chain_Immutable_head( the_chain )->next;
1088a4: 6c22 ldr r2, [r4, #64] ; 0x40
return &the_chain->Tail.Node;
1088a6: f104 0344 add.w r3, r4, #68 ; 0x44
1088aa: 429a cmp r2, r3
1088ac: d006 beq.n 1088bc <IMFS_fsunmount+0x44>
if ( IMFS_is_directory( jnode ) ) {
if ( jnode_has_children( jnode ) )
jnode = jnode_get_first_child( jnode );
}
}
} while (jnode != NULL);
1088ae: b1da cbz r2, 1088e8 <IMFS_fsunmount+0x70>
return S_ISDIR( node->st_mode );
1088b0: 6953 ldr r3, [r2, #20]
1088b2: 4615 mov r5, r2
1088b4: f403 4370 and.w r3, r3, #61440 ; 0xf000
1088b8: 462c mov r4, r5
1088ba: e7eb b.n 108894 <IMFS_fsunmount+0x1c>
result = IMFS_rmnod( NULL, &loc );
1088bc: 4669 mov r1, sp
1088be: 2000 movs r0, #0
1088c0: f7fe f80e bl 1068e0 <IMFS_rmnod>
if ( result != 0 )
1088c4: b990 cbnz r0, 1088ec <IMFS_fsunmount+0x74>
IMFS_node_destroy( jnode );
1088c6: 4620 mov r0, r4
1088c8: f7fd ff80 bl 1067cc <IMFS_node_destroy>
if ( jnode != NULL ) {
1088cc: b165 cbz r5, 1088e8 <IMFS_fsunmount+0x70>
1088ce: 696b ldr r3, [r5, #20]
1088d0: f403 4370 and.w r3, r3, #61440 ; 0xf000
if ( IMFS_is_directory( jnode ) ) {
1088d4: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
1088d8: d1ee bne.n 1088b8 <IMFS_fsunmount+0x40> <== ALWAYS TAKEN
return _Chain_Immutable_head( the_chain )->next;
1088da: 6c2a ldr r2, [r5, #64] ; 0x40
return &the_chain->Tail.Node;
1088dc: f105 0144 add.w r1, r5, #68 ; 0x44
if ( jnode_has_children( jnode ) )
1088e0: 428a cmp r2, r1
1088e2: d1e4 bne.n 1088ae <IMFS_fsunmount+0x36>
1088e4: 462c mov r4, r5
1088e6: e7d5 b.n 108894 <IMFS_fsunmount+0x1c>
}
1088e8: b006 add sp, #24
1088ea: bd70 pop {r4, r5, r6, pc}
rtems_fatal_error_occurred( 0xdeadbeef );
1088ec: f64b 60ef movw r0, #48879 ; 0xbeef <== NOT EXECUTED
1088f0: f6cd 60ad movt r0, #57005 ; 0xdead <== NOT EXECUTED
1088f4: f7fe f924 bl 106b40 <rtems_fatal_error_occurred> <== NOT EXECUTED
00107eb4 <IMFS_make_node>:
mode_t mode,
const IMFS_node_control *node_control,
size_t node_size,
void *context
)
{
107eb4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
107eb8: b096 sub sp, #88 ; 0x58
107eba: 460c mov r4, r1
107ebc: 4680 mov r8, r0
107ebe: 4616 mov r6, r2
107ec0: 461f mov r7, r3
int rv = 0;
mode &= ~rtems_filesystem_umask;
107ec2: f7ff fc59 bl 107778 <rtems_current_user_env_get>
107ec6: 6881 ldr r1, [r0, #8]
107ec8: ea24 0401 bic.w r4, r4, r1
switch (mode & S_IFMT) {
107ecc: f404 4c70 and.w ip, r4, #61440 ; 0xf000
107ed0: f5bc 4fc0 cmp.w ip, #24576 ; 0x6000
107ed4: d015 beq.n 107f02 <IMFS_make_node+0x4e>
107ed6: d90e bls.n 107ef6 <IMFS_make_node+0x42>
107ed8: f404 4330 and.w r3, r4, #45056 ; 0xb000
107edc: f5b3 4f00 cmp.w r3, #32768 ; 0x8000
107ee0: d00f beq.n 107f02 <IMFS_make_node+0x4e> <== NEVER TAKEN
case S_IFIFO:
case S_IFREG:
case S_IFSOCK:
break;
default:
errno = EINVAL;
107ee2: f008 fc23 bl 11072c <__errno>
rv = -1;
107ee6: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
errno = EINVAL;
107eea: 2316 movs r3, #22
107eec: 6003 str r3, [r0, #0]
rtems_filesystem_eval_path_cleanup( &ctx );
}
return rv;
}
107eee: 4620 mov r0, r4
107ef0: b016 add sp, #88 ; 0x58
107ef2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
switch (mode & S_IFMT) {
107ef6: f5ac 5c80 sub.w ip, ip, #4096 ; 0x1000
107efa: f42c 5580 bic.w r5, ip, #4096 ; 0x1000
107efe: 2d00 cmp r5, #0
107f00: d1ef bne.n 107ee2 <IMFS_make_node+0x2e>
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
107f02: 2278 movs r2, #120 ; 0x78
107f04: 4641 mov r1, r8
107f06: a808 add r0, sp, #32
107f08: f7ff f8fe bl 107108 <rtems_filesystem_eval_path_start>
return loc->mt_entry->ops->clonenod_h == IMFS_node_clone;
107f0c: 6942 ldr r2, [r0, #20]
if ( IMFS_is_imfs_instance( currentloc ) ) {
107f0e: f248 6345 movw r3, #34373 ; 0x8645
107f12: f2c0 0310 movt r3, #16
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
107f16: 4605 mov r5, r0
107f18: 68d2 ldr r2, [r2, #12]
if ( IMFS_is_imfs_instance( currentloc ) ) {
107f1a: 6a52 ldr r2, [r2, #36] ; 0x24
107f1c: 429a cmp r2, r3
107f1e: d00c beq.n 107f3a <IMFS_make_node+0x86>
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
107f20: 2186 movs r1, #134 ; 0x86
107f22: a808 add r0, sp, #32
rv = -1;
107f24: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
rtems_filesystem_eval_path_error( &ctx, ENOTSUP );
107f28: f7ff f952 bl 1071d0 <rtems_filesystem_eval_path_error>
rtems_filesystem_eval_path_cleanup( &ctx );
107f2c: a808 add r0, sp, #32
107f2e: f7ff f96f bl 107210 <rtems_filesystem_eval_path_cleanup>
}
107f32: 4620 mov r0, r4
107f34: b016 add sp, #88 ; 0x58
107f36: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
IMFS_jnode_t *new_node = IMFS_create_node(
107f3a: 9b1c ldr r3, [sp, #112] ; 0x70
107f3c: 463a mov r2, r7
107f3e: 9401 str r4, [sp, #4]
107f40: 4631 mov r1, r6
rv = -1;
107f42: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff
IMFS_jnode_t *new_node = IMFS_create_node(
107f46: 9302 str r3, [sp, #8]
107f48: 9b0b ldr r3, [sp, #44] ; 0x2c
107f4a: 9300 str r3, [sp, #0]
107f4c: 9b0a ldr r3, [sp, #40] ; 0x28
107f4e: f006 f801 bl 10df54 <IMFS_create_node>
if ( new_node != NULL ) {
107f52: 2800 cmp r0, #0
107f54: d0ea beq.n 107f2c <IMFS_make_node+0x78>
_Timecounter_Getbintime( &now );
107f56: a804 add r0, sp, #16
IMFS_jnode_t *parent = currentloc->node_access;
107f58: 68ad ldr r5, [r5, #8]
107f5a: f001 feb1 bl 109cc0 <_Timecounter_Getbintime>
return now.sec;
107f5e: e9dd 2304 ldrd r2, r3, [sp, #16]
int rv = 0;
107f62: 2400 movs r4, #0
jnode->stat_mtime = now;
107f64: e9c5 230a strd r2, r3, [r5, #40] ; 0x28
jnode->stat_ctime = now;
107f68: e9c5 230c strd r2, r3, [r5, #48] ; 0x30
}
107f6c: e7de b.n 107f2c <IMFS_make_node+0x78>
107f6e: bf00 nop
00108418 <IMFS_memfile_write>:
{
108418: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
10841c: b085 sub sp, #20
10841e: 9d0d ldr r5, [sp, #52] ; 0x34
108420: 461e mov r6, r3
108422: 4614 mov r4, r2
108424: 4681 mov r9, r0
if ( last_byte > memfile->File.size ) {
108426: 6c03 ldr r3, [r0, #64] ; 0x40
last_byte = start + my_length;
108428: 18aa adds r2, r5, r2
{
10842a: 9f0c ldr r7, [sp, #48] ; 0x30
if ( last_byte > memfile->File.size ) {
10842c: 4293 cmp r3, r2
10842e: d342 bcc.n 1084b6 <IMFS_memfile_write+0x9e>
start_offset = start % IMFS_MEMFILE_BYTES_PER_BLOCK;
108430: f647 03cc movw r3, #30924 ; 0x78cc
108434: 4620 mov r0, r4
108436: f2c0 0311 movt r3, #17
10843a: 4631 mov r1, r6
10843c: 681c ldr r4, [r3, #0]
10843e: 4622 mov r2, r4
108440: 17e3 asrs r3, r4, #31
108442: f007 ff57 bl 1102f4 <__aeabi_ldivmod>
block = start / IMFS_MEMFILE_BYTES_PER_BLOCK;
108446: 4606 mov r6, r0
if ( start_offset ) {
108448: 4690 mov r8, r2
10844a: 2a00 cmp r2, #0
10844c: d141 bne.n 1084d2 <IMFS_memfile_write+0xba>
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10844e: 42a5 cmp r5, r4
108450: d206 bcs.n 108460 <IMFS_memfile_write+0x48>
108452: e015 b.n 108480 <IMFS_memfile_write+0x68>
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
108454: 6800 ldr r0, [r0, #0]
108456: 44a0 add r8, r4
108458: f008 eb32 blx 110ac0 <memcpy>
while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) {
10845c: 42ac cmp r4, r5
10845e: d80f bhi.n 108480 <IMFS_memfile_write+0x68>
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
108460: 4631 mov r1, r6
108462: 2200 movs r2, #0
108464: 4648 mov r0, r9
my_length -= to_copy;
108466: 1b2d subs r5, r5, r4
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
108468: f7ff fe02 bl 108070 <IMFS_memfile_get_block_pointer>
block++;
10846c: 3601 adds r6, #1
memcpy( &(*block_ptr)[ 0 ], src, to_copy );
10846e: 4639 mov r1, r7
108470: 4622 mov r2, r4
src += to_copy;
108472: 4427 add r7, r4
if ( !block_ptr )
108474: 2800 cmp r0, #0
108476: d1ed bne.n 108454 <IMFS_memfile_write+0x3c> <== NEVER TAKEN
}
108478: 4640 mov r0, r8
10847a: b005 add sp, #20
10847c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
if ( my_length ) {
108480: b165 cbz r5, 10849c <IMFS_memfile_write+0x84>
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
108482: 4631 mov r1, r6
108484: 2200 movs r2, #0
108486: 4648 mov r0, r9
108488: f7ff fdf2 bl 108070 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
10848c: 2800 cmp r0, #0
10848e: d0f3 beq.n 108478 <IMFS_memfile_write+0x60> <== ALWAYS TAKEN
memcpy( &(*block_ptr)[ 0 ], src, my_length );
108490: 6800 ldr r0, [r0, #0]
108492: 462a mov r2, r5
108494: 4639 mov r1, r7
copied += to_copy;
108496: 44a8 add r8, r5
memcpy( &(*block_ptr)[ 0 ], src, my_length );
108498: f008 eb12 blx 110ac0 <memcpy>
_Timecounter_Getbintime( &now );
10849c: 4668 mov r0, sp
10849e: f001 fc0f bl 109cc0 <_Timecounter_Getbintime>
return now.sec;
1084a2: e9dd 2300 ldrd r2, r3, [sp]
}
1084a6: 4640 mov r0, r8
jnode->stat_mtime = now;
1084a8: e9c9 230a strd r2, r3, [r9, #40] ; 0x28
jnode->stat_ctime = now;
1084ac: e9c9 230c strd r2, r3, [r9, #48] ; 0x30
1084b0: b005 add sp, #20
1084b2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc}
bool zero_fill = start > memfile->File.size;
1084b6: 42a3 cmp r3, r4
status = IMFS_memfile_extend( memfile, zero_fill, last_byte );
1084b8: f04f 0300 mov.w r3, #0
bool zero_fill = start > memfile->File.size;
1084bc: eb73 0106 sbcs.w r1, r3, r6
status = IMFS_memfile_extend( memfile, zero_fill, last_byte );
1084c0: bfb4 ite lt
1084c2: 2101 movlt r1, #1
1084c4: 4619 movge r1, r3
1084c6: f7ff fe87 bl 1081d8 <IMFS_memfile_extend>
if ( status )
1084ca: 4680 mov r8, r0
1084cc: 2800 cmp r0, #0
1084ce: d0af beq.n 108430 <IMFS_memfile_write+0x18>
1084d0: e7d2 b.n 108478 <IMFS_memfile_write+0x60>
block_ptr = IMFS_memfile_get_block_pointer( memfile, block, 0 );
1084d2: 2200 movs r2, #0
1084d4: 4631 mov r1, r6
1084d6: 4648 mov r0, r9
1084d8: f7ff fdca bl 108070 <IMFS_memfile_get_block_pointer>
if ( !block_ptr )
1084dc: b170 cbz r0, 1084fc <IMFS_memfile_write+0xe4>
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
1084de: 6800 ldr r0, [r0, #0]
to_copy = IMFS_MEMFILE_BYTES_PER_BLOCK - start_offset;
1084e0: eba4 0208 sub.w r2, r4, r8
1084e4: 42aa cmp r2, r5
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
1084e6: 4639 mov r1, r7
1084e8: bf28 it cs
1084ea: 462a movcs r2, r5
block++;
1084ec: 3601 adds r6, #1
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
1084ee: 4440 add r0, r8
my_length -= to_copy;
1084f0: 1aad subs r5, r5, r2
src += to_copy;
1084f2: 4417 add r7, r2
copied += to_copy;
1084f4: 4690 mov r8, r2
memcpy( &(*block_ptr)[ start_offset ], src, to_copy );
1084f6: f008 eae4 blx 110ac0 <memcpy>
copied += to_copy;
1084fa: e7a8 b.n 10844e <IMFS_memfile_write+0x36>
return copied;
1084fc: 4680 mov r8, r0 <== NOT EXECUTED
1084fe: e7bb b.n 108478 <IMFS_memfile_write+0x60> <== NOT EXECUTED
001085a8 <IMFS_mount>:
#include <rtems/imfs.h>
int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
1085a8: 6a02 ldr r2, [r0, #32]
{
1085aa: b508 push {r3, lr}
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
1085ac: 6891 ldr r1, [r2, #8]
return S_ISDIR( node->st_mode );
1085ae: 694a ldr r2, [r1, #20]
1085b0: f402 4270 and.w r2, r2, #61440 ; 0xf000
if ( IMFS_is_directory( node ) ) {
1085b4: f5b2 4f80 cmp.w r2, #16384 ; 0x4000
1085b8: d10c bne.n 1085d4 <IMFS_mount+0x2c>
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( dir->mt_fs == NULL ) {
1085ba: 4603 mov r3, r0
1085bc: 6cc8 ldr r0, [r1, #76] ; 0x4c
1085be: b908 cbnz r0, 1085c4 <IMFS_mount+0x1c>
dir->mt_fs = mt_entry;
1085c0: 64cb str r3, [r1, #76] ; 0x4c
errno = ENOTDIR;
rv = -1;
}
return rv;
}
1085c2: bd08 pop {r3, pc}
errno = EBUSY;
1085c4: f008 f8b2 bl 11072c <__errno> <== NOT EXECUTED
1085c8: 2210 movs r2, #16 <== NOT EXECUTED
1085ca: 4603 mov r3, r0 <== NOT EXECUTED
1085cc: 601a str r2, [r3, #0] <== NOT EXECUTED
rv = -1;
1085ce: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff <== NOT EXECUTED
}
1085d2: bd08 pop {r3, pc} <== NOT EXECUTED
errno = ENOTDIR;
1085d4: f008 f8aa bl 11072c <__errno>
1085d8: 2214 movs r2, #20
1085da: 4603 mov r3, r0
1085dc: 601a str r2, [r3, #0]
rv = -1;
1085de: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
}
1085e2: bd08 pop {r3, pc}
0010dfe4 <IMFS_node_remove_directory>:
IMFS_jnode_t *IMFS_node_remove_directory( IMFS_jnode_t *node )
{
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( !rtems_chain_is_empty( &dir->Entries ) ) {
10dfe4: 6c02 ldr r2, [r0, #64] ; 0x40
{
10dfe6: b508 push {r3, lr}
return &the_chain->Tail.Node;
10dfe8: f100 0344 add.w r3, r0, #68 ; 0x44
if ( !rtems_chain_is_empty( &dir->Entries ) ) {
10dfec: 429a cmp r2, r3
10dfee: d006 beq.n 10dffe <IMFS_node_remove_directory+0x1a>
errno = ENOTEMPTY;
10dff0: f002 fb9c bl 11072c <__errno>
10dff4: 4603 mov r3, r0
dir = NULL;
10dff6: 2000 movs r0, #0
errno = ENOTEMPTY;
10dff8: 225a movs r2, #90 ; 0x5a
10dffa: 601a str r2, [r3, #0]
errno = EBUSY;
dir = NULL;
}
return &dir->Node;
}
10dffc: bd08 pop {r3, pc}
} else if ( IMFS_is_mount_point( dir ) ) {
10dffe: 6cc3 ldr r3, [r0, #76] ; 0x4c
10e000: 2b00 cmp r3, #0
10e002: d0fb beq.n 10dffc <IMFS_node_remove_directory+0x18> <== NEVER TAKEN
errno = EBUSY;
10e004: f002 fb92 bl 11072c <__errno> <== NOT EXECUTED
10e008: 2210 movs r2, #16 <== NOT EXECUTED
10e00a: 4603 mov r3, r0 <== NOT EXECUTED
10e00c: 601a str r2, [r3, #0] <== NOT EXECUTED
dir = NULL;
10e00e: 2000 movs r0, #0 <== NOT EXECUTED
}
10e010: bd08 pop {r3, pc} <== NOT EXECUTED
10e012: bf00 nop
00108890 <IMFS_readlink>:
{
108890: b410 push {r4}
sym_link = loc->node_access;
108892: 6884 ldr r4, [r0, #8]
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
108894: b172 cbz r2, 1088b4 <IMFS_readlink+0x24>
108896: 3901 subs r1, #1
108898: 2000 movs r0, #0
10889a: e004 b.n 1088a6 <IMFS_readlink+0x16>
10889c: 3001 adds r0, #1
buf[i] = sym_link->name[i];
10889e: f801 3f01 strb.w r3, [r1, #1]!
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
1088a2: 4290 cmp r0, r2
1088a4: d003 beq.n 1088ae <IMFS_readlink+0x1e>
1088a6: 6c23 ldr r3, [r4, #64] ; 0x40
1088a8: 5c1b ldrb r3, [r3, r0]
1088aa: 2b00 cmp r3, #0
1088ac: d1f6 bne.n 10889c <IMFS_readlink+0xc>
}
1088ae: f85d 4b04 ldr.w r4, [sp], #4
1088b2: 4770 bx lr
for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
1088b4: 4610 mov r0, r2 <== NOT EXECUTED
1088b6: e7fa b.n 1088ae <IMFS_readlink+0x1e> <== NOT EXECUTED
00108698 <IMFS_rename>:
const rtems_filesystem_location_info_t *oldloc,
const rtems_filesystem_location_info_t *newparentloc,
const char *name,
size_t namelen
)
{
108698: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
10869c: 461e mov r6, r3
/*
* FIXME: Due to insufficient checks we can create inaccessible nodes with
* this operation.
*/
node = oldloc->node_access;
10869e: 688c ldr r4, [r1, #8]
{
1086a0: b085 sub sp, #20
1086a2: 9f0e ldr r7, [sp, #56] ; 0x38
new_parent = newparentloc->node_access;
if ( node->Parent == NULL ) {
1086a4: 68a3 ldr r3, [r4, #8]
new_parent = newparentloc->node_access;
1086a6: f8d2 8008 ldr.w r8, [r2, #8]
if ( node->Parent == NULL ) {
1086aa: 2b00 cmp r3, #0
1086ac: d04d beq.n 10874a <IMFS_rename+0xb2> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( EINVAL );
}
if ( namelen >= IMFS_NAME_MAX ) {
1086ae: 2ffe cmp r7, #254 ; 0xfe
1086b0: d843 bhi.n 10873a <IMFS_rename+0xa2>
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
}
control = malloc( sizeof( *control ) + namelen );
1086b2: f107 0014 add.w r0, r7, #20
1086b6: f7fd ff77 bl 1065a8 <malloc>
if ( control == NULL ) {
1086ba: 4605 mov r5, r0
1086bc: 2800 cmp r0, #0
1086be: d04c beq.n 10875a <IMFS_rename+0xc2> <== ALWAYS TAKEN
rtems_set_errno_and_return_minus_one( ENOMEM );
}
memcpy( control->name, name, namelen );
1086c0: f100 0a14 add.w sl, r0, #20
1086c4: 4631 mov r1, r6
1086c6: 463a mov r2, r7
1086c8: 4650 mov r0, sl
1086ca: f008 e9fa blx 110ac0 <memcpy>
if ( node->control->node_destroy == IMFS_renamed_destroy ) {
1086ce: 6ba6 ldr r6, [r4, #56] ; 0x38
1086d0: f248 697d movw r9, #34429 ; 0x867d
1086d4: f2c0 0910 movt r9, #16
1086d8: 68f3 ldr r3, [r6, #12]
1086da: 454b cmp r3, r9
1086dc: d026 beq.n 10872c <IMFS_rename+0x94>
IMFS_restore_replaced_control( node );
}
control->Base = *node->control;
1086de: e896 000f ldmia.w r6, {r0, r1, r2, r3}
return &the_chain->Tail.Node;
1086e2: f108 0e44 add.w lr, r8, #68 ; 0x44
previous = the_node->previous;
1086e6: e9d4 bc00 ldrd fp, ip, [r4]
1086ea: e885 000f stmia.w r5, {r0, r1, r2, r3}
_Timecounter_Getbintime( &now );
1086ee: 4668 mov r0, sp
control->Base.node_destroy = IMFS_renamed_destroy;
1086f0: e9c5 9603 strd r9, r6, [r5, #12]
control->replaced = node->control;
node->control = &control->Base;
1086f4: 63a5 str r5, [r4, #56] ; 0x38
node->name = control->name;
1086f6: f8c4 a00c str.w sl, [r4, #12]
node->namelen = namelen;
1086fa: 8227 strh r7, [r4, #16]
next->previous = previous;
1086fc: f8cb c004 str.w ip, [fp, #4]
old_last = tail->previous;
108700: f8d8 3048 ldr.w r3, [r8, #72] ; 0x48
previous->next = next;
108704: f8cc b000 str.w fp, [ip]
entry_node->Parent = dir_node;
108708: f8c4 8008 str.w r8, [r4, #8]
the_node->next = tail;
10870c: f8c4 e000 str.w lr, [r4]
tail->previous = the_node;
108710: f8c8 4048 str.w r4, [r8, #72] ; 0x48
old_last->next = the_node;
108714: 601c str r4, [r3, #0]
the_node->previous = old_last;
108716: 6063 str r3, [r4, #4]
_Timecounter_Getbintime( &now );
108718: f001 fad2 bl 109cc0 <_Timecounter_Getbintime>
return now.sec;
10871c: e9dd 2300 ldrd r2, r3, [sp]
IMFS_remove_from_directory( node );
IMFS_add_to_directory( new_parent, node );
IMFS_update_ctime( node );
return 0;
108720: 2000 movs r0, #0
jnode->stat_ctime = _IMFS_get_time();
108722: e9c4 230c strd r2, r3, [r4, #48] ; 0x30
}
108726: b005 add sp, #20
108728: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
node->control = control->replaced;
10872c: 6933 ldr r3, [r6, #16]
free( control );
10872e: 4630 mov r0, r6
node->control = control->replaced;
108730: 63a3 str r3, [r4, #56] ; 0x38
free( control );
108732: f7fd fd61 bl 1061f8 <free>
control->Base = *node->control;
108736: 6ba6 ldr r6, [r4, #56] ; 0x38
}
108738: e7d1 b.n 1086de <IMFS_rename+0x46>
rtems_set_errno_and_return_minus_one( ENAMETOOLONG );
10873a: f007 fff7 bl 11072c <__errno>
10873e: 225b movs r2, #91 ; 0x5b
108740: 4603 mov r3, r0
108742: 601a str r2, [r3, #0]
108744: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
108748: e7ed b.n 108726 <IMFS_rename+0x8e>
rtems_set_errno_and_return_minus_one( EINVAL );
10874a: f007 ffef bl 11072c <__errno> <== NOT EXECUTED
10874e: 2216 movs r2, #22 <== NOT EXECUTED
108750: 4603 mov r3, r0 <== NOT EXECUTED
108752: 601a str r2, [r3, #0] <== NOT EXECUTED
108754: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff <== NOT EXECUTED
108758: e7e5 b.n 108726 <IMFS_rename+0x8e> <== NOT EXECUTED
rtems_set_errno_and_return_minus_one( ENOMEM );
10875a: f007 ffe7 bl 11072c <__errno> <== NOT EXECUTED
10875e: 220c movs r2, #12 <== NOT EXECUTED
108760: 4603 mov r3, r0 <== NOT EXECUTED
108762: 601a str r2, [r3, #0] <== NOT EXECUTED
108764: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff <== NOT EXECUTED
108768: e7dd b.n 108726 <IMFS_rename+0x8e> <== NOT EXECUTED
10876a: bf00 nop
001088b8 <IMFS_unmount>:
#endif
#include <rtems/imfs.h>
int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
1088b8: b508 push {r3, lr}
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
1088ba: 6a03 ldr r3, [r0, #32]
1088bc: 689a ldr r2, [r3, #8]
return S_ISDIR( node->st_mode );
1088be: 6953 ldr r3, [r2, #20]
1088c0: f403 4370 and.w r3, r3, #61440 ; 0xf000
if ( IMFS_is_directory( node ) ) {
1088c4: f5b3 4f80 cmp.w r3, #16384 ; 0x4000
1088c8: d10e bne.n 1088e8 <IMFS_unmount+0x30> <== ALWAYS TAKEN
IMFS_directory_t *dir = (IMFS_directory_t *) node;
if ( dir->mt_fs == mt_entry ) {
1088ca: 6cd3 ldr r3, [r2, #76] ; 0x4c
1088cc: 4283 cmp r3, r0
1088ce: d103 bne.n 1088d8 <IMFS_unmount+0x20> <== ALWAYS TAKEN
dir->mt_fs = NULL;
1088d0: 2300 movs r3, #0
int rv = 0;
1088d2: 4618 mov r0, r3
dir->mt_fs = NULL;
1088d4: 64d3 str r3, [r2, #76] ; 0x4c
errno = ENOTDIR;
rv = -1;
}
return rv;
}
1088d6: bd08 pop {r3, pc}
errno = EINVAL;
1088d8: f007 ff28 bl 11072c <__errno> <== NOT EXECUTED
1088dc: 2216 movs r2, #22 <== NOT EXECUTED
1088de: 4603 mov r3, r0 <== NOT EXECUTED
1088e0: 601a str r2, [r3, #0] <== NOT EXECUTED
rv = -1;
1088e2: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff <== NOT EXECUTED
}
1088e6: bd08 pop {r3, pc} <== NOT EXECUTED
errno = ENOTDIR;
1088e8: f007 ff20 bl 11072c <__errno> <== NOT EXECUTED
1088ec: 2214 movs r2, #20 <== NOT EXECUTED
1088ee: 4603 mov r3, r0 <== NOT EXECUTED
1088f0: 601a str r2, [r3, #0] <== NOT EXECUTED
rv = -1;
1088f2: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff <== NOT EXECUTED
}
1088f6: bd08 pop {r3, pc} <== NOT EXECUTED
0010df50 <device_ftruncate>:
rtems_libio_t *iop,
off_t length
)
{
return 0;
}
10df50: 2000 movs r0, #0 <== NOT EXECUTED
10df52: 4770 bx lr <== NOT EXECUTED
00106fb8 <rtems_tarfs_load>:
int rtems_tarfs_load(
const char *mountpoint,
uint8_t *tar_image,
size_t tar_size
)
{
106fb8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
106fbc: b0ee sub sp, #440 ; 0x1b8
106fbe: 4607 mov r7, r0
106fc0: 460d mov r5, r1
106fc2: 4616 mov r6, r2
char buf[ 156 + UNTAR_FILE_NAME_SIZE ];
size_t len;
Untar_HeaderContext ctx;
unsigned long ptr;
len = strlen( mountpoint );
106fc4: f011 f8fc bl 1181c0 <strlen>
if ( len >= sizeof( buf ) - UNTAR_FILE_NAME_SIZE - 2 ) {
106fc8: 2899 cmp r0, #153 ; 0x99
106fca: d830 bhi.n 10702e <rtems_tarfs_load+0x76> <== ALWAYS TAKEN
return -1;
}
eval_flags = RTEMS_FS_FOLLOW_LINK;
loc = rtems_filesystem_eval_path_start( &eval_ctx, mountpoint, eval_flags );
106fcc: 2218 movs r2, #24
106fce: 4639 mov r1, r7
106fd0: 4604 mov r4, r0
106fd2: 4668 mov r0, sp
106fd4: f7fe fe92 bl 105cfc <rtems_filesystem_eval_path_start>
return loc->mt_entry->ops->clonenod_h == IMFS_node_clone;
106fd8: 6943 ldr r3, [r0, #20]
is_imfs = IMFS_is_imfs_instance( loc );
rtems_filesystem_eval_path_cleanup( &eval_ctx );
106fda: 4668 mov r0, sp
106fdc: 68db ldr r3, [r3, #12]
106fde: f8d3 8024 ldr.w r8, [r3, #36] ; 0x24
106fe2: f7fe ff0f bl 105e04 <rtems_filesystem_eval_path_cleanup>
if ( !is_imfs ) {
106fe6: f647 0311 movw r3, #30737 ; 0x7811
106fea: f2c0 0310 movt r3, #16
106fee: 4598 cmp r8, r3
106ff0: d11d bne.n 10702e <rtems_tarfs_load+0x76>
return -1;
}
ctx.printer = NULL;
106ff2: 2300 movs r3, #0
ctx.file_path = memcpy( buf, mountpoint, len );
106ff4: 4639 mov r1, r7
106ff6: 4622 mov r2, r4
106ff8: a82e add r0, sp, #184 ; 0xb8
ctx.printer = NULL;
106ffa: 932d str r3, [sp, #180] ; 0xb4
ctx.file_path = memcpy( buf, mountpoint, len );
106ffc: f00f e840 blx 116080 <memcpy>
107000: 900e str r0, [sp, #56] ; 0x38
if ( len > 0 && ctx.file_path[ len - 1 ] != '/') {
107002: b9cc cbnz r4, 107038 <rtems_tarfs_load+0x80>
ctx.file_path[ len ] = '/';
ctx.file_name = ctx.file_path + len + 1;
} else {
ctx.file_name = ctx.file_path + len;
107004: 900f str r0, [sp, #60] ; 0x3c
107006: 2400 movs r4, #0
107008: e006 b.n 107018 <rtems_tarfs_load+0x60>
ptr = 0;
while ( ptr + 512 <= tar_size ) {
int retval;
retval = Untar_ProcessHeader( &ctx, (const char *) &tar_image[ ptr ] );
10700a: f000 febf bl 107d8c <Untar_ProcessHeader>
if ( retval != UNTAR_SUCCESSFUL ) {
10700e: b970 cbnz r0, 10702e <rtems_tarfs_load+0x76>
return -1;
}
ptr += 512;
if ( ctx.linkflag == REGTYPE ) {
107010: f89d 30b0 ldrb.w r3, [sp, #176] ; 0xb0
107014: 2b30 cmp r3, #48 ; 0x30
107016: d01a beq.n 10704e <rtems_tarfs_load+0x96>
while ( ptr + 512 <= tar_size ) {
107018: 4621 mov r1, r4
10701a: f504 7400 add.w r4, r4, #512 ; 0x200
10701e: 42b4 cmp r4, r6
retval = Untar_ProcessHeader( &ctx, (const char *) &tar_image[ ptr ] );
107020: 4429 add r1, r5
107022: a80e add r0, sp, #56 ; 0x38
while ( ptr + 512 <= tar_size ) {
107024: d9f1 bls.n 10700a <rtems_tarfs_load+0x52>
ptr += 512 * ctx.nblocks;
}
}
return 0;
107026: 2000 movs r0, #0
}
107028: b06e add sp, #440 ; 0x1b8
10702a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
return -1;
10702e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
}
107032: b06e add sp, #440 ; 0x1b8
107034: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
ctx.file_path[ len ] = '/';
107038: 1903 adds r3, r0, r4
if ( len > 0 && ctx.file_path[ len - 1 ] != '/') {
10703a: f813 2c01 ldrb.w r2, [r3, #-1]
10703e: 2a2f cmp r2, #47 ; 0x2f
107040: d011 beq.n 107066 <rtems_tarfs_load+0xae> <== NEVER TAKEN
ctx.file_name = ctx.file_path + len + 1;
107042: 1c63 adds r3, r4, #1 <== NOT EXECUTED
107044: 4403 add r3, r0 <== NOT EXECUTED
107046: 930f str r3, [sp, #60] ; 0x3c <== NOT EXECUTED
ctx.file_path[ len ] = '/';
107048: 232f movs r3, #47 ; 0x2f <== NOT EXECUTED
10704a: 5503 strb r3, [r0, r4] <== NOT EXECUTED
ctx.file_name = ctx.file_path + len + 1;
10704c: e7db b.n 107006 <rtems_tarfs_load+0x4e> <== NOT EXECUTED
retval = IMFS_make_linearfile(
10704e: e9dd 1329 ldrd r1, r3, [sp, #164] ; 0xa4
107052: 192a adds r2, r5, r4
107054: 980e ldr r0, [sp, #56] ; 0x38
107056: f000 f867 bl 107128 <IMFS_make_linearfile>
if ( retval != 0 ) {
10705a: 2800 cmp r0, #0
10705c: d1e7 bne.n 10702e <rtems_tarfs_load+0x76> <== ALWAYS TAKEN
ptr += 512 * ctx.nblocks;
10705e: 9b2b ldr r3, [sp, #172] ; 0xac
107060: eb04 2443 add.w r4, r4, r3, lsl #9
107064: e7d8 b.n 107018 <rtems_tarfs_load+0x60>
107066: 4618 mov r0, r3
107068: e7cc b.n 107004 <rtems_tarfs_load+0x4c>
10706a: bf00 nop