=============================================================================== 001079cc : #endif #include 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 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 <== ALWAYS TAKEN 1079ec: d90d bls.n 107a0a <== 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 <== 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 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 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 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_cleanup( &ctx ); 107a40: a806 add r0, sp, #24 107a42: f7ff fbe5 bl 107210 } 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 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 if ( rtems_filesystem_eval_path_get_token( &ctx ) != NULL ) { 107a66: b17b cbz r3, 107a88 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 107a74: e7e4 b.n 107a40 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 if ( node != NULL ) { 107a84: 4603 mov r3, r0 107a86: b910 cbnz r0, 107a8e rv = -1; 107a88: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff 107a8c: e7d8 b.n 107a40 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 107ab6: bf00 nop =============================================================================== 00108674 : void IMFS_do_nothing_destroy( IMFS_jnode_t *node ) { (void) node; } 108674: 4770 bx lr <== NOT EXECUTED 108676: bf00 nop =============================================================================== 00105510 : 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 ) && 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 <== 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 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 105536: 462a mov r2, r5 105538: 4641 mov r1, r8 10553a: 4620 mov r0, r4 10553c: f005 fae0 bl 10ab00 105540: 2800 cmp r0, #0 105542: d1f1 bne.n 105528 <== 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 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 <== NEVER TAKEN 105560: e025 b.n 1055ae <== NOT EXECUTED return the_node->next; 105562: 6824 ldr r4, [r4, #0] 105564: 45a1 cmp r9, r4 105566: d022 beq.n 1055ae 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 10556e: 68e0 ldr r0, [r4, #12] 105570: 462a mov r2, r5 105572: 4641 mov r1, r8 105574: f005 fac4 bl 10ab00 105578: 2800 cmp r0, #0 10557a: d1f2 bne.n 105562 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 <== 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 <== 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 1055b8: 0010ba21 .word 0x0010ba21 =============================================================================== 00108878 : ((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 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 if ( IMFS_is_directory( jnode ) ) { if ( jnode_has_children( jnode ) ) jnode = jnode_get_first_child( jnode ); } } } while (jnode != NULL); 1088ae: b1da cbz r2, 1088e8 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 result = IMFS_rmnod( NULL, &loc ); 1088bc: 4669 mov r1, sp 1088be: 2000 movs r0, #0 1088c0: f7fe f80e bl 1068e0 if ( result != 0 ) 1088c4: b990 cbnz r0, 1088ec IMFS_node_destroy( jnode ); 1088c6: 4620 mov r0, r4 1088c8: f7fd ff80 bl 1067cc if ( jnode != NULL ) { 1088cc: b165 cbz r5, 1088e8 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 <== 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 1088e4: 462c mov r4, r5 1088e6: e7d5 b.n 108894 } 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 <== NOT EXECUTED =============================================================================== 00107eb4 : 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 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 107ed6: d90e bls.n 107ef6 107ed8: f404 4330 and.w r3, r4, #45056 ; 0xb000 107edc: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 107ee0: d00f beq.n 107f02 <== 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 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 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 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_cleanup( &ctx ); 107f2c: a808 add r0, sp, #32 107f2e: f7ff f96f bl 107210 } 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 if ( new_node != NULL ) { 107f52: 2800 cmp r0, #0 107f54: d0ea beq.n 107f2c _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 107f6e: bf00 nop =============================================================================== 00108418 : { 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 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 while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 10844e: 42a5 cmp r5, r4 108450: d206 bcs.n 108460 108452: e015 b.n 108480 memcpy( &(*block_ptr)[ 0 ], src, to_copy ); 108454: 6800 ldr r0, [r0, #0] 108456: 44a0 add r8, r4 108458: f008 eb32 blx 110ac0 while ( my_length >= IMFS_MEMFILE_BYTES_PER_BLOCK ) { 10845c: 42ac cmp r4, r5 10845e: d80f bhi.n 108480 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 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 <== 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 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 if ( !block_ptr ) 10848c: 2800 cmp r0, #0 10848e: d0f3 beq.n 108478 <== 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 _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 if ( status ) 1084ca: 4680 mov r8, r0 1084cc: 2800 cmp r0, #0 1084ce: d0af beq.n 108430 1084d0: e7d2 b.n 108478 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 if ( !block_ptr ) 1084dc: b170 cbz r0, 1084fc 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 copied += to_copy; 1084fa: e7a8 b.n 10844e return copied; 1084fc: 4680 mov r8, r0 <== NOT EXECUTED 1084fe: e7bb b.n 108478 <== NOT EXECUTED =============================================================================== 001085a8 : #include 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_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 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_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 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 <== 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 : { 108890: b410 push {r4} sym_link = loc->node_access; 108892: 6884 ldr r4, [r0, #8] for( i=0; ((iname[i] != '\0')); i++ ) 108894: b172 cbz r2, 1088b4 108896: 3901 subs r1, #1 108898: 2000 movs r0, #0 10889a: e004 b.n 1088a6 10889c: 3001 adds r0, #1 buf[i] = sym_link->name[i]; 10889e: f801 3f01 strb.w r3, [r1, #1]! for( i=0; ((iname[i] != '\0')); i++ ) 1088a2: 4290 cmp r0, r2 1088a4: d003 beq.n 1088ae 1088a6: 6c23 ldr r3, [r4, #64] ; 0x40 1088a8: 5c1b ldrb r3, [r3, r0] 1088aa: 2b00 cmp r3, #0 1088ac: d1f6 bne.n 10889c } 1088ae: f85d 4b04 ldr.w r4, [sp], #4 1088b2: 4770 bx lr for( i=0; ((iname[i] != '\0')); i++ ) 1088b4: 4610 mov r0, r2 <== NOT EXECUTED 1088b6: e7fa b.n 1088ae <== NOT EXECUTED =============================================================================== 00108698 : 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 <== 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 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 if ( control == NULL ) { 1086ba: 4605 mov r5, r0 1086bc: 2800 cmp r0, #0 1086be: d04c beq.n 10875a <== 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 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_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 control->Base = *node->control; 108736: 6ba6 ldr r6, [r4, #56] ; 0x38 } 108738: e7d1 b.n 1086de 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 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 <== 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 <== NOT EXECUTED 10876a: bf00 nop =============================================================================== 001088b8 : #endif #include 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 <== 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 <== 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 : rtems_libio_t *iop, off_t length ) { return 0; } 10df50: 2000 movs r0, #0 <== NOT EXECUTED 10df52: 4770 bx lr <== NOT EXECUTED =============================================================================== 00106fb8 : 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 if ( len >= sizeof( buf ) - UNTAR_FILE_NAME_SIZE - 2 ) { 106fc8: 2899 cmp r0, #153 ; 0x99 106fca: d830 bhi.n 10702e <== 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 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 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 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 107000: 900e str r0, [sp, #56] ; 0x38 if ( len > 0 && ctx.file_path[ len - 1 ] != '/') { 107002: b9cc cbnz r4, 107038 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 ptr = 0; while ( ptr + 512 <= tar_size ) { int retval; retval = Untar_ProcessHeader( &ctx, (const char *) &tar_image[ ptr ] ); 10700a: f000 febf bl 107d8c if ( retval != UNTAR_SUCCESSFUL ) { 10700e: b970 cbnz r0, 10702e 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 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 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 <== 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 <== 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 if ( retval != 0 ) { 10705a: 2800 cmp r0, #0 10705c: d1e7 bne.n 10702e <== 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 107066: 4618 mov r0, r3 107068: e7cc b.n 107004 10706a: bf00 nop